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