| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- --- /dev/null
- +++ b/include/asm-mips/mips_machine.h
- @@ -0,0 +1,47 @@
- +/*
- + * Copyright (C) 2008 Gabor Juhos <[email protected]>
- + *
- + * This program is free software; you can redistribute it and/or modify it
- + * under the terms of the GNU General Public License version 2 as published
- + * by the Free Software Foundation.
- + *
- + */
- +
- +#ifndef __ASM_MIPS_MACHINE_H
- +#define __ASM_MIPS_MACHINE_H
- +
- +#include <linux/init.h>
- +#include <linux/list.h>
- +
- +#define MIPS_MACHINE_NAME_LEN 64
- +
- +struct mips_machine {
- + unsigned long mach_type;
- + void (*mach_setup)(void);
- + unsigned char mach_name[MIPS_MACHINE_NAME_LEN];
- + struct list_head list;
- +};
- +
- +void mips_machine_register(struct mips_machine *) __init;
- +void mips_machine_setup(unsigned long machtype) __init;
- +
- +extern unsigned char mips_machine_name[MIPS_MACHINE_NAME_LEN];
- +
- +#define MIPS_MACHINE(_type, _name, _setup) \
- +static struct mips_machine machine_##_type __initdata = \
- +{ \
- + .mach_type = _type, \
- + .mach_name = _name, \
- + .mach_setup = _setup, \
- +}; \
- + \
- +static int __init register_machine_##_type(void) \
- +{ \
- + mips_machine_register(&machine_##_type); \
- + return 0; \
- +} \
- + \
- +pure_initcall(register_machine_##_type)
- +
- +#endif /* __ASM_MIPS_MACHINE_H */
- +
- --- /dev/null
- +++ b/arch/mips/kernel/mips_machine.c
- @@ -0,0 +1,58 @@
- +/*
- + * Copyright (C) 2008 Gabor Juhos <[email protected]>
- + *
- + * This program is free software; you can redistribute it and/or modify it
- + * under the terms of the GNU General Public License version 2 as published
- + * by the Free Software Foundation.
- + *
- + */
- +
- +#include <asm/mips_machine.h>
- +#include <asm/bootinfo.h>
- +
- +static struct list_head mips_machines __initdata =
- + LIST_HEAD_INIT(mips_machines);
- +
- +unsigned char mips_machine_name[MIPS_MACHINE_NAME_LEN] = "Unknown";
- +
- +static struct mips_machine * __init mips_machine_find(unsigned long machtype)
- +{
- + struct list_head *this;
- +
- + list_for_each(this, &mips_machines) {
- + struct mips_machine *mach;
- +
- + mach = list_entry(this, struct mips_machine, list);
- + if (mach->mach_type == machtype)
- + return mach;
- + }
- +
- + return NULL;
- +}
- +
- +void __init mips_machine_register(struct mips_machine *mach)
- +{
- + list_add_tail(&mach->list, &mips_machines);
- +}
- +
- +void __init mips_machine_setup(unsigned long machtype)
- +{
- + struct mips_machine *mach;
- +
- + mach = mips_machine_find(machtype);
- + if (!mach) {
- + printk(KERN_ALERT "MIPS: no machine registered for "
- + "machtype %lu\n", machtype);
- + return;
- + }
- +
- + if (mach->mach_name[0])
- + strncpy(mips_machine_name, mach->mach_name,
- + MIPS_MACHINE_NAME_LEN);
- +
- + printk(KERN_INFO "MIPS: machine is %s\n", mips_machine_name);
- +
- + if (mach->mach_setup)
- + mach->mach_setup();
- +}
- +
- --- a/arch/mips/kernel/Makefile
- +++ b/arch/mips/kernel/Makefile
- @@ -86,6 +86,7 @@ obj-$(CONFIG_GPIO_TXX9) += gpio_txx9.o
-
- obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o
- obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
- +obj-$(CONFIG_MIPS_MACHINE) += mips_machine.o
-
- CFLAGS_cpu-bugs64.o = $(shell if $(CC) $(KBUILD_CFLAGS) -Wa,-mdaddi -c -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-DHAVE_AS_SET_DADDI"; fi)
-
- --- a/arch/mips/Kconfig
- +++ b/arch/mips/Kconfig
- @@ -858,6 +858,9 @@ config MIPS_DISABLE_OBSOLETE_IDE
- config SYNC_R4K
- bool
-
- +config MIPS_MACHINE
- + def_bool n
- +
- config NO_IOPORT
- def_bool n
-
|