Annotation of qemu/roms/ipxe/src/drivers/net/r8169.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 2008 Marty Connor <[email protected]>
        !             3:  * Copyright (c) 2008 Entity Cyber, Inc.
        !             4:  *
        !             5:  * This program is free software; you can redistribute it and/or
        !             6:  * modify it under the terms of the GNU General Public License as
        !             7:  * published by the Free Software Foundation; either version 2 of the
        !             8:  * License, or any later version.
        !             9:  *
        !            10:  * This program is distributed in the hope that it will be useful, but
        !            11:  * WITHOUT ANY WARRANTY; without even the implied warranty of
        !            12:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
        !            13:  * General Public License for more details.
        !            14:  *
        !            15:  * You should have received a copy of the GNU General Public License
        !            16:  * along with this program; if not, write to the Free Software
        !            17:  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
        !            18:  *
        !            19:  * This driver is based on rtl8169 data sheets and work by:
        !            20:  *
        !            21:  * Copyright (c) 2002 ShuChen <[email protected]>
        !            22:  * Copyright (c) 2003 - 2007 Francois Romieu <[email protected]>
        !            23:  * Copyright (c) a lot of people too. Please respect their work.
        !            24:  *
        !            25:  */
        !            26: 
        !            27: FILE_LICENCE ( GPL2_OR_LATER );
        !            28: 
        !            29: #ifndef _R8169_H_
        !            30: #define _R8169_H_
        !            31: 
        !            32: #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
        !            33: 
        !            34: /** FIXME: include/linux/pci_regs.h has these PCI regs, maybe
        !            35:           we need such a file in iPXE?
        !            36: **/
        !            37: #define  PCI_EXP_DEVCTL                8       /* Device Control */
        !            38: #define  PCI_EXP_DEVCTL_READRQ 0x7000  /* Max_Read_Request_Size */
        !            39: #define  PCI_EXP_LNKCTL                16      /* Link Control */
        !            40: #define  PCI_EXP_LNKCTL_CLKREQ_EN 0x100        /* Enable clkreq */
        !            41: #define  PCI_EXP_DEVCTL_NOSNOOP_EN 0x0800  /* Enable No Snoop */
        !            42: 
        !            43: /** FIXME: update mii.h in src/include/mii.h from Linux sources
        !            44:           so we don't have to include these definitiions.
        !            45: **/
        !            46: /* The forced speed, 10Mb, 100Mb, gigabit, 2.5Gb, 10GbE. */
        !            47: #define SPEED_10               10
        !            48: #define SPEED_100              100
        !            49: #define SPEED_1000             1000
        !            50: #define SPEED_2500             2500
        !            51: #define SPEED_10000            10000
        !            52: 
        !            53: /* Duplex, half or full. */
        !            54: #define DUPLEX_HALF            0x00
        !            55: #define DUPLEX_FULL            0x01
        !            56: 
        !            57: #define AUTONEG_DISABLE                0x00
        !            58: #define AUTONEG_ENABLE         0x01
        !            59: 
        !            60: /* MAC address length */
        !            61: #define MAC_ADDR_LEN   6
        !            62: 
        !            63: #define MAX_READ_REQUEST_SHIFT 12
        !            64: #define RX_FIFO_THRESH 7       /* 7 means NO threshold, Rx buffer level before first PCI xfer. */
        !            65: #define RX_DMA_BURST   6       /* Maximum PCI burst, '6' is 1024 */
        !            66: #define TX_DMA_BURST   6       /* Maximum PCI burst, '6' is 1024 */
        !            67: #define EarlyTxThld    0x3F    /* 0x3F means NO early transmit */
        !            68: #define RxPacketMaxSize        0x3FE8  /* 16K - 1 - ETH_HLEN - VLAN - CRC... */
        !            69: #define SafeMtu                0x1c20  /* ... actually life sucks beyond ~7k */
        !            70: #define InterFrameGap  0x03    /* 3 means InterFrameGap = the shortest one */
        !            71: 
        !            72: #define R8169_REGS_SIZE                256
        !            73: #define R8169_NAPI_WEIGHT      64
        !            74: #define NUM_TX_DESC    8       /* Number of Tx descriptor registers */
        !            75: #define NUM_RX_DESC    8       /* Number of Rx descriptor registers */
        !            76: #define RX_BUF_SIZE    1536    /* Rx Buffer size */
        !            77: #define R8169_TX_RING_BYTES    (NUM_TX_DESC * sizeof(struct TxDesc))
        !            78: #define R8169_RX_RING_BYTES    (NUM_RX_DESC * sizeof(struct RxDesc))
        !            79: 
        !            80: #define TX_RING_ALIGN          256
        !            81: #define RX_RING_ALIGN          256
        !            82: 
        !            83: #define RTL8169_TX_TIMEOUT     (6*HZ)
        !            84: #define RTL8169_PHY_TIMEOUT    (10*HZ)
        !            85: 
        !            86: #define RTL_EEPROM_SIG         cpu_to_le32(0x8129)
        !            87: #define RTL_EEPROM_SIG_MASK    cpu_to_le32(0xffff)
        !            88: #define RTL_EEPROM_SIG_ADDR    0x0000
        !            89: 
        !            90: /* write/read MMIO register */
        !            91: #define RTL_W8(reg, val8)      writeb ((val8), ioaddr + (reg))
        !            92: #define RTL_W16(reg, val16)    writew ((val16), ioaddr + (reg))
        !            93: #define RTL_W32(reg, val32)    writel ((val32), ioaddr + (reg))
        !            94: #define RTL_R8(reg)            readb (ioaddr + (reg))
        !            95: #define RTL_R16(reg)           readw (ioaddr + (reg))
        !            96: #define RTL_R32(reg)           ((unsigned long) readl (ioaddr + (reg)))
        !            97: 
        !            98: enum mac_version {
        !            99:        RTL_GIGA_MAC_VER_01 = 0x01, // 8169
        !           100:        RTL_GIGA_MAC_VER_02 = 0x02, // 8169S
        !           101:        RTL_GIGA_MAC_VER_03 = 0x03, // 8110S
        !           102:        RTL_GIGA_MAC_VER_04 = 0x04, // 8169SB
        !           103:        RTL_GIGA_MAC_VER_05 = 0x05, // 8110SCd
        !           104:        RTL_GIGA_MAC_VER_06 = 0x06, // 8110SCe
        !           105:        RTL_GIGA_MAC_VER_07 = 0x07, // 8102e
        !           106:        RTL_GIGA_MAC_VER_08 = 0x08, // 8102e
        !           107:        RTL_GIGA_MAC_VER_09 = 0x09, // 8102e
        !           108:        RTL_GIGA_MAC_VER_10 = 0x0a, // 8101e
        !           109:        RTL_GIGA_MAC_VER_11 = 0x0b, // 8168Bb
        !           110:        RTL_GIGA_MAC_VER_12 = 0x0c, // 8168Be
        !           111:        RTL_GIGA_MAC_VER_13 = 0x0d, // 8101Eb
        !           112:        RTL_GIGA_MAC_VER_14 = 0x0e, // 8101 ?
        !           113:        RTL_GIGA_MAC_VER_15 = 0x0f, // 8101 ?
        !           114:        RTL_GIGA_MAC_VER_16 = 0x11, // 8101Ec
        !           115:        RTL_GIGA_MAC_VER_17 = 0x10, // 8168Bf
        !           116:        RTL_GIGA_MAC_VER_18 = 0x12, // 8168CP
        !           117:        RTL_GIGA_MAC_VER_19 = 0x13, // 8168C
        !           118:        RTL_GIGA_MAC_VER_20 = 0x14, // 8168C
        !           119:        RTL_GIGA_MAC_VER_21 = 0x15, // 8168C
        !           120:        RTL_GIGA_MAC_VER_22 = 0x16, // 8168C
        !           121:        RTL_GIGA_MAC_VER_23 = 0x17, // 8168CP
        !           122:        RTL_GIGA_MAC_VER_24 = 0x18, // 8168CP
        !           123:        RTL_GIGA_MAC_VER_25 = 0x19, // 8168D
        !           124: };
        !           125: 
        !           126: #define _R(NAME,MAC,MASK) \
        !           127:        { .name = NAME, .mac_version = MAC, .RxConfigMask = MASK }
        !           128: 
        !           129: static const struct {
        !           130:        const char *name;
        !           131:        u8 mac_version;
        !           132:        u32 RxConfigMask;       /* Clears the bits supported by this chip */
        !           133: } rtl_chip_info[] = {
        !           134:        _R("RTL8169",           RTL_GIGA_MAC_VER_01, 0xff7e1880), // 8169
        !           135:        _R("RTL8169s",          RTL_GIGA_MAC_VER_02, 0xff7e1880), // 8169S
        !           136:        _R("RTL8110s",          RTL_GIGA_MAC_VER_03, 0xff7e1880), // 8110S
        !           137:        _R("RTL8169sb/8110sb",  RTL_GIGA_MAC_VER_04, 0xff7e1880), // 8169SB
        !           138:        _R("RTL8169sc/8110sc",  RTL_GIGA_MAC_VER_05, 0xff7e1880), // 8110SCd
        !           139:        _R("RTL8169sc/8110sc",  RTL_GIGA_MAC_VER_06, 0xff7e1880), // 8110SCe
        !           140:        _R("RTL8102e",          RTL_GIGA_MAC_VER_07, 0xff7e1880), // PCI-E
        !           141:        _R("RTL8102e",          RTL_GIGA_MAC_VER_08, 0xff7e1880), // PCI-E
        !           142:        _R("RTL8102e",          RTL_GIGA_MAC_VER_09, 0xff7e1880), // PCI-E
        !           143:        _R("RTL8101e",          RTL_GIGA_MAC_VER_10, 0xff7e1880), // PCI-E
        !           144:        _R("RTL8168b/8111b",    RTL_GIGA_MAC_VER_11, 0xff7e1880), // PCI-E
        !           145:        _R("RTL8168b/8111b",    RTL_GIGA_MAC_VER_12, 0xff7e1880), // PCI-E
        !           146:        _R("RTL8101e",          RTL_GIGA_MAC_VER_13, 0xff7e1880), // PCI-E 8139
        !           147:        _R("RTL8100e",          RTL_GIGA_MAC_VER_14, 0xff7e1880), // PCI-E 8139
        !           148:        _R("RTL8100e",          RTL_GIGA_MAC_VER_15, 0xff7e1880), // PCI-E 8139
        !           149:        _R("RTL8168b/8111b",    RTL_GIGA_MAC_VER_17, 0xff7e1880), // PCI-E
        !           150:        _R("RTL8101e",          RTL_GIGA_MAC_VER_16, 0xff7e1880), // PCI-E
        !           151:        _R("RTL8168cp/8111cp",  RTL_GIGA_MAC_VER_18, 0xff7e1880), // PCI-E
        !           152:        _R("RTL8168c/8111c",    RTL_GIGA_MAC_VER_19, 0xff7e1880), // PCI-E
        !           153:        _R("RTL8168c/8111c",    RTL_GIGA_MAC_VER_20, 0xff7e1880), // PCI-E
        !           154:        _R("RTL8168c/8111c",    RTL_GIGA_MAC_VER_21, 0xff7e1880), // PCI-E
        !           155:        _R("RTL8168c/8111c",    RTL_GIGA_MAC_VER_22, 0xff7e1880), // PCI-E
        !           156:        _R("RTL8168cp/8111cp",  RTL_GIGA_MAC_VER_23, 0xff7e1880), // PCI-E
        !           157:        _R("RTL8168cp/8111cp",  RTL_GIGA_MAC_VER_24, 0xff7e1880), // PCI-E
        !           158:        _R("RTL8168d/8111d",    RTL_GIGA_MAC_VER_25, 0xff7e1880)  // PCI-E
        !           159: };
        !           160: #undef _R
        !           161: 
        !           162: enum cfg_version {
        !           163:        RTL_CFG_0 = 0x00,
        !           164:        RTL_CFG_1,
        !           165:        RTL_CFG_2
        !           166: };
        !           167: 
        !           168: #if 0
        !           169: /** Device Table from Linux Driver **/
        !           170: static struct pci_device_id rtl8169_pci_tbl[] = {
        !           171:        { PCI_DEVICE(PCI_VENDOR_ID_REALTEK,     0x8129), 0, 0, RTL_CFG_0 },
        !           172:        { PCI_DEVICE(PCI_VENDOR_ID_REALTEK,     0x8136), 0, 0, RTL_CFG_2 },
        !           173:        { PCI_DEVICE(PCI_VENDOR_ID_REALTEK,     0x8167), 0, 0, RTL_CFG_0 },
        !           174:        { PCI_DEVICE(PCI_VENDOR_ID_REALTEK,     0x8168), 0, 0, RTL_CFG_1 },
        !           175:        { PCI_DEVICE(PCI_VENDOR_ID_REALTEK,     0x8169), 0, 0, RTL_CFG_0 },
        !           176:        { PCI_DEVICE(PCI_VENDOR_ID_DLINK,       0x4300), 0, 0, RTL_CFG_0 },
        !           177:        { PCI_DEVICE(PCI_VENDOR_ID_AT,          0xc107), 0, 0, RTL_CFG_0 },
        !           178:        { PCI_DEVICE(0x16ec,                    0x0116), 0, 0, RTL_CFG_0 },
        !           179:        { PCI_VENDOR_ID_LINKSYS,                0x1032,
        !           180:                PCI_ANY_ID, 0x0024, 0, 0, RTL_CFG_0 },
        !           181:        { 0x0001,                               0x8168,
        !           182:                PCI_ANY_ID, 0x2410, 0, 0, RTL_CFG_2 },
        !           183:        {0,},
        !           184: };
        !           185: #endif
        !           186: 
        !           187: enum rtl_registers {
        !           188:        MAC0            = 0,    /* Ethernet hardware address. */
        !           189:        MAC4            = 4,
        !           190:        MAR0            = 8,    /* Multicast filter. */
        !           191:        CounterAddrLow          = 0x10,
        !           192:        CounterAddrHigh         = 0x14,
        !           193:        TxDescStartAddrLow      = 0x20,
        !           194:        TxDescStartAddrHigh     = 0x24,
        !           195:        TxHDescStartAddrLow     = 0x28,
        !           196:        TxHDescStartAddrHigh    = 0x2c,
        !           197:        FLASH           = 0x30,
        !           198:        ERSR            = 0x36,
        !           199:        ChipCmd         = 0x37,
        !           200:        TxPoll          = 0x38,
        !           201:        IntrMask        = 0x3c,
        !           202:        IntrStatus      = 0x3e,
        !           203:        TxConfig        = 0x40,
        !           204:        RxConfig        = 0x44,
        !           205:        RxMissed        = 0x4c,
        !           206:        Cfg9346         = 0x50,
        !           207:        Config0         = 0x51,
        !           208:        Config1         = 0x52,
        !           209:        Config2         = 0x53,
        !           210:        Config3         = 0x54,
        !           211:        Config4         = 0x55,
        !           212:        Config5         = 0x56,
        !           213:        MultiIntr       = 0x5c,
        !           214:        PHYAR           = 0x60,
        !           215:        PHYstatus       = 0x6c,
        !           216:        RxMaxSize       = 0xda,
        !           217:        CPlusCmd        = 0xe0,
        !           218:        IntrMitigate    = 0xe2,
        !           219:        RxDescAddrLow   = 0xe4,
        !           220:        RxDescAddrHigh  = 0xe8,
        !           221:        EarlyTxThres    = 0xec,
        !           222:        FuncEvent       = 0xf0,
        !           223:        FuncEventMask   = 0xf4,
        !           224:        FuncPresetState = 0xf8,
        !           225:        FuncForceEvent  = 0xfc,
        !           226: };
        !           227: 
        !           228: enum rtl8110_registers {
        !           229:        TBICSR                  = 0x64,
        !           230:        TBI_ANAR                = 0x68,
        !           231:        TBI_LPAR                = 0x6a,
        !           232: };
        !           233: 
        !           234: enum rtl8168_8101_registers {
        !           235:        CSIDR                   = 0x64,
        !           236:        CSIAR                   = 0x68,
        !           237: #define        CSIAR_FLAG                      0x80000000
        !           238: #define        CSIAR_WRITE_CMD                 0x80000000
        !           239: #define        CSIAR_BYTE_ENABLE               0x0f
        !           240: #define        CSIAR_BYTE_ENABLE_SHIFT         12
        !           241: #define        CSIAR_ADDR_MASK                 0x0fff
        !           242: 
        !           243:        EPHYAR                  = 0x80,
        !           244: #define        EPHYAR_FLAG                     0x80000000
        !           245: #define        EPHYAR_WRITE_CMD                0x80000000
        !           246: #define        EPHYAR_REG_MASK                 0x1f
        !           247: #define        EPHYAR_REG_SHIFT                16
        !           248: #define        EPHYAR_DATA_MASK                0xffff
        !           249:        DBG_REG                 = 0xd1,
        !           250: #define        FIX_NAK_1                       (1 << 4)
        !           251: #define        FIX_NAK_2                       (1 << 3)
        !           252: };
        !           253: 
        !           254: enum rtl_register_content {
        !           255:        /* InterruptStatusBits */
        !           256:        SYSErr          = 0x8000,
        !           257:        PCSTimeout      = 0x4000,
        !           258:        SWInt           = 0x0100,
        !           259:        TxDescUnavail   = 0x0080,
        !           260:        RxFIFOOver      = 0x0040,
        !           261:        LinkChg         = 0x0020,
        !           262:        RxOverflow      = 0x0010,
        !           263:        TxErr           = 0x0008,
        !           264:        TxOK            = 0x0004,
        !           265:        RxErr           = 0x0002,
        !           266:        RxOK            = 0x0001,
        !           267: 
        !           268:        /* RxStatusDesc */
        !           269:        RxFOVF  = (1 << 23),
        !           270:        RxRWT   = (1 << 22),
        !           271:        RxRES   = (1 << 21),
        !           272:        RxRUNT  = (1 << 20),
        !           273:        RxCRC   = (1 << 19),
        !           274: 
        !           275:        /* ChipCmdBits */
        !           276:        CmdReset        = 0x10,
        !           277:        CmdRxEnb        = 0x08,
        !           278:        CmdTxEnb        = 0x04,
        !           279:        RxBufEmpty      = 0x01,
        !           280: 
        !           281:        /* TXPoll register p.5 */
        !           282:        HPQ             = 0x80,         /* Poll cmd on the high prio queue */
        !           283:        NPQ             = 0x40,         /* Poll cmd on the low prio queue */
        !           284:        FSWInt          = 0x01,         /* Forced software interrupt */
        !           285: 
        !           286:        /* Cfg9346Bits */
        !           287:        Cfg9346_Lock    = 0x00,
        !           288:        Cfg9346_Unlock  = 0xc0,
        !           289: 
        !           290:        /* rx_mode_bits */
        !           291:        AcceptErr       = 0x20,
        !           292:        AcceptRunt      = 0x10,
        !           293:        AcceptBroadcast = 0x08,
        !           294:        AcceptMulticast = 0x04,
        !           295:        AcceptMyPhys    = 0x02,
        !           296:        AcceptAllPhys   = 0x01,
        !           297: 
        !           298:        /* RxConfigBits */
        !           299:        RxCfgFIFOShift  = 13,
        !           300:        RxCfgDMAShift   =  8,
        !           301: 
        !           302:        /* TxConfigBits */
        !           303:        TxInterFrameGapShift = 24,
        !           304:        TxDMAShift = 8, /* DMA burst value (0-7) is shift this many bits */
        !           305: 
        !           306:        /* Config1 register p.24 */
        !           307:        LEDS1           = (1 << 7),
        !           308:        LEDS0           = (1 << 6),
        !           309:        MSIEnable       = (1 << 5),     /* Enable Message Signaled Interrupt */
        !           310:        Speed_down      = (1 << 4),
        !           311:        MEMMAP          = (1 << 3),
        !           312:        IOMAP           = (1 << 2),
        !           313:        VPD             = (1 << 1),
        !           314:        PMEnable        = (1 << 0),     /* Power Management Enable */
        !           315: 
        !           316:        /* Config2 register p. 25 */
        !           317:        PCI_Clock_66MHz = 0x01,
        !           318:        PCI_Clock_33MHz = 0x00,
        !           319: 
        !           320:        /* Config3 register p.25 */
        !           321:        MagicPacket     = (1 << 5),     /* Wake up when receives a Magic Packet */
        !           322:        LinkUp          = (1 << 4),     /* Wake up when the cable connection is re-established */
        !           323:        Beacon_en       = (1 << 0),     /* 8168 only. Reserved in the 8168b */
        !           324: 
        !           325:        /* Config5 register p.27 */
        !           326:        BWF             = (1 << 6),     /* Accept Broadcast wakeup frame */
        !           327:        MWF             = (1 << 5),     /* Accept Multicast wakeup frame */
        !           328:        UWF             = (1 << 4),     /* Accept Unicast wakeup frame */
        !           329:        LanWake         = (1 << 1),     /* LanWake enable/disable */
        !           330:        PMEStatus       = (1 << 0),     /* PME status can be reset by PCI RST# */
        !           331: 
        !           332:        /* TBICSR p.28 */
        !           333:        TBIReset        = 0x80000000,
        !           334:        TBILoopback     = 0x40000000,
        !           335:        TBINwEnable     = 0x20000000,
        !           336:        TBINwRestart    = 0x10000000,
        !           337:        TBILinkOk       = 0x02000000,
        !           338:        TBINwComplete   = 0x01000000,
        !           339: 
        !           340:        /* CPlusCmd p.31 */
        !           341:        EnableBist      = (1 << 15),    // 8168 8101
        !           342:        Mac_dbgo_oe     = (1 << 14),    // 8168 8101
        !           343:        Normal_mode     = (1 << 13),    // unused
        !           344:        Force_half_dup  = (1 << 12),    // 8168 8101
        !           345:        Force_rxflow_en = (1 << 11),    // 8168 8101
        !           346:        Force_txflow_en = (1 << 10),    // 8168 8101
        !           347:        Cxpl_dbg_sel    = (1 << 9),     // 8168 8101
        !           348:        ASF             = (1 << 8),     // 8168 8101
        !           349:        PktCntrDisable  = (1 << 7),     // 8168 8101
        !           350:        Mac_dbgo_sel    = 0x001c,       // 8168
        !           351:        RxVlan          = (1 << 6),
        !           352:        RxChkSum        = (1 << 5),
        !           353:        PCIDAC          = (1 << 4),
        !           354:        PCIMulRW        = (1 << 3),
        !           355:        INTT_0          = 0x0000,       // 8168
        !           356:        INTT_1          = 0x0001,       // 8168
        !           357:        INTT_2          = 0x0002,       // 8168
        !           358:        INTT_3          = 0x0003,       // 8168
        !           359: 
        !           360:        /* rtl8169_PHYstatus */
        !           361:        TBI_Enable      = 0x80,
        !           362:        TxFlowCtrl      = 0x40,
        !           363:        RxFlowCtrl      = 0x20,
        !           364:        _1000bpsF       = 0x10,
        !           365:        _100bps         = 0x08,
        !           366:        _10bps          = 0x04,
        !           367:        LinkStatus      = 0x02,
        !           368:        FullDup         = 0x01,
        !           369: 
        !           370:        /* _TBICSRBit */
        !           371:        TBILinkOK       = 0x02000000,
        !           372: 
        !           373:        /* DumpCounterCommand */
        !           374:        CounterDump     = 0x8,
        !           375: };
        !           376: 
        !           377: enum desc_status_bit {
        !           378:        DescOwn         = (1 << 31), /* Descriptor is owned by NIC */
        !           379:        RingEnd         = (1 << 30), /* End of descriptor ring */
        !           380:        FirstFrag       = (1 << 29), /* First segment of a packet */
        !           381:        LastFrag        = (1 << 28), /* Final segment of a packet */
        !           382: 
        !           383:        /* Tx private */
        !           384:        LargeSend       = (1 << 27), /* TCP Large Send Offload (TSO) */
        !           385:        MSSShift        = 16,        /* MSS value position */
        !           386:        MSSMask         = 0xfff,     /* MSS value + LargeSend bit: 12 bits */
        !           387:        IPCS            = (1 << 18), /* Calculate IP checksum */
        !           388:        UDPCS           = (1 << 17), /* Calculate UDP/IP checksum */
        !           389:        TCPCS           = (1 << 16), /* Calculate TCP/IP checksum */
        !           390:        TxVlanTag       = (1 << 17), /* Add VLAN tag */
        !           391: 
        !           392:        /* Rx private */
        !           393:        PID1            = (1 << 18), /* Protocol ID bit 1/2 */
        !           394:        PID0            = (1 << 17), /* Protocol ID bit 2/2 */
        !           395: 
        !           396: #define RxProtoUDP     (PID1)
        !           397: #define RxProtoTCP     (PID0)
        !           398: #define RxProtoIP      (PID1 | PID0)
        !           399: #define RxProtoMask    RxProtoIP
        !           400: 
        !           401:        IPFail          = (1 << 16), /* IP checksum failed */
        !           402:        UDPFail         = (1 << 15), /* UDP/IP checksum failed */
        !           403:        TCPFail         = (1 << 14), /* TCP/IP checksum failed */
        !           404:        RxVlanTag       = (1 << 16), /* VLAN tag available */
        !           405: };
        !           406: 
        !           407: #define RsvdMask       0x3fffc000
        !           408: 
        !           409: struct TxDesc {
        !           410:        volatile uint32_t opts1;
        !           411:        volatile uint32_t opts2;
        !           412:        volatile uint32_t addr_lo;
        !           413:        volatile uint32_t addr_hi;
        !           414: };
        !           415: 
        !           416: struct RxDesc {
        !           417:        volatile uint32_t opts1;
        !           418:        volatile uint32_t opts2;
        !           419:        volatile uint32_t addr_lo;
        !           420:        volatile uint32_t addr_hi;
        !           421: };
        !           422: 
        !           423: enum features {
        !           424:        RTL_FEATURE_WOL         = (1 << 0),
        !           425:        RTL_FEATURE_MSI         = (1 << 1),
        !           426:        RTL_FEATURE_GMII        = (1 << 2),
        !           427: };
        !           428: 
        !           429: static void rtl_hw_start_8169(struct net_device *);
        !           430: static void rtl_hw_start_8168(struct net_device *);
        !           431: static void rtl_hw_start_8101(struct net_device *);
        !           432: 
        !           433: struct rtl8169_private {
        !           434: 
        !           435:        struct pci_device *pci_dev;
        !           436:        struct net_device *netdev;
        !           437:        uint8_t *hw_addr;
        !           438:        void *mmio_addr;
        !           439:        uint32_t irqno;
        !           440: 
        !           441:        int chipset;
        !           442:        int mac_version;
        !           443:        u16 intr_event;
        !           444: 
        !           445:        struct io_buffer *tx_iobuf[NUM_TX_DESC];
        !           446:        struct io_buffer *rx_iobuf[NUM_RX_DESC];
        !           447: 
        !           448:        struct TxDesc *tx_base;
        !           449:        struct RxDesc *rx_base;
        !           450: 
        !           451:        uint32_t tx_curr;
        !           452:        uint32_t rx_curr;
        !           453: 
        !           454:        uint32_t tx_tail;
        !           455: 
        !           456:        uint32_t tx_fill_ctr;
        !           457: 
        !           458:        u16 cp_cmd;
        !           459: 
        !           460:        int phy_auto_nego_reg;
        !           461:        int phy_1000_ctrl_reg;
        !           462: 
        !           463:        int ( *set_speed ) (struct net_device *, u8 autoneg, u16 speed, u8 duplex );
        !           464:        void ( *phy_reset_enable ) ( void *ioaddr );
        !           465:        void ( *hw_start ) ( struct net_device * );
        !           466:        unsigned int ( *phy_reset_pending ) ( void *ioaddr );
        !           467:        unsigned int ( *link_ok ) ( void *ioaddr );
        !           468: 
        !           469:        int pcie_cap;
        !           470: 
        !           471:        unsigned features;
        !           472: 
        !           473: };
        !           474: 
        !           475: static const unsigned int rtl8169_rx_config =
        !           476:        (RX_FIFO_THRESH << RxCfgFIFOShift) | (RX_DMA_BURST << RxCfgDMAShift);
        !           477: 
        !           478: #endif /* _R8169_H_ */
        !           479: 
        !           480: /*
        !           481:  * Local variables:
        !           482:  *  c-basic-offset: 8
        !           483:  *  c-indent-level: 8
        !           484:  *  tab-width: 8
        !           485:  * End:
        !           486:  */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.