]>
Commit | Line | Data |
---|---|---|
1 | /******************************************************************************\r | |
2 | * arch-x86/xen.h\r | |
3 | *\r | |
4 | * Guest OS interface to x86 Xen.\r | |
5 | *\r | |
6 | * SPDX-License-Identifier: MIT\r | |
7 | *\r | |
8 | * Copyright (c) 2004-2006, K A Fraser\r | |
9 | */\r | |
10 | \r | |
11 | #include "../xen.h"\r | |
12 | \r | |
13 | #ifndef __XEN_PUBLIC_ARCH_X86_XEN_H__\r | |
14 | #define __XEN_PUBLIC_ARCH_X86_XEN_H__\r | |
15 | \r | |
16 | /* Structural guest handles introduced in 0x00030201. */\r | |
17 | #if __XEN_INTERFACE_VERSION__ >= 0x00030201\r | |
18 | #define ___DEFINE_XEN_GUEST_HANDLE(name, type) \\r | |
19 | typedef struct { type *p; } __guest_handle_ ## name\r | |
20 | #else\r | |
21 | #define ___DEFINE_XEN_GUEST_HANDLE(name, type) \\r | |
22 | typedef type * __guest_handle_ ## name\r | |
23 | #endif\r | |
24 | \r | |
25 | /*\r | |
26 | * XEN_GUEST_HANDLE represents a guest pointer, when passed as a field\r | |
27 | * in a struct in memory.\r | |
28 | * XEN_GUEST_HANDLE_PARAM represent a guest pointer, when passed as an\r | |
29 | * hypercall argument.\r | |
30 | * XEN_GUEST_HANDLE_PARAM and XEN_GUEST_HANDLE are the same on X86 but\r | |
31 | * they might not be on other architectures.\r | |
32 | */\r | |
33 | #define __DEFINE_XEN_GUEST_HANDLE(name, type) \\r | |
34 | ___DEFINE_XEN_GUEST_HANDLE(name, type); \\r | |
35 | ___DEFINE_XEN_GUEST_HANDLE(const_##name, const type)\r | |
36 | #define DEFINE_XEN_GUEST_HANDLE(name) __DEFINE_XEN_GUEST_HANDLE(name, name)\r | |
37 | #define __XEN_GUEST_HANDLE(name) __guest_handle_ ## name\r | |
38 | #define XEN_GUEST_HANDLE(name) __XEN_GUEST_HANDLE(name)\r | |
39 | #define XEN_GUEST_HANDLE_PARAM(name) XEN_GUEST_HANDLE(name)\r | |
40 | #define set_xen_guest_handle_raw(hnd, val) do { (hnd).p = val; } while (0)\r | |
41 | #ifdef __XEN_TOOLS__\r | |
42 | #define get_xen_guest_handle(val, hnd) do { val = (hnd).p; } while (0)\r | |
43 | #endif\r | |
44 | #define set_xen_guest_handle(hnd, val) set_xen_guest_handle_raw(hnd, val)\r | |
45 | \r | |
46 | #if defined (MDE_CPU_IA32)\r | |
47 | #include "xen-x86_32.h"\r | |
48 | #elif defined (MDE_CPU_X64)\r | |
49 | #include "xen-x86_64.h"\r | |
50 | #endif\r | |
51 | \r | |
52 | #ifndef __ASSEMBLY__\r | |
53 | typedef UINTN xen_pfn_t;\r | |
54 | #define PRI_xen_pfn "lx"\r | |
55 | #endif\r | |
56 | \r | |
57 | #define XEN_HAVE_PV_UPCALL_MASK 1\r | |
58 | \r | |
59 | /* Maximum number of virtual CPUs in legacy multi-processor guests. */\r | |
60 | #define XEN_LEGACY_MAX_VCPUS 32\r | |
61 | \r | |
62 | #ifndef __ASSEMBLY__\r | |
63 | \r | |
64 | typedef UINTN xen_ulong_t;\r | |
65 | #define PRI_xen_ulong "lx"\r | |
66 | \r | |
67 | typedef UINT64 tsc_timestamp_t; /* RDTSC timestamp */\r | |
68 | \r | |
69 | #ifdef MDE_CPU_IA32\r | |
70 | #pragma pack(4)\r | |
71 | #endif\r | |
72 | struct arch_shared_info {\r | |
73 | UINTN max_pfn; /* max pfn that appears in table */\r | |
74 | /* Frame containing list of mfns containing list of mfns containing p2m. */\r | |
75 | xen_pfn_t pfn_to_mfn_frame_list_list;\r | |
76 | UINTN nmi_reason;\r | |
77 | UINT64 pad[32];\r | |
78 | };\r | |
79 | \r | |
80 | typedef struct arch_shared_info arch_shared_info_t;\r | |
81 | #ifdef MDE_CPU_IA32\r | |
82 | #pragma pack()\r | |
83 | #endif\r | |
84 | \r | |
85 | #endif /* !__ASSEMBLY__ */\r | |
86 | \r | |
87 | #endif /* __XEN_PUBLIC_ARCH_X86_XEN_H__ */\r | |
88 | \r | |
89 | /*\r | |
90 | * Local variables:\r | |
91 | * mode: C\r | |
92 | * c-file-style: "BSD"\r | |
93 | * c-basic-offset: 4\r | |
94 | * tab-width: 4\r | |
95 | * indent-tabs-mode: nil\r | |
96 | * End:\r | |
97 | */\r |