From 03875444d95a679cc0191a314be2238423b77cff Mon Sep 17 00:00:00 2001 From: aurel32 Date: Tue, 22 Apr 2008 20:45:18 +0000 Subject: [PATCH] Revert "Use correct types to enable > 2G support" (r4238), it is not yet ready. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4240 c046a42c-6fe2-441c-8c8c-71466251a162 --- cpu-all.h | 16 ++++++--------- cpu-defs.h | 3 +++ exec-all.h | 2 +- exec.c | 51 ++++++++++++++++++---------------------------- hw/an5206.c | 2 +- hw/boards.h | 2 +- hw/dummy_m68k.c | 2 +- hw/etraxfs.c | 2 +- hw/gumstix.c | 4 ++-- hw/integratorcp.c | 2 +- hw/mainstone.c | 4 ++-- hw/mcf5208.c | 2 +- hw/mips_jazz.c | 6 +++--- hw/mips_malta.c | 2 +- hw/mips_mipssim.c | 2 +- hw/mips_r4k.c | 2 +- hw/nseries.c | 2 +- hw/palm.c | 2 +- hw/pc.c | 33 ++++++------------------------ hw/piix_pci.c | 2 +- hw/ppc405_boards.c | 4 ++-- hw/ppc_chrp.c | 2 +- hw/ppc_oldworld.c | 2 +- hw/ppc_prep.c | 2 +- hw/r2d.c | 2 +- hw/realview.c | 2 +- hw/shix.c | 2 +- hw/spitz.c | 10 ++++----- hw/stellaris.c | 4 ++-- hw/sun4m.c | 14 ++++++------- hw/sun4u.c | 2 +- hw/versatilepb.c | 6 +++--- osdep.c | 1 + qemu-doc.texi | 4 +--- sysemu.h | 1 + vl.c | 50 +++++++++++++-------------------------------- 36 files changed, 98 insertions(+), 153 deletions(-) diff --git a/cpu-all.h b/cpu-all.h index 08388a3be3..a4dee2196d 100644 --- a/cpu-all.h +++ b/cpu-all.h @@ -700,7 +700,7 @@ static inline void stfq_be_p(void *ptr, float64 v) /* page related stuff */ -#define TARGET_PAGE_SIZE (1UL << TARGET_PAGE_BITS) +#define TARGET_PAGE_SIZE (1 << TARGET_PAGE_BITS) #define TARGET_PAGE_MASK ~(TARGET_PAGE_SIZE - 1) #define TARGET_PAGE_ALIGN(addr) (((addr) + TARGET_PAGE_SIZE - 1) & TARGET_PAGE_MASK) @@ -806,16 +806,12 @@ int cpu_inw(CPUState *env, int addr); int cpu_inl(CPUState *env, int addr); #endif -/* address in the RAM (different from a physical address) */ -typedef unsigned long ram_addr_t; - /* memory API */ -extern ram_addr_t phys_ram_size; +extern int phys_ram_size; extern int phys_ram_fd; extern uint8_t *phys_ram_base; extern uint8_t *phys_ram_dirty; -extern ram_addr_t ram_size; /* physical memory access */ #define TLB_INVALID_MASK (1 << 3) @@ -837,10 +833,10 @@ typedef void CPUWriteMemoryFunc(void *opaque, target_phys_addr_t addr, uint32_t typedef uint32_t CPUReadMemoryFunc(void *opaque, target_phys_addr_t addr); void cpu_register_physical_memory(target_phys_addr_t start_addr, - ram_addr_t size, - ram_addr_t phys_offset); -ram_addr_t cpu_get_physical_page_desc(target_phys_addr_t addr); -ram_addr_t qemu_ram_alloc(ram_addr_t); + unsigned long size, + unsigned long phys_offset); +uint32_t cpu_get_physical_page_desc(target_phys_addr_t addr); +ram_addr_t qemu_ram_alloc(unsigned int size); void qemu_ram_free(ram_addr_t addr); int cpu_register_io_memory(int io_index, CPUReadMemoryFunc **mem_read, diff --git a/cpu-defs.h b/cpu-defs.h index c4389ed35d..1591748d43 100644 --- a/cpu-defs.h +++ b/cpu-defs.h @@ -76,6 +76,9 @@ typedef uint64_t target_phys_addr_t; #error TARGET_PHYS_ADDR_BITS undefined #endif +/* address in the RAM (different from a physical address) */ +typedef unsigned long ram_addr_t; + #define HOST_LONG_SIZE (HOST_LONG_BITS / 8) #define EXCP_INTERRUPT 0x10000 /* async interruption */ diff --git a/exec-all.h b/exec-all.h index 47bdddd461..898cf687c2 100644 --- a/exec-all.h +++ b/exec-all.h @@ -82,7 +82,7 @@ int cpu_restore_state_copy(struct TranslationBlock *tb, void cpu_resume_from_signal(CPUState *env1, void *puc); void cpu_exec_init(CPUState *env); int page_unprotect(target_ulong address, unsigned long pc, void *puc); -void tb_invalidate_phys_page_range(target_phys_addr_t start, target_phys_addr_t end, +void tb_invalidate_phys_page_range(target_ulong start, target_ulong end, int is_cpu_write_access); void tb_invalidate_page_range(target_ulong start, target_ulong end); void tlb_flush_page(CPUState *env, target_ulong addr); diff --git a/exec.c b/exec.c index 06ccf283bc..877de89f1d 100644 --- a/exec.c +++ b/exec.c @@ -74,10 +74,6 @@ #define TARGET_VIRT_ADDR_SPACE_BITS 42 #elif defined(TARGET_PPC64) #define TARGET_PHYS_ADDR_SPACE_BITS 42 -#elif defined(TARGET_X86_64) && !defined(USE_KQEMU) -#define TARGET_PHYS_ADDR_SPACE_BITS 40 -#elif defined(TARGET_I386) && !defined(USE_KQEMU) -#define TARGET_PHYS_ADDR_SPACE_BITS 36 #else /* Note: for compatibility with kqemu, we use 32 bits for x86_64 */ #define TARGET_PHYS_ADDR_SPACE_BITS 32 @@ -92,7 +88,7 @@ spinlock_t tb_lock = SPIN_LOCK_UNLOCKED; uint8_t code_gen_buffer[CODE_GEN_BUFFER_SIZE] __attribute__((aligned (32))); uint8_t *code_gen_ptr; -ram_addr_t phys_ram_size; +int phys_ram_size; int phys_ram_fd; uint8_t *phys_ram_base; uint8_t *phys_ram_dirty; @@ -117,7 +113,7 @@ typedef struct PageDesc { typedef struct PhysPageDesc { /* offset in host memory of the page + io_index in the low 12 bits */ - ram_addr_t phys_offset; + uint32_t phys_offset; } PhysPageDesc; #define L2_BITS 10 @@ -128,14 +124,9 @@ typedef struct PhysPageDesc { */ #define L1_BITS (TARGET_VIRT_ADDR_SPACE_BITS - L2_BITS - TARGET_PAGE_BITS) #else -#define L1_BITS (TARGET_PHYS_ADDR_SPACE_BITS - L2_BITS - TARGET_PAGE_BITS) +#define L1_BITS (32 - L2_BITS - TARGET_PAGE_BITS) #endif -#undef L1_BITS -#undef L2_BITS -#define L1_BITS 13 -#define L2_BITS 13 - #define L1_SIZE (1 << L1_BITS) #define L2_SIZE (1 << L2_BITS) @@ -243,7 +234,7 @@ static void page_init(void) #endif } -static inline PageDesc *page_find_alloc(target_ulong index) +static inline PageDesc *page_find_alloc(unsigned int index) { PageDesc **lp, *p; @@ -258,7 +249,7 @@ static inline PageDesc *page_find_alloc(target_ulong index) return p + (index & (L2_SIZE - 1)); } -static inline PageDesc *page_find(target_ulong index) +static inline PageDesc *page_find(unsigned int index) { PageDesc *p; @@ -274,7 +265,6 @@ static PhysPageDesc *phys_page_find_alloc(target_phys_addr_t index, int alloc) PhysPageDesc *pd; p = (void **)l1_phys_map; -#if 0 #if TARGET_PHYS_ADDR_SPACE_BITS > 32 #if TARGET_PHYS_ADDR_SPACE_BITS > (32 + L1_BITS) @@ -290,7 +280,6 @@ static PhysPageDesc *phys_page_find_alloc(target_phys_addr_t index, int alloc) memset(p, 0, sizeof(void *) * L1_SIZE); *lp = p; } -#endif #endif lp = p + ((index >> L2_BITS) & (L1_SIZE - 1)); pd = *lp; @@ -522,12 +511,12 @@ static inline void tb_reset_jump(TranslationBlock *tb, int n) tb_set_jmp_target(tb, n, (unsigned long)(tb->tc_ptr + tb->tb_next_offset[n])); } -static inline void tb_phys_invalidate(TranslationBlock *tb, target_ulong page_addr) +static inline void tb_phys_invalidate(TranslationBlock *tb, unsigned int page_addr) { CPUState *env; PageDesc *p; unsigned int h, n1; - target_phys_addr_t phys_pc; + target_ulong phys_pc; TranslationBlock *tb1, *tb2; /* remove the TB from the hash list */ @@ -678,7 +667,7 @@ static void tb_gen_code(CPUState *env, the same physical page. 'is_cpu_write_access' should be true if called from a real cpu write access: the virtual CPU will exit the current TB if code is modified inside this TB. */ -void tb_invalidate_phys_page_range(target_phys_addr_t start, target_phys_addr_t end, +void tb_invalidate_phys_page_range(target_ulong start, target_ulong end, int is_cpu_write_access) { int n, current_tb_modified, current_tb_not_found, current_flags; @@ -791,7 +780,7 @@ void tb_invalidate_phys_page_range(target_phys_addr_t start, target_phys_addr_t } /* len must be <= 8 and start must be a multiple of len */ -static inline void tb_invalidate_phys_page_fast(target_phys_addr_t start, int len) +static inline void tb_invalidate_phys_page_fast(target_ulong start, int len) { PageDesc *p; int offset, b; @@ -820,7 +809,7 @@ static inline void tb_invalidate_phys_page_fast(target_phys_addr_t start, int le } #if !defined(CONFIG_SOFTMMU) -static void tb_invalidate_phys_page(target_phys_addr_t addr, +static void tb_invalidate_phys_page(target_ulong addr, unsigned long pc, void *puc) { int n, current_flags, current_tb_modified; @@ -1997,7 +1986,7 @@ static inline void tlb_set_dirty(CPUState *env, static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end, int memory); -static void *subpage_init (target_phys_addr_t base, ram_addr_t *phys, +static void *subpage_init (target_phys_addr_t base, uint32_t *phys, int orig_memory); #define CHECK_SUBPAGE(addr, start_addr, start_addr2, end_addr, end_addr2, \ need_subpage) \ @@ -2023,13 +2012,13 @@ static void *subpage_init (target_phys_addr_t base, ram_addr_t *phys, page size. If (phys_offset & ~TARGET_PAGE_MASK) != 0, then it is an io memory page */ void cpu_register_physical_memory(target_phys_addr_t start_addr, - ram_addr_t size, - ram_addr_t phys_offset) + unsigned long size, + unsigned long phys_offset) { target_phys_addr_t addr, end_addr; PhysPageDesc *p; CPUState *env; - ram_addr_t orig_size = size; + unsigned long orig_size = size; void *subpage; size = (size + TARGET_PAGE_SIZE - 1) & TARGET_PAGE_MASK; @@ -2037,7 +2026,7 @@ void cpu_register_physical_memory(target_phys_addr_t start_addr, for(addr = start_addr; addr != end_addr; addr += TARGET_PAGE_SIZE) { p = phys_page_find(addr >> TARGET_PAGE_BITS); if (p && p->phys_offset != IO_MEM_UNASSIGNED) { - ram_addr_t orig_memory = p->phys_offset; + unsigned long orig_memory = p->phys_offset; target_phys_addr_t start_addr2, end_addr2; int need_subpage = 0; @@ -2090,7 +2079,7 @@ void cpu_register_physical_memory(target_phys_addr_t start_addr, } /* XXX: temporary until new memory mapping API */ -ram_addr_t cpu_get_physical_page_desc(target_phys_addr_t addr) +uint32_t cpu_get_physical_page_desc(target_phys_addr_t addr) { PhysPageDesc *p; @@ -2101,12 +2090,12 @@ ram_addr_t cpu_get_physical_page_desc(target_phys_addr_t addr) } /* XXX: better than nothing */ -ram_addr_t qemu_ram_alloc(ram_addr_t size) +ram_addr_t qemu_ram_alloc(unsigned int size) { ram_addr_t addr; if ((phys_ram_alloc_offset + size) >= phys_ram_size) { - fprintf(stderr, "Not enough memory (requested_size = %lu, max memory = %" PRIu64 ")\n", - size, (uint64_t)phys_ram_size); + fprintf(stderr, "Not enough memory (requested_size = %u, max memory = %d)\n", + size, phys_ram_size); abort(); } addr = phys_ram_alloc_offset; @@ -2449,7 +2438,7 @@ static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end, return 0; } -static void *subpage_init (target_phys_addr_t base, ram_addr_t *phys, +static void *subpage_init (target_phys_addr_t base, uint32_t *phys, int orig_memory) { subpage_t *mmio; diff --git a/hw/an5206.c b/hw/an5206.c index 7037218223..52be63b772 100644 --- a/hw/an5206.c +++ b/hw/an5206.c @@ -30,7 +30,7 @@ void DMA_run (void) /* Board init. */ -static void an5206_init(ram_addr_t ram_size, int vga_ram_size, +static void an5206_init(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) diff --git a/hw/boards.h b/hw/boards.h index 32cf394b42..42a4437aff 100644 --- a/hw/boards.h +++ b/hw/boards.h @@ -3,7 +3,7 @@ #ifndef HW_BOARDS_H #define HW_BOARDS_H -typedef void QEMUMachineInitFunc(ram_addr_t ram_size, int vga_ram_size, +typedef void QEMUMachineInitFunc(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, diff --git a/hw/dummy_m68k.c b/hw/dummy_m68k.c index 1641d56ade..705d304257 100644 --- a/hw/dummy_m68k.c +++ b/hw/dummy_m68k.c @@ -14,7 +14,7 @@ /* Board init. */ -static void dummy_m68k_init(ram_addr_t ram_size, int vga_ram_size, +static void dummy_m68k_init(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) diff --git a/hw/etraxfs.c b/hw/etraxfs.c index d6efcc23e9..7c3f59edcf 100644 --- a/hw/etraxfs.c +++ b/hw/etraxfs.c @@ -41,7 +41,7 @@ void etraxfs_timer_init(CPUState *env, qemu_irq *irqs, void etraxfs_ser_init(CPUState *env, qemu_irq *irqs, target_phys_addr_t base); static -void bareetraxfs_init (ram_addr_t ram_size, int vga_ram_size, +void bareetraxfs_init (int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) diff --git a/hw/gumstix.c b/hw/gumstix.c index 28be8d7ec9..2cf52f9c07 100644 --- a/hw/gumstix.c +++ b/hw/gumstix.c @@ -41,7 +41,7 @@ static const int sector_len = 128 * 1024; -static void connex_init(ram_addr_t ram_size, int vga_ram_size, +static void connex_init(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) @@ -81,7 +81,7 @@ static void connex_init(ram_addr_t ram_size, int vga_ram_size, pxa2xx_gpio_in_get(cpu->gpio)[36]); } -static void verdex_init(ram_addr_t ram_size, int vga_ram_size, +static void verdex_init(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) diff --git a/hw/integratorcp.c b/hw/integratorcp.c index acb4a6434d..f6e636441a 100644 --- a/hw/integratorcp.c +++ b/hw/integratorcp.c @@ -474,7 +474,7 @@ static struct arm_boot_info integrator_binfo = { .board_id = 0x113, }; -static void integratorcp_init(ram_addr_t ram_size, int vga_ram_size, +static void integratorcp_init(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) diff --git a/hw/mainstone.c b/hw/mainstone.c index 4dd8ac007e..9564fc37fa 100644 --- a/hw/mainstone.c +++ b/hw/mainstone.c @@ -64,7 +64,7 @@ static struct arm_boot_info mainstone_binfo = { .ram_size = 0x04000000, }; -static void mainstone_common_init(ram_addr_t ram_size, int vga_ram_size, +static void mainstone_common_init(int ram_size, int vga_ram_size, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model, enum mainstone_model_e model, int arm_id) @@ -133,7 +133,7 @@ static void mainstone_common_init(ram_addr_t ram_size, int vga_ram_size, arm_load_kernel(cpu->env, &mainstone_binfo); } -static void mainstone_init(ram_addr_t ram_size, int vga_ram_size, +static void mainstone_init(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) diff --git a/hw/mcf5208.c b/hw/mcf5208.c index 5c05bf0a33..d7e7dcf5d7 100644 --- a/hw/mcf5208.c +++ b/hw/mcf5208.c @@ -202,7 +202,7 @@ static void mcf5208_sys_init(qemu_irq *pic) } } -static void mcf5208evb_init(ram_addr_t ram_size, int vga_ram_size, +static void mcf5208evb_init(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c index 0221191d24..b377b20170 100644 --- a/hw/mips_jazz.c +++ b/hw/mips_jazz.c @@ -116,7 +116,7 @@ void espdma_memory_write(void *opaque, uint8_t *buf, int len) #define MAGNUM_BIOS_SIZE (BIOS_SIZE < MAGNUM_BIOS_SIZE_MAX ? BIOS_SIZE : MAGNUM_BIOS_SIZE_MAX) static -void mips_jazz_init (ram_addr_t ram_size, int vga_ram_size, +void mips_jazz_init (int ram_size, int vga_ram_size, DisplayState *ds, const char *cpu_model, enum jazz_model_e jazz_model) { @@ -256,7 +256,7 @@ void mips_jazz_init (ram_addr_t ram_size, int vga_ram_size, } static -void mips_magnum_init (ram_addr_t ram_size, int vga_ram_size, +void mips_magnum_init (int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) @@ -265,7 +265,7 @@ void mips_magnum_init (ram_addr_t ram_size, int vga_ram_size, } static -void mips_pica61_init (ram_addr_t ram_size, int vga_ram_size, +void mips_pica61_init (int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) diff --git a/hw/mips_malta.c b/hw/mips_malta.c index 550862d52a..d39a02b909 100644 --- a/hw/mips_malta.c +++ b/hw/mips_malta.c @@ -763,7 +763,7 @@ static void main_cpu_reset(void *opaque) } static -void mips_malta_init (ram_addr_t ram_size, int vga_ram_size, +void mips_malta_init (int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) diff --git a/hw/mips_mipssim.c b/hw/mips_mipssim.c index 56bb0daf41..fe753146e3 100644 --- a/hw/mips_mipssim.c +++ b/hw/mips_mipssim.c @@ -106,7 +106,7 @@ static void main_cpu_reset(void *opaque) } static void -mips_mipssim_init (ram_addr_t ram_size, int vga_ram_size, +mips_mipssim_init (int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) diff --git a/hw/mips_r4k.c b/hw/mips_r4k.c index dd32b23179..fca5651343 100644 --- a/hw/mips_r4k.c +++ b/hw/mips_r4k.c @@ -147,7 +147,7 @@ static void main_cpu_reset(void *opaque) static const int sector_len = 32 * 1024; static -void mips_r4k_init (ram_addr_t ram_size, int vga_ram_size, +void mips_r4k_init (int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) diff --git a/hw/nseries.c b/hw/nseries.c index 39e72575b8..430b8f872d 100644 --- a/hw/nseries.c +++ b/hw/nseries.c @@ -891,7 +891,7 @@ static struct arm_boot_info n800_binfo = { .atag_board = n800_atag_setup, }; -static void n800_init(ram_addr_t ram_size, int vga_ram_size, +static void n800_init(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) diff --git a/hw/palm.c b/hw/palm.c index 3e5954d6d0..a1ecaf022f 100644 --- a/hw/palm.c +++ b/hw/palm.c @@ -192,7 +192,7 @@ static struct arm_boot_info palmte_binfo = { .board_id = 0x331, }; -static void palmte_init(ram_addr_t ram_size, int vga_ram_size, +static void palmte_init(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) diff --git a/hw/pc.c b/hw/pc.c index fc898f06ee..abd96f0fb3 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -188,8 +188,7 @@ static int boot_device2nibble(char boot_device) } /* hd_table must contain 4 block drivers */ -static void cmos_init(ram_addr_t ram_size, ram_addr_t above_4g_mem_size, - const char *boot_device, BlockDriverState **hd_table) +static void cmos_init(int ram_size, const char *boot_device, BlockDriverState **hd_table) { RTCState *s = rtc_state; int nbds, bds[3] = { 0, }; @@ -212,12 +211,6 @@ static void cmos_init(ram_addr_t ram_size, ram_addr_t above_4g_mem_size, rtc_set_memory(s, 0x30, val); rtc_set_memory(s, 0x31, val >> 8); - if (above_4g_mem_size) { - rtc_set_memory(s, 0x5b, (unsigned int)above_4g_mem_size >> 16); - rtc_set_memory(s, 0x5c, (unsigned int)above_4g_mem_size >> 24); - rtc_set_memory(s, 0x5d, (uint64_t)above_4g_mem_size >> 32); - } - if (ram_size > (16 * 1024 * 1024)) val = (ram_size / 65536) - ((16 * 1024 * 1024) / 65536); else @@ -683,7 +676,7 @@ static void pc_init_ne2k_isa(NICInfo *nd, qemu_irq *pic) } /* PC hardware initialisation */ -static void pc_init1(ram_addr_t ram_size, int vga_ram_size, +static void pc_init1(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, @@ -692,7 +685,6 @@ static void pc_init1(ram_addr_t ram_size, int vga_ram_size, char buf[1024]; int ret, linux_boot, i; ram_addr_t ram_addr, vga_ram_addr, bios_offset, vga_bios_offset; - ram_addr_t below_4g_mem_size, above_4g_mem_size = 0; int bios_size, isa_bios_size, vga_bios_size; PCIBus *pci_bus; int piix3_devfn = -1; @@ -704,13 +696,6 @@ static void pc_init1(ram_addr_t ram_size, int vga_ram_size, BlockDriverState *hd[MAX_IDE_BUS * MAX_IDE_DEVS]; BlockDriverState *fd[MAX_FD]; - if (ram_size >= 0xe0000000 ) { - above_4g_mem_size = ram_size - 0xe0000000; - below_4g_mem_size = 0xe0000000; - } else { - below_4g_mem_size = ram_size; - } - linux_boot = (kernel_filename != NULL); /* init CPUs */ @@ -745,13 +730,7 @@ static void pc_init1(ram_addr_t ram_size, int vga_ram_size, /* allocate RAM */ ram_addr = qemu_ram_alloc(ram_size); - cpu_register_physical_memory(0, below_4g_mem_size, ram_addr); - - /* above 4giga memory allocation */ - if (above_4g_mem_size > 0) { - cpu_register_physical_memory(0x100000000ULL, above_4g_mem_size, - ram_addr + below_4g_mem_size); - } + cpu_register_physical_memory(0, ram_size, ram_addr); /* allocate VGA RAM */ vga_ram_addr = qemu_ram_alloc(vga_ram_size); @@ -971,7 +950,7 @@ static void pc_init1(ram_addr_t ram_size, int vga_ram_size, } floppy_controller = fdctrl_init(i8259[6], 2, 0, 0x3f0, fd); - cmos_init(below_4g_mem_size, above_4g_mem_size, boot_device, hd); + cmos_init(ram_size, boot_device, hd); if (pci_enabled && usb_enabled) { usb_uhci_piix3_init(pci_bus, piix3_devfn + 2); @@ -1011,7 +990,7 @@ static void pc_init1(ram_addr_t ram_size, int vga_ram_size, } } -static void pc_init_pci(ram_addr_t ram_size, int vga_ram_size, +static void pc_init_pci(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, @@ -1023,7 +1002,7 @@ static void pc_init_pci(ram_addr_t ram_size, int vga_ram_size, initrd_filename, 1, cpu_model); } -static void pc_init_isa(ram_addr_t ram_size, int vga_ram_size, +static void pc_init_isa(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, diff --git a/hw/piix_pci.c b/hw/piix_pci.c index 90cb3a6394..e1b6881cd9 100644 --- a/hw/piix_pci.c +++ b/hw/piix_pci.c @@ -55,7 +55,7 @@ static int pci_slot_get_pirq(PCIDevice *pci_dev, int irq_num) return (irq_num + slot_addend) & 3; } -static target_phys_addr_t isa_page_descs[384 / 4]; +static uint32_t isa_page_descs[384 / 4]; static uint8_t smm_enabled; static int pci_irq_levels[4]; diff --git a/hw/ppc405_boards.c b/hw/ppc405_boards.c index 6dd8a5f463..b1a15e8a84 100644 --- a/hw/ppc405_boards.c +++ b/hw/ppc405_boards.c @@ -177,7 +177,7 @@ static void ref405ep_fpga_init (uint32_t base) } } -static void ref405ep_init (ram_addr_t ram_size, int vga_ram_size, +static void ref405ep_init (int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, @@ -504,7 +504,7 @@ static void taihu_cpld_init (uint32_t base) } } -static void taihu_405ep_init(ram_addr_t ram_size, int vga_ram_size, +static void taihu_405ep_init(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, diff --git a/hw/ppc_chrp.c b/hw/ppc_chrp.c index 991eb8d6c5..4437a1038e 100644 --- a/hw/ppc_chrp.c +++ b/hw/ppc_chrp.c @@ -57,7 +57,7 @@ static CPUReadMemoryFunc *unin_read[] = { }; /* PowerPC Mac99 hardware initialisation */ -static void ppc_core99_init (ram_addr_t ram_size, int vga_ram_size, +static void ppc_core99_init (int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, diff --git a/hw/ppc_oldworld.c b/hw/ppc_oldworld.c index 92beeeb1a9..6b4f202d01 100644 --- a/hw/ppc_oldworld.c +++ b/hw/ppc_oldworld.c @@ -103,7 +103,7 @@ static int vga_osi_call (CPUState *env) return 1; /* osi_call handled */ } -static void ppc_heathrow_init (ram_addr_t ram_size, int vga_ram_size, +static void ppc_heathrow_init (int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, diff --git a/hw/ppc_prep.c b/hw/ppc_prep.c index 779a283222..c42688e427 100644 --- a/hw/ppc_prep.c +++ b/hw/ppc_prep.c @@ -535,7 +535,7 @@ CPUReadMemoryFunc *PPC_prep_io_read[] = { #define NVRAM_SIZE 0x2000 /* PowerPC PREP hardware initialisation */ -static void ppc_prep_init (ram_addr_t ram_size, int vga_ram_size, +static void ppc_prep_init (int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, diff --git a/hw/r2d.c b/hw/r2d.c index 1ea763b6c2..b6cc31c548 100644 --- a/hw/r2d.c +++ b/hw/r2d.c @@ -30,7 +30,7 @@ #define SDRAM_BASE 0x0c000000 /* Physical location of SDRAM: Area 3 */ #define SDRAM_SIZE 0x04000000 -static void r2d_init(ram_addr_t ram_size, int vga_ram_size, +static void r2d_init(int ram_size, int vga_ram_size, const char *boot_device, DisplayState * ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) diff --git a/hw/realview.c b/hw/realview.c index 3afeba3b87..acf3b9ee0a 100644 --- a/hw/realview.c +++ b/hw/realview.c @@ -23,7 +23,7 @@ static struct arm_boot_info realview_binfo = { .board_id = 0x33b, }; -static void realview_init(ram_addr_t ram_size, int vga_ram_size, +static void realview_init(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) diff --git a/hw/shix.c b/hw/shix.c index 241e076cc1..533b159359 100644 --- a/hw/shix.c +++ b/hw/shix.c @@ -65,7 +65,7 @@ void vga_screen_dump(const char *filename) /* XXXXX */ } -static void shix_init(ram_addr_t ram_size, int vga_ram_size, +static void shix_init(int ram_size, int vga_ram_size, const char *boot_device, DisplayState * ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) diff --git a/hw/spitz.c b/hw/spitz.c index 32e071e4e9..b059f9a9f6 100644 --- a/hw/spitz.c +++ b/hw/spitz.c @@ -1185,7 +1185,7 @@ static struct arm_boot_info spitz_binfo = { .ram_size = 0x04000000, }; -static void spitz_common_init(ram_addr_t ram_size, int vga_ram_size, +static void spitz_common_init(int ram_size, int vga_ram_size, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model, enum spitz_model_e model, int arm_id) @@ -1245,7 +1245,7 @@ static void spitz_common_init(ram_addr_t ram_size, int vga_ram_size, sl_bootparam_write(SL_PXA_PARAM_BASE - PXA2XX_SDRAM_BASE); } -static void spitz_init(ram_addr_t ram_size, int vga_ram_size, +static void spitz_init(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) @@ -1254,7 +1254,7 @@ static void spitz_init(ram_addr_t ram_size, int vga_ram_size, kernel_cmdline, initrd_filename, cpu_model, spitz, 0x2c9); } -static void borzoi_init(ram_addr_t ram_size, int vga_ram_size, +static void borzoi_init(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) @@ -1263,7 +1263,7 @@ static void borzoi_init(ram_addr_t ram_size, int vga_ram_size, kernel_cmdline, initrd_filename, cpu_model, borzoi, 0x33f); } -static void akita_init(ram_addr_t ram_size, int vga_ram_size, +static void akita_init(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) @@ -1272,7 +1272,7 @@ static void akita_init(ram_addr_t ram_size, int vga_ram_size, kernel_cmdline, initrd_filename, cpu_model, akita, 0x2e8); } -static void terrier_init(ram_addr_t ram_size, int vga_ram_size, +static void terrier_init(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) diff --git a/hw/stellaris.c b/hw/stellaris.c index 18d9c6b4a2..68f7137b13 100644 --- a/hw/stellaris.c +++ b/hw/stellaris.c @@ -1169,7 +1169,7 @@ static void stellaris_init(const char *kernel_filename, const char *cpu_model, } /* FIXME: Figure out how to generate these from stellaris_boards. */ -static void lm3s811evb_init(ram_addr_t ram_size, int vga_ram_size, +static void lm3s811evb_init(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) @@ -1177,7 +1177,7 @@ static void lm3s811evb_init(ram_addr_t ram_size, int vga_ram_size, stellaris_init(kernel_filename, cpu_model, ds, &stellaris_boards[0]); } -static void lm3s6965evb_init(ram_addr_t ram_size, int vga_ram_size, +static void lm3s6965evb_init(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) diff --git a/hw/sun4m.c b/hw/sun4m.c index 527a3fe4ee..b983c75811 100644 --- a/hw/sun4m.c +++ b/hw/sun4m.c @@ -1110,7 +1110,7 @@ static const struct hwdef hwdefs[] = { }; /* SPARCstation 5 hardware initialisation */ -static void ss5_init(ram_addr_t RAM_size, int vga_ram_size, +static void ss5_init(int RAM_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) @@ -1120,7 +1120,7 @@ static void ss5_init(ram_addr_t RAM_size, int vga_ram_size, } /* SPARCstation 10 hardware initialisation */ -static void ss10_init(ram_addr_t RAM_size, int vga_ram_size, +static void ss10_init(int RAM_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) @@ -1130,7 +1130,7 @@ static void ss10_init(ram_addr_t RAM_size, int vga_ram_size, } /* SPARCserver 600MP hardware initialisation */ -static void ss600mp_init(ram_addr_t RAM_size, int vga_ram_size, +static void ss600mp_init(int RAM_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) @@ -1140,7 +1140,7 @@ static void ss600mp_init(ram_addr_t RAM_size, int vga_ram_size, } /* SPARCstation 20 hardware initialisation */ -static void ss20_init(ram_addr_t RAM_size, int vga_ram_size, +static void ss20_init(int RAM_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) @@ -1150,7 +1150,7 @@ static void ss20_init(ram_addr_t RAM_size, int vga_ram_size, } /* SPARCstation 2 hardware initialisation */ -static void ss2_init(ram_addr_t RAM_size, int vga_ram_size, +static void ss2_init(int RAM_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) @@ -1480,7 +1480,7 @@ static void sun4d_hw_init(const struct sun4d_hwdef *hwdef, int RAM_size, } /* SPARCserver 1000 hardware initialisation */ -static void ss1000_init(ram_addr_t RAM_size, int vga_ram_size, +static void ss1000_init(int RAM_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) @@ -1490,7 +1490,7 @@ static void ss1000_init(ram_addr_t RAM_size, int vga_ram_size, } /* SPARCcenter 2000 hardware initialisation */ -static void ss2000_init(ram_addr_t RAM_size, int vga_ram_size, +static void ss2000_init(int RAM_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) diff --git a/hw/sun4u.c b/hw/sun4u.c index d99110b156..183f64a5ac 100644 --- a/hw/sun4u.c +++ b/hw/sun4u.c @@ -227,7 +227,7 @@ static const int parallel_irq[MAX_PARALLEL_PORTS] = { 7, 7, 7 }; static fdctrl_t *floppy_controller; /* Sun4u hardware initialisation */ -static void sun4u_init(ram_addr_t ram_size, int vga_ram_size, +static void sun4u_init(int ram_size, int vga_ram_size, const char *boot_devices, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) diff --git a/hw/versatilepb.c b/hw/versatilepb.c index 1825f91b75..ecc0037af8 100644 --- a/hw/versatilepb.c +++ b/hw/versatilepb.c @@ -159,7 +159,7 @@ static qemu_irq *vpb_sic_init(uint32_t base, qemu_irq *parent, int irq) static struct arm_boot_info versatile_binfo; -static void versatile_init(ram_addr_t ram_size, int vga_ram_size, +static void versatile_init(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model, @@ -293,7 +293,7 @@ static void versatile_init(ram_addr_t ram_size, int vga_ram_size, arm_load_kernel(env, &versatile_binfo); } -static void vpb_init(ram_addr_t ram_size, int vga_ram_size, +static void vpb_init(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) @@ -304,7 +304,7 @@ static void vpb_init(ram_addr_t ram_size, int vga_ram_size, initrd_filename, cpu_model, 0x183); } -static void vab_init(ram_addr_t ram_size, int vga_ram_size, +static void vab_init(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) diff --git a/osdep.c b/osdep.c index 46434af605..ae7e3fb8ca 100644 --- a/osdep.c +++ b/osdep.c @@ -98,6 +98,7 @@ static void *kqemu_vmalloc(size_t size) int64_t free_space; int ram_mb; + extern int ram_size; free_space = (int64_t)stfs.f_bavail * stfs.f_bsize; if ((ram_size + 8192 * 1024) >= free_space) { ram_mb = (ram_size / (1024 * 1024)); diff --git a/qemu-doc.texi b/qemu-doc.texi index 45c89ce26b..68630c086e 100644 --- a/qemu-doc.texi +++ b/qemu-doc.texi @@ -322,9 +322,7 @@ Disable boot signature checking for floppy disks in Bochs BIOS. It may be needed to boot from old floppy disks. @item -m @var{megs} -Set virtual RAM size to @var{megs} megabytes. Default is 128 MiB. Optionally, -a suffix of ``M'' or ``G'' can be used to signify a value in megabytes or -gigabytes respectively. +Set virtual RAM size to @var{megs} megabytes. Default is 128 MiB. @item -smp @var{n} Simulate an SMP system with @var{n} CPUs. On the PC target, up to 255 diff --git a/sysemu.h b/sysemu.h index d588587715..0f18e049e0 100644 --- a/sysemu.h +++ b/sysemu.h @@ -73,6 +73,7 @@ int tap_win32_init(VLANState *vlan, const char *ifname); /* SLIRP */ void do_info_slirp(void); +extern int ram_size; extern int bios_size; extern int cirrus_vga_enabled; extern int vmsvga_enabled; diff --git a/vl.c b/vl.c index dee9074ad1..78486cf10e 100644 --- a/vl.c +++ b/vl.c @@ -142,6 +142,8 @@ int inet_aton(const char *cp, struct in_addr *ia); //#define DEBUG_UNUSED_IOPORT //#define DEBUG_IOPORT +#define PHYS_RAM_MAX_SIZE (2047 * 1024 * 1024) + #ifdef TARGET_PPC #define DEFAULT_RAM_SIZE 144 #else @@ -173,7 +175,7 @@ int nographic; int curses; const char* keyboard_layout = NULL; int64_t ticks_per_sec; -ram_addr_t ram_size; +int ram_size; int pit_min_timer_count = 0; int nb_nics; NICInfo nd_table[MAX_NICS]; @@ -6875,8 +6877,7 @@ static int ram_get_page(QEMUFile *f, uint8_t *buf, int len) static int ram_load_v1(QEMUFile *f, void *opaque) { - int ret; - ram_addr_t i; + int i, ret; if (qemu_get_be32(f) != phys_ram_size) return -EINVAL; @@ -7012,7 +7013,7 @@ static void ram_decompress_close(RamDecompressState *s) static void ram_save(QEMUFile *f, void *opaque) { - ram_addr_t i; + int i; RamCompressState s1, *s = &s1; uint8_t buf[10]; @@ -7057,7 +7058,7 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id) { RamDecompressState s1, *s = &s1; uint8_t buf[10]; - ram_addr_t i; + int i; if (version_id == 1) return ram_load_v1(f, opaque); @@ -7074,7 +7075,7 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id) } if (buf[0] == 0) { if (ram_decompress_buf(s, phys_ram_base + i, BDRV_HASH_BLOCK_SIZE) < 0) { - fprintf(stderr, "Error while reading ram block address=0x%08" PRIx64, (uint64_t)i); + fprintf(stderr, "Error while reading ram block address=0x%08x", i); goto error; } } else @@ -8555,39 +8556,16 @@ int main(int argc, char **argv) case QEMU_OPTION_h: help(0); break; - case QEMU_OPTION_m: { - uint64_t value; - char *ptr; - - value = strtoul(optarg, &ptr, 10); - switch (*ptr) { - case 0: case 'M': case 'm': - value <<= 20; - break; - case 'G': case 'g': - value <<= 30; - break; - default: - fprintf(stderr, "qemu: invalid ram size: %s\n", optarg); + case QEMU_OPTION_m: + ram_size = atoi(optarg) * 1024 * 1024; + if (ram_size <= 0) + help(1); + if (ram_size > PHYS_RAM_MAX_SIZE) { + fprintf(stderr, "qemu: at most %d MB RAM can be simulated\n", + PHYS_RAM_MAX_SIZE / (1024 * 1024)); exit(1); } - - /* On 32-bit hosts, QEMU is limited by virtual address space */ - if (value > (2047 << 20) -#ifndef USE_KQEMU - && HOST_LONG_BITS == 32 -#endif - ) { - fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n"); - exit(1); - } - if (value != (uint64_t)(ram_addr_t)value) { - fprintf(stderr, "qemu: ram size too large\n"); - exit(1); - } - ram_size = value; break; - } case QEMU_OPTION_d: { int mask;