|
SASC-NG
DVBSoftCAM
|
Go to the source code of this file.
Classes | |
| struct | dvblb_fwdmap |
| struct | dvblb_devinfo |
| struct | dvblb |
Defines | |
| #define | DVBLB_MAX_ADAPTERS 8 |
| #define | DVBLB_STATUS_FRONTEND (1 << DVBLB_FRONTEND) |
| #define | DVBLB_STATUS_DEMUX (1 << DVBLB_DEMUX) |
| #define | DVBLB_STATUS_DVR (1 << DVBLB_DVR) |
| #define | DVBLB_STATUS_ADAPTER 0x0100U |
| #define | DVBLB_STATUS_PROC 0x0200U |
Enumerations | |
| enum | { DVBLB_FRONTEND = 0, DVBLB_DEMUX = 1, DVBLB_DVR = 2, DVBLB_VIDEO = 3, DVBLB_AUDIO = 4, DVBLB_OSD = 5, DVBLB_NUM_DEVS = 6 } |
Functions | |
| int | inuse_filemap (struct dvblb_devinfo *lbdev) |
| int | dvblb_remove_procfs (struct proc_dir_entry *pdir, struct proc_dir_entry *parent) |
| int | dvblb_init_procfs_device (struct dvblb *dvblb, struct dvblb_devinfo *lbdev) |
| int | dvblb_init_procfs_adapter (struct dvblb *dvblb) |
| int | dvblb_remove_procfs_adapter (struct dvblb *dvblb) |
| int | dvblb_init_procfs (void) |
| int | dvblb_uninit_procfs (void) |
| int | dvblb_forward_open (struct dvblb_devinfo *lbdev, struct inode *inode, struct file *f) |
| int | dvblb_forward_release (struct dvblb_devinfo *lbdev, struct file *f) |
| ssize_t | dvblb_forward_write (struct dvblb_devinfo *lbdev, struct file *f, const char *buf, size_t count, loff_t *offset) |
| ssize_t | dvblb_forward_read (struct dvblb_devinfo *lbdev, struct file *f, char *buf, size_t count, loff_t *offset) |
| int | dvblb_forward_ioctl (struct dvblb_devinfo *lbdev, struct file *f, unsigned int cmd, unsigned long arg) |
| int | dvblb_forward_mmap (struct dvblb_devinfo *lbdev, struct file *f, struct vm_area_struct *vma) |
| int | dvblb_forward_poll (struct dvblb_devinfo *lbdev, struct file *f, struct poll_table_struct *wait) |
| #define DVBLB_MAX_ADAPTERS 8 |
Definition at line 6 of file dvblb_internal.h.
Referenced by dvblb_init().
| #define DVBLB_STATUS_ADAPTER 0x0100U |
Definition at line 59 of file dvblb_internal.h.
Referenced by destroy_lb_adapter(), and dvblb_init().
| #define DVBLB_STATUS_DEMUX (1 << DVBLB_DEMUX) |
Definition at line 57 of file dvblb_internal.h.
| #define DVBLB_STATUS_DVR (1 << DVBLB_DVR) |
Definition at line 58 of file dvblb_internal.h.
| #define DVBLB_STATUS_FRONTEND (1 << DVBLB_FRONTEND) |
Definition at line 56 of file dvblb_internal.h.
| #define DVBLB_STATUS_PROC 0x0200U |
Definition at line 60 of file dvblb_internal.h.
Referenced by dvblb_init_procfs_adapter(), and dvblb_remove_procfs_adapter().
| anonymous enum |
Definition at line 46 of file dvblb_internal.h.
{
DVBLB_FRONTEND = 0,
DVBLB_DEMUX = 1,
DVBLB_DVR = 2,
DVBLB_VIDEO = 3,
DVBLB_AUDIO = 4,
DVBLB_OSD = 5,
DVBLB_NUM_DEVS = 6
};
| int dvblb_forward_ioctl | ( | struct dvblb_devinfo * | lbdev, |
| struct file * | f, | ||
| unsigned int | cmd, | ||
| unsigned long | arg | ||
| ) |
Definition at line 163 of file dvblb_forward.c.
References find_forwardmap(), dvb_device::fops, and dvblb_devinfo::forward_dev.
Referenced by dvblb_ioctl().
{
struct file *ftmp = find_forwardmap(lbdev, f->private_data);
if (!ftmp || IS_ERR(ftmp))
return -EFAULT;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)
if (lbdev->forward_dev->fops &&lbdev->forward_dev->fops->unlocked_ioctl)
return lbdev->forward_dev->fops->unlocked_ioctl(
ftmp, cmd, arg);
#else
if (lbdev->forward_dev->fops &&lbdev->forward_dev->fops->ioctl)
return lbdev->forward_dev->fops->ioctl(
ftmp->f_dentry->d_inode, ftmp, cmd, arg);
#endif
return -EFAULT;
}
| int dvblb_forward_mmap | ( | struct dvblb_devinfo * | lbdev, |
| struct file * | f, | ||
| struct vm_area_struct * | vma | ||
| ) |
Definition at line 181 of file dvblb_forward.c.
References find_forwardmap(), dvb_device::fops, and dvblb_devinfo::forward_dev.
Referenced by dvblb_mmap().
{
struct file *ftmp = find_forwardmap(lbdev, f->private_data);
if (!ftmp || IS_ERR(ftmp))
return -EFAULT;
if (lbdev->forward_dev->fops &&lbdev->forward_dev->fops->mmap)
return lbdev->forward_dev->fops->mmap(ftmp, vma);
return -EFAULT;
}
| int dvblb_forward_open | ( | struct dvblb_devinfo * | lbdev, |
| struct inode * | inode, | ||
| struct file * | f | ||
| ) |
Definition at line 70 of file dvblb_forward.c.
References dvb_device::adapter, dnames, fd, dvb_device::fops, dvblb_devinfo::forward_dev, dvb_device::id, NULL, dvb_adapter::num, set_forwardmap(), and dvb_device::type.
Referenced by dvblb_open().
{
// int minor;
// struct inode *tmpinode;
// struct dentry *dentry;
struct file *ftmp;
char tmpstr[35];
if (! inode->i_cdev || ! inode->i_cdev->ops ||
! inode->i_cdev->ops->open) {
printk("dvblb_forward_open: "
"device wasn't correctly initialized\n");
return -EFAULT;
}
sprintf(tmpstr, "/dev/dvb/adapter%d/%s%d", lbdev->forward_dev->adapter->num, dnames[lbdev->forward_dev->type], lbdev->forward_dev->id);
/* printk("linking to %s\n", tmpstr); */
ftmp = filp_open(tmpstr, f->f_flags, f->f_mode);
/* It would be nice to find a way to open the device without relying
on a fixed path, but the attempt below certainly isn't it */
/*
minor = nums2minor(lbdev->forward_dev->adapter->num,
lbdev->forward_dev->type, lbdev->forward_dev->id);
tmpinode = iget_locked(inode->i_sb, MKDEV(DVB_MAJOR, minor));
if (! tmpinode)
return -EFAULT;
if (is_bad_inode(tmpinode)) {
iput(tmpinode);
return -EFAULT;
}
dentry = d_alloc_anon(tmpinode);
if (!dentry) {
iput(tmpinode);
return -EFAULT;
}
ftmp = dentry_open(dentry, f->f_vfsmnt, f->f_flags);
*/
if (!ftmp || IS_ERR(ftmp)) {
int fd = PTR_ERR(ftmp);
printk("open failed: %d\n", fd);
return fd;
}
if (! ftmp->f_op || ! lbdev->forward_dev->fops ||
ftmp->f_op->open != lbdev->forward_dev->fops->open) {
printk("DVB device din't initialize correctly\n");
filp_close(ftmp, NULL);
return -EFAULT;
}
if (set_forwardmap(lbdev, f->private_data, ftmp) == -1) {
printk("Didn't find a valid forwardmap\n");
filp_close(ftmp, NULL);
return -EFAULT;
}
return 0;
}
| int dvblb_forward_poll | ( | struct dvblb_devinfo * | lbdev, |
| struct file * | f, | ||
| struct poll_table_struct * | wait | ||
| ) |
Definition at line 192 of file dvblb_forward.c.
References find_forwardmap(), dvb_device::fops, and dvblb_devinfo::forward_dev.
Referenced by dvblb_poll().
{
struct file *ftmp = find_forwardmap(lbdev, f->private_data);
if (!ftmp || IS_ERR(ftmp))
return -EFAULT;
if (lbdev->forward_dev->fops &&lbdev->forward_dev->fops->poll)
return lbdev->forward_dev->fops->poll(ftmp, wait);
return -EFAULT;
}
| ssize_t dvblb_forward_read | ( | struct dvblb_devinfo * | lbdev, |
| struct file * | f, | ||
| char * | buf, | ||
| size_t | count, | ||
| loff_t * | offset | ||
| ) |
Definition at line 151 of file dvblb_forward.c.
References find_forwardmap(), dvb_device::fops, and dvblb_devinfo::forward_dev.
Referenced by dvblb_read().
{
struct file *ftmp = find_forwardmap(lbdev, f->private_data);
if (!ftmp || IS_ERR(ftmp))
return -EFAULT;
if (lbdev->forward_dev->fops &&lbdev->forward_dev->fops->read)
return lbdev->forward_dev->fops->read(
ftmp, buf, count, offset);
return -EFAULT;
}
| int dvblb_forward_release | ( | struct dvblb_devinfo * | lbdev, |
| struct file * | f | ||
| ) |
Definition at line 127 of file dvblb_forward.c.
References clear_forwardmap(), find_forwardmap(), dvb_device::fops, dvblb_devinfo::forward_dev, and NULL.
Referenced by dvblb_release().
{
struct file *ftmp = find_forwardmap(lbdev, f->private_data);
if (!ftmp || IS_ERR(ftmp))
return -EFAULT;
if (lbdev->forward_dev->fops &&lbdev->forward_dev->fops->release) {
filp_close(ftmp, NULL);
clear_forwardmap(lbdev, f->private_data);
}
return -EFAULT;
}
| ssize_t dvblb_forward_write | ( | struct dvblb_devinfo * | lbdev, |
| struct file * | f, | ||
| const char * | buf, | ||
| size_t | count, | ||
| loff_t * | offset | ||
| ) |
Definition at line 139 of file dvblb_forward.c.
References find_forwardmap(), dvb_device::fops, and dvblb_devinfo::forward_dev.
Referenced by dvblb_write().
{
struct file *ftmp = find_forwardmap(lbdev, f->private_data);
if (!ftmp || IS_ERR(ftmp))
return -EFAULT;
if (lbdev->forward_dev->fops &&lbdev->forward_dev->fops->write)
return lbdev->forward_dev->fops->write(
ftmp, buf, count, offset);
return -EFAULT;
}
| int dvblb_init_procfs | ( | void | ) |
Definition at line 222 of file dvblb_proc.c.
Referenced by dvblb_init().
| int dvblb_init_procfs_adapter | ( | struct dvblb * | dvblb | ) |
Definition at line 182 of file dvblb_proc.c.
References dvblb::adapter, dvblb_procfs_adapter_read(), dvblb_procfs_adapter_write(), dvblb_remove_procfs(), DVBLB_STATUS_PROC, dvblb::init, NULL, dvb_adapter::num, procdir, dvblb::procdir, and dvblb::procfile.
Referenced by dvblb_init().
{
char name[10];
sprintf(name, "adapter%d", dvblb->adapter.num);
dvblb->procdir = proc_mkdir(name, procdir);
if (dvblb->procdir == NULL)
return -ENOMEM;
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)
dvblb->procdir->owner = THIS_MODULE;
#endif
dvblb->procfile = create_proc_entry("adapter", 0644, dvblb->procdir);
if (dvblb->procfile == NULL) {
dvblb_remove_procfs(dvblb->procdir, procdir);
return -ENOMEM;
}
dvblb->procfile->data = dvblb;
dvblb->procfile->read_proc = dvblb_procfs_adapter_read;
dvblb->procfile->write_proc = dvblb_procfs_adapter_write;
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)
dvblb->procfile->owner = THIS_MODULE;
#endif
dvblb->init |= DVBLB_STATUS_PROC;
return 0;
}
| int dvblb_init_procfs_device | ( | struct dvblb * | dvblb, |
| struct dvblb_devinfo * | lbdev | ||
| ) |
Definition at line 166 of file dvblb_proc.c.
References dnames, dvblb_procfs_read(), dvblb_procfs_write(), dvblb_devinfo::lb_dev, NULL, dvblb::procdir, dvblb_devinfo::procfile, and dvb_device::type.
Referenced by create_lb_dev().
{
int type = lbdev->lb_dev->type;
lbdev->procfile = create_proc_entry(dnames[type], 0644, dvblb->procdir);
if (lbdev->procfile == NULL)
return -ENOMEM;
lbdev->procfile->data = lbdev;
lbdev->procfile->read_proc = dvblb_procfs_read;
lbdev->procfile->write_proc = dvblb_procfs_write;
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)
lbdev->procfile->owner = THIS_MODULE;
#endif
return 0;
}
| int dvblb_remove_procfs | ( | struct proc_dir_entry * | pdir, |
| struct proc_dir_entry * | parent | ||
| ) |
Definition at line 154 of file dvblb_proc.c.
Referenced by destroy_lb_dev(), dvblb_init_procfs_adapter(), dvblb_remove_procfs_adapter(), and dvblb_uninit_procfs().
{
char name[20];
memcpy(name, pdir->name, pdir->namelen);
name[pdir->namelen] = '\0';
// printk("Removing proc: %s\n", name);
remove_proc_entry(name, parent);
return 0;
}
| int dvblb_remove_procfs_adapter | ( | struct dvblb * | dvblb | ) |
Definition at line 209 of file dvblb_proc.c.
References dvblb_remove_procfs(), DVBLB_STATUS_PROC, dvblb::init, procdir, dvblb::procdir, and dvblb::procfile.
Referenced by destroy_lb_adapter().
{
if(dvblb->init & DVBLB_STATUS_PROC) {
dvblb_remove_procfs(dvblb->procfile, dvblb->procdir);
dvblb_remove_procfs(dvblb->procdir, procdir);
printk("removing dvblb proc adapter\n");
}
dvblb->init &= ~DVBLB_STATUS_PROC;
printk("dvblb init = %x\n", dvblb->init);
return 0;
}
| int dvblb_uninit_procfs | ( | void | ) |
Definition at line 234 of file dvblb_proc.c.
References dvblb_remove_procfs(), NULL, and procdir.
Referenced by cleanup_dvblb_module().
{
dvblb_remove_procfs(procdir, NULL);
return 0;
}
| int inuse_filemap | ( | struct dvblb_devinfo * | lbdev | ) |
Definition at line 252 of file dvb_loopback.c.
References count, DVBLB_MAXFD, dvblb_devinfo::filemap, i, and NULL.
Referenced by dvblb_procfs_adapter_write(), and dvblb_procfs_write().