From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LFaJ6-0008Pw-FF for qemu-devel@nongnu.org; Wed, 24 Dec 2008 15:26:16 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LFaJ6-0008Pg-3j for qemu-devel@nongnu.org; Wed, 24 Dec 2008 15:26:16 -0500 Received: from [199.232.76.173] (port=47581 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LFaJ5-0008Pa-J0 for qemu-devel@nongnu.org; Wed, 24 Dec 2008 15:26:15 -0500 Received: from savannah.gnu.org ([199.232.41.3]:38833 helo=sv.gnu.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LFaJ5-00064F-AB for qemu-devel@nongnu.org; Wed, 24 Dec 2008 15:26:15 -0500 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.63) (envelope-from ) id 1LFaJ4-0005Uo-RV for qemu-devel@nongnu.org; Wed, 24 Dec 2008 20:26:14 +0000 Received: from blueswir1 by cvs.savannah.gnu.org with local (Exim 4.63) (envelope-from ) id 1LFaJ4-0005UA-Ia for qemu-devel@nongnu.org; Wed, 24 Dec 2008 20:26:14 +0000 MIME-Version: 1.0 Errors-To: blueswir1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Blue Swirl Message-Id: Date: Wed, 24 Dec 2008 20:26:14 +0000 Subject: [Qemu-devel] [6129] Add support for -prom-env command line options Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org 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");