11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * dvbdev.h 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 2000 Ralph Metzler & Marcus Metzler 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * for convergence integrated media GmbH 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is free software; you can redistribute it and/or 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * modify it under the terms of the GNU General Lesser Public License 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * as published by the Free Software Foundation; either version 2.1 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * of the License, or (at your option) any later version. 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is distributed in the hope that it will be useful, 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * but WITHOUT ANY WARRANTY; without even the implied warranty of 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * GNU General Public License for more details. 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * You should have received a copy of the GNU Lesser General Public License 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * along with this program; if not, write to the Free Software 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _DVBDEV_H_ 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _DVBDEV_H_ 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/types.h> 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/poll.h> 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/fs.h> 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/list.h> 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DVB_MAJOR 212 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 334457ef1d6163533073efdebed82a049aad44e3b3Janne Grunau#if defined(CONFIG_DVB_MAX_ADAPTERS) && CONFIG_DVB_MAX_ADAPTERS > 0 34d4c02ef91b74fc6584196cdeab3eb12daac6e380Mauro Carvalho Chehab #define DVB_MAX_ADAPTERS CONFIG_DVB_MAX_ADAPTERS 354457ef1d6163533073efdebed82a049aad44e3b3Janne Grunau#else 36d4c02ef91b74fc6584196cdeab3eb12daac6e380Mauro Carvalho Chehab #define DVB_MAX_ADAPTERS 8 374457ef1d6163533073efdebed82a049aad44e3b3Janne Grunau#endif 3878e92006f410a4044f8c1760c25ac9d11d259aa2Janne Grunau 3978e92006f410a4044f8c1760c25ac9d11d259aa2Janne Grunau#define DVB_UNSET (-1) 4078e92006f410a4044f8c1760c25ac9d11d259aa2Janne Grunau 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DVB_DEVICE_VIDEO 0 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DVB_DEVICE_AUDIO 1 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DVB_DEVICE_SEC 2 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DVB_DEVICE_FRONTEND 3 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DVB_DEVICE_DEMUX 4 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DVB_DEVICE_DVR 5 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DVB_DEVICE_CA 6 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DVB_DEVICE_NET 7 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DVB_DEVICE_OSD 8 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 5178e92006f410a4044f8c1760c25ac9d11d259aa2Janne Grunau#define DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr) \ 5278e92006f410a4044f8c1760c25ac9d11d259aa2Janne Grunau static short adapter_nr[] = \ 5378e92006f410a4044f8c1760c25ac9d11d259aa2Janne Grunau {[0 ... (DVB_MAX_ADAPTERS - 1)] = DVB_UNSET }; \ 5478e92006f410a4044f8c1760c25ac9d11d259aa2Janne Grunau module_param_array(adapter_nr, short, NULL, 0444); \ 5578e92006f410a4044f8c1760c25ac9d11d259aa2Janne Grunau MODULE_PARM_DESC(adapter_nr, "DVB adapter numbers") 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 579133aee09e3689c116c526fa9011c33b872e65c1Michael Krufkystruct dvb_frontend; 589133aee09e3689c116c526fa9011c33b872e65c1Michael Krufky 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct dvb_adapter { 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int num; 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct list_head list_head; 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct list_head device_list; 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds const char *name; 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 proposed_mac [6]; 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds void* priv; 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 67d09dbf92ada861244056d914a8f68b8be99891edAndrew de Quincey struct device *device; 68d09dbf92ada861244056d914a8f68b8be99891edAndrew de Quincey 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct module *module; 7059b1842da1c6f33ad2e8da82d3dfb3445751d964Darron Broad 7159b1842da1c6f33ad2e8da82d3dfb3445751d964Darron Broad int mfe_shared; /* indicates mutually exclusive frontends */ 7259b1842da1c6f33ad2e8da82d3dfb3445751d964Darron Broad struct dvb_device *mfe_dvbdev; /* frontend device in use */ 7359b1842da1c6f33ad2e8da82d3dfb3445751d964Darron Broad struct mutex mfe_lock; /* access lock for thread creation */ 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct dvb_device { 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct list_head list_head; 79784e29d2031b535637f65a8b81fb0871c7c51b3fJan Engelhardt const struct file_operations *fops; 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dvb_adapter *adapter; 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int type; 825dd3f3071070f5a306bdf8d474c80062f5691cbaAndreas Oberritter int minor; 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 id; 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* in theory, 'users' can vanish now, 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds but I don't want to change too much now... */ 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int readers; 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int writers; 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int users; 901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 91ca5be9cd0516629cb8ee335b7dad076e66d72a22Markus Rechberger wait_queue_head_t wait_queue; 92afd1a0c9ac281eed3b22b293ccd92af7b0d60889Mauro Carvalho Chehab /* don't really need those !? -- FIXME: use video_usercopy */ 9316ef8def80ea97c3cacdcaa765bdf62b2d94f86dArnd Bergmann int (*kernel_ioctl)(struct file *file, unsigned int cmd, void *arg); 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds void *priv; 961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 9978e92006f410a4044f8c1760c25ac9d11d259aa2Janne Grunauextern int dvb_register_adapter(struct dvb_adapter *adap, const char *name, 10078e92006f410a4044f8c1760c25ac9d11d259aa2Janne Grunau struct module *module, struct device *device, 10178e92006f410a4044f8c1760c25ac9d11d259aa2Janne Grunau short *adapter_nums); 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int dvb_unregister_adapter (struct dvb_adapter *adap); 1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int dvb_register_device (struct dvb_adapter *adap, 1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dvb_device **pdvbdev, 1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds const struct dvb_device *template, 1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds void *priv, 1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int type); 1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void dvb_unregister_device (struct dvb_device *dvbdev); 1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int dvb_generic_open (struct inode *inode, struct file *file); 1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int dvb_generic_release (struct inode *inode, struct file *file); 11416ef8def80ea97c3cacdcaa765bdf62b2d94f86dArnd Bergmannextern long dvb_generic_ioctl (struct file *file, 1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned int cmd, unsigned long arg); 1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* we don't mess with video_usercopy() any more, 1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldswe simply define out own dvb_usercopy(), which will hopefully become 1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsgeneric_usercopy() someday... */ 1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 12116ef8def80ea97c3cacdcaa765bdf62b2d94f86dArnd Bergmannextern int dvb_usercopy(struct file *file, unsigned int cmd, unsigned long arg, 12216ef8def80ea97c3cacdcaa765bdf62b2d94f86dArnd Bergmann int (*func)(struct file *file, unsigned int cmd, void *arg)); 1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 124d995506062c974133ba66d0822e58a923d4d74d9Andrew de Quincey/** generic DVB attach function. */ 125149ef72deeba57078216c9fa678baff392295853Mauro Carvalho Chehab#ifdef CONFIG_MEDIA_ATTACH 126d995506062c974133ba66d0822e58a923d4d74d9Andrew de Quincey#define dvb_attach(FUNCTION, ARGS...) ({ \ 127d995506062c974133ba66d0822e58a923d4d74d9Andrew de Quincey void *__r = NULL; \ 128d995506062c974133ba66d0822e58a923d4d74d9Andrew de Quincey typeof(&FUNCTION) __a = symbol_request(FUNCTION); \ 129d995506062c974133ba66d0822e58a923d4d74d9Andrew de Quincey if (__a) { \ 130d995506062c974133ba66d0822e58a923d4d74d9Andrew de Quincey __r = (void *) __a(ARGS); \ 131d995506062c974133ba66d0822e58a923d4d74d9Andrew de Quincey if (__r == NULL) \ 132d995506062c974133ba66d0822e58a923d4d74d9Andrew de Quincey symbol_put(FUNCTION); \ 133d995506062c974133ba66d0822e58a923d4d74d9Andrew de Quincey } else { \ 134d995506062c974133ba66d0822e58a923d4d74d9Andrew de Quincey printk(KERN_ERR "DVB: Unable to find symbol "#FUNCTION"()\n"); \ 135d995506062c974133ba66d0822e58a923d4d74d9Andrew de Quincey } \ 136d995506062c974133ba66d0822e58a923d4d74d9Andrew de Quincey __r; \ 137d995506062c974133ba66d0822e58a923d4d74d9Andrew de Quincey}) 138d995506062c974133ba66d0822e58a923d4d74d9Andrew de Quincey 1394647f487083ded0d42a61bf2e066ce5328624ed3Mauro Carvalho Chehab#define dvb_detach(FUNC) symbol_put_addr(FUNC) 1404647f487083ded0d42a61bf2e066ce5328624ed3Mauro Carvalho Chehab 141d995506062c974133ba66d0822e58a923d4d74d9Andrew de Quincey#else 142d995506062c974133ba66d0822e58a923d4d74d9Andrew de Quincey#define dvb_attach(FUNCTION, ARGS...) ({ \ 143d995506062c974133ba66d0822e58a923d4d74d9Andrew de Quincey FUNCTION(ARGS); \ 144d995506062c974133ba66d0822e58a923d4d74d9Andrew de Quincey}) 145d995506062c974133ba66d0822e58a923d4d74d9Andrew de Quincey 1464647f487083ded0d42a61bf2e066ce5328624ed3Mauro Carvalho Chehab#define dvb_detach(FUNC) {} 1474647f487083ded0d42a61bf2e066ce5328624ed3Mauro Carvalho Chehab 148d995506062c974133ba66d0822e58a923d4d74d9Andrew de Quincey#endif 149d995506062c974133ba66d0822e58a923d4d74d9Andrew de Quincey 1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* #ifndef _DVBDEV_H_ */ 151