From patchwork Wed Jan 6 02:39:38 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Isaku Yamahata X-Patchwork-Id: 42262 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id D5CAFB6EF0 for ; Wed, 6 Jan 2010 14:10:37 +1100 (EST) Received: from localhost ([127.0.0.1]:32795 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NSMI5-0005rs-O2 for incoming@patchwork.ozlabs.org; Tue, 05 Jan 2010 22:10:33 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NSLoi-0004Qd-P5 for qemu-devel@nongnu.org; Tue, 05 Jan 2010 21:40:13 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NSLoa-0004L8-Bo for qemu-devel@nongnu.org; Tue, 05 Jan 2010 21:40:08 -0500 Received: from [199.232.76.173] (port=54800 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NSLoX-0004L1-Il for qemu-devel@nongnu.org; Tue, 05 Jan 2010 21:40:01 -0500 Received: from mail.valinux.co.jp ([210.128.90.3]:60925) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NSLoU-0003kN-K8 for qemu-devel@nongnu.org; Tue, 05 Jan 2010 21:40:01 -0500 Received: from ps.local.valinux.co.jp (vagw.valinux.co.jp [210.128.90.14]) by mail.valinux.co.jp (Postfix) with SMTP id 0EACB182AE; Wed, 6 Jan 2010 11:39:48 +0900 (JST) Received: (nullmailer pid 28754 invoked by uid 1000); Wed, 06 Jan 2010 02:39:52 -0000 From: Isaku Yamahata To: qemu-devel@nongnu.org, kraxel@redhat.com, aurelien@aurel32.net Date: Wed, 6 Jan 2010 11:39:38 +0900 Message-Id: <1262745591-28697-15-git-send-email-yamahata@valinux.co.jp> X-Mailer: git-send-email 1.6.5.4 In-Reply-To: <1262745591-28697-1-git-send-email-yamahata@valinux.co.jp> References: <1262745591-28697-1-git-send-email-yamahata@valinux.co.jp> X-Virus-Scanned: clamav-milter 0.95.2 at va-mail.local.valinux.co.jp X-Virus-Status: Clean X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 3) Cc: yamahata@valinux.co.jp Subject: [Qemu-devel] [PATCH V12 14/27] pc: split out memory allocation from pc_init1() into pc_memory_init() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Split out memory allocation and rom/bios loading which doesn't depend on piix from pc_init1() into pc_memory_init(). Later it will be used. Signed-off-by: Isaku Yamahata Acked-by: Gerd Hoffmann --- hw/pc.c | 74 +++++++++++++++++++++++++++++++++++++++----------------------- 1 files changed, 46 insertions(+), 28 deletions(-) diff --git a/hw/pc.c b/hw/pc.c index 90cf0f4..e5bd712 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -1016,34 +1016,19 @@ static qemu_irq *pc_allocate_cpu_irq(void) return qemu_allocate_irqs(pic_irq_request, NULL, 1); } -/* PC hardware initialisation */ -static void pc_init1(ram_addr_t ram_size, - const char *boot_device, - const char *kernel_filename, - const char *kernel_cmdline, - const char *initrd_filename, - const char *cpu_model, - int pci_enabled) +static void pc_memory_init(ram_addr_t ram_size, + const char *kernel_filename, + const char *kernel_cmdline, + const char *initrd_filename, + ram_addr_t *below_4g_mem_size_p, + ram_addr_t *above_4g_mem_size_p, + void **fw_cfg) { char *filename; int ret, linux_boot, i; ram_addr_t ram_addr, bios_offset, option_rom_offset; ram_addr_t below_4g_mem_size, above_4g_mem_size = 0; int bios_size, isa_bios_size; - PCIBus *pci_bus; - ISADevice *isa_dev; - PCII440FXState *i440fx_state; - int piix3_devfn = -1; - qemu_irq *cpu_irq; - qemu_irq *isa_irq; - qemu_irq *i8259; - IsaIrqState *isa_irq_state; - DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS]; - DriveInfo *fd[MAX_FD]; - void *fw_cfg; - fdctrl_t *floppy_controller; - RTCState *rtc_state; - PITState *pit; if (ram_size >= 0xe0000000 ) { above_4g_mem_size = ram_size - 0xe0000000; @@ -1051,13 +1036,11 @@ static void pc_init1(ram_addr_t ram_size, } else { below_4g_mem_size = ram_size; } + *above_4g_mem_size_p = above_4g_mem_size; + *below_4g_mem_size_p = below_4g_mem_size; linux_boot = (kernel_filename != NULL); - pc_cpus_init(cpu_model); - - vmport_init(); - /* allocate RAM */ ram_addr = qemu_ram_alloc(0xa0000); cpu_register_physical_memory(0, 0xa0000, ram_addr); @@ -1126,15 +1109,50 @@ static void pc_init1(ram_addr_t ram_size, cpu_register_physical_memory((uint32_t)(-bios_size), bios_size, bios_offset | IO_MEM_ROM); - fw_cfg = bochs_bios_init(); + *fw_cfg = bochs_bios_init(); if (linux_boot) { - load_linux(fw_cfg, kernel_filename, initrd_filename, kernel_cmdline, below_4g_mem_size); + load_linux(*fw_cfg, kernel_filename, initrd_filename, kernel_cmdline, below_4g_mem_size); } for (i = 0; i < nb_option_roms; i++) { rom_add_option(option_rom[i]); } +} + +/* PC hardware initialisation */ +static void pc_init1(ram_addr_t ram_size, + const char *boot_device, + const char *kernel_filename, + const char *kernel_cmdline, + const char *initrd_filename, + const char *cpu_model, + int pci_enabled) +{ + int i; + ram_addr_t below_4g_mem_size, above_4g_mem_size; + PCIBus *pci_bus; + ISADevice *isa_dev; + PCII440FXState *i440fx_state; + int piix3_devfn = -1; + qemu_irq *cpu_irq; + qemu_irq *isa_irq; + qemu_irq *i8259; + IsaIrqState *isa_irq_state; + DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS]; + DriveInfo *fd[MAX_FD]; + void *fw_cfg; + fdctrl_t *floppy_controller; + RTCState *rtc_state; + PITState *pit; + + pc_cpus_init(cpu_model); + + vmport_init(); + + /* allocate ram and load rom/bios */ + pc_memory_init(ram_size, kernel_filename, kernel_cmdline, initrd_filename, + &below_4g_mem_size, &above_4g_mem_size, &fw_cfg); cpu_irq = pc_allocate_cpu_irq(); i8259 = i8259_init(cpu_irq[0]);