162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Advanced  Micro Devices Inc. AMD8111E Linux Network Driver
462306a36Sopenharmony_ci * Copyright (C) 2003 Advanced Micro Devices
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci
762306a36Sopenharmony_ciModule Name:
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci    amd8111e.h
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ciAbstract:
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci	 AMD8111 based 10/100 Ethernet Controller driver definitions.
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ciEnvironment:
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci	Kernel Mode
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ciRevision History:
2062306a36Sopenharmony_ci	3.0.0
2162306a36Sopenharmony_ci	   Initial Revision.
2262306a36Sopenharmony_ci	3.0.1
2362306a36Sopenharmony_ci*/
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci#ifndef _AMD811E_H
2662306a36Sopenharmony_ci#define _AMD811E_H
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci/* Command style register access
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ciRegisters CMD0, CMD2, CMD3,CMD7 and INTEN0 uses a write access technique called command style access. It allows the write to selected bits of this register without altering the bits that are not selected. Command style registers are divided into 4 bytes that can be written independently. Higher order bit of each byte is the  value bit that specifies the value that will be written into the selected bits of register.
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_cieg., if the value 10011010b is written into the least significant byte of a command style register, bits 1,3 and 4 of the register will be set to 1, and the other bits will not be altered. If the value 00011010b is written into the same byte, bits 1,3 and 4 will be cleared to 0 and the other bits will not be altered.
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci*/
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci/*  Offset for Memory Mapped Registers. */
3762306a36Sopenharmony_ci/* 32 bit registers */
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci#define  ASF_STAT		0x00	/* ASF status register */
4062306a36Sopenharmony_ci#define CHIPID			0x04	/* Chip ID register */
4162306a36Sopenharmony_ci#define	MIB_DATA		0x10	/* MIB data register */
4262306a36Sopenharmony_ci#define MIB_ADDR		0x14	/* MIB address register */
4362306a36Sopenharmony_ci#define STAT0			0x30	/* Status0 register */
4462306a36Sopenharmony_ci#define INT0			0x38	/* Interrupt0 register */
4562306a36Sopenharmony_ci#define INTEN0			0x40	/* Interrupt0  enable register*/
4662306a36Sopenharmony_ci#define CMD0			0x48	/* Command0 register */
4762306a36Sopenharmony_ci#define CMD2			0x50	/* Command2 register */
4862306a36Sopenharmony_ci#define CMD3			0x54	/* Command3 resiter */
4962306a36Sopenharmony_ci#define CMD7			0x64	/* Command7 register */
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci#define CTRL1 			0x6C	/* Control1 register */
5262306a36Sopenharmony_ci#define CTRL2 			0x70	/* Control2 register */
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci#define XMT_RING_LIMIT		0x7C	/* Transmit ring limit register */
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci#define AUTOPOLL0		0x88	/* Auto-poll0 register */
5762306a36Sopenharmony_ci#define AUTOPOLL1		0x8A	/* Auto-poll1 register */
5862306a36Sopenharmony_ci#define AUTOPOLL2		0x8C	/* Auto-poll2 register */
5962306a36Sopenharmony_ci#define AUTOPOLL3		0x8E	/* Auto-poll3 register */
6062306a36Sopenharmony_ci#define AUTOPOLL4		0x90	/* Auto-poll4 register */
6162306a36Sopenharmony_ci#define	AUTOPOLL5		0x92	/* Auto-poll5 register */
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci#define AP_VALUE		0x98	/* Auto-poll value register */
6462306a36Sopenharmony_ci#define DLY_INT_A		0xA8	/* Group A delayed interrupt register */
6562306a36Sopenharmony_ci#define DLY_INT_B		0xAC	/* Group B delayed interrupt register */
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci#define FLOW_CONTROL		0xC8	/* Flow control register */
6862306a36Sopenharmony_ci#define PHY_ACCESS		0xD0	/* PHY access register */
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci#define STVAL			0xD8	/* Software timer value register */
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci#define XMT_RING_BASE_ADDR0	0x100	/* Transmit ring0 base addr register */
7362306a36Sopenharmony_ci#define XMT_RING_BASE_ADDR1	0x108	/* Transmit ring1 base addr register */
7462306a36Sopenharmony_ci#define XMT_RING_BASE_ADDR2	0x110	/* Transmit ring2 base addr register */
7562306a36Sopenharmony_ci#define XMT_RING_BASE_ADDR3	0x118	/* Transmit ring2 base addr register */
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci#define RCV_RING_BASE_ADDR0	0x120	/* Transmit ring0 base addr register */
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci#define PMAT0			0x190	/* OnNow pattern register0 */
8062306a36Sopenharmony_ci#define PMAT1			0x194	/* OnNow pattern register1 */
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci/* 16bit registers */
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_ci#define XMT_RING_LEN0		0x140	/* Transmit Ring0 length register */
8562306a36Sopenharmony_ci#define XMT_RING_LEN1		0x144	/* Transmit Ring1 length register */
8662306a36Sopenharmony_ci#define XMT_RING_LEN2		0x148 	/* Transmit Ring2 length register */
8762306a36Sopenharmony_ci#define XMT_RING_LEN3		0x14C	/* Transmit Ring3 length register */
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci#define RCV_RING_LEN0		0x150	/* Receive Ring0 length register */
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci#define SRAM_SIZE		0x178	/* SRAM size register */
9262306a36Sopenharmony_ci#define SRAM_BOUNDARY		0x17A	/* SRAM boundary register */
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ci/* 48bit register */
9562306a36Sopenharmony_ci
9662306a36Sopenharmony_ci#define PADR			0x160	/* Physical address register */
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci#define IFS1			0x18C	/* Inter-frame spacing Part1 register */
9962306a36Sopenharmony_ci#define IFS			0x18D	/* Inter-frame spacing register */
10062306a36Sopenharmony_ci#define IPG			0x18E	/* Inter-frame gap register */
10162306a36Sopenharmony_ci/* 64bit register */
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_ci#define LADRF			0x168	/* Logical address filter register */
10462306a36Sopenharmony_ci
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ci/* Register Bit Definitions */
10762306a36Sopenharmony_citypedef enum {
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ci	ASF_INIT_DONE		= (1 << 1),
11062306a36Sopenharmony_ci	ASF_INIT_PRESENT	= (1 << 0),
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ci}STAT_ASF_BITS;
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_citypedef enum {
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_ci	MIB_CMD_ACTIVE		= (1 << 15 ),
11762306a36Sopenharmony_ci	MIB_RD_CMD		= (1 << 13 ),
11862306a36Sopenharmony_ci	MIB_CLEAR		= (1 << 12 ),
11962306a36Sopenharmony_ci	MIB_ADDRESS		= (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3)|
12062306a36Sopenharmony_ci					(1 << 4) | (1 << 5),
12162306a36Sopenharmony_ci}MIB_ADDR_BITS;
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ci
12462306a36Sopenharmony_citypedef enum {
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ci	PMAT_DET		= (1 << 12),
12762306a36Sopenharmony_ci	MP_DET		        = (1 << 11),
12862306a36Sopenharmony_ci	LC_DET			= (1 << 10),
12962306a36Sopenharmony_ci	SPEED_MASK		= (1 << 9)|(1 << 8)|(1 << 7),
13062306a36Sopenharmony_ci	FULL_DPLX		= (1 << 6),
13162306a36Sopenharmony_ci	LINK_STATS		= (1 << 5),
13262306a36Sopenharmony_ci	AUTONEG_COMPLETE	= (1 << 4),
13362306a36Sopenharmony_ci	MIIPD			= (1 << 3),
13462306a36Sopenharmony_ci	RX_SUSPENDED		= (1 << 2),
13562306a36Sopenharmony_ci	TX_SUSPENDED		= (1 << 1),
13662306a36Sopenharmony_ci	RUNNING			= (1 << 0),
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_ci}STAT0_BITS;
13962306a36Sopenharmony_ci
14062306a36Sopenharmony_ci#define PHY_SPEED_10		0x2
14162306a36Sopenharmony_ci#define PHY_SPEED_100		0x3
14262306a36Sopenharmony_ci
14362306a36Sopenharmony_ci/* INT0				0x38, 32bit register */
14462306a36Sopenharmony_citypedef enum {
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ci	INTR			= (1 << 31),
14762306a36Sopenharmony_ci	PCSINT			= (1 << 28),
14862306a36Sopenharmony_ci	LCINT			= (1 << 27),
14962306a36Sopenharmony_ci	APINT5			= (1 << 26),
15062306a36Sopenharmony_ci	APINT4			= (1 << 25),
15162306a36Sopenharmony_ci	APINT3			= (1 << 24),
15262306a36Sopenharmony_ci	TINT_SUM		= (1 << 23),
15362306a36Sopenharmony_ci	APINT2			= (1 << 22),
15462306a36Sopenharmony_ci	APINT1			= (1 << 21),
15562306a36Sopenharmony_ci	APINT0			= (1 << 20),
15662306a36Sopenharmony_ci	MIIPDTINT		= (1 << 19),
15762306a36Sopenharmony_ci	MCCINT			= (1 << 17),
15862306a36Sopenharmony_ci	MREINT			= (1 << 16),
15962306a36Sopenharmony_ci	RINT_SUM		= (1 << 15),
16062306a36Sopenharmony_ci	SPNDINT			= (1 << 14),
16162306a36Sopenharmony_ci	MPINT			= (1 << 13),
16262306a36Sopenharmony_ci	SINT			= (1 << 12),
16362306a36Sopenharmony_ci	TINT3			= (1 << 11),
16462306a36Sopenharmony_ci	TINT2			= (1 << 10),
16562306a36Sopenharmony_ci	TINT1			= (1 << 9),
16662306a36Sopenharmony_ci	TINT0			= (1 << 8),
16762306a36Sopenharmony_ci	UINT			= (1 << 7),
16862306a36Sopenharmony_ci	STINT			= (1 << 4),
16962306a36Sopenharmony_ci	RINT0			= (1 << 0),
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ci}INT0_BITS;
17262306a36Sopenharmony_ci
17362306a36Sopenharmony_citypedef enum {
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_ci	VAL3			= (1 << 31),   /* VAL bit for byte 3 */
17662306a36Sopenharmony_ci	VAL2			= (1 << 23),   /* VAL bit for byte 2 */
17762306a36Sopenharmony_ci	VAL1			= (1 << 15),   /* VAL bit for byte 1 */
17862306a36Sopenharmony_ci	VAL0			= (1 << 7),    /* VAL bit for byte 0 */
17962306a36Sopenharmony_ci
18062306a36Sopenharmony_ci}VAL_BITS;
18162306a36Sopenharmony_ci
18262306a36Sopenharmony_citypedef enum {
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_ci	/* VAL3 */
18562306a36Sopenharmony_ci	LCINTEN			= (1 << 27),
18662306a36Sopenharmony_ci	APINT5EN		= (1 << 26),
18762306a36Sopenharmony_ci	APINT4EN		= (1 << 25),
18862306a36Sopenharmony_ci	APINT3EN		= (1 << 24),
18962306a36Sopenharmony_ci	/* VAL2 */
19062306a36Sopenharmony_ci	APINT2EN		= (1 << 22),
19162306a36Sopenharmony_ci	APINT1EN		= (1 << 21),
19262306a36Sopenharmony_ci	APINT0EN		= (1 << 20),
19362306a36Sopenharmony_ci	MIIPDTINTEN		= (1 << 19),
19462306a36Sopenharmony_ci	MCCIINTEN		= (1 << 18),
19562306a36Sopenharmony_ci	MCCINTEN		= (1 << 17),
19662306a36Sopenharmony_ci	MREINTEN		= (1 << 16),
19762306a36Sopenharmony_ci	/* VAL1 */
19862306a36Sopenharmony_ci	SPNDINTEN		= (1 << 14),
19962306a36Sopenharmony_ci	MPINTEN			= (1 << 13),
20062306a36Sopenharmony_ci	TINTEN3			= (1 << 11),
20162306a36Sopenharmony_ci	SINTEN			= (1 << 12),
20262306a36Sopenharmony_ci	TINTEN2			= (1 << 10),
20362306a36Sopenharmony_ci	TINTEN1			= (1 << 9),
20462306a36Sopenharmony_ci	TINTEN0			= (1 << 8),
20562306a36Sopenharmony_ci	/* VAL0 */
20662306a36Sopenharmony_ci	STINTEN			= (1 << 4),
20762306a36Sopenharmony_ci	RINTEN0			= (1 << 0),
20862306a36Sopenharmony_ci
20962306a36Sopenharmony_ci	INTEN0_CLEAR 		= 0x1F7F7F1F, /* Command style register */
21062306a36Sopenharmony_ci
21162306a36Sopenharmony_ci}INTEN0_BITS;
21262306a36Sopenharmony_ci
21362306a36Sopenharmony_citypedef enum {
21462306a36Sopenharmony_ci	/* VAL2 */
21562306a36Sopenharmony_ci	RDMD0			= (1 << 16),
21662306a36Sopenharmony_ci	/* VAL1 */
21762306a36Sopenharmony_ci	TDMD3			= (1 << 11),
21862306a36Sopenharmony_ci	TDMD2			= (1 << 10),
21962306a36Sopenharmony_ci	TDMD1			= (1 << 9),
22062306a36Sopenharmony_ci	TDMD0			= (1 << 8),
22162306a36Sopenharmony_ci	/* VAL0 */
22262306a36Sopenharmony_ci	UINTCMD			= (1 << 6),
22362306a36Sopenharmony_ci	RX_FAST_SPND		= (1 << 5),
22462306a36Sopenharmony_ci	TX_FAST_SPND		= (1 << 4),
22562306a36Sopenharmony_ci	RX_SPND			= (1 << 3),
22662306a36Sopenharmony_ci	TX_SPND			= (1 << 2),
22762306a36Sopenharmony_ci	INTREN			= (1 << 1),
22862306a36Sopenharmony_ci	RUN			= (1 << 0),
22962306a36Sopenharmony_ci
23062306a36Sopenharmony_ci	CMD0_CLEAR 		= 0x000F0F7F,   /* Command style register */
23162306a36Sopenharmony_ci
23262306a36Sopenharmony_ci}CMD0_BITS;
23362306a36Sopenharmony_ci
23462306a36Sopenharmony_citypedef enum {
23562306a36Sopenharmony_ci
23662306a36Sopenharmony_ci	/* VAL3 */
23762306a36Sopenharmony_ci	CONDUIT_MODE		= (1 << 29),
23862306a36Sopenharmony_ci	/* VAL2 */
23962306a36Sopenharmony_ci	RPA			= (1 << 19),
24062306a36Sopenharmony_ci	DRCVPA			= (1 << 18),
24162306a36Sopenharmony_ci	DRCVBC			= (1 << 17),
24262306a36Sopenharmony_ci	PROM			= (1 << 16),
24362306a36Sopenharmony_ci	/* VAL1 */
24462306a36Sopenharmony_ci	ASTRP_RCV		= (1 << 13),
24562306a36Sopenharmony_ci	RCV_DROP0	  	= (1 << 12),
24662306a36Sopenharmony_ci	EMBA			= (1 << 11),
24762306a36Sopenharmony_ci	DXMT2PD			= (1 << 10),
24862306a36Sopenharmony_ci	LTINTEN			= (1 << 9),
24962306a36Sopenharmony_ci	DXMTFCS			= (1 << 8),
25062306a36Sopenharmony_ci	/* VAL0 */
25162306a36Sopenharmony_ci	APAD_XMT		= (1 << 6),
25262306a36Sopenharmony_ci	DRTY			= (1 << 5),
25362306a36Sopenharmony_ci	INLOOP			= (1 << 4),
25462306a36Sopenharmony_ci	EXLOOP			= (1 << 3),
25562306a36Sopenharmony_ci	REX_RTRY		= (1 << 2),
25662306a36Sopenharmony_ci	REX_UFLO		= (1 << 1),
25762306a36Sopenharmony_ci	REX_LCOL		= (1 << 0),
25862306a36Sopenharmony_ci
25962306a36Sopenharmony_ci	CMD2_CLEAR 		= 0x3F7F3F7F,   /* Command style register */
26062306a36Sopenharmony_ci
26162306a36Sopenharmony_ci}CMD2_BITS;
26262306a36Sopenharmony_ci
26362306a36Sopenharmony_citypedef enum {
26462306a36Sopenharmony_ci
26562306a36Sopenharmony_ci	/* VAL3 */
26662306a36Sopenharmony_ci	ASF_INIT_DONE_ALIAS	= (1 << 29),
26762306a36Sopenharmony_ci	/* VAL2 */
26862306a36Sopenharmony_ci	JUMBO			= (1 << 21),
26962306a36Sopenharmony_ci	VSIZE			= (1 << 20),
27062306a36Sopenharmony_ci	VLONLY			= (1 << 19),
27162306a36Sopenharmony_ci	VL_TAG_DEL		= (1 << 18),
27262306a36Sopenharmony_ci	/* VAL1 */
27362306a36Sopenharmony_ci	EN_PMGR			= (1 << 14),
27462306a36Sopenharmony_ci	INTLEVEL		= (1 << 13),
27562306a36Sopenharmony_ci	FORCE_FULL_DUPLEX	= (1 << 12),
27662306a36Sopenharmony_ci	FORCE_LINK_STATUS	= (1 << 11),
27762306a36Sopenharmony_ci	APEP			= (1 << 10),
27862306a36Sopenharmony_ci	MPPLBA			= (1 << 9),
27962306a36Sopenharmony_ci	/* VAL0 */
28062306a36Sopenharmony_ci	RESET_PHY_PULSE		= (1 << 2),
28162306a36Sopenharmony_ci	RESET_PHY		= (1 << 1),
28262306a36Sopenharmony_ci	PHY_RST_POL		= (1 << 0),
28362306a36Sopenharmony_ci
28462306a36Sopenharmony_ci}CMD3_BITS;
28562306a36Sopenharmony_ci
28662306a36Sopenharmony_ci
28762306a36Sopenharmony_citypedef enum {
28862306a36Sopenharmony_ci
28962306a36Sopenharmony_ci	/* VAL0 */
29062306a36Sopenharmony_ci	PMAT_SAVE_MATCH		= (1 << 4),
29162306a36Sopenharmony_ci	PMAT_MODE		= (1 << 3),
29262306a36Sopenharmony_ci	MPEN_SW			= (1 << 1),
29362306a36Sopenharmony_ci	LCMODE_SW		= (1 << 0),
29462306a36Sopenharmony_ci
29562306a36Sopenharmony_ci	CMD7_CLEAR  		= 0x0000001B	/* Command style register */
29662306a36Sopenharmony_ci
29762306a36Sopenharmony_ci}CMD7_BITS;
29862306a36Sopenharmony_ci
29962306a36Sopenharmony_ci
30062306a36Sopenharmony_citypedef enum {
30162306a36Sopenharmony_ci
30262306a36Sopenharmony_ci	RESET_PHY_WIDTH		= (0xF << 16) | (0xF<< 20), /* 0x00FF0000 */
30362306a36Sopenharmony_ci	XMTSP_MASK		= (1 << 9) | (1 << 8),	/* 9:8 */
30462306a36Sopenharmony_ci	XMTSP_128		= (1 << 9),	/* 9 */
30562306a36Sopenharmony_ci	XMTSP_64		= (1 << 8),
30662306a36Sopenharmony_ci	CACHE_ALIGN		= (1 << 4),
30762306a36Sopenharmony_ci	BURST_LIMIT_MASK	= (0xF << 0 ),
30862306a36Sopenharmony_ci	CTRL1_DEFAULT		= 0x00010111,
30962306a36Sopenharmony_ci
31062306a36Sopenharmony_ci}CTRL1_BITS;
31162306a36Sopenharmony_ci
31262306a36Sopenharmony_citypedef enum {
31362306a36Sopenharmony_ci
31462306a36Sopenharmony_ci	FMDC_MASK		= (1 << 9)|(1 << 8),	/* 9:8 */
31562306a36Sopenharmony_ci	XPHYRST			= (1 << 7),
31662306a36Sopenharmony_ci	XPHYANE			= (1 << 6),
31762306a36Sopenharmony_ci	XPHYFD			= (1 << 5),
31862306a36Sopenharmony_ci	XPHYSP			= (1 << 4) | (1 << 3),	/* 4:3 */
31962306a36Sopenharmony_ci	APDW_MASK		= (1 <<	2) | (1 << 1) | (1 << 0), /* 2:0 */
32062306a36Sopenharmony_ci
32162306a36Sopenharmony_ci}CTRL2_BITS;
32262306a36Sopenharmony_ci
32362306a36Sopenharmony_ci/* XMT_RING_LIMIT		0x7C, 32bit register */
32462306a36Sopenharmony_citypedef enum {
32562306a36Sopenharmony_ci
32662306a36Sopenharmony_ci	XMT_RING2_LIMIT		= (0xFF << 16),	/* 23:16 */
32762306a36Sopenharmony_ci	XMT_RING1_LIMIT		= (0xFF << 8),	/* 15:8 */
32862306a36Sopenharmony_ci	XMT_RING0_LIMIT		= (0xFF << 0), 	/* 7:0 */
32962306a36Sopenharmony_ci
33062306a36Sopenharmony_ci}XMT_RING_LIMIT_BITS;
33162306a36Sopenharmony_ci
33262306a36Sopenharmony_citypedef enum {
33362306a36Sopenharmony_ci
33462306a36Sopenharmony_ci	AP_REG0_EN		= (1 << 15),
33562306a36Sopenharmony_ci	AP_REG0_ADDR_MASK	= (0xF << 8) |(1 << 12),/* 12:8 */
33662306a36Sopenharmony_ci	AP_PHY0_ADDR_MASK	= (0xF << 0) |(1 << 4),/* 4:0 */
33762306a36Sopenharmony_ci
33862306a36Sopenharmony_ci}AUTOPOLL0_BITS;
33962306a36Sopenharmony_ci
34062306a36Sopenharmony_ci/* AUTOPOLL1			0x8A, 16bit register */
34162306a36Sopenharmony_citypedef enum {
34262306a36Sopenharmony_ci
34362306a36Sopenharmony_ci	AP_REG1_EN		= (1 << 15),
34462306a36Sopenharmony_ci	AP_REG1_ADDR_MASK	= (0xF << 8) |(1 << 12),/* 12:8 */
34562306a36Sopenharmony_ci	AP_PRE_SUP1		= (1 << 6),
34662306a36Sopenharmony_ci	AP_PHY1_DFLT		= (1 << 5),
34762306a36Sopenharmony_ci	AP_PHY1_ADDR_MASK	= (0xF << 0) |(1 << 4),/* 4:0 */
34862306a36Sopenharmony_ci
34962306a36Sopenharmony_ci}AUTOPOLL1_BITS;
35062306a36Sopenharmony_ci
35162306a36Sopenharmony_ci
35262306a36Sopenharmony_citypedef enum {
35362306a36Sopenharmony_ci
35462306a36Sopenharmony_ci	AP_REG2_EN		= (1 << 15),
35562306a36Sopenharmony_ci	AP_REG2_ADDR_MASK	= (0xF << 8) |(1 << 12),/* 12:8 */
35662306a36Sopenharmony_ci	AP_PRE_SUP2		= (1 << 6),
35762306a36Sopenharmony_ci	AP_PHY2_DFLT		= (1 << 5),
35862306a36Sopenharmony_ci	AP_PHY2_ADDR_MASK	= (0xF << 0) |(1 << 4),/* 4:0 */
35962306a36Sopenharmony_ci
36062306a36Sopenharmony_ci}AUTOPOLL2_BITS;
36162306a36Sopenharmony_ci
36262306a36Sopenharmony_citypedef enum {
36362306a36Sopenharmony_ci
36462306a36Sopenharmony_ci	AP_REG3_EN		= (1 << 15),
36562306a36Sopenharmony_ci	AP_REG3_ADDR_MASK	= (0xF << 8) |(1 << 12),/* 12:8 */
36662306a36Sopenharmony_ci	AP_PRE_SUP3		= (1 << 6),
36762306a36Sopenharmony_ci	AP_PHY3_DFLT		= (1 << 5),
36862306a36Sopenharmony_ci	AP_PHY3_ADDR_MASK	= (0xF << 0) |(1 << 4),/* 4:0 */
36962306a36Sopenharmony_ci
37062306a36Sopenharmony_ci}AUTOPOLL3_BITS;
37162306a36Sopenharmony_ci
37262306a36Sopenharmony_ci
37362306a36Sopenharmony_citypedef enum {
37462306a36Sopenharmony_ci
37562306a36Sopenharmony_ci	AP_REG4_EN		= (1 << 15),
37662306a36Sopenharmony_ci	AP_REG4_ADDR_MASK	= (0xF << 8) |(1 << 12),/* 12:8 */
37762306a36Sopenharmony_ci	AP_PRE_SUP4		= (1 << 6),
37862306a36Sopenharmony_ci	AP_PHY4_DFLT		= (1 << 5),
37962306a36Sopenharmony_ci	AP_PHY4_ADDR_MASK	= (0xF << 0) |(1 << 4),/* 4:0 */
38062306a36Sopenharmony_ci
38162306a36Sopenharmony_ci}AUTOPOLL4_BITS;
38262306a36Sopenharmony_ci
38362306a36Sopenharmony_ci
38462306a36Sopenharmony_citypedef enum {
38562306a36Sopenharmony_ci
38662306a36Sopenharmony_ci	AP_REG5_EN		= (1 << 15),
38762306a36Sopenharmony_ci	AP_REG5_ADDR_MASK	= (0xF << 8) |(1 << 12),/* 12:8 */
38862306a36Sopenharmony_ci	AP_PRE_SUP5		= (1 << 6),
38962306a36Sopenharmony_ci	AP_PHY5_DFLT		= (1 << 5),
39062306a36Sopenharmony_ci	AP_PHY5_ADDR_MASK	= (0xF << 0) |(1 << 4),/* 4:0 */
39162306a36Sopenharmony_ci
39262306a36Sopenharmony_ci}AUTOPOLL5_BITS;
39362306a36Sopenharmony_ci
39462306a36Sopenharmony_ci
39562306a36Sopenharmony_ci
39662306a36Sopenharmony_ci
39762306a36Sopenharmony_ci/* AP_VALUE 			0x98, 32bit ragister */
39862306a36Sopenharmony_citypedef enum {
39962306a36Sopenharmony_ci
40062306a36Sopenharmony_ci	AP_VAL_ACTIVE		= (1 << 31),
40162306a36Sopenharmony_ci	AP_VAL_RD_CMD		= ( 1 << 29),
40262306a36Sopenharmony_ci	AP_ADDR			= (1 << 18)|(1 << 17)|(1 << 16), /* 18:16 */
40362306a36Sopenharmony_ci	AP_VAL			= (0xF << 0) | (0xF << 4) |( 0xF << 8) |
40462306a36Sopenharmony_ci				  (0xF << 12),	/* 15:0 */
40562306a36Sopenharmony_ci
40662306a36Sopenharmony_ci}AP_VALUE_BITS;
40762306a36Sopenharmony_ci
40862306a36Sopenharmony_citypedef enum {
40962306a36Sopenharmony_ci
41062306a36Sopenharmony_ci	DLY_INT_A_R3		= (1 << 31),
41162306a36Sopenharmony_ci	DLY_INT_A_R2		= (1 << 30),
41262306a36Sopenharmony_ci	DLY_INT_A_R1		= (1 << 29),
41362306a36Sopenharmony_ci	DLY_INT_A_R0		= (1 << 28),
41462306a36Sopenharmony_ci	DLY_INT_A_T3		= (1 << 27),
41562306a36Sopenharmony_ci	DLY_INT_A_T2		= (1 << 26),
41662306a36Sopenharmony_ci	DLY_INT_A_T1		= (1 << 25),
41762306a36Sopenharmony_ci	DLY_INT_A_T0		= ( 1 << 24),
41862306a36Sopenharmony_ci	EVENT_COUNT_A		= (0xF << 16) | (0x1 << 20),/* 20:16 */
41962306a36Sopenharmony_ci	MAX_DELAY_TIME_A	= (0xF << 0) | (0xF << 4) | (1 << 8)|
42062306a36Sopenharmony_ci				  (1 << 9) | (1 << 10),	/* 10:0 */
42162306a36Sopenharmony_ci
42262306a36Sopenharmony_ci}DLY_INT_A_BITS;
42362306a36Sopenharmony_ci
42462306a36Sopenharmony_citypedef enum {
42562306a36Sopenharmony_ci
42662306a36Sopenharmony_ci	DLY_INT_B_R3		= (1 << 31),
42762306a36Sopenharmony_ci	DLY_INT_B_R2		= (1 << 30),
42862306a36Sopenharmony_ci	DLY_INT_B_R1		= (1 << 29),
42962306a36Sopenharmony_ci	DLY_INT_B_R0		= (1 << 28),
43062306a36Sopenharmony_ci	DLY_INT_B_T3		= (1 << 27),
43162306a36Sopenharmony_ci	DLY_INT_B_T2		= (1 << 26),
43262306a36Sopenharmony_ci	DLY_INT_B_T1		= (1 << 25),
43362306a36Sopenharmony_ci	DLY_INT_B_T0		= ( 1 << 24),
43462306a36Sopenharmony_ci	EVENT_COUNT_B		= (0xF << 16) | (0x1 << 20),/* 20:16 */
43562306a36Sopenharmony_ci	MAX_DELAY_TIME_B	= (0xF << 0) | (0xF << 4) | (1 << 8)|
43662306a36Sopenharmony_ci				  (1 << 9) | (1 << 10),	/* 10:0 */
43762306a36Sopenharmony_ci}DLY_INT_B_BITS;
43862306a36Sopenharmony_ci
43962306a36Sopenharmony_ci
44062306a36Sopenharmony_ci/* FLOW_CONTROL 		0xC8, 32bit register */
44162306a36Sopenharmony_citypedef enum {
44262306a36Sopenharmony_ci
44362306a36Sopenharmony_ci	PAUSE_LEN_CHG		= (1 << 30),
44462306a36Sopenharmony_ci	FTPE			= (1 << 22),
44562306a36Sopenharmony_ci	FRPE			= (1 << 21),
44662306a36Sopenharmony_ci	NAPA			= (1 << 20),
44762306a36Sopenharmony_ci	NPA			= (1 << 19),
44862306a36Sopenharmony_ci	FIXP			= ( 1 << 18),
44962306a36Sopenharmony_ci	FCCMD			= ( 1 << 16),
45062306a36Sopenharmony_ci	PAUSE_LEN		= (0xF << 0) | (0xF << 4) |( 0xF << 8) |	 				  (0xF << 12),	/* 15:0 */
45162306a36Sopenharmony_ci
45262306a36Sopenharmony_ci}FLOW_CONTROL_BITS;
45362306a36Sopenharmony_ci
45462306a36Sopenharmony_ci/* PHY_ ACCESS			0xD0, 32bit register */
45562306a36Sopenharmony_citypedef enum {
45662306a36Sopenharmony_ci
45762306a36Sopenharmony_ci	PHY_CMD_ACTIVE		= (1 << 31),
45862306a36Sopenharmony_ci	PHY_WR_CMD		= (1 << 30),
45962306a36Sopenharmony_ci	PHY_RD_CMD		= (1 << 29),
46062306a36Sopenharmony_ci	PHY_RD_ERR		= (1 << 28),
46162306a36Sopenharmony_ci	PHY_PRE_SUP		= (1 << 27),
46262306a36Sopenharmony_ci	PHY_ADDR		= (1 << 21) | (1 << 22) | (1 << 23)|
46362306a36Sopenharmony_ci				  	(1 << 24) |(1 << 25),/* 25:21 */
46462306a36Sopenharmony_ci	PHY_REG_ADDR		= (1 << 16) | (1 << 17) | (1 << 18)|	 			  	   	  	(1 << 19) | (1 << 20),/* 20:16 */
46562306a36Sopenharmony_ci	PHY_DATA		= (0xF << 0)|(0xF << 4) |(0xF << 8)|
46662306a36Sopenharmony_ci					(0xF << 12),/* 15:0 */
46762306a36Sopenharmony_ci
46862306a36Sopenharmony_ci}PHY_ACCESS_BITS;
46962306a36Sopenharmony_ci
47062306a36Sopenharmony_ci
47162306a36Sopenharmony_ci/* PMAT0			0x190,	 32bit register */
47262306a36Sopenharmony_citypedef enum {
47362306a36Sopenharmony_ci	PMR_ACTIVE		= (1 << 31),
47462306a36Sopenharmony_ci	PMR_WR_CMD		= (1 << 30),
47562306a36Sopenharmony_ci	PMR_RD_CMD		= (1 << 29),
47662306a36Sopenharmony_ci	PMR_BANK		= (1 <<28),
47762306a36Sopenharmony_ci	PMR_ADDR		= (0xF << 16)|(1 << 20)|(1 << 21)|
47862306a36Sopenharmony_ci				  	(1 << 22),/* 22:16 */
47962306a36Sopenharmony_ci	PMR_B4			= (0xF << 0) | (0xF << 4),/* 15:0 */
48062306a36Sopenharmony_ci}PMAT0_BITS;
48162306a36Sopenharmony_ci
48262306a36Sopenharmony_ci
48362306a36Sopenharmony_ci/* PMAT1			0x194,	 32bit register */
48462306a36Sopenharmony_citypedef enum {
48562306a36Sopenharmony_ci	PMR_B3			= (0xF << 24) | (0xF <<28),/* 31:24 */
48662306a36Sopenharmony_ci	PMR_B2			= (0xF << 16) |(0xF << 20),/* 23:16 */
48762306a36Sopenharmony_ci	PMR_B1			= (0xF << 8) | (0xF <<12), /* 15:8 */
48862306a36Sopenharmony_ci	PMR_B0			= (0xF << 0)|(0xF << 4),/* 7:0 */
48962306a36Sopenharmony_ci}PMAT1_BITS;
49062306a36Sopenharmony_ci
49162306a36Sopenharmony_ci/************************************************************************/
49262306a36Sopenharmony_ci/*                                                                      */
49362306a36Sopenharmony_ci/*                      MIB counter definitions                         */
49462306a36Sopenharmony_ci/*                                                                      */
49562306a36Sopenharmony_ci/************************************************************************/
49662306a36Sopenharmony_ci
49762306a36Sopenharmony_ci#define rcv_miss_pkts				0x00
49862306a36Sopenharmony_ci#define rcv_octets				0x01
49962306a36Sopenharmony_ci#define rcv_broadcast_pkts			0x02
50062306a36Sopenharmony_ci#define rcv_multicast_pkts			0x03
50162306a36Sopenharmony_ci#define rcv_undersize_pkts			0x04
50262306a36Sopenharmony_ci#define rcv_oversize_pkts			0x05
50362306a36Sopenharmony_ci#define rcv_fragments				0x06
50462306a36Sopenharmony_ci#define rcv_jabbers				0x07
50562306a36Sopenharmony_ci#define rcv_unicast_pkts			0x08
50662306a36Sopenharmony_ci#define rcv_alignment_errors			0x09
50762306a36Sopenharmony_ci#define rcv_fcs_errors				0x0A
50862306a36Sopenharmony_ci#define rcv_good_octets				0x0B
50962306a36Sopenharmony_ci#define rcv_mac_ctrl				0x0C
51062306a36Sopenharmony_ci#define rcv_flow_ctrl				0x0D
51162306a36Sopenharmony_ci#define rcv_pkts_64_octets			0x0E
51262306a36Sopenharmony_ci#define rcv_pkts_65to127_octets			0x0F
51362306a36Sopenharmony_ci#define rcv_pkts_128to255_octets		0x10
51462306a36Sopenharmony_ci#define rcv_pkts_256to511_octets		0x11
51562306a36Sopenharmony_ci#define rcv_pkts_512to1023_octets		0x12
51662306a36Sopenharmony_ci#define rcv_pkts_1024to1518_octets		0x13
51762306a36Sopenharmony_ci#define rcv_unsupported_opcode			0x14
51862306a36Sopenharmony_ci#define rcv_symbol_errors			0x15
51962306a36Sopenharmony_ci#define rcv_drop_pkts_ring1			0x16
52062306a36Sopenharmony_ci#define rcv_drop_pkts_ring2			0x17
52162306a36Sopenharmony_ci#define rcv_drop_pkts_ring3			0x18
52262306a36Sopenharmony_ci#define rcv_drop_pkts_ring4			0x19
52362306a36Sopenharmony_ci#define rcv_jumbo_pkts				0x1A
52462306a36Sopenharmony_ci
52562306a36Sopenharmony_ci#define xmt_underrun_pkts			0x20
52662306a36Sopenharmony_ci#define xmt_octets				0x21
52762306a36Sopenharmony_ci#define xmt_packets				0x22
52862306a36Sopenharmony_ci#define xmt_broadcast_pkts			0x23
52962306a36Sopenharmony_ci#define xmt_multicast_pkts			0x24
53062306a36Sopenharmony_ci#define xmt_collisions				0x25
53162306a36Sopenharmony_ci#define xmt_unicast_pkts			0x26
53262306a36Sopenharmony_ci#define xmt_one_collision			0x27
53362306a36Sopenharmony_ci#define xmt_multiple_collision			0x28
53462306a36Sopenharmony_ci#define xmt_deferred_transmit			0x29
53562306a36Sopenharmony_ci#define xmt_late_collision			0x2A
53662306a36Sopenharmony_ci#define xmt_excessive_defer			0x2B
53762306a36Sopenharmony_ci#define xmt_loss_carrier			0x2C
53862306a36Sopenharmony_ci#define xmt_excessive_collision			0x2D
53962306a36Sopenharmony_ci#define xmt_back_pressure			0x2E
54062306a36Sopenharmony_ci#define xmt_flow_ctrl				0x2F
54162306a36Sopenharmony_ci#define xmt_pkts_64_octets			0x30
54262306a36Sopenharmony_ci#define xmt_pkts_65to127_octets			0x31
54362306a36Sopenharmony_ci#define xmt_pkts_128to255_octets		0x32
54462306a36Sopenharmony_ci#define xmt_pkts_256to511_octets		0x33
54562306a36Sopenharmony_ci#define xmt_pkts_512to1023_octets		0x34
54662306a36Sopenharmony_ci#define xmt_pkts_1024to1518_octet		0x35
54762306a36Sopenharmony_ci#define xmt_oversize_pkts			0x36
54862306a36Sopenharmony_ci#define xmt_jumbo_pkts				0x37
54962306a36Sopenharmony_ci
55062306a36Sopenharmony_ci
55162306a36Sopenharmony_ci/* Driver definitions */
55262306a36Sopenharmony_ci
55362306a36Sopenharmony_ci#define	 PCI_VENDOR_ID_AMD		0x1022
55462306a36Sopenharmony_ci#define  PCI_DEVICE_ID_AMD8111E_7462	0x7462
55562306a36Sopenharmony_ci
55662306a36Sopenharmony_ci#define MAX_UNITS			8 /* Maximum number of devices possible */
55762306a36Sopenharmony_ci
55862306a36Sopenharmony_ci#define NUM_TX_BUFFERS			32 /* Number of transmit buffers */
55962306a36Sopenharmony_ci#define NUM_RX_BUFFERS			32 /* Number of receive buffers */
56062306a36Sopenharmony_ci
56162306a36Sopenharmony_ci#define TX_BUFF_MOD_MASK         	31 /* (NUM_TX_BUFFERS -1) */
56262306a36Sopenharmony_ci#define RX_BUFF_MOD_MASK         	31 /* (NUM_RX_BUFFERS -1) */
56362306a36Sopenharmony_ci
56462306a36Sopenharmony_ci#define NUM_TX_RING_DR			32
56562306a36Sopenharmony_ci#define NUM_RX_RING_DR			32
56662306a36Sopenharmony_ci
56762306a36Sopenharmony_ci#define TX_RING_DR_MOD_MASK         	31 /* (NUM_TX_RING_DR -1) */
56862306a36Sopenharmony_ci#define RX_RING_DR_MOD_MASK         	31 /* (NUM_RX_RING_DR -1) */
56962306a36Sopenharmony_ci
57062306a36Sopenharmony_ci#define MAX_FILTER_SIZE			64 /* Maximum multicast address */
57162306a36Sopenharmony_ci#define AMD8111E_MIN_MTU	 	60
57262306a36Sopenharmony_ci#define AMD8111E_MAX_MTU		9000
57362306a36Sopenharmony_ci
57462306a36Sopenharmony_ci#define PKT_BUFF_SZ			1536
57562306a36Sopenharmony_ci#define MIN_PKT_LEN			60
57662306a36Sopenharmony_ci
57762306a36Sopenharmony_ci#define  AMD8111E_TX_TIMEOUT		(3 * HZ)/* 3 sec */
57862306a36Sopenharmony_ci#define SOFT_TIMER_FREQ 		0xBEBC  /* 0.5 sec */
57962306a36Sopenharmony_ci#define DELAY_TIMER_CONV		50    /* msec to 10 usec conversion.
58062306a36Sopenharmony_ci						 Only 500 usec resolution */
58162306a36Sopenharmony_ci#define OPTION_VLAN_ENABLE		0x0001
58262306a36Sopenharmony_ci#define OPTION_JUMBO_ENABLE		0x0002
58362306a36Sopenharmony_ci#define OPTION_MULTICAST_ENABLE		0x0004
58462306a36Sopenharmony_ci#define OPTION_WOL_ENABLE		0x0008
58562306a36Sopenharmony_ci#define OPTION_WAKE_MAGIC_ENABLE	0x0010
58662306a36Sopenharmony_ci#define OPTION_WAKE_PHY_ENABLE		0x0020
58762306a36Sopenharmony_ci#define OPTION_INTR_COAL_ENABLE		0x0040
58862306a36Sopenharmony_ci#define OPTION_DYN_IPG_ENABLE	        0x0080
58962306a36Sopenharmony_ci
59062306a36Sopenharmony_ci#define PHY_REG_ADDR_MASK		0x1f
59162306a36Sopenharmony_ci
59262306a36Sopenharmony_ci/* ipg parameters */
59362306a36Sopenharmony_ci#define DEFAULT_IPG			0x60
59462306a36Sopenharmony_ci#define IFS1_DELTA			36
59562306a36Sopenharmony_ci#define	IPG_CONVERGE_JIFFIES (HZ/2)
59662306a36Sopenharmony_ci#define	IPG_STABLE_TIME	5
59762306a36Sopenharmony_ci#define	MIN_IPG	96
59862306a36Sopenharmony_ci#define	MAX_IPG	255
59962306a36Sopenharmony_ci#define IPG_STEP	16
60062306a36Sopenharmony_ci#define CSTATE  1
60162306a36Sopenharmony_ci#define SSTATE  2
60262306a36Sopenharmony_ci
60362306a36Sopenharmony_ci/* Assume controller gets data 10 times the maximum processing time */
60462306a36Sopenharmony_ci#define  REPEAT_CNT			10
60562306a36Sopenharmony_ci
60662306a36Sopenharmony_ci/* amd8111e descriptor flag definitions */
60762306a36Sopenharmony_citypedef enum {
60862306a36Sopenharmony_ci
60962306a36Sopenharmony_ci	OWN_BIT		=	(1 << 15),
61062306a36Sopenharmony_ci	ADD_FCS_BIT	=	(1 << 13),
61162306a36Sopenharmony_ci	LTINT_BIT	=	(1 << 12),
61262306a36Sopenharmony_ci	STP_BIT		=	(1 << 9),
61362306a36Sopenharmony_ci	ENP_BIT		=	(1 << 8),
61462306a36Sopenharmony_ci	KILL_BIT	= 	(1 << 6),
61562306a36Sopenharmony_ci	TCC_VLAN_INSERT	=	(1 << 1),
61662306a36Sopenharmony_ci	TCC_VLAN_REPLACE =	(1 << 1) |( 1<< 0),
61762306a36Sopenharmony_ci
61862306a36Sopenharmony_ci}TX_FLAG_BITS;
61962306a36Sopenharmony_ci
62062306a36Sopenharmony_citypedef enum {
62162306a36Sopenharmony_ci	ERR_BIT 	=	(1 << 14),
62262306a36Sopenharmony_ci	FRAM_BIT	=  	(1 << 13),
62362306a36Sopenharmony_ci	OFLO_BIT	=       (1 << 12),
62462306a36Sopenharmony_ci	CRC_BIT		=	(1 << 11),
62562306a36Sopenharmony_ci	PAM_BIT		=	(1 << 6),
62662306a36Sopenharmony_ci	LAFM_BIT	= 	(1 << 5),
62762306a36Sopenharmony_ci	BAM_BIT		=	(1 << 4),
62862306a36Sopenharmony_ci	TT_VLAN_TAGGED	= 	(1 << 3) |(1 << 2),/* 0x000 */
62962306a36Sopenharmony_ci	TT_PRTY_TAGGED	=	(1 << 3),/* 0x0008 */
63062306a36Sopenharmony_ci
63162306a36Sopenharmony_ci}RX_FLAG_BITS;
63262306a36Sopenharmony_ci
63362306a36Sopenharmony_ci#define RESET_RX_FLAGS		0x0000
63462306a36Sopenharmony_ci#define TT_MASK			0x000c
63562306a36Sopenharmony_ci#define TCC_MASK		0x0003
63662306a36Sopenharmony_ci
63762306a36Sopenharmony_ci/* driver ioctl parameters */
63862306a36Sopenharmony_ci#define AMD8111E_REG_DUMP_LEN	 13*sizeof(u32)
63962306a36Sopenharmony_ci
64062306a36Sopenharmony_ci/* amd8111e descriptor format */
64162306a36Sopenharmony_ci
64262306a36Sopenharmony_cistruct amd8111e_tx_dr{
64362306a36Sopenharmony_ci
64462306a36Sopenharmony_ci	__le16 buff_count; /* Size of the buffer pointed by this descriptor */
64562306a36Sopenharmony_ci
64662306a36Sopenharmony_ci	__le16 tx_flags;
64762306a36Sopenharmony_ci
64862306a36Sopenharmony_ci	__le16 tag_ctrl_info;
64962306a36Sopenharmony_ci
65062306a36Sopenharmony_ci	__le16 tag_ctrl_cmd;
65162306a36Sopenharmony_ci
65262306a36Sopenharmony_ci	__le32 buff_phy_addr;
65362306a36Sopenharmony_ci
65462306a36Sopenharmony_ci	__le32 reserved;
65562306a36Sopenharmony_ci};
65662306a36Sopenharmony_ci
65762306a36Sopenharmony_cistruct amd8111e_rx_dr{
65862306a36Sopenharmony_ci
65962306a36Sopenharmony_ci	__le32 reserved;
66062306a36Sopenharmony_ci
66162306a36Sopenharmony_ci	__le16 msg_count; /* Received message len */
66262306a36Sopenharmony_ci
66362306a36Sopenharmony_ci	__le16 tag_ctrl_info;
66462306a36Sopenharmony_ci
66562306a36Sopenharmony_ci	__le16 buff_count;  /* Len of the buffer pointed by descriptor. */
66662306a36Sopenharmony_ci
66762306a36Sopenharmony_ci	__le16 rx_flags;
66862306a36Sopenharmony_ci
66962306a36Sopenharmony_ci	__le32 buff_phy_addr;
67062306a36Sopenharmony_ci
67162306a36Sopenharmony_ci};
67262306a36Sopenharmony_cistruct amd8111e_link_config{
67362306a36Sopenharmony_ci
67462306a36Sopenharmony_ci#define SPEED_INVALID		0xffff
67562306a36Sopenharmony_ci#define DUPLEX_INVALID		0xff
67662306a36Sopenharmony_ci#define AUTONEG_INVALID		0xff
67762306a36Sopenharmony_ci
67862306a36Sopenharmony_ci	unsigned long			orig_phy_option;
67962306a36Sopenharmony_ci	u16				speed;
68062306a36Sopenharmony_ci	u8				duplex;
68162306a36Sopenharmony_ci	u8				autoneg;
68262306a36Sopenharmony_ci	u8				reserved;  /* 32bit alignment */
68362306a36Sopenharmony_ci};
68462306a36Sopenharmony_ci
68562306a36Sopenharmony_cienum coal_type{
68662306a36Sopenharmony_ci
68762306a36Sopenharmony_ci	NO_COALESCE,
68862306a36Sopenharmony_ci	LOW_COALESCE,
68962306a36Sopenharmony_ci	MEDIUM_COALESCE,
69062306a36Sopenharmony_ci	HIGH_COALESCE,
69162306a36Sopenharmony_ci
69262306a36Sopenharmony_ci};
69362306a36Sopenharmony_ci
69462306a36Sopenharmony_cienum coal_mode{
69562306a36Sopenharmony_ci	RX_INTR_COAL,
69662306a36Sopenharmony_ci	TX_INTR_COAL,
69762306a36Sopenharmony_ci	DISABLE_COAL,
69862306a36Sopenharmony_ci	ENABLE_COAL,
69962306a36Sopenharmony_ci
70062306a36Sopenharmony_ci};
70162306a36Sopenharmony_ci#define MAX_TIMEOUT	40
70262306a36Sopenharmony_ci#define MAX_EVENT_COUNT 31
70362306a36Sopenharmony_cistruct amd8111e_coalesce_conf{
70462306a36Sopenharmony_ci
70562306a36Sopenharmony_ci	unsigned int rx_timeout;
70662306a36Sopenharmony_ci	unsigned int rx_event_count;
70762306a36Sopenharmony_ci	unsigned long rx_packets;
70862306a36Sopenharmony_ci	unsigned long rx_prev_packets;
70962306a36Sopenharmony_ci	unsigned long rx_bytes;
71062306a36Sopenharmony_ci	unsigned long rx_prev_bytes;
71162306a36Sopenharmony_ci	unsigned int rx_coal_type;
71262306a36Sopenharmony_ci
71362306a36Sopenharmony_ci	unsigned int tx_timeout;
71462306a36Sopenharmony_ci	unsigned int tx_event_count;
71562306a36Sopenharmony_ci	unsigned long tx_packets;
71662306a36Sopenharmony_ci	unsigned long tx_prev_packets;
71762306a36Sopenharmony_ci	unsigned long tx_bytes;
71862306a36Sopenharmony_ci	unsigned long tx_prev_bytes;
71962306a36Sopenharmony_ci	unsigned int tx_coal_type;
72062306a36Sopenharmony_ci
72162306a36Sopenharmony_ci};
72262306a36Sopenharmony_cistruct ipg_info{
72362306a36Sopenharmony_ci
72462306a36Sopenharmony_ci	unsigned int ipg_state;
72562306a36Sopenharmony_ci	unsigned int ipg;
72662306a36Sopenharmony_ci	unsigned int current_ipg;
72762306a36Sopenharmony_ci	unsigned int col_cnt;
72862306a36Sopenharmony_ci	unsigned int diff_col_cnt;
72962306a36Sopenharmony_ci	unsigned int timer_tick;
73062306a36Sopenharmony_ci	unsigned int prev_ipg;
73162306a36Sopenharmony_ci	struct timer_list ipg_timer;
73262306a36Sopenharmony_ci};
73362306a36Sopenharmony_ci
73462306a36Sopenharmony_cistruct amd8111e_priv{
73562306a36Sopenharmony_ci
73662306a36Sopenharmony_ci	struct amd8111e_tx_dr*  tx_ring;
73762306a36Sopenharmony_ci	struct amd8111e_rx_dr* rx_ring;
73862306a36Sopenharmony_ci	dma_addr_t tx_ring_dma_addr;	/* tx descriptor ring base address */
73962306a36Sopenharmony_ci	dma_addr_t rx_ring_dma_addr;	/* rx descriptor ring base address */
74062306a36Sopenharmony_ci	const char *name;
74162306a36Sopenharmony_ci	struct pci_dev *pci_dev;	/* Ptr to the associated pci_dev */
74262306a36Sopenharmony_ci	struct net_device* amd8111e_net_dev; 	/* ptr to associated net_device */
74362306a36Sopenharmony_ci	/* Transmit and receive skbs */
74462306a36Sopenharmony_ci	struct sk_buff *tx_skbuff[NUM_TX_BUFFERS];
74562306a36Sopenharmony_ci	struct sk_buff *rx_skbuff[NUM_RX_BUFFERS];
74662306a36Sopenharmony_ci	/* Transmit and receive dma mapped addr */
74762306a36Sopenharmony_ci	dma_addr_t tx_dma_addr[NUM_TX_BUFFERS];
74862306a36Sopenharmony_ci	dma_addr_t rx_dma_addr[NUM_RX_BUFFERS];
74962306a36Sopenharmony_ci	/* Reg memory mapped address */
75062306a36Sopenharmony_ci	void __iomem *mmio;
75162306a36Sopenharmony_ci
75262306a36Sopenharmony_ci	struct napi_struct napi;
75362306a36Sopenharmony_ci
75462306a36Sopenharmony_ci	spinlock_t lock;	/* Guard lock */
75562306a36Sopenharmony_ci	unsigned long rx_idx, tx_idx;	/* The next free ring entry */
75662306a36Sopenharmony_ci	unsigned long tx_complete_idx;
75762306a36Sopenharmony_ci	unsigned long tx_ring_complete_idx;
75862306a36Sopenharmony_ci	unsigned long tx_ring_idx;
75962306a36Sopenharmony_ci	unsigned int rx_buff_len;	/* Buffer length of rx buffers */
76062306a36Sopenharmony_ci	int options;		/* Options enabled/disabled for the device */
76162306a36Sopenharmony_ci
76262306a36Sopenharmony_ci	unsigned long ext_phy_option;
76362306a36Sopenharmony_ci	int ext_phy_addr;
76462306a36Sopenharmony_ci	u32 ext_phy_id;
76562306a36Sopenharmony_ci
76662306a36Sopenharmony_ci	struct amd8111e_link_config link_config;
76762306a36Sopenharmony_ci	int pm_cap;
76862306a36Sopenharmony_ci
76962306a36Sopenharmony_ci	struct net_device *next;
77062306a36Sopenharmony_ci	int mii;
77162306a36Sopenharmony_ci	struct mii_if_info mii_if;
77262306a36Sopenharmony_ci	char opened;
77362306a36Sopenharmony_ci	unsigned int drv_rx_errors;
77462306a36Sopenharmony_ci	struct amd8111e_coalesce_conf coal_conf;
77562306a36Sopenharmony_ci
77662306a36Sopenharmony_ci	struct ipg_info  ipg_data;
77762306a36Sopenharmony_ci
77862306a36Sopenharmony_ci};
77962306a36Sopenharmony_ci
78062306a36Sopenharmony_ci/* kernel provided writeq does not write 64 bits into the amd8111e device register instead writes only higher 32bits data into lower 32bits of the register.
78162306a36Sopenharmony_ciBUG? */
78262306a36Sopenharmony_ci#define  amd8111e_writeq(_UlData,_memMap)   \
78362306a36Sopenharmony_ci		writel(*(u32*)(&_UlData), _memMap);	\
78462306a36Sopenharmony_ci		writel(*(u32*)((u8*)(&_UlData)+4), _memMap+4)
78562306a36Sopenharmony_ci
78662306a36Sopenharmony_ci/* maps the external speed options to internal value */
78762306a36Sopenharmony_citypedef enum {
78862306a36Sopenharmony_ci	SPEED_AUTONEG,
78962306a36Sopenharmony_ci	SPEED10_HALF,
79062306a36Sopenharmony_ci	SPEED10_FULL,
79162306a36Sopenharmony_ci	SPEED100_HALF,
79262306a36Sopenharmony_ci	SPEED100_FULL,
79362306a36Sopenharmony_ci}EXT_PHY_OPTION;
79462306a36Sopenharmony_ci
79562306a36Sopenharmony_cistatic int card_idx;
79662306a36Sopenharmony_cistatic int speed_duplex[MAX_UNITS] = { 0, };
79762306a36Sopenharmony_cistatic bool coalesce[MAX_UNITS] = { [ 0 ... MAX_UNITS-1] = true };
79862306a36Sopenharmony_cistatic bool dynamic_ipg[MAX_UNITS] = { [ 0 ... MAX_UNITS-1] = false };
79962306a36Sopenharmony_cistatic unsigned int chip_version;
80062306a36Sopenharmony_ci
80162306a36Sopenharmony_ci#endif /* _AMD8111E_H */
80262306a36Sopenharmony_ci
803