The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/pci/if_wmreg.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: if_wmreg.h,v 1.10.2.2 2005/01/08 08:59:16 jdc Exp $    */
    2 
    3 /*
    4  * Copyright (c) 2001 Wasabi Systems, Inc.
    5  * All rights reserved.
    6  *
    7  * Written by Jason R. Thorpe for Wasabi Systems, Inc.
    8  *
    9  * Redistribution and use in source and binary forms, with or without
   10  * modification, are permitted provided that the following conditions
   11  * are met:
   12  * 1. Redistributions of source code must retain the above copyright
   13  *    notice, this list of conditions and the following disclaimer.
   14  * 2. Redistributions in binary form must reproduce the above copyright
   15  *    notice, this list of conditions and the following disclaimer in the
   16  *    documentation and/or other materials provided with the distribution.
   17  * 3. All advertising materials mentioning features or use of this software
   18  *    must display the following acknowledgement:
   19  *      This product includes software developed for the NetBSD Project by
   20  *      Wasabi Systems, Inc.
   21  * 4. The name of Wasabi Systems, Inc. may not be used to endorse
   22  *    or promote products derived from this software without specific prior
   23  *    written permission.
   24  *
   25  * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
   26  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   27  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   28  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
   29  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   30  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   31  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   32  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   33  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   34  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   35  * POSSIBILITY OF SUCH DAMAGE.
   36  */
   37 
   38 /*
   39  * Register description for the Intel i82542 (``Wiseman''),
   40  * i82543 (``Livengood''), and i82544 (``Cordova'') Gigabit
   41  * Ethernet chips.
   42  */
   43 
   44 /*
   45  * The wiseman supports 64-bit PCI addressing.  This structure
   46  * describes the address in descriptors.
   47  */
   48 typedef struct wiseman_addr {
   49         uint32_t        wa_low;         /* low-order 32 bits */
   50         uint32_t        wa_high;        /* high-order 32 bits */
   51 } __attribute__((__packed__)) wiseman_addr_t;
   52 
   53 /*
   54  * The Wiseman receive descriptor.
   55  *
   56  * The receive descriptor ring must be aligned to a 4K boundary,
   57  * and there must be an even multiple of 8 descriptors in the ring.
   58  */
   59 typedef struct wiseman_rxdesc {
   60         wiseman_addr_t  wrx_addr;       /* buffer address */
   61 
   62         uint16_t        wrx_len;        /* buffer length */
   63         uint16_t        wrx_cksum;      /* checksum (starting at PCSS) */
   64 
   65         uint8_t         wrx_status;     /* Rx status */
   66         uint8_t         wrx_errors;     /* Rx errors */
   67         uint16_t        wrx_special;    /* special field (VLAN, etc.) */
   68 } __attribute__((__packed__)) wiseman_rxdesc_t;
   69 
   70 /* wrx_status bits */
   71 #define WRX_ST_DD       (1U << 0)       /* descriptor done */
   72 #define WRX_ST_EOP      (1U << 1)       /* end of packet */
   73 #define WRX_ST_ISXM     (1U << 2)       /* ignore checksum indication */
   74 #define WRX_ST_VP       (1U << 3)       /* VLAN packet */
   75 #define WRX_ST_BPDU     (1U << 4)       /* ??? */
   76 #define WRX_ST_TCPCS    (1U << 5)       /* TCP checksum performed */
   77 #define WRX_ST_IPCS     (1U << 6)       /* IP checksum performed */
   78 #define WRX_ST_PIF      (1U << 7)       /* passed in-exact filter */
   79 
   80 /* wrx_error bits */
   81 #define WRX_ER_CE       (1U << 0)       /* CRC error */
   82 #define WRX_ER_SE       (1U << 1)       /* symbol error */
   83 #define WRX_ER_SEQ      (1U << 2)       /* sequence error */
   84 #define WRX_ER_ICE      (1U << 3)       /* ??? */
   85 #define WRX_ER_CXE      (1U << 4)       /* carrier extension error */
   86 #define WRX_ER_TCPE     (1U << 5)       /* TCP checksum error */
   87 #define WRX_ER_IPE      (1U << 6)       /* IP checksum error */
   88 #define WRX_ER_RXE      (1U << 7)       /* Rx data error */
   89 
   90 /* wrx_special field for VLAN packets */
   91 #define WRX_VLAN_ID(x)  ((x) & 0x0fff)  /* VLAN identifier */
   92 #define WRX_VLAN_CFI    (1U << 12)      /* Canonical Form Indicator */
   93 #define WRX_VLAN_PRI(x) (((x) >> 13) & 7)/* VLAN priority field */
   94 
   95 /*
   96  * The Wiseman transmit descriptor.
   97  *
   98  * The transmit descriptor ring must be aligned to a 4K boundary,
   99  * and there must be an even multiple of 8 descriptors in the ring.
  100  */
  101 typedef struct wiseman_tx_fields {
  102         uint8_t wtxu_status;            /* Tx status */
  103         uint8_t wtxu_options;           /* options */
  104         uint16_t wtxu_vlan;             /* VLAN info */
  105 } __attribute__((__packed__)) wiseman_txfields_t;
  106 typedef struct wiseman_txdesc {
  107         wiseman_addr_t  wtx_addr;       /* buffer address */
  108         uint32_t        wtx_cmdlen;     /* command and length */
  109         wiseman_txfields_t wtx_fields;  /* fields; see below */
  110 } __attribute__((__packed__)) wiseman_txdesc_t;
  111 
  112 /* Commands for wtx_cmdlen */
  113 #define WTX_CMD_EOP     (1U << 24)      /* end of packet */
  114 #define WTX_CMD_IFCS    (1U << 25)      /* insert FCS */
  115 #define WTX_CMD_RS      (1U << 27)      /* report status */
  116 #define WTX_CMD_RPS     (1U << 28)      /* report packet sent */
  117 #define WTX_CMD_DEXT    (1U << 29)      /* descriptor extension */
  118 #define WTX_CMD_VLE     (1U << 30)      /* VLAN enable */
  119 #define WTX_CMD_IDE     (1U << 31)      /* interrupt delay enable */
  120 
  121 /* Descriptor types (if DEXT is set) */
  122 #define WTX_DTYP_C      (0U << 20)      /* context */
  123 #define WTX_DTYP_D      (1U << 20)      /* data */
  124 
  125 /* wtx_fields status bits */
  126 #define WTX_ST_DD       (1U << 0)       /* descriptor done */
  127 #define WTX_ST_EC       (1U << 1)       /* excessive collisions */
  128 #define WTX_ST_LC       (1U << 2)       /* late collision */
  129 #define WTX_ST_TU       (1U << 3)       /* transmit underrun */
  130 
  131 /* wtx_fields option bits for IP/TCP/UDP checksum offload */
  132 #define WTX_IXSM        (1U << 0)       /* IP checksum offload */
  133 #define WTX_TXSM        (1U << 1)       /* TCP/UDP checksum offload */
  134 
  135 /*
  136  * The Livengood TCP/IP context descriptor.
  137  */
  138 struct livengood_tcpip_ctxdesc {
  139         uint32_t        tcpip_ipcs;     /* IP checksum context */
  140         uint32_t        tcpip_tucs;     /* TCP/UDP checksum context */
  141         uint32_t        tcpip_cmdlen;
  142         uint32_t        tcpip_seg;      /* TCP segmentation context */
  143 };
  144 
  145 /* commands for context descriptors */
  146 #define WTX_TCPIP_CMD_TCP       (1U << 24)      /* 1 = TCP, 0 = UDP */
  147 #define WTX_TCPIP_CMD_IP        (1U << 25)      /* 1 = IPv4, 0 = IPv6 */
  148 #define WTX_TCPIP_CMD_TSE       (1U << 26)      /* segmentation context valid */
  149 
  150 #define WTX_TCPIP_IPCSS(x)      ((x) << 0)      /* checksum start */
  151 #define WTX_TCPIP_IPCSO(x)      ((x) << 8)      /* checksum value offset */
  152 #define WTX_TCPIP_IPCSE(x)      ((x) << 16)     /* checksum end */
  153 
  154 #define WTX_TCPIP_TUCSS(x)      ((x) << 0)      /* checksum start */
  155 #define WTX_TCPIP_TUCSO(x)      ((x) << 8)      /* checksum value offset */
  156 #define WTX_TCPIP_TUCSE(x)      ((x) << 16)     /* checksum end */
  157 
  158 #define WTX_TCPIP_SEG_STATUS(x) ((x) << 0)
  159 #define WTX_TCPIP_SEG_HDRLEN(x) ((x) << 8)
  160 #define WTX_TCPIP_SEG_MSS(x)    ((x) << 16)
  161 
  162 /*
  163  * PCI config registers used by the Wiseman.
  164  */
  165 #define WM_PCI_MMBA     PCI_MAPREG_START
  166 
  167 /*
  168  * Wiseman Control/Status Registers.
  169  */
  170 #define WMREG_CTRL      0x0000  /* Device Control Register */
  171 #define CTRL_FD         (1U << 0)       /* full duplex */
  172 #define CTRL_BEM        (1U << 1)       /* big-endian mode */
  173 #define CTRL_PRIOR      (1U << 2)       /* 0 = receive, 1 = fair */
  174 #define CTRL_LRST       (1U << 3)       /* link reset */
  175 #define CTRL_ASDE       (1U << 5)       /* auto speed detect enable */
  176 #define CTRL_SLU        (1U << 6)       /* set link up */
  177 #define CTRL_ILOS       (1U << 7)       /* invert loss of signal */
  178 #define CTRL_SPEED(x)   ((x) << 8)      /* speed (Livengood) */
  179 #define CTRL_SPEED_10   CTRL_SPEED(0)
  180 #define CTRL_SPEED_100  CTRL_SPEED(1)
  181 #define CTRL_SPEED_1000 CTRL_SPEED(2)
  182 #define CTRL_SPEED_MASK CTRL_SPEED(3)
  183 #define CTRL_FRCSPD     (1U << 11)      /* force speed (Livengood) */
  184 #define CTRL_FRCFDX     (1U << 12)      /* force full-duplex (Livengood) */
  185 #define CTRL_SWDPINS_SHIFT      18
  186 #define CTRL_SWDPINS_MASK       0x0f
  187 #define CTRL_SWDPIN(x)          (1U << (CTRL_SWDPINS_SHIFT + (x)))
  188 #define CTRL_SWDPIO_SHIFT       22
  189 #define CTRL_SWDPIO_MASK        0x0f
  190 #define CTRL_SWDPIO(x)          (1U << (CTRL_SWDPIO_SHIFT + (x)))
  191 #define CTRL_RST        (1U << 26)      /* device reset */
  192 #define CTRL_RFCE       (1U << 27)      /* Rx flow control enable */
  193 #define CTRL_TFCE       (1U << 28)      /* Tx flow control enable */
  194 #define CTRL_VME        (1U << 30)      /* VLAN Mode Enable */
  195 #define CTRL_PHY_RESET  (1U << 31)      /* PHY reset (Cordova) */
  196 
  197 #define WMREG_CTRL_SHADOW 0x0004        /* Device Control Register (shadow) */
  198 
  199 #define WMREG_STATUS    0x0008  /* Device Status Register */
  200 #define STATUS_FD       (1U << 0)       /* full duplex */
  201 #define STATUS_LU       (1U << 1)       /* link up */
  202 #define STATUS_TCKOK    (1U << 2)       /* Tx clock running */
  203 #define STATUS_RBCOK    (1U << 3)       /* Rx clock running */
  204 #define STATUS_FUNCID_SHIFT 2           /* 82546 function ID */
  205 #define STATUS_FUNCID_MASK  3           /* ... */
  206 #define STATUS_TXOFF    (1U << 4)       /* Tx paused */
  207 #define STATUS_TBIMODE  (1U << 5)       /* fiber mode (Livengood) */
  208 #define STATUS_SPEED(x) ((x) << 6)      /* speed indication */
  209 #define STATUS_SPEED_10   STATUS_SPEED(0)
  210 #define STATUS_SPEED_100  STATUS_SPEED(1)
  211 #define STATUS_SPEED_1000 STATUS_SPEED(2)
  212 #define STATUS_ASDV(x)  ((x) << 8)      /* auto speed det. val. (Livengood) */
  213 #define STATUS_MTXCKOK  (1U << 10)      /* MTXD clock running */
  214 #define STATUS_PCI66    (1U << 11)      /* 66MHz bus (Livengood) */
  215 #define STATUS_BUS64    (1U << 12)      /* 64-bit bus (Livengood) */
  216 #define STATUS_PCIX_MODE (1U << 13)     /* PCIX mode (Cordova) */
  217 #define STATUS_PCIXSPD(x) ((x) << 14)   /* PCIX speed indication (Cordova) */
  218 #define STATUS_PCIXSPD_50_66   STATUS_PCIXSPD(0)
  219 #define STATUS_PCIXSPD_66_100  STATUS_PCIXSPD(1)
  220 #define STATUS_PCIXSPD_100_133 STATUS_PCIXSPD(2)
  221 #define STATUS_PCIXSPD_MASK    STATUS_PCIXSPD(3)
  222 
  223 #define WMREG_EECD      0x0010  /* EEPROM Control Register */
  224 #define EECD_SK         (1U << 0)       /* clock */
  225 #define EECD_CS         (1U << 1)       /* chip select */
  226 #define EECD_DI         (1U << 2)       /* data in */
  227 #define EECD_DO         (1U << 3)       /* data out */
  228 #define EECD_FWE(x)     ((x) << 4)      /* flash write enable control */
  229 #define EECD_FWE_DISABLED EECD_FWE(1)
  230 #define EECD_FWE_ENABLED  EECD_FWE(2)
  231 #define EECD_EE_REQ     (1U << 6)       /* (shared) EEPROM request */
  232 #define EECD_EE_GNT     (1U << 7)       /* (shared) EEPROM grant */
  233 #define EECD_EE_PRES    (1U << 8)       /* EEPROM present */
  234 #define EECD_EE_SIZE    (1U << 9)       /* EEPROM size
  235                                            (0 = 64 word, 1 = 256 word) */
  236 #define EECD_EE_ABITS   (1U << 10)      /* EEPROM address bits
  237                                            (based on type) */
  238 #define EECD_EE_TYPE    (1U << 13)      /* EEPROM type
  239                                            (0 = Microwire, 1 = SPI) */
  240 
  241 #define UWIRE_OPC_ERASE 0x04            /* MicroWire "erase" opcode */
  242 #define UWIRE_OPC_WRITE 0x05            /* MicroWire "write" opcode */
  243 #define UWIRE_OPC_READ  0x06            /* MicroWire "read" opcode */
  244 
  245 #define SPI_OPC_WRITE   0x02            /* SPI "write" opcode */
  246 #define SPI_OPC_READ    0x03            /* SPI "read" opcode */
  247 #define SPI_OPC_A8      0x08            /* opcode bit 3 == address bit 8 */
  248 #define SPI_OPC_WREN    0x06            /* SPI "set write enable" opcode */
  249 #define SPI_OPC_WRDI    0x04            /* SPI "clear write enable" opcode */
  250 #define SPI_OPC_RDSR    0x05            /* SPI "read status" opcode */
  251 #define SPI_OPC_WRSR    0x01            /* SPI "write status" opcode */
  252 #define SPI_MAX_RETRIES 5000            /* max wait of 5ms for RDY signal */
  253 
  254 #define SPI_SR_RDY      0x01
  255 #define SPI_SR_WEN      0x02
  256 #define SPI_SR_BP0      0x04
  257 #define SPI_SR_BP1      0x08
  258 #define SPI_SR_WPEN     0x80
  259 
  260 #define EEPROM_OFF_MACADDR      0x00    /* MAC address offset */
  261 #define EEPROM_OFF_CFG1         0x0a    /* config word 1 */
  262 #define EEPROM_OFF_CFG2         0x0f    /* config word 2 */
  263 #define EEPROM_OFF_SWDPIN       0x20    /* SWD Pins (Cordova) */
  264 
  265 #define EEPROM_CFG1_LVDID       (1U << 0)
  266 #define EEPROM_CFG1_LSSID       (1U << 1)
  267 #define EEPROM_CFG1_PME_CLOCK   (1U << 2)
  268 #define EEPROM_CFG1_PM          (1U << 3)
  269 #define EEPROM_CFG1_ILOS        (1U << 4)
  270 #define EEPROM_CFG1_SWDPIO_SHIFT 5
  271 #define EEPROM_CFG1_SWDPIO_MASK (0xf << EEPROM_CFG1_SWDPIO_SHIFT)
  272 #define EEPROM_CFG1_IPS1        (1U << 8)
  273 #define EEPROM_CFG1_LRST        (1U << 9)
  274 #define EEPROM_CFG1_FD          (1U << 10)
  275 #define EEPROM_CFG1_FRCSPD      (1U << 11)
  276 #define EEPROM_CFG1_IPS0        (1U << 12)
  277 #define EEPROM_CFG1_64_32_BAR   (1U << 13)
  278 
  279 #define EEPROM_CFG2_CSR_RD_SPLIT (1U << 1)
  280 #define EEPROM_CFG2_APM_EN      (1U << 2)
  281 #define EEPROM_CFG2_64_BIT      (1U << 3)
  282 #define EEPROM_CFG2_MAX_READ    (1U << 4)
  283 #define EEPROM_CFG2_DMCR_MAP    (1U << 5)
  284 #define EEPROM_CFG2_133_CAP     (1U << 6)
  285 #define EEPROM_CFG2_MSI_DIS     (1U << 7)
  286 #define EEPROM_CFG2_FLASH_DIS   (1U << 8)
  287 #define EEPROM_CFG2_FLASH_SIZE(x) (((x) & 3) >> 9)
  288 #define EEPROM_CFG2_ANE         (1U << 11)
  289 #define EEPROM_CFG2_PAUSE(x)    (((x) & 3) >> 12)
  290 #define EEPROM_CFG2_ASDE        (1U << 14)
  291 #define EEPROM_CFG2_APM_PME     (1U << 15)
  292 #define EEPROM_CFG2_SWDPIO_SHIFT 4
  293 #define EEPROM_CFG2_SWDPIO_MASK (0xf << EEPROM_CFG2_SWDPIO_SHIFT)
  294 
  295 #define EEPROM_SWDPIN_MASK      0xdf
  296 #define EEPROM_SWDPIN_SWDPIN_SHIFT 0
  297 #define EEPROM_SWDPIN_SWDPIO_SHIFT 8
  298 
  299 #define WMREG_CTRL_EXT  0x0018  /* Extended Device Control Register */
  300 #define CTRL_EXT_GPI_EN(x)      (1U << (x)) /* gpin interrupt enable */
  301 #define CTRL_EXT_SWDPINS_SHIFT  4
  302 #define CTRL_EXT_SWDPINS_MASK   0x0d
  303 #define CTRL_EXT_SWDPIN(x)      (1U << (CTRL_EXT_SWDPINS_SHIFT + (x) - 4))
  304 #define CTRL_EXT_SWDPIO_SHIFT   8
  305 #define CTRL_EXT_SWDPIO_MASK    0x0d
  306 #define CTRL_EXT_SWDPIO(x)      (1U << (CTRL_EXT_SWDPIO_SHIFT + (x) - 4))
  307 #define CTRL_EXT_ASDCHK         (1U << 12) /* ASD check */
  308 #define CTRL_EXT_EE_RST         (1U << 13) /* EEPROM reset */
  309 #define CTRL_EXT_IPS            (1U << 14) /* invert power state bit 0 */
  310 #define CTRL_EXT_SPD_BYPS       (1U << 15) /* speed select bypass */
  311 #define CTRL_EXT_IPS1           (1U << 16) /* invert power state bit 1 */
  312 #define CTRL_EXT_RO_DIS         (1U << 17) /* relaxed ordering disabled */
  313 
  314 #define WMREG_MDIC      0x0020  /* MDI Control Register */
  315 #define MDIC_DATA(x)    ((x) & 0xffff)
  316 #define MDIC_REGADD(x)  ((x) << 16)
  317 #define MDIC_PHYADD(x)  ((x) << 21)
  318 #define MDIC_OP_WRITE   (1U << 26)
  319 #define MDIC_OP_READ    (2U << 26)
  320 #define MDIC_READY      (1U << 28)
  321 #define MDIC_I          (1U << 29)      /* interrupt on MDI complete */
  322 #define MDIC_E          (1U << 30)      /* MDI error */
  323 
  324 #define WMREG_FCAL      0x0028  /* Flow Control Address Low */
  325 #define FCAL_CONST      0x00c28001      /* Flow Control MAC addr low */
  326 
  327 #define WMREG_FCAH      0x002c  /* Flow Control Address High */
  328 #define FCAH_CONST      0x00000100      /* Flow Control MAC addr high */
  329 
  330 #define WMREG_FCT       0x0030  /* Flow Control Type */
  331 
  332 #define WMREG_VET       0x0038  /* VLAN Ethertype */
  333 
  334 #define WMREG_RAL_BASE  0x0040  /* Receive Address List */
  335 #define WMREG_CORDOVA_RAL_BASE 0x5400
  336 #define WMREG_RAL_LO(b, x) ((b) + ((x) << 3))
  337 #define WMREG_RAL_HI(b, x) (WMREG_RAL_LO(b, x) + 4)
  338         /*
  339          * Receive Address List: The LO part is the low-order 32-bits
  340          * of the MAC address.  The HI part is the high-order 16-bits
  341          * along with a few control bits.
  342          */
  343 #define RAL_AS(x)       ((x) << 16)     /* address select */
  344 #define RAL_AS_DEST     RAL_AS(0)       /* (cordova?) */
  345 #define RAL_AS_SOURCE   RAL_AS(1)       /* (cordova?) */
  346 #define RAL_RDR1        (1U << 30)      /* put packet in alt. rx ring */
  347 #define RAL_AV          (1U << 31)      /* entry is valid */
  348 
  349 #define WM_RAL_TABSIZE  16
  350 
  351 #define WMREG_ICR       0x00c0  /* Interrupt Cause Register */
  352 #define ICR_TXDW        (1U << 0)       /* Tx desc written back */
  353 #define ICR_TXQE        (1U << 1)       /* Tx queue empty */
  354 #define ICR_LSC         (1U << 2)       /* link status change */
  355 #define ICR_RXSEQ       (1U << 3)       /* receive sequence error */
  356 #define ICR_RXDMT0      (1U << 4)       /* Rx ring 0 nearly empty */
  357 #define ICR_RXO         (1U << 6)       /* Rx overrun */
  358 #define ICR_RXT0        (1U << 7)       /* Rx ring 0 timer */
  359 #define ICR_MDAC        (1U << 9)       /* MDIO access complete */
  360 #define ICR_RXCFG       (1U << 10)      /* Receiving /C/ */
  361 #define ICR_GPI(x)      (1U << (x))     /* general purpose interrupts */
  362 
  363 #define WMREG_ICS       0x00c8  /* Interrupt Cause Set Register */
  364         /* See ICR bits. */
  365 
  366 #define WMREG_IMS       0x00d0  /* Interrupt Mask Set Register */
  367         /* See ICR bits. */
  368 
  369 #define WMREG_IMC       0x00d8  /* Interrupt Mask Clear Register */
  370         /* See ICR bits. */
  371 
  372 #define WMREG_RCTL      0x0100  /* Receive Control */
  373 #define RCTL_EN         (1U << 1)       /* receiver enable */
  374 #define RCTL_SBP        (1U << 2)       /* store bad packets */
  375 #define RCTL_UPE        (1U << 3)       /* unicast promisc. enable */
  376 #define RCTL_MPE        (1U << 4)       /* multicast promisc. enable */
  377 #define RCTL_LPE        (1U << 5)       /* large packet enable */
  378 #define RCTL_LBM(x)     ((x) << 6)      /* loopback mode */
  379 #define RCTL_LBM_NONE   RCTL_LBM(0)
  380 #define RCTL_LBM_PHY    RCTL_LBM(3)
  381 #define RCTL_RDMTS(x)   ((x) << 8)      /* receive desc. min thresh size */
  382 #define RCTL_RDMTS_1_2  RCTL_RDMTS(0)
  383 #define RCTL_RDMTS_1_4  RCTL_RDMTS(1)
  384 #define RCTL_RDMTS_1_8  RCTL_RDMTS(2)
  385 #define RCTL_RDMTS_MASK RCTL_RDMTS(3)
  386 #define RCTL_MO(x)      ((x) << 12)     /* multicast offset */
  387 #define RCTL_BAM        (1U << 15)      /* broadcast accept mode */
  388 #define RCTL_2k         (0 << 16)       /* 2k Rx buffers */
  389 #define RCTL_1k         (1 << 16)       /* 1k Rx buffers */
  390 #define RCTL_512        (2 << 16)       /* 512 byte Rx buffers */
  391 #define RCTL_256        (3 << 16)       /* 256 byte Rx buffers */
  392 #define RCTL_BSEX_16k   (1 << 16)       /* 16k Rx buffers (BSEX) */
  393 #define RCTL_BSEX_8k    (2 << 16)       /* 8k Rx buffers (BSEX) */
  394 #define RCTL_BSEX_4k    (3 << 16)       /* 4k Rx buffers (BSEX) */
  395 #define RCTL_DPF        (1U << 22)      /* discard pause frames */
  396 #define RCTL_PMCF       (1U << 23)      /* pass MAC control frames */
  397 #define RCTL_BSEX       (1U << 25)      /* buffer size extension (Livengood) */
  398 #define RCTL_SECRC      (1U << 26)      /* strip Ethernet CRC */
  399 
  400 #define WMREG_OLD_RDTR0 0x0108  /* Receive Delay Timer (ring 0) */
  401 #define WMREG_RDTR      0x2820
  402 #define RDTR_FPD        (1U << 31)      /* flush partial descriptor */
  403 
  404 #define WMREG_OLD_RDBAL0 0x0110 /* Receive Descriptor Base Low (ring 0) */
  405 #define WMREG_RDBAL     0x2800
  406 
  407 #define WMREG_OLD_RDBAH0 0x0114 /* Receive Descriptor Base High (ring 0) */
  408 #define WMREG_RDBAH     0x2804
  409 
  410 #define WMREG_OLD_RDLEN0 0x0118 /* Receive Descriptor Length (ring 0) */
  411 #define WMREG_RDLEN     0x2808
  412 
  413 #define WMREG_OLD_RDH0  0x0120  /* Receive Descriptor Head (ring 0) */
  414 #define WMREG_RDH       0x2810
  415 
  416 #define WMREG_OLD_RDT0  0x0128  /* Receive Descriptor Tail (ring 0) */
  417 #define WMREG_RDT       0x2818
  418 
  419 #define WMREG_RXDCTL    0x2828  /* Receive Descriptor Control */
  420 #define RXDCTL_PTHRESH(x) ((x) << 0)    /* prefetch threshold */
  421 #define RXDCTL_HTHRESH(x) ((x) << 8)    /* host threshold */
  422 #define RXDCTL_WTHRESH(x) ((x) << 16)   /* write back threshold */
  423 #define RXDCTL_GRAN     (1U << 24)      /* 0 = cacheline, 1 = descriptor */
  424 
  425 #define WMREG_OLD_RDTR1 0x0130  /* Receive Delay Timer (ring 1) */
  426 
  427 #define WMREG_OLD_RDBA1_LO 0x0138 /* Receive Descriptor Base Low (ring 1) */
  428 
  429 #define WMREG_OLD_RDBA1_HI 0x013c /* Receive Descriptor Base High (ring 1) */
  430 
  431 #define WMREG_OLD_RDLEN1 0x0140 /* Receive Drscriptor Length (ring 1) */
  432 
  433 #define WMREG_OLD_RDH1  0x0148
  434 
  435 #define WMREG_OLD_RDT1  0x0150
  436 
  437 #define WMREG_OLD_FCRTH 0x0160  /* Flow Control Rx Threshold Hi (OLD) */
  438 #define WMREG_FCRTL     0x2160  /* Flow Control Rx Threshold Lo */
  439 #define FCRTH_DFLT      0x00008000
  440 
  441 #define WMREG_OLD_FCRTL 0x0168  /* Flow Control Rx Threshold Lo (OLD) */
  442 #define WMREG_FCRTH     0x2168  /* Flow Control Rx Threhsold Hi */
  443 #define FCRTL_DFLT      0x00004000
  444 
  445 #define WMREG_FCTTV     0x0170  /* Flow Control Transmit Timer Value */
  446 #define FCTTV_DFLT      0x00000100
  447 
  448 #define WMREG_TXCW      0x0178  /* Transmit Configuration Word (TBI mode) */
  449         /* See MII ANAR_X bits. */
  450 #define TXCW_TxConfig   (1U << 30)      /* Tx Config */
  451 #define TXCW_ANE        (1U << 31)      /* Autonegotiate */
  452 
  453 #define WMREG_RXCW      0x0180  /* Receive Configuration Word (TBI mode) */
  454         /* See MII ANLPAR_X bits. */
  455 #define RXCW_NC         (1U << 26)      /* no carrier */
  456 #define RXCW_IV         (1U << 27)      /* config invalid */
  457 #define RXCW_CC         (1U << 28)      /* config change */
  458 #define RXCW_C          (1U << 29)      /* /C/ reception */
  459 #define RXCW_SYNCH      (1U << 30)      /* synchronized */
  460 #define RXCW_ANC        (1U << 31)      /* autonegotiation complete */
  461 
  462 #define WMREG_MTA       0x0200  /* Multicast Table Array */
  463 #define WMREG_CORDOVA_MTA 0x5200
  464 
  465 #define WMREG_TCTL      0x0400  /* Transmit Control Register */
  466 #define TCTL_EN         (1U << 1)       /* transmitter enable */
  467 #define TCTL_PSP        (1U << 3)       /* pad short packets */
  468 #define TCTL_CT(x)      (((x) & 0xff) << 4)   /* 4:11 - collision threshold */
  469 #define TCTL_COLD(x)    (((x) & 0x3ff) << 12) /* 12:21 - collision distance */
  470 #define TCTL_SWXOFF     (1U << 22)      /* software XOFF */
  471 #define TCTL_RTLC       (1U << 24)      /* retransmit on late collision */
  472 #define TCTL_NRTU       (1U << 25)      /* no retransmit on underrun */
  473 
  474 #define TX_COLLISION_THRESHOLD          15
  475 #define TX_COLLISION_DISTANCE_HDX       64
  476 #define TX_COLLISION_DISTANCE_FDX       512
  477 
  478 #define WMREG_TQSA_LO   0x0408
  479 
  480 #define WMREG_TQSA_HI   0x040c
  481 
  482 #define WMREG_TIPG      0x0410  /* Transmit IPG Register */
  483 #define TIPG_IPGT(x)    (x)             /* IPG transmit time */
  484 #define TIPG_IPGR1(x)   ((x) << 10)     /* IPG receive time 1 */
  485 #define TIPG_IPGR2(x)   ((x) << 20)     /* IPG receive time 2 */
  486 
  487 #define TIPG_WM_DFLT    (TIPG_IPGT(0x0a) | TIPG_IPGR1(0x02) | TIPG_IPGR2(0x0a))
  488 #define TIPG_LG_DFLT    (TIPG_IPGT(0x06) | TIPG_IPGR1(0x08) | TIPG_IPGR2(0x06))
  489 #define TIPG_1000T_DFLT (TIPG_IPGT(0x08) | TIPG_IPGR1(0x08) | TIPG_IPGR2(0x06))
  490 
  491 #define WMREG_TQC       0x0418
  492 
  493 #define WMREG_RDFH      0x2410  /* Receive Data FIFO Head */
  494 
  495 #define WMREG_RDFT      0x2418  /* Receive Data FIFO Tail */
  496 
  497 #define WMREG_RDFHS     0x2420  /* Receive Data FIFO Head Saved */
  498 
  499 #define WMREG_RDFTS     0x2428  /* Receive Data FIFO Tail Saved */
  500 
  501 #define WMREG_TDFH      0x3410  /* Transmit Data FIFO Head */
  502 
  503 #define WMREG_TDFT      0x3418  /* Transmit Data FIFO Tail */
  504 
  505 #define WMREG_TDFHS     0x3420  /* Transmit Data FIFO Head Saved */
  506 
  507 #define WMREG_TDFTS     0x3428  /* Transmit Data FIFO Tail Saved */
  508 
  509 #define WMREG_TDFPC     0x3430  /* Transmit Data FIFO Packet Count */
  510 
  511 #define WMREG_OLD_TBDAL 0x0420  /* Transmit Descriptor Base Lo */
  512 #define WMREG_TBDAL     0x3800
  513 
  514 #define WMREG_OLD_TBDAH 0x0424  /* Transmit Descriptor Base Hi */
  515 #define WMREG_TBDAH     0x3804
  516 
  517 #define WMREG_OLD_TDLEN 0x0428  /* Transmit Descriptor Length */
  518 #define WMREG_TDLEN     0x3808
  519 
  520 #define WMREG_OLD_TDH   0x0430  /* Transmit Descriptor Head */
  521 #define WMREG_TDH       0x3810
  522 
  523 #define WMREG_OLD_TDT   0x0438  /* Transmit Descriptor Tail */
  524 #define WMREG_TDT       0x3818
  525 
  526 #define WMREG_OLD_TIDV  0x0440  /* Transmit Delay Interrupt Value */
  527 #define WMREG_TIDV      0x3820
  528 
  529 #define WMREG_TXDCTL    0x3828  /* Trandmit Descriptor Control */
  530 #define TXDCTL_PTHRESH(x) ((x) << 0)    /* prefetch threshold */
  531 #define TXDCTL_HTHRESH(x) ((x) << 8)    /* host threshold */
  532 #define TXDCTL_WTHRESH(x) ((x) << 16)   /* write back threshold */
  533 
  534 #define WMREG_AIT       0x0458  /* Adaptive IFS Throttle */
  535 
  536 #define WMREG_VFTA      0x0600
  537 
  538 #define WM_MC_TABSIZE   128
  539 #define WM_VLAN_TABSIZE 128
  540 
  541 #define WMREG_PBA       0x1000  /* Packet Buffer Allocation */
  542 #define PBA_BYTE_SHIFT  10              /* KB -> bytes */
  543 #define PBA_ADDR_SHIFT  7               /* KB -> quadwords */
  544 #define PBA_16K         0x0010          /* 16K, default Tx allocation */
  545 #define PBA_22K         0x0016
  546 #define PBA_24K         0x0018
  547 #define PBA_30K         0x001e
  548 #define PBA_40K         0x0028
  549 #define PBA_48K         0x0030          /* 48K, default Rx allocation */
  550 
  551 #define WMREG_TXDMAC    0x3000  /* Transfer DMA Control */
  552 #define TXDMAC_DPP      (1U << 0)       /* disable packet prefetch */
  553 
  554 #define WMREG_TSPMT     0x3830  /* TCP Segmentation Pad and Minimum
  555                                    Threshold (Cordova) */
  556 #define TSPMT_TSMT(x)   (x)             /* TCP seg min transfer */
  557 #define TSPMT_TSPBP(x)  ((x) << 16)     /* TCP seg pkt buf padding */
  558 
  559 #define WMREG_RXCSUM    0x5000  /* Receive Checksum register */
  560 #define RXCSUM_PCSS     0x000000ff      /* Packet Checksum Start */
  561 #define RXCSUM_IPOFL    (1U << 8)       /* IP checksum offload */
  562 #define RXCSUM_TUOFL    (1U << 9)       /* TCP/UDP checksum offload */

Cache object: 4d9e2b5cc7742c076f7fbb63bb91d7fa


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.