V4L/DVB (10276): cx18, cx2341x, ivtv: Add AC-3 audio encoding control to cx18
[safe/jmp/linux-2.6] / drivers / media / video / cx18 / cx18-driver.h
index f06290d..36809dd 100644 (file)
@@ -4,6 +4,7 @@
  *  Derived from ivtv-driver.h
  *
  *  Copyright (C) 2007  Hans Verkuil <hverkuil@xs4all.nl>
+ *  Copyright (C) 2008  Andy Walls <awalls@radix.net>
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
 #define CX18_DEFAULT_ENC_VBI_BUFFERS 1
 #define CX18_DEFAULT_ENC_PCM_BUFFERS 1
 
+/* Maximum firmware DMA buffers per stream */
+#define CX18_MAX_FW_MDLS_PER_STREAM 63
+
+/* DMA buffer, default size in kB allocated */
+#define CX18_DEFAULT_ENC_TS_BUFSIZE   32
+#define CX18_DEFAULT_ENC_MPG_BUFSIZE  32
+#define CX18_DEFAULT_ENC_IDX_BUFSIZE  32
+#define CX18_DEFAULT_ENC_YUV_BUFSIZE 128
+/* Default VBI bufsize based on standards supported by card tuner for now */
+#define CX18_DEFAULT_ENC_PCM_BUFSIZE   4
+
 /* i2c stuff */
 #define I2C_CLIENTS_MAX 16
 
@@ -243,7 +255,8 @@ struct cx18_scb; /* forward reference */
 
 
 #define CX18_MAX_MDL_ACKS 2
-#define CX18_MAX_EPU_WORK_ORDERS 70 /* CPU_DE_RELEASE_MDL bursts 63 commands */
+#define CX18_MAX_EPU_WORK_ORDERS (CX18_MAX_FW_MDLS_PER_STREAM + 7)
+/* CPU_DE_RELEASE_MDL can burst CX18_MAX_FW_MDLS_PER_STREAM orders in a group */
 
 #define CX18_F_EWO_MB_STALE_UPON_RECEIPT 0x1
 #define CX18_F_EWO_MB_STALE_WHILE_PROC   0x2
@@ -288,8 +301,8 @@ struct cx18_stream {
 
        /* Buffer Queues */
        struct cx18_queue q_free;       /* free buffers */
-       struct cx18_queue q_full;       /* full buffers */
-       struct cx18_queue q_io;         /* waiting for I/O */
+       struct cx18_queue q_busy;       /* busy buffers - in use by firmware */
+       struct cx18_queue q_full;       /* full buffers - data for user apps */
 
        /* DVB / Digital Transport */
        struct cx18_dvb dvb;
@@ -367,11 +380,6 @@ struct cx18_i2c_algo_callback_data {
 };
 
 #define CX18_MAX_MMIO_WR_RETRIES 10
-#define CX18_MAX_MB_ACK_DELAY 100
-
-struct cx18_mbox_stats {
-       atomic_t mb_ack_delay[CX18_MAX_MB_ACK_DELAY+1];
-};
 
 /* Struct to hold info about cx18 cards */
 struct cx18 {
@@ -405,13 +413,14 @@ struct cx18 {
 
        /* dualwatch */
        unsigned long dualwatch_jiffies;
-       u16 dualwatch_stereo_mode;
+       u32 dualwatch_stereo_mode;
 
        /* Digitizer type */
        int digitizer;          /* 0x00EF = saa7114 0x00FO = saa7115 0x0106 = mic */
 
        struct mutex serialize_lock;    /* mutex used to serialize open/close/start/stop/ioctl operations */
        struct cx18_options options;    /* User options */
+       int stream_buffers[CX18_MAX_STREAMS]; /* # of buffers for each stream */
        int stream_buf_size[CX18_MAX_STREAMS]; /* Stream buffer size */
        struct cx18_stream streams[CX18_MAX_STREAMS];   /* Stream data */
        unsigned long i_flags;  /* global cx18 flags */
@@ -451,6 +460,7 @@ struct cx18 {
        u32 sw2_irq_mask;
        u32 hw2_irq_mask;
 
+       struct workqueue_struct *work_queue;
        struct cx18_epu_work_order epu_work_order[CX18_MAX_EPU_WORK_ORDERS];
        char epu_debug_str[256]; /* CX18_EPU_DEBUG is rare: use shared space */
 
@@ -467,9 +477,6 @@ struct cx18 {
        u32 gpio_val;
        struct mutex gpio_lock;
 
-       /* Statistics */
-       struct cx18_mbox_stats mbox_stats;
-
        /* v4l2 and User settings */
 
        /* codec settings */
@@ -485,7 +492,6 @@ extern struct cx18 *cx18_cards[];
 extern int cx18_cards_active;
 extern int cx18_first_minor;
 extern spinlock_t cx18_cards_lock;
-extern struct workqueue_struct *cx18_work_queue;
 
 /*==============Prototypes==================*/
 
@@ -499,4 +505,10 @@ void cx18_read_eeprom(struct cx18 *cx, struct tveeprom *tv);
 /* First-open initialization: load firmware, etc. */
 int cx18_init_on_first_open(struct cx18 *cx);
 
+/* Test if the current VBI mode is raw (1) or sliced (0) */
+static inline int cx18_raw_vbi(const struct cx18 *cx)
+{
+       return cx->vbi.in.type == V4L2_BUF_TYPE_VBI_CAPTURE;
+}
+
 #endif /* CX18_DRIVER_H */