0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef __DVB_USB_H__
0012 #define __DVB_USB_H__
0013
0014 #include <linux/input.h>
0015 #include <linux/usb.h>
0016 #include <linux/firmware.h>
0017 #include <linux/mutex.h>
0018 #include <media/rc-core.h>
0019
0020 #include <media/dvb_frontend.h>
0021 #include <media/dvb_demux.h>
0022 #include <media/dvb_net.h>
0023 #include <media/dmxdev.h>
0024
0025 #include "dvb-pll.h"
0026
0027 #include <media/dvb-usb-ids.h>
0028
0029
0030 #ifdef CONFIG_DVB_USB_DEBUG
0031 #define dprintk(var, level, args...) \
0032 do { if (((var) & (level))) { printk(args); } } while (0)
0033
0034 #define debug_dump(b, l, func) {\
0035 int loop_; \
0036 for (loop_ = 0; loop_ < (l); loop_++) \
0037 func("%02x ", b[loop_]); \
0038 func("\n");\
0039 }
0040 #define DVB_USB_DEBUG_STATUS
0041 #else
0042 #define dprintk(var, level, args...) no_printk(args)
0043 #define debug_dump(b, l, func) do { } while (0)
0044
0045 #define DVB_USB_DEBUG_STATUS " (debugging is not enabled)"
0046
0047 #endif
0048
0049
0050 #ifndef DVB_USB_LOG_PREFIX
0051 #define DVB_USB_LOG_PREFIX "dvb-usb (please define a log prefix)"
0052 #endif
0053
0054 #undef err
0055 #define err(format, arg...) printk(KERN_ERR DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
0056 #undef info
0057 #define info(format, arg...) printk(KERN_INFO DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
0058 #undef warn
0059 #define warn(format, arg...) printk(KERN_WARNING DVB_USB_LOG_PREFIX ": " format "\n" , ## arg)
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072 struct dvb_usb_device_description {
0073 const char *name;
0074
0075 #define DVB_USB_ID_MAX_NUM 15
0076 struct usb_device_id *cold_ids[DVB_USB_ID_MAX_NUM];
0077 struct usb_device_id *warm_ids[DVB_USB_ID_MAX_NUM];
0078 };
0079
0080 static inline u8 rc5_custom(struct rc_map_table *key)
0081 {
0082 return (key->scancode >> 8) & 0xff;
0083 }
0084
0085 static inline u8 rc5_data(struct rc_map_table *key)
0086 {
0087 return key->scancode & 0xff;
0088 }
0089
0090 static inline u16 rc5_scan(struct rc_map_table *key)
0091 {
0092 return key->scancode & 0xffff;
0093 }
0094
0095 struct dvb_usb_device;
0096 struct dvb_usb_adapter;
0097 struct usb_data_stream;
0098
0099
0100
0101
0102
0103
0104 struct usb_data_stream_properties {
0105 #define USB_BULK 1
0106 #define USB_ISOC 2
0107 int type;
0108 int count;
0109 int endpoint;
0110
0111 union {
0112 struct {
0113 int buffersize;
0114 } bulk;
0115 struct {
0116 int framesperurb;
0117 int framesize;
0118 int interval;
0119 } isoc;
0120 } u;
0121 };
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145 struct dvb_usb_adapter_fe_properties {
0146 #define DVB_USB_ADAP_HAS_PID_FILTER 0x01
0147 #define DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF 0x02
0148 #define DVB_USB_ADAP_NEED_PID_FILTERING 0x04
0149 #define DVB_USB_ADAP_RECEIVES_204_BYTE_TS 0x08
0150 #define DVB_USB_ADAP_RECEIVES_RAW_PAYLOAD 0x10
0151 int caps;
0152 int pid_filter_count;
0153
0154 int (*streaming_ctrl) (struct dvb_usb_adapter *, int);
0155 int (*pid_filter_ctrl) (struct dvb_usb_adapter *, int);
0156 int (*pid_filter) (struct dvb_usb_adapter *, int, u16, int);
0157
0158 int (*frontend_attach) (struct dvb_usb_adapter *);
0159 int (*tuner_attach) (struct dvb_usb_adapter *);
0160
0161 struct usb_data_stream_properties stream;
0162
0163 int size_of_priv;
0164 };
0165
0166 #define MAX_NO_OF_FE_PER_ADAP 3
0167 struct dvb_usb_adapter_properties {
0168 int size_of_priv;
0169
0170 int (*frontend_ctrl) (struct dvb_frontend *, int);
0171
0172 int num_frontends;
0173 struct dvb_usb_adapter_fe_properties fe[MAX_NO_OF_FE_PER_ADAP];
0174 };
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184 struct dvb_rc_legacy {
0185
0186 #define REMOTE_NO_KEY_PRESSED 0x00
0187 #define REMOTE_KEY_PRESSED 0x01
0188 #define REMOTE_KEY_REPEAT 0x02
0189 struct rc_map_table *rc_map_table;
0190 int rc_map_size;
0191 int (*rc_query) (struct dvb_usb_device *, u32 *, int *);
0192 int rc_interval;
0193 };
0194
0195
0196
0197
0198
0199
0200
0201
0202
0203
0204
0205
0206
0207
0208 struct dvb_rc {
0209 char *rc_codes;
0210 u64 protocol;
0211 u64 allowed_protos;
0212 enum rc_driver_type driver_type;
0213 int (*change_protocol)(struct rc_dev *dev, u64 *rc_proto);
0214 char *module_name;
0215 int (*rc_query) (struct dvb_usb_device *d);
0216 int rc_interval;
0217 bool bulk_mode;
0218 u32 scancode_mask;
0219 };
0220
0221
0222
0223
0224
0225
0226
0227
0228
0229
0230 enum dvb_usb_mode {
0231 DVB_RC_LEGACY,
0232 DVB_RC_CORE,
0233 };
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271
0272
0273
0274
0275
0276
0277
0278
0279
0280 struct dvb_usb_device_properties {
0281 #define MAX_NO_OF_ADAPTER_PER_DEVICE 2
0282 #define DVB_USB_IS_AN_I2C_ADAPTER 0x01
0283 int caps;
0284
0285 #define DEVICE_SPECIFIC 0
0286 #define CYPRESS_AN2135 1
0287 #define CYPRESS_AN2235 2
0288 #define CYPRESS_FX2 3
0289 int usb_ctrl;
0290 int (*download_firmware) (struct usb_device *, const struct firmware *);
0291 const char *firmware;
0292 int no_reconnect;
0293
0294 int size_of_priv;
0295 int (*priv_init)(struct dvb_usb_device *);
0296 void (*priv_destroy)(struct dvb_usb_device *);
0297
0298 int num_adapters;
0299 struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
0300
0301 int (*power_ctrl) (struct dvb_usb_device *, int);
0302 int (*read_mac_address) (struct dvb_usb_device *, u8 []);
0303 int (*identify_state)(struct usb_device *udev,
0304 const struct dvb_usb_device_properties *props,
0305 const struct dvb_usb_device_description **desc,
0306 int *cold);
0307
0308 struct {
0309 enum dvb_usb_mode mode;
0310 struct dvb_rc_legacy legacy;
0311 struct dvb_rc core;
0312 } rc;
0313
0314 struct i2c_algorithm *i2c_algo;
0315
0316 int generic_bulk_ctrl_endpoint;
0317 int generic_bulk_ctrl_endpoint_response;
0318
0319 int num_device_descs;
0320 struct dvb_usb_device_description devices[12];
0321 };
0322
0323
0324
0325
0326
0327
0328
0329
0330
0331
0332
0333
0334
0335
0336
0337
0338
0339 struct usb_data_stream {
0340 #define MAX_NO_URBS_FOR_DATA_STREAM 10
0341 struct usb_device *udev;
0342 struct usb_data_stream_properties props;
0343
0344 #define USB_STATE_INIT 0x00
0345 #define USB_STATE_URB_BUF 0x01
0346 int state;
0347
0348 void (*complete) (struct usb_data_stream *, u8 *, size_t);
0349
0350 struct urb *urb_list[MAX_NO_URBS_FOR_DATA_STREAM];
0351 int buf_num;
0352 unsigned long buf_size;
0353 u8 *buf_list[MAX_NO_URBS_FOR_DATA_STREAM];
0354 dma_addr_t dma_addr[MAX_NO_URBS_FOR_DATA_STREAM];
0355
0356 int urbs_initialized;
0357 int urbs_submitted;
0358
0359 void *user_priv;
0360 };
0361
0362
0363
0364
0365
0366
0367
0368
0369
0370
0371
0372
0373 struct dvb_usb_fe_adapter {
0374 struct dvb_frontend *fe;
0375
0376 int (*fe_init) (struct dvb_frontend *);
0377 int (*fe_sleep) (struct dvb_frontend *);
0378
0379 struct usb_data_stream stream;
0380
0381 int pid_filtering;
0382 int max_feed_count;
0383
0384 void *priv;
0385 };
0386
0387
0388
0389
0390
0391
0392
0393
0394
0395
0396
0397
0398
0399
0400
0401
0402
0403
0404
0405
0406 struct dvb_usb_adapter {
0407 struct dvb_usb_device *dev;
0408 struct dvb_usb_adapter_properties props;
0409
0410 #define DVB_USB_ADAP_STATE_INIT 0x000
0411 #define DVB_USB_ADAP_STATE_DVB 0x001
0412 int state;
0413
0414 u8 id;
0415
0416 int feedcount;
0417
0418
0419 struct dvb_adapter dvb_adap;
0420 struct dmxdev dmxdev;
0421 struct dvb_demux demux;
0422 struct dvb_net dvb_net;
0423
0424 struct dvb_usb_fe_adapter fe_adap[MAX_NO_OF_FE_PER_ADAP];
0425 int active_fe;
0426 int num_frontends_initialized;
0427
0428 void *priv;
0429 };
0430
0431
0432
0433
0434
0435
0436
0437
0438
0439
0440
0441
0442
0443
0444
0445
0446
0447
0448
0449
0450
0451
0452
0453
0454
0455
0456
0457
0458
0459
0460
0461
0462
0463 struct dvb_usb_device {
0464 struct dvb_usb_device_properties props;
0465 const struct dvb_usb_device_description *desc;
0466
0467 struct usb_device *udev;
0468
0469 #define DVB_USB_STATE_INIT 0x000
0470 #define DVB_USB_STATE_I2C 0x001
0471 #define DVB_USB_STATE_DVB 0x002
0472 #define DVB_USB_STATE_REMOTE 0x004
0473 int state;
0474
0475 int powered;
0476
0477
0478 struct mutex data_mutex;
0479 struct mutex usb_mutex;
0480
0481
0482 struct mutex i2c_mutex;
0483 struct i2c_adapter i2c_adap;
0484
0485 int num_adapters_initialized;
0486 struct dvb_usb_adapter adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
0487
0488
0489 struct rc_dev *rc_dev;
0490 struct input_dev *input_dev;
0491 char rc_phys[64];
0492 struct delayed_work rc_query_work;
0493 u32 last_event;
0494 int last_state;
0495
0496 struct module *owner;
0497
0498 void *priv;
0499 };
0500
0501 extern int dvb_usb_device_init(struct usb_interface *,
0502 const struct dvb_usb_device_properties *,
0503 struct module *, struct dvb_usb_device **,
0504 short *adapter_nums);
0505 extern void dvb_usb_device_exit(struct usb_interface *);
0506
0507
0508 extern int __must_check
0509 dvb_usb_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16, int);
0510 extern int __must_check
0511 dvb_usb_generic_write(struct dvb_usb_device *, u8 *, u16);
0512
0513
0514 int dvb_usb_nec_rc_key_to_event(struct dvb_usb_device *d, u8 keybuf[5],
0515 u32 *event, int *state);
0516
0517
0518 struct hexline {
0519 u8 len;
0520 u32 addr;
0521 u8 type;
0522 u8 data[255];
0523 u8 chk;
0524 };
0525 extern int usb_cypress_load_firmware(struct usb_device *udev, const struct firmware *fw, int type);
0526 extern int dvb_usb_get_hexline(const struct firmware *fw, struct hexline *hx, int *pos);
0527
0528
0529 #endif