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.11 2012/10/27 17:18:20 chs 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 #define SCA_USE_FASTQ           /* use a split queue, one for fast traffic */
   44 
   45 #define SCA_MTU         1500    /* hard coded */
   46 
   47 #ifndef SCA_BSIZE
   48 #define SCA_BSIZE       (SCA_MTU + 4)   /* room for HDLC as well */
   49 #endif
   50 
   51 
   52 struct sca_softc;
   53 typedef struct sca_port sca_port_t;
   54 typedef struct sca_desc sca_desc_t;
   55 
   56 /*
   57  * device DMA descriptor
   58  */
   59 struct sca_desc {
   60         u_int16_t       sd_chainp;      /* chain pointer */
   61         u_int16_t       sd_bufp;        /* buffer pointer (low bits) */
   62         u_int8_t        sd_hbufp;       /* buffer pointer (high bits) */
   63         u_int8_t        sd_unused0;
   64         u_int16_t       sd_buflen;              /* total length */
   65         u_int8_t        sd_stat;        /* status */
   66         u_int8_t        sd_unused1;
   67 };
   68 #define SCA_DESC_EOT            0x01
   69 #define SCA_DESC_CRC            0x04
   70 #define SCA_DESC_OVRN           0x08
   71 #define SCA_DESC_RESD           0x10
   72 #define SCA_DESC_ABORT          0x20
   73 #define SCA_DESC_SHRTFRM        0x40
   74 #define SCA_DESC_EOM            0x80
   75 #define SCA_DESC_ERRORS         0x7C
   76 
   77 /*
   78  * softc structure for each port
   79  */
   80 struct sca_port {
   81         u_int msci_off;         /* offset for msci address for this port */
   82         u_int dmac_off;         /* offset of dmac address for this port */
   83 
   84         u_int sp_port;
   85 
   86         /*
   87          * CISCO keepalive stuff
   88          */
   89         u_int32_t       cka_lasttx;
   90         u_int32_t       cka_lastrx;
   91 
   92         /*
   93          * clock values, clockrate = sysclock / tmc / 2^div;
   94          */
   95         u_int8_t        sp_eclock;      /* enable external clock generate */
   96         u_int8_t        sp_rxs;         /* recv clock source */
   97         u_int8_t        sp_txs;         /* transmit clock source */
   98         u_int8_t        sp_tmc;         /* clock constant */
   99 
  100         /*
  101          * start of each important bit of information for transmit and
  102          * receive buffers.
  103          *
  104          * note: for non-DMA the phys and virtual version should be
  105          * the same value and should be an _offset_ from the beginning
  106          * of mapped memory described by sc_memt/sc_memh.
  107          */
  108         u_int sp_ntxdesc;               /* number of tx descriptors */
  109         bus_addr_t sp_txdesc_p;         /* paddress of first tx desc */
  110         sca_desc_t *sp_txdesc;          /* vaddress of first tx desc */
  111         bus_addr_t sp_txbuf_p;          /* paddress of first tx buffer */
  112         u_int8_t *sp_txbuf;             /* vaddress of first tx buffer */
  113 
  114         volatile u_int sp_txcur;        /* last descriptor in chain */
  115         volatile u_int sp_txinuse;      /* descriptors in use */
  116         volatile u_int sp_txstart;      /* start descriptor */
  117 
  118         u_int sp_nrxdesc;               /* number of rx descriptors */
  119         bus_addr_t sp_rxdesc_p;         /* paddress of first rx desc */
  120         sca_desc_t *sp_rxdesc;          /* vaddress of first rx desc */
  121         bus_addr_t sp_rxbuf_p;          /* paddress of first rx buffer */
  122         u_int8_t *sp_rxbuf;             /* vaddress of first rx buffer */
  123 
  124         u_int sp_rxstart;               /* index of first descriptor */
  125         u_int sp_rxend;                 /* index of last descriptor */
  126 
  127         struct ifnet sp_if;             /* the network information */
  128         struct ifqueue linkq;           /* link-level packets are high prio */
  129 #ifdef SCA_USE_FASTQ
  130         struct ifqueue fastq;           /* interactive packets */
  131 #endif
  132 
  133         struct sca_softc *sca;          /* pointer to parent */
  134 };
  135 
  136 /*
  137  * softc structure for the chip itself
  138  */
  139 struct sca_softc {
  140         device_t        sc_parent;      /* our parent device, or NULL */
  141         int             sc_numports;    /* number of ports present */
  142         u_int32_t       sc_baseclock;   /* the base operating clock */
  143 
  144         /*
  145          * a callback into the parent, since the SCA chip has no control
  146          * over DTR, we have to make a callback into the parent, which
  147          * might know about DTR.
  148          *
  149          * If the function pointer is NULL, no callback is specified.
  150          */
  151         void *sc_aux;
  152         void (*sc_dtr_callback)(void *, int, int);
  153         void (*sc_clock_callback)(void *, int, int);
  154 
  155         /* used to read and write the device registers */
  156         u_int8_t        (*sc_read_1)(struct sca_softc *, u_int);
  157         u_int16_t       (*sc_read_2)(struct sca_softc *, u_int);
  158         void            (*sc_write_1)(struct sca_softc *, u_int, u_int8_t);
  159         void            (*sc_write_2)(struct sca_softc *, u_int, u_int16_t);
  160 
  161         sca_port_t              sc_ports[2];
  162 
  163         bus_space_tag_t         sc_iot;         /* io space for registers */
  164         bus_space_handle_t      sc_ioh;         /* io space for registers */
  165 
  166         int                     sc_usedma;
  167         union {
  168                 struct {
  169                         bus_space_tag_t p_memt;         /* mem for non-DMA */
  170                         bus_space_handle_t p_memh;      /* mem for non-DMA */
  171                         bus_space_handle_t p_sca_ioh[16]; /* io for sca regs */
  172                         bus_size_t      p_pagesize;     /* memory page size */
  173                         bus_size_t      p_pagemask;     /* memory page mask */
  174                         u_int           p_pageshift;    /* memory page shift */
  175                         bus_size_t      p_npages;       /* num mem pages */
  176 
  177                         void    (*p_set_page)(struct sca_softc *, bus_addr_t);
  178                         void    (*p_page_on)(struct sca_softc *);
  179                         void    (*p_page_off)(struct sca_softc *);
  180                 } u_paged;
  181                 struct {
  182                         bus_dma_tag_t   d_dmat; /* bus DMA tag */
  183                         bus_dmamap_t    d_dmam; /* bus DMA map */
  184                         bus_dma_segment_t d_seg;        /* bus DMA segment */
  185                         void *          d_dma_addr;     /* kva  of segment */
  186                         bus_size_t      d_allocsize;    /* size of region */
  187                 } u_dma;
  188         } sc_u;
  189 };
  190 #define scu_memt        sc_u.u_paged.p_memt
  191 #define scu_memh        sc_u.u_paged.p_memh
  192 #define scu_sca_ioh     sc_u.u_paged.p_sca_ioh
  193 #define scu_pagesize    sc_u.u_paged.p_pagesize
  194 #define scu_pagemask    sc_u.u_paged.p_pagemask
  195 #define scu_pageshift   sc_u.u_paged.p_pageshift
  196 #define scu_npages      sc_u.u_paged.p_npages
  197 #define scu_set_page    sc_u.u_paged.p_set_page
  198 #define scu_page_on     sc_u.u_paged.p_page_on
  199 #define scu_page_off    sc_u.u_paged.p_page_off
  200 #define scu_dmat        sc_u.u_dma.d_dmat
  201 #define scu_dmam        sc_u.u_dma.d_dmam
  202 #define scu_seg         sc_u.u_dma.d_seg
  203 #define scu_dma_addr    sc_u.u_dma.d_dma_addr
  204 #define scu_allocsize   sc_u.u_dma.d_allocsize
  205 
  206 void    sca_init(struct sca_softc *);
  207 void    sca_port_attach(struct sca_softc *, u_int);
  208 int     sca_hardintr(struct sca_softc *);
  209 void    sca_shutdown(struct sca_softc *);
  210 void    sca_get_base_clock(struct sca_softc *);
  211 void    sca_print_clock_info(struct sca_softc *);
  212 
  213 #endif /* _DEV_IC_HD64570VAR_H_ */

Cache object: d1e9101a61fc558798d81556baae78c6


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