This source file includes following definitions.
- fh2id
 
- file2id
 
- to_cx18
 
- cx18_raw_vbi
 
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 #ifndef CX18_DRIVER_H
  12 #define CX18_DRIVER_H
  13 
  14 #include <linux/module.h>
  15 #include <linux/moduleparam.h>
  16 #include <linux/init.h>
  17 #include <linux/delay.h>
  18 #include <linux/sched/signal.h>
  19 #include <linux/fs.h>
  20 #include <linux/pci.h>
  21 #include <linux/interrupt.h>
  22 #include <linux/spinlock.h>
  23 #include <linux/i2c.h>
  24 #include <linux/i2c-algo-bit.h>
  25 #include <linux/list.h>
  26 #include <linux/unistd.h>
  27 #include <linux/pagemap.h>
  28 #include <linux/workqueue.h>
  29 #include <linux/mutex.h>
  30 #include <linux/slab.h>
  31 #include <asm/byteorder.h>
  32 
  33 #include <media/v4l2-common.h>
  34 #include <media/v4l2-ioctl.h>
  35 #include <media/v4l2-device.h>
  36 #include <media/v4l2-fh.h>
  37 #include <media/tuner.h>
  38 #include <media/i2c/ir-kbd-i2c.h>
  39 #include "cx18-mailbox.h"
  40 #include "cx18-av-core.h"
  41 #include "cx23418.h"
  42 
  43 
  44 #include <media/demux.h>
  45 #include <media/dmxdev.h>
  46 #include <media/dvb_demux.h>
  47 #include <media/dvb_frontend.h>
  48 #include <media/dvb_net.h>
  49 #include <media/dvbdev.h>
  50 
  51 
  52 #include <media/videobuf-core.h>
  53 #include <media/videobuf-vmalloc.h>
  54 
  55 #ifndef CONFIG_PCI
  56 #  error "This driver requires kernel PCI support."
  57 #endif
  58 
  59 #define CX18_MEM_OFFSET 0x00000000
  60 #define CX18_MEM_SIZE   0x04000000
  61 #define CX18_REG_OFFSET 0x02000000
  62 
  63 
  64 #define CX18_MAX_CARDS 32
  65 
  66 
  67 #define CX18_CARD_HVR_1600_ESMT       0 
  68 #define CX18_CARD_HVR_1600_SAMSUNG    1 
  69 #define CX18_CARD_COMPRO_H900         2 
  70 #define CX18_CARD_YUAN_MPC718         3 
  71 #define CX18_CARD_CNXT_RAPTOR_PAL     4 
  72 #define CX18_CARD_TOSHIBA_QOSMIO_DVBT 5 
  73 #define CX18_CARD_LEADTEK_PVR2100     6 
  74 #define CX18_CARD_LEADTEK_DVR3100H    7 
  75 #define CX18_CARD_GOTVIEW_PCI_DVD3    8 
  76 #define CX18_CARD_HVR_1600_S5H1411    9 
  77 #define CX18_CARD_LAST                9
  78 
  79 #define CX18_ENC_STREAM_TYPE_MPG  0
  80 #define CX18_ENC_STREAM_TYPE_TS   1
  81 #define CX18_ENC_STREAM_TYPE_YUV  2
  82 #define CX18_ENC_STREAM_TYPE_VBI  3
  83 #define CX18_ENC_STREAM_TYPE_PCM  4
  84 #define CX18_ENC_STREAM_TYPE_IDX  5
  85 #define CX18_ENC_STREAM_TYPE_RAD  6
  86 #define CX18_MAX_STREAMS          7
  87 
  88 
  89 #define PCI_VENDOR_ID_CX      0x14f1
  90 #define PCI_DEVICE_ID_CX23418 0x5b7a
  91 
  92 
  93 #define CX18_PCI_ID_HAUPPAUGE           0x0070
  94 #define CX18_PCI_ID_COMPRO              0x185b
  95 #define CX18_PCI_ID_YUAN                0x12ab
  96 #define CX18_PCI_ID_CONEXANT            0x14f1
  97 #define CX18_PCI_ID_TOSHIBA             0x1179
  98 #define CX18_PCI_ID_LEADTEK             0x107D
  99 #define CX18_PCI_ID_GOTVIEW             0x5854
 100 
 101 
 102 
 103 
 104 
 105 
 106 #define CX18_DEFAULT_ENC_TS_BUFFERS  1
 107 #define CX18_DEFAULT_ENC_MPG_BUFFERS 2
 108 #define CX18_DEFAULT_ENC_IDX_BUFFERS 1
 109 #define CX18_DEFAULT_ENC_YUV_BUFFERS 2
 110 #define CX18_DEFAULT_ENC_VBI_BUFFERS 1
 111 #define CX18_DEFAULT_ENC_PCM_BUFFERS 1
 112 
 113 
 114 #define CX18_MAX_FW_MDLS_PER_STREAM 63
 115 
 116 
 117 #define CX18_UNIT_ENC_YUV_BUFSIZE       (720 *  32 * 3 / 2) 
 118 #define CX18_625_LINE_ENC_YUV_BUFSIZE   (CX18_UNIT_ENC_YUV_BUFSIZE * 576/32)
 119 #define CX18_525_LINE_ENC_YUV_BUFSIZE   (CX18_UNIT_ENC_YUV_BUFSIZE * 480/32)
 120 
 121 
 122 struct cx18_enc_idx_entry {
 123         __le32 length;
 124         __le32 offset_low;
 125         __le32 offset_high;
 126         __le32 flags;
 127         __le32 pts_low;
 128         __le32 pts_high;
 129 } __attribute__ ((packed));
 130 #define CX18_UNIT_ENC_IDX_BUFSIZE \
 131         (sizeof(struct cx18_enc_idx_entry) * V4L2_ENC_IDX_ENTRIES)
 132 
 133 
 134 #define CX18_DEFAULT_ENC_TS_BUFSIZE   32
 135 #define CX18_DEFAULT_ENC_MPG_BUFSIZE  32
 136 #define CX18_DEFAULT_ENC_IDX_BUFSIZE  (CX18_UNIT_ENC_IDX_BUFSIZE * 1 / 1024 + 1)
 137 #define CX18_DEFAULT_ENC_YUV_BUFSIZE  (CX18_UNIT_ENC_YUV_BUFSIZE * 3 / 1024 + 1)
 138 #define CX18_DEFAULT_ENC_PCM_BUFSIZE   4
 139 
 140 
 141 #define I2C_CLIENTS_MAX 16
 142 
 143 
 144 
 145 
 146 #define CX18_DBGFLG_WARN  (1 << 0)
 147 #define CX18_DBGFLG_INFO  (1 << 1)
 148 #define CX18_DBGFLG_API   (1 << 2)
 149 #define CX18_DBGFLG_DMA   (1 << 3)
 150 #define CX18_DBGFLG_IOCTL (1 << 4)
 151 #define CX18_DBGFLG_FILE  (1 << 5)
 152 #define CX18_DBGFLG_I2C   (1 << 6)
 153 #define CX18_DBGFLG_IRQ   (1 << 7)
 154 
 155 #define CX18_DBGFLG_HIGHVOL (1 << 8)
 156 
 157 
 158 
 159 #define CX18_DEBUG(x, type, fmt, args...) \
 160         do { \
 161                 if ((x) & cx18_debug) \
 162                         v4l2_info(&cx->v4l2_dev, " " type ": " fmt , ## args); \
 163         } while (0)
 164 #define CX18_DEBUG_WARN(fmt, args...)  CX18_DEBUG(CX18_DBGFLG_WARN, "warning", fmt , ## args)
 165 #define CX18_DEBUG_INFO(fmt, args...)  CX18_DEBUG(CX18_DBGFLG_INFO, "info", fmt , ## args)
 166 #define CX18_DEBUG_API(fmt, args...)   CX18_DEBUG(CX18_DBGFLG_API, "api", fmt , ## args)
 167 #define CX18_DEBUG_DMA(fmt, args...)   CX18_DEBUG(CX18_DBGFLG_DMA, "dma", fmt , ## args)
 168 #define CX18_DEBUG_IOCTL(fmt, args...) CX18_DEBUG(CX18_DBGFLG_IOCTL, "ioctl", fmt , ## args)
 169 #define CX18_DEBUG_FILE(fmt, args...)  CX18_DEBUG(CX18_DBGFLG_FILE, "file", fmt , ## args)
 170 #define CX18_DEBUG_I2C(fmt, args...)   CX18_DEBUG(CX18_DBGFLG_I2C, "i2c", fmt , ## args)
 171 #define CX18_DEBUG_IRQ(fmt, args...)   CX18_DEBUG(CX18_DBGFLG_IRQ, "irq", fmt , ## args)
 172 
 173 #define CX18_DEBUG_HIGH_VOL(x, type, fmt, args...) \
 174         do { \
 175                 if (((x) & cx18_debug) && (cx18_debug & CX18_DBGFLG_HIGHVOL)) \
 176                         v4l2_info(&cx->v4l2_dev, " " type ": " fmt , ## args); \
 177         } while (0)
 178 #define CX18_DEBUG_HI_WARN(fmt, args...)  CX18_DEBUG_HIGH_VOL(CX18_DBGFLG_WARN, "warning", fmt , ## args)
 179 #define CX18_DEBUG_HI_INFO(fmt, args...)  CX18_DEBUG_HIGH_VOL(CX18_DBGFLG_INFO, "info", fmt , ## args)
 180 #define CX18_DEBUG_HI_API(fmt, args...)   CX18_DEBUG_HIGH_VOL(CX18_DBGFLG_API, "api", fmt , ## args)
 181 #define CX18_DEBUG_HI_DMA(fmt, args...)   CX18_DEBUG_HIGH_VOL(CX18_DBGFLG_DMA, "dma", fmt , ## args)
 182 #define CX18_DEBUG_HI_IOCTL(fmt, args...) CX18_DEBUG_HIGH_VOL(CX18_DBGFLG_IOCTL, "ioctl", fmt , ## args)
 183 #define CX18_DEBUG_HI_FILE(fmt, args...)  CX18_DEBUG_HIGH_VOL(CX18_DBGFLG_FILE, "file", fmt , ## args)
 184 #define CX18_DEBUG_HI_I2C(fmt, args...)   CX18_DEBUG_HIGH_VOL(CX18_DBGFLG_I2C, "i2c", fmt , ## args)
 185 #define CX18_DEBUG_HI_IRQ(fmt, args...)   CX18_DEBUG_HIGH_VOL(CX18_DBGFLG_IRQ, "irq", fmt , ## args)
 186 
 187 
 188 #define CX18_ERR(fmt, args...)      v4l2_err(&cx->v4l2_dev, fmt , ## args)
 189 #define CX18_WARN(fmt, args...)     v4l2_warn(&cx->v4l2_dev, fmt , ## args)
 190 #define CX18_INFO(fmt, args...)     v4l2_info(&cx->v4l2_dev, fmt , ## args)
 191 
 192 
 193 #define CX18_DEBUG_DEV(x, dev, type, fmt, args...) \
 194         do { \
 195                 if ((x) & cx18_debug) \
 196                         v4l2_info(dev, " " type ": " fmt , ## args); \
 197         } while (0)
 198 #define CX18_DEBUG_WARN_DEV(dev, fmt, args...) \
 199                 CX18_DEBUG_DEV(CX18_DBGFLG_WARN, dev, "warning", fmt , ## args)
 200 #define CX18_DEBUG_INFO_DEV(dev, fmt, args...) \
 201                 CX18_DEBUG_DEV(CX18_DBGFLG_INFO, dev, "info", fmt , ## args)
 202 #define CX18_DEBUG_API_DEV(dev, fmt, args...) \
 203                 CX18_DEBUG_DEV(CX18_DBGFLG_API, dev, "api", fmt , ## args)
 204 #define CX18_DEBUG_DMA_DEV(dev, fmt, args...) \
 205                 CX18_DEBUG_DEV(CX18_DBGFLG_DMA, dev, "dma", fmt , ## args)
 206 #define CX18_DEBUG_IOCTL_DEV(dev, fmt, args...) \
 207                 CX18_DEBUG_DEV(CX18_DBGFLG_IOCTL, dev, "ioctl", fmt , ## args)
 208 #define CX18_DEBUG_FILE_DEV(dev, fmt, args...) \
 209                 CX18_DEBUG_DEV(CX18_DBGFLG_FILE, dev, "file", fmt , ## args)
 210 #define CX18_DEBUG_I2C_DEV(dev, fmt, args...) \
 211                 CX18_DEBUG_DEV(CX18_DBGFLG_I2C, dev, "i2c", fmt , ## args)
 212 #define CX18_DEBUG_IRQ_DEV(dev, fmt, args...) \
 213                 CX18_DEBUG_DEV(CX18_DBGFLG_IRQ, dev, "irq", fmt , ## args)
 214 
 215 #define CX18_DEBUG_HIGH_VOL_DEV(x, dev, type, fmt, args...) \
 216         do { \
 217                 if (((x) & cx18_debug) && (cx18_debug & CX18_DBGFLG_HIGHVOL)) \
 218                         v4l2_info(dev, " " type ": " fmt , ## args); \
 219         } while (0)
 220 #define CX18_DEBUG_HI_WARN_DEV(dev, fmt, args...) \
 221         CX18_DEBUG_HIGH_VOL_DEV(CX18_DBGFLG_WARN, dev, "warning", fmt , ## args)
 222 #define CX18_DEBUG_HI_INFO_DEV(dev, fmt, args...) \
 223         CX18_DEBUG_HIGH_VOL_DEV(CX18_DBGFLG_INFO, dev, "info", fmt , ## args)
 224 #define CX18_DEBUG_HI_API_DEV(dev, fmt, args...) \
 225         CX18_DEBUG_HIGH_VOL_DEV(CX18_DBGFLG_API, dev, "api", fmt , ## args)
 226 #define CX18_DEBUG_HI_DMA_DEV(dev, fmt, args...) \
 227         CX18_DEBUG_HIGH_VOL_DEV(CX18_DBGFLG_DMA, dev, "dma", fmt , ## args)
 228 #define CX18_DEBUG_HI_IOCTL_DEV(dev, fmt, args...) \
 229         CX18_DEBUG_HIGH_VOL_DEV(CX18_DBGFLG_IOCTL, dev, "ioctl", fmt , ## args)
 230 #define CX18_DEBUG_HI_FILE_DEV(dev, fmt, args...) \
 231         CX18_DEBUG_HIGH_VOL_DEV(CX18_DBGFLG_FILE, dev, "file", fmt , ## args)
 232 #define CX18_DEBUG_HI_I2C_DEV(dev, fmt, args...) \
 233         CX18_DEBUG_HIGH_VOL_DEV(CX18_DBGFLG_I2C, dev, "i2c", fmt , ## args)
 234 #define CX18_DEBUG_HI_IRQ_DEV(dev, fmt, args...) \
 235         CX18_DEBUG_HIGH_VOL_DEV(CX18_DBGFLG_IRQ, dev, "irq", fmt , ## args)
 236 
 237 #define CX18_ERR_DEV(dev, fmt, args...)      v4l2_err(dev, fmt , ## args)
 238 #define CX18_WARN_DEV(dev, fmt, args...)     v4l2_warn(dev, fmt , ## args)
 239 #define CX18_INFO_DEV(dev, fmt, args...)     v4l2_info(dev, fmt , ## args)
 240 
 241 extern int cx18_debug;
 242 
 243 struct cx18_options {
 244         int megabytes[CX18_MAX_STREAMS]; 
 245         int cardtype;           
 246         int tuner;              
 247         int radio;              
 248 };
 249 
 250 
 251 #define CX18_F_M_NEED_SWAP  0   
 252 
 253 
 254 #define CX18_F_S_CLAIMED        3       
 255 #define CX18_F_S_STREAMING      4       
 256 #define CX18_F_S_INTERNAL_USE   5       
 257 #define CX18_F_S_STREAMOFF      7       
 258 #define CX18_F_S_APPL_IO        8       
 259 #define CX18_F_S_STOPPING       9       
 260 
 261 
 262 #define CX18_F_I_LOADED_FW              0       
 263 #define CX18_F_I_EOS                    4       
 264 #define CX18_F_I_RADIO_USER             5       
 265 #define CX18_F_I_ENC_PAUSED             13      
 266 #define CX18_F_I_INITED                 21      
 267 #define CX18_F_I_FAILED                 22      
 268 
 269 
 270 #define CX18_SLICED_TYPE_TELETEXT_B     (1)
 271 #define CX18_SLICED_TYPE_CAPTION_525    (4)
 272 #define CX18_SLICED_TYPE_WSS_625        (5)
 273 #define CX18_SLICED_TYPE_VPS            (7)
 274 
 275 
 276 
 277 
 278 
 279 
 280 
 281 
 282 
 283 
 284 #define list_entry_is_past_end(pos, head, member) \
 285         (&pos->member == (head))
 286 
 287 struct cx18_buffer {
 288         struct list_head list;
 289         dma_addr_t dma_handle;
 290         char *buf;
 291 
 292         u32 bytesused;
 293         u32 readpos;
 294 };
 295 
 296 struct cx18_mdl {
 297         struct list_head list;
 298         u32 id;         
 299 
 300         unsigned int skipped;
 301         unsigned long m_flags;
 302 
 303         struct list_head buf_list;
 304         struct cx18_buffer *curr_buf; 
 305 
 306         u32 bytesused;
 307         u32 readpos;
 308 };
 309 
 310 struct cx18_queue {
 311         struct list_head list;
 312         atomic_t depth;
 313         u32 bytesused;
 314         spinlock_t lock;
 315 };
 316 
 317 struct cx18_stream; 
 318 
 319 struct cx18_dvb {
 320         struct cx18_stream *stream;
 321         struct dmx_frontend hw_frontend;
 322         struct dmx_frontend mem_frontend;
 323         struct dmxdev dmxdev;
 324         struct dvb_adapter dvb_adapter;
 325         struct dvb_demux demux;
 326         struct dvb_frontend *fe;
 327         struct dvb_net dvbnet;
 328         int enabled;
 329         int feeding;
 330         struct mutex feedlock;
 331 };
 332 
 333 struct cx18;     
 334 struct cx18_scb; 
 335 
 336 
 337 #define CX18_MAX_MDL_ACKS 2
 338 #define CX18_MAX_IN_WORK_ORDERS (CX18_MAX_FW_MDLS_PER_STREAM + 7)
 339 
 340 
 341 #define CX18_F_EWO_MB_STALE_UPON_RECEIPT 0x1
 342 #define CX18_F_EWO_MB_STALE_WHILE_PROC   0x2
 343 #define CX18_F_EWO_MB_STALE \
 344              (CX18_F_EWO_MB_STALE_UPON_RECEIPT | CX18_F_EWO_MB_STALE_WHILE_PROC)
 345 
 346 struct cx18_in_work_order {
 347         struct work_struct work;
 348         atomic_t pending;
 349         struct cx18 *cx;
 350         unsigned long flags;
 351         int rpu;
 352         struct cx18_mailbox mb;
 353         struct cx18_mdl_ack mdl_ack[CX18_MAX_MDL_ACKS];
 354         char *str;
 355 };
 356 
 357 #define CX18_INVALID_TASK_HANDLE 0xffffffff
 358 
 359 struct cx18_stream {
 360         
 361 
 362         struct video_device video_dev;  
 363         struct cx18_dvb *dvb;           
 364         struct cx18 *cx;                
 365         const char *name;               
 366         int type;                       
 367         u32 handle;                     
 368         u32 v4l2_dev_caps;              
 369         unsigned int mdl_base_idx;
 370 
 371         u32 id;
 372         unsigned long s_flags;  
 373         int dma;                
 374 
 375 
 376         wait_queue_head_t waitq;
 377 
 378         
 379         struct list_head buf_pool;      
 380         u32 buffers;                    
 381         u32 buf_size;                   
 382 
 383         
 384         u32 bufs_per_mdl;
 385         u32 mdl_size;           
 386 
 387         
 388         struct cx18_queue q_free;       
 389         struct cx18_queue q_busy;       
 390         struct cx18_queue q_full;       
 391         struct cx18_queue q_idle;       
 392 
 393         struct work_struct out_work_order;
 394 
 395         
 396         u32 pixelformat;
 397         u32 vb_bytes_per_frame;
 398         u32 vb_bytes_per_line;
 399         struct list_head vb_capture;    
 400         spinlock_t vb_lock;
 401         struct timer_list vb_timeout;
 402 
 403         struct videobuf_queue vbuf_q;
 404         spinlock_t vbuf_q_lock; 
 405         enum v4l2_buf_type vb_type;
 406 };
 407 
 408 struct cx18_videobuf_buffer {
 409         
 410         struct videobuf_buffer vb;
 411         v4l2_std_id tvnorm; 
 412         u32 bytes_used;
 413 };
 414 
 415 struct cx18_open_id {
 416         struct v4l2_fh fh;
 417         u32 open_id;
 418         int type;
 419         struct cx18 *cx;
 420 };
 421 
 422 static inline struct cx18_open_id *fh2id(struct v4l2_fh *fh)
 423 {
 424         return container_of(fh, struct cx18_open_id, fh);
 425 }
 426 
 427 static inline struct cx18_open_id *file2id(struct file *file)
 428 {
 429         return fh2id(file->private_data);
 430 }
 431 
 432 
 433 struct cx18_card;
 434 
 435 
 436 
 437 
 438 
 439 
 440 
 441 
 442 
 443 
 444 
 445 
 446 
 447 
 448 
 449 
 450 
 451 
 452 
 453 
 454 
 455 
 456 
 457 
 458 
 459 
 460 
 461 
 462 
 463 
 464 
 465 
 466 
 467 
 468 
 469 
 470 
 471 
 472 
 473 
 474 
 475 
 476 
 477 
 478 
 479 
 480 
 481 #define VBI_ACTIVE_SAMPLES      1444 
 482 #define VBI_HBLANK_SAMPLES_60HZ 272 
 483 #define VBI_HBLANK_SAMPLES_50HZ 284 
 484 
 485 #define CX18_VBI_FRAMES 32
 486 
 487 struct vbi_info {
 488         
 489         struct v4l2_format in;
 490         struct v4l2_sliced_vbi_format *sliced_in; 
 491         u32 count;    
 492         u32 start[2]; 
 493 
 494         u32 frame; 
 495 
 496         
 497 
 498 
 499 
 500 
 501         
 502         int insert_mpeg;
 503 
 504         
 505 
 506 
 507 
 508 
 509 
 510 
 511         struct v4l2_sliced_vbi_data sliced_data[36];
 512 
 513         
 514 
 515 
 516 
 517 
 518 
 519 
 520 
 521 
 522 
 523 
 524 
 525 
 526 
 527 
 528 
 529 
 530 
 531 
 532 
 533 
 534 
 535 #define CX18_SLICED_MPEG_DATA_MAXSZ     1584
 536         
 537 #define CX18_SLICED_MPEG_DATA_BUFSZ     (CX18_SLICED_MPEG_DATA_MAXSZ+8)
 538         u8 *sliced_mpeg_data[CX18_VBI_FRAMES];
 539         u32 sliced_mpeg_size[CX18_VBI_FRAMES];
 540 
 541         
 542         u32 inserted_frame;
 543 
 544         
 545 
 546 
 547 
 548 
 549         struct cx18_mdl sliced_mpeg_mdl;
 550         struct cx18_buffer sliced_mpeg_buf;
 551 };
 552 
 553 
 554 struct cx18_i2c_algo_callback_data {
 555         struct cx18 *cx;
 556         int bus_index;   
 557 };
 558 
 559 #define CX18_MAX_MMIO_WR_RETRIES 10
 560 
 561 
 562 struct cx18 {
 563         int instance;
 564         struct pci_dev *pci_dev;
 565         struct v4l2_device v4l2_dev;
 566         struct v4l2_subdev *sd_av;     
 567         struct v4l2_subdev *sd_extmux; 
 568 
 569         const struct cx18_card *card;   
 570         const char *card_name;  
 571         const struct cx18_card_tuner_i2c *card_i2c; 
 572         u8 is_50hz;
 573         u8 is_60hz;
 574         u8 nof_inputs;          
 575         u8 nof_audio_inputs;    
 576         u32 v4l2_cap;           
 577         u32 hw_flags;           
 578         unsigned int free_mdl_idx;
 579         struct cx18_scb __iomem *scb; 
 580         struct mutex epu2apu_mb_lock; 
 581         struct mutex epu2cpu_mb_lock; 
 582 
 583         struct cx18_av_state av_state;
 584 
 585         
 586         struct cx2341x_handler cxhdl;
 587         u32 filter_mode;
 588         u32 temporal_strength;
 589         u32 spatial_strength;
 590 
 591         
 592         unsigned long dualwatch_jiffies;
 593         u32 dualwatch_stereo_mode;
 594 
 595         struct mutex serialize_lock;    
 596         struct cx18_options options;    
 597         int stream_buffers[CX18_MAX_STREAMS]; 
 598         int stream_buf_size[CX18_MAX_STREAMS]; 
 599         struct cx18_stream streams[CX18_MAX_STREAMS];   
 600         struct snd_cx18_card *alsa; 
 601         void (*pcm_announce_callback)(struct snd_cx18_card *card, u8 *pcm_data,
 602                                       size_t num_bytes);
 603 
 604         unsigned long i_flags;  
 605         atomic_t ana_capturing; 
 606         atomic_t tot_capturing; 
 607         int search_pack_header;
 608 
 609         int open_id;            
 610 
 611 
 612 
 613         resource_size_t base_addr;
 614 
 615         u8 card_rev;
 616         void __iomem *enc_mem, *reg_mem;
 617 
 618         struct vbi_info vbi;
 619 
 620         u64 mpg_data_received;
 621         u64 vbi_data_inserted;
 622 
 623         wait_queue_head_t mb_apu_waitq;
 624         wait_queue_head_t mb_cpu_waitq;
 625         wait_queue_head_t cap_w;
 626         
 627         wait_queue_head_t dma_waitq;
 628 
 629         u32 sw1_irq_mask;
 630         u32 sw2_irq_mask;
 631         u32 hw2_irq_mask;
 632 
 633         struct workqueue_struct *in_work_queue;
 634         char in_workq_name[11]; 
 635         struct cx18_in_work_order in_work_order[CX18_MAX_IN_WORK_ORDERS];
 636         char epu_debug_str[256]; 
 637 
 638         
 639         struct i2c_adapter i2c_adap[2];
 640         struct i2c_algo_bit_data i2c_algo[2];
 641         struct cx18_i2c_algo_callback_data i2c_algo_cb_data[2];
 642 
 643         struct IR_i2c_init_data ir_i2c_init_data;
 644 
 645         
 646         u32 gpio_dir;
 647         u32 gpio_val;
 648         struct mutex gpio_lock;
 649         struct v4l2_subdev sd_gpiomux;
 650         struct v4l2_subdev sd_resetctrl;
 651 
 652         
 653 
 654         
 655         u32 audio_input;
 656         u32 active_input;
 657         v4l2_std_id std;
 658         v4l2_std_id tuner_std;  
 659 
 660         
 661         struct work_struct request_module_wk;
 662 };
 663 
 664 static inline struct cx18 *to_cx18(struct v4l2_device *v4l2_dev)
 665 {
 666         return container_of(v4l2_dev, struct cx18, v4l2_dev);
 667 }
 668 
 669 
 670 extern int (*cx18_ext_init)(struct cx18 *);
 671 
 672 
 673 extern int cx18_first_minor;
 674 
 675 
 676 
 677 
 678 int cx18_msleep_timeout(unsigned int msecs, int intr);
 679 
 680 
 681 struct tveeprom; 
 682 void cx18_read_eeprom(struct cx18 *cx, struct tveeprom *tv);
 683 
 684 
 685 int cx18_init_on_first_open(struct cx18 *cx);
 686 
 687 
 688 static inline int cx18_raw_vbi(const struct cx18 *cx)
 689 {
 690         return cx->vbi.in.type == V4L2_BUF_TYPE_VBI_CAPTURE;
 691 }
 692 
 693 
 694 
 695 #define cx18_call_hw(cx, hw, o, f, args...)                             \
 696         v4l2_device_mask_call_all(&(cx)->v4l2_dev, hw, o, f, ##args)
 697 
 698 #define cx18_call_all(cx, o, f, args...) cx18_call_hw(cx, 0, o, f , ##args)
 699 
 700 
 701 
 702 
 703 #define cx18_call_hw_err(cx, hw, o, f, args...)                         \
 704         v4l2_device_mask_call_until_err(&(cx)->v4l2_dev, hw, o, f, ##args)
 705 
 706 #define cx18_call_all_err(cx, o, f, args...) \
 707         cx18_call_hw_err(cx, 0, o, f , ##args)
 708 
 709 #endif