1 #ifndef XENFOREIGNMEMORY_PRIVATE_H
2 #define XENFOREIGNMEMORY_PRIVATE_H
3 
4 #include <xentoollog.h>
5 
6 #include <xenforeignmemory.h>
7 
8 #include <xentoolcore_internal.h>
9 
10 #include <xen/xen.h>
11 #include <xen/sys/privcmd.h>
12 
13 #ifndef PAGE_SHIFT /* Mini-os, Yukk */
14 #define PAGE_SHIFT           12
15 #endif
16 #ifndef __MINIOS__ /* Yukk */
17 #define PAGE_SIZE            (1UL << PAGE_SHIFT)
18 #define PAGE_MASK            (~(PAGE_SIZE-1))
19 #endif
20 
21 struct xenforeignmemory_handle {
22     xentoollog_logger *logger, *logger_tofree;
23     unsigned flags;
24     int fd;
25     Xentoolcore__Active_Handle tc_ah;
26     int unimpl_errno;
27 };
28 
29 int osdep_xenforeignmemory_open(xenforeignmemory_handle *fmem);
30 int osdep_xenforeignmemory_close(xenforeignmemory_handle *fmem);
31 
32 void *osdep_xenforeignmemory_map(xenforeignmemory_handle *fmem,
33                                  uint32_t dom, void *addr,
34                                  int prot, int flags, size_t num,
35                                  const xen_pfn_t arr[num], int err[num]);
36 int osdep_xenforeignmemory_unmap(xenforeignmemory_handle *fmem,
37                                  void *addr, size_t num);
38 
39 #if defined(__NetBSD__) || defined(__sun__)
40 /* Strictly compat for those two only only */
41 void *compat_mapforeign_batch(xenforeignmem_handle *fmem, uint32_t dom,
42                               void *addr, int prot, int flags,
43                               xen_pfn_t *arr, int num);
44 #endif
45 
46 struct xenforeignmemory_resource_handle {
47     domid_t domid;
48     unsigned int type;
49     unsigned int id;
50     unsigned long frame;
51     unsigned long nr_frames;
52     void *addr;
53     int prot;
54     int flags;
55 };
56 
57 #ifndef __linux__
osdep_xenforeignmemory_restrict(xenforeignmemory_handle * fmem,domid_t domid)58 static inline int osdep_xenforeignmemory_restrict(xenforeignmemory_handle *fmem,
59                                                   domid_t domid)
60 {
61     errno = EOPNOTSUPP;
62     return -1;
63 }
64 
osdep_xenforeignmemory_map_resource(xenforeignmemory_handle * fmem,xenforeignmemory_resource_handle * fres)65 static inline int osdep_xenforeignmemory_map_resource(
66     xenforeignmemory_handle *fmem, xenforeignmemory_resource_handle *fres)
67 {
68     errno = EOPNOTSUPP;
69     return -1;
70 }
71 
osdep_xenforeignmemory_unmap_resource(xenforeignmemory_handle * fmem,xenforeignmemory_resource_handle * fres)72 static inline int osdep_xenforeignmemory_unmap_resource(
73     xenforeignmemory_handle *fmem, xenforeignmemory_resource_handle *fres)
74 {
75     return 0;
76 }
77 #else
78 int osdep_xenforeignmemory_restrict(xenforeignmemory_handle *fmem,
79                                     domid_t domid);
80 int osdep_xenforeignmemory_map_resource(
81     xenforeignmemory_handle *fmem, xenforeignmemory_resource_handle *fres);
82 int osdep_xenforeignmemory_unmap_resource(
83     xenforeignmemory_handle *fmem, xenforeignmemory_resource_handle *fres);
84 #endif
85 
86 #define PERROR(_f...) \
87     xtl_log(fmem->logger, XTL_ERROR, errno, "xenforeignmemory", _f)
88 
89 #endif
90 
91 /*
92  * Local variables:
93  * mode: C
94  * c-file-style: "BSD"
95  * c-basic-offset: 4
96  * tab-width: 4
97  * indent-tabs-mode: nil
98  * End:
99  */
100