-/*
+/*
* dvbdev.c
*
* Copyright (C) 2000 Ralph Metzler <ralph@convergence.de>
"net", "osd"
};
-
-#define DVB_MAX_IDS 6
-#define nums2minor(num,type,id) ((num << 6) | (id << 4) | type)
-#define MAX_DVB_MINORS (DVB_MAX_IDS*64)
+#define DVB_MAX_ADAPTERS 8
+#define DVB_MAX_IDS 4
+#define nums2minor(num,type,id) ((num << 6) | (id << 4) | type)
+#define MAX_DVB_MINORS (DVB_MAX_ADAPTERS*64)
struct class_simple *dvb_class;
EXPORT_SYMBOL(dvb_class);
static int dvb_device_open(struct inode *inode, struct file *file)
{
struct dvb_device *dvbdev;
-
+
dvbdev = dvbdev_find_device (iminor(inode));
if (dvbdev && dvbdev->fops) {
.open = dvb_device_open,
};
-
static struct cdev dvb_device_cdev = {
.kobj = {.name = "dvb", },
.owner = THIS_MODULE,
unsigned int cmd, unsigned long arg)
{
struct dvb_device *dvbdev = file->private_data;
-
+
if (!dvbdev)
return -ENODEV;
}
-int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
+int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
const struct dvb_device *template, void *priv, int type)
{
struct dvb_device *dvbdev;
}
up (&dvbdev_register_lock);
-
+
memcpy(dvbdev, template, sizeof(struct dvb_device));
dvbdev->type = type;
dvbdev->id = id;
if (!dvbdev)
return;
- devfs_remove("dvb/adapter%d/%s%d", dvbdev->adapter->num,
- dnames[dvbdev->type], dvbdev->id);
+ devfs_remove("dvb/adapter%d/%s%d", dvbdev->adapter->num,
+ dnames[dvbdev->type], dvbdev->id);
class_simple_device_remove(MKDEV(DVB_MAJOR, nums2minor(dvbdev->adapter->num,
dvbdev->type, dvbdev->id)));
- list_del(&dvbdev->list_head);
- kfree(dvbdev);
- }
+ list_del (&dvbdev->list_head);
+ kfree (dvbdev);
+}
EXPORT_SYMBOL(dvb_unregister_device);
{
int num = 0;
- while (1) {
+ while (num < DVB_MAX_ADAPTERS) {
struct list_head *entry;
list_for_each (entry, &dvb_adapter_list) {
struct dvb_adapter *adap;
}
-int dvb_register_adapter(struct dvb_adapter **padap, const char *name, struct module *module)
+int dvb_register_adapter(struct dvb_adapter *adap, const char *name, struct module *module)
{
- struct dvb_adapter *adap;
int num;
if (down_interruptible (&dvbdev_register_lock))
return -ENFILE;
}
- if (!(*padap = adap = kmalloc(sizeof(struct dvb_adapter), GFP_KERNEL))) {
- up(&dvbdev_register_lock);
- return -ENOMEM;
- }
-
memset (adap, 0, sizeof(struct dvb_adapter));
INIT_LIST_HEAD (&adap->device_list);
printk ("DVB: registering new adapter (%s).\n", name);
-
- devfs_mk_dir("dvb/adapter%d", num);
+ devfs_mk_dir("dvb/adapter%d", num);
adap->num = num;
adap->name = name;
adap->module = module;
return -ERESTARTSYS;
list_del (&adap->list_head);
up (&dvbdev_register_lock);
- kfree (adap);
return 0;
}
EXPORT_SYMBOL(dvb_unregister_adapter);
}
out:
- if (mbuf)
- kfree(mbuf);
-
+ kfree(mbuf);
return err;
}
MODULE_DESCRIPTION("DVB Core Driver");
MODULE_AUTHOR("Marcus Metzler, Ralph Metzler, Holger Waechtler");
MODULE_LICENSE("GPL");
-