Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * Advanced  Micro Devices Inc. AMD8111E Linux Network Driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  * Copyright (C) 2003 Advanced Micro Devices
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) Module Name:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9)     amd8111e.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) Abstract:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13)  	 AMD8111 based 10/100 Ethernet Controller driver definitions.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) Environment:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 	Kernel Mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) Revision History:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20)  	3.0.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 	   Initial Revision.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 	3.0.1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) #ifndef _AMD811E_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) #define _AMD811E_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) /* Command style register access
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) Registers 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.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) eg., 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.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) /*  Offset for Memory Mapped Registers. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) /* 32 bit registers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) #define  ASF_STAT		0x00	/* ASF status register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) #define CHIPID			0x04	/* Chip ID register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) #define	MIB_DATA		0x10	/* MIB data register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) #define MIB_ADDR		0x14	/* MIB address register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) #define STAT0			0x30	/* Status0 register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) #define INT0			0x38	/* Interrupt0 register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) #define INTEN0			0x40	/* Interrupt0  enable register*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) #define CMD0			0x48	/* Command0 register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) #define CMD2			0x50	/* Command2 register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) #define CMD3			0x54	/* Command3 resiter */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) #define CMD7			0x64	/* Command7 register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) #define CTRL1 			0x6C	/* Control1 register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) #define CTRL2 			0x70	/* Control2 register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) #define XMT_RING_LIMIT		0x7C	/* Transmit ring limit register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) #define AUTOPOLL0		0x88	/* Auto-poll0 register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) #define AUTOPOLL1		0x8A	/* Auto-poll1 register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) #define AUTOPOLL2		0x8C	/* Auto-poll2 register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) #define AUTOPOLL3		0x8E	/* Auto-poll3 register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) #define AUTOPOLL4		0x90	/* Auto-poll4 register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) #define	AUTOPOLL5		0x92	/* Auto-poll5 register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) #define AP_VALUE		0x98	/* Auto-poll value register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) #define DLY_INT_A		0xA8	/* Group A delayed interrupt register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) #define DLY_INT_B		0xAC	/* Group B delayed interrupt register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) #define FLOW_CONTROL		0xC8	/* Flow control register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) #define PHY_ACCESS		0xD0	/* PHY access register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) #define STVAL			0xD8	/* Software timer value register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) #define XMT_RING_BASE_ADDR0	0x100	/* Transmit ring0 base addr register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) #define XMT_RING_BASE_ADDR1	0x108	/* Transmit ring1 base addr register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) #define XMT_RING_BASE_ADDR2	0x110	/* Transmit ring2 base addr register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) #define XMT_RING_BASE_ADDR3	0x118	/* Transmit ring2 base addr register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) #define RCV_RING_BASE_ADDR0	0x120	/* Transmit ring0 base addr register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) #define PMAT0			0x190	/* OnNow pattern register0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) #define PMAT1			0x194	/* OnNow pattern register1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) /* 16bit registers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) #define XMT_RING_LEN0		0x140	/* Transmit Ring0 length register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) #define XMT_RING_LEN1		0x144	/* Transmit Ring1 length register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) #define XMT_RING_LEN2		0x148 	/* Transmit Ring2 length register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) #define XMT_RING_LEN3		0x14C	/* Transmit Ring3 length register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) #define RCV_RING_LEN0		0x150	/* Receive Ring0 length register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) #define SRAM_SIZE		0x178	/* SRAM size register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) #define SRAM_BOUNDARY		0x17A	/* SRAM boundary register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) /* 48bit register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) #define PADR			0x160	/* Physical address register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) #define IFS1			0x18C	/* Inter-frame spacing Part1 register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) #define IFS			0x18D	/* Inter-frame spacing register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define IPG			0x18E	/* Inter-frame gap register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) /* 64bit register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #define LADRF			0x168	/* Logical address filter register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) /* Register Bit Definitions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	ASF_INIT_DONE		= (1 << 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	ASF_INIT_PRESENT	= (1 << 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) }STAT_ASF_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	MIB_CMD_ACTIVE		= (1 << 15 ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 	MIB_RD_CMD		= (1 << 13 ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 	MIB_CLEAR		= (1 << 12 ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	MIB_ADDRESS		= (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3)|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 					(1 << 4) | (1 << 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) }MIB_ADDR_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	PMAT_DET		= (1 << 12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 	MP_DET		        = (1 << 11),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 	LC_DET			= (1 << 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 	SPEED_MASK		= (1 << 9)|(1 << 8)|(1 << 7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 	FULL_DPLX		= (1 << 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 	LINK_STATS		= (1 << 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 	AUTONEG_COMPLETE	= (1 << 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 	MIIPD			= (1 << 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 	RX_SUSPENDED		= (1 << 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 	TX_SUSPENDED		= (1 << 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 	RUNNING			= (1 << 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) }STAT0_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) #define PHY_SPEED_10		0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) #define PHY_SPEED_100		0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) /* INT0				0x38, 32bit register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 	INTR			= (1 << 31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 	PCSINT			= (1 << 28),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 	LCINT			= (1 << 27),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 	APINT5			= (1 << 26),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 	APINT4			= (1 << 25),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 	APINT3			= (1 << 24),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 	TINT_SUM		= (1 << 23),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 	APINT2			= (1 << 22),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 	APINT1			= (1 << 21),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 	APINT0			= (1 << 20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 	MIIPDTINT		= (1 << 19),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 	MCCINT			= (1 << 17),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 	MREINT			= (1 << 16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 	RINT_SUM		= (1 << 15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 	SPNDINT			= (1 << 14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 	MPINT			= (1 << 13),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 	SINT			= (1 << 12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 	TINT3			= (1 << 11),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 	TINT2			= (1 << 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 	TINT1			= (1 << 9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 	TINT0			= (1 << 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 	UINT			= (1 << 7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 	STINT			= (1 << 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 	RINT0			= (1 << 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) }INT0_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 	VAL3			= (1 << 31),   /* VAL bit for byte 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 	VAL2			= (1 << 23),   /* VAL bit for byte 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 	VAL1			= (1 << 15),   /* VAL bit for byte 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 	VAL0			= (1 << 7),    /* VAL bit for byte 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) }VAL_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 	/* VAL3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 	LCINTEN			= (1 << 27),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 	APINT5EN		= (1 << 26),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 	APINT4EN		= (1 << 25),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 	APINT3EN		= (1 << 24),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 	/* VAL2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 	APINT2EN		= (1 << 22),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 	APINT1EN		= (1 << 21),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 	APINT0EN		= (1 << 20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 	MIIPDTINTEN		= (1 << 19),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 	MCCIINTEN		= (1 << 18),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 	MCCINTEN		= (1 << 17),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 	MREINTEN		= (1 << 16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 	/* VAL1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 	SPNDINTEN		= (1 << 14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 	MPINTEN			= (1 << 13),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 	TINTEN3			= (1 << 11),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 	SINTEN			= (1 << 12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 	TINTEN2			= (1 << 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 	TINTEN1			= (1 << 9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 	TINTEN0			= (1 << 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 	/* VAL0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 	STINTEN			= (1 << 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 	RINTEN0			= (1 << 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 	INTEN0_CLEAR 		= 0x1F7F7F1F, /* Command style register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) }INTEN0_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 	/* VAL2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 	RDMD0			= (1 << 16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 	/* VAL1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 	TDMD3			= (1 << 11),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 	TDMD2			= (1 << 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 	TDMD1			= (1 << 9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 	TDMD0			= (1 << 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 	/* VAL0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 	UINTCMD			= (1 << 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 	RX_FAST_SPND		= (1 << 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 	TX_FAST_SPND		= (1 << 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 	RX_SPND			= (1 << 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 	TX_SPND			= (1 << 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 	INTREN			= (1 << 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 	RUN			= (1 << 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 	CMD0_CLEAR 		= 0x000F0F7F,   /* Command style register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) }CMD0_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) 	/* VAL3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) 	CONDUIT_MODE		= (1 << 29),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) 	/* VAL2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 	RPA			= (1 << 19),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) 	DRCVPA			= (1 << 18),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 	DRCVBC			= (1 << 17),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) 	PROM			= (1 << 16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) 	/* VAL1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 	ASTRP_RCV		= (1 << 13),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 	RCV_DROP0	  	= (1 << 12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) 	EMBA			= (1 << 11),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 	DXMT2PD			= (1 << 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) 	LTINTEN			= (1 << 9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) 	DXMTFCS			= (1 << 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) 	/* VAL0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) 	APAD_XMT		= (1 << 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) 	DRTY			= (1 << 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 	INLOOP			= (1 << 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) 	EXLOOP			= (1 << 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) 	REX_RTRY		= (1 << 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) 	REX_UFLO		= (1 << 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 	REX_LCOL		= (1 << 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 	CMD2_CLEAR 		= 0x3F7F3F7F,   /* Command style register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) }CMD2_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 	/* VAL3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) 	ASF_INIT_DONE_ALIAS	= (1 << 29),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 	/* VAL2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) 	JUMBO			= (1 << 21),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 	VSIZE			= (1 << 20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) 	VLONLY			= (1 << 19),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 	VL_TAG_DEL		= (1 << 18),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) 	/* VAL1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 	EN_PMGR			= (1 << 14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) 	INTLEVEL		= (1 << 13),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 	FORCE_FULL_DUPLEX	= (1 << 12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) 	FORCE_LINK_STATUS	= (1 << 11),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 	APEP			= (1 << 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) 	MPPLBA			= (1 << 9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 	/* VAL0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) 	RESET_PHY_PULSE		= (1 << 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 	RESET_PHY		= (1 << 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) 	PHY_RST_POL		= (1 << 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) }CMD3_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) 	/* VAL0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) 	PMAT_SAVE_MATCH		= (1 << 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) 	PMAT_MODE		= (1 << 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) 	MPEN_SW			= (1 << 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) 	LCMODE_SW		= (1 << 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 	CMD7_CLEAR  		= 0x0000001B	/* Command style register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) }CMD7_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) 	RESET_PHY_WIDTH		= (0xF << 16) | (0xF<< 20), /* 0x00FF0000 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) 	XMTSP_MASK		= (1 << 9) | (1 << 8),	/* 9:8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) 	XMTSP_128		= (1 << 9),	/* 9 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) 	XMTSP_64		= (1 << 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) 	CACHE_ALIGN		= (1 << 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) 	BURST_LIMIT_MASK	= (0xF << 0 ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) 	CTRL1_DEFAULT		= 0x00010111,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) }CTRL1_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) 	FMDC_MASK		= (1 << 9)|(1 << 8),	/* 9:8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) 	XPHYRST			= (1 << 7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) 	XPHYANE			= (1 << 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) 	XPHYFD			= (1 << 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) 	XPHYSP			= (1 << 4) | (1 << 3),	/* 4:3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) 	APDW_MASK		= (1 <<	2) | (1 << 1) | (1 << 0), /* 2:0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) }CTRL2_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) /* XMT_RING_LIMIT		0x7C, 32bit register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) 	XMT_RING2_LIMIT		= (0xFF << 16),	/* 23:16 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) 	XMT_RING1_LIMIT		= (0xFF << 8),	/* 15:8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) 	XMT_RING0_LIMIT		= (0xFF << 0), 	/* 7:0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) }XMT_RING_LIMIT_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) 	AP_REG0_EN		= (1 << 15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) 	AP_REG0_ADDR_MASK	= (0xF << 8) |(1 << 12),/* 12:8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) 	AP_PHY0_ADDR_MASK	= (0xF << 0) |(1 << 4),/* 4:0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) }AUTOPOLL0_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) /* AUTOPOLL1			0x8A, 16bit register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) 	AP_REG1_EN		= (1 << 15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) 	AP_REG1_ADDR_MASK	= (0xF << 8) |(1 << 12),/* 12:8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) 	AP_PRE_SUP1		= (1 << 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) 	AP_PHY1_DFLT		= (1 << 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) 	AP_PHY1_ADDR_MASK	= (0xF << 0) |(1 << 4),/* 4:0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) }AUTOPOLL1_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) 	AP_REG2_EN		= (1 << 15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) 	AP_REG2_ADDR_MASK	= (0xF << 8) |(1 << 12),/* 12:8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) 	AP_PRE_SUP2		= (1 << 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) 	AP_PHY2_DFLT		= (1 << 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) 	AP_PHY2_ADDR_MASK	= (0xF << 0) |(1 << 4),/* 4:0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) }AUTOPOLL2_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) 	AP_REG3_EN		= (1 << 15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) 	AP_REG3_ADDR_MASK	= (0xF << 8) |(1 << 12),/* 12:8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) 	AP_PRE_SUP3		= (1 << 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) 	AP_PHY3_DFLT		= (1 << 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) 	AP_PHY3_ADDR_MASK	= (0xF << 0) |(1 << 4),/* 4:0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) }AUTOPOLL3_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) 	AP_REG4_EN		= (1 << 15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) 	AP_REG4_ADDR_MASK	= (0xF << 8) |(1 << 12),/* 12:8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) 	AP_PRE_SUP4		= (1 << 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) 	AP_PHY4_DFLT		= (1 << 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) 	AP_PHY4_ADDR_MASK	= (0xF << 0) |(1 << 4),/* 4:0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) }AUTOPOLL4_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) 	AP_REG5_EN		= (1 << 15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) 	AP_REG5_ADDR_MASK	= (0xF << 8) |(1 << 12),/* 12:8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) 	AP_PRE_SUP5		= (1 << 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) 	AP_PHY5_DFLT		= (1 << 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) 	AP_PHY5_ADDR_MASK	= (0xF << 0) |(1 << 4),/* 4:0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) }AUTOPOLL5_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) /* AP_VALUE 			0x98, 32bit ragister */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) 	AP_VAL_ACTIVE		= (1 << 31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) 	AP_VAL_RD_CMD		= ( 1 << 29),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) 	AP_ADDR			= (1 << 18)|(1 << 17)|(1 << 16), /* 18:16 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) 	AP_VAL			= (0xF << 0) | (0xF << 4) |( 0xF << 8) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) 				  (0xF << 12),	/* 15:0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) }AP_VALUE_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) 	DLY_INT_A_R3		= (1 << 31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) 	DLY_INT_A_R2		= (1 << 30),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) 	DLY_INT_A_R1		= (1 << 29),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) 	DLY_INT_A_R0		= (1 << 28),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) 	DLY_INT_A_T3		= (1 << 27),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) 	DLY_INT_A_T2		= (1 << 26),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) 	DLY_INT_A_T1		= (1 << 25),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) 	DLY_INT_A_T0		= ( 1 << 24),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) 	EVENT_COUNT_A		= (0xF << 16) | (0x1 << 20),/* 20:16 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) 	MAX_DELAY_TIME_A	= (0xF << 0) | (0xF << 4) | (1 << 8)|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) 				  (1 << 9) | (1 << 10),	/* 10:0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) }DLY_INT_A_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) 	DLY_INT_B_R3		= (1 << 31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) 	DLY_INT_B_R2		= (1 << 30),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) 	DLY_INT_B_R1		= (1 << 29),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) 	DLY_INT_B_R0		= (1 << 28),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) 	DLY_INT_B_T3		= (1 << 27),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) 	DLY_INT_B_T2		= (1 << 26),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) 	DLY_INT_B_T1		= (1 << 25),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) 	DLY_INT_B_T0		= ( 1 << 24),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) 	EVENT_COUNT_B		= (0xF << 16) | (0x1 << 20),/* 20:16 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) 	MAX_DELAY_TIME_B	= (0xF << 0) | (0xF << 4) | (1 << 8)|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) 				  (1 << 9) | (1 << 10),	/* 10:0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) }DLY_INT_B_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) /* FLOW_CONTROL 		0xC8, 32bit register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) 	PAUSE_LEN_CHG		= (1 << 30),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) 	FTPE			= (1 << 22),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) 	FRPE			= (1 << 21),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) 	NAPA			= (1 << 20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) 	NPA			= (1 << 19),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) 	FIXP			= ( 1 << 18),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) 	FCCMD			= ( 1 << 16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) 	PAUSE_LEN		= (0xF << 0) | (0xF << 4) |( 0xF << 8) |	 				  (0xF << 12),	/* 15:0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) }FLOW_CONTROL_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) /* PHY_ ACCESS			0xD0, 32bit register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) 	PHY_CMD_ACTIVE		= (1 << 31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) 	PHY_WR_CMD		= (1 << 30),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) 	PHY_RD_CMD		= (1 << 29),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) 	PHY_RD_ERR		= (1 << 28),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) 	PHY_PRE_SUP		= (1 << 27),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) 	PHY_ADDR		= (1 << 21) | (1 << 22) | (1 << 23)|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) 				  	(1 << 24) |(1 << 25),/* 25:21 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) 	PHY_REG_ADDR		= (1 << 16) | (1 << 17) | (1 << 18)|	 			  	   	  	(1 << 19) | (1 << 20),/* 20:16 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) 	PHY_DATA		= (0xF << 0)|(0xF << 4) |(0xF << 8)|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) 					(0xF << 12),/* 15:0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) }PHY_ACCESS_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) /* PMAT0			0x190,	 32bit register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) 	PMR_ACTIVE		= (1 << 31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) 	PMR_WR_CMD		= (1 << 30),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) 	PMR_RD_CMD		= (1 << 29),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) 	PMR_BANK		= (1 <<28),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) 	PMR_ADDR		= (0xF << 16)|(1 << 20)|(1 << 21)|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) 				  	(1 << 22),/* 22:16 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) 	PMR_B4			= (0xF << 0) | (0xF << 4),/* 15:0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) }PMAT0_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) /* PMAT1			0x194,	 32bit register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) 	PMR_B3			= (0xF << 24) | (0xF <<28),/* 31:24 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) 	PMR_B2			= (0xF << 16) |(0xF << 20),/* 23:16 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) 	PMR_B1			= (0xF << 8) | (0xF <<12), /* 15:8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) 	PMR_B0			= (0xF << 0)|(0xF << 4),/* 7:0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) }PMAT1_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) /************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) /*                                                                      */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) /*                      MIB counter definitions                         */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) /*                                                                      */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) /************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) #define rcv_miss_pkts				0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) #define rcv_octets				0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) #define rcv_broadcast_pkts			0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) #define rcv_multicast_pkts			0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) #define rcv_undersize_pkts			0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) #define rcv_oversize_pkts			0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) #define rcv_fragments				0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) #define rcv_jabbers				0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) #define rcv_unicast_pkts			0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) #define rcv_alignment_errors			0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) #define rcv_fcs_errors				0x0A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) #define rcv_good_octets				0x0B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) #define rcv_mac_ctrl				0x0C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) #define rcv_flow_ctrl				0x0D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) #define rcv_pkts_64_octets			0x0E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) #define rcv_pkts_65to127_octets			0x0F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) #define rcv_pkts_128to255_octets		0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) #define rcv_pkts_256to511_octets		0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) #define rcv_pkts_512to1023_octets		0x12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) #define rcv_pkts_1024to1518_octets		0x13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) #define rcv_unsupported_opcode			0x14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) #define rcv_symbol_errors			0x15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) #define rcv_drop_pkts_ring1			0x16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) #define rcv_drop_pkts_ring2			0x17
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) #define rcv_drop_pkts_ring3			0x18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) #define rcv_drop_pkts_ring4			0x19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) #define rcv_jumbo_pkts				0x1A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) #define xmt_underrun_pkts			0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) #define xmt_octets				0x21
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) #define xmt_packets				0x22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) #define xmt_broadcast_pkts			0x23
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) #define xmt_multicast_pkts			0x24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) #define xmt_collisions				0x25
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) #define xmt_unicast_pkts			0x26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) #define xmt_one_collision			0x27
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) #define xmt_multiple_collision			0x28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) #define xmt_deferred_transmit			0x29
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) #define xmt_late_collision			0x2A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) #define xmt_excessive_defer			0x2B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) #define xmt_loss_carrier			0x2C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) #define xmt_excessive_collision			0x2D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) #define xmt_back_pressure			0x2E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) #define xmt_flow_ctrl				0x2F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) #define xmt_pkts_64_octets			0x30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) #define xmt_pkts_65to127_octets			0x31
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) #define xmt_pkts_128to255_octets		0x32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) #define xmt_pkts_256to511_octets		0x33
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) #define xmt_pkts_512to1023_octets		0x34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) #define xmt_pkts_1024to1518_octet		0x35
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) #define xmt_oversize_pkts			0x36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) #define xmt_jumbo_pkts				0x37
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) /* Driver definitions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) #define	 PCI_VENDOR_ID_AMD		0x1022
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) #define  PCI_DEVICE_ID_AMD8111E_7462	0x7462
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) #define MAX_UNITS			8 /* Maximum number of devices possible */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) #define NUM_TX_BUFFERS			32 /* Number of transmit buffers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) #define NUM_RX_BUFFERS			32 /* Number of receive buffers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) #define TX_BUFF_MOD_MASK         	31 /* (NUM_TX_BUFFERS -1) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) #define RX_BUFF_MOD_MASK         	31 /* (NUM_RX_BUFFERS -1) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) #define NUM_TX_RING_DR			32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) #define NUM_RX_RING_DR			32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) #define TX_RING_DR_MOD_MASK         	31 /* (NUM_TX_RING_DR -1) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) #define RX_RING_DR_MOD_MASK         	31 /* (NUM_RX_RING_DR -1) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) #define MAX_FILTER_SIZE			64 /* Maximum multicast address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) #define AMD8111E_MIN_MTU	 	60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) #define AMD8111E_MAX_MTU		9000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) #define PKT_BUFF_SZ			1536
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) #define MIN_PKT_LEN			60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) #define  AMD8111E_TX_TIMEOUT		(3 * HZ)/* 3 sec */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) #define SOFT_TIMER_FREQ 		0xBEBC  /* 0.5 sec */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) #define DELAY_TIMER_CONV		50    /* msec to 10 usec conversion.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) 						 Only 500 usec resolution */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) #define OPTION_VLAN_ENABLE		0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) #define OPTION_JUMBO_ENABLE		0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) #define OPTION_MULTICAST_ENABLE		0x0004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) #define OPTION_WOL_ENABLE		0x0008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) #define OPTION_WAKE_MAGIC_ENABLE	0x0010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) #define OPTION_WAKE_PHY_ENABLE		0x0020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) #define OPTION_INTR_COAL_ENABLE		0x0040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) #define OPTION_DYN_IPG_ENABLE	        0x0080
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) #define PHY_REG_ADDR_MASK		0x1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) /* ipg parameters */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) #define DEFAULT_IPG			0x60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) #define IFS1_DELTA			36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) #define	IPG_CONVERGE_JIFFIES (HZ/2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) #define	IPG_STABLE_TIME	5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) #define	MIN_IPG	96
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) #define	MAX_IPG	255
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) #define IPG_STEP	16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) #define CSTATE  1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) #define SSTATE  2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) /* Assume contoller gets data 10 times the maximum processing time */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) #define  REPEAT_CNT			10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) /* amd8111e descriptor flag definitions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) 	OWN_BIT		=	(1 << 15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) 	ADD_FCS_BIT	=	(1 << 13),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) 	LTINT_BIT	=	(1 << 12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) 	STP_BIT		=	(1 << 9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) 	ENP_BIT		=	(1 << 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) 	KILL_BIT	= 	(1 << 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) 	TCC_VLAN_INSERT	=	(1 << 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) 	TCC_VLAN_REPLACE =	(1 << 1) |( 1<< 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) }TX_FLAG_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) 	ERR_BIT 	=	(1 << 14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) 	FRAM_BIT	=  	(1 << 13),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) 	OFLO_BIT	=       (1 << 12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) 	CRC_BIT		=	(1 << 11),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) 	PAM_BIT		=	(1 << 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) 	LAFM_BIT	= 	(1 << 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) 	BAM_BIT		=	(1 << 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) 	TT_VLAN_TAGGED	= 	(1 << 3) |(1 << 2),/* 0x000 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) 	TT_PRTY_TAGGED	=	(1 << 3),/* 0x0008 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) }RX_FLAG_BITS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) #define RESET_RX_FLAGS		0x0000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) #define TT_MASK			0x000c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) #define TCC_MASK		0x0003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) /* driver ioctl parameters */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) #define AMD8111E_REG_DUMP_LEN	 13*sizeof(u32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) /* amd8111e descriptor format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) struct amd8111e_tx_dr{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) 	__le16 buff_count; /* Size of the buffer pointed by this descriptor */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) 	__le16 tx_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) 	__le16 tag_ctrl_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) 	__le16 tag_ctrl_cmd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) 	__le32 buff_phy_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) 	__le32 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) struct amd8111e_rx_dr{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) 	__le32 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) 	__le16 msg_count; /* Received message len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) 	__le16 tag_ctrl_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) 	__le16 buff_count;  /* Len of the buffer pointed by descriptor. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) 	__le16 rx_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) 	__le32 buff_phy_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) struct amd8111e_link_config{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) #define SPEED_INVALID		0xffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) #define DUPLEX_INVALID		0xff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) #define AUTONEG_INVALID		0xff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) 	unsigned long			orig_phy_option;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) 	u16				speed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) 	u8				duplex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) 	u8				autoneg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) 	u8				reserved;  /* 32bit alignment */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) enum coal_type{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) 	NO_COALESCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) 	LOW_COALESCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) 	MEDIUM_COALESCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) 	HIGH_COALESCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) enum coal_mode{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695)        	RX_INTR_COAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) 	TX_INTR_COAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) 	DISABLE_COAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) 	ENABLE_COAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) #define MAX_TIMEOUT	40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) #define MAX_EVENT_COUNT 31
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) struct amd8111e_coalesce_conf{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) 	unsigned int rx_timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) 	unsigned int rx_event_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) 	unsigned long rx_packets;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) 	unsigned long rx_prev_packets;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) 	unsigned long rx_bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) 	unsigned long rx_prev_bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711) 	unsigned int rx_coal_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) 	unsigned int tx_timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714) 	unsigned int tx_event_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) 	unsigned long tx_packets;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) 	unsigned long tx_prev_packets;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) 	unsigned long tx_bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) 	unsigned long tx_prev_bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) 	unsigned int tx_coal_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) struct ipg_info{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) 	unsigned int ipg_state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725) 	unsigned int ipg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) 	unsigned int current_ipg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) 	unsigned int col_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) 	unsigned int diff_col_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) 	unsigned int timer_tick;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730) 	unsigned int prev_ipg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) 	struct timer_list ipg_timer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) struct amd8111e_priv{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736) 	struct amd8111e_tx_dr*  tx_ring;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) 	struct amd8111e_rx_dr* rx_ring;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) 	dma_addr_t tx_ring_dma_addr;	/* tx descriptor ring base address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739) 	dma_addr_t rx_ring_dma_addr;	/* rx descriptor ring base address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740) 	const char *name;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) 	struct pci_dev *pci_dev;	/* Ptr to the associated pci_dev */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742) 	struct net_device* amd8111e_net_dev; 	/* ptr to associated net_device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) 	/* Transmit and receive skbs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) 	struct sk_buff *tx_skbuff[NUM_TX_BUFFERS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745) 	struct sk_buff *rx_skbuff[NUM_RX_BUFFERS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746) 	/* Transmit and receive dma mapped addr */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747) 	dma_addr_t tx_dma_addr[NUM_TX_BUFFERS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748) 	dma_addr_t rx_dma_addr[NUM_RX_BUFFERS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) 	/* Reg memory mapped address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) 	void __iomem *mmio;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752) 	struct napi_struct napi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) 	spinlock_t lock;	/* Guard lock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) 	unsigned long rx_idx, tx_idx;	/* The next free ring entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) 	unsigned long tx_complete_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757) 	unsigned long tx_ring_complete_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758) 	unsigned long tx_ring_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759) 	unsigned int rx_buff_len;	/* Buffer length of rx buffers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) 	int options;		/* Options enabled/disabled for the device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) 	unsigned long ext_phy_option;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763) 	int ext_phy_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764) 	u32 ext_phy_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) 	struct amd8111e_link_config link_config;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767) 	int pm_cap;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) 	struct net_device *next;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) 	int mii;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) 	struct mii_if_info mii_if;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) 	char opened;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773) 	unsigned int drv_rx_errors;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) 	struct amd8111e_coalesce_conf coal_conf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) 	struct ipg_info  ipg_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780) /* 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.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781) BUG? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782) #define  amd8111e_writeq(_UlData,_memMap)   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783) 		writel(*(u32*)(&_UlData), _memMap);	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) 		writel(*(u32*)((u8*)(&_UlData)+4), _memMap+4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786) /* maps the external speed options to internal value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787) typedef enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788) 	SPEED_AUTONEG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789) 	SPEED10_HALF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790) 	SPEED10_FULL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791) 	SPEED100_HALF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792) 	SPEED100_FULL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793) }EXT_PHY_OPTION;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795) static int card_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) static int speed_duplex[MAX_UNITS] = { 0, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797) static bool coalesce[MAX_UNITS] = { [ 0 ... MAX_UNITS-1] = true };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) static bool dynamic_ipg[MAX_UNITS] = { [ 0 ... MAX_UNITS-1] = false };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) static unsigned int chip_version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801) #endif /* _AMD8111E_H */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802)