17 #include <chi/chi_tlm.h>
18 #include <tlm/scc/tlm_id.h>
19 #include <tlm/scc/scv/tlm_extension_recording_registry.h>
20 #include <tlm/scc/lwtr/lwtr4tlm2_extension_registry.h>
28 ar & field(
"qos", e.get_qos());
29 ar & field(
"src_id", e.get_src_id());
30 ar & field(
"txn_id", e.get_txn_id());
31 ar & field(
"tgt_id", e.req.get_tgt_id());
32 ar & field(
"lp_id", e.req.get_lp_id());
33 ar & field(
"return_txn_id", e.req.get_return_txn_id());
34 ar & field(
"stash_lp_id", e.req.get_stash_lp_id());
35 ar & field(
"size", e.req.get_size());
36 ar & field(
"mem_attr", e.req.get_mem_attr());
37 ar & field(
"req.pcrd_type", e.req.get_pcrd_type());
38 ar & field(
"order", e.req.get_order());
39 ar & field(
"endian", e.req.is_endian());
40 ar & field(
"req.trace_tag", e.req.is_trace_tag());
41 ar & field(
"return_n_id", e.req.get_return_n_id());
42 ar & field(
"stash_n_id", e.req.get_stash_n_id());
43 ar & field(
"opcode",
to_char(e.req.get_opcode()));
44 ar & field(
"stash_nnode_id_valid", e.req.is_stash_n_id_valid());
45 ar & field(
"stash_lp_id_valid", e.req.is_stash_lp_id_valid());
46 ar & field(
"non_secure", e.req.is_non_secure());
47 ar & field(
"exp_comp_ack", e.req.is_exp_comp_ack());
48 ar & field(
"allow_retry", e.req.is_allow_retry());
49 ar & field(
"snp_attr", e.req.is_snp_attr());
50 ar & field(
"excl", e.req.is_excl());
51 ar & field(
"snoop_me", e.req.is_snoop_me());
52 ar & field(
"likely_shared", e.req.is_likely_shared());
53 ar & field(
"txn_rsvdc", e.req.get_rsvdc());
54 ar & field(
"tag_op", e.req.get_tag_op());
55 ar & field(
"tag_group_id", e.req.get_tag_group_id());
56 ar & field(
"mpam", e.req.get_mpam());
57 ar & field(
"rsp.db_id", e.resp.get_db_id());
58 ar & field(
"rsp.pcrd_type", e.resp.get_pcrd_type());
59 ar & field(
"rsp.resp_err",
to_char(e.resp.get_resp_err()));
60 ar & field(
"rsp.fwd_state", e.resp.get_fwd_state());
61 ar & field(
"rsp.data_pull", e.resp.get_data_pull());
62 ar & field(
"rsp.opcode",
to_char(e.resp.get_opcode()));
63 ar & field(
"rsp.resp",
to_char(e.resp.get_resp()));
64 ar & field(
"rsp.tgt_id", e.resp.get_tgt_id());
65 ar & field(
"rsp.trace_tag", e.resp.is_trace_tag());
66 ar & field(
"rsp.tag_op", e.resp.get_tag_op());
67 ar & field(
"rsp.tag_group_id", e.resp.get_tag_group_id());
72 ar & field(
"qos", e.get_qos());
73 ar & field(
"src_id", e.get_src_id());
74 ar & field(
"txn_id", e.get_txn_id());
75 ar & field(
"db_id", e.dat.get_db_id());
76 ar & field(
"resp_err",
to_char(e.dat.get_resp_err()));
77 ar & field(
"resp",
to_char(e.dat.get_resp()));
78 ar & field(
"fwd_state", e.dat.get_fwd_state());
79 ar & field(
"data_pull", e.dat.get_data_pull());
80 ar & field(
"data_source", e.dat.get_data_source());
81 ar & field(
"cc_id", e.dat.get_cc_id());
82 ar & field(
"data_id", e.dat.get_data_id());
83 ar & field(
"poison", e.dat.get_poison());
84 ar & field(
"tgt_id", e.dat.get_tgt_id());
85 ar & field(
"home_node_id", e.dat.get_home_n_id());
86 ar & field(
"opcode",
to_char(e.dat.get_opcode()));
87 ar & field(
"rsvdc", e.dat.get_rsvdc());
88 ar & field(
"data_check", e.dat.get_data_check());
89 ar & field(
"trace_tag", e.dat.is_trace_tag());
90 ar & field(
"tag_op", e.dat.get_tag_op());
91 ar & field(
"tag", e.dat.get_tag());
92 ar & field(
"tu", e.dat.get_tu());
96 ar & field(
"qos", e.get_qos());
97 ar & field(
"src_id", e.get_src_id());
98 ar & field(
"txn_id", e.get_txn_id());
99 ar & field(
"fwd_txn_id", e.req.get_fwd_txn_id());
100 ar & field(
"stash_lp_id", e.req.get_stash_lp_id());
101 ar & field(
"vm_id_ext", e.req.get_vm_id_ext());
102 ar & field(
"stash_lp_id_valid", e.req.is_stash_lp_id_valid());
103 ar & field(
"opcode",
to_char(e.req.get_opcode()));
104 ar & field(
"fwd_n_id", e.req.get_fwd_n_id());
105 ar & field(
"non_secure", e.req.is_non_secure());
106 ar & field(
"do_not_goto_sd", e.req.is_do_not_goto_sd());
107 ar & field(
"do_not_data_pull", e.req.is_do_not_data_pull());
108 ar & field(
"ret_to_src", e.req.is_ret_to_src());
109 ar & field(
"trace_tag", e.req.is_trace_tag());
110 ar & field(
"rsp.db_id", e.resp.get_db_id());
111 ar & field(
"rsp.pcrd_type", e.resp.get_pcrd_type());
112 ar & field(
"rsp.resp_err",
to_char(e.resp.get_resp_err()));
113 ar & field(
"rsp.fwd_state", e.resp.get_fwd_state());
114 ar & field(
"rsp.data_pull", e.resp.get_data_pull());
115 ar & field(
"rsp.opcode",
to_char(e.resp.get_opcode()));
116 ar & field(
"rsp.resp",
to_char(e.resp.get_resp()));
117 ar & field(
"rsp.tgt_id", e.resp.get_tgt_id());
118 ar & field(
"rsp.trace_tag", e.resp.is_trace_tag());
122 ar & field(
"type",
to_char(e.type));
123 ar & field(
"count", e.count);
130 const std::array<std::string, 3> cmd2char{{
"tlm::TLM_READ_COMMAND",
"tlm::TLM_WRITE_COMMAND",
"tlm::TLM_IGNORE_COMMAND"}};
131 const std::array<std::string, 7> resp2char{
132 {
"tlm::TLM_OK_RESPONSE",
"tlm::TLM_INCOMPLETE_RESPONSE",
"tlm::TLM_GENERIC_ERROR_RESPONSE",
"tlm::TLM_ADDRESS_ERROR_RESPONSE",
"tlm::TLM_COMMAND_ERROR_RESPONSE",
"tlm::TLM_BURST_ERROR_RESPONSE",
"tlm::TLM_BYTE_ENABLE_ERROR_RESPONSE"}};
133 const std::array<std::string, 3> gp_option2char{{
"tlm::TLM_MIN_PAYLOAD",
"tlm::TLM_FULL_PAYLOAD",
"tlm::TLM_FULL_PAYLOAD_ACCEPTED"}};
134 const std::array<std::string, 5> phase2char{{
"tlm::UNINITIALIZED_PHASE",
"tlm::BEGIN_REQ",
"tlm::END_REQ",
"tlm::BEGIN_RESP",
"tlm::END_RESP"}};
135 const std::array<std::string, 4> dmi2char{
136 {
"tlm::DMI_ACCESS_NONE",
"tlm::DMI_ACCESS_READ",
"tlm::DMI_ACCESS_WRITE",
"tlm::DMI_ACCESS_READ_WRITE"}};
137 const std::array<std::string, 3> sync2char{{
"tlm::TLM_ACCEPTED",
"tlm::TLM_UPDATED",
"tlm::TLM_COMPLETED"}};
142 void recordBeginTx(::lwtr::tx_handle& handle, tlm::tlm_base_protocol_types::tlm_payload_type& trans)
override {
144 handle.record_attribute(
"trans", *ext);
146 void recordEndTx(::lwtr::tx_handle& handle, tlm::tlm_base_protocol_types::tlm_payload_type& trans)
override { }
150 void recordBeginTx(::lwtr::tx_handle& handle, chi_protocol_types::tlm_payload_type& trans)
override {
152 handle.record_attribute(
"trans.chi_c", *ext);
154 void recordEndTx(::lwtr::tx_handle& handle, chi_protocol_types::tlm_payload_type& trans)
override { }
157 void recordBeginTx(::lwtr::tx_handle& handle, chi_protocol_types::tlm_payload_type& trans)
override {
159 handle.record_attribute(
"trans.chi_c", *ext);
161 void recordEndTx(::lwtr::tx_handle& handle, chi_protocol_types::tlm_payload_type& trans)
override { }
164 void recordBeginTx(::lwtr::tx_handle& handle, chi_protocol_types::tlm_payload_type& trans)
override {
166 handle.record_attribute(
"trans.chi_s", *ext);
168 void recordEndTx(::lwtr::tx_handle& handle, chi_protocol_types::tlm_payload_type& trans)
override { }
171 void recordBeginTx(::lwtr::tx_handle& handle, chi_protocol_types::tlm_payload_type& trans)
override {
173 handle.record_attribute(
"trans.chi_credit", *ext);
175 void recordEndTx(::lwtr::tx_handle& handle, chi_protocol_types::tlm_payload_type& trans)
override { }
179 #if defined(__GNUG__)
180 __attribute__((constructor))
182 bool register_extensions() {
200 bool registered = register_extensions();
The TLM transaction extensions recorder interface.
The TLM transaction extensions recorder registry.
const char * to_char(E t)
TLM2.0 components modeling CHI.