162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef _RRUNNER_H_ 362306a36Sopenharmony_ci#define _RRUNNER_H_ 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#include <linux/interrupt.h> 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#if ((BITS_PER_LONG != 32) && (BITS_PER_LONG != 64)) 862306a36Sopenharmony_ci#error "BITS_PER_LONG not defined or not valid" 962306a36Sopenharmony_ci#endif 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_cistruct rr_regs { 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci u32 pad0[16]; 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci u32 HostCtrl; 1762306a36Sopenharmony_ci u32 LocalCtrl; 1862306a36Sopenharmony_ci u32 Pc; 1962306a36Sopenharmony_ci u32 BrkPt; 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci/* Timer increments every 0.97 micro-seconds (unsigned int) */ 2262306a36Sopenharmony_ci u32 Timer_Hi; 2362306a36Sopenharmony_ci u32 Timer; 2462306a36Sopenharmony_ci u32 TimerRef; 2562306a36Sopenharmony_ci u32 PciState; 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci u32 Event; 2862306a36Sopenharmony_ci u32 MbEvent; 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci u32 WinBase; 3162306a36Sopenharmony_ci u32 WinData; 3262306a36Sopenharmony_ci u32 RX_state; 3362306a36Sopenharmony_ci u32 TX_state; 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci u32 Overhead; 3662306a36Sopenharmony_ci u32 ExtIo; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci u32 DmaWriteHostHi; 3962306a36Sopenharmony_ci u32 DmaWriteHostLo; 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci u32 pad1[2]; 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci u32 DmaReadHostHi; 4462306a36Sopenharmony_ci u32 DmaReadHostLo; 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci u32 pad2; 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci u32 DmaReadLen; 4962306a36Sopenharmony_ci u32 DmaWriteState; 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci u32 DmaWriteLcl; 5262306a36Sopenharmony_ci u32 DmaWriteIPchecksum; 5362306a36Sopenharmony_ci u32 DmaWriteLen; 5462306a36Sopenharmony_ci u32 DmaReadState; 5562306a36Sopenharmony_ci u32 DmaReadLcl; 5662306a36Sopenharmony_ci u32 DmaReadIPchecksum; 5762306a36Sopenharmony_ci u32 pad3; 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci u32 RxBase; 6062306a36Sopenharmony_ci u32 RxPrd; 6162306a36Sopenharmony_ci u32 RxCon; 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci u32 pad4; 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci u32 TxBase; 6662306a36Sopenharmony_ci u32 TxPrd; 6762306a36Sopenharmony_ci u32 TxCon; 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci u32 pad5; 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci u32 RxIndPro; 7262306a36Sopenharmony_ci u32 RxIndCon; 7362306a36Sopenharmony_ci u32 RxIndRef; 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci u32 pad6; 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci u32 TxIndPro; 7862306a36Sopenharmony_ci u32 TxIndCon; 7962306a36Sopenharmony_ci u32 TxIndRef; 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci u32 pad7[17]; 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci u32 DrCmndPro; 8462306a36Sopenharmony_ci u32 DrCmndCon; 8562306a36Sopenharmony_ci u32 DrCmndRef; 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci u32 pad8; 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci u32 DwCmndPro; 9062306a36Sopenharmony_ci u32 DwCmndCon; 9162306a36Sopenharmony_ci u32 DwCmndRef; 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci u32 AssistState; 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci u32 DrDataPro; 9662306a36Sopenharmony_ci u32 DrDataCon; 9762306a36Sopenharmony_ci u32 DrDataRef; 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ci u32 pad9; 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci u32 DwDataPro; 10262306a36Sopenharmony_ci u32 DwDataCon; 10362306a36Sopenharmony_ci u32 DwDataRef; 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci u32 pad10[33]; 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ci u32 EvtCon; 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci u32 pad11[5]; 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci u32 TxPi; 11262306a36Sopenharmony_ci u32 IpRxPi; 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci u32 pad11a[8]; 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ci u32 CmdRing[16]; 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ci/* The ULA is in two registers the high order two bytes of the first 11962306a36Sopenharmony_ci * word contain the RunCode features. 12062306a36Sopenharmony_ci * ula0 res res byte0 byte1 12162306a36Sopenharmony_ci * ula1 byte2 byte3 byte4 byte5 12262306a36Sopenharmony_ci */ 12362306a36Sopenharmony_ci u32 Ula0; 12462306a36Sopenharmony_ci u32 Ula1; 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_ci u32 RxRingHi; 12762306a36Sopenharmony_ci u32 RxRingLo; 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci u32 InfoPtrHi; 13062306a36Sopenharmony_ci u32 InfoPtrLo; 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci u32 Mode; 13362306a36Sopenharmony_ci 13462306a36Sopenharmony_ci u32 ConRetry; 13562306a36Sopenharmony_ci u32 ConRetryTmr; 13662306a36Sopenharmony_ci 13762306a36Sopenharmony_ci u32 ConTmout; 13862306a36Sopenharmony_ci u32 CtatTmr; 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_ci u32 MaxRxRng; 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_ci u32 IntrTmr; 14362306a36Sopenharmony_ci u32 TxDataMvTimeout; 14462306a36Sopenharmony_ci u32 RxDataMvTimeout; 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_ci u32 EvtPrd; 14762306a36Sopenharmony_ci u32 TraceIdx; 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci u32 Fail1; 15062306a36Sopenharmony_ci u32 Fail2; 15162306a36Sopenharmony_ci 15262306a36Sopenharmony_ci u32 DrvPrm; 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_ci u32 FilterLA; 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_ci u32 FwRev; 15762306a36Sopenharmony_ci u32 FwRes1; 15862306a36Sopenharmony_ci u32 FwRes2; 15962306a36Sopenharmony_ci u32 FwRes3; 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ci u32 WriteDmaThresh; 16262306a36Sopenharmony_ci u32 ReadDmaThresh; 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_ci u32 pad12[325]; 16562306a36Sopenharmony_ci u32 Window[512]; 16662306a36Sopenharmony_ci}; 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_ci/* 16962306a36Sopenharmony_ci * Host control register bits. 17062306a36Sopenharmony_ci */ 17162306a36Sopenharmony_ci 17262306a36Sopenharmony_ci#define RR_INT 0x01 17362306a36Sopenharmony_ci#define RR_CLEAR_INT 0x02 17462306a36Sopenharmony_ci#define NO_SWAP 0x04000004 17562306a36Sopenharmony_ci#define NO_SWAP1 0x00000004 17662306a36Sopenharmony_ci#define PCI_RESET_NIC 0x08 17762306a36Sopenharmony_ci#define HALT_NIC 0x10 17862306a36Sopenharmony_ci#define SSTEP_NIC 0x20 17962306a36Sopenharmony_ci#define MEM_READ_MULTI 0x40 18062306a36Sopenharmony_ci#define NIC_HALTED 0x100 18162306a36Sopenharmony_ci#define HALT_INST 0x200 18262306a36Sopenharmony_ci#define PARITY_ERR 0x400 18362306a36Sopenharmony_ci#define INVALID_INST_B 0x800 18462306a36Sopenharmony_ci#define RR_REV_2 0x20000000 18562306a36Sopenharmony_ci#define RR_REV_MASK 0xf0000000 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_ci/* 18862306a36Sopenharmony_ci * Local control register bits. 18962306a36Sopenharmony_ci */ 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ci#define INTA_STATE 0x01 19262306a36Sopenharmony_ci#define CLEAR_INTA 0x02 19362306a36Sopenharmony_ci#define FAST_EEPROM_ACCESS 0x08 19462306a36Sopenharmony_ci#define ENABLE_EXTRA_SRAM 0x100 19562306a36Sopenharmony_ci#define ENABLE_EXTRA_DESC 0x200 19662306a36Sopenharmony_ci#define ENABLE_PARITY 0x400 19762306a36Sopenharmony_ci#define FORCE_DMA_PARITY_ERROR 0x800 19862306a36Sopenharmony_ci#define ENABLE_EEPROM_WRITE 0x1000 19962306a36Sopenharmony_ci#define ENABLE_DATA_CACHE 0x2000 20062306a36Sopenharmony_ci#define SRAM_LO_PARITY_ERR 0x4000 20162306a36Sopenharmony_ci#define SRAM_HI_PARITY_ERR 0x8000 20262306a36Sopenharmony_ci 20362306a36Sopenharmony_ci/* 20462306a36Sopenharmony_ci * PCI state bits. 20562306a36Sopenharmony_ci */ 20662306a36Sopenharmony_ci 20762306a36Sopenharmony_ci#define FORCE_PCI_RESET 0x01 20862306a36Sopenharmony_ci#define PROVIDE_LENGTH 0x02 20962306a36Sopenharmony_ci#define MASK_DMA_READ_MAX 0x1C 21062306a36Sopenharmony_ci#define RBURST_DISABLE 0x00 21162306a36Sopenharmony_ci#define RBURST_4 0x04 21262306a36Sopenharmony_ci#define RBURST_16 0x08 21362306a36Sopenharmony_ci#define RBURST_32 0x0C 21462306a36Sopenharmony_ci#define RBURST_64 0x10 21562306a36Sopenharmony_ci#define RBURST_128 0x14 21662306a36Sopenharmony_ci#define RBURST_256 0x18 21762306a36Sopenharmony_ci#define RBURST_1024 0x1C 21862306a36Sopenharmony_ci#define MASK_DMA_WRITE_MAX 0xE0 21962306a36Sopenharmony_ci#define WBURST_DISABLE 0x00 22062306a36Sopenharmony_ci#define WBURST_4 0x20 22162306a36Sopenharmony_ci#define WBURST_16 0x40 22262306a36Sopenharmony_ci#define WBURST_32 0x60 22362306a36Sopenharmony_ci#define WBURST_64 0x80 22462306a36Sopenharmony_ci#define WBURST_128 0xa0 22562306a36Sopenharmony_ci#define WBURST_256 0xc0 22662306a36Sopenharmony_ci#define WBURST_1024 0xe0 22762306a36Sopenharmony_ci#define MASK_MIN_DMA 0xFF00 22862306a36Sopenharmony_ci#define FIFO_RETRY_ENABLE 0x10000 22962306a36Sopenharmony_ci 23062306a36Sopenharmony_ci/* 23162306a36Sopenharmony_ci * Event register 23262306a36Sopenharmony_ci */ 23362306a36Sopenharmony_ci 23462306a36Sopenharmony_ci#define DMA_WRITE_DONE 0x10000 23562306a36Sopenharmony_ci#define DMA_READ_DONE 0x20000 23662306a36Sopenharmony_ci#define DMA_WRITE_ERR 0x40000 23762306a36Sopenharmony_ci#define DMA_READ_ERR 0x80000 23862306a36Sopenharmony_ci 23962306a36Sopenharmony_ci/* 24062306a36Sopenharmony_ci * Receive state 24162306a36Sopenharmony_ci * 24262306a36Sopenharmony_ci * RoadRunner HIPPI Receive State Register controls and monitors the 24362306a36Sopenharmony_ci * HIPPI receive interface in the NIC. Look at err bits when a HIPPI 24462306a36Sopenharmony_ci * receive Error Event occurs. 24562306a36Sopenharmony_ci */ 24662306a36Sopenharmony_ci 24762306a36Sopenharmony_ci#define ENABLE_NEW_CON 0x01 24862306a36Sopenharmony_ci#define RESET_RECV 0x02 24962306a36Sopenharmony_ci#define RECV_ALL 0x00 25062306a36Sopenharmony_ci#define RECV_1K 0x20 25162306a36Sopenharmony_ci#define RECV_2K 0x40 25262306a36Sopenharmony_ci#define RECV_4K 0x60 25362306a36Sopenharmony_ci#define RECV_8K 0x80 25462306a36Sopenharmony_ci#define RECV_16K 0xa0 25562306a36Sopenharmony_ci#define RECV_32K 0xc0 25662306a36Sopenharmony_ci#define RECV_64K 0xe0 25762306a36Sopenharmony_ci 25862306a36Sopenharmony_ci/* 25962306a36Sopenharmony_ci * Transmit status. 26062306a36Sopenharmony_ci */ 26162306a36Sopenharmony_ci 26262306a36Sopenharmony_ci#define ENA_XMIT 0x01 26362306a36Sopenharmony_ci#define PERM_CON 0x02 26462306a36Sopenharmony_ci 26562306a36Sopenharmony_ci/* 26662306a36Sopenharmony_ci * DMA write state 26762306a36Sopenharmony_ci */ 26862306a36Sopenharmony_ci 26962306a36Sopenharmony_ci#define RESET_DMA 0x01 27062306a36Sopenharmony_ci#define NO_SWAP_DMA 0x02 27162306a36Sopenharmony_ci#define DMA_ACTIVE 0x04 27262306a36Sopenharmony_ci#define THRESH_MASK 0x1F 27362306a36Sopenharmony_ci#define DMA_ERROR_MASK 0xff000000 27462306a36Sopenharmony_ci 27562306a36Sopenharmony_ci/* 27662306a36Sopenharmony_ci * Gooddies stored in the ULA registers. 27762306a36Sopenharmony_ci */ 27862306a36Sopenharmony_ci 27962306a36Sopenharmony_ci#define TRACE_ON_WHAT_BIT 0x00020000 /* Traces on */ 28062306a36Sopenharmony_ci#define ONEM_BUF_WHAT_BIT 0x00040000 /* 1Meg vs 256K */ 28162306a36Sopenharmony_ci#define CHAR_API_WHAT_BIT 0x00080000 /* Char API vs network only */ 28262306a36Sopenharmony_ci#define CMD_EVT_WHAT_BIT 0x00200000 /* Command event */ 28362306a36Sopenharmony_ci#define LONG_TX_WHAT_BIT 0x00400000 28462306a36Sopenharmony_ci#define LONG_RX_WHAT_BIT 0x00800000 28562306a36Sopenharmony_ci#define WHAT_BIT_MASK 0xFFFD0000 /* Feature bit mask */ 28662306a36Sopenharmony_ci 28762306a36Sopenharmony_ci/* 28862306a36Sopenharmony_ci * Mode status 28962306a36Sopenharmony_ci */ 29062306a36Sopenharmony_ci 29162306a36Sopenharmony_ci#define EVENT_OVFL 0x80000000 29262306a36Sopenharmony_ci#define FATAL_ERR 0x40000000 29362306a36Sopenharmony_ci#define LOOP_BACK 0x01 29462306a36Sopenharmony_ci#define MODE_PH 0x02 29562306a36Sopenharmony_ci#define MODE_FP 0x00 29662306a36Sopenharmony_ci#define PTR64BIT 0x04 29762306a36Sopenharmony_ci#define PTR32BIT 0x00 29862306a36Sopenharmony_ci#define PTR_WD_SWAP 0x08 29962306a36Sopenharmony_ci#define PTR_WD_NOSWAP 0x00 30062306a36Sopenharmony_ci#define POST_WARN_EVENT 0x10 30162306a36Sopenharmony_ci#define ERR_TERM 0x20 30262306a36Sopenharmony_ci#define DIRECT_CONN 0x40 30362306a36Sopenharmony_ci#define NO_NIC_WATCHDOG 0x80 30462306a36Sopenharmony_ci#define SWAP_DATA 0x100 30562306a36Sopenharmony_ci#define SWAP_CONTROL 0x200 30662306a36Sopenharmony_ci#define NIC_HALT_ON_ERR 0x400 30762306a36Sopenharmony_ci#define NIC_NO_RESTART 0x800 30862306a36Sopenharmony_ci#define HALF_DUP_TX 0x1000 30962306a36Sopenharmony_ci#define HALF_DUP_RX 0x2000 31062306a36Sopenharmony_ci 31162306a36Sopenharmony_ci 31262306a36Sopenharmony_ci/* 31362306a36Sopenharmony_ci * Error codes 31462306a36Sopenharmony_ci */ 31562306a36Sopenharmony_ci 31662306a36Sopenharmony_ci/* Host Error Codes - values of fail1 */ 31762306a36Sopenharmony_ci#define ERR_UNKNOWN_MBOX 0x1001 31862306a36Sopenharmony_ci#define ERR_UNKNOWN_CMD 0x1002 31962306a36Sopenharmony_ci#define ERR_MAX_RING 0x1003 32062306a36Sopenharmony_ci#define ERR_RING_CLOSED 0x1004 32162306a36Sopenharmony_ci#define ERR_RING_OPEN 0x1005 32262306a36Sopenharmony_ci/* Firmware internal errors */ 32362306a36Sopenharmony_ci#define ERR_EVENT_RING_FULL 0x01 32462306a36Sopenharmony_ci#define ERR_DW_PEND_CMND_FULL 0x02 32562306a36Sopenharmony_ci#define ERR_DR_PEND_CMND_FULL 0x03 32662306a36Sopenharmony_ci#define ERR_DW_PEND_DATA_FULL 0x04 32762306a36Sopenharmony_ci#define ERR_DR_PEND_DATA_FULL 0x05 32862306a36Sopenharmony_ci#define ERR_ILLEGAL_JUMP 0x06 32962306a36Sopenharmony_ci#define ERR_UNIMPLEMENTED 0x07 33062306a36Sopenharmony_ci#define ERR_TX_INFO_FULL 0x08 33162306a36Sopenharmony_ci#define ERR_RX_INFO_FULL 0x09 33262306a36Sopenharmony_ci#define ERR_ILLEGAL_MODE 0x0A 33362306a36Sopenharmony_ci#define ERR_MAIN_TIMEOUT 0x0B 33462306a36Sopenharmony_ci#define ERR_EVENT_BITS 0x0C 33562306a36Sopenharmony_ci#define ERR_UNPEND_FULL 0x0D 33662306a36Sopenharmony_ci#define ERR_TIMER_QUEUE_FULL 0x0E 33762306a36Sopenharmony_ci#define ERR_TIMER_QUEUE_EMPTY 0x0F 33862306a36Sopenharmony_ci#define ERR_TIMER_NO_FREE 0x10 33962306a36Sopenharmony_ci#define ERR_INTR_START 0x11 34062306a36Sopenharmony_ci#define ERR_BAD_STARTUP 0x12 34162306a36Sopenharmony_ci#define ERR_NO_PKT_END 0x13 34262306a36Sopenharmony_ci#define ERR_HALTED_ON_ERR 0x14 34362306a36Sopenharmony_ci/* Hardware NIC Errors */ 34462306a36Sopenharmony_ci#define ERR_WRITE_DMA 0x0101 34562306a36Sopenharmony_ci#define ERR_READ_DMA 0x0102 34662306a36Sopenharmony_ci#define ERR_EXT_SERIAL 0x0103 34762306a36Sopenharmony_ci#define ERR_TX_INT_PARITY 0x0104 34862306a36Sopenharmony_ci 34962306a36Sopenharmony_ci 35062306a36Sopenharmony_ci/* 35162306a36Sopenharmony_ci * Event definitions 35262306a36Sopenharmony_ci */ 35362306a36Sopenharmony_ci 35462306a36Sopenharmony_ci#define EVT_RING_ENTRIES 64 35562306a36Sopenharmony_ci#define EVT_RING_SIZE (EVT_RING_ENTRIES * sizeof(struct event)) 35662306a36Sopenharmony_ci 35762306a36Sopenharmony_cistruct event { 35862306a36Sopenharmony_ci#ifdef __LITTLE_ENDIAN 35962306a36Sopenharmony_ci u16 index; 36062306a36Sopenharmony_ci u8 ring; 36162306a36Sopenharmony_ci u8 code; 36262306a36Sopenharmony_ci#else 36362306a36Sopenharmony_ci u8 code; 36462306a36Sopenharmony_ci u8 ring; 36562306a36Sopenharmony_ci u16 index; 36662306a36Sopenharmony_ci#endif 36762306a36Sopenharmony_ci u32 timestamp; 36862306a36Sopenharmony_ci}; 36962306a36Sopenharmony_ci 37062306a36Sopenharmony_ci/* 37162306a36Sopenharmony_ci * General Events 37262306a36Sopenharmony_ci */ 37362306a36Sopenharmony_ci 37462306a36Sopenharmony_ci#define E_NIC_UP 0x01 37562306a36Sopenharmony_ci#define E_WATCHDOG 0x02 37662306a36Sopenharmony_ci 37762306a36Sopenharmony_ci#define E_STAT_UPD 0x04 37862306a36Sopenharmony_ci#define E_INVAL_CMD 0x05 37962306a36Sopenharmony_ci#define E_SET_CMD_CONS 0x06 38062306a36Sopenharmony_ci#define E_LINK_ON 0x07 38162306a36Sopenharmony_ci#define E_LINK_OFF 0x08 38262306a36Sopenharmony_ci#define E_INTERN_ERR 0x09 38362306a36Sopenharmony_ci#define E_HOST_ERR 0x0A 38462306a36Sopenharmony_ci#define E_STATS_UPDATE 0x0B 38562306a36Sopenharmony_ci#define E_REJECTING 0x0C 38662306a36Sopenharmony_ci 38762306a36Sopenharmony_ci/* 38862306a36Sopenharmony_ci * Send Events 38962306a36Sopenharmony_ci */ 39062306a36Sopenharmony_ci#define E_CON_REJ 0x13 39162306a36Sopenharmony_ci#define E_CON_TMOUT 0x14 39262306a36Sopenharmony_ci#define E_CON_NC_TMOUT 0x15 /* I , Connection No Campon Timeout */ 39362306a36Sopenharmony_ci#define E_DISC_ERR 0x16 39462306a36Sopenharmony_ci#define E_INT_PRTY 0x17 39562306a36Sopenharmony_ci#define E_TX_IDLE 0x18 39662306a36Sopenharmony_ci#define E_TX_LINK_DROP 0x19 39762306a36Sopenharmony_ci#define E_TX_INV_RNG 0x1A 39862306a36Sopenharmony_ci#define E_TX_INV_BUF 0x1B 39962306a36Sopenharmony_ci#define E_TX_INV_DSC 0x1C 40062306a36Sopenharmony_ci 40162306a36Sopenharmony_ci/* 40262306a36Sopenharmony_ci * Destination Events 40362306a36Sopenharmony_ci */ 40462306a36Sopenharmony_ci/* 40562306a36Sopenharmony_ci * General Receive events 40662306a36Sopenharmony_ci */ 40762306a36Sopenharmony_ci#define E_VAL_RNG 0x20 40862306a36Sopenharmony_ci#define E_RX_RNG_ENER 0x21 40962306a36Sopenharmony_ci#define E_INV_RNG 0x22 41062306a36Sopenharmony_ci#define E_RX_RNG_SPC 0x23 41162306a36Sopenharmony_ci#define E_RX_RNG_OUT 0x24 41262306a36Sopenharmony_ci#define E_PKT_DISCARD 0x25 41362306a36Sopenharmony_ci#define E_INFO_EVT 0x27 41462306a36Sopenharmony_ci 41562306a36Sopenharmony_ci/* 41662306a36Sopenharmony_ci * Data corrupted events 41762306a36Sopenharmony_ci */ 41862306a36Sopenharmony_ci#define E_RX_PAR_ERR 0x2B 41962306a36Sopenharmony_ci#define E_RX_LLRC_ERR 0x2C 42062306a36Sopenharmony_ci#define E_IP_CKSM_ERR 0x2D 42162306a36Sopenharmony_ci#define E_DTA_CKSM_ERR 0x2E 42262306a36Sopenharmony_ci#define E_SHT_BST 0x2F 42362306a36Sopenharmony_ci 42462306a36Sopenharmony_ci/* 42562306a36Sopenharmony_ci * Data lost events 42662306a36Sopenharmony_ci */ 42762306a36Sopenharmony_ci#define E_LST_LNK_ERR 0x30 42862306a36Sopenharmony_ci#define E_FLG_SYN_ERR 0x31 42962306a36Sopenharmony_ci#define E_FRM_ERR 0x32 43062306a36Sopenharmony_ci#define E_RX_IDLE 0x33 43162306a36Sopenharmony_ci#define E_PKT_LN_ERR 0x34 43262306a36Sopenharmony_ci#define E_STATE_ERR 0x35 43362306a36Sopenharmony_ci#define E_UNEXP_DATA 0x3C 43462306a36Sopenharmony_ci 43562306a36Sopenharmony_ci/* 43662306a36Sopenharmony_ci * Fatal events 43762306a36Sopenharmony_ci */ 43862306a36Sopenharmony_ci#define E_RX_INV_BUF 0x36 43962306a36Sopenharmony_ci#define E_RX_INV_DSC 0x37 44062306a36Sopenharmony_ci#define E_RNG_BLK 0x38 44162306a36Sopenharmony_ci 44262306a36Sopenharmony_ci/* 44362306a36Sopenharmony_ci * Warning events 44462306a36Sopenharmony_ci */ 44562306a36Sopenharmony_ci#define E_RX_TO 0x39 44662306a36Sopenharmony_ci#define E_BFR_SPC 0x3A 44762306a36Sopenharmony_ci#define E_INV_ULP 0x3B 44862306a36Sopenharmony_ci 44962306a36Sopenharmony_ci#define E_NOT_IMPLEMENTED 0x40 45062306a36Sopenharmony_ci 45162306a36Sopenharmony_ci 45262306a36Sopenharmony_ci/* 45362306a36Sopenharmony_ci * Commands 45462306a36Sopenharmony_ci */ 45562306a36Sopenharmony_ci 45662306a36Sopenharmony_ci#define CMD_RING_ENTRIES 16 45762306a36Sopenharmony_ci 45862306a36Sopenharmony_cistruct cmd { 45962306a36Sopenharmony_ci#ifdef __LITTLE_ENDIAN 46062306a36Sopenharmony_ci u16 index; 46162306a36Sopenharmony_ci u8 ring; 46262306a36Sopenharmony_ci u8 code; 46362306a36Sopenharmony_ci#else 46462306a36Sopenharmony_ci u8 code; 46562306a36Sopenharmony_ci u8 ring; 46662306a36Sopenharmony_ci u16 index; 46762306a36Sopenharmony_ci#endif 46862306a36Sopenharmony_ci}; 46962306a36Sopenharmony_ci 47062306a36Sopenharmony_ci#define C_START_FW 0x01 47162306a36Sopenharmony_ci#define C_UPD_STAT 0x02 47262306a36Sopenharmony_ci#define C_WATCHDOG 0x05 47362306a36Sopenharmony_ci#define C_DEL_RNG 0x09 47462306a36Sopenharmony_ci#define C_NEW_RNG 0x0A 47562306a36Sopenharmony_ci#define C_CONN 0x0D 47662306a36Sopenharmony_ci 47762306a36Sopenharmony_ci 47862306a36Sopenharmony_ci/* 47962306a36Sopenharmony_ci * Mode bits 48062306a36Sopenharmony_ci */ 48162306a36Sopenharmony_ci 48262306a36Sopenharmony_ci#define PACKET_BAD 0x01 /* Packet had link-layer error */ 48362306a36Sopenharmony_ci#define INTERRUPT 0x02 48462306a36Sopenharmony_ci#define TX_IP_CKSUM 0x04 48562306a36Sopenharmony_ci#define PACKET_END 0x08 48662306a36Sopenharmony_ci#define PACKET_START 0x10 48762306a36Sopenharmony_ci#define SAME_IFIELD 0x80 48862306a36Sopenharmony_ci 48962306a36Sopenharmony_ci 49062306a36Sopenharmony_citypedef struct { 49162306a36Sopenharmony_ci#if (BITS_PER_LONG == 64) 49262306a36Sopenharmony_ci u64 addrlo; 49362306a36Sopenharmony_ci#else 49462306a36Sopenharmony_ci u32 addrhi; 49562306a36Sopenharmony_ci u32 addrlo; 49662306a36Sopenharmony_ci#endif 49762306a36Sopenharmony_ci} rraddr; 49862306a36Sopenharmony_ci 49962306a36Sopenharmony_ci 50062306a36Sopenharmony_cistatic inline void set_rraddr(rraddr *ra, dma_addr_t addr) 50162306a36Sopenharmony_ci{ 50262306a36Sopenharmony_ci unsigned long baddr = addr; 50362306a36Sopenharmony_ci#if (BITS_PER_LONG == 64) 50462306a36Sopenharmony_ci ra->addrlo = baddr; 50562306a36Sopenharmony_ci#else 50662306a36Sopenharmony_ci /* Don't bother setting zero every time */ 50762306a36Sopenharmony_ci ra->addrlo = baddr; 50862306a36Sopenharmony_ci#endif 50962306a36Sopenharmony_ci mb(); 51062306a36Sopenharmony_ci} 51162306a36Sopenharmony_ci 51262306a36Sopenharmony_ci 51362306a36Sopenharmony_cistatic inline void set_rxaddr(struct rr_regs __iomem *regs, volatile dma_addr_t addr) 51462306a36Sopenharmony_ci{ 51562306a36Sopenharmony_ci unsigned long baddr = addr; 51662306a36Sopenharmony_ci#if (BITS_PER_LONG == 64) && defined(__LITTLE_ENDIAN) 51762306a36Sopenharmony_ci writel(baddr & 0xffffffff, ®s->RxRingHi); 51862306a36Sopenharmony_ci writel(baddr >> 32, ®s->RxRingLo); 51962306a36Sopenharmony_ci#elif (BITS_PER_LONG == 64) 52062306a36Sopenharmony_ci writel(baddr >> 32, ®s->RxRingHi); 52162306a36Sopenharmony_ci writel(baddr & 0xffffffff, ®s->RxRingLo); 52262306a36Sopenharmony_ci#else 52362306a36Sopenharmony_ci writel(0, ®s->RxRingHi); 52462306a36Sopenharmony_ci writel(baddr, ®s->RxRingLo); 52562306a36Sopenharmony_ci#endif 52662306a36Sopenharmony_ci mb(); 52762306a36Sopenharmony_ci} 52862306a36Sopenharmony_ci 52962306a36Sopenharmony_ci 53062306a36Sopenharmony_cistatic inline void set_infoaddr(struct rr_regs __iomem *regs, volatile dma_addr_t addr) 53162306a36Sopenharmony_ci{ 53262306a36Sopenharmony_ci unsigned long baddr = addr; 53362306a36Sopenharmony_ci#if (BITS_PER_LONG == 64) && defined(__LITTLE_ENDIAN) 53462306a36Sopenharmony_ci writel(baddr & 0xffffffff, ®s->InfoPtrHi); 53562306a36Sopenharmony_ci writel(baddr >> 32, ®s->InfoPtrLo); 53662306a36Sopenharmony_ci#elif (BITS_PER_LONG == 64) 53762306a36Sopenharmony_ci writel(baddr >> 32, ®s->InfoPtrHi); 53862306a36Sopenharmony_ci writel(baddr & 0xffffffff, ®s->InfoPtrLo); 53962306a36Sopenharmony_ci#else 54062306a36Sopenharmony_ci writel(0, ®s->InfoPtrHi); 54162306a36Sopenharmony_ci writel(baddr, ®s->InfoPtrLo); 54262306a36Sopenharmony_ci#endif 54362306a36Sopenharmony_ci mb(); 54462306a36Sopenharmony_ci} 54562306a36Sopenharmony_ci 54662306a36Sopenharmony_ci 54762306a36Sopenharmony_ci/* 54862306a36Sopenharmony_ci * TX ring 54962306a36Sopenharmony_ci */ 55062306a36Sopenharmony_ci 55162306a36Sopenharmony_ci#ifdef CONFIG_ROADRUNNER_LARGE_RINGS 55262306a36Sopenharmony_ci#define TX_RING_ENTRIES 32 55362306a36Sopenharmony_ci#else 55462306a36Sopenharmony_ci#define TX_RING_ENTRIES 16 55562306a36Sopenharmony_ci#endif 55662306a36Sopenharmony_ci#define TX_TOTAL_SIZE (TX_RING_ENTRIES * sizeof(struct tx_desc)) 55762306a36Sopenharmony_ci 55862306a36Sopenharmony_cistruct tx_desc{ 55962306a36Sopenharmony_ci rraddr addr; 56062306a36Sopenharmony_ci u32 res; 56162306a36Sopenharmony_ci#ifdef __LITTLE_ENDIAN 56262306a36Sopenharmony_ci u16 size; 56362306a36Sopenharmony_ci u8 pad; 56462306a36Sopenharmony_ci u8 mode; 56562306a36Sopenharmony_ci#else 56662306a36Sopenharmony_ci u8 mode; 56762306a36Sopenharmony_ci u8 pad; 56862306a36Sopenharmony_ci u16 size; 56962306a36Sopenharmony_ci#endif 57062306a36Sopenharmony_ci}; 57162306a36Sopenharmony_ci 57262306a36Sopenharmony_ci 57362306a36Sopenharmony_ci#ifdef CONFIG_ROADRUNNER_LARGE_RINGS 57462306a36Sopenharmony_ci#define RX_RING_ENTRIES 32 57562306a36Sopenharmony_ci#else 57662306a36Sopenharmony_ci#define RX_RING_ENTRIES 16 57762306a36Sopenharmony_ci#endif 57862306a36Sopenharmony_ci#define RX_TOTAL_SIZE (RX_RING_ENTRIES * sizeof(struct rx_desc)) 57962306a36Sopenharmony_ci 58062306a36Sopenharmony_cistruct rx_desc{ 58162306a36Sopenharmony_ci rraddr addr; 58262306a36Sopenharmony_ci u32 res; 58362306a36Sopenharmony_ci#ifdef __LITTLE_ENDIAN 58462306a36Sopenharmony_ci u16 size; 58562306a36Sopenharmony_ci u8 pad; 58662306a36Sopenharmony_ci u8 mode; 58762306a36Sopenharmony_ci#else 58862306a36Sopenharmony_ci u8 mode; 58962306a36Sopenharmony_ci u8 pad; 59062306a36Sopenharmony_ci u16 size; 59162306a36Sopenharmony_ci#endif 59262306a36Sopenharmony_ci}; 59362306a36Sopenharmony_ci 59462306a36Sopenharmony_ci 59562306a36Sopenharmony_ci/* 59662306a36Sopenharmony_ci * ioctl's 59762306a36Sopenharmony_ci */ 59862306a36Sopenharmony_ci 59962306a36Sopenharmony_ci#define SIOCRRPFW SIOCDEVPRIVATE /* put firmware */ 60062306a36Sopenharmony_ci#define SIOCRRGFW SIOCDEVPRIVATE+1 /* get firmware */ 60162306a36Sopenharmony_ci#define SIOCRRID SIOCDEVPRIVATE+2 /* identify */ 60262306a36Sopenharmony_ci 60362306a36Sopenharmony_ci 60462306a36Sopenharmony_cistruct seg_hdr { 60562306a36Sopenharmony_ci u32 seg_start; 60662306a36Sopenharmony_ci u32 seg_len; 60762306a36Sopenharmony_ci u32 seg_eestart; 60862306a36Sopenharmony_ci}; 60962306a36Sopenharmony_ci 61062306a36Sopenharmony_ci 61162306a36Sopenharmony_ci#define EEPROM_BASE 0x80000000 61262306a36Sopenharmony_ci#define EEPROM_WORDS 8192 61362306a36Sopenharmony_ci#define EEPROM_BYTES (EEPROM_WORDS * sizeof(u32)) 61462306a36Sopenharmony_ci 61562306a36Sopenharmony_cistruct eeprom_boot { 61662306a36Sopenharmony_ci u32 key1; 61762306a36Sopenharmony_ci u32 key2; 61862306a36Sopenharmony_ci u32 sram_size; 61962306a36Sopenharmony_ci struct seg_hdr loader; 62062306a36Sopenharmony_ci u32 init_chksum; 62162306a36Sopenharmony_ci u32 reserved1; 62262306a36Sopenharmony_ci}; 62362306a36Sopenharmony_ci 62462306a36Sopenharmony_cistruct eeprom_manf { 62562306a36Sopenharmony_ci u32 HeaderFmt; 62662306a36Sopenharmony_ci u32 Firmware; 62762306a36Sopenharmony_ci u32 BoardRevision; 62862306a36Sopenharmony_ci u32 RoadrunnerRev; 62962306a36Sopenharmony_ci char OpticsPart[8]; 63062306a36Sopenharmony_ci u32 OpticsRev; 63162306a36Sopenharmony_ci u32 pad1; 63262306a36Sopenharmony_ci char SramPart[8]; 63362306a36Sopenharmony_ci u32 SramRev; 63462306a36Sopenharmony_ci u32 pad2; 63562306a36Sopenharmony_ci char EepromPart[8]; 63662306a36Sopenharmony_ci u32 EepromRev; 63762306a36Sopenharmony_ci u32 EepromSize; 63862306a36Sopenharmony_ci char PalPart[8]; 63962306a36Sopenharmony_ci u32 PalRev; 64062306a36Sopenharmony_ci u32 pad3; 64162306a36Sopenharmony_ci char PalCodeFile[12]; 64262306a36Sopenharmony_ci u32 PalCodeRev; 64362306a36Sopenharmony_ci char BoardULA[8]; 64462306a36Sopenharmony_ci char SerialNo[8]; 64562306a36Sopenharmony_ci char MfgDate[8]; 64662306a36Sopenharmony_ci char MfgTime[8]; 64762306a36Sopenharmony_ci char ModifyDate[8]; 64862306a36Sopenharmony_ci u32 ModCount; 64962306a36Sopenharmony_ci u32 pad4[13]; 65062306a36Sopenharmony_ci}; 65162306a36Sopenharmony_ci 65262306a36Sopenharmony_ci 65362306a36Sopenharmony_cistruct eeprom_phase_info { 65462306a36Sopenharmony_ci char phase1File[12]; 65562306a36Sopenharmony_ci u32 phase1Rev; 65662306a36Sopenharmony_ci char phase1Date[8]; 65762306a36Sopenharmony_ci char phase2File[12]; 65862306a36Sopenharmony_ci u32 phase2Rev; 65962306a36Sopenharmony_ci char phase2Date[8]; 66062306a36Sopenharmony_ci u32 reserved7[4]; 66162306a36Sopenharmony_ci}; 66262306a36Sopenharmony_ci 66362306a36Sopenharmony_cistruct eeprom_rncd_info { 66462306a36Sopenharmony_ci u32 FwStart; 66562306a36Sopenharmony_ci u32 FwRev; 66662306a36Sopenharmony_ci char FwDate[8]; 66762306a36Sopenharmony_ci u32 AddrRunCodeSegs; 66862306a36Sopenharmony_ci u32 FileNames; 66962306a36Sopenharmony_ci char File[13][8]; 67062306a36Sopenharmony_ci}; 67162306a36Sopenharmony_ci 67262306a36Sopenharmony_ci 67362306a36Sopenharmony_ci/* Phase 1 region (starts are word offset 0x80) */ 67462306a36Sopenharmony_cistruct phase1_hdr{ 67562306a36Sopenharmony_ci u32 jump; 67662306a36Sopenharmony_ci u32 noop; 67762306a36Sopenharmony_ci struct seg_hdr phase2Seg; 67862306a36Sopenharmony_ci}; 67962306a36Sopenharmony_ci 68062306a36Sopenharmony_cistruct eeprom { 68162306a36Sopenharmony_ci struct eeprom_boot boot; 68262306a36Sopenharmony_ci u32 pad1[8]; 68362306a36Sopenharmony_ci struct eeprom_manf manf; 68462306a36Sopenharmony_ci struct eeprom_phase_info phase_info; 68562306a36Sopenharmony_ci struct eeprom_rncd_info rncd_info; 68662306a36Sopenharmony_ci u32 pad2[15]; 68762306a36Sopenharmony_ci u32 hdr_checksum; 68862306a36Sopenharmony_ci struct phase1_hdr phase1; 68962306a36Sopenharmony_ci}; 69062306a36Sopenharmony_ci 69162306a36Sopenharmony_ci 69262306a36Sopenharmony_cistruct rr_stats { 69362306a36Sopenharmony_ci u32 NicTimeStamp; 69462306a36Sopenharmony_ci u32 RngCreated; 69562306a36Sopenharmony_ci u32 RngDeleted; 69662306a36Sopenharmony_ci u32 IntrGen; 69762306a36Sopenharmony_ci u32 NEvtOvfl; 69862306a36Sopenharmony_ci u32 InvCmd; 69962306a36Sopenharmony_ci u32 DmaReadErrs; 70062306a36Sopenharmony_ci u32 DmaWriteErrs; 70162306a36Sopenharmony_ci u32 StatUpdtT; 70262306a36Sopenharmony_ci u32 StatUpdtC; 70362306a36Sopenharmony_ci u32 WatchDog; 70462306a36Sopenharmony_ci u32 Trace; 70562306a36Sopenharmony_ci 70662306a36Sopenharmony_ci /* Serial HIPPI */ 70762306a36Sopenharmony_ci u32 LnkRdyEst; 70862306a36Sopenharmony_ci u32 GLinkErr; 70962306a36Sopenharmony_ci u32 AltFlgErr; 71062306a36Sopenharmony_ci u32 OvhdBit8Sync; 71162306a36Sopenharmony_ci u32 RmtSerPrtyErr; 71262306a36Sopenharmony_ci u32 RmtParPrtyErr; 71362306a36Sopenharmony_ci u32 RmtLoopBk; 71462306a36Sopenharmony_ci u32 pad1; 71562306a36Sopenharmony_ci 71662306a36Sopenharmony_ci /* HIPPI tx */ 71762306a36Sopenharmony_ci u32 ConEst; 71862306a36Sopenharmony_ci u32 ConRejS; 71962306a36Sopenharmony_ci u32 ConRetry; 72062306a36Sopenharmony_ci u32 ConTmOut; 72162306a36Sopenharmony_ci u32 SndConDiscon; 72262306a36Sopenharmony_ci u32 SndParErr; 72362306a36Sopenharmony_ci u32 PktSnt; 72462306a36Sopenharmony_ci u32 pad2[2]; 72562306a36Sopenharmony_ci u32 ShFBstSnt; 72662306a36Sopenharmony_ci u64 BytSent; 72762306a36Sopenharmony_ci u32 TxTimeout; 72862306a36Sopenharmony_ci u32 pad3[3]; 72962306a36Sopenharmony_ci 73062306a36Sopenharmony_ci /* HIPPI rx */ 73162306a36Sopenharmony_ci u32 ConAcc; 73262306a36Sopenharmony_ci u32 ConRejdiPrty; 73362306a36Sopenharmony_ci u32 ConRejd64b; 73462306a36Sopenharmony_ci u32 ConRejdBuf; 73562306a36Sopenharmony_ci u32 RxConDiscon; 73662306a36Sopenharmony_ci u32 RxConNoData; 73762306a36Sopenharmony_ci u32 PktRx; 73862306a36Sopenharmony_ci u32 pad4[2]; 73962306a36Sopenharmony_ci u32 ShFBstRx; 74062306a36Sopenharmony_ci u64 BytRx; 74162306a36Sopenharmony_ci u32 RxParErr; 74262306a36Sopenharmony_ci u32 RxLLRCerr; 74362306a36Sopenharmony_ci u32 RxBstSZerr; 74462306a36Sopenharmony_ci u32 RxStateErr; 74562306a36Sopenharmony_ci u32 RxRdyErr; 74662306a36Sopenharmony_ci u32 RxInvULP; 74762306a36Sopenharmony_ci u32 RxSpcBuf; 74862306a36Sopenharmony_ci u32 RxSpcDesc; 74962306a36Sopenharmony_ci u32 RxRngSpc; 75062306a36Sopenharmony_ci u32 RxRngFull; 75162306a36Sopenharmony_ci u32 RxPktLenErr; 75262306a36Sopenharmony_ci u32 RxCksmErr; 75362306a36Sopenharmony_ci u32 RxPktDrp; 75462306a36Sopenharmony_ci u32 RngLowSpc; 75562306a36Sopenharmony_ci u32 RngDataClose; 75662306a36Sopenharmony_ci u32 RxTimeout; 75762306a36Sopenharmony_ci u32 RxIdle; 75862306a36Sopenharmony_ci}; 75962306a36Sopenharmony_ci 76062306a36Sopenharmony_ci 76162306a36Sopenharmony_ci/* 76262306a36Sopenharmony_ci * This struct is shared with the NIC firmware. 76362306a36Sopenharmony_ci */ 76462306a36Sopenharmony_cistruct ring_ctrl { 76562306a36Sopenharmony_ci rraddr rngptr; 76662306a36Sopenharmony_ci#ifdef __LITTLE_ENDIAN 76762306a36Sopenharmony_ci u16 entries; 76862306a36Sopenharmony_ci u8 pad; 76962306a36Sopenharmony_ci u8 entry_size; 77062306a36Sopenharmony_ci u16 pi; 77162306a36Sopenharmony_ci u16 mode; 77262306a36Sopenharmony_ci#else 77362306a36Sopenharmony_ci u8 entry_size; 77462306a36Sopenharmony_ci u8 pad; 77562306a36Sopenharmony_ci u16 entries; 77662306a36Sopenharmony_ci u16 mode; 77762306a36Sopenharmony_ci u16 pi; 77862306a36Sopenharmony_ci#endif 77962306a36Sopenharmony_ci}; 78062306a36Sopenharmony_ci 78162306a36Sopenharmony_cistruct rr_info { 78262306a36Sopenharmony_ci union { 78362306a36Sopenharmony_ci struct rr_stats stats; 78462306a36Sopenharmony_ci u32 stati[128]; 78562306a36Sopenharmony_ci } s; 78662306a36Sopenharmony_ci struct ring_ctrl evt_ctrl; 78762306a36Sopenharmony_ci struct ring_ctrl cmd_ctrl; 78862306a36Sopenharmony_ci struct ring_ctrl tx_ctrl; 78962306a36Sopenharmony_ci u8 pad[464]; 79062306a36Sopenharmony_ci u8 trace[3072]; 79162306a36Sopenharmony_ci}; 79262306a36Sopenharmony_ci 79362306a36Sopenharmony_ci/* 79462306a36Sopenharmony_ci * The linux structure for the RoadRunner. 79562306a36Sopenharmony_ci * 79662306a36Sopenharmony_ci * RX/TX descriptors are put first to make sure they are properly 79762306a36Sopenharmony_ci * aligned and do not cross cache-line boundaries. 79862306a36Sopenharmony_ci */ 79962306a36Sopenharmony_ci 80062306a36Sopenharmony_cistruct rr_private 80162306a36Sopenharmony_ci{ 80262306a36Sopenharmony_ci struct rx_desc *rx_ring; 80362306a36Sopenharmony_ci struct tx_desc *tx_ring; 80462306a36Sopenharmony_ci struct event *evt_ring; 80562306a36Sopenharmony_ci dma_addr_t tx_ring_dma; 80662306a36Sopenharmony_ci dma_addr_t rx_ring_dma; 80762306a36Sopenharmony_ci dma_addr_t evt_ring_dma; 80862306a36Sopenharmony_ci /* Alignment ok ? */ 80962306a36Sopenharmony_ci struct sk_buff *rx_skbuff[RX_RING_ENTRIES]; 81062306a36Sopenharmony_ci struct sk_buff *tx_skbuff[TX_RING_ENTRIES]; 81162306a36Sopenharmony_ci struct rr_regs __iomem *regs; /* Register base */ 81262306a36Sopenharmony_ci struct ring_ctrl *rx_ctrl; /* Receive ring control */ 81362306a36Sopenharmony_ci struct rr_info *info; /* Shared info page */ 81462306a36Sopenharmony_ci dma_addr_t rx_ctrl_dma; 81562306a36Sopenharmony_ci dma_addr_t info_dma; 81662306a36Sopenharmony_ci spinlock_t lock; 81762306a36Sopenharmony_ci struct timer_list timer; 81862306a36Sopenharmony_ci u32 cur_rx, cur_cmd, cur_evt; 81962306a36Sopenharmony_ci u32 dirty_rx, dirty_tx; 82062306a36Sopenharmony_ci u32 tx_full; 82162306a36Sopenharmony_ci u32 fw_rev; 82262306a36Sopenharmony_ci volatile short fw_running; 82362306a36Sopenharmony_ci struct pci_dev *pci_dev; 82462306a36Sopenharmony_ci}; 82562306a36Sopenharmony_ci 82662306a36Sopenharmony_ci 82762306a36Sopenharmony_ci/* 82862306a36Sopenharmony_ci * Prototypes 82962306a36Sopenharmony_ci */ 83062306a36Sopenharmony_cistatic int rr_init(struct net_device *dev); 83162306a36Sopenharmony_cistatic int rr_init1(struct net_device *dev); 83262306a36Sopenharmony_cistatic irqreturn_t rr_interrupt(int irq, void *dev_id); 83362306a36Sopenharmony_ci 83462306a36Sopenharmony_cistatic int rr_open(struct net_device *dev); 83562306a36Sopenharmony_cistatic netdev_tx_t rr_start_xmit(struct sk_buff *skb, 83662306a36Sopenharmony_ci struct net_device *dev); 83762306a36Sopenharmony_cistatic int rr_close(struct net_device *dev); 83862306a36Sopenharmony_cistatic int rr_siocdevprivate(struct net_device *dev, struct ifreq *rq, 83962306a36Sopenharmony_ci void __user *data, int cmd); 84062306a36Sopenharmony_cistatic unsigned int rr_read_eeprom(struct rr_private *rrpriv, 84162306a36Sopenharmony_ci unsigned long offset, 84262306a36Sopenharmony_ci unsigned char *buf, 84362306a36Sopenharmony_ci unsigned long length); 84462306a36Sopenharmony_cistatic u32 rr_read_eeprom_word(struct rr_private *rrpriv, size_t offset); 84562306a36Sopenharmony_cistatic int rr_load_firmware(struct net_device *dev); 84662306a36Sopenharmony_cistatic inline void rr_raz_tx(struct rr_private *, struct net_device *); 84762306a36Sopenharmony_cistatic inline void rr_raz_rx(struct rr_private *, struct net_device *); 84862306a36Sopenharmony_ci#endif /* _RRUNNER_H_ */ 849