FlxCard
Loading...
Searching...
No Matches
FlxCard.h
1/*******************************************************************
2 * \mainpage *
3 * *
4 * @author: Markus Joos, CERN *
5 * Maintainer: Henk Boterenbrood, Nikhef *
6 * *
7 * @brief *
8 * This note defines an application program interface (API) for *
9 * the use of the FLX PCIe I/O card in the ATLAS read-out system. *
10 * The intention of the API is to satisfy the needs of simple *
11 * test programs as well as the requirements of the *
12 * FelixApplication. *
13 * *
14 * @copyright CERN, Nikhef *
15 ******************************************************************/
16
17#ifndef FLXCARD_H
18#define FLXCARD_H
19
20#include <cstdint>
21#include <vector>
22#include <string>
23#include <sys/types.h>
24#include <utility> // std::pair
25
26#include "cmem_rcc/cmem_rcc.h"
27#include "flxcard/flx_common.h"
28#include "regmap/regmap.h"
29#include "flxcard/LinkConfig.h"
30
31// Constants
32#define NUM_INTERRUPTS 8
33#define FLX_GBT_FILE_NOT_FOUND -1
34#define FLX_GBT_VERSION_NOT_FOUND -2
35#define FLX_GBT_TMODE_FEC 0
36#define FLX_GBT_ALIGNMENT_CONTINUOUS 0
37#define FLX_DMA_WRAPAROUND 1
38#define FLX_GBT_ALIGNMENT_ONE 1
39#define FLX_GBT_CHANNEL_AUTO 1
40#define FLX_GBT_TMODE_WideBus 1
41
42// Firmware types
43#define FIRMW_GBT 0
44#define FIRMW_FULL 1
45#define FIRMW_LTDB 2
46#define FIRMW_FEI4 3
47#define FIRMW_PIXEL 4
48#define FIRMW_STRIP 5
49#define FIRMW_FELIG_GBT 6
50#define FIRMW_FELIG 6 // Backwards compatible
51#define FIRMW_FMEMU 7
52#define FIRMW_MROD 8
53#define FIRMW_LPGBT 9
54#define FIRMW_INTERLAKEN 10
55#define FIRMW_FELIG_LPGBT 11
56#define FIRMW_HGTD_LUMI 12
57#define FIRMW_BCM_PRIME 13
58#define FIRMW_FELIG_PIXEL 14
59#define FIRMW_FELIG_STRIP 15
60#define FIRMW_WUPPER 16
61#define FIRMW_TPX4 17
62const std::vector<std::string> FIRMW_STR{ "GBT", "FULL", "LTDB", "FEI4", "PIXEL",
63 "STRIP", "FELIG", "FM-EMU", "MROD", "LPGBT",
64 "INTERLAKEN", "FELIG-LPGBT", "HGTD-LUMI",
65 "BCM-PRIME", "FELIG-PIXEL", "FELIG-STRIP",
66 "WUPPER", "TPX4" };
67
68// Interrupts
69#define ALL_IRQS 0xFFFFFFFF
70
71// Monitoring devices
72#define FPGA_MONITOR 0x001
73#define POD_MONITOR_ALL 0x002
74#define POWER_MONITOR 0x004
75#define FIREFLY_MONITOR 0x008
76#define POD_MONITOR_LOS 0x100
77#define POD_MONITOR_TEMP_VOLT 0x200
78#define POD_MONITOR_POWER 0x400
79#define POD_MONITOR_POWER_RX 0x800
80// (Backwards compatability)
81#define POD_MONITOR POD_MONITOR_ALL
82
83// Resource locking
84#define LOCK_NONE 0x0000
85#define LOCK_DMA0 0x0001
86#define LOCK_DMA1 0x0002
87#define LOCK_I2C 0x0004
88#define LOCK_FLASH 0x0008
89#define LOCK_ELINK 0x0010
90#define LOCK_READ_CONFIG 0x0020
91#define LOCK_ALL 0xFFFFFFFF
92#define LOCK_DMA(n) (1<<(16+n))
93
94// Other constants
95#define ALL_BITS 0xFFFFFFFFFFFFFFFF
96
97// Register model
98typedef struct
99{
100 volatile u_long start_address; /* low half, bits 63:00 */
101 volatile u_long end_address; /* low half, bits 127:64 */
102 volatile u_long tlp :11; /* high half, bits 10:00 */
103 volatile u_long fromhost : 1; /* high half, bit 11 */
104 volatile u_long wrap_around : 1; /* high half, bit 12 */
105 volatile u_long reserved :51; /* high half, bits 63:13 */
106 volatile u_long sw_pointer; /* high half, bits 127:64 */
108
109typedef struct
110{
111 volatile u_long fw_pointer; /* bits 63:00 */
112 volatile u_long descriptor_done : 1; /* bit 64 */
113 volatile u_long even_addr_dma : 1; /* bit 65 */
114 volatile u_long even_addr_pc : 1; /* bit 66 */
116
117typedef struct
118{
119 volatile u_int control; /* bits 63:00 */
120 volatile u_int data; /* bits 95:64 */
121 volatile u_long address; /* bits 127:96 */
122} int_vec_t;
123
124typedef struct
125{
126 volatile u_long date_time : 40; /* bits 39:00 */
127 volatile u_long reserved : 24; /* bits 63:40 */
128 volatile u_long revision : 16; /* bits 79:64 */
129} board_id_t;
130
131typedef struct
132{
133 dma_descriptor_t DMA_DESC[8]; /* 0x000 - 0x0ff */
134 u_char unused1[256]; /* 0x100 - 0x1ff */
135 dma_status_t DMA_DESC_STATUS[8]; /* 0x200 - 0x27f */
136 u_char unused2[128]; /* 0x280 - 0x2ff */
137 volatile u_int BAR0_VALUE; /* 0x300 - 0x303 */
138 u_char unused3[12]; /* 0x304 - 0x30f */
139 volatile u_int BAR1_VALUE; /* 0x310 - 0x313 */
140 u_char unused4[12]; /* 0x314 - 0x31f */
141 volatile u_int BAR2_VALUE; /* 0x320 - 0x323 */
142 u_char unused5[220]; /* 0x324 - 0x3ff */
143 volatile u_int DMA_DESC_ENABLE; /* 0x400 - 0x403 */
144 u_char unused7[28]; /* 0x404 - 0x41f */
145 volatile u_int DMA_RESET; /* 0x420 - 0x423 */
146 u_char unused8[12]; /* 0x424 - 0x42f */
147 volatile u_int SOFT_RESET; /* 0x430 - 0x433 */
148 u_char unused9[12]; /* 0x434 - 0x43f */
149 volatile u_int REGISTERS_RESET; /* 0x440 - 0x443 */
151
152typedef struct
153{
154 int_vec_t INT_VEC[8]; /* 0x000 - 0x07f */
155 u_char unused1[128]; /* 0x080 - 0x0ff */
156 volatile u_int INT_TAB_ENABLE; /* 0x100 - 0x103 */
158
159typedef struct
160{
161 u_int n_devices;
162 u_int cdmap[MAXCARDS][2];
164
165// Forward declaration (see I2CDevices.h)
166typedef struct i2c_device i2c_device_t;
167
168// Device parameters typedefs
169
170typedef struct
171{
172 float temperature;
173 float vccint;
174 float vccaux;
175 float vccbram;
176 u_long fanspeed;
177 u_long dna;
179
180typedef struct
181{
182 bool absent;
183 char name[10];
184 int temp;
185 float v33;
186 float v25;
187 int los;
188 char vname[16];
189 char voui[3];
190 char vpnum[16];
191 char vrev[2];
192 char vsernum[16];
193 char vdate[8];
194 int optical_power_uw[12];
196
197typedef struct
198{
199 std::string name;
200 float vccint_current;
201 float vccint_voltage;
202 float mgtavcc_current;
203 float mgtavcc_voltage;
204 float fpga_internal_diode_temperature;
205 float mgtavtt_current; // Only FLX-712
206 float mgtavtt_voltage; // Only FLX-712
207 float mgtavttc_voltage; // Only FLX-711
208 float mgtvccaux_voltage; // Only FLX-711
209 float internal_temperature;
210 float vcc;
212
213typedef struct
214{
215 std::string name;
216 float pex0p9v_current;
217 float pex0p9v_voltage;
218 float sys18_current;
219 float sys18_voltage;
220 float sys12_voltage; // Only FLX-711
221 float sys25_current; // Only FLX-712
222 float sys25_voltage;
223 float pex8732_internal_diode_temperature;
224 float internal_temperature;
225 float vcc;
227
228typedef struct
229{
230 std::string name;
231 uint32_t t_local_hi; // In degrees C
232 uint32_t t_local_lo; // In 1/10000ths C
233 uint32_t t_remote_hi; // In degrees C
234 uint32_t t_remote_lo; // In 1/10000ths C
235 uint32_t status;
236 uint32_t device_id;
237 uint32_t manufacturer_id;
239
240typedef struct
241{
242 std::string name;
243 uint32_t config_reg;
244 uint32_t shunt_volt_reg;
245 uint32_t bus_volt_reg;
246 uint32_t power_reg;
247 uint32_t current_reg;
248 uint32_t calib_reg;
249 uint32_t manufacturer_id;
250 float r_shunt;
252
253typedef struct
254{
255 std::string name;
256 uint32_t mfr_special_id;
257 uint32_t vin;
258 uint32_t iin;
259 uint32_t pin;
260 uint32_t vout[2];
261 uint32_t iout[2];
262 uint32_t pout[2];
263 uint32_t temp_die;
264 uint32_t temp_ext[2];
266
267typedef struct
268{
269 std::string name;
270 bool valid;
271 uint32_t manufacturer_id;
272 uint32_t silicon_rev;
273 uint8_t input_cfg[10][8];
274 uint32_t fault_stat[6];
275 uint32_t adc[12];
276 float adc_fullscale[12];
277 std::string adc_name[12];
279
280typedef struct
281{
282 std::string name;
283 bool valid;
284 uint32_t ic_device_id;
285 uint64_t ic_device_rev;
286 uint32_t vout[17];
287 uint32_t vout_mode[17];
288 uint32_t status_vout[17];
289 std::string vout_name[17];
290 uint32_t vout_uv_warn[17];
291 uint32_t vout_uv_fault[17];
292 uint32_t vout_ov_warn[17];
293 uint32_t vout_ov_fault[17];
295
297{
298public:
299 std::string name;
300 bool absent;
301
302 // FireFly TX lower memory map
303 uint32_t status;
304 uint32_t status_summ;
305 uint32_t latched_alarms_tx_los;
306 uint32_t latched_alarms_tx_fault;
307 uint32_t latched_alarms_temp;
308 uint32_t latched_alarms_vcc33;
309 uint32_t latched_alarms_cdr_lol;
310 int32_t case_temp;
311 uint32_t vcc;
312 uint32_t elapsed_optime;
313 uint32_t chan_disable;
314 uint32_t squelch_disable;
315 uint32_t polarity_invert;
316 uint64_t input_equalization;
317 uint32_t cdr_enable;
318 uint32_t mask_tx_los_alarms;
319 uint32_t mask_fault_flags;
320 uint32_t mask_temp_alarms;
321 uint32_t mask_vcc33_alarms;
322 uint32_t mask_cdr_lol_alarms;
323 uint32_t firmware_version;
324
325 // Upper page 0
326 std::string vendor_part;
327 std::string vendor_serial;
328};
329
331{
332public:
333 std::string name;
334 bool absent;
335
336 // FireFly RX lower memory map
337 uint32_t status;
338 uint32_t status_summ;
339 uint32_t latched_alarms_rx_los;
340 uint32_t latched_alarms_rx_power;
341 uint32_t latched_alarms_temp;
342 uint32_t latched_alarms_vcc33;
343 uint32_t latched_alarms_cdr_lol;
344 int32_t case_temp;
345 uint32_t vcc;
346 uint32_t elapsed_optime;
347 uint32_t chan_disable;
348 uint32_t output_disable;
349 uint32_t polarity_invert;
350 uint64_t output_swing;
351 uint64_t output_preemphasis;
352 uint32_t cdr_enable;
353 uint32_t firmware_version;
354
355 // Upper page 0
356 std::string vendor_part;
357 std::string vendor_serial;
358
359 // Upper page 1
360 uint32_t optical_power[12];
361};
362
364{
365public:
366 std::string name;
367 bool absent;
368
369 // FireFly TX/RX lower memory map
370 uint32_t status;
371 uint32_t latched_alarms_tx_los;
372 uint32_t latched_alarms_tx_fault;
373 uint32_t latched_alarms_cdr_lol;
374 uint32_t latched_alarms_temp;
375 uint32_t latched_alarms_vcc;
376 uint32_t latched_alarms_rx_power;
377 uint32_t elapsed_optime;
378 int32_t case_temp;
379 uint32_t vcc_3v3;
380 uint32_t vcc_1v8;
381 uint32_t rx_optical_power[4];
382 uint32_t firmware_revision;
383 uint32_t tx_chan_disable;
384 uint32_t cdr_enable;
385 uint32_t cdr_rate_select;
386 uint32_t mask_los_alarms;
387 uint32_t mask_tx_fault_flags;
388 uint32_t mask_cdr_lol_alarms;
389 uint32_t mask_temp_alarms;
390 uint32_t mask_vcc_alarms;
391
392 // Upper page 0;
393 std::string vendor_part;
394 std::string vendor_serial;
395};
396
397// Device monitoring data collections typedefs
398
400
401typedef struct
402{
403 ltc2991_1_parameters_t ltc2991_1;
404 ltc2991_2_parameters_t ltc2991_2;
406
407typedef struct
408{
409 ina226_parameters_t ina226[10+1]; // +1 for FLX-155
411
412typedef struct
413{
414 tmp435_parameters_t tmp435[7+1]; // +1 for FLX-155
416
418
419typedef struct
420{
421 adm1066_parameters_t adm1066[2];
422 adm1266_parameters_t adm1266;
424
426{
427public:
428 FireFlyTxParams ffly_tx[2+2]; // +2 for FLX-155
429 FireFlyRxParams ffly_rx[2+2]; // +2 for FLX-155
430 FireFlyTxRxParams ffly_tr[1+1]; // +1 for FLX-155
431};
432
433typedef struct
434{
435 minipod_parameters_t minipod[8];
437
438typedef struct
439{
447 FireFlyMonitorData firefly;
449
450// Macros
451#define TOHEX(n) std::hex << "0x" << ((uint64_t)n) << std::dec
452
454{
455public:
458
459 ~FlxCard();
460
512 void card_open( int device_nr, u_int lock_mask,
513 bool read_config = false,
514 bool ignore_version = false );
515
523
530 static u_int number_of_cards();
531
543 static u_int number_of_devices();
544
562
573 static int card_to_device_number( int card_number );
574
596 u_int lock_mask( int device_nr );
597 u_int get_lock_mask( int device_nr ) { return lock_mask( device_nr ); } // Backwards-compatibility
598
604 u_long openBackDoor( int bar );
608 u_long bar0Address() { return openBackDoor( 0 ); }
612 u_long bar1Address() { return openBackDoor( 1 ); }
616 u_long bar2Address() { return openBackDoor( 2 ); }
630 int dma_max_tlp_bytes() { return m_maxTlpBytes; }
631
650 void dma_to_host( u_int dma_id, u_long dst, size_t size, u_int flags );
651
684 void dma_from_host( u_int dma_id, u_long src, size_t size, u_int flags );
685
690 bool dma_enabled( u_int dma_id );
691
700 void dma_wait( u_int dma_id );
701
707 void dma_stop( u_int dma_id );
708
720 void dma_advance_ptr( u_int dma_id, u_long dst, size_t size, size_t bytes );
721
727 void dma_set_ptr( u_int dma_id, u_long dst );
728
736 u_long dma_get_ptr( u_int dma_id );
737 /* For backwards compatibility: */
738 u_long dma_get_read_ptr( u_int dma_id ) { return dma_get_ptr( dma_id ); }
739
740 // Sets the DMA_FIFO_FLUSH register to "1".
741 //void dma_fifo_flush(); //MJ: disabled. See FlxCard.cpp
742
746 void dma_reset();
747
754 u_long dma_get_fw_ptr( u_int dma_id );
755 /* For backwards compatibility: */
756 u_long dma_get_current_address( u_int dma_id ) { return dma_get_fw_ptr( dma_id ); }
757
763 bool dma_cmp_even_bits( u_int dma_id );
764
799 void i2c_read( const char *device_str, u_char reg_addr, u_char *value, int nbytes = 1 );
800
804 void i2c_write( const char *device_str, u_char reg_addr, u_char data );
805 void i2c_write( const char *device_str, u_char reg_addr, u_char *data, int nbytes );
806
818 void i2c_write_byte( u_char dev_addr, u_char byte );
819
825 void i2c_write_byte( u_char dev_addr, u_char reg_addr, u_char byte );
826
831 u_char i2c_read_byte( u_char dev_addr, u_char reg_addr );
832
840 bool i2c_flush( u_int *count = 0 );
841
846 void i2c_write_bytes( uint8_t dev_addr, uint8_t reg_addr,
847 int nbytes, uint8_t *bytes );
848 void i2c_read_bytes ( uint8_t dev_addr, uint8_t reg_addr,
849 int nbytes, uint8_t *bytes );
850
870 u_int gbt_setup( int alignment, int channel_mode );
871
882 long int gbt_version_delay( u_long svn_version, char *filename );
883
899 u_long rxusrclk_freq( u_int channel );
900
905 void gth_rx_reset( int quad = -1 );
906
929 void irq_enable( u_int interrupt = ALL_IRQS );
930
944 void irq_disable( u_int interrupt = ALL_IRQS );
945
957 void irq_wait( u_int interrupt );
958
976 void irq_clear( u_int interrupt = ALL_IRQS );
977
991 void irq_cancel( u_int interrupt = ALL_IRQS );
992
1003 void irq_reset_counters( u_int interrupt = ALL_IRQS );
1004
1028 u_long cfg_get_option( const char *key, bool show_options = false );
1029
1043 void cfg_set_option( const char *key, u_long value, bool show_options = false );
1044
1055 u_long cfg_get_reg( const char *key );
1056
1068 void cfg_set_reg( const char *key, u_long value );
1069
1076
1083 static regmap_register_t *cfg_register( const char *name );
1090 static regmap_bitfield_t *cfg_bitfield( const char *name );
1102 static std::string cfg_bitfield_options( const char *name, bool include_all_substr = true );
1103
1119 u_int card_model() { return m_cardType; }
1120 u_int card_type() { return card_model(); }
1121
1125 u_int firmware_type() { return m_firmwareType; }
1126
1131 { return( m_firmwareType<FIRMW_STR.size() ? FIRMW_STR[m_firmwareType] : std::string("????") ); }
1132
1136 std::string firmware_string() { return m_firmwareString; }
1137
1141 bool lpgbt_type() { return m_lpgbtType; }
1142
1146 bool lpgbt_fec12() { return m_lpgbtFec12; }
1147
1151 bool lpgbt_5gbps() { return m_lpgbt5Gbps; }
1152
1156 bool fullmode_type() { return m_fullmodeType; }
1157
1162
1167
1171 u_int number_of_channels() { return m_numberOfChans; }
1172
1176 std::pair<int,int> ec_elink_indices();
1177
1181 std::pair<int,int> ic_elink_indices();
1182
1193 fpga_monitoring_t fpga_monitoring();
1194 ltc_monitoring_t power_monitoring_ltc2991();
1195 ina_monitoring_t power_monitoring_ina226( int *ina_count = 0 );
1196 tmp_monitoring_t temperature_monitoring_tmp435( int *tmp_count = 0 );
1197 ltm_monitoring_t power_monitoring_ltm4700();
1198 adm_monitoring_t powersequencer_monitoring_adm1x66( int *adm_count = 0 );
1199 minipod_monitoring_t minipod_monitoring( u_int selection, int *number_of_pods = 0 );
1200 FireFlyMonitorData firefly_monitoring( int *tx_count = 0, int *rx_count = 0, int *tr_count = 0 );
1201
1226
1231
1236
1241 std::vector<int> minipods_temperature();
1242
1249 std::vector<std::pair<std::string, std::vector<int>>> minipods_optical_power();
1250
1255 std::vector<std::pair<std::string, std::vector<int>>> firefly_optical_power();
1256
1263 bool firefly_detect( const std::string &device_name,
1264 std::string &vendor_part,
1265 std::string &vendor_sn );
1266
1283 void configure( std::string filename, bool do_links = true, bool do_registers = true );
1284
1289 void readConfiguration( std::string filename );
1290
1297
1302 u_int number_of_elinks_tohost( int dma_index = -1 );
1303
1309 u_int number_of_elinks_fromhost() { return number_of_elinks_toflx(); }
1310
1315 std::vector<flxcard::elink_descr_t> elinks_tohost( int dma_index = -1 );
1316
1321 std::vector<flxcard::elink_descr_t> elinks_toflx();
1322 std::vector<flxcard::elink_descr_t> elinks_fromhost() { return elinks_toflx(); }
1323
1324 std::vector<flxcard::elink_descr_t> elinks_toflx_broadcast();
1325 std::vector<flxcard::elink_descr_t> elinks_fromhost_broadcast() { return elinks_toflx_broadcast(); }
1326
1330 u_int number_of_dma_tohost() { return m_numberOfDma; }
1331
1336 bool uses_dma_index_mask() { return m_useDmaIndexMask; }
1337
1338 void set_hdlc_instant_timeout( bool b ) { m_hdlcInstantTimeout = b; }
1339 bool hdlc_instant_timeout( ) { return m_hdlcInstantTimeout; }
1340
1344 unsigned int link_mode();
1345
1349 bool is_elink_enabled( u_int channel, u_int egroup, u_int epath, bool is_to_flx );
1350
1354 unsigned int tohost_elink_dmaid( u_int channel, u_int egroup, u_int epath );
1355
1359 unsigned int tohost_elink_dmaid( uint16_t elinknr );
1360
1364 bool has_tohost_elink_streams( u_int channel, u_int egroup, u_int epath );
1365
1370 uint8_t detector_id();
1371
1378 uint16_t connector_id( uint16_t channel );
1379
1384private:
1385 static int m_cardsOpen;
1386 int m_fd;
1387 int m_deviceNumber;
1388 int m_maxTlpBytes;
1389 u_int m_cardType;
1390 u_int m_firmwareType;
1391 bool m_configRead;
1392 bool m_lpgbtType;
1393 bool m_lpgbtFec12;
1394 bool m_lpgbt5Gbps;
1395 bool m_fullmodeType;
1396 bool m_useDmaIndexMask;
1397 bool m_hdlcInstantTimeout;
1398 u_int m_numberOfChans;
1399 u_int m_numberOfDma;
1400 u_int m_fromHostDataFormat;
1401 std::string m_firmwareString;
1402 u_int m_myLocks;
1403 u_int m_myLockTag; //MJ: do we still need the lock tag??
1404 u_long m_bar0Base;
1405 u_long m_bar1Base;
1406 u_long m_bar2Base;
1407
1408 // Space to store a device's e-link configuration, for all links + Emulator 'link'
1409 flxcard::LinkConfig m_linkConfig[flxcard::FLX_LINKS + 1];
1410
1411 // Space to store additional register settings
1412 std::vector<flxcard::regsetting_t> m_regSettings;
1413
1414public:
1420 volatile flxcard_bar0_regs_t *m_bar0;
1421 volatile flxcard_bar1_regs_t *m_bar1;
1422 volatile flxcard_bar2_regs_t *m_bar2;
1423
1424 // Pointer to a list of this FLX device's I2C devices
1425 i2c_device_t const *m_i2cDevices;
1426
1431private:
1432 u_long map_memory_bar( u_long pci_addr, size_t size );
1433 void unmap_memory_bar( u_long vaddr, size_t size );
1434
1435 void i2c_wait_not_full( );
1436 void i2c_wait_not_empty( );
1437 int i2c_parse_address_string( const char *str,
1438 u_char *port1, u_char *port2, u_char *port3,
1439 u_char *dev_addr );
1440 void i2c_set_switches( u_char switch1_val, u_char switch2_val, u_char switch3_val );
1441
1442 void gbt_tx_configuration( int channel_tx_mode, int alignment );
1443 int gbt_rx_configuration( int channel_rx_mode );
1444 int gbt_software_alignment( int number_channels );
1445 bool gbt_channel_alignment( u_int channel );
1446 void gbt_topbot_oddeven_set( u_int channel, u_int topbot, u_int oddeven );
1447 bool gbt_topbot_alignment( u_int channel, u_int topbot,
1448 u_long *phase_found, u_int *oddeven );
1449 u_long gbt_shift_phase( u_int channel );
1450
1451 int check_digic_value2( const char *str, u_long *version, u_long *delay );
1452
1453 std::string lockbits2string( u_int locks );
1454
1455 void configureLinks( flxcard::LinkConfig *link_config,
1456 int *dma_index_invalid_count,
1457 int *unsupported_tohost_elinks_count,
1458 int *unsupported_fromhost_elinks_count );
1459
1460 void lockForConfiguration( FlxCard &flx );
1461};
1462
1463#endif // FLXCARD_H
Definition FlxCard.h:426
Definition FlxCard.h:331
Definition FlxCard.h:297
Definition FlxCard.h:364
Definition FlxCard.h:454
FlxCard()
The constructor of an FlxCard object only initializes a few class variables. It does not interact wit...
bool uses_dma_index_mask()
Definition FlxCard.h:1336
std::vector< flxcard::elink_descr_t > elinks_toflx()
void configure(std::string filename, bool do_links=true, bool do_registers=true)
unsigned int tohost_elink_dmaid(u_int channel, u_int egroup, u_int epath)
bool has_tohost_elink_streams(u_int channel, u_int egroup, u_int epath)
u_int number_of_elinks_toflx()
void readConfiguration()
void readConfiguration(std::string filename)
unsigned int link_mode()
bool is_elink_enabled(u_int channel, u_int egroup, u_int epath, bool is_to_flx)
uint8_t detector_id()
u_int number_of_dma_tohost()
Definition FlxCard.h:1330
u_int number_of_elinks_tohost(int dma_index=-1)
uint16_t connector_id(uint16_t channel)
std::vector< flxcard::elink_descr_t > elinks_tohost(int dma_index=-1)
unsigned int tohost_elink_dmaid(uint16_t elinknr)
void dma_advance_ptr(u_int dma_id, u_long dst, size_t size, size_t bytes)
void dma_to_host(u_int dma_id, u_long dst, size_t size, u_int flags)
void dma_stop(u_int dma_id)
void dma_reset()
bool dma_enabled(u_int dma_id)
u_long dma_get_fw_ptr(u_int dma_id)
int dma_max_tlp_bytes()
Definition FlxCard.h:630
void dma_set_ptr(u_int dma_id, u_long dst)
void dma_wait(u_int dma_id)
u_long dma_get_ptr(u_int dma_id)
void dma_from_host(u_int dma_id, u_long src, size_t size, u_int flags)
bool dma_cmp_even_bits(u_int dma_id)
static device_list_t device_list()
u_long openBackDoor(int bar)
u_long bar1Address()
Definition FlxCard.h:612
static u_int number_of_devices()
void card_close()
u_long bar2Address()
Definition FlxCard.h:616
void card_open(int device_nr, u_int lock_mask, bool read_config=false, bool ignore_version=false)
static u_int number_of_cards()
static int card_to_device_number(int card_number)
u_int lock_mask(int device_nr)
u_long bar0Address()
Definition FlxCard.h:608
long int gbt_version_delay(u_long svn_version, char *filename)
void gth_rx_reset(int quad=-1)
u_long rxusrclk_freq(u_int channel)
u_int gbt_setup(int alignment, int channel_mode)
bool i2c_flush(u_int *count=0)
void i2c_write(const char *device_str, u_char reg_addr, u_char data)
u_char i2c_read_byte(u_char dev_addr, u_char reg_addr)
void i2c_write_byte(u_char dev_addr, u_char byte)
void i2c_read(const char *device_str, u_char reg_addr, u_char *value, int nbytes=1)
void i2c_write_byte(u_char dev_addr, u_char reg_addr, u_char byte)
void i2c_write_bytes(uint8_t dev_addr, uint8_t reg_addr, int nbytes, uint8_t *bytes)
void irq_enable(u_int interrupt=ALL_IRQS)
void irq_disable(u_int interrupt=ALL_IRQS)
void irq_wait(u_int interrupt)
void irq_cancel(u_int interrupt=ALL_IRQS)
void irq_clear(u_int interrupt=ALL_IRQS)
void irq_reset_counters(u_int interrupt=ALL_IRQS)
float fpga_temperature()
int fpga_fanspeed()
bool firefly_detect(const std::string &device_name, std::string &vendor_part, std::string &vendor_sn)
std::vector< int > minipods_temperature()
std::vector< std::pair< std::string, std::vector< int > > > firefly_optical_power()
std::vector< std::pair< std::string, std::vector< int > > > minipods_optical_power()
monitoring_data_t get_monitoring_data(u_int mon_mask)
static regmap_bitfield_t * cfg_bitfield(const char *name)
void cfg_set_reg(const char *key, u_long value)
u_long cfg_get_option(const char *key, bool show_options=false)
void registers_reset()
void cfg_set_option(const char *key, u_long value, bool show_options=false)
u_long cfg_get_reg(const char *key)
static regmap_register_t * cfg_register(const char *name)
static std::string cfg_bitfield_options(const char *name, bool include_all_substr=true)
std::string firmware_type_string()
Definition FlxCard.h:1130
void soft_reset()
u_int card_model()
Definition FlxCard.h:1119
std::string firmware_string()
Definition FlxCard.h:1136
std::pair< int, int > ec_elink_indices()
bool lpgbt_type()
Definition FlxCard.h:1141
bool lpgbt_5gbps()
Definition FlxCard.h:1151
void cr_fromhost_reset()
u_int number_of_channels()
Definition FlxCard.h:1171
bool fullmode_type()
Definition FlxCard.h:1156
std::pair< int, int > ic_elink_indices()
u_int firmware_type()
Definition FlxCard.h:1125
bool lpgbt_fec12()
Definition FlxCard.h:1146
Definition FlxCard.h:268
Definition FlxCard.h:281
Definition FlxCard.h:420
Definition FlxCard.h:125
Definition FlxCard.h:160
Definition FlxCard.h:99
Definition FlxCard.h:110
Definition FlxCard.h:132
Definition FlxCard.h:153
Definition FlxCard.h:171
Definition FlxCard.h:241
Definition FlxCard.h:408
Definition FlxCard.h:118
Definition FlxCard.h:198
Definition FlxCard.h:214
Definition FlxCard.h:402
Definition FlxCard.h:254
Definition FlxCard.h:434
Definition FlxCard.h:181
Definition FlxCard.h:439
Definition FlxCard.h:229
Definition FlxCard.h:413