master
h 40 lines 1.37 KB
Raw
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /* Access guest memory in blocks. */
3
4 #ifndef X86_TCG_ACCESS_H
5 #define X86_TCG_ACCESS_H
6
7 /* An access covers at most sizeof(X86XSaveArea), at most 2 pages. */
8 typedef struct X86Access {
9 target_ulong vaddr;
10 void *haddr1;
11 void *haddr2;
12 uint16_t size;
13 uint16_t size1;
14 /*
15 * If we can't access the host page directly, we'll have to do I/O access
16 * via ld/st helpers. These are internal details, so we store the rest
17 * to do the access here instead of passing it around in the helpers.
18 */
19 int mmu_idx;
20 CPUX86State *env;
21 uintptr_t ra;
22 } X86Access;
23
24 void access_prepare_mmu(X86Access *ret, CPUX86State *env,
25 vaddr vaddr, unsigned size,
26 MMUAccessType type, int mmu_idx, uintptr_t ra);
27 void access_prepare(X86Access *ret, CPUX86State *env, vaddr vaddr,
28 unsigned size, MMUAccessType type, uintptr_t ra);
29
30 uint8_t access_ldb(X86Access *ac, vaddr addr);
31 uint16_t access_ldw(X86Access *ac, vaddr addr);
32 uint32_t access_ldl(X86Access *ac, vaddr addr);
33 uint64_t access_ldq(X86Access *ac, vaddr addr);
34
35 void access_stb(X86Access *ac, vaddr addr, uint8_t val);
36 void access_stw(X86Access *ac, vaddr addr, uint16_t val);
37 void access_stl(X86Access *ac, vaddr addr, uint32_t val);
38 void access_stq(X86Access *ac, vaddr addr, uint64_t val);
39
40 #endif