Annotation of sys/dev/usb/ueaglevar.h, Revision 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