Commit | Line | Data |
---|---|---|
1da177e4 | 1 | /* |
d6c59c13 MB |
2 | * hfc_usb.h |
3 | * | |
4 | * $Id: hfc_usb.h,v 1.1.2.5 2007/08/20 14:36:03 mbachem Exp $ | |
5 | */ | |
1da177e4 LT |
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 | ||
1da177e4 | 13 | |
d6c59c13 MB |
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 */ | |
1da177e4 | 17 | |
d6c59c13 MB |
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 */ | |
1da177e4 | 22 | |
d6c59c13 | 23 | #define MAX_BCH_SIZE 2048 /* allowed B-channel packet size */ |
1da177e4 | 24 | |
d6c59c13 MB |
25 | #define HFCUSB_RX_THRESHOLD 64 /* threshold for fifo report bit rx */ |
26 | #define HFCUSB_TX_THRESHOLD 64 /* threshold for fifo report bit tx */ | |
1da177e4 LT |
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 | ||
d6c59c13 | 50 | |
1da177e4 | 51 | /* fifo registers */ |
1da177e4 LT |
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 | /* | |
d6c59c13 MB |
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 | */ | |
1da177e4 LT |
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 | ||
d6c59c13 | 74 | /* Fifo flow Control for TX ISO */ |
1da177e4 LT |
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 | ||
d6c59c13 | 81 | /* HFC-S USB register access by Control-URSs */ |
597a107b | 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) |
1da177e4 | 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) |
1da177e4 LT |
84 | #define HFC_CTRL_BUFSIZE 32 |
85 | ||
1da177e4 | 86 | /* entry and size of output/input control buffer */ |
1da177e4 LT |
87 | typedef 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 | ||
d6c59c13 MB |
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 | |
1da177e4 | 99 | |
d6c59c13 MB |
100 | /* |
101 | * URB error codes: | |
102 | * Used to represent a list of values and their respective symbolic names | |
103 | */ | |
1da177e4 LT |
104 | struct hfcusb_symbolic_list { |
105 | const int num; | |
106 | const char *name; | |
107 | }; | |
108 | ||
109 | static 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)"}, | |
d6c59c13 | 118 | {-EPIPE, "Specified endpoint is stalled (device not responding)"}, |
1da177e4 LT |
119 | {-EOVERFLOW, "Babble (bad cable?)"}, |
120 | {-EPROTO, "Bit-stuff error (bad cable?)"}, | |
d6c59c13 MB |
121 | {-EILSEQ, "CRC/Timeout"}, |
122 | {-ETIMEDOUT, "NAK (device does not respond)"}, | |
1da177e4 LT |
123 | {-ESHUTDOWN, "Device unplugged"}, |
124 | {-1, NULL} | |
125 | }; | |
126 | ||
127 | ||
d6c59c13 | 128 | /* |
25985edc | 129 | * device dependent information to support different |
d6c59c13 MB |
130 | * ISDN Ta's using the HFC-S USB chip |
131 | */ | |
1da177e4 LT |
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 | ||
d6c59c13 MB |
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 | |
1da177e4 | 144 | |
d6c59c13 MB |
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 | */ | |
672c3fd9 | 152 | static int validconf[][19] = { |
1da177e4 LT |
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 | ||
597a107b | 170 | #ifdef CONFIG_HISAX_DEBUG |
1da177e4 | 171 | // string description of chosen config |
672c3fd9 | 172 | static char *conf_str[] = { |
1da177e4 LT |
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 | }; | |
597a107b | 178 | #endif |
1da177e4 | 179 | |
1da177e4 LT |
180 | typedef 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 | ||
d6c59c13 MB |
188 | #define LED_OFF 0 // no LED support |
189 | #define LED_SCHEME1 1 // LED standard scheme | |
190 | #define LED_SCHEME2 2 // not used yet... | |
1da177e4 LT |
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 | ||
d6c59c13 MB |
203 | #define LED_NORMAL 0 // LEDs are normal |
204 | #define LED_INVERTED 1 // LEDs are inverted | |
1da177e4 LT |
205 | |
206 | ||
d6c59c13 | 207 | #endif // __HFC_USB_H__ |