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/hd64570var.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: hd64570var.h,v 1.7 2005/12/11 12:21:26 christos Exp $  */
    2 
    3 /*
    4  * Copyright (c) 1999 Christian E. Hopps
    5  * Copyright (c) 1998 Vixie Enterprises
    6  * All rights reserved.
    7  *
    8  * Redistribution and use in source and binary forms, with or without
    9  * modification, are permitted provided that the following conditions
   10  * are met:
   11  *
   12  * 1. Redistributions of source code must retain the above copyright
   13  *    notice, this list of conditions and the following disclaimer.
   14  * 2. Redistributions in binary form must reproduce the above copyright
   15  *    notice, this list of conditions and the following disclaimer in the
   16  *    documentation and/or other materials provided with the distribution.
   17  * 3. Neither the name of Vixie Enterprises nor the names
   18  *    of its contributors may be used to endorse or promote products derived
   19  *    from this software without specific prior written permission.
   20  *
   21  * THIS SOFTWARE IS PROVIDED BY VIXIE ENTERPRISES AND
   22  * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
   23  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   24  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   25  * DISCLAIMED.  IN NO EVENT SHALL VIXIE ENTERPRISES OR
   26  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   27  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   28  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   29  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   30  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   31  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   32  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   33  * SUCH DAMAGE.
   34  *
   35  * This software has been written for Vixie Enterprises by Michael Graff
   36  * <explorer@flame.org>.  To learn more about Vixie Enterprises, see
   37  * ``http://www.vix.com''.
   38  */
   39 
   40 #ifndef _DEV_IC_HD64570VAR_H_
   41 #define _DEV_IC_HD64570VAR_H_
   42 
   43 #include "bpfilter.h"
   44 
   45 #define SCA_USE_FASTQ           /* use a split queue, one for fast traffic */
   46 
   47 #define SCA_MTU         1500    /* hard coded */
   48 
   49 #ifndef SCA_BSIZE
   50 #define SCA_BSIZE       (SCA_MTU + 4)   /* room for HDLC as well */
   51 #endif
   52 
   53 
   54 struct sca_softc;
   55 typedef struct sca_port sca_port_t;
   56 typedef struct sca_desc sca_desc_t;
   57 
   58 /*
   59  * device DMA descriptor
   60  */
   61 struct sca_desc {
   62         u_int16_t       sd_chainp;      /* chain pointer */
   63         u_int16_t       sd_bufp;        /* buffer pointer (low bits) */
   64         u_int8_t        sd_hbufp;       /* buffer pointer (high bits) */
   65         u_int8_t        sd_unused0;
   66         u_int16_t       sd_buflen;              /* total length */
   67         u_int8_t        sd_stat;        /* status */
   68         u_int8_t        sd_unused1;
   69 };
   70 #define SCA_DESC_EOT            0x01
   71 #define SCA_DESC_CRC            0x04
   72 #define SCA_DESC_OVRN           0x08
   73 #define SCA_DESC_RESD           0x10
   74 #define SCA_DESC_ABORT          0x20
   75 #define SCA_DESC_SHRTFRM        0x40
   76 #define SCA_DESC_EOM            0x80
   77 #define SCA_DESC_ERRORS         0x7C
   78 
   79 /*
   80  * softc structure for each port
   81  */
   82 struct sca_port {
   83         u_int msci_off;         /* offset for msci address for this port */
   84         u_int dmac_off;         /* offset of dmac address for this port */
   85 
   86         u_int sp_port;
   87 
   88         /*
   89          * CISCO keepalive stuff
   90          */
   91         u_int32_t       cka_lasttx;
   92         u_int32_t       cka_lastrx;
   93 
   94         /*
   95          * clock values, clockrate = sysclock / tmc / 2^div;
   96          */
   97         u_int8_t        sp_eclock;      /* enable external clock generate */
   98         u_int8_t        sp_rxs;         /* recv clock source */
   99         u_int8_t        sp_txs;         /* transmit clock source */
  100         u_int8_t        sp_tmc;         /* clock constant */
  101 
  102         /*
  103          * start of each important bit of information for transmit and
  104          * receive buffers.
  105          *
  106          * note: for non-DMA the phys and virtual version should be
  107          * the same value and should be an _offset_ from the beginning
  108          * of mapped memory described by sc_memt/sc_memh.
  109          */
  110         u_int sp_ntxdesc;               /* number of tx descriptors */
  111         u_int32_t sp_txdesc_p;          /* paddress of first tx desc */
  112         sca_desc_t *sp_txdesc;          /* vaddress of first tx desc */
  113         u_int32_t sp_txbuf_p;           /* paddress of first tx buffer */
  114         u_int8_t *sp_txbuf;             /* vaddress of first tx buffer */
  115 
  116         volatile u_int sp_txcur;        /* last descriptor in chain */
  117         volatile u_int sp_txinuse;      /* descriptors in use */
  118         volatile u_int sp_txstart;      /* start descriptor */
  119 
  120         u_int sp_nrxdesc;               /* number of rx descriptors */
  121         u_int32_t sp_rxdesc_p;          /* paddress of first rx desc */
  122         sca_desc_t *sp_rxdesc;          /* vaddress of first rx desc */
  123         u_int32_t sp_rxbuf_p;           /* paddress of first rx buffer */
  124         u_int8_t *sp_rxbuf;             /* vaddress of first rx buffer */
  125 
  126         u_int sp_rxstart;               /* index of first descriptor */
  127         u_int sp_rxend;                 /* index of last descriptor */
  128 
  129         struct ifnet sp_if;             /* the network information */
  130         struct ifqueue linkq;           /* link-level packets are high prio */
  131 #ifdef SCA_USE_FASTQ
  132         struct ifqueue fastq;           /* interactive packets */
  133 #endif
  134 
  135         struct sca_softc *sca;          /* pointer to parent */
  136 };
  137 
  138 /*
  139  * softc structure for the chip itself
  140  */
  141 struct sca_softc {
  142         struct device   *sc_parent;     /* our parent device, or NULL */
  143         int             sc_numports;    /* number of ports present */
  144         u_int32_t       sc_baseclock;   /* the base operating clock */
  145 
  146         /*
  147          * a callback into the parent, since the SCA chip has no control
  148          * over DTR, we have to make a callback into the parent, which
  149          * might know about DTR.
  150          *
  151          * If the function pointer is NULL, no callback is specified.
  152          */
  153         void *sc_aux;
  154         void (*sc_dtr_callback)(void *, int, int);
  155         void (*sc_clock_callback)(void *, int, int);
  156 
  157         /* used to read and write the device registers */
  158         u_int8_t        (*sc_read_1)(struct sca_softc *, u_int);
  159         u_int16_t       (*sc_read_2)(struct sca_softc *, u_int);
  160         void            (*sc_write_1)(struct sca_softc *, u_int, u_int8_t);
  161         void            (*sc_write_2)(struct sca_softc *, u_int, u_int16_t);
  162 
  163         sca_port_t              sc_ports[2];
  164 
  165         bus_space_tag_t         sc_iot;         /* io space for registers */
  166         bus_space_handle_t      sc_ioh;         /* io space for registers */
  167 
  168         int                     sc_usedma;
  169         union {
  170                 struct {
  171                         bus_space_tag_t p_memt;         /* mem for non-DMA */
  172                         bus_space_handle_t p_memh;      /* mem for non-DMA */
  173                         bus_space_handle_t p_sca_ioh[16]; /* io for sca regs */
  174                         bus_size_t      p_pagesize;     /* memory page size */
  175                         bus_size_t      p_pagemask;     /* memory page mask */
  176                         u_int           p_pageshift;    /* memory page shift */
  177                         bus_size_t      p_npages;       /* num mem pages */
  178 
  179                         void    (*p_set_page)(struct sca_softc *, bus_addr_t);
  180                         void    (*p_page_on)(struct sca_softc *);
  181                         void    (*p_page_off)(struct sca_softc *);
  182                 } u_paged;
  183                 struct {
  184                         bus_dma_tag_t   d_dmat; /* bus DMA tag */
  185                         bus_dmamap_t    d_dmam; /* bus DMA map */
  186                         bus_dma_segment_t d_seg;        /* bus DMA segment */
  187                         caddr_t         d_dma_addr;     /* kva  of segment */
  188                         bus_size_t      d_allocsize;    /* size of region */
  189                 } u_dma;
  190         } sc_u;
  191 };
  192 #define scu_memt        sc_u.u_paged.p_memt
  193 #define scu_memh        sc_u.u_paged.p_memh
  194 #define scu_sca_ioh     sc_u.u_paged.p_sca_ioh
  195 #define scu_pagesize    sc_u.u_paged.p_pagesize
  196 #define scu_pagemask    sc_u.u_paged.p_pagemask
  197 #define scu_pageshift   sc_u.u_paged.p_pageshift
  198 #define scu_npages      sc_u.u_paged.p_npages
  199 #define scu_set_page    sc_u.u_paged.p_set_page
  200 #define scu_page_on     sc_u.u_paged.p_page_on
  201 #define scu_page_off    sc_u.u_paged.p_page_off
  202 #define scu_dmat        sc_u.u_dma.d_dmat
  203 #define scu_dmam        sc_u.u_dma.d_dmam
  204 #define scu_seg         sc_u.u_dma.d_seg
  205 #define scu_dma_addr    sc_u.u_dma.d_dma_addr
  206 #define scu_allocsize   sc_u.u_dma.d_allocsize
  207 
  208 void    sca_init(struct sca_softc *);
  209 void    sca_port_attach(struct sca_softc *, u_int);
  210 int     sca_hardintr(struct sca_softc *);
  211 void    sca_shutdown(struct sca_softc *);
  212 void    sca_get_base_clock(struct sca_softc *);
  213 void    sca_print_clock_info(struct sca_softc *);
  214 
  215 #endif /* _DEV_IC_HD64570VAR_H_ */

Cache object: 3d1568be8bac77cda9ffef5e0b76d761


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