#include <linux/slab.h>
#include <linux/vmalloc.h>
#include <linux/module.h>
+#include <linux/moduleparam.h>
#include <linux/sched.h>
#include <linux/poll.h>
#include <linux/ioctl.h>
#include <asm/system.h>
#include "dmxdev.h"
-#include "dvb_functions.h"
-MODULE_PARM(debug,"i");
-static int debug = 0;
+static int debug;
+
+module_param(debug, int, 0644);
+MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");
#define dprintk if (debug) printk
-inline struct dmxdev_filter *
+static inline struct dmxdev_filter *
dvb_dmxdev_file_to_filter(struct file *file)
{
return (struct dmxdev_filter *) file->private_data;
}
-inline struct dmxdev_dvr *
-dvb_dmxdev_file_to_dvr(struct dmxdev *dmxdev, struct file *file)
-{
- return (struct dmxdev_dvr *) file->private_data;
-}
-
static inline void dvb_dmxdev_buffer_init(struct dmxdev_buffer *buffer)
{
- buffer->data=0;
+ buffer->data=NULL;
buffer->size=8192;
buffer->pread=0;
buffer->pwrite=0;
}
static ssize_t dvb_dmxdev_buffer_read(struct dmxdev_buffer *src,
- int non_blocking, char *buf, size_t count, loff_t *ppos)
+ int non_blocking, char __user *buf, size_t count, loff_t *ppos)
{
unsigned long todo=count;
int split, avail, error;
head=demux->get_frontends(demux);
if (!head)
- return 0;
+ return NULL;
list_for_each(pos, head)
if (DMX_FE_ENTRY(pos)->source==type)
return DMX_FE_ENTRY(pos);
- return 0;
+ return NULL;
}
static inline void dvb_dmxdev_dvr_state_set(struct dmxdev_dvr *dmxdevdvr, int state)
void *mem=dmxdev->dvr_buffer.data;
mb();
spin_lock_irq(&dmxdev->lock);
- dmxdev->dvr_buffer.data=0;
+ dmxdev->dvr_buffer.data=NULL;
spin_unlock_irq(&dmxdev->lock);
vfree(mem);
}
return 0;
}
-static ssize_t dvb_dvr_write(struct file *file, const char *buf,
+static ssize_t dvb_dvr_write(struct file *file, const char __user *buf,
size_t count, loff_t *ppos)
{
struct dvb_device *dvbdev=(struct dvb_device *) file->private_data;
return ret;
}
-static ssize_t dvb_dvr_read(struct file *file, char *buf, size_t count,
+static ssize_t dvb_dvr_read(struct file *file, char __user *buf, size_t count,
loff_t *ppos)
{
struct dvb_device *dvbdev=(struct dvb_device *) file->private_data;
return -EBUSY;
spin_lock_irq(&dmxdevfilter->dev->lock);
mem=buf->data;
- buf->data=0;
+ buf->data=NULL;
buf->size=size;
buf->pwrite=buf->pread=0;
spin_unlock_irq(&dmxdevfilter->dev->lock);
release_filter(dmxdevfilter->feed.sec,
dmxdevfilter->filter.sec);
dvb_dmxdev_feed_restart(dmxdevfilter);
- dmxdevfilter->feed.sec=0;
+ dmxdevfilter->feed.sec=NULL;
break;
case DMXDEV_TYPE_PES:
if (!dmxdevfilter->feed.ts)
dmxdevfilter->dev->demux->
release_ts_feed(dmxdevfilter->dev->demux,
dmxdevfilter->feed.ts);
- dmxdevfilter->feed.ts=0;
+ dmxdevfilter->feed.ts=NULL;
break;
default:
if (dmxdevfilter->state==DMXDEV_STATE_ALLOCATED)
struct dmx_section_filter **secfilter=&filter->filter.sec;
struct dmx_section_feed **secfeed=&filter->feed.sec;
- *secfilter=0;
- *secfeed=0;
+ *secfilter=NULL;
+ *secfeed=NULL;
/* find active filter/feed with same PID */
for (i=0; i<dmxdev->filternum; i++) {
enum dmx_ts_pes ts_pes;
struct dmx_ts_feed **tsfeed = &filter->feed.ts;
- filter->feed.ts = 0;
+ filter->feed.ts = NULL;
otype=para->output;
ts_pes=(enum dmx_ts_pes) para->pes_type;
dvb_dmxdev_buffer_init(&dmxdevfilter->buffer);
dmxdevfilter->type=DMXDEV_TYPE_NONE;
dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_ALLOCATED);
- dmxdevfilter->feed.ts=0;
+ dmxdevfilter->feed.ts=NULL;
init_timer(&dmxdevfilter->timer);
up(&dmxdev->mutex);
void *mem=dmxdevfilter->buffer.data;
spin_lock_irq(&dmxdev->lock);
- dmxdevfilter->buffer.data=0;
+ dmxdevfilter->buffer.data=NULL;
spin_unlock_irq(&dmxdev->lock);
vfree(mem);
}
}
static ssize_t dvb_dmxdev_read_sec(struct dmxdev_filter *dfil,
- struct file *file, char *buf, size_t count, loff_t *ppos)
+ struct file *file, char __user *buf, size_t count, loff_t *ppos)
{
int result, hcount;
int done=0;
}
-ssize_t
-dvb_demux_read(struct file *file, char *buf, size_t count, loff_t *ppos)
+static ssize_t
+dvb_demux_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)
{
struct dmxdev_filter *dmxdevfilter=dvb_dmxdev_file_to_filter(file);
int ret=0;
};
static struct dvb_device dvbdev_demux = {
- .priv = 0,
+ .priv = NULL,
.users = 1,
.writers = 1,
.fops = &dvb_demux_fops
};
static struct dvb_device dvbdev_dvr = {
- .priv = 0,
+ .priv = NULL,
.users = 1,
.writers = 1,
.fops = &dvb_dvr_fops
spin_lock_init(&dmxdev->lock);
for (i=0; i<dmxdev->filternum; i++) {
dmxdev->filter[i].dev=dmxdev;
- dmxdev->filter[i].buffer.data=0;
+ dmxdev->filter[i].buffer.data=NULL;
dvb_dmxdev_filter_state_set(&dmxdev->filter[i], DMXDEV_STATE_FREE);
dmxdev->dvr[i].dev=dmxdev;
- dmxdev->dvr[i].buffer.data=0;
+ dmxdev->dvr[i].buffer.data=NULL;
dvb_dmxdev_filter_state_set(&dmxdev->filter[i], DMXDEV_STATE_FREE);
dvb_dmxdev_dvr_state_set(&dmxdev->dvr[i], DMXDEV_STATE_FREE);
}
return 0;
}
+EXPORT_SYMBOL(dvb_dmxdev_init);
void
dvb_dmxdev_release(struct dmxdev *dmxdev)
dvb_unregister_device(dmxdev->dvr_dvbdev);
if (dmxdev->filter) {
vfree(dmxdev->filter);
- dmxdev->filter=0;
+ dmxdev->filter=NULL;
}
if (dmxdev->dvr) {
vfree(dmxdev->dvr);
- dmxdev->dvr=0;
+ dmxdev->dvr=NULL;
}
dmxdev->demux->close(dmxdev->demux);
}
-
+EXPORT_SYMBOL(dvb_dmxdev_release);