diff --git a/drivers/klist/klist.c b/drivers/klist/klist.c index 002de8a608ce692790e872e0e0370e756470eb1f..3f17b33ea1443bd241f7be3268792c03128f9883 100644 --- a/drivers/klist/klist.c +++ b/drivers/klist/klist.c @@ -11,9 +11,9 @@ #include <linux/uaccess.h> #include <linux/tty.h> #include <asm/errno.h> -#include <linux/device.h> -#include <linux/kdev_t.h> +#include <linux/miscdevice.h> +#define ERR(...) printk(KERN_ERR __VA_ARGS__) /* #define DEBUG */ #ifdef DEBUG @@ -22,8 +22,6 @@ #define LOG(...) #endif -#define ERR(...) printk(KERN_ERR __VA_ARGS__) - /* klist functions */ #define LIST_CMD 0x1337 #define LIST_ADD (LIST_CMD + 0) @@ -35,8 +33,6 @@ /* consts */ #define MAX_SIZE 0x400 -static struct class *cl; - static long k_list[MAX_SIZE]; static unsigned long list_size; @@ -172,38 +168,26 @@ struct file_operations list_fops = { unlocked_ioctl: list_ioctl, }; +static struct miscdevice klist = { + .minor = MISC_DYNAMIC_MINOR, + .name = "klist", + .fops = &list_fops, +}; + static int __init init_list(void) { int ret; - ret = register_chrdev(1337, "klist", &list_fops); + ret = misc_register(&klist); LOG("register device: %d\n", ret); list_size = 0; - if (ret) { - ERR("register device failed."); - return ret; - } - - //automatically populate /sys/class/ and create /dev/klist on module startup - cl = class_create(THIS_MODULE, "klist"); - if (IS_ERR(cl)) { - ERR("automatic /dev/klist creation failed on class_create."); - return ret; - } - if (IS_ERR(device_create(cl, NULL, MKDEV(1337, 0), NULL, "klist"))) { - ERR("automatic /dev/klist creation failed on class_create."); - class_destroy(cl); - return ret; - } return ret; } static void __exit exit_list(void) { - device_destroy(cl, MKDEV(1337, 0)); - class_destroy(cl); - unregister_chrdev(1337, "klist"); + misc_deregister(&klist); LOG("exit.\n"); }