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
109struct dvb_usb_driver_info {
110 const char *name;
111 const char *rc_map;
112 const struct dvb_usb_device_properties *props;
113};
114
115
116
117
118
119
120
121
122
123
124
125
126struct dvb_usb_rc {
127 const char *map_name;
128 u64 allowed_protos;
129 int (*change_protocol)(struct rc_dev *dev, u64 *rc_proto);
130 int (*query) (struct dvb_usb_device *d);
131 unsigned int interval;
132 enum rc_driver_type driver_type;
133 bool bulk_mode;
134 int timeout;
135};
136
137
138
139
140
141
142
143struct usb_data_stream_properties {
144#define USB_BULK 1
145#define USB_ISOC 2
146 u8 type;
147 u8 count;
148 u8 endpoint;
149
150 union {
151 struct {
152 unsigned int buffersize;
153 } bulk;
154 struct {
155 int framesperurb;
156 int framesize;
157 int interval;
158 } isoc;
159 } u;
160};
161
162
163
164
165
166
167
168
169
170#define MAX_NO_OF_FE_PER_ADAP 3
171struct dvb_usb_adapter_properties {
172#define DVB_USB_ADAP_HAS_PID_FILTER 0x01
173#define DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF 0x02
174#define DVB_USB_ADAP_NEED_PID_FILTERING 0x04
175 u8 caps;
176
177 u8 pid_filter_count;
178 int (*pid_filter_ctrl) (struct dvb_usb_adapter *, int);
179 int (*pid_filter) (struct dvb_usb_adapter *, int, u16, int);
180
181 struct usb_data_stream_properties stream;
182};
183
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#define MAX_NO_OF_ADAPTER_PER_DEVICE 2
222struct dvb_usb_device_properties {
223 const char *driver_name;
224 struct module *owner;
225 short *adapter_nr;
226
227 u8 bInterfaceNumber;
228 unsigned int size_of_priv;
229 u8 generic_bulk_ctrl_endpoint;
230 u8 generic_bulk_ctrl_endpoint_response;
231 unsigned int generic_bulk_ctrl_delay;
232
233 int (*probe)(struct dvb_usb_device *);
234 void (*disconnect)(struct dvb_usb_device *);
235#define WARM 0
236#define COLD 1
237 int (*identify_state) (struct dvb_usb_device *, const char **);
238 const char *firmware;
239#define RECONNECTS_USB 1
240 int (*download_firmware) (struct dvb_usb_device *,
241 const struct firmware *);
242
243 struct i2c_algorithm *i2c_algo;
244
245 unsigned int num_adapters;
246 int (*get_adapter_count) (struct dvb_usb_device *);
247 struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
248 int (*power_ctrl) (struct dvb_usb_device *, int);
249 int (*read_config) (struct dvb_usb_device *d);
250 int (*read_mac_address) (struct dvb_usb_adapter *, u8 []);
251 int (*frontend_attach) (struct dvb_usb_adapter *);
252 int (*frontend_detach)(struct dvb_usb_adapter *);
253 int (*tuner_attach) (struct dvb_usb_adapter *);
254 int (*tuner_detach)(struct dvb_usb_adapter *);
255 int (*frontend_ctrl) (struct dvb_frontend *, int);
256 int (*streaming_ctrl) (struct dvb_frontend *, int);
257 int (*init) (struct dvb_usb_device *);
258 void (*exit) (struct dvb_usb_device *);
259 int (*get_rc_config) (struct dvb_usb_device *, struct dvb_usb_rc *);
260#define DVB_USB_FE_TS_TYPE_188 0
261#define DVB_USB_FE_TS_TYPE_204 1
262#define DVB_USB_FE_TS_TYPE_RAW 2
263 int (*get_stream_config) (struct dvb_frontend *, u8 *,
264 struct usb_data_stream_properties *);
265};
266
267
268
269
270
271
272
273
274
275
276
277#define MAX_NO_URBS_FOR_DATA_STREAM 10
278struct usb_data_stream {
279 struct usb_device *udev;
280 struct usb_data_stream_properties props;
281
282#define USB_STATE_INIT 0x00
283#define USB_STATE_URB_BUF 0x01
284 u8 state;
285
286 void (*complete) (struct usb_data_stream *, u8 *, size_t);
287
288 struct urb *urb_list[MAX_NO_URBS_FOR_DATA_STREAM];
289 int buf_num;
290 unsigned long buf_size;
291 u8 *buf_list[MAX_NO_URBS_FOR_DATA_STREAM];
292 dma_addr_t dma_addr[MAX_NO_URBS_FOR_DATA_STREAM];
293
294 int urbs_initialized;
295 int urbs_submitted;
296
297 void *user_priv;
298};
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319struct dvb_usb_adapter {
320 const struct dvb_usb_adapter_properties *props;
321 struct usb_data_stream stream;
322 u8 id;
323 u8 ts_type;
324 bool suspend_resume_active;
325 bool pid_filtering;
326 u8 feed_count;
327 u8 max_feed_count;
328 s8 active_fe;
329#define ADAP_INIT 0
330#define ADAP_SLEEP 1
331#define ADAP_STREAMING 2
332 unsigned long state_bits;
333
334
335 struct dvb_adapter dvb_adap;
336 struct dmxdev dmxdev;
337 struct dvb_demux demux;
338 struct dvb_net dvb_net;
339
340 struct dvb_frontend *fe[MAX_NO_OF_FE_PER_ADAP];
341 int (*fe_init[MAX_NO_OF_FE_PER_ADAP]) (struct dvb_frontend *);
342 int (*fe_sleep[MAX_NO_OF_FE_PER_ADAP]) (struct dvb_frontend *);
343};
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363struct dvb_usb_device {
364 const struct dvb_usb_device_properties *props;
365 const char *name;
366 const char *rc_map;
367 bool rc_polling_active;
368 struct usb_interface *intf;
369 struct usb_device *udev;
370 struct dvb_usb_rc rc;
371 int powered;
372
373
374 struct mutex usb_mutex;
375
376
377 struct mutex i2c_mutex;
378 struct i2c_adapter i2c_adap;
379
380 struct dvb_usb_adapter adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
381
382
383 struct rc_dev *rc_dev;
384 char rc_phys[64];
385 struct delayed_work rc_query_work;
386
387 void *priv;
388};
389
390extern int dvb_usbv2_probe(struct usb_interface *,
391 const struct usb_device_id *);
392extern void dvb_usbv2_disconnect(struct usb_interface *);
393extern int dvb_usbv2_suspend(struct usb_interface *, pm_message_t);
394extern int dvb_usbv2_resume(struct usb_interface *);
395extern int dvb_usbv2_reset_resume(struct usb_interface *);
396
397
398extern int dvb_usbv2_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16);
399extern int dvb_usbv2_generic_write(struct dvb_usb_device *, u8 *, u16);
400
401extern int dvb_usbv2_generic_rw_locked(struct dvb_usb_device *,
402 u8 *, u16, u8 *, u16);
403extern int dvb_usbv2_generic_write_locked(struct dvb_usb_device *, u8 *, u16);
404
405#endif
406