9#include <unordered_map>
18#define LNLS_VENDORID 0x1000000000001215
23#define CONSTRUCTOR_REGS(type) regs_storage(new type ()), regs(*regs_storage)
29 using data_type = std::variant<std::int32_t, double>;
31 using 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(
const char *, decoders::data_key::second_type,
RegisterField);
108 size_t register2offset(uint32_t *);
109 uint32_t *offset2register(
size_t,
void *);
111 void write_internal(
const char *, std::optional<unsigned>, decoders::data_type,
void *);
118 std::unordered_map<std::string_view, Printer> printers;
151 rf_add_data_internal(name, std::nullopt, rf);
156 rf_add_data_internal(name, pos, rf);
173 void binary_dump(FILE *)
const;
174 virtual void print(FILE *,
bool)
const;
177 T get_general_data(
const char *name)
const
179 return std::get<T>(get_generic_data(name));
182 T get_channel_data(
const char *name,
unsigned channel_index)
const
184 return std::get<T>(get_generic_data(name, channel_index));
187 decoders::data_type get_generic_data(
const char *, decoders::data_key::second_type=std::nullopt)
const;
189 std::optional<unsigned> channel;
191 inline void write_general(
const char *name, decoders::data_type value,
void *dest)
193 write_internal(name, std::nullopt, value, dest);
195 inline void write_channel(
const char *name,
unsigned pos, decoders::data_type value,
void *dest)
197 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:35
Definition: decoders.h:97
virtual void decode_monitors()
Definition: decoders.cc:155
RegisterField rf_whole_register(uint32_t &value, bool is_signed=false)
Definition: decoders.h:141
void add_general(const char *name, RegisterField rf)
Definition: decoders.h:149
void add_general(const char *, int32_t)
Definition: decoders.cc:80
virtual void read_monitors()
Definition: decoders.cc:150
void get_data(bool=false)
Definition: decoders.cc:160
RegisterField rf_fixed2float(RegisterField, unsigned)
Definition: decoders.cc:135
RegisterField rf_extract_value(uint32_t &, uint32_t, bool=false)
Definition: decoders.cc:124
RegisterField rf_get_bit(uint32_t &, uint32_t)
Definition: decoders.cc:113
std::optional< unsigned > number_of_channels
Definition: decoders.h:116
void add_general_double(const char *, double)
Definition: decoders.cc:84
void add_channel_double(const char *, unsigned, double)
Definition: decoders.cc:93
void add_channel(const char *name, unsigned pos, RegisterField rf)
Definition: decoders.h:154
void add_channel(const char *, unsigned, int32_t)
Definition: decoders.cc:89
Definition: decoders.cc:27
Definition: decoders.h:79
Definition: pcie-defs.h:19