Revision 00f82b8a exec.c

b/exec.c
74 74
#define TARGET_VIRT_ADDR_SPACE_BITS 42
75 75
#elif defined(TARGET_PPC64)
76 76
#define TARGET_PHYS_ADDR_SPACE_BITS 42
77
#elif defined(TARGET_X86_64) && !defined(USE_KQEMU)
78
#define TARGET_PHYS_ADDR_SPACE_BITS 42
79
#elif defined(TARGET_I386) && !defined(USE_KQEMU)
80
#define TARGET_PHYS_ADDR_SPACE_BITS 36
77 81
#else
78 82
/* Note: for compatibility with kqemu, we use 32 bits for x86_64 */
79 83
#define TARGET_PHYS_ADDR_SPACE_BITS 32
......
88 92
uint8_t code_gen_buffer[CODE_GEN_BUFFER_SIZE] __attribute__((aligned (32)));
89 93
uint8_t *code_gen_ptr;
90 94

  
91
int phys_ram_size;
95
ram_addr_t phys_ram_size;
92 96
int phys_ram_fd;
93 97
uint8_t *phys_ram_base;
94 98
uint8_t *phys_ram_dirty;
......
113 117

  
114 118
typedef struct PhysPageDesc {
115 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 121
} PhysPageDesc;
118 122

  
119 123
#define L2_BITS 10
......
234 238
#endif
235 239
}
236 240

  
237
static inline PageDesc *page_find_alloc(unsigned int index)
241
static inline PageDesc *page_find_alloc(target_ulong index)
238 242
{
239 243
    PageDesc **lp, *p;
240 244

  
......
249 253
    return p + (index & (L2_SIZE - 1));
250 254
}
251 255

  
252
static inline PageDesc *page_find(unsigned int index)
256
static inline PageDesc *page_find(target_ulong index)
253 257
{
254 258
    PageDesc *p;
255 259

  
......
511 515
    tb_set_jmp_target(tb, n, (unsigned long)(tb->tc_ptr + tb->tb_next_offset[n]));
512 516
}
513 517

  
514
static inline void tb_phys_invalidate(TranslationBlock *tb, unsigned int page_addr)
518
static inline void tb_phys_invalidate(TranslationBlock *tb, target_ulong page_addr)
515 519
{
516 520
    CPUState *env;
517 521
    PageDesc *p;
518 522
    unsigned int h, n1;
519
    target_ulong phys_pc;
523
    target_phys_addr_t phys_pc;
520 524
    TranslationBlock *tb1, *tb2;
521 525

  
522 526
    /* remove the TB from the hash list */
......
667 671
   the same physical page. 'is_cpu_write_access' should be true if called
668 672
   from a real cpu write access: the virtual CPU will exit the current
669 673
   TB if code is modified inside this TB. */
670
void tb_invalidate_phys_page_range(target_ulong start, target_ulong end,
674
void tb_invalidate_phys_page_range(target_phys_addr_t start, target_phys_addr_t end,
671 675
                                   int is_cpu_write_access)
672 676
{
673 677
    int n, current_tb_modified, current_tb_not_found, current_flags;
......
780 784
}
781 785

  
782 786
/* 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)
787
static inline void tb_invalidate_phys_page_fast(target_phys_addr_t start, int len)
784 788
{
785 789
    PageDesc *p;
786 790
    int offset, b;
......
809 813
}
810 814

  
811 815
#if !defined(CONFIG_SOFTMMU)
812
static void tb_invalidate_phys_page(target_ulong addr,
816
static void tb_invalidate_phys_page(target_phys_addr_t addr,
813 817
                                    unsigned long pc, void *puc)
814 818
{
815 819
    int n, current_flags, current_tb_modified;
......
1985 1989
#endif /* defined(CONFIG_USER_ONLY) */
1986 1990

  
1987 1991
static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
1988
                             int memory);
1989
static void *subpage_init (target_phys_addr_t base, uint32_t *phys,
1990
                           int orig_memory);
1992
                             ram_addr_t memory);
1993
static void *subpage_init (target_phys_addr_t base, ram_addr_t *phys,
1994
                           ram_addr_t orig_memory);
1991 1995
#define CHECK_SUBPAGE(addr, start_addr, start_addr2, end_addr, end_addr2, \
1992 1996
                      need_subpage)                                     \
1993 1997
    do {                                                                \
......
2012 2016
   page size. If (phys_offset & ~TARGET_PAGE_MASK) != 0, then it is an
2013 2017
   io memory page */
2014 2018
void cpu_register_physical_memory(target_phys_addr_t start_addr,
2015
                                  unsigned long size,
2016
                                  unsigned long phys_offset)
2019
                                  ram_addr_t size,
2020
                                  ram_addr_t phys_offset)
2017 2021
{
2018 2022
    target_phys_addr_t addr, end_addr;
2019 2023
    PhysPageDesc *p;
2020 2024
    CPUState *env;
2021
    unsigned long orig_size = size;
2025
    ram_addr_t orig_size = size;
2022 2026
    void *subpage;
2023 2027

  
2024 2028
    size = (size + TARGET_PAGE_SIZE - 1) & TARGET_PAGE_MASK;
......
2026 2030
    for(addr = start_addr; addr != end_addr; addr += TARGET_PAGE_SIZE) {
2027 2031
        p = phys_page_find(addr >> TARGET_PAGE_BITS);
2028 2032
        if (p && p->phys_offset != IO_MEM_UNASSIGNED) {
2029
            unsigned long orig_memory = p->phys_offset;
2033
            ram_addr_t orig_memory = p->phys_offset;
2030 2034
            target_phys_addr_t start_addr2, end_addr2;
2031 2035
            int need_subpage = 0;
2032 2036

  
......
2079 2083
}
2080 2084

  
2081 2085
/* XXX: temporary until new memory mapping API */
2082
uint32_t cpu_get_physical_page_desc(target_phys_addr_t addr)
2086
ram_addr_t cpu_get_physical_page_desc(target_phys_addr_t addr)
2083 2087
{
2084 2088
    PhysPageDesc *p;
2085 2089

  
......
2090 2094
}
2091 2095

  
2092 2096
/* XXX: better than nothing */
2093
ram_addr_t qemu_ram_alloc(unsigned int size)
2097
ram_addr_t qemu_ram_alloc(ram_addr_t size)
2094 2098
{
2095 2099
    ram_addr_t addr;
2096 2100
    if ((phys_ram_alloc_offset + size) > phys_ram_size) {
2097
        fprintf(stderr, "Not enough memory (requested_size = %u, max memory = %d)\n",
2101
        fprintf(stderr, "Not enough memory (requested_size = %lu, max memory = %ld)\n",
2098 2102
                size, phys_ram_size);
2099 2103
        abort();
2100 2104
    }
......
2408 2412
};
2409 2413

  
2410 2414
static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
2411
                             int memory)
2415
                             ram_addr_t memory)
2412 2416
{
2413 2417
    int idx, eidx;
2414 2418
    unsigned int i;
......
2438 2442
    return 0;
2439 2443
}
2440 2444

  
2441
static void *subpage_init (target_phys_addr_t base, uint32_t *phys,
2442
                           int orig_memory)
2445
static void *subpage_init (target_phys_addr_t base, ram_addr_t *phys,
2446
                           ram_addr_t orig_memory)
2443 2447
{
2444 2448
    subpage_t *mmio;
2445 2449
    int subpage_memory;

Also available in: Unified diff