linux/drivers/isdn/hisax/hfc_usb.h
<<
>>
Prefs
   1/*
   2 * hfc_usb.h
   3 *
   4 * $Id: hfc_usb.h,v 1.1.2.5 2007/08/20 14:36:03 mbachem Exp $
   5 */
   6
   7#ifndef __HFC_USB_H__
   8#define __HFC_USB_H__
   9
  10#define DRIVER_AUTHOR   "Peter Sprenger (sprenger@moving-byters.de)"
  11#define DRIVER_DESC     "HFC-S USB based HiSAX ISDN driver"
  12
  13
  14#define HFC_CTRL_TIMEOUT        20      /* 5ms timeout writing/reading regs */
  15#define HFC_TIMER_T3            8000    /* timeout for l1 activation timer */
  16#define HFC_TIMER_T4            500     /* time for state change interval */
  17
  18#define HFCUSB_L1_STATECHANGE   0       /* L1 state changed */
  19#define HFCUSB_L1_DRX           1       /* D-frame received */
  20#define HFCUSB_L1_ERX           2       /* E-frame received */
  21#define HFCUSB_L1_DTX           4       /* D-frames completed */
  22
  23#define MAX_BCH_SIZE            2048    /* allowed B-channel packet size */
  24
  25#define HFCUSB_RX_THRESHOLD     64      /* threshold for fifo report bit rx */
  26#define HFCUSB_TX_THRESHOLD     64      /* threshold for fifo report bit tx */
  27
  28#define HFCUSB_CHIP_ID          0x16    /* Chip ID register index */
  29#define HFCUSB_CIRM             0x00    /* cirm register index */
  30#define HFCUSB_USB_SIZE         0x07    /* int length register */
  31#define HFCUSB_USB_SIZE_I       0x06    /* iso length register */
  32#define HFCUSB_F_CROSS          0x0b    /* bit order register */
  33#define HFCUSB_CLKDEL           0x37    /* bit delay register */
  34#define HFCUSB_CON_HDLC         0xfa    /* channel connect register */
  35#define HFCUSB_HDLC_PAR         0xfb
  36#define HFCUSB_SCTRL            0x31    /* S-bus control register (tx) */
  37#define HFCUSB_SCTRL_E          0x32    /* same for E and special funcs */
  38#define HFCUSB_SCTRL_R          0x33    /* S-bus control register (rx) */
  39#define HFCUSB_F_THRES          0x0c    /* threshold register */
  40#define HFCUSB_FIFO             0x0f    /* fifo select register */
  41#define HFCUSB_F_USAGE          0x1a    /* fifo usage register */
  42#define HFCUSB_MST_MODE0        0x14
  43#define HFCUSB_MST_MODE1        0x15
  44#define HFCUSB_P_DATA           0x1f
  45#define HFCUSB_INC_RES_F        0x0e
  46#define HFCUSB_STATES           0x30
  47
  48#define HFCUSB_CHIPID           0x40    /* ID value of HFC-S USB */
  49
  50
  51/* fifo registers */
  52#define HFCUSB_NUM_FIFOS        8       /* maximum number of fifos */
  53#define HFCUSB_B1_TX            0       /* index for B1 transmit bulk/int */
  54#define HFCUSB_B1_RX            1       /* index for B1 receive bulk/int */
  55#define HFCUSB_B2_TX            2
  56#define HFCUSB_B2_RX            3
  57#define HFCUSB_D_TX             4
  58#define HFCUSB_D_RX             5
  59#define HFCUSB_PCM_TX           6
  60#define HFCUSB_PCM_RX           7
  61
  62/*
  63 * used to switch snd_transfer_mode for different TA modes e.g. the Billion USB TA just
  64 * supports ISO out, while the Cologne Chip EVAL TA just supports BULK out
  65 */
  66#define USB_INT         0
  67#define USB_BULK        1
  68#define USB_ISOC        2
  69
  70#define ISOC_PACKETS_D  8
  71#define ISOC_PACKETS_B  8
  72#define ISO_BUFFER_SIZE 128
  73
  74/* Fifo flow Control for TX ISO */
  75#define SINK_MAX        68
  76#define SINK_MIN        48
  77#define SINK_DMIN       12
  78#define SINK_DMAX       18
  79#define BITLINE_INF     (-64 * 8)
  80
  81/* HFC-S USB register access by Control-URSs */
  82#define write_usb(a, b, c) usb_control_msg((a)->dev, (a)->ctrl_out_pipe, 0, 0x40, (c), (b), NULL, 0, HFC_CTRL_TIMEOUT)
  83#define read_usb(a, b, c) usb_control_msg((a)->dev, (a)->ctrl_in_pipe, 1, 0xC0, 0, (b), (c), 1, HFC_CTRL_TIMEOUT)
  84#define HFC_CTRL_BUFSIZE 32
  85
  86/* entry and size of output/input control buffer */
  87typedef struct {
  88        __u8 hfc_reg;           /* register number */
  89        __u8 reg_val;           /* value to be written (or read) */
  90        int action;             /* data for action handler */
  91} ctrl_buft;
  92
  93/* Debugging Flags */
  94#define HFCUSB_DBG_INIT         0x0001
  95#define HFCUSB_DBG_STATES       0x0002
  96#define HFCUSB_DBG_DCHANNEL     0x0080
  97#define HFCUSB_DBG_FIFO_ERR     0x4000
  98#define HFCUSB_DBG_VERBOSE_USB  0x8000
  99
 100/*
 101 * URB error codes:
 102 * Used to represent a list of values and their respective symbolic names
 103 */
 104struct hfcusb_symbolic_list {
 105        const int num;
 106        const char *name;
 107};
 108
 109static struct hfcusb_symbolic_list urb_errlist[] = {
 110        {-ENOMEM, "No memory for allocation of internal structures"},
 111        {-ENOSPC, "The host controller's bandwidth is already consumed"},
 112        {-ENOENT, "URB was canceled by unlink_urb"},
 113        {-EXDEV, "ISO transfer only partially completed"},
 114        {-EAGAIN, "Too match scheduled for the future"},
 115        {-ENXIO, "URB already queued"},
 116        {-EFBIG, "Too much ISO frames requested"},
 117        {-ENOSR, "Buffer error (overrun)"},
 118        {-EPIPE, "Specified endpoint is stalled (device not responding)"},
 119        {-EOVERFLOW, "Babble (bad cable?)"},
 120        {-EPROTO, "Bit-stuff error (bad cable?)"},
 121        {-EILSEQ, "CRC/Timeout"},
 122        {-ETIMEDOUT, "NAK (device does not respond)"},
 123        {-ESHUTDOWN, "Device unplugged"},
 124        {-1, NULL}
 125};
 126
 127
 128/*
 129 * device dependent information to support different
 130 * ISDN Ta's using the HFC-S USB chip
 131 */
 132
 133/* USB descriptor need to contain one of the following EndPoint combination: */
 134#define CNF_4INT3ISO    1       // 4 INT IN, 3 ISO OUT
 135#define CNF_3INT3ISO    2       // 3 INT IN, 3 ISO OUT
 136#define CNF_4ISO3ISO    3       // 4 ISO IN, 3 ISO OUT
 137#define CNF_3ISO3ISO    4       // 3 ISO IN, 3 ISO OUT
 138
 139#define EP_NUL  1       // Endpoint at this position not allowed
 140#define EP_NOP  2       // all type of endpoints allowed at this position
 141#define EP_ISO  3       // Isochron endpoint mandatory at this position
 142#define EP_BLK  4       // Bulk endpoint mandatory at this position
 143#define EP_INT  5       // Interrupt endpoint mandatory at this position
 144
 145/*
 146 * List of all supported endpoint configuration sets, used to find the
 147 * best matching endpoint configuration within a devices' USB descriptor.
 148 * We need at least 3 RX endpoints, and 3 TX endpoints, either
 149 * INT-in and ISO-out, or ISO-in and ISO-out)
 150 * with 4 RX endpoints even E-Channel logging is possible
 151 */
 152static int validconf[][19] = {
 153        // INT in, ISO out config
 154        {EP_NUL, EP_INT, EP_NUL, EP_INT, EP_NUL, EP_INT, EP_NOP, EP_INT,
 155         EP_ISO, EP_NUL, EP_ISO, EP_NUL, EP_ISO, EP_NUL, EP_NUL, EP_NUL,
 156         CNF_4INT3ISO, 2, 1},
 157        {EP_NUL, EP_INT, EP_NUL, EP_INT, EP_NUL, EP_INT, EP_NUL, EP_NUL,
 158         EP_ISO, EP_NUL, EP_ISO, EP_NUL, EP_ISO, EP_NUL, EP_NUL, EP_NUL,
 159         CNF_3INT3ISO, 2, 0},
 160        // ISO in, ISO out config
 161        {EP_NUL, EP_NUL, EP_NUL, EP_NUL, EP_NUL, EP_NUL, EP_NUL, EP_NUL,
 162         EP_ISO, EP_ISO, EP_ISO, EP_ISO, EP_ISO, EP_ISO, EP_NOP, EP_ISO,
 163         CNF_4ISO3ISO, 2, 1},
 164        {EP_NUL, EP_NUL, EP_NUL, EP_NUL, EP_NUL, EP_NUL, EP_NUL, EP_NUL,
 165         EP_ISO, EP_ISO, EP_ISO, EP_ISO, EP_ISO, EP_ISO, EP_NUL, EP_NUL,
 166         CNF_3ISO3ISO, 2, 0},
 167        {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}        // EOL element
 168};
 169
 170#ifdef CONFIG_HISAX_DEBUG
 171// string description of chosen config
 172static char *conf_str[] = {
 173        "4 Interrupt IN + 3 Isochron OUT",
 174        "3 Interrupt IN + 3 Isochron OUT",
 175        "4 Isochron IN + 3 Isochron OUT",
 176        "3 Isochron IN + 3 Isochron OUT"
 177};
 178#endif
 179
 180typedef struct {
 181        int vendor;             // vendor id
 182        int prod_id;            // product id
 183        char *vend_name;        // vendor string
 184        __u8 led_scheme;        // led display scheme
 185        signed short led_bits[8];       // array of 8 possible LED bitmask settings
 186} vendor_data;
 187
 188#define LED_OFF         0       // no LED support
 189#define LED_SCHEME1     1       // LED standard scheme
 190#define LED_SCHEME2     2       // not used yet...
 191
 192#define LED_POWER_ON    1
 193#define LED_POWER_OFF   2
 194#define LED_S0_ON       3
 195#define LED_S0_OFF      4
 196#define LED_B1_ON       5
 197#define LED_B1_OFF      6
 198#define LED_B1_DATA     7
 199#define LED_B2_ON       8
 200#define LED_B2_OFF      9
 201#define LED_B2_DATA     10
 202
 203#define LED_NORMAL      0       // LEDs are normal
 204#define LED_INVERTED    1       // LEDs are inverted
 205
 206
 207#endif  // __HFC_USB_H__
 208