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 "dvb_frontend.h"
31#include "dvb_demux.h"
32#include "dvb_net.h"
33#include "dmxdev.h"
34#include "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#define MAX_NO_OF_ADAPTER_PER_DEVICE 2
231struct dvb_usb_device_properties {
232 const char *driver_name;
233 struct module *owner;
234 short *adapter_nr;
235
236 u8 bInterfaceNumber;
237 unsigned int size_of_priv;
238 u8 generic_bulk_ctrl_endpoint;
239 u8 generic_bulk_ctrl_endpoint_response;
240 unsigned int generic_bulk_ctrl_delay;
241
242#define WARM 0
243#define COLD 1
244 int (*identify_state) (struct dvb_usb_device *, const char **);
245 const char *firmware;
246#define RECONNECTS_USB 1
247 int (*download_firmware) (struct dvb_usb_device *,
248 const struct firmware *);
249
250 struct i2c_algorithm *i2c_algo;
251
252 unsigned int num_adapters;
253 int (*get_adapter_count) (struct dvb_usb_device *);
254 struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
255 int (*power_ctrl) (struct dvb_usb_device *, int);
256 int (*read_config) (struct dvb_usb_device *d);
257 int (*read_mac_address) (struct dvb_usb_adapter *, u8 []);
258 int (*frontend_attach) (struct dvb_usb_adapter *);
259 int (*frontend_detach)(struct dvb_usb_adapter *);
260 int (*tuner_attach) (struct dvb_usb_adapter *);
261 int (*tuner_detach)(struct dvb_usb_adapter *);
262 int (*frontend_ctrl) (struct dvb_frontend *, int);
263 int (*streaming_ctrl) (struct dvb_frontend *, int);
264 int (*init) (struct dvb_usb_device *);
265 void (*exit) (struct dvb_usb_device *);
266 int (*get_rc_config) (struct dvb_usb_device *, struct dvb_usb_rc *);
267#define DVB_USB_FE_TS_TYPE_188 0
268#define DVB_USB_FE_TS_TYPE_204 1
269#define DVB_USB_FE_TS_TYPE_RAW 2
270 int (*get_stream_config) (struct dvb_frontend *, u8 *,
271 struct usb_data_stream_properties *);
272};
273
274
275
276
277
278
279
280
281
282
283
284#define MAX_NO_URBS_FOR_DATA_STREAM 10
285struct usb_data_stream {
286 struct usb_device *udev;
287 struct usb_data_stream_properties props;
288
289#define USB_STATE_INIT 0x00
290#define USB_STATE_URB_BUF 0x01
291 u8 state;
292
293 void (*complete) (struct usb_data_stream *, u8 *, size_t);
294
295 struct urb *urb_list[MAX_NO_URBS_FOR_DATA_STREAM];
296 int buf_num;
297 unsigned long buf_size;
298 u8 *buf_list[MAX_NO_URBS_FOR_DATA_STREAM];
299 dma_addr_t dma_addr[MAX_NO_URBS_FOR_DATA_STREAM];
300
301 int urbs_initialized;
302 int urbs_submitted;
303
304 void *user_priv;
305};
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326struct dvb_usb_adapter {
327 const struct dvb_usb_adapter_properties *props;
328 struct usb_data_stream stream;
329 u8 id;
330 u8 ts_type;
331 bool suspend_resume_active;
332 bool pid_filtering;
333 u8 feed_count;
334 u8 max_feed_count;
335 s8 active_fe;
336#define ADAP_INIT 0
337#define ADAP_SLEEP 1
338#define ADAP_STREAMING 2
339 unsigned long state_bits;
340
341
342 struct dvb_adapter dvb_adap;
343 struct dmxdev dmxdev;
344 struct dvb_demux demux;
345 struct dvb_net dvb_net;
346
347 struct dvb_frontend *fe[MAX_NO_OF_FE_PER_ADAP];
348 int (*fe_init[MAX_NO_OF_FE_PER_ADAP]) (struct dvb_frontend *);
349 int (*fe_sleep[MAX_NO_OF_FE_PER_ADAP]) (struct dvb_frontend *);
350};
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370struct dvb_usb_device {
371 const struct dvb_usb_device_properties *props;
372 const char *name;
373 const char *rc_map;
374 bool rc_polling_active;
375 struct usb_interface *intf;
376 struct usb_device *udev;
377 struct dvb_usb_rc rc;
378 int powered;
379
380
381 struct mutex usb_mutex;
382
383
384 struct mutex i2c_mutex;
385 struct i2c_adapter i2c_adap;
386
387 struct dvb_usb_adapter adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
388
389
390 struct rc_dev *rc_dev;
391 char rc_phys[64];
392 struct delayed_work rc_query_work;
393
394 void *priv;
395};
396
397extern int dvb_usbv2_probe(struct usb_interface *,
398 const struct usb_device_id *);
399extern void dvb_usbv2_disconnect(struct usb_interface *);
400extern int dvb_usbv2_suspend(struct usb_interface *, pm_message_t);
401extern int dvb_usbv2_resume(struct usb_interface *);
402extern int dvb_usbv2_reset_resume(struct usb_interface *);
403
404
405extern int dvb_usbv2_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16);
406extern int dvb_usbv2_generic_write(struct dvb_usb_device *, u8 *, u16);
407
408extern int dvb_usbv2_generic_rw_locked(struct dvb_usb_device *,
409 u8 *, u16, u8 *, u16);
410extern int dvb_usbv2_generic_write_locked(struct dvb_usb_device *, u8 *, u16);
411
412#endif
413