9#include <unordered_map>
18#define LNLS_VENDORID 0x1000000000001215
23#define CONSTRUCTOR_REGS(type) regs_storage(new type()), regs(*regs_storage)
29using data_type = std::variant<std::int32_t, double>;
31using data_key = std::pair<std::string_view, std::optional<unsigned>>;
43 uint8_t major_version;
55 void set_read_dest(
auto &dest)
58 read_size =
sizeof dest;
73 void check_devinfo_is_set()
const;
76 const device_match_fn match_devinfo_lambda;
80 decoders::data_type value;
83 unsigned fixed_point_pos = 0;
86 bool is_fixed_point =
false;
98 bool is_boolean_value(
const char *)
const;
99 int32_t try_boolean_value(
const char *, int32_t)
const;
101 std::unique_ptr<RegisterDecoderPrivate> pvt;
104 void add_data_internal(
const char *, decoders::data_key::second_type, T);
106 void rf_add_data_internal(
107 const char *, decoders::data_key::second_type,
RegisterField);
109 size_t register2offset(uint32_t *);
110 uint32_t *offset2register(
size_t,
void *);
113 const char *, std::optional<unsigned>, decoders::data_type,
void *);
120 std::unordered_map<std::string_view, Printer> printers;
123 std::unordered_map<std::string_view, Printer>);
154 rf_add_data_internal(name, std::nullopt, rf);
159 rf_add_data_internal(name, pos, rf);
176 void binary_dump(FILE *)
const;
177 virtual void print(FILE *,
bool)
const;
179 template <
class T> T get_general_data(
const char *name)
const
181 return std::get<T>(get_generic_data(name));
184 T get_channel_data(
const char *name,
unsigned channel_index)
const
186 return std::get<T>(get_generic_data(name, channel_index));
189 decoders::data_type get_generic_data(
190 const char *, decoders::data_key::second_type = std::nullopt)
const;
192 std::optional<unsigned> channel;
194 inline void write_general(
195 const char *name, decoders::data_type value,
void *dest)
197 write_internal(name, std::nullopt, value, dest);
199 inline void write_channel(
200 const char *name,
unsigned pos, decoders::data_type value,
void *dest)
202 write_internal(name, pos, value, dest);
Definition: decoders.h:36
bool check_devinfo
Definition: decoders.h:47
RegisterDecoderBase(struct pcie_bars &, const struct sdb_device_info &)
Definition: decoderbase.cc:6
bool devinfo_is_set
Definition: decoders.h:39
virtual void read()
Definition: decoderbase.cc:36
Definition: decoders.h:97
virtual void decode_monitors()
Definition: decoders.cc:162
RegisterField rf_whole_register(uint32_t &value, bool is_signed=false)
Definition: decoders.h:144
void add_general(const char *name, RegisterField rf)
Definition: decoders.h:152
void add_general(const char *, int32_t)
Definition: decoders.cc:86
virtual void read_monitors()
Definition: decoders.cc:160
void get_data(bool=false)
Definition: decoders.cc:164
RegisterField rf_fixed2float(RegisterField, unsigned)
Definition: decoders.cc:143
RegisterField rf_extract_value(uint32_t &, uint32_t, bool=false)
Definition: decoders.cc:131
RegisterField rf_get_bit(uint32_t &, uint32_t)
Definition: decoders.cc:120
std::optional< unsigned > number_of_channels
Definition: decoders.h:118
void add_general_double(const char *, double)
Definition: decoders.cc:90
void add_channel_double(const char *, unsigned, double)
Definition: decoders.cc:99
void add_channel(const char *name, unsigned pos, RegisterField rf)
Definition: decoders.h:157
void add_channel(const char *, unsigned, int32_t)
Definition: decoders.cc:95
Definition: decoders.cc:27
Definition: decoders.h:79
Definition: pcie-defs.h:19