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