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

Annotation of sys/dev/ic/i82596var.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: i82596var.h,v 1.11 2003/10/21 18:58:49 jmc Exp $      */
        !             2: /*     $NetBSD: i82586var.h,v 1.10 1998/08/15 04:42:42 mycroft Exp $   */
        !             3:
        !             4: /*-
        !             5:  * Copyright (c) 1998 The NetBSD Foundation, Inc.
        !             6:  * All rights reserved.
        !             7:  *
        !             8:  * This code is derived from software contributed to The NetBSD Foundation
        !             9:  * by Paul Kranenburg and Charles M. Hannum.
        !            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: /*-
        !            41:  * Copyright (c) 1992, 1993, University of Vermont and State
        !            42:  *  Agricultural College.
        !            43:  * Copyright (c) 1992, 1993, Garrett A. Wollman.
        !            44:  *
        !            45:  * Portions:
        !            46:  * Copyright (c) 1994, 1995, Rafal K. Boni
        !            47:  * Copyright (c) 1990, 1991, William F. Jolitz
        !            48:  * Copyright (c) 1990, The Regents of the University of California
        !            49:  *
        !            50:  * All rights reserved.
        !            51:  *
        !            52:  * Redistribution and use in source and binary forms, with or without
        !            53:  * modification, are permitted provided that the following conditions
        !            54:  * are met:
        !            55:  * 1. Redistributions of source code must retain the above copyright
        !            56:  *    notice, this list of conditions and the following disclaimer.
        !            57:  * 2. Redistributions in binary form must reproduce the above copyright
        !            58:  *    notice, this list of conditions and the following disclaimer in the
        !            59:  *    documentation and/or other materials provided with the distribution.
        !            60:  * 3. All advertising materials mentioning features or use of this software
        !            61:  *    must display the following acknowledgement:
        !            62:  *     This product includes software developed by the University of Vermont
        !            63:  *     and State Agricultural College and Garrett A. Wollman, by William F.
        !            64:  *     Jolitz, and by the University of California, Berkeley, Lawrence
        !            65:  *     Berkeley Laboratory, and its contributors.
        !            66:  * 4. Neither the names of the Universities nor the names of the authors
        !            67:  *    may be used to endorse or promote products derived from this software
        !            68:  *    without specific prior written permission.
        !            69:  *
        !            70:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
        !            71:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            72:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            73:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE UNIVERSITY OR AUTHORS BE LIABLE
        !            74:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            75:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            76:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            77:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            78:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            79:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            80:  * SUCH DAMAGE.
        !            81:  */
        !            82:
        !            83: /*
        !            84:  * Intel 82586/82596 Ethernet chip
        !            85:  * Register, bit, and structure definitions.
        !            86:  *
        !            87:  * Original StarLAN driver written by Garrett Wollman with reference to the
        !            88:  * Clarkson Packet Driver code for this chip written by Russ Nelson and others.
        !            89:  *
        !            90:  * BPF support code taken from hpdev/if_le.c, supplied with tcpdump.
        !            91:  *
        !            92:  * 3C507 support is loosely based on code donated to NetBSD by Rafal Boni.
        !            93:  *
        !            94:  * Majorly cleaned up and 3C507 code merged by Charles Hannum.
        !            95:  *
        !            96:  * Converted to SUN ie driver by Charles D. Cranor,
        !            97:  *             October 1994, January 1995.
        !            98:  * This sun version based on i386 version 1.30.
        !            99:  */
        !           100:
        !           101: /* #define I82596_DEBUG */
        !           102:
        !           103: /* Debug elements */
        !           104: #define        IED_RINT        0x01
        !           105: #define        IED_TINT        0x02
        !           106: #define        IED_RNR         0x04
        !           107: #define        IED_CNA         0x08
        !           108: #define        IED_READFRAME   0x10
        !           109: #define IED_ENQ                0x20
        !           110: #define IED_XMIT       0x40
        !           111: #define IED_CMDS       0x80
        !           112: #define        IED_ALL         0xff
        !           113:
        !           114: #define B_PER_F                6               /* recv buffers per frame */
        !           115: #define        IE_RBUF_SIZE    256             /* size of each receive buffer;
        !           116:                                                MUST BE POWER OF TWO */
        !           117: #define        NTXBUF          4               /* number of transmit commands */
        !           118: #define        IE_TBUF_SIZE    ETHER_MAX_LEN   /* length of transmit buffer */
        !           119:
        !           120: #define IE_MAXMCAST    (IE_TBUF_SIZE/6)/* must fit in transmit buffer */
        !           121:
        !           122:
        !           123: #define        IE_INTR_ENRCV   1               /* receive pkt interrupt */
        !           124: #define        IE_INTR_ENSND   2               /* send pkt interrupt */
        !           125: #define        IE_INTR_LOOP    3               /* a loop for next one*/
        !           126: #define        IE_INTR_EXIT    4               /* done w/ interrupts */
        !           127:
        !           128: #define        IE_CHIP_PROBE   0               /* reset called from chip probe */
        !           129: #define        IE_CARD_RESET   1               /* reset called from card reset */
        !           130:
        !           131: #define        IE_PORT_RESET   0
        !           132: #define        IE_PORT_TEST    1
        !           133: #define        IE_PORT_SCP     2
        !           134: #define        IE_PORT_DUMP    3
        !           135:
        !           136: /*
        !           137:  * Ethernet status, per interface.
        !           138:  *
        !           139:  * The chip uses two types of pointers: 16 bit and 24 bit
        !           140:  *   24 bit pointers cover the board's memory.
        !           141:  *   16 bit pointers are offsets from the ISCP's `ie_base'
        !           142:  *
        !           143:  * The board's memory is represented by the bus handle `bh'. The MI
        !           144:  * i82586/596 driver deals exclusively with offsets relative to the
        !           145:  * board memory bus handle. The `ie_softc' fields below that are marked
        !           146:  * `MD' are in the domain of the front-end driver; they opaque to the
        !           147:  * MI driver part.
        !           148:  *
        !           149:  * The front-end is required to manage the SCP and ISCP structures. i.e.
        !           150:  * allocate room for them on the board's memory, and arrange to point the
        !           151:  * chip at the SCB structure, the offset of which is passed to the MI
        !           152:  * driver in `sc_scb'.
        !           153:  *
        !           154:  * The following functions provide the glue necessary to deal with
        !           155:  * host and bus idiosyncracies:
        !           156:  *
        !           157:  *     hwreset         - board reset
        !           158:  *     hwinit          - board initialization
        !           159:  *     chan_attn       - get chip to look at prepared commands
        !           160:  *     intrhook        - board dependent interrupt processing
        !           161:  *
        !           162:  *     All of the following shared-memory access function use an offset
        !           163:  *     relative to the bus handle to indicate the shared memory location.
        !           164:  *     The bus_{read/write}N function take or return offset into the
        !           165:  *     shared memory in the host's byte-order.
        !           166:  *
        !           167:  *     memcopyin       - copy device memory: board to KVA
        !           168:  *     memcopyout      - copy device memory: KVA to board
        !           169:  *     bus_read16      - read a 16-bit i82586 pointer
        !           170:                          `offset' argument will be 16-bit aligned
        !           171:  *     bus_write16     - write a 16-bit i82586 pointer
        !           172:                          `offset' argument will be 16-bit aligned
        !           173:  *     bus_write24     - write a 24-bit i82586 pointer
        !           174:                          `offset' argument will be 32-bit aligned
        !           175:  *
        !           176:  */
        !           177:
        !           178: struct ie_softc {
        !           179:        struct device sc_dev;   /* device structure */
        !           180:        void *sc_ih;
        !           181:
        !           182:        bus_space_tag_t iot;    /* bus-space tag of card registers */
        !           183:        bus_space_handle_t ioh; /* bus-space handle of card registers */
        !           184:
        !           185:        bus_space_tag_t bt;     /* bus-space tag of card memory */
        !           186:        bus_space_handle_t bh;  /* bus-space handle of card memory */
        !           187:
        !           188:        const char *sc_type;    /* (MD) hardware type */
        !           189:        int     sc_vers;        /* (MD) hardware version */
        !           190:        int     sc_irq;         /* (MD) irq in md format */
        !           191:        void    *sc_iobase;     /* (MD) KVA of base of 24 bit addr space */
        !           192:        u_long  sc_maddr;       /* (MD) base of chip's RAM (16bit addr space) */
        !           193:        u_int   sc_msize;       /* (MD) how much RAM we have/use */
        !           194:        u_int   sc_flags;       /* (MI/MD) flags */
        !           195: #define        IEMD_FLAG0      0x00010000
        !           196: #define        IEMD_FLAG1      0x00020000
        !           197: #define        IEMD_FLAG2      0x00040000
        !           198: #define        IEMD_FLAG3      0x00080000
        !           199: #define        IEMD_FLAG4      0x00100000
        !           200: #define        IEMD_FLAG5      0x00200000
        !           201: #define        IEMD_FLAG6      0x00400000
        !           202: #define        IEMD_FLAG7      0x00800000
        !           203:        struct  arpcom sc_arpcom;       /* system ethercom structure */
        !           204:        struct  ifmedia sc_media;       /* supported media information */
        !           205:
        !           206:        /* Bus glue */
        !           207:        void    (*hwreset)(struct ie_softc *, int);
        !           208:        void    (*hwinit)(struct ie_softc *);
        !           209:        void    (*chan_attn)(struct ie_softc *);
        !           210:        void    (*port)(struct ie_softc *, u_int);
        !           211:        int     (*intrhook)(struct ie_softc *, int where);
        !           212:
        !           213:        void    (*memcopyin)(struct ie_softc *, void *, int, size_t);
        !           214:        void    (*memcopyout)(struct ie_softc *, const void *,
        !           215:                                   int, size_t);
        !           216:        u_int16_t (*ie_bus_read16)(struct ie_softc *, int offset);
        !           217:        void    (*ie_bus_write16)(struct ie_softc *, int offset,
        !           218:                                        u_int16_t value);
        !           219:        void    (*ie_bus_write24)(struct ie_softc *, int offset,
        !           220:                                        int addr);
        !           221:
        !           222:        /* Media management */
        !           223:         int  (*sc_mediachange)(struct ie_softc *);
        !           224:                                /* card dependent media change */
        !           225:         void (*sc_mediastatus)(struct ie_softc *, struct ifmediareq *);
        !           226:                                /* card dependent media status */
        !           227:
        !           228:
        !           229:        /*
        !           230:         * Offsets (relative to bus handle) of the i82586 SYSTEM structures.
        !           231:         */
        !           232:        int     scp;            /* Offset to the SCP (set by front-end) */
        !           233:        int     iscp;           /* Offset to the ISCP (set by front-end) */
        !           234:        int     scb;            /* Offset to SCB (set by front-end) */
        !           235:
        !           236:        /*
        !           237:         * Offset and size of a block of board memory where the buffers
        !           238:         * are to be allocated from (initialized by front-end).
        !           239:         */
        !           240:        int     buf_area;       /* Start of descriptors and buffers */
        !           241:        int     buf_area_sz;    /* Size of above */
        !           242:
        !           243:        /* SYSBUS byte */
        !           244:        int     sysbus;
        !           245:
        !           246:        /*
        !           247:         * The buffers & descriptors (recv and xmit)
        !           248:         */
        !           249:        int     rframes;        /* Offset to `nrxbuf' frame descriptors */
        !           250:        int     rbds;           /* Offset to `nrxbuf' buffer descriptors */
        !           251:        int     rbufs;          /* Offset to `nrxbuf' receive buffers */
        !           252: #define IE_RBUF_ADDR(sc, i)    (sc->rbufs + ((i) * IE_RBUF_SIZE))
        !           253:         int    rfhead, rftail;
        !           254:        int     rbhead, rbtail;
        !           255:        int     nframes;        /* number of frames in use */
        !           256:        int     nrxbuf;         /* number of recv buffs in use */
        !           257:        int     rnr_expect;     /* XXX - expect a RCVR not ready interrupt */
        !           258:
        !           259:        int     nop_cmds;       /* Offset to NTXBUF no-op commands */
        !           260:        int     xmit_cmds;      /* Offset to NTXBUF transmit commands */
        !           261:        int     xbds;           /* Offset to NTXBUF buffer descriptors */
        !           262:        int     xbufs;          /* Offset to NTXBUF transmit buffers */
        !           263: #define IE_XBUF_ADDR(sc, i)    (sc->xbufs + ((i) * IE_TBUF_SIZE))
        !           264:
        !           265:        int     xchead, xctail;
        !           266:        int     xmit_busy;
        !           267:        int     do_xmitnopchain;        /* Controls use of xmit NOP chains */
        !           268:
        !           269:        /* Multicast addresses */
        !           270:        char    *mcast_addrs;           /* Current MC filter addresses */
        !           271:        int     mcast_addrs_size;       /* Current size of MC buffer */
        !           272:        int     mcast_count;            /* Current # of addrs in buffer */
        !           273:        int     want_mcsetup;           /* run mcsetup at next opportunity */
        !           274:
        !           275:        int     promisc;                /* are we in promisc mode? */
        !           276:        int     async_cmd_inprogress;   /* we didn't wait for 586 to accept
        !           277:                                           a command */
        !           278:
        !           279: #ifdef I82596_DEBUG
        !           280:        int     sc_debug;
        !           281: #endif
        !           282: };
        !           283:
        !           284: /* Exported functions */
        !           285: int    i82596_intr(void *);
        !           286: int    i82596_probe(struct ie_softc *);
        !           287: int    i82596_proberam(struct ie_softc *);
        !           288: void   i82596_attach(struct ie_softc *, const char *, u_int8_t *,
        !           289:            int *, int, int);
        !           290: int    i82596_start_cmd(struct ie_softc *, int, int, int, int);
        !           291:
        !           292: /*
        !           293:  * Interrupt Acknowledge.
        !           294:  */
        !           295: static __inline__ void
        !           296: ie_ack(struct ie_softc *sc, u_int mask) /* in native byte-order */
        !           297: {
        !           298:        u_int status;
        !           299:        int off = IE_SCB_STATUS(sc->scb);
        !           300:
        !           301:        bus_space_barrier(sc->bt, sc->bh, off, 2, BUS_SPACE_BARRIER_READ);
        !           302:        status = (sc->ie_bus_read16)(sc, off);
        !           303:        i82596_start_cmd(sc, status & mask, 0, 0, 0);
        !           304: }
        !           305:

CVSweb