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 WAIT_TIME_600 600
33#define WAIT_TIME_200 200
34#define NUM_INTERRUPTS 8
35#define FLX_GBT_FILE_NOT_FOUND -1
36#define FLX_GBT_VERSION_NOT_FOUND -2
37#define FLX_GBT_TMODE_FEC 0
38#define FLX_GBT_ALIGNMENT_CONTINUOUS 0
39#define FLX_DMA_WRAPAROUND 1
40#define FLX_GBT_ALIGNMENT_ONE 1
41#define FLX_GBT_CHANNEL_AUTO 1
42#define FLX_GBT_TMODE_WideBus 1
43
44// Firmware types
45#define FIRMW_GBT 0
46#define FIRMW_FULL 1
47#define FIRMW_LTDB 2
48#define FIRMW_FEI4 3
49#define FIRMW_PIXEL 4
50#define FIRMW_STRIP 5
51#define FIRMW_FELIG_GBT 6
52#define FIRMW_FELIG 6 // Backwards compatible
53#define FIRMW_FMEMU 7
54#define FIRMW_MROD 8
55#define FIRMW_LPGBT 9
56#define FIRMW_INTERLAKEN 10
57#define FIRMW_FELIG_LPGBT 11
58#define FIRMW_HGTD_LUMI 12
59#define FIRMW_BCM_PRIME 13
60#define FIRMW_FELIG_PIXEL 14
61#define FIRMW_FELIG_STRIP 15
62#define FIRMW_WUPPER 16
63#define FIRMW_TPX4 17
64const std::vector<std::string> FIRMW_STR{ "GBT", "FULL", "LTDB", "FEI4", "PIXEL",
65 "STRIP", "FELIG", "FM-EMU", "MROD", "LPGBT",
66 "INTERLAKEN", "FELIG-LPGBT", "HGTD-LUMI",
67 "BCM-PRIME", "FELIG-PIXEL", "FELIG-STRIP",
68 "WUPPER", "TPX4" };
69
70// Interrupts
71#define ALL_IRQS 0xFFFFFFFF
72
73// Monitoring devices
74#define FPGA_MONITOR 0x001
75#define POD_MONITOR_ALL 0x002
76#define POWER_MONITOR 0x004
77#define FIREFLY_MONITOR 0x008
78#define POD_MONITOR_LOS 0x100
79#define POD_MONITOR_TEMP_VOLT 0x200
80#define POD_MONITOR_POWER 0x400
81#define POD_MONITOR_POWER_RX 0x800
82// (Backwards compatability)
83#define POD_MONITOR POD_MONITOR_ALL
84
85// Resource locking
86#define LOCK_NONE 0x0000
87#define LOCK_DMA0 0x0001
88#define LOCK_DMA1 0x0002
89#define LOCK_I2C 0x0004
90#define LOCK_FLASH 0x0008
91#define LOCK_ELINK 0x0010
92#define LOCK_READ_CONFIG 0x0020
93#define LOCK_ALL 0xFFFFFFFF
94#define LOCK_DMA(n) (1<<(16+n))
95
96// Other constants
97#define ALL_BITS 0xFFFFFFFFFFFFFFFF
98
99// Register model
100typedef struct
101{
102 volatile u_long start_address; /* low half, bits 63:00 */
103 volatile u_long end_address; /* low half, bits 127:64 */
104 volatile u_long tlp :11; /* high half, bits 10:00 */
105 volatile u_long fromhost : 1; /* high half, bit 11 */
106 volatile u_long wrap_around : 1; /* high half, bit 12 */
107 volatile u_long reserved :51; /* high half, bits 63:13 */
108 volatile u_long sw_pointer; /* high half, bits 127:64 */
110
111typedef struct
112{
113 volatile u_long fw_pointer; /* bits 63:00 */
114 volatile u_long descriptor_done : 1; /* bit 64 */
115 volatile u_long even_addr_dma : 1; /* bit 65 */
116 volatile u_long even_addr_pc : 1; /* bit 66 */
118
119typedef struct
120{
121 volatile u_int control; /* bits 63:00 */
122 volatile u_int data; /* bits 95:64 */
123 volatile u_long address; /* bits 127:96 */
124} int_vec_t;
125
126typedef struct
127{
128 volatile u_long date_time : 40; /* bits 39:00 */
129 volatile u_long reserved : 24; /* bits 63:40 */
130 volatile u_long revision : 16; /* bits 79:64 */
131} board_id_t;
132
133typedef struct
134{
135 dma_descriptor_t DMA_DESC[8]; /* 0x000 - 0x0ff */
136 u_char unused1[256]; /* 0x100 - 0x1ff */
137 dma_status_t DMA_DESC_STATUS[8]; /* 0x200 - 0x27f */
138 u_char unused2[128]; /* 0x280 - 0x2ff */
139 volatile u_int BAR0_VALUE; /* 0x300 - 0x303 */
140 u_char unused3[12]; /* 0x304 - 0x30f */
141 volatile u_int BAR1_VALUE; /* 0x310 - 0x313 */
142 u_char unused4[12]; /* 0x314 - 0x31f */
143 volatile u_int BAR2_VALUE; /* 0x320 - 0x323 */
144 u_char unused5[220]; /* 0x324 - 0x3ff */
145 volatile u_int DMA_DESC_ENABLE; /* 0x400 - 0x403 */
146 u_char unused7[28]; /* 0x404 - 0x41f */
147 volatile u_int DMA_RESET; /* 0x420 - 0x423 */
148 u_char unused8[12]; /* 0x424 - 0x42f */
149 volatile u_int SOFT_RESET; /* 0x430 - 0x433 */
150 u_char unused9[12]; /* 0x434 - 0x43f */
151 volatile u_int REGISTERS_RESET; /* 0x440 - 0x443 */
153
154typedef struct
155{
156 int_vec_t INT_VEC[8]; /* 0x000 - 0x07f */
157 u_char unused1[128]; /* 0x080 - 0x0ff */
158 volatile u_int INT_TAB_ENABLE; /* 0x100 - 0x103 */
160
161typedef struct
162{
163 u_int n_devices;
164 u_int cdmap[MAXCARDS][2];
166
167// Forward declaration (see I2CDevices.h)
168typedef struct i2c_device i2c_device_t;
169
170// Device parameters typedefs
171
172typedef struct
173{
174 float temperature;
175 float vccint;
176 float vccaux;
177 float vccbram;
178 u_long fanspeed;
179 u_long dna;
181
182typedef struct
183{
184 bool absent;
185 char name[10];
186 int temp;
187 float v33;
188 float v25;
189 int los;
190 char vname[16];
191 char voui[3];
192 char vpnum[16];
193 char vrev[2];
194 char vsernum[16];
195 char vdate[8];
196 int optical_power_uw[12];
198
199typedef struct
200{
201 std::string name;
202 float vccint_current;
203 float vccint_voltage;
204 float mgtavcc_current;
205 float mgtavcc_voltage;
206 float fpga_internal_diode_temperature;
207 float mgtavtt_current; // Only FLX-712
208 float mgtavtt_voltage; // Only FLX-712
209 float mgtavttc_voltage; // Only FLX-711
210 float mgtvccaux_voltage; // Only FLX-711
211 float internal_temperature;
212 float vcc;
214
215typedef struct
216{
217 std::string name;
218 float pex0p9v_current;
219 float pex0p9v_voltage;
220 float sys18_current;
221 float sys18_voltage;
222 float sys12_voltage; // Only FLX-711
223 float sys25_current; // Only FLX-712
224 float sys25_voltage;
225 float pex8732_internal_diode_temperature;
226 float internal_temperature;
227 float vcc;
229
230typedef struct
231{
232 std::string name;
233 uint32_t t_local_hi; // In degrees C
234 uint32_t t_local_lo; // In 1/10000ths C
235 uint32_t t_remote_hi; // In degrees C
236 uint32_t t_remote_lo; // In 1/10000ths C
237 uint32_t status;
238 uint32_t device_id;
239 uint32_t manufacturer_id;
241
242typedef struct
243{
244 std::string name;
245 uint32_t config_reg;
246 uint32_t shunt_volt_reg;
247 uint32_t bus_volt_reg;
248 uint32_t power_reg;
249 uint32_t current_reg;
250 uint32_t calib_reg;
251 uint32_t manufacturer_id;
252 float r_shunt;
254
255typedef struct
256{
257 std::string name;
258 uint32_t mfr_special_id;
259 uint32_t vin;
260 uint32_t iin;
261 uint32_t pin;
262 uint32_t vout[2];
263 uint32_t iout[2];
264 uint32_t pout[2];
265 uint32_t temp_die;
266 uint32_t temp_ext[2];
268
269typedef struct
270{
271 std::string name;
272 bool valid;
273 uint32_t manufacturer_id;
274 uint32_t silicon_rev;
275 uint8_t input_cfg[10][8];
276 uint32_t fault_stat[6];
277 uint32_t adc[12];
278 float adc_fullscale[12];
279 std::string adc_name[12];
281
282typedef struct
283{
284 std::string name;
285 bool valid;
286 uint32_t ic_device_id;
287 uint64_t ic_device_rev;
288 uint32_t vout[17];
289 uint32_t vout_mode[17];
290 uint32_t status_vout[17];
291 std::string vout_name[17];
292 uint32_t vout_uv_warn[17];
293 uint32_t vout_uv_fault[17];
294 uint32_t vout_ov_warn[17];
295 uint32_t vout_ov_fault[17];
297
298typedef struct
299{
300 std::string name;
301 bool absent;
302
303 // FireFly TX lower memory map
304 uint32_t status;
305 uint32_t status_summ;
306 uint32_t latched_alarms_tx_los;
307 uint32_t latched_alarms_tx_fault;
308 uint32_t latched_alarms_temp;
309 uint32_t latched_alarms_vcc33;
310 uint32_t latched_alarms_cdr_lol;
311 int32_t case_temp;
312 uint32_t vcc;
313 uint32_t elapsed_optime;
314 uint32_t chan_disable;
315 uint32_t squelch_disable;
316 uint32_t polarity_invert;
317 uint64_t input_equalization;
318 uint32_t cdr_enable;
319 uint32_t mask_tx_los_alarms;
320 uint32_t mask_fault_flags;
321 uint32_t mask_temp_alarms;
322 uint32_t mask_vcc33_alarms;
323 uint32_t mask_cdr_lol_alarms;
324 uint32_t firmware_version;
325
326 // Upper page 0;
327 std::string vendor_part;
328 std::string vendor_serial;
330
331typedef struct
332{
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 // ...etc...
354 uint32_t firmware_version;
355
356 // Upper page 0;
357 std::string vendor_part;
358 std::string vendor_serial;
360
361typedef struct
362{
363 std::string name;
364 bool absent;
365
366 // FireFly TX/RX lower memory map
367 uint32_t status;
368 uint32_t latched_alarms_tx_los;
369 uint32_t latched_alarms_tx_fault;
370 uint32_t latched_alarms_cdr_lol;
371 uint32_t latched_alarms_temp;
372 uint32_t latched_alarms_vcc;
373 uint32_t latched_alarms_rx_power;
374 uint32_t elapsed_optime;
375 int32_t case_temp;
376 uint32_t vcc_3v3;
377 uint32_t vcc_1v8;
378 uint32_t rx_optical_power[4];
379 uint32_t firmware_revision;
380 uint32_t tx_chan_disable;
381 uint32_t cdr_enable;
382 uint32_t cdr_rate_select;
383 uint32_t mask_los_alarms;
384 uint32_t mask_tx_fault_flags;
385 uint32_t mask_cdr_lol_alarms;
386 uint32_t mask_temp_alarms;
387 uint32_t mask_vcc_alarms;
388
389 // Upper page 0;
390 std::string vendor_part;
391 std::string vendor_serial;
393
394// Device monitoring data collections typedefs
395
397
398typedef struct
399{
400 ltc2991_1_parameters_t ltc2991_1;
401 ltc2991_2_parameters_t ltc2991_2;
403
404typedef struct
405{
406 ina226_parameters_t ina226[10+1]; // +1 for FLX-155
408
409typedef struct
410{
411 tmp435_parameters_t tmp435[7+1]; // +1 for FLX-155
413
415
416typedef struct
417{
418 adm1066_parameters_t adm1066[2];
419 adm1266_parameters_t adm1266;
421
422typedef struct
423{
424 ffly_tx_parameters_t ffly_tx[2+2]; // +2 for FLX-155
425 ffly_rx_parameters_t ffly_rx[2+2]; // +2 for FLX-155
426 ffly_tr_parameters_t ffly_tr[1+1]; // +1 for FLX-155
428
429typedef struct
430{
431 minipod_parameters_t minipod[8];
433
434typedef struct
435{
443 firefly_monitoring_t firefly;
445
446// Macros
447#define TOHEX(n) std::hex << "0x" << ((uint64_t)n) << std::dec
448
450{
451public:
454
455 ~FlxCard();
456
508 void card_open( int device_nr, u_int lock_mask,
509 bool read_config = false,
510 bool ignore_version = false );
511
519
526 static u_int number_of_cards();
527
539 static u_int number_of_devices();
540
558
569 static int card_to_device_number( int card_number );
570
592 u_int lock_mask( int device_nr );
593 u_int get_lock_mask( int device_nr ) { return lock_mask( device_nr ); } // Backwards-compatibility
594
600 u_long openBackDoor( int bar );
604 u_long bar0Address() { return openBackDoor( 0 ); }
608 u_long bar1Address() { return openBackDoor( 1 ); }
612 u_long bar2Address() { return openBackDoor( 2 ); }
626 int dma_max_tlp_bytes() { return m_maxTlpBytes; }
627
646 void dma_to_host( u_int dma_id, u_long dst, size_t size, u_int flags );
647
680 void dma_from_host( u_int dma_id, u_long src, size_t size, u_int flags );
681
686 bool dma_enabled( u_int dma_id );
687
696 void dma_wait( u_int dma_id );
697
703 void dma_stop( u_int dma_id );
704
716 void dma_advance_ptr( u_int dma_id, u_long dst, size_t size, size_t bytes );
717
723 void dma_set_ptr( u_int dma_id, u_long dst );
724
732 u_long dma_get_ptr( u_int dma_id );
733 /* For backwards compatibility: */
734 u_long dma_get_read_ptr( u_int dma_id ) { return dma_get_ptr( dma_id ); }
735
736 // Sets the DMA_FIFO_FLUSH register to "1".
737 //void dma_fifo_flush(); //MJ: disabled. See FlxCard.cpp
738
742 void dma_reset();
743
750 u_long dma_get_fw_ptr( u_int dma_id );
751 /* For backwards compatibility: */
752 u_long dma_get_current_address( u_int dma_id ) { return dma_get_fw_ptr( dma_id ); }
753
759 bool dma_cmp_even_bits( u_int dma_id );
760
795 void i2c_read( const char *device_str, u_char reg_addr, u_char *value, int nbytes = 1 );
796
800 void i2c_write( const char *device_str, u_char reg_addr, u_char data );
801 void i2c_write( const char *device_str, u_char reg_addr, u_char *data, int nbytes );
802
814 void i2c_write_byte( u_char dev_addr, u_char byte );
815
821 void i2c_write_byte( u_char dev_addr, u_char reg_addr, u_char byte );
822
827 u_char i2c_read_byte( u_char dev_addr, u_char reg_addr );
828
836 bool i2c_flush( u_int *count = 0 );
837
842 void i2c_write_bytes( uint8_t dev_addr, uint8_t reg_addr,
843 int nbytes, uint8_t *bytes );
844 void i2c_read_bytes ( uint8_t dev_addr, uint8_t reg_addr,
845 int nbytes, uint8_t *bytes );
846
866 u_int gbt_setup( int alignment, int channel_mode );
867
878 long int gbt_version_delay( u_long svn_version, char *filename );
879
895 u_long rxusrclk_freq( u_int channel );
896
901 void gth_rx_reset( int quad = -1 );
902
925 void irq_enable( u_int interrupt = ALL_IRQS );
926
940 void irq_disable( u_int interrupt = ALL_IRQS );
941
953 void irq_wait( u_int interrupt );
954
972 void irq_clear( u_int interrupt = ALL_IRQS );
973
987 void irq_cancel( u_int interrupt = ALL_IRQS );
988
999 void irq_reset_counters( u_int interrupt = ALL_IRQS );
1000
1024 u_long cfg_get_option( const char *key, bool show_options = false );
1025
1039 void cfg_set_option( const char *key, u_long value, bool show_options = false );
1040
1051 u_long cfg_get_reg( const char *key );
1052
1064 void cfg_set_reg( const char *key, u_long value );
1065
1072
1079 static regmap_register_t *cfg_register( const char *name );
1086 static regmap_bitfield_t *cfg_bitfield( const char *name );
1098 static std::string cfg_bitfield_options( const char *name, bool include_all_substr = true );
1099
1115 u_int card_model() { return m_cardType; }
1116 u_int card_type() { return card_model(); }
1117
1121 u_int firmware_type() { return m_firmwareType; }
1122
1127 { return( m_firmwareType<FIRMW_STR.size() ? FIRMW_STR[m_firmwareType] : std::string("????") ); }
1128
1132 std::string firmware_string() { return m_firmwareString; }
1133
1137 bool lpgbt_type() { return m_lpgbtType; }
1138
1142 bool lpgbt_fec12() { return m_lpgbtFec12; }
1143
1147 bool lpgbt_5gbps() { return m_lpgbt5Gbps; }
1148
1152 bool fullmode_type() { return m_fullmodeType; }
1153
1158
1163
1167 u_int number_of_channels() { return m_numberOfChans; }
1168
1172 std::pair<int,int> ec_elink_indices();
1173
1177 std::pair<int,int> ic_elink_indices();
1178
1189 fpga_monitoring_t fpga_monitoring();
1190 ltc_monitoring_t power_monitoring_ltc2991();
1191 ina_monitoring_t power_monitoring_ina226( int *ina_count = 0 );
1192 tmp_monitoring_t temperature_monitoring_tmp435( int *tmp_count = 0 );
1193 ltm_monitoring_t power_monitoring_ltm4700();
1194 adm_monitoring_t powersequencer_monitoring_adm1x66( int *adm_count = 0 );
1195 minipod_monitoring_t minipod_monitoring( u_int selection, int *number_of_pods = 0 );
1196 firefly_monitoring_t firefly_monitoring( int *tx_count = 0, int *rx_count = 0, int *tr_count = 0 );
1197
1222
1227
1232
1237 std::vector<int> minipods_temperature();
1238
1244 std::vector<int> minipods_optical_power();
1245
1252 bool firefly_detect( const std::string &device_name,
1253 std::string &vendor_part,
1254 std::string &vendor_sn );
1255
1272 void configure( std::string filename, bool do_links = true, bool do_registers = true );
1273
1278 void readConfiguration( std::string filename );
1279
1286
1291 u_int number_of_elinks_tohost( int dma_index = -1 );
1292
1298 u_int number_of_elinks_fromhost() { return number_of_elinks_toflx(); }
1299
1304 std::vector<flxcard::elink_descr_t> elinks_tohost( int dma_index = -1 );
1305
1310 std::vector<flxcard::elink_descr_t> elinks_toflx();
1311 std::vector<flxcard::elink_descr_t> elinks_fromhost() { return elinks_toflx(); }
1312
1313 std::vector<flxcard::elink_descr_t> elinks_toflx_broadcast();
1314 std::vector<flxcard::elink_descr_t> elinks_fromhost_broadcast() { return elinks_toflx_broadcast(); }
1315
1319 u_int number_of_dma_tohost() { return m_numberOfDma; }
1320
1325 bool uses_dma_index_mask() { return m_useDmaIndexMask; }
1326
1327 void set_hdlc_instant_timeout( bool b ) { m_hdlcInstantTimeout = b; }
1328 bool hdlc_instant_timeout( ) { return m_hdlcInstantTimeout; }
1329
1333 unsigned int link_mode();
1334
1338 bool is_elink_enabled( u_int channel, u_int egroup, u_int epath, bool is_to_flx );
1339
1343 unsigned int tohost_elink_dmaid( u_int channel, u_int egroup, u_int epath );
1344
1348 unsigned int tohost_elink_dmaid( uint16_t elinknr );
1349
1353 bool has_tohost_elink_streams( u_int channel, u_int egroup, u_int epath );
1354
1359 uint8_t detector_id();
1360
1367 uint16_t connector_id( uint16_t channel );
1368
1373private:
1374 static int m_cardsOpen;
1375 int m_fd;
1376 int m_deviceNumber;
1377 int m_maxTlpBytes;
1378 u_int m_cardType;
1379 u_int m_firmwareType;
1380 bool m_configRead;
1381 bool m_lpgbtType;
1382 bool m_lpgbtFec12;
1383 bool m_lpgbt5Gbps;
1384 bool m_fullmodeType;
1385 bool m_useDmaIndexMask;
1386 bool m_hdlcInstantTimeout;
1387 u_int m_numberOfChans;
1388 u_int m_numberOfDma;
1389 u_int m_fromHostDataFormat;
1390 std::string m_firmwareString;
1391 u_int m_myLocks;
1392 u_int m_myLockTag; //MJ: do we still need the lock tag??
1393 u_long m_bar0Base;
1394 u_long m_bar1Base;
1395 u_long m_bar2Base;
1396
1397 // Space to store a device's e-link configuration, for all links + Emulator 'link'
1398 flxcard::LinkConfig m_linkConfig[flxcard::FLX_LINKS + 1];
1399
1400 // Space to store additional register settings
1401 std::vector<flxcard::regsetting_t> m_regSettings;
1402
1403public:
1409 volatile flxcard_bar0_regs_t *m_bar0;
1410 volatile flxcard_bar1_regs_t *m_bar1;
1411 volatile flxcard_bar2_regs_t *m_bar2;
1412
1413 // Pointer to a list of this FLX device's I2C devices
1414 i2c_device_t const *m_i2cDevices;
1415
1420private:
1421 u_long map_memory_bar( u_long pci_addr, size_t size );
1422 void unmap_memory_bar( u_long vaddr, size_t size );
1423
1424 void i2c_wait_not_full( );
1425 void i2c_wait_not_empty( );
1426 int i2c_parse_address_string( const char *str,
1427 u_char *port1, u_char *port2, u_char *port3,
1428 u_char *dev_addr );
1429 void i2c_set_switches( u_char switch1_val, u_char switch2_val, u_char switch3_val );
1430
1431 void gbt_tx_configuration( int channel_tx_mode, int alignment );
1432 int gbt_rx_configuration( int channel_rx_mode );
1433 int gbt_software_alignment( int number_channels );
1434 bool gbt_channel_alignment( u_int channel );
1435 void gbt_topbot_oddeven_set( u_int channel, u_int topbot, u_int oddeven );
1436 bool gbt_topbot_alignment( u_int channel, u_int topbot,
1437 u_long *phase_found, u_int *oddeven );
1438 u_long gbt_shift_phase( u_int channel );
1439
1440 int check_digic_value2( const char *str, u_long *version, u_long *delay );
1441
1442 std::string lockbits2string( u_int locks );
1443
1444 void configureLinks( flxcard::LinkConfig *link_config,
1445 int *dma_index_invalid_count,
1446 int *unsupported_tohost_elinks_count,
1447 int *unsupported_fromhost_elinks_count );
1448
1449 void lockForConfiguration( FlxCard &flx );
1450};
1451
1452#endif // FLXCARD_H
Definition FlxCard.h:450
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:1325
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:1319
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:626
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:608
static u_int number_of_devices()
void card_close()
u_long bar2Address()
Definition FlxCard.h:612
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:604
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_optical_power()
std::vector< int > minipods_temperature()
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:1126
void soft_reset()
u_int card_model()
Definition FlxCard.h:1115
std::string firmware_string()
Definition FlxCard.h:1132
std::pair< int, int > ec_elink_indices()
bool lpgbt_type()
Definition FlxCard.h:1137
bool lpgbt_5gbps()
Definition FlxCard.h:1147
void cr_fromhost_reset()
u_int number_of_channels()
Definition FlxCard.h:1167
bool fullmode_type()
Definition FlxCard.h:1152
std::pair< int, int > ic_elink_indices()
u_int firmware_type()
Definition FlxCard.h:1121
bool lpgbt_fec12()
Definition FlxCard.h:1142
Definition FlxCard.h:270
Definition FlxCard.h:283
Definition FlxCard.h:417
Definition FlxCard.h:127
Definition FlxCard.h:162
Definition FlxCard.h:101
Definition FlxCard.h:112
Definition FlxCard.h:332
Definition FlxCard.h:362
Definition FlxCard.h:299
Definition FlxCard.h:423
Definition FlxCard.h:134
Definition FlxCard.h:155
Definition FlxCard.h:173
Definition FlxCard.h:243
Definition FlxCard.h:405
Definition FlxCard.h:120
Definition FlxCard.h:200
Definition FlxCard.h:216
Definition FlxCard.h:399
Definition FlxCard.h:256
Definition FlxCard.h:430
Definition FlxCard.h:183
Definition FlxCard.h:435
Definition FlxCard.h:231
Definition FlxCard.h:410