root/dev/usb/ueaglevar.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    1 /*      $OpenBSD: ueaglevar.h,v 1.2 2007/06/06 19:25:49 mk Exp $        */
    2 
    3 /*-
    4  * Copyright (c) 2003-2005
    5  *      Damien Bergamini <damien.bergamini@free.fr>
    6  *
    7  * Permission to use, copy, modify, and distribute this software for any
    8  * purpose with or without fee is hereby granted, provided that the above
    9  * copyright notice and this permission notice appear in all copies.
   10  *
   11  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
   12  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
   13  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
   14  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
   15  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   16  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
   17  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
   18  */
   19 
   20 #define UEAGLE_NISOREQS 6
   21 #define UEAGLE_NISOFRMS 4
   22 
   23 #ifndef UEAGLE_INTR_INTERVAL
   24 #define UEAGLE_INTR_INTERVAL    10      /* ms */
   25 #endif
   26 
   27 #define UEAGLE_TX_LIST_CNT      1
   28 
   29 #define UEAGLE_IDMA_TIMEOUT     1000
   30 #define UEAGLE_TX_TIMEOUT       10000
   31 
   32 #define CRC_INITIAL     0xffffffff
   33 #define CRC_MAGIC       0xc704dd7b
   34 
   35 #define ATM_CELL_SIZE           53
   36 #define ATM_CELL_HEADER_SIZE    5
   37 #define ATM_CELL_PAYLOAD_SIZE   (ATM_CELL_SIZE - ATM_CELL_HEADER_SIZE)
   38 
   39 #define AAL5_TRAILER_SIZE       8
   40 
   41 /*-
   42  *    ATM cell header:
   43  *
   44  *    0                 4                 8
   45  *    +-----------------+-----------------+
   46  *    |       GFC       |       VPI       |
   47  *    +-----------------+-----------------+
   48  *    |       VPI       |       VCI       |
   49  *    +-----------------+-----------------+
   50  *    |                VCI                |
   51  *    +-----------------+-----------+-----+
   52  *    |       VCI       |   PT (3)  | CLP |
   53  *    +-----------------+-----------+-----+
   54  *    |                HEC                |
   55  *    +-----------------------------------+
   56  */
   57 #define ATM_CH_FILL(x, gfc, vpi, vci, pt, clp, hec) do {                \
   58         (x)[0] = ((gfc) & 0xf) << 4 | ((vpi) & 0xf0) >> 4;              \
   59         (x)[1] = ((vpi) & 0xf) << 4 | ((vci) & 0xf000) >> 12;           \
   60         (x)[2] = ((vci) & 0xff0) >> 4;                                  \
   61         (x)[3] = ((vci) & 0xf) << 4 | ((pt) & 0x7) << 1 | ((clp) & 0x1);\
   62         (x)[4] = (uint8_t)(hec);                                        \
   63 } while (/* CONSTCOND */0)
   64 
   65 #define ATM_CH_SETPTFLAGS(x, v) ((x)[3] |= ((v) & 0x7) << 1)
   66 #define ATM_CH_GETPTFLAGS(x)    (((x)[3] >> 1) & 0x7)
   67 #define ATM_CH_GETVPI(x)        ((x)[0] << 4 | (x)[1] >> 4)
   68 #define ATM_CH_GETVCI(x) \
   69         (((x)[1] & 0xf) << 12 | (x)[2] << 4 | ((x)[3] & 0xf0) >> 4)
   70 
   71 /* optimized shortcut for (ATM_CH_GETPTFLAGS(x) & 1) */
   72 #define ATM_CH_ISLASTCELL(x)    ((x)[3] & 0x2)
   73 
   74 #define AAL5_TR_SETCPSUU(x, v)  ((x)[45] = (uint8_t)(v))
   75 #define AAL5_TR_SETCPI(x, v)    ((x)[46] = (uint8_t)(v))
   76 #define AAL5_TR_SETPDULEN(x, v) do {                                    \
   77         (x)[47] = (uint8_t)((v) >> 8);                                  \
   78         (x)[48] = (uint8_t)(v);                                         \
   79 } while (/* CONSTCOND */0)
   80 
   81 #define AAL5_TR_GETPDULEN(x)    (uint16_t)((x)[47] << 8 | (x)[48])
   82 #define AAL5_TR_SETCRC(x, v) do {                                       \
   83         (x)[49] = (uint8_t)((v) >> 24);                                 \
   84         (x)[50] = (uint8_t)((v) >> 16);                                 \
   85         (x)[51] = (uint8_t)((v) >> 8);                                  \
   86         (x)[52] = (uint8_t)(v);                                         \
   87 } while (/* CONSTCOND */0)
   88 
   89 #define UEAGLE_IFMTU            1500
   90 #define UEAGLE_TXBUFLEN                                                 \
   91         (((UEAGLE_IFMTU / ATM_CELL_PAYLOAD_SIZE) + 2) * ATM_CELL_SIZE)
   92 
   93 struct ueagle_vcc {
   94         uint16_t                vci;
   95         uint8_t                 vpi;
   96         uint8_t                 ch[ATM_CELL_HEADER_SIZE];
   97         void                    *rxhand;
   98         struct mbuf             *m;
   99         uint8_t                 *dst;
  100         uint8_t                 *limit;
  101         struct atm_pseudohdr    aph;
  102         int                     flags;
  103 #define UEAGLE_VCC_ACTIVE       (1 << 0)
  104 #define UEAGLE_VCC_DROP         (1 << 1)
  105 };
  106 
  107 struct ueagle_softc;
  108 
  109 struct ueagle_isoreq {
  110         struct ueagle_softc     *sc;
  111         usbd_xfer_handle        xfer;
  112         uint16_t                frlengths[UEAGLE_NISOFRMS];
  113         uint8_t                 *offsets[UEAGLE_NISOFRMS];
  114 };
  115 
  116 struct ueagle_txreq {
  117         struct ueagle_softc     *sc;
  118         usbd_xfer_handle        xfer;
  119         uint8_t                 *buf;
  120 };
  121 
  122 struct ueagle_stats {
  123         struct {
  124                 uint32_t        status;
  125                 uint32_t        flags;
  126                 uint32_t        vidcpe;
  127                 uint32_t        vidco;
  128                 uint32_t        dsrate;
  129                 uint32_t        usrate;
  130                 uint32_t        dserror;
  131                 uint32_t        userror;
  132                 uint32_t        dsunc;
  133                 uint32_t        usunc;
  134                 uint32_t        txflow;
  135                 uint32_t        rxflow;
  136                 uint32_t        attenuation;
  137                 uint32_t        dsmargin;
  138                 uint32_t        usmargin;
  139         } phy;
  140 
  141         struct {
  142                 uint32_t        cells_transmitted;
  143                 uint32_t        cells_received;
  144                 uint32_t        cells_crc_errors;
  145                 uint32_t        cells_dropped;
  146                 uint32_t        vcc_no_conn;
  147                 uint32_t        cspdus_transmitted;
  148                 uint32_t        cspdus_received;
  149                 uint32_t        cspdus_crc_errors;
  150                 uint32_t        cspdus_dropped;
  151         } atm;
  152 };
  153 
  154 #define UEAGLE_COND_CMV(sc)     ((char *)(sc) + 1)
  155 #define UEAGLE_COND_READY(sc)   ((char *)(sc) + 2)
  156 #define UEAGLE_COND_SYNC(sc)    ((char *)(sc) + 3)
  157 
  158 struct ueagle_softc {
  159         struct device           sc_dev;
  160         struct ifnet            sc_if;
  161 
  162         usbd_device_handle      sc_udev;
  163 
  164         struct proc             *stat_thread;
  165         struct usb_task         sc_swap_task;
  166         uint16_t                pageno;
  167         uint16_t                ovl;
  168 
  169         const char              *fw;
  170         uint8_t                 *dsp;
  171 
  172         struct usb_task         sc_init_task;
  173 
  174         usbd_pipe_handle        pipeh_tx;
  175         usbd_pipe_handle        pipeh_rx;
  176         usbd_pipe_handle        pipeh_idma;
  177         usbd_pipe_handle        pipeh_intr;
  178 
  179         struct ueagle_isoreq    isoreqs[UEAGLE_NISOREQS];
  180         struct ueagle_txreq     txreqs[UEAGLE_TX_LIST_CNT];
  181         struct ueagle_vcc       vcc;
  182         struct ueagle_stats     stats;
  183 
  184         uint16_t                isize;
  185         char                    ibuf[32];
  186 
  187         int                     gone;
  188 
  189         uint16_t                index;
  190         uint32_t                data;
  191 };

/* [<][>][^][v][top][bottom][index][help] */