xref: /dpdk/drivers/net/r8169/r8169_compat.h (revision b574fb4cc855f4e86659d37ded01e7a218c38865)
19b170cfcSHoward Wang /* SPDX-License-Identifier: BSD-3-Clause
29b170cfcSHoward Wang  * Copyright(c) 2024 Realtek Corporation. All rights reserved
39b170cfcSHoward Wang  */
49b170cfcSHoward Wang 
59b170cfcSHoward Wang #ifndef R8169_COMPAT_H
69b170cfcSHoward Wang #define R8169_COMPAT_H
79b170cfcSHoward Wang 
89b170cfcSHoward Wang #include <stdint.h>
99b170cfcSHoward Wang 
1088f5b657SHoward Wang #include <rte_common.h>
1188f5b657SHoward Wang #include <rte_cycles.h>
1288f5b657SHoward Wang #include <rte_byteorder.h>
1388f5b657SHoward Wang #include <rte_io.h>
1488f5b657SHoward Wang #include <rte_ether.h>
1588f5b657SHoward Wang 
169b170cfcSHoward Wang typedef uint8_t   u8;
179b170cfcSHoward Wang typedef uint16_t  u16;
189b170cfcSHoward Wang typedef uint32_t  u32;
199b170cfcSHoward Wang typedef uint64_t  u64;
209b170cfcSHoward Wang 
21fa0b0ad6SHoward Wang struct rtl_counters {
22fa0b0ad6SHoward Wang 	u64 tx_packets;
23fa0b0ad6SHoward Wang 	u64 rx_packets;
24fa0b0ad6SHoward Wang 	u64 tx_errors;
25fa0b0ad6SHoward Wang 	u32 rx_errors;
26fa0b0ad6SHoward Wang 	u16 rx_missed;
27fa0b0ad6SHoward Wang 	u16 align_errors;
28fa0b0ad6SHoward Wang 	u32 tx_one_collision;
29fa0b0ad6SHoward Wang 	u32 tx_multi_collision;
30fa0b0ad6SHoward Wang 	u64 rx_unicast;
31fa0b0ad6SHoward Wang 	u64 rx_broadcast;
32fa0b0ad6SHoward Wang 	u32 rx_multicast;
33fa0b0ad6SHoward Wang 	u16 tx_aborted;
34fa0b0ad6SHoward Wang };
35fa0b0ad6SHoward Wang 
36619f6ebcSHoward Wang enum mcfg {
37619f6ebcSHoward Wang 	CFG_METHOD_1 = 1,
38619f6ebcSHoward Wang 	CFG_METHOD_2,
39619f6ebcSHoward Wang 	CFG_METHOD_3,
40619f6ebcSHoward Wang 	CFG_METHOD_4,
41619f6ebcSHoward Wang 	CFG_METHOD_5,
42619f6ebcSHoward Wang 	CFG_METHOD_6,
43619f6ebcSHoward Wang 	CFG_METHOD_7,
44619f6ebcSHoward Wang 	CFG_METHOD_8,
45619f6ebcSHoward Wang 	CFG_METHOD_9,
46619f6ebcSHoward Wang 	CFG_METHOD_10,
47619f6ebcSHoward Wang 	CFG_METHOD_11,
48619f6ebcSHoward Wang 	CFG_METHOD_12,
49619f6ebcSHoward Wang 	CFG_METHOD_13,
50619f6ebcSHoward Wang 	CFG_METHOD_14,
51619f6ebcSHoward Wang 	CFG_METHOD_15,
52619f6ebcSHoward Wang 	CFG_METHOD_16,
53619f6ebcSHoward Wang 	CFG_METHOD_17,
54619f6ebcSHoward Wang 	CFG_METHOD_18,
55619f6ebcSHoward Wang 	CFG_METHOD_19,
56619f6ebcSHoward Wang 	CFG_METHOD_20,
57619f6ebcSHoward Wang 	CFG_METHOD_21,
58619f6ebcSHoward Wang 	CFG_METHOD_22,
59619f6ebcSHoward Wang 	CFG_METHOD_23,
60619f6ebcSHoward Wang 	CFG_METHOD_24,
61619f6ebcSHoward Wang 	CFG_METHOD_25,
62619f6ebcSHoward Wang 	CFG_METHOD_26,
63619f6ebcSHoward Wang 	CFG_METHOD_27,
64619f6ebcSHoward Wang 	CFG_METHOD_28,
65619f6ebcSHoward Wang 	CFG_METHOD_29,
66619f6ebcSHoward Wang 	CFG_METHOD_30,
67619f6ebcSHoward Wang 	CFG_METHOD_31,
68619f6ebcSHoward Wang 	CFG_METHOD_32,
69619f6ebcSHoward Wang 	CFG_METHOD_33,
70619f6ebcSHoward Wang 	CFG_METHOD_34,
71619f6ebcSHoward Wang 	CFG_METHOD_35,
72619f6ebcSHoward Wang 	CFG_METHOD_36,
73619f6ebcSHoward Wang 	CFG_METHOD_37,
74619f6ebcSHoward Wang 	CFG_METHOD_38,
75619f6ebcSHoward Wang 	CFG_METHOD_39,
76619f6ebcSHoward Wang 	CFG_METHOD_40,
77619f6ebcSHoward Wang 	CFG_METHOD_41,
78619f6ebcSHoward Wang 	CFG_METHOD_42,
79619f6ebcSHoward Wang 	CFG_METHOD_43,
80619f6ebcSHoward Wang 	CFG_METHOD_44,
81619f6ebcSHoward Wang 	CFG_METHOD_45,
82619f6ebcSHoward Wang 	CFG_METHOD_46,
83619f6ebcSHoward Wang 	CFG_METHOD_47,
84619f6ebcSHoward Wang 	CFG_METHOD_48,
85619f6ebcSHoward Wang 	CFG_METHOD_49,
86619f6ebcSHoward Wang 	CFG_METHOD_50,
87619f6ebcSHoward Wang 	CFG_METHOD_51,
88619f6ebcSHoward Wang 	CFG_METHOD_52,
89619f6ebcSHoward Wang 	CFG_METHOD_53,
90619f6ebcSHoward Wang 	CFG_METHOD_54,
91619f6ebcSHoward Wang 	CFG_METHOD_55,
92619f6ebcSHoward Wang 	CFG_METHOD_56,
93619f6ebcSHoward Wang 	CFG_METHOD_57,
94619f6ebcSHoward Wang 	CFG_METHOD_58,
95619f6ebcSHoward Wang 	CFG_METHOD_59,
96619f6ebcSHoward Wang 	CFG_METHOD_60,
97619f6ebcSHoward Wang 	CFG_METHOD_61,
98619f6ebcSHoward Wang 	CFG_METHOD_62,
99619f6ebcSHoward Wang 	CFG_METHOD_63,
100619f6ebcSHoward Wang 	CFG_METHOD_64,
101619f6ebcSHoward Wang 	CFG_METHOD_65,
102619f6ebcSHoward Wang 	CFG_METHOD_66,
103619f6ebcSHoward Wang 	CFG_METHOD_67,
104619f6ebcSHoward Wang 	CFG_METHOD_68,
105619f6ebcSHoward Wang 	CFG_METHOD_69,
106619f6ebcSHoward Wang 	CFG_METHOD_70,
107619f6ebcSHoward Wang 	CFG_METHOD_71,
108619f6ebcSHoward Wang 	CFG_METHOD_MAX,
109619f6ebcSHoward Wang 	CFG_METHOD_DEFAULT = 0xFF
110619f6ebcSHoward Wang };
111619f6ebcSHoward Wang 
112619f6ebcSHoward Wang enum bits {
113619f6ebcSHoward Wang 	BIT_0 = (1UL << 0),
114619f6ebcSHoward Wang 	BIT_1 = (1UL << 1),
115619f6ebcSHoward Wang 	BIT_2 = (1UL << 2),
116619f6ebcSHoward Wang 	BIT_3 = (1UL << 3),
117619f6ebcSHoward Wang 	BIT_4 = (1UL << 4),
118619f6ebcSHoward Wang 	BIT_5 = (1UL << 5),
119619f6ebcSHoward Wang 	BIT_6 = (1UL << 6),
120619f6ebcSHoward Wang 	BIT_7 = (1UL << 7),
121619f6ebcSHoward Wang 	BIT_8 = (1UL << 8),
122619f6ebcSHoward Wang 	BIT_9 = (1UL << 9),
123619f6ebcSHoward Wang 	BIT_10 = (1UL << 10),
124619f6ebcSHoward Wang 	BIT_11 = (1UL << 11),
125619f6ebcSHoward Wang 	BIT_12 = (1UL << 12),
126619f6ebcSHoward Wang 	BIT_13 = (1UL << 13),
127619f6ebcSHoward Wang 	BIT_14 = (1UL << 14),
128619f6ebcSHoward Wang 	BIT_15 = (1UL << 15),
129619f6ebcSHoward Wang 	BIT_16 = (1UL << 16),
130619f6ebcSHoward Wang 	BIT_17 = (1UL << 17),
131619f6ebcSHoward Wang 	BIT_18 = (1UL << 18),
132619f6ebcSHoward Wang 	BIT_19 = (1UL << 19),
133619f6ebcSHoward Wang 	BIT_20 = (1UL << 20),
134619f6ebcSHoward Wang 	BIT_21 = (1UL << 21),
135619f6ebcSHoward Wang 	BIT_22 = (1UL << 22),
136619f6ebcSHoward Wang 	BIT_23 = (1UL << 23),
137619f6ebcSHoward Wang 	BIT_24 = (1UL << 24),
138619f6ebcSHoward Wang 	BIT_25 = (1UL << 25),
139619f6ebcSHoward Wang 	BIT_26 = (1UL << 26),
140619f6ebcSHoward Wang 	BIT_27 = (1UL << 27),
141619f6ebcSHoward Wang 	BIT_28 = (1UL << 28),
142619f6ebcSHoward Wang 	BIT_29 = (1UL << 29),
143619f6ebcSHoward Wang 	BIT_30 = (1UL << 30),
144619f6ebcSHoward Wang 	BIT_31 = (1UL << 31)
145619f6ebcSHoward Wang };
146619f6ebcSHoward Wang 
14788f5b657SHoward Wang enum RTL_registers {
14888f5b657SHoward Wang 	MAC0            = 0x00,     /* Ethernet hardware address */
14988f5b657SHoward Wang 	MAC4            = 0x04,
15088f5b657SHoward Wang 	MAR0            = 0x08,     /* Multicast filter */
15188f5b657SHoward Wang 	CounterAddrLow  = 0x10,
15288f5b657SHoward Wang 	CounterAddrHigh = 0x14,
15388f5b657SHoward Wang 	CustomLED       = 0x18,
15488f5b657SHoward Wang 	TxDescStartAddrLow  = 0x20,
15588f5b657SHoward Wang 	TxDescStartAddrHigh = 0x24,
15688f5b657SHoward Wang 	TxHDescStartAddrLow = 0x28,
15788f5b657SHoward Wang 	TxHDescStartAddrHigh = 0x2C,
15888f5b657SHoward Wang 	FLASH           = 0x30,
15988f5b657SHoward Wang 	INT_CFG0_8125   = 0x34,
16088f5b657SHoward Wang 	ERSR            = 0x36,
16188f5b657SHoward Wang 	ChipCmd         = 0x37,
16288f5b657SHoward Wang 	TxPoll          = 0x38,
16388f5b657SHoward Wang 	IntrMask        = 0x3C,
16488f5b657SHoward Wang 	IntrStatus      = 0x3E,
16588f5b657SHoward Wang 	TxConfig        = 0x40,
16688f5b657SHoward Wang 	RxConfig        = 0x44,
16788f5b657SHoward Wang 	TCTR            = 0x48,
16888f5b657SHoward Wang 	Cfg9346         = 0x50,
16988f5b657SHoward Wang 	Config0         = 0x51,
17088f5b657SHoward Wang 	Config1         = 0x52,
17188f5b657SHoward Wang 	Config2         = 0x53,
17288f5b657SHoward Wang 	Config3         = 0x54,
17388f5b657SHoward Wang 	Config4         = 0x55,
17488f5b657SHoward Wang 	Config5         = 0x56,
17588f5b657SHoward Wang 	TDFNR           = 0x57,
17688f5b657SHoward Wang 	TimeInt0        = 0x58,
17788f5b657SHoward Wang 	TimeInt1        = 0x5C,
17888f5b657SHoward Wang 	PHYAR           = 0x60,
17988f5b657SHoward Wang 	CSIDR           = 0x64,
18088f5b657SHoward Wang 	CSIAR           = 0x68,
18188f5b657SHoward Wang 	PHYstatus       = 0x6C,
18288f5b657SHoward Wang 	MACDBG          = 0x6D,
18388f5b657SHoward Wang 	GPIO            = 0x6E,
18488f5b657SHoward Wang 	PMCH            = 0x6F,
18588f5b657SHoward Wang 	ERIDR           = 0x70,
18688f5b657SHoward Wang 	ERIAR           = 0x74,
18788f5b657SHoward Wang 	INT_CFG1_8125   = 0x7A,
18888f5b657SHoward Wang 	EPHY_RXER_NUM   = 0x7C,
18988f5b657SHoward Wang 	EPHYAR          = 0x80,
19088f5b657SHoward Wang 	TimeInt2        = 0x8C,
19188f5b657SHoward Wang 	OCPDR           = 0xB0,
19288f5b657SHoward Wang 	MACOCP          = 0xB0,
19388f5b657SHoward Wang 	OCPAR           = 0xB4,
19488f5b657SHoward Wang 	SecMAC0         = 0xB4,
19588f5b657SHoward Wang 	SecMAC4         = 0xB8,
19688f5b657SHoward Wang 	PHYOCP          = 0xB8,
19788f5b657SHoward Wang 	DBG_reg         = 0xD1,
19888f5b657SHoward Wang 	TwiCmdReg       = 0xD2,
19988f5b657SHoward Wang 	MCUCmd_reg      = 0xD3,
20088f5b657SHoward Wang 	RxMaxSize       = 0xDA,
20188f5b657SHoward Wang 	EFUSEAR         = 0xDC,
20288f5b657SHoward Wang 	CPlusCmd        = 0xE0,
20388f5b657SHoward Wang 	IntrMitigate    = 0xE2,
20488f5b657SHoward Wang 	RxDescAddrLow   = 0xE4,
20588f5b657SHoward Wang 	RxDescAddrHigh  = 0xE8,
20688f5b657SHoward Wang 	MTPS            = 0xEC,
20788f5b657SHoward Wang 	FuncEvent       = 0xF0,
20888f5b657SHoward Wang 	PPSW            = 0xF2,
20988f5b657SHoward Wang 	FuncEventMask   = 0xF4,
21088f5b657SHoward Wang 	TimeInt3        = 0xF4,
21188f5b657SHoward Wang 	FuncPresetState = 0xF8,
21288f5b657SHoward Wang 	CMAC_IBCR0      = 0xF8,
21388f5b657SHoward Wang 	CMAC_IBCR2      = 0xF9,
21488f5b657SHoward Wang 	CMAC_IBIMR0     = 0xFA,
21588f5b657SHoward Wang 	CMAC_IBISR0     = 0xFB,
21688f5b657SHoward Wang 	FuncForceEvent  = 0xFC,
21788f5b657SHoward Wang 
21888f5b657SHoward Wang 	/* 8125 */
21988f5b657SHoward Wang 	IMR0_8125          = 0x38,
22088f5b657SHoward Wang 	ISR0_8125          = 0x3C,
22188f5b657SHoward Wang 	TPPOLL_8125        = 0x90,
22288f5b657SHoward Wang 	IMR1_8125          = 0x800,
22388f5b657SHoward Wang 	ISR1_8125          = 0x802,
22488f5b657SHoward Wang 	IMR2_8125          = 0x804,
22588f5b657SHoward Wang 	ISR2_8125          = 0x806,
22688f5b657SHoward Wang 	IMR3_8125          = 0x808,
22788f5b657SHoward Wang 	ISR3_8125          = 0x80A,
22888f5b657SHoward Wang 	BACKUP_ADDR0_8125  = 0x19E0,
22988f5b657SHoward Wang 	BACKUP_ADDR1_8125  = 0X19E4,
23088f5b657SHoward Wang 	TCTR0_8125         = 0x0048,
23188f5b657SHoward Wang 	TCTR1_8125         = 0x004C,
23288f5b657SHoward Wang 	TCTR2_8125         = 0x0088,
23388f5b657SHoward Wang 	TCTR3_8125         = 0x001C,
23488f5b657SHoward Wang 	TIMER_INT0_8125    = 0x0058,
23588f5b657SHoward Wang 	TIMER_INT1_8125    = 0x005C,
23688f5b657SHoward Wang 	TIMER_INT2_8125    = 0x008C,
23788f5b657SHoward Wang 	TIMER_INT3_8125    = 0x00F4,
23888f5b657SHoward Wang 	INT_MITI_V2_0_RX   = 0x0A00,
23988f5b657SHoward Wang 	INT_MITI_V2_0_TX   = 0x0A02,
24088f5b657SHoward Wang 	INT_MITI_V2_1_RX   = 0x0A08,
24188f5b657SHoward Wang 	INT_MITI_V2_1_TX   = 0x0A0A,
24288f5b657SHoward Wang 	IMR_V2_CLEAR_REG_8125 = 0x0D00,
24388f5b657SHoward Wang 	ISR_V2_8125           = 0x0D04,
24488f5b657SHoward Wang 	IMR_V2_SET_REG_8125   = 0x0D0C,
24588f5b657SHoward Wang 	TDU_STA_8125       = 0x0D08,
24688f5b657SHoward Wang 	RDU_STA_8125       = 0x0D0A,
24788f5b657SHoward Wang 	IMR_V4_L2_CLEAR_REG_8125 = 0x0D10,
24888f5b657SHoward Wang 	IMR_V4_L2_SET_REG_8125   = 0x0D18,
24988f5b657SHoward Wang 	ISR_V4_L2_8125      = 0x0D14,
2507d502791SHoward Wang 	SW_TAIL_PTR0_8125BP = 0x0D30,
2517d502791SHoward Wang 	SW_TAIL_PTR1_8125BP = 0x0D38,
2527d502791SHoward Wang 	HW_CLO_PTR0_8125BP = 0x0D34,
2537d502791SHoward Wang 	HW_CLO_PTR1_8125BP = 0x0D3C,
25488f5b657SHoward Wang 	DOUBLE_VLAN_CONFIG = 0x1000,
25588f5b657SHoward Wang 	TX_NEW_CTRL        = 0x203E,
25688f5b657SHoward Wang 	TNPDS_Q1_LOW_8125  = 0x2100,
25788f5b657SHoward Wang 	PLA_TXQ0_IDLE_CREDIT = 0x2500,
25888f5b657SHoward Wang 	PLA_TXQ1_IDLE_CREDIT = 0x2504,
25988f5b657SHoward Wang 	SW_TAIL_PTR0_8125  = 0x2800,
26088f5b657SHoward Wang 	HW_CLO_PTR0_8125   = 0x2802,
26188f5b657SHoward Wang 	SW_TAIL_PTR0_8126  = 0x2800,
26288f5b657SHoward Wang 	HW_CLO_PTR0_8126   = 0x2800,
26388f5b657SHoward Wang 	RDSAR_Q1_LOW_8125  = 0x4000,
26488f5b657SHoward Wang 	RSS_CTRL_8125      = 0x4500,
26588f5b657SHoward Wang 	Q_NUM_CTRL_8125    = 0x4800,
26688f5b657SHoward Wang 	RSS_KEY_8125       = 0x4600,
26788f5b657SHoward Wang 	RSS_INDIRECTION_TBL_8125_V2 = 0x4700,
26888f5b657SHoward Wang 	EEE_TXIDLE_TIMER_8125       = 0x6048,
269*b574fb4cSHoward Wang 	IB2SOC_SET     = 0x0010,
270*b574fb4cSHoward Wang 	IB2SOC_DATA    = 0x0014,
271*b574fb4cSHoward Wang 	IB2SOC_CMD     = 0x0018,
272*b574fb4cSHoward Wang 	IB2SOC_IMR     = 0x001C,
27388f5b657SHoward Wang };
27488f5b657SHoward Wang 
27588f5b657SHoward Wang enum RTL_register_content {
27688f5b657SHoward Wang 	/* Interrupt status bits */
27788f5b657SHoward Wang 	SYSErr      = 0x8000,
27888f5b657SHoward Wang 	PCSTimeout  = 0x4000,
27988f5b657SHoward Wang 	SWInt       = 0x0100,
28088f5b657SHoward Wang 	TxDescUnavail = 0x0080,
28188f5b657SHoward Wang 	RxFIFOOver  = 0x0040,
28288f5b657SHoward Wang 	LinkChg     = 0x0020,
28388f5b657SHoward Wang 	RxDescUnavail = 0x0010,
28488f5b657SHoward Wang 	TxErr       = 0x0008,
28588f5b657SHoward Wang 	TxOK        = 0x0004,
28688f5b657SHoward Wang 	RxErr       = 0x0002,
28788f5b657SHoward Wang 	RxOK        = 0x0001,
28888f5b657SHoward Wang 
28988f5b657SHoward Wang 	/* RX status desc */
29088f5b657SHoward Wang 	RxRWT  = (1UL << 22),
29188f5b657SHoward Wang 	RxRES  = (1UL << 21),
29288f5b657SHoward Wang 	RxRUNT = (1UL << 20),
29388f5b657SHoward Wang 	RxCRC  = (1UL << 19),
29488f5b657SHoward Wang 
29588f5b657SHoward Wang 	/* ChipCmd bits */
29688f5b657SHoward Wang 	StopReq    = 0x80,
29788f5b657SHoward Wang 	CmdReset   = 0x10,
29888f5b657SHoward Wang 	CmdRxEnb   = 0x08,
29988f5b657SHoward Wang 	CmdTxEnb   = 0x04,
30088f5b657SHoward Wang 	RxBufEmpty = 0x01,
30188f5b657SHoward Wang 
30288f5b657SHoward Wang 	/* Cfg9346 bits */
30388f5b657SHoward Wang 	Cfg9346_Lock = 0x00,
30488f5b657SHoward Wang 	Cfg9346_Unlock = 0xC0,
30588f5b657SHoward Wang 	Cfg9346_EEDO = (1UL << 0),
30688f5b657SHoward Wang 	Cfg9346_EEDI = (1UL << 1),
30788f5b657SHoward Wang 	Cfg9346_EESK = (1UL << 2),
30888f5b657SHoward Wang 	Cfg9346_EECS = (1UL << 3),
30988f5b657SHoward Wang 	Cfg9346_EEM0 = (1UL << 6),
31088f5b657SHoward Wang 	Cfg9346_EEM1 = (1UL << 7),
31188f5b657SHoward Wang 
31288f5b657SHoward Wang 	/* RX mode bits */
31388f5b657SHoward Wang 	AcceptErr       = 0x20,
31488f5b657SHoward Wang 	AcceptRunt      = 0x10,
31588f5b657SHoward Wang 	AcceptBroadcast = 0x08,
31688f5b657SHoward Wang 	AcceptMulticast = 0x04,
31788f5b657SHoward Wang 	AcceptMyPhys    = 0x02,
31888f5b657SHoward Wang 	AcceptAllPhys   = 0x01,
31988f5b657SHoward Wang 
32088f5b657SHoward Wang 	/* Transmit priority polling */
32188f5b657SHoward Wang 	HPQ    = 0x80,
32288f5b657SHoward Wang 	NPQ    = 0x40,
32388f5b657SHoward Wang 	FSWInt = 0x01,
32488f5b657SHoward Wang 
32588f5b657SHoward Wang 	/* RX config bits */
32688f5b657SHoward Wang 	Reserved2_shift     = 13,
32788f5b657SHoward Wang 	RxCfgDMAShift       = 8,
32888f5b657SHoward Wang 	EnableRxDescV3      = (1 << 24),
32988f5b657SHoward Wang 	EnableOuterVlan     = (1 << 23),
33088f5b657SHoward Wang 	EnableInnerVlan     = (1 << 22),
33188f5b657SHoward Wang 	RxCfg_128_int_en    = (1 << 15),
33288f5b657SHoward Wang 	RxCfg_fet_multi_en  = (1 << 14),
33388f5b657SHoward Wang 	RxCfg_half_refetch  = (1 << 13),
33488f5b657SHoward Wang 	RxCfg_pause_slot_en = (1 << 11),
33588f5b657SHoward Wang 	RxCfg_9356SEL       = (1 << 6),
33688f5b657SHoward Wang 	EnableRxDescV4_0    = (1 << 1), /* Not in rcr */
33788f5b657SHoward Wang 
33888f5b657SHoward Wang 	/* TX config bits */
33988f5b657SHoward Wang 	TxInterFrameGapShift = 24,
34088f5b657SHoward Wang 	TxDMAShift = 8, /* DMA burst value (0-7) is shift this many bits. */
34188f5b657SHoward Wang 	TxMACLoopBack = (1UL << 17),  /* MAC loopback */
34288f5b657SHoward Wang 
34388f5b657SHoward Wang 	/* Config1 register */
34488f5b657SHoward Wang 	LEDS1       = (1UL << 7),
34588f5b657SHoward Wang 	LEDS0       = (1UL << 6),
34688f5b657SHoward Wang 	Speed_down  = (1UL << 4),
34788f5b657SHoward Wang 	MEMMAP      = (1UL << 3),
34888f5b657SHoward Wang 	IOMAP       = (1UL << 2),
34988f5b657SHoward Wang 	VPD         = (1UL << 1),
35088f5b657SHoward Wang 	PMEnable    = (1UL << 0), /* Power management enable */
35188f5b657SHoward Wang 
35288f5b657SHoward Wang 	/* Config2 register */
35388f5b657SHoward Wang 	PMSTS_En    = (1UL << 5),
35488f5b657SHoward Wang 
35588f5b657SHoward Wang 	/* Config3 register */
35688f5b657SHoward Wang 	Isolate_en  = (1UL << 12), /* Isolate enable */
35788f5b657SHoward Wang 	MagicPacket = (1UL << 5),  /* Wake up when receives a magic packet */
35888f5b657SHoward Wang 	LinkUp      = (1UL << 4),  /* This bit is reserved in RTL8125B. */
35988f5b657SHoward Wang 
36088f5b657SHoward Wang 	/* Wake up when the cable connection is re-established */
36188f5b657SHoward Wang 	ECRCEN      = (1UL << 3), /* This bit is reserved in RTL8125B. */
36288f5b657SHoward Wang 	Jumbo_En0   = (1UL << 2), /* This bit is reserved in RTL8125B. */
36388f5b657SHoward Wang 	RDY_TO_L23  = (1UL << 1), /* This bit is reserved in RTL8125B. */
36488f5b657SHoward Wang 	Beacon_en   = (1UL << 0), /* This bit is reserved in RTL8125B. */
36588f5b657SHoward Wang 
36688f5b657SHoward Wang 	/* Config4 register */
36788f5b657SHoward Wang 	Jumbo_En1   = (1UL << 1), /* This bit is reserved in RTL8125B. */
36888f5b657SHoward Wang 
36988f5b657SHoward Wang 	/* Config5 register */
37088f5b657SHoward Wang 	BWF         = (1UL << 6), /* Accept broadcast wakeup frame */
37188f5b657SHoward Wang 	MWF         = (1UL << 5), /* Accept multicast wakeup frame */
37288f5b657SHoward Wang 	UWF         = (1UL << 4), /* Accept unicast wakeup frame */
37388f5b657SHoward Wang 	LanWake     = (1UL << 1), /* LanWake enable/disable */
37488f5b657SHoward Wang 	PMEStatus   = (1UL << 0), /* PME status can be reset by PCI RST#. */
37588f5b657SHoward Wang 
37688f5b657SHoward Wang 	/* CPlusCmd */
37788f5b657SHoward Wang 	EnableBist      = (1UL << 15),
37888f5b657SHoward Wang 	Macdbgo_oe      = (1UL << 14),
37988f5b657SHoward Wang 	Normal_mode     = (1UL << 13),
38088f5b657SHoward Wang 	Force_halfdup   = (1UL << 12),
38188f5b657SHoward Wang 	Force_rxflow_en = (1UL << 11),
38288f5b657SHoward Wang 	Force_txflow_en = (1UL << 10),
38388f5b657SHoward Wang 	Cxpl_dbg_sel    = (1UL << 9), /* This bit is reserved in RTL8125B. */
38488f5b657SHoward Wang 	ASF             = (1UL << 8), /* This bit is reserved in RTL8125C. */
38588f5b657SHoward Wang 	PktCntrDisable  = (1UL << 7),
38688f5b657SHoward Wang 	RxVlan          = (1UL << 6),
38788f5b657SHoward Wang 	RxChkSum        = (1UL << 5),
38888f5b657SHoward Wang 	Macdbgo_sel = 0x001C,
38988f5b657SHoward Wang 	INTT_0      = 0x0000,
39088f5b657SHoward Wang 	INTT_1      = 0x0001,
39188f5b657SHoward Wang 	INTT_2      = 0x0002,
39288f5b657SHoward Wang 	INTT_3      = 0x0003,
39388f5b657SHoward Wang 
39488f5b657SHoward Wang 	/* PHY status */
39588f5b657SHoward Wang 	PowerSaveStatus = 0x80,
396f7327670SHoward Wang 	_5000bpsF       = 0x1000,
39788f5b657SHoward Wang 	_2500bpsF       = 0x400,
39888f5b657SHoward Wang 	TxFlowCtrl      = 0x40,
39988f5b657SHoward Wang 	RxFlowCtrl      = 0x20,
40088f5b657SHoward Wang 	_1000bpsF       = 0x10,
40188f5b657SHoward Wang 	_100bps         = 0x08,
40288f5b657SHoward Wang 	_10bps          = 0x04,
40388f5b657SHoward Wang 	LinkStatus      = 0x02,
40488f5b657SHoward Wang 	FullDup         = 0x01,
40588f5b657SHoward Wang 
40688f5b657SHoward Wang 	/* DBG reg */
40788f5b657SHoward Wang 	Fix_Nak_1 = (1UL << 4),
40888f5b657SHoward Wang 	Fix_Nak_2 = (1UL << 3),
40988f5b657SHoward Wang 	DBGPIN_E2 = (1UL << 0),
41088f5b657SHoward Wang 
41188f5b657SHoward Wang 	/* Reset counter command */
41288f5b657SHoward Wang 	CounterReset = 0x1,
41388f5b657SHoward Wang 	/* Dump counter command */
41488f5b657SHoward Wang 	CounterDump = 0x8,
41588f5b657SHoward Wang 
41688f5b657SHoward Wang 	/* PHY access */
41788f5b657SHoward Wang 	PHYAR_Flag      = 0x80000000,
41888f5b657SHoward Wang 	PHYAR_Write     = 0x80000000,
41988f5b657SHoward Wang 	PHYAR_Read      = 0x00000000,
42088f5b657SHoward Wang 	PHYAR_Reg_Mask  = 0x1f,
42188f5b657SHoward Wang 	PHYAR_Reg_shift = 16,
42288f5b657SHoward Wang 	PHYAR_Data_Mask = 0xffff,
42388f5b657SHoward Wang 
42488f5b657SHoward Wang 	/* EPHY access */
42588f5b657SHoward Wang 	EPHYAR_Flag        = 0x80000000,
42688f5b657SHoward Wang 	EPHYAR_Write       = 0x80000000,
42788f5b657SHoward Wang 	EPHYAR_Read        = 0x00000000,
42888f5b657SHoward Wang 	EPHYAR_Reg_Mask    = 0x3f,
42988f5b657SHoward Wang 	EPHYAR_Reg_Mask_v2 = 0x7f,
43088f5b657SHoward Wang 	EPHYAR_Reg_shift   = 16,
43188f5b657SHoward Wang 	EPHYAR_Data_Mask   = 0xffff,
43288f5b657SHoward Wang 
43388f5b657SHoward Wang 	/* CSI access */
43488f5b657SHoward Wang 	CSIAR_Flag         = 0x80000000,
43588f5b657SHoward Wang 	CSIAR_Write        = 0x80000000,
43688f5b657SHoward Wang 	CSIAR_Read         = 0x00000000,
43788f5b657SHoward Wang 	CSIAR_ByteEn       = 0x0f,
43888f5b657SHoward Wang 	CSIAR_ByteEn_shift = 12,
43988f5b657SHoward Wang 	CSIAR_Addr_Mask    = 0x0fff,
44088f5b657SHoward Wang 
44188f5b657SHoward Wang 	/* ERI access */
44288f5b657SHoward Wang 	ERIAR_Flag         = 0x80000000,
44388f5b657SHoward Wang 	ERIAR_Write        = 0x80000000,
44488f5b657SHoward Wang 	ERIAR_Read         = 0x00000000,
44588f5b657SHoward Wang 	ERIAR_Addr_Align   = 4, /* ERI access register address must be 4 byte alignment. */
44688f5b657SHoward Wang 	ERIAR_ExGMAC       = 0,
44788f5b657SHoward Wang 	ERIAR_MSIX         = 1,
44888f5b657SHoward Wang 	ERIAR_ASF          = 2,
44988f5b657SHoward Wang 	ERIAR_OOB          = 2,
45088f5b657SHoward Wang 	ERIAR_Type_shift   = 16,
45188f5b657SHoward Wang 	ERIAR_ByteEn       = 0x0f,
45288f5b657SHoward Wang 	ERIAR_ByteEn_shift = 12,
45388f5b657SHoward Wang 
45488f5b657SHoward Wang 	/* OCP GPHY access */
45588f5b657SHoward Wang 	OCPDR_Write           = 0x80000000,
45688f5b657SHoward Wang 	OCPDR_Read            = 0x00000000,
45788f5b657SHoward Wang 	OCPDR_Reg_Mask        = 0xFF,
45888f5b657SHoward Wang 	OCPDR_Data_Mask       = 0xFFFF,
45988f5b657SHoward Wang 	OCPDR_GPHY_Reg_shift  = 16,
46088f5b657SHoward Wang 	OCPAR_Flag            = 0x80000000,
46188f5b657SHoward Wang 	OCPAR_GPHY_Write      = 0x8000F060,
46288f5b657SHoward Wang 	OCPAR_GPHY_Read       = 0x0000F060,
46388f5b657SHoward Wang 	OCPR_Write            = 0x80000000,
46488f5b657SHoward Wang 	OCPR_Read             = 0x00000000,
46588f5b657SHoward Wang 	OCPR_Addr_Reg_shift   = 16,
46688f5b657SHoward Wang 	OCPR_Flag             = 0x80000000,
46788f5b657SHoward Wang 	OCP_STD_PHY_BASE_PAGE = 0x0A40,
46888f5b657SHoward Wang 
46988f5b657SHoward Wang 	/* MCU command */
47088f5b657SHoward Wang 	Now_is_oob   = (1UL << 7),
47188f5b657SHoward Wang 	Txfifo_empty = (1UL << 5),
47288f5b657SHoward Wang 	Rxfifo_empty = (1UL << 4),
47388f5b657SHoward Wang 
47488f5b657SHoward Wang 	/* E-FUSE access */
47588f5b657SHoward Wang 	EFUSE_WRITE       = 0x80000000,
47688f5b657SHoward Wang 	EFUSE_WRITE_OK    = 0x00000000,
47788f5b657SHoward Wang 	EFUSE_READ        = 0x00000000,
47888f5b657SHoward Wang 	EFUSE_READ_OK     = 0x80000000,
47988f5b657SHoward Wang 	EFUSE_WRITE_V3    = 0x40000000,
48088f5b657SHoward Wang 	EFUSE_WRITE_OK_V3 = 0x00000000,
48188f5b657SHoward Wang 	EFUSE_READ_V3     = 0x80000000,
48288f5b657SHoward Wang 	EFUSE_READ_OK_V3  = 0x00000000,
48388f5b657SHoward Wang 	EFUSE_Reg_Mask    = 0x03FF,
48488f5b657SHoward Wang 	EFUSE_Reg_Shift   = 8,
48588f5b657SHoward Wang 	EFUSE_Check_Cnt   = 300,
48688f5b657SHoward Wang 	EFUSE_READ_FAIL   = 0xFF,
48788f5b657SHoward Wang 	EFUSE_Data_Mask   = 0x000000FF,
48888f5b657SHoward Wang 
48988f5b657SHoward Wang 	/* GPIO */
49088f5b657SHoward Wang 	GPIO_en = (1UL << 0),
49188f5b657SHoward Wang 
49288f5b657SHoward Wang 	/* New interrupt bits */
49388f5b657SHoward Wang 	INT_CFG0_ENABLE_8125            = (1 << 0),
49488f5b657SHoward Wang 	INT_CFG0_TIMEOUT0_BYPASS_8125   = (1 << 1),
49588f5b657SHoward Wang 	INT_CFG0_MITIGATION_BYPASS_8125 = (1 << 2),
496619f6ebcSHoward Wang 	INT_CFG0_RDU_BYPASS_8126        = (1 << 4),
497619f6ebcSHoward Wang 	INT_CFG0_MSIX_ENTRY_NUM_MODE    = (1 << 5),
49888f5b657SHoward Wang 	ISRIMR_V2_ROK_Q0     = (1 << 0),
49988f5b657SHoward Wang 	ISRIMR_TOK_Q0        = (1 << 16),
50088f5b657SHoward Wang 	ISRIMR_TOK_Q1        = (1 << 18),
50188f5b657SHoward Wang 	ISRIMR_V2_LINKCHG    = (1 << 21),
50288f5b657SHoward Wang };
50388f5b657SHoward Wang 
5047d502791SHoward Wang enum RTL_chipset_name {
5057d502791SHoward Wang 	RTL8125A = 0,
5067d502791SHoward Wang 	RTL8125B,
5077d502791SHoward Wang 	RTL8168KB,
5087d502791SHoward Wang 	RTL8125BP,
5097d502791SHoward Wang 	RTL8125D,
5107d502791SHoward Wang 	RTL8126A,
5117d502791SHoward Wang 	UNKNOWN
5127d502791SHoward Wang };
5137d502791SHoward Wang 
5149b170cfcSHoward Wang #define PCI_VENDOR_ID_REALTEK 0x10EC
5159b170cfcSHoward Wang 
51688f5b657SHoward Wang #define RTL_PCI_REG_ADDR(hw, reg) ((u8 *)(hw)->mmio_addr + (reg))
51788f5b657SHoward Wang 
51888f5b657SHoward Wang #define RTL_R8(hw, reg) rte_read8(RTL_PCI_REG_ADDR(hw, reg))
51988f5b657SHoward Wang #define RTL_R16(hw, reg) rtl_read16(RTL_PCI_REG_ADDR(hw, reg))
52088f5b657SHoward Wang #define RTL_R32(hw, reg) rtl_read32(RTL_PCI_REG_ADDR(hw, reg))
52188f5b657SHoward Wang 
52288f5b657SHoward Wang #define RTL_W8(hw, reg, val) \
52388f5b657SHoward Wang 	rte_write8((val), RTL_PCI_REG_ADDR(hw, reg))
52488f5b657SHoward Wang #define RTL_W16(hw, reg, val) \
52588f5b657SHoward Wang 	rte_write16((rte_cpu_to_le_16(val)), RTL_PCI_REG_ADDR(hw, reg))
52688f5b657SHoward Wang #define RTL_W32(hw, reg, val) \
52788f5b657SHoward Wang 	rte_write32((rte_cpu_to_le_32(val)), RTL_PCI_REG_ADDR(hw, reg))
52888f5b657SHoward Wang 
529619f6ebcSHoward Wang #define RX_DMA_BURST_unlimited  7   /* Maximum PCI burst, '7' is unlimited */
530619f6ebcSHoward Wang #define RX_DMA_BURST_512    5
5318e852260SHoward Wang #define RX_DMA_BURST_256    4
532619f6ebcSHoward Wang #define TX_DMA_BURST_unlimited  7
533619f6ebcSHoward Wang #define TX_DMA_BURST_1024   6
534619f6ebcSHoward Wang #define TX_DMA_BURST_512    5
535619f6ebcSHoward Wang #define TX_DMA_BURST_256    4
536619f6ebcSHoward Wang #define TX_DMA_BURST_128    3
537619f6ebcSHoward Wang #define TX_DMA_BURST_64     2
538619f6ebcSHoward Wang #define TX_DMA_BURST_32     1
539619f6ebcSHoward Wang #define TX_DMA_BURST_16     0
540619f6ebcSHoward Wang #define InterFrameGap       0x03    /* 3 means InterFrameGap = the shortest one */
5418e852260SHoward Wang #define Rx_Fetch_Number_8  (1 << 30)
5428e852260SHoward Wang #define Rx_Close_Multiple  (1 << 21)
5438e852260SHoward Wang 
5448e852260SHoward Wang #define TRUE  1
5458e852260SHoward Wang #define FALSE 0
546619f6ebcSHoward Wang 
5477d502791SHoward Wang #define SPEED_10	10
5487d502791SHoward Wang #define SPEED_100	100
5497d502791SHoward Wang #define SPEED_1000	1000
5507d502791SHoward Wang #define SPEED_2500	2500
5517d502791SHoward Wang #define SPEED_5000	5000
5527d502791SHoward Wang 
5537d502791SHoward Wang #define DUPLEX_HALF	1
5547d502791SHoward Wang #define DUPLEX_FULL	2
5557d502791SHoward Wang 
5567d502791SHoward Wang #define AUTONEG_ENABLE	1
5577d502791SHoward Wang #define AUTONEG_DISABLE	0
5587d502791SHoward Wang 
5597d502791SHoward Wang #define ADVERTISE_10_HALF     0x0001
5607d502791SHoward Wang #define ADVERTISE_10_FULL     0x0002
5617d502791SHoward Wang #define ADVERTISE_100_HALF    0x0004
5627d502791SHoward Wang #define ADVERTISE_100_FULL    0x0008
5637d502791SHoward Wang #define ADVERTISE_1000_HALF   0x0010 /* Not used, just FYI */
5647d502791SHoward Wang #define ADVERTISE_1000_FULL   0x0020
5657d502791SHoward Wang #define ADVERTISE_2500_HALF   0x0040 /* NOT used, just FYI */
5667d502791SHoward Wang #define ADVERTISE_2500_FULL   0x0080
5677d502791SHoward Wang #define ADVERTISE_5000_HALF   0x0100 /* NOT used, just FYI */
5687d502791SHoward Wang #define ADVERTISE_5000_FULL   0x0200
5697d502791SHoward Wang 
5707d502791SHoward Wang #define MAC_ADDR_LEN    RTE_ETHER_ADDR_LEN
5717d502791SHoward Wang 
5722f198f0aSHoward Wang #define RTL_MAX_TX_DESC 4096
5732f198f0aSHoward Wang #define RTL_MAX_RX_DESC 4096
5742f198f0aSHoward Wang #define RTL_MIN_TX_DESC 64
5752f198f0aSHoward Wang #define RTL_MIN_RX_DESC 64
5762f198f0aSHoward Wang 
5772f198f0aSHoward Wang #define RTL_RING_ALIGN 256
5782f198f0aSHoward Wang 
5792f198f0aSHoward Wang #define RTL_MAX_TX_SEG 64
5802f198f0aSHoward Wang #define RTL_DESC_ALIGN 64
5812f198f0aSHoward Wang 
5822f198f0aSHoward Wang #define RTL_RX_FREE_THRESH 32
5832f198f0aSHoward Wang #define RTL_TX_FREE_THRESH 32
5842f198f0aSHoward Wang 
5852f198f0aSHoward Wang #define VLAN_TAG_SIZE   4
5862f198f0aSHoward Wang 
5872f198f0aSHoward Wang /*
5882f198f0aSHoward Wang  * The overhead from MTU to max frame size.
5892f198f0aSHoward Wang  * Considering VLAN so a tag needs to be counted.
5902f198f0aSHoward Wang  */
5912f198f0aSHoward Wang #define RTL_ETH_OVERHEAD (RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN + VLAN_TAG_SIZE)
5922f198f0aSHoward Wang #define JUMBO_FRAME_9K  (9 * 1024 - RTE_ETHER_HDR_LEN - RTE_VLAN_HLEN - RTE_ETHER_CRC_LEN)
5932f198f0aSHoward Wang 
5942f198f0aSHoward Wang #define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL << (n)) - 1))
5952f198f0aSHoward Wang 
59688f5b657SHoward Wang static inline u32
59788f5b657SHoward Wang rtl_read32(void *addr)
59888f5b657SHoward Wang {
59988f5b657SHoward Wang 	return rte_le_to_cpu_32(rte_read32(addr));
60088f5b657SHoward Wang }
60188f5b657SHoward Wang 
60288f5b657SHoward Wang static inline u32
60388f5b657SHoward Wang rtl_read16(void *addr)
60488f5b657SHoward Wang {
60588f5b657SHoward Wang 	return rte_le_to_cpu_16(rte_read16(addr));
60688f5b657SHoward Wang }
60788f5b657SHoward Wang 
6089b170cfcSHoward Wang #endif /* R8169_COMPAT_H */
609