pc: split out memory allocation from pc_init1() into pc_memory_init()

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 <yamahata@valinux.co.jp>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
Isaku Yamahata 2010-05-14 16:29:11 +09:00 committed by Blue Swirl
parent 7016647726
commit 3d53f5c36f

67
hw/pc.c
View File

@ -834,35 +834,19 @@ static qemu_irq *pc_allocate_cpu_irq(void)
return qemu_allocate_irqs(pic_irq_request, NULL, 1); return qemu_allocate_irqs(pic_irq_request, NULL, 1);
} }
/* PC hardware initialisation */ static void pc_memory_init(ram_addr_t ram_size,
static void pc_init1(ram_addr_t ram_size,
const char *boot_device,
const char *kernel_filename, const char *kernel_filename,
const char *kernel_cmdline, const char *kernel_cmdline,
const char *initrd_filename, const char *initrd_filename,
const char *cpu_model, ram_addr_t *below_4g_mem_size_p,
int pci_enabled) ram_addr_t *above_4g_mem_size_p)
{ {
char *filename; char *filename;
int ret, linux_boot, i; int ret, linux_boot, i;
ram_addr_t ram_addr, bios_offset, option_rom_offset; ram_addr_t ram_addr, bios_offset, option_rom_offset;
ram_addr_t below_4g_mem_size, above_4g_mem_size = 0; ram_addr_t below_4g_mem_size, above_4g_mem_size = 0;
int bios_size, isa_bios_size; int bios_size, isa_bios_size;
PCIBus *pci_bus; void **fw_cfg;
PCII440FXState *i440fx_state;
int piix3_devfn = -1;
qemu_irq *cpu_irq;
qemu_irq *isa_irq;
qemu_irq *i8259;
qemu_irq *cmos_s3;
qemu_irq *smi_irq;
IsaIrqState *isa_irq_state;
DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
DriveInfo *fd[MAX_FD];
void *fw_cfg;
FDCtrl *floppy_controller;
RTCState *rtc_state;
PITState *pit;
if (ram_size >= 0xe0000000 ) { if (ram_size >= 0xe0000000 ) {
above_4g_mem_size = ram_size - 0xe0000000; above_4g_mem_size = ram_size - 0xe0000000;
@ -870,13 +854,11 @@ static void pc_init1(ram_addr_t ram_size,
} else { } else {
below_4g_mem_size = ram_size; 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); linux_boot = (kernel_filename != NULL);
pc_cpus_init(cpu_model);
vmport_init();
/* allocate RAM */ /* allocate RAM */
ram_addr = qemu_ram_alloc(below_4g_mem_size); ram_addr = qemu_ram_alloc(below_4g_mem_size);
cpu_register_physical_memory(0, 0xa0000, ram_addr); cpu_register_physical_memory(0, 0xa0000, ram_addr);
@ -939,12 +921,47 @@ static void pc_init1(ram_addr_t ram_size,
rom_set_fw(fw_cfg); rom_set_fw(fw_cfg);
if (linux_boot) { 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++) { for (i = 0; i < nb_option_roms; i++) {
rom_add_option(option_rom[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;
PCII440FXState *i440fx_state;
int piix3_devfn = -1;
qemu_irq *cpu_irq;
qemu_irq *isa_irq;
qemu_irq *i8259;
qemu_irq *cmos_s3;
qemu_irq *smi_irq;
IsaIrqState *isa_irq_state;
DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
DriveInfo *fd[MAX_FD];
FDCtrl *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);
cpu_irq = pc_allocate_cpu_irq(); cpu_irq = pc_allocate_cpu_irq();
i8259 = i8259_init(cpu_irq[0]); i8259 = i8259_init(cpu_irq[0]);