drm-uapi: virtgpu_drm.h: resource create blob + host visible memory region
authorGurchetan Singh <gurchetansingh@chromium.org>
Tue, 28 Apr 2020 23:45:30 +0000 (16:45 -0700)
committerGurchetan Singh <gurchetansingh@chromium.org>
Thu, 1 Oct 2020 23:16:07 +0000 (16:16 -0700)
Matches current API at virgl/resource_blob. Of course, don't
submit until this lands in drm.

Reviewed-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4821>

include/drm-uapi/virtgpu_drm.h

index f06a789..b9ec26e 100644 (file)
@@ -46,6 +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_BLOB 0x0a
 
 #define VIRTGPU_EXECBUF_FENCE_FD_IN    0x01
 #define VIRTGPU_EXECBUF_FENCE_FD_OUT   0x02
@@ -71,6 +72,9 @@ 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_BLOB 3 /* DRM_VIRTGPU_RESOURCE_CREATE_BLOB */
+#define VIRTGPU_PARAM_HOST_VISIBLE 4 /* Host blob resources are mappable */
+#define VIRTGPU_PARAM_CROSS_DEVICE 5 /* Cross virtio-device resource sharing  */
 
 struct drm_virtgpu_getparam {
        __u64 param;
@@ -100,7 +104,7 @@ struct drm_virtgpu_resource_info {
        __u32 bo_handle;
        __u32 res_handle;
        __u32 size;
-       __u32 stride;
+       __u32 blob_mem;
 };
 
 struct drm_virtgpu_3d_box {
@@ -117,6 +121,8 @@ struct drm_virtgpu_3d_transfer_to_host {
        struct drm_virtgpu_3d_box box;
        __u32 level;
        __u32 offset;
+       __u32 stride;
+       __u32 layer_stride;
 };
 
 struct drm_virtgpu_3d_transfer_from_host {
@@ -124,6 +130,8 @@ struct drm_virtgpu_3d_transfer_from_host {
        struct drm_virtgpu_3d_box box;
        __u32 level;
        __u32 offset;
+       __u32 stride;
+       __u32 layer_stride;
 };
 
 #define VIRTGPU_WAIT_NOWAIT 1 /* like it */
@@ -140,6 +148,31 @@ struct drm_virtgpu_get_caps {
        __u32 pad;
 };
 
+struct drm_virtgpu_resource_create_blob {
+#define VIRTGPU_BLOB_MEM_GUEST             0x0001
+#define VIRTGPU_BLOB_MEM_HOST3D            0x0002
+#define VIRTGPU_BLOB_MEM_HOST3D_GUEST      0x0003
+
+#define VIRTGPU_BLOB_FLAG_USE_MAPPABLE     0x0001
+#define VIRTGPU_BLOB_FLAG_USE_SHAREABLE    0x0002
+#define VIRTGPU_BLOB_FLAG_USE_CROSS_DEVICE 0x0004
+       /* zero is invalid blob_mem */
+       __u32 blob_mem;
+       __u32 blob_flags;
+       __u32 bo_handle;
+       __u32 res_handle;
+       __u64 size;
+
+       /*
+        * for 3D contexts with VIRTGPU_BLOB_MEM_HOST3D_GUEST and
+        * VIRTGPU_BLOB_MEM_HOST3D otherwise, must be zero.
+        */
+       __u32 pad;
+       __u32 cmd_size;
+       __u64 cmd;
+       __u64 blob_id;
+};
+
 #define DRM_IOCTL_VIRTGPU_MAP \
        DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_MAP, struct drm_virtgpu_map)
 
@@ -175,6 +208,10 @@ struct drm_virtgpu_get_caps {
        DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_GET_CAPS, \
        struct drm_virtgpu_get_caps)
 
+#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)
 }
 #endif