Warning: This file is not a C or C++ file. It does not have highlighting.
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
---|---|
2 | /****************************************************************************** |
3 | * Guest OS interface to ARM Xen. |
4 | * |
5 | * Stefano Stabellini <stefano.stabellini@eu.citrix.com>, Citrix, 2012 |
6 | */ |
7 | |
8 | #ifndef _ASM_ARM_XEN_INTERFACE_H |
9 | #define _ASM_ARM_XEN_INTERFACE_H |
10 | |
11 | #include <linux/types.h> |
12 | |
13 | #define uint64_aligned_t uint64_t __attribute__((aligned(8))) |
14 | |
15 | #define __DEFINE_GUEST_HANDLE(name, type) \ |
16 | typedef struct { union { type *p; uint64_aligned_t q; }; } \ |
17 | __guest_handle_ ## name |
18 | |
19 | #define DEFINE_GUEST_HANDLE_STRUCT(name) \ |
20 | __DEFINE_GUEST_HANDLE(name, struct name) |
21 | #define DEFINE_GUEST_HANDLE(name) __DEFINE_GUEST_HANDLE(name, name) |
22 | #define GUEST_HANDLE(name) __guest_handle_ ## name |
23 | |
24 | #define set_xen_guest_handle(hnd, val) \ |
25 | do { \ |
26 | if (sizeof(hnd) == 8) \ |
27 | *(uint64_t *)&(hnd) = 0; \ |
28 | (hnd).p = val; \ |
29 | } while (0) |
30 | |
31 | #define __HYPERVISOR_platform_op_raw __HYPERVISOR_platform_op |
32 | |
33 | #ifndef __ASSEMBLY__ |
34 | /* Explicitly size integers that represent pfns in the interface with |
35 | * Xen so that we can have one ABI that works for 32 and 64 bit guests. |
36 | * Note that this means that the xen_pfn_t type may be capable of |
37 | * representing pfn's which the guest cannot represent in its own pfn |
38 | * type. However since pfn space is controlled by the guest this is |
39 | * fine since it simply wouldn't be able to create any sure pfns in |
40 | * the first place. |
41 | */ |
42 | typedef uint64_t xen_pfn_t; |
43 | #define PRI_xen_pfn "llx" |
44 | typedef uint64_t xen_ulong_t; |
45 | #define PRI_xen_ulong "llx" |
46 | typedef int64_t xen_long_t; |
47 | #define PRI_xen_long "llx" |
48 | /* Guest handles for primitive C types. */ |
49 | __DEFINE_GUEST_HANDLE(uchar, unsigned char); |
50 | __DEFINE_GUEST_HANDLE(uint, unsigned int); |
51 | DEFINE_GUEST_HANDLE(char); |
52 | DEFINE_GUEST_HANDLE(int); |
53 | DEFINE_GUEST_HANDLE(void); |
54 | DEFINE_GUEST_HANDLE(uint64_t); |
55 | DEFINE_GUEST_HANDLE(uint32_t); |
56 | DEFINE_GUEST_HANDLE(xen_pfn_t); |
57 | DEFINE_GUEST_HANDLE(xen_ulong_t); |
58 | |
59 | /* Maximum number of virtual CPUs in multi-processor guests. */ |
60 | #define MAX_VIRT_CPUS 1 |
61 | |
62 | struct arch_vcpu_info { }; |
63 | struct arch_shared_info { }; |
64 | |
65 | /* TODO: Move pvclock definitions some place arch independent */ |
66 | struct pvclock_vcpu_time_info { |
67 | u32 version; |
68 | u32 pad0; |
69 | u64 tsc_timestamp; |
70 | u64 system_time; |
71 | u32 tsc_to_system_mul; |
72 | s8 tsc_shift; |
73 | u8 flags; |
74 | u8 pad[2]; |
75 | } __attribute__((__packed__)); /* 32 bytes */ |
76 | |
77 | /* It is OK to have a 12 bytes struct with no padding because it is packed */ |
78 | struct pvclock_wall_clock { |
79 | u32 version; |
80 | u32 sec; |
81 | u32 nsec; |
82 | u32 sec_hi; |
83 | } __attribute__((__packed__)); |
84 | #endif |
85 | |
86 | #endif /* _ASM_ARM_XEN_INTERFACE_H */ |
87 |
Warning: This file is not a C or C++ file. It does not have highlighting.