From patchwork Thu Nov 1 16:32:06 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kiszka X-Patchwork-Id: 196287 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 900B12C00DA for ; Fri, 2 Nov 2012 03:43:44 +1100 (EST) Received: from localhost ([::1]:35811 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TTxrq-0005B5-QL for incoming@patchwork.ozlabs.org; Thu, 01 Nov 2012 12:43:42 -0400 Received: from eggs.gnu.org ([208.118.235.92]:36790) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TTxri-0005AM-S0 for qemu-devel@nongnu.org; Thu, 01 Nov 2012 12:43:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TTxrg-00051E-Vn for qemu-devel@nongnu.org; Thu, 01 Nov 2012 12:43:34 -0400 Received: from mout.web.de ([212.227.15.4]:57549) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TTxgf-0002CC-0z for qemu-devel@nongnu.org; Thu, 01 Nov 2012 12:32:09 -0400 Received: from mchn199C.mchp.siemens.de ([95.157.56.37]) by smtp.web.de (mrweb103) with ESMTPSA (Nemesis) id 0M6mTI-1T90Yl1S1k-00wzCn; Thu, 01 Nov 2012 17:32:07 +0100 Message-ID: <5092A406.6030402@web.de> Date: Thu, 01 Nov 2012 17:32:06 +0100 From: Jan Kiszka User-Agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); de; rv:1.8.1.12) Gecko/20080226 SUSE/2.0.0.12-1.1 Thunderbird/2.0.0.12 Mnenhy/0.7.5.666 MIME-Version: 1.0 To: qemu-devel X-Enigmail-Version: 1.4.5 X-Provags-ID: V02:K0:xJxW1fmVPGJA/1E6q5ttk5LfWDucohzJaDD0M+22uYk OwvLKSs2I6Qw6TlRg74PvvvwjVEdrU3XnA6hN0n+TuJ1FEFUw9 8rg0uyWvF4Sym675rycmb+7HVQjGTPH3B3w/FDmrscPzAOsIF4 yCg7c45RpKcnds3wZzlG27MQcTXBSAOEMnT51w1/LdPbuAV9Hr zbO3JKAjDw/VHLGBc1MVg== X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic] X-Received-From: 212.227.15.4 Cc: Jordan Justen Subject: [Qemu-devel] [PATCH] pc_sysfw: Always use alias for ISA BIOS region X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Jan Kiszka This is no technical reason (anymore) for copying the ISA BIOS from the original region. Instead, refactor pc_isa_bios_init to serve both pflash and old-style BIOS setup. Signed-off-by: Jan Kiszka --- hw/pc_sysfw.c | 42 +++++++++--------------------------------- 1 files changed, 9 insertions(+), 33 deletions(-) diff --git a/hw/pc_sysfw.c b/hw/pc_sysfw.c index 9d7c5f4..07627df 100644 --- a/hw/pc_sysfw.c +++ b/hw/pc_sysfw.c @@ -41,36 +41,24 @@ typedef struct PcSysFwDevice { } PcSysFwDevice; static void pc_isa_bios_init(MemoryRegion *rom_memory, - MemoryRegion *flash_mem, - int ram_size) + MemoryRegion *bios) { + uint64_t bios_size = memory_region_size(bios); int isa_bios_size; MemoryRegion *isa_bios; - uint64_t flash_size; - void *flash_ptr, *isa_bios_ptr; - - flash_size = memory_region_size(flash_mem); /* map the last 128KB of the BIOS in ISA space */ - isa_bios_size = flash_size; + isa_bios_size = bios_size; if (isa_bios_size > (128 * 1024)) { isa_bios_size = 128 * 1024; } isa_bios = g_malloc(sizeof(*isa_bios)); - memory_region_init_ram(isa_bios, "isa-bios", isa_bios_size); - vmstate_register_ram_global(isa_bios); + memory_region_init_alias(isa_bios, "isa-bios", bios, + bios_size - isa_bios_size, isa_bios_size); memory_region_add_subregion_overlap(rom_memory, 0x100000 - isa_bios_size, isa_bios, 1); - - /* copy ISA rom image from top of flash memory */ - flash_ptr = memory_region_get_ram_ptr(flash_mem); - isa_bios_ptr = memory_region_get_ram_ptr(isa_bios); - memcpy(isa_bios_ptr, - ((uint8_t*)flash_ptr) + (flash_size - isa_bios_size), - isa_bios_size); - memory_region_set_readonly(isa_bios, true); } @@ -129,14 +117,14 @@ static void pc_system_flash_init(MemoryRegion *rom_memory, 1, 0x0000, 0x0000, 0x0000, 0x0000, 0); flash_mem = pflash_cfi01_get_memory(system_flash); - pc_isa_bios_init(rom_memory, flash_mem, size); + pc_isa_bios_init(rom_memory, flash_mem); } static void old_pc_system_rom_init(MemoryRegion *rom_memory) { char *filename; - MemoryRegion *bios, *isa_bios; - int bios_size, isa_bios_size; + MemoryRegion *bios; + int bios_size; int ret; /* BIOS load */ @@ -167,19 +155,7 @@ static void old_pc_system_rom_init(MemoryRegion *rom_memory) g_free(filename); } - /* map the last 128KB of the BIOS in ISA space */ - isa_bios_size = bios_size; - if (isa_bios_size > (128 * 1024)) { - isa_bios_size = 128 * 1024; - } - isa_bios = g_malloc(sizeof(*isa_bios)); - memory_region_init_alias(isa_bios, "isa-bios", bios, - bios_size - isa_bios_size, isa_bios_size); - memory_region_add_subregion_overlap(rom_memory, - 0x100000 - isa_bios_size, - isa_bios, - 1); - memory_region_set_readonly(isa_bios, true); + pc_isa_bios_init(rom_memory, bios); /* map all the bios at the top of memory */ memory_region_add_subregion(rom_memory,