C++ Device API Reference Manual
Reference documentation for the Simics C++ Device API.
 
Loading...
Searching...
No Matches
bank-instrumentation-subscribe-connection.h
Go to the documentation of this file.
1// -*- mode: C++; c-file-style: "virtutech-c++" -*-
2
3/*
4 © 2022 Intel Corporation
5
6 This software and the related documents are Intel copyrighted materials, and
7 your use of them is governed by the express license under which they were
8 provided to you ("License"). Unless the License provides otherwise, you may
9 not use, modify, copy, publish, distribute, disclose or transmit this software
10 or the related documents without Intel's prior written permission.
11
12 This software and the related documents are provided as is, with no express or
13 implied warranties, other than those that are expressly stated in the License.
14*/
15
16#ifndef SIMICS_BANK_INSTRUMENTATION_SUBSCRIBE_CONNECTION_H
17#define SIMICS_BANK_INSTRUMENTATION_SUBSCRIBE_CONNECTION_H
18
20#include <simics/c++/model-iface/bank-instrumentation.h>
21#include <simics/c++/model-iface/instrumentation-provider.h>
22
23#include <map>
24#include <vector>
25#include <tuple>
26#include <utility>
27
28namespace simics {
29
30class BankAccess;
31
32// Instrumentation connection and callback manager
33// According to API reference manual about "instrumentation_order":
34// The default order for callbacks that should be honored by all providers,
35// where possible, regardless if they implement the instrumentation_order
36// interface or not is:
37// 1. all anonymous connections, i.e. NULL connections,
38// 2. in registration order connection order, which if not re-ordered will be
39// the connection registration order
40// 3. callback registration order
42 : public iface::BankInstrumentationSubscribeInterface,
43 public iface::InstrumentationOrderInterface,
45 struct AfterRead {
46 uint64_t offset;
47 uint64_t size;
48 after_read_callback_t cb;
49 lang_void *user_data;
50 };
51 struct AfterWrite {
52 uint64_t offset;
53 uint64_t size;
54 after_write_callback_t cb;
55 lang_void *user_data;
56 };
57 struct BeforeRead {
58 uint64_t offset;
59 uint64_t size;
60 before_read_callback_t cb;
61 lang_void *user_data;
62 };
63 struct BeforeWrite {
64 uint64_t offset;
65 uint64_t size;
66 before_write_callback_t cb;
67 lang_void *user_data;
68 };
69 typedef std::map<bank_callback_handle_t, AfterRead> ar_map;
70 typedef std::map<bank_callback_handle_t, AfterWrite> aw_map;
71 typedef std::map<bank_callback_handle_t, BeforeRead> br_map;
72 typedef std::map<bank_callback_handle_t, BeforeWrite> bw_map;
73 typedef std::tuple<bool, ar_map, aw_map, br_map, bw_map> cb_tuple;
74 typedef std::pair<conf_object_t *, cb_tuple> conf_obj_cb_pair;
75 typedef std::vector<conf_obj_cb_pair>::iterator vect_iter;
76
77 public:
80
81 // iface::BankInstrumentationInterface
82 bank_callback_handle_t register_after_read(
83 conf_object_t *connection, uint64 offset, uint64 size,
84 after_read_callback_t after_read, lang_void *user_data) override;
85 bank_callback_handle_t register_after_write(
86 conf_object_t *connection, uint64 offset, uint64 size,
87 after_write_callback_t after_write, lang_void *user_data) override;
88 bank_callback_handle_t register_before_read(
89 conf_object_t *connection, uint64 offset, uint64 size,
90 before_read_callback_t before_read, lang_void *user_data) override;
91 bank_callback_handle_t register_before_write(
92 conf_object_t *connection, uint64 offset, uint64 size,
93 before_write_callback_t before_write,
94 lang_void *user_data) override;
95 void remove_callback(bank_callback_handle_t callback) override;
96 void remove_connection_callbacks(conf_object_t *connection) override;
97 void enable_connection_callbacks(conf_object_t *connection) override;
98 void disable_connection_callbacks(conf_object_t *connection) override;
99
100 // iface::InstrumentationOrderInterface
101 attr_value_t get_connections() override;
102 bool move_before(conf_object_t *connection, conf_object_t *before) override;
103
104 // iface::BankIssueCallbacksInterface
105 void issue_callbacks(BankAccess *access, CallbackType type) const override;
106
107 // Helper functions
108 bool empty() const;
109 // The total number of callbacks saved
110 unsigned int number_of_callbacks() const;
111
112 private:
113 void init_connection_callbacks(conf_object_t *connection);
114 vect_iter find_connection(conf_object_t *connection);
115
116 // Initialized once and used inside each tool callback to monitor and
117 // modify the state of current accesses
118 bank_after_read_interface_t ar_iface_;
119 bank_after_write_interface_t aw_iface_;
120 bank_before_read_interface_t br_iface_;
121 bank_before_write_interface_t bw_iface_;
122
123 bank_callback_handle_t handle_ {0};
124 std::vector<conf_obj_cb_pair> connection_callbacks_;
125};
126
127} // namespace simics
128
129#endif
struct conf_object conf_object_t
Definition: bank-issue-callbacks-interface.h:23
Definition: bank-instrumentation-subscribe-connection.h:44
bank_callback_handle_t register_after_write(conf_object_t *connection, uint64 offset, uint64 size, after_write_callback_t after_write, lang_void *user_data) override
void remove_callback(bank_callback_handle_t callback) override
bank_callback_handle_t register_before_write(conf_object_t *connection, uint64 offset, uint64 size, before_write_callback_t before_write, lang_void *user_data) override
bank_callback_handle_t register_before_read(conf_object_t *connection, uint64 offset, uint64 size, before_read_callback_t before_read, lang_void *user_data) override
void remove_connection_callbacks(conf_object_t *connection) override
void disable_connection_callbacks(conf_object_t *connection) override
void enable_connection_callbacks(conf_object_t *connection) override
void issue_callbacks(BankAccess *access, CallbackType type) const override
bank_callback_handle_t register_after_read(conf_object_t *connection, uint64 offset, uint64 size, after_read_callback_t after_read, lang_void *user_data) override
bool move_before(conf_object_t *connection, conf_object_t *before) override
Definition: bank-issue-callbacks-interface.h:31
Definition: attr-value.h:23
CallbackType
Definition: bank-issue-callbacks-interface.h:29
Definition: bank-access.h:43