| 1 |
|
| 2 | |
| 3 | * Guest OS interface to ARM Xen.
|
| 4 | *
|
| 5 | * Stefano Stabellini <[email protected]>, 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 __ASSEMBLER__
|
| 34 | |
| 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 |
|
| 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 |
|
| 60 | #define MAX_VIRT_CPUS 1
|
| 61 |
|
| 62 | struct arch_vcpu_info { };
|
| 63 | struct arch_shared_info { };
|
| 64 |
|
| 65 |
|
| 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__));
|
| 76 |
|
| 77 |
|
| 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
|