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/lnc/if_lncvar.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 /*-
    2  * Copyright (c) 1994-1998
    3  *      Paul Richards.  All rights reserved.
    4  *
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions
    7  * are met:
    8  * 1. Redistributions of source code must retain the above copyright
    9  *    notice, this list of conditions and the following disclaimer,
   10  *    verbatim and that no modifications are made prior to this
   11  *    point in the file.
   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 Paul Richards.
   18  * 4. The name Paul Richards may not be used to endorse or promote products
   19  *    derived from this software without specific prior written permission.
   20  *
   21  * THIS SOFTWARE IS PROVIDED BY PAUL RICHARDS ``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 PAUL RICHARDS 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  * $FreeBSD: releng/6.0/sys/dev/lnc/if_lncvar.h 147256 2005-06-10 16:49:24Z brooks $
   34  */
   35 
   36 /*
   37  * Initialize multicast address hashing registers to accept
   38  * all multicasts (only used when in promiscuous mode)
   39  */
   40 #define MULTI_INIT_ADDR 0xff
   41 
   42 #define NORMAL 0
   43 
   44 #define NRDRE 3
   45 #define NTDRE 3
   46 #define RECVBUFSIZE 1518        /* Packet size rounded to dword boundary */
   47 #define TRANSBUFSIZE 1518
   48 #define MBUF_CACHE_LIMIT 0
   49 
   50 #define MEM_SLEW 8
   51 
   52 /* LNC Flags */
   53 #define LNC_INITIALISED 1
   54 #define LNC_ALLMULTI 2
   55 
   56 /* BICC port addresses */
   57 #define BICC_IOSIZE    16
   58 #define BICC_RDP     0x0c        /* Register Data Port */
   59 #define BICC_RAP     0x0e        /* Register Address Port */
   60 
   61 /* NE2100 port addresses */
   62 #define NE2100_IOSIZE  24
   63 #define PCNET_RDP    0x10        /* Register Data Port */
   64 #define PCNET_RAP    0x12        /* Register Address Port */
   65 #define PCNET_RESET  0x14
   66 #define PCNET_BDP    0x16
   67 #define PCNET_VSW    0x18
   68 
   69 /* DEPCA port addresses */
   70 #define DEPCA_IOSIZE   16
   71 #define DEPCA_CTRL   0x00        /* NIC Control and status register */
   72 #define DEPCA_RDP    0x04        /* Register Data Port */
   73 #define DEPCA_RAP    0x06        /* Register Address Port */
   74 #define DEPCA_ADP    0x0c
   75 
   76 /* DEPCA specific defines */
   77 #define DEPCA_ADDR_ROM_SIZE 32
   78 
   79 /* C-NET(98)S port addresses */
   80 /* Notice, we can ignore fragmantation by using isa_alloc_resourcev(). */
   81 #define CNET98S_IOSIZE   32     
   82 #define CNET98S_RDP    0x10      /* Register Data Port */
   83 #define CNET98S_RAP    0x12      /* Register Address Port */
   84 #define CNET98S_RESET  0x14
   85 #define CNET98S_IDP    0x16
   86 #define CNET98S_EEPROM 0x1e
   87 
   88 /* Chip types */
   89 #define LANCE           1        /* Am7990   */
   90 #define C_LANCE         2        /* Am79C90  */
   91 #define PCnet_ISA       3        /* Am79C960 */
   92 #define PCnet_ISAplus   4        /* Am79C961 */
   93 #define PCnet_ISA_II    5        /* Am79C961A */
   94 #define PCnet_32        6        /* Am79C965 */
   95 #define PCnet_PCI       7        /* Am79C970 */
   96 #define PCnet_PCI_II    8        /* Am79C970A */
   97 #define PCnet_FAST      9        /* Am79C971 */
   98 #define PCnet_FASTplus  10       /* Am79C972 */
   99 #define PCnet_Home      11       /* Am79C978 */
  100 
  101 
  102 /* CSR88-89: Chip ID masks */
  103 #define AMD_MASK  0x003
  104 #define PART_MASK 0xffff
  105 #define Am79C960  0x0003
  106 #define Am79C961  0x2260
  107 #define Am79C961A 0x2261
  108 #define Am79C965  0x2430
  109 #define Am79C970  0x0242
  110 #define Am79C970A 0x2621
  111 #define Am79C971  0x2623
  112 #define Am79C972  0x2624
  113 #define Am79C973  0x2625
  114 #define Am79C978  0x2626
  115 
  116 /* Board types */
  117 #define UNKNOWN         0
  118 #define BICC            1
  119 #define NE2100          2
  120 #define DEPCA           3
  121 #define CNET98S         4       /* PC-98 */
  122 
  123 /* mem_mode values */
  124 #define DMA_FIXED       1
  125 #define DMA_MBUF        2
  126 #define SHMEM           4
  127 
  128 #define MEM_MODES \
  129         "\2\3SHMEM\2DMA_MBUF\1DMA_FIXED"
  130 
  131 #define CSR0_FLAGS \
  132         "\2\20ERR\17BABL\16CERR\15MISS\14MERR\13RINT\12TINT\11IDON\
  133             \10INTR\07INEA\06RXON\05TXON\04TDMD\03STOP\02STRT\01INIT"
  134 
  135 #define INIT_MODE \
  136         "\2\20PROM\07INTL\06DRTY\05COLL\04DTCR\03LOOP\02DTX\01DRX"
  137 
  138 #define RECV_MD1 \
  139         "\2\10OWN\7ERR\6FRAM\5OFLO\4CRC\3BUFF\2STP\1ENP"
  140 
  141 #define TRANS_MD1 \
  142         "\2\10OWN\7ERR\6RES\5MORE\4ONE\3DEF\2STP\1ENP"
  143 
  144 #define TRANS_MD3 \
  145         "\2\6BUFF\5UFLO\4RES\3LCOL\2LCAR\1RTRY"
  146 
  147 #ifdef LNC_KEEP_STATS
  148 #define LNCSTATS_STRUCT \
  149         struct lnc_stats { \
  150                 int idon; \
  151                 int rint; \
  152                 int tint; \
  153                 int cerr; \
  154                 int babl; \
  155                 int miss; \
  156                 int merr; \
  157                 int rxoff; \
  158                 int txoff; \
  159                 int terr; \
  160                 int lcol; \
  161                 int lcar; \
  162                 int tbuff; \
  163                 int def; \
  164                 int more; \
  165                 int one; \
  166                 int uflo; \
  167                 int rtry; \
  168                 int rerr; \
  169                 int fram; \
  170                 int oflo; \
  171                 int crc; \
  172                 int rbuff; \
  173                 int drop_packet; \
  174                 int trans_ring_full; \
  175         } lnc_stats;
  176 #define LNCSTATS(X) ++(sc->lnc_stats.X);
  177 #else
  178 #define LNCSTATS_STRUCT
  179 #define LNCSTATS(X)
  180 #endif
  181 
  182 struct nic_info {
  183         int ident;         /* Type of card */
  184         int ic;            /* Type of ic, Am7990, Am79C960 etc. */
  185         int mem_mode;
  186         int iobase;
  187         int mode;          /* Mode setting at initialization */
  188 };
  189 
  190 typedef struct lnc_softc {
  191         struct resource *irqres;
  192         int irqrid;
  193         struct resource *drqres;
  194         int drqrid;
  195         struct resource *portres;
  196         int portrid;
  197         bus_space_tag_t lnc_btag;
  198         bus_space_handle_t lnc_bhandle;
  199         void *intrhand;
  200         bus_dma_tag_t   dmat;
  201         bus_dmamap_t    dmamap;
  202         struct ifnet *ifp;
  203         struct nic_info nic;                /* NIC specific info */
  204         int nrdre;
  205         struct host_ring_entry *recv_ring;  /* start of alloc'd mem */
  206         int recv_next;
  207         int ntdre;
  208         struct host_ring_entry *trans_ring;
  209         int trans_next;
  210         struct init_block *init_block;      /* Initialisation block */
  211         int pending_transmits;        /* No. of transmit descriptors in
  212         use */
  213         int next_to_send;
  214         struct mbuf *mbufs;
  215         int mbuf_count;
  216         int flags;
  217         int rap;
  218         int rdp;
  219         int bdp;
  220         #ifdef DEBUG
  221         int lnc_debug;
  222         #endif
  223         LNCSTATS_STRUCT
  224 } lnc_softc_t;
  225 
  226 struct host_ring_entry {
  227         struct mds *md;
  228         union {
  229                 struct mbuf *mbuf;
  230                 char *data;
  231         }buff;
  232 };
  233 
  234 #define NDESC(len2) (1 << len2)
  235 
  236 #define INC_MD_PTR(ptr, no_entries) \
  237         if (++ptr >= NDESC(no_entries)) \
  238                 ptr = 0;
  239 
  240 #define DEC_MD_PTR(ptr, no_entries) \
  241         if (--ptr < 0) \
  242                 ptr = NDESC(no_entries) - 1;
  243 
  244 #define RECV_NEXT (sc->recv_ring->base + sc->recv_next)
  245 #define TRANS_NEXT (sc->trans_ring->base + sc->trans_next)
  246 
  247 #define lnc_inb(port) \
  248         bus_space_read_1(sc->lnc_btag, sc->lnc_bhandle, (port))
  249 #define lnc_inw(port) \
  250         bus_space_read_2(sc->lnc_btag, sc->lnc_bhandle, (port))
  251 #define lnc_outw(port, val) \
  252         bus_space_write_2(sc->lnc_btag, sc->lnc_bhandle, (port), (val))
  253 
  254 /* Functional declarations */
  255 extern int lance_probe(struct lnc_softc *);
  256 extern void lnc_release_resources(device_t);
  257 extern int lnc_attach_common(device_t);
  258 extern int lnc_detach_common(device_t);
  259 extern void lnc_stop(struct lnc_softc *);
  260 
  261 extern void write_csr(struct lnc_softc *, u_short, u_short);
  262 extern u_short read_csr(struct lnc_softc *, u_short);
  263 
  264 /* Variable declarations */
  265 extern driver_intr_t lncintr; 
  266 extern devclass_t lnc_devclass;

Cache object: 34b5f26496f28b34163ba89ceb85c830


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