linux/drivers/media/dvb-core/dvbdev.h
<<
>>
Prefs
   1/*
   2 * dvbdev.h
   3 *
   4 * Copyright (C) 2000 Ralph Metzler & Marcus Metzler
   5 *                    for convergence integrated media GmbH
   6 *
   7 * This program is free software; you can redistribute it and/or
   8 * modify it under the terms of the GNU General Lesser Public License
   9 * as published by the Free Software Foundation; either version 2.1
  10 * of the License, or (at your option) any later version.
  11 *
  12 * This program is distributed in the hope that it will be useful,
  13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15 * GNU General Public License for more details.
  16 *
  17 * You should have received a copy of the GNU Lesser General Public License
  18 * along with this program; if not, write to the Free Software
  19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  20 *
  21 */
  22
  23#ifndef _DVBDEV_H_
  24#define _DVBDEV_H_
  25
  26#include <linux/types.h>
  27#include <linux/poll.h>
  28#include <linux/fs.h>
  29#include <linux/list.h>
  30
  31#define DVB_MAJOR 212
  32
  33#if defined(CONFIG_DVB_MAX_ADAPTERS) && CONFIG_DVB_MAX_ADAPTERS > 0
  34  #define DVB_MAX_ADAPTERS CONFIG_DVB_MAX_ADAPTERS
  35#else
  36  #define DVB_MAX_ADAPTERS 8
  37#endif
  38
  39#define DVB_UNSET (-1)
  40
  41#define DVB_DEVICE_VIDEO      0
  42#define DVB_DEVICE_AUDIO      1
  43#define DVB_DEVICE_SEC        2
  44#define DVB_DEVICE_FRONTEND   3
  45#define DVB_DEVICE_DEMUX      4
  46#define DVB_DEVICE_DVR        5
  47#define DVB_DEVICE_CA         6
  48#define DVB_DEVICE_NET        7
  49#define DVB_DEVICE_OSD        8
  50
  51#define DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr) \
  52        static short adapter_nr[] = \
  53                {[0 ... (DVB_MAX_ADAPTERS - 1)] = DVB_UNSET }; \
  54        module_param_array(adapter_nr, short, NULL, 0444); \
  55        MODULE_PARM_DESC(adapter_nr, "DVB adapter numbers")
  56
  57struct dvb_frontend;
  58
  59struct dvb_adapter {
  60        int num;
  61        struct list_head list_head;
  62        struct list_head device_list;
  63        const char *name;
  64        u8 proposed_mac [6];
  65        void* priv;
  66
  67        struct device *device;
  68
  69        struct module *module;
  70
  71        int mfe_shared;                 /* indicates mutually exclusive frontends */
  72        struct dvb_device *mfe_dvbdev;  /* frontend device in use */
  73        struct mutex mfe_lock;          /* access lock for thread creation */
  74};
  75
  76
  77struct dvb_device {
  78        struct list_head list_head;
  79        const struct file_operations *fops;
  80        struct dvb_adapter *adapter;
  81        int type;
  82        int minor;
  83        u32 id;
  84
  85        /* in theory, 'users' can vanish now,
  86           but I don't want to change too much now... */
  87        int readers;
  88        int writers;
  89        int users;
  90
  91        wait_queue_head_t         wait_queue;
  92        /* don't really need those !? -- FIXME: use video_usercopy  */
  93        int (*kernel_ioctl)(struct file *file, unsigned int cmd, void *arg);
  94
  95        void *priv;
  96};
  97
  98
  99extern int dvb_register_adapter(struct dvb_adapter *adap, const char *name,
 100                                struct module *module, struct device *device,
 101                                short *adapter_nums);
 102extern int dvb_unregister_adapter (struct dvb_adapter *adap);
 103
 104extern int dvb_register_device (struct dvb_adapter *adap,
 105                                struct dvb_device **pdvbdev,
 106                                const struct dvb_device *template,
 107                                void *priv,
 108                                int type);
 109
 110extern void dvb_unregister_device (struct dvb_device *dvbdev);
 111
 112extern int dvb_generic_open (struct inode *inode, struct file *file);
 113extern int dvb_generic_release (struct inode *inode, struct file *file);
 114extern long dvb_generic_ioctl (struct file *file,
 115                              unsigned int cmd, unsigned long arg);
 116
 117/* we don't mess with video_usercopy() any more,
 118we simply define out own dvb_usercopy(), which will hopefully become
 119generic_usercopy()  someday... */
 120
 121extern int dvb_usercopy(struct file *file, unsigned int cmd, unsigned long arg,
 122                            int (*func)(struct file *file, unsigned int cmd, void *arg));
 123
 124/** generic DVB attach function. */
 125#ifdef CONFIG_MEDIA_ATTACH
 126#define dvb_attach(FUNCTION, ARGS...) ({ \
 127        void *__r = NULL; \
 128        typeof(&FUNCTION) __a = symbol_request(FUNCTION); \
 129        if (__a) { \
 130                __r = (void *) __a(ARGS); \
 131                if (__r == NULL) \
 132                        symbol_put(FUNCTION); \
 133        } else { \
 134                printk(KERN_ERR "DVB: Unable to find symbol "#FUNCTION"()\n"); \
 135        } \
 136        __r; \
 137})
 138
 139#define dvb_detach(FUNC)        symbol_put_addr(FUNC)
 140
 141#else
 142#define dvb_attach(FUNCTION, ARGS...) ({ \
 143        FUNCTION(ARGS); \
 144})
 145
 146#define dvb_detach(FUNC)        {}
 147
 148#endif
 149
 150#endif /* #ifndef _DVBDEV_H_ */
 151