487d70d0b8
This patch adds a generic solution to support multiple machines based on a given SoC within a single kernel image. It is implemented already for several other architectures but MIPS has no generic support for that yet. [Ralf: This competes with DT but DT is a much more complex solution and this code has been used by OpenWRT for a long time so for now DT is a bad reason to stop the merge but longer term this should be migrated to DT.] Signed-off-by: Gabor Juhos <juhosg@openwrt.org> Cc: linux-mips@linux-mips.org Cc: kaloz@openwrt.org Cc: Luis R. Rodriguez <lrodriguez@atheros.com> Cc: Cliff Holden <Cliff.Holden@Atheros.com> Patchwork: https://patchwork.linux-mips.org/patch/1814/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
54 lines
1.5 KiB
C
54 lines
1.5 KiB
C
/*
|
|
* Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org>
|
|
*
|
|
* 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/stddef.h>
|
|
|
|
#include <asm/bootinfo.h>
|
|
|
|
struct mips_machine {
|
|
unsigned long mach_type;
|
|
const char *mach_id;
|
|
const char *mach_name;
|
|
void (*mach_setup)(void);
|
|
};
|
|
|
|
#define MIPS_MACHINE(_type, _id, _name, _setup) \
|
|
static const char machine_name_##_type[] __initconst \
|
|
__aligned(1) = _name; \
|
|
static const char machine_id_##_type[] __initconst \
|
|
__aligned(1) = _id; \
|
|
static struct mips_machine machine_##_type \
|
|
__used __section(.mips.machines.init) = \
|
|
{ \
|
|
.mach_type = _type, \
|
|
.mach_id = machine_id_##_type, \
|
|
.mach_name = machine_name_##_type, \
|
|
.mach_setup = _setup, \
|
|
};
|
|
|
|
extern long __mips_machines_start;
|
|
extern long __mips_machines_end;
|
|
|
|
#ifdef CONFIG_MIPS_MACHINE
|
|
int mips_machtype_setup(char *id) __init;
|
|
void mips_machine_setup(void) __init;
|
|
void mips_set_machine_name(const char *name) __init;
|
|
char *mips_get_machine_name(void);
|
|
#else
|
|
static inline int mips_machtype_setup(char *id) { return 1; }
|
|
static inline void mips_machine_setup(void) { }
|
|
static inline void mips_set_machine_name(const char *name) { }
|
|
static inline char *mips_get_machine_name(void) { return NULL; }
|
|
#endif /* CONFIG_MIPS_MACHINE */
|
|
|
|
#endif /* __ASM_MIPS_MACHINE_H */
|