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/ic/tulipreg.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: tulipreg.h,v 1.30.2.1 2005/07/01 12:28:14 tron Exp $   */
    2 
    3 /*-
    4  * Copyright (c) 1999, 2000 The NetBSD Foundation, Inc.
    5  * All rights reserved.
    6  *
    7  * This code is derived from software contributed to The NetBSD Foundation
    8  * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
    9  * NASA Ames Research Center.
   10  *
   11  * Redistribution and use in source and binary forms, with or without
   12  * modification, are permitted provided that the following conditions
   13  * are met:
   14  * 1. Redistributions of source code must retain the above copyright
   15  *    notice, this list of conditions and the following disclaimer.
   16  * 2. Redistributions in binary form must reproduce the above copyright
   17  *    notice, this list of conditions and the following disclaimer in the
   18  *    documentation and/or other materials provided with the distribution.
   19  * 3. All advertising materials mentioning features or use of this software
   20  *    must display the following acknowledgement:
   21  *      This product includes software developed by the NetBSD
   22  *      Foundation, Inc. and its contributors.
   23  * 4. Neither the name of The NetBSD Foundation nor the names of its
   24  *    contributors may be used to endorse or promote products derived
   25  *    from this software without specific prior written permission.
   26  *
   27  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
   28  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   29  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   30  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   31  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   32  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   33  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   34  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   35  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   36  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   37  * POSSIBILITY OF SUCH DAMAGE.
   38  */
   39 
   40 #ifndef _DEV_IC_TULIPREG_H_
   41 #define _DEV_IC_TULIPREG_H_
   42 
   43 /*
   44  * Register description for the Digital Semiconductor ``Tulip'' (21x4x)
   45  * Ethernet controller family, and a variety of clone chips, including:
   46  *
   47  *      - Macronix 98713, 98713A, 98715, 98715A, 98725 (PMAC):
   48  *
   49  *        These chips are fairly straight-forward Tulip clones.
   50  *        The 98713 is a very close 21140A clone.  It has GPR
   51  *        and MII media, and a GPIO facility, and uses the ISV
   52  *        SROM format (or, at least, should, because of the GPIO
   53  *        facility).  The 98713A has MII, no GPIO facility, and
   54  *        an internal NWay block.  The 98715, 98715A, and 98725
   55  *        have only GPR media and the NWay block.  The 98715,
   56  *        98715A, and 98725 support power management.
   57  *
   58  *        The 98715AEC adds 802.3x flow Frame based Flow Control to the
   59  *        98715A.
   60  *
   61  *      - Lite-On 82C115 (PNIC II):
   62  *
   63  *        A clone of the Macronix MX98725, with the following differences:
   64  *
   65  *              - Wake-On-LAN support
   66  *              - 128-bit multicast hash table rather than the
   67  *                standard 512-bit hash table
   68  *              - 802.3x flow control
   69  *
   70  *      - Lite-On 82C168, 82C169 (PNIC):
   71  *
   72  *        Pretty close, with only a few minor differences:
   73  *
   74  *              - EEPROM is accessed completely differently.
   75  *              - MII is accessed completely differently.
   76  *              - No SIO facility (due to the above two differences).
   77  *              - GPIO interface is different than the 21140's.
   78  *              - Boards that lack PHYs use the internal NWay block
   79  *                and transceiver.
   80  *
   81  *      - Winbond 89C840F
   82  *
   83  *        Less similar, but still roughly compatible (enough so
   84  *        that the driver can be adapted, at least):
   85  *
   86  *              - Registers lack the pad word between them.
   87  *              - Instead of a setup frame, there are two station
   88  *                address registers and two multicast hash table
   89  *                registers (64-bit multicast hash table).
   90  *              - Only supported media interface is MII-over-SIO.
   91  *              - Different OPMODE register bits for various things
   92  *                (mostly media related).
   93  *
   94  *      - ADMtek AL981
   95  *
   96  *        Another pretty-close clone:
   97  *
   98  *              - Wake-On-LAN support
   99  *              - Instead of a setup frame, there are two station
  100  *                address registers and two multicast hash table
  101  *                registers (64-bit multicast hash table).
  102  *              - 802.3x flow control
  103  *              - Only supported media interface is built-in PHY
  104  *                which is accessed through a set of special registers.
  105  *              - Not all registers have the pad word between them,
  106  *                but luckily, there are all AL981-specific registers,
  107  *                so this is easy to deal with.
  108  *
  109  *      - ADMtek AN983 and AN985
  110  *
  111  *        Similar to the ADMtek AL981, but with a few differences.
  112  *
  113  *      - Xircom X3201-3
  114  *
  115  *        CardBus 21143 clone, with a few differences:
  116  *
  117  *              - No MicroWire SROM; Ethernet address must come
  118  *                from CIS.
  119  *              - Transmit buffers must also be 32-bit aligned.
  120  *              - The BUSMODE_SWR bit is not self-clearing.
  121  *              - Must include FS|LS in setup packet descriptor.
  122  *              - SIA is not 21143-like, and all media attachments
  123  *                are MII-on-SIO.
  124  *
  125  *      - Davicom DM9102 and DM9102A
  126  *
  127  *        Pretty similar to the 21140A, with a few differences:
  128  *
  129  *              - Wake-On-LAN support
  130  *              - DM9102 has built-in 10/100 PHY on MII interface.
  131  *              - DM9102A has built-in 10/100 PHY on MII interface,
  132  *                as well as a HomePNA 1 PHY on an alternate MII
  133  *                interface (selected by clearing OPMODE_PS).
  134  *              - The chip has a bug in the transmit DMA logic,
  135  *                requiring that the packet be comprised of only
  136  *                one DMA segment.
  137  *              - The bus interface is buggy, and the BUSMODE register
  138  *                must be initialized to 0.
  139  *              - There seems to be an interrupt logic bug, requiring
  140  *                that interrupts be disabled on the chip during the
  141  *                interrupt handler.
  142  *      
  143  *      - ASIX AX88140
  144  *      
  145  *        21433 clone with a few differences:
  146  *
  147  *              - Specific broadcast bit in the OPMODE register.
  148  *              - Transmit buffer must be 32-bit aligned.
  149  *              - The BUSMODE_SWR bit is not self-clearing.
  150  *              - External 10BaseT PHY or 10/100 MII.
  151  *
  152  * Some of the clone chips have different registers, and some have
  153  * different bits in the same registers.  These will be denoted by
  154  * PMAC, PNICII, PNIC, DM, WINB, ADM and AX in the register/bit names.
  155  */
  156 
  157 /*
  158  * Tulip buffer descriptor.  Must be 4-byte aligned.
  159  *
  160  * Note for receive descriptors, the byte count fields must
  161  * be a multiple of 4.
  162  */
  163 struct tulip_desc {
  164         __volatile u_int32_t td_status;   /* Status */
  165         __volatile u_int32_t td_ctl;      /* Control and Byte Counts */
  166         __volatile u_int32_t td_bufaddr1; /* Buffer Address 1 */
  167         __volatile u_int32_t td_bufaddr2; /* Buffer Address 2 */
  168 };
  169 
  170 /*
  171  * Descriptor Status bits common to transmit and receive.
  172  */
  173 #define TDSTAT_OWN      0x80000000      /* Tulip owns descriptor */
  174 #define TDSTAT_ES       0x00008000      /* Error Summary */
  175 
  176 /*
  177  * Descriptor Status bits for Receive Descriptor.
  178  */
  179 #define TDSTAT_Rx_FF    0x40000000      /* Filtering Fail */
  180 #define TDSTAT_WINB_Rx_RCMP 0x40000000  /* Receive Complete */
  181 #define TDSTAT_Rx_FL    0x3fff0000      /* Frame Length including CRC */
  182 #define TDSTAT_Rx_DE    0x00004000      /* Descriptor Error */
  183 #define TDSTAT_Rx_DT    0x00003000      /* Data Type */
  184 #define TDSTAT_Rx_RF    0x00000800      /* Runt Frame */
  185 #define TDSTAT_Rx_MF    0x00000400      /* Multicast Frame */
  186 #define TDSTAT_Rx_FS    0x00000200      /* First Descriptor */
  187 #define TDSTAT_Rx_LS    0x00000100      /* Last Descriptor */
  188 #define TDSTAT_Rx_TL    0x00000080      /* Frame Too Long */
  189 #define TDSTAT_Rx_CS    0x00000040      /* Collision Seen */
  190 #define TDSTAT_Rx_RT    0x00000020      /* Frame Type */
  191 #define TDSTAT_Rx_RW    0x00000010      /* Receive Watchdog */
  192 #define TDSTAT_Rx_RE    0x00000008      /* Report on MII Error */
  193 #define TDSTAT_Rx_DB    0x00000004      /* Dribbling Bit */
  194 #define TDSTAT_Rx_CE    0x00000002      /* CRC Error */
  195 #define TDSTAT_Rx_ZER   0x00000001      /* Zero (always 0) */
  196 
  197 #define TDSTAT_Rx_LENGTH(x)     (((x) & TDSTAT_Rx_FL) >> 16)
  198 
  199 #define TDSTAT_Rx_DT_SR 0x00000000      /* Serial Received Frame */
  200 #define TDSTAT_Rx_DT_IL 0x00001000      /* Internal Loopback Frame */
  201 #define TDSTAT_Rx_DT_EL 0x00002000      /* External Loopback Frame */
  202 #define TDSTAT_Rx_DT_r  0x00003000      /* Reserved */
  203 
  204 /*
  205  * Descriptor Status bits for Transmit Descriptor.
  206  */
  207 #define TDSTAT_WINB_Tx_TE 0x00008000    /* Transmit Error */
  208 #define TDSTAT_Tx_TO    0x00004000      /* Transmit Jabber Timeout */
  209 #define TDSTAT_Tx_LO    0x00000800      /* Loss of Carrier */
  210 #define TDSTAT_Tx_NC    0x00000400      /* No Carrier */
  211 #define TDSTAT_Tx_LC    0x00000200      /* Late Collision */
  212 #define TDSTAT_Tx_EC    0x00000100      /* Excessive Collisions */
  213 #define TDSTAT_Tx_HF    0x00000080      /* Heartbeat Fail */
  214 #define TDSTAT_Tx_CC    0x00000078      /* Collision Count */
  215 #define TDSTAT_Tx_LF    0x00000004      /* Link Fail */
  216 #define TDSTAT_Tx_UF    0x00000002      /* Underflow Error */
  217 #define TDSTAT_Tx_DE    0x00000001      /* Deferred */
  218 
  219 #define TDSTAT_Tx_COLLISIONS(x) (((x) & TDSTAT_Tx_CC) >> 3)
  220 
  221 /*
  222  * Descriptor Control bits common to transmit and receive.
  223  */
  224 #define TDCTL_SIZE1     0x000007ff      /* Size of buffer 1 */
  225 #define TDCTL_SIZE1_SHIFT 0
  226 
  227 #define TDCTL_SIZE2     0x003ff800      /* Size of buffer 2 */
  228 #define TDCTL_SIZE2_SHIFT 11
  229 
  230 #define TDCTL_ER        0x02000000      /* End of Ring */
  231 #define TDCTL_CH        0x01000000      /* Second Address Chained */
  232 
  233 /*
  234  * Descriptor Control bits for Transmit Descriptor.
  235  */
  236 #define TDCTL_Tx_IC     0x80000000      /* Interrupt on Completion */
  237 #define TDCTL_Tx_LS     0x40000000      /* Last Segment */
  238 #define TDCTL_Tx_FS     0x20000000      /* First Segment */
  239 #define TDCTL_Tx_FT1    0x10000000      /* Filtering Type 1 */
  240 #define TDCTL_Tx_SET    0x08000000      /* Setup Packet */
  241 #define TDCTL_Tx_AC     0x04000000      /* Add CRC Disable */
  242 #define TDCTL_Tx_DPD    0x00800000      /* Disabled Padding */
  243 #define TDCTL_Tx_FT0    0x00400000      /* Filtering Type 0 */
  244 
  245 /*
  246  * The Tulip filter is programmed by "transmitting" a Setup Packet
  247  * (indicated by TDCTL_Tx_SET).  The filtering type is indicated
  248  * as follows:
  249  *
  250  *      FT1     FT0     Description
  251  *      ---     ---     -----------
  252  *      0       0       Perfect Filtering: The Tulip interprets the
  253  *                      descriptor buffer as a table of 16 MAC addresses
  254  *                      that the Tulip should receive.
  255  *
  256  *      0       1       Hash Filtering: The Tulip interprets the
  257  *                      descriptor buffer as a 512-bit hash table
  258  *                      plus one perfect address.  If the incoming
  259  *                      address is Multicast, the hash table filters
  260  *                      the address, else the address is filtered by
  261  *                      the perfect address.
  262  *
  263  *      1       0       Inverse Filtering: Like Perfect Filtering, except
  264  *                      the table is addresses that the Tulip does NOT
  265  *                      receive.
  266  *
  267  *      1       1       Hash-only Filtering: Like Hash Filtering, but
  268  *                      physical addresses are matched by the hash table
  269  *                      as well, and not by matching a single perfect
  270  *                      address.
  271  *
  272  * A Setup Packet must always be 192 bytes long.  The Tulip can store
  273  * 16 MAC addresses.  If not all 16 are specified in Perfect Filtering
  274  * or Inverse Filtering mode, then unused entries should duplicate
  275  * one of the valid entries.
  276  */
  277 #define TDCTL_Tx_FT_PERFECT     0
  278 #define TDCTL_Tx_FT_HASH        TDCTL_Tx_FT0
  279 #define TDCTL_Tx_FT_INVERSE     TDCTL_Tx_FT1
  280 #define TDCTL_Tx_FT_HASHONLY    (TDCTL_Tx_FT1|TDCTL_Tx_FT0)
  281 
  282 #define TULIP_SETUP_PACKET_LEN  192
  283 #define TULIP_MAXADDRS          16
  284 #define TULIP_MCHASHSIZE        512
  285 #define TULIP_PNICII_HASHSIZE   128
  286 
  287 /*
  288  * Maximum size of a Tulip Ethernet Address ROM or SROM.
  289  */
  290 #define TULIP_ROM_SIZE(bits)    (2 << (bits))
  291 #define TULIP_MAX_ROM_SIZE      512
  292 
  293 /*
  294  * Format of the standard Tulip SROM information:
  295  *
  296  *      Byte offset     Size    Usage
  297  *      0               18      reserved
  298  *      18              1       SROM Format Version
  299  *      19              1       Chip Count
  300  *      20              6       IEEE Network Address
  301  *      26              1       Chip 0 Device Number
  302  *      27              2       Chip 0 Info Leaf Offset
  303  *      29              1       Chip 1 Device Number
  304  *      30              2       Chip 1 Info Leaf Offset
  305  *      32              1       Chip 2 Device Number
  306  *      33              2       Chip 2 Info Leaf Offset
  307  *      ...             1       Chip n Device Number
  308  *      ...             2       Chip n Info Leaf Offset
  309  *      ...             ...     ...
  310  *      Chip Info Leaf Information
  311  *      ...
  312  *      ...
  313  *      ...
  314  *      126             2       CRC32 checksum
  315  */
  316 #define TULIP_ROM_SROM_FORMAT_VERION            18              /* B */
  317 #define TULIP_ROM_CHIP_COUNT                    19              /* B */
  318 #define TULIP_ROM_IEEE_NETWORK_ADDRESS          20
  319 #define TULIP_ROM_CHIPn_DEVICE_NUMBER(n)        (26 + ((n) * 3))/* B */
  320 #define TULIP_ROM_CHIPn_INFO_LEAF_OFFSET(n)     (27 + ((n) * 3))/* W */
  321 #define TULIP_ROM_CRC32_CHECKSUM                126             /* W */
  322 #define TULIP_ROM_CRC32_CHECKSUM1               94              /* W */
  323 
  324 #define TULIP_ROM_IL_SELECT_CONN_TYPE           0               /* W */
  325 #define TULIP_ROM_IL_MEDIA_COUNT                2               /* B */
  326 #define TULIP_ROM_IL_MEDIAn_BLOCK_BASE          3
  327 
  328 #define SELECT_CONN_TYPE_TP             0x0000
  329 #define SELECT_CONN_TYPE_BNC            0x0001
  330 #define SELECT_CONN_TYPE_AUI            0x0002
  331 #define SELECT_CONN_TYPE_100TX          0x0003
  332 #define SELECT_CONN_TYPE_100T4          0x0006
  333 #define SELECT_CONN_TYPE_100FX          0x0007
  334 #define SELECT_CONN_TYPE MII_10T        0x0009
  335 #define SELECT_CONN_TYPE_MII_100TX      0x000d
  336 #define SELECT_CONN_TYPE_MII_100T4      0x000f
  337 #define SELECT_CONN_TYPE_MII_100FX      0x0010
  338 #define SELECT_CONN_TYPE_TP_AUTONEG     0x0100
  339 #define SELECT_CONN_TYPE_TP_FDX         0x0204
  340 #define SELECT_CONN_TYPE_MII_10T_FDX    0x020a
  341 #define SELECT_CONN_TYPE_100TX_FDX      0x020e
  342 #define SELECT_CONN_TYPE_MII_100TX_FDX  0x0211
  343 #define SELECT_CONN_TYPE_TP_NOLINKPASS  0x0400
  344 #define SELECT_CONN_TYPE_ASENSE         0x0800
  345 #define SELECT_CONN_TYPE_ASENSE_POWERUP 0x8800
  346 #define SELECT_CONN_TYPE_ASENSE_AUTONEG 0x0900
  347 
  348 #define TULIP_ROM_MB_MEDIA_CODE         0x3f
  349 #define TULIP_ROM_MB_MEDIA_TP           0x00
  350 #define TULIP_ROM_MB_MEDIA_BNC          0x01
  351 #define TULIP_ROM_MB_MEDIA_AUI          0x02
  352 #define TULIP_ROM_MB_MEDIA_100TX        0x03
  353 #define TULIP_ROM_MB_MEDIA_TP_FDX       0x04
  354 #define TULIP_ROM_MB_MEDIA_100TX_FDX    0x05
  355 #define TULIP_ROM_MB_MEDIA_100T4        0x06
  356 #define TULIP_ROM_MB_MEDIA_100FX        0x07
  357 #define TULIP_ROM_MB_MEDIA_100FX_FDX    0x08
  358 
  359 #define TULIP_ROM_MB_EXT                0x40
  360 
  361 #define TULIP_ROM_MB_CSR13              1                       /* W */
  362 #define TULIP_ROM_MB_CSR14              3                       /* W */
  363 #define TULIP_ROM_MB_CSR15              5                       /* W */
  364 
  365 #define TULIP_ROM_MB_SIZE(mc)           (((mc) & TULIP_ROM_MB_EXT) ? 7 : 1)
  366 
  367 #define TULIP_ROM_MB_NOINDICATOR        0x8000
  368 #define TULIP_ROM_MB_DEFAULT            0x4000
  369 #define TULIP_ROM_MB_POLARITY           0x0080
  370 #define TULIP_ROM_MB_OPMODE(x)          (((x) & 0x71) << 18)
  371 #define TULIP_ROM_MB_BITPOS(x)          (1 << (((x) & 0x0e) >> 1))
  372 
  373 #define TULIP_ROM_MB_21140_GPR          0       /* 21140[A] GPR block */
  374 #define TULIP_ROM_MB_21140_MII          1       /* 21140[A] MII block */
  375 #define TULIP_ROM_MB_21142_SIA          2       /* 2114[23] SIA block */
  376 #define TULIP_ROM_MB_21142_MII          3       /* 2114[23] MII block */
  377 #define TULIP_ROM_MB_21143_SYM          4       /* 21143 SYM block */
  378 #define TULIP_ROM_MB_21143_RESET        5       /* 21143 reset block */
  379 
  380 #define TULIP_ROM_GETW(data, off) ((uint32_t)(data)[(off)] |            \
  381                                    (uint32_t)((data)[(off) + 1]) << 8)
  382 
  383 /*
  384  * Tulip control registers.
  385  */
  386 
  387 #define TULIP_CSR0      0x00
  388 #define TULIP_CSR1      0x08
  389 #define TULIP_CSR2      0x10
  390 #define TULIP_CSR3      0x18
  391 #define TULIP_CSR4      0x20
  392 #define TULIP_CSR5      0x28
  393 #define TULIP_CSR6      0x30
  394 #define TULIP_CSR7      0x38
  395 #define TULIP_CSR8      0x40
  396 #define TULIP_CSR9      0x48
  397 #define TULIP_CSR10     0x50
  398 #define TULIP_CSR11     0x58
  399 #define TULIP_CSR12     0x60
  400 #define TULIP_CSR13     0x68
  401 #define TULIP_CSR14     0x70
  402 #define TULIP_CSR15     0x78
  403 #define TULIP_CSR16     0x80
  404 #define TULIP_CSR17     0x88
  405 #define TULIP_CSR18     0x90
  406 #define TULIP_CSR19     0x98
  407 #define TULIP_CSR20     0xa0
  408 #define TULIP_CSR21     0xa8
  409 #define TULIP_CSR22     0xb0
  410 #define TULIP_CSR23     0xb8
  411 #define TULIP_CSR24     0xc0
  412 #define TULIP_CSR25     0xc8
  413 #define TULIP_CSR26     0xd0
  414 #define TULIP_CSR27     0xd8
  415 #define TULIP_CSR28     0xe0
  416 #define TULIP_CSR29     0xe8
  417 #define TULIP_CSR30     0xf0
  418 #define TULIP_CSR31     0xf8
  419 
  420 #define TULIP_CSR_INDEX(csr)    ((csr) >> 3)
  421 
  422 /* CSR0 - Bus Mode */
  423 #define CSR_BUSMODE             TULIP_CSR0
  424 #define BUSMODE_SWR             0x00000001      /* software reset */
  425 #define BUSMODE_BAR             0x00000002      /* bus arbitration */
  426 #define BUSMODE_DSL             0x0000007c      /* descriptor skip length */
  427 #define BUSMODE_BLE             0x00000080      /* big endian */
  428                                                 /* programmable burst length */
  429 #define BUSMODE_PBL_DEFAULT     0x00000000      /*     default value */
  430 #define BUSMODE_PBL_1LW         0x00000100      /*     1 longword */
  431 #define BUSMODE_PBL_2LW         0x00000200      /*     2 longwords */
  432 #define BUSMODE_PBL_4LW         0x00000400      /*     4 longwords */
  433 #define BUSMODE_PBL_8LW         0x00000800      /*     8 longwords */
  434 #define BUSMODE_PBL_16LW        0x00001000      /*    16 longwords */
  435 #define BUSMODE_PBL_32LW        0x00002000      /*    32 longwords */
  436                                                 /* cache alignment */
  437 #define BUSMODE_CAL_NONE        0x00000000      /*     no alignment */
  438 #define BUSMODE_CAL_8LW         0x00004000      /*     8 longwords */
  439 #define BUSMODE_CAL_16LW        0x00008000      /*    16 longwords */
  440 #define BUSMODE_CAL_32LW        0x0000c000      /*    32 longwords */
  441 #define BUSMODE_DAS             0x00010000      /* diagnostic address space */
  442                                                 /*   must be zero on most */
  443                                                 /* transmit auto-poll */
  444                 /*
  445                  * Transmit auto-polling not supported on:
  446                  *      Winbond 89C040F
  447                  *      Xircom X3201-3
  448                  *      Davicom DM9102 (buggy BUSMODE register)
  449                  *      ASIX AX88140
  450                  */
  451 #define BUSMODE_TAP_NONE        0x00000000      /*     no auto-polling */
  452 #define BUSMODE_TAP_200us       0x00020000      /*   200 uS */
  453 #define BUSMODE_TAP_800us       0x00040000      /*   400 uS */
  454 #define BUSMODE_TAP_1_6ms       0x00060000      /*   1.6 mS */
  455 #define BUSMODE_TAP_12_8us      0x00080000      /*  12.8 uS (21041+) */
  456 #define BUSMODE_TAP_25_6us      0x000a0000      /*  25.6 uS (21041+) */
  457 #define BUSMODE_TAP_51_2us      0x000c0000      /*  51.2 uS (21041+) */
  458 #define BUSMODE_TAP_102_4us     0x000e0000      /* 102.4 uS (21041+) */
  459 #define BUSMODE_DBO             0x00100000      /* desc-only b/e (21041+) */
  460 #define BUSMODE_RME             0x00200000      /* rd/mult enab (21140+) */
  461 #define BUSMODE_WINB_WAIT       0x00200000      /* wait state insertion */
  462 #define BUSMODE_RLE             0x00800000      /* rd/line enab (21140+) */
  463 #define BUSMODE_WLE             0x01000000      /* wt/line enab (21140+) */
  464 #define BUSMODE_PNIC_MBO        0x04000000      /* magic `must be one' bit */
  465                                                 /*    on Lite-On PNIC */
  466 
  467 
  468 /* CSR1 - Transmit Poll Demand */
  469 #define CSR_TXPOLL              TULIP_CSR1
  470 #define TXPOLL_TPD              0x00000001      /* transmit poll demand */
  471 
  472 
  473 /* CSR2 - Receive Poll Demand */
  474 #define CSR_RXPOLL              TULIP_CSR2
  475 #define RXPOLL_RPD              0x00000001      /* receive poll demand */
  476 
  477 
  478 /* CSR3 - Receive List Base Address */
  479 #define CSR_RXLIST              TULIP_CSR3
  480 
  481 /* CSR4 - Transmit List Base Address */
  482 #define CSR_TXLIST              TULIP_CSR4
  483 
  484 /* CSR5 - Status */
  485 #define CSR_STATUS              TULIP_CSR5
  486 #define STATUS_TI               0x00000001      /* transmit interrupt */
  487 #define STATUS_TPS              0x00000002      /* transmit process stopped */
  488 #define STATUS_TU               0x00000004      /* transmit buffer unavail */
  489 #define STATUS_TJT              0x00000008      /* transmit jabber timeout */
  490 #define STATUS_WINB_REI         0x00000008      /* receive early interrupt */
  491 #define STATUS_LNPANC           0x00000010      /* link pass (21041) */
  492 #define STATUS_WINB_RERR        0x00000010      /* receive error */
  493 #define STATUS_UNF              0x00000020      /* transmit underflow */
  494 #define STATUS_RI               0x00000040      /* receive interrupt */
  495 #define STATUS_RU               0x00000080      /* receive buffer unavail */
  496 #define STATUS_RPS              0x00000100      /* receive process stopped */
  497 #define STATUS_RWT              0x00000200      /* receive watchdog timeout */
  498 #define STATUS_AT               0x00000400      /* SIA AUI/TP pin changed
  499                                                    (21040) */
  500 #define STATUS_ETI              0x00000400      /* early transmit interrupt
  501                                                    (21142/PMAC/Winbond) */
  502 #define STATUS_FD               0x00000800      /* full duplex short frame
  503                                                    received (21040) */
  504 #define STATUS_TM               0x00000800      /* timer expired (21041) */
  505 #define STATUS_LNF              0x00001000      /* link fail (21040) */
  506 #define STATUS_SE               0x00002000      /* system error */
  507 #define STATUS_ER               0x00004000      /* early receive (21041) */
  508 #define STATUS_AIS              0x00008000      /* abnormal interrupt summary */
  509 #define STATUS_NIS              0x00010000      /* normal interrupt summary */
  510 #define STATUS_RS               0x000e0000      /* receive process state */
  511 #define STATUS_RS_STOPPED       0x00000000      /* Stopped */
  512 #define STATUS_RS_FETCH         0x00020000      /* Running - fetch receive
  513                                                    descriptor */
  514 #define STATUS_RS_CHECK         0x00040000      /* Running - check for end
  515                                                    of receive */
  516 #define STATUS_RS_WAIT          0x00060000      /* Running - wait for packet */
  517 #define STATUS_RS_SUSPENDED     0x00080000      /* Suspended */
  518 #define STATUS_RS_CLOSE         0x000a0000      /* Running - close receive
  519                                                    descriptor */
  520 #define STATUS_RS_FLUSH         0x000c0000      /* Running - flush current
  521                                                    frame from FIFO */
  522 #define STATUS_RS_QUEUE         0x000e0000      /* Running - queue current
  523                                                    frame from FIFO into
  524                                                    buffer */
  525 #define STATUS_DM_RS_STOPPED    0x00000000      /* Stopped */
  526 #define STATUS_DM_RS_FETCH      0x00020000      /* Running - fetch receive
  527                                                    descriptor */
  528 #define STATUS_DM_RS_WAIT       0x00040000      /* Running - wait for packet */
  529 #define STATUS_DM_RS_QUEUE      0x00060000      /* Running - queue current
  530                                                    frame from FIFO into
  531                                                    buffer */
  532 #define STATUS_DM_RS_CLOSE_OWN  0x00080000      /* Running - close receive
  533                                                    descriptor, clear own */
  534 #define STATUS_DM_RS_CLOSE_ST   0x000a0000      /* Running - close receive
  535                                                    descriptor, write status */
  536 #define STATUS_DM_RS_SUSPENDED  0x000c0000      /* Suspended */
  537 #define STATUS_DM_RS_FLUSH      0x000e0000      /* Running - flush current
  538                                                    frame from FIFO */
  539 #define STATUS_TS               0x00700000      /* transmit process state */
  540 #define STATUS_TS_STOPPED       0x00000000      /* Stopped */
  541 #define STATUS_TS_FETCH         0x00100000      /* Running - fetch transmit
  542                                                    descriptor */
  543 #define STATUS_TS_WAIT          0x00200000      /* Running - wait for end
  544                                                    of transmission */
  545 #define STATUS_TS_READING       0x00300000      /* Running - read buffer from
  546                                                    memory and queue into
  547                                                    FIFO */
  548 #define STATUS_TS_RESERVED      0x00400000      /* RESERVED */
  549 #define STATUS_TS_SETUP         0x00500000      /* Running - Setup packet */
  550 #define STATUS_TS_SUSPENDED     0x00600000      /* Suspended */
  551 #define STATUS_TS_CLOSE         0x00700000      /* Running - close transmit
  552                                                    descriptor */
  553 #define STATUS_DM_TS_STOPPED    0x00000000      /* Stopped */
  554 #define STATUS_DM_TS_FETCH      0x00100000      /* Running - fetch transmit
  555                                                    descriptor */
  556 #define STATUS_DM_TS_SETUP      0x00200000      /* Running - Setup packet */
  557 #define STATUS_DM_TS_READING    0x00300000      /* Running - read buffer from
  558                                                    memory and queue into
  559                                                    FIFO */
  560 #define STATUS_DM_TS_CLOSE_OWN  0x00400000      /* Running - close transmit
  561                                                    descriptor, clear own */
  562 #define STATUS_DM_TS_WAIT       0x00500000      /* Running - wait for end
  563                                                    of transmission */
  564 #define STATUS_DM_TS_CLOSE_ST   0x00600000      /* Running - close transmit
  565                                                    descriptor, write status */
  566 #define STATUS_DM_TS_SUSPENDED  0x00700000      /* Suspended */
  567 #define STATUS_EB               0x03800000      /* error bits */
  568 #define STATUS_EB_PARITY        0x00000000      /* parity errror */
  569 #define STATUS_EB_MABT          0x00800000      /* master abort */
  570 #define STATUS_EB_TABT          0x01000000      /* target abort */
  571 #define STATUS_GPPI             0x04000000      /* GPIO interrupt (21142) */
  572 #define STATUS_PNIC_TXABORT     0x04000000      /* transmit aborted */
  573 #define STATUS_LC               0x08000000      /* 100baseTX link change
  574                                                    (21142/PMAC) */
  575 #define STATUS_PMAC_WKUPI       0x10000000      /* wake up event */
  576 #define STATUS_X3201_PMEIS      0x10000000      /* power management event
  577                                                    interrupt summary */
  578 #define STATUS_X3201_SFIS       0x80000000      /* second function (Modem)
  579                                                    interrupt status */
  580 
  581 
  582 /* CSR6 - Operation Mode */
  583 #define CSR_OPMODE              TULIP_CSR6
  584 #define OPMODE_HP               0x00000001      /* hash/perfect mode (ro) */
  585 #define OPMODE_SR               0x00000002      /* start receive */
  586 #define OPMODE_HO               0x00000004      /* hash only mode (ro) */
  587 #define OPMODE_PB               0x00000008      /* pass bad frames */
  588 #define OPMODE_WINB_APP         0x00000008      /* accept all physcal packet */
  589 #define OPMODE_IF               0x00000010      /* inverse filter mode (ro) */
  590 #define OPMODE_WINB_AMP         0x00000010      /* accept multicast packet */
  591 #define OPMODE_SB               0x00000020      /* start backoff counter */
  592 #define OPMODE_WINB_ABP         0x00000020      /* accept broadcast packet */
  593 #define OPMODE_PR               0x00000040      /* promiscuous mode */
  594 #define OPMODE_WINB_ARP         0x00000040      /* accept runt packet */
  595 #define OPMODE_PM               0x00000080      /* pass all multicast */
  596 #define OPMODE_WINB_AEP         0x00000080      /* accept error packet */
  597 #define OPMODE_FKD              0x00000100      /* flaky oscillator disable */
  598 #define OPMODE_AX_RB            0x00000100      /* recieve broadcast packets */
  599 #define OPMODE_FD               0x00000200      /* full-duplex mode */
  600 #define OPMODE_OM               0x00000c00      /* operating mode */
  601 #define OPMODE_OM_NORMAL        0x00000000      /*     normal mode */
  602 #define OPMODE_OM_INTLOOP       0x00000400      /*     internal loopback */
  603 #define OPMODE_OM_EXTLOOP       0x00000800      /*     external loopback */
  604 #define OPMODE_FC               0x00001000      /* force collision */
  605 #define OPMODE_ST               0x00002000      /* start transmitter */
  606 #define OPMODE_TR               0x0000c000      /* threshold control */
  607 #define OPMODE_TR_72            0x00000000      /*     72 bytes */
  608 #define OPMODE_TR_96            0x00004000      /*     96 bytes */
  609 #define OPMODE_TR_128           0x00008000      /*    128 bytes */
  610 #define OPMODE_TR_160           0x0000c000      /*    160 bytes */
  611 #define OPMODE_WINB_TTH         0x001fc000      /* transmit threshold */
  612 #define OPMODE_WINB_TTH_SHIFT   14
  613 #define OPMODE_BP               0x00010000      /* backpressure enable */
  614 #define OPMODE_CA               0x00020000      /* capture effect enable */
  615 #define OPMODE_PNIC_TBEN        0x00020000      /* Tx backoff offset enable */
  616         /*
  617          * On Davicom DM9102, OPMODE_PS and OPMODE_HBD must
  618          * always be set.
  619          */
  620 #define OPMODE_PS               0x00040000      /* port select:
  621                                                    1 = MII/SYM, 0 = SRL
  622                                                    (21140) */
  623 #define OPMODE_HBD              0x00080000      /* heartbeat disable:
  624                                                    set in MII/SYM 100mbps,
  625                                                    set according to PHY
  626                                                    in MII 10mbps mode
  627                                                    (21140) */
  628 #define OPMODE_PNIC_IT          0x00100000      /* immediate transmit */
  629 #define OPMODE_SF               0x00200000      /* store and forward mode
  630                                                    (21140) */
  631 #define OPMODE_WINB_REIT        0x1fe00000      /* receive eartly intr thresh */
  632 #define OPMODE_WINB_REIT_SHIFT  21
  633 #define OPMODE_TTM              0x00400000      /* Transmit Threshold Mode:
  634                                                    1 = 10mbps, 0 = 100mbps
  635                                                    (21140) */
  636 #define OPMODE_PCS              0x00800000      /* PCS function (21140) */
  637 #define OPMODE_SCR              0x01000000      /* scrambler mode (21140) */
  638 #define OPMODE_MBO              0x02000000      /* must be one (21140,
  639                                                    DM9102) */
  640 #define OPMODE_IDAMSB           0x04000000      /* ignore dest addr MSB
  641                                                    (21142) */
  642 #define OPMODE_PNIC_DRC         0x20000000      /* don't include CRC in Rx
  643                                                    frames (PNIC) */
  644 #define OPMODE_WINB_FES         0x20000000      /* fast ethernet select */
  645 #define OPMODE_RA               0x40000000      /* receive all (21140) */
  646 #define OPMODE_PNIC_EED         0x40000000      /* 1 == ext, 0 == int ENDEC
  647                                                    (PNIC) */
  648 #define OPMODE_WINB_TEIO        0x40000000      /* transmit early intr on */
  649 #define OPMODE_SC               0x80000000      /* special capture effect
  650                                                    enable (21041+) */
  651 #define OPMODE_WINB_REIO        0x80000000      /* receive early intr on */
  652 
  653 /* Shorthand for media-related OPMODE bits */
  654 #define OPMODE_MEDIA_BITS       (OPMODE_FD|OPMODE_PS|OPMODE_TTM|OPMODE_PCS|OPMODE_SCR)
  655 
  656 /* CSR7 - Interrupt Enable */
  657 #define CSR_INTEN               TULIP_CSR7
  658         /* See bits for CSR5 -- Status */
  659 
  660 
  661 /* CSR8 - Missed Frames */
  662 #define CSR_MISSED              TULIP_CSR8
  663 #define MISSED_MFC              0x0000ffff      /* missed packet count */
  664 #define MISSED_MFO              0x00010000      /* missed packet count
  665                                                    overflowed */
  666 #define MISSED_FOC              0x0ffe0000      /* fifo overflow counter
  667                                                    (21140) */
  668 #define MISSED_OCO              0x10000000      /* overflow counter overflowed
  669                                                    (21140) */
  670 
  671 #define MISSED_GETMFC(x)        ((x) & MISSED_MFC)
  672 #define MISSED_GETFOC(x)        (((x) & MISSED_FOC) >> 17)
  673 
  674 
  675 /* CSR9 - MII, SROM, Boot ROM, Ethernet Address ROM register. */
  676 #define CSR_MIIROM              TULIP_CSR9
  677 #define MIIROM_DATA             0x000000ff      /* byte of data from
  678                                                    Ethernet Address ROM
  679                                                    (21040), byte of data
  680                                                    to/from Boot ROM (21041+) */
  681 #define MIIROM_SROMCS           0x00000001      /* SROM chip select */
  682 #define MIIROM_SROMSK           0x00000002      /* SROM clock */
  683 #define MIIROM_SROMDI           0x00000004      /* SROM data in (to) */
  684 #define MIIROM_SROMDO           0x00000008      /* SROM data out (from) */
  685 #define MIIROM_REG              0x00000400      /* external register select */
  686 #define MIIROM_SR               0x00000800      /* SROM select */
  687 #define MIIROM_BR               0x00001000      /* boot ROM select */
  688 #define MIIROM_WR               0x00002000      /* write to boot ROM */
  689 #define MIIROM_RD               0x00004000      /* read from boot ROM */
  690 #define MIIROM_MOD              0x00008000      /* mode select (ro) (21041) */
  691 #define MIIROM_MDC              0x00010000      /* MII clock */
  692 #define MIIROM_MDO              0x00020000      /* MII data out */
  693 #define MIIROM_MIIDIR           0x00040000      /* MII direction mode
  694                                                    1 = PHY in read,
  695                                                    0 = PHY in write */
  696 #define MIIROM_MDI              0x00080000      /* MII data in */
  697 #define MIIROM_DN               0x80000000      /* data not valid (21040) */
  698 
  699 #define MIIROM_PMAC_LED0SEL     0x10000000      /* 0 == LED0 activity (def)
  700                                                    1 == LED0 speed */
  701 #define MIIROM_PMAC_LED1SEL     0x20000000      /* 0 == LED1 link (def)
  702                                                    1 == LED1 link/act */
  703 #define MIIROM_PMAC_LED2SEL     0x40000000      /* 0 == LED2 speed (def)
  704                                                    1 == LED2 collision */
  705 #define MIIROM_PMAC_LED3SEL     0x80000000      /* 0 == LED3 receive (def)
  706                                                    1 == LED3 full duplex */
  707 
  708         /* SROM opcodes */
  709 #define TULIP_SROM_OPC_ERASE    0x04
  710 #define TULIP_SROM_OPC_WRITE    0x05
  711 #define TULIP_SROM_OPC_READ     0x06
  712 
  713         /* The Lite-On PNIC does this completely differently */
  714 #define PNIC_MIIROM_DATA        0x0000ffff      /* mask of data bits ??? */
  715 #define PNIC_MIIROM_BUSY        0x80000000      /* EEPROM is busy */
  716 
  717 
  718 /* CSR10 - Boot ROM address register (21041+). */
  719 #define CSR_ROMADDR             TULIP_CSR10
  720 #define ROMADDR_MASK            0x000003ff      /* boot rom address */
  721 
  722 
  723 /* CSR11 - General Purpose Timer (21041+). */
  724 #define CSR_GPT                 TULIP_CSR11
  725 #define GPT_VALUE               0x0000ffff      /* timer value */
  726 #define GPT_CON                 0x00010000      /* continuous mode */
  727         /* 21143-PD and 21143-TD Interrupt Mitigation bits */
  728 #define GPT_NRX                 0x000e0000      /* number of Rx packets */
  729 #define GPT_RXT                 0x00f00000      /* Rx timer */
  730 #define GPT_NTX                 0x07000000      /* number of Tx packets */
  731 #define GPT_TXT                 0x78000000      /* Tx timer */
  732 #define GPT_CYCLE               0x80000000      /* cycle size */
  733 
  734 
  735 /* CSR12 - SIA Status Register. */
  736 #define CSR_SIASTAT             TULIP_CSR12
  737 #define SIASTAT_PAUI            0x00000001      /* pin AUI/TP indication
  738                                                    (21040) */
  739 #define SIASTAT_MRA             0x00000001      /* MII receive activity
  740                                                    (21142) */
  741 #define SIASTAT_NCR             0x00000002      /* network connection error */
  742 #define SIASTAT_LS100           0x00000002      /* 100baseT link status
  743                                                    0 == pass (21142) */
  744 #define SIASTAT_LKF             0x00000004      /* link fail status */
  745 #define SIASTAT_LS10            0x00000004      /* 10baseT link status
  746                                                    0 == pass (21142) */
  747 #define SIASTAT_APS             0x00000008      /* auto polarity status */
  748 #define SIASTAT_DSD             0x00000010      /* PLL self test done */
  749 #define SIASTAT_DSP             0x00000020      /* PLL self test pass */
  750 #define SIASTAT_DAZ             0x00000040      /* PLL all zero */
  751 #define SIASTAT_DAO             0x00000080      /* PLL all one */
  752 #define SIASTAT_SRA             0x00000100      /* selected port receive
  753                                                    activity (21041) */
  754 #define SIASTAT_ARA             0x00000100      /* AUI receive activity
  755                                                    (21142) */
  756 #define SIASTAT_NRA             0x00000200      /* non-selected port
  757                                                    receive activity (21041) */
  758 #define SIASTAT_TRA             0x00000200      /* 10base-T receive activity
  759                                                    (21142) */
  760 #define SIASTAT_NSN             0x00000400      /* non-stable NLPs detected
  761                                                    (21041) */
  762 #define SIASTAT_TRF             0x00000800      /* transmit remote fault
  763                                                    (21041) */
  764 #define SIASTAT_ANS             0x00007000      /* autonegotiation state
  765                                                    (21041) */
  766 #define SIASTAT_ANS_DIS         0x00000000      /*     disabled */
  767 #define SIASTAT_ANS_TXDIS       0x00001000      /*     transmit disabled */
  768 #define SIASTAT_ANS_START       0x00001000      /*     (MX98715AEC) */
  769 #define SIASTAT_ANS_ABD         0x00002000      /*     ability detect */
  770 #define SIASTAT_ANS_ACKD        0x00003000      /*     acknowledge detect */
  771 #define SIASTAT_ANS_ACKC        0x00004000      /*     complete acknowledge */
  772 #define SIASTAT_ANS_FLPGOOD     0x00005000      /*     FLP link good */
  773 #define SIASTAT_ANS_LINKCHECK   0x00006000      /*     link check */
  774 #define SIASTAT_LPN             0x00008000      /* link partner negotiable
  775                                                    (21041) */
  776 #define SIASTAT_LPC             0xffff0000      /* link partner code word */
  777 
  778 #define SIASTAT_GETLPC(x)       (((x) & SIASTAT_LPC) >> 16)
  779 
  780 
  781 /* CSR13 - SIA Connectivity Register. */
  782 #define CSR_SIACONN             TULIP_CSR13
  783 #define SIACONN_SRL             0x00000001      /* SIA reset
  784                                                    (0 == reset) */
  785 #define SIACONN_PS              0x00000002      /* pin AUI/TP selection
  786                                                    (21040) */
  787 #define SIACONN_CAC             0x00000004      /* CSR autoconfiguration */
  788 #define SIACONN_AUI             0x00000008      /* select AUI (0 = TP) */
  789 #define SIACONN_EDP             0x00000010      /* SIA PLL external input
  790                                                    enable (21040) */
  791 #define SIACONN_ENI             0x00000020      /* encoder input multiplexer
  792                                                    (21040) */
  793 #define SIACONN_SIM             0x00000040      /* serial interface input
  794                                                    multiplexer (21040) */
  795 #define SIACONN_ASE             0x00000080      /* APLL start enable
  796                                                    (21040) */
  797 #define SIACONN_SEL             0x00000f00      /* external port output
  798                                                    multiplexer select
  799                                                    (21040) */
  800 #define SIACONN_IE              0x00001000      /* input enable (21040) */
  801 #define SIACONN_OE1_3           0x00002000      /* output enable 1, 3
  802                                                    (21040) */
  803 #define SIACONN_OE2_4           0x00004000      /* output enable 2, 4
  804                                                    (21040) */
  805 #define SIACONN_OE5_6_7         0x00008000      /* output enable 5, 6, 7
  806                                                    (21040) */
  807 #define SIACONN_SDM             0x0000ef00      /* SIA diagnostic mode;
  808                                                    always set to this value
  809                                                    for normal operation
  810                                                    (21041) */
  811 
  812 
  813 /* CSR14 - SIA Transmit Receive Register. */
  814 #define CSR_SIATXRX             TULIP_CSR14
  815 #define SIATXRX_ECEN            0x00000001      /* encoder enable */
  816 #define SIATXRX_LBK             0x00000002      /* loopback enable */
  817 #define SIATXRX_DREN            0x00000004      /* driver enable */
  818 #define SIATXRX_LSE             0x00000008      /* link pulse send enable */
  819 #define SIATXRX_CPEN            0x00000030      /* compensation enable */
  820 #define SIATXRX_CPEN_DIS0       0x00000000      /*     disabled */
  821 #define SIATXRX_CPEN_DIS1       0x00000010      /*     disabled */
  822 #define SIATXRX_CPEN_HIGHPWR    0x00000020      /*     high power */
  823 #define SIATXRX_CPEN_NORMAL     0x00000030      /*     normal */
  824 #define SIATXRX_MBO             0x00000040      /* must be one (21041 pass 2) */
  825 #define SIATXRX_TH              0x00000040      /* 10baseT HDX enable (21142) */
  826 #define SIATXRX_ANE             0x00000080      /* autonegotiation enable
  827                                                    (21041/21142) */
  828 #define SIATXRX_RSQ             0x00000100      /* receive squelch enable */
  829 #define SIATXRX_CSQ             0x00000200      /* collision squelch enable */
  830 #define SIATXRX_CLD             0x00000400      /* collision detect enable */
  831 #define SIATXRX_SQE             0x00000800      /* signal quality generation
  832                                                    enable */
  833 #define SIATXRX_LTE             0x00001000      /* link test enable */
  834 #define SIATXRX_APE             0x00002000      /* auto-polarity enable */
  835 #define SIATXRX_SPP             0x00004000      /* set polarity plus */
  836 #define SIATXRX_TAS             0x00008000      /* 10base-T/AUI autosensing
  837                                                    enable (21041/21142) */
  838 #define SIATXRX_THX             0x00010000      /* 100baseTX-HDX (21142) */
  839 #define SIATXRX_TXF             0x00020000      /* 100baseTX-FDX (21142) */
  840 #define SIATXRX_T4              0x00040000      /* 100baseT4 (21142) */
  841 
  842 
  843 /* CSR15 - SIA General Register. */
  844 #define CSR_SIAGEN              TULIP_CSR15
  845 #define SIAGEN_JBD              0x00000001      /* jabber disable */
  846 #define SIAGEN_HUJ              0x00000002      /* host unjab */
  847 #define SIAGEN_JCK              0x00000004      /* jabber clock */
  848 #define SIAGEN_ABM              0x00000008      /* BNC select (21041) */
  849 #define SIAGEN_RWD              0x00000010      /* receive watchdog disable */
  850 #define SIAGEN_RWR              0x00000020      /* receive watchdog release */
  851 #define SIAGEN_LE1              0x00000040      /* LED 1 enable (21041) */
  852 #define SIAGEN_LV1              0x00000080      /* LED 1 value (21041) */
  853 #define SIAGEN_TSCK             0x00000100      /* test clock */
  854 #define SIAGEN_FUSQ             0x00000200      /* force unsquelch */
  855 #define SIAGEN_FLF              0x00000400      /* force link fail */
  856 #define SIAGEN_LSD              0x00000800      /* LED stretch disable
  857                                                    (21041) */
  858 #define SIAGEN_LEE              0x00000800      /* Link extend enable (21142) */
  859 #define SIAGEN_DPST             0x00001000      /* PLL self-test start */
  860 #define SIAGEN_FRL              0x00002000      /* force receiver low */
  861 #define SIAGEN_LE2              0x00004000      /* LED 2 enable (21041) */
  862 #define SIAGEN_RMP              0x00004000      /* received magic packet
  863                                                    (21143) */
  864 #define SIAGEN_LV2              0x00008000      /* LED 2 value (21041) */
  865 #define SIAGEN_HCKR             0x00008000      /* hacker (21143) */
  866 #define SIAGEN_MD               0x000f0000      /* general purpose mode/data */
  867 #define SIAGEN_LGS0             0x00100000      /* LED/GEP 0 select */
  868 #define SIAGEN_LGS1             0x00200000      /* LED/GEP 1 select */
  869 #define SIAGEN_LGS2             0x00400000      /* LED/GEP 2 select */
  870 #define SIAGEN_LGS3             0x00800000      /* LED/GEP 3 select */
  871 #define SIAGEN_GEI0             0x01000000      /* GEP pin 0 intr enable */
  872 #define SIAGEN_GEI1             0x02000000      /* GEP pin 1 intr enable */
  873 #define SIAGEN_RME              0x04000000      /* receive match enable */
  874 #define SIAGEN_CWE              0x08000000      /* control write enable */
  875 #define SIAGEN_GI0              0x10000000      /* GEP pin 0 interrupt */
  876 #define SIAGEN_GI1              0x20000000      /* GEP pin 1 interrupt */
  877 #define SIAGEN_RMI              0x40000000      /* receive match interrupt */
  878 
  879 
  880 /* CSR12 - General Purpose Port (21140+). */
  881 #define CSR_GPP                 TULIP_CSR12
  882 #define GPP_MD                  0x000000ff      /* general purpose mode/data */
  883 #define GPP_GPC                 0x00000100      /* general purpose control */
  884 #define GPP_PNIC_GPD            0x0000000f      /* general purpose data */
  885 #define GPP_PNIC_GPC            0x000000f0      /* general purpose control */
  886 
  887 #define GPP_PNIC_IN(x)          (1 << (x))
  888 #define GPP_PNIC_OUT(x, on)     (((on) << (x)) | (1 << ((x) + 4)))
  889 
  890 /*
  891  * The Lite-On PNIC manual recommends the following for the General Purpose
  892  * I/O pins:
  893  *
  894  *      0       Speed Relay             1 == 100mbps
  895  *      1       100mbps loopback        1 == loopback
  896  *      2       BNC DC-DC converter     1 == select BNC
  897  *      3       Link 100                1 == 100baseTX link status
  898  */
  899 #define GPP_PNIC_PIN_SPEED_RLY  0
  900 #define GPP_PNIC_PIN_100M_LPKB  1
  901 #define GPP_PNIC_PIN_BNC_XMER   2
  902 #define GPP_PNIC_PIN_LNK100X    3
  903 
  904 /*
  905  * Definitions used for the SMC 9332DST (21140) board.
  906  */
  907 #define GPP_SMC9332DST_PINS     0x3f    /* General Purpose Pin directions */
  908 #define GPP_SMC9332DST_OK10     0x80    /* 10 Mb/sec Signal Detect gep<7> */
  909 #define GPP_SMC9332DST_OK100    0x40    /* 100 Mb/sec Signal Detect gep<6> */
  910 #define GPP_SMC9332DST_INIT     0x09    /* No loopback --- point-to-point */
  911 
  912 /*
  913  * Definitions used for the Cogent EM1x0 (21140) board.
  914  */
  915 #define GPP_COGENT_EM1x0_PINS   0x3f    /* General Purpose Pin directions */
  916 #define GPP_COGENT_EM1x0_INIT   0x09    /* No loopback --- point-to-point */
  917 
  918 
  919 /*
  920  * Digital Semiconductor 21040 registers.
  921  */
  922 
  923 /* CSR11 - Full Duplex Register */
  924 #define CSR_21040_FDX           TULIP_CSR11
  925 #define FDX21040_FDXACV         0x0000ffff      /* full duplex
  926                                                    autoconfiguration value */
  927 
  928 
  929 /* SIA configuration for 10base-T (from the 21040 manual) */
  930 #define SIACONN_21040_10BASET   0x0000ef01
  931 #define SIATXRX_21040_10BASET   0x0000ffff
  932 #define SIAGEN_21040_10BASET    0x00000000
  933 
  934 
  935 /* SIA configuration for 10base-T full-duplex (from the 21040 manual) */
  936 #define SIACONN_21040_10BASET_FDX 0x0000ef01
  937 #define SIATXRX_21040_10BASET_FDX 0x0000fffd
  938 #define SIAGEN_21040_10BASET_FDX  0x00000000
  939 
  940 
  941 /* SIA configuration for 10base-5 (from the 21040 manual) */
  942 #define SIACONN_21040_AUI       0x0000ef09
  943 #define SIATXRX_21040_AUI       0x00000705
  944 #define SIAGEN_21040_AUI        0x00000006
  945 
  946 
  947 /* SIA configuration for External SIA (from the 21040 manual) */
  948 #define SIACONN_21040_EXTSIA    0x00003041
  949 #define SIATXRX_21040_EXTSIA    0x00000000
  950 #define SIAGEN_21040_EXTSIA     0x00000006
  951 
  952 
  953 /*
  954  * Digital Semiconductor 21041 registers.
  955  */
  956 
  957 /* SIA configuration for 10base-T (from the 21041 manual) */
  958 #define SIACONN_21041_10BASET   0x0000ef01
  959 #define SIATXRX_21041_10BASET   0x0000ff3f
  960 #define SIAGEN_21041_10BASET    0x00000000
  961 
  962 #define SIACONN_21041P2_10BASET SIACONN_21041_10BASET
  963 #define SIATXRX_21041P2_10BASET 0x0000ffff
  964 #define SIAGEN_21041P2_10BASET  SIAGEN_21041_10BASET
  965 
  966 
  967 /* SIA configuration for 10base-T full-duplex (from the 21041 manual) */
  968 #define SIACONN_21041_10BASET_FDX   0x0000ef01
  969 #define SIATXRX_21041_10BASET_FDX   0x0000ff3d
  970 #define SIAGEN_21041_10BASET_FDX    0x00000000
  971 
  972 #define SIACONN_21041P2_10BASET_FDX SIACONN_21041_10BASET_FDX
  973 #define SIATXRX_21041P2_10BASET_FDX 0x0000ffff
  974 #define SIAGEN_21041P2_10BASET_FDX  SIAGEN_21041_10BASET_FDX
  975 
  976 
  977 /* SIA configuration for 10base-5 (from the 21041 manual) */
  978 #define SIACONN_21041_AUI       0x0000ef09
  979 #define SIATXRX_21041_AUI       0x0000f73d
  980 #define SIAGEN_21041_AUI        0x0000000e
  981 
  982 #define SIACONN_21041P2_AUI     SIACONN_21041_AUI
  983 #define SIATXRX_21041P2_AUI     0x0000f7fd
  984 #define SIAGEN_21041P2_AUI      SIAGEN_21041_AUI
  985 
  986 
  987 /* SIA configuration for 10base-2 (from the 21041 manual) */
  988 #define SIACONN_21041_BNC       0x0000ef09
  989 #define SIATXRX_21041_BNC       0x0000f73d
  990 #define SIAGEN_21041_BNC        0x00000006
  991 
  992 #define SIACONN_21041P2_BNC     SIACONN_21041_BNC
  993 #define SIATXRX_21041P2_BNC     0x0000f7fd
  994 #define SIAGEN_21041P2_BNC      SIAGEN_21041_BNC
  995 
  996 
  997 /*
  998  * Digital Semiconductor 21142/21143 registers.
  999  */
 1000 
 1001 /* SIA configuration for 10baseT (from the 21143 manual) */
 1002 #define SIACONN_21142_10BASET   0x00000001
 1003 #define SIATXRX_21142_10BASET   0x00007f3f
 1004 #define SIAGEN_21142_10BASET    0x00000008
 1005 
 1006 
 1007 /* SIA configuration for 10baseT full-duplex (from the 21143 manual) */
 1008 #define SIACONN_21142_10BASET_FDX   0x00000001
 1009 #define SIATXRX_21142_10BASET_FDX   0x00007f3d
 1010 #define SIAGEN_21142_10BASET_FDX    0x00000008
 1011 
 1012 
 1013 /* SIA configuration for 10base5 (from the 21143 manual) */
 1014 #define SIACONN_21142_AUI       0x00000009
 1015 #define SIATXRX_21142_AUI       0x00004705
 1016 #define SIAGEN_21142_AUI        0x0000000e
 1017 
 1018 
 1019 /* SIA configuration for 10base2 (from the 21143 manual) */
 1020 #define SIACONN_21142_BNC       0x00000009
 1021 #define SIATXRX_21142_BNC       0x00004705
 1022 #define SIAGEN_21142_BNC        0x00000006
 1023 
 1024 
 1025 /*
 1026  * Lite-On 82C168/82C169 registers.
 1027  */
 1028 
 1029 /* ENDEC General Register */
 1030 #define CSR_PNIC_ENDEC          0x78
 1031 #define PNIC_ENDEC_JDIS         0x00000001      /* jabber disable */
 1032 
 1033 /* SROM Power Register */
 1034 #define CSR_PNIC_SROMPWR        0x90
 1035 #define PNIC_SROMPWR_MRLE       0x00000001      /* Memory-Read-Line enable */
 1036 #define PNIC_SROMPWR_CB         0x00000002      /* cache boundary alignment
 1037                                                    burst type; 1 == burst to
 1038                                                    boundary, 0 == single-cycle
 1039                                                    to boundary */
 1040 
 1041 /* SROM Control Register */
 1042 #define CSR_PNIC_SROMCTL        0x98
 1043 #define PNIC_SROMCTL_addr       0x0000003f      /* mask of address bits */
 1044 /* XXX THESE ARE WRONG ACCORDING TO THE MANUAL! */
 1045 #define PNIC_SROMCTL_READ       0x00000600      /* read command */
 1046 
 1047 /* MII Access Register */
 1048 #define CSR_PNIC_MII            0xa0
 1049 #define PNIC_MII_DATA           0x0000ffff      /* mask of data bits */
 1050 #define PNIC_MII_REG            0x007c0000      /* register mask */
 1051 #define PNIC_MII_REGSHIFT       18
 1052 #define PNIC_MII_PHY            0x0f800000      /* phy mask */
 1053 #define PNIC_MII_PHYSHIFT       23
 1054 #define PNIC_MII_OPCODE         0x30000000      /* opcode mask */
 1055 #define PNIC_MII_RESERVED       0x00020000      /* must be one/must be zero;
 1056                                                    2 bits are described here */
 1057 #define PNIC_MII_MBO            0x40000000      /* must be one */
 1058 #define PNIC_MII_BUSY           0x80000000      /* MII is busy */
 1059 
 1060 #define PNIC_MII_WRITE          0x10000000      /* write PHY command */
 1061 #define PNIC_MII_READ           0x20000000      /* read PHY command */
 1062 
 1063 /* NWAY Register */
 1064 #define CSR_PNIC_NWAY           0xb8
 1065 #define PNIC_NWAY_RS            0x00000001      /* reset NWay block */
 1066 #define PNIC_NWAY_PD            0x00000002      /* power down NWay block */
 1067 #define PNIC_NWAY_BX            0x00000004      /* bypass transceiver */
 1068 #define PNIC_NWAY_LC            0x00000008      /* AUI low current mode */
 1069 #define PNIC_NWAY_UV            0x00000010      /* low squelch voltage */
 1070 #define PNIC_NWAY_DX            0x00000020      /* disable TP pol. correction */
 1071 #define PNIC_NWAY_TW            0x00000040      /* select TP (0 == AUI) */
 1072 #define PNIC_NWAY_AF            0x00000080      /* AUI full/half step input
 1073                                                    voltage */
 1074 #define PNIC_NWAY_FD            0x00000100      /* full duplex mode */
 1075 #define PNIC_NWAY_DL            0x00000200      /* disable link integrity
 1076                                                    test */
 1077 #define PNIC_NWAY_DM            0x00000400      /* disable AUI/TP autodetect */
 1078 #define PNIC_NWAY_100           0x00000800      /* 1 == 100mbps, 0 == 10mbps */
 1079 #define PNIC_NWAY_NW            0x00001000      /* enable NWay block */
 1080 #define PNIC_NWAY_CAP10T        0x00002000      /* adv. 10baseT */
 1081 #define PNIC_NWAY_CAP10TFDX     0x00004000      /* adv. 10baseT-FDX */
 1082 #define PNIC_NWAY_CAP100TXFDX   0x00008000      /* adv. 100baseTX-FDX */
 1083 #define PNIC_NWAY_CAP100TX      0x00010000      /* adv. 100baseTX */
 1084 #define PNIC_NWAY_CAP100T4      0x00020000      /* adv. 100base-T4 */
 1085 #define PNIC_NWAY_RN            0x02000000      /* re-negotiate enable */
 1086 #define PNIC_NWAY_RF            0x04000000      /* remote fault detected */
 1087 #define PNIC_NWAY_LPAR10T       0x08000000      /* link part. 10baseT */
 1088 #define PNIC_NWAY_LPAR10TFDX    0x10000000      /* link part. 10baseT-FDX */
 1089 #define PNIC_NWAY_LPAR100TXFDX  0x20000000      /* link part. 100baseTX-FDX */
 1090 #define PNIC_NWAY_LPAR100TX     0x40000000      /* link part. 100baseTX */
 1091 #define PNIC_NWAY_LPAR100T4     0x80000000      /* link part. 100base-T4 */
 1092 #define PNIC_NWAY_LPAR_MASK     0xf8000000
 1093 
 1094 
 1095 /*
 1096  * Macronix 98713, 98713A, 98715, 98715A, 98715AEC, 98725 and
 1097  * Lite-On 82C115 registers.
 1098  */
 1099 
 1100         /*
 1101          * Note, the MX98713 is very Tulip-like:
 1102          *
 1103          *      CSR12           General Purpose Port (like 21140)
 1104          *      CSR13           reserved
 1105          *      CSR14           reserved
 1106          *      CSR15           Watchdog Timer (like 21140)
 1107          *
 1108          * The Macronix CSR12, CSR13, CSR14, and CSR15 exist only
 1109          * on the MX98713A and higher.
 1110          */
 1111 
 1112 /* CSR12 - 10base-T Status Port (similar to SIASTAT) */
 1113         /* See SIASTAT 21142/21143 bits */
 1114 #define CSR_PMAC_10TSTAT           TULIP_CSR12
 1115 #define PMAC_SIASTAT_MASK       (SIASTAT_LS100|SIASTAT_LS10|            \
 1116                                  SIASTAT_APS|SIASTAT_TRF|SIASTAT_ANS|   \
 1117                                  SIASTAT_LPN|SIASTAT_LPC)
 1118 
 1119 
 1120 /* CSR13 - NWAY Reset Register */
 1121 #define CSR_PMAC_NWAYRESET      TULIP_CSR13
 1122         /* See SIACONN 21142/21143 bits */
 1123 #define PMAC_SIACONN_MASK       (SIACONN_SRL)
 1124 #define PMAC_NWAYRESET_100TXRESET 0x00000002    /* 100base PMD reset */
 1125 
 1126 
 1127 /* CSR14 - 10base-T Control Port */
 1128 #define CSR_PMAC_10TCTL         TULIP_CSR14
 1129         /* See SIATXRX 21142/21143 bits */
 1130 #define PMAC_SIATXRX_MASK       (SIATXRX_LBK|SIATXRX_DREN|SIATXRX_TH|   \
 1131                                  SIATXRX_ANE|SIATXRX_RSQ|SIATXRX_LTE|   \
 1132                                  SIATXRX_THX|SIATXRX_TXF|SIATXRX_T4)
 1133 
 1134 
 1135 /* CSR15 - Watchdog Timer Register */
 1136         /* MX98713: see 21140 CSR15 */
 1137         /* others: see SIAGEN 21142/21143 bits */
 1138 #define PMAC_SIAGEN_MASK        (SIAGEN_JBD|SIAGEN_HUJ|SIAGEN_JCK|      \
 1139                                  SIAGEN_RWD|SIAGEN_RWR)
 1140 
 1141 
 1142 /* CSR16 - Test Operation Register (a.k.a. Magic Packet Register) */
 1143 #define CSR_PMAC_TOR            TULIP_CSR16
 1144 #define PMAC_TOR_98713          0x0F370000
 1145 #define PMAC_TOR_98715          0x0B3C0000
 1146 
 1147 
 1148 /* CSR20 - NWAY Status */
 1149 #define CSR_PMAC_NWAYSTAT       TULIP_CSR20
 1150         /*
 1151          * Note: the MX98715A manual claims that EQTEST and PCITEST
 1152          * must be set to 1 by software for normal operation, but
 1153          * this does not appear to be necessary.  This is probably
 1154          * one of the things that frobbing the Test Operation Register
 1155          * does.
 1156          *
 1157          * MX98715AEC uses this register for Auto Compensation.
 1158          * CSR20<14> and CSR20<9> are called DS130 and DS120
 1159          */
 1160 #define PMAC_NWAYSTAT_DS120     0x00000200      /* Auto-compensation circ */
 1161 #define PMAC_NWAYSTAT_DS130     0x00004000      /* Auto-compensation circ */
 1162 #define PMAC_NWAYSTAT_EQTEST    0x00001000      /* EQ test */
 1163 #define PMAC_NWAYSTAT_PCITEST   0x00010000      /* PCI test */
 1164 #define PMAC_NWAYSTAT_10TXH     0x08000000      /* 10t accepted */
 1165 #define PMAC_NWAYSTAT_10TXF     0x10000000      /* 10t-fdx accepted */
 1166 #define PMAC_NWAYSTAT_100TXH    0x20000000      /* 100tx accepted */
 1167 #define PMAC_NWAYSTAT_100TXF    0x40000000      /* 100tx-fdx accepted */
 1168 #define PMAC_NWAYSTAT_T4        0x80000000      /* 100t4 accepted */
 1169 
 1170 
 1171 /* CSR21 - Flow Control Register */
 1172 #define CSR_PNICII_FLOWCTL      TULIP_CSR21
 1173 #define PNICII_FLOWCTL_WKFCATEN 0x00000010      /* enable wake-up frame
 1174                                                    catenation feature */
 1175 #define PNICII_FLOWCTL_NFCE     0x00000020      /* accept flow control result
 1176                                                    from NWay */
 1177 #define PNICII_FLOWCTL_FCTH0    0x00000040      /* rx flow control thresh 0 */
 1178 #define PNICII_FLOWCTL_FCTH1    0x00000080      /* rx flow control thresh 1 */
 1179 #define PNICII_FLOWCTL_REJECTFC 0x00000100      /* abort rx flow control */
 1180 #define PNICII_FLOWCTL_STOPTX   0x00000200      /* tx flow stopped */
 1181 #define PNICII_FLOWCTL_RUFCEN   0x00000400      /* send flow control when
 1182                                                    RU interrupt occurs */
 1183 #define PNICII_FLOWCTL_RXFCEN   0x00000800      /* rx flow control enable */
 1184 #define PNICII_FLOWCTL_TXFCEN   0x00001000      /* tx flow control enable */
 1185 #define PNICII_FLOWCTL_RESTOP   0x00002000      /* restop mode */
 1186 #define PNICII_FLOWCTL_RESTART  0x00004000      /* restart mode */
 1187 #define PNICII_FLOWCTL_TEST     0x00008000      /* test flow control timer */
 1188 #define PNICII_FLOWCTL_TMVAL    0xffff0000      /* timer value in flow
 1189                                                    control frame */
 1190 
 1191 #define PNICII_FLOWCTL_TH_512   (PNICII_FLOWCTL_FCTH0|PNICII_FLOWCTL_FCTH1)
 1192 #define PNICII_FLOWCTL_TH_256   (PNICII_FLOWCTL_FCTH1)
 1193 #define PNICII_FLOWCTL_TH_128   (PNICII_FLOWCTL_FCTH0)
 1194 #define PNICII_FLOWCTL_TH_OVFLW (0)
 1195 
 1196 
 1197 /* CSR22 - MAC ID Byte 3-0 Register */
 1198 #define CSR_PNICII_MACID0       TULIP_CSR22
 1199 #define PNICII_MACID_1          0       /* shift */
 1200 #define PNICII_MACID_0          8       /* shift */
 1201 #define PNICII_MACID_3          16      /* shift */
 1202 #define PNICII_MACID_2          24      /* shift */
 1203 
 1204 
 1205 /* CSR23 - Magic ID Byte 5,4/MACID Byte 5,4 Register */
 1206 #define PNICII_MACID_5          0       /* shift */
 1207 #define PNICII_MACID_4          8       /* shift */
 1208 #define PNICII_MAGID_5          16      /* shift */
 1209 #define PNICII_MAGIC_4          24      /* shift */
 1210 
 1211 
 1212 /* CSR24 - Magic ID Byte 3-0 Register */
 1213 #define PNICII_MAGID_1          0       /* shift */
 1214 #define PNICII_MAGID_0          8       /* shift */
 1215 #define PNICII_MAGID_3          16      /* shift */
 1216 #define PNICII_MAGID_2          24      /* shift */
 1217 
 1218 
 1219 /* CSR25 - CSR28 - Filter Byte Mask Registers */
 1220 #define CSR_PNICII_MASK0        TULIP_CSR25
 1221 
 1222 #define CSR_PNICII_MASK1        TULIP_CSR26
 1223 
 1224 #define CSR_PNICII_MASK2        TULIP_CSR27
 1225 
 1226 #define CSR_PNICII_MASK3        TULIP_CSR28
 1227 
 1228 
 1229 /* CSR29 - Filter Offset Register */
 1230 #define CSR_PNICII_FILOFF       TULIP_CSR29
 1231 #define PNICII_FILOFF_PAT0      0x0000007f      /* pattern 0 offset */
 1232 #define PNICII_FILOFF_EN0       0x00000080      /* enable pattern 0 */
 1233 #define PNICII_FILOFF_PAT1      0x00007f00      /* pattern 1 offset */
 1234 #define PNICII_FILOFF_EN1       0x00008000      /* enable pattern 1 */
 1235 #define PNICII_FILOFF_PAT2      0x007f0000      /* pattern 2 offset */
 1236 #define PNICII_FILOFF_EN2       0x00800000      /* enable pattern 2 */
 1237 #define PNICII_FILOFF_PAT3      0x7f000000      /* pattern 3 offset */
 1238 #define PNICII_FILOFF_EN3       0x80000000      /* enable pattern 3 */
 1239 
 1240 
 1241 /* CSR30 - Filter 1 and 0 CRC-16 Register */
 1242 #define CSR_PNICII_FIL01        TULIP_CSR30
 1243 #define PNICII_FIL01_CRC0       0x0000ffff      /* CRC-16 of pattern 0 */
 1244 #define PNICII_FIL01_CRC1       0xffff0000      /* CRC-16 of pattern 1 */
 1245 
 1246 
 1247 /* CSR31 = Filter 3 and 2 CRC-16 Register */
 1248 #define CSR_PNICII_FIL23        TULIP_CSR31
 1249 #define PNICII_FIL23_CRC2       0x0000ffff      /* CRC-16 of pattern 2 */
 1250 #define PNICII_FIL23_CRC3       0xffff0000      /* CRC-16 of pattern 3 */
 1251 
 1252 
 1253 /*
 1254  * Winbond 89C840F registers.
 1255  */
 1256 
 1257 /* CSR12 - Current Receive Descriptor Register */
 1258 #define CSR_WINB_CRDAR          TULIP_CSR12
 1259 
 1260 
 1261 /* CSR13 - Current Receive Buffer Register */
 1262 #define CSR_WINB_CCRBAR         TULIP_CSR13
 1263 
 1264 
 1265 /* CSR14 - Multicast Address Register 0 */
 1266 #define CSR_WINB_CMA0           TULIP_CSR14
 1267 
 1268 
 1269 /* CSR15 - Multicast Address Register 1 */
 1270 #define CSR_WINB_CMA1           TULIP_CSR15
 1271 
 1272 
 1273 /* CSR16 - Physical Address Register 0 */
 1274 #define CSR_WINB_CPA0           TULIP_CSR16
 1275 
 1276 
 1277 /* CSR17 - Physical Address Register 1 */
 1278 #define CSR_WINB_CPA1           TULIP_CSR17
 1279 
 1280 
 1281 /* CSR18 - Boot ROM Size Register */
 1282 #define CSR_WINB_CBRCR          TULIP_CSR18
 1283 #define WINB_CBRCR_NONE         0x00000000      /* no boot rom */
 1284                         /*      0x00000001         also no boot rom */
 1285 #define WINB_CBRCR_8K           0x00000002      /* 8k */
 1286 #define WINB_CBRCR_16K          0x00000003      /* 16k */
 1287 #define WINB_CBRCR_32K          0x00000004      /* 32k */
 1288 #define WINB_CBRCR_64K          0x00000005      /* 64k */
 1289 #define WINB_CBRCR_128K         0x00000006      /* 128k */
 1290 #define WINB_CBRCR_256K         0x00000007
 1291 
 1292 
 1293 /* CSR19 - Current Transmit Descriptor Register */
 1294 #define CSR_WINB_CTDAR          TULIP_CSR19
 1295 
 1296 
 1297 /* CSR20 - Current Transmit Buffer Register */
 1298 #define CSR_WINB_CTBAR          TULIP_CSR20
 1299 
 1300 
 1301 /*
 1302  * ADMtek AL981 registers
 1303  *
 1304  * We define these as strict byte offsets into PCI space, since
 1305  * not all of them have consistent access rules.
 1306  */
 1307 
 1308 /* CSR13 - Wake-up Control/Status Register */
 1309 #define CSR_ADM_WCSR            0x68
 1310 #define ADM_WCSR_LSC            0x00000001      /* link status changed */
 1311 #define ADM_WCSR_MPR            0x00000002      /* magic packet received */
 1312 #define ADM_WCSR_WFR            0x00000004      /* wake up frame received */
 1313 #define ADM_WCSR_LSCE           0x00000100      /* link status changed en. */
 1314 #define ADM_WCSR_MPRE           0x00000200      /* magic packet receive en. */
 1315 #define ADM_WCSR_WFRE           0x00000400      /* wake up frame receive en. */
 1316 #define ADM_WCSR_LINKON         0x00010000      /* link-on detect en. */
 1317 #define ADM_WCSR_LINKOFF        0x00020000      /* link-off detect en. */
 1318 #define ADM_WCSR_WP5E           0x02000000      /* wake up pat. 5 en. */
 1319 #define ADM_WCSR_WP4E           0x04000000      /* wake up pat. 4 en. */
 1320 #define ADM_WCSR_WP3E           0x08000000      /* wake up pat. 3 en. */
 1321 #define ADM_WCSR_WP2E           0x10000000      /* wake up pat. 2 en. */
 1322 #define ADM_WCSR_WP1E           0x20000000      /* wake up pat. 1 en. */
 1323 #define ADM_WCSR_CRCT           0x40000000      /* CRC-16 type:
 1324                                                    0 == 0000 initial
 1325                                                    1 == ffff initial */
 1326 
 1327 
 1328 /* CSR14 - Wake-up Pattern Data Register */
 1329 #define CSR_ADM_WPDR            0x70
 1330 
 1331         /*
 1332          * 25 consecutive longword writes are issued to WPDR to
 1333          * program the wake-up pattern filter.  The data written
 1334          * is as follows:
 1335          *
 1336          *      XXX
 1337          */
 1338 
 1339 
 1340 /* CSR15 - see 21140 CSR15 (Watchdog Timer) */
 1341 
 1342 
 1343 /* CSR16 - Assistant CSR5 (Status Register 2) */
 1344 #define CSR_ADM_ASR             0x80
 1345                                                 /* 0 - 14: same as CSR5 */
 1346 #define ADM_ASR_AAISS           0x00080000      /* added abnormal int. sum. */
 1347 #define ADM_ASR_ANISS           0x00010000      /* added normal int. sum. */
 1348                                                 /* XXX Receive state */
 1349                                                 /* XXX Transmit state */
 1350 #define ADM_ASR_BET             0x03800000      /* bus error type */
 1351 #define ADM_ASR_BET_PERR        0x00000000      /*   parity error */
 1352 #define ADM_ASR_BET_MABT        0x00800000      /*   master abort */
 1353 #define ADM_ASR_BET_TABT        0x01000000      /*   target abort */
 1354 #define ADM_ASR_PFR             0x04000000      /* PAUSE frame received */
 1355 #define ADM_ASR_TDIS            0x10000000      /* transmit def. int. status */
 1356 #define ADM_ASR_XIS             0x20000000      /* xcvr int. status */
 1357 #define ADM_ASR_REIS            0x40000000      /* receive early int. status */
 1358 #define ADM_ASR_TEIS            0x80000000      /* transmit early int. status */
 1359 
 1360 
 1361 /* CSR17 - Assistant CSR7 (Interrupt Enable Register 2) */
 1362 #define CSR_ADM_AIE             0x84
 1363         /* See CSR16 for valid bits */
 1364 
 1365 
 1366 /* CSR18 - Command Register */
 1367 #define CSR_ADM_CR              0x88
 1368 #define ADM_CR_ATUR             0x00000001      /* auto. tx underrun recover */
 1369 #define ADM_CR_SINT             0x00000002      /* software interrupt */
 1370 #define ADM_CR_DRT              0x0000000c      /* drain receive threshold */
 1371 #define ADM_CR_DRT_8LW          0x00000000      /*   8 longwords */
 1372 #define ADM_CR_DRT_16LW         0x00000004      /*   16 longwords */
 1373 #define ADM_CR_DRT_SF           0x00000008      /*   store-and-forward */
 1374 #define ADM_CR_RTE              0x00000010      /* receive threshold enable */
 1375 #define ADM_CR_PAUSE            0x00000020      /* enable PAUSE function */
 1376 #define ADM_CR_RWP              0x00000040      /* reset wake-up pattern
 1377                                                    data register pointer */
 1378         /* 16 - 31 are automatically recalled from the EEPROM */
 1379 #define ADM_CR_WOL              0x00040000      /* wake-on-lan enable */
 1380 #define ADM_CR_PM               0x00080000      /* power management enable */
 1381 #define ADM_CR_RFS              0x00600000      /* Receive FIFO size */
 1382 #define ADM_CR_RFS_1K           0x00600000      /*   1K FIFO */
 1383 #define ADM_CR_RFS_2K           0x00400000      /*   2K FIFO */
 1384 #define ADM_CR_LEDMODE          0x00800000      /* LED mode */
 1385 #define ADM_CR_AUXCL            0x30000000      /* aux current load */
 1386 #define ADM_CR_D3CS             0x80000000      /* D3 cold wake up enable */
 1387 
 1388 
 1389 /* CSR19 - PCI bus performance counter */
 1390 #define CSR_ADM_PCIC            0x8c
 1391 #define ADM_PCIC_DWCNT          0x000000ff      /* double-word count of
 1392                                                    last bus-master
 1393                                                    transaction */
 1394 #define ADM_PCIC_CLKCNT         0xffff0000      /* number of PCI clocks
 1395                                                    between read request
 1396                                                    and access completed */
 1397 
 1398 /* CSR20 - Power Management Control/Status Register */
 1399 #define CSR_ADM_PMCSR           0x90
 1400         /*
 1401          * This register is also mapped into the PCI configuration
 1402          * space as the PMCSR.
 1403          */
 1404 
 1405 
 1406 /* CSR23 - Transmit Burst Count/Time Out Register */
 1407 #define CSR_ADM_TXBR            0x9c
 1408 #define ADM_TXBR_TTO            0x00000fff      /* transmit timeout */
 1409 #define ADM_TXBR_TBCNT          0x001f0000      /* transmit burst count */
 1410 
 1411 
 1412 /* CSR24 - Flash ROM Port Register */
 1413 #define CSR_ADM_FROM            0xa0
 1414 #define ADM_FROM_DATA           0x000000ff      /* data to/from Flash */
 1415 #define ADM_FROM_ADDR           0x01ffff00      /* Flash address */
 1416 #define ADM_FROM_ADDR_SHIFT     8
 1417 #define ADM_FROM_WEN            0x04000000      /* write enable */
 1418 #define ADM_FROM_REN            0x08000000      /* read enable */
 1419 #define ADM_FROM_bra16on        0x80000000      /* pin 87 is brA16, else
 1420                                                    pin 87 is fd/col LED pin */
 1421 
 1422 
 1423 /* CSR25 - Physical Address Register 0 */
 1424 #define CSR_ADM_PAR0            0xa4
 1425 
 1426 
 1427 /* CSR26 - Physical Address Register 1 */
 1428 #define CSR_ADM_PAR1            0xa8
 1429 
 1430 
 1431 /* CSR27 - Multicast Address Register 0 */
 1432 #define CSR_ADM_MAR0            0xac
 1433 
 1434 
 1435 /* CSR28 - Multicast Address Register 1 */
 1436 #define CSR_ADM_MAR1            0xb0
 1437 
 1438 
 1439 /* Internal PHY registers are mapped here (lower 16 bits valid) */
 1440 
 1441 #define CSR_ADM_BMCR            0xb4
 1442 #define CSR_ADM_BMSR            0xb8
 1443 #define CSR_ADM_PHYIDR1         0xbc
 1444 #define CSR_ADM_PHYIDR2         0xc0
 1445 #define CSR_ADM_ANAR            0xc4
 1446 #define CSR_ADM_ANLPAR          0xc8
 1447 #define CSR_ADM_ANER            0xcc
 1448 
 1449 /* XCVR Mode Control Register */
 1450 #define CSR_ADM_XMC             0xd0
 1451 #define ADM_XMC_LD              0x00000800      /* long distance mode
 1452                                                    (low squelch enable) */
 1453 
 1454 
 1455 /* XCVR Configuration Information and Interrupt Status Register */
 1456 #define CSR_ADM_XCIIS           0xd4
 1457 #define ADM_XCIIS_REF           0x0001          /* 64 error packets received */
 1458 #define ADM_XCIIS_ANPR          0x0002          /* autoneg page received */
 1459 #define ADM_XCIIS_PDF           0x0004          /* parallel detection fault */
 1460 #define ADM_XCIIS_ANAR          0x0008          /* autoneg ACK */
 1461 #define ADM_XCIIS_LS            0x0010          /* link status (1 == fail) */
 1462 #define ADM_XCIIS_RFD           0x0020          /* remote fault */
 1463 #define ADM_XCIIS_ANC           0x0040          /* autoneg completed */
 1464 #define ADM_XCIIS_PAUSE         0x0080          /* PAUSE enabled */
 1465 #define ADM_XCIIS_DUPLEX        0x0100          /* full duplex */
 1466 #define ADM_XCIIS_SPEED         0x0200          /* 100Mb/s */
 1467 
 1468 
 1469 /* XCVR Interrupt Enable Register */
 1470 #define CSR_ADM_XIE             0xd8
 1471         /* Bits are as for XCIIS */
 1472 
 1473 
 1474 /* XCVR 100baseTX PHY Control/Status Register */
 1475 #define CSR_ADM_100CTR          0xdc
 1476 #define ADM_100CTR_DISCRM       0x0001          /* disable scrambler */
 1477 #define ADM_100CTR_DISMLT       0x0002          /* disable MLT3 ENDEC */
 1478 #define ADM_100CTR_CMODE        0x001c          /* current operating mode */
 1479 #define ADM_100CTR_CMODE_AUTO   0x0000          /*   in autoneg */
 1480 #define ADM_100CTR_CMODE_10     0x0004          /*   10baseT */
 1481 #define ADM_100CTR_CMODE_100    0x0008          /*   100baseTX */
 1482                         /*      0x000c               reserved */
 1483                         /*      0x0010               reserved */
 1484 #define ADM_100CTR_CMODE_10FD   0x0014          /*   10baseT-FDX */
 1485 #define ADM_100CTR_CMODE_100FD  0x0018          /*   100baseTX-FDX */
 1486 #define ADM_100CTR_CMODE_ISO    0x001c          /*   isolated */
 1487 #define ADM_100CTR_ISOTX        0x0020          /* transmit isolation */
 1488 #define ADM_100CTR_ENRZI        0x0080          /* enable NRZ <> NRZI conv. */
 1489 #define ADM_100CTR_ENDCR        0x0100          /* enable DC restoration */
 1490 #define ADM_100CTR_ENRLB        0x0200          /* enable remote loopback */
 1491 #define ADM_100CTR_RXVPP        0x0800          /* peak Rx voltage:
 1492                                                    0 == 1.0 VPP
 1493                                                    1 == 1.4 VPP */
 1494 #define ADM_100CTR_ANC          0x1000          /* autoneg completed */
 1495 #define ADM_100CTR_DISRER       0x2000          /* disable Rx error counter */
 1496 
 1497 /* Operation Mode Register (AN983) */
 1498 #define CSR_ADM983_OPMODE       0xfc
 1499 #define ADM983_OPMODE_SPEED     0x80000000      /* 1 == 100, 0 == 10 */
 1500 #define ADM983_OPMODE_FD        0x40000000      /* 1 == fd, 0 == hd */
 1501 #define ADM983_OPMODE_LINK      0x20000000      /* 1 == link, 0 == no link */
 1502 #define ADM983_OPMODE_EERLOD    0x04000000      /* reload from EEPROM */
 1503 #define ADM983_OPMODE_SingleChip 0x00000007     /* single-chip mode */
 1504 #define ADM983_OPMODE_MacOnly    0x00000004     /* MAC-only mode */
 1505 
 1506 /*
 1507  * Xircom X3201-3 registers
 1508  */
 1509 
 1510 /* Power Management Register */
 1511 #define CSR_X3201_PMR           TULIP_CSR16
 1512 #define X3201_PMR_EDINT         0x0000000f      /* energy detect interval */
 1513 #define X3201_PMR_EDEN          0x00000100      /* energy detect enable */
 1514 #define X3201_PMR_MPEN          0x00000200      /* magic packet enable */
 1515 #define X3201_PMR_WOLEN         0x00000400      /* Wake On Lan enable */
 1516 #define X3201_PMR_PMGP0EN       0x00001000      /* GP0 change enable */
 1517 #define X3201_PMR_PMLCEN        0x00002000      /* link change enable */
 1518 #define X3201_PMR_WOLTMEN       0x00008000      /* WOL template mem enable */
 1519 #define X3201_PMR_EP            0x00010000      /* energy present */
 1520 #define X3201_PMR_LP            0x00200000      /* link present */
 1521 #define X3201_PMR_EDES          0x01000000      /* ED event status */
 1522 #define X3201_PMR_MPES          0x02000000      /* MP event status */
 1523 #define X3201_PMR_WOLES         0x04000000      /* WOL event status */
 1524 #define X3201_PMR_WOLPS         0x08000000      /* WOL process status */
 1525 #define X3201_PMR_GP0ES         0x10000000      /* GP0 event status */
 1526 #define X3201_PMR_LCES          0x20000000      /* LC event status */
 1527 
 1528 /*
 1529  * Davicom DM9102 registers.
 1530  */
 1531 
 1532 /* PHY Status Register */
 1533 #define CSR_DM_PHYSTAT          TULIP_CSR12
 1534 #define DM_PHYSTAT_10           0x00000001      /* 10Mb/s */
 1535 #define DM_PHYSTAT_100          0x00000002      /* 100Mb/s */
 1536 #define DM_PHYSTAT_FDX          0x00000004      /* full-duplex */
 1537 #define DM_PHYSTAT_LINK         0x00000008      /* link up */
 1538 #define DM_PHYSTAT_RXLOCK       0x00000010      /* RX-lock */
 1539 #define DM_PHYSTAT_SIGNAL       0x00000020      /* signal detection */
 1540 #define DM_PHYSTAT_UTPSIG       0x00000040      /* UTP SIG */
 1541 #define DM_PHYSTAT_GPED         0x00000080      /* general PHY reset control */
 1542 #define DM_PHYSTAT_GEPC         0x00000100      /* GPED bits control */
 1543 
 1544 
 1545 /* Sample Frame Access Register */
 1546 #define CSR_DM_SFAR             TULIP_CSR13
 1547 
 1548 
 1549 /* Sample Frame Data Register */
 1550 #define CSR_DM_SFDR             TULIP_CSR14
 1551         /* See 21143 SIAGEN register */
 1552 
 1553 /*
 1554  * ASIX AX88140A and AX88141 registers.
 1555  */
 1556 
 1557 /* CSR13 - Filtering Index */
 1558 #define CSR_AX_FILTIDX          TULIP_CSR13
 1559 
 1560 /* CSR14 - Filtering data */
 1561 #define CSR_AX_FILTDATA         TULIP_CSR14
 1562 
 1563 /* Filtering Index values */
 1564 #define AX_FILTIDX_PAR0         0x00000000
 1565 #define AX_FILTIDX_PAR1         0x00000001
 1566 #define AX_FILTIDX_MAR0         0x00000002
 1567 #define AX_FILTIDX_MAR1         0x00000003
 1568 
 1569 #endif /* _DEV_IC_TULIPREG_H_ */

Cache object: 3250f9ad457b067ddf4f505c71e0eac2


[ 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.