Commit 967032c3d5547a9973465f495f8f25e3c7967633

Authored by aurel32
1 parent acb98efb

Use correct types to enable > 2G support, based on a patch from

Anthony Liguori.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4238 c046a42c-6fe2-441c-8c8c-71466251a162
cpu-all.h
@@ -700,7 +700,7 @@ static inline void stfq_be_p(void *ptr, float64 v) @@ -700,7 +700,7 @@ static inline void stfq_be_p(void *ptr, float64 v)
700 700
701 /* page related stuff */ 701 /* page related stuff */
702 702
703 -#define TARGET_PAGE_SIZE (1 << TARGET_PAGE_BITS) 703 +#define TARGET_PAGE_SIZE (1UL << TARGET_PAGE_BITS)
704 #define TARGET_PAGE_MASK ~(TARGET_PAGE_SIZE - 1) 704 #define TARGET_PAGE_MASK ~(TARGET_PAGE_SIZE - 1)
705 #define TARGET_PAGE_ALIGN(addr) (((addr) + TARGET_PAGE_SIZE - 1) & TARGET_PAGE_MASK) 705 #define TARGET_PAGE_ALIGN(addr) (((addr) + TARGET_PAGE_SIZE - 1) & TARGET_PAGE_MASK)
706 706
@@ -806,12 +806,16 @@ int cpu_inw(CPUState *env, int addr); @@ -806,12 +806,16 @@ int cpu_inw(CPUState *env, int addr);
806 int cpu_inl(CPUState *env, int addr); 806 int cpu_inl(CPUState *env, int addr);
807 #endif 807 #endif
808 808
  809 +/* address in the RAM (different from a physical address) */
  810 +typedef unsigned long ram_addr_t;
  811 +
809 /* memory API */ 812 /* memory API */
810 813
811 -extern int phys_ram_size; 814 +extern ram_addr_t phys_ram_size;
812 extern int phys_ram_fd; 815 extern int phys_ram_fd;
813 extern uint8_t *phys_ram_base; 816 extern uint8_t *phys_ram_base;
814 extern uint8_t *phys_ram_dirty; 817 extern uint8_t *phys_ram_dirty;
  818 +extern ram_addr_t ram_size;
815 819
816 /* physical memory access */ 820 /* physical memory access */
817 #define TLB_INVALID_MASK (1 << 3) 821 #define TLB_INVALID_MASK (1 << 3)
@@ -833,10 +837,10 @@ typedef void CPUWriteMemoryFunc(void *opaque, target_phys_addr_t addr, uint32_t @@ -833,10 +837,10 @@ typedef void CPUWriteMemoryFunc(void *opaque, target_phys_addr_t addr, uint32_t
833 typedef uint32_t CPUReadMemoryFunc(void *opaque, target_phys_addr_t addr); 837 typedef uint32_t CPUReadMemoryFunc(void *opaque, target_phys_addr_t addr);
834 838
835 void cpu_register_physical_memory(target_phys_addr_t start_addr, 839 void cpu_register_physical_memory(target_phys_addr_t start_addr,
836 - unsigned long size,  
837 - unsigned long phys_offset);  
838 -uint32_t cpu_get_physical_page_desc(target_phys_addr_t addr);  
839 -ram_addr_t qemu_ram_alloc(unsigned int size); 840 + ram_addr_t size,
  841 + ram_addr_t phys_offset);
  842 +ram_addr_t cpu_get_physical_page_desc(target_phys_addr_t addr);
  843 +ram_addr_t qemu_ram_alloc(ram_addr_t);
840 void qemu_ram_free(ram_addr_t addr); 844 void qemu_ram_free(ram_addr_t addr);
841 int cpu_register_io_memory(int io_index, 845 int cpu_register_io_memory(int io_index,
842 CPUReadMemoryFunc **mem_read, 846 CPUReadMemoryFunc **mem_read,
cpu-defs.h
@@ -76,9 +76,6 @@ typedef uint64_t target_phys_addr_t; @@ -76,9 +76,6 @@ typedef uint64_t target_phys_addr_t;
76 #error TARGET_PHYS_ADDR_BITS undefined 76 #error TARGET_PHYS_ADDR_BITS undefined
77 #endif 77 #endif
78 78
79 -/* address in the RAM (different from a physical address) */  
80 -typedef unsigned long ram_addr_t;  
81 -  
82 #define HOST_LONG_SIZE (HOST_LONG_BITS / 8) 79 #define HOST_LONG_SIZE (HOST_LONG_BITS / 8)
83 80
84 #define EXCP_INTERRUPT 0x10000 /* async interruption */ 81 #define EXCP_INTERRUPT 0x10000 /* async interruption */
exec-all.h
@@ -82,7 +82,7 @@ int cpu_restore_state_copy(struct TranslationBlock *tb, @@ -82,7 +82,7 @@ int cpu_restore_state_copy(struct TranslationBlock *tb,
82 void cpu_resume_from_signal(CPUState *env1, void *puc); 82 void cpu_resume_from_signal(CPUState *env1, void *puc);
83 void cpu_exec_init(CPUState *env); 83 void cpu_exec_init(CPUState *env);
84 int page_unprotect(target_ulong address, unsigned long pc, void *puc); 84 int page_unprotect(target_ulong address, unsigned long pc, void *puc);
85 -void tb_invalidate_phys_page_range(target_ulong start, target_ulong end, 85 +void tb_invalidate_phys_page_range(target_phys_addr_t start, target_phys_addr_t end,
86 int is_cpu_write_access); 86 int is_cpu_write_access);
87 void tb_invalidate_page_range(target_ulong start, target_ulong end); 87 void tb_invalidate_page_range(target_ulong start, target_ulong end);
88 void tlb_flush_page(CPUState *env, target_ulong addr); 88 void tlb_flush_page(CPUState *env, target_ulong addr);
@@ -74,6 +74,10 @@ @@ -74,6 +74,10 @@
74 #define TARGET_VIRT_ADDR_SPACE_BITS 42 74 #define TARGET_VIRT_ADDR_SPACE_BITS 42
75 #elif defined(TARGET_PPC64) 75 #elif defined(TARGET_PPC64)
76 #define TARGET_PHYS_ADDR_SPACE_BITS 42 76 #define TARGET_PHYS_ADDR_SPACE_BITS 42
  77 +#elif defined(TARGET_X86_64) && !defined(USE_KQEMU)
  78 +#define TARGET_PHYS_ADDR_SPACE_BITS 40
  79 +#elif defined(TARGET_I386) && !defined(USE_KQEMU)
  80 +#define TARGET_PHYS_ADDR_SPACE_BITS 36
77 #else 81 #else
78 /* Note: for compatibility with kqemu, we use 32 bits for x86_64 */ 82 /* Note: for compatibility with kqemu, we use 32 bits for x86_64 */
79 #define TARGET_PHYS_ADDR_SPACE_BITS 32 83 #define TARGET_PHYS_ADDR_SPACE_BITS 32
@@ -88,7 +92,7 @@ spinlock_t tb_lock = SPIN_LOCK_UNLOCKED; @@ -88,7 +92,7 @@ spinlock_t tb_lock = SPIN_LOCK_UNLOCKED;
88 uint8_t code_gen_buffer[CODE_GEN_BUFFER_SIZE] __attribute__((aligned (32))); 92 uint8_t code_gen_buffer[CODE_GEN_BUFFER_SIZE] __attribute__((aligned (32)));
89 uint8_t *code_gen_ptr; 93 uint8_t *code_gen_ptr;
90 94
91 -int phys_ram_size; 95 +ram_addr_t phys_ram_size;
92 int phys_ram_fd; 96 int phys_ram_fd;
93 uint8_t *phys_ram_base; 97 uint8_t *phys_ram_base;
94 uint8_t *phys_ram_dirty; 98 uint8_t *phys_ram_dirty;
@@ -113,7 +117,7 @@ typedef struct PageDesc { @@ -113,7 +117,7 @@ typedef struct PageDesc {
113 117
114 typedef struct PhysPageDesc { 118 typedef struct PhysPageDesc {
115 /* offset in host memory of the page + io_index in the low 12 bits */ 119 /* offset in host memory of the page + io_index in the low 12 bits */
116 - uint32_t phys_offset; 120 + ram_addr_t phys_offset;
117 } PhysPageDesc; 121 } PhysPageDesc;
118 122
119 #define L2_BITS 10 123 #define L2_BITS 10
@@ -124,9 +128,14 @@ typedef struct PhysPageDesc { @@ -124,9 +128,14 @@ typedef struct PhysPageDesc {
124 */ 128 */
125 #define L1_BITS (TARGET_VIRT_ADDR_SPACE_BITS - L2_BITS - TARGET_PAGE_BITS) 129 #define L1_BITS (TARGET_VIRT_ADDR_SPACE_BITS - L2_BITS - TARGET_PAGE_BITS)
126 #else 130 #else
127 -#define L1_BITS (32 - L2_BITS - TARGET_PAGE_BITS) 131 +#define L1_BITS (TARGET_PHYS_ADDR_SPACE_BITS - L2_BITS - TARGET_PAGE_BITS)
128 #endif 132 #endif
129 133
  134 +#undef L1_BITS
  135 +#undef L2_BITS
  136 +#define L1_BITS 13
  137 +#define L2_BITS 13
  138 +
130 #define L1_SIZE (1 << L1_BITS) 139 #define L1_SIZE (1 << L1_BITS)
131 #define L2_SIZE (1 << L2_BITS) 140 #define L2_SIZE (1 << L2_BITS)
132 141
@@ -234,7 +243,7 @@ static void page_init(void) @@ -234,7 +243,7 @@ static void page_init(void)
234 #endif 243 #endif
235 } 244 }
236 245
237 -static inline PageDesc *page_find_alloc(unsigned int index) 246 +static inline PageDesc *page_find_alloc(target_ulong index)
238 { 247 {
239 PageDesc **lp, *p; 248 PageDesc **lp, *p;
240 249
@@ -249,7 +258,7 @@ static inline PageDesc *page_find_alloc(unsigned int index) @@ -249,7 +258,7 @@ static inline PageDesc *page_find_alloc(unsigned int index)
249 return p + (index & (L2_SIZE - 1)); 258 return p + (index & (L2_SIZE - 1));
250 } 259 }
251 260
252 -static inline PageDesc *page_find(unsigned int index) 261 +static inline PageDesc *page_find(target_ulong index)
253 { 262 {
254 PageDesc *p; 263 PageDesc *p;
255 264
@@ -265,6 +274,7 @@ static PhysPageDesc *phys_page_find_alloc(target_phys_addr_t index, int alloc) @@ -265,6 +274,7 @@ static PhysPageDesc *phys_page_find_alloc(target_phys_addr_t index, int alloc)
265 PhysPageDesc *pd; 274 PhysPageDesc *pd;
266 275
267 p = (void **)l1_phys_map; 276 p = (void **)l1_phys_map;
  277 +#if 0
268 #if TARGET_PHYS_ADDR_SPACE_BITS > 32 278 #if TARGET_PHYS_ADDR_SPACE_BITS > 32
269 279
270 #if TARGET_PHYS_ADDR_SPACE_BITS > (32 + L1_BITS) 280 #if TARGET_PHYS_ADDR_SPACE_BITS > (32 + L1_BITS)
@@ -281,6 +291,7 @@ static PhysPageDesc *phys_page_find_alloc(target_phys_addr_t index, int alloc) @@ -281,6 +291,7 @@ static PhysPageDesc *phys_page_find_alloc(target_phys_addr_t index, int alloc)
281 *lp = p; 291 *lp = p;
282 } 292 }
283 #endif 293 #endif
  294 +#endif
284 lp = p + ((index >> L2_BITS) & (L1_SIZE - 1)); 295 lp = p + ((index >> L2_BITS) & (L1_SIZE - 1));
285 pd = *lp; 296 pd = *lp;
286 if (!pd) { 297 if (!pd) {
@@ -511,12 +522,12 @@ static inline void tb_reset_jump(TranslationBlock *tb, int n) @@ -511,12 +522,12 @@ static inline void tb_reset_jump(TranslationBlock *tb, int n)
511 tb_set_jmp_target(tb, n, (unsigned long)(tb->tc_ptr + tb->tb_next_offset[n])); 522 tb_set_jmp_target(tb, n, (unsigned long)(tb->tc_ptr + tb->tb_next_offset[n]));
512 } 523 }
513 524
514 -static inline void tb_phys_invalidate(TranslationBlock *tb, unsigned int page_addr) 525 +static inline void tb_phys_invalidate(TranslationBlock *tb, target_ulong page_addr)
515 { 526 {
516 CPUState *env; 527 CPUState *env;
517 PageDesc *p; 528 PageDesc *p;
518 unsigned int h, n1; 529 unsigned int h, n1;
519 - target_ulong phys_pc; 530 + target_phys_addr_t phys_pc;
520 TranslationBlock *tb1, *tb2; 531 TranslationBlock *tb1, *tb2;
521 532
522 /* remove the TB from the hash list */ 533 /* remove the TB from the hash list */
@@ -667,7 +678,7 @@ static void tb_gen_code(CPUState *env, @@ -667,7 +678,7 @@ static void tb_gen_code(CPUState *env,
667 the same physical page. 'is_cpu_write_access' should be true if called 678 the same physical page. 'is_cpu_write_access' should be true if called
668 from a real cpu write access: the virtual CPU will exit the current 679 from a real cpu write access: the virtual CPU will exit the current
669 TB if code is modified inside this TB. */ 680 TB if code is modified inside this TB. */
670 -void tb_invalidate_phys_page_range(target_ulong start, target_ulong end, 681 +void tb_invalidate_phys_page_range(target_phys_addr_t start, target_phys_addr_t end,
671 int is_cpu_write_access) 682 int is_cpu_write_access)
672 { 683 {
673 int n, current_tb_modified, current_tb_not_found, current_flags; 684 int n, current_tb_modified, current_tb_not_found, current_flags;
@@ -780,7 +791,7 @@ void tb_invalidate_phys_page_range(target_ulong start, target_ulong end, @@ -780,7 +791,7 @@ void tb_invalidate_phys_page_range(target_ulong start, target_ulong end,
780 } 791 }
781 792
782 /* len must be <= 8 and start must be a multiple of len */ 793 /* len must be <= 8 and start must be a multiple of len */
783 -static inline void tb_invalidate_phys_page_fast(target_ulong start, int len) 794 +static inline void tb_invalidate_phys_page_fast(target_phys_addr_t start, int len)
784 { 795 {
785 PageDesc *p; 796 PageDesc *p;
786 int offset, b; 797 int offset, b;
@@ -809,7 +820,7 @@ static inline void tb_invalidate_phys_page_fast(target_ulong start, int len) @@ -809,7 +820,7 @@ static inline void tb_invalidate_phys_page_fast(target_ulong start, int len)
809 } 820 }
810 821
811 #if !defined(CONFIG_SOFTMMU) 822 #if !defined(CONFIG_SOFTMMU)
812 -static void tb_invalidate_phys_page(target_ulong addr, 823 +static void tb_invalidate_phys_page(target_phys_addr_t addr,
813 unsigned long pc, void *puc) 824 unsigned long pc, void *puc)
814 { 825 {
815 int n, current_flags, current_tb_modified; 826 int n, current_flags, current_tb_modified;
@@ -1986,7 +1997,7 @@ static inline void tlb_set_dirty(CPUState *env, @@ -1986,7 +1997,7 @@ static inline void tlb_set_dirty(CPUState *env,
1986 1997
1987 static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end, 1998 static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
1988 int memory); 1999 int memory);
1989 -static void *subpage_init (target_phys_addr_t base, uint32_t *phys, 2000 +static void *subpage_init (target_phys_addr_t base, ram_addr_t *phys,
1990 int orig_memory); 2001 int orig_memory);
1991 #define CHECK_SUBPAGE(addr, start_addr, start_addr2, end_addr, end_addr2, \ 2002 #define CHECK_SUBPAGE(addr, start_addr, start_addr2, end_addr, end_addr2, \
1992 need_subpage) \ 2003 need_subpage) \
@@ -2012,13 +2023,13 @@ static void *subpage_init (target_phys_addr_t base, uint32_t *phys, @@ -2012,13 +2023,13 @@ static void *subpage_init (target_phys_addr_t base, uint32_t *phys,
2012 page size. If (phys_offset & ~TARGET_PAGE_MASK) != 0, then it is an 2023 page size. If (phys_offset & ~TARGET_PAGE_MASK) != 0, then it is an
2013 io memory page */ 2024 io memory page */
2014 void cpu_register_physical_memory(target_phys_addr_t start_addr, 2025 void cpu_register_physical_memory(target_phys_addr_t start_addr,
2015 - unsigned long size,  
2016 - unsigned long phys_offset) 2026 + ram_addr_t size,
  2027 + ram_addr_t phys_offset)
2017 { 2028 {
2018 target_phys_addr_t addr, end_addr; 2029 target_phys_addr_t addr, end_addr;
2019 PhysPageDesc *p; 2030 PhysPageDesc *p;
2020 CPUState *env; 2031 CPUState *env;
2021 - unsigned long orig_size = size; 2032 + ram_addr_t orig_size = size;
2022 void *subpage; 2033 void *subpage;
2023 2034
2024 size = (size + TARGET_PAGE_SIZE - 1) & TARGET_PAGE_MASK; 2035 size = (size + TARGET_PAGE_SIZE - 1) & TARGET_PAGE_MASK;
@@ -2026,7 +2037,7 @@ void cpu_register_physical_memory(target_phys_addr_t start_addr, @@ -2026,7 +2037,7 @@ void cpu_register_physical_memory(target_phys_addr_t start_addr,
2026 for(addr = start_addr; addr != end_addr; addr += TARGET_PAGE_SIZE) { 2037 for(addr = start_addr; addr != end_addr; addr += TARGET_PAGE_SIZE) {
2027 p = phys_page_find(addr >> TARGET_PAGE_BITS); 2038 p = phys_page_find(addr >> TARGET_PAGE_BITS);
2028 if (p && p->phys_offset != IO_MEM_UNASSIGNED) { 2039 if (p && p->phys_offset != IO_MEM_UNASSIGNED) {
2029 - unsigned long orig_memory = p->phys_offset; 2040 + ram_addr_t orig_memory = p->phys_offset;
2030 target_phys_addr_t start_addr2, end_addr2; 2041 target_phys_addr_t start_addr2, end_addr2;
2031 int need_subpage = 0; 2042 int need_subpage = 0;
2032 2043
@@ -2079,7 +2090,7 @@ void cpu_register_physical_memory(target_phys_addr_t start_addr, @@ -2079,7 +2090,7 @@ void cpu_register_physical_memory(target_phys_addr_t start_addr,
2079 } 2090 }
2080 2091
2081 /* XXX: temporary until new memory mapping API */ 2092 /* XXX: temporary until new memory mapping API */
2082 -uint32_t cpu_get_physical_page_desc(target_phys_addr_t addr) 2093 +ram_addr_t cpu_get_physical_page_desc(target_phys_addr_t addr)
2083 { 2094 {
2084 PhysPageDesc *p; 2095 PhysPageDesc *p;
2085 2096
@@ -2090,12 +2101,12 @@ uint32_t cpu_get_physical_page_desc(target_phys_addr_t addr) @@ -2090,12 +2101,12 @@ uint32_t cpu_get_physical_page_desc(target_phys_addr_t addr)
2090 } 2101 }
2091 2102
2092 /* XXX: better than nothing */ 2103 /* XXX: better than nothing */
2093 -ram_addr_t qemu_ram_alloc(unsigned int size) 2104 +ram_addr_t qemu_ram_alloc(ram_addr_t size)
2094 { 2105 {
2095 ram_addr_t addr; 2106 ram_addr_t addr;
2096 if ((phys_ram_alloc_offset + size) >= phys_ram_size) { 2107 if ((phys_ram_alloc_offset + size) >= phys_ram_size) {
2097 - fprintf(stderr, "Not enough memory (requested_size = %u, max memory = %d)\n",  
2098 - size, phys_ram_size); 2108 + fprintf(stderr, "Not enough memory (requested_size = %lu, max memory = %" PRIu64 ")\n",
  2109 + size, (uint64_t)phys_ram_size);
2099 abort(); 2110 abort();
2100 } 2111 }
2101 addr = phys_ram_alloc_offset; 2112 addr = phys_ram_alloc_offset;
@@ -2438,7 +2449,7 @@ static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end, @@ -2438,7 +2449,7 @@ static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
2438 return 0; 2449 return 0;
2439 } 2450 }
2440 2451
2441 -static void *subpage_init (target_phys_addr_t base, uint32_t *phys, 2452 +static void *subpage_init (target_phys_addr_t base, ram_addr_t *phys,
2442 int orig_memory) 2453 int orig_memory)
2443 { 2454 {
2444 subpage_t *mmio; 2455 subpage_t *mmio;
hw/an5206.c
@@ -30,7 +30,7 @@ void DMA_run (void) @@ -30,7 +30,7 @@ void DMA_run (void)
30 30
31 /* Board init. */ 31 /* Board init. */
32 32
33 -static void an5206_init(int ram_size, int vga_ram_size, 33 +static void an5206_init(ram_addr_t ram_size, int vga_ram_size,
34 const char *boot_device, DisplayState *ds, 34 const char *boot_device, DisplayState *ds,
35 const char *kernel_filename, const char *kernel_cmdline, 35 const char *kernel_filename, const char *kernel_cmdline,
36 const char *initrd_filename, const char *cpu_model) 36 const char *initrd_filename, const char *cpu_model)
hw/boards.h
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 #ifndef HW_BOARDS_H 3 #ifndef HW_BOARDS_H
4 #define HW_BOARDS_H 4 #define HW_BOARDS_H
5 5
6 -typedef void QEMUMachineInitFunc(int ram_size, int vga_ram_size, 6 +typedef void QEMUMachineInitFunc(ram_addr_t ram_size, int vga_ram_size,
7 const char *boot_device, DisplayState *ds, 7 const char *boot_device, DisplayState *ds,
8 const char *kernel_filename, 8 const char *kernel_filename,
9 const char *kernel_cmdline, 9 const char *kernel_cmdline,
hw/dummy_m68k.c
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 14
15 /* Board init. */ 15 /* Board init. */
16 16
17 -static void dummy_m68k_init(int ram_size, int vga_ram_size, 17 +static void dummy_m68k_init(ram_addr_t ram_size, int vga_ram_size,
18 const char *boot_device, DisplayState *ds, 18 const char *boot_device, DisplayState *ds,
19 const char *kernel_filename, const char *kernel_cmdline, 19 const char *kernel_filename, const char *kernel_cmdline,
20 const char *initrd_filename, const char *cpu_model) 20 const char *initrd_filename, const char *cpu_model)
hw/etraxfs.c
@@ -41,7 +41,7 @@ void etraxfs_timer_init(CPUState *env, qemu_irq *irqs, @@ -41,7 +41,7 @@ void etraxfs_timer_init(CPUState *env, qemu_irq *irqs,
41 void etraxfs_ser_init(CPUState *env, qemu_irq *irqs, target_phys_addr_t base); 41 void etraxfs_ser_init(CPUState *env, qemu_irq *irqs, target_phys_addr_t base);
42 42
43 static 43 static
44 -void bareetraxfs_init (int ram_size, int vga_ram_size, 44 +void bareetraxfs_init (ram_addr_t ram_size, int vga_ram_size,
45 const char *boot_device, DisplayState *ds, 45 const char *boot_device, DisplayState *ds,
46 const char *kernel_filename, const char *kernel_cmdline, 46 const char *kernel_filename, const char *kernel_cmdline,
47 const char *initrd_filename, const char *cpu_model) 47 const char *initrd_filename, const char *cpu_model)
hw/gumstix.c
@@ -41,7 +41,7 @@ @@ -41,7 +41,7 @@
41 41
42 static const int sector_len = 128 * 1024; 42 static const int sector_len = 128 * 1024;
43 43
44 -static void connex_init(int ram_size, int vga_ram_size, 44 +static void connex_init(ram_addr_t ram_size, int vga_ram_size,
45 const char *boot_device, DisplayState *ds, 45 const char *boot_device, DisplayState *ds,
46 const char *kernel_filename, const char *kernel_cmdline, 46 const char *kernel_filename, const char *kernel_cmdline,
47 const char *initrd_filename, const char *cpu_model) 47 const char *initrd_filename, const char *cpu_model)
@@ -81,7 +81,7 @@ static void connex_init(int ram_size, int vga_ram_size, @@ -81,7 +81,7 @@ static void connex_init(int ram_size, int vga_ram_size,
81 pxa2xx_gpio_in_get(cpu->gpio)[36]); 81 pxa2xx_gpio_in_get(cpu->gpio)[36]);
82 } 82 }
83 83
84 -static void verdex_init(int ram_size, int vga_ram_size, 84 +static void verdex_init(ram_addr_t ram_size, int vga_ram_size,
85 const char *boot_device, DisplayState *ds, 85 const char *boot_device, DisplayState *ds,
86 const char *kernel_filename, const char *kernel_cmdline, 86 const char *kernel_filename, const char *kernel_cmdline,
87 const char *initrd_filename, const char *cpu_model) 87 const char *initrd_filename, const char *cpu_model)
hw/integratorcp.c
@@ -474,7 +474,7 @@ static struct arm_boot_info integrator_binfo = { @@ -474,7 +474,7 @@ static struct arm_boot_info integrator_binfo = {
474 .board_id = 0x113, 474 .board_id = 0x113,
475 }; 475 };
476 476
477 -static void integratorcp_init(int ram_size, int vga_ram_size, 477 +static void integratorcp_init(ram_addr_t ram_size, int vga_ram_size,
478 const char *boot_device, DisplayState *ds, 478 const char *boot_device, DisplayState *ds,
479 const char *kernel_filename, const char *kernel_cmdline, 479 const char *kernel_filename, const char *kernel_cmdline,
480 const char *initrd_filename, const char *cpu_model) 480 const char *initrd_filename, const char *cpu_model)
hw/mainstone.c
@@ -64,7 +64,7 @@ static struct arm_boot_info mainstone_binfo = { @@ -64,7 +64,7 @@ static struct arm_boot_info mainstone_binfo = {
64 .ram_size = 0x04000000, 64 .ram_size = 0x04000000,
65 }; 65 };
66 66
67 -static void mainstone_common_init(int ram_size, int vga_ram_size, 67 +static void mainstone_common_init(ram_addr_t ram_size, int vga_ram_size,
68 DisplayState *ds, const char *kernel_filename, 68 DisplayState *ds, const char *kernel_filename,
69 const char *kernel_cmdline, const char *initrd_filename, 69 const char *kernel_cmdline, const char *initrd_filename,
70 const char *cpu_model, enum mainstone_model_e model, int arm_id) 70 const char *cpu_model, enum mainstone_model_e model, int arm_id)
@@ -133,7 +133,7 @@ static void mainstone_common_init(int ram_size, int vga_ram_size, @@ -133,7 +133,7 @@ static void mainstone_common_init(int ram_size, int vga_ram_size,
133 arm_load_kernel(cpu->env, &mainstone_binfo); 133 arm_load_kernel(cpu->env, &mainstone_binfo);
134 } 134 }
135 135
136 -static void mainstone_init(int ram_size, int vga_ram_size, 136 +static void mainstone_init(ram_addr_t ram_size, int vga_ram_size,
137 const char *boot_device, DisplayState *ds, 137 const char *boot_device, DisplayState *ds,
138 const char *kernel_filename, const char *kernel_cmdline, 138 const char *kernel_filename, const char *kernel_cmdline,
139 const char *initrd_filename, const char *cpu_model) 139 const char *initrd_filename, const char *cpu_model)
hw/mcf5208.c
@@ -202,7 +202,7 @@ static void mcf5208_sys_init(qemu_irq *pic) @@ -202,7 +202,7 @@ static void mcf5208_sys_init(qemu_irq *pic)
202 } 202 }
203 } 203 }
204 204
205 -static void mcf5208evb_init(int ram_size, int vga_ram_size, 205 +static void mcf5208evb_init(ram_addr_t ram_size, int vga_ram_size,
206 const char *boot_device, DisplayState *ds, 206 const char *boot_device, DisplayState *ds,
207 const char *kernel_filename, const char *kernel_cmdline, 207 const char *kernel_filename, const char *kernel_cmdline,
208 const char *initrd_filename, const char *cpu_model) 208 const char *initrd_filename, const char *cpu_model)
hw/mips_jazz.c
@@ -116,7 +116,7 @@ void espdma_memory_write(void *opaque, uint8_t *buf, int len) @@ -116,7 +116,7 @@ void espdma_memory_write(void *opaque, uint8_t *buf, int len)
116 #define MAGNUM_BIOS_SIZE (BIOS_SIZE < MAGNUM_BIOS_SIZE_MAX ? BIOS_SIZE : MAGNUM_BIOS_SIZE_MAX) 116 #define MAGNUM_BIOS_SIZE (BIOS_SIZE < MAGNUM_BIOS_SIZE_MAX ? BIOS_SIZE : MAGNUM_BIOS_SIZE_MAX)
117 117
118 static 118 static
119 -void mips_jazz_init (int ram_size, int vga_ram_size, 119 +void mips_jazz_init (ram_addr_t ram_size, int vga_ram_size,
120 DisplayState *ds, const char *cpu_model, 120 DisplayState *ds, const char *cpu_model,
121 enum jazz_model_e jazz_model) 121 enum jazz_model_e jazz_model)
122 { 122 {
@@ -256,7 +256,7 @@ void mips_jazz_init (int ram_size, int vga_ram_size, @@ -256,7 +256,7 @@ void mips_jazz_init (int ram_size, int vga_ram_size,
256 } 256 }
257 257
258 static 258 static
259 -void mips_magnum_init (int ram_size, int vga_ram_size, 259 +void mips_magnum_init (ram_addr_t ram_size, int vga_ram_size,
260 const char *boot_device, DisplayState *ds, 260 const char *boot_device, DisplayState *ds,
261 const char *kernel_filename, const char *kernel_cmdline, 261 const char *kernel_filename, const char *kernel_cmdline,
262 const char *initrd_filename, const char *cpu_model) 262 const char *initrd_filename, const char *cpu_model)
@@ -265,7 +265,7 @@ void mips_magnum_init (int ram_size, int vga_ram_size, @@ -265,7 +265,7 @@ void mips_magnum_init (int ram_size, int vga_ram_size,
265 } 265 }
266 266
267 static 267 static
268 -void mips_pica61_init (int ram_size, int vga_ram_size, 268 +void mips_pica61_init (ram_addr_t ram_size, int vga_ram_size,
269 const char *boot_device, DisplayState *ds, 269 const char *boot_device, DisplayState *ds,
270 const char *kernel_filename, const char *kernel_cmdline, 270 const char *kernel_filename, const char *kernel_cmdline,
271 const char *initrd_filename, const char *cpu_model) 271 const char *initrd_filename, const char *cpu_model)
hw/mips_malta.c
@@ -763,7 +763,7 @@ static void main_cpu_reset(void *opaque) @@ -763,7 +763,7 @@ static void main_cpu_reset(void *opaque)
763 } 763 }
764 764
765 static 765 static
766 -void mips_malta_init (int ram_size, int vga_ram_size, 766 +void mips_malta_init (ram_addr_t ram_size, int vga_ram_size,
767 const char *boot_device, DisplayState *ds, 767 const char *boot_device, DisplayState *ds,
768 const char *kernel_filename, const char *kernel_cmdline, 768 const char *kernel_filename, const char *kernel_cmdline,
769 const char *initrd_filename, const char *cpu_model) 769 const char *initrd_filename, const char *cpu_model)
hw/mips_mipssim.c
@@ -106,7 +106,7 @@ static void main_cpu_reset(void *opaque) @@ -106,7 +106,7 @@ static void main_cpu_reset(void *opaque)
106 } 106 }
107 107
108 static void 108 static void
109 -mips_mipssim_init (int ram_size, int vga_ram_size, 109 +mips_mipssim_init (ram_addr_t ram_size, int vga_ram_size,
110 const char *boot_device, DisplayState *ds, 110 const char *boot_device, DisplayState *ds,
111 const char *kernel_filename, const char *kernel_cmdline, 111 const char *kernel_filename, const char *kernel_cmdline,
112 const char *initrd_filename, const char *cpu_model) 112 const char *initrd_filename, const char *cpu_model)
hw/mips_r4k.c
@@ -147,7 +147,7 @@ static void main_cpu_reset(void *opaque) @@ -147,7 +147,7 @@ static void main_cpu_reset(void *opaque)
147 147
148 static const int sector_len = 32 * 1024; 148 static const int sector_len = 32 * 1024;
149 static 149 static
150 -void mips_r4k_init (int ram_size, int vga_ram_size, 150 +void mips_r4k_init (ram_addr_t ram_size, int vga_ram_size,
151 const char *boot_device, DisplayState *ds, 151 const char *boot_device, DisplayState *ds,
152 const char *kernel_filename, const char *kernel_cmdline, 152 const char *kernel_filename, const char *kernel_cmdline,
153 const char *initrd_filename, const char *cpu_model) 153 const char *initrd_filename, const char *cpu_model)
hw/nseries.c
@@ -891,7 +891,7 @@ static struct arm_boot_info n800_binfo = { @@ -891,7 +891,7 @@ static struct arm_boot_info n800_binfo = {
891 .atag_board = n800_atag_setup, 891 .atag_board = n800_atag_setup,
892 }; 892 };
893 893
894 -static void n800_init(int ram_size, int vga_ram_size, 894 +static void n800_init(ram_addr_t ram_size, int vga_ram_size,
895 const char *boot_device, DisplayState *ds, 895 const char *boot_device, DisplayState *ds,
896 const char *kernel_filename, const char *kernel_cmdline, 896 const char *kernel_filename, const char *kernel_cmdline,
897 const char *initrd_filename, const char *cpu_model) 897 const char *initrd_filename, const char *cpu_model)
hw/palm.c
@@ -192,7 +192,7 @@ static struct arm_boot_info palmte_binfo = { @@ -192,7 +192,7 @@ static struct arm_boot_info palmte_binfo = {
192 .board_id = 0x331, 192 .board_id = 0x331,
193 }; 193 };
194 194
195 -static void palmte_init(int ram_size, int vga_ram_size, 195 +static void palmte_init(ram_addr_t ram_size, int vga_ram_size,
196 const char *boot_device, DisplayState *ds, 196 const char *boot_device, DisplayState *ds,
197 const char *kernel_filename, const char *kernel_cmdline, 197 const char *kernel_filename, const char *kernel_cmdline,
198 const char *initrd_filename, const char *cpu_model) 198 const char *initrd_filename, const char *cpu_model)
@@ -188,7 +188,8 @@ static int boot_device2nibble(char boot_device) @@ -188,7 +188,8 @@ static int boot_device2nibble(char boot_device)
188 } 188 }
189 189
190 /* hd_table must contain 4 block drivers */ 190 /* hd_table must contain 4 block drivers */
191 -static void cmos_init(int ram_size, const char *boot_device, BlockDriverState **hd_table) 191 +static void cmos_init(ram_addr_t ram_size, ram_addr_t above_4g_mem_size,
  192 + const char *boot_device, BlockDriverState **hd_table)
192 { 193 {
193 RTCState *s = rtc_state; 194 RTCState *s = rtc_state;
194 int nbds, bds[3] = { 0, }; 195 int nbds, bds[3] = { 0, };
@@ -211,6 +212,12 @@ static void cmos_init(int ram_size, const char *boot_device, BlockDriverState ** @@ -211,6 +212,12 @@ static void cmos_init(int ram_size, const char *boot_device, BlockDriverState **
211 rtc_set_memory(s, 0x30, val); 212 rtc_set_memory(s, 0x30, val);
212 rtc_set_memory(s, 0x31, val >> 8); 213 rtc_set_memory(s, 0x31, val >> 8);
213 214
  215 + if (above_4g_mem_size) {
  216 + rtc_set_memory(s, 0x5b, (unsigned int)above_4g_mem_size >> 16);
  217 + rtc_set_memory(s, 0x5c, (unsigned int)above_4g_mem_size >> 24);
  218 + rtc_set_memory(s, 0x5d, (uint64_t)above_4g_mem_size >> 32);
  219 + }
  220 +
214 if (ram_size > (16 * 1024 * 1024)) 221 if (ram_size > (16 * 1024 * 1024))
215 val = (ram_size / 65536) - ((16 * 1024 * 1024) / 65536); 222 val = (ram_size / 65536) - ((16 * 1024 * 1024) / 65536);
216 else 223 else
@@ -676,7 +683,7 @@ static void pc_init_ne2k_isa(NICInfo *nd, qemu_irq *pic) @@ -676,7 +683,7 @@ static void pc_init_ne2k_isa(NICInfo *nd, qemu_irq *pic)
676 } 683 }
677 684
678 /* PC hardware initialisation */ 685 /* PC hardware initialisation */
679 -static void pc_init1(int ram_size, int vga_ram_size, 686 +static void pc_init1(ram_addr_t ram_size, int vga_ram_size,
680 const char *boot_device, DisplayState *ds, 687 const char *boot_device, DisplayState *ds,
681 const char *kernel_filename, const char *kernel_cmdline, 688 const char *kernel_filename, const char *kernel_cmdline,
682 const char *initrd_filename, 689 const char *initrd_filename,
@@ -685,6 +692,7 @@ static void pc_init1(int ram_size, int vga_ram_size, @@ -685,6 +692,7 @@ static void pc_init1(int ram_size, int vga_ram_size,
685 char buf[1024]; 692 char buf[1024];
686 int ret, linux_boot, i; 693 int ret, linux_boot, i;
687 ram_addr_t ram_addr, vga_ram_addr, bios_offset, vga_bios_offset; 694 ram_addr_t ram_addr, vga_ram_addr, bios_offset, vga_bios_offset;
  695 + ram_addr_t below_4g_mem_size, above_4g_mem_size = 0;
688 int bios_size, isa_bios_size, vga_bios_size; 696 int bios_size, isa_bios_size, vga_bios_size;
689 PCIBus *pci_bus; 697 PCIBus *pci_bus;
690 int piix3_devfn = -1; 698 int piix3_devfn = -1;
@@ -696,6 +704,13 @@ static void pc_init1(int ram_size, int vga_ram_size, @@ -696,6 +704,13 @@ static void pc_init1(int ram_size, int vga_ram_size,
696 BlockDriverState *hd[MAX_IDE_BUS * MAX_IDE_DEVS]; 704 BlockDriverState *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
697 BlockDriverState *fd[MAX_FD]; 705 BlockDriverState *fd[MAX_FD];
698 706
  707 + if (ram_size >= 0xe0000000 ) {
  708 + above_4g_mem_size = ram_size - 0xe0000000;
  709 + below_4g_mem_size = 0xe0000000;
  710 + } else {
  711 + below_4g_mem_size = ram_size;
  712 + }
  713 +
699 linux_boot = (kernel_filename != NULL); 714 linux_boot = (kernel_filename != NULL);
700 715
701 /* init CPUs */ 716 /* init CPUs */
@@ -730,7 +745,13 @@ static void pc_init1(int ram_size, int vga_ram_size, @@ -730,7 +745,13 @@ static void pc_init1(int ram_size, int vga_ram_size,
730 745
731 /* allocate RAM */ 746 /* allocate RAM */
732 ram_addr = qemu_ram_alloc(ram_size); 747 ram_addr = qemu_ram_alloc(ram_size);
733 - cpu_register_physical_memory(0, ram_size, ram_addr); 748 + cpu_register_physical_memory(0, below_4g_mem_size, ram_addr);
  749 +
  750 + /* above 4giga memory allocation */
  751 + if (above_4g_mem_size > 0) {
  752 + cpu_register_physical_memory(0x100000000ULL, above_4g_mem_size,
  753 + ram_addr + below_4g_mem_size);
  754 + }
734 755
735 /* allocate VGA RAM */ 756 /* allocate VGA RAM */
736 vga_ram_addr = qemu_ram_alloc(vga_ram_size); 757 vga_ram_addr = qemu_ram_alloc(vga_ram_size);
@@ -950,7 +971,7 @@ static void pc_init1(int ram_size, int vga_ram_size, @@ -950,7 +971,7 @@ static void pc_init1(int ram_size, int vga_ram_size,
950 } 971 }
951 floppy_controller = fdctrl_init(i8259[6], 2, 0, 0x3f0, fd); 972 floppy_controller = fdctrl_init(i8259[6], 2, 0, 0x3f0, fd);
952 973
953 - cmos_init(ram_size, boot_device, hd); 974 + cmos_init(below_4g_mem_size, above_4g_mem_size, boot_device, hd);
954 975
955 if (pci_enabled && usb_enabled) { 976 if (pci_enabled && usb_enabled) {
956 usb_uhci_piix3_init(pci_bus, piix3_devfn + 2); 977 usb_uhci_piix3_init(pci_bus, piix3_devfn + 2);
@@ -990,7 +1011,7 @@ static void pc_init1(int ram_size, int vga_ram_size, @@ -990,7 +1011,7 @@ static void pc_init1(int ram_size, int vga_ram_size,
990 } 1011 }
991 } 1012 }
992 1013
993 -static void pc_init_pci(int ram_size, int vga_ram_size, 1014 +static void pc_init_pci(ram_addr_t ram_size, int vga_ram_size,
994 const char *boot_device, DisplayState *ds, 1015 const char *boot_device, DisplayState *ds,
995 const char *kernel_filename, 1016 const char *kernel_filename,
996 const char *kernel_cmdline, 1017 const char *kernel_cmdline,
@@ -1002,7 +1023,7 @@ static void pc_init_pci(int ram_size, int vga_ram_size, @@ -1002,7 +1023,7 @@ static void pc_init_pci(int ram_size, int vga_ram_size,
1002 initrd_filename, 1, cpu_model); 1023 initrd_filename, 1, cpu_model);
1003 } 1024 }
1004 1025
1005 -static void pc_init_isa(int ram_size, int vga_ram_size, 1026 +static void pc_init_isa(ram_addr_t ram_size, int vga_ram_size,
1006 const char *boot_device, DisplayState *ds, 1027 const char *boot_device, DisplayState *ds,
1007 const char *kernel_filename, 1028 const char *kernel_filename,
1008 const char *kernel_cmdline, 1029 const char *kernel_cmdline,
hw/piix_pci.c
@@ -55,7 +55,7 @@ static int pci_slot_get_pirq(PCIDevice *pci_dev, int irq_num) @@ -55,7 +55,7 @@ static int pci_slot_get_pirq(PCIDevice *pci_dev, int irq_num)
55 return (irq_num + slot_addend) & 3; 55 return (irq_num + slot_addend) & 3;
56 } 56 }
57 57
58 -static uint32_t isa_page_descs[384 / 4]; 58 +static target_phys_addr_t isa_page_descs[384 / 4];
59 static uint8_t smm_enabled; 59 static uint8_t smm_enabled;
60 static int pci_irq_levels[4]; 60 static int pci_irq_levels[4];
61 61
hw/ppc405_boards.c
@@ -177,7 +177,7 @@ static void ref405ep_fpga_init (uint32_t base) @@ -177,7 +177,7 @@ static void ref405ep_fpga_init (uint32_t base)
177 } 177 }
178 } 178 }
179 179
180 -static void ref405ep_init (int ram_size, int vga_ram_size, 180 +static void ref405ep_init (ram_addr_t ram_size, int vga_ram_size,
181 const char *boot_device, DisplayState *ds, 181 const char *boot_device, DisplayState *ds,
182 const char *kernel_filename, 182 const char *kernel_filename,
183 const char *kernel_cmdline, 183 const char *kernel_cmdline,
@@ -504,7 +504,7 @@ static void taihu_cpld_init (uint32_t base) @@ -504,7 +504,7 @@ static void taihu_cpld_init (uint32_t base)
504 } 504 }
505 } 505 }
506 506
507 -static void taihu_405ep_init(int ram_size, int vga_ram_size, 507 +static void taihu_405ep_init(ram_addr_t ram_size, int vga_ram_size,
508 const char *boot_device, DisplayState *ds, 508 const char *boot_device, DisplayState *ds,
509 const char *kernel_filename, 509 const char *kernel_filename,
510 const char *kernel_cmdline, 510 const char *kernel_cmdline,
hw/ppc_chrp.c
@@ -57,7 +57,7 @@ static CPUReadMemoryFunc *unin_read[] = { @@ -57,7 +57,7 @@ static CPUReadMemoryFunc *unin_read[] = {
57 }; 57 };
58 58
59 /* PowerPC Mac99 hardware initialisation */ 59 /* PowerPC Mac99 hardware initialisation */
60 -static void ppc_core99_init (int ram_size, int vga_ram_size, 60 +static void ppc_core99_init (ram_addr_t ram_size, int vga_ram_size,
61 const char *boot_device, DisplayState *ds, 61 const char *boot_device, DisplayState *ds,
62 const char *kernel_filename, 62 const char *kernel_filename,
63 const char *kernel_cmdline, 63 const char *kernel_cmdline,
hw/ppc_oldworld.c
@@ -103,7 +103,7 @@ static int vga_osi_call (CPUState *env) @@ -103,7 +103,7 @@ static int vga_osi_call (CPUState *env)
103 return 1; /* osi_call handled */ 103 return 1; /* osi_call handled */
104 } 104 }
105 105
106 -static void ppc_heathrow_init (int ram_size, int vga_ram_size, 106 +static void ppc_heathrow_init (ram_addr_t ram_size, int vga_ram_size,
107 const char *boot_device, DisplayState *ds, 107 const char *boot_device, DisplayState *ds,
108 const char *kernel_filename, 108 const char *kernel_filename,
109 const char *kernel_cmdline, 109 const char *kernel_cmdline,
hw/ppc_prep.c
@@ -535,7 +535,7 @@ CPUReadMemoryFunc *PPC_prep_io_read[] = { @@ -535,7 +535,7 @@ CPUReadMemoryFunc *PPC_prep_io_read[] = {
535 #define NVRAM_SIZE 0x2000 535 #define NVRAM_SIZE 0x2000
536 536
537 /* PowerPC PREP hardware initialisation */ 537 /* PowerPC PREP hardware initialisation */
538 -static void ppc_prep_init (int ram_size, int vga_ram_size, 538 +static void ppc_prep_init (ram_addr_t ram_size, int vga_ram_size,
539 const char *boot_device, DisplayState *ds, 539 const char *boot_device, DisplayState *ds,
540 const char *kernel_filename, 540 const char *kernel_filename,
541 const char *kernel_cmdline, 541 const char *kernel_cmdline,
hw/r2d.c
@@ -30,7 +30,7 @@ @@ -30,7 +30,7 @@
30 #define SDRAM_BASE 0x0c000000 /* Physical location of SDRAM: Area 3 */ 30 #define SDRAM_BASE 0x0c000000 /* Physical location of SDRAM: Area 3 */
31 #define SDRAM_SIZE 0x04000000 31 #define SDRAM_SIZE 0x04000000
32 32
33 -static void r2d_init(int ram_size, int vga_ram_size, 33 +static void r2d_init(ram_addr_t ram_size, int vga_ram_size,
34 const char *boot_device, DisplayState * ds, 34 const char *boot_device, DisplayState * ds,
35 const char *kernel_filename, const char *kernel_cmdline, 35 const char *kernel_filename, const char *kernel_cmdline,
36 const char *initrd_filename, const char *cpu_model) 36 const char *initrd_filename, const char *cpu_model)
hw/realview.c
@@ -23,7 +23,7 @@ static struct arm_boot_info realview_binfo = { @@ -23,7 +23,7 @@ static struct arm_boot_info realview_binfo = {
23 .board_id = 0x33b, 23 .board_id = 0x33b,
24 }; 24 };
25 25
26 -static void realview_init(int ram_size, int vga_ram_size, 26 +static void realview_init(ram_addr_t ram_size, int vga_ram_size,
27 const char *boot_device, DisplayState *ds, 27 const char *boot_device, DisplayState *ds,
28 const char *kernel_filename, const char *kernel_cmdline, 28 const char *kernel_filename, const char *kernel_cmdline,
29 const char *initrd_filename, const char *cpu_model) 29 const char *initrd_filename, const char *cpu_model)
hw/shix.c
@@ -65,7 +65,7 @@ void vga_screen_dump(const char *filename) @@ -65,7 +65,7 @@ void vga_screen_dump(const char *filename)
65 /* XXXXX */ 65 /* XXXXX */
66 } 66 }
67 67
68 -static void shix_init(int ram_size, int vga_ram_size, 68 +static void shix_init(ram_addr_t ram_size, int vga_ram_size,
69 const char *boot_device, DisplayState * ds, 69 const char *boot_device, DisplayState * ds,
70 const char *kernel_filename, const char *kernel_cmdline, 70 const char *kernel_filename, const char *kernel_cmdline,
71 const char *initrd_filename, const char *cpu_model) 71 const char *initrd_filename, const char *cpu_model)
hw/spitz.c
@@ -1185,7 +1185,7 @@ static struct arm_boot_info spitz_binfo = { @@ -1185,7 +1185,7 @@ static struct arm_boot_info spitz_binfo = {
1185 .ram_size = 0x04000000, 1185 .ram_size = 0x04000000,
1186 }; 1186 };
1187 1187
1188 -static void spitz_common_init(int ram_size, int vga_ram_size, 1188 +static void spitz_common_init(ram_addr_t ram_size, int vga_ram_size,
1189 DisplayState *ds, const char *kernel_filename, 1189 DisplayState *ds, const char *kernel_filename,
1190 const char *kernel_cmdline, const char *initrd_filename, 1190 const char *kernel_cmdline, const char *initrd_filename,
1191 const char *cpu_model, enum spitz_model_e model, int arm_id) 1191 const char *cpu_model, enum spitz_model_e model, int arm_id)
@@ -1245,7 +1245,7 @@ static void spitz_common_init(int ram_size, int vga_ram_size, @@ -1245,7 +1245,7 @@ static void spitz_common_init(int ram_size, int vga_ram_size,
1245 sl_bootparam_write(SL_PXA_PARAM_BASE - PXA2XX_SDRAM_BASE); 1245 sl_bootparam_write(SL_PXA_PARAM_BASE - PXA2XX_SDRAM_BASE);
1246 } 1246 }
1247 1247
1248 -static void spitz_init(int ram_size, int vga_ram_size, 1248 +static void spitz_init(ram_addr_t ram_size, int vga_ram_size,
1249 const char *boot_device, DisplayState *ds, 1249 const char *boot_device, DisplayState *ds,
1250 const char *kernel_filename, const char *kernel_cmdline, 1250 const char *kernel_filename, const char *kernel_cmdline,
1251 const char *initrd_filename, const char *cpu_model) 1251 const char *initrd_filename, const char *cpu_model)
@@ -1254,7 +1254,7 @@ static void spitz_init(int ram_size, int vga_ram_size, @@ -1254,7 +1254,7 @@ static void spitz_init(int ram_size, int vga_ram_size,
1254 kernel_cmdline, initrd_filename, cpu_model, spitz, 0x2c9); 1254 kernel_cmdline, initrd_filename, cpu_model, spitz, 0x2c9);
1255 } 1255 }
1256 1256
1257 -static void borzoi_init(int ram_size, int vga_ram_size, 1257 +static void borzoi_init(ram_addr_t ram_size, int vga_ram_size,
1258 const char *boot_device, DisplayState *ds, 1258 const char *boot_device, DisplayState *ds,
1259 const char *kernel_filename, const char *kernel_cmdline, 1259 const char *kernel_filename, const char *kernel_cmdline,
1260 const char *initrd_filename, const char *cpu_model) 1260 const char *initrd_filename, const char *cpu_model)
@@ -1263,7 +1263,7 @@ static void borzoi_init(int ram_size, int vga_ram_size, @@ -1263,7 +1263,7 @@ static void borzoi_init(int ram_size, int vga_ram_size,
1263 kernel_cmdline, initrd_filename, cpu_model, borzoi, 0x33f); 1263 kernel_cmdline, initrd_filename, cpu_model, borzoi, 0x33f);
1264 } 1264 }
1265 1265
1266 -static void akita_init(int ram_size, int vga_ram_size, 1266 +static void akita_init(ram_addr_t ram_size, int vga_ram_size,
1267 const char *boot_device, DisplayState *ds, 1267 const char *boot_device, DisplayState *ds,
1268 const char *kernel_filename, const char *kernel_cmdline, 1268 const char *kernel_filename, const char *kernel_cmdline,
1269 const char *initrd_filename, const char *cpu_model) 1269 const char *initrd_filename, const char *cpu_model)
@@ -1272,7 +1272,7 @@ static void akita_init(int ram_size, int vga_ram_size, @@ -1272,7 +1272,7 @@ static void akita_init(int ram_size, int vga_ram_size,
1272 kernel_cmdline, initrd_filename, cpu_model, akita, 0x2e8); 1272 kernel_cmdline, initrd_filename, cpu_model, akita, 0x2e8);
1273 } 1273 }
1274 1274
1275 -static void terrier_init(int ram_size, int vga_ram_size, 1275 +static void terrier_init(ram_addr_t ram_size, int vga_ram_size,
1276 const char *boot_device, DisplayState *ds, 1276 const char *boot_device, DisplayState *ds,
1277 const char *kernel_filename, const char *kernel_cmdline, 1277 const char *kernel_filename, const char *kernel_cmdline,
1278 const char *initrd_filename, const char *cpu_model) 1278 const char *initrd_filename, const char *cpu_model)
hw/stellaris.c
@@ -1169,7 +1169,7 @@ static void stellaris_init(const char *kernel_filename, const char *cpu_model, @@ -1169,7 +1169,7 @@ static void stellaris_init(const char *kernel_filename, const char *cpu_model,
1169 } 1169 }
1170 1170
1171 /* FIXME: Figure out how to generate these from stellaris_boards. */ 1171 /* FIXME: Figure out how to generate these from stellaris_boards. */
1172 -static void lm3s811evb_init(int ram_size, int vga_ram_size, 1172 +static void lm3s811evb_init(ram_addr_t ram_size, int vga_ram_size,
1173 const char *boot_device, DisplayState *ds, 1173 const char *boot_device, DisplayState *ds,
1174 const char *kernel_filename, const char *kernel_cmdline, 1174 const char *kernel_filename, const char *kernel_cmdline,
1175 const char *initrd_filename, const char *cpu_model) 1175 const char *initrd_filename, const char *cpu_model)
@@ -1177,7 +1177,7 @@ static void lm3s811evb_init(int ram_size, int vga_ram_size, @@ -1177,7 +1177,7 @@ static void lm3s811evb_init(int ram_size, int vga_ram_size,
1177 stellaris_init(kernel_filename, cpu_model, ds, &stellaris_boards[0]); 1177 stellaris_init(kernel_filename, cpu_model, ds, &stellaris_boards[0]);
1178 } 1178 }
1179 1179
1180 -static void lm3s6965evb_init(int ram_size, int vga_ram_size, 1180 +static void lm3s6965evb_init(ram_addr_t ram_size, int vga_ram_size,
1181 const char *boot_device, DisplayState *ds, 1181 const char *boot_device, DisplayState *ds,
1182 const char *kernel_filename, const char *kernel_cmdline, 1182 const char *kernel_filename, const char *kernel_cmdline,
1183 const char *initrd_filename, const char *cpu_model) 1183 const char *initrd_filename, const char *cpu_model)
hw/sun4m.c
@@ -1110,7 +1110,7 @@ static const struct hwdef hwdefs[] = { @@ -1110,7 +1110,7 @@ static const struct hwdef hwdefs[] = {
1110 }; 1110 };
1111 1111
1112 /* SPARCstation 5 hardware initialisation */ 1112 /* SPARCstation 5 hardware initialisation */
1113 -static void ss5_init(int RAM_size, int vga_ram_size, 1113 +static void ss5_init(ram_addr_t RAM_size, int vga_ram_size,
1114 const char *boot_device, DisplayState *ds, 1114 const char *boot_device, DisplayState *ds,
1115 const char *kernel_filename, const char *kernel_cmdline, 1115 const char *kernel_filename, const char *kernel_cmdline,
1116 const char *initrd_filename, const char *cpu_model) 1116 const char *initrd_filename, const char *cpu_model)
@@ -1120,7 +1120,7 @@ static void ss5_init(int RAM_size, int vga_ram_size, @@ -1120,7 +1120,7 @@ static void ss5_init(int RAM_size, int vga_ram_size,
1120 } 1120 }
1121 1121
1122 /* SPARCstation 10 hardware initialisation */ 1122 /* SPARCstation 10 hardware initialisation */
1123 -static void ss10_init(int RAM_size, int vga_ram_size, 1123 +static void ss10_init(ram_addr_t RAM_size, int vga_ram_size,
1124 const char *boot_device, DisplayState *ds, 1124 const char *boot_device, DisplayState *ds,
1125 const char *kernel_filename, const char *kernel_cmdline, 1125 const char *kernel_filename, const char *kernel_cmdline,
1126 const char *initrd_filename, const char *cpu_model) 1126 const char *initrd_filename, const char *cpu_model)
@@ -1130,7 +1130,7 @@ static void ss10_init(int RAM_size, int vga_ram_size, @@ -1130,7 +1130,7 @@ static void ss10_init(int RAM_size, int vga_ram_size,
1130 } 1130 }
1131 1131
1132 /* SPARCserver 600MP hardware initialisation */ 1132 /* SPARCserver 600MP hardware initialisation */
1133 -static void ss600mp_init(int RAM_size, int vga_ram_size, 1133 +static void ss600mp_init(ram_addr_t RAM_size, int vga_ram_size,
1134 const char *boot_device, DisplayState *ds, 1134 const char *boot_device, DisplayState *ds,
1135 const char *kernel_filename, const char *kernel_cmdline, 1135 const char *kernel_filename, const char *kernel_cmdline,
1136 const char *initrd_filename, const char *cpu_model) 1136 const char *initrd_filename, const char *cpu_model)
@@ -1140,7 +1140,7 @@ static void ss600mp_init(int RAM_size, int vga_ram_size, @@ -1140,7 +1140,7 @@ static void ss600mp_init(int RAM_size, int vga_ram_size,
1140 } 1140 }
1141 1141
1142 /* SPARCstation 20 hardware initialisation */ 1142 /* SPARCstation 20 hardware initialisation */
1143 -static void ss20_init(int RAM_size, int vga_ram_size, 1143 +static void ss20_init(ram_addr_t RAM_size, int vga_ram_size,
1144 const char *boot_device, DisplayState *ds, 1144 const char *boot_device, DisplayState *ds,
1145 const char *kernel_filename, const char *kernel_cmdline, 1145 const char *kernel_filename, const char *kernel_cmdline,
1146 const char *initrd_filename, const char *cpu_model) 1146 const char *initrd_filename, const char *cpu_model)
@@ -1150,7 +1150,7 @@ static void ss20_init(int RAM_size, int vga_ram_size, @@ -1150,7 +1150,7 @@ static void ss20_init(int RAM_size, int vga_ram_size,
1150 } 1150 }
1151 1151
1152 /* SPARCstation 2 hardware initialisation */ 1152 /* SPARCstation 2 hardware initialisation */
1153 -static void ss2_init(int RAM_size, int vga_ram_size, 1153 +static void ss2_init(ram_addr_t RAM_size, int vga_ram_size,
1154 const char *boot_device, DisplayState *ds, 1154 const char *boot_device, DisplayState *ds,
1155 const char *kernel_filename, const char *kernel_cmdline, 1155 const char *kernel_filename, const char *kernel_cmdline,
1156 const char *initrd_filename, const char *cpu_model) 1156 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, @@ -1480,7 +1480,7 @@ static void sun4d_hw_init(const struct sun4d_hwdef *hwdef, int RAM_size,
1480 } 1480 }
1481 1481
1482 /* SPARCserver 1000 hardware initialisation */ 1482 /* SPARCserver 1000 hardware initialisation */
1483 -static void ss1000_init(int RAM_size, int vga_ram_size, 1483 +static void ss1000_init(ram_addr_t RAM_size, int vga_ram_size,
1484 const char *boot_device, DisplayState *ds, 1484 const char *boot_device, DisplayState *ds,
1485 const char *kernel_filename, const char *kernel_cmdline, 1485 const char *kernel_filename, const char *kernel_cmdline,
1486 const char *initrd_filename, const char *cpu_model) 1486 const char *initrd_filename, const char *cpu_model)
@@ -1490,7 +1490,7 @@ static void ss1000_init(int RAM_size, int vga_ram_size, @@ -1490,7 +1490,7 @@ static void ss1000_init(int RAM_size, int vga_ram_size,
1490 } 1490 }
1491 1491
1492 /* SPARCcenter 2000 hardware initialisation */ 1492 /* SPARCcenter 2000 hardware initialisation */
1493 -static void ss2000_init(int RAM_size, int vga_ram_size, 1493 +static void ss2000_init(ram_addr_t RAM_size, int vga_ram_size,
1494 const char *boot_device, DisplayState *ds, 1494 const char *boot_device, DisplayState *ds,
1495 const char *kernel_filename, const char *kernel_cmdline, 1495 const char *kernel_filename, const char *kernel_cmdline,
1496 const char *initrd_filename, const char *cpu_model) 1496 const char *initrd_filename, const char *cpu_model)
hw/sun4u.c
@@ -227,7 +227,7 @@ static const int parallel_irq[MAX_PARALLEL_PORTS] = { 7, 7, 7 }; @@ -227,7 +227,7 @@ static const int parallel_irq[MAX_PARALLEL_PORTS] = { 7, 7, 7 };
227 static fdctrl_t *floppy_controller; 227 static fdctrl_t *floppy_controller;
228 228
229 /* Sun4u hardware initialisation */ 229 /* Sun4u hardware initialisation */
230 -static void sun4u_init(int ram_size, int vga_ram_size, 230 +static void sun4u_init(ram_addr_t ram_size, int vga_ram_size,
231 const char *boot_devices, DisplayState *ds, 231 const char *boot_devices, DisplayState *ds,
232 const char *kernel_filename, const char *kernel_cmdline, 232 const char *kernel_filename, const char *kernel_cmdline,
233 const char *initrd_filename, const char *cpu_model) 233 const char *initrd_filename, const char *cpu_model)
hw/versatilepb.c
@@ -159,7 +159,7 @@ static qemu_irq *vpb_sic_init(uint32_t base, qemu_irq *parent, int irq) @@ -159,7 +159,7 @@ static qemu_irq *vpb_sic_init(uint32_t base, qemu_irq *parent, int irq)
159 159
160 static struct arm_boot_info versatile_binfo; 160 static struct arm_boot_info versatile_binfo;
161 161
162 -static void versatile_init(int ram_size, int vga_ram_size, 162 +static void versatile_init(ram_addr_t ram_size, int vga_ram_size,
163 const char *boot_device, DisplayState *ds, 163 const char *boot_device, DisplayState *ds,
164 const char *kernel_filename, const char *kernel_cmdline, 164 const char *kernel_filename, const char *kernel_cmdline,
165 const char *initrd_filename, const char *cpu_model, 165 const char *initrd_filename, const char *cpu_model,
@@ -293,7 +293,7 @@ static void versatile_init(int ram_size, int vga_ram_size, @@ -293,7 +293,7 @@ static void versatile_init(int ram_size, int vga_ram_size,
293 arm_load_kernel(env, &versatile_binfo); 293 arm_load_kernel(env, &versatile_binfo);
294 } 294 }
295 295
296 -static void vpb_init(int ram_size, int vga_ram_size, 296 +static void vpb_init(ram_addr_t ram_size, int vga_ram_size,
297 const char *boot_device, DisplayState *ds, 297 const char *boot_device, DisplayState *ds,
298 const char *kernel_filename, const char *kernel_cmdline, 298 const char *kernel_filename, const char *kernel_cmdline,
299 const char *initrd_filename, const char *cpu_model) 299 const char *initrd_filename, const char *cpu_model)
@@ -304,7 +304,7 @@ static void vpb_init(int ram_size, int vga_ram_size, @@ -304,7 +304,7 @@ static void vpb_init(int ram_size, int vga_ram_size,
304 initrd_filename, cpu_model, 0x183); 304 initrd_filename, cpu_model, 0x183);
305 } 305 }
306 306
307 -static void vab_init(int ram_size, int vga_ram_size, 307 +static void vab_init(ram_addr_t ram_size, int vga_ram_size,
308 const char *boot_device, DisplayState *ds, 308 const char *boot_device, DisplayState *ds,
309 const char *kernel_filename, const char *kernel_cmdline, 309 const char *kernel_filename, const char *kernel_cmdline,
310 const char *initrd_filename, const char *cpu_model) 310 const char *initrd_filename, const char *cpu_model)
@@ -98,7 +98,6 @@ static void *kqemu_vmalloc(size_t size) @@ -98,7 +98,6 @@ static void *kqemu_vmalloc(size_t size)
98 int64_t free_space; 98 int64_t free_space;
99 int ram_mb; 99 int ram_mb;
100 100
101 - extern int ram_size;  
102 free_space = (int64_t)stfs.f_bavail * stfs.f_bsize; 101 free_space = (int64_t)stfs.f_bavail * stfs.f_bsize;
103 if ((ram_size + 8192 * 1024) >= free_space) { 102 if ((ram_size + 8192 * 1024) >= free_space) {
104 ram_mb = (ram_size / (1024 * 1024)); 103 ram_mb = (ram_size / (1024 * 1024));
qemu-doc.texi
@@ -322,7 +322,9 @@ Disable boot signature checking for floppy disks in Bochs BIOS. It may @@ -322,7 +322,9 @@ Disable boot signature checking for floppy disks in Bochs BIOS. It may
322 be needed to boot from old floppy disks. 322 be needed to boot from old floppy disks.
323 323
324 @item -m @var{megs} 324 @item -m @var{megs}
325 -Set virtual RAM size to @var{megs} megabytes. Default is 128 MiB. 325 +Set virtual RAM size to @var{megs} megabytes. Default is 128 MiB. Optionally,
  326 +a suffix of ``M'' or ``G'' can be used to signify a value in megabytes or
  327 +gigabytes respectively.
326 328
327 @item -smp @var{n} 329 @item -smp @var{n}
328 Simulate an SMP system with @var{n} CPUs. On the PC target, up to 255 330 Simulate an SMP system with @var{n} CPUs. On the PC target, up to 255
sysemu.h
@@ -73,7 +73,6 @@ int tap_win32_init(VLANState *vlan, const char *ifname); @@ -73,7 +73,6 @@ int tap_win32_init(VLANState *vlan, const char *ifname);
73 /* SLIRP */ 73 /* SLIRP */
74 void do_info_slirp(void); 74 void do_info_slirp(void);
75 75
76 -extern int ram_size;  
77 extern int bios_size; 76 extern int bios_size;
78 extern int cirrus_vga_enabled; 77 extern int cirrus_vga_enabled;
79 extern int vmsvga_enabled; 78 extern int vmsvga_enabled;
@@ -142,8 +142,6 @@ int inet_aton(const char *cp, struct in_addr *ia); @@ -142,8 +142,6 @@ int inet_aton(const char *cp, struct in_addr *ia);
142 //#define DEBUG_UNUSED_IOPORT 142 //#define DEBUG_UNUSED_IOPORT
143 //#define DEBUG_IOPORT 143 //#define DEBUG_IOPORT
144 144
145 -#define PHYS_RAM_MAX_SIZE (2047 * 1024 * 1024)  
146 -  
147 #ifdef TARGET_PPC 145 #ifdef TARGET_PPC
148 #define DEFAULT_RAM_SIZE 144 146 #define DEFAULT_RAM_SIZE 144
149 #else 147 #else
@@ -175,7 +173,7 @@ int nographic; @@ -175,7 +173,7 @@ int nographic;
175 int curses; 173 int curses;
176 const char* keyboard_layout = NULL; 174 const char* keyboard_layout = NULL;
177 int64_t ticks_per_sec; 175 int64_t ticks_per_sec;
178 -int ram_size; 176 +ram_addr_t ram_size;
179 int pit_min_timer_count = 0; 177 int pit_min_timer_count = 0;
180 int nb_nics; 178 int nb_nics;
181 NICInfo nd_table[MAX_NICS]; 179 NICInfo nd_table[MAX_NICS];
@@ -6877,7 +6875,8 @@ static int ram_get_page(QEMUFile *f, uint8_t *buf, int len) @@ -6877,7 +6875,8 @@ static int ram_get_page(QEMUFile *f, uint8_t *buf, int len)
6877 6875
6878 static int ram_load_v1(QEMUFile *f, void *opaque) 6876 static int ram_load_v1(QEMUFile *f, void *opaque)
6879 { 6877 {
6880 - int i, ret; 6878 + int ret;
  6879 + ram_addr_t i;
6881 6880
6882 if (qemu_get_be32(f) != phys_ram_size) 6881 if (qemu_get_be32(f) != phys_ram_size)
6883 return -EINVAL; 6882 return -EINVAL;
@@ -7013,7 +7012,7 @@ static void ram_decompress_close(RamDecompressState *s) @@ -7013,7 +7012,7 @@ static void ram_decompress_close(RamDecompressState *s)
7013 7012
7014 static void ram_save(QEMUFile *f, void *opaque) 7013 static void ram_save(QEMUFile *f, void *opaque)
7015 { 7014 {
7016 - int i; 7015 + ram_addr_t i;
7017 RamCompressState s1, *s = &s1; 7016 RamCompressState s1, *s = &s1;
7018 uint8_t buf[10]; 7017 uint8_t buf[10];
7019 7018
@@ -7058,7 +7057,7 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id) @@ -7058,7 +7057,7 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id)
7058 { 7057 {
7059 RamDecompressState s1, *s = &s1; 7058 RamDecompressState s1, *s = &s1;
7060 uint8_t buf[10]; 7059 uint8_t buf[10];
7061 - int i; 7060 + ram_addr_t i;
7062 7061
7063 if (version_id == 1) 7062 if (version_id == 1)
7064 return ram_load_v1(f, opaque); 7063 return ram_load_v1(f, opaque);
@@ -7075,7 +7074,7 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id) @@ -7075,7 +7074,7 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id)
7075 } 7074 }
7076 if (buf[0] == 0) { 7075 if (buf[0] == 0) {
7077 if (ram_decompress_buf(s, phys_ram_base + i, BDRV_HASH_BLOCK_SIZE) < 0) { 7076 if (ram_decompress_buf(s, phys_ram_base + i, BDRV_HASH_BLOCK_SIZE) < 0) {
7078 - fprintf(stderr, "Error while reading ram block address=0x%08x", i); 7077 + fprintf(stderr, "Error while reading ram block address=0x%08" PRIx64, (uint64_t)i);
7079 goto error; 7078 goto error;
7080 } 7079 }
7081 } else 7080 } else
@@ -8556,16 +8555,39 @@ int main(int argc, char **argv) @@ -8556,16 +8555,39 @@ int main(int argc, char **argv)
8556 case QEMU_OPTION_h: 8555 case QEMU_OPTION_h:
8557 help(0); 8556 help(0);
8558 break; 8557 break;
8559 - case QEMU_OPTION_m:  
8560 - ram_size = atoi(optarg) * 1024 * 1024;  
8561 - if (ram_size <= 0)  
8562 - help(1);  
8563 - if (ram_size > PHYS_RAM_MAX_SIZE) {  
8564 - fprintf(stderr, "qemu: at most %d MB RAM can be simulated\n",  
8565 - PHYS_RAM_MAX_SIZE / (1024 * 1024)); 8558 + case QEMU_OPTION_m: {
  8559 + uint64_t value;
  8560 + char *ptr;
  8561 +
  8562 + value = strtoul(optarg, &ptr, 10);
  8563 + switch (*ptr) {
  8564 + case 0: case 'M': case 'm':
  8565 + value <<= 20;
  8566 + break;
  8567 + case 'G': case 'g':
  8568 + value <<= 30;
  8569 + break;
  8570 + default:
  8571 + fprintf(stderr, "qemu: invalid ram size: %s\n", optarg);
8566 exit(1); 8572 exit(1);
8567 } 8573 }
  8574 +
  8575 + /* On 32-bit hosts, QEMU is limited by virtual address space */
  8576 + if (value > (2047 << 20)
  8577 +#ifndef USE_KQEMU
  8578 + && HOST_LONG_BITS == 32
  8579 +#endif
  8580 + ) {
  8581 + fprintf(stderr, "qemu: at most 2047 MB RAM can be simulated\n");
  8582 + exit(1);
  8583 + }
  8584 + if (value != (uint64_t)(ram_addr_t)value) {
  8585 + fprintf(stderr, "qemu: ram size too large\n");
  8586 + exit(1);
  8587 + }
  8588 + ram_size = value;
8568 break; 8589 break;
  8590 + }
8569 case QEMU_OPTION_d: 8591 case QEMU_OPTION_d:
8570 { 8592 {
8571 int mask; 8593 int mask;