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