~vcs-imports/qemu/git

« back to all changes in this revision

Viewing changes to cpu-common.h

  • Committer: Blue Swirl
  • Date: 2009-08-31 15:14:40 UTC
  • Revision ID: git-v1:528e93a9787ccfc59582a44035f5f342caf5b84f
Fix breakage due to __thread

Thread-local storage is not supported on all hosts.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef CPU_COMMON_H
 
2
#define CPU_COMMON_H 1
 
3
 
 
4
/* CPU interfaces that are target indpendent.  */
 
5
 
 
6
#if defined(__arm__) || defined(__sparc__) || defined(__mips__) || defined(__hppa__)
 
7
#define WORDS_ALIGNED
 
8
#endif
 
9
 
 
10
#include "bswap.h"
 
11
 
 
12
/* address in the RAM (different from a physical address) */
 
13
typedef unsigned long ram_addr_t;
 
14
 
 
15
/* memory API */
 
16
 
 
17
typedef void CPUWriteMemoryFunc(void *opaque, target_phys_addr_t addr, uint32_t value);
 
18
typedef uint32_t CPUReadMemoryFunc(void *opaque, target_phys_addr_t addr);
 
19
 
 
20
void cpu_register_physical_memory_offset(target_phys_addr_t start_addr,
 
21
                                         ram_addr_t size,
 
22
                                         ram_addr_t phys_offset,
 
23
                                         ram_addr_t region_offset);
 
24
static inline void cpu_register_physical_memory(target_phys_addr_t start_addr,
 
25
                                                ram_addr_t size,
 
26
                                                ram_addr_t phys_offset)
 
27
{
 
28
    cpu_register_physical_memory_offset(start_addr, size, phys_offset, 0);
 
29
}
 
30
 
 
31
ram_addr_t cpu_get_physical_page_desc(target_phys_addr_t addr);
 
32
ram_addr_t qemu_ram_alloc(ram_addr_t);
 
33
void qemu_ram_free(ram_addr_t addr);
 
34
/* This should only be used for ram local to a device.  */
 
35
void *qemu_get_ram_ptr(ram_addr_t addr);
 
36
/* This should not be used by devices.  */
 
37
ram_addr_t qemu_ram_addr_from_host(void *ptr);
 
38
 
 
39
int cpu_register_io_memory(CPUReadMemoryFunc * const *mem_read,
 
40
                           CPUWriteMemoryFunc * const *mem_write,
 
41
                           void *opaque);
 
42
void cpu_unregister_io_memory(int table_address);
 
43
 
 
44
void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf,
 
45
                            int len, int is_write);
 
46
static inline void cpu_physical_memory_read(target_phys_addr_t addr,
 
47
                                            uint8_t *buf, int len)
 
48
{
 
49
    cpu_physical_memory_rw(addr, buf, len, 0);
 
50
}
 
51
static inline void cpu_physical_memory_write(target_phys_addr_t addr,
 
52
                                             const uint8_t *buf, int len)
 
53
{
 
54
    cpu_physical_memory_rw(addr, (uint8_t *)buf, len, 1);
 
55
}
 
56
void *cpu_physical_memory_map(target_phys_addr_t addr,
 
57
                              target_phys_addr_t *plen,
 
58
                              int is_write);
 
59
void cpu_physical_memory_unmap(void *buffer, target_phys_addr_t len,
 
60
                               int is_write, target_phys_addr_t access_len);
 
61
void *cpu_register_map_client(void *opaque, void (*callback)(void *opaque));
 
62
void cpu_unregister_map_client(void *cookie);
 
63
 
 
64
uint32_t ldub_phys(target_phys_addr_t addr);
 
65
uint32_t lduw_phys(target_phys_addr_t addr);
 
66
uint32_t ldl_phys(target_phys_addr_t addr);
 
67
uint64_t ldq_phys(target_phys_addr_t addr);
 
68
void stl_phys_notdirty(target_phys_addr_t addr, uint32_t val);
 
69
void stq_phys_notdirty(target_phys_addr_t addr, uint64_t val);
 
70
void stb_phys(target_phys_addr_t addr, uint32_t val);
 
71
void stw_phys(target_phys_addr_t addr, uint32_t val);
 
72
void stl_phys(target_phys_addr_t addr, uint32_t val);
 
73
void stq_phys(target_phys_addr_t addr, uint64_t val);
 
74
 
 
75
void cpu_physical_memory_write_rom(target_phys_addr_t addr,
 
76
                                   const uint8_t *buf, int len);
 
77
 
 
78
#define IO_MEM_SHIFT       3
 
79
 
 
80
#define IO_MEM_RAM         (0 << IO_MEM_SHIFT) /* hardcoded offset */
 
81
#define IO_MEM_ROM         (1 << IO_MEM_SHIFT) /* hardcoded offset */
 
82
#define IO_MEM_UNASSIGNED  (2 << IO_MEM_SHIFT)
 
83
#define IO_MEM_NOTDIRTY    (3 << IO_MEM_SHIFT)
 
84
 
 
85
/* Acts like a ROM when read and like a device when written.  */
 
86
#define IO_MEM_ROMD        (1)
 
87
#define IO_MEM_SUBPAGE     (2)
 
88
#define IO_MEM_SUBWIDTH    (4)
 
89
 
 
90
#endif /* !CPU_COMMON_H */