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