Skip to content

Commit

Permalink
Use correct types to enable > 2G support, based on a patch from
Browse files Browse the repository at this point in the history
Anthony Liguori.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4265 c046a42c-6fe2-441c-8c8c-71466251a162
  • Loading branch information
aurel32 committed Apr 27, 2008
1 parent c1d00dc commit 00f82b8
Show file tree
Hide file tree
Showing 38 changed files with 177 additions and 102 deletions.
18 changes: 13 additions & 5 deletions cpu-all.h
Original file line number Diff line number Diff line change
Expand Up @@ -806,12 +806,20 @@ int cpu_inw(CPUState *env, int addr);
int cpu_inl(CPUState *env, int addr);
#endif

/* address in the RAM (different from a physical address) */
#ifdef USE_KQEMU
typedef uint32_t ram_addr_t;
#else
typedef unsigned long ram_addr_t;
#endif

/* memory API */

extern int phys_ram_size;
extern ram_addr_t 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)
Expand All @@ -833,10 +841,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,
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);
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);
void qemu_ram_free(ram_addr_t addr);
int cpu_register_io_memory(int io_index,
CPUReadMemoryFunc **mem_read,
Expand Down
3 changes: 0 additions & 3 deletions cpu-defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,6 @@ 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 */
Expand Down
2 changes: 1 addition & 1 deletion exec-all.h
Original file line number Diff line number Diff line change
Expand Up @@ -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_ulong start, target_ulong end,
void tb_invalidate_phys_page_range(target_phys_addr_t start, target_phys_addr_t 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);
Expand Down
48 changes: 26 additions & 22 deletions exec.c
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,10 @@
#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 42
#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
Expand All @@ -88,7 +92,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;

int phys_ram_size;
ram_addr_t phys_ram_size;
int phys_ram_fd;
uint8_t *phys_ram_base;
uint8_t *phys_ram_dirty;
Expand All @@ -113,7 +117,7 @@ typedef struct PageDesc {

typedef struct PhysPageDesc {
/* offset in host memory of the page + io_index in the low 12 bits */
uint32_t phys_offset;
ram_addr_t phys_offset;
} PhysPageDesc;

#define L2_BITS 10
Expand Down Expand Up @@ -234,7 +238,7 @@ static void page_init(void)
#endif
}

static inline PageDesc *page_find_alloc(unsigned int index)
static inline PageDesc *page_find_alloc(target_ulong index)
{
PageDesc **lp, *p;

Expand All @@ -249,7 +253,7 @@ static inline PageDesc *page_find_alloc(unsigned int index)
return p + (index & (L2_SIZE - 1));
}

static inline PageDesc *page_find(unsigned int index)
static inline PageDesc *page_find(target_ulong index)
{
PageDesc *p;

Expand Down Expand Up @@ -511,12 +515,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, unsigned int page_addr)
static inline void tb_phys_invalidate(TranslationBlock *tb, target_ulong page_addr)
{
CPUState *env;
PageDesc *p;
unsigned int h, n1;
target_ulong phys_pc;
target_phys_addr_t phys_pc;
TranslationBlock *tb1, *tb2;

/* remove the TB from the hash list */
Expand Down Expand Up @@ -667,7 +671,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_ulong start, target_ulong end,
void tb_invalidate_phys_page_range(target_phys_addr_t start, target_phys_addr_t end,
int is_cpu_write_access)
{
int n, current_tb_modified, current_tb_not_found, current_flags;
Expand Down Expand Up @@ -780,7 +784,7 @@ void tb_invalidate_phys_page_range(target_ulong start, target_ulong end,
}

/* len must be <= 8 and start must be a multiple of len */
static inline void tb_invalidate_phys_page_fast(target_ulong start, int len)
static inline void tb_invalidate_phys_page_fast(target_phys_addr_t start, int len)
{
PageDesc *p;
int offset, b;
Expand Down Expand Up @@ -809,7 +813,7 @@ static inline void tb_invalidate_phys_page_fast(target_ulong start, int len)
}

#if !defined(CONFIG_SOFTMMU)
static void tb_invalidate_phys_page(target_ulong addr,
static void tb_invalidate_phys_page(target_phys_addr_t addr,
unsigned long pc, void *puc)
{
int n, current_flags, current_tb_modified;
Expand Down Expand Up @@ -1985,9 +1989,9 @@ static inline void tlb_set_dirty(CPUState *env,
#endif /* defined(CONFIG_USER_ONLY) */

static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
int memory);
static void *subpage_init (target_phys_addr_t base, uint32_t *phys,
int orig_memory);
ram_addr_t memory);
static void *subpage_init (target_phys_addr_t base, ram_addr_t *phys,
ram_addr_t orig_memory);
#define CHECK_SUBPAGE(addr, start_addr, start_addr2, end_addr, end_addr2, \
need_subpage) \
do { \
Expand All @@ -2012,21 +2016,21 @@ static void *subpage_init (target_phys_addr_t base, uint32_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,
unsigned long size,
unsigned long phys_offset)
ram_addr_t size,
ram_addr_t phys_offset)
{
target_phys_addr_t addr, end_addr;
PhysPageDesc *p;
CPUState *env;
unsigned long orig_size = size;
ram_addr_t orig_size = size;
void *subpage;

size = (size + TARGET_PAGE_SIZE - 1) & TARGET_PAGE_MASK;
end_addr = start_addr + (target_phys_addr_t)size;
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) {
unsigned long orig_memory = p->phys_offset;
ram_addr_t orig_memory = p->phys_offset;
target_phys_addr_t start_addr2, end_addr2;
int need_subpage = 0;

Expand Down Expand Up @@ -2079,7 +2083,7 @@ void cpu_register_physical_memory(target_phys_addr_t start_addr,
}

/* XXX: temporary until new memory mapping API */
uint32_t cpu_get_physical_page_desc(target_phys_addr_t addr)
ram_addr_t cpu_get_physical_page_desc(target_phys_addr_t addr)
{
PhysPageDesc *p;

Expand All @@ -2090,11 +2094,11 @@ uint32_t cpu_get_physical_page_desc(target_phys_addr_t addr)
}

/* XXX: better than nothing */
ram_addr_t qemu_ram_alloc(unsigned int size)
ram_addr_t qemu_ram_alloc(ram_addr_t size)
{
ram_addr_t addr;
if ((phys_ram_alloc_offset + size) > phys_ram_size) {
fprintf(stderr, "Not enough memory (requested_size = %u, max memory = %d)\n",
fprintf(stderr, "Not enough memory (requested_size = %lu, max memory = %ld)\n",
size, phys_ram_size);
abort();
}
Expand Down Expand Up @@ -2408,7 +2412,7 @@ static CPUWriteMemoryFunc *subpage_write[] = {
};

static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
int memory)
ram_addr_t memory)
{
int idx, eidx;
unsigned int i;
Expand Down Expand Up @@ -2438,8 +2442,8 @@ static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
return 0;
}

static void *subpage_init (target_phys_addr_t base, uint32_t *phys,
int orig_memory)
static void *subpage_init (target_phys_addr_t base, ram_addr_t *phys,
ram_addr_t orig_memory)
{
subpage_t *mmio;
int subpage_memory;
Expand Down
2 changes: 1 addition & 1 deletion hw/an5206.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ void DMA_run (void)

/* Board init. */

static void an5206_init(int ram_size, int vga_ram_size,
static void an5206_init(ram_addr_t 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)
Expand Down
2 changes: 1 addition & 1 deletion hw/boards.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#ifndef HW_BOARDS_H
#define HW_BOARDS_H

typedef void QEMUMachineInitFunc(int ram_size, int vga_ram_size,
typedef void QEMUMachineInitFunc(ram_addr_t ram_size, int vga_ram_size,
const char *boot_device, DisplayState *ds,
const char *kernel_filename,
const char *kernel_cmdline,
Expand Down
2 changes: 1 addition & 1 deletion hw/dummy_m68k.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

/* Board init. */

static void dummy_m68k_init(int ram_size, int vga_ram_size,
static void dummy_m68k_init(ram_addr_t 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)
Expand Down
2 changes: 1 addition & 1 deletion hw/etraxfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 (int ram_size, int vga_ram_size,
void bareetraxfs_init (ram_addr_t 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)
Expand Down
4 changes: 2 additions & 2 deletions hw/gumstix.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@

static const int sector_len = 128 * 1024;

static void connex_init(int ram_size, int vga_ram_size,
static void connex_init(ram_addr_t 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)
Expand Down Expand Up @@ -81,7 +81,7 @@ static void connex_init(int ram_size, int vga_ram_size,
pxa2xx_gpio_in_get(cpu->gpio)[36]);
}

static void verdex_init(int ram_size, int vga_ram_size,
static void verdex_init(ram_addr_t 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)
Expand Down
2 changes: 1 addition & 1 deletion hw/integratorcp.c
Original file line number Diff line number Diff line change
Expand Up @@ -474,7 +474,7 @@ static struct arm_boot_info integrator_binfo = {
.board_id = 0x113,
};

static void integratorcp_init(int ram_size, int vga_ram_size,
static void integratorcp_init(ram_addr_t 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)
Expand Down
4 changes: 2 additions & 2 deletions hw/mainstone.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ static struct arm_boot_info mainstone_binfo = {
.ram_size = 0x04000000,
};

static void mainstone_common_init(int ram_size, int vga_ram_size,
static void mainstone_common_init(ram_addr_t 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)
Expand Down Expand Up @@ -134,7 +134,7 @@ static void mainstone_common_init(int ram_size, int vga_ram_size,
arm_load_kernel(cpu->env, &mainstone_binfo);
}

static void mainstone_init(int ram_size, int vga_ram_size,
static void mainstone_init(ram_addr_t 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)
Expand Down
2 changes: 1 addition & 1 deletion hw/mcf5208.c
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ static void mcf5208_sys_init(qemu_irq *pic)
}
}

static void mcf5208evb_init(int ram_size, int vga_ram_size,
static void mcf5208evb_init(ram_addr_t 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)
Expand Down
6 changes: 3 additions & 3 deletions hw/mips_jazz.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 (int ram_size, int vga_ram_size,
void mips_jazz_init (ram_addr_t ram_size, int vga_ram_size,
DisplayState *ds, const char *cpu_model,
enum jazz_model_e jazz_model)
{
Expand Down Expand Up @@ -256,7 +256,7 @@ void mips_jazz_init (int ram_size, int vga_ram_size,
}

static
void mips_magnum_init (int ram_size, int vga_ram_size,
void mips_magnum_init (ram_addr_t 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)
Expand All @@ -265,7 +265,7 @@ void mips_magnum_init (int ram_size, int vga_ram_size,
}

static
void mips_pica61_init (int ram_size, int vga_ram_size,
void mips_pica61_init (ram_addr_t 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)
Expand Down
2 changes: 1 addition & 1 deletion hw/mips_malta.c
Original file line number Diff line number Diff line change
Expand Up @@ -763,7 +763,7 @@ static void main_cpu_reset(void *opaque)
}

static
void mips_malta_init (int ram_size, int vga_ram_size,
void mips_malta_init (ram_addr_t 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)
Expand Down
2 changes: 1 addition & 1 deletion hw/mips_mipssim.c
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ static void main_cpu_reset(void *opaque)
}

static void
mips_mipssim_init (int ram_size, int vga_ram_size,
mips_mipssim_init (ram_addr_t 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)
Expand Down
2 changes: 1 addition & 1 deletion hw/mips_r4k.c
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ static void main_cpu_reset(void *opaque)

static const int sector_len = 32 * 1024;
static
void mips_r4k_init (int ram_size, int vga_ram_size,
void mips_r4k_init (ram_addr_t 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)
Expand Down
2 changes: 1 addition & 1 deletion hw/nseries.c
Original file line number Diff line number Diff line change
Expand Up @@ -891,7 +891,7 @@ static struct arm_boot_info n800_binfo = {
.atag_board = n800_atag_setup,
};

static void n800_init(int ram_size, int vga_ram_size,
static void n800_init(ram_addr_t 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)
Expand Down
2 changes: 1 addition & 1 deletion hw/palm.c
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ static struct arm_boot_info palmte_binfo = {
.board_id = 0x331,
};

static void palmte_init(int ram_size, int vga_ram_size,
static void palmte_init(ram_addr_t 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)
Expand Down
Loading

0 comments on commit 00f82b8

Please sign in to comment.