0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef DVB_USB_H
0010 #define DVB_USB_H
0011
0012 #include <linux/usb/input.h>
0013 #include <linux/firmware.h>
0014 #include <media/rc-core.h>
0015 #include <media/media-device.h>
0016
0017 #include <media/dvb_frontend.h>
0018 #include <media/dvb_demux.h>
0019 #include <media/dvb_net.h>
0020 #include <media/dmxdev.h>
0021 #include <media/dvb-usb-ids.h>
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046 #define adap_to_d(adap) (container_of(adap, struct dvb_usb_device, \
0047 adapter[adap->id]))
0048 #define adap_to_priv(adap) (adap_to_d(adap)->priv)
0049 #define fe_to_adap(fe) ((struct dvb_usb_adapter *) ((fe)->dvb->priv))
0050 #define fe_to_d(fe) (adap_to_d(fe_to_adap(fe)))
0051 #define fe_to_priv(fe) (fe_to_d(fe)->priv)
0052 #define d_to_priv(d) (d->priv)
0053
0054 #define dvb_usb_dbg_usb_control_msg(udev, r, t, v, i, b, l) { \
0055 char *direction; \
0056 if (t == (USB_TYPE_VENDOR | USB_DIR_OUT)) \
0057 direction = ">>>"; \
0058 else \
0059 direction = "<<<"; \
0060 dev_dbg(&udev->dev, "%s: %02x %02x %02x %02x %02x %02x %02x %02x " \
0061 "%s %*ph\n", __func__, t, r, v & 0xff, v >> 8, \
0062 i & 0xff, i >> 8, l & 0xff, l >> 8, direction, l, b); \
0063 }
0064
0065 #define DVB_USB_STREAM_BULK(endpoint_, count_, size_) { \
0066 .type = USB_BULK, \
0067 .count = count_, \
0068 .endpoint = endpoint_, \
0069 .u = { \
0070 .bulk = { \
0071 .buffersize = size_, \
0072 } \
0073 } \
0074 }
0075
0076 #define DVB_USB_STREAM_ISOC(endpoint_, count_, frames_, size_, interval_) { \
0077 .type = USB_ISOC, \
0078 .count = count_, \
0079 .endpoint = endpoint_, \
0080 .u = { \
0081 .isoc = { \
0082 .framesperurb = frames_, \
0083 .framesize = size_,\
0084 .interval = interval_, \
0085 } \
0086 } \
0087 }
0088
0089 #define DVB_USB_DEVICE(vend, prod, props_, name_, rc) \
0090 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, \
0091 .idVendor = (vend), \
0092 .idProduct = (prod), \
0093 .driver_info = (kernel_ulong_t) &((const struct dvb_usb_driver_info) { \
0094 .props = (props_), \
0095 .name = (name_), \
0096 .rc_map = (rc), \
0097 })
0098
0099 struct dvb_usb_device;
0100 struct dvb_usb_adapter;
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110 struct dvb_usb_driver_info {
0111 const char *name;
0112 const char *rc_map;
0113 const struct dvb_usb_device_properties *props;
0114 };
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127 struct dvb_usb_rc {
0128 const char *map_name;
0129 u64 allowed_protos;
0130 int (*change_protocol)(struct rc_dev *dev, u64 *rc_proto);
0131 int (*query) (struct dvb_usb_device *d);
0132 unsigned int interval;
0133 enum rc_driver_type driver_type;
0134 bool bulk_mode;
0135 int timeout;
0136 };
0137
0138
0139
0140
0141
0142
0143
0144
0145 struct usb_data_stream_properties {
0146 #define USB_BULK 1
0147 #define USB_ISOC 2
0148 u8 type;
0149 u8 count;
0150 u8 endpoint;
0151
0152 union {
0153 struct {
0154 unsigned int buffersize;
0155 } bulk;
0156 struct {
0157 int framesperurb;
0158 int framesize;
0159 int interval;
0160 } isoc;
0161 } u;
0162 };
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172 struct dvb_usb_adapter_properties {
0173 #define MAX_NO_OF_FE_PER_ADAP 3
0174 #define DVB_USB_ADAP_HAS_PID_FILTER 0x01
0175 #define DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF 0x02
0176 #define DVB_USB_ADAP_NEED_PID_FILTERING 0x04
0177 u8 caps;
0178
0179 u8 pid_filter_count;
0180 int (*pid_filter_ctrl) (struct dvb_usb_adapter *, int);
0181 int (*pid_filter) (struct dvb_usb_adapter *, int, u16, int);
0182
0183 struct usb_data_stream_properties stream;
0184 };
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198
0199
0200
0201
0202
0203
0204
0205
0206
0207
0208
0209
0210
0211
0212
0213
0214
0215
0216
0217
0218
0219
0220
0221
0222
0223
0224 struct dvb_usb_device_properties {
0225 #define MAX_NO_OF_ADAPTER_PER_DEVICE 2
0226 const char *driver_name;
0227 struct module *owner;
0228 short *adapter_nr;
0229
0230 u8 bInterfaceNumber;
0231 unsigned int size_of_priv;
0232 u8 generic_bulk_ctrl_endpoint;
0233 u8 generic_bulk_ctrl_endpoint_response;
0234 unsigned int generic_bulk_ctrl_delay;
0235
0236 int (*probe)(struct dvb_usb_device *);
0237 void (*disconnect)(struct dvb_usb_device *);
0238 #define WARM 0
0239 #define COLD 1
0240 int (*identify_state) (struct dvb_usb_device *, const char **);
0241 const char *firmware;
0242 #define RECONNECTS_USB 1
0243 int (*download_firmware) (struct dvb_usb_device *,
0244 const struct firmware *);
0245
0246 struct i2c_algorithm *i2c_algo;
0247
0248 unsigned int num_adapters;
0249 int (*get_adapter_count) (struct dvb_usb_device *);
0250 struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
0251 int (*power_ctrl) (struct dvb_usb_device *, int);
0252 int (*read_config) (struct dvb_usb_device *d);
0253 int (*read_mac_address) (struct dvb_usb_adapter *, u8 []);
0254 int (*frontend_attach) (struct dvb_usb_adapter *);
0255 int (*frontend_detach)(struct dvb_usb_adapter *);
0256 int (*tuner_attach) (struct dvb_usb_adapter *);
0257 int (*tuner_detach)(struct dvb_usb_adapter *);
0258 int (*frontend_ctrl) (struct dvb_frontend *, int);
0259 int (*streaming_ctrl) (struct dvb_frontend *, int);
0260 int (*init) (struct dvb_usb_device *);
0261 void (*exit) (struct dvb_usb_device *);
0262 int (*get_rc_config) (struct dvb_usb_device *, struct dvb_usb_rc *);
0263 #define DVB_USB_FE_TS_TYPE_188 0
0264 #define DVB_USB_FE_TS_TYPE_204 1
0265 #define DVB_USB_FE_TS_TYPE_RAW 2
0266 int (*get_stream_config) (struct dvb_frontend *, u8 *,
0267 struct usb_data_stream_properties *);
0268 };
0269
0270
0271
0272
0273
0274
0275
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286 struct usb_data_stream {
0287 #define MAX_NO_URBS_FOR_DATA_STREAM 10
0288 struct usb_device *udev;
0289 struct usb_data_stream_properties props;
0290
0291 #define USB_STATE_INIT 0x00
0292 #define USB_STATE_URB_BUF 0x01
0293 u8 state;
0294
0295 void (*complete) (struct usb_data_stream *, u8 *, size_t);
0296
0297 struct urb *urb_list[MAX_NO_URBS_FOR_DATA_STREAM];
0298 int buf_num;
0299 unsigned long buf_size;
0300 u8 *buf_list[MAX_NO_URBS_FOR_DATA_STREAM];
0301 dma_addr_t dma_addr[MAX_NO_URBS_FOR_DATA_STREAM];
0302
0303 int urbs_initialized;
0304 int urbs_submitted;
0305
0306 void *user_priv;
0307 };
0308
0309
0310
0311
0312
0313
0314
0315
0316
0317
0318
0319
0320
0321
0322
0323
0324
0325
0326
0327
0328
0329 struct dvb_usb_adapter {
0330 const struct dvb_usb_adapter_properties *props;
0331 struct usb_data_stream stream;
0332 u8 id;
0333 u8 ts_type;
0334 bool suspend_resume_active;
0335 bool pid_filtering;
0336 u8 feed_count;
0337 u8 max_feed_count;
0338 s8 active_fe;
0339 #define ADAP_INIT 0
0340 #define ADAP_SLEEP 1
0341 #define ADAP_STREAMING 2
0342 unsigned long state_bits;
0343
0344
0345 struct dvb_adapter dvb_adap;
0346 struct dmxdev dmxdev;
0347 struct dvb_demux demux;
0348 struct dvb_net dvb_net;
0349
0350 struct dvb_frontend *fe[MAX_NO_OF_FE_PER_ADAP];
0351 int (*fe_init[MAX_NO_OF_FE_PER_ADAP]) (struct dvb_frontend *);
0352 int (*fe_sleep[MAX_NO_OF_FE_PER_ADAP]) (struct dvb_frontend *);
0353 };
0354
0355
0356
0357
0358
0359
0360
0361
0362
0363
0364
0365
0366
0367
0368
0369
0370
0371
0372
0373
0374
0375 struct dvb_usb_device {
0376 const struct dvb_usb_device_properties *props;
0377 const char *name;
0378 const char *rc_map;
0379 bool rc_polling_active;
0380 struct usb_interface *intf;
0381 struct usb_device *udev;
0382 struct dvb_usb_rc rc;
0383 int powered;
0384
0385
0386 struct mutex usb_mutex;
0387
0388
0389 struct mutex i2c_mutex;
0390 struct i2c_adapter i2c_adap;
0391
0392 struct dvb_usb_adapter adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
0393
0394
0395 struct rc_dev *rc_dev;
0396 char rc_phys[64];
0397 struct delayed_work rc_query_work;
0398
0399 void *priv;
0400 };
0401
0402 extern int dvb_usbv2_probe(struct usb_interface *,
0403 const struct usb_device_id *);
0404 extern void dvb_usbv2_disconnect(struct usb_interface *);
0405 extern int dvb_usbv2_suspend(struct usb_interface *, pm_message_t);
0406 extern int dvb_usbv2_resume(struct usb_interface *);
0407 extern int dvb_usbv2_reset_resume(struct usb_interface *);
0408
0409
0410 extern int dvb_usbv2_generic_rw(struct dvb_usb_device *, u8 *, u16, u8 *, u16);
0411 extern int dvb_usbv2_generic_write(struct dvb_usb_device *, u8 *, u16);
0412
0413 extern int dvb_usbv2_generic_rw_locked(struct dvb_usb_device *,
0414 u8 *, u16, u8 *, u16);
0415 extern int dvb_usbv2_generic_write_locked(struct dvb_usb_device *, u8 *, u16);
0416
0417 #endif