|
@@ -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);
|
|
|
}
|
|
|
|