11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _RRUNNER_H_ 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _RRUNNER_H_ 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/interrupt.h> 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if ((BITS_PER_LONG != 32) && (BITS_PER_LONG != 64)) 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#error "BITS_PER_LONG not defined or not valid" 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct rr_regs { 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad0[16]; 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 HostCtrl; 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 LocalCtrl; 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 Pc; 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 BrkPt; 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Timer increments every 0.97 micro-seconds (unsigned int) */ 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 Timer_Hi; 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 Timer; 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 TimerRef; 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 PciState; 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 Event; 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 MbEvent; 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 WinBase; 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 WinData; 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RX_state; 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 TX_state; 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 Overhead; 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 ExtIo; 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DmaWriteHostHi; 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DmaWriteHostLo; 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad1[2]; 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DmaReadHostHi; 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DmaReadHostLo; 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad2; 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DmaReadLen; 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DmaWriteState; 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DmaWriteLcl; 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DmaWriteIPchecksum; 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DmaWriteLen; 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DmaReadState; 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DmaReadLcl; 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DmaReadIPchecksum; 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad3; 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxBase; 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxPrd; 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxCon; 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad4; 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 TxBase; 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 TxPrd; 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 TxCon; 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad5; 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxIndPro; 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxIndCon; 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxIndRef; 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad6; 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 TxIndPro; 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 TxIndCon; 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 TxIndRef; 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad7[17]; 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DrCmndPro; 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DrCmndCon; 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DrCmndRef; 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad8; 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DwCmndPro; 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DwCmndCon; 901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DwCmndRef; 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 AssistState; 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DrDataPro; 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DrDataCon; 961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DrDataRef; 971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad9; 991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DwDataPro; 1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DwDataCon; 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DwDataRef; 1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad10[33]; 1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 EvtCon; 1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad11[5]; 1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 TxPi; 1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 IpRxPi; 1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad11a[8]; 1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 CmdRing[16]; 1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* The ULA is in two registers the high order two bytes of the first 1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * word contain the RunCode features. 1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ula0 res res byte0 byte1 1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ula1 byte2 byte3 byte4 byte5 1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 Ula0; 1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 Ula1; 1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxRingHi; 1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxRingLo; 1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 InfoPtrHi; 1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 InfoPtrLo; 1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 Mode; 1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 ConRetry; 1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 ConRetryTmr; 1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 ConTmout; 1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 CtatTmr; 1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 MaxRxRng; 1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 IntrTmr; 1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 TxDataMvTimeout; 1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxDataMvTimeout; 1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 EvtPrd; 1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 TraceIdx; 1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 Fail1; 1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 Fail2; 1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DrvPrm; 1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 FilterLA; 1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 FwRev; 1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 FwRes1; 1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 FwRes2; 1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 FwRes3; 1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 WriteDmaThresh; 1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 ReadDmaThresh; 1621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad12[325]; 1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 Window[512]; 1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Host control register bits. 1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 1706aa20a2235535605db6d6d2bd850298b2fe7f31eJeff Garzik 1711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RR_INT 0x01 1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RR_CLEAR_INT 0x02 1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NO_SWAP 0x04000004 1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NO_SWAP1 0x00000004 1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCI_RESET_NIC 0x08 1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HALT_NIC 0x10 1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SSTEP_NIC 0x20 1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MEM_READ_MULTI 0x40 1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NIC_HALTED 0x100 1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HALT_INST 0x200 1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PARITY_ERR 0x400 1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INVALID_INST_B 0x800 1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RR_REV_2 0x20000000 1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RR_REV_MASK 0xf0000000 1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Local control register bits. 1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INTA_STATE 0x01 1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CLEAR_INTA 0x02 1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FAST_EEPROM_ACCESS 0x08 1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ENABLE_EXTRA_SRAM 0x100 1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ENABLE_EXTRA_DESC 0x200 1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ENABLE_PARITY 0x400 1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FORCE_DMA_PARITY_ERROR 0x800 1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ENABLE_EEPROM_WRITE 0x1000 1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ENABLE_DATA_CACHE 0x2000 1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SRAM_LO_PARITY_ERR 0x4000 2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SRAM_HI_PARITY_ERR 0x8000 2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PCI state bits. 2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FORCE_PCI_RESET 0x01 2071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PROVIDE_LENGTH 0x02 2081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MASK_DMA_READ_MAX 0x1C 2091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RBURST_DISABLE 0x00 2101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RBURST_4 0x04 2111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RBURST_16 0x08 2121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RBURST_32 0x0C 2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RBURST_64 0x10 2141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RBURST_128 0x14 2151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RBURST_256 0x18 2161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RBURST_1024 0x1C 2171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MASK_DMA_WRITE_MAX 0xE0 2181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WBURST_DISABLE 0x00 2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WBURST_4 0x20 2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WBURST_16 0x40 2211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WBURST_32 0x60 2221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WBURST_64 0x80 2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WBURST_128 0xa0 2241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WBURST_256 0xc0 2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WBURST_1024 0xe0 2261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MASK_MIN_DMA 0xFF00 2271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FIFO_RETRY_ENABLE 0x10000 2281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 2301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Event register 2311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 2321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMA_WRITE_DONE 0x10000 2341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMA_READ_DONE 0x20000 2351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMA_WRITE_ERR 0x40000 2361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMA_READ_ERR 0x80000 2371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 2391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Receive state 2401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 2416aa20a2235535605db6d6d2bd850298b2fe7f31eJeff Garzik * RoadRunner HIPPI Receive State Register controls and monitors the 2421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * HIPPI receive interface in the NIC. Look at err bits when a HIPPI 2436aa20a2235535605db6d6d2bd850298b2fe7f31eJeff Garzik * receive Error Event occurs. 2441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 2451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ENABLE_NEW_CON 0x01 2471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RESET_RECV 0x02 2481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RECV_ALL 0x00 2491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RECV_1K 0x20 2501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RECV_2K 0x40 2511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RECV_4K 0x60 2521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RECV_8K 0x80 2531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RECV_16K 0xa0 2541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RECV_32K 0xc0 2551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RECV_64K 0xe0 2561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 2581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Transmit status. 2591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 2601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ENA_XMIT 0x01 2621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PERM_CON 0x02 2631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 2651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DMA write state 2661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 2671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RESET_DMA 0x01 2691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NO_SWAP_DMA 0x02 2701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMA_ACTIVE 0x04 2711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define THRESH_MASK 0x1F 2721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMA_ERROR_MASK 0xff000000 2731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 2751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Gooddies stored in the ULA registers. 2761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 2771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TRACE_ON_WHAT_BIT 0x00020000 /* Traces on */ 2791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ONEM_BUF_WHAT_BIT 0x00040000 /* 1Meg vs 256K */ 2801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CHAR_API_WHAT_BIT 0x00080000 /* Char API vs network only */ 2811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CMD_EVT_WHAT_BIT 0x00200000 /* Command event */ 2821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LONG_TX_WHAT_BIT 0x00400000 2831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LONG_RX_WHAT_BIT 0x00800000 2841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WHAT_BIT_MASK 0xFFFD0000 /* Feature bit mask */ 2851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 2871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Mode status 2881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 2891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EVENT_OVFL 0x80000000 2911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FATAL_ERR 0x40000000 2921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LOOP_BACK 0x01 2931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MODE_PH 0x02 2941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MODE_FP 0x00 2951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PTR64BIT 0x04 2961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PTR32BIT 0x00 2971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PTR_WD_SWAP 0x08 2981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PTR_WD_NOSWAP 0x00 2991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define POST_WARN_EVENT 0x10 3001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_TERM 0x20 3011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DIRECT_CONN 0x40 3021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NO_NIC_WATCHDOG 0x80 3031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SWAP_DATA 0x100 3041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SWAP_CONTROL 0x200 3051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NIC_HALT_ON_ERR 0x400 3061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NIC_NO_RESTART 0x800 3071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HALF_DUP_TX 0x1000 3081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HALF_DUP_RX 0x2000 3091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 3121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Error codes 3131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 3141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Host Error Codes - values of fail1 */ 3161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_UNKNOWN_MBOX 0x1001 3171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_UNKNOWN_CMD 0x1002 3181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_MAX_RING 0x1003 3191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_RING_CLOSED 0x1004 3201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_RING_OPEN 0x1005 3211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Firmware internal errors */ 3221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_EVENT_RING_FULL 0x01 3231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_DW_PEND_CMND_FULL 0x02 3241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_DR_PEND_CMND_FULL 0x03 3251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_DW_PEND_DATA_FULL 0x04 3261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_DR_PEND_DATA_FULL 0x05 3271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_ILLEGAL_JUMP 0x06 3281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_UNIMPLEMENTED 0x07 3291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_TX_INFO_FULL 0x08 3301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_RX_INFO_FULL 0x09 3311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_ILLEGAL_MODE 0x0A 3321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_MAIN_TIMEOUT 0x0B 3331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_EVENT_BITS 0x0C 3341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_UNPEND_FULL 0x0D 3351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_TIMER_QUEUE_FULL 0x0E 3361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_TIMER_QUEUE_EMPTY 0x0F 3371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_TIMER_NO_FREE 0x10 3381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_INTR_START 0x11 3391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_BAD_STARTUP 0x12 3401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_NO_PKT_END 0x13 3411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_HALTED_ON_ERR 0x14 3421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Hardware NIC Errors */ 3431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_WRITE_DMA 0x0101 3441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_READ_DMA 0x0102 3451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_EXT_SERIAL 0x0103 3461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_TX_INT_PARITY 0x0104 3471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 3501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Event definitions 3511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 3521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EVT_RING_ENTRIES 64 3541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EVT_RING_SIZE (EVT_RING_ENTRIES * sizeof(struct event)) 3551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct event { 3571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef __LITTLE_ENDIAN 3581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 index; 3591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 ring; 3601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 code; 3611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 3621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 code; 3631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 ring; 3641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 index; 3651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 3661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 timestamp; 3671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 3681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 3701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * General Events 3711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 3721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_NIC_UP 0x01 3741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_WATCHDOG 0x02 3751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_STAT_UPD 0x04 3771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_INVAL_CMD 0x05 3781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_SET_CMD_CONS 0x06 3791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_LINK_ON 0x07 3801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_LINK_OFF 0x08 3811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_INTERN_ERR 0x09 3821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_HOST_ERR 0x0A 3831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_STATS_UPDATE 0x0B 3841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_REJECTING 0x0C 3851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 3871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Send Events 3881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 3891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_CON_REJ 0x13 3901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_CON_TMOUT 0x14 3911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_CON_NC_TMOUT 0x15 /* I , Connection No Campon Timeout */ 3921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_DISC_ERR 0x16 3931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_INT_PRTY 0x17 3941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_TX_IDLE 0x18 3951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_TX_LINK_DROP 0x19 3961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_TX_INV_RNG 0x1A 3971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_TX_INV_BUF 0x1B 3981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_TX_INV_DSC 0x1C 3991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 4011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Destination Events 4021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 4031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 4041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * General Receive events 4051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 4061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_VAL_RNG 0x20 4071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_RX_RNG_ENER 0x21 4081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_INV_RNG 0x22 4091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_RX_RNG_SPC 0x23 4101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_RX_RNG_OUT 0x24 4111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_PKT_DISCARD 0x25 4121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_INFO_EVT 0x27 4131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 4151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Data corrupted events 4161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 4171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_RX_PAR_ERR 0x2B 4181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_RX_LLRC_ERR 0x2C 4191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_IP_CKSM_ERR 0x2D 4201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_DTA_CKSM_ERR 0x2E 4211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_SHT_BST 0x2F 4221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 4241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Data lost events 4251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 4261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_LST_LNK_ERR 0x30 4271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_FLG_SYN_ERR 0x31 4281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_FRM_ERR 0x32 4291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_RX_IDLE 0x33 4301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_PKT_LN_ERR 0x34 4311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_STATE_ERR 0x35 4321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_UNEXP_DATA 0x3C 4331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 4351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Fatal events 4361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 4371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_RX_INV_BUF 0x36 4381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_RX_INV_DSC 0x37 4391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_RNG_BLK 0x38 4401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 4421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Warning events 4431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 4441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_RX_TO 0x39 4451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_BFR_SPC 0x3A 4461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_INV_ULP 0x3B 4471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E_NOT_IMPLEMENTED 0x40 4491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 4521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Commands 4531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 4541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CMD_RING_ENTRIES 16 4561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct cmd { 4581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef __LITTLE_ENDIAN 4591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 index; 4601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 ring; 4611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 code; 4621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 4631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 code; 4641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 ring; 4651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 index; 4661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 4671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 4681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define C_START_FW 0x01 4701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define C_UPD_STAT 0x02 4711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define C_WATCHDOG 0x05 4721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define C_DEL_RNG 0x09 4731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define C_NEW_RNG 0x0A 4741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define C_CONN 0x0D 4751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 4781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Mode bits 4791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 4801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PACKET_BAD 0x01 /* Packet had link-layer error */ 4821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INTERRUPT 0x02 4831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TX_IP_CKSUM 0x04 4841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PACKET_END 0x08 4851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PACKET_START 0x10 4861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SAME_IFIELD 0x80 4871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct { 4901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if (BITS_PER_LONG == 64) 4911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u64 addrlo; 4921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 4931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 addrhi; 4941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 addrlo; 4951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 4961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} rraddr; 4971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void set_rraddr(rraddr *ra, dma_addr_t addr) 5001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 5011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long baddr = addr; 5021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if (BITS_PER_LONG == 64) 5031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ra->addrlo = baddr; 5041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 5051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Don't bother setting zero every time */ 5061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ra->addrlo = baddr; 5071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 5081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds mb(); 5091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 5101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 5111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 5121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void set_rxaddr(struct rr_regs __iomem *regs, volatile dma_addr_t addr) 5131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 5141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long baddr = addr; 5151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if (BITS_PER_LONG == 64) && defined(__LITTLE_ENDIAN) 5161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds writel(baddr & 0xffffffff, ®s->RxRingHi); 5171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds writel(baddr >> 32, ®s->RxRingLo); 5181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#elif (BITS_PER_LONG == 64) 5191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds writel(baddr >> 32, ®s->RxRingHi); 5201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds writel(baddr & 0xffffffff, ®s->RxRingLo); 5211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 5221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds writel(0, ®s->RxRingHi); 5231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds writel(baddr, ®s->RxRingLo); 5241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 5251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds mb(); 5261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 5271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 5281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 5291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void set_infoaddr(struct rr_regs __iomem *regs, volatile dma_addr_t addr) 5301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 5311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long baddr = addr; 5321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if (BITS_PER_LONG == 64) && defined(__LITTLE_ENDIAN) 5331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds writel(baddr & 0xffffffff, ®s->InfoPtrHi); 5341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds writel(baddr >> 32, ®s->InfoPtrLo); 5351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#elif (BITS_PER_LONG == 64) 5361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds writel(baddr >> 32, ®s->InfoPtrHi); 5371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds writel(baddr & 0xffffffff, ®s->InfoPtrLo); 5381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 5391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds writel(0, ®s->InfoPtrHi); 5401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds writel(baddr, ®s->InfoPtrLo); 5411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 5421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds mb(); 5431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 5441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 5451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 5461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 5471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * TX ring 5481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 5491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 5501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_ROADRUNNER_LARGE_RINGS 5511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TX_RING_ENTRIES 32 5521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 5531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TX_RING_ENTRIES 16 5541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 5551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TX_TOTAL_SIZE (TX_RING_ENTRIES * sizeof(struct tx_desc)) 5561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 5571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct tx_desc{ 5581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds rraddr addr; 5591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 res; 5601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef __LITTLE_ENDIAN 5611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 size; 5621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 pad; 5631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 mode; 5641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 5651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 mode; 5661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 pad; 5671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 size; 5681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 5691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 5701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 5711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 5721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_ROADRUNNER_LARGE_RINGS 5731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RX_RING_ENTRIES 32 5741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 5751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RX_RING_ENTRIES 16 5761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 5771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RX_TOTAL_SIZE (RX_RING_ENTRIES * sizeof(struct rx_desc)) 5781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 5791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct rx_desc{ 5801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds rraddr addr; 5811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 res; 5821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef __LITTLE_ENDIAN 5831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 size; 5841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 pad; 5851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 mode; 5861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 5871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 mode; 5881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 pad; 5891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 size; 5901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 5911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 5921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 5931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 5941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 5951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ioctl's 5961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 5971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 5981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SIOCRRPFW SIOCDEVPRIVATE /* put firmware */ 5991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SIOCRRGFW SIOCDEVPRIVATE+1 /* get firmware */ 6001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SIOCRRID SIOCDEVPRIVATE+2 /* identify */ 6011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 6021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 6031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct seg_hdr { 6041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 seg_start; 6051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 seg_len; 6061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 seg_eestart; 6071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 6081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 6091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 6101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_BASE 0x80000000 6111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_WORDS 8192 6121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EEPROM_BYTES (EEPROM_WORDS * sizeof(u32)) 6131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 6141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct eeprom_boot { 6151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 key1; 6161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 key2; 6171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 sram_size; 6181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct seg_hdr loader; 6191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 init_chksum; 6201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 reserved1; 6211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 6221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 6231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct eeprom_manf { 6241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 HeaderFmt; 6251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 Firmware; 6261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 BoardRevision; 6271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RoadrunnerRev; 6281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char OpticsPart[8]; 6291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 OpticsRev; 6301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad1; 6311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char SramPart[8]; 6321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 SramRev; 6331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad2; 6341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char EepromPart[8]; 6351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 EepromRev; 6361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 EepromSize; 6371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char PalPart[8]; 6381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 PalRev; 6391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad3; 6401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char PalCodeFile[12]; 6411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 PalCodeRev; 6421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char BoardULA[8]; 6431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char SerialNo[8]; 6441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char MfgDate[8]; 6451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char MfgTime[8]; 6461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char ModifyDate[8]; 6471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 ModCount; 6481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad4[13]; 6491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 6501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 6511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 6521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct eeprom_phase_info { 6531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char phase1File[12]; 6541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 phase1Rev; 6551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char phase1Date[8]; 6561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char phase2File[12]; 6571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 phase2Rev; 6581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char phase2Date[8]; 6591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 reserved7[4]; 6601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 6611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 6621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct eeprom_rncd_info { 6631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 FwStart; 6641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 FwRev; 6651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char FwDate[8]; 6661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 AddrRunCodeSegs; 6671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 FileNames; 6681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char File[13][8]; 6691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 6701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 6711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 6721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Phase 1 region (starts are word offset 0x80) */ 6731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct phase1_hdr{ 6741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 jump; 6751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 noop; 6761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct seg_hdr phase2Seg; 6771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 6781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 6791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct eeprom { 6801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct eeprom_boot boot; 6811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad1[8]; 6821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct eeprom_manf manf; 6831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct eeprom_phase_info phase_info; 6841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct eeprom_rncd_info rncd_info; 6851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad2[15]; 6861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 hdr_checksum; 6871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct phase1_hdr phase1; 6881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 6891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 6901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 6911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct rr_stats { 6921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 NicTimeStamp; 6931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RngCreated; 6941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RngDeleted; 6951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 IntrGen; 6961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 NEvtOvfl; 6971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 InvCmd; 6981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DmaReadErrs; 6991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 DmaWriteErrs; 7001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 StatUpdtT; 7011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 StatUpdtC; 7021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 WatchDog; 7036aa20a2235535605db6d6d2bd850298b2fe7f31eJeff Garzik u32 Trace; 7041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 7051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Serial HIPPI */ 7061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 LnkRdyEst; 7071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 GLinkErr; 7081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 AltFlgErr; 7091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 OvhdBit8Sync; 7101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RmtSerPrtyErr; 7111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RmtParPrtyErr; 7121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RmtLoopBk; 7131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad1; 7141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 7151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* HIPPI tx */ 7161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 ConEst; 7171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 ConRejS; 7181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 ConRetry; 7191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 ConTmOut; 7201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 SndConDiscon; 7211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 SndParErr; 7221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 PktSnt; 7231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad2[2]; 7241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 ShFBstSnt; 7251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u64 BytSent; 7261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 TxTimeout; 7271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad3[3]; 7281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 7291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* HIPPI rx */ 7301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 ConAcc; 7311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 ConRejdiPrty; 7321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 ConRejd64b; 7331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 ConRejdBuf; 7341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxConDiscon; 7351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxConNoData; 7361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 PktRx; 7371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 pad4[2]; 7381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 ShFBstRx; 7391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u64 BytRx; 7401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxParErr; 7411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxLLRCerr; 7421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxBstSZerr; 7431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxStateErr; 7441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxRdyErr; 7451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxInvULP; 7461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxSpcBuf; 7471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxSpcDesc; 7481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxRngSpc; 7491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxRngFull; 7501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxPktLenErr; 7511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxCksmErr; 7521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxPktDrp; 7531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RngLowSpc; 7541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RngDataClose; 7551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxTimeout; 7561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 RxIdle; 7571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 7581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 7591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 7601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 7611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This struct is shared with the NIC firmware. 7621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 7631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct ring_ctrl { 7641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds rraddr rngptr; 7651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef __LITTLE_ENDIAN 7661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 entries; 7671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 pad; 7681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 entry_size; 7691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 pi; 7701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 mode; 7711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 7721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 entry_size; 7731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 pad; 7741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 entries; 7751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 mode; 7761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 pi; 7771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 7781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 7791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 7801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct rr_info { 7811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds union { 7821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct rr_stats stats; 7831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 stati[128]; 7841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } s; 7851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct ring_ctrl evt_ctrl; 7861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct ring_ctrl cmd_ctrl; 7871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct ring_ctrl tx_ctrl; 7881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 pad[464]; 7891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 trace[3072]; 7901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 7911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 7921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 7931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The linux structure for the RoadRunner. 7941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 7951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RX/TX descriptors are put first to make sure they are properly 7961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * aligned and do not cross cache-line boundaries. 7971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 7981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 7991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct rr_private 8001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 8011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct rx_desc *rx_ring; 8021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct tx_desc *tx_ring; 8031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct event *evt_ring; 8041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds dma_addr_t tx_ring_dma; 8051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds dma_addr_t rx_ring_dma; 8061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds dma_addr_t evt_ring_dma; 8071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Alignment ok ? */ 8081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct sk_buff *rx_skbuff[RX_RING_ENTRIES]; 8091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct sk_buff *tx_skbuff[TX_RING_ENTRIES]; 8101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct rr_regs __iomem *regs; /* Register base */ 8111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct ring_ctrl *rx_ctrl; /* Receive ring control */ 8121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct rr_info *info; /* Shared info page */ 8131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds dma_addr_t rx_ctrl_dma; 8141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds dma_addr_t info_dma; 8151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds spinlock_t lock; 8161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct timer_list timer; 8171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 cur_rx, cur_cmd, cur_evt; 8181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 dirty_rx, dirty_tx; 8191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 tx_full; 8201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 fw_rev; 8211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds volatile short fw_running; 8221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct pci_dev *pci_dev; 8231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 8241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 8251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 8261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 8271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Prototypes 8281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 8291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int rr_init(struct net_device *dev); 8301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int rr_init1(struct net_device *dev); 8317d12e780e003f93433d49ce78cfedf4b4c52adc5David Howellsstatic irqreturn_t rr_interrupt(int irq, void *dev_id); 8321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 8331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int rr_open(struct net_device *dev); 83461357325f377889a1daffa14962d705dc814dd0eStephen Hemmingerstatic netdev_tx_t rr_start_xmit(struct sk_buff *skb, 83561357325f377889a1daffa14962d705dc814dd0eStephen Hemminger struct net_device *dev); 8361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int rr_close(struct net_device *dev); 8371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int rr_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); 8381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic unsigned int rr_read_eeprom(struct rr_private *rrpriv, 8391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long offset, 8401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char *buf, 8411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long length); 842cf96237837ec6d4fc48bc2f735c71027cc0fc5faAl Virostatic u32 rr_read_eeprom_word(struct rr_private *rrpriv, size_t offset); 8431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int rr_load_firmware(struct net_device *dev); 8441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void rr_raz_tx(struct rr_private *, struct net_device *); 8451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void rr_raz_rx(struct rr_private *, struct net_device *); 8461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* _RRUNNER_H_ */ 847