14#ifndef SIMICS_SYSTEMC_INJECTION_INJECT_GP_H
15#define SIMICS_SYSTEMC_INJECTION_INJECT_GP_H
31template <
typename TPAYLOAD>
37 attr_value_t *attr, TPAYLOAD *gp)
override {
38 if (key ==
"command") {
40 if (!parser->value(&v))
43 if (v > tlm::TLM_IGNORE_COMMAND) {
44 parser->reportError(
"command must be in range [%i - %i]",
45 tlm::TLM_READ_COMMAND,
46 tlm::TLM_IGNORE_COMMAND);
50 gp->set_command(
static_cast<tlm::tlm_command
>(v));
51 }
else if (key ==
"address") {
53 if (!parser->value(&v))
57 }
else if (key ==
"data_ptr") {
58 const uint8_t *v = NULL;
59 if (!parser->value(&v))
62 gp->set_data_ptr(
const_cast<unsigned char*
>(v));
63 gp->set_data_length(SIM_attr_data_size(*attr));
64 gp->set_streaming_width(SIM_attr_data_size(*attr));
65 }
else if (key ==
"response_status") {
67 if (!parser->value(&v))
70 if (v > tlm::TLM_OK_RESPONSE ||
71 v < tlm::TLM_BYTE_ENABLE_ERROR_RESPONSE) {
72 parser->reportError(
"response_status value must be in range "
74 tlm::TLM_BYTE_ENABLE_ERROR_RESPONSE,
75 tlm::TLM_OK_RESPONSE);
79 gp->set_response_status(
static_cast<tlm::tlm_response_status
>(
81 }
else if (key ==
"streaming_width") {
83 if (!parser->value(&v))
86 gp->set_streaming_width(v);
87 }
else if (key ==
"byte_enable_ptr") {
89 if (!parser->value(&v))
92 gp->set_byte_enable_ptr(
reinterpret_cast<unsigned char *
>(v));
93 }
else if (key ==
"byte_enable_length") {
95 if (!parser->value(&v))
98 gp->set_byte_enable_length(v);
99 }
else if (key ==
"gp_option") {
101 if (!parser->value(&v))
104 if (v > tlm::TLM_FULL_PAYLOAD_ACCEPTED) {
105 parser->reportError(
"gp_option must be in range [%i - %i]",
106 tlm::TLM_MIN_PAYLOAD,
107 tlm::TLM_FULL_PAYLOAD_ACCEPTED);
111 gp->set_gp_option(
static_cast<tlm::tlm_gp_option
>(v));
112 }
else if (key ==
"dmi_allowed") {
114 if (!parser->value(&v))
117 gp->set_dmi_allowed(v);
#define ATTR_DICT_PARSER_NAMESPACE(ns)
Definition: attr_dict_parser.h:32
Definition: attr_dict_parser.h:38
Definition: inject_base.h:43
Definition: inject_gp.h:32
bool setValue(AttrDictParser *parser, const std::string &key, attr_value_t *attr, TPAYLOAD *gp) override
Definition: inject_gp.h:36