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

Annotation of sys/dev/usb/ueaglevar.h, Revision 1.1.1.1

1.1       nbrk        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: };

CVSweb