|
SASC
DVBSoftCAM
|
00001 #include <linux/wait.h> 00002 #include <linux/proc_fs.h> 00003 #include "dvbdev.h" 00004 #include "dvbloopback.h" 00005 00006 #define DVBLB_MAX_ADAPTERS 8 00007 00008 struct dvblb; 00009 00010 struct dvblb_fwdmap { 00011 struct dvb_device **f; 00012 struct file *map; 00013 }; 00014 00015 struct dvblb_devinfo { 00016 struct dvblb *parent; 00017 struct dvb_device *lb_dev; 00018 struct dvb_device *user_dev; 00019 int pid; 00020 unsigned long int ioctlcmd; 00021 int ioctlretval; 00022 unsigned char *ioctldata; 00023 unsigned char *ioctlretdata; 00024 unsigned int ioctllen; 00025 unsigned int ioctl_already_read; 00026 void *ioctlfd; 00027 unsigned char *buffer; 00028 unsigned long int buflen; 00029 wait_queue_head_t wait_ioctl; 00030 wait_queue_head_t wait_virt_poll; 00031 struct mutex lock_fake_ioctl; 00032 struct mutex lock_ioctl; 00033 struct mutex lock_buffer; 00034 00035 wait_queue_head_t wait_poll[DVBLB_MAXFD]; 00036 unsigned long int poll_waiting; 00037 struct dvb_device *filemap[DVBLB_MAXFD]; 00038 void *dbgfilemap[DVBLB_MAXFD]; 00039 00040 struct dvb_device *forward_dev; 00041 struct dvblb_fwdmap forwardmap[DVBLB_MAXFD]; 00042 00043 struct proc_dir_entry *procfile; 00044 }; 00045 00046 enum 00047 { 00048 DVBLB_FRONTEND = 0, 00049 DVBLB_DEMUX = 1, 00050 DVBLB_DVR = 2, 00051 DVBLB_VIDEO = 3, 00052 DVBLB_AUDIO = 4, 00053 DVBLB_OSD = 5, 00054 DVBLB_NUM_DEVS = 6 00055 }; 00056 #define DVBLB_STATUS_FRONTEND (1 << DVBLB_FRONTEND) 00057 #define DVBLB_STATUS_DEMUX (1 << DVBLB_DEMUX) 00058 #define DVBLB_STATUS_DVR (1 << DVBLB_DVR) 00059 #define DVBLB_STATUS_ADAPTER 0x0100U 00060 #define DVBLB_STATUS_PROC 0x0200U 00061 00062 struct dvblb { 00063 struct dvb_adapter adapter; 00064 struct dvblb_devinfo devinfo[DVBLB_NUM_DEVS]; 00065 00066 struct proc_dir_entry *procdir; 00067 struct proc_dir_entry *procfile; 00068 int link; 00069 struct list_head *adapter_ll; 00070 unsigned int init; 00071 }; 00072 extern int inuse_filemap(struct dvblb_devinfo *lbdev); 00073 00074 /* dvblb_proc.c */ 00075 extern int dvblb_remove_procfs(struct proc_dir_entry *pdir, 00076 struct proc_dir_entry *parent); 00077 00078 extern int dvblb_init_procfs_device(struct dvblb *dvblb, 00079 struct dvblb_devinfo *lbdev); 00080 00081 extern int dvblb_init_procfs_adapter(struct dvblb *dvblb); 00082 00083 extern int dvblb_remove_procfs_adapter(struct dvblb *dvblb); 00084 00085 extern int dvblb_init_procfs(void); 00086 00087 extern int dvblb_uninit_procfs(void); 00088 00089 /* dvblb_forward.c */ 00090 extern int dvblb_forward_open(struct dvblb_devinfo *lbdev, struct inode *inode, 00091 struct file *f); 00092 00093 extern int dvblb_forward_release(struct dvblb_devinfo *lbdev, struct file *f); 00094 00095 extern ssize_t dvblb_forward_write(struct dvblb_devinfo *lbdev, struct file *f, 00096 const char *buf, size_t count, loff_t *offset); 00097 00098 extern ssize_t dvblb_forward_read (struct dvblb_devinfo *lbdev, struct file *f, 00099 char * buf, size_t count, loff_t *offset); 00100 00101 extern int dvblb_forward_ioctl(struct dvblb_devinfo *lbdev, struct file *f, 00102 unsigned int cmd, unsigned long arg); 00103 00104 extern int dvblb_forward_mmap(struct dvblb_devinfo *lbdev, struct file *f, 00105 struct vm_area_struct *vma); 00106 00107 extern int dvblb_forward_poll(struct dvblb_devinfo *lbdev, struct file *f, 00108 struct poll_table_struct *wait); 00109