All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [6129] Add support for -prom-env command line options
@ 2008-12-24 20:26 Blue Swirl
  0 siblings, 0 replies; only message in thread
From: Blue Swirl @ 2008-12-24 20:26 UTC (permalink / raw)
  To: qemu-devel

Revision: 6129
          http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6129
Author:   blueswir1
Date:     2008-12-24 20:26:14 +0000 (Wed, 24 Dec 2008)

Log Message:
-----------
Add support for -prom-env command line options

Modified Paths:
--------------
    trunk/hw/mac_nvram.c
    trunk/qemu-doc.texi
    trunk/sysemu.h
    trunk/vl.c

Modified: trunk/hw/mac_nvram.c
===================================================================
--- trunk/hw/mac_nvram.c	2008-12-24 20:23:51 UTC (rev 6128)
+++ trunk/hw/mac_nvram.c	2008-12-24 20:26:14 UTC (rev 6129)
@@ -23,6 +23,8 @@
  * THE SOFTWARE.
  */
 #include "hw.h"
+#include "firmware_abi.h"
+#include "sysemu.h"
 #include "ppc_mac.h"
 
 /* debug NVR */
@@ -122,26 +124,35 @@
     cpu_register_physical_memory(mem_base, s->size, s->mem_index);
 }
 
-static uint8_t nvram_chksum (const uint8_t *buf, int n)
-{
-    int sum, i;
-    sum = 0;
-    for(i = 0; i < n; i++)
-        sum += buf[i];
-    return (sum & 0xff) + (sum >> 8);
-}
-
-/* set a free Mac OS NVRAM partition */
+/* Set up a system OpenBIOS NVRAM partition */
 void pmac_format_nvram_partition (MacIONVRAMState *nvr, int len)
 {
-    uint8_t *buf;
-    char partition_name[12] = "wwwwwwwwwwww";
+    unsigned int i;
+    uint32_t start = 0, end;
+    struct OpenBIOS_nvpart_v1 *part_header;
 
-    buf = nvr->data;
-    buf[0] = 0x7f; /* free partition magic */
-    buf[1] = 0; /* checksum */
-    buf[2] = len >> 8;
-    buf[3] = len;
-    memcpy(buf + 4, partition_name, 12);
-    buf[1] = nvram_chksum(buf, 16);
+    // OpenBIOS nvram variables
+    // Variable partition
+    part_header = (struct OpenBIOS_nvpart_v1 *)nvr->data;
+    part_header->signature = OPENBIOS_PART_SYSTEM;
+    pstrcpy(part_header->name, sizeof(part_header->name), "system");
+
+    end = start + sizeof(struct OpenBIOS_nvpart_v1);
+    for (i = 0; i < nb_prom_envs; i++)
+        end = OpenBIOS_set_var(nvr->data, end, prom_envs[i]);
+
+    // End marker
+    nvr->data[end++] = '\0';
+
+    end = start + ((end - start + 15) & ~15);
+    OpenBIOS_finish_partition(part_header, end - start);
+
+    // free partition
+    start = end;
+    part_header = (struct OpenBIOS_nvpart_v1 *)&nvr->data[start];
+    part_header->signature = OPENBIOS_PART_FREE;
+    pstrcpy(part_header->name, sizeof(part_header->name), "free");
+
+    end = len;
+    OpenBIOS_finish_partition(part_header, end - start);
 }

Modified: trunk/qemu-doc.texi
===================================================================
--- trunk/qemu-doc.texi	2008-12-24 20:23:51 UTC (rev 6128)
+++ trunk/qemu-doc.texi	2008-12-24 20:26:14 UTC (rev 6129)
@@ -2343,6 +2343,18 @@
 
 Set the initial VGA graphic mode. The default is 800x600x15.
 
+@item -prom-env string
+
+Set OpenBIOS variables in NVRAM, for example:
+
+@example
+qemu-system-ppc -prom-env 'auto-boot?=false' \
+ -prom-env 'boot-device=hd:2,\yaboot' \
+ -prom-env 'boot-args=conf=hd:2,\yaboot.conf'
+@end example
+
+These variables are not used by Open Hack'Ware.
+
 @end table
 
 @c man end

Modified: trunk/sysemu.h
===================================================================
--- trunk/sysemu.h	2008-12-24 20:23:51 UTC (rev 6128)
+++ trunk/sysemu.h	2008-12-24 20:26:14 UTC (rev 6129)
@@ -108,7 +108,7 @@
 extern const char *option_rom[MAX_OPTION_ROMS];
 extern int nb_option_roms;
 
-#ifdef TARGET_SPARC
+#if defined(TARGET_SPARC) || defined(TARGET_PPC)
 #define MAX_PROM_ENVS 128
 extern const char *prom_envs[MAX_PROM_ENVS];
 extern unsigned int nb_prom_envs;

Modified: trunk/vl.c
===================================================================
--- trunk/vl.c	2008-12-24 20:23:51 UTC (rev 6128)
+++ trunk/vl.c	2008-12-24 20:26:14 UTC (rev 6129)
@@ -231,7 +231,7 @@
 #endif
 const char *qemu_name;
 int alt_grab = 0;
-#ifdef TARGET_SPARC
+#if defined(TARGET_SPARC) || defined(TARGET_PPC)
 unsigned int nb_prom_envs = 0;
 const char *prom_envs[MAX_PROM_ENVS];
 #endif
@@ -4185,7 +4185,7 @@
     { "semihosting", 0, QEMU_OPTION_semihosting },
 #endif
     { "name", HAS_ARG, QEMU_OPTION_name },
-#if defined(TARGET_SPARC)
+#if defined(TARGET_SPARC) || defined(TARGET_PPC)
     { "prom-env", HAS_ARG, QEMU_OPTION_prom_env },
 #endif
 #if defined(TARGET_ARM)
@@ -5049,7 +5049,7 @@
             case QEMU_OPTION_name:
                 qemu_name = optarg;
                 break;
-#ifdef TARGET_SPARC
+#if defined(TARGET_SPARC) || defined(TARGET_PPC)
             case QEMU_OPTION_prom_env:
                 if (nb_prom_envs >= MAX_PROM_ENVS) {
                     fprintf(stderr, "Too many prom variables\n");

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-12-24 20:26 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-12-24 20:26 [Qemu-devel] [6129] Add support for -prom-env command line options Blue Swirl

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.