xen: define gnttab_set_map_op/unmap_op
Impact: hypercall definitions These functions populate the gnttab data structures used by the granttab map and unmap ops and are used in the backend drivers. Originally xen-unstable.hg 9625:c3bb51c443a7 [ Include Stefano's fix for phys_addr_t ] Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This commit is contained in:
committed by
Konrad Rzeszutek Wilk
parent
3c0eee3fe6
commit
f07745325c
@@ -37,10 +37,16 @@
|
|||||||
#ifndef __ASM_GNTTAB_H__
|
#ifndef __ASM_GNTTAB_H__
|
||||||
#define __ASM_GNTTAB_H__
|
#define __ASM_GNTTAB_H__
|
||||||
|
|
||||||
#include <asm/xen/hypervisor.h>
|
#include <asm/page.h>
|
||||||
|
|
||||||
|
#include <xen/interface/xen.h>
|
||||||
#include <xen/interface/grant_table.h>
|
#include <xen/interface/grant_table.h>
|
||||||
|
|
||||||
|
#include <asm/xen/hypervisor.h>
|
||||||
#include <asm/xen/grant_table.h>
|
#include <asm/xen/grant_table.h>
|
||||||
|
|
||||||
|
#include <xen/features.h>
|
||||||
|
|
||||||
/* NR_GRANT_FRAMES must be less than or equal to that configured in Xen */
|
/* NR_GRANT_FRAMES must be less than or equal to that configured in Xen */
|
||||||
#define NR_GRANT_FRAMES 4
|
#define NR_GRANT_FRAMES 4
|
||||||
|
|
||||||
@@ -107,6 +113,37 @@ void gnttab_grant_foreign_access_ref(grant_ref_t ref, domid_t domid,
|
|||||||
void gnttab_grant_foreign_transfer_ref(grant_ref_t, domid_t domid,
|
void gnttab_grant_foreign_transfer_ref(grant_ref_t, domid_t domid,
|
||||||
unsigned long pfn);
|
unsigned long pfn);
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
gnttab_set_map_op(struct gnttab_map_grant_ref *map, phys_addr_t addr,
|
||||||
|
uint32_t flags, grant_ref_t ref, domid_t domid)
|
||||||
|
{
|
||||||
|
if (flags & GNTMAP_contains_pte)
|
||||||
|
map->host_addr = addr;
|
||||||
|
else if (xen_feature(XENFEAT_auto_translated_physmap))
|
||||||
|
map->host_addr = __pa(addr);
|
||||||
|
else
|
||||||
|
map->host_addr = addr;
|
||||||
|
|
||||||
|
map->flags = flags;
|
||||||
|
map->ref = ref;
|
||||||
|
map->dom = domid;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
gnttab_set_unmap_op(struct gnttab_unmap_grant_ref *unmap, phys_addr_t addr,
|
||||||
|
uint32_t flags, grant_handle_t handle)
|
||||||
|
{
|
||||||
|
if (flags & GNTMAP_contains_pte)
|
||||||
|
unmap->host_addr = addr;
|
||||||
|
else if (xen_feature(XENFEAT_auto_translated_physmap))
|
||||||
|
unmap->host_addr = __pa(addr);
|
||||||
|
else
|
||||||
|
unmap->host_addr = addr;
|
||||||
|
|
||||||
|
unmap->handle = handle;
|
||||||
|
unmap->dev_bus_addr = 0;
|
||||||
|
}
|
||||||
|
|
||||||
int arch_gnttab_map_shared(unsigned long *frames, unsigned long nr_gframes,
|
int arch_gnttab_map_shared(unsigned long *frames, unsigned long nr_gframes,
|
||||||
unsigned long max_nr_gframes,
|
unsigned long max_nr_gframes,
|
||||||
struct grant_entry **__shared);
|
struct grant_entry **__shared);
|
||||||
|
Reference in New Issue
Block a user