1*f80ad8b4SAndroid Build Coastguard Worker /****************************************************************************** 2*f80ad8b4SAndroid Build Coastguard Worker * gntalloc.h 3*f80ad8b4SAndroid Build Coastguard Worker * 4*f80ad8b4SAndroid Build Coastguard Worker * Interface to /dev/xen/gntalloc. 5*f80ad8b4SAndroid Build Coastguard Worker * 6*f80ad8b4SAndroid Build Coastguard Worker * Author: Daniel De Graaf <[email protected]> 7*f80ad8b4SAndroid Build Coastguard Worker * 8*f80ad8b4SAndroid Build Coastguard Worker * This file is in the public domain. 9*f80ad8b4SAndroid Build Coastguard Worker */ 10*f80ad8b4SAndroid Build Coastguard Worker 11*f80ad8b4SAndroid Build Coastguard Worker #ifndef __LINUX_PUBLIC_GNTALLOC_H__ 12*f80ad8b4SAndroid Build Coastguard Worker #define __LINUX_PUBLIC_GNTALLOC_H__ 13*f80ad8b4SAndroid Build Coastguard Worker 14*f80ad8b4SAndroid Build Coastguard Worker #include <linux/types.h> 15*f80ad8b4SAndroid Build Coastguard Worker 16*f80ad8b4SAndroid Build Coastguard Worker /* 17*f80ad8b4SAndroid Build Coastguard Worker * Allocates a new page and creates a new grant reference. 18*f80ad8b4SAndroid Build Coastguard Worker */ 19*f80ad8b4SAndroid Build Coastguard Worker #define IOCTL_GNTALLOC_ALLOC_GREF \ 20*f80ad8b4SAndroid Build Coastguard Worker _IOC(_IOC_NONE, 'G', 5, sizeof(struct ioctl_gntalloc_alloc_gref)) 21*f80ad8b4SAndroid Build Coastguard Worker struct ioctl_gntalloc_alloc_gref { 22*f80ad8b4SAndroid Build Coastguard Worker /* IN parameters */ 23*f80ad8b4SAndroid Build Coastguard Worker /* The ID of the domain to be given access to the grants. */ 24*f80ad8b4SAndroid Build Coastguard Worker __u16 domid; 25*f80ad8b4SAndroid Build Coastguard Worker /* Flags for this mapping */ 26*f80ad8b4SAndroid Build Coastguard Worker __u16 flags; 27*f80ad8b4SAndroid Build Coastguard Worker /* Number of pages to map */ 28*f80ad8b4SAndroid Build Coastguard Worker __u32 count; 29*f80ad8b4SAndroid Build Coastguard Worker /* OUT parameters */ 30*f80ad8b4SAndroid Build Coastguard Worker /* The offset to be used on a subsequent call to mmap(). */ 31*f80ad8b4SAndroid Build Coastguard Worker __u64 index; 32*f80ad8b4SAndroid Build Coastguard Worker /* The grant references of the newly created grant, one per page */ 33*f80ad8b4SAndroid Build Coastguard Worker /* Variable size, depending on count */ 34*f80ad8b4SAndroid Build Coastguard Worker union { 35*f80ad8b4SAndroid Build Coastguard Worker __u32 gref_ids[1]; 36*f80ad8b4SAndroid Build Coastguard Worker __DECLARE_FLEX_ARRAY(__u32, gref_ids_flex); 37*f80ad8b4SAndroid Build Coastguard Worker }; 38*f80ad8b4SAndroid Build Coastguard Worker }; 39*f80ad8b4SAndroid Build Coastguard Worker 40*f80ad8b4SAndroid Build Coastguard Worker #define GNTALLOC_FLAG_WRITABLE 1 41*f80ad8b4SAndroid Build Coastguard Worker 42*f80ad8b4SAndroid Build Coastguard Worker /* 43*f80ad8b4SAndroid Build Coastguard Worker * Deallocates the grant reference, allowing the associated page to be freed if 44*f80ad8b4SAndroid Build Coastguard Worker * no other domains are using it. 45*f80ad8b4SAndroid Build Coastguard Worker */ 46*f80ad8b4SAndroid Build Coastguard Worker #define IOCTL_GNTALLOC_DEALLOC_GREF \ 47*f80ad8b4SAndroid Build Coastguard Worker _IOC(_IOC_NONE, 'G', 6, sizeof(struct ioctl_gntalloc_dealloc_gref)) 48*f80ad8b4SAndroid Build Coastguard Worker struct ioctl_gntalloc_dealloc_gref { 49*f80ad8b4SAndroid Build Coastguard Worker /* IN parameters */ 50*f80ad8b4SAndroid Build Coastguard Worker /* The offset returned in the map operation */ 51*f80ad8b4SAndroid Build Coastguard Worker __u64 index; 52*f80ad8b4SAndroid Build Coastguard Worker /* Number of references to unmap */ 53*f80ad8b4SAndroid Build Coastguard Worker __u32 count; 54*f80ad8b4SAndroid Build Coastguard Worker }; 55*f80ad8b4SAndroid Build Coastguard Worker 56*f80ad8b4SAndroid Build Coastguard Worker /* 57*f80ad8b4SAndroid Build Coastguard Worker * Sets up an unmap notification within the page, so that the other side can do 58*f80ad8b4SAndroid Build Coastguard Worker * cleanup if this side crashes. Required to implement cross-domain robust 59*f80ad8b4SAndroid Build Coastguard Worker * mutexes or close notification on communication channels. 60*f80ad8b4SAndroid Build Coastguard Worker * 61*f80ad8b4SAndroid Build Coastguard Worker * Each mapped page only supports one notification; multiple calls referring to 62*f80ad8b4SAndroid Build Coastguard Worker * the same page overwrite the previous notification. You must clear the 63*f80ad8b4SAndroid Build Coastguard Worker * notification prior to the IOCTL_GNTALLOC_DEALLOC_GREF if you do not want it 64*f80ad8b4SAndroid Build Coastguard Worker * to occur. 65*f80ad8b4SAndroid Build Coastguard Worker */ 66*f80ad8b4SAndroid Build Coastguard Worker #define IOCTL_GNTALLOC_SET_UNMAP_NOTIFY \ 67*f80ad8b4SAndroid Build Coastguard Worker _IOC(_IOC_NONE, 'G', 7, sizeof(struct ioctl_gntalloc_unmap_notify)) 68*f80ad8b4SAndroid Build Coastguard Worker struct ioctl_gntalloc_unmap_notify { 69*f80ad8b4SAndroid Build Coastguard Worker /* IN parameters */ 70*f80ad8b4SAndroid Build Coastguard Worker /* Offset in the file descriptor for a byte within the page (same as 71*f80ad8b4SAndroid Build Coastguard Worker * used in mmap). If using UNMAP_NOTIFY_CLEAR_BYTE, this is the byte to 72*f80ad8b4SAndroid Build Coastguard Worker * be cleared. Otherwise, it can be any byte in the page whose 73*f80ad8b4SAndroid Build Coastguard Worker * notification we are adjusting. 74*f80ad8b4SAndroid Build Coastguard Worker */ 75*f80ad8b4SAndroid Build Coastguard Worker __u64 index; 76*f80ad8b4SAndroid Build Coastguard Worker /* Action(s) to take on unmap */ 77*f80ad8b4SAndroid Build Coastguard Worker __u32 action; 78*f80ad8b4SAndroid Build Coastguard Worker /* Event channel to notify */ 79*f80ad8b4SAndroid Build Coastguard Worker __u32 event_channel_port; 80*f80ad8b4SAndroid Build Coastguard Worker }; 81*f80ad8b4SAndroid Build Coastguard Worker 82*f80ad8b4SAndroid Build Coastguard Worker /* Clear (set to zero) the byte specified by index */ 83*f80ad8b4SAndroid Build Coastguard Worker #define UNMAP_NOTIFY_CLEAR_BYTE 0x1 84*f80ad8b4SAndroid Build Coastguard Worker /* Send an interrupt on the indicated event channel */ 85*f80ad8b4SAndroid Build Coastguard Worker #define UNMAP_NOTIFY_SEND_EVENT 0x2 86*f80ad8b4SAndroid Build Coastguard Worker 87*f80ad8b4SAndroid Build Coastguard Worker #endif /* __LINUX_PUBLIC_GNTALLOC_H__ */ 88