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, &regs->RxRingHi);
5171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	writel(baddr >> 32, &regs->RxRingLo);
5181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#elif (BITS_PER_LONG == 64)
5191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	writel(baddr >> 32, &regs->RxRingHi);
5201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	writel(baddr & 0xffffffff, &regs->RxRingLo);
5211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
5221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	writel(0, &regs->RxRingHi);
5231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	writel(baddr, &regs->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, &regs->InfoPtrHi);
5341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	writel(baddr >> 32, &regs->InfoPtrLo);
5351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#elif (BITS_PER_LONG == 64)
5361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	writel(baddr >> 32, &regs->InfoPtrHi);
5371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	writel(baddr & 0xffffffff, &regs->InfoPtrLo);
5381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
5391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	writel(0, &regs->InfoPtrHi);
5401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	writel(baddr, &regs->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