sync with latest
[sdk/emulator/qemu.git] / hw / yagl_mem.h
1 #ifndef _QEMU_YAGL_MEM_H
2 #define _QEMU_YAGL_MEM_H
3
4 #include "yagl_types.h"
5 #include "yagl_mem_transfer.h"
6
7 bool yagl_mem_get_uint8(struct yagl_thread_state *ts, target_ulong va, uint8_t* value);
8
9 bool yagl_mem_get_uint16(struct yagl_thread_state *ts, target_ulong va, uint16_t* value);
10
11 bool yagl_mem_get_uint32(struct yagl_thread_state *ts, target_ulong va, uint32_t* value);
12
13 bool yagl_mem_get_float(struct yagl_thread_state *ts, target_ulong va, float* value);
14
15 bool yagl_mem_get(struct yagl_thread_state *ts, target_ulong va, uint32_t len, void* data);
16
17 typedef bool (*yagl_mem_array_cb)(const void */*el*/, void */*user_data*/);
18
19 /*
20  * Efficiently reads an array from target memory. It'll continue reading until
21  * 'cb' returns false. Note that 'el_size' must be <= TARGET_PAGE_SIZE
22  * in order for this function to work.
23  */
24 bool yagl_mem_get_array(struct yagl_thread_state *ts,
25                         target_ulong va,
26                         target_ulong el_size,
27                         yagl_mem_array_cb cb,
28                         void *user_data);
29
30 char *yagl_mem_get_string(struct yagl_thread_state *ts, target_ulong va);
31
32 #define yagl_mem_prepare_char(mt, va) yagl_mem_prepare_uint8((mt), (va))
33 #define yagl_mem_put_char(mt, value) yagl_mem_put_uint8((mt), (uint8_t)(value))
34 #define yagl_mem_get_char(ts, va, value) yagl_mem_get_uint8((ts), (va), (uint8_t*)(value))
35 #define yagl_mem_prepare_int8(mt, va) yagl_mem_prepare_uint8((mt), (va))
36 #define yagl_mem_put_int8(mt, value) yagl_mem_put_uint8((mt), (uint8_t)(value))
37 #define yagl_mem_get_int8(ts, va, value) yagl_mem_get_uint8((ts), (va), (uint8_t*)(value))
38 #define yagl_mem_prepare_int16(mt, va) yagl_mem_prepare_uint16((mt), (va))
39 #define yagl_mem_put_int16(mt, value) yagl_mem_put_uint16((mt), (uint16_t)(value))
40 #define yagl_mem_get_int16(ts, va, value) yagl_mem_get_uint16((ts), (va), (uint16_t*)(value))
41 #define yagl_mem_prepare_int32(mt, va) yagl_mem_prepare_uint32((mt), (va))
42 #define yagl_mem_put_int32(mt, value) yagl_mem_put_uint32((mt), (uint32_t)(value))
43 #define yagl_mem_get_int32(ts, va, value) yagl_mem_get_uint32((ts), (va), (uint32_t*)(value))
44 #define yagl_mem_prepare_host_handle(mt, va) yagl_mem_prepare_uint32((mt), (va))
45 #define yagl_mem_put_host_handle(mt, value) yagl_mem_put_uint32((mt), (value))
46 #define yagl_mem_get_host_handle(ts, va, value) yagl_mem_get_uint32((ts), (va), (value))
47
48 #if TARGET_LONG_SIZE == 4
49 #define yagl_mem_prepare_ptr(mt, va) yagl_mem_prepare_uint32((mt), (va))
50 #define yagl_mem_put_ptr(mt, value) yagl_mem_put_uint32((mt), (value))
51 #else
52 #error 64-bit ptr not supported
53 #endif
54
55 #endif