1
2
3
4
5
6
7
8
9
10
11#ifndef __DVB_USB_H__
12#define __DVB_USB_H__
13
14#include <linux/input.h>
15#include <linux/usb.h>
16#include <linux/firmware.h>
17#include <linux/mutex.h>
18#include <media/rc-core.h>
19
20#include <media/dvb_frontend.h>
21#include <media/dvb_demux.h>
22#include <media/dvb_net.h>
23#include <media/dmxdev.h>
24
25#include "dvb-pll.h"
26
27#include <media/dvb-usb-ids.h>
28
29
30#ifdef CONFIG_DVB_USB_DEBUG
31#define dprintk(var,level,args...) \
32 do { if ((var & level)) { printk(args); } } while (0)
33
34#define debug_dump(b,l,func) {\
35 int loop_; \
36 for (loop_ = 0; loop_ < l; loop_++) func("%02x ", b[loop_]); \
37 func("\n");\
38}
39#define DVB_USB_DEBUG_STATUS
40#else
41#define dprintk(args...)
42#define debug_dump(b,l,func)
43
44#define DVB_USB_DEBUG_STATUS " (debugging is not enabled)"
45
46#endif
47
48
49#ifndef DVB_USB_LOG_PREFIX
50 #define DVB_USB_LOG_PREFIX "dvb-usb (please define a log prefix)"
51#endif
52
53#undef err
54#define err(format, arg...) printk(KERN_ERR DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
55#undef info
56#define info(format, arg...) printk(KERN_INFO DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
57#undef warn
58#define warn(format, arg...) printk(KERN_WARNING DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
59
60
61
62
63
64
65
66
67
68
69
70
71struct dvb_usb_device_description {
72 const char *name;
73
74#define DVB_USB_ID_MAX_NUM 15
75 struct usb_device_id *cold_ids[DVB_USB_ID_MAX_NUM];
76 struct usb_device_id *warm_ids[DVB_USB_ID_MAX_NUM];
77};
78
79static inline u8 rc5_custom(struct rc_map_table *key)
80{
81 return (key->scancode >> 8) & 0xff;
82}
83
84static inline u8 rc5_data(struct rc_map_table *key)
85{
86 return key->scancode & 0xff;
87}
88
89static inline u16 rc5_scan(struct rc_map_table *key)
90{
91 return key->scancode & 0xffff;
92}
93
94struct dvb_usb_device;
95struct dvb_usb_adapter;
96struct usb_data_stream;
97
98
99
100
101
102
103struct usb_data_stream_properties {
104#define USB_BULK 1
105#define USB_ISOC 2
106 int type;
107 int count;
108 int endpoint;
109
110 union {
111 struct {
112 int buffersize;
113 } bulk;
114 struct {
115 int framesperurb;
116 int framesize;
117 int interval;
118 } isoc;
119 } u;
120};
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143struct dvb_usb_adapter_fe_properties {
144#define DVB_USB_ADAP_HAS_PID_FILTER 0x01
145#define DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF 0x02
146#define DVB_USB_ADAP_NEED_PID_FILTERING 0x04
147#define DVB_USB_ADAP_RECEIVES_204_BYTE_TS 0x08
148#define DVB_USB_ADAP_RECEIVES_RAW_PAYLOAD 0x10
149 int caps;
150 int pid_filter_count;
151
152 int (*streaming_ctrl) (struct dvb_usb_adapter *, int);
153 int (*pid_filter_ctrl) (struct dvb_usb_adapter *, int);
154 int (*pid_filter) (struct dvb_usb_adapter *, int, u16, int);
155
156 int (*frontend_attach) (struct dvb_usb_adapter *);
157 int (*tuner_attach) (struct dvb_usb_adapter *);
158
159 struct usb_data_stream_properties stream;
160
161 int size_of_priv;
162};
163
164#define MAX_NO_OF_FE_PER_ADAP 3
165struct dvb_usb_adapter_properties {
166 int size_of_priv;
167
168 int (*frontend_ctrl) (struct dvb_frontend *, int);
169
170 int num_frontends;
171 struct dvb_usb_adapter_fe_properties fe[MAX_NO_OF_FE_PER_ADAP];
172};
173
174
175
176
177
178
179
180
181
182struct dvb_rc_legacy {
183
184#define REMOTE_NO_KEY_PRESSED 0x00
185#define REMOTE_KEY_PRESSED 0x01
186#define REMOTE_KEY_REPEAT 0x02
187 struct rc_map_table *rc_map_table;
188 int rc_map_size;
189 int (*rc_query) (struct dvb_usb_device *, u32 *, int *);
190 int rc_interval;
191};
192
193
194
195
196
197
198
199
200
201
202
203
204struct dvb_rc {
205 char *rc_codes;
206 u64 protocol;
207 u64 allowed_protos;
208 enum rc_driver_type driver_type;
209 int (*change_protocol)(struct rc_dev *dev, u64 *rc_proto);
210 char *module_name;
211 int (*rc_query) (struct dvb_usb_device *d);
212 int rc_interval;
213 bool bulk_mode;
214 u32 scancode_mask;
215};
216
217
218
219
220
221
222
223enum dvb_usb_mode {
224 DVB_RC_LEGACY,
225 DVB_RC_CORE,
226};
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270#define MAX_NO_OF_ADAPTER_PER_DEVICE 2
271struct dvb_usb_device_properties {
272
273#define DVB_USB_IS_AN_I2C_ADAPTER 0x01
274 int caps;
275
276#define DEVICE_SPECIFIC 0
277#define CYPRESS_AN2135 1
278#define CYPRESS_AN2235 2
279#define CYPRESS_FX2 3
280 int usb_ctrl;
281 int (*download_firmware) (struct usb_device *, const struct firmware *);
282 const char *firmware;
283 int no_reconnect;
284
285 int size_of_priv;
286 int (*priv_init)(struct dvb_usb_device *);
287 void (*priv_destroy)(struct dvb_usb_device *);
288
289 int num_adapters;
290 struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
291
292 int (*power_ctrl) (struct dvb_usb_device *, int);
293 int (*read_mac_address) (struct dvb_usb_device *, u8 []);
294 int (*identify_state)(struct usb_device *udev,
295 const struct dvb_usb_device_properties *props,
296 const struct dvb_usb_device_description **desc,
297 int *cold);
298
299 struct {
300 enum dvb_usb_mode mode;
301 struct dvb_rc_legacy legacy;
302 struct dvb_rc core;
303 } rc;
304
305 struct i2c_algorithm *i2c_algo;
306
307 int generic_bulk_ctrl_endpoint;
308 int generic_bulk_ctrl_endpoint_response;
309
310 int num_device_descs;
311 struct dvb_usb_device_description devices[12];
312};
313
314
315
316
317
318
319
320
321
322
323
324#define MAX_NO_URBS_FOR_DATA_STREAM 10
325struct usb_data_stream {
326 struct usb_device *udev;
327 struct usb_data_stream_properties props;
328
329#define USB_STATE_INIT 0x00
330#define USB_STATE_URB_BUF 0x01
331 int state;
332
333 void (*complete) (struct usb_data_stream *, u8 *, size_t);
334
335 struct urb *urb_list[MAX_NO_URBS_FOR_DATA_STREAM];
336 int buf_num;
337 unsigned long buf_size;
338 u8 *buf_list[MAX_NO_URBS_FOR_DATA_STREAM];
339 dma_addr_t dma_addr[MAX_NO_URBS_FOR_DATA_STREAM];
340
341 int urbs_initialized;
342 int urbs_submitted;
343
344 void *user_priv;
345};
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372struct dvb_usb_fe_adapter {
373 struct dvb_frontend *fe;
374
375 int (*fe_init) (struct dvb_frontend *);
376 int (*fe_sleep) (struct dvb_frontend *);
377
378 struct usb_data_stream stream;
379
380 int pid_filtering;
381 int max_feed_count;
382
383 void *priv;
384};
385
386struct dvb_usb_adapter {
387 struct dvb_usb_device *dev;
388 struct dvb_usb_adapter_properties props;
389
390#define DVB_USB_ADAP_STATE_INIT 0x000
391#define DVB_USB_ADAP_STATE_DVB 0x001
392 int state;
393
394 u8 id;
395
396 int feedcount;
397
398
399 struct dvb_adapter dvb_adap;
400 struct dmxdev dmxdev;
401 struct dvb_demux demux;
402 struct dvb_net dvb_net;
403
404 struct dvb_usb_fe_adapter fe_adap[MAX_NO_OF_FE_PER_ADAP];
405 int active_fe;
406 int num_frontends_initialized;
407
408 void *priv;
409};
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439struct dvb_usb_device {
440 struct dvb_usb_device_properties props;
441 const struct dvb_usb_device_description *desc;
442
443 struct usb_device *udev;
444
445#define DVB_USB_STATE_INIT 0x000
446#define DVB_USB_STATE_I2C 0x001
447#define DVB_USB_STATE_DVB 0x002
448#define DVB_USB_STATE_REMOTE 0x004
449 int state;
450
451 int powered;
452
453
454 struct mutex data_mutex;
455 struct mutex usb_mutex;
456
457
458 struct mutex i2c_mutex;
459 struct i2c_adapter i2c_adap;
460
461 int num_adapters_initialized;
462 struct dvb_usb_adapter adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
463
464
465 struct rc_dev *rc_dev;
466 struct input_dev *input_dev;
467 char rc_phys[64];
468 struct delayed_work rc_query_work;
469 u32 last_event;
470 int last_state;
471
472 struct module *owner;
473
474 void *priv;
475};
476
477extern int dvb_usb_device_init(struct usb_interface *,
478 const struct dvb_usb_device_properties *,
479 struct module *, struct dvb_usb_device **,
480 short *adapter_nums);
481extern void dvb_usb_device_exit(struct usb_interface *);
482
483
484extern int __must_check
485dvb_usb_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16, int);
486extern int __must_check
487dvb_usb_generic_write(struct dvb_usb_device *, u8 *, u16);
488
489
490extern int dvb_usb_nec_rc_key_to_event(struct dvb_usb_device *, u8[], u32 *, int *);
491
492
493struct hexline {
494 u8 len;
495 u32 addr;
496 u8 type;
497 u8 data[255];
498 u8 chk;
499};
500extern int usb_cypress_load_firmware(struct usb_device *udev, const struct firmware *fw, int type);
501extern int dvb_usb_get_hexline(const struct firmware *fw, struct hexline *hx, int *pos);
502
503
504#endif
505