summary refs log tree commit diff
path: root/devices/src/virtio/gpu/protocol.rs
diff options
context:
space:
mode:
authorGurchetan Singh <gurchetansingh@chromium.org>2019-04-30 10:22:15 -0700
committerCommit Bot <commit-bot@chromium.org>2019-10-01 07:53:34 +0000
commit719f2831ed394bf4f3fd777938261bda493b05fc (patch)
tree9397041cb0b3db2df13fee96dec621db7a691d14 /devices/src/virtio/gpu/protocol.rs
parent5b636babc1e83b7187ef72bd85b3a3bdc2e5d03f (diff)
downloadcrosvm-719f2831ed394bf4f3fd777938261bda493b05fc.tar
crosvm-719f2831ed394bf4f3fd777938261bda493b05fc.tar.gz
crosvm-719f2831ed394bf4f3fd777938261bda493b05fc.tar.bz2
crosvm-719f2831ed394bf4f3fd777938261bda493b05fc.tar.lz
crosvm-719f2831ed394bf4f3fd777938261bda493b05fc.tar.xz
crosvm-719f2831ed394bf4f3fd777938261bda493b05fc.tar.zst
crosvm-719f2831ed394bf4f3fd777938261bda493b05fc.zip
virtio-gpu: handle VIRTIO_GPU_CMD_RESOURCE_CREATE_V2
BUG=chromium:924405
TEST=compile

Change-Id: I57379452f6805aaf429c268b95ddd3aecd07e90e
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1591463
Reviewed-by: Zach Reizner <zachr@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Tested-by: Gurchetan Singh <gurchetansingh@chromium.org>
Commit-Queue: Gurchetan Singh <gurchetansingh@chromium.org>
Diffstat (limited to 'devices/src/virtio/gpu/protocol.rs')
-rw-r--r--devices/src/virtio/gpu/protocol.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/devices/src/virtio/gpu/protocol.rs b/devices/src/virtio/gpu/protocol.rs
index 9c3b112..c6773dd 100644
--- a/devices/src/virtio/gpu/protocol.rs
+++ b/devices/src/virtio/gpu/protocol.rs
@@ -86,6 +86,8 @@ pub const VIRTIO_GPU_UNCACHED: u32 = 3;
 
 /* Limits on virtio-gpu stream (not upstreamed) */
 pub const VIRTIO_GPU_MAX_BLOB_ARGUMENT_SIZE: u32 = 4096;
+/* This matches the limit in udmabuf.c */
+pub const VIRTIO_GPU_MAX_IOVEC_ENTRIES: u32 = 1024;
 
 pub fn virtio_gpu_cmd_str(cmd: u32) -> &'static str {
     match cmd {
@@ -515,6 +517,32 @@ pub struct virtio_gpu_resp_allocation_metadata {
 
 unsafe impl DataInit for virtio_gpu_resp_allocation_metadata {}
 
+#[derive(Copy, Clone, Debug, Default)]
+#[repr(C)]
+pub struct virtio_gpu_resource_create_v2 {
+    pub hdr: virtio_gpu_ctrl_hdr,
+    pub resource_id: Le32,
+    pub guest_memory_type: Le32,
+    pub guest_caching_type: Le32,
+    pub padding: Le32,
+    pub size: Le64,
+    pub pci_addr: Le64,
+    pub args_size: Le32,
+    pub nr_entries: Le32,
+}
+
+unsafe impl DataInit for virtio_gpu_resource_create_v2 {}
+
+#[derive(Copy, Clone, Debug, Default)]
+#[repr(C)]
+pub struct virtio_gpu_resource_v2_unref {
+    pub hdr: virtio_gpu_ctrl_hdr,
+    pub resource_id: Le32,
+    pub padding: Le32,
+}
+
+unsafe impl DataInit for virtio_gpu_resource_v2_unref {}
+
 /* simple formats for fbcon/X use */
 pub const VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM: u32 = 1;
 pub const VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM: u32 = 2;
@@ -546,6 +574,8 @@ pub enum GpuCommand {
     TransferToHost3d(virtio_gpu_transfer_host_3d),
     TransferFromHost3d(virtio_gpu_transfer_host_3d),
     CmdSubmit3d(virtio_gpu_cmd_submit),
+    ResourceCreateV2(virtio_gpu_resource_create_v2),
+    ResourceV2Unref(virtio_gpu_resource_v2_unref),
     AllocationMetadata(virtio_gpu_allocation_metadata),
     UpdateCursor(virtio_gpu_update_cursor),
     MoveCursor(virtio_gpu_update_cursor),
@@ -604,6 +634,8 @@ impl fmt::Debug for GpuCommand {
             TransferToHost3d(_info) => f.debug_struct("TransferToHost3d").finish(),
             TransferFromHost3d(_info) => f.debug_struct("TransferFromHost3d").finish(),
             CmdSubmit3d(_info) => f.debug_struct("CmdSubmit3d").finish(),
+            ResourceCreateV2(_info) => f.debug_struct("ResourceCreateV2").finish(),
+            ResourceV2Unref(_info) => f.debug_struct("ResourceV2Unref").finish(),
             AllocationMetadata(_info) => f.debug_struct("AllocationMetadata").finish(),
             UpdateCursor(_info) => f.debug_struct("UpdateCursor").finish(),
             MoveCursor(_info) => f.debug_struct("MoveCursor").finish(),
@@ -635,6 +667,8 @@ impl GpuCommand {
             VIRTIO_GPU_CMD_TRANSFER_TO_HOST_3D => TransferToHost3d(cmd.read_obj()?),
             VIRTIO_GPU_CMD_TRANSFER_FROM_HOST_3D => TransferFromHost3d(cmd.read_obj()?),
             VIRTIO_GPU_CMD_SUBMIT_3D => CmdSubmit3d(cmd.read_obj()?),
+            VIRTIO_GPU_CMD_RESOURCE_CREATE_V2 => ResourceCreateV2(cmd.read_obj()?),
+            VIRTIO_GPU_CMD_RESOURCE_CREATE_V2_UNREF => ResourceV2Unref(cmd.read_obj()?),
             VIRTIO_GPU_CMD_ALLOCATION_METADATA => AllocationMetadata(cmd.read_obj()?),
             VIRTIO_GPU_CMD_UPDATE_CURSOR => UpdateCursor(cmd.read_obj()?),
             VIRTIO_GPU_CMD_MOVE_CURSOR => MoveCursor(cmd.read_obj()?),
@@ -664,6 +698,8 @@ impl GpuCommand {
             TransferToHost3d(info) => &info.hdr,
             TransferFromHost3d(info) => &info.hdr,
             CmdSubmit3d(info) => &info.hdr,
+            ResourceCreateV2(info) => &info.hdr,
+            ResourceV2Unref(info) => &info.hdr,
             AllocationMetadata(info) => &info.hdr,
             UpdateCursor(info) => &info.hdr,
             MoveCursor(info) => &info.hdr,