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
140struct dvb_usb_adapter_fe_properties {
141#define DVB_USB_ADAP_HAS_PID_FILTER 0x01
142#define DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF 0x02
143#define DVB_USB_ADAP_NEED_PID_FILTERING 0x04
144#define DVB_USB_ADAP_RECEIVES_204_BYTE_TS 0x08
145#define DVB_USB_ADAP_RECEIVES_RAW_PAYLOAD 0x10
146 int caps;
147 int pid_filter_count;
148
149 int (*streaming_ctrl) (struct dvb_usb_adapter *, int);
150 int (*pid_filter_ctrl) (struct dvb_usb_adapter *, int);
151 int (*pid_filter) (struct dvb_usb_adapter *, int, u16, int);
152
153 int (*frontend_attach) (struct dvb_usb_adapter *);
154 int (*tuner_attach) (struct dvb_usb_adapter *);
155
156 struct usb_data_stream_properties stream;
157
158 int size_of_priv;
159};
160
161#define MAX_NO_OF_FE_PER_ADAP 3
162struct dvb_usb_adapter_properties {
163 int size_of_priv;
164
165 int (*frontend_ctrl) (struct dvb_frontend *, int);
166
167 int num_frontends;
168 struct dvb_usb_adapter_fe_properties fe[MAX_NO_OF_FE_PER_ADAP];
169};
170
171
172
173
174
175
176
177
178
179struct dvb_rc_legacy {
180
181#define REMOTE_NO_KEY_PRESSED 0x00
182#define REMOTE_KEY_PRESSED 0x01
183#define REMOTE_KEY_REPEAT 0x02
184 struct rc_map_table *rc_map_table;
185 int rc_map_size;
186 int (*rc_query) (struct dvb_usb_device *, u32 *, int *);
187 int rc_interval;
188};
189
190
191
192
193
194
195
196
197
198
199
200
201struct dvb_rc {
202 char *rc_codes;
203 u64 protocol;
204 u64 allowed_protos;
205 enum rc_driver_type driver_type;
206 int (*change_protocol)(struct rc_dev *dev, u64 *rc_proto);
207 char *module_name;
208 int (*rc_query) (struct dvb_usb_device *d);
209 int rc_interval;
210 bool bulk_mode;
211 u32 scancode_mask;
212};
213
214
215
216
217
218
219
220enum dvb_usb_mode {
221 DVB_RC_LEGACY,
222 DVB_RC_CORE,
223};
224
225
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#define MAX_NO_OF_ADAPTER_PER_DEVICE 2
263struct dvb_usb_device_properties {
264
265#define DVB_USB_IS_AN_I2C_ADAPTER 0x01
266 int caps;
267
268#define DEVICE_SPECIFIC 0
269#define CYPRESS_AN2135 1
270#define CYPRESS_AN2235 2
271#define CYPRESS_FX2 3
272 int usb_ctrl;
273 int (*download_firmware) (struct usb_device *, const struct firmware *);
274 const char *firmware;
275 int no_reconnect;
276
277 int size_of_priv;
278
279 int num_adapters;
280 struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
281
282 int (*power_ctrl) (struct dvb_usb_device *, int);
283 int (*read_mac_address) (struct dvb_usb_device *, u8 []);
284 int (*identify_state) (struct usb_device *, struct dvb_usb_device_properties *,
285 struct dvb_usb_device_description **, int *);
286
287 struct {
288 enum dvb_usb_mode mode;
289 struct dvb_rc_legacy legacy;
290 struct dvb_rc core;
291 } rc;
292
293 struct i2c_algorithm *i2c_algo;
294
295 int generic_bulk_ctrl_endpoint;
296 int generic_bulk_ctrl_endpoint_response;
297
298 int num_device_descs;
299 struct dvb_usb_device_description devices[12];
300};
301
302
303
304
305
306
307
308
309
310
311
312#define MAX_NO_URBS_FOR_DATA_STREAM 10
313struct usb_data_stream {
314 struct usb_device *udev;
315 struct usb_data_stream_properties props;
316
317#define USB_STATE_INIT 0x00
318#define USB_STATE_URB_BUF 0x01
319 int state;
320
321 void (*complete) (struct usb_data_stream *, u8 *, size_t);
322
323 struct urb *urb_list[MAX_NO_URBS_FOR_DATA_STREAM];
324 int buf_num;
325 unsigned long buf_size;
326 u8 *buf_list[MAX_NO_URBS_FOR_DATA_STREAM];
327 dma_addr_t dma_addr[MAX_NO_URBS_FOR_DATA_STREAM];
328
329 int urbs_initialized;
330 int urbs_submitted;
331
332 void *user_priv;
333};
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360struct dvb_usb_fe_adapter {
361 struct dvb_frontend *fe;
362
363 int (*fe_init) (struct dvb_frontend *);
364 int (*fe_sleep) (struct dvb_frontend *);
365
366 struct usb_data_stream stream;
367
368 int pid_filtering;
369 int max_feed_count;
370
371 void *priv;
372};
373
374struct dvb_usb_adapter {
375 struct dvb_usb_device *dev;
376 struct dvb_usb_adapter_properties props;
377
378#define DVB_USB_ADAP_STATE_INIT 0x000
379#define DVB_USB_ADAP_STATE_DVB 0x001
380 int state;
381
382 u8 id;
383
384 int feedcount;
385
386
387 struct dvb_adapter dvb_adap;
388 struct dmxdev dmxdev;
389 struct dvb_demux demux;
390 struct dvb_net dvb_net;
391
392 struct dvb_usb_fe_adapter fe_adap[MAX_NO_OF_FE_PER_ADAP];
393 int active_fe;
394 int num_frontends_initialized;
395
396 void *priv;
397};
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427struct dvb_usb_device {
428 struct dvb_usb_device_properties props;
429 struct dvb_usb_device_description *desc;
430
431 struct usb_device *udev;
432
433#define DVB_USB_STATE_INIT 0x000
434#define DVB_USB_STATE_I2C 0x001
435#define DVB_USB_STATE_DVB 0x002
436#define DVB_USB_STATE_REMOTE 0x004
437 int state;
438
439 int powered;
440
441
442 struct mutex data_mutex;
443 struct mutex usb_mutex;
444
445
446 struct mutex i2c_mutex;
447 struct i2c_adapter i2c_adap;
448
449 int num_adapters_initialized;
450 struct dvb_usb_adapter adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
451
452
453 struct rc_dev *rc_dev;
454 struct input_dev *input_dev;
455 char rc_phys[64];
456 struct delayed_work rc_query_work;
457 u32 last_event;
458 int last_state;
459
460 struct module *owner;
461
462 void *priv;
463};
464
465extern int dvb_usb_device_init(struct usb_interface *,
466 struct dvb_usb_device_properties *,
467 struct module *, struct dvb_usb_device **,
468 short *adapter_nums);
469extern void dvb_usb_device_exit(struct usb_interface *);
470
471
472extern int __must_check
473dvb_usb_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16, int);
474extern int __must_check
475dvb_usb_generic_write(struct dvb_usb_device *, u8 *, u16);
476
477
478extern int dvb_usb_nec_rc_key_to_event(struct dvb_usb_device *, u8[], u32 *, int *);
479
480
481struct hexline {
482 u8 len;
483 u32 addr;
484 u8 type;
485 u8 data[255];
486 u8 chk;
487};
488extern int usb_cypress_load_firmware(struct usb_device *udev, const struct firmware *fw, int type);
489extern int dvb_usb_get_hexline(const struct firmware *fw, struct hexline *hx, int *pos);
490
491
492#endif
493