1 #include <linux/init.h>
2 #include <linux/module.h>
3 #include <linux/bootmem.h>
4 #include <linux/etherdevice.h>
6 #include <asm/bootinfo.h>
10 #include <ifxmips_prom.h>
12 /* for Multithreading (APRP) on MIPS34K */
13 unsigned long physical_memsize
;
16 prom_free_prom_memory(void)
20 extern unsigned char ifxmips_ethaddr
[6];
24 ifxmips_set_ethaddr(char *str
)
27 (((x >= '0' && x <= '9') || (x >= 'a' && x <= 'f') \
28 || (x >= 'A' && x <= 'F')) ? (1) : (0))
30 str
= strchr(str
, '=');
34 if (strlen(str
) != 17)
36 for (i
= 0; i
< 6; i
++) {
37 if (!IS_HEX(str
[3 * i
]) || !IS_HEX(str
[(3 * i
) + 1]))
39 if ((i
!= 5) && (str
[(3 * i
) + 2] != ':'))
41 ifxmips_ethaddr
[i
] = simple_strtoul(&str
[3 * i
], NULL
, 16);
43 if (is_valid_ether_addr(ifxmips_ethaddr
))
48 __setup("ethaddr", ifxmips_set_ethaddr
);
50 static void __init
prom_detect_machtype(void)
52 mips_machtype
= IFXMIPS_MACH_EASY50712
;
55 static void __init
prom_init_cmdline(void)
58 char **argv
= (char **) fw_arg1
;
59 char **envp
= (char **) fw_arg2
;
61 int memsize
= 16; /* assume 16M as default */
66 argv
= (char **)KSEG1ADDR((unsigned long)argv
);
67 arcs_cmdline
[0] = '\0';
68 for (i
= 1; i
< argc
; i
++)
70 char *a
= (char *)KSEG1ADDR(argv
[i
]);
73 if (strlen(arcs_cmdline
) + strlen(a
+ 1) >= sizeof(arcs_cmdline
))
75 printk("cmdline overflow, skipping: %s\n", a
);
78 strcat(arcs_cmdline
, a
);
79 strcat(arcs_cmdline
, " ");
82 strcpy(&(arcs_cmdline
[0]),
83 "console=ttyS0,115200 rootfstype=squashfs,jffs2");
85 envp
= (char **)KSEG1ADDR((unsigned long)envp
);
88 char *e
= (char *)KSEG1ADDR(*envp
);
90 if (!strncmp(e
, "memsize=", 8))
93 memsize
= simple_strtoul(e
, NULL
, 10);
97 memsize
*= 1024 * 1024;
99 add_memory_region(0x00000000, memsize
, BOOT_MEM_RAM
);
105 prom_detect_machtype();