virtio/devices/virtio_gpu/messages/
resource_flush.rs1use kernel::ErrorCode;
6
7use super::super::helpers::copy_to_iter;
8use super::ctrl_header::{CtrlHeader, CtrlType};
9use super::{Rect, VirtIOGPUReq, VirtIOGPUResp};
10
11#[derive(Debug, Copy, Clone)]
12#[repr(C)]
13pub struct ResourceFlushReq {
14 pub ctrl_header: CtrlHeader,
15 pub r: Rect,
16 pub resource_id: u32,
17 pub padding: u32,
18}
19
20impl VirtIOGPUReq for ResourceFlushReq {
21 const ENCODED_SIZE: usize = core::mem::size_of::<Self>();
22 const CTRL_TYPE: CtrlType = CtrlType::CmdResourceFlush;
23 type ExpectedResponse = ResourceFlushResp;
24
25 fn write_to_byte_iter<'a>(
26 &self,
27 dst: &mut impl Iterator<Item = &'a mut u8>,
28 ) -> Result<(), ErrorCode> {
29 self.ctrl_header.write_to_byte_iter(dst)?;
33 self.r.write_to_byte_iter(dst)?;
34 copy_to_iter(dst, u32::to_le_bytes(self.resource_id).into_iter())?;
35 copy_to_iter(dst, u32::to_le_bytes(self.padding).into_iter())?;
36
37 Ok(())
38 }
39}
40
41#[derive(Debug, Copy, Clone)]
42#[repr(C)]
43pub struct ResourceFlushResp {
44 pub ctrl_header: CtrlHeader,
45}
46
47impl VirtIOGPUResp for ResourceFlushResp {
48 const ENCODED_SIZE: usize = core::mem::size_of::<Self>();
49 const EXPECTED_CTRL_TYPE: CtrlType = CtrlType::RespOkNoData;
50
51 fn from_byte_iter_post_checked_ctrl_header(
52 ctrl_header: CtrlHeader,
53 _src: &mut impl Iterator<Item = u8>,
54 ) -> Result<Self, ErrorCode> {
55 Ok(ResourceFlushResp { ctrl_header })
56 }
57}