18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR MIT) */
28c2ecf20Sopenharmony_ci/******************************************************************************
38c2ecf20Sopenharmony_ci * gntdev.h
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Interface to /dev/xen/gntdev.
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci * Copyright (c) 2007, D G Murray
88c2ecf20Sopenharmony_ci * Copyright (c) 2018, Oleksandr Andrushchenko, EPAM Systems Inc.
98c2ecf20Sopenharmony_ci *
108c2ecf20Sopenharmony_ci * This program is free software; you can redistribute it and/or
118c2ecf20Sopenharmony_ci * modify it under the terms of the GNU General Public License version 2
128c2ecf20Sopenharmony_ci * as published by the Free Software Foundation; or, when distributed
138c2ecf20Sopenharmony_ci * separately from the Linux kernel or incorporated into other
148c2ecf20Sopenharmony_ci * software packages, subject to the following license:
158c2ecf20Sopenharmony_ci *
168c2ecf20Sopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a copy
178c2ecf20Sopenharmony_ci * of this source file (the "Software"), to deal in the Software without
188c2ecf20Sopenharmony_ci * restriction, including without limitation the rights to use, copy, modify,
198c2ecf20Sopenharmony_ci * merge, publish, distribute, sublicense, and/or sell copies of the Software,
208c2ecf20Sopenharmony_ci * and to permit persons to whom the Software is furnished to do so, subject to
218c2ecf20Sopenharmony_ci * the following conditions:
228c2ecf20Sopenharmony_ci *
238c2ecf20Sopenharmony_ci * The above copyright notice and this permission notice shall be included in
248c2ecf20Sopenharmony_ci * all copies or substantial portions of the Software.
258c2ecf20Sopenharmony_ci *
268c2ecf20Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
278c2ecf20Sopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
288c2ecf20Sopenharmony_ci * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
298c2ecf20Sopenharmony_ci * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
308c2ecf20Sopenharmony_ci * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
318c2ecf20Sopenharmony_ci * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
328c2ecf20Sopenharmony_ci * IN THE SOFTWARE.
338c2ecf20Sopenharmony_ci */
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_ci#ifndef __LINUX_PUBLIC_GNTDEV_H__
368c2ecf20Sopenharmony_ci#define __LINUX_PUBLIC_GNTDEV_H__
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ci#include <linux/types.h>
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_cistruct ioctl_gntdev_grant_ref {
418c2ecf20Sopenharmony_ci	/* The domain ID of the grant to be mapped. */
428c2ecf20Sopenharmony_ci	__u32 domid;
438c2ecf20Sopenharmony_ci	/* The grant reference of the grant to be mapped. */
448c2ecf20Sopenharmony_ci	__u32 ref;
458c2ecf20Sopenharmony_ci};
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ci/*
488c2ecf20Sopenharmony_ci * Inserts the grant references into the mapping table of an instance
498c2ecf20Sopenharmony_ci * of gntdev. N.B. This does not perform the mapping, which is deferred
508c2ecf20Sopenharmony_ci * until mmap() is called with @index as the offset.
518c2ecf20Sopenharmony_ci */
528c2ecf20Sopenharmony_ci#define IOCTL_GNTDEV_MAP_GRANT_REF \
538c2ecf20Sopenharmony_ci_IOC(_IOC_NONE, 'G', 0, sizeof(struct ioctl_gntdev_map_grant_ref))
548c2ecf20Sopenharmony_cistruct ioctl_gntdev_map_grant_ref {
558c2ecf20Sopenharmony_ci	/* IN parameters */
568c2ecf20Sopenharmony_ci	/* The number of grants to be mapped. */
578c2ecf20Sopenharmony_ci	__u32 count;
588c2ecf20Sopenharmony_ci	__u32 pad;
598c2ecf20Sopenharmony_ci	/* OUT parameters */
608c2ecf20Sopenharmony_ci	/* The offset to be used on a subsequent call to mmap(). */
618c2ecf20Sopenharmony_ci	__u64 index;
628c2ecf20Sopenharmony_ci	/* Variable IN parameter. */
638c2ecf20Sopenharmony_ci	/* Array of grant references, of size @count. */
648c2ecf20Sopenharmony_ci	struct ioctl_gntdev_grant_ref refs[1];
658c2ecf20Sopenharmony_ci};
668c2ecf20Sopenharmony_ci
678c2ecf20Sopenharmony_ci/*
688c2ecf20Sopenharmony_ci * Removes the grant references from the mapping table of an instance of
698c2ecf20Sopenharmony_ci * gntdev. N.B. munmap() must be called on the relevant virtual address(es)
708c2ecf20Sopenharmony_ci * before this ioctl is called, or an error will result.
718c2ecf20Sopenharmony_ci */
728c2ecf20Sopenharmony_ci#define IOCTL_GNTDEV_UNMAP_GRANT_REF \
738c2ecf20Sopenharmony_ci_IOC(_IOC_NONE, 'G', 1, sizeof(struct ioctl_gntdev_unmap_grant_ref))
748c2ecf20Sopenharmony_cistruct ioctl_gntdev_unmap_grant_ref {
758c2ecf20Sopenharmony_ci	/* IN parameters */
768c2ecf20Sopenharmony_ci	/* The offset was returned by the corresponding map operation. */
778c2ecf20Sopenharmony_ci	__u64 index;
788c2ecf20Sopenharmony_ci	/* The number of pages to be unmapped. */
798c2ecf20Sopenharmony_ci	__u32 count;
808c2ecf20Sopenharmony_ci	__u32 pad;
818c2ecf20Sopenharmony_ci};
828c2ecf20Sopenharmony_ci
838c2ecf20Sopenharmony_ci/*
848c2ecf20Sopenharmony_ci * Returns the offset in the driver's address space that corresponds
858c2ecf20Sopenharmony_ci * to @vaddr. This can be used to perform a munmap(), followed by an
868c2ecf20Sopenharmony_ci * UNMAP_GRANT_REF ioctl, where no state about the offset is retained by
878c2ecf20Sopenharmony_ci * the caller. The number of pages that were allocated at the same time as
888c2ecf20Sopenharmony_ci * @vaddr is returned in @count.
898c2ecf20Sopenharmony_ci *
908c2ecf20Sopenharmony_ci * N.B. Where more than one page has been mapped into a contiguous range, the
918c2ecf20Sopenharmony_ci *      supplied @vaddr must correspond to the start of the range; otherwise
928c2ecf20Sopenharmony_ci *      an error will result. It is only possible to munmap() the entire
938c2ecf20Sopenharmony_ci *      contiguously-allocated range at once, and not any subrange thereof.
948c2ecf20Sopenharmony_ci */
958c2ecf20Sopenharmony_ci#define IOCTL_GNTDEV_GET_OFFSET_FOR_VADDR \
968c2ecf20Sopenharmony_ci_IOC(_IOC_NONE, 'G', 2, sizeof(struct ioctl_gntdev_get_offset_for_vaddr))
978c2ecf20Sopenharmony_cistruct ioctl_gntdev_get_offset_for_vaddr {
988c2ecf20Sopenharmony_ci	/* IN parameters */
998c2ecf20Sopenharmony_ci	/* The virtual address of the first mapped page in a range. */
1008c2ecf20Sopenharmony_ci	__u64 vaddr;
1018c2ecf20Sopenharmony_ci	/* OUT parameters */
1028c2ecf20Sopenharmony_ci	/* The offset that was used in the initial mmap() operation. */
1038c2ecf20Sopenharmony_ci	__u64 offset;
1048c2ecf20Sopenharmony_ci	/* The number of pages mapped in the VM area that begins at @vaddr. */
1058c2ecf20Sopenharmony_ci	__u32 count;
1068c2ecf20Sopenharmony_ci	__u32 pad;
1078c2ecf20Sopenharmony_ci};
1088c2ecf20Sopenharmony_ci
1098c2ecf20Sopenharmony_ci/*
1108c2ecf20Sopenharmony_ci * Sets the maximum number of grants that may mapped at once by this gntdev
1118c2ecf20Sopenharmony_ci * instance.
1128c2ecf20Sopenharmony_ci *
1138c2ecf20Sopenharmony_ci * N.B. This must be called before any other ioctl is performed on the device.
1148c2ecf20Sopenharmony_ci */
1158c2ecf20Sopenharmony_ci#define IOCTL_GNTDEV_SET_MAX_GRANTS \
1168c2ecf20Sopenharmony_ci_IOC(_IOC_NONE, 'G', 3, sizeof(struct ioctl_gntdev_set_max_grants))
1178c2ecf20Sopenharmony_cistruct ioctl_gntdev_set_max_grants {
1188c2ecf20Sopenharmony_ci	/* IN parameter */
1198c2ecf20Sopenharmony_ci	/* The maximum number of grants that may be mapped at once. */
1208c2ecf20Sopenharmony_ci	__u32 count;
1218c2ecf20Sopenharmony_ci};
1228c2ecf20Sopenharmony_ci
1238c2ecf20Sopenharmony_ci/*
1248c2ecf20Sopenharmony_ci * Sets up an unmap notification within the page, so that the other side can do
1258c2ecf20Sopenharmony_ci * cleanup if this side crashes. Required to implement cross-domain robust
1268c2ecf20Sopenharmony_ci * mutexes or close notification on communication channels.
1278c2ecf20Sopenharmony_ci *
1288c2ecf20Sopenharmony_ci * Each mapped page only supports one notification; multiple calls referring to
1298c2ecf20Sopenharmony_ci * the same page overwrite the previous notification. You must clear the
1308c2ecf20Sopenharmony_ci * notification prior to the IOCTL_GNTALLOC_DEALLOC_GREF if you do not want it
1318c2ecf20Sopenharmony_ci * to occur.
1328c2ecf20Sopenharmony_ci */
1338c2ecf20Sopenharmony_ci#define IOCTL_GNTDEV_SET_UNMAP_NOTIFY \
1348c2ecf20Sopenharmony_ci_IOC(_IOC_NONE, 'G', 7, sizeof(struct ioctl_gntdev_unmap_notify))
1358c2ecf20Sopenharmony_cistruct ioctl_gntdev_unmap_notify {
1368c2ecf20Sopenharmony_ci	/* IN parameters */
1378c2ecf20Sopenharmony_ci	/* Offset in the file descriptor for a byte within the page (same as
1388c2ecf20Sopenharmony_ci	 * used in mmap). If using UNMAP_NOTIFY_CLEAR_BYTE, this is the byte to
1398c2ecf20Sopenharmony_ci	 * be cleared. Otherwise, it can be any byte in the page whose
1408c2ecf20Sopenharmony_ci	 * notification we are adjusting.
1418c2ecf20Sopenharmony_ci	 */
1428c2ecf20Sopenharmony_ci	__u64 index;
1438c2ecf20Sopenharmony_ci	/* Action(s) to take on unmap */
1448c2ecf20Sopenharmony_ci	__u32 action;
1458c2ecf20Sopenharmony_ci	/* Event channel to notify */
1468c2ecf20Sopenharmony_ci	__u32 event_channel_port;
1478c2ecf20Sopenharmony_ci};
1488c2ecf20Sopenharmony_ci
1498c2ecf20Sopenharmony_cistruct gntdev_grant_copy_segment {
1508c2ecf20Sopenharmony_ci	union {
1518c2ecf20Sopenharmony_ci		void __user *virt;
1528c2ecf20Sopenharmony_ci		struct {
1538c2ecf20Sopenharmony_ci			grant_ref_t ref;
1548c2ecf20Sopenharmony_ci			__u16 offset;
1558c2ecf20Sopenharmony_ci			domid_t domid;
1568c2ecf20Sopenharmony_ci		} foreign;
1578c2ecf20Sopenharmony_ci	} source, dest;
1588c2ecf20Sopenharmony_ci	__u16 len;
1598c2ecf20Sopenharmony_ci
1608c2ecf20Sopenharmony_ci	__u16 flags;  /* GNTCOPY_* */
1618c2ecf20Sopenharmony_ci	__s16 status; /* GNTST_* */
1628c2ecf20Sopenharmony_ci};
1638c2ecf20Sopenharmony_ci
1648c2ecf20Sopenharmony_ci/*
1658c2ecf20Sopenharmony_ci * Copy between grant references and local buffers.
1668c2ecf20Sopenharmony_ci *
1678c2ecf20Sopenharmony_ci * The copy is split into @count @segments, each of which can copy
1688c2ecf20Sopenharmony_ci * to/from one grant reference.
1698c2ecf20Sopenharmony_ci *
1708c2ecf20Sopenharmony_ci * Each segment is similar to struct gnttab_copy in the hypervisor ABI
1718c2ecf20Sopenharmony_ci * except the local buffer is specified using a virtual address
1728c2ecf20Sopenharmony_ci * (instead of a GFN and offset).
1738c2ecf20Sopenharmony_ci *
1748c2ecf20Sopenharmony_ci * The local buffer may cross a Xen page boundary -- the driver will
1758c2ecf20Sopenharmony_ci * split segments into multiple ops if required.
1768c2ecf20Sopenharmony_ci *
1778c2ecf20Sopenharmony_ci * Returns 0 if all segments have been processed and @status in each
1788c2ecf20Sopenharmony_ci * segment is valid.  Note that one or more segments may have failed
1798c2ecf20Sopenharmony_ci * (status != GNTST_okay).
1808c2ecf20Sopenharmony_ci *
1818c2ecf20Sopenharmony_ci * If the driver had to split a segment into two or more ops, @status
1828c2ecf20Sopenharmony_ci * includes the status of the first failed op for that segment (or
1838c2ecf20Sopenharmony_ci * GNTST_okay if all ops were successful).
1848c2ecf20Sopenharmony_ci *
1858c2ecf20Sopenharmony_ci * If -1 is returned, the status of all segments is undefined.
1868c2ecf20Sopenharmony_ci *
1878c2ecf20Sopenharmony_ci * EINVAL: A segment has local buffers for both source and
1888c2ecf20Sopenharmony_ci *         destination.
1898c2ecf20Sopenharmony_ci * EINVAL: A segment crosses the boundary of a foreign page.
1908c2ecf20Sopenharmony_ci * EFAULT: A segment's local buffer is not accessible.
1918c2ecf20Sopenharmony_ci */
1928c2ecf20Sopenharmony_ci#define IOCTL_GNTDEV_GRANT_COPY \
1938c2ecf20Sopenharmony_ci	_IOC(_IOC_NONE, 'G', 8, sizeof(struct ioctl_gntdev_grant_copy))
1948c2ecf20Sopenharmony_cistruct ioctl_gntdev_grant_copy {
1958c2ecf20Sopenharmony_ci	unsigned int count;
1968c2ecf20Sopenharmony_ci	struct gntdev_grant_copy_segment __user *segments;
1978c2ecf20Sopenharmony_ci};
1988c2ecf20Sopenharmony_ci
1998c2ecf20Sopenharmony_ci/* Clear (set to zero) the byte specified by index */
2008c2ecf20Sopenharmony_ci#define UNMAP_NOTIFY_CLEAR_BYTE 0x1
2018c2ecf20Sopenharmony_ci/* Send an interrupt on the indicated event channel */
2028c2ecf20Sopenharmony_ci#define UNMAP_NOTIFY_SEND_EVENT 0x2
2038c2ecf20Sopenharmony_ci
2048c2ecf20Sopenharmony_ci/*
2058c2ecf20Sopenharmony_ci * Flags to be used while requesting memory mapping's backing storage
2068c2ecf20Sopenharmony_ci * to be allocated with DMA API.
2078c2ecf20Sopenharmony_ci */
2088c2ecf20Sopenharmony_ci
2098c2ecf20Sopenharmony_ci/*
2108c2ecf20Sopenharmony_ci * The buffer is backed with memory allocated with dma_alloc_wc.
2118c2ecf20Sopenharmony_ci */
2128c2ecf20Sopenharmony_ci#define GNTDEV_DMA_FLAG_WC		(1 << 0)
2138c2ecf20Sopenharmony_ci
2148c2ecf20Sopenharmony_ci/*
2158c2ecf20Sopenharmony_ci * The buffer is backed with memory allocated with dma_alloc_coherent.
2168c2ecf20Sopenharmony_ci */
2178c2ecf20Sopenharmony_ci#define GNTDEV_DMA_FLAG_COHERENT	(1 << 1)
2188c2ecf20Sopenharmony_ci
2198c2ecf20Sopenharmony_ci/*
2208c2ecf20Sopenharmony_ci * Create a dma-buf [1] from grant references @refs of count @count provided
2218c2ecf20Sopenharmony_ci * by the foreign domain @domid with flags @flags.
2228c2ecf20Sopenharmony_ci *
2238c2ecf20Sopenharmony_ci * By default dma-buf is backed by system memory pages, but by providing
2248c2ecf20Sopenharmony_ci * one of the GNTDEV_DMA_FLAG_XXX flags it can also be created as
2258c2ecf20Sopenharmony_ci * a DMA write-combine or coherent buffer, e.g. allocated with dma_alloc_wc/
2268c2ecf20Sopenharmony_ci * dma_alloc_coherent.
2278c2ecf20Sopenharmony_ci *
2288c2ecf20Sopenharmony_ci * Returns 0 if dma-buf was successfully created and the corresponding
2298c2ecf20Sopenharmony_ci * dma-buf's file descriptor is returned in @fd.
2308c2ecf20Sopenharmony_ci *
2318c2ecf20Sopenharmony_ci * [1] Documentation/driver-api/dma-buf.rst
2328c2ecf20Sopenharmony_ci */
2338c2ecf20Sopenharmony_ci
2348c2ecf20Sopenharmony_ci#define IOCTL_GNTDEV_DMABUF_EXP_FROM_REFS \
2358c2ecf20Sopenharmony_ci	_IOC(_IOC_NONE, 'G', 9, \
2368c2ecf20Sopenharmony_ci	     sizeof(struct ioctl_gntdev_dmabuf_exp_from_refs))
2378c2ecf20Sopenharmony_cistruct ioctl_gntdev_dmabuf_exp_from_refs {
2388c2ecf20Sopenharmony_ci	/* IN parameters. */
2398c2ecf20Sopenharmony_ci	/* Specific options for this dma-buf: see GNTDEV_DMA_FLAG_XXX. */
2408c2ecf20Sopenharmony_ci	__u32 flags;
2418c2ecf20Sopenharmony_ci	/* Number of grant references in @refs array. */
2428c2ecf20Sopenharmony_ci	__u32 count;
2438c2ecf20Sopenharmony_ci	/* OUT parameters. */
2448c2ecf20Sopenharmony_ci	/* File descriptor of the dma-buf. */
2458c2ecf20Sopenharmony_ci	__u32 fd;
2468c2ecf20Sopenharmony_ci	/* The domain ID of the grant references to be mapped. */
2478c2ecf20Sopenharmony_ci	__u32 domid;
2488c2ecf20Sopenharmony_ci	/* Variable IN parameter. */
2498c2ecf20Sopenharmony_ci	/* Array of grant references of size @count. */
2508c2ecf20Sopenharmony_ci	__u32 refs[1];
2518c2ecf20Sopenharmony_ci};
2528c2ecf20Sopenharmony_ci
2538c2ecf20Sopenharmony_ci/*
2548c2ecf20Sopenharmony_ci * This will block until the dma-buf with the file descriptor @fd is
2558c2ecf20Sopenharmony_ci * released. This is only valid for buffers created with
2568c2ecf20Sopenharmony_ci * IOCTL_GNTDEV_DMABUF_EXP_FROM_REFS.
2578c2ecf20Sopenharmony_ci *
2588c2ecf20Sopenharmony_ci * If within @wait_to_ms milliseconds the buffer is not released
2598c2ecf20Sopenharmony_ci * then -ETIMEDOUT error is returned.
2608c2ecf20Sopenharmony_ci * If the buffer with the file descriptor @fd does not exist or has already
2618c2ecf20Sopenharmony_ci * been released, then -ENOENT is returned. For valid file descriptors
2628c2ecf20Sopenharmony_ci * this must not be treated as error.
2638c2ecf20Sopenharmony_ci */
2648c2ecf20Sopenharmony_ci#define IOCTL_GNTDEV_DMABUF_EXP_WAIT_RELEASED \
2658c2ecf20Sopenharmony_ci	_IOC(_IOC_NONE, 'G', 10, \
2668c2ecf20Sopenharmony_ci	     sizeof(struct ioctl_gntdev_dmabuf_exp_wait_released))
2678c2ecf20Sopenharmony_cistruct ioctl_gntdev_dmabuf_exp_wait_released {
2688c2ecf20Sopenharmony_ci	/* IN parameters */
2698c2ecf20Sopenharmony_ci	__u32 fd;
2708c2ecf20Sopenharmony_ci	__u32 wait_to_ms;
2718c2ecf20Sopenharmony_ci};
2728c2ecf20Sopenharmony_ci
2738c2ecf20Sopenharmony_ci/*
2748c2ecf20Sopenharmony_ci * Import a dma-buf with file descriptor @fd and export granted references
2758c2ecf20Sopenharmony_ci * to the pages of that dma-buf into array @refs of size @count.
2768c2ecf20Sopenharmony_ci */
2778c2ecf20Sopenharmony_ci#define IOCTL_GNTDEV_DMABUF_IMP_TO_REFS \
2788c2ecf20Sopenharmony_ci	_IOC(_IOC_NONE, 'G', 11, \
2798c2ecf20Sopenharmony_ci	     sizeof(struct ioctl_gntdev_dmabuf_imp_to_refs))
2808c2ecf20Sopenharmony_cistruct ioctl_gntdev_dmabuf_imp_to_refs {
2818c2ecf20Sopenharmony_ci	/* IN parameters. */
2828c2ecf20Sopenharmony_ci	/* File descriptor of the dma-buf. */
2838c2ecf20Sopenharmony_ci	__u32 fd;
2848c2ecf20Sopenharmony_ci	/* Number of grant references in @refs array. */
2858c2ecf20Sopenharmony_ci	__u32 count;
2868c2ecf20Sopenharmony_ci	/* The domain ID for which references to be granted. */
2878c2ecf20Sopenharmony_ci	__u32 domid;
2888c2ecf20Sopenharmony_ci	/* Reserved - must be zero. */
2898c2ecf20Sopenharmony_ci	__u32 reserved;
2908c2ecf20Sopenharmony_ci	/* OUT parameters. */
2918c2ecf20Sopenharmony_ci	/* Array of grant references of size @count. */
2928c2ecf20Sopenharmony_ci	__u32 refs[1];
2938c2ecf20Sopenharmony_ci};
2948c2ecf20Sopenharmony_ci
2958c2ecf20Sopenharmony_ci/*
2968c2ecf20Sopenharmony_ci * This will close all references to the imported buffer with file descriptor
2978c2ecf20Sopenharmony_ci * @fd, so it can be released by the owner. This is only valid for buffers
2988c2ecf20Sopenharmony_ci * created with IOCTL_GNTDEV_DMABUF_IMP_TO_REFS.
2998c2ecf20Sopenharmony_ci */
3008c2ecf20Sopenharmony_ci#define IOCTL_GNTDEV_DMABUF_IMP_RELEASE \
3018c2ecf20Sopenharmony_ci	_IOC(_IOC_NONE, 'G', 12, \
3028c2ecf20Sopenharmony_ci	     sizeof(struct ioctl_gntdev_dmabuf_imp_release))
3038c2ecf20Sopenharmony_cistruct ioctl_gntdev_dmabuf_imp_release {
3048c2ecf20Sopenharmony_ci	/* IN parameters */
3058c2ecf20Sopenharmony_ci	__u32 fd;
3068c2ecf20Sopenharmony_ci	__u32 reserved;
3078c2ecf20Sopenharmony_ci};
3088c2ecf20Sopenharmony_ci
3098c2ecf20Sopenharmony_ci#endif /* __LINUX_PUBLIC_GNTDEV_H__ */
310