1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22#ifndef DVB_USB_H
23#define DVB_USB_H
24
25#include <linux/usb/input.h>
26#include <linux/firmware.h>
27#include <media/rc-core.h>
28
29#include "dvb_frontend.h"
30#include "dvb_demux.h"
31#include "dvb_net.h"
32#include "dmxdev.h"
33#include "dvb-usb-ids.h"
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58#define adap_to_d(adap) (container_of(adap, struct dvb_usb_device, \
59 adapter[adap->id]))
60#define adap_to_priv(adap) (adap_to_d(adap)->priv)
61#define fe_to_adap(fe) ((struct dvb_usb_adapter *) ((fe)->dvb->priv))
62#define fe_to_d(fe) (adap_to_d(fe_to_adap(fe)))
63#define fe_to_priv(fe) (fe_to_d(fe)->priv)
64#define d_to_priv(d) (d->priv)
65
66#define dvb_usb_dbg_usb_control_msg(udev, r, t, v, i, b, l) { \
67 char *direction; \
68 if (t == (USB_TYPE_VENDOR | USB_DIR_OUT)) \
69 direction = ">>>"; \
70 else \
71 direction = "<<<"; \
72 dev_dbg(&udev->dev, "%s: %02x %02x %02x %02x %02x %02x %02x %02x " \
73 "%s %*ph\n", __func__, t, r, v & 0xff, v >> 8, \
74 i & 0xff, i >> 8, l & 0xff, l >> 8, direction, l, b); \
75}
76
77#define DVB_USB_STREAM_BULK(endpoint_, count_, size_) { \
78 .type = USB_BULK, \
79 .count = count_, \
80 .endpoint = endpoint_, \
81 .u = { \
82 .bulk = { \
83 .buffersize = size_, \
84 } \
85 } \
86}
87
88#define DVB_USB_STREAM_ISOC(endpoint_, count_, frames_, size_, interval_) { \
89 .type = USB_ISOC, \
90 .count = count_, \
91 .endpoint = endpoint_, \
92 .u = { \
93 .isoc = { \
94 .framesperurb = frames_, \
95 .framesize = size_,\
96 .interval = interval_, \
97 } \
98 } \
99}
100
101#define DVB_USB_DEVICE(vend, prod, props_, name_, rc) \
102 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, \
103 .idVendor = (vend), \
104 .idProduct = (prod), \
105 .driver_info = (kernel_ulong_t) &((const struct dvb_usb_driver_info) { \
106 .props = (props_), \
107 .name = (name_), \
108 .rc_map = (rc), \
109 })
110
111struct dvb_usb_device;
112struct dvb_usb_adapter;
113
114
115
116
117
118
119
120
121struct dvb_usb_driver_info {
122 const char *name;
123 const char *rc_map;
124 const struct dvb_usb_device_properties *props;
125};
126
127
128
129
130
131
132
133
134
135
136
137struct dvb_usb_rc {
138 const char *map_name;
139 u64 allowed_protos;
140 int (*change_protocol)(struct rc_dev *dev, u64 *rc_type);
141 int (*query) (struct dvb_usb_device *d);
142 unsigned int interval;
143 enum rc_driver_type driver_type;
144 bool bulk_mode;
145};
146
147
148
149
150
151
152
153struct usb_data_stream_properties {
154#define USB_BULK 1
155#define USB_ISOC 2
156 u8 type;
157 u8 count;
158 u8 endpoint;
159
160 union {
161 struct {
162 unsigned int buffersize;
163 } bulk;
164 struct {
165 int framesperurb;
166 int framesize;
167 int interval;
168 } isoc;
169 } u;
170};
171
172
173
174
175
176
177
178
179
180#define MAX_NO_OF_FE_PER_ADAP 3
181struct dvb_usb_adapter_properties {
182#define DVB_USB_ADAP_HAS_PID_FILTER 0x01
183#define DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF 0x02
184#define DVB_USB_ADAP_NEED_PID_FILTERING 0x04
185 u8 caps;
186
187 u8 pid_filter_count;
188 int (*pid_filter_ctrl) (struct dvb_usb_adapter *, int);
189 int (*pid_filter) (struct dvb_usb_adapter *, int, u16, int);
190
191 struct usb_data_stream_properties stream;
192};
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228#define MAX_NO_OF_ADAPTER_PER_DEVICE 2
229struct dvb_usb_device_properties {
230 const char *driver_name;
231 struct module *owner;
232 short *adapter_nr;
233
234 u8 bInterfaceNumber;
235 unsigned int size_of_priv;
236 u8 generic_bulk_ctrl_endpoint;
237 u8 generic_bulk_ctrl_endpoint_response;
238 unsigned int generic_bulk_ctrl_delay;
239
240#define WARM 0
241#define COLD 1
242 int (*identify_state) (struct dvb_usb_device *, const char **);
243 const char *firmware;
244#define RECONNECTS_USB 1
245 int (*download_firmware) (struct dvb_usb_device *,
246 const struct firmware *);
247
248 struct i2c_algorithm *i2c_algo;
249
250 unsigned int num_adapters;
251 int (*get_adapter_count) (struct dvb_usb_device *);
252 struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
253 int (*power_ctrl) (struct dvb_usb_device *, int);
254 int (*read_config) (struct dvb_usb_device *d);
255 int (*read_mac_address) (struct dvb_usb_adapter *, u8 []);
256 int (*frontend_attach) (struct dvb_usb_adapter *);
257 int (*tuner_attach) (struct dvb_usb_adapter *);
258 int (*frontend_ctrl) (struct dvb_frontend *, int);
259 int (*streaming_ctrl) (struct dvb_frontend *, int);
260 int (*init) (struct dvb_usb_device *);
261 void (*exit) (struct dvb_usb_device *);
262 int (*get_rc_config) (struct dvb_usb_device *, struct dvb_usb_rc *);
263#define DVB_USB_FE_TS_TYPE_188 0
264#define DVB_USB_FE_TS_TYPE_204 1
265#define DVB_USB_FE_TS_TYPE_RAW 2
266 int (*get_stream_config) (struct dvb_frontend *, u8 *,
267 struct usb_data_stream_properties *);
268};
269
270
271
272
273
274
275
276
277
278
279
280#define MAX_NO_URBS_FOR_DATA_STREAM 10
281struct usb_data_stream {
282 struct usb_device *udev;
283 struct usb_data_stream_properties props;
284
285#define USB_STATE_INIT 0x00
286#define USB_STATE_URB_BUF 0x01
287 u8 state;
288
289 void (*complete) (struct usb_data_stream *, u8 *, size_t);
290
291 struct urb *urb_list[MAX_NO_URBS_FOR_DATA_STREAM];
292 int buf_num;
293 unsigned long buf_size;
294 u8 *buf_list[MAX_NO_URBS_FOR_DATA_STREAM];
295 dma_addr_t dma_addr[MAX_NO_URBS_FOR_DATA_STREAM];
296
297 int urbs_initialized;
298 int urbs_submitted;
299
300 void *user_priv;
301};
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322struct dvb_usb_adapter {
323 const struct dvb_usb_adapter_properties *props;
324 struct usb_data_stream stream;
325 u8 id;
326 u8 ts_type;
327 bool suspend_resume_active;
328 bool pid_filtering;
329 u8 feed_count;
330 u8 max_feed_count;
331 s8 active_fe;
332#define ADAP_INIT 0
333#define ADAP_SLEEP 1
334#define ADAP_STREAMING 2
335 unsigned long state_bits;
336
337
338 struct dvb_adapter dvb_adap;
339 struct dmxdev dmxdev;
340 struct dvb_demux demux;
341 struct dvb_net dvb_net;
342
343 struct dvb_frontend *fe[MAX_NO_OF_FE_PER_ADAP];
344 int (*fe_init[MAX_NO_OF_FE_PER_ADAP]) (struct dvb_frontend *);
345 int (*fe_sleep[MAX_NO_OF_FE_PER_ADAP]) (struct dvb_frontend *);
346};
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367struct dvb_usb_device {
368 const struct dvb_usb_device_properties *props;
369 const char *name;
370 const char *rc_map;
371 bool rc_polling_active;
372 struct usb_device *udev;
373 struct usb_interface *intf;
374 struct dvb_usb_rc rc;
375 struct work_struct probe_work;
376 pid_t work_pid;
377 int powered;
378
379
380 struct mutex usb_mutex;
381
382
383 struct mutex i2c_mutex;
384 struct i2c_adapter i2c_adap;
385
386 struct dvb_usb_adapter adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
387
388
389 struct rc_dev *rc_dev;
390 char rc_phys[64];
391 struct delayed_work rc_query_work;
392
393 void *priv;
394};
395
396extern int dvb_usbv2_probe(struct usb_interface *,
397 const struct usb_device_id *);
398extern void dvb_usbv2_disconnect(struct usb_interface *);
399extern int dvb_usbv2_suspend(struct usb_interface *, pm_message_t);
400extern int dvb_usbv2_resume(struct usb_interface *);
401extern int dvb_usbv2_reset_resume(struct usb_interface *);
402
403
404extern int dvb_usbv2_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16);
405extern int dvb_usbv2_generic_write(struct dvb_usb_device *, u8 *, u16);
406
407extern int dvb_usbv2_generic_rw_locked(struct dvb_usb_device *,
408 u8 *, u16, u8 *, u16);
409extern int dvb_usbv2_generic_write_locked(struct dvb_usb_device *, u8 *, u16);
410
411#endif
412