From 7fb4fdcffeb199c1a742c45ac2413be8a9a33354 Mon Sep 17 00:00:00 2001 From: balrog Date: Thu, 24 Apr 2008 17:59:27 +0000 Subject: [PATCH] RAM usage information in machine definition. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4246 c046a42c-6fe2-441c-8c8c-71466251a162 --- exec.c | 2 +- hw/an5206.c | 1 + hw/boards.h | 2 ++ hw/etraxfs.c | 1 + hw/gumstix.c | 2 ++ hw/integratorcp.c | 15 ++++++++------- hw/mainstone.c | 23 +++++++++++++---------- hw/mcf5208.c | 1 + hw/mips_jazz.c | 2 ++ hw/mips_malta.c | 1 + hw/mips_mipssim.c | 1 + hw/mips_r4k.c | 1 + hw/nseries.c | 1 + hw/palm.c | 1 + hw/pc.c | 4 ++++ hw/ppc405_boards.c | 2 ++ hw/ppc_chrp.c | 1 + hw/ppc_oldworld.c | 1 + hw/ppc_prep.c | 1 + hw/r2d.c | 3 ++- hw/realview.c | 3 ++- hw/shix.c | 3 ++- hw/spitz.c | 19 ++++++++++++------- hw/stellaris.c | 2 ++ hw/sun4m.c | 12 ++++++++++++ hw/sun4u.c | 1 + sysemu.h | 2 -- vl.c | 22 ++++++++++++++++++++-- 28 files changed, 98 insertions(+), 32 deletions(-) diff --git a/exec.c b/exec.c index 877de89f1d..09401371a9 100644 --- a/exec.c +++ b/exec.c @@ -2093,7 +2093,7 @@ uint32_t cpu_get_physical_page_desc(target_phys_addr_t addr) ram_addr_t qemu_ram_alloc(unsigned int size) { ram_addr_t addr; - if ((phys_ram_alloc_offset + size) >= phys_ram_size) { + if ((phys_ram_alloc_offset + size) > phys_ram_size) { fprintf(stderr, "Not enough memory (requested_size = %u, max memory = %d)\n", size, phys_ram_size); abort(); diff --git a/hw/an5206.c b/hw/an5206.c index 52be63b772..320b3f76ff 100644 --- a/hw/an5206.c +++ b/hw/an5206.c @@ -91,4 +91,5 @@ QEMUMachine an5206_machine = { "an5206", "Arnewsh 5206", an5206_init, + 512, }; diff --git a/hw/boards.h b/hw/boards.h index 42a4437aff..4c91e97474 100644 --- a/hw/boards.h +++ b/hw/boards.h @@ -14,6 +14,8 @@ typedef struct QEMUMachine { const char *name; const char *desc; QEMUMachineInitFunc *init; +#define RAMSIZE_FIXED (1 << 0) + size_t ram_require; struct QEMUMachine *next; } QEMUMachine; diff --git a/hw/etraxfs.c b/hw/etraxfs.c index 7c3f59edcf..d3b92499d9 100644 --- a/hw/etraxfs.c +++ b/hw/etraxfs.c @@ -124,4 +124,5 @@ QEMUMachine bareetraxfs_machine = { "bareetraxfs", "Bare ETRAX FS board", bareetraxfs_init, + 0x800000, }; diff --git a/hw/gumstix.c b/hw/gumstix.c index 2cf52f9c07..55425e1cb6 100644 --- a/hw/gumstix.c +++ b/hw/gumstix.c @@ -125,10 +125,12 @@ QEMUMachine connex_machine = { "connex", "Gumstix Connex (PXA255)", connex_init, + (0x05000000 + PXA2XX_INTERNAL_SIZE) | RAMSIZE_FIXED, }; QEMUMachine verdex_machine = { "verdex", "Gumstix Verdex (PXA270)", verdex_init, + (0x12000000 + PXA2XX_INTERNAL_SIZE) | RAMSIZE_FIXED, }; diff --git a/hw/integratorcp.c b/hw/integratorcp.c index f6e636441a..8a757546ae 100644 --- a/hw/integratorcp.c +++ b/hw/integratorcp.c @@ -231,7 +231,7 @@ static CPUWriteMemoryFunc *integratorcm_writefn[] = { integratorcm_write }; -static void integratorcm_init(int memsz, uint32_t flash_offset) +static void integratorcm_init(int memsz) { int iomemtype; integratorcm_state *s; @@ -258,7 +258,7 @@ static void integratorcm_init(int memsz, uint32_t flash_offset) } memcpy(integrator_spd + 73, "QEMU-MEMORY", 11); s->cm_init = 0x00000112; - s->flash_offset = flash_offset; + s->flash_offset = qemu_ram_alloc(0x100000); iomemtype = cpu_register_io_memory(0, integratorcm_readfn, integratorcm_writefn, s); @@ -480,7 +480,7 @@ static void integratorcp_init(int ram_size, int vga_ram_size, const char *initrd_filename, const char *cpu_model) { CPUState *env; - uint32_t bios_offset; + uint32_t ram_offset; qemu_irq *pic; qemu_irq *cpu_pic; int sd; @@ -492,15 +492,15 @@ static void integratorcp_init(int ram_size, int vga_ram_size, fprintf(stderr, "Unable to find CPU definition\n"); exit(1); } - bios_offset = ram_size + vga_ram_size; + ram_offset = qemu_ram_alloc(ram_size); /* ??? On a real system the first 1Mb is mapped as SSRAM or boot flash. */ /* ??? RAM shoud repeat to fill physical memory space. */ /* SDRAM at address zero*/ - cpu_register_physical_memory(0, ram_size, IO_MEM_RAM); + cpu_register_physical_memory(0, ram_size, ram_offset | IO_MEM_RAM); /* And again at address 0x80000000 */ - cpu_register_physical_memory(0x80000000, ram_size, IO_MEM_RAM); + cpu_register_physical_memory(0x80000000, ram_size, ram_offset | IO_MEM_RAM); - integratorcm_init(ram_size >> 20, bios_offset); + integratorcm_init(ram_size >> 20); cpu_pic = arm_pic_init_cpu(env); pic = icp_pic_init(0x14000000, cpu_pic[ARM_PIC_CPU_IRQ], cpu_pic[ARM_PIC_CPU_FIQ]); @@ -543,4 +543,5 @@ QEMUMachine integratorcp_machine = { "integratorcp", "ARM Integrator/CP (ARM926EJ-S)", integratorcp_init, + 0x100000, }; diff --git a/hw/mainstone.c b/hw/mainstone.c index 9564fc37fa..1a876800cc 100644 --- a/hw/mainstone.c +++ b/hw/mainstone.c @@ -59,6 +59,10 @@ static struct keymap map[0xE0] = { enum mainstone_model_e { mainstone }; +#define MAINSTONE_RAM 0x04000000 +#define MAINSTONE_ROM 0x00800000 +#define MAINSTONE_FLASH 0x02000000 + static struct arm_boot_info mainstone_binfo = { .loader_start = PXA2XX_SDRAM_BASE, .ram_size = 0x04000000, @@ -69,9 +73,6 @@ static void mainstone_common_init(int ram_size, int vga_ram_size, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model, enum mainstone_model_e model, int arm_id) { - uint32_t mainstone_ram = mainstone_binfo.ram_size; - uint32_t mainstone_rom = 0x00800000; - uint32_t mainstone_flash = 0x02000000; uint32_t sector_len = 256 * 1024; target_phys_addr_t mainstone_flash_base[] = { MST_FLASH_0, MST_FLASH_1 }; struct pxa2xx_state_s *cpu; @@ -82,17 +83,17 @@ static void mainstone_common_init(int ram_size, int vga_ram_size, cpu_model = "pxa270-c5"; /* Setup CPU & memory */ - if (ram_size < mainstone_ram + mainstone_rom + 2 * mainstone_flash + + if (ram_size < MAINSTONE_RAM + MAINSTONE_ROM + 2 * MAINSTONE_FLASH + PXA2XX_INTERNAL_SIZE) { fprintf(stderr, "This platform requires %i bytes of memory\n", - mainstone_ram + mainstone_rom + 2 * mainstone_flash + + MAINSTONE_RAM + MAINSTONE_ROM + 2 * MAINSTONE_FLASH + PXA2XX_INTERNAL_SIZE); exit(1); } - cpu = pxa270_init(mainstone_ram, ds, cpu_model); - cpu_register_physical_memory(0, mainstone_rom, - qemu_ram_alloc(mainstone_rom) | IO_MEM_ROM); + cpu = pxa270_init(mainstone_binfo.ram_size, ds, cpu_model); + cpu_register_physical_memory(0, MAINSTONE_ROM, + qemu_ram_alloc(MAINSTONE_ROM) | IO_MEM_ROM); /* Setup initial (reset) machine state */ cpu->env->regs[15] = mainstone_binfo.loader_start; @@ -107,9 +108,9 @@ static void mainstone_common_init(int ram_size, int vga_ram_size, } if (!pflash_cfi01_register(mainstone_flash_base[i], - qemu_ram_alloc(mainstone_flash), + qemu_ram_alloc(MAINSTONE_FLASH), drives_table[index].bdrv, sector_len, - mainstone_flash / sector_len, 4, 0, 0, 0, 0)) { + MAINSTONE_FLASH / sector_len, 4, 0, 0, 0, 0)) { fprintf(stderr, "qemu: Error registering flash memory.\n"); exit(1); } @@ -146,4 +147,6 @@ QEMUMachine mainstone2_machine = { "mainstone", "Mainstone II (PXA27x)", mainstone_init, + (MAINSTONE_RAM + MAINSTONE_ROM + 2 * MAINSTONE_FLASH + + PXA2XX_INTERNAL_SIZE) | RAMSIZE_FIXED, }; diff --git a/hw/mcf5208.c b/hw/mcf5208.c index d7e7dcf5d7..fd9c8aa0cd 100644 --- a/hw/mcf5208.c +++ b/hw/mcf5208.c @@ -308,4 +308,5 @@ QEMUMachine mcf5208evb_machine = { "mcf5208evb", "MCF5206EVB", mcf5208evb_init, + 16384, }; diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c index b377b20170..e5e5bafa51 100644 --- a/hw/mips_jazz.c +++ b/hw/mips_jazz.c @@ -277,10 +277,12 @@ QEMUMachine mips_magnum_machine = { "magnum", "MIPS Magnum", mips_magnum_init, + MAGNUM_BIOS_SIZE + VGA_RAM_SIZE, }; QEMUMachine mips_pica61_machine = { "pica61", "Acer Pica 61", mips_pica61_init, + MAGNUM_BIOS_SIZE + VGA_RAM_SIZE, }; diff --git a/hw/mips_malta.c b/hw/mips_malta.c index d39a02b909..69b16b78a0 100644 --- a/hw/mips_malta.c +++ b/hw/mips_malta.c @@ -949,4 +949,5 @@ QEMUMachine mips_malta_machine = { "malta", "MIPS Malta Core LV", mips_malta_init, + VGA_RAM_SIZE + BIOS_SIZE, }; diff --git a/hw/mips_mipssim.c b/hw/mips_mipssim.c index fe753146e3..fac23be9a3 100644 --- a/hw/mips_mipssim.c +++ b/hw/mips_mipssim.c @@ -195,4 +195,5 @@ QEMUMachine mips_mipssim_machine = { "mipssim", "MIPS MIPSsim platform", mips_mipssim_init, + BIOS_SIZE + VGA_RAM_SIZE /* unused */, }; diff --git a/hw/mips_r4k.c b/hw/mips_r4k.c index fca5651343..fcebd4705a 100644 --- a/hw/mips_r4k.c +++ b/hw/mips_r4k.c @@ -286,4 +286,5 @@ QEMUMachine mips_machine = { "mips", "mips r4k platform", mips_r4k_init, + VGA_RAM_SIZE + BIOS_SIZE, }; diff --git a/hw/nseries.c b/hw/nseries.c index 430b8f872d..f6f69a06ac 100644 --- a/hw/nseries.c +++ b/hw/nseries.c @@ -941,4 +941,5 @@ QEMUMachine n800_machine = { "n800", "Nokia N800 aka. RX-34 tablet (OMAP2420)", n800_init, + (0x08000000 + 0x00010000 + OMAP242X_SRAM_SIZE) | RAMSIZE_FIXED, }; diff --git a/hw/palm.c b/hw/palm.c index a1ecaf022f..ac6ff803e4 100644 --- a/hw/palm.c +++ b/hw/palm.c @@ -274,4 +274,5 @@ QEMUMachine palmte_machine = { "cheetah", "Palm Tungsten|E aka. Cheetah PDA (OMAP310)", palmte_init, + (0x02000000 + 0x00800000 + OMAP15XX_SRAM_SIZE) | RAMSIZE_FIXED, }; diff --git a/hw/pc.c b/hw/pc.c index abd96f0fb3..d1db2a5887 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -39,6 +39,8 @@ #define VGABIOS_FILENAME "vgabios.bin" #define VGABIOS_CIRRUS_FILENAME "vgabios-cirrus.bin" +#define PC_MAX_BIOS_SIZE (4 * 1024 * 1024) + /* Leave a chunk of memory at the top of RAM for the BIOS ACPI tables. */ #define ACPI_DATA_SIZE 0x10000 @@ -1018,10 +1020,12 @@ QEMUMachine pc_machine = { "pc", "Standard PC", pc_init_pci, + VGA_RAM_SIZE + PC_MAX_BIOS_SIZE, }; QEMUMachine isapc_machine = { "isapc", "ISA-only PC", pc_init_isa, + VGA_RAM_SIZE + PC_MAX_BIOS_SIZE, }; diff --git a/hw/ppc405_boards.c b/hw/ppc405_boards.c index b1a15e8a84..9ed299504b 100644 --- a/hw/ppc405_boards.c +++ b/hw/ppc405_boards.c @@ -360,6 +360,7 @@ QEMUMachine ref405ep_machine = { "ref405ep", "ref405ep", ref405ep_init, + (128 * 1024 * 1024 + 4096 + 512 * 1024 + BIOS_SIZE) | RAMSIZE_FIXED, }; /*****************************************************************************/ @@ -642,4 +643,5 @@ QEMUMachine taihu_machine = { "taihu", "taihu", taihu_405ep_init, + (128 * 1024 * 1024 + 4096 + BIOS_SIZE + 32 * 1024 * 1024) | RAMSIZE_FIXED, }; diff --git a/hw/ppc_chrp.c b/hw/ppc_chrp.c index 4437a1038e..c74dfd4e05 100644 --- a/hw/ppc_chrp.c +++ b/hw/ppc_chrp.c @@ -335,4 +335,5 @@ QEMUMachine core99_machine = { "mac99", "Mac99 based PowerMAC", ppc_core99_init, + BIOS_SIZE + VGA_RAM_SIZE, }; diff --git a/hw/ppc_oldworld.c b/hw/ppc_oldworld.c index 6b4f202d01..a85524c31b 100644 --- a/hw/ppc_oldworld.c +++ b/hw/ppc_oldworld.c @@ -370,4 +370,5 @@ QEMUMachine heathrow_machine = { "g3bw", "Heathrow based PowerMAC", ppc_heathrow_init, + BIOS_SIZE + VGA_RAM_SIZE, }; diff --git a/hw/ppc_prep.c b/hw/ppc_prep.c index c42688e427..63ef15aff2 100644 --- a/hw/ppc_prep.c +++ b/hw/ppc_prep.c @@ -764,4 +764,5 @@ QEMUMachine prep_machine = { "prep", "PowerPC PREP platform", ppc_prep_init, + BIOS_SIZE + VGA_RAM_SIZE, }; diff --git a/hw/r2d.c b/hw/r2d.c index b6cc31c548..8480cf32d9 100644 --- a/hw/r2d.c +++ b/hw/r2d.c @@ -69,5 +69,6 @@ static void r2d_init(int ram_size, int vga_ram_size, QEMUMachine r2d_machine = { "r2d", "r2d-plus board", - r2d_init + r2d_init, + SDRAM_SIZE | RAMSIZE_FIXED }; diff --git a/hw/realview.c b/hw/realview.c index acf3b9ee0a..c3b26fa49a 100644 --- a/hw/realview.c +++ b/hw/realview.c @@ -199,5 +199,6 @@ static void realview_init(int ram_size, int vga_ram_size, QEMUMachine realview_machine = { "realview", "ARM RealView Emulation Baseboard (ARM926EJ-S)", - realview_init + realview_init, + 0x1000 }; diff --git a/hw/shix.c b/hw/shix.c index 533b159359..5f8b2e11ad 100644 --- a/hw/shix.c +++ b/hw/shix.c @@ -110,5 +110,6 @@ static void shix_init(int ram_size, int vga_ram_size, QEMUMachine shix_machine = { "shix", "shix card", - shix_init + shix_init, + (0x00004000 + 0x01000000 + 0x01000000) | RAMSIZE_FIXED }; diff --git a/hw/spitz.c b/hw/spitz.c index b059f9a9f6..28987a6f88 100644 --- a/hw/spitz.c +++ b/hw/spitz.c @@ -1180,6 +1180,9 @@ static void sl_bootparam_write(uint32_t ptr) /* Board init. */ enum spitz_model_e { spitz, akita, borzoi, terrier }; +#define SPITZ_RAM 0x04000000 +#define SPITZ_ROM 0x00800000 + static struct arm_boot_info spitz_binfo = { .loader_start = PXA2XX_SDRAM_BASE, .ram_size = 0x04000000, @@ -1190,8 +1193,6 @@ static void spitz_common_init(int ram_size, int vga_ram_size, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model, enum spitz_model_e model, int arm_id) { - uint32_t spitz_ram = spitz_binfo.ram_size; - uint32_t spitz_rom = 0x00800000; struct pxa2xx_state_s *cpu; struct scoop_info_s *scp; @@ -1199,17 +1200,17 @@ static void spitz_common_init(int ram_size, int vga_ram_size, cpu_model = (model == terrier) ? "pxa270-c5" : "pxa270-c0"; /* Setup CPU & memory */ - if (ram_size < spitz_ram + spitz_rom + PXA2XX_INTERNAL_SIZE) { + if (ram_size < SPITZ_RAM + SPITZ_ROM + PXA2XX_INTERNAL_SIZE) { fprintf(stderr, "This platform requires %i bytes of memory\n", - spitz_ram + spitz_rom + PXA2XX_INTERNAL_SIZE); + SPITZ_RAM + SPITZ_ROM + PXA2XX_INTERNAL_SIZE); exit(1); } - cpu = pxa270_init(spitz_ram, ds, cpu_model); + cpu = pxa270_init(spitz_binfo.ram_size, ds, cpu_model); sl_flash_register(cpu, (model == spitz) ? FLASH_128M : FLASH_1024M); - cpu_register_physical_memory(0, spitz_rom, - qemu_ram_alloc(spitz_rom) | IO_MEM_ROM); + cpu_register_physical_memory(0, SPITZ_ROM, + qemu_ram_alloc(SPITZ_ROM) | IO_MEM_ROM); /* Setup peripherals */ spitz_keyboard_register(cpu); @@ -1285,22 +1286,26 @@ QEMUMachine akitapda_machine = { "akita", "Akita PDA (PXA270)", akita_init, + SPITZ_RAM + SPITZ_ROM + PXA2XX_INTERNAL_SIZE + RAMSIZE_FIXED, }; QEMUMachine spitzpda_machine = { "spitz", "Spitz PDA (PXA270)", spitz_init, + SPITZ_RAM + SPITZ_ROM + PXA2XX_INTERNAL_SIZE + RAMSIZE_FIXED, }; QEMUMachine borzoipda_machine = { "borzoi", "Borzoi PDA (PXA270)", borzoi_init, + SPITZ_RAM + SPITZ_ROM + PXA2XX_INTERNAL_SIZE + RAMSIZE_FIXED, }; QEMUMachine terrierpda_machine = { "terrier", "Terrier PDA (PXA270)", terrier_init, + SPITZ_RAM + SPITZ_ROM + PXA2XX_INTERNAL_SIZE + RAMSIZE_FIXED, }; diff --git a/hw/stellaris.c b/hw/stellaris.c index 68f7137b13..1b0267c15e 100644 --- a/hw/stellaris.c +++ b/hw/stellaris.c @@ -1189,10 +1189,12 @@ QEMUMachine lm3s811evb_machine = { "lm3s811evb", "Stellaris LM3S811EVB", lm3s811evb_init, + (64 * 1024 * 1024 + 8 * 1024 * 1024) | RAMSIZE_FIXED, }; QEMUMachine lm3s6965evb_machine = { "lm3s6965evb", "Stellaris LM3S6965EVB", lm3s6965evb_init, + (256 * 1024 * 1024 + 64 * 1024 * 1024) | RAMSIZE_FIXED, }; diff --git a/hw/sun4m.c b/hw/sun4m.c index b983c75811..45eb9d8b35 100644 --- a/hw/sun4m.c +++ b/hw/sun4m.c @@ -1213,60 +1213,70 @@ QEMUMachine ss5_machine = { "SS-5", "Sun4m platform, SPARCstation 5", ss5_init, + PROM_SIZE_MAX + 0x00100000, }; QEMUMachine ss10_machine = { "SS-10", "Sun4m platform, SPARCstation 10", ss10_init, + PROM_SIZE_MAX + 0x00100000, }; QEMUMachine ss600mp_machine = { "SS-600MP", "Sun4m platform, SPARCserver 600MP", ss600mp_init, + PROM_SIZE_MAX + 0x00100000, }; QEMUMachine ss20_machine = { "SS-20", "Sun4m platform, SPARCstation 20", ss20_init, + PROM_SIZE_MAX + 0x00100000, }; QEMUMachine ss2_machine = { "SS-2", "Sun4c platform, SPARCstation 2", ss2_init, + PROM_SIZE_MAX + 0x00100000, }; QEMUMachine voyager_machine = { "Voyager", "Sun4m platform, SPARCstation Voyager", vger_init, + PROM_SIZE_MAX + 0x00100000, }; QEMUMachine ss_lx_machine = { "LX", "Sun4m platform, SPARCstation LX", ss_lx_init, + PROM_SIZE_MAX + 0x00100000, }; QEMUMachine ss4_machine = { "SS-4", "Sun4m platform, SPARCstation 4", ss4_init, + PROM_SIZE_MAX + 0x00100000, }; QEMUMachine scls_machine = { "SPARCClassic", "Sun4m platform, SPARCClassic", scls_init, + PROM_SIZE_MAX + 0x00100000, }; QEMUMachine sbook_machine = { "SPARCbook", "Sun4m platform, SPARCbook", sbook_init, + PROM_SIZE_MAX + 0x00100000, }; static const struct sun4d_hwdef sun4d_hwdefs[] = { @@ -1503,10 +1513,12 @@ QEMUMachine ss1000_machine = { "SS-1000", "Sun4d platform, SPARCserver 1000", ss1000_init, + PROM_SIZE_MAX + 0x00100000, }; QEMUMachine ss2000_machine = { "SS-2000", "Sun4d platform, SPARCcenter 2000", ss2000_init, + PROM_SIZE_MAX + 0x00100000, }; diff --git a/hw/sun4u.c b/hw/sun4u.c index 183f64a5ac..5b0e03a4e4 100644 --- a/hw/sun4u.c +++ b/hw/sun4u.c @@ -385,4 +385,5 @@ QEMUMachine sun4u_machine = { "sun4u", "Sun4u platform", sun4u_init, + PROM_SIZE_MAX + VGA_RAM_SIZE, }; diff --git a/sysemu.h b/sysemu.h index 0f18e049e0..30bf966c67 100644 --- a/sysemu.h +++ b/sysemu.h @@ -108,8 +108,6 @@ extern const char *prom_envs[MAX_PROM_ENVS]; extern unsigned int nb_prom_envs; #endif -/* XXX: make it dynamic */ -#define MAX_BIOS_SIZE (4 * 1024 * 1024) #if defined (TARGET_PPC) #define BIOS_SIZE (1024 * 1024) #elif defined (TARGET_SPARC64) diff --git a/vl.c b/vl.c index 78486cf10e..0825281ef9 100644 --- a/vl.c +++ b/vl.c @@ -8277,7 +8277,7 @@ int main(int argc, char **argv) machine = first_machine; cpu_model = NULL; initrd_filename = NULL; - ram_size = DEFAULT_RAM_SIZE * 1024 * 1024; + ram_size = -1; vga_ram_size = VGA_RAM_SIZE; #ifdef CONFIG_GDBSTUB use_gdbstub = 0; @@ -8963,7 +8963,25 @@ int main(int argc, char **argv) #endif /* init the memory */ - phys_ram_size = ram_size + vga_ram_size + MAX_BIOS_SIZE; + phys_ram_size = machine->ram_require & ~RAMSIZE_FIXED; + + if (machine->ram_require & RAMSIZE_FIXED) { + if (ram_size > 0) { + if (ram_size < phys_ram_size) { + fprintf(stderr, "Machine `%s' requires %i bytes of memory\n", + machine->name, phys_ram_size); + exit(-1); + } + + phys_ram_size = ram_size; + } else + ram_size = phys_ram_size; + } else { + if (ram_size < 0) + ram_size = DEFAULT_RAM_SIZE * 1024 * 1024; + + phys_ram_size += ram_size; + } phys_ram_base = qemu_vmalloc(phys_ram_size); if (!phys_ram_base) {