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