00001 #ifndef _RORC_LIB_H_
00002 #define _RORC_LIB_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include <unistd.h>
00016 #include <errno.h>
00017 #include <stdio.h>
00018 #include <fcntl.h>
00019 #include <stdlib.h>
00020 #include <linux/types.h>
00021
00022 #include <sys/mman.h>
00023 #include <asm/page.h>
00024 #include <sys/ioctl.h>
00025 #include <linux/pci.h>
00026
00027
00028
00029
00030
00031
00032
00033
00034 #include "ddl_def.h"
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044 #define RORC_MAX_REVISION 4
00045
00046
00047
00048 #define PRORC 1
00049 #define DRORC 2
00050 #define INTEG 3
00051 #define DRORC2 4
00052
00053
00054
00055
00056
00057 #define DRORC_REG_NUM 32
00058
00059 #define RCSR 0
00060 #define RERR 1
00061 #define RFID 2
00062 #define RHID 3
00063 #define C_CSR 4
00064 #define C_ERR 5
00065 #define C_DCR 6
00066 #define C_DSR 7
00067 #define C_DG1 8
00068 #define C_DG2 9
00069 #define C_DG3 10
00070 #define C_DG4 11
00071 #define C_DGS 12
00072 #define C_RRBAR 13
00073 #define C_RAFL 14
00074 #define C_RAFH 15
00075 #define C_TRBAR 16
00076 #define C_TAFL 17
00077 #define C_TAFH 18
00078 #define RESERVED 19
00079 #define C_RDR1 20
00080 #define C_RDR2 21
00081 #define C_RDR3 22
00082 #define C_RDR4 23
00083 #define C_TDR1 24
00084 #define C_TDR2 25
00085 #define C_TDR3 26
00086 #define C_TDR4 27
00087 #define C_RXDC 28
00088 #define C_TXDC 29
00089 #define C_RXDA 30
00090 #define C_TXDA 31
00091
00092
00093
00094
00095
00096 #define I2C_DATA 0x000000FF // bits 7 ... 0
00097 #define I2C_ADDRESS 0x0000FF00 // bits 15 ... 8
00098 #define I2C_WRITE 0x00010000 // bit 16
00099 #define I2C_DATA_VALID 0x10000000 // bit 28
00100 #define I2C_READ_OPERATION_ACTIVE 0x20000000 // bit 29
00101 #define I2C_WRITE_OPERATION_VALIDE 0x40000000 // bit 30
00102 #define I2C_OPERATION_ACTIVE 0x80000000 // bit 31
00103
00104
00105
00106
00107
00108
00109
00110
00111 #define DRORC_CMD_RESET_RORC 0x00000001 //bit 0
00112 #define DRORC_CMD_RESET_CHAN 0x00000002 //bit 1
00113 #define DRORC_CMD_CLEAR_RORC_ERROR 0x00000008 //bit 3
00114
00115
00116
00117 #define DRORC_CMD_RESET_DIU 0x00000001 //bit 0
00118 #define DRORC_CMD_CLEAR_FIFOS 0x00000002 //bit 1
00119 #define DRORC_CMD_CLEAR_RXFF 0x00000004 //bit 2
00120 #define DRORC_CMD_CLEAR_TXFF 0x00000008 //bit 3
00121 #define DRORC_CMD_CLEAR_ERROR 0x00000010 //bit 4
00122 #define DRORC_CMD_CLEAR_COUNTERS 0x00000020 //bit 5
00123
00124 #define DRORC_CMD_JTAG_DOWN_ON 0x00000040 //bit 6
00125 #define DRORC_CMD_JTAG_DOWN_OFF 0x00000080 //bit 7
00126 #define DRORC_CMD_DATA_TX_ON_OFF 0x00000100 //bit 8
00127 #define DRORC_CMD_DATA_RX_ON_OFF 0x00000200 //bit 9
00128 #define DRORC_CMD_START_DG 0x00000400 //bit 10
00129 #define DRORC_CMD_STOP_DG 0x00000800 //bit 11
00130 #define DRORC_CMD_LOOPB_ON_OFF 0x00001000 //bit 12
00131 #define DRORC_CMD_HLT_FLC_ON_OFF 0x20000000 //bit 29
00132 #define DRORC_CMD_HLT_SPL_ON_OFF 0x40000000 //bit 30
00133
00134
00135
00136
00137
00138 #define DRORC_STAT_LINK_DOWN 0x00002000 //bit 13
00139 #define DRORC_STAT_LINK_FULL 0x00004000 //bit 14
00140 #define DRORC_STAT_CMD_NOT_EMPTY 0x00010000 //bit 16
00141
00142 #define DRORC_STAT_RXRBAR_NOT_SET 0x00020000 //bit 17
00143 #define DRORC_STAT_RXAFF_EMPTY 0x00040000 //bit 18
00144 #define DRORC_STAT_RXAFF_FULL 0x00080000 //bit 19
00145
00146 #define DRORC_STAT_TXRBAR_NOT_SET 0x00100000 //bit 20
00147 #define DRORC_STAT_TXAFF_EMPTY 0x00200000 //bit 21
00148 #define DRORC_STAT_TXAFF_FULL 0x00400000 //bit 22
00149
00150 #define DRORC_STAT_RXSTAT_NOT_EMPTY 0x00800000 //bit 23
00151 #define DRORC_STAT_RXDAT_ALMOST_FULL 0x01000000 //bit 24
00152 #define DRORC_STAT_RXDAT_NOT_EMPTY 0x02000000 //bit 25
00153
00154 #define DRORC_STAT_TXDAT_NOT_EMPTY 0x04000000 //bit 26
00155 #define DRORC_STAT_TXDAT_ALMOST_FULL 0x08000000 //bit 27
00156
00157 #define DRORC_STAT_ERR_NOT_EMPTY 0x80000000 //bit 31
00158
00159 #define DRORC_STAT_ANY 0xffffffc0 //bits 31-6
00160
00161
00162
00163
00164
00165 #define DRORC_STAT_TEXT "0,0,0,0,0,0,\
00166 JTAG download enabled,\
00167 0,\
00168 Data transfer (RDMA) enabled,\
00169 Data receiver (WDMA) enabled,\
00170 Data Generator started,0,\
00171 Internal loop-back set,\
00172 Link is down,\
00173 Link is full,\
00174 0,\
00175 DDL command register not empty,\
00176 Receive report base address not set,\
00177 Receive address FIFO empty,\
00178 Receive address FIFO full,\
00179 Transmit report base address not set,\
00180 Transmit address FIFO empty,\
00181 Transmit address FIFO full,\
00182 Receiver status FIFO not empty,\
00183 Receive data FIFO almost full,\
00184 Receive data FIFO not empty,\
00185 Transmit data FIFO not empty,\
00186 Transmit data FIFO almost full,\
00187 0,\
00188 HLT flow-control enabled,\
00189 HLT splitter enabled,\
00190 Error register is not empty"
00191
00192 #define DRORC_STAT_DEFAULT_TEXT "Reserved bit set"
00193
00194
00195
00196
00197
00198
00199
00200 #define PRORC_CMD_RESET_RORC 0x0110
00201 #define PRORC_CMD_RESET_DIU 0x0210
00202 #define PRORC_CMD_RESET_RORC_DIU 0x0310
00203 #define PRORC_CMD_RESET_SIU 0x00F1
00204 #define PRORC_CMD_CLEAR_FIFOS 0x0410
00205 #define PRORC_CMD_CLEAR_FF 0x0810
00206 #define PRORC_CMD_CLEAR_ERROR 0x1010
00207 #define PRORC_CMD_CLEAR_COUNTERS 0x2010
00208 #define PRORC_CMD_GET_STAT 0x020
00209 #define PRORC_CMD_GET_ID 0x030
00210 #define PRORC_CMD_PUSH_FF 0x040
00211 #define PRORC_CMD_POP_FF 0x050
00212 #define PRORC_CMD_PUT_READY_BASE 0x060
00213 #define PRORC_CMD_DG_PARAM1 0x070
00214 #define PRORC_CMD_DG_PARAM2 0x080
00215 #define PRORC_CMD_DOWNL_DATA 0x090
00216 #define PRORC_CMD_DOWNL_JTAG 0x190
00217 #define PRORC_CMD_PARAM_RESET 0x0a0
00218 #define PRORC_CMD_LOOPB_ON 0x1a0
00219 #define PRORC_CMD_STOP_ERR_ON 0x2a0
00220 #define PRORC_CMD_START_W_DMA 0x1b0
00221 #define PRORC_CMD_STOP_W_DMA 0x0b0
00222 #define PRORC_CMD_START_DG 0x3b0
00223 #define PRORC_CMD_STOP_DG 0x2b0
00224 #define PRORC_CMD_GET_IN_BYTES 0x0c0
00225 #define PRORC_CMD_GET_OUT_BYTES 0x1c0
00226
00227 #define PRORC_PARAM_LOOPB 0x1
00228 #define PRORC_PARAM_STOP_ERR 0x2
00229
00230
00231
00232
00233
00234 #define PRORC_NE_OMB1 0x0000000f
00235 #define PRORC_NE_OMB2 0x000000f0
00236 #define PRORC_NE_OMB3 0x00000f00
00237 #define PRORC_NE_OMB4 0x0000f000
00238 #define PRORC_NE_OUTMB 0x0000ffff
00239 #define PRORC_NE_IMB1 0x000f0000
00240 #define PRORC_NE_IMB2 0x00f00000
00241 #define PRORC_NE_IMB3 0x0f000000
00242 #define PRORC_NE_IMB4 0x70000000
00243 #define PRORC_NE_INMB 0x7fff0000
00244
00245
00246
00247
00248
00249 #define PRORC_BIT_LINK_DOWN 0x80000000
00250 #define PRORC_BIT_FF_EMPTY 0x40000000
00251 #define PRORC_BIT_CMD_RDY1 0x04000000
00252 #define PRORC_BIT_CMD_RDY2 0x02000000
00253 #define PRORC_BIT_CMD_PROC 0x01000000
00254
00255
00256
00257
00258
00259 #define PRORC_STAT_LINK_DOWN 0x40000000 //bit 30
00260 #define PRORC_STAT_LINK_FULL 0x20000000 //bit 29
00261 #define PRORC_STAT_FIFO_NOT_EMPTY 0x10000000 //bit 28
00262 #define PRORC_STAT_DC_NOT_EMPTY 0x08000000 //bit 27
00263 #define PRORC_STAT_JTAG_NOT_EMPTY 0x04000000 //bit 26
00264 #define PRORC_STAT_FED_NOT_EMPTY 0x02000000 //bit 25
00265 #define PRORC_STAT_DIU_CMD_NOT_EMPTY 0x01000000 //bit 24
00266 #define PRORC_STAT_DTSTW_NOT_EMPTY 0x00800000 //bit 23
00267 #define PRORC_STAT_RFBAR_NOT_SET 0x00400000 //bit 22
00268 #define PRORC_STAT_START_DATA_GEN 0x00200000 //bit 21
00269 #define PRORC_STAT_LOOP_BACK 0x00100000 //bit 20
00270 #define PRORC_STAT_STOP_ON_ERROR 0x00080000 //bit 19
00271 #define PRORC_STAT_JTAG_DLOAD_ENABLE 0x00040000 //bit 18
00272 #define PRORC_STAT_WAIT_DTSTW 0x00020000 //bit 17
00273 #define PRORC_STAT_RDMA_RUNNING 0x00010000 //bit 16
00274 #define PRORC_STAT_RDMA_SUSP_PCI 0x00008000 //bit 15
00275 #define PRORC_STAT_RDMA_SUSP_LINK 0x00004000 //bit 14
00276 #define PRORC_STAT_JTAG_REC_ENABLE 0x00002000 //bit 13
00277 #define PRORC_STAT_WDMA_RUNNING 0x00001000 //bit 12
00278 #define PRORC_STAT_WDMA_SUSP_PCI 0x00000800 //bit 11
00279 #define PRORC_STAT_WDMA_SUSP_LINK 0x00000400 //bit 10
00280 #define PRORC_STAT_FF_EMPTY 0x00000020 //bit 5
00281 #define PRORC_STAT_FF_FULL 0x00000010 //bit 4
00282 #define PRORC_STAT_FF_USEDW 0x0000000f //bits 3-0
00283 #define PRORC_STAT_ANY 0x7ffffff0 //bits 30-4
00284
00285
00286
00287
00288
00289 #define PRORC_STAT_TEXT "0,0,0,0,\
00290 Free FIFO full,\
00291 Free FIFO empty,\
00292 0,0,0,0,\
00293 W_DMA suspended because of the link (DC_EMPTY),\
00294 W_DMA suspended because of the PCI (WRFULL),\
00295 W_DMA running,\
00296 JTAG receive enabled,\
00297 R_DMA_SUSPENDED because of the link (FEDF_FULL),\
00298 R_DMA suspended because of the PCI (RDEMPTY),\
00299 R_DMA running,\
00300 Waiting for DTSTW adfter R_DMA,\
00301 JTAG download enabled,\
00302 Stop on error is on,\
00303 Internal loop-back set,\
00304 Data Generator started,\
00305 Ready FIFO base address not set,\
00306 DTSTW register not empty,\
00307 DIU command register not empty,\
00308 FED FIFO not empty,\
00309 JTAG FIFO not empty,\
00310 DC FIFO not empty,\
00311 Status FIFO not empty,\
00312 Link is full,\
00313 Link is down,\
00314 0"
00315
00316 #define PRORC_STAT_DEFAULT_TEXT "Reserved bit set"
00317
00318
00319
00320
00321
00322 #define PRORC_ERROR 0x80000000
00323 #define PRORC_ERR_INV_COMM 0x40000000
00324 #define PRORC_ERR_MISS_PARM 0x20000000
00325 #define PRORC_ERR_FF_OVWR 0x04000000
00326 #define PRORC_ERR_DTSTW_OVWR 0x02000000
00327 #define PRORC_ERR_DIU_OVWR 0x01000000
00328 #define PRORC_ERR_LINK_DOWN 0x00800000
00329 #define PRORC_ERR_STAT_FF_FULL 0x00000008
00330 #define PRORC_ERR_FED_FULL 0x00000004
00331 #define PRORC_ERR_DC_FULL 0x00000002
00332 #define PRORC_ERR_JTAG_FULL 0x00000001
00333
00334
00335 #define MAX_WAIT 1000000
00336
00337
00338
00339
00340
00341 #define PRORC_DMA_WAIT 16
00342
00343
00344
00345
00346
00347
00348
00349 #define MAX_RETURN_CODE 15
00350 #define MAX_RETURN_TEXT 32
00351
00352 #define RORC_STATUS_OK 0
00353 #define RORC_STATUS_ERROR -1
00354 #define RORC_INVALID_PARAM -2
00355
00356 #define RORC_LINK_NOT_ON -4
00357 #define RORC_CMD_NOT_ALLOWED -8
00358 #define RORC_NOT_ACCEPTED -16
00359 #define RORC_NOT_ABLE -32
00360 #define RORC_TIMEOUT -64
00361
00362 #define RORC_FF_FULL -128
00363 #define RORC_FF_EMPTY -256
00364
00365 #define RORC_NOT_ENOUGH_REPLY -512
00366 #define RORC_TOO_MANY_REPLY -1024
00367
00368 #define RORC_DATA_BLOCK_NOT_ARRIVED 0
00369 #define RORC_NOT_END_OF_EVENT_ARRIVED 1
00370 #define RORC_LAST_BLOCK_OF_EVENT_ARRIVED 2
00371
00372
00373
00374
00375
00376 #define RORC_RESET_FF 1
00377 #define RORC_RESET_RORC 2
00378 #define RORC_RESET_DIU 4
00379 #define RORC_RESET_SIU 8
00380 #define RORC_LINK_UP 16
00381 #define RORC_RESET_FEE 32
00382 #define RORC_RESET_FIFOS 64
00383 #define RORC_RESET_ERROR 128
00384 #define RORC_RESET_COUNTERS 256
00385
00386 #define RORC_RESET_ALL 0x000001FF //bits 8-0
00387
00388
00389
00390
00391
00392 #define RORC_DG_CONST 1
00393 #define RORC_DG_ALTER 2
00394 #define RORC_DG_FLY0 3
00395 #define RORC_DG_FLY1 4
00396 #define RORC_DG_INCR 5
00397 #define RORC_DG_DECR 6
00398 #define RORC_DG_RANDOM 7
00399
00400 #define RORC_DG_NO_RANDOM_LEN 0
00401 #define RORC_DG_INFINIT_EVENT 0
00402
00403
00404
00405
00406
00407 #define TWO_TO_THE_18 262144.0
00408 #define TWO_TO_THE_20 1048576.0
00409 #define TWO_TO_THE_32 4294967296.0
00410 #define RORC_CLOCK_18 0.009868950588
00411
00412
00413
00414
00415
00416 #define dRorcWriteReg(dev, reg_number, reg_value) \
00417 *(*(dev)).reg[reg_number] = reg_value
00418
00419 #define dRorcReadReg(dev, reg_number) (*(*(dev)).reg[reg_number])
00420
00421 #define dRorcPushRxFreeFifo(dev, blockAddress, blockLength, readyFifoIndex) \
00422 dRorcWriteReg (dev, C_RAFH, blockAddress); \
00423 dRorcWriteReg (dev, C_RAFL, ((blockLength) << 8) | (readyFifoIndex))
00424
00425 #define dRorcPushTxFreeFifo(dev, blockAddress, blockLength, readyFifoIndex) \
00426 dRorcWriteReg (dev, C_TAFH, blockAddress); \
00427 dRorcWriteReg (dev, C_TAFL, ((blockLength) << 8) | (readyFifoIndex))
00428
00429 #define dRorcCheckLoopBack(dev) (dRorcReadReg(dev, C_CSR) & \
00430 DRORC_CMD_LOOPB_ON_OFF)
00431 #define dRorcChangeLoopBack(dev) dRorcWriteReg(dev, C_CSR, \
00432 DRORC_CMD_LOOPB_ON_OFF)
00433 #define dRorcCheckHltFlctl(dev) (dRorcReadReg(dev, C_CSR) & \
00434 DRORC_CMD_HLT_FLC_ON_OFF)
00435 #define dRorcChangeHltFlctl(dev) dRorcWriteReg(dev, C_CSR, \
00436 DRORC_CMD_HLT_FLC_ON_OFF)
00437 #define dRorcCheckHltSplit(dev) (dRorcReadReg(dev, C_CSR) & \
00438 DRORC_CMD_HLT_SPL_ON_OFF)
00439 #define dRorcChangeHltSplit(dev) dRorcWriteReg(dev, C_CSR, \
00440 DRORC_CMD_HLT_SPL_ON_OFF)
00441 #define dRorcCheckRxStatus(dev) (dRorcReadReg(dev, C_CSR) & \
00442 DRORC_STAT_RXSTAT_NOT_EMPTY)
00443 #define dRorcCheckTxStatus(dev) (dRorcReadReg(dev, C_CSR) & \
00444 DRORC_STAT_TXSTAT_NOT_EMPTY)
00445 #define dRorcCheckRxData(dev) (dRorcReadReg(dev, C_CSR) & \
00446 DRORC_STAT_RXDAT_NOT_EMPTY)
00447 #define dRorcCheckTxData(dev) (dRorcReadReg(dev, C_CSR) & \
00448 DRORC_STAT_TXDAT_NOT_EMPTY)
00449 #define dRorcReadRxDmaCount(dev) (dRorcReadReg(dev, C_RXDC) & 0xFFFFFF)
00450 #define dRorcReadTxDmaCount(dev) (dRorcReadReg(dev, C_TXDC) & 0xFFFFFF)
00451
00452 #define I2C_ACTIVE(dev) (dRorcReadReg(dev, RHID) & I2C_OPERATION_ACTIVE)
00453
00454
00455
00456 #define pRorcWriteMb(dev, mb_number, mb_value) \
00457 *(*(dev)).omb[mb_number] = mb_value
00458
00459 #define pRorcReadMb(dev, mb_number) (*(*(dev)).imb[mb_number])
00460
00461 #define pRorcReadRxDmaCount(dev) (*(*(dev)).mwtc)
00462 #define pRorcReadTxDmaCount(dev) (*(*(dev)).mrtc)
00463
00464 #define pRorcPushOldFreeFifo(dev, blockAddress, blockLength, readyFifoIndex) \
00465 while ((*(*(dev)).mbef & 0xffff) != 0); \
00466 *(*(dev)).omb[3] = (blockLength); \
00467 *(*(dev)).omb[2] = (blockAddress); \
00468 *(*(dev)).omb[1] = ((readyFifoIndex) << 8) | PRORC_CMD_PUSH_FF
00469
00470 #define pRorcInitCmdProc(dev) (prorc_cmd_rdy = (pRorcReadMb(dev, 4) & PRORC_BIT_CMD_RDY1))
00471
00472
00473 #define pRorcCheckMb(dev, mb_mask) (*(*(dev)).mbef & mb_mask)
00474
00475 #define NVRAM_BUSY_MEM(ptr_to_pci_mem) (*(ptr_to_pci_mem + 0x3F) & 0x80)
00476
00477
00478
00479 #define pRorc(dev) ((*(dev)).rorc_revision == PRORC)
00480
00481 #define rorcCheckLink(dev) \
00482 (pRorc(dev) ? \
00483 ((pRorcReadMb(dev, 4) & PRORC_BIT_LINK_DOWN) ? RORC_LINK_NOT_ON \
00484 : RORC_STATUS_OK) \
00485 : \
00486 ((dRorcReadReg(dev, C_CSR) & DRORC_STAT_LINK_DOWN) ? RORC_LINK_NOT_ON \
00487 : RORC_STATUS_OK))
00488
00489 #define rorcCheckStatus(dev) \
00490 (pRorc(dev) ? \
00491 pRorcCheckMb(dev, PRORC_NE_IMB1) : dRorcCheckRxStatus(dev))
00492
00493 #define rorcCheckCommandRegister(dev) \
00494 (pRorc(dev) ? \
00495 pRorcCheckMb(dev, PRORC_NE_OMB1) \
00496 : \
00497 dRorcReadReg(dev, C_CSR) & DRORC_STAT_CMD_NOT_EMPTY)
00498
00499 #define rorcPutCommandRegister(dev, com) \
00500 (pRorc(dev) ? \
00501 (pRorcInitCmdProc(dev), pRorcWriteMb(dev, 1, com), pRorcWaitCmdProc(dev)) \
00502 : \
00503 (dRorcWriteReg((dev), C_DCR, (com))))
00504
00505 #define rorcLoopBackOn(dev) rorcParamOn(dev, PRORC_PARAM_LOOPB)
00506
00507 #define rorcLoopBackOff(dev) rorcParamOff(dev);
00508
00509 #define rorcPushFreeFifo(dev, blockAddress, blockLength, readyFifoIndex) \
00510 if (pRorc(dev)) \
00511 { \
00512 while ((*(*(dev)).mbef & 0xffff) != 0); \
00513 *(*(dev)).omb[3] = (blockLength); \
00514 *(*(dev)).omb[2] = (blockAddress); \
00515 *(*(dev)).omb[1] = ((readyFifoIndex) << 8) | PRORC_CMD_PUSH_FF; \
00516 } \
00517 else \
00518 { \
00519 dRorcPushRxFreeFifo(dev, blockAddress, blockLength, readyFifoIndex); \
00520 }
00521
00522 #define rorcHasData(rf, index) \
00523 (((rf)[index].status == -1) ? RORC_DATA_BLOCK_NOT_ARRIVED : \
00524 (((rf)[index].status == 0) ? RORC_NOT_END_OF_EVENT_ARRIVED : \
00525 RORC_LAST_BLOCK_OF_EVENT_ARRIVED))
00526
00527 #define rorcFFSize(fw) ((fw & 0xff000000) >> 18)
00528 #define rorcFWVersMajor(fw) ((fw >> 20) & 0xf)
00529 #define rorcFWVersMinor(fw) ((fw >> 13) & 0x7f)
00530
00531
00532
00533
00534
00535 typedef struct
00536 {
00537 int fd;
00538 int minor;
00539 volatile unsigned *p2pci;
00540 unsigned shift;
00541 unsigned short vendor;
00542 unsigned short device;
00543 unsigned irq;
00544 unsigned base_address[6];
00545 unsigned rom_address;
00546 unsigned bus_speed_mode;
00547 int rorc_revision;
00548 int rorc_serial;
00549 int diu_version;
00550 int driver_major;
00551 int driver_minor;
00552 int driver_release;
00553 int ddl_channel;
00554 int fd_ch;
00555 volatile unsigned *reg[DRORC_REG_NUM];
00556 volatile unsigned *omb[5];
00557 volatile unsigned *imb[5];
00558 volatile unsigned *mwar;
00559 volatile unsigned *mwtc;
00560 volatile unsigned *mrar;
00561 volatile unsigned *mrtc;
00562 volatile unsigned *mbef;
00563 volatile unsigned *intcsr;
00564 volatile unsigned *mcsr;
00565 long long int loop_per_usec;
00566 long long int max_resp_time;
00567 } rorc_pci_dev_t;
00568
00569 typedef rorc_pci_dev_t rorcDescriptor_t;
00570 typedef rorcDescriptor_t* rorcHandle_t;
00571
00572 typedef struct
00573 {
00574 int minor;
00575 int channel;
00576 } rorcChannelId_t;
00577
00578
00579 typedef struct
00580 {
00581 volatile unsigned int length;
00582 volatile unsigned int status;
00583 } rorcReadyFifo_t;
00584
00585 typedef struct
00586 {
00587 __u32 ccsr;
00588 __u32 cerr;
00589 __u32 cdgs;
00590 } rorcStatus_t;
00591
00592 typedef struct
00593 {
00594 unsigned long gbc;
00595 unsigned long mbc;
00596 unsigned long gtc;
00597 unsigned long lbc;
00598 double lspeed;
00599 double bytes;
00600 double time;
00601 double gspeed;
00602 } rorcCounter_t;
00603
00604 typedef struct
00605 {
00606 __u8 data[DDL_MAX_HW_ID];
00607 int version;
00608 int subversion;
00609 int serial;
00610 } rorcHwSerial_t;
00611
00612 typedef struct
00613 {
00614 char id_text[8];
00615 int sn_pos;
00616 int ch_pos;
00617 int ver_pos;
00618 int ld_pos;
00619 } rorcId_t;
00620
00621 typedef struct
00622 {
00623 int code;
00624 char text[MAX_RETURN_TEXT];
00625 } rorcReturn_t;
00626
00627
00628
00629
00630
00631 extern volatile __u32 prorc_cmd_rdy;
00632 extern volatile int interrupt_arrived;
00633
00634
00635
00636
00637
00638
00639 void sprom_load_address_mem(volatile char *ptr_to_pci_mem, __u8 address);
00640 __u8 sprom_readB_mem(volatile char *ptr_to_pci_mem, __u8 address);
00641 int i2c_write_a_byte(rorcHandle_t dev, __u8 address, __u8 data, int timeout);
00642 int i2c_read_a_byte(rorcHandle_t dev, __u8 address, __u8 *data, int timeout);
00643 rorcHwSerial_t rorcSerial(rorcHandle_t handle);
00644 void rorcBuildHwSerial(__u8 data[], int rorc_rev, int version_major,
00645 int version_minor, __u8 c_pld[], int numb_chan,
00646 int serial);
00647 int rorcCheckOpen(int minor, unsigned int channel);
00648 int rorcFind(int revision, int serial, int *minor);
00649 int rorcFindAll(rorcHwSerial_t *hw, rorcHwSerial_t *diu_hw,
00650 rorcChannelId_t *channel, int *rorc_revision,
00651 int *diu_version, int max_dev);
00652 int rorcQuickFind(int *rorc_minor, int *rorc_revision, int *pci_speed,
00653 int *rorc_serial, int *rorc_fw_maj,int *rorc_fw_min,
00654 int *max_chan, int *ch_pid0, int *ch_pid1, int max_dev);
00655 int rorcMapChannel(rorcDescriptor_t *prorc, int minor, int channel);
00656 int rorcMap(rorcDescriptor_t *prorc, int minor);
00657 int rorcOpenChannel(rorcDescriptor_t *prorc, int minor, int channel);
00658 int rorcOpen(rorcDescriptor_t *prorc, int minor);
00659 int rorcClose(rorcDescriptor_t *prorc);
00660 int physmemOpen (int *fd,
00661 volatile unsigned long **user_addr,
00662 unsigned long *phys_addr,
00663 unsigned long *size_physmem);
00664 int physmemClose (int physmem_fd,
00665 unsigned long *addr_user_physmem,
00666 unsigned long phys_size_physmem);
00667 int rorcCheckVersion(rorc_pci_dev_t *dev);
00668 void rorcReset(rorc_pci_dev_t *dev, int prorc_cmd);
00669 int rorcEmptyDataFifos(rorc_pci_dev_t *dev, int empty_time);
00670 int dRorcWaitRxStatusNotEmpty(rorc_pci_dev_t *dev);
00671 int dRorcCheckRxFreeFifo(rorc_pci_dev_t *dev);
00672 int dRorcCheckTxFreeFifo(rorc_pci_dev_t *dev);
00673 int rorcCheckTxNotFinished(rorc_pci_dev_t *dev);
00674 int rorcCheckFreeFifo(rorc_pci_dev_t *dev);
00675 int rorcPopFreeFifo (rorc_pci_dev_t *dev,
00676 int tx,
00677 __u32 *blockAddress,
00678 int *blockLength,
00679 int *readyFifoIndex);
00680 int pRorcWaitCmdProc(rorc_pci_dev_t *dev);
00681 int pRorcWaitMbNotEmpty(rorc_pci_dev_t *dev, __u32 mbMask);
00682 int pRorcEmptyMb(rorc_pci_dev_t *prorc, int mb_number, short print);
00683 int dRorcEmptyRxStatus(rorc_pci_dev_t *prorc, short print);
00684 int rorcReadRorcStatus(rorcHandle_t handle, rorcStatus_t *status);
00685 char *rorcPrintStatus(rorcHandle_t handle, int prefix);
00686 int rorcCheckDriver(rorcHandle_t dev, int crevision,
00687 int cmajor, int cminor, int crelease);
00688 char* rorcInterpretBusMode(int bus_speed_mode);
00689 char* rorcInterpretBusSpeed(int bus_speed_mode);
00690 char *rorcInterpretReturnCode(int return_code);
00691 void rorcInterpretStatus(rorcHandle_t dev, __u32 status, char* pref, char* suff);
00692 void rorcInterpretErrors(__u32 errors, char* pref, char* suff);
00693 __u32 rorcReadFw(rorcHandle_t handle);
00694 void rorcInterpretVersion(__u32 x);
00695 void rorcInterpretSerial(rorcHwSerial_t hw);
00696 void rorcInterpretFw(__u32 fw);
00697 int rorcReadCounters(rorcHandle_t dev, rorcCounter_t *counter, int inOrout);
00698 int rorcReadRxDmaCount(rorcHandle_t dev);
00699 int rorcReadTxDmaCount(rorcHandle_t dev);
00700 int rorcParamOn(rorc_pci_dev_t *dev, int param);
00701 int rorcParamOff(rorc_pci_dev_t *dev);
00702 int rorcHltFlctlOn(rorc_pci_dev_t *dev);
00703 int rorcHltFlctlOff(rorc_pci_dev_t *dev);
00704 int rorcHltSplitOn(rorc_pci_dev_t *dev);
00705 int rorcHltSplitOff(rorc_pci_dev_t *dev);
00706 int rorcArmDataGenerator(rorc_pci_dev_t *dev,
00707 __u32 initEventNumber,
00708 __u32 initDataWord,
00709 int dataPattern,
00710 int eventLen,
00711 int seed,
00712 int *rounded_len);
00713 int rorcStartDataGenerator(rorc_pci_dev_t *dev,
00714 __u32 maxLoop);
00715 int rorcStopDataGenerator(rorc_pci_dev_t *dev);
00716 int rorcStartDataReceiver(rorc_pci_dev_t *dev,
00717 unsigned long readyFifoBaseAdress);
00718 int rorcStopDataReceiver(rorc_pci_dev_t *dev);
00719 int rorcStartDownload(rorc_pci_dev_t *dev,
00720 unsigned long bufferPhysAddress,
00721 unsigned long bufferWordLength,
00722 unsigned long returnPhysAddress);
00723 int rorcStopDownload(rorc_pci_dev_t *dev);
00724 int rorcStartJtag(rorc_pci_dev_t *dev,
00725 unsigned long bufferPhysAddress,
00726 unsigned long bufferWordLength,
00727 unsigned long returnPhysAddress);
00728 int rorcStopJtag(rorc_pci_dev_t *dev);
00729
00730
00731
00732
00733
00734 #endif