[OpenBIOS] [PATCH 4/5] ofmem: use helper to access command line parameters from qemu

Igor V. Kovalenko igor.v.kovalenko at gmail.com
Sun Dec 27 12:44:18 CET 2009


From: Igor V. Kovalenko <igor.v.kovalenko at gmail.com>

- arch_nvram_get: call ofmem_find_virtual to access
  kernel command line parameters from qemu

Signed-off-by: Igor V. Kovalenko <igor.v.kovalenko at gmail.com>
---
 arch/sparc64/openbios.c |   19 +++++++++++++------
 1 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/arch/sparc64/openbios.c b/arch/sparc64/openbios.c
index 03993b5..dd6151f 100644
--- a/arch/sparc64/openbios.c
+++ b/arch/sparc64/openbios.c
@@ -281,6 +281,7 @@ void arch_nvram_get(char *data)
     uint16_t machine_id;
     const char *stdin_path, *stdout_path;
     const char *kernel_cmdline;
+    ucell kernel_cmdline_addr;
 
     fw_cfg_init();
 
@@ -302,12 +303,18 @@ void arch_nvram_get(char *data)
     kernel_size = fw_cfg_read_i32(FW_CFG_KERNEL_SIZE);
     if (kernel_size)
         kernel_image = fw_cfg_read_i64(FW_CFG_KERNEL_ADDR);
-    kernel_cmdline = (const char *) fw_cfg_read_i64(FW_CFG_KERNEL_CMDLINE);
-    if (kernel_cmdline) {
-        size = strlen(kernel_cmdline);
-        if (size > OBIO_CMDLINE_MAX - 1)
-            size = OBIO_CMDLINE_MAX - 1;
-        memcpy(&obio_cmdline, kernel_cmdline, size);
+    /* first read physical address of command line parameters */
+    kernel_cmdline_addr = fw_cfg_read_i64(FW_CFG_KERNEL_CMDLINE);
+    if (kernel_cmdline_addr) {
+        /* find virtual address, expect it to be mapped by entry.S */
+        kernel_cmdline_addr = ofmem_find_virtual(kernel_cmdline_addr);
+        if (kernel_cmdline_addr != (ucell)-1) {
+            kernel_cmdline = (const char*) kernel_cmdline_addr;
+            size = strlen(kernel_cmdline);
+            if (size > OBIO_CMDLINE_MAX - 1)
+                size = OBIO_CMDLINE_MAX - 1;
+            memcpy(&obio_cmdline, kernel_cmdline, size);
+        }
     }
     obio_cmdline[size] = '\0';
     qemu_cmdline = (uint64_t)obio_cmdline;




More information about the OpenBIOS mailing list