--- zzzz-none-000/linux-2.6.13.1/arch/mips/mips-boards/generic/init.c 2005-09-10 02:42:58.000000000 +0000 +++ ohio-7170-487/linux-2.6.13.1/arch/mips/mips-boards/generic/init.c 2006-11-09 09:11:12.000000000 +0000 @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -34,6 +35,7 @@ #ifdef CONFIG_MIPS_MALTA #include #endif +#include #ifdef CONFIG_KGDB extern int rs_kgdb_hook(int, int); @@ -45,13 +47,13 @@ #endif int prom_argc; -int *_prom_argv, *_prom_envp; +int *_prom_argv; +/*--- #define prom_printf printk ---*/ /* * YAMON (32-bit PROM) pass arguments and environment as 32-bit pointer. * This macro take care of sign extension, if running in 64-bit mode. */ -#define prom_envp(index) ((char *)(long)_prom_envp[(index)]) int init_debug = 0; @@ -67,28 +69,6 @@ /* MIPS System controller register base */ unsigned long _pcictrl_msc; -char *prom_getenv(char *envname) -{ - /* - * Return a pointer to the given environment variable. - * In 64-bit mode: we're using 64-bit pointers, but all pointers - * in the PROM structures are only 32-bit, so we need some - * workarounds, if we are running in 64-bit mode. - */ - int i, index=0; - - i = strlen(envname); - - while (prom_envp(index)) { - if(strncmp(envname, prom_envp(index), i) == 0) { - return(prom_envp(index+1)); - } - index += 2; - } - - return NULL; -} - static inline unsigned char str2hexnum(unsigned char c) { if (c >= '0' && c <= '9') @@ -115,27 +95,27 @@ int get_ethernet_addr(char *ethernet_addr) { - char *ethaddr_str; + char *ethaddr_str; - ethaddr_str = prom_getenv("ethaddr"); + ethaddr_str = prom_getenv("ethaddr"); if (!ethaddr_str) { - printk("ethaddr not set in boot prom\n"); + printk("ethaddr not set in boot prom\n"); return -1; } str2eaddr(ethernet_addr, ethaddr_str); if (init_debug > 1) { - int i; + int i; printk("get_ethernet_addr: "); - for (i=0; i<5; i++) - printk("%02x:", (unsigned char)*(ethernet_addr+i)); + for (i=0; i<5; i++) + printk("%02x:", (unsigned char)*(ethernet_addr+i)); printk("%02x\n", *(ethernet_addr+i)); } return 0; } -#ifdef CONFIG_SERIAL_8250_CONSOLE +#if defined(CONFIG_SERIAL_8250_CONSOLE) static void __init console_config(void) { char console_string[40]; @@ -165,7 +145,6 @@ flow = 'r'; sprintf (console_string, " console=ttyS0,%d%c%c%c", baud, parity, bits, flow); strcat (prom_getcmdline(), console_string); - prom_printf("Config serial console:%s\n", console_string); } } #endif @@ -223,21 +202,59 @@ } #endif +/*------------------------------------------------------------------------------------------*\ +\*------------------------------------------------------------------------------------------*/ +static char env_buffer[2048]; + +/*--- #define DEBUG_PROM_INIT ---*/ + void __init prom_init(void) { +#if defined(DEBUG_PROM_INIT) + unsigned int i; +#endif + char *p; + static unsigned int once = 0; + if(once) + return; + once = 1; + prom_argc = fw_arg0; _prom_argv = (int *) fw_arg1; - _prom_envp = (int *) fw_arg2; +#if defined(DEBUG_PROM_INIT) + prom_printf("[prom_init] 0\n"); +#endif /*--- #if defined(DEBUG_PROM_INIT) ---*/ + +#if defined(CONFIG_MIPS_OHIO) || defined(CONFIG_MIPS_AR7) || defined(CONFIG_MIPS_UR8) + /*--------------------------------------------------------------------------------------*\ + \*--------------------------------------------------------------------------------------*/ + env_buffer[0] = '\0'; + p = env_buffer; +#if defined(DEBUG_PROM_INIT) + for(i = 0 ; i < prom_argc ; i++) { + prom_printf("[prom_init] argv[%u]=%s\n", i, _prom_argv[i]); + } +#endif /*--- #if defined(DEBUG_PROM_INIT) ---*/ + + env_init((int *)fw_arg2); +#endif /*--- #if defined(CONFIG_MIPS_OHIO) || defined(CONFIG_MIPS_AR7) || defined(CONFIG_MIPS_UR8) ---*/ + + /*--------------------------------------------------------------------------------------*\ + \*--------------------------------------------------------------------------------------*/ mips_display_message("LINUX"); -#ifdef CONFIG_MIPS_SEAD + +#if defined(CONFIG_MIPS_SEAD) set_io_port_base(KSEG1); +#elif defined(CONFIG_MIPS_OHIO) || defined(CONFIG_MIPS_AR7) || defined(CONFIG_MIPS_UR8) + set_io_port_base(KSEG1); #else /* * early setup of _pcictrl_bonito so that we can determine * the system controller on a CORE_EMUL board */ +#if !defined(CONFIG_MIPS_OHIO) && !defined(CONFIG_MIPS_AR7) && !defined(CONFIG_MIPS_UR8) _pcictrl_bonito = (unsigned long)ioremap(BONITO_REG_BASE, BONITO_REG_SIZE); mips_revision_corid = MIPS_REVISION_CORID; @@ -334,10 +351,13 @@ while(1); /* We die here... */ } #endif +#endif /*--- #if !defined(CONFIG_MIPS_OHIO) && !defined(CONFIG_MIPS_AR7) && !defined(CONFIG_MIPS_UR8) ---*/ prom_printf("\nLINUX started...\n"); prom_init_cmdline(); prom_meminit(); -#ifdef CONFIG_SERIAL_8250_CONSOLE +#if defined(CONFIG_SERIAL_8250_CONSOLE) console_config(); #endif } + +EXPORT_SYMBOL(prom_getenv);