1
2
3
4
5
6
7
8#ifndef __HFC_USB_H__
9#define __HFC_USB_H__
10
11#define DRIVER_AUTHOR "Peter Sprenger (sprenger@moving-byters.de)"
12#define DRIVER_DESC "HFC-S USB based HiSAX ISDN driver"
13
14
15#define HFC_CTRL_TIMEOUT 20
16#define HFC_TIMER_T3 8000
17#define HFC_TIMER_T4 500
18
19#define HFCUSB_L1_STATECHANGE 0
20#define HFCUSB_L1_DRX 1
21#define HFCUSB_L1_ERX 2
22#define HFCUSB_L1_DTX 4
23
24#define MAX_BCH_SIZE 2048
25
26#define HFCUSB_RX_THRESHOLD 64
27#define HFCUSB_TX_THRESHOLD 64
28
29#define HFCUSB_CHIP_ID 0x16
30#define HFCUSB_CIRM 0x00
31#define HFCUSB_USB_SIZE 0x07
32#define HFCUSB_USB_SIZE_I 0x06
33#define HFCUSB_F_CROSS 0x0b
34#define HFCUSB_CLKDEL 0x37
35#define HFCUSB_CON_HDLC 0xfa
36#define HFCUSB_HDLC_PAR 0xfb
37#define HFCUSB_SCTRL 0x31
38#define HFCUSB_SCTRL_E 0x32
39#define HFCUSB_SCTRL_R 0x33
40#define HFCUSB_F_THRES 0x0c
41#define HFCUSB_FIFO 0x0f
42#define HFCUSB_F_USAGE 0x1a
43#define HFCUSB_MST_MODE0 0x14
44#define HFCUSB_MST_MODE1 0x15
45#define HFCUSB_P_DATA 0x1f
46#define HFCUSB_INC_RES_F 0x0e
47#define HFCUSB_STATES 0x30
48
49#define HFCUSB_CHIPID 0x40
50
51
52
53#define HFCUSB_NUM_FIFOS 8
54#define HFCUSB_B1_TX 0
55#define HFCUSB_B1_RX 1
56#define HFCUSB_B2_TX 2
57#define HFCUSB_B2_RX 3
58#define HFCUSB_D_TX 4
59#define HFCUSB_D_RX 5
60#define HFCUSB_PCM_TX 6
61#define HFCUSB_PCM_RX 7
62
63
64
65
66
67#define USB_INT 0
68#define USB_BULK 1
69#define USB_ISOC 2
70
71#define ISOC_PACKETS_D 8
72#define ISOC_PACKETS_B 8
73#define ISO_BUFFER_SIZE 128
74
75
76#define SINK_MAX 68
77#define SINK_MIN 48
78#define SINK_DMIN 12
79#define SINK_DMAX 18
80#define BITLINE_INF (-64 * 8)
81
82
83#define write_usb(a, b, c) usb_control_msg((a)->dev, (a)->ctrl_out_pipe, 0, 0x40, (c), (b), NULL, 0, HFC_CTRL_TIMEOUT)
84#define read_usb(a, b, c) usb_control_msg((a)->dev, (a)->ctrl_in_pipe, 1, 0xC0, 0, (b), (c), 1, HFC_CTRL_TIMEOUT)
85#define HFC_CTRL_BUFSIZE 32
86
87
88typedef struct {
89 __u8 hfc_reg;
90 __u8 reg_val;
91 int action;
92} ctrl_buft;
93
94
95#define HFCUSB_DBG_INIT 0x0001
96#define HFCUSB_DBG_STATES 0x0002
97#define HFCUSB_DBG_DCHANNEL 0x0080
98#define HFCUSB_DBG_FIFO_ERR 0x4000
99#define HFCUSB_DBG_VERBOSE_USB 0x8000
100
101
102
103
104
105struct hfcusb_symbolic_list {
106 const int num;
107 const char *name;
108};
109
110static struct hfcusb_symbolic_list urb_errlist[] = {
111 {-ENOMEM, "No memory for allocation of internal structures"},
112 {-ENOSPC, "The host controller's bandwidth is already consumed"},
113 {-ENOENT, "URB was canceled by unlink_urb"},
114 {-EXDEV, "ISO transfer only partially completed"},
115 {-EAGAIN, "Too match scheduled for the future"},
116 {-ENXIO, "URB already queued"},
117 {-EFBIG, "Too much ISO frames requested"},
118 {-ENOSR, "Buffer error (overrun)"},
119 {-EPIPE, "Specified endpoint is stalled (device not responding)"},
120 {-EOVERFLOW, "Babble (bad cable?)"},
121 {-EPROTO, "Bit-stuff error (bad cable?)"},
122 {-EILSEQ, "CRC/Timeout"},
123 {-ETIMEDOUT, "NAK (device does not respond)"},
124 {-ESHUTDOWN, "Device unplugged"},
125 {-1, NULL}
126};
127
128
129
130
131
132
133
134
135#define CNF_4INT3ISO 1
136#define CNF_3INT3ISO 2
137#define CNF_4ISO3ISO 3
138#define CNF_3ISO3ISO 4
139
140#define EP_NUL 1
141#define EP_NOP 2
142#define EP_ISO 3
143#define EP_BLK 4
144#define EP_INT 5
145
146
147
148
149
150
151
152
153static int validconf[][19] = {
154
155 {EP_NUL, EP_INT, EP_NUL, EP_INT, EP_NUL, EP_INT, EP_NOP, EP_INT,
156 EP_ISO, EP_NUL, EP_ISO, EP_NUL, EP_ISO, EP_NUL, EP_NUL, EP_NUL,
157 CNF_4INT3ISO, 2, 1},
158 {EP_NUL, EP_INT, EP_NUL, EP_INT, EP_NUL, EP_INT, EP_NUL, EP_NUL,
159 EP_ISO, EP_NUL, EP_ISO, EP_NUL, EP_ISO, EP_NUL, EP_NUL, EP_NUL,
160 CNF_3INT3ISO, 2, 0},
161
162 {EP_NUL, EP_NUL, EP_NUL, EP_NUL, EP_NUL, EP_NUL, EP_NUL, EP_NUL,
163 EP_ISO, EP_ISO, EP_ISO, EP_ISO, EP_ISO, EP_ISO, EP_NOP, EP_ISO,
164 CNF_4ISO3ISO, 2, 1},
165 {EP_NUL, EP_NUL, EP_NUL, EP_NUL, EP_NUL, EP_NUL, EP_NUL, EP_NUL,
166 EP_ISO, EP_ISO, EP_ISO, EP_ISO, EP_ISO, EP_ISO, EP_NUL, EP_NUL,
167 CNF_3ISO3ISO, 2, 0},
168 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
169};
170
171#ifdef CONFIG_HISAX_DEBUG
172
173static char *conf_str[] = {
174 "4 Interrupt IN + 3 Isochron OUT",
175 "3 Interrupt IN + 3 Isochron OUT",
176 "4 Isochron IN + 3 Isochron OUT",
177 "3 Isochron IN + 3 Isochron OUT"
178};
179#endif
180
181typedef struct {
182 int vendor;
183 int prod_id;
184 char *vend_name;
185 __u8 led_scheme;
186 signed short led_bits[8];
187} vendor_data;
188
189#define LED_OFF 0
190#define LED_SCHEME1 1
191#define LED_SCHEME2 2
192
193#define LED_POWER_ON 1
194#define LED_POWER_OFF 2
195#define LED_S0_ON 3
196#define LED_S0_OFF 4
197#define LED_B1_ON 5
198#define LED_B1_OFF 6
199#define LED_B1_DATA 7
200#define LED_B2_ON 8
201#define LED_B2_OFF 9
202#define LED_B2_DATA 10
203
204#define LED_NORMAL 0
205#define LED_INVERTED 1
206
207
208#endif
209