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