[BACK]Return to ixgb_hw.h CVS log [TXT][DIR] Up to [local] / sys / dev / pci

Annotation of sys/dev/pci/ixgb_hw.h, Revision 1.1

1.1     ! nbrk        1: /*******************************************************************************
        !             2:
        !             3:   Copyright (c) 2001-2005, Intel Corporation
        !             4:   All rights reserved.
        !             5:
        !             6:   Redistribution and use in source and binary forms, with or without
        !             7:   modification, are permitted provided that the following conditions are met:
        !             8:
        !             9:    1. Redistributions of source code must retain the above copyright notice,
        !            10:       this list of conditions and the following disclaimer.
        !            11:
        !            12:    2. Redistributions in binary form must reproduce the above copyright
        !            13:       notice, this list of conditions and the following disclaimer in the
        !            14:       documentation and/or other materials provided with the distribution.
        !            15:
        !            16:    3. Neither the name of the Intel Corporation nor the names of its
        !            17:       contributors may be used to endorse or promote products derived from
        !            18:       this software without specific prior written permission.
        !            19:
        !            20:   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
        !            21:   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            22:   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            23:   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
        !            24:   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
        !            25:   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
        !            26:   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
        !            27:   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
        !            28:   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
        !            29:   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
        !            30:   POSSIBILITY OF SUCH DAMAGE.
        !            31:
        !            32: *******************************************************************************/
        !            33:
        !            34: /* $OpenBSD: ixgb_hw.h,v 1.1 2005/11/14 23:25:43 brad Exp $ */
        !            35:
        !            36: #ifndef _IXGB_HW_H_
        !            37: #define _IXGB_HW_H_
        !            38:
        !            39: #include <dev/pci/if_ixgb_osdep.h>
        !            40:
        !            41: /* Enums */
        !            42: typedef enum {
        !            43:        ixgb_mac_unknown = 0,
        !            44:        ixgb_82597,
        !            45:        ixgb_num_macs
        !            46: } ixgb_mac_type;
        !            47:
        !            48: /* Types of physical layer modules */
        !            49: typedef enum {
        !            50:        ixgb_phy_type_unknown = 0,
        !            51:        ixgb_phy_type_g6005,    /* 850nm, MM fiber, XPAK transceiver */
        !            52:        ixgb_phy_type_g6104,    /* 1310nm, SM fiber, XPAK transceiver */
        !            53:        ixgb_phy_type_txn17201, /* 850nm, MM fiber, XPAK transceiver */
        !            54:        ixgb_phy_type_txn17401  /* 1310nm, SM fiber, XENPAK transceiver */
        !            55: } ixgb_phy_type;
        !            56:
        !            57: /* XPAK transceiver vendors, for the SR adapters */
        !            58: typedef enum {
        !            59:        ixgb_xpak_vendor_intel,
        !            60:        ixgb_xpak_vendor_infineon
        !            61: } ixgb_xpak_vendor;
        !            62:
        !            63: /* Media Types */
        !            64: typedef enum {
        !            65:        ixgb_media_type_unknown = 0,
        !            66:        ixgb_media_type_fiber = 1,
        !            67:        ixgb_media_type_copper = 2,
        !            68:        ixgb_num_media_types
        !            69: } ixgb_media_type;
        !            70:
        !            71: /* Flow Control Settings */
        !            72: typedef enum {
        !            73:        ixgb_fc_none = 0,
        !            74:        ixgb_fc_rx_pause = 1,
        !            75:        ixgb_fc_tx_pause = 2,
        !            76:        ixgb_fc_full = 3,
        !            77:        ixgb_fc_default = 0xFF
        !            78: } ixgb_fc_type;
        !            79:
        !            80: /* PCI bus types */
        !            81: typedef enum {
        !            82:        ixgb_bus_type_unknown = 0,
        !            83:        ixgb_bus_type_pci,
        !            84:        ixgb_bus_type_pcix
        !            85: } ixgb_bus_type;
        !            86:
        !            87: /* PCI bus speeds */
        !            88: typedef enum {
        !            89:        ixgb_bus_speed_unknown = 0,
        !            90:        ixgb_bus_speed_33,
        !            91:        ixgb_bus_speed_66,
        !            92:        ixgb_bus_speed_100,
        !            93:        ixgb_bus_speed_133,
        !            94:        ixgb_bus_speed_reserved
        !            95: } ixgb_bus_speed;
        !            96:
        !            97: /* PCI bus widths */
        !            98: typedef enum {
        !            99:        ixgb_bus_width_unknown = 0,
        !           100:        ixgb_bus_width_32,
        !           101:        ixgb_bus_width_64
        !           102: } ixgb_bus_width;
        !           103:
        !           104: #define IXGB_ETH_LENGTH_OF_ADDRESS   6
        !           105:
        !           106: #define IXGB_EEPROM_SIZE    64 /* Size in words */
        !           107:
        !           108: #define SPEED_10000  10000
        !           109: #define FULL_DUPLEX  2
        !           110:
        !           111: #define MIN_NUMBER_OF_DESCRIPTORS       8
        !           112: #define MAX_NUMBER_OF_DESCRIPTORS  0xFFF8      /* 13 bits in RDLEN/TDLEN, 128B
        !           113:                                              * aligned */
        !           114:
        !           115: #define IXGB_DELAY_BEFORE_RESET        10      /* allow 10ms after idling
        !           116:                                              * rx/tx units */
        !           117: #define IXGB_DELAY_AFTER_RESET          1      /* allow 1ms after the reset */
        !           118: #define IXGB_DELAY_AFTER_EE_RESET      10      /* allow 10ms after the EEPROM
        !           119:                                              * reset */
        !           120:
        !           121: #define IXGB_DELAY_USECS_AFTER_LINK_RESET    13        /* allow 13 microseconds after
        !           122:                                                  * the reset */
        !           123:                                           /* NOTE: this is MICROSECONDS */
        !           124: #define MAX_RESET_ITERATIONS            8      /* number of iterations to get
        !           125:                                              * things right */
        !           126:
        !           127: /* General Registers */
        !           128: #define IXGB_CTRL0   0x00000   /* Device Control Register 0 - RW */
        !           129: #define IXGB_CTRL1   0x00008   /* Device Control Register 1 - RW */
        !           130: #define IXGB_STATUS  0x00010   /* Device Status Register - RO */
        !           131: #define IXGB_EECD    0x00018   /* EEPROM/Flash Control/Data Register - RW */
        !           132: #define IXGB_MFRMS   0x00020   /* Maximum Frame Size - RW */
        !           133:
        !           134: /* Interrupt */
        !           135: #define IXGB_ICR     0x00080   /* Interrupt Cause Read - R/clr */
        !           136: #define IXGB_ICS     0x00088   /* Interrupt Cause Set - RW */
        !           137: #define IXGB_IMS     0x00090   /* Interrupt Mask Set/Read - RW */
        !           138: #define IXGB_IMC     0x00098   /* Interrupt Mask Clear - WO */
        !           139:
        !           140: /* Receive */
        !           141: #define IXGB_RCTL    0x00100   /* RX Control - RW */
        !           142: #define IXGB_FCRTL   0x00108   /* Flow Control Receive Threshold Low - RW */
        !           143: #define IXGB_FCRTH   0x00110   /* Flow Control Receive Threshold High - RW */
        !           144: #define IXGB_RDBAL   0x00118   /* RX Descriptor Base Low - RW */
        !           145: #define IXGB_RDBAH   0x0011C   /* RX Descriptor Base High - RW */
        !           146: #define IXGB_RDLEN   0x00120   /* RX Descriptor Length - RW */
        !           147: #define IXGB_RDH     0x00128   /* RX Descriptor Head - RW */
        !           148: #define IXGB_RDT     0x00130   /* RX Descriptor Tail - RW */
        !           149: #define IXGB_RDTR    0x00138   /* RX Delay Timer Ring - RW */
        !           150: #define IXGB_RXDCTL  0x00140   /* Receive Descriptor Control - RW */
        !           151: #define IXGB_RAIDC   0x00148   /* Receive Adaptive Interrupt Delay Ctrl RW */
        !           152: #define IXGB_RXCSUM  0x00158   /* Receive Checksum Control - RW */
        !           153: #define IXGB_RA      0x00180   /* Receive Address Array Base - RW */
        !           154: #define IXGB_RAL     0x00180   /* Receive Address Low [0:15] - RW */
        !           155: #define IXGB_RAH     0x00184   /* Receive Address High [0:15] - RW */
        !           156: #define IXGB_MTA     0x00200   /* Multicast Table Array [0:127] - RW */
        !           157: #define IXGB_VFTA    0x00400   /* VLAN Filter Table Array [0:127] - RW */
        !           158: #define IXGB_REQ_RX_DESCRIPTOR_MULTIPLE 8
        !           159:
        !           160: /* Transmit */
        !           161: #define IXGB_TCTL    0x00600   /* TX Control - RW */
        !           162: #define IXGB_TDBAL   0x00608   /* TX Descriptor Base Low - RW */
        !           163: #define IXGB_TDBAH   0x0060C   /* TX Descriptor Base High - RW */
        !           164: #define IXGB_TDLEN   0x00610   /* TX Descriptor Length - RW */
        !           165: #define IXGB_TDH     0x00618   /* TX Descriptor Head - RW */
        !           166: #define IXGB_TDT     0x00620   /* TX Descriptor Tail - RW */
        !           167: #define IXGB_TIDV    0x00628   /* TX Interrupt Delay Value - RW */
        !           168: #define IXGB_TXDCTL  0x00630   /* Transmit Descriptor Control - RW */
        !           169: #define IXGB_TSPMT   0x00638   /* TCP Segmentation PAD & Min Threshold - RW */
        !           170: #define IXGB_PAP     0x00640   /* Pause and Pace - RW */
        !           171: #define IXGB_REQ_TX_DESCRIPTOR_MULTIPLE 8
        !           172:
        !           173: /* Physical */
        !           174: #define IXGB_PCSC1   0x00700   /* PCS Control 1 - RW */
        !           175: #define IXGB_PCSC2   0x00708   /* PCS Control 2 - RW */
        !           176: #define IXGB_PCSS1   0x00710   /* PCS Status 1 - RO */
        !           177: #define IXGB_PCSS2   0x00718   /* PCS Status 2 - RO */
        !           178: #define IXGB_XPCSS   0x00720   /* 10GBASE-X PCS Status (or XGXS Lane Status) -
        !           179:                                 * RO */
        !           180: #define IXGB_UCCR    0x00728   /* Unilink Circuit Control Register */
        !           181: #define IXGB_XPCSTC  0x00730   /* 10GBASE-X PCS Test Control */
        !           182: #define IXGB_MACA    0x00738   /* MDI Autoscan Command and Address - RW */
        !           183: #define IXGB_APAE    0x00740   /* Autoscan PHY Address Enable - RW */
        !           184: #define IXGB_ARD     0x00748   /* Autoscan Read Data - RO */
        !           185: #define IXGB_AIS     0x00750   /* Autoscan Interrupt Status - RO */
        !           186: #define IXGB_MSCA    0x00758   /* MDI Single Command and Address - RW */
        !           187: #define IXGB_MSRWD   0x00760   /* MDI Single Read and Write Data - RW, RO */
        !           188:
        !           189: /* Wake-up */
        !           190: #define IXGB_WUFC    0x00808   /* Wake Up Filter Control - RW */
        !           191: #define IXGB_WUS     0x00810   /* Wake Up Status - RO */
        !           192: #define IXGB_FFLT    0x01000   /* Flexible Filter Length Table - RW */
        !           193: #define IXGB_FFMT    0x01020   /* Flexible Filter Mask Table - RW */
        !           194: #define IXGB_FTVT    0x01420   /* Flexible Filter Value Table - RW */
        !           195:
        !           196: /* Statistics */
        !           197: #define IXGB_TPRL    0x02000   /* Total Packets Received (Low) */
        !           198: #define IXGB_TPRH    0x02004   /* Total Packets Received (High) */
        !           199: #define IXGB_GPRCL   0x02008   /* Good Packets Received Count (Low) */
        !           200: #define IXGB_GPRCH   0x0200C   /* Good Packets Received Count (High) */
        !           201: #define IXGB_BPRCL   0x02010   /* Broadcast Packets Received Count (Low) */
        !           202: #define IXGB_BPRCH   0x02014   /* Broadcast Packets Received Count (High) */
        !           203: #define IXGB_MPRCL   0x02018   /* Multicast Packets Received Count (Low) */
        !           204: #define IXGB_MPRCH   0x0201C   /* Multicast Packets Received Count (High) */
        !           205: #define IXGB_UPRCL   0x02020   /* Unicast Packets Received Count (Low) */
        !           206: #define IXGB_UPRCH   0x02024   /* Unicast Packets Received Count (High) */
        !           207: #define IXGB_VPRCL   0x02028   /* VLAN Packets Received Count (Low) */
        !           208: #define IXGB_VPRCH   0x0202C   /* VLAN Packets Received Count (High) */
        !           209: #define IXGB_JPRCL   0x02030   /* Jumbo Packets Received Count (Low) */
        !           210: #define IXGB_JPRCH   0x02034   /* Jumbo Packets Received Count (High) */
        !           211: #define IXGB_GORCL   0x02038   /* Good Octets Received Count (Low) */
        !           212: #define IXGB_GORCH   0x0203C   /* Good Octets Received Count (High) */
        !           213: #define IXGB_TORL    0x02040   /* Total Octets Received (Low) */
        !           214: #define IXGB_TORH    0x02044   /* Total Octets Received (High) */
        !           215: #define IXGB_RNBC    0x02048   /* Receive No Buffers Count */
        !           216: #define IXGB_RUC     0x02050   /* Receive Undersize Count */
        !           217: #define IXGB_ROC     0x02058   /* Receive Oversize Count */
        !           218: #define IXGB_RLEC    0x02060   /* Receive Length Error Count */
        !           219: #define IXGB_CRCERRS 0x02068   /* CRC Error Count */
        !           220: #define IXGB_ICBC    0x02070   /* Illegal control byte in mid-packet Count */
        !           221: #define IXGB_ECBC    0x02078   /* Error Control byte in mid-packet Count */
        !           222: #define IXGB_MPC     0x02080   /* Missed Packets Count */
        !           223: #define IXGB_TPTL    0x02100   /* Total Packets Transmitted (Low) */
        !           224: #define IXGB_TPTH    0x02104   /* Total Packets Transmitted (High) */
        !           225: #define IXGB_GPTCL   0x02108   /* Good Packets Transmitted Count (Low) */
        !           226: #define IXGB_GPTCH   0x0210C   /* Good Packets Transmitted Count (High) */
        !           227: #define IXGB_BPTCL   0x02110   /* Broadcast Packets Transmitted Count (Low) */
        !           228: #define IXGB_BPTCH   0x02114   /* Broadcast Packets Transmitted Count (High) */
        !           229: #define IXGB_MPTCL   0x02118   /* Multicast Packets Transmitted Count (Low) */
        !           230: #define IXGB_MPTCH   0x0211C   /* Multicast Packets Transmitted Count (High) */
        !           231: #define IXGB_UPTCL   0x02120   /* Unicast Packets Transmitted Count (Low) */
        !           232: #define IXGB_UPTCH   0x02124   /* Unicast Packets Transmitted Count (High) */
        !           233: #define IXGB_VPTCL   0x02128   /* VLAN Packets Transmitted Count (Low) */
        !           234: #define IXGB_VPTCH   0x0212C   /* VLAN Packets Transmitted Count (High) */
        !           235: #define IXGB_JPTCL   0x02130   /* Jumbo Packets Transmitted Count (Low) */
        !           236: #define IXGB_JPTCH   0x02134   /* Jumbo Packets Transmitted Count (High) */
        !           237: #define IXGB_GOTCL   0x02138   /* Good Octets Transmitted Count (Low) */
        !           238: #define IXGB_GOTCH   0x0213C   /* Good Octets Transmitted Count (High) */
        !           239: #define IXGB_TOTL    0x02140   /* Total Octets Transmitted Count (Low) */
        !           240: #define IXGB_TOTH    0x02144   /* Total Octets Transmitted Count (High) */
        !           241: #define IXGB_DC      0x02148   /* Defer Count */
        !           242: #define IXGB_PLT64C  0x02150   /* Packet Transmitted was < 64 bytes Count */
        !           243: #define IXGB_TSCTC   0x02170   /* TCP Segmentation Context Transmitted Count */
        !           244: #define IXGB_TSCTFC  0x02178   /* TCP Segmentation Context Tx Fail Count */
        !           245: #define IXGB_IBIC    0x02180   /* Illegal byte during Idle stream count */
        !           246: #define IXGB_RFC     0x02188   /* Remote Fault Count */
        !           247: #define IXGB_LFC     0x02190   /* Local Fault Count */
        !           248: #define IXGB_PFRC    0x02198   /* Pause Frame Receive Count */
        !           249: #define IXGB_PFTC    0x021A0   /* Pause Frame Transmit Count */
        !           250: #define IXGB_MCFRC   0x021A8   /* MAC Control Frames (non-Pause) Received
        !           251:                                 * Count */
        !           252: #define IXGB_MCFTC   0x021B0   /* MAC Control Frames (non-Pause) Transmitted
        !           253:                                 * Count */
        !           254: #define IXGB_XONRXC  0x021B8   /* XON Received Count */
        !           255: #define IXGB_XONTXC  0x021C0   /* XON Transmitted Count */
        !           256: #define IXGB_XOFFRXC 0x021C8   /* XOFF Received Count */
        !           257: #define IXGB_XOFFTXC 0x021D0   /* XOFF Transmitted Count */
        !           258: #define IXGB_RJC     0x021D8   /* Receive Jabber Count */
        !           259:
        !           260:
        !           261: /* CTRL0 Bit Masks */
        !           262: #define IXGB_CTRL0_LRST     0x00000008
        !           263: #define IXGB_CTRL0_JFE      0x00000010
        !           264: #define IXGB_CTRL0_XLE      0x00000020
        !           265: #define IXGB_CTRL0_MDCS     0x00000040
        !           266: #define IXGB_CTRL0_CMDC     0x00000080
        !           267: #define IXGB_CTRL0_SDP0     0x00040000
        !           268: #define IXGB_CTRL0_SDP1     0x00080000
        !           269: #define IXGB_CTRL0_SDP2     0x00100000
        !           270: #define IXGB_CTRL0_SDP3     0x00200000
        !           271: #define IXGB_CTRL0_SDP0_DIR 0x00400000
        !           272: #define IXGB_CTRL0_SDP1_DIR 0x00800000
        !           273: #define IXGB_CTRL0_SDP2_DIR 0x01000000
        !           274: #define IXGB_CTRL0_SDP3_DIR 0x02000000
        !           275: #define IXGB_CTRL0_RST      0x04000000
        !           276: #define IXGB_CTRL0_RPE      0x08000000
        !           277: #define IXGB_CTRL0_TPE      0x10000000
        !           278: #define IXGB_CTRL0_VME      0x40000000
        !           279:
        !           280: /* CTRL1 Bit Masks */
        !           281: #define IXGB_CTRL1_GPI0_EN     0x00000001
        !           282: #define IXGB_CTRL1_GPI1_EN     0x00000002
        !           283: #define IXGB_CTRL1_GPI2_EN     0x00000004
        !           284: #define IXGB_CTRL1_GPI3_EN     0x00000008
        !           285: #define IXGB_CTRL1_SDP4        0x00000010
        !           286: #define IXGB_CTRL1_SDP5        0x00000020
        !           287: #define IXGB_CTRL1_SDP6        0x00000040
        !           288: #define IXGB_CTRL1_SDP7        0x00000080
        !           289: #define IXGB_CTRL1_SDP4_DIR    0x00000100
        !           290: #define IXGB_CTRL1_SDP5_DIR    0x00000200
        !           291: #define IXGB_CTRL1_SDP6_DIR    0x00000400
        !           292: #define IXGB_CTRL1_SDP7_DIR    0x00000800
        !           293: #define IXGB_CTRL1_EE_RST      0x00002000
        !           294: #define IXGB_CTRL1_RO_DIS      0x00020000
        !           295: #define IXGB_CTRL1_PCIXHM_MASK 0x00C00000
        !           296: #define IXGB_CTRL1_PCIXHM_1_2  0x00000000
        !           297: #define IXGB_CTRL1_PCIXHM_5_8  0x00400000
        !           298: #define IXGB_CTRL1_PCIXHM_3_4  0x00800000
        !           299: #define IXGB_CTRL1_PCIXHM_7_8  0x00C00000
        !           300:
        !           301: /* STATUS Bit Masks */
        !           302: #define IXGB_STATUS_LU            0x00000002
        !           303: #define IXGB_STATUS_AIP           0x00000004
        !           304: #define IXGB_STATUS_TXOFF         0x00000010
        !           305: #define IXGB_STATUS_XAUIME        0x00000020
        !           306: #define IXGB_STATUS_RES           0x00000040
        !           307: #define IXGB_STATUS_RIS           0x00000080
        !           308: #define IXGB_STATUS_RIE           0x00000100
        !           309: #define IXGB_STATUS_RLF           0x00000200
        !           310: #define IXGB_STATUS_RRF           0x00000400
        !           311: #define IXGB_STATUS_PCI_SPD       0x00000800
        !           312: #define IXGB_STATUS_BUS64         0x00001000
        !           313: #define IXGB_STATUS_PCIX_MODE     0x00002000
        !           314: #define IXGB_STATUS_PCIX_SPD_MASK 0x0000C000
        !           315: #define IXGB_STATUS_PCIX_SPD_66   0x00000000
        !           316: #define IXGB_STATUS_PCIX_SPD_100  0x00004000
        !           317: #define IXGB_STATUS_PCIX_SPD_133  0x00008000
        !           318: #define IXGB_STATUS_REV_ID_MASK   0x000F0000
        !           319: #define IXGB_STATUS_REV_ID_SHIFT  16
        !           320:
        !           321: /* EECD Bit Masks */
        !           322: #define IXGB_EECD_SK       0x00000001
        !           323: #define IXGB_EECD_CS       0x00000002
        !           324: #define IXGB_EECD_DI       0x00000004
        !           325: #define IXGB_EECD_DO       0x00000008
        !           326: #define IXGB_EECD_FWE_MASK 0x00000030
        !           327: #define IXGB_EECD_FWE_DIS  0x00000010
        !           328: #define IXGB_EECD_FWE_EN   0x00000020
        !           329:
        !           330: /* MFRMS */
        !           331: #define IXGB_MFRMS_SHIFT 16
        !           332:
        !           333: /* Interrupt Register Bit Masks (used for ICR, ICS, IMS, and IMC) */
        !           334: #define IXGB_INT_TXDW     0x00000001
        !           335: #define IXGB_INT_TXQE     0x00000002
        !           336: #define IXGB_INT_LSC      0x00000004
        !           337: #define IXGB_INT_RXSEQ    0x00000008
        !           338: #define IXGB_INT_RXDMT0   0x00000010
        !           339: #define IXGB_INT_RXO      0x00000040
        !           340: #define IXGB_INT_RXT0     0x00000080
        !           341: #define IXGB_INT_AUTOSCAN 0x00000200
        !           342: #define IXGB_INT_GPI0     0x00000800
        !           343: #define IXGB_INT_GPI1     0x00001000
        !           344: #define IXGB_INT_GPI2     0x00002000
        !           345: #define IXGB_INT_GPI3     0x00004000
        !           346:
        !           347: /* RCTL Bit Masks */
        !           348: #define IXGB_RCTL_RXEN        0x00000002
        !           349: #define IXGB_RCTL_SBP         0x00000004
        !           350: #define IXGB_RCTL_UPE         0x00000008
        !           351: #define IXGB_RCTL_MPE         0x00000010
        !           352: #define IXGB_RCTL_RDMTS_MASK  0x00000300
        !           353: #define IXGB_RCTL_RDMTS_1_2   0x00000000
        !           354: #define IXGB_RCTL_RDMTS_1_4   0x00000100
        !           355: #define IXGB_RCTL_RDMTS_1_8   0x00000200
        !           356: #define IXGB_RCTL_MO_MASK     0x00003000
        !           357: #define IXGB_RCTL_MO_47_36    0x00000000
        !           358: #define IXGB_RCTL_MO_46_35    0x00001000
        !           359: #define IXGB_RCTL_MO_45_34    0x00002000
        !           360: #define IXGB_RCTL_MO_43_32    0x00003000
        !           361: #define IXGB_RCTL_MO_SHIFT    12
        !           362: #define IXGB_RCTL_BAM         0x00008000
        !           363: #define IXGB_RCTL_BSIZE_MASK  0x00030000
        !           364: #define IXGB_RCTL_BSIZE_2048  0x00000000
        !           365: #define IXGB_RCTL_BSIZE_4096  0x00010000
        !           366: #define IXGB_RCTL_BSIZE_8192  0x00020000
        !           367: #define IXGB_RCTL_BSIZE_16384 0x00030000
        !           368: #define IXGB_RCTL_VFE         0x00040000
        !           369: #define IXGB_RCTL_CFIEN       0x00080000
        !           370: #define IXGB_RCTL_CFI         0x00100000
        !           371: #define IXGB_RCTL_RPDA_MASK   0x00600000
        !           372: #define IXGB_RCTL_RPDA_MC_MAC 0x00000000
        !           373: #define IXGB_RCTL_MC_ONLY     0x00400000
        !           374: #define IXGB_RCTL_CFF         0x00800000
        !           375: #define IXGB_RCTL_SECRC       0x04000000
        !           376: #define IXGB_RDT_FPDB         0x80000000
        !           377:
        !           378: #define IXGB_RCTL_IDLE_RX_UNIT 0
        !           379:
        !           380: /* FCRTL Bit Masks */
        !           381: #define IXGB_FCRTL_XONE       0x80000000
        !           382:
        !           383: /* RXDCTL Bit Masks */
        !           384: #define IXGB_RXDCTL_PTHRESH_MASK  0x000001FF
        !           385: #define IXGB_RXDCTL_PTHRESH_SHIFT 0
        !           386: #define IXGB_RXDCTL_HTHRESH_MASK  0x0003FE00
        !           387: #define IXGB_RXDCTL_HTHRESH_SHIFT 9
        !           388: #define IXGB_RXDCTL_WTHRESH_MASK  0x07FC0000
        !           389: #define IXGB_RXDCTL_WTHRESH_SHIFT 18
        !           390:
        !           391: /* RAIDC Bit Masks */
        !           392: #define IXGB_RAIDC_HIGHTHRS_MASK 0x0000003F
        !           393: #define IXGB_RAIDC_DELAY_MASK    0x000FF800
        !           394: #define IXGB_RAIDC_DELAY_SHIFT   11
        !           395: #define IXGB_RAIDC_POLL_MASK     0x1FF00000
        !           396: #define IXGB_RAIDC_POLL_SHIFT    20
        !           397: #define IXGB_RAIDC_RXT_GATE      0x40000000
        !           398: #define IXGB_RAIDC_EN            0x80000000
        !           399:
        !           400: #define IXGB_RAIDC_POLL_1000_INTERRUPTS_PER_SECOND      1220
        !           401: #define IXGB_RAIDC_POLL_5000_INTERRUPTS_PER_SECOND      244
        !           402: #define IXGB_RAIDC_POLL_10000_INTERRUPTS_PER_SECOND     122
        !           403: #define IXGB_RAIDC_POLL_20000_INTERRUPTS_PER_SECOND     61
        !           404:
        !           405: /* RXCSUM Bit Masks */
        !           406: #define IXGB_RXCSUM_IPOFL 0x00000100
        !           407: #define IXGB_RXCSUM_TUOFL 0x00000200
        !           408:
        !           409: /* RAH Bit Masks */
        !           410: #define IXGB_RAH_ASEL_MASK 0x00030000
        !           411: #define IXGB_RAH_ASEL_DEST 0x00000000
        !           412: #define IXGB_RAH_ASEL_SRC  0x00010000
        !           413: #define IXGB_RAH_AV        0x80000000
        !           414:
        !           415: /* TCTL Bit Masks */
        !           416: #define IXGB_TCTL_TCE  0x00000001
        !           417: #define IXGB_TCTL_TXEN 0x00000002
        !           418: #define IXGB_TCTL_TPDE 0x00000004
        !           419:
        !           420: #define IXGB_TCTL_IDLE_TX_UNIT  0
        !           421:
        !           422: /* TXDCTL Bit Masks */
        !           423: #define IXGB_TXDCTL_PTHRESH_MASK  0x0000007F
        !           424: #define IXGB_TXDCTL_HTHRESH_MASK  0x00007F00
        !           425: #define IXGB_TXDCTL_HTHRESH_SHIFT 8
        !           426: #define IXGB_TXDCTL_WTHRESH_MASK  0x007F0000
        !           427: #define IXGB_TXDCTL_WTHRESH_SHIFT 16
        !           428:
        !           429: /* TSPMT Bit Masks */
        !           430: #define IXGB_TSPMT_TSMT_MASK   0x0000FFFF
        !           431: #define IXGB_TSPMT_TSPBP_MASK  0xFFFF0000
        !           432: #define IXGB_TSPMT_TSPBP_SHIFT 16
        !           433:
        !           434: /* PAP Bit Masks */
        !           435: #define IXGB_PAP_TXPC_MASK 0x0000FFFF
        !           436: #define IXGB_PAP_TXPV_MASK 0x000F0000
        !           437: #define IXGB_PAP_TXPV_10G  0x00000000
        !           438: #define IXGB_PAP_TXPV_1G   0x00010000
        !           439: #define IXGB_PAP_TXPV_2G   0x00020000
        !           440: #define IXGB_PAP_TXPV_3G   0x00030000
        !           441: #define IXGB_PAP_TXPV_4G   0x00040000
        !           442: #define IXGB_PAP_TXPV_5G   0x00050000
        !           443: #define IXGB_PAP_TXPV_6G   0x00060000
        !           444: #define IXGB_PAP_TXPV_7G   0x00070000
        !           445: #define IXGB_PAP_TXPV_8G   0x00080000
        !           446: #define IXGB_PAP_TXPV_9G   0x00090000
        !           447: #define IXGB_PAP_TXPV_WAN  0x000F0000
        !           448:
        !           449: /* PCSC1 Bit Masks */
        !           450: #define IXGB_PCSC1_LOOPBACK 0x00004000
        !           451:
        !           452: /* PCSC2 Bit Masks */
        !           453: #define IXGB_PCSC2_PCS_TYPE_MASK  0x00000003
        !           454: #define IXGB_PCSC2_PCS_TYPE_10GBX 0x00000001
        !           455:
        !           456: /* PCSS1 Bit Masks */
        !           457: #define IXGB_PCSS1_LOCAL_FAULT    0x00000080
        !           458: #define IXGB_PCSS1_RX_LINK_STATUS 0x00000004
        !           459:
        !           460: /* PCSS2 Bit Masks */
        !           461: #define IXGB_PCSS2_DEV_PRES_MASK 0x0000C000
        !           462: #define IXGB_PCSS2_DEV_PRES      0x00004000
        !           463: #define IXGB_PCSS2_TX_LF         0x00000800
        !           464: #define IXGB_PCSS2_RX_LF         0x00000400
        !           465: #define IXGB_PCSS2_10GBW         0x00000004
        !           466: #define IXGB_PCSS2_10GBX         0x00000002
        !           467: #define IXGB_PCSS2_10GBR         0x00000001
        !           468:
        !           469: /* XPCSS Bit Masks */
        !           470: #define IXGB_XPCSS_ALIGN_STATUS 0x00001000
        !           471: #define IXGB_XPCSS_PATTERN_TEST 0x00000800
        !           472: #define IXGB_XPCSS_LANE_3_SYNC  0x00000008
        !           473: #define IXGB_XPCSS_LANE_2_SYNC  0x00000004
        !           474: #define IXGB_XPCSS_LANE_1_SYNC  0x00000002
        !           475: #define IXGB_XPCSS_LANE_0_SYNC  0x00000001
        !           476:
        !           477: /* XPCSTC Bit Masks */
        !           478: #define IXGB_XPCSTC_BERT_TRIG       0x00200000
        !           479: #define IXGB_XPCSTC_BERT_SST        0x00100000
        !           480: #define IXGB_XPCSTC_BERT_PSZ_MASK   0x000C0000
        !           481: #define IXGB_XPCSTC_BERT_PSZ_SHIFT  17
        !           482: #define IXGB_XPCSTC_BERT_PSZ_INF    0x00000003
        !           483: #define IXGB_XPCSTC_BERT_PSZ_68     0x00000001
        !           484: #define IXGB_XPCSTC_BERT_PSZ_1028   0x00000000
        !           485:
        !           486: /* MSCA bit Masks */
        !           487:
        !           488: /* New Protocol Address */
        !           489: #define IXGB_MSCA_NP_ADDR_MASK      0x0000FFFF
        !           490: #define IXGB_MSCA_NP_ADDR_SHIFT     0
        !           491:
        !           492: /* Either Device Type or Register Address,depending on ST_CODE */
        !           493: #define IXGB_MSCA_DEV_TYPE_MASK     0x001F0000
        !           494: #define IXGB_MSCA_DEV_TYPE_SHIFT    16
        !           495: #define IXGB_MSCA_PHY_ADDR_MASK     0x03E00000
        !           496: #define IXGB_MSCA_PHY_ADDR_SHIFT    21
        !           497: #define IXGB_MSCA_OP_CODE_MASK      0x0C000000
        !           498:
        !           499: /* OP_CODE == 00, Address cycle, New Protocol           */
        !           500:
        !           501: /* OP_CODE == 01, Write operation                       */
        !           502:
        !           503: /* OP_CODE == 10, Read operation                        */
        !           504:
        !           505: /* OP_CODE == 11, Read, auto increment, New Protocol    */
        !           506: #define IXGB_MSCA_ADDR_CYCLE        0x00000000
        !           507: #define IXGB_MSCA_WRITE             0x04000000
        !           508: #define IXGB_MSCA_READ              0x08000000
        !           509: #define IXGB_MSCA_READ_AUTOINC      0x0C000000
        !           510: #define IXGB_MSCA_OP_CODE_SHIFT     26
        !           511: #define IXGB_MSCA_ST_CODE_MASK      0x30000000
        !           512:
        !           513: /* ST_CODE == 00, New Protocol  */
        !           514:
        !           515: /* ST_CODE == 01, Old Protocol  */
        !           516: #define IXGB_MSCA_NEW_PROTOCOL      0x00000000
        !           517: #define IXGB_MSCA_OLD_PROTOCOL      0x10000000
        !           518: #define IXGB_MSCA_ST_CODE_SHIFT     28
        !           519:
        !           520: /* Initiate command, self-clearing when command completes */
        !           521: #define IXGB_MSCA_MDI_COMMAND       0x40000000
        !           522:
        !           523: /*MDI In Progress Enable. */
        !           524: #define IXGB_MSCA_MDI_IN_PROG_EN    0x80000000
        !           525:
        !           526: /* MSRWD bit masks */
        !           527: #define IXGB_MSRWD_WRITE_DATA_MASK  0x0000FFFF
        !           528: #define IXGB_MSRWD_WRITE_DATA_SHIFT 0
        !           529: #define IXGB_MSRWD_READ_DATA_MASK   0xFFFF0000
        !           530: #define IXGB_MSRWD_READ_DATA_SHIFT  16
        !           531:
        !           532: /* Definitions for the optics devices on the MDIO bus. */
        !           533: #define IXGB_PHY_ADDRESS        0x0    /* Single PHY, multiple "Devices" */
        !           534:
        !           535: /* Standard five-bit Device IDs.  See IEEE 802.3ae, clause 45 */
        !           536: #define MDIO_PMA_PMD_DID        0x01
        !           537: #define MDIO_WIS_DID            0x02
        !           538: #define MDIO_PCS_DID            0x03
        !           539: #define MDIO_XGXS_DID           0x04
        !           540:
        !           541: /* Standard PMA/PMD registers and bit definitions. */
        !           542:
        !           543: /* Note: This is a very limited set of definitions,      */
        !           544:
        !           545: /* only implemented features are defined.                */
        !           546: #define MDIO_PMA_PMD_CR1        0x0000
        !           547: #define MDIO_PMA_PMD_CR1_RESET  0x8000
        !           548:
        !           549: #define MDIO_PMA_PMD_XPAK_VENDOR_NAME       0x803A     /* XPAK/XENPAK devices
        !           550:                                                         * only */
        !           551:
        !           552: /* Vendor-specific MDIO registers */
        !           553: #define G6XXX_PMA_PMD_VS1                   0xC001     /* Vendor-specific
        !           554:                                                         * register */
        !           555: #define G6XXX_XGXS_XAUI_VS2                 0x18       /* Vendor-specific
        !           556:                                                         * register */
        !           557:
        !           558: #define G6XXX_PMA_PMD_VS1_PLL_RESET         0x80
        !           559: #define G6XXX_PMA_PMD_VS1_REMOVE_PLL_RESET  0x00
        !           560: #define G6XXX_XGXS_XAUI_VS2_INPUT_MASK      0x0F       /* XAUI lanes
        !           561:                                                         * synchronized */
        !           562:
        !           563: /* Layout of a single receive descriptor.  The controller assumes that this
        !           564:  * structure is packed into 16 bytes, which is a safe assumption with most
        !           565:  * compilers.  However, some compilers may insert padding between the fields,
        !           566:  * in which case the structure must be packed in some compiler-specific
        !           567:  * manner. */
        !           568: struct ixgb_rx_desc {
        !           569:        uint64_t buff_addr;
        !           570:        uint16_t length;
        !           571:        uint16_t reserved;
        !           572:        uint8_t status;
        !           573:        uint8_t errors;
        !           574:        uint16_t special;
        !           575: };
        !           576:
        !           577: #define IXGB_RX_DESC_STATUS_DD    0x01
        !           578: #define IXGB_RX_DESC_STATUS_EOP   0x02
        !           579: #define IXGB_RX_DESC_STATUS_IXSM  0x04
        !           580: #define IXGB_RX_DESC_STATUS_VP    0x08
        !           581: #define IXGB_RX_DESC_STATUS_TCPCS 0x20
        !           582: #define IXGB_RX_DESC_STATUS_IPCS  0x40
        !           583: #define IXGB_RX_DESC_STATUS_PIF   0x80
        !           584:
        !           585: #define IXGB_RX_DESC_ERRORS_CE   0x01
        !           586: #define IXGB_RX_DESC_ERRORS_SE   0x02
        !           587: #define IXGB_RX_DESC_ERRORS_P    0x08
        !           588: #define IXGB_RX_DESC_ERRORS_TCPE 0x20
        !           589: #define IXGB_RX_DESC_ERRORS_IPE  0x40
        !           590: #define IXGB_RX_DESC_ERRORS_RXE  0x80
        !           591:
        !           592: #define IXGB_RX_DESC_SPECIAL_VLAN_MASK  0x0FFF /* VLAN ID is in lower 12 bits */
        !           593: #define IXGB_RX_DESC_SPECIAL_PRI_MASK   0xE000 /* Priority is in upper 3 bits */
        !           594: #define IXGB_RX_DESC_SPECIAL_PRI_SHIFT  0x000D /* Priority is in upper 3 of 16
        !           595:                                                 */
        !           596:
        !           597: /* Layout of a single transmit descriptor.  The controller assumes that this
        !           598:  * structure is packed into 16 bytes, which is a safe assumption with most
        !           599:  * compilers.  However, some compilers may insert padding between the fields,
        !           600:  * in which case the structure must be packed in some compiler-specific
        !           601:  * manner. */
        !           602: struct ixgb_tx_desc {
        !           603:        uint64_t buff_addr;
        !           604:        uint32_t cmd_type_len;
        !           605:        uint8_t status;
        !           606:        uint8_t popts;
        !           607:        uint16_t vlan;
        !           608: };
        !           609:
        !           610: #define IXGB_TX_DESC_LENGTH_MASK    0x000FFFFF
        !           611: #define IXGB_TX_DESC_TYPE_MASK      0x00F00000
        !           612: #define IXGB_TX_DESC_TYPE_SHIFT     20
        !           613: #define IXGB_TX_DESC_CMD_MASK       0xFF000000
        !           614: #define IXGB_TX_DESC_CMD_SHIFT      24
        !           615: #define IXGB_TX_DESC_CMD_EOP        0x01000000
        !           616: #define IXGB_TX_DESC_CMD_TSE        0x04000000
        !           617: #define IXGB_TX_DESC_CMD_RS         0x08000000
        !           618: #define IXGB_TX_DESC_CMD_VLE        0x40000000
        !           619: #define IXGB_TX_DESC_CMD_IDE        0x80000000
        !           620:
        !           621: #define IXGB_TX_DESC_TYPE           0x00100000
        !           622:
        !           623: #define IXGB_TX_DESC_STATUS_DD  0x01
        !           624:
        !           625: #define IXGB_TX_DESC_POPTS_IXSM 0x01
        !           626: #define IXGB_TX_DESC_POPTS_TXSM 0x02
        !           627: /* Priority is in upper 3 of 16 */
        !           628: #define IXGB_TX_DESC_SPECIAL_PRI_SHIFT  IXGB_RX_DESC_SPECIAL_PRI_SHIFT
        !           629:
        !           630: struct ixgb_context_desc {
        !           631:        uint8_t ipcss;
        !           632:        uint8_t ipcso;
        !           633:        uint16_t ipcse;
        !           634:        uint8_t tucss;
        !           635:        uint8_t tucso;
        !           636:        uint16_t tucse;
        !           637:        uint32_t cmd_type_len;
        !           638:        uint8_t status;
        !           639:        uint8_t hdr_len;
        !           640:        uint16_t mss;
        !           641: };
        !           642:
        !           643: #define IXGB_CONTEXT_DESC_CMD_TCP 0x01000000
        !           644: #define IXGB_CONTEXT_DESC_CMD_IP  0x02000000
        !           645: #define IXGB_CONTEXT_DESC_CMD_TSE 0x04000000
        !           646: #define IXGB_CONTEXT_DESC_CMD_RS  0x08000000
        !           647: #define IXGB_CONTEXT_DESC_CMD_IDE 0x80000000
        !           648:
        !           649: #define IXGB_CONTEXT_DESC_TYPE 0x00000000
        !           650:
        !           651: #define IXGB_CONTEXT_DESC_STATUS_DD 0x01
        !           652:
        !           653: /* Filters */
        !           654: #define IXGB_RAR_ENTRIES 3     /* Number of entries in Rx Address array */
        !           655: #define IXGB_MC_TBL_SIZE          128  /* Multicast Filter Table (4096 bits) */
        !           656: #define IXGB_VLAN_FILTER_TBL_SIZE 128  /* VLAN Filter Table (4096 bits) */
        !           657:
        !           658: #define IXGB_MEMORY_REGISTER_BASE_ADDRESS   0
        !           659: #define ENET_HEADER_SIZE            14
        !           660: #define ENET_FCS_LENGTH             4
        !           661: #define IXGB_MAX_NUM_MULTICAST_ADDRESSES    128
        !           662: #define IXGB_MIN_ENET_FRAME_SIZE_WITHOUT_FCS    60
        !           663: #define IXGB_MAX_ENET_FRAME_SIZE_WITHOUT_FCS    1514
        !           664: #define IXGB_MAX_JUMBO_FRAME_SIZE       0x3F00
        !           665:
        !           666: /* Phy Addresses */
        !           667: #define IXGB_OPTICAL_PHY_ADDR 0x0      /* Optical Module phy address */
        !           668: #define IXGB_XAUII_PHY_ADDR   0x1      /* Xauii transceiver phy address */
        !           669: #define IXGB_DIAG_PHY_ADDR    0x1F     /* Diagnostic Device phy address */
        !           670:
        !           671: /* This structure takes a 64k flash and maps it for identification commands */
        !           672: struct ixgb_flash_buffer {
        !           673:        uint8_t manufacturer_id;
        !           674:        uint8_t device_id;
        !           675:        uint8_t filler1[0x2AA8];
        !           676:        uint8_t cmd2;
        !           677:        uint8_t filler2[0x2AAA];
        !           678:        uint8_t cmd1;
        !           679:        uint8_t filler3[0xAAAA];
        !           680: };
        !           681:
        !           682: /*
        !           683:  * This is a little-endian specific check.
        !           684:  */
        !           685: #define IS_MULTICAST(Address) \
        !           686:     (boolean_t)(((uint8_t *)(Address))[0] & ((uint8_t)0x01))
        !           687:
        !           688: /*
        !           689:  * Check whether an address is broadcast.
        !           690:  */
        !           691: #define IS_BROADCAST(Address)               \
        !           692:     ((((uint8_t *)(Address))[0] == ((uint8_t)0xff)) && (((uint8_t *)(Address))[1] == ((uint8_t)0xff)))
        !           693:
        !           694: /* Flow control parameters */
        !           695: struct ixgb_fc {
        !           696:        uint32_t high_water;    /* Flow Control High-water */
        !           697:        uint32_t low_water;     /* Flow Control Low-water */
        !           698:        uint16_t pause_time;    /* Flow Control Pause timer */
        !           699:        boolean_t send_xon;     /* Flow control send XON */
        !           700:        ixgb_fc_type type;      /* Type of flow control */
        !           701: };
        !           702:
        !           703: /* The historical defaults for the flow control values are given below. */
        !           704: #define FC_DEFAULT_HI_THRESH        (0x8000)   /* 32KB */
        !           705: #define FC_DEFAULT_LO_THRESH        (0x4000)   /* 16KB */
        !           706: #define FC_DEFAULT_TX_TIMER         (0x100)    /* ~130 us */
        !           707:
        !           708: /* Phy definitions */
        !           709: #define IXGB_MAX_PHY_REG_ADDRESS    0xFFFF
        !           710: #define IXGB_MAX_PHY_ADDRESS        31
        !           711: #define IXGB_MAX_PHY_DEV_TYPE       31
        !           712:
        !           713: /* Bus parameters */
        !           714: struct ixgb_bus {
        !           715:        ixgb_bus_speed speed;
        !           716:        ixgb_bus_width width;
        !           717:        ixgb_bus_type type;
        !           718: };
        !           719:
        !           720: struct ixgb_hw {
        !           721:        uint8_t *hw_addr;       /* Base Address of the hardware */
        !           722:        void *back;     /* Pointer to OS-dependent struct */
        !           723:        struct ixgb_fc fc;      /* Flow control parameters */
        !           724:        struct ixgb_bus bus;    /* Bus parameters */
        !           725:        uint32_t phy_id;        /* Phy Identifier */
        !           726:        uint32_t phy_addr;      /* XGMII address of Phy */
        !           727:        ixgb_mac_type mac_type; /* Identifier for MAC controller */
        !           728:        ixgb_phy_type phy_type; /* Transceiver/phy identifier */
        !           729:        uint32_t max_frame_size;        /* Maximum frame size supported */
        !           730:        uint32_t mc_filter_type;        /* Multicast filter hash type */
        !           731:        uint32_t num_mc_addrs;  /* Number of current Multicast addrs */
        !           732:        /* Individual address currently programmed in MAC */
        !           733:        uint8_t curr_mac_addr[IXGB_ETH_LENGTH_OF_ADDRESS];
        !           734:        uint32_t num_tx_desc;   /* Number of Transmit descriptors */
        !           735:        uint32_t num_rx_desc;   /* Number of Receive descriptors */
        !           736:        uint32_t rx_buffer_size;        /* Size of Receive buffer */
        !           737:        boolean_t link_up;      /* TRUE if link is valid */
        !           738:        boolean_t adapter_stopped;      /* State of adapter */
        !           739:        uint16_t device_id;     /* device id from PCI configuration space */
        !           740:        uint16_t vendor_id;     /* vendor id from PCI configuration space */
        !           741:        uint8_t revision_id;    /* revision id from PCI configuration space */
        !           742:        uint16_t subsystem_vendor_id;   /* subsystem vendor id from PCI
        !           743:                                         * configuration space */
        !           744:        uint16_t subsystem_id;  /* subsystem id from PCI configuration space */
        !           745:        uint32_t bar0;  /* Base Address registers */
        !           746:        uint32_t bar1;
        !           747:        uint32_t bar2;
        !           748:        uint32_t bar3;
        !           749:        uint16_t pci_cmd_word;  /* PCI command register id from PCI
        !           750:                                 * configuration space */
        !           751:        uint16_t eeprom[IXGB_EEPROM_SIZE];      /* EEPROM contents read at init
        !           752:                                                 * time */
        !           753:        unsigned long io_base;  /* Our I/O mapped location */
        !           754:        uint32_t lastLFC;
        !           755:        uint32_t lastRFC;
        !           756: };
        !           757:
        !           758: /* Statistics reported by the hardware */
        !           759: struct ixgb_hw_stats {
        !           760:        uint64_t tprl;
        !           761:        uint64_t tprh;
        !           762:        uint64_t gprcl;
        !           763:        uint64_t gprch;
        !           764:        uint64_t bprcl;
        !           765:        uint64_t bprch;
        !           766:        uint64_t mprcl;
        !           767:        uint64_t mprch;
        !           768:        uint64_t uprcl;
        !           769:        uint64_t uprch;
        !           770:        uint64_t vprcl;
        !           771:        uint64_t vprch;
        !           772:        uint64_t jprcl;
        !           773:        uint64_t jprch;
        !           774:        uint64_t gorcl;
        !           775:        uint64_t gorch;
        !           776:        uint64_t torl;
        !           777:        uint64_t torh;
        !           778:        uint64_t rnbc;
        !           779:        uint64_t ruc;
        !           780:        uint64_t roc;
        !           781:        uint64_t rlec;
        !           782:        uint64_t crcerrs;
        !           783:        uint64_t icbc;
        !           784:        uint64_t ecbc;
        !           785:        uint64_t mpc;
        !           786:        uint64_t tptl;
        !           787:        uint64_t tpth;
        !           788:        uint64_t gptcl;
        !           789:        uint64_t gptch;
        !           790:        uint64_t bptcl;
        !           791:        uint64_t bptch;
        !           792:        uint64_t mptcl;
        !           793:        uint64_t mptch;
        !           794:        uint64_t uptcl;
        !           795:        uint64_t uptch;
        !           796:        uint64_t vptcl;
        !           797:        uint64_t vptch;
        !           798:        uint64_t jptcl;
        !           799:        uint64_t jptch;
        !           800:        uint64_t gotcl;
        !           801:        uint64_t gotch;
        !           802:        uint64_t totl;
        !           803:        uint64_t toth;
        !           804:        uint64_t dc;
        !           805:        uint64_t plt64c;
        !           806:        uint64_t tsctc;
        !           807:        uint64_t tsctfc;
        !           808:        uint64_t ibic;
        !           809:        uint64_t rfc;
        !           810:        uint64_t lfc;
        !           811:        uint64_t pfrc;
        !           812:        uint64_t pftc;
        !           813:        uint64_t mcfrc;
        !           814:        uint64_t mcftc;
        !           815:        uint64_t xonrxc;
        !           816:        uint64_t xontxc;
        !           817:        uint64_t xoffrxc;
        !           818:        uint64_t xofftxc;
        !           819:        uint64_t rjc;
        !           820: };
        !           821:
        !           822: /* Function Prototypes */
        !           823: extern boolean_t ixgb_adapter_stop(struct ixgb_hw *hw);
        !           824: extern boolean_t ixgb_init_hw(struct ixgb_hw *hw);
        !           825: extern boolean_t ixgb_adapter_start(struct ixgb_hw *hw);
        !           826: extern void ixgb_check_for_link(struct ixgb_hw *hw);
        !           827: extern boolean_t ixgb_check_for_bad_link(struct ixgb_hw *hw);
        !           828: extern void ixgb_rar_set(struct ixgb_hw *hw, uint8_t *addr, uint32_t index);
        !           829: extern void ixgb_init_rx_addrs(struct ixgb_hw *hw);
        !           830: extern boolean_t ixgb_setup_fc(struct ixgb_hw *hw);
        !           831: extern void ixgb_clear_hw_cntrs(struct ixgb_hw *hw);
        !           832: extern boolean_t mac_addr_valid(uint8_t *mac_addr);
        !           833:
        !           834: extern uint16_t ixgb_read_phy_reg(struct ixgb_hw *hw, uint32_t reg_addr,
        !           835:                                  uint32_t phy_addr, uint32_t device_type);
        !           836:
        !           837: extern void ixgb_write_phy_reg(struct ixgb_hw *hw, uint32_t reg_addr,
        !           838:                               uint32_t phy_addr, uint32_t device_type,
        !           839:                               uint16_t data);
        !           840:
        !           841:
        !           842: /* Filters (multicast, vlan, receive) */
        !           843: extern void ixgb_mc_addr_list_update(struct ixgb_hw *hw, uint8_t *mc_addr_list,
        !           844:                                     uint32_t mc_addr_count, uint32_t pad);
        !           845:
        !           846: /* Vfta functions */
        !           847: extern void ixgb_write_vfta(struct ixgb_hw *hw, uint32_t offset,
        !           848:                            uint32_t value);
        !           849:
        !           850: extern void ixgb_clear_vfta(struct ixgb_hw *hw);
        !           851:
        !           852: /* Access functions to eeprom data */
        !           853: void ixgb_get_ee_mac_addr(struct ixgb_hw *hw, uint8_t *mac_addr);
        !           854: uint32_t ixgb_get_ee_pba_number(struct ixgb_hw *hw);
        !           855: uint16_t ixgb_get_ee_device_id(struct ixgb_hw *hw);
        !           856: boolean_t ixgb_get_eeprom_data(struct ixgb_hw *hw);
        !           857: uint16_t ixgb_get_eeprom_word(struct ixgb_hw *hw, uint16_t index);
        !           858:
        !           859: /* Everything else */
        !           860: void ixgb_led_on(struct ixgb_hw *hw);
        !           861: void ixgb_led_off(struct ixgb_hw *hw);
        !           862: void ixgb_write_pci_cfg(struct ixgb_hw *hw, uint32_t reg, uint16_t *value);
        !           863:
        !           864: #endif /* _IXGB_HW_H_ */

CVSweb