xref: /netbsd-src/sys/external/mit/xen-include-public/dist/xen/include/public/tmem.h (revision a215bf017205c151c294992dd060042ee327e78c)
1*a215bf01Scherry /******************************************************************************
2*a215bf01Scherry  * tmem.h
3*a215bf01Scherry  *
4*a215bf01Scherry  * Guest OS interface to Xen Transcendent Memory.
5*a215bf01Scherry  *
6*a215bf01Scherry  * Permission is hereby granted, free of charge, to any person obtaining a copy
7*a215bf01Scherry  * of this software and associated documentation files (the "Software"), to
8*a215bf01Scherry  * deal in the Software without restriction, including without limitation the
9*a215bf01Scherry  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10*a215bf01Scherry  * sell copies of the Software, and to permit persons to whom the Software is
11*a215bf01Scherry  * furnished to do so, subject to the following conditions:
12*a215bf01Scherry  *
13*a215bf01Scherry  * The above copyright notice and this permission notice shall be included in
14*a215bf01Scherry  * all copies or substantial portions of the Software.
15*a215bf01Scherry  *
16*a215bf01Scherry  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17*a215bf01Scherry  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18*a215bf01Scherry  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19*a215bf01Scherry  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20*a215bf01Scherry  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21*a215bf01Scherry  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22*a215bf01Scherry  * DEALINGS IN THE SOFTWARE.
23*a215bf01Scherry  *
24*a215bf01Scherry  * Copyright (c) 2004, K A Fraser
25*a215bf01Scherry  */
26*a215bf01Scherry 
27*a215bf01Scherry #ifndef __XEN_PUBLIC_TMEM_H__
28*a215bf01Scherry #define __XEN_PUBLIC_TMEM_H__
29*a215bf01Scherry 
30*a215bf01Scherry #include "xen.h"
31*a215bf01Scherry 
32*a215bf01Scherry /* version of ABI */
33*a215bf01Scherry #define TMEM_SPEC_VERSION          1
34*a215bf01Scherry 
35*a215bf01Scherry /* Commands to HYPERVISOR_tmem_op() */
36*a215bf01Scherry #ifdef __XEN__
37*a215bf01Scherry #define TMEM_CONTROL               0 /* Now called XEN_SYSCTL_tmem_op */
38*a215bf01Scherry #else
39*a215bf01Scherry #undef TMEM_CONTROL
40*a215bf01Scherry #endif
41*a215bf01Scherry #define TMEM_NEW_POOL              1
42*a215bf01Scherry #define TMEM_DESTROY_POOL          2
43*a215bf01Scherry #define TMEM_PUT_PAGE              4
44*a215bf01Scherry #define TMEM_GET_PAGE              5
45*a215bf01Scherry #define TMEM_FLUSH_PAGE            6
46*a215bf01Scherry #define TMEM_FLUSH_OBJECT          7
47*a215bf01Scherry #if __XEN_INTERFACE_VERSION__ < 0x00040400
48*a215bf01Scherry #define TMEM_NEW_PAGE              3
49*a215bf01Scherry #define TMEM_READ                  8
50*a215bf01Scherry #define TMEM_WRITE                 9
51*a215bf01Scherry #define TMEM_XCHG                 10
52*a215bf01Scherry #endif
53*a215bf01Scherry 
54*a215bf01Scherry /* Privileged commands now called via XEN_SYSCTL_tmem_op. */
55*a215bf01Scherry #define TMEM_AUTH                 101 /* as XEN_SYSCTL_TMEM_OP_SET_AUTH. */
56*a215bf01Scherry #define TMEM_RESTORE_NEW          102 /* as XEN_SYSCTL_TMEM_OP_SET_POOL. */
57*a215bf01Scherry 
58*a215bf01Scherry /* Bits for HYPERVISOR_tmem_op(TMEM_NEW_POOL) */
59*a215bf01Scherry #define TMEM_POOL_PERSIST          1
60*a215bf01Scherry #define TMEM_POOL_SHARED           2
61*a215bf01Scherry #define TMEM_POOL_PRECOMPRESSED    4
62*a215bf01Scherry #define TMEM_POOL_PAGESIZE_SHIFT   4
63*a215bf01Scherry #define TMEM_POOL_PAGESIZE_MASK  0xf
64*a215bf01Scherry #define TMEM_POOL_VERSION_SHIFT   24
65*a215bf01Scherry #define TMEM_POOL_VERSION_MASK  0xff
66*a215bf01Scherry #define TMEM_POOL_RESERVED_BITS  0x00ffff00
67*a215bf01Scherry 
68*a215bf01Scherry /* Bits for client flags (save/restore) */
69*a215bf01Scherry #define TMEM_CLIENT_COMPRESS       1
70*a215bf01Scherry #define TMEM_CLIENT_FROZEN         2
71*a215bf01Scherry 
72*a215bf01Scherry /* Special errno values */
73*a215bf01Scherry #define EFROZEN                 1000
74*a215bf01Scherry #define EEMPTY                  1001
75*a215bf01Scherry 
76*a215bf01Scherry struct xen_tmem_oid {
77*a215bf01Scherry     uint64_t oid[3];
78*a215bf01Scherry };
79*a215bf01Scherry typedef struct xen_tmem_oid xen_tmem_oid_t;
80*a215bf01Scherry DEFINE_XEN_GUEST_HANDLE(xen_tmem_oid_t);
81*a215bf01Scherry 
82*a215bf01Scherry #ifndef __ASSEMBLY__
83*a215bf01Scherry #if __XEN_INTERFACE_VERSION__ < 0x00040400
84*a215bf01Scherry typedef xen_pfn_t tmem_cli_mfn_t;
85*a215bf01Scherry #endif
86*a215bf01Scherry typedef XEN_GUEST_HANDLE(char) tmem_cli_va_t;
87*a215bf01Scherry struct tmem_op {
88*a215bf01Scherry     uint32_t cmd;
89*a215bf01Scherry     int32_t pool_id;
90*a215bf01Scherry     union {
91*a215bf01Scherry         struct {
92*a215bf01Scherry             uint64_t uuid[2];
93*a215bf01Scherry             uint32_t flags;
94*a215bf01Scherry             uint32_t arg1;
95*a215bf01Scherry         } creat; /* for cmd == TMEM_NEW_POOL. */
96*a215bf01Scherry         struct {
97*a215bf01Scherry #if __XEN_INTERFACE_VERSION__ < 0x00040600
98*a215bf01Scherry             uint64_t oid[3];
99*a215bf01Scherry #else
100*a215bf01Scherry             xen_tmem_oid_t oid;
101*a215bf01Scherry #endif
102*a215bf01Scherry             uint32_t index;
103*a215bf01Scherry             uint32_t tmem_offset;
104*a215bf01Scherry             uint32_t pfn_offset;
105*a215bf01Scherry             uint32_t len;
106*a215bf01Scherry             xen_pfn_t cmfn; /* client machine page frame */
107*a215bf01Scherry         } gen; /* for all other cmd ("generic") */
108*a215bf01Scherry     } u;
109*a215bf01Scherry };
110*a215bf01Scherry typedef struct tmem_op tmem_op_t;
111*a215bf01Scherry DEFINE_XEN_GUEST_HANDLE(tmem_op_t);
112*a215bf01Scherry #endif
113*a215bf01Scherry 
114*a215bf01Scherry #endif /* __XEN_PUBLIC_TMEM_H__ */
115*a215bf01Scherry 
116*a215bf01Scherry /*
117*a215bf01Scherry  * Local variables:
118*a215bf01Scherry  * mode: C
119*a215bf01Scherry  * c-file-style: "BSD"
120*a215bf01Scherry  * c-basic-offset: 4
121*a215bf01Scherry  * tab-width: 4
122*a215bf01Scherry  * indent-tabs-mode: nil
123*a215bf01Scherry  * End:
124*a215bf01Scherry  */
125