[MIPS] VPE: Sprinkle device model code into code to make udev happier.
authorRalf Baechle <ralf@linux-mips.org>
Wed, 7 Feb 2007 13:48:59 +0000 (13:48 +0000)
committerRalf Baechle <ralf@linux-mips.org>
Sat, 10 Feb 2007 22:38:42 +0000 (22:38 +0000)
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/kernel/mips-mt.c
arch/mips/kernel/vpe.c
include/asm-mips/mips_mt.h

index a32f6797353aa32fc6b25b770a1b867cf62f2909..ba01800b601874d4a224c2752d8682dd1c606853 100644 (file)
@@ -3,9 +3,11 @@
  * Copyright (C) 2005 Mips Technologies, Inc
  */
 
+#include <linux/device.h>
 #include <linux/kernel.h>
 #include <linux/sched.h>
 #include <linux/cpumask.h>
+#include <linux/module.h>
 #include <linux/interrupt.h>
 #include <linux/security.h>
 
@@ -453,3 +455,20 @@ void mt_cflush_release(void)
 #endif /* CONFIG_MIPS_MT_SMTC */
        /* FILL IN VSMP and AP/SP VERSIONS HERE */
 }
+
+struct class *mt_class;
+
+static int __init mt_init(void)
+{
+       struct class *mtc;
+
+       mtc = class_create(THIS_MODULE, "mt");
+       if (IS_ERR(mtc))
+               return PTR_ERR(mtc);
+
+       mt_class = mtc;
+
+       return 0;
+}
+
+subsys_initcall(mt_init);
index 459624969c99739d24b90aee8ca8bcdb6f52bd53..4e832da48c698d05b03f61c863ac8f63148e1906 100644 (file)
@@ -29,6 +29,7 @@
  */
 
 #include <linux/kernel.h>
+#include <linux/device.h>
 #include <linux/module.h>
 #include <linux/fs.h>
 #include <linux/init.h>
@@ -48,6 +49,7 @@
 #include <asm/cacheflush.h>
 #include <asm/atomic.h>
 #include <asm/cpu.h>
+#include <asm/mips_mt.h>
 #include <asm/processor.h>
 #include <asm/system.h>
 #include <asm/vpe.h>
@@ -64,6 +66,7 @@ typedef void *vpe_handle;
 
 static char module_name[] = "vpe";
 static int major;
+static const int minor = 1;    /* fixed for now  */
 
 #ifdef CONFIG_MIPS_APSP_KSPD
  static struct kspd_notifications kspd_events;
@@ -1365,12 +1368,15 @@ static void kspd_sp_exit( int sp_id)
 }
 #endif
 
+static struct device *vpe_dev;
+
 static int __init vpe_module_init(void)
 {
        struct vpe *v = NULL;
+       struct device *dev;
        struct tc *t;
        unsigned long val;
-       int i;
+       int i, err;
 
        if (!cpu_has_mipsmt) {
                printk("VPE loader: not a MIPS MT capable processor\n");
@@ -1383,6 +1389,14 @@ static int __init vpe_module_init(void)
                return major;
        }
 
+       dev = device_create(mt_class, NULL, MKDEV(major, minor),
+                           "tc%d", minor);
+       if (IS_ERR(dev)) {
+               err = PTR_ERR(dev);
+               goto out_chrdev;
+       }
+       vpe_dev = dev;
+
        dmt();
        dvpe();
 
@@ -1478,6 +1492,11 @@ static int __init vpe_module_init(void)
        kspd_events.kspd_sp_exit = kspd_sp_exit;
 #endif
        return 0;
+
+out_chrdev:
+       unregister_chrdev(major, module_name);
+
+       return err;
 }
 
 static void __exit vpe_module_exit(void)
@@ -1490,6 +1509,7 @@ static void __exit vpe_module_exit(void)
                }
        }
 
+       device_destroy(mt_class, MKDEV(major, minor));
        unregister_chrdev(major, module_name);
 }
 
index c31a312b9783f93524c7e1af7aadd53520099d10..fdfff0b8ce42575af3f3f78a2842600a84d725e0 100644 (file)
@@ -12,4 +12,7 @@ extern unsigned long mt_fpemul_threshold;
 extern void mips_mt_regdump(unsigned long previous_mvpcontrol_value);
 extern void mips_mt_set_cpuoptions(void);
 
+struct class;
+extern struct class *mt_class;
+
 #endif /* __ASM_MIPS_MT_H */