linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / media / dvb / dvb-core / dmxdev.h
index d2bee9f..fd72920 100644 (file)
 #include <linux/wait.h>
 #include <linux/fs.h>
 #include <linux/string.h>
-#include <linux/mutex.h>
+#include <asm/semaphore.h>
 
 #include <linux/dvb/dmx.h>
 
 #include "dvbdev.h"
 #include "demux.h"
-#include "dvb_ringbuffer.h"
 
-enum dmxdev_type {
+enum dmxdevype {
        DMXDEV_TYPE_NONE,
        DMXDEV_TYPE_SEC,
        DMXDEV_TYPE_PES,
@@ -53,7 +52,18 @@ enum dmxdev_state {
        DMXDEV_STATE_TIMEDOUT
 };
 
+struct dmxdev_buffer {
+       u8 *data;
+       int size;
+       int pread;
+       int pwrite;
+       wait_queue_head_t queue;
+       int error;
+};
+
 struct dmxdev_filter {
+       struct dvb_device *dvbdev;
+
        union {
                struct dmx_section_filter *sec;
        } filter;
@@ -68,17 +78,26 @@ struct dmxdev_filter {
                struct dmx_pes_filter_params pes;
        } params;
 
-       enum dmxdev_type type;
+       int type;
        enum dmxdev_state state;
        struct dmxdev *dev;
-       struct dvb_ringbuffer buffer;
+       struct dmxdev_buffer buffer;
 
-       struct mutex mutex;
+       struct semaphore mutex;
 
        /* only for sections */
        struct timer_list timer;
        int todo;
        u8 secheader[3];
+
+       u16 pid;
+};
+
+
+struct dmxdev_dvr {
+       int state;
+       struct dmxdev *dev;
+       struct dmxdev_buffer buffer;
 };
 
 
@@ -87,6 +106,7 @@ struct dmxdev {
        struct dvb_device *dvr_dvbdev;
 
        struct dmxdev_filter *filter;
+       struct dmxdev_dvr *dvr;
        struct dmx_demux *demux;
 
        int filternum;
@@ -94,10 +114,10 @@ struct dmxdev {
 #define DMXDEV_CAP_DUPLEX 1
        struct dmx_frontend *dvr_orig_fe;
 
-       struct dvb_ringbuffer dvr_buffer;
+       struct dmxdev_buffer dvr_buffer;
 #define DVR_BUFFER_SIZE (10*188*1024)
 
-       struct mutex mutex;
+       struct semaphore mutex;
        spinlock_t lock;
 };