summaryrefslogtreecommitdiff
path: root/include/uapi
diff options
context:
space:
mode:
authorLingfeng Yang <lfy@google.com>2020-04-16 12:19:08 -0700
committerAlistair Delva <adelva@google.com>2020-04-17 15:31:01 -0700
commit4d701a3899580b291122ab7b147bc20981afd349 (patch)
tree624cbace0a0d4548062ccdbced4944ec376af29a /include/uapi
parent8c6da983ea97c2d9ee39205e4e6541928b5b53e1 (diff)
CHROMIUM: drm/virtio: rebase zero-copy patches to virgl/drm-misc-next
* Adds RESOURCE_MAP/RESOURCE_UNMAP * Removes guest_memory_type/guest_caching_type in favor of a bitmask * Removes EXECBUFFER_v2 until Q3 * Renames HOST_COHERENT to HOST_VISIBLE BUG=chromium:924405 TEST=compile Test: - dEQP-VK.smoke* pass w/ gfxstream and host coherent memory enabled - launch_cvd with 2d, virgl, and gfxstream modes work with current - launch_cvd with 2d, virgl, and gfxstream modes work w/ crosvm modified for host coherent memory (https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/2035595) Signed-off-by: Lingfeng Yang <lfy@google.com> Bug: 153580313 Change-Id: I04052c3d164c77c713bbc7251c357fd43653fa50
Diffstat (limited to 'include/uapi')
-rw-r--r--include/uapi/drm/virtgpu_drm.h73
-rw-r--r--include/uapi/linux/virtio_gpu.h146
2 files changed, 92 insertions, 127 deletions
diff --git a/include/uapi/drm/virtgpu_drm.h b/include/uapi/drm/virtgpu_drm.h
index 8211b48f2241..6b9c8a5f87e7 100644
--- a/include/uapi/drm/virtgpu_drm.h
+++ b/include/uapi/drm/virtgpu_drm.h
@@ -46,9 +46,7 @@ extern "C" {
#define DRM_VIRTGPU_TRANSFER_TO_HOST 0x07
#define DRM_VIRTGPU_WAIT 0x08
#define DRM_VIRTGPU_GET_CAPS 0x09
-#define DRM_VIRTGPU_RESOURCE_CREATE_V2 0x0a
-#define DRM_VIRTGPU_ALLOCATION_METADATA_REQUEST 0x0b
-#define DRM_VIRTGPU_ALLOCATION_METADATA_RESPONSE 0x0c
+#define DRM_VIRTGPU_RESOURCE_CREATE_BLOB 0x0a
#define VIRTGPU_EXECBUF_FENCE_FD_IN 0x01
#define VIRTGPU_EXECBUF_FENCE_FD_OUT 0x02
@@ -74,19 +72,8 @@ struct drm_virtgpu_execbuffer {
#define VIRTGPU_PARAM_3D_FEATURES 1 /* do we have 3D features in the hw */
#define VIRTGPU_PARAM_CAPSET_QUERY_FIX 2 /* do we have the capset fix */
-#define VIRTGPU_PARAM_RESOURCE_V2 3
-#define VIRTGPU_PARAM_SHARED_GUEST 4
-#define VIRTGPU_PARAM_HOST_COHERENT 5
-
-#define VIRTGPU_MEMORY_UNDEFINED 0
-#define VIRTGPU_MEMORY_TRANSFER 1
-#define VIRTGPU_MEMORY_SHARED_GUEST 2
-#define VIRTGPU_MEMORY_HOST_COHERENT 3
-
-#define VIRTGPU_UNDEFINED_CACHING 0
-#define VIRTGPU_CACHED 1
-#define VIRTGPU_WRITE_COMBINE 2
-#define VIRTGPU_UNCACHED 3
+#define VIRTGPU_PARAM_RESOURCE_BLOB 3 /* DRM_VIRTGPU_RESOURCE_CREATE_BLOB */
+#define VIRTGPU_PARAM_HOST_VISIBLE 4
struct drm_virtgpu_getparam {
__u64 param;
@@ -162,29 +149,27 @@ struct drm_virtgpu_get_caps {
__u32 pad;
};
-struct drm_virtgpu_resource_create_v2 {
- __u32 resource_id;
- __u32 guest_memory_type;
- __u32 caching_type;
- __u32 args_size;
- __u32 gem_handle;
- __u64 size;
- __u64 args; /* void */
-};
+struct drm_virtgpu_resource_create_blob {
+#define VIRTGPU_RES_BLOB_GUEST_MASK 0x000f
+#define VIRTGPU_RES_BLOB_GUEST_NONE 0x0000
+#define VIRTGPU_RES_BLOB_GUEST_SYSTEM 0x0001
-struct drm_virtgpu_allocation_metadata_request {
- __u32 request_id;
- __u32 pad;
- __u32 request_size;
- __u32 response_size;
- __u64 request; /* void */
-};
+#define VIRTGPU_RES_BLOB_HOST_MASK 0x00f0
+#define VIRTGPU_RES_BLOB_HOST_NONE 0x0000
+#define VIRTGPU_RES_BLOB_HOST 0x0010
-struct drm_virtgpu_allocation_metadata_response {
- __u32 request_id;
- __u32 pad;
- __u32 response_size;
- __u64 response; /* void */
+#define VIRTGPU_RES_BLOB_USE_MASK 0x0f00
+#define VIRTGPU_RES_BLOB_USE_NONE 0x0000
+#define VIRTGPU_RES_BLOB_USE_MAPPABLE 0x0100
+#define VIRTGPU_RES_BLOB_USE_SHAREABLE 0x0200
+#define VIRTGPU_RES_BLOB_USE_CROSS_DEVICE 0x0400
+ __u32 flags;
+ __u32 bo_handle;
+ __u32 res_handle;
+ __u32 cmd_size;
+ __u64 cmd;
+ __u64 size;
+ __u64 memory_id;
};
#define DRM_IOCTL_VIRTGPU_MAP \
@@ -222,17 +207,9 @@ struct drm_virtgpu_allocation_metadata_response {
DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_GET_CAPS, \
struct drm_virtgpu_get_caps)
-#define DRM_IOCTL_VIRTGPU_RESOURCE_CREATE_V2 \
- DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_RESOURCE_CREATE_V2, \
- struct drm_virtgpu_resource_create_v2)
-
-#define DRM_IOCTL_VIRTGPU_ALLOCATION_METADATA_REQUEST \
- DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_ALLOCATION_METADATA_REQUEST, \
- struct drm_virtgpu_allocation_metadata_request)
-
-#define DRM_IOCTL_VIRTGPU_ALLOCATION_METADATA_RESPONSE \
- DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_ALLOCATION_METADATA_RESPONSE, \
- struct drm_virtgpu_allocation_metadata_response)
+#define DRM_IOCTL_VIRTGPU_RESOURCE_CREATE_BLOB \
+ DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_RESOURCE_CREATE_BLOB, \
+ struct drm_virtgpu_resource_create_blob)
#if defined(__cplusplus)
}
diff --git a/include/uapi/linux/virtio_gpu.h b/include/uapi/linux/virtio_gpu.h
index 3c3bb3342b7b..cd303076225e 100644
--- a/include/uapi/linux/virtio_gpu.h
+++ b/include/uapi/linux/virtio_gpu.h
@@ -54,20 +54,20 @@
* VIRTIO_GPU_CMD_RESOURCE_ASSIGN_UUID
*/
#define VIRTIO_GPU_F_RESOURCE_UUID 2
-
/*
- * VIRTIO_GPU_CMD_ALLOCATION_METADATA
- * VIRTIO_GPU_CMD_RESOURCE_CREATE_V2
+ * VIRTIO_GPU_CMD_RESOURCE_CREATE_BLOB
*/
-#define VIRTIO_GPU_F_RESOURCE_V2 3
+#define VIRTIO_GPU_F_RESOURCE_BLOB 3
/*
- * Ability to turn guest pages into host buffers.
+ * VIRTIO_GPU_CMD_RESOURCE_MAP
+ * VIRTIO_GPU_CMD_RESOURCE_UMAP
*/
-#define VIRTIO_GPU_F_SHARED_GUEST 4
+#define VIRTIO_GPU_F_HOST_VISIBLE 4
/*
- * Can inject host pages into guest.
+ * VIRTIO_GPU_CMD_CTX_CREATE_V2
*/
-#define VIRTIO_GPU_F_HOST_COHERENT 5
+#define VIRTIO_GPU_F_VULKAN 5
+
enum virtio_gpu_ctrl_type {
VIRTIO_GPU_UNDEFINED = 0,
@@ -94,9 +94,9 @@ enum virtio_gpu_ctrl_type {
VIRTIO_GPU_CMD_TRANSFER_TO_HOST_3D,
VIRTIO_GPU_CMD_TRANSFER_FROM_HOST_3D,
VIRTIO_GPU_CMD_SUBMIT_3D,
- VIRTIO_GPU_CMD_RESOURCE_CREATE_V2,
- VIRTIO_GPU_CMD_RESOURCE_CREATE_V2_UNREF,
- VIRTIO_GPU_CMD_ALLOCATION_METADATA,
+ VIRTIO_GPU_CMD_RESOURCE_CREATE_BLOB,
+ VIRTIO_GPU_CMD_RESOURCE_MAP,
+ VIRTIO_GPU_CMD_RESOURCE_UNMAP,
/* cursor commands */
VIRTIO_GPU_CMD_UPDATE_CURSOR = 0x0300,
@@ -109,14 +109,13 @@ enum virtio_gpu_ctrl_type {
VIRTIO_GPU_RESP_OK_CAPSET,
VIRTIO_GPU_RESP_OK_EDID,
VIRTIO_GPU_RESP_OK_RESOURCE_UUID,
+ VIRTIO_GPU_RESP_OK_MAP_INFO,
/* CHROMIUM: legacy responses */
VIRTIO_GPU_RESP_OK_RESOURCE_PLANE_INFO_LEGACY = 0x1104,
- VIRTIO_GPU_RESP_OK_ALLOCATION_METADATA_LEGACY = 0x1106,
/* CHROMIUM: success responses */
VIRTIO_GPU_RESP_OK_RESOURCE_PLANE_INFO = 0x11FF,
- VIRTIO_GPU_RESP_OK_ALLOCATION_METADATA = 0x11FE,
/* error responses */
VIRTIO_GPU_RESP_ERR_UNSPEC = 0x1200,
@@ -128,30 +127,6 @@ enum virtio_gpu_ctrl_type {
VIRTIO_GPU_RESP_ERR_INVALID_MEMORY_ID,
};
-enum virtio_gpu_memory_type {
- VIRTIO_GPU_MEMORY_UNDEFINED = 0,
-
- /*
- * Traditional virtio-gpu memory.
- * Has both host and guest side storage.
- *
- * VIRTIO_GPU_CMD_TRANSFER_* commands are used
- * to copy between guest and host storage.
- *
- * Created using VIRTIO_GPU_CMD_RESOURCE_CREATE_V2.
- */
- VIRTIO_GPU_MEMORY_TRANSFER,
- VIRTIO_GPU_MEMORY_SHARED_GUEST,
- VIRTIO_GPU_MEMORY_HOST_COHERENT,
-};
-
-enum virtio_gpu_caching_type {
- VIRTIO_GPU_UNDEFINED_CACHING = 0,
- VIRTIO_GPU_CACHED,
- VIRTIO_GPU_WRITE_COMBINE,
- VIRTIO_GPU_UNCACHED,
-};
-
#define VIRTIO_GPU_FLAG_FENCE (1 << 0)
struct virtio_gpu_ctrl_hdr {
@@ -287,7 +262,6 @@ struct virtio_gpu_transfer_host_3d {
struct virtio_gpu_resource_create_3d {
struct virtio_gpu_ctrl_hdr hdr;
__le32 resource_id;
- /* memory_type is VIRTIO_GPU_MEMORY_TRANSFER */
__le32 target;
__le32 format;
__le32 bind;
@@ -328,47 +302,6 @@ struct virtio_gpu_cmd_submit {
__le32 padding;
};
-/* VIRTIO_GPU_CMD_RESOURCE_CREATE_V2 */
-struct virtio_gpu_resource_create_v2 {
- struct virtio_gpu_ctrl_hdr hdr;
- __le32 resource_id;
- __le32 guest_memory_type;
- __le32 caching_type;
- __le32 pad;
- __le64 size;
- __le64 pci_addr;
- __le32 args_size;
- __le32 nr_entries;
- /* ('nr_entries' * struct virtio_gpu_mem_entry) + 'args_size'
- * bytes follow here.
- */
-};
-
-/* VIRTIO_GPU_CMD_RESOURCE_CREATE_V2_UNREF */
-struct virtio_gpu_resource_v2_unref {
- struct virtio_gpu_ctrl_hdr hdr;
- __le32 resource_id;
- __le32 padding;
-};
-
-/* VIRTIO_GPU_CMD_RESOURCE_CREATE_V2 */
-struct virtio_gpu_allocation_metadata {
- struct virtio_gpu_ctrl_hdr hdr;
- __le32 request_id;
- __le32 pad;
- __le32 request_size;
- __le32 response_size;
- /* 'request_size' bytes go here */
-};
-
-/* VIRTIO_GPU_RESP_OK_ALLOCATION_METADATA */
-struct virtio_gpu_resp_allocation_metadata {
- struct virtio_gpu_ctrl_hdr hdr;
- __le32 request_id;
- __le32 response_size;
- /* 'response_size' bytes go here */
-};
-
#define VIRTIO_GPU_CAPSET_VIRGL 1
/* VIRTIO_GPU_CMD_GET_CAPSET_INFO */
@@ -460,4 +393,59 @@ struct virtio_gpu_resp_resource_uuid {
__u8 uuid[16];
};
+
+/* VIRTIO_GPU_CMD_RESOURCE_CREATE_BLOB */
+struct virtio_gpu_resource_create_blob {
+ struct virtio_gpu_ctrl_hdr hdr;
+ __le32 resource_id;
+#define VIRTIO_GPU_RES_BLOB_GUEST_MASK 0x000f
+#define VIRTIO_GPU_RES_BLOB_GUEST_NONE 0x0000
+#define VIRTIO_GPU_RES_BLOB_GUEST_SYSTEM 0x0001
+
+#define VIRTIO_GPU_RES_BLOB_HOST_MASK 0x00f0
+#define VIRTIO_GPU_RES_BLOB_HOST_NONE 0x0000
+#define VIRTIO_GPU_RES_BLOB_HOST 0x0010
+
+#define VIRTIO_GPU_RES_BLOB_USE_MASK 0x0f00
+#define VIRTIO_GPU_RES_BLOB_USE_NONE 0x0000
+#define VIRTIO_GPU_RES_BLOB_USE_MAPPABLE 0x0100
+#define VIRTIO_GPU_RES_BLOB_USE_SHAREABLE 0x0200
+#define VIRTIO_GPU_RES_BLOB_USE_CROSS_DEVICE 0x0400
+ __le32 flags;
+ __le64 size;
+ __le64 memory_id;
+ __le32 nr_entries;
+ __le32 padding;
+ /*
+ * sizeof(nr_entries * virtio_gpu_mem_entry) bytes follow
+ */
+};
+
+/* VIRTIO_GPU_CMD_RESOURCE_MAP */
+struct virtio_gpu_resource_map {
+ struct virtio_gpu_ctrl_hdr hdr;
+ __le32 resource_id;
+ __le32 padding;
+ __le64 offset;
+};
+
+/* VIRTIO_GPU_RESP_OK_MAP_INFO */
+#define VIRTIO_GPU_MAP_CACHE_MASK 0x0f
+#define VIRTIO_GPU_MAP_CACHE_NONE 0x00
+#define VIRTIO_GPU_MAP_CACHE_CACHED 0x01
+#define VIRTIO_GPU_MAP_CACHE_UNCACHED 0x02
+#define VIRTIO_GPU_MAP_CACHE_WC 0x03
+struct virtio_gpu_resp_map_info {
+ struct virtio_gpu_ctrl_hdr hdr;
+ __u32 map_flags;
+ __u32 padding;
+};
+
+/* VIRTIO_GPU_CMD_RESOURCE_UNMAP */
+struct virtio_gpu_resource_unmap {
+ struct virtio_gpu_ctrl_hdr hdr;
+ __le32 resource_id;
+ __le32 padding;
+};
+
#endif