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