Commit 27a3bbaf authored by Ralf Baechle's avatar Ralf Baechle

[MIPS] VPE: Sprinkle device model code into code to make udev happier.

Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 66efc5a7
...@@ -3,9 +3,11 @@ ...@@ -3,9 +3,11 @@
* Copyright (C) 2005 Mips Technologies, Inc * Copyright (C) 2005 Mips Technologies, Inc
*/ */
#include <linux/device.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/cpumask.h> #include <linux/cpumask.h>
#include <linux/module.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/security.h> #include <linux/security.h>
...@@ -453,3 +455,20 @@ void mt_cflush_release(void) ...@@ -453,3 +455,20 @@ void mt_cflush_release(void)
#endif /* CONFIG_MIPS_MT_SMTC */ #endif /* CONFIG_MIPS_MT_SMTC */
/* FILL IN VSMP and AP/SP VERSIONS HERE */ /* 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);
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/device.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -48,6 +49,7 @@ ...@@ -48,6 +49,7 @@
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/atomic.h> #include <asm/atomic.h>
#include <asm/cpu.h> #include <asm/cpu.h>
#include <asm/mips_mt.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/vpe.h> #include <asm/vpe.h>
...@@ -64,6 +66,7 @@ typedef void *vpe_handle; ...@@ -64,6 +66,7 @@ typedef void *vpe_handle;
static char module_name[] = "vpe"; static char module_name[] = "vpe";
static int major; static int major;
static const int minor = 1; /* fixed for now */
#ifdef CONFIG_MIPS_APSP_KSPD #ifdef CONFIG_MIPS_APSP_KSPD
static struct kspd_notifications kspd_events; static struct kspd_notifications kspd_events;
...@@ -1365,12 +1368,15 @@ static void kspd_sp_exit( int sp_id) ...@@ -1365,12 +1368,15 @@ static void kspd_sp_exit( int sp_id)
} }
#endif #endif
static struct device *vpe_dev;
static int __init vpe_module_init(void) static int __init vpe_module_init(void)
{ {
struct vpe *v = NULL; struct vpe *v = NULL;
struct device *dev;
struct tc *t; struct tc *t;
unsigned long val; unsigned long val;
int i; int i, err;
if (!cpu_has_mipsmt) { if (!cpu_has_mipsmt) {
printk("VPE loader: not a MIPS MT capable processor\n"); printk("VPE loader: not a MIPS MT capable processor\n");
...@@ -1383,6 +1389,14 @@ static int __init vpe_module_init(void) ...@@ -1383,6 +1389,14 @@ static int __init vpe_module_init(void)
return major; 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(); dmt();
dvpe(); dvpe();
...@@ -1478,6 +1492,11 @@ static int __init vpe_module_init(void) ...@@ -1478,6 +1492,11 @@ static int __init vpe_module_init(void)
kspd_events.kspd_sp_exit = kspd_sp_exit; kspd_events.kspd_sp_exit = kspd_sp_exit;
#endif #endif
return 0; return 0;
out_chrdev:
unregister_chrdev(major, module_name);
return err;
} }
static void __exit vpe_module_exit(void) static void __exit vpe_module_exit(void)
...@@ -1490,6 +1509,7 @@ 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); unregister_chrdev(major, module_name);
} }
......
...@@ -12,4 +12,7 @@ extern unsigned long mt_fpemul_threshold; ...@@ -12,4 +12,7 @@ extern unsigned long mt_fpemul_threshold;
extern void mips_mt_regdump(unsigned long previous_mvpcontrol_value); extern void mips_mt_regdump(unsigned long previous_mvpcontrol_value);
extern void mips_mt_set_cpuoptions(void); extern void mips_mt_set_cpuoptions(void);
struct class;
extern struct class *mt_class;
#endif /* __ASM_MIPS_MT_H */ #endif /* __ASM_MIPS_MT_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment