V4L/DVB (3438): Optical cleanup for dmxdev.c
Used Lindent, manually changed some line breaks. Removed invalid email addresses, useless casts and useless initialization of return values. Signed-off-by: Andreas Oberritter <obi@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
committed by
Linus Torvalds
parent
bbad7dc548
commit
f705e6e494
@@ -1,9 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
* dmxdev.c - DVB demultiplexer device
|
* dmxdev.c - DVB demultiplexer device
|
||||||
*
|
*
|
||||||
* Copyright (C) 2000 Ralph Metzler <ralph@convergence.de>
|
* Copyright (C) 2000 Ralph Metzler & Marcus Metzler
|
||||||
* & Marcus Metzler <marcus@convergence.de>
|
* for convergence integrated media GmbH
|
||||||
for convergence integrated media GmbH
|
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public License
|
* modify it under the terms of the GNU Lesser General Public License
|
||||||
@@ -32,7 +31,6 @@
|
|||||||
#include <linux/wait.h>
|
#include <linux/wait.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
|
|
||||||
#include "dmxdev.h"
|
#include "dmxdev.h"
|
||||||
|
|
||||||
static int debug;
|
static int debug;
|
||||||
@@ -52,7 +50,8 @@ static inline void dvb_dmxdev_buffer_init(struct dmxdev_buffer *buffer)
|
|||||||
init_waitqueue_head(&buffer->queue);
|
init_waitqueue_head(&buffer->queue);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int dvb_dmxdev_buffer_write(struct dmxdev_buffer *buf, const u8 *src, int len)
|
static inline int dvb_dmxdev_buffer_write(struct dmxdev_buffer *buf,
|
||||||
|
const u8 *src, int len)
|
||||||
{
|
{
|
||||||
int split;
|
int split;
|
||||||
int free;
|
int free;
|
||||||
@@ -87,7 +86,8 @@ static inline int dvb_dmxdev_buffer_write(struct dmxdev_buffer *buf, const u8 *s
|
|||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t dvb_dmxdev_buffer_read(struct dmxdev_buffer *src,
|
static ssize_t dvb_dmxdev_buffer_read(struct dmxdev_buffer *src,
|
||||||
int non_blocking, char __user *buf, size_t count, loff_t *ppos)
|
int non_blocking, char __user *buf,
|
||||||
|
size_t count, loff_t *ppos)
|
||||||
{
|
{
|
||||||
unsigned long todo = count;
|
unsigned long todo = count;
|
||||||
int split, avail, error;
|
int split, avail, error;
|
||||||
@@ -269,14 +269,16 @@ static ssize_t dvb_dvr_read(struct file *file, char __user *buf, size_t count,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void dvb_dmxdev_filter_state_set(struct dmxdev_filter *dmxdevfilter, int state)
|
static inline void dvb_dmxdev_filter_state_set(struct dmxdev_filter
|
||||||
|
*dmxdevfilter, int state)
|
||||||
{
|
{
|
||||||
spin_lock_irq(&dmxdevfilter->dev->lock);
|
spin_lock_irq(&dmxdevfilter->dev->lock);
|
||||||
dmxdevfilter->state = state;
|
dmxdevfilter->state = state;
|
||||||
spin_unlock_irq(&dmxdevfilter->dev->lock);
|
spin_unlock_irq(&dmxdevfilter->dev->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dvb_dmxdev_set_buffer_size(struct dmxdev_filter *dmxdevfilter, unsigned long size)
|
static int dvb_dmxdev_set_buffer_size(struct dmxdev_filter *dmxdevfilter,
|
||||||
|
unsigned long size)
|
||||||
{
|
{
|
||||||
struct dmxdev_buffer *buf = &dmxdevfilter->buffer;
|
struct dmxdev_buffer *buf = &dmxdevfilter->buffer;
|
||||||
void *mem;
|
void *mem;
|
||||||
@@ -323,14 +325,16 @@ static void dvb_dmxdev_filter_timer(struct dmxdev_filter *dmxdevfilter)
|
|||||||
if (para->timeout) {
|
if (para->timeout) {
|
||||||
dmxdevfilter->timer.function = dvb_dmxdev_filter_timeout;
|
dmxdevfilter->timer.function = dvb_dmxdev_filter_timeout;
|
||||||
dmxdevfilter->timer.data = (unsigned long)dmxdevfilter;
|
dmxdevfilter->timer.data = (unsigned long)dmxdevfilter;
|
||||||
dmxdevfilter->timer.expires=jiffies+1+(HZ/2+HZ*para->timeout)/1000;
|
dmxdevfilter->timer.expires =
|
||||||
|
jiffies + 1 + (HZ / 2 + HZ * para->timeout) / 1000;
|
||||||
add_timer(&dmxdevfilter->timer);
|
add_timer(&dmxdevfilter->timer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dvb_dmxdev_section_callback(const u8 *buffer1, size_t buffer1_len,
|
static int dvb_dmxdev_section_callback(const u8 *buffer1, size_t buffer1_len,
|
||||||
const u8 *buffer2, size_t buffer2_len,
|
const u8 *buffer2, size_t buffer2_len,
|
||||||
struct dmx_section_filter *filter, enum dmx_success success)
|
struct dmx_section_filter *filter,
|
||||||
|
enum dmx_success success)
|
||||||
{
|
{
|
||||||
struct dmxdev_filter *dmxdevfilter = filter->priv;
|
struct dmxdev_filter *dmxdevfilter = filter->priv;
|
||||||
int ret;
|
int ret;
|
||||||
@@ -347,11 +351,12 @@ static int dvb_dmxdev_section_callback(const u8 *buffer1, size_t buffer1_len,
|
|||||||
del_timer(&dmxdevfilter->timer);
|
del_timer(&dmxdevfilter->timer);
|
||||||
dprintk("dmxdev: section callback %02x %02x %02x %02x %02x %02x\n",
|
dprintk("dmxdev: section callback %02x %02x %02x %02x %02x %02x\n",
|
||||||
buffer1[0], buffer1[1],
|
buffer1[0], buffer1[1],
|
||||||
buffer1[2], buffer1[3],
|
buffer1[2], buffer1[3], buffer1[4], buffer1[5]);
|
||||||
buffer1[4], buffer1[5]);
|
ret = dvb_dmxdev_buffer_write(&dmxdevfilter->buffer, buffer1,
|
||||||
ret=dvb_dmxdev_buffer_write(&dmxdevfilter->buffer, buffer1, buffer1_len);
|
buffer1_len);
|
||||||
if (ret == buffer1_len) {
|
if (ret == buffer1_len) {
|
||||||
ret=dvb_dmxdev_buffer_write(&dmxdevfilter->buffer, buffer2, buffer2_len);
|
ret = dvb_dmxdev_buffer_write(&dmxdevfilter->buffer, buffer2,
|
||||||
|
buffer2_len);
|
||||||
}
|
}
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dmxdevfilter->buffer.pwrite = dmxdevfilter->buffer.pread;
|
dmxdevfilter->buffer.pwrite = dmxdevfilter->buffer.pread;
|
||||||
@@ -366,7 +371,8 @@ static int dvb_dmxdev_section_callback(const u8 *buffer1, size_t buffer1_len,
|
|||||||
|
|
||||||
static int dvb_dmxdev_ts_callback(const u8 *buffer1, size_t buffer1_len,
|
static int dvb_dmxdev_ts_callback(const u8 *buffer1, size_t buffer1_len,
|
||||||
const u8 *buffer2, size_t buffer2_len,
|
const u8 *buffer2, size_t buffer2_len,
|
||||||
struct dmx_ts_feed *feed, enum dmx_success success)
|
struct dmx_ts_feed *feed,
|
||||||
|
enum dmx_success success)
|
||||||
{
|
{
|
||||||
struct dmxdev_filter *dmxdevfilter = feed->priv;
|
struct dmxdev_filter *dmxdevfilter = feed->priv;
|
||||||
struct dmxdev_buffer *buffer;
|
struct dmxdev_buffer *buffer;
|
||||||
@@ -399,9 +405,7 @@ static int dvb_dmxdev_ts_callback(const u8 *buffer1, size_t buffer1_len,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* stop feed but only mark the specified filter as stopped (state set) */
|
/* stop feed but only mark the specified filter as stopped (state set) */
|
||||||
|
|
||||||
static int dvb_dmxdev_feed_stop(struct dmxdev_filter *dmxdevfilter)
|
static int dvb_dmxdev_feed_stop(struct dmxdev_filter *dmxdevfilter)
|
||||||
{
|
{
|
||||||
dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_SET);
|
dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_SET);
|
||||||
@@ -420,9 +424,7 @@ static int dvb_dmxdev_feed_stop(struct dmxdev_filter *dmxdevfilter)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* start feed associated with the specified filter */
|
/* start feed associated with the specified filter */
|
||||||
|
|
||||||
static int dvb_dmxdev_feed_start(struct dmxdev_filter *filter)
|
static int dvb_dmxdev_feed_start(struct dmxdev_filter *filter)
|
||||||
{
|
{
|
||||||
dvb_dmxdev_filter_state_set(filter, DMXDEV_STATE_GO);
|
dvb_dmxdev_filter_state_set(filter, DMXDEV_STATE_GO);
|
||||||
@@ -430,10 +432,8 @@ static int dvb_dmxdev_feed_start(struct dmxdev_filter *filter)
|
|||||||
switch (filter->type) {
|
switch (filter->type) {
|
||||||
case DMXDEV_TYPE_SEC:
|
case DMXDEV_TYPE_SEC:
|
||||||
return filter->feed.sec->start_filtering(filter->feed.sec);
|
return filter->feed.sec->start_filtering(filter->feed.sec);
|
||||||
break;
|
|
||||||
case DMXDEV_TYPE_PES:
|
case DMXDEV_TYPE_PES:
|
||||||
return filter->feed.ts->start_filtering(filter->feed.ts);
|
return filter->feed.ts->start_filtering(filter->feed.ts);
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
@@ -441,10 +441,8 @@ static int dvb_dmxdev_feed_start(struct dmxdev_filter *filter)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* restart section feed if it has filters left associated with it,
|
/* restart section feed if it has filters left associated with it,
|
||||||
otherwise release the feed */
|
otherwise release the feed */
|
||||||
|
|
||||||
static int dvb_dmxdev_feed_restart(struct dmxdev_filter *filter)
|
static int dvb_dmxdev_feed_restart(struct dmxdev_filter *filter)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@@ -459,7 +457,8 @@ static int dvb_dmxdev_feed_restart(struct dmxdev_filter *filter)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
filter->dev->demux->release_section_feed(dmxdev->demux, filter->feed.sec);
|
filter->dev->demux->release_section_feed(dmxdev->demux,
|
||||||
|
filter->feed.sec);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -542,6 +541,7 @@ static int dvb_dmxdev_filter_start(struct dmxdev_filter *filter)
|
|||||||
*secfilter = NULL;
|
*secfilter = NULL;
|
||||||
*secfeed = NULL;
|
*secfeed = NULL;
|
||||||
|
|
||||||
|
|
||||||
/* find active filter/feed with same PID */
|
/* find active filter/feed with same PID */
|
||||||
for (i = 0; i < dmxdev->filternum; i++) {
|
for (i = 0; i < dmxdev->filternum; i++) {
|
||||||
if (dmxdev->filter[i].state >= DMXDEV_STATE_GO &&
|
if (dmxdev->filter[i].state >= DMXDEV_STATE_GO &&
|
||||||
@@ -565,7 +565,6 @@ static int dvb_dmxdev_filter_start(struct dmxdev_filter *filter)
|
|||||||
|
|
||||||
ret = (*secfeed)->set(*secfeed, para->pid, 32768,
|
ret = (*secfeed)->set(*secfeed, para->pid, 32768,
|
||||||
(para->flags & DMX_CHECK_CRC) ? 1 : 0);
|
(para->flags & DMX_CHECK_CRC) ? 1 : 0);
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
printk("DVB (%s): could not set feed\n",
|
printk("DVB (%s): could not set feed\n",
|
||||||
__FUNCTION__);
|
__FUNCTION__);
|
||||||
@@ -577,7 +576,6 @@ static int dvb_dmxdev_filter_start(struct dmxdev_filter *filter)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ret = (*secfeed)->allocate_filter(*secfeed, secfilter);
|
ret = (*secfeed)->allocate_filter(*secfeed, secfilter);
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dvb_dmxdev_feed_restart(filter);
|
dvb_dmxdev_feed_restart(filter);
|
||||||
filter->feed.sec->start_filtering(*secfeed);
|
filter->feed.sec->start_filtering(*secfeed);
|
||||||
@@ -603,14 +601,12 @@ static int dvb_dmxdev_filter_start(struct dmxdev_filter *filter)
|
|||||||
filter->todo = 0;
|
filter->todo = 0;
|
||||||
|
|
||||||
ret = filter->feed.sec->start_filtering(filter->feed.sec);
|
ret = filter->feed.sec->start_filtering(filter->feed.sec);
|
||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
dvb_dmxdev_filter_timer(filter);
|
dvb_dmxdev_filter_timer(filter);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case DMXDEV_TYPE_PES:
|
case DMXDEV_TYPE_PES:
|
||||||
{
|
{
|
||||||
struct timespec timeout = { 0 };
|
struct timespec timeout = { 0 };
|
||||||
@@ -643,20 +639,20 @@ static int dvb_dmxdev_filter_start(struct dmxdev_filter *filter)
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
(*tsfeed)->priv = (void *) filter;
|
(*tsfeed)->priv = filter;
|
||||||
|
|
||||||
ret = (*tsfeed)->set(*tsfeed, para->pid, ts_type, ts_pes,
|
ret = (*tsfeed)->set(*tsfeed, para->pid, ts_type, ts_pes,
|
||||||
32768, timeout);
|
32768, timeout);
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dmxdev->demux->release_ts_feed(dmxdev->demux, *tsfeed);
|
dmxdev->demux->release_ts_feed(dmxdev->demux,
|
||||||
|
*tsfeed);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = filter->feed.ts->start_filtering(filter->feed.ts);
|
ret = filter->feed.ts->start_filtering(filter->feed.ts);
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dmxdev->demux->release_ts_feed(dmxdev->demux, *tsfeed);
|
dmxdev->demux->release_ts_feed(dmxdev->demux,
|
||||||
|
*tsfeed);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -706,8 +702,8 @@ static int dvb_demux_open(struct inode *inode, struct file *file)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int dvb_dmxdev_filter_free(struct dmxdev *dmxdev,
|
||||||
static int dvb_dmxdev_filter_free(struct dmxdev *dmxdev, struct dmxdev_filter *dmxdevfilter)
|
struct dmxdev_filter *dmxdevfilter)
|
||||||
{
|
{
|
||||||
if (mutex_lock_interruptible(&dmxdev->mutex))
|
if (mutex_lock_interruptible(&dmxdev->mutex))
|
||||||
return -ERESTARTSYS;
|
return -ERESTARTSYS;
|
||||||
@@ -744,7 +740,6 @@ static inline void invert_mode(dmx_filter_t *filter)
|
|||||||
filter->mode[i] ^= 0xff;
|
filter->mode[i] ^= 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int dvb_dmxdev_filter_set(struct dmxdev *dmxdev,
|
static int dvb_dmxdev_filter_set(struct dmxdev *dmxdev,
|
||||||
struct dmxdev_filter *dmxdevfilter,
|
struct dmxdev_filter *dmxdevfilter,
|
||||||
struct dmx_sct_filter_params *params)
|
struct dmx_sct_filter_params *params)
|
||||||
@@ -775,7 +770,8 @@ static int dvb_dmxdev_pes_filter_set(struct dmxdev *dmxdev,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
dmxdevfilter->type = DMXDEV_TYPE_PES;
|
dmxdevfilter->type = DMXDEV_TYPE_PES;
|
||||||
memcpy(&dmxdevfilter->params, params, sizeof(struct dmx_pes_filter_params));
|
memcpy(&dmxdevfilter->params, params,
|
||||||
|
sizeof(struct dmx_pes_filter_params));
|
||||||
|
|
||||||
dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_SET);
|
dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_SET);
|
||||||
|
|
||||||
@@ -786,7 +782,8 @@ static int dvb_dmxdev_pes_filter_set(struct dmxdev *dmxdev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t dvb_dmxdev_read_sec(struct dmxdev_filter *dfil,
|
static ssize_t dvb_dmxdev_read_sec(struct dmxdev_filter *dfil,
|
||||||
struct file *file, char __user *buf, size_t count, loff_t *ppos)
|
struct file *file, char __user *buf,
|
||||||
|
size_t count, loff_t *ppos)
|
||||||
{
|
{
|
||||||
int result, hcount;
|
int result, hcount;
|
||||||
int done = 0;
|
int done = 0;
|
||||||
@@ -795,7 +792,8 @@ static ssize_t dvb_dmxdev_read_sec(struct dmxdev_filter *dfil,
|
|||||||
hcount = 3 + dfil->todo;
|
hcount = 3 + dfil->todo;
|
||||||
if (hcount > count)
|
if (hcount > count)
|
||||||
hcount = count;
|
hcount = count;
|
||||||
result=dvb_dmxdev_buffer_read(&dfil->buffer, file->f_flags&O_NONBLOCK,
|
result = dvb_dmxdev_buffer_read(&dfil->buffer,
|
||||||
|
file->f_flags & O_NONBLOCK,
|
||||||
buf, hcount, ppos);
|
buf, hcount, ppos);
|
||||||
if (result < 0) {
|
if (result < 0) {
|
||||||
dfil->todo = 0;
|
dfil->todo = 0;
|
||||||
@@ -815,7 +813,8 @@ static ssize_t dvb_dmxdev_read_sec(struct dmxdev_filter *dfil,
|
|||||||
}
|
}
|
||||||
if (count > dfil->todo)
|
if (count > dfil->todo)
|
||||||
count = dfil->todo;
|
count = dfil->todo;
|
||||||
result=dvb_dmxdev_buffer_read(&dfil->buffer, file->f_flags&O_NONBLOCK,
|
result = dvb_dmxdev_buffer_read(&dfil->buffer,
|
||||||
|
file->f_flags & O_NONBLOCK,
|
||||||
buf, count, ppos);
|
buf, count, ppos);
|
||||||
if (result < 0)
|
if (result < 0)
|
||||||
return result;
|
return result;
|
||||||
@@ -823,12 +822,12 @@ static ssize_t dvb_dmxdev_read_sec(struct dmxdev_filter *dfil,
|
|||||||
return (result + done);
|
return (result + done);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static ssize_t
|
static ssize_t
|
||||||
dvb_demux_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)
|
dvb_demux_read(struct file *file, char __user *buf, size_t count,
|
||||||
|
loff_t *ppos)
|
||||||
{
|
{
|
||||||
struct dmxdev_filter *dmxdevfilter = file->private_data;
|
struct dmxdev_filter *dmxdevfilter = file->private_data;
|
||||||
int ret=0;
|
int ret;
|
||||||
|
|
||||||
if (mutex_lock_interruptible(&dmxdevfilter->mutex))
|
if (mutex_lock_interruptible(&dmxdevfilter->mutex))
|
||||||
return -ERESTARTSYS;
|
return -ERESTARTSYS;
|
||||||
@@ -844,7 +843,6 @@ dvb_demux_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int dvb_demux_do_ioctl(struct inode *inode, struct file *file,
|
static int dvb_demux_do_ioctl(struct inode *inode, struct file *file,
|
||||||
unsigned int cmd, void *parg)
|
unsigned int cmd, void *parg)
|
||||||
{
|
{
|
||||||
@@ -883,8 +881,7 @@ static int dvb_demux_do_ioctl(struct inode *inode, struct file *file,
|
|||||||
mutex_unlock(&dmxdev->mutex);
|
mutex_unlock(&dmxdev->mutex);
|
||||||
return -ERESTARTSYS;
|
return -ERESTARTSYS;
|
||||||
}
|
}
|
||||||
ret = dvb_dmxdev_filter_set(dmxdev, dmxdevfilter,
|
ret = dvb_dmxdev_filter_set(dmxdev, dmxdevfilter, parg);
|
||||||
(struct dmx_sct_filter_params *)parg);
|
|
||||||
mutex_unlock(&dmxdevfilter->mutex);
|
mutex_unlock(&dmxdevfilter->mutex);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -893,8 +890,7 @@ static int dvb_demux_do_ioctl(struct inode *inode, struct file *file,
|
|||||||
mutex_unlock(&dmxdev->mutex);
|
mutex_unlock(&dmxdev->mutex);
|
||||||
return -ERESTARTSYS;
|
return -ERESTARTSYS;
|
||||||
}
|
}
|
||||||
ret=dvb_dmxdev_pes_filter_set(dmxdev, dmxdevfilter,
|
ret = dvb_dmxdev_pes_filter_set(dmxdev, dmxdevfilter, parg);
|
||||||
(struct dmx_pes_filter_params *)parg);
|
|
||||||
mutex_unlock(&dmxdevfilter->mutex);
|
mutex_unlock(&dmxdevfilter->mutex);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -915,7 +911,7 @@ static int dvb_demux_do_ioctl(struct inode *inode, struct file *file,
|
|||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
dmxdev->demux->get_pes_pids(dmxdev->demux, (u16 *)parg);
|
dmxdev->demux->get_pes_pids(dmxdev->demux, parg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DMX_GET_CAPS:
|
case DMX_GET_CAPS:
|
||||||
@@ -947,6 +943,7 @@ static int dvb_demux_do_ioctl(struct inode *inode, struct file *file,
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
mutex_unlock(&dmxdev->mutex);
|
mutex_unlock(&dmxdev->mutex);
|
||||||
return ret;
|
return ret;
|
||||||
@@ -958,7 +955,6 @@ static int dvb_demux_ioctl(struct inode *inode, struct file *file,
|
|||||||
return dvb_usercopy(inode, file, cmd, arg, dvb_demux_do_ioctl);
|
return dvb_usercopy(inode, file, cmd, arg, dvb_demux_do_ioctl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static unsigned int dvb_demux_poll(struct file *file, poll_table *wait)
|
static unsigned int dvb_demux_poll(struct file *file, poll_table *wait)
|
||||||
{
|
{
|
||||||
struct dmxdev_filter *dmxdevfilter = file->private_data;
|
struct dmxdev_filter *dmxdevfilter = file->private_data;
|
||||||
@@ -983,7 +979,6 @@ static unsigned int dvb_demux_poll (struct file *file, poll_table *wait)
|
|||||||
return mask;
|
return mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int dvb_demux_release(struct inode *inode, struct file *file)
|
static int dvb_demux_release(struct inode *inode, struct file *file)
|
||||||
{
|
{
|
||||||
struct dmxdev_filter *dmxdevfilter = file->private_data;
|
struct dmxdev_filter *dmxdevfilter = file->private_data;
|
||||||
@@ -992,7 +987,6 @@ static int dvb_demux_release(struct inode *inode, struct file *file)
|
|||||||
return dvb_dmxdev_filter_free(dmxdev, dmxdevfilter);
|
return dvb_dmxdev_filter_free(dmxdev, dmxdevfilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static struct file_operations dvb_demux_fops = {
|
static struct file_operations dvb_demux_fops = {
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
.read = dvb_demux_read,
|
.read = dvb_demux_read,
|
||||||
@@ -1002,7 +996,6 @@ static struct file_operations dvb_demux_fops = {
|
|||||||
.poll = dvb_demux_poll,
|
.poll = dvb_demux_poll,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static struct dvb_device dvbdev_demux = {
|
static struct dvb_device dvbdev_demux = {
|
||||||
.priv = NULL,
|
.priv = NULL,
|
||||||
.users = 1,
|
.users = 1,
|
||||||
@@ -1010,14 +1003,12 @@ static struct dvb_device dvbdev_demux = {
|
|||||||
.fops = &dvb_demux_fops
|
.fops = &dvb_demux_fops
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static int dvb_dvr_do_ioctl(struct inode *inode, struct file *file,
|
static int dvb_dvr_do_ioctl(struct inode *inode, struct file *file,
|
||||||
unsigned int cmd, void *parg)
|
unsigned int cmd, void *parg)
|
||||||
{
|
{
|
||||||
struct dvb_device *dvbdev = file->private_data;
|
struct dvb_device *dvbdev = file->private_data;
|
||||||
struct dmxdev *dmxdev = dvbdev->priv;
|
struct dmxdev *dmxdev = dvbdev->priv;
|
||||||
|
int ret;
|
||||||
int ret=0;
|
|
||||||
|
|
||||||
if (mutex_lock_interruptible(&dmxdev->mutex))
|
if (mutex_lock_interruptible(&dmxdev->mutex))
|
||||||
return -ERESTARTSYS;
|
return -ERESTARTSYS;
|
||||||
@@ -1030,19 +1021,18 @@ static int dvb_dvr_do_ioctl(struct inode *inode, struct file *file,
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
mutex_unlock(&dmxdev->mutex);
|
mutex_unlock(&dmxdev->mutex);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int dvb_dvr_ioctl(struct inode *inode, struct file *file,
|
static int dvb_dvr_ioctl(struct inode *inode, struct file *file,
|
||||||
unsigned int cmd, unsigned long arg)
|
unsigned int cmd, unsigned long arg)
|
||||||
{
|
{
|
||||||
return dvb_usercopy(inode, file, cmd, arg, dvb_dvr_do_ioctl);
|
return dvb_usercopy(inode, file, cmd, arg, dvb_dvr_do_ioctl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static unsigned int dvb_dvr_poll(struct file *file, poll_table *wait)
|
static unsigned int dvb_dvr_poll(struct file *file, poll_table *wait)
|
||||||
{
|
{
|
||||||
struct dvb_device *dvbdev = file->private_data;
|
struct dvb_device *dvbdev = file->private_data;
|
||||||
@@ -1065,7 +1055,6 @@ static unsigned int dvb_dvr_poll (struct file *file, poll_table *wait)
|
|||||||
return mask;
|
return mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static struct file_operations dvb_dvr_fops = {
|
static struct file_operations dvb_dvr_fops = {
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
.read = dvb_dvr_read,
|
.read = dvb_dvr_read,
|
||||||
@@ -1083,8 +1072,7 @@ static struct dvb_device dvbdev_dvr = {
|
|||||||
.fops = &dvb_dvr_fops
|
.fops = &dvb_dvr_fops
|
||||||
};
|
};
|
||||||
|
|
||||||
int
|
int dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *dvb_adapter)
|
||||||
dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *dvb_adapter)
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -1100,20 +1088,23 @@ dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *dvb_adapter)
|
|||||||
for (i = 0; i < dmxdev->filternum; i++) {
|
for (i = 0; i < dmxdev->filternum; i++) {
|
||||||
dmxdev->filter[i].dev = dmxdev;
|
dmxdev->filter[i].dev = dmxdev;
|
||||||
dmxdev->filter[i].buffer.data = NULL;
|
dmxdev->filter[i].buffer.data = NULL;
|
||||||
dvb_dmxdev_filter_state_set(&dmxdev->filter[i], DMXDEV_STATE_FREE);
|
dvb_dmxdev_filter_state_set(&dmxdev->filter[i],
|
||||||
|
DMXDEV_STATE_FREE);
|
||||||
}
|
}
|
||||||
|
|
||||||
dvb_register_device(dvb_adapter, &dmxdev->dvbdev, &dvbdev_demux, dmxdev, DVB_DEVICE_DEMUX);
|
dvb_register_device(dvb_adapter, &dmxdev->dvbdev, &dvbdev_demux, dmxdev,
|
||||||
dvb_register_device(dvb_adapter, &dmxdev->dvr_dvbdev, &dvbdev_dvr, dmxdev, DVB_DEVICE_DVR);
|
DVB_DEVICE_DEMUX);
|
||||||
|
dvb_register_device(dvb_adapter, &dmxdev->dvr_dvbdev, &dvbdev_dvr,
|
||||||
|
dmxdev, DVB_DEVICE_DVR);
|
||||||
|
|
||||||
dvb_dmxdev_buffer_init(&dmxdev->dvr_buffer);
|
dvb_dmxdev_buffer_init(&dmxdev->dvr_buffer);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(dvb_dmxdev_init);
|
EXPORT_SYMBOL(dvb_dmxdev_init);
|
||||||
|
|
||||||
void
|
void dvb_dmxdev_release(struct dmxdev *dmxdev)
|
||||||
dvb_dmxdev_release(struct dmxdev *dmxdev)
|
|
||||||
{
|
{
|
||||||
dvb_unregister_device(dmxdev->dvbdev);
|
dvb_unregister_device(dmxdev->dvbdev);
|
||||||
dvb_unregister_device(dmxdev->dvr_dvbdev);
|
dvb_unregister_device(dmxdev->dvr_dvbdev);
|
||||||
@@ -1122,4 +1113,5 @@ dvb_dmxdev_release(struct dmxdev *dmxdev)
|
|||||||
dmxdev->filter = NULL;
|
dmxdev->filter = NULL;
|
||||||
dmxdev->demux->close(dmxdev->demux);
|
dmxdev->demux->close(dmxdev->demux);
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(dvb_dmxdev_release);
|
EXPORT_SYMBOL(dvb_dmxdev_release);
|
||||||
|
Reference in New Issue
Block a user