SystemC Library API Reference Manual
Reference documentation for the Simics SystemC Library.
 
Loading...
Searching...
No Matches
pcie_map_extension.h
Go to the documentation of this file.
1// -*- mode: C++; c-file-style: "virtutech-c++" -*-
2
3/*
4 © 2024 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_SYSTEMC_IFACE_PCIE_MAP_EXTENSION_H
17#define SIMICS_SYSTEMC_IFACE_PCIE_MAP_EXTENSION_H
18
21
22namespace simics {
23namespace systemc {
24namespace iface {
25
27class PcieMapExtension : public Extension<PcieMapExtension,
28 PcieMapInterface> {
29 public:
30 virtual void call(PcieMapInterface *device) {
31 switch (method_.value<Method>()) {
32 case ADD_MAP:
33 device->add_map(
34 method_input_[0].value<types::map_info_t>(),
35 method_input_[1].value<types::pcie_type_t>());
36 break;
37 case DEL_MAP:
38 device->del_map(
39 method_input_[0].value<types::map_info_t::physical_address_t>(),
40 method_input_[1].value<types::pcie_type_t>());
41 break;
42 case ADD_FUNCTION:
43 device->add_function(
44 method_input_[0].value<conf_object_t *>(),
45 method_input_[1].value<uint16_t>());
46 break;
47 case DEL_FUNCTION:
48 device->del_function(
49 method_input_[0].value<conf_object_t *>(),
50 method_input_[1].value<uint16_t>());
51 break;
52 case ENABLE_FUNCTION:
53 device->enable_function(
54 method_input_[0].value<uint16_t>());
55 break;
56 case DISABLE_FUNCTION:
57 device->disable_function(
58 method_input_[0].value<uint16_t>());
59 break;
60 case GET_DEVICE_ID:
62 method_input_[0].value<conf_object_t *>());
63 break;
64 }
65 }
66
67 virtual void add_map(types::map_info_t info, types::pcie_type_t type) {
68 method_ = ADD_MAP;
69 method_input_.push_back(info);
70 method_input_.push_back(type);
71 send();
72 }
73
75 types::pcie_type_t type) {
76 method_ = DEL_MAP;
77 method_input_.push_back(base);
78 method_input_.push_back(type);
79 send();
80 }
81
82 virtual void add_function(conf_object_t *map_obj, uint16_t function_id) {
83 method_ = ADD_FUNCTION;
84 method_input_.push_back(map_obj);
85 method_input_.push_back(function_id);
86 send();
87 }
88
89 virtual void del_function(conf_object_t *map_obj, uint16_t function_id) {
90 method_ = DEL_FUNCTION;
91 method_input_.push_back(map_obj);
92 method_input_.push_back(function_id);
93 send();
94 }
95
96 virtual void enable_function(uint16_t function_id) {
97 method_ = ENABLE_FUNCTION;
98 method_input_.push_back(function_id);
99 send();
100 }
101
102 virtual void disable_function(uint16_t function_id) {
103 method_ = DISABLE_FUNCTION;
104 method_input_.push_back(function_id);
105 send();
106 }
107
108 virtual uint16_t get_device_id(conf_object_t *dev_obj) {
109 method_ = GET_DEVICE_ID;
110 method_input_.push_back(dev_obj);
111 send();
112 return method_return_.value<uint16_t>();
113 }
114
115 private:
116 enum Method {
117 ADD_MAP,
118 DEL_MAP,
119 ADD_FUNCTION,
120 DEL_FUNCTION,
121 ENABLE_FUNCTION,
122 DISABLE_FUNCTION,
123 GET_DEVICE_ID
124 };
125};
126
127} // namespace iface
128} // namespace systemc
129} // namespace simics
130
131#endif
Base class for TLM2 extension, responsible for marshal/unmarshal of a Simics interface.
Definition: extension.h:40
std::vector< types::AnyType > method_input_
Definition: extension.h:118
Extension for Simics pcie_map interface.
Definition: pcie_map_extension.h:28
virtual void disable_function(uint16_t function_id)
Definition: pcie_map_extension.h:102
virtual uint16_t get_device_id(conf_object_t *dev_obj)
Definition: pcie_map_extension.h:108
virtual void add_function(conf_object_t *map_obj, uint16_t function_id)
Definition: pcie_map_extension.h:82
virtual void del_function(conf_object_t *map_obj, uint16_t function_id)
Definition: pcie_map_extension.h:89
virtual void call(PcieMapInterface *device)
Definition: pcie_map_extension.h:30
virtual void enable_function(uint16_t function_id)
Definition: pcie_map_extension.h:96
virtual void add_map(types::map_info_t info, types::pcie_type_t type)
Definition: pcie_map_extension.h:67
virtual void del_map(types::map_info_t::physical_address_t base, types::pcie_type_t type)
Definition: pcie_map_extension.h:74
Simics pcie_map interface.
Definition: pcie_map_interface.h:29
virtual void add_function(conf_object_t *map_obj, uint16_t function_id)=0
virtual void del_map(types::map_info_t::physical_address_t base, types::pcie_type_t type)=0
virtual void disable_function(uint16_t function_id)=0
virtual void add_map(types::map_info_t info, types::pcie_type_t type)=0
virtual void del_function(conf_object_t *map_obj, uint16_t function_id)=0
virtual uint16_t get_device_id(conf_object_t *dev_obj)=0
virtual void enable_function(uint16_t function_id)=0
T value()
Definition: any_type.h:89
pcie_type_t
Definition: pcie_type.h:22
Definition: adapter.h:80
Reduced, stand-alone, version of the Simics map_info_t struct.
Definition: map_info.h:25
uint64_t physical_address_t
Definition: map_info.h:26