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