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

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

1.1     ! nbrk        1: /*     $OpenBSD: fxpvar.h,v 1.27 2007/05/28 22:54:04 ckuethe Exp $     */
        !             2: /*     $NetBSD: if_fxpvar.h,v 1.1 1997/06/05 02:01:58 thorpej Exp $    */
        !             3:
        !             4: /*
        !             5:  * Copyright (c) 1995, David Greenman
        !             6:  * All rights reserved.
        !             7:  *
        !             8:  * Modifications to support NetBSD:
        !             9:  * Copyright (c) 1997 Jason R. Thorpe.  All rights reserved.
        !            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 unmodified, this list of conditions, and the following
        !            16:  *    disclaimer.
        !            17:  * 2. Redistributions in binary form must reproduce the above copyright
        !            18:  *    notice, this list of conditions and the following disclaimer in the
        !            19:  *    documentation and/or other materials provided with the distribution.
        !            20:  *
        !            21:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
        !            22:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            23:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            24:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
        !            25:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            26:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            27:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            28:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            29:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            30:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            31:  * SUCH DAMAGE.
        !            32:  *
        !            33:  *      Id: if_fxpvar.h,v 1.6 1998/08/02 00:29:15 dg Exp
        !            34:  */
        !            35:
        !            36: /*
        !            37:  * Misc. definitions for the Intel EtherExpress Pro/100B PCI Fast
        !            38:  * Ethernet driver
        !            39:  */
        !            40:
        !            41: /*
        !            42:  * Number of transmit control blocks. This determines the number
        !            43:  * of transmit buffers that can be chained in the CB list.
        !            44:  * This must be a power of two.
        !            45:  */
        !            46: #define FXP_NTXCB      128
        !            47:
        !            48: /*
        !            49:  * Minimum and maximum number of receive frame area buffers.
        !            50:  */
        !            51: #define FXP_NRFABUFS_MIN       4
        !            52: #define FXP_NRFABUFS_MAX       64      /* These are large so choose wisely. */
        !            53:
        !            54: /*
        !            55:  * Default maximum time, in microseconds, that an interrupt may be delayed
        !            56:  * in an attempt to coalesce interrupts.  This is only effective if the Intel
        !            57:  * microcode is loaded.
        !            58:  */
        !            59: #ifndef FXP_INT_DELAY
        !            60: #define FXP_INT_DELAY 128
        !            61: #endif
        !            62:
        !            63: /*
        !            64:  * Default number of packets that will be bundled, before an interrupt is
        !            65:  * generated.  This is only effective if the Intel microcode is loaded.
        !            66:  * This is not present in all microcode revisions.
        !            67:  */
        !            68: #ifndef FXP_BUNDLE_MAX
        !            69: #define FXP_BUNDLE_MAX 16
        !            70: #endif
        !            71:
        !            72: /*
        !            73:  * Bit-mask describing minimum size frame that will be bundled.
        !            74:  * This is only effetive if the Intel microcode is loaded.
        !            75:  * This is not present in all microcode revisions. Disabled by default,
        !            76:  * to reduce recieving immediately interrupts from all frames with size less
        !            77:  * than 128 bytes.
        !            78:  */
        !            79: #ifndef FXP_MIN_SIZE_MASK
        !            80: #define FXP_MIN_SIZE_MASK 0xFFFF
        !            81: #endif
        !            82:
        !            83: /*
        !            84:  * NOTE: Elements are ordered for optimal cacheline behavior, and NOT
        !            85:  *      for functional grouping.
        !            86:  */
        !            87:
        !            88: struct fxp_txsw {
        !            89:        struct fxp_txsw *tx_next;
        !            90:        struct mbuf *tx_mbuf;
        !            91:        bus_dmamap_t tx_map;
        !            92:        bus_addr_t tx_off;
        !            93:        struct fxp_cb_tx *tx_cb;
        !            94: };
        !            95:
        !            96: struct fxp_ctrl {
        !            97:        struct fxp_cb_tx tx_cb[FXP_NTXCB];
        !            98:        struct fxp_stats stats;
        !            99:        union {
        !           100:                struct fxp_cb_mcs mcs;
        !           101:                struct fxp_cb_ias ias;
        !           102:                struct fxp_cb_config cfg;
        !           103:                struct fxp_cb_ucode code;
        !           104:        } u;
        !           105: };
        !           106:
        !           107: struct fxp_softc {
        !           108:        struct device sc_dev;           /* generic device structures */
        !           109:        void *sc_ih;                    /* interrupt handler cookie */
        !           110:        bus_space_tag_t sc_st;          /* bus space tag */
        !           111:        bus_space_handle_t sc_sh;       /* bus space handle */
        !           112:        bus_dma_tag_t sc_dmat;          /* bus dma tag */
        !           113:        struct arpcom sc_arpcom;        /* per-interface network data */
        !           114:        struct mii_data sc_mii;         /* MII media information */
        !           115:        struct mbuf *rfa_headm;         /* first mbuf in receive frame area */
        !           116:        struct mbuf *rfa_tailm;         /* last mbuf in receive frame area */
        !           117:        int sc_flags;                   /* misc. flags */
        !           118: #define        FXPF_MWI_ENABLE         0x10    /* enable use of PCI MWI command */
        !           119: #define        FXPF_DISABLE_STANDBY    0x20    /* currently need to work-around */
        !           120: #define        FXPF_UCODE              0x40    /* ucode load already attempted */
        !           121: #define        FXPF_RECV_WORKAROUND    0x80    /* receiver lock-up workaround */
        !           122:        struct timeout stats_update_to; /* Pointer to timeout structure */
        !           123:        int rx_idle_secs;               /* # of seconds RX has been idle */
        !           124:        struct fxp_cb_tx *cbl_base;     /* base of TxCB list */
        !           125:        int phy_primary_addr;           /* address of primary PHY */
        !           126:        int phy_primary_device;         /* device type of primary PHY */
        !           127:        int phy_10Mbps_only;            /* PHY is 10Mbps-only device */
        !           128:        int eeprom_size;                /* size of serial EEPROM */
        !           129:        int rx_bufs;                    /* how many rx buffers allocated? */
        !           130:        void *sc_sdhook;                /* shutdownhook */
        !           131:        void *sc_powerhook;             /* powerhook */
        !           132:        struct fxp_txsw txs[FXP_NTXCB];
        !           133:        struct fxp_txsw *sc_cbt_cons, *sc_cbt_prod, *sc_cbt_prev;
        !           134:        int sc_cbt_cnt;
        !           135:        bus_dmamap_t tx_cb_map;
        !           136:        bus_dma_segment_t sc_cb_seg;
        !           137:        int sc_cb_nseg;
        !           138:        struct fxp_ctrl *sc_ctrl;
        !           139:        bus_dmamap_t sc_rxmaps[FXP_NRFABUFS_MAX];
        !           140:        int sc_rxfree;
        !           141:        u_int32_t sc_revision;          /* chip revision */
        !           142:        u_int16_t sc_int_delay;         /* interrupt delay value for ucode */
        !           143:        u_int16_t sc_bundle_max;        /* max # frames per interrupt (ucode) */
        !           144:        u_int16_t sc_min_size_mask;     /* bit-mask describing the minimum
        !           145:                                         * size of frame that will be bundled */
        !           146: };
        !           147:
        !           148: /* Macros to ease CSR access. */
        !           149: #define        CSR_READ_1(sc, reg)                                             \
        !           150:        bus_space_read_1((sc)->sc_st, (sc)->sc_sh, (reg))
        !           151: #define        CSR_READ_2(sc, reg)                                             \
        !           152:        bus_space_read_2((sc)->sc_st, (sc)->sc_sh, (reg))
        !           153: #define        CSR_READ_4(sc, reg)                                             \
        !           154:        bus_space_read_4((sc)->sc_st, (sc)->sc_sh, (reg))
        !           155: #define        CSR_WRITE_1(sc, reg, val)                                       \
        !           156:        bus_space_write_1((sc)->sc_st, (sc)->sc_sh, (reg), (val))
        !           157: #define        CSR_WRITE_2(sc, reg, val)                                       \
        !           158:        bus_space_write_2((sc)->sc_st, (sc)->sc_sh, (reg), (val))
        !           159: #define        CSR_WRITE_4(sc, reg, val)                                       \
        !           160:        bus_space_write_4((sc)->sc_st, (sc)->sc_sh, (reg), (val))
        !           161:
        !           162: extern int fxp_intr(void *);
        !           163: extern int fxp_attach(struct fxp_softc *, const char *);
        !           164:
        !           165: #define        FXP_RXMAP_GET(sc)       ((sc)->sc_rxmaps[(sc)->sc_rxfree++])
        !           166: #define        FXP_RXMAP_PUT(sc,map)   ((sc)->sc_rxmaps[--(sc)->sc_rxfree] = (map))
        !           167:
        !           168: #define        FXP_TXCB_SYNC(sc, txs, p)                                       \
        !           169:     bus_dmamap_sync((sc)->sc_dmat, (sc)->tx_cb_map, (txs)->tx_off,     \
        !           170:        sizeof(struct fxp_cb_tx), (p))
        !           171:
        !           172: #define        FXP_MCS_SYNC(sc, p)                                             \
        !           173:     bus_dmamap_sync((sc)->sc_dmat, (sc)->tx_cb_map,                    \
        !           174:        offsetof(struct fxp_ctrl, u.mcs), sizeof(struct fxp_cb_mcs), (p))
        !           175:
        !           176: #define        FXP_IAS_SYNC(sc, p)                                             \
        !           177:     bus_dmamap_sync((sc)->sc_dmat, (sc)->tx_cb_map,                    \
        !           178:        offsetof(struct fxp_ctrl, u.ias), sizeof(struct fxp_cb_ias), (p))
        !           179:
        !           180: #define        FXP_CFG_SYNC(sc, p)                                             \
        !           181:     bus_dmamap_sync((sc)->sc_dmat, (sc)->tx_cb_map,                    \
        !           182:        offsetof(struct fxp_ctrl, u.cfg), sizeof(struct fxp_cb_config), (p))
        !           183:
        !           184: #define FXP_UCODE_SYNC(sc, p)                                          \
        !           185:     bus_dmamap_sync((sc)->sc_dmat, (sc)->tx_cb_map,                    \
        !           186:        offsetof(struct fxp_ctrl, u.code), sizeof(struct fxp_cb_ucode), (p))
        !           187:
        !           188: #define        FXP_STATS_SYNC(sc, p)                                           \
        !           189:     bus_dmamap_sync((sc)->sc_dmat, (sc)->tx_cb_map,                    \
        !           190:        offsetof(struct fxp_ctrl, stats), sizeof(struct fxp_stats), (p))
        !           191:
        !           192: #define        FXP_MBUF_SYNC(sc, m, p)                                         \
        !           193:     bus_dmamap_sync((sc)->sc_dmat, (m), 0, (m)->dm_mapsize, (p))

CVSweb