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

Annotation of sys/dev/usb/if_auereg.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: if_auereg.h,v 1.13 2007/06/10 10:15:35 mbalmer Exp $ */
                      2: /*     $NetBSD: if_auereg.h,v 1.16 2001/10/10 02:14:17 augustss Exp $  */
                      3: /*
                      4:  * Copyright (c) 1997, 1998, 1999
                      5:  *     Bill Paul <wpaul@ee.columbia.edu>.  All rights reserved.
                      6:  *
                      7:  * Redistribution and use in source and binary forms, with or without
                      8:  * modification, are permitted provided that the following conditions
                      9:  * are met:
                     10:  * 1. Redistributions of source code must retain the above copyright
                     11:  *    notice, this list of conditions and the following disclaimer.
                     12:  * 2. Redistributions in binary form must reproduce the above copyright
                     13:  *    notice, this list of conditions and the following disclaimer in the
                     14:  *    documentation and/or other materials provided with the distribution.
                     15:  * 3. All advertising materials mentioning features or use of this software
                     16:  *    must display the following acknowledgement:
                     17:  *     This product includes software developed by Bill Paul.
                     18:  * 4. Neither the name of the author nor the names of any co-contributors
                     19:  *    may be used to endorse or promote products derived from this software
                     20:  *    without specific prior written permission.
                     21:  *
                     22:  * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
                     23:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     24:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     25:  * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
                     26:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
                     27:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
                     28:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
                     29:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
                     30:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
                     31:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
                     32:  * THE POSSIBILITY OF SUCH DAMAGE.
                     33:  *
                     34:  * $FreeBSD: src/sys/dev/usb/if_auereg.h,v 1.2 2000/01/08 06:52:36 wpaul Exp $
                     35:  */
                     36:
                     37: /*
                     38:  * Register definitions for ADMtek Pegasus AN986 USB to Ethernet
                     39:  * chip. The Pegasus uses a total of four USB endpoints: the control
                     40:  * endpoint (0), a bulk read endpoint for receiving packets (1),
                     41:  * a bulk write endpoint for sending packets (2) and an interrupt
                     42:  * endpoint for passing RX and TX status (3). Endpoint 0 is used
                     43:  * to read and write the ethernet module's registers. All registers
                     44:  * are 8 bits wide.
                     45:  *
                     46:  * Packet transfer is done in 64 byte chunks. The last chunk in a
                     47:  * transfer is denoted by having a length less that 64 bytes. For
                     48:  * the RX case, the data includes an optional RX status word.
                     49:  */
                     50:
                     51: #define AUE_UR_READREG         0xF0
                     52: #define AUE_UR_WRITEREG                0xF1
                     53:
                     54: #define AUE_CONFIG_NO          1
                     55: #define AUE_IFACE_IDX          0
                     56:
                     57: /*
                     58:  * Note that while the ADMtek technically has four
                     59:  * endpoints, the control endpoint (endpoint 0) is
                     60:  * regarded as special by the USB code and drivers
                     61:  * don't have direct access to it. (We access it
                     62:  * using usbd_do_request() when reading/writing
                     63:  * registers.) Consequently, our endpoint indexes
                     64:  * don't match those in the ADMtek Pegasus manual:
                     65:  * we consider the RX data endpoint to be index 0
                     66:  * and work up from there.
                     67:  */
                     68: #define AUE_ENDPT_RX           0x0
                     69: #define AUE_ENDPT_TX           0x1
                     70: #define AUE_ENDPT_INTR         0x2
                     71: #define AUE_ENDPT_MAX          0x3
                     72:
                     73: #define AUE_CTL0               0x00
                     74: #define AUE_CTL1               0x01
                     75: #define AUE_CTL2               0x02
                     76: #define AUE_MAR0               0x08
                     77: #define AUE_MAR1               0x09
                     78: #define AUE_MAR2               0x0A
                     79: #define AUE_MAR3               0x0B
                     80: #define AUE_MAR4               0x0C
                     81: #define AUE_MAR5               0x0D
                     82: #define AUE_MAR6               0x0E
                     83: #define AUE_MAR7               0x0F
                     84: #define AUE_MAR                        AUE_MAR0
                     85: #define AUE_PAR0               0x10
                     86: #define AUE_PAR1               0x11
                     87: #define AUE_PAR2               0x12
                     88: #define AUE_PAR3               0x13
                     89: #define AUE_PAR4               0x14
                     90: #define AUE_PAR5               0x15
                     91: #define AUE_PAR                        AUE_PAR0
                     92: #define AUE_PAUSE0             0x18
                     93: #define AUE_PAUSE1             0x19
                     94: #define AUE_PAUSE              AUE_PAUSE0
                     95: #define AUE_RX_FLOWCTL_CNT     0x1A
                     96: #define AUE_RX_FLOWCTL_FIFO    0x1B
                     97: #define AUE_REG_1D             0x1D
                     98: #define AUE_EE_REG             0x20
                     99: #define AUE_EE_DATA0           0x21
                    100: #define AUE_EE_DATA1           0x22
                    101: #define AUE_EE_DATA            AUE_EE_DATA0
                    102: #define AUE_EE_CTL             0x23
                    103: #define AUE_PHY_ADDR           0x25
                    104: #define AUE_PHY_DATA0          0x26
                    105: #define AUE_PHY_DATA1          0x27
                    106: #define AUE_PHY_DATA           AUE_PHY_DATA0
                    107: #define AUE_PHY_CTL            0x28
                    108: #define AUE_USB_STS            0x2A
                    109: #define AUE_TXSTAT0            0x2B
                    110: #define AUE_TXSTAT1            0x2C
                    111: #define AUE_TXSTAT             AUE_TXSTAT0
                    112: #define AUE_RXSTAT             0x2D
                    113: #define AUE_PKTLOST0           0x2E
                    114: #define AUE_PKTLOST1           0x2F
                    115: #define AUE_PKTLOST            AUE_PKTLOST0
                    116:
                    117: #define AUE_REG_7B             0x7B
                    118: #define AUE_GPIO0              0x7E
                    119: #define AUE_GPIO1              0x7F
                    120: #define AUE_REG_81             0x81
                    121:
                    122: #define AUE_CTL0_INCLUDE_RXCRC 0x01
                    123: #define AUE_CTL0_ALLMULTI      0x02
                    124: #define AUE_CTL0_STOP_BACKOFF  0x04
                    125: #define AUE_CTL0_RXSTAT_APPEND 0x08
                    126: #define AUE_CTL0_WAKEON_ENB    0x10
                    127: #define AUE_CTL0_RXPAUSE_ENB   0x20
                    128: #define AUE_CTL0_RX_ENB                0x40
                    129: #define AUE_CTL0_TX_ENB                0x80
                    130:
                    131: #define AUE_CTL1_HOMELAN       0x04
                    132: #define AUE_CTL1_RESETMAC      0x08
                    133: #define AUE_CTL1_SPEEDSEL      0x10    /* 0 = 10mbps, 1 = 100mbps */
                    134: #define AUE_CTL1_DUPLEX                0x20    /* 0 = half, 1 = full */
                    135: #define AUE_CTL1_DELAYHOME     0x40
                    136:
                    137: #define AUE_CTL2_EP3_CLR       0x01    /* reading EP3 clrs status regs */
                    138: #define AUE_CTL2_RX_BADFRAMES  0x02
                    139: #define AUE_CTL2_RX_PROMISC    0x04
                    140: #define AUE_CTL2_LOOPBACK      0x08
                    141: #define AUE_CTL2_EEPROMWR_ENB  0x10
                    142: #define AUE_CTL2_EEPROM_LOAD   0x20
                    143:
                    144: #define AUE_EECTL_WRITE                0x01
                    145: #define AUE_EECTL_READ         0x02
                    146: #define AUE_EECTL_DONE         0x04
                    147:
                    148: #define AUE_PHYCTL_PHYREG      0x1F
                    149: #define AUE_PHYCTL_WRITE       0x20
                    150: #define AUE_PHYCTL_READ                0x40
                    151: #define AUE_PHYCTL_DONE                0x80
                    152:
                    153: #define AUE_USBSTS_SUSPEND     0x01
                    154: #define AUE_USBSTS_RESUME      0x02
                    155:
                    156: #define AUE_TXSTAT0_JABTIMO    0x04
                    157: #define AUE_TXSTAT0_CARLOSS    0x08
                    158: #define AUE_TXSTAT0_NOCARRIER  0x10
                    159: #define AUE_TXSTAT0_LATECOLL   0x20
                    160: #define AUE_TXSTAT0_EXCESSCOLL 0x40
                    161: #define AUE_TXSTAT0_UNDERRUN   0x80
                    162:
                    163: #define AUE_TXSTAT1_PKTCNT     0x0F
                    164: #define AUE_TXSTAT1_FIFO_EMPTY 0x40
                    165: #define AUE_TXSTAT1_FIFO_FULL  0x80
                    166:
                    167: #define AUE_RXSTAT_OVERRUN     0x01
                    168: #define AUE_RXSTAT_PAUSE       0x02
                    169:
                    170: #define AUE_GPIO_IN0           0x01
                    171: #define AUE_GPIO_OUT0          0x02
                    172: #define AUE_GPIO_SEL0          0x04
                    173: #define AUE_GPIO_IN1           0x08
                    174: #define AUE_GPIO_OUT1          0x10
                    175: #define AUE_GPIO_SEL1          0x20
                    176:
                    177: struct aue_intrpkt {
                    178:        u_int8_t                aue_txstat0;
                    179:        u_int8_t                aue_txstat1;
                    180:        u_int8_t                aue_rxstat;
                    181:        u_int8_t                aue_rxlostpkt0;
                    182:        u_int8_t                aue_rxlostpkt1;
                    183:        u_int8_t                aue_wakeupstat;
                    184:        u_int8_t                aue_rsvd;
                    185:        u_int8_t                _pad;
                    186: };
                    187: #define AUE_INTR_PKTLEN 8
                    188:
                    189: struct aue_rxpkt {
                    190:        uWord                   aue_pktlen;
                    191:        uByte                   aue_rxstat;
                    192: };
                    193:
                    194: #define AUE_RXSTAT_MCAST       0x01
                    195: #define AUE_RXSTAT_GIANT       0x02
                    196: #define AUE_RXSTAT_RUNT                0x04
                    197: #define AUE_RXSTAT_CRCERR      0x08
                    198: #define AUE_RXSTAT_DRIBBLE     0x10
                    199: #define AUE_RXSTAT_MASK                0x1E
                    200:
                    201:
                    202: /*************** The rest belongs in if_auevar.h *************/
                    203:
                    204: #define AUE_TX_LIST_CNT                1
                    205: #define AUE_RX_LIST_CNT                1
                    206:
                    207: struct aue_softc;
                    208:
                    209: struct aue_chain {
                    210:        struct aue_softc        *aue_sc;
                    211:        usbd_xfer_handle        aue_xfer;
                    212:        char                    *aue_buf;
                    213:        struct mbuf             *aue_mbuf;
                    214:        int                     aue_idx;
                    215: };
                    216:
                    217: struct aue_cdata {
                    218:        struct aue_chain        aue_tx_chain[AUE_TX_LIST_CNT];
                    219:        struct aue_chain        aue_rx_chain[AUE_RX_LIST_CNT];
                    220:        struct aue_intrpkt      aue_ibuf;
                    221:        int                     aue_tx_prod;
                    222:        int                     aue_tx_cons;
                    223:        int                     aue_tx_cnt;
                    224:        int                     aue_rx_prod;
                    225: };
                    226:
                    227: struct aue_softc {
                    228:        struct device           aue_dev;
                    229:
                    230:        struct arpcom           arpcom;
                    231:        struct mii_data         aue_mii;
                    232: #define GET_IFP(sc) (&(sc)->arpcom.ac_if)
                    233: #define GET_MII(sc) (&(sc)->aue_mii)
                    234:
                    235:        struct timeout          aue_stat_ch;
                    236:
                    237:        usbd_device_handle      aue_udev;
                    238:        usbd_interface_handle   aue_iface;
                    239:        u_int16_t               aue_vendor;
                    240:        u_int16_t               aue_product;
                    241:        int                     aue_ed[AUE_ENDPT_MAX];
                    242:        usbd_pipe_handle        aue_ep[AUE_ENDPT_MAX];
                    243:        u_int8_t                aue_link;
                    244:        int                     aue_if_flags;
                    245:        struct aue_cdata        aue_cdata;
                    246:
                    247:        u_int16_t               aue_flags;
                    248:
                    249:        int                     aue_refcnt;
                    250:        char                    aue_dying;
                    251:        char                    aue_attached;
                    252:        u_int                   aue_rx_errs;
                    253:        u_int                   aue_intr_errs;
                    254:        struct timeval          aue_rx_notice;
                    255:
                    256:        struct usb_task         aue_tick_task;
                    257:        struct usb_task         aue_stop_task;
                    258:
                    259:        struct rwlock           aue_mii_lock;
                    260:
                    261:        void                    *sc_sdhook;
                    262: };
                    263:
                    264: #define AUE_TIMEOUT            1000
                    265: #define AUE_BUFSZ              1536
                    266: #define AUE_MIN_FRAMELEN       60
                    267: #define AUE_TX_TIMEOUT         10000 /* ms */
                    268: #define AUE_INTR_INTERVAL      100 /* ms */

CVSweb