return close(fd);
}
-void *xc_gnttab_map_grant_ref(xc_gnttab *xch, uint32_t domid, uint32_t ref, int prot)
+static void *linux_gnttab_map_grant_ref(xc_gnttab *xch, xc_osdep_handle h,
+ uint32_t domid, uint32_t ref, int prot)
{
+ int fd = (int)h;
struct ioctl_gntdev_map_grant_ref map;
void *addr;
map.refs[0].domid = domid;
map.refs[0].ref = ref;
- if ( ioctl(xch->fd, IOCTL_GNTDEV_MAP_GRANT_REF, &map) ) {
+ if ( ioctl(fd, IOCTL_GNTDEV_MAP_GRANT_REF, &map) ) {
PERROR("xc_gnttab_map_grant_ref: ioctl MAP_GRANT_REF failed");
return NULL;
}
mmap_again:
- addr = mmap(NULL, PAGE_SIZE, prot, MAP_SHARED, xch->fd, map.index);
+ addr = mmap(NULL, PAGE_SIZE, prot, MAP_SHARED, fd, map.index);
if ( addr == MAP_FAILED )
{
int saved_errno = errno;
PERROR("xc_gnttab_map_grant_ref: mmap failed");
unmap_grant.index = map.index;
unmap_grant.count = 1;
- ioctl(xch->fd, IOCTL_GNTDEV_UNMAP_GRANT_REF, &unmap_grant);
+ ioctl(fd, IOCTL_GNTDEV_UNMAP_GRANT_REF, &unmap_grant);
errno = saved_errno;
return NULL;
}
return addr;
}
-static void *do_gnttab_map_grant_refs(xc_gnttab *xch, uint32_t count,
+static void *do_gnttab_map_grant_refs(xc_gnttab *xch, xc_osdep_handle h,
+ uint32_t count,
uint32_t *domids, int domids_stride,
uint32_t *refs, int prot)
{
+ int fd = (int)h;
struct ioctl_gntdev_map_grant_ref *map;
void *addr = NULL;
int i;
map->count = count;
- if ( ioctl(xch->fd, IOCTL_GNTDEV_MAP_GRANT_REF, map) ) {
+ if ( ioctl(fd, IOCTL_GNTDEV_MAP_GRANT_REF, map) ) {
PERROR("xc_gnttab_map_grant_refs: ioctl MAP_GRANT_REF failed");
goto out;
}
- addr = mmap(NULL, PAGE_SIZE * count, prot, MAP_SHARED, xch->fd,
+ addr = mmap(NULL, PAGE_SIZE * count, prot, MAP_SHARED, fd,
map->index);
if ( addr == MAP_FAILED )
{
PERROR("xc_gnttab_map_grant_refs: mmap failed");
unmap_grant.index = map->index;
unmap_grant.count = count;
- ioctl(xch->fd, IOCTL_GNTDEV_UNMAP_GRANT_REF, &unmap_grant);
+ ioctl(fd, IOCTL_GNTDEV_UNMAP_GRANT_REF, &unmap_grant);
errno = saved_errno;
addr = NULL;
}
return addr;
}
-void *xc_gnttab_map_grant_refs(xc_gnttab *xcg, uint32_t count, uint32_t *domids,
- uint32_t *refs, int prot)
+static void *linux_gnttab_map_grant_refs(xc_gnttab *xcg, xc_osdep_handle h,
+ uint32_t count, uint32_t *domids,
+ uint32_t *refs, int prot)
{
- return do_gnttab_map_grant_refs(xcg, count, domids, 1, refs, prot);
+ return do_gnttab_map_grant_refs(xcg, h, count, domids, 1, refs, prot);
}
-void *xc_gnttab_map_domain_grant_refs(xc_gnttab *xcg, uint32_t count,
- uint32_t domid, uint32_t *refs, int prot)
+static void *linux_gnttab_map_domain_grant_refs(xc_gnttab *xcg, xc_osdep_handle h,
+ uint32_t count,
+ uint32_t domid, uint32_t *refs, int prot)
{
- return do_gnttab_map_grant_refs(xcg, count, &domid, 0, refs, prot);
+ return do_gnttab_map_grant_refs(xcg, h, count, &domid, 0, refs, prot);
}
int xc_gnttab_munmap(xc_gnttab *xcg, void *start_address, uint32_t count)
static struct xc_osdep_ops linux_gnttab_ops = {
.open = &linux_gnttab_open,
.close = &linux_gnttab_close,
+
+ .u.gnttab = {
+ .map_grant_ref = &linux_gnttab_map_grant_ref,
+ .map_grant_refs = &linux_gnttab_map_grant_refs,
+ .map_domain_grant_refs = &linux_gnttab_map_domain_grant_refs,
+ },
};
static struct xc_osdep_ops *linux_osdep_init(xc_interface *xch, enum xc_osdep_type type)
files[fd].type = FTYPE_NONE;
}
-void *xc_gnttab_map_grant_ref(xc_gnttab *xcg,
- uint32_t domid,
- uint32_t ref,
- int prot)
+static void *minios_gnttab_map_grant_ref(xc_gnttab *xcg, xc_osdep_handle h,
+ uint32_t domid,
+ uint32_t ref,
+ int prot)
{
- return gntmap_map_grant_refs(&files[xcg->fd].gntmap,
+ int fd = (int)h;
+ return gntmap_map_grant_refs(&files[fd].gntmap,
1,
&domid, 0,
&ref,
prot & PROT_WRITE);
}
-void *xc_gnttab_map_grant_refs(xc_gnttab *xcg,
- uint32_t count,
- uint32_t *domids,
- uint32_t *refs,
- int prot)
+static void *minios_gnttab_map_grant_refs(xc_gnttab *xcg, xc_osdep_handle h,
+ uint32_t count,
+ uint32_t *domids,
+ uint32_t *refs,
+ int prot)
{
- return gntmap_map_grant_refs(&files[xcg->fd].gntmap,
+ int fd = (int)h;
+ return gntmap_map_grant_refs(&files[fd].gntmap,
count,
domids, 1,
refs,
prot & PROT_WRITE);
}
-void *xc_gnttab_map_domain_grant_refs(xc_gnttab *xcg,
- uint32_t count,
- uint32_t domid,
- uint32_t *refs,
- int prot)
+static void *minios_gnttab_map_domain_grant_refs(xc_gnttab *xcg, xc_osdep_handle h,
+ uint32_t count,
+ uint32_t domid,
+ uint32_t *refs,
+ int prot)
{
- return gntmap_map_grant_refs(&files[xcg->fd].gntmap,
+ int fd = (int)h;
+ return gntmap_map_grant_refs(&files[fd].gntmap,
count,
&domid, 0,
refs,
static struct xc_osdep_ops minios_gnttab_ops = {
.open = &minios_gnttab_open,
.close = &minios_gnttab_close,
+
+ .u.gnttab = {
+ .map_grant_ref = &minios_gnttab_map_grant_ref,
+ .map_grant_refs = &minios_gnttab_map_grant_refs,
+ .map_domain_grant_refs = &minios_gnttab_map_domain_grant_refs,
+ },
};
static struct xc_osdep_ops *minios_osdep_init(xc_interface *xch, enum xc_osdep_type type)