1 /* SPDX-License-Identifier: MIT */ 2 /****************************************************************************** 3 * tmem.h 4 * 5 * Guest OS interface to Xen Transcendent Memory. 6 * 7 * Copyright (c) 2004, K A Fraser 8 */ 9 10 #ifndef __XEN_PUBLIC_TMEM_H__ 11 #define __XEN_PUBLIC_TMEM_H__ 12 13 #include "xen.h" 14 15 #if __XEN_INTERFACE_VERSION__ < 0x00041300 16 17 /* version of ABI */ 18 #define TMEM_SPEC_VERSION 1 19 20 #define TMEM_NEW_POOL 1 21 #define TMEM_DESTROY_POOL 2 22 #define TMEM_PUT_PAGE 4 23 #define TMEM_GET_PAGE 5 24 #define TMEM_FLUSH_PAGE 6 25 #define TMEM_FLUSH_OBJECT 7 26 #if __XEN_INTERFACE_VERSION__ < 0x00040400 27 #define TMEM_NEW_PAGE 3 28 #define TMEM_READ 8 29 #define TMEM_WRITE 9 30 #define TMEM_XCHG 10 31 #endif 32 33 /* Privileged commands now called via XEN_SYSCTL_tmem_op. */ 34 #define TMEM_AUTH 101 /* as XEN_SYSCTL_TMEM_OP_SET_AUTH. */ 35 #define TMEM_RESTORE_NEW 102 /* as XEN_SYSCTL_TMEM_OP_SET_POOL. */ 36 37 /* Bits for HYPERVISOR_tmem_op(TMEM_NEW_POOL) */ 38 #define TMEM_POOL_PERSIST 1 39 #define TMEM_POOL_SHARED 2 40 #define TMEM_POOL_PRECOMPRESSED 4 41 #define TMEM_POOL_PAGESIZE_SHIFT 4 42 #define TMEM_POOL_PAGESIZE_MASK 0xf 43 #define TMEM_POOL_VERSION_SHIFT 24 44 #define TMEM_POOL_VERSION_MASK 0xff 45 #define TMEM_POOL_RESERVED_BITS 0x00ffff00 46 47 /* Bits for client flags (save/restore) */ 48 #define TMEM_CLIENT_COMPRESS 1 49 #define TMEM_CLIENT_FROZEN 2 50 51 /* Special errno values */ 52 #define EFROZEN 1000 53 #define EEMPTY 1001 54 55 struct xen_tmem_oid { 56 uint64_t oid[3]; 57 }; 58 typedef struct xen_tmem_oid xen_tmem_oid_t; 59 DEFINE_XEN_GUEST_HANDLE(xen_tmem_oid_t); 60 61 #ifndef __ASSEMBLY__ 62 #if __XEN_INTERFACE_VERSION__ < 0x00040400 63 typedef xen_pfn_t tmem_cli_mfn_t; 64 #endif 65 typedef XEN_GUEST_HANDLE(char) tmem_cli_va_t; 66 struct tmem_op { 67 uint32_t cmd; 68 int32_t pool_id; 69 union { 70 struct { 71 uint64_t uuid[2]; 72 uint32_t flags; 73 uint32_t arg1; 74 } creat; /* for cmd == TMEM_NEW_POOL. */ 75 struct { 76 #if __XEN_INTERFACE_VERSION__ < 0x00040600 77 uint64_t oid[3]; 78 #else 79 xen_tmem_oid_t oid; 80 #endif 81 uint32_t index; 82 uint32_t tmem_offset; 83 uint32_t pfn_offset; 84 uint32_t len; 85 xen_pfn_t cmfn; /* client machine page frame */ 86 } gen; /* for all other cmd ("generic") */ 87 } u; 88 }; 89 typedef struct tmem_op tmem_op_t; 90 DEFINE_XEN_GUEST_HANDLE(tmem_op_t); 91 #endif 92 93 #endif /* __XEN_INTERFACE_VERSION__ < 0x00041300 */ 94 95 #endif /* __XEN_PUBLIC_TMEM_H__ */ 96 97 /* 98 * Local variables: 99 * mode: C 100 * c-file-style: "BSD" 101 * c-basic-offset: 4 102 * tab-width: 4 103 * indent-tabs-mode: nil 104 * End: 105 */ 106