diff options
author | florian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2007-03-26 07:37:31 +0000 |
---|---|---|
committer | florian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2007-03-26 07:37:31 +0000 |
commit | 3f8c5b95adbaa43fd5fcfa94a713971e8331fc58 (patch) | |
tree | 730726717e5bd51d0c74179004e45b80a608ff5f /target | |
parent | 0704011af8da1ac2ef8abd5eab2627f1439800f8 (diff) |
Rewrite of the bootloader runtime detection (Gabor Juhos)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@6713 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target')
4 files changed, 10 insertions, 46 deletions
diff --git a/target/linux/adm5120-2.6/files/arch/mips/adm5120/Makefile b/target/linux/adm5120-2.6/files/arch/mips/adm5120/Makefile index 63024e36d..a68b4a145 100644 --- a/target/linux/adm5120-2.6/files/arch/mips/adm5120/Makefile +++ b/target/linux/adm5120-2.6/files/arch/mips/adm5120/Makefile @@ -2,6 +2,6 @@ # Makefile for the ADMtek ADM5120 SoC specific parts of the kernel # -obj-y := setup.o prom.o irq.o memory.o mipsIRQ.o +obj-y := setup.o prom.o irq.o memory.o mipsIRQ.o adm5120_info.o EXTRA_AFLAGS := $(CFLAGS) diff --git a/target/linux/adm5120-2.6/files/arch/mips/adm5120/prom.c b/target/linux/adm5120-2.6/files/arch/mips/adm5120/prom.c index 4c2076559..e644fc37c 100644 --- a/target/linux/adm5120-2.6/files/arch/mips/adm5120/prom.c +++ b/target/linux/adm5120-2.6/files/arch/mips/adm5120/prom.c @@ -29,20 +29,12 @@ #include <asm/bootinfo.h> #include <asm/addrspace.h> -/* boot loaders specific definitions */ -#define CFE_EPTSEAL 0x43464531 /* CFE1 is the magic number to recognize CFE from other bootloaders */ -#define CFE 1 -#define UBOOT 2 -#define MYLOADER 3 -#define UNKNOWN 0 +#include <adm5120_info.h> void setup_prom_printf(int); void prom_printf(char *, ...); void prom_meminit(void); -/* we assume we don't know the boot loader by default */ -int boot_loader_type = UNKNOWN; - #define ADM5120_ENVC 1 char *adm5120_envp[2*ADM5120_ENVC] = {"memsize","0x001000000"}; @@ -105,6 +97,7 @@ char *prom_getenv(char *envname) printk(KERN_INFO "GETENV: not found.\n"); return(NULL); } + /* * initialize the prom module. @@ -114,35 +107,12 @@ void __init prom_init(void) /* you should these macros defined in include/asm/bootinfo.h */ mips_machgroup = MACH_GROUP_ADM_GW; mips_machtype = MACH_ADM_GW_5120; + + adm5120_info_init(); /* init command line, register a default kernel command line */ strcpy(&(arcs_cmdline[0]), "console=ttyS0,115200 rootfstype=squashfs,jffs2 init=/etc/preinit"); - /* check for CFE by finding the CFE magic number */ - int *prom_vec = (int *) fw_arg3; - int argc = fw_arg0; - unsigned int cfe_eptseal; - - if (argc < 0) - cfe_eptseal = (uint32_t)(unsigned long)prom_vec; - else { - if ((int32_t)(long)prom_vec < 0) - /* - * Old loaders all it gives us is the handle, - * so assume the seal. - */ - cfe_eptseal = CFE_EPTSEAL; - else - /* - * Newer loaders bundle the handle/ept/eptseal - */ - cfe_eptseal = (unsigned int)((uint32_t *)prom_vec)[3]; - } - if (cfe_eptseal == CFE_EPTSEAL) { - boot_loader_type = CFE; - printk("adm5120 : CFE boot loader\n"); - } - /* init memory map */ prom_meminit(); } diff --git a/target/linux/adm5120-2.6/files/drivers/net/adm5120sw.c b/target/linux/adm5120-2.6/files/drivers/net/adm5120sw.c index ddb54d4d7..c75ad4abb 100644 --- a/target/linux/adm5120-2.6/files/drivers/net/adm5120sw.c +++ b/target/linux/adm5120-2.6/files/drivers/net/adm5120sw.c @@ -20,6 +20,8 @@ #include <asm/io.h> #include "adm5120sw.h" +#include "adm5120_info.h" + MODULE_AUTHOR("Jeroen Vreeken (pe1rxq@amsat.org)"); MODULE_DESCRIPTION("ADM5120 ethernet switch driver"); MODULE_LICENSE("GPL"); @@ -316,7 +318,7 @@ static int adm5120_sw_set_mac_address(struct net_device *dev, void *p) static int adm5120_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { int err; - struct adm5120_info info; + struct adm5120_sw_info info; struct adm5120_sw *priv = netdev_priv(dev); switch(cmd) { @@ -391,7 +393,7 @@ static int __init adm5120_sw_init(void) if (adm5120_get_reg(ADM5120_CODE) & ADM5120_CODE_PQFP) adm5120_nrdevs = 5; /* CFE based devices only have two enet ports */ - else if (boot_loader_type == CFE) + else if (adm5120_info.boot_loader == BOOT_LOADER_CFE) adm5120_nrdevs = 2; else adm5120_nrdevs = 6; diff --git a/target/linux/adm5120-2.6/files/drivers/net/adm5120sw.h b/target/linux/adm5120-2.6/files/drivers/net/adm5120sw.h index 4ea7a2012..09ef9fe39 100644 --- a/target/linux/adm5120-2.6/files/drivers/net/adm5120sw.h +++ b/target/linux/adm5120-2.6/files/drivers/net/adm5120sw.h @@ -97,18 +97,10 @@ struct adm5120_sw { #define SIOCGMATRIX SIOCDEVPRIVATE+1 #define SIOCGADMINFO SIOCDEVPRIVATE+2 -struct adm5120_info { +struct adm5120_sw_info { u16 magic; u16 ports; u16 vlan; }; -#define UNKNOWN 0 - -#define CFE 1 -#define UBOOT 2 -#define MYLOADER 3 - -/* Type of boot loader, detected by the prom */ -extern boot_loader_type; #endif /* _INCLUDE_ADM5120SW_H_ */ |