30 std::shared_ptr<SSTIO> sstio,
39 int push_signal(
const std::string &signal_name,
int domain_type,
int domain_idx)
override;
40 int push_control(
const std::string &control_name,
int domain_type,
int domain_idx)
override;
43 double sample(
int batch_idx)
override;
44 void adjust(
int batch_idx,
double setting)
override;
45 double read_signal(
const std::string &signal_name,
int domain_type,
int domain_idx)
override;
46 void write_control(
const std::string &control_name,
int domain_type,
int domain_idx,
double setting)
override;
49 std::function<double(
const std::vector<double> &)>
agg_function(
const std::string &signal_name)
const override;
50 std::function<std::string(
double)>
format_function(
const std::string &signal_name)
const override;
54 void save_control(
const std::string &save_path)
override;
56 std::string
name(
void)
const override;
66 struct sst_signal_mailbox_field_s {
74 sst_signal_mailbox_field_s(uint32_t request_data, uint32_t begin_bit,
75 uint32_t end_bit,
double multiplier,
76 int units,
const std::string &description,
78 : sst_signal_mailbox_field_s(
90 sst_signal_mailbox_field_s(uint32_t request_data, uint32_t begin_bit,
91 uint32_t end_bit,
double multiplier,
92 int units,
const std::string &description,
94 std::function<
double(
const std::vector<double> &)> agg_function)
95 : request_data(request_data)
96 , begin_bit(begin_bit)
98 , multiplier(multiplier)
100 , description(description)
102 , agg_function(std::move(agg_function))
105 uint32_t request_data;
110 std::string description;
112 std::function<double(
const std::vector<double> &)> agg_function;
114 struct sst_signal_mailbox_raw_s {
119 const std::map<std::string, sst_signal_mailbox_field_s>& fields)
121 , subcommand(subcommand)
127 std::map<std::string, sst_signal_mailbox_field_s> fields;
130 struct sst_control_mailbox_field_s {
131 sst_control_mailbox_field_s(uint32_t write_data, uint32_t begin_bit,
132 uint32_t end_bit,
int units,
133 const std::string &description)
134 : sst_control_mailbox_field_s(
144 sst_control_mailbox_field_s(uint32_t write_data, uint32_t begin_bit,
145 uint32_t end_bit,
int units,
146 const std::string &description,
147 std::function<
double(
const std::vector<double> &)> agg_function)
148 : write_data(write_data)
149 , begin_bit(begin_bit)
152 , description(description)
153 , agg_function(std::move(agg_function))
160 std::string description;
161 std::function<double(
const std::vector<double> &)> agg_function;
163 struct sst_control_mailbox_raw_s {
167 sst_control_mailbox_raw_s(
169 const std::map<std::string, sst_control_mailbox_field_s>& fields,
170 uint16_t read_subcommand, uint32_t read_request_data)
172 , subcommand(subcommand)
173 , write_param(write_param)
175 , read_subcommand(read_subcommand)
176 , read_request_data(read_request_data)
181 uint32_t write_param;
182 std::map<std::string, sst_control_mailbox_field_s> fields;
183 uint16_t read_subcommand;
184 uint32_t read_request_data;
187 struct sst_control_mmio_field_s {
188 sst_control_mmio_field_s(uint32_t begin_bit, uint32_t end_bit,
189 double multiplier,
int units,
190 const std::string &description)
191 : sst_control_mmio_field_s(
201 sst_control_mmio_field_s(uint32_t begin_bit, uint32_t end_bit,
202 double multiplier,
int units,
203 const std::string &description,
204 std::function<
double(
const std::vector<double> &)> agg_function)
205 : begin_bit(begin_bit)
207 , multiplier(multiplier)
209 , description(description)
210 , agg_function(std::move(agg_function))
217 std::string description;
218 std::function<double(
const std::vector<double> &)> agg_function;
220 struct sst_control_mmio_raw_s {
224 sst_control_mmio_raw_s(
int domain_type, uint32_t register_offset,
225 const std::map<std::string, sst_control_mmio_field_s>& fields)
226 : domain_type(domain_type)
227 , register_offset(register_offset)
232 uint32_t register_offset;
233 std::map<std::string, sst_control_mmio_field_s> fields;
236 struct sst_signal_mmio_field_s {
237 sst_signal_mmio_field_s(uint32_t write_value, uint32_t begin_bit,
238 uint32_t end_bit,
double multiplier,
239 int units,
const std::string &description,
241 : sst_signal_mmio_field_s(
253 sst_signal_mmio_field_s(uint32_t write_value, uint32_t begin_bit,
254 uint32_t end_bit,
double multiplier,
255 int units,
const std::string &description,
257 std::function<
double(
const std::vector<double> &)> agg_function)
258 : write_value(write_value)
259 , begin_bit(begin_bit)
261 , multiplier(multiplier)
263 , description(description)
265 , agg_function(std::move(agg_function))
268 uint32_t write_value;
273 std::string description;
275 std::function<double(
const std::vector<double> &)> agg_function;
278 void add_mbox_signals(
const std::string &raw_name,
280 const std::map<std::string, sst_signal_mailbox_field_s> &fields);
281 void add_mbox_controls(
283 uint16_t subcommand, uint32_t write_param,
284 const std::map<std::string, sst_control_mailbox_field_s> &fields,
285 uint16_t read_subcommand, uint32_t read_request_data,
288 void add_mmio_signals(
const std::string &raw_name,
int domain_type,
289 uint32_t register_offset,
290 const std::map<std::string, sst_signal_mmio_field_s> &fields);
291 void add_mmio_controls(
const std::string &raw_name,
int domain_type,
292 uint32_t register_offset,
293 const std::map<std::string, sst_control_mmio_field_s> &fields,
296 static const std::map<std::string, sst_signal_mailbox_raw_s> sst_signal_mbox_info;
297 static const std::map<std::string, sst_control_mailbox_raw_s> sst_control_mbox_info;
298 static const std::map<std::string, sst_control_mmio_raw_s> sst_control_mmio_info;
299 const PlatformTopo &m_topo;
300 std::shared_ptr<SSTIO> m_sstio;
309 std::vector<std::shared_ptr<Signal> > signals;
312 std::function<double(
const std::vector<double> &)> agg_function;
313 std::string description;
316 std::map<std::string, signal_info> m_signal_available;
320 std::vector<std::shared_ptr<Control> > controls;
323 std::function<double(
const std::vector<double> &)> agg_function;
324 std::string description;
326 std::map<std::string, control_info> m_control_available;
329 std::vector<std::shared_ptr<Signal> > m_signal_pushed;
332 std::vector<std::shared_ptr<Control> > m_control_pushed;
334 std::shared_ptr<SaveControl> m_mock_save_ctl;