16#ifndef SIMICS_SYSTEMC_INJECTION_EXTENSION_INJECT_ETHERNET_COMMON_H
17#define SIMICS_SYSTEMC_INJECTION_EXTENSION_INJECT_ETHERNET_COMMON_H
38template <
typename TPAYLOAD>
44 simics::types::frags_frag_t *frag) {
45 if (!SIM_attr_is_data(*attr)) {
46 parser->reportError(
"fragslist must be data");
49 frag->start = SIM_attr_data(*attr);
50 frag->len = SIM_attr_data_size(*attr);
60 std::vector<attr_value_t> fraglist;
61 if (!p.
lookUp(
"fraglist", &fraglist))
65 parser->
reportError(
"fraglist must not exceed %i elements",
69 frags->
nfrags = fraglist.size();
71 std::vector<attr_value_t>::iterator i;
73 for (i = fraglist.begin(); i != fraglist.end(); ++i) {
82 attr_value_t *attr, TPAYLOAD *gp) {
86 attr_value_t frame_attr;
87 if (!p.
lookUp(
"frame", &frame_attr))
96 if (!p.
lookUp(
"crc_ok", &crc_ok))
100 ->frame(frame, crc_ok);
107 if (frames_.find(gp) != frames_.end()) {
114 std::map<TPAYLOAD *, simics::types::frags_t *> frames_;
#define ATTR_DICT_PARSER_NAMESPACE(ns)
Definition: attr_dict_parser.h:34
Definition: attr_dict_parser.h:40
void reportError(const char *str,...)
AttrDictParser init(const attr_value_t *attr)
bool lookUp(std::string key, T *v)
Definition: attr_dict_parser.h:55
Definition: inject_base.h:45
Definition: extension_setter.h:34
Definition: inject_ethernet_common.h:39
bool extractFrags(AttrDictParser *parser, const attr_value_t *attr, simics::types::frags_t *frags)
Definition: inject_ethernet_common.h:53
virtual void released(TPAYLOAD *gp)
Definition: inject_ethernet_common.h:106
virtual bool setValue(AttrDictParser *parser, const std::string &key, attr_value_t *attr, TPAYLOAD *gp)
Definition: inject_ethernet_common.h:81
bool extractFragsFrag(AttrDictParser *parser, const attr_value_t *attr, simics::types::frags_frag_t *frag)
Definition: inject_ethernet_common.h:43
#define MAX_FRAGS_FRAGS
Definition: frags.h:25
Definition: pci_bus_interface.h:24
size_t len
Definition: frags.h:39
frags_frag_t fraglist[MAX_FRAGS_FRAGS]
Definition: frags.h:41
unsigned nfrags
Definition: frags.h:40