diff options
author | Lingfeng Yang <lfy@google.com> | 2020-04-16 09:54:50 -0700 |
---|---|---|
committer | Alistair Delva <adelva@google.com> | 2020-04-22 13:34:25 -0700 |
commit | a54055e2f6f3197497eab163ec592f78698659af (patch) | |
tree | 91ab3ff69b5f605d4d322753d4352e390eb8257d | |
parent | 72d2272da9e19681961035653154622453105005 (diff) | |
download | cuttlefish-modules-a54055e2f6f3197497eab163ec592f78698659af.tar.gz |
CHROMIUM: virtio-gpu api: VIRTIO_GPU_F_MEMORY
Introduce the concept of memory types and memory regions to virtio-gpu.
Initially only memory regions composed of guest pages are supported
(VIRTIO_GPU_MEMORY_TRANSFER, pretty much like current backing storage
for resources). I expect support for other memory types will be added
later on.
VIRTIO_GPU_CMD_MEMORY_CREATE:
creates a new memory region.
VIRTIO_GPU_CMD_MEMORY_UNREF:
destroys a memory region.
VIRTIO_GPU_CMD_RESOURCE_CREATE_V2 :
new command to create resources. It will (a) allow to specify the
memory type, (b) adds support planar resources and (c) returns
alignment, stride and size of the resource planes. The later
will be needed in case we support mapping host resources into the
guest some day.
VIRTIO_GPU_CMD_RESOURCE_ATTACH_MEMORY:
Use memory region as backing storage for the given resource.
The existing VIRTIO_GPU_CMD_RESOURCE_DETACH_BACKING command
can be used to detach.
Motivation: This separates storage management from resource management.
It allows memory pooling (vulkan support will most likely need this).
It makes things a bit more flexible in general, for example we can
represent gem objects as memory regions even if we don't know the format
yet (happens on dma-buf import for example).
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
(cherry picked from commit 8eefa19d3e2ace7047c0082bf601c6f4f36f37fd)
Signed-off-by: Gurchetan Singh <gurchetansingh@chromium.org>
BUG=chromium:924405
TEST=compile
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/1591998
Reviewed-by: Robert Tarasov <tutankhamen@chromium.org>
Commit-Queue: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: Gurchetan Singh <gurchetansingh@chromium.org>
[rebase54(groeck): Context conflicts
Note that this patch does not match the patch with the same subject
on the kernel mailing list (https://patchwork.kernel.org/patch/10893777/).
No idea if that means that this version is more recent or older or
inofficial, or that it was modified locally.
]
Signed-off-by: Guenter Roeck <groeck@chromium.org>
Bug: 153580313
Signed-off-by: Lingfeng Yang <lfy@google.com>
Change-Id: I258a3a735678ddefd75b968d3f6874f394ac3e46
-rw-r--r-- | uapi/linux/virtio_gpu.h | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/uapi/linux/virtio_gpu.h b/uapi/linux/virtio_gpu.h index 570a234..e0801c8 100644 --- a/uapi/linux/virtio_gpu.h +++ b/uapi/linux/virtio_gpu.h @@ -51,6 +51,13 @@ */ #define VIRTIO_GPU_F_EDID 1 +/* + * VIRTIO_GPU_CMD_MEMORY_CREATE + * VIRTIO_GPU_CMD_MEMORY_UNREF + * VIRTIO_GPU_CMD_RESOURCE_CREATE_V2 + * VIRTIO_GPU_CMD_RESOURCE_ATTACH_MEMORY + */ +#define VIRTIO_GPU_F_MEMORY 2 enum virtio_gpu_ctrl_type { VIRTIO_GPU_UNDEFINED = 0, @@ -66,6 +73,10 @@ enum virtio_gpu_ctrl_type { VIRTIO_GPU_CMD_GET_CAPSET_INFO, VIRTIO_GPU_CMD_GET_CAPSET, VIRTIO_GPU_CMD_GET_EDID, + VIRTIO_GPU_CMD_MEMORY_CREATE, + VIRTIO_GPU_CMD_MEMORY_UNREF, + VIRTIO_GPU_CMD_RESOURCE_ATTACH_MEMORY, + VIRTIO_GPU_CMD_RESOURCE_CREATE_V2, /* 3d commands */ VIRTIO_GPU_CMD_CTX_CREATE = 0x0200, @@ -88,6 +99,7 @@ enum virtio_gpu_ctrl_type { VIRTIO_GPU_RESP_OK_CAPSET, VIRTIO_GPU_RESP_OK_EDID, VIRTIO_GPU_RESP_OK_RESOURCE_PLANE_INFO, + VIRTIO_GPU_RESP_OK_RESOURCE_INFO, /* error responses */ VIRTIO_GPU_RESP_ERR_UNSPEC = 0x1200, @@ -96,6 +108,22 @@ enum virtio_gpu_ctrl_type { VIRTIO_GPU_RESP_ERR_INVALID_RESOURCE_ID, VIRTIO_GPU_RESP_ERR_INVALID_CONTEXT_ID, VIRTIO_GPU_RESP_ERR_INVALID_PARAMETER, + 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_MEMORY_CREATE. + */ + VIRTIO_GPU_MEMORY_TRANSFER, }; #define VIRTIO_GPU_FLAG_FENCE (1 << 0) @@ -147,6 +175,7 @@ struct virtio_gpu_resource_unref { struct virtio_gpu_resource_create_2d { struct virtio_gpu_ctrl_hdr hdr; __le32 resource_id; + /* memory_type is VIRTIO_GPU_MEMORY_TRANSFER */ __le32 format; __le32 width; __le32 height; @@ -188,6 +217,7 @@ struct virtio_gpu_resource_attach_backing { struct virtio_gpu_ctrl_hdr hdr; __le32 resource_id; __le32 nr_entries; + /* struct virtio_gpu_mem_entry entries follow here */ }; /* VIRTIO_GPU_CMD_RESOURCE_DETACH_BACKING */ @@ -231,6 +261,7 @@ 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; @@ -271,6 +302,57 @@ struct virtio_gpu_cmd_submit { __le32 padding; }; +/* VIRTIO_GPU_CMD_MEMORY_CREATE */ +struct virtio_gpu_cmd_memory_create { + struct virtio_gpu_ctrl_hdr hdr; + __le32 memory_id; + __le32 memory_type; + __le32 flags; + __le32 nr_entries; + /* struct virtio_gpu_mem_entry entries follow here */ +}; + +/* VIRTIO_GPU_CMD_MEMORY_UNREF */ +struct virtio_gpu_cmd_memory_unref { + struct virtio_gpu_ctrl_hdr hdr; + __le32 memory_id; + __le32 padding; +}; + +/* VIRTIO_GPU_CMD_RESOURCE_ATTACH_MEMORY */ +struct virtio_gpu_cmd_resource_attach_memory { + struct virtio_gpu_ctrl_hdr hdr; + __le32 resource_id; + __le32 memory_id; + __le64 offset[4]; +}; + +/* VIRTIO_GPU_CMD_RESOURCE_CREATE_V2 */ +struct virtio_gpu_cmd_resource_create_v2 { + struct virtio_gpu_ctrl_hdr hdr; + __le32 resource_id; + __le32 memory_type; + __le32 format; + __le32 width; + __le32 height; + /* 3d only */ + __le32 target; + __le32 bind; + __le32 depth; + __le32 array_size; + __le32 last_level; + __le32 nr_samples; + __le32 flags; +}; + +/* VIRTIO_GPU_RESP_OK_RESOURCE_INFO */ +struct virtio_gpu_resp_resource_info { + struct virtio_gpu_ctrl_hdr hdr; + __le32 align[4]; + __le32 stride[4]; + __le32 size[4]; +}; + #define VIRTIO_GPU_CAPSET_VIRGL 1 #define VIRTIO_GPU_CAPSET_VIRGL2 2 |