mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-23 15:32:33 +00:00
128 lines
3.2 KiB
Diff
128 lines
3.2 KiB
Diff
|
--- a/arch/mips/kernel/mips_machine.c
|
||
|
+++ b/arch/mips/kernel/mips_machine.c
|
||
|
@@ -7,12 +7,13 @@
|
||
|
*
|
||
|
*/
|
||
|
#include <linux/mm.h>
|
||
|
+#include <linux/string.h>
|
||
|
|
||
|
#include <asm/mips_machine.h>
|
||
|
-#include <asm/bootinfo.h>
|
||
|
|
||
|
static struct list_head mips_machines __initdata =
|
||
|
LIST_HEAD_INIT(mips_machines);
|
||
|
+static char *mips_machid __initdata;
|
||
|
|
||
|
char *mips_machine_name = "Unknown";
|
||
|
|
||
|
@@ -55,20 +56,64 @@ void __init mips_machine_set_name(char *
|
||
|
}
|
||
|
}
|
||
|
|
||
|
-void __init mips_machine_setup(unsigned long machtype)
|
||
|
+void __init mips_machine_setup(void)
|
||
|
{
|
||
|
struct mips_machine *mach;
|
||
|
|
||
|
- mach = mips_machine_find(machtype);
|
||
|
+ mach = mips_machine_find(mips_machtype);
|
||
|
if (!mach) {
|
||
|
- printk(KERN_ALERT "MIPS: no machine registered for "
|
||
|
- "machtype %lu\n", machtype);
|
||
|
+ printk(KERN_WARNING "MIPS: no machine registered for "
|
||
|
+ "machtype %lu\n", mips_machtype);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
mips_machine_set_name(mach->mach_name);
|
||
|
- printk(KERN_INFO "MIPS: machine is %s\n", mips_machine_name);
|
||
|
+ printk(KERN_NOTICE "MIPS: machine is %s\n", mips_machine_name);
|
||
|
|
||
|
if (mach->mach_setup)
|
||
|
mach->mach_setup();
|
||
|
}
|
||
|
+
|
||
|
+int __init mips_machtype_setup(char *id)
|
||
|
+{
|
||
|
+ if (mips_machid == NULL)
|
||
|
+ mips_machid = id;
|
||
|
+
|
||
|
+ return 1;
|
||
|
+}
|
||
|
+
|
||
|
+__setup("machtype=", mips_machtype_setup);
|
||
|
+
|
||
|
+static int __init mips_machtype_init(void)
|
||
|
+{
|
||
|
+ struct list_head *this;
|
||
|
+ struct mips_machine *mach;
|
||
|
+
|
||
|
+ if (mips_machid == NULL)
|
||
|
+ return 0;
|
||
|
+
|
||
|
+ list_for_each(this, &mips_machines) {
|
||
|
+ mach = list_entry(this, struct mips_machine, list);
|
||
|
+ if (strncmp(mach->mach_id, mips_machid,
|
||
|
+ strlen(mips_machid)) == 0
|
||
|
+ ) {
|
||
|
+ mips_machtype = mach->mach_type;
|
||
|
+ return 0;
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ printk(KERN_WARNING
|
||
|
+ "MIPS: no machine found for id: '%s', registered machines:\n",
|
||
|
+ mips_machid);
|
||
|
+ printk(KERN_WARNING "%32s %s\n", "id", "name");
|
||
|
+
|
||
|
+ list_for_each(this, &mips_machines) {
|
||
|
+ mach = list_entry(this, struct mips_machine, list);
|
||
|
+ printk(KERN_WARNING "%32s %s\n",
|
||
|
+ mach->mach_id, mach->mach_name);
|
||
|
+ }
|
||
|
+
|
||
|
+ return 0;
|
||
|
+}
|
||
|
+
|
||
|
+core_initcall(mips_machtype_init);
|
||
|
--- a/include/asm-mips/mips_machine.h
|
||
|
+++ b/include/asm-mips/mips_machine.h
|
||
|
@@ -13,24 +13,32 @@
|
||
|
#include <linux/init.h>
|
||
|
#include <linux/list.h>
|
||
|
|
||
|
+#include <asm/bootinfo.h>
|
||
|
+
|
||
|
struct mips_machine {
|
||
|
unsigned long mach_type;
|
||
|
- void (*mach_setup)(void);
|
||
|
+ char *mach_id;
|
||
|
char *mach_name;
|
||
|
+ void (*mach_setup)(void);
|
||
|
struct list_head list;
|
||
|
};
|
||
|
|
||
|
void mips_machine_register(struct mips_machine *) __init;
|
||
|
-void mips_machine_setup(unsigned long machtype) __init;
|
||
|
+void mips_machine_setup(void) __init;
|
||
|
+int mips_machtype_setup(char *id) __init;
|
||
|
void mips_machine_set_name(char *name) __init;
|
||
|
|
||
|
extern char *mips_machine_name;
|
||
|
|
||
|
-#define MIPS_MACHINE(_type, _name, _setup) \
|
||
|
-static char machine_name_##_type[] __initdata = _name; \
|
||
|
-static struct mips_machine machine_##_type __initdata = \
|
||
|
+#define MIPS_MACHINE(_type, _id, _name, _setup) \
|
||
|
+static char machine_name_##_type[] __initconst \
|
||
|
+ __aligned(1) = _name; \
|
||
|
+static char machine_id_##_type[] __initconst \
|
||
|
+ __aligned(1) = _id; \
|
||
|
+static struct mips_machine machine_##_type __initconst = \
|
||
|
{ \
|
||
|
.mach_type = _type, \
|
||
|
+ .mach_id = machine_id_##_type, \
|
||
|
.mach_name = machine_name_##_type, \
|
||
|
.mach_setup = _setup, \
|
||
|
}; \
|