Annotation of qemu/roms/ipxe/src/drivers/net/forcedeth.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  *    forcedeth.h -- Driver for NVIDIA nForce media access controllers for iPXE
                      3:  *    Copyright (c) 2010 Andrei Faur <[email protected]>
                      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:  * Portions of this code are taken from the Linux forcedeth driver that was
                     20:  * based on a cleanroom reimplementation which was based on reverse engineered
                     21:  * documentation written by Carl-Daniel Hailfinger and Andrew de Quincey:
                     22:  * Copyright (C) 2003,4,5 Manfred Spraul
                     23:  * Copyright (C) 2004 Andrew de Quincey (wol support)
                     24:  * Copyright (C) 2004 Carl-Daniel Hailfinger (invalid MAC handling, insane
                     25:  *             IRQ rate fixes, bigendian fixes, cleanups, verification)
                     26:  * Copyright (c) 2004,2005,2006,2007,2008,2009 NVIDIA Corporation
                     27:  *
                     28:  * This header is a direct copy of #define lines and structs found in the
                     29:  * above mentioned driver, modified where necessary to make them work for iPXE.
                     30:  *
                     31:  */
                     32: 
                     33: FILE_LICENCE ( GPL2_OR_LATER );
                     34: 
                     35: #ifndef _FORCEDETH_H_
                     36: #define _FORCEDETH_H_
                     37: 
                     38: #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
                     39: 
                     40: struct ring_desc {
                     41:        u32 buf;
                     42:        u32 flaglen;
                     43: };
                     44: 
                     45: struct ring_desc_ex {
                     46:        u32 bufhigh;
                     47:        u32 buflow;
                     48:        u32 txvlan;
                     49:        u32 flaglen;
                     50: };
                     51: 
                     52: #define DESC_VER_1     1
                     53: #define DESC_VER_2     2
                     54: #define DESC_VER_3     3
                     55: 
                     56: #define RX_RING_SIZE           16
                     57: #define TX_RING_SIZE           16
                     58: #define RXTX_RING_SIZE         ( ( RX_RING_SIZE ) + ( TX_RING_SIZE ) )
                     59: #define RX_RING_MIN            128
                     60: #define TX_RING_MIN            64
                     61: #define RING_MAX_DESC_VER_1    1024
                     62: #define RING_MAX_DESC_VER_2_3  16384
                     63: 
                     64: #define NV_RX_ALLOC_PAD        (64)
                     65: 
                     66: #define NV_RX_HEADERS  (64)
                     67: 
                     68: #define RX_BUF_SZ              ( ( ETH_FRAME_LEN ) + ( NV_RX_HEADERS ) )
                     69: 
                     70: #define NV_PKTLIMIT_1  1500
                     71: #define NV_PKTLIMIT_2  9100
                     72: 
                     73: #define NV_LINK_POLL_FREQUENCY 128
                     74: 
                     75: /* PHY defines */
                     76: #define PHY_OUI_MARVELL                0x5043
                     77: #define PHY_OUI_CICADA         0x03f1
                     78: #define PHY_OUI_VITESSE                0x01c1
                     79: #define PHY_OUI_REALTEK                0x0732
                     80: #define PHY_OUI_REALTEK2       0x0020
                     81: #define PHYID1_OUI_MASK        0x03ff
                     82: #define PHYID1_OUI_SHFT        6
                     83: #define PHYID2_OUI_MASK        0xfc00
                     84: #define PHYID2_OUI_SHFT        10
                     85: #define PHYID2_MODEL_MASK              0x03f0
                     86: #define PHY_MODEL_REALTEK_8211         0x0110
                     87: #define PHY_REV_MASK                   0x0001
                     88: #define PHY_REV_REALTEK_8211B          0x0000
                     89: #define PHY_REV_REALTEK_8211C          0x0001
                     90: #define PHY_MODEL_REALTEK_8201         0x0200
                     91: #define PHY_MODEL_MARVELL_E3016                0x0220
                     92: #define PHY_MARVELL_E3016_INITMASK     0x0300
                     93: #define PHY_CICADA_INIT1       0x0f000
                     94: #define PHY_CICADA_INIT2       0x0e00
                     95: #define PHY_CICADA_INIT3       0x01000
                     96: #define PHY_CICADA_INIT4       0x0200
                     97: #define PHY_CICADA_INIT5       0x0004
                     98: #define PHY_CICADA_INIT6       0x02000
                     99: #define PHY_VITESSE_INIT_REG1  0x1f
                    100: #define PHY_VITESSE_INIT_REG2  0x10
                    101: #define PHY_VITESSE_INIT_REG3  0x11
                    102: #define PHY_VITESSE_INIT_REG4  0x12
                    103: #define PHY_VITESSE_INIT_MSK1  0xc
                    104: #define PHY_VITESSE_INIT_MSK2  0x0180
                    105: #define PHY_VITESSE_INIT1      0x52b5
                    106: #define PHY_VITESSE_INIT2      0xaf8a
                    107: #define PHY_VITESSE_INIT3      0x8
                    108: #define PHY_VITESSE_INIT4      0x8f8a
                    109: #define PHY_VITESSE_INIT5      0xaf86
                    110: #define PHY_VITESSE_INIT6      0x8f86
                    111: #define PHY_VITESSE_INIT7      0xaf82
                    112: #define PHY_VITESSE_INIT8      0x0100
                    113: #define PHY_VITESSE_INIT9      0x8f82
                    114: #define PHY_VITESSE_INIT10     0x0
                    115: #define PHY_REALTEK_INIT_REG1  0x1f
                    116: #define PHY_REALTEK_INIT_REG2  0x19
                    117: #define PHY_REALTEK_INIT_REG3  0x13
                    118: #define PHY_REALTEK_INIT_REG4  0x14
                    119: #define PHY_REALTEK_INIT_REG5  0x18
                    120: #define PHY_REALTEK_INIT_REG6  0x11
                    121: #define PHY_REALTEK_INIT_REG7  0x01
                    122: #define PHY_REALTEK_INIT1      0x0000
                    123: #define PHY_REALTEK_INIT2      0x8e00
                    124: #define PHY_REALTEK_INIT3      0x0001
                    125: #define PHY_REALTEK_INIT4      0xad17
                    126: #define PHY_REALTEK_INIT5      0xfb54
                    127: #define PHY_REALTEK_INIT6      0xf5c7
                    128: #define PHY_REALTEK_INIT7      0x1000
                    129: #define PHY_REALTEK_INIT8      0x0003
                    130: #define PHY_REALTEK_INIT9      0x0008
                    131: #define PHY_REALTEK_INIT10     0x0005
                    132: #define PHY_REALTEK_INIT11     0x0200
                    133: #define PHY_REALTEK_INIT_MSK1  0x0003
                    134: 
                    135: #define PHY_GIGABIT    0x0100
                    136: 
                    137: #define PHY_TIMEOUT    0x1
                    138: #define PHY_ERROR      0x2
                    139: 
                    140: #define PHY_100        0x1
                    141: #define PHY_1000       0x2
                    142: #define PHY_HALF       0x100
                    143: 
                    144: 
                    145: #define NV_PAUSEFRAME_RX_CAPABLE       0x0001
                    146: #define NV_PAUSEFRAME_TX_CAPABLE       0x0002
                    147: #define NV_PAUSEFRAME_RX_ENABLE                0x0004
                    148: #define NV_PAUSEFRAME_TX_ENABLE                0x0008
                    149: #define NV_PAUSEFRAME_RX_REQ           0x0010
                    150: #define NV_PAUSEFRAME_TX_REQ           0x0020
                    151: #define NV_PAUSEFRAME_AUTONEG          0x0040
                    152: 
                    153: /* MSI/MSI-X defines */
                    154: #define NV_MSI_X_MAX_VECTORS  8
                    155: #define NV_MSI_X_VECTORS_MASK 0x000f
                    156: #define NV_MSI_CAPABLE        0x0010
                    157: #define NV_MSI_X_CAPABLE      0x0020
                    158: #define NV_MSI_ENABLED        0x0040
                    159: #define NV_MSI_X_ENABLED      0x0080
                    160: 
                    161: #define NV_MSI_X_VECTOR_ALL   0x0
                    162: #define NV_MSI_X_VECTOR_RX    0x0
                    163: #define NV_MSI_X_VECTOR_TX    0x1
                    164: #define NV_MSI_X_VECTOR_OTHER 0x2
                    165: 
                    166: #define NV_MSI_PRIV_OFFSET 0x68
                    167: #define NV_MSI_PRIV_VALUE  0xffffffff
                    168: 
                    169: 
                    170: #define NV_MIIBUSY_DELAY       50
                    171: #define NV_MIIPHY_DELAY                10
                    172: #define NV_MIIPHY_DELAYMAX     10000
                    173: 
                    174: /* Hardware access */
                    175: #define DEV_NEED_TIMERIRQ          0x0000001  /* set the timer irq flag in the irq mask */
                    176: #define DEV_NEED_LINKTIMER         0x0000002  /* poll link settings. Relies on the timer irq */
                    177: #define DEV_HAS_LARGEDESC          0x0000004  /* device supports jumbo frames and needs packet format 2 */
                    178: #define DEV_HAS_HIGH_DMA           0x0000008  /* device supports 64bit dma */
                    179: #define DEV_HAS_CHECKSUM           0x0000010  /* device supports tx and rx checksum offloads */
                    180: #define DEV_HAS_VLAN               0x0000020  /* device supports vlan tagging and striping */
                    181: #define DEV_HAS_MSI                0x0000040  /* device supports MSI */
                    182: #define DEV_HAS_MSI_X              0x0000080  /* device supports MSI-X */
                    183: #define DEV_HAS_POWER_CNTRL        0x0000100  /* device supports power savings */
                    184: #define DEV_HAS_STATISTICS_V1      0x0000200  /* device supports hw statistics version 1 */
                    185: #define DEV_HAS_STATISTICS_V2      0x0000600  /* device supports hw statistics version 2 */
                    186: #define DEV_HAS_STATISTICS_V3      0x0000e00  /* device supports hw statistics version 3 */
                    187: #define DEV_HAS_TEST_EXTENDED      0x0001000  /* device supports extended diagnostic test */
                    188: #define DEV_HAS_MGMT_UNIT          0x0002000  /* device supports management unit */
                    189: #define DEV_HAS_CORRECT_MACADDR    0x0004000  /* device supports correct mac address order */
                    190: #define DEV_HAS_COLLISION_FIX      0x0008000  /* device supports tx collision fix */
                    191: #define DEV_HAS_PAUSEFRAME_TX_V1   0x0010000  /* device supports tx pause frames version 1 */
                    192: #define DEV_HAS_PAUSEFRAME_TX_V2   0x0020000  /* device supports tx pause frames version 2 */
                    193: #define DEV_HAS_PAUSEFRAME_TX_V3   0x0040000  /* device supports tx pause frames version 3 */
                    194: #define DEV_NEED_TX_LIMIT          0x0080000  /* device needs to limit tx */
                    195: #define DEV_NEED_TX_LIMIT2         0x0180000  /* device needs to limit tx, expect for some revs */
                    196: #define DEV_HAS_GEAR_MODE          0x0200000  /* device supports gear mode */
                    197: #define DEV_NEED_PHY_INIT_FIX      0x0400000  /* device needs specific phy workaround */
                    198: #define DEV_NEED_LOW_POWER_FIX     0x0800000  /* device needs special power up workaround */
                    199: #define DEV_NEED_MSI_FIX           0x1000000  /* device needs msi workaround */
                    200: 
                    201: #define FLAG_MASK_V1 0xffff0000
                    202: #define FLAG_MASK_V2 0xffffc000
                    203: #define LEN_MASK_V1 (0xffffffff ^ FLAG_MASK_V1)
                    204: #define LEN_MASK_V2 (0xffffffff ^ FLAG_MASK_V2)
                    205: 
                    206: #define NV_TX_LASTPACKET       (1<<16)
                    207: #define NV_TX_RETRYERROR       (1<<19)
                    208: #define NV_TX_RETRYCOUNT_MASK  (0xF<<20)
                    209: #define NV_TX_FORCED_INTERRUPT (1<<24)
                    210: #define NV_TX_DEFERRED         (1<<26)
                    211: #define NV_TX_CARRIERLOST      (1<<27)
                    212: #define NV_TX_LATECOLLISION    (1<<28)
                    213: #define NV_TX_UNDERFLOW                (1<<29)
                    214: #define NV_TX_ERROR            (1<<30)
                    215: #define NV_TX_VALID            (1<<31)
                    216: 
                    217: #define NV_TX2_LASTPACKET      (1<<29)
                    218: #define NV_TX2_RETRYERROR      (1<<18)
                    219: #define NV_TX2_RETRYCOUNT_MASK (0xF<<19)
                    220: #define NV_TX2_FORCED_INTERRUPT        (1<<30)
                    221: #define NV_TX2_DEFERRED                (1<<25)
                    222: #define NV_TX2_CARRIERLOST     (1<<26)
                    223: #define NV_TX2_LATECOLLISION   (1<<27)
                    224: #define NV_TX2_UNDERFLOW       (1<<28)
                    225: /* error and valid are the same for both */
                    226: #define NV_TX2_ERROR           (1<<30)
                    227: #define NV_TX2_VALID           (1<<31)
                    228: #define NV_TX2_TSO             (1<<28)
                    229: #define NV_TX2_TSO_SHIFT       14
                    230: #define NV_TX2_TSO_MAX_SHIFT   14
                    231: #define NV_TX2_TSO_MAX_SIZE    (1<<NV_TX2_TSO_MAX_SHIFT)
                    232: #define NV_TX2_CHECKSUM_L3     (1<<27)
                    233: #define NV_TX2_CHECKSUM_L4     (1<<26)
                    234: 
                    235: #define NV_TX3_VLAN_TAG_PRESENT (1<<18)
                    236: 
                    237: #define NV_RX_DESCRIPTORVALID  (1<<16)
                    238: #define NV_RX_MISSEDFRAME      (1<<17)
                    239: #define NV_RX_SUBSTRACT1       (1<<18)
                    240: #define NV_RX_ERROR1           (1<<23)
                    241: #define NV_RX_ERROR2           (1<<24)
                    242: #define NV_RX_ERROR3           (1<<25)
                    243: #define NV_RX_ERROR4           (1<<26)
                    244: #define NV_RX_CRCERR           (1<<27)
                    245: #define NV_RX_OVERFLOW         (1<<28)
                    246: #define NV_RX_FRAMINGERR       (1<<29)
                    247: #define NV_RX_ERROR            (1<<30)
                    248: #define NV_RX_AVAIL            (1<<31)
                    249: #define NV_RX_ERROR_MASK       (NV_RX_ERROR1|NV_RX_ERROR2|NV_RX_ERROR3|NV_RX_ERROR4|NV_RX_CRCERR|NV_RX_OVERFLOW|NV_RX_FRAMINGERR)
                    250: 
                    251: #define NV_RX2_CHECKSUMMASK    (0x1C000000)
                    252: #define NV_RX2_CHECKSUM_IP     (0x10000000)
                    253: #define NV_RX2_CHECKSUM_IP_TCP (0x14000000)
                    254: #define NV_RX2_CHECKSUM_IP_UDP (0x18000000)
                    255: #define NV_RX2_DESCRIPTORVALID (1<<29)
                    256: #define NV_RX2_SUBSTRACT1      (1<<25)
                    257: #define NV_RX2_ERROR1          (1<<18)
                    258: #define NV_RX2_ERROR2          (1<<19)
                    259: #define NV_RX2_ERROR3          (1<<20)
                    260: #define NV_RX2_ERROR4          (1<<21)
                    261: #define NV_RX2_CRCERR          (1<<22)
                    262: #define NV_RX2_OVERFLOW                (1<<23)
                    263: #define NV_RX2_FRAMINGERR      (1<<24)
                    264: /* error and avail are the same for both */
                    265: #define NV_RX2_ERROR           (1<<30)
                    266: #define NV_RX2_AVAIL           (1<<31)
                    267: #define NV_RX2_ERROR_MASK      (NV_RX2_ERROR1|NV_RX2_ERROR2|NV_RX2_ERROR3|NV_RX2_ERROR4|NV_RX2_CRCERR|NV_RX2_OVERFLOW|NV_RX2_FRAMINGERR)
                    268: 
                    269: #define NV_RX3_VLAN_TAG_PRESENT (1<<16)
                    270: #define NV_RX3_VLAN_TAG_MASK   (0x0000FFFF)
                    271: 
                    272: /* Miscellaneous hardware related defines */
                    273: #define NV_PCI_REGSZ_VER1      0x270
                    274: #define NV_PCI_REGSZ_VER2      0x2d4
                    275: #define NV_PCI_REGSZ_VER3      0x604
                    276: #define NV_PCI_REGSZ_MAX       0x604
                    277: 
                    278: /* various timeout delays: all in usec */
                    279: #define NV_TXRX_RESET_DELAY    4
                    280: #define NV_TXSTOP_DELAY1       10
                    281: #define NV_TXSTOP_DELAY1MAX    500000
                    282: #define NV_TXSTOP_DELAY2       100
                    283: #define NV_RXSTOP_DELAY1       10
                    284: #define NV_RXSTOP_DELAY1MAX    500000
                    285: #define NV_RXSTOP_DELAY2       100
                    286: #define NV_SETUP5_DELAY                5
                    287: #define NV_SETUP5_DELAYMAX     50000
                    288: #define NV_POWERUP_DELAY       5
                    289: #define NV_POWERUP_DELAYMAX    5000
                    290: #define NV_MIIBUSY_DELAY       50
                    291: #define NV_MIIPHY_DELAY        10
                    292: #define NV_MIIPHY_DELAYMAX     10000
                    293: #define NV_MAC_RESET_DELAY     64
                    294: 
                    295: #define NV_MSI_X_CAPABLE       0x0020
                    296: 
                    297: #define MII_READ       (-1)
                    298: 
                    299: struct forcedeth_private {
                    300:        struct pci_device *pci_dev;
                    301:        struct net_device *netdev;
                    302: 
                    303:        void *mmio_addr;
                    304: 
                    305:        u32 linkspeed;
                    306:        int duplex;
                    307: 
                    308:        int phyaddr;
                    309:        unsigned int phy_oui;
                    310:        unsigned int phy_rev;
                    311:        unsigned int phy_model;
                    312: 
                    313:        u16 gigabit;
                    314:        u32 mac_in_use;
                    315:        int mgmt_version;
                    316:        int mgmt_sema;
                    317: 
                    318:        /* rx specific fields */
                    319:        struct ring_desc *rx_ring;
                    320:        struct io_buffer *rx_iobuf[RX_RING_SIZE];
                    321:        int rx_curr;
                    322: 
                    323:        /* tx specific fields */
                    324:        struct ring_desc *tx_ring;
                    325:        struct io_buffer *tx_iobuf[TX_RING_SIZE];
                    326:        int tx_fill_ctr;
                    327:        int tx_curr;
                    328:        int tx_tail;
                    329: 
                    330:        /* flow control */
                    331:        u32 pause_flags;
                    332: 
                    333:        unsigned long driver_data;
                    334: };
                    335: 
                    336: enum {
                    337:        NvRegIrqStatus = 0x000,
                    338: #define NVREG_IRQSTAT_MIIEVENT 0x040
                    339: #define NVREG_IRQSTAT_MASK             0x83ff
                    340:        NvRegIrqMask = 0x004,
                    341: #define NVREG_IRQ_RX_ERROR             0x0001
                    342: #define NVREG_IRQ_RX                   0x0002
                    343: #define NVREG_IRQ_RX_NOBUF             0x0004
                    344: #define NVREG_IRQ_TX_ERR               0x0008
                    345: #define NVREG_IRQ_TX_OK                        0x0010
                    346: #define NVREG_IRQ_TIMER                        0x0020
                    347: #define NVREG_IRQ_LINK                 0x0040
                    348: #define NVREG_IRQ_RX_FORCED            0x0080
                    349: #define NVREG_IRQ_TX_FORCED            0x0100
                    350: #define NVREG_IRQ_RECOVER_ERROR                0x8200
                    351: #define NVREG_IRQMASK_THROUGHPUT       0x00df
                    352: #define NVREG_IRQMASK_CPU              0x0060
                    353: #define NVREG_IRQ_TX_ALL               (NVREG_IRQ_TX_ERR|NVREG_IRQ_TX_OK|NVREG_IRQ_TX_FORCED)
                    354: #define NVREG_IRQ_RX_ALL               (NVREG_IRQ_RX_ERROR|NVREG_IRQ_RX|NVREG_IRQ_RX_NOBUF|NVREG_IRQ_RX_FORCED)
                    355: #define NVREG_IRQ_OTHER                        (NVREG_IRQ_TIMER|NVREG_IRQ_LINK|NVREG_IRQ_RECOVER_ERROR)
                    356: 
                    357:        NvRegUnknownSetupReg6 = 0x008,
                    358: #define NVREG_UNKSETUP6_VAL            3
                    359: 
                    360: /*
                    361:  * NVREG_POLL_DEFAULT is the interval length of the timer source on the nic
                    362:  * NVREG_POLL_DEFAULT=97 would result in an interval length of 1 ms
                    363:  */
                    364:        NvRegPollingInterval = 0x00c,
                    365: #define NVREG_POLL_DEFAULT_THROUGHPUT  65535 /* backup tx cleanup if loop max reached */
                    366: #define NVREG_POLL_DEFAULT_CPU 13
                    367:        NvRegMSIMap0 = 0x020,
                    368:        NvRegMSIMap1 = 0x024,
                    369:        NvRegMSIIrqMask = 0x030,
                    370: #define NVREG_MSI_VECTOR_0_ENABLED 0x01
                    371:        NvRegMisc1 = 0x080,
                    372: #define NVREG_MISC1_PAUSE_TX   0x01
                    373: #define NVREG_MISC1_HD         0x02
                    374: #define NVREG_MISC1_FORCE      0x3b0f3c
                    375: 
                    376:        NvRegMacReset = 0x34,
                    377: #define NVREG_MAC_RESET_ASSERT 0x0F3
                    378:        NvRegTransmitterControl = 0x084,
                    379: #define NVREG_XMITCTL_START    0x01
                    380: #define NVREG_XMITCTL_MGMT_ST  0x40000000
                    381: #define NVREG_XMITCTL_SYNC_MASK                0x000f0000
                    382: #define NVREG_XMITCTL_SYNC_NOT_READY   0x0
                    383: #define NVREG_XMITCTL_SYNC_PHY_INIT    0x00040000
                    384: #define NVREG_XMITCTL_MGMT_SEMA_MASK   0x00000f00
                    385: #define NVREG_XMITCTL_MGMT_SEMA_FREE   0x0
                    386: #define NVREG_XMITCTL_HOST_SEMA_MASK   0x0000f000
                    387: #define NVREG_XMITCTL_HOST_SEMA_ACQ    0x0000f000
                    388: #define NVREG_XMITCTL_HOST_LOADED      0x00004000
                    389: #define NVREG_XMITCTL_TX_PATH_EN       0x01000000
                    390: #define NVREG_XMITCTL_DATA_START       0x00100000
                    391: #define NVREG_XMITCTL_DATA_READY       0x00010000
                    392: #define NVREG_XMITCTL_DATA_ERROR       0x00020000
                    393:        NvRegTransmitterStatus = 0x088,
                    394: #define NVREG_XMITSTAT_BUSY    0x01
                    395: 
                    396:        NvRegPacketFilterFlags = 0x8c,
                    397: #define NVREG_PFF_PAUSE_RX     0x08
                    398: #define NVREG_PFF_ALWAYS       0x7F0000
                    399: #define NVREG_PFF_PROMISC      0x80
                    400: #define NVREG_PFF_MYADDR       0x20
                    401: #define NVREG_PFF_LOOPBACK     0x10
                    402: 
                    403:        NvRegOffloadConfig = 0x90,
                    404: #define NVREG_OFFLOAD_HOMEPHY  0x601
                    405: #define NVREG_OFFLOAD_NORMAL   RX_NIC_BUFSIZE
                    406:        NvRegReceiverControl = 0x094,
                    407: #define NVREG_RCVCTL_START     0x01
                    408: #define NVREG_RCVCTL_RX_PATH_EN        0x01000000
                    409:        NvRegReceiverStatus = 0x98,
                    410: #define NVREG_RCVSTAT_BUSY     0x01
                    411: 
                    412:        NvRegSlotTime = 0x9c,
                    413: #define NVREG_SLOTTIME_LEGBF_ENABLED   0x80000000
                    414: #define NVREG_SLOTTIME_10_100_FULL     0x00007f00
                    415: #define NVREG_SLOTTIME_1000_FULL       0x0003ff00
                    416: #define NVREG_SLOTTIME_HALF            0x0000ff00
                    417: #define NVREG_SLOTTIME_DEFAULT         0x00007f00
                    418: #define NVREG_SLOTTIME_MASK            0x000000ff
                    419: 
                    420:        NvRegTxDeferral = 0xA0,
                    421: #define NVREG_TX_DEFERRAL_DEFAULT              0x15050f
                    422: #define NVREG_TX_DEFERRAL_RGMII_10_100         0x16070f
                    423: #define NVREG_TX_DEFERRAL_RGMII_1000           0x14050f
                    424: #define NVREG_TX_DEFERRAL_RGMII_STRETCH_10     0x16190f
                    425: #define NVREG_TX_DEFERRAL_RGMII_STRETCH_100    0x16300f
                    426: #define NVREG_TX_DEFERRAL_MII_STRETCH          0x152000
                    427:        NvRegRxDeferral = 0xA4,
                    428: #define NVREG_RX_DEFERRAL_DEFAULT      0x16
                    429:        NvRegMacAddrA = 0xA8,
                    430:        NvRegMacAddrB = 0xAC,
                    431:        NvRegMulticastAddrA = 0xB0,
                    432: #define NVREG_MCASTADDRA_FORCE 0x01
                    433:        NvRegMulticastAddrB = 0xB4,
                    434:        NvRegMulticastMaskA = 0xB8,
                    435: #define NVREG_MCASTMASKA_NONE          0xffffffff
                    436:        NvRegMulticastMaskB = 0xBC,
                    437: #define NVREG_MCASTMASKB_NONE          0xffff
                    438: 
                    439:        NvRegPhyInterface = 0xC0,
                    440: #define PHY_RGMII              0x10000000
                    441:        NvRegBackOffControl = 0xC4,
                    442: #define NVREG_BKOFFCTRL_DEFAULT                        0x70000000
                    443: #define NVREG_BKOFFCTRL_SEED_MASK              0x000003ff
                    444: #define NVREG_BKOFFCTRL_SELECT                 24
                    445: #define NVREG_BKOFFCTRL_GEAR                   12
                    446: 
                    447:        NvRegTxRingPhysAddr = 0x100,
                    448:        NvRegRxRingPhysAddr = 0x104,
                    449:        NvRegRingSizes = 0x108,
                    450: #define NVREG_RINGSZ_TXSHIFT 0
                    451: #define NVREG_RINGSZ_RXSHIFT 16
                    452:        NvRegTransmitPoll = 0x10c,
                    453: #define NVREG_TRANSMITPOLL_MAC_ADDR_REV        0x00008000
                    454:        NvRegLinkSpeed = 0x110,
                    455: #define NVREG_LINKSPEED_FORCE 0x10000
                    456: #define NVREG_LINKSPEED_10     1000
                    457: #define NVREG_LINKSPEED_100    100
                    458: #define NVREG_LINKSPEED_1000   50
                    459: #define NVREG_LINKSPEED_MASK   (0xFFF)
                    460:        NvRegUnknownSetupReg5 = 0x130,
                    461: #define NVREG_UNKSETUP5_BIT31  (1<<31)
                    462:        NvRegTxWatermark = 0x13c,
                    463: #define NVREG_TX_WM_DESC1_DEFAULT      0x0200010
                    464: #define NVREG_TX_WM_DESC2_3_DEFAULT    0x1e08000
                    465: #define NVREG_TX_WM_DESC2_3_1000       0xfe08000
                    466:        NvRegTxRxControl = 0x144,
                    467: #define NVREG_TXRXCTL_KICK     0x0001
                    468: #define NVREG_TXRXCTL_BIT1     0x0002
                    469: #define NVREG_TXRXCTL_BIT2     0x0004
                    470: #define NVREG_TXRXCTL_IDLE     0x0008
                    471: #define NVREG_TXRXCTL_RESET    0x0010
                    472: #define NVREG_TXRXCTL_RXCHECK  0x0400
                    473: #define NVREG_TXRXCTL_DESC_1   0
                    474: #define NVREG_TXRXCTL_DESC_2   0x002100
                    475: #define NVREG_TXRXCTL_DESC_3   0xc02200
                    476: #define NVREG_TXRXCTL_VLANSTRIP 0x00040
                    477: #define NVREG_TXRXCTL_VLANINS  0x00080
                    478:        NvRegTxRingPhysAddrHigh = 0x148,
                    479:        NvRegRxRingPhysAddrHigh = 0x14C,
                    480:        NvRegTxPauseFrame = 0x170,
                    481: #define NVREG_TX_PAUSEFRAME_DISABLE    0x0fff0080
                    482: #define NVREG_TX_PAUSEFRAME_ENABLE_V1  0x01800010
                    483: #define NVREG_TX_PAUSEFRAME_ENABLE_V2  0x056003f0
                    484: #define NVREG_TX_PAUSEFRAME_ENABLE_V3  0x09f00880
                    485:        NvRegTxPauseFrameLimit = 0x174,
                    486: #define NVREG_TX_PAUSEFRAMELIMIT_ENABLE        0x00010000
                    487:        NvRegMIIStatus = 0x180,
                    488: #define NVREG_MIISTAT_ERROR            0x0001
                    489: #define NVREG_MIISTAT_LINKCHANGE       0x0008
                    490: #define NVREG_MIISTAT_MASK_RW          0x0007
                    491: #define NVREG_MIISTAT_MASK_ALL         0x000f
                    492:        NvRegMIIMask = 0x184,
                    493: #define NVREG_MII_LINKCHANGE           0x0008
                    494: 
                    495:        NvRegAdapterControl = 0x188,
                    496: #define NVREG_ADAPTCTL_START   0x02
                    497: #define NVREG_ADAPTCTL_LINKUP  0x04
                    498: #define NVREG_ADAPTCTL_PHYVALID        0x40000
                    499: #define NVREG_ADAPTCTL_RUNNING 0x100000
                    500: #define NVREG_ADAPTCTL_PHYSHIFT        24
                    501:        NvRegMIISpeed = 0x18c,
                    502: #define NVREG_MIISPEED_BIT8    (1<<8)
                    503: #define NVREG_MIIDELAY 5
                    504:        NvRegMIIControl = 0x190,
                    505: #define NVREG_MIICTL_INUSE     0x08000
                    506: #define NVREG_MIICTL_WRITE     0x00400
                    507: #define NVREG_MIICTL_ADDRSHIFT 5
                    508:        NvRegMIIData = 0x194,
                    509:        NvRegTxUnicast = 0x1a0,
                    510:        NvRegTxMulticast = 0x1a4,
                    511:        NvRegTxBroadcast = 0x1a8,
                    512:        NvRegWakeUpFlags = 0x200,
                    513: #define NVREG_WAKEUPFLAGS_VAL          0x7770
                    514: #define NVREG_WAKEUPFLAGS_BUSYSHIFT    24
                    515: #define NVREG_WAKEUPFLAGS_ENABLESHIFT  16
                    516: #define NVREG_WAKEUPFLAGS_D3SHIFT      12
                    517: #define NVREG_WAKEUPFLAGS_D2SHIFT      8
                    518: #define NVREG_WAKEUPFLAGS_D1SHIFT      4
                    519: #define NVREG_WAKEUPFLAGS_D0SHIFT      0
                    520: #define NVREG_WAKEUPFLAGS_ACCEPT_MAGPAT                0x01
                    521: #define NVREG_WAKEUPFLAGS_ACCEPT_WAKEUPPAT     0x02
                    522: #define NVREG_WAKEUPFLAGS_ACCEPT_LINKCHANGE    0x04
                    523: #define NVREG_WAKEUPFLAGS_ENABLE       0x1111
                    524: 
                    525:        NvRegMgmtUnitGetVersion = 0x204,
                    526: #define NVREG_MGMTUNITGETVERSION       0x01
                    527:        NvRegMgmtUnitVersion = 0x208,
                    528: #define NVREG_MGMTUNITVERSION          0x08
                    529:        NvRegPowerCap = 0x268,
                    530: #define NVREG_POWERCAP_D3SUPP  (1<<30)
                    531: #define NVREG_POWERCAP_D2SUPP  (1<<26)
                    532: #define NVREG_POWERCAP_D1SUPP  (1<<25)
                    533:        NvRegPowerState = 0x26c,
                    534: #define NVREG_POWERSTATE_POWEREDUP     0x8000
                    535: #define NVREG_POWERSTATE_VALID         0x0100
                    536: #define NVREG_POWERSTATE_MASK          0x0003
                    537: #define NVREG_POWERSTATE_D0            0x0000
                    538: #define NVREG_POWERSTATE_D1            0x0001
                    539: #define NVREG_POWERSTATE_D2            0x0002
                    540: #define NVREG_POWERSTATE_D3            0x0003
                    541:        NvRegMgmtUnitControl = 0x278,
                    542: #define NVREG_MGMTUNITCONTROL_INUSE    0x20000
                    543:        NvRegTxCnt = 0x280,
                    544:        NvRegTxZeroReXmt = 0x284,
                    545:        NvRegTxOneReXmt = 0x288,
                    546:        NvRegTxManyReXmt = 0x28c,
                    547:        NvRegTxLateCol = 0x290,
                    548:        NvRegTxUnderflow = 0x294,
                    549:        NvRegTxLossCarrier = 0x298,
                    550:        NvRegTxExcessDef = 0x29c,
                    551:        NvRegTxRetryErr = 0x2a0,
                    552:        NvRegRxFrameErr = 0x2a4,
                    553:        NvRegRxExtraByte = 0x2a8,
                    554:        NvRegRxLateCol = 0x2ac,
                    555:        NvRegRxRunt = 0x2b0,
                    556:        NvRegRxFrameTooLong = 0x2b4,
                    557:        NvRegRxOverflow = 0x2b8,
                    558:        NvRegRxFCSErr = 0x2bc,
                    559:        NvRegRxFrameAlignErr = 0x2c0,
                    560:        NvRegRxLenErr = 0x2c4,
                    561:        NvRegRxUnicast = 0x2c8,
                    562:        NvRegRxMulticast = 0x2cc,
                    563:        NvRegRxBroadcast = 0x2d0,
                    564:        NvRegTxDef = 0x2d4,
                    565:        NvRegTxFrame = 0x2d8,
                    566:        NvRegRxCnt = 0x2dc,
                    567:        NvRegTxPause = 0x2e0,
                    568:        NvRegRxPause = 0x2e4,
                    569:        NvRegRxDropFrame = 0x2e8,
                    570:        NvRegVlanControl = 0x300,
                    571: #define NVREG_VLANCONTROL_ENABLE       0x2000
                    572:        NvRegMSIXMap0 = 0x3e0,
                    573:        NvRegMSIXMap1 = 0x3e4,
                    574:        NvRegMSIXIrqStatus = 0x3f0,
                    575: 
                    576:        NvRegPowerState2 = 0x600,
                    577: #define NVREG_POWERSTATE2_POWERUP_MASK         0x0F15
                    578: #define NVREG_POWERSTATE2_POWERUP_REV_A3       0x0001
                    579: #define NVREG_POWERSTATE2_PHY_RESET            0x0004
                    580: #define NVREG_POWERSTATE2_GATE_CLOCKS          0x0F00
                    581: };
                    582: 
                    583: enum {
                    584:        NV_OPTIMIZATION_MODE_THROUGHPUT,
                    585:        NV_OPTIMIZATION_MODE_CPU,
                    586:        NV_OPTIMIZATION_MODE_DYNAMIC
                    587: };
                    588: 
                    589: enum {
                    590:        NV_CROSSOVER_DETECTION_DISABLED,
                    591:        NV_CROSSOVER_DETECTION_ENABLED
                    592: };
                    593: 
                    594: 
                    595: #define NV_SETUP_RX_RING       0x01
                    596: #define NV_SETUP_TX_RING       0x02
                    597: 
                    598: #define NV_RESTART_TX          0x1
                    599: #define NV_RESTART_RX          0x2
                    600: 
                    601: #endif /* _FORCEDETH_H_ */

unix.superglobalmegacorp.com

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