From owner-svn-src-projects@FreeBSD.ORG Sat May 16 02:43:24 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id ADCB31065670; Sat, 16 May 2009 02:43:24 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 813F68FC12; Sat, 16 May 2009 02:43:24 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4G2hOv4041858; Sat, 16 May 2009 02:43:24 GMT (envelope-from gonzo@svn.freebsd.org) Received: (from gonzo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4G2hOpl041857; Sat, 16 May 2009 02:43:24 GMT (envelope-from gonzo@svn.freebsd.org) Message-Id: <200905160243.n4G2hOpl041857@svn.freebsd.org> From: Oleksandr Tymoshenko Date: Sat, 16 May 2009 02:43:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r192178 - projects/mips/sys/mips/atheros X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 16 May 2009 02:43:25 -0000 Author: gonzo Date: Sat May 16 02:43:24 2009 New Revision: 192178 URL: http://svn.freebsd.org/changeset/base/192178 Log: - Get memory size and base MAC address from RedBoot (if available) Modified: projects/mips/sys/mips/atheros/ar71xx_machdep.c Modified: projects/mips/sys/mips/atheros/ar71xx_machdep.c ============================================================================== --- projects/mips/sys/mips/atheros/ar71xx_machdep.c Sat May 16 02:39:13 2009 (r192177) +++ projects/mips/sys/mips/atheros/ar71xx_machdep.c Sat May 16 02:43:24 2009 (r192178) @@ -45,6 +45,8 @@ __FBSDID("$FreeBSD$"); #include #include +#include + #include #include #include @@ -56,6 +58,7 @@ __FBSDID("$FreeBSD$"); extern int *edata; extern int *end; +uint32_t ar711_base_mac[ETHER_ADDR_LEN]; void platform_halt(void) @@ -99,13 +102,43 @@ platform_start(__register_t a0 __unused, vm_offset_t kernend; uint64_t platform_counter_freq, freq; uint32_t reg, div, pll_config; + int argc, i, count = 0; + char **argv, **envp; /* clear the BSS and SBSS segments */ kernend = round_page((vm_offset_t)&end); memset(&edata, 0, kernend - (vm_offset_t)(&edata)); - /* TODO: Get available memory from RedBoot. Is it possible? */ - realmem = btoc(64*1024*1024); + argc = a0; + argv = (char**)a1; + envp = (char**)a2; + /* + * Protect ourselves from garbage in registers + */ + if (MIPS_IS_VALID_PTR(envp)) { + for (i = 0; envp[i]; i += 2) + { + if (strcmp(envp[i], "memsize") == 0) + realmem = btoc(strtoul(envp[i+1], NULL, 16)); + else if (strcmp(envp[i], "ethaddr") == 0) { + count = sscanf(envp[i+1], "%x.%x.%x.%x.%x.%x", + &ar711_base_mac[0], &ar711_base_mac[1], + &ar711_base_mac[2], &ar711_base_mac[3], + &ar711_base_mac[4], &ar711_base_mac[5]); + if (count < 6) + memset(ar711_base_mac, 0, + sizeof(ar711_base_mac)); + } + } + } + + /* + * Just wild guess. RedBoot let us down and didn't reported + * memory size + */ + if (realmem == 0) + realmem = btoc(32*1024*1024); + /* phys_avail regions are in bytes */ phys_avail[0] = MIPS_KSEG0_TO_PHYS((vm_offset_t)&end); phys_avail[1] = ctob(realmem); @@ -134,6 +167,23 @@ platform_start(__register_t a0 __unused, printf(" a2 = %08x\n", a2); printf(" a3 = %08x\n", a3); + printf("Cmd line:"); + if (MIPS_IS_VALID_PTR(argv)) { + for (i = 0; i < argc; i++) + printf(" %s", argv[i]); + } + else + printf ("argv is invalid"); + printf("\n"); + + printf("Environment:\n"); + if (MIPS_IS_VALID_PTR(envp)) { + for (i = 0; envp[i]; i+=2) + printf(" %s = %s\n", envp[i], envp[i+1]); + } + else + printf ("envp is invalid\n"); + init_param2(physmem); mips_cpu_init(); pmap_bootstrap();