Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef _RRUNNER_H_
0003 #define _RRUNNER_H_
0004 
0005 #include <linux/interrupt.h>
0006 
0007 #if ((BITS_PER_LONG != 32) && (BITS_PER_LONG != 64))
0008 #error "BITS_PER_LONG not defined or not valid"
0009 #endif
0010 
0011 
0012 struct rr_regs {
0013 
0014     u32 pad0[16];
0015 
0016     u32 HostCtrl;
0017     u32 LocalCtrl;
0018     u32 Pc;
0019     u32 BrkPt;
0020 
0021 /* Timer increments every 0.97 micro-seconds (unsigned int) */
0022     u32 Timer_Hi;
0023     u32 Timer;
0024     u32 TimerRef;
0025     u32 PciState;
0026 
0027     u32 Event;
0028     u32 MbEvent;
0029 
0030     u32 WinBase;
0031     u32 WinData;
0032     u32 RX_state;
0033     u32 TX_state;
0034 
0035     u32 Overhead;
0036     u32 ExtIo;
0037 
0038     u32 DmaWriteHostHi;
0039     u32 DmaWriteHostLo;
0040 
0041     u32 pad1[2];
0042 
0043     u32 DmaReadHostHi;
0044     u32 DmaReadHostLo;
0045 
0046     u32 pad2;
0047 
0048     u32 DmaReadLen;
0049     u32 DmaWriteState;
0050 
0051     u32 DmaWriteLcl;
0052     u32 DmaWriteIPchecksum;
0053     u32 DmaWriteLen;
0054     u32 DmaReadState;
0055     u32 DmaReadLcl;
0056     u32 DmaReadIPchecksum;
0057     u32 pad3;
0058 
0059     u32 RxBase;
0060     u32 RxPrd;
0061     u32 RxCon;
0062 
0063     u32 pad4;
0064 
0065     u32 TxBase;
0066     u32 TxPrd;
0067     u32 TxCon;
0068 
0069     u32 pad5;
0070 
0071     u32 RxIndPro;
0072     u32 RxIndCon;
0073     u32 RxIndRef;
0074 
0075     u32 pad6;
0076 
0077     u32 TxIndPro;
0078     u32 TxIndCon;
0079     u32 TxIndRef;
0080 
0081     u32 pad7[17];
0082 
0083     u32 DrCmndPro;
0084     u32 DrCmndCon;
0085     u32 DrCmndRef;
0086 
0087     u32 pad8;
0088 
0089     u32 DwCmndPro;
0090     u32 DwCmndCon;
0091     u32 DwCmndRef;
0092 
0093     u32 AssistState;
0094 
0095     u32 DrDataPro;
0096     u32 DrDataCon;
0097     u32 DrDataRef;
0098 
0099     u32 pad9;
0100 
0101     u32 DwDataPro;
0102     u32 DwDataCon;
0103     u32 DwDataRef;
0104 
0105     u32 pad10[33];
0106 
0107     u32 EvtCon;
0108 
0109     u32 pad11[5];
0110 
0111     u32 TxPi;
0112     u32 IpRxPi;
0113 
0114     u32 pad11a[8];
0115 
0116     u32 CmdRing[16];
0117 
0118 /* The ULA is in two registers the high order two bytes of the first
0119  * word contain the RunCode features.
0120  * ula0     res res byte0   byte1
0121  * ula1     byte2   byte3   byte4   byte5
0122  */
0123     u32 Ula0;
0124     u32 Ula1;
0125 
0126     u32 RxRingHi;
0127     u32 RxRingLo;
0128 
0129     u32 InfoPtrHi;
0130     u32 InfoPtrLo;
0131 
0132     u32 Mode;
0133 
0134     u32 ConRetry;
0135     u32 ConRetryTmr;
0136 
0137     u32 ConTmout;
0138     u32 CtatTmr;
0139 
0140     u32 MaxRxRng;
0141 
0142     u32 IntrTmr;
0143     u32 TxDataMvTimeout;
0144     u32 RxDataMvTimeout;
0145 
0146     u32 EvtPrd;
0147     u32 TraceIdx;
0148 
0149     u32 Fail1;
0150     u32 Fail2;
0151 
0152     u32 DrvPrm;
0153 
0154     u32 FilterLA;
0155 
0156     u32 FwRev;
0157     u32 FwRes1;
0158     u32 FwRes2;
0159     u32 FwRes3;
0160 
0161     u32 WriteDmaThresh;
0162     u32 ReadDmaThresh;
0163 
0164     u32 pad12[325];
0165     u32 Window[512];
0166 };
0167 
0168 /*
0169  * Host control register bits.
0170  */
0171 
0172 #define RR_INT      0x01
0173 #define RR_CLEAR_INT    0x02
0174 #define NO_SWAP     0x04000004
0175 #define NO_SWAP1    0x00000004
0176 #define PCI_RESET_NIC   0x08
0177 #define HALT_NIC    0x10
0178 #define SSTEP_NIC   0x20
0179 #define MEM_READ_MULTI  0x40
0180 #define NIC_HALTED  0x100
0181 #define HALT_INST   0x200
0182 #define PARITY_ERR  0x400
0183 #define INVALID_INST_B  0x800
0184 #define RR_REV_2    0x20000000
0185 #define RR_REV_MASK 0xf0000000
0186 
0187 /*
0188  * Local control register bits.
0189  */
0190 
0191 #define INTA_STATE      0x01
0192 #define CLEAR_INTA      0x02
0193 #define FAST_EEPROM_ACCESS  0x08
0194 #define ENABLE_EXTRA_SRAM   0x100
0195 #define ENABLE_EXTRA_DESC   0x200
0196 #define ENABLE_PARITY       0x400
0197 #define FORCE_DMA_PARITY_ERROR  0x800
0198 #define ENABLE_EEPROM_WRITE 0x1000
0199 #define ENABLE_DATA_CACHE   0x2000
0200 #define SRAM_LO_PARITY_ERR  0x4000
0201 #define SRAM_HI_PARITY_ERR  0x8000
0202 
0203 /*
0204  * PCI state bits.
0205  */
0206 
0207 #define FORCE_PCI_RESET     0x01
0208 #define PROVIDE_LENGTH      0x02
0209 #define MASK_DMA_READ_MAX   0x1C
0210 #define RBURST_DISABLE      0x00
0211 #define RBURST_4        0x04
0212 #define RBURST_16       0x08
0213 #define RBURST_32       0x0C
0214 #define RBURST_64       0x10
0215 #define RBURST_128      0x14
0216 #define RBURST_256      0x18
0217 #define RBURST_1024     0x1C
0218 #define MASK_DMA_WRITE_MAX  0xE0
0219 #define WBURST_DISABLE      0x00
0220 #define WBURST_4        0x20
0221 #define WBURST_16       0x40
0222 #define WBURST_32       0x60
0223 #define WBURST_64       0x80
0224 #define WBURST_128      0xa0
0225 #define WBURST_256      0xc0
0226 #define WBURST_1024     0xe0
0227 #define MASK_MIN_DMA        0xFF00
0228 #define FIFO_RETRY_ENABLE   0x10000
0229 
0230 /*
0231  * Event register
0232  */
0233 
0234 #define DMA_WRITE_DONE      0x10000
0235 #define DMA_READ_DONE       0x20000
0236 #define DMA_WRITE_ERR       0x40000
0237 #define DMA_READ_ERR        0x80000
0238 
0239 /*
0240  * Receive state
0241  *
0242  * RoadRunner HIPPI Receive State Register controls and monitors the
0243  * HIPPI receive interface in the NIC. Look at err bits when a HIPPI
0244  * receive Error Event occurs.
0245  */
0246 
0247 #define ENABLE_NEW_CON      0x01
0248 #define RESET_RECV      0x02
0249 #define RECV_ALL        0x00
0250 #define RECV_1K         0x20
0251 #define RECV_2K         0x40
0252 #define RECV_4K         0x60
0253 #define RECV_8K         0x80
0254 #define RECV_16K        0xa0
0255 #define RECV_32K        0xc0
0256 #define RECV_64K        0xe0
0257 
0258 /*
0259  * Transmit status.
0260  */
0261 
0262 #define ENA_XMIT        0x01
0263 #define PERM_CON        0x02
0264 
0265 /*
0266  * DMA write state
0267  */
0268 
0269 #define RESET_DMA       0x01
0270 #define NO_SWAP_DMA     0x02
0271 #define DMA_ACTIVE      0x04
0272 #define THRESH_MASK     0x1F
0273 #define DMA_ERROR_MASK      0xff000000
0274 
0275 /*
0276  * Gooddies stored in the ULA registers.
0277  */
0278 
0279 #define TRACE_ON_WHAT_BIT   0x00020000    /* Traces on */
0280 #define ONEM_BUF_WHAT_BIT   0x00040000    /* 1Meg vs 256K */
0281 #define CHAR_API_WHAT_BIT   0x00080000    /* Char API vs network only */
0282 #define CMD_EVT_WHAT_BIT    0x00200000    /* Command event */
0283 #define LONG_TX_WHAT_BIT    0x00400000
0284 #define LONG_RX_WHAT_BIT    0x00800000
0285 #define WHAT_BIT_MASK       0xFFFD0000    /* Feature bit mask */
0286 
0287 /*
0288  * Mode status
0289  */
0290 
0291 #define EVENT_OVFL      0x80000000
0292 #define FATAL_ERR       0x40000000
0293 #define LOOP_BACK       0x01
0294 #define MODE_PH         0x02
0295 #define MODE_FP         0x00
0296 #define PTR64BIT        0x04
0297 #define PTR32BIT        0x00
0298 #define PTR_WD_SWAP     0x08
0299 #define PTR_WD_NOSWAP       0x00
0300 #define POST_WARN_EVENT     0x10
0301 #define ERR_TERM        0x20
0302 #define DIRECT_CONN     0x40
0303 #define NO_NIC_WATCHDOG     0x80
0304 #define SWAP_DATA       0x100
0305 #define SWAP_CONTROL        0x200
0306 #define NIC_HALT_ON_ERR     0x400
0307 #define NIC_NO_RESTART      0x800
0308 #define HALF_DUP_TX     0x1000
0309 #define HALF_DUP_RX     0x2000
0310 
0311 
0312 /*
0313  * Error codes
0314  */
0315 
0316 /* Host Error Codes - values of fail1 */
0317 #define ERR_UNKNOWN_MBOX    0x1001
0318 #define ERR_UNKNOWN_CMD     0x1002
0319 #define ERR_MAX_RING        0x1003
0320 #define ERR_RING_CLOSED     0x1004
0321 #define ERR_RING_OPEN       0x1005
0322 /* Firmware internal errors */
0323 #define ERR_EVENT_RING_FULL 0x01
0324 #define ERR_DW_PEND_CMND_FULL   0x02
0325 #define ERR_DR_PEND_CMND_FULL   0x03
0326 #define ERR_DW_PEND_DATA_FULL   0x04
0327 #define ERR_DR_PEND_DATA_FULL   0x05
0328 #define ERR_ILLEGAL_JUMP    0x06
0329 #define ERR_UNIMPLEMENTED   0x07
0330 #define ERR_TX_INFO_FULL    0x08
0331 #define ERR_RX_INFO_FULL    0x09
0332 #define ERR_ILLEGAL_MODE    0x0A
0333 #define ERR_MAIN_TIMEOUT    0x0B
0334 #define ERR_EVENT_BITS      0x0C
0335 #define ERR_UNPEND_FULL     0x0D
0336 #define ERR_TIMER_QUEUE_FULL    0x0E
0337 #define ERR_TIMER_QUEUE_EMPTY   0x0F
0338 #define ERR_TIMER_NO_FREE   0x10
0339 #define ERR_INTR_START      0x11
0340 #define ERR_BAD_STARTUP     0x12
0341 #define ERR_NO_PKT_END      0x13
0342 #define ERR_HALTED_ON_ERR   0x14
0343 /* Hardware NIC Errors */
0344 #define ERR_WRITE_DMA       0x0101
0345 #define ERR_READ_DMA        0x0102
0346 #define ERR_EXT_SERIAL      0x0103
0347 #define ERR_TX_INT_PARITY   0x0104
0348 
0349 
0350 /*
0351  * Event definitions
0352  */
0353 
0354 #define EVT_RING_ENTRIES    64
0355 #define EVT_RING_SIZE       (EVT_RING_ENTRIES * sizeof(struct event))
0356 
0357 struct event {
0358 #ifdef __LITTLE_ENDIAN
0359     u16     index;
0360     u8      ring;
0361     u8      code;
0362 #else
0363     u8      code;
0364     u8      ring;
0365     u16     index;
0366 #endif
0367     u32     timestamp;
0368 };
0369 
0370 /*
0371  * General Events
0372  */
0373 
0374 #define E_NIC_UP    0x01
0375 #define E_WATCHDOG  0x02
0376 
0377 #define E_STAT_UPD  0x04
0378 #define E_INVAL_CMD 0x05
0379 #define E_SET_CMD_CONS  0x06
0380 #define E_LINK_ON   0x07
0381 #define E_LINK_OFF  0x08
0382 #define E_INTERN_ERR    0x09
0383 #define E_HOST_ERR  0x0A
0384 #define E_STATS_UPDATE  0x0B
0385 #define E_REJECTING 0x0C
0386 
0387 /*
0388  * Send  Events
0389  */
0390 #define E_CON_REJ   0x13
0391 #define E_CON_TMOUT 0x14
0392 #define E_CON_NC_TMOUT  0x15    /* I  , Connection No Campon Timeout */
0393 #define E_DISC_ERR  0x16
0394 #define E_INT_PRTY  0x17
0395 #define E_TX_IDLE   0x18
0396 #define E_TX_LINK_DROP  0x19
0397 #define E_TX_INV_RNG    0x1A
0398 #define E_TX_INV_BUF    0x1B
0399 #define E_TX_INV_DSC    0x1C
0400 
0401 /*
0402  * Destination Events
0403  */
0404 /*
0405  * General Receive events
0406  */
0407 #define E_VAL_RNG   0x20
0408 #define E_RX_RNG_ENER   0x21
0409 #define E_INV_RNG   0x22
0410 #define E_RX_RNG_SPC    0x23
0411 #define E_RX_RNG_OUT    0x24
0412 #define E_PKT_DISCARD   0x25
0413 #define E_INFO_EVT  0x27
0414 
0415 /*
0416  * Data corrupted events
0417  */
0418 #define E_RX_PAR_ERR    0x2B
0419 #define E_RX_LLRC_ERR   0x2C
0420 #define E_IP_CKSM_ERR   0x2D
0421 #define E_DTA_CKSM_ERR  0x2E
0422 #define E_SHT_BST   0x2F
0423 
0424 /*
0425  * Data lost events
0426  */
0427 #define E_LST_LNK_ERR   0x30
0428 #define E_FLG_SYN_ERR   0x31
0429 #define E_FRM_ERR   0x32
0430 #define E_RX_IDLE   0x33
0431 #define E_PKT_LN_ERR    0x34
0432 #define E_STATE_ERR 0x35
0433 #define E_UNEXP_DATA    0x3C
0434 
0435 /*
0436  * Fatal events
0437  */
0438 #define E_RX_INV_BUF    0x36
0439 #define E_RX_INV_DSC    0x37
0440 #define E_RNG_BLK   0x38
0441 
0442 /*
0443  * Warning events
0444  */
0445 #define E_RX_TO     0x39
0446 #define E_BFR_SPC   0x3A
0447 #define E_INV_ULP   0x3B
0448 
0449 #define E_NOT_IMPLEMENTED 0x40
0450 
0451 
0452 /*
0453  * Commands
0454  */
0455 
0456 #define CMD_RING_ENTRIES    16
0457 
0458 struct cmd {
0459 #ifdef __LITTLE_ENDIAN
0460     u16     index;
0461     u8      ring;
0462     u8      code;
0463 #else
0464     u8      code;
0465     u8      ring;
0466     u16     index;
0467 #endif
0468 };
0469 
0470 #define C_START_FW  0x01
0471 #define C_UPD_STAT  0x02
0472 #define C_WATCHDOG  0x05
0473 #define C_DEL_RNG   0x09
0474 #define C_NEW_RNG   0x0A
0475 #define C_CONN      0x0D
0476 
0477 
0478 /*
0479  * Mode bits
0480  */
0481 
0482 #define  PACKET_BAD     0x01 /* Packet had link-layer error */
0483 #define  INTERRUPT      0x02
0484 #define  TX_IP_CKSUM        0x04
0485 #define  PACKET_END     0x08
0486 #define  PACKET_START       0x10
0487 #define  SAME_IFIELD        0x80
0488 
0489 
0490 typedef struct {
0491 #if (BITS_PER_LONG == 64)
0492     u64 addrlo;
0493 #else
0494     u32 addrhi;
0495     u32 addrlo;
0496 #endif
0497 } rraddr;
0498 
0499 
0500 static inline void set_rraddr(rraddr *ra, dma_addr_t addr)
0501 {
0502     unsigned long baddr = addr;
0503 #if (BITS_PER_LONG == 64)
0504     ra->addrlo = baddr;
0505 #else
0506     /* Don't bother setting zero every time */
0507     ra->addrlo = baddr;
0508 #endif
0509     mb();
0510 }
0511 
0512 
0513 static inline void set_rxaddr(struct rr_regs __iomem *regs, volatile dma_addr_t addr)
0514 {
0515     unsigned long baddr = addr;
0516 #if (BITS_PER_LONG == 64) && defined(__LITTLE_ENDIAN)
0517     writel(baddr & 0xffffffff, &regs->RxRingHi);
0518     writel(baddr >> 32, &regs->RxRingLo);
0519 #elif (BITS_PER_LONG == 64)
0520     writel(baddr >> 32, &regs->RxRingHi);
0521     writel(baddr & 0xffffffff, &regs->RxRingLo);
0522 #else
0523     writel(0, &regs->RxRingHi);
0524     writel(baddr, &regs->RxRingLo);
0525 #endif
0526     mb();
0527 }
0528 
0529 
0530 static inline void set_infoaddr(struct rr_regs __iomem *regs, volatile dma_addr_t addr)
0531 {
0532     unsigned long baddr = addr;
0533 #if (BITS_PER_LONG == 64) && defined(__LITTLE_ENDIAN)
0534     writel(baddr & 0xffffffff, &regs->InfoPtrHi);
0535     writel(baddr >> 32, &regs->InfoPtrLo);
0536 #elif (BITS_PER_LONG == 64)
0537     writel(baddr >> 32, &regs->InfoPtrHi);
0538     writel(baddr & 0xffffffff, &regs->InfoPtrLo);
0539 #else
0540     writel(0, &regs->InfoPtrHi);
0541     writel(baddr, &regs->InfoPtrLo);
0542 #endif
0543     mb();
0544 }
0545 
0546 
0547 /*
0548  * TX ring
0549  */
0550 
0551 #ifdef CONFIG_ROADRUNNER_LARGE_RINGS
0552 #define TX_RING_ENTRIES 32
0553 #else
0554 #define TX_RING_ENTRIES 16
0555 #endif
0556 #define TX_TOTAL_SIZE   (TX_RING_ENTRIES * sizeof(struct tx_desc))
0557 
0558 struct tx_desc{
0559     rraddr  addr;
0560     u32 res;
0561 #ifdef __LITTLE_ENDIAN
0562     u16 size;
0563     u8  pad;
0564     u8  mode;
0565 #else
0566     u8  mode;
0567     u8  pad;
0568     u16 size;
0569 #endif
0570 };
0571 
0572 
0573 #ifdef CONFIG_ROADRUNNER_LARGE_RINGS
0574 #define RX_RING_ENTRIES 32
0575 #else
0576 #define RX_RING_ENTRIES 16
0577 #endif
0578 #define RX_TOTAL_SIZE   (RX_RING_ENTRIES * sizeof(struct rx_desc))
0579 
0580 struct rx_desc{
0581     rraddr  addr;
0582     u32 res;
0583 #ifdef __LITTLE_ENDIAN
0584     u16 size;
0585     u8  pad;
0586     u8  mode;
0587 #else
0588     u8  mode;
0589     u8  pad;
0590     u16 size;
0591 #endif
0592 };
0593 
0594 
0595 /*
0596  * ioctl's
0597  */
0598 
0599 #define SIOCRRPFW   SIOCDEVPRIVATE      /* put firmware */
0600 #define SIOCRRGFW   SIOCDEVPRIVATE+1    /* get firmware */
0601 #define SIOCRRID    SIOCDEVPRIVATE+2    /* identify */
0602 
0603 
0604 struct seg_hdr {
0605     u32 seg_start;
0606     u32 seg_len;
0607     u32 seg_eestart;
0608 };
0609 
0610 
0611 #define EEPROM_BASE 0x80000000
0612 #define EEPROM_WORDS 8192
0613 #define EEPROM_BYTES (EEPROM_WORDS * sizeof(u32))
0614 
0615 struct eeprom_boot {
0616     u32 key1;
0617     u32 key2;
0618     u32 sram_size;
0619     struct  seg_hdr loader;
0620     u32 init_chksum;
0621     u32 reserved1;
0622 };
0623 
0624 struct eeprom_manf {
0625     u32 HeaderFmt;
0626     u32 Firmware;
0627     u32 BoardRevision;
0628     u32 RoadrunnerRev;
0629     char    OpticsPart[8];
0630     u32 OpticsRev;
0631     u32 pad1;
0632     char    SramPart[8];
0633     u32 SramRev;
0634     u32 pad2;
0635     char    EepromPart[8];
0636     u32 EepromRev;
0637     u32 EepromSize;
0638     char    PalPart[8];
0639     u32 PalRev;
0640     u32 pad3;
0641     char    PalCodeFile[12];
0642     u32 PalCodeRev;
0643     char    BoardULA[8];
0644     char    SerialNo[8];
0645     char    MfgDate[8];
0646     char    MfgTime[8];
0647     char    ModifyDate[8];
0648     u32 ModCount;
0649     u32 pad4[13];
0650 };
0651 
0652 
0653 struct eeprom_phase_info {
0654     char    phase1File[12];
0655     u32 phase1Rev;
0656     char    phase1Date[8];
0657     char    phase2File[12];
0658     u32 phase2Rev;
0659     char    phase2Date[8];
0660     u32 reserved7[4];
0661 };
0662 
0663 struct eeprom_rncd_info {
0664     u32 FwStart;
0665     u32 FwRev;
0666     char    FwDate[8];
0667     u32 AddrRunCodeSegs;
0668     u32 FileNames;
0669     char    File[13][8];
0670 };
0671 
0672 
0673 /* Phase 1 region (starts are word offset 0x80) */
0674 struct phase1_hdr{
0675     u32 jump;
0676     u32 noop;
0677     struct seg_hdr phase2Seg;
0678 };
0679 
0680 struct eeprom {
0681     struct eeprom_boot  boot;
0682     u32         pad1[8];
0683     struct eeprom_manf  manf;
0684     struct eeprom_phase_info phase_info;
0685     struct eeprom_rncd_info rncd_info;
0686     u32         pad2[15];
0687     u32         hdr_checksum;
0688     struct phase1_hdr   phase1;
0689 };
0690 
0691 
0692 struct rr_stats {
0693     u32 NicTimeStamp;
0694     u32 RngCreated;
0695     u32 RngDeleted;
0696     u32 IntrGen;
0697     u32 NEvtOvfl;
0698     u32 InvCmd;
0699     u32 DmaReadErrs;
0700     u32 DmaWriteErrs;
0701     u32 StatUpdtT;
0702     u32 StatUpdtC;
0703     u32 WatchDog;
0704     u32 Trace;
0705 
0706     /* Serial HIPPI */
0707     u32 LnkRdyEst;
0708     u32 GLinkErr;
0709     u32 AltFlgErr;
0710     u32 OvhdBit8Sync;
0711     u32 RmtSerPrtyErr;
0712     u32 RmtParPrtyErr;
0713     u32 RmtLoopBk;
0714     u32 pad1;
0715 
0716     /* HIPPI tx */
0717     u32 ConEst;
0718     u32 ConRejS;
0719     u32 ConRetry;
0720     u32 ConTmOut;
0721     u32 SndConDiscon;
0722     u32 SndParErr;
0723     u32 PktSnt;
0724     u32 pad2[2];
0725     u32 ShFBstSnt;
0726     u64 BytSent;
0727     u32 TxTimeout;
0728     u32 pad3[3];
0729 
0730     /* HIPPI rx */
0731     u32 ConAcc;
0732     u32 ConRejdiPrty;
0733     u32 ConRejd64b;
0734     u32 ConRejdBuf;
0735     u32 RxConDiscon;
0736     u32 RxConNoData;
0737     u32 PktRx;
0738     u32 pad4[2];
0739     u32 ShFBstRx;
0740     u64 BytRx;
0741     u32 RxParErr;
0742     u32 RxLLRCerr;
0743     u32 RxBstSZerr;
0744     u32 RxStateErr;
0745     u32 RxRdyErr;
0746     u32 RxInvULP;
0747     u32 RxSpcBuf;
0748     u32 RxSpcDesc;
0749     u32 RxRngSpc;
0750     u32 RxRngFull;
0751     u32 RxPktLenErr;
0752     u32 RxCksmErr;
0753     u32 RxPktDrp;
0754     u32 RngLowSpc;
0755     u32 RngDataClose;
0756     u32 RxTimeout;
0757     u32 RxIdle;
0758 };
0759 
0760 
0761 /*
0762  * This struct is shared with the NIC firmware.
0763  */
0764 struct ring_ctrl {
0765     rraddr  rngptr;
0766 #ifdef __LITTLE_ENDIAN
0767     u16 entries;
0768     u8  pad;
0769     u8  entry_size;
0770     u16 pi;
0771     u16 mode;
0772 #else
0773     u8  entry_size;
0774     u8  pad;
0775     u16 entries;
0776     u16 mode;
0777     u16 pi;
0778 #endif
0779 };
0780 
0781 struct rr_info {
0782     union {
0783         struct rr_stats stats;
0784         u32 stati[128];
0785     } s;
0786     struct ring_ctrl    evt_ctrl;
0787     struct ring_ctrl    cmd_ctrl;
0788     struct ring_ctrl    tx_ctrl;
0789     u8          pad[464];
0790     u8          trace[3072];
0791 };
0792 
0793 /*
0794  * The linux structure for the RoadRunner.
0795  *
0796  * RX/TX descriptors are put first to make sure they are properly
0797  * aligned and do not cross cache-line boundaries.
0798  */
0799 
0800 struct rr_private
0801 {
0802     struct rx_desc      *rx_ring;
0803     struct tx_desc      *tx_ring;
0804     struct event        *evt_ring;
0805     dma_addr_t      tx_ring_dma;
0806     dma_addr_t      rx_ring_dma;
0807     dma_addr_t      evt_ring_dma;
0808     /* Alignment ok ? */
0809     struct sk_buff      *rx_skbuff[RX_RING_ENTRIES];
0810     struct sk_buff      *tx_skbuff[TX_RING_ENTRIES];
0811     struct rr_regs      __iomem *regs;      /* Register base */
0812     struct ring_ctrl    *rx_ctrl;   /* Receive ring control */
0813     struct rr_info      *info;      /* Shared info page */
0814     dma_addr_t      rx_ctrl_dma;
0815     dma_addr_t      info_dma;
0816     spinlock_t      lock;
0817     struct timer_list   timer;
0818     u32         cur_rx, cur_cmd, cur_evt;
0819     u32         dirty_rx, dirty_tx;
0820     u32         tx_full;
0821     u32         fw_rev;
0822     volatile short      fw_running;
0823     struct pci_dev      *pci_dev;
0824 };
0825 
0826 
0827 /*
0828  * Prototypes
0829  */
0830 static int rr_init(struct net_device *dev);
0831 static int rr_init1(struct net_device *dev);
0832 static irqreturn_t rr_interrupt(int irq, void *dev_id);
0833 
0834 static int rr_open(struct net_device *dev);
0835 static netdev_tx_t rr_start_xmit(struct sk_buff *skb,
0836                  struct net_device *dev);
0837 static int rr_close(struct net_device *dev);
0838 static int rr_siocdevprivate(struct net_device *dev, struct ifreq *rq,
0839                  void __user *data, int cmd);
0840 static unsigned int rr_read_eeprom(struct rr_private *rrpriv,
0841                    unsigned long offset,
0842                    unsigned char *buf,
0843                    unsigned long length);
0844 static u32 rr_read_eeprom_word(struct rr_private *rrpriv, size_t offset);
0845 static int rr_load_firmware(struct net_device *dev);
0846 static inline void rr_raz_tx(struct rr_private *, struct net_device *);
0847 static inline void rr_raz_rx(struct rr_private *, struct net_device *);
0848 #endif /* _RRUNNER_H_ */