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