xref: /aosp_15_r20/external/crosvm/devices/src/virtio/device_constants.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2022 The ChromiumOS Authors
2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file.
4*bb4ee6a4SAndroid Build Coastguard Worker 
5*bb4ee6a4SAndroid Build Coastguard Worker //! Contains constants and struct definitions used for implementing vhost-user
6*bb4ee6a4SAndroid Build Coastguard Worker //! frontend devices without compile-time dependencies on their corresponding
7*bb4ee6a4SAndroid Build Coastguard Worker //! backend devices.
8*bb4ee6a4SAndroid Build Coastguard Worker 
9*bb4ee6a4SAndroid Build Coastguard Worker use data_model::Le16;
10*bb4ee6a4SAndroid Build Coastguard Worker use data_model::Le32;
11*bb4ee6a4SAndroid Build Coastguard Worker use data_model::Le64;
12*bb4ee6a4SAndroid Build Coastguard Worker use serde::Deserialize;
13*bb4ee6a4SAndroid Build Coastguard Worker use serde::Serialize;
14*bb4ee6a4SAndroid Build Coastguard Worker use zerocopy::AsBytes;
15*bb4ee6a4SAndroid Build Coastguard Worker use zerocopy::FromBytes;
16*bb4ee6a4SAndroid Build Coastguard Worker use zerocopy::FromZeroes;
17*bb4ee6a4SAndroid Build Coastguard Worker 
18*bb4ee6a4SAndroid Build Coastguard Worker /// Virtio feature bits that are specific to a device type.
19*bb4ee6a4SAndroid Build Coastguard Worker ///
20*bb4ee6a4SAndroid Build Coastguard Worker /// Per virtio 1.2 spec, features 0 to 23 and 50 to 127 are feature bits for the specific device
21*bb4ee6a4SAndroid Build Coastguard Worker /// type. Features beyond 63 are not representable in the current `u64` type used to store sets of
22*bb4ee6a4SAndroid Build Coastguard Worker /// features, so bits 64 to 127 are not included in this mask.
23*bb4ee6a4SAndroid Build Coastguard Worker pub const VIRTIO_DEVICE_TYPE_SPECIFIC_FEATURES_MASK: u64 = 0xfffc_0000_00ff_ffff;
24*bb4ee6a4SAndroid Build Coastguard Worker 
25*bb4ee6a4SAndroid Build Coastguard Worker pub mod block {
26*bb4ee6a4SAndroid Build Coastguard Worker     use super::*;
27*bb4ee6a4SAndroid Build Coastguard Worker 
28*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_BLK_T_IN: u32 = 0;
29*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_BLK_T_OUT: u32 = 1;
30*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_BLK_T_FLUSH: u32 = 4;
31*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_BLK_T_GET_ID: u32 = 8;
32*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_BLK_T_DISCARD: u32 = 11;
33*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_BLK_T_WRITE_ZEROES: u32 = 13;
34*bb4ee6a4SAndroid Build Coastguard Worker 
35*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_BLK_S_OK: u8 = 0;
36*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_BLK_S_IOERR: u8 = 1;
37*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_BLK_S_UNSUPP: u8 = 2;
38*bb4ee6a4SAndroid Build Coastguard Worker 
39*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_BLK_F_SEG_MAX: u32 = 2;
40*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_BLK_F_RO: u32 = 5;
41*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_BLK_F_BLK_SIZE: u32 = 6;
42*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_BLK_F_FLUSH: u32 = 9;
43*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_BLK_F_MQ: u32 = 12;
44*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_BLK_F_DISCARD: u32 = 13;
45*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_BLK_F_WRITE_ZEROES: u32 = 14;
46*bb4ee6a4SAndroid Build Coastguard Worker 
47*bb4ee6a4SAndroid Build Coastguard Worker     #[derive(Copy, Clone, Debug, Default, AsBytes, FromZeroes, FromBytes)]
48*bb4ee6a4SAndroid Build Coastguard Worker     #[repr(C)]
49*bb4ee6a4SAndroid Build Coastguard Worker     pub struct virtio_blk_geometry {
50*bb4ee6a4SAndroid Build Coastguard Worker         cylinders: Le16,
51*bb4ee6a4SAndroid Build Coastguard Worker         heads: u8,
52*bb4ee6a4SAndroid Build Coastguard Worker         sectors: u8,
53*bb4ee6a4SAndroid Build Coastguard Worker     }
54*bb4ee6a4SAndroid Build Coastguard Worker 
55*bb4ee6a4SAndroid Build Coastguard Worker     #[derive(Copy, Clone, Debug, Default, AsBytes, FromZeroes, FromBytes)]
56*bb4ee6a4SAndroid Build Coastguard Worker     #[repr(C)]
57*bb4ee6a4SAndroid Build Coastguard Worker     pub struct virtio_blk_topology {
58*bb4ee6a4SAndroid Build Coastguard Worker         physical_block_exp: u8,
59*bb4ee6a4SAndroid Build Coastguard Worker         alignment_offset: u8,
60*bb4ee6a4SAndroid Build Coastguard Worker         min_io_size: Le16,
61*bb4ee6a4SAndroid Build Coastguard Worker         opt_io_size: Le32,
62*bb4ee6a4SAndroid Build Coastguard Worker     }
63*bb4ee6a4SAndroid Build Coastguard Worker 
64*bb4ee6a4SAndroid Build Coastguard Worker     #[derive(Copy, Clone, Debug, Default, AsBytes, FromZeroes, FromBytes)]
65*bb4ee6a4SAndroid Build Coastguard Worker     #[repr(C, packed)]
66*bb4ee6a4SAndroid Build Coastguard Worker     pub struct virtio_blk_config {
67*bb4ee6a4SAndroid Build Coastguard Worker         pub capacity: Le64,
68*bb4ee6a4SAndroid Build Coastguard Worker         pub size_max: Le32,
69*bb4ee6a4SAndroid Build Coastguard Worker         pub seg_max: Le32,
70*bb4ee6a4SAndroid Build Coastguard Worker         pub geometry: virtio_blk_geometry,
71*bb4ee6a4SAndroid Build Coastguard Worker         pub blk_size: Le32,
72*bb4ee6a4SAndroid Build Coastguard Worker         pub topology: virtio_blk_topology,
73*bb4ee6a4SAndroid Build Coastguard Worker         pub writeback: u8,
74*bb4ee6a4SAndroid Build Coastguard Worker         pub unused0: u8,
75*bb4ee6a4SAndroid Build Coastguard Worker         pub num_queues: Le16,
76*bb4ee6a4SAndroid Build Coastguard Worker         pub max_discard_sectors: Le32,
77*bb4ee6a4SAndroid Build Coastguard Worker         pub max_discard_seg: Le32,
78*bb4ee6a4SAndroid Build Coastguard Worker         pub discard_sector_alignment: Le32,
79*bb4ee6a4SAndroid Build Coastguard Worker         pub max_write_zeroes_sectors: Le32,
80*bb4ee6a4SAndroid Build Coastguard Worker         pub max_write_zeroes_seg: Le32,
81*bb4ee6a4SAndroid Build Coastguard Worker         pub write_zeroes_may_unmap: u8,
82*bb4ee6a4SAndroid Build Coastguard Worker         pub unused1: [u8; 3],
83*bb4ee6a4SAndroid Build Coastguard Worker     }
84*bb4ee6a4SAndroid Build Coastguard Worker 
85*bb4ee6a4SAndroid Build Coastguard Worker     #[derive(Copy, Clone, Debug, Default, FromZeroes, FromBytes, AsBytes)]
86*bb4ee6a4SAndroid Build Coastguard Worker     #[repr(C)]
87*bb4ee6a4SAndroid Build Coastguard Worker     pub(crate) struct virtio_blk_req_header {
88*bb4ee6a4SAndroid Build Coastguard Worker         pub req_type: Le32,
89*bb4ee6a4SAndroid Build Coastguard Worker         pub reserved: Le32,
90*bb4ee6a4SAndroid Build Coastguard Worker         pub sector: Le64,
91*bb4ee6a4SAndroid Build Coastguard Worker     }
92*bb4ee6a4SAndroid Build Coastguard Worker 
93*bb4ee6a4SAndroid Build Coastguard Worker     #[derive(Copy, Clone, Debug, Default, FromZeroes, FromBytes, AsBytes)]
94*bb4ee6a4SAndroid Build Coastguard Worker     #[repr(C)]
95*bb4ee6a4SAndroid Build Coastguard Worker     pub(crate) struct virtio_blk_discard_write_zeroes {
96*bb4ee6a4SAndroid Build Coastguard Worker         pub sector: Le64,
97*bb4ee6a4SAndroid Build Coastguard Worker         pub num_sectors: Le32,
98*bb4ee6a4SAndroid Build Coastguard Worker         pub flags: Le32,
99*bb4ee6a4SAndroid Build Coastguard Worker     }
100*bb4ee6a4SAndroid Build Coastguard Worker 
101*bb4ee6a4SAndroid Build Coastguard Worker     pub(crate) const VIRTIO_BLK_DISCARD_WRITE_ZEROES_FLAG_UNMAP: u32 = 1 << 0;
102*bb4ee6a4SAndroid Build Coastguard Worker }
103*bb4ee6a4SAndroid Build Coastguard Worker 
104*bb4ee6a4SAndroid Build Coastguard Worker pub mod fs {
105*bb4ee6a4SAndroid Build Coastguard Worker     /// The maximum allowable length of the tag used to identify a specific virtio-fs device.
106*bb4ee6a4SAndroid Build Coastguard Worker     pub const FS_MAX_TAG_LEN: usize = 36;
107*bb4ee6a4SAndroid Build Coastguard Worker }
108*bb4ee6a4SAndroid Build Coastguard Worker 
109*bb4ee6a4SAndroid Build Coastguard Worker pub mod gpu {
110*bb4ee6a4SAndroid Build Coastguard Worker     use super::*;
111*bb4ee6a4SAndroid Build Coastguard Worker 
112*bb4ee6a4SAndroid Build Coastguard Worker     pub const NUM_QUEUES: usize = 2;
113*bb4ee6a4SAndroid Build Coastguard Worker 
114*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_GPU_F_VIRGL: u32 = 0;
115*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_GPU_F_EDID: u32 = 1;
116*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_GPU_F_RESOURCE_UUID: u32 = 2;
117*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_GPU_F_RESOURCE_BLOB: u32 = 3;
118*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_GPU_F_CONTEXT_INIT: u32 = 4;
119*bb4ee6a4SAndroid Build Coastguard Worker     /* The following capabilities are not upstreamed. */
120*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_GPU_F_FENCE_PASSING: u32 = 5;
121*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_GPU_F_CREATE_GUEST_HANDLE: u32 = 6;
122*bb4ee6a4SAndroid Build Coastguard Worker 
123*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_GPU_SHM_ID_HOST_VISIBLE: u8 = 0x0001;
124*bb4ee6a4SAndroid Build Coastguard Worker 
125*bb4ee6a4SAndroid Build Coastguard Worker     #[derive(Copy, Clone, Debug, Default, AsBytes, FromZeroes, FromBytes)]
126*bb4ee6a4SAndroid Build Coastguard Worker     #[repr(C)]
127*bb4ee6a4SAndroid Build Coastguard Worker     pub struct virtio_gpu_config {
128*bb4ee6a4SAndroid Build Coastguard Worker         pub events_read: Le32,
129*bb4ee6a4SAndroid Build Coastguard Worker         pub events_clear: Le32,
130*bb4ee6a4SAndroid Build Coastguard Worker         pub num_scanouts: Le32,
131*bb4ee6a4SAndroid Build Coastguard Worker         pub num_capsets: Le32,
132*bb4ee6a4SAndroid Build Coastguard Worker     }
133*bb4ee6a4SAndroid Build Coastguard Worker }
134*bb4ee6a4SAndroid Build Coastguard Worker 
135*bb4ee6a4SAndroid Build Coastguard Worker pub mod snd {
136*bb4ee6a4SAndroid Build Coastguard Worker     use super::*;
137*bb4ee6a4SAndroid Build Coastguard Worker 
138*bb4ee6a4SAndroid Build Coastguard Worker     #[derive(
139*bb4ee6a4SAndroid Build Coastguard Worker         Copy,
140*bb4ee6a4SAndroid Build Coastguard Worker         Clone,
141*bb4ee6a4SAndroid Build Coastguard Worker         Default,
142*bb4ee6a4SAndroid Build Coastguard Worker         AsBytes,
143*bb4ee6a4SAndroid Build Coastguard Worker         FromZeroes,
144*bb4ee6a4SAndroid Build Coastguard Worker         FromBytes,
145*bb4ee6a4SAndroid Build Coastguard Worker         Serialize,
146*bb4ee6a4SAndroid Build Coastguard Worker         Deserialize,
147*bb4ee6a4SAndroid Build Coastguard Worker         PartialEq,
148*bb4ee6a4SAndroid Build Coastguard Worker         Eq,
149*bb4ee6a4SAndroid Build Coastguard Worker         Debug,
150*bb4ee6a4SAndroid Build Coastguard Worker     )]
151*bb4ee6a4SAndroid Build Coastguard Worker     #[repr(C, packed)]
152*bb4ee6a4SAndroid Build Coastguard Worker     pub struct virtio_snd_config {
153*bb4ee6a4SAndroid Build Coastguard Worker         pub jacks: Le32,
154*bb4ee6a4SAndroid Build Coastguard Worker         pub streams: Le32,
155*bb4ee6a4SAndroid Build Coastguard Worker         pub chmaps: Le32,
156*bb4ee6a4SAndroid Build Coastguard Worker     }
157*bb4ee6a4SAndroid Build Coastguard Worker }
158*bb4ee6a4SAndroid Build Coastguard Worker 
159*bb4ee6a4SAndroid Build Coastguard Worker pub mod media {
160*bb4ee6a4SAndroid Build Coastguard Worker     const QUEUE_SIZE: u16 = 256;
161*bb4ee6a4SAndroid Build Coastguard Worker     pub const QUEUE_SIZES: &[u16] = &[QUEUE_SIZE, QUEUE_SIZE];
162*bb4ee6a4SAndroid Build Coastguard Worker }
163*bb4ee6a4SAndroid Build Coastguard Worker 
164*bb4ee6a4SAndroid Build Coastguard Worker pub mod video {
165*bb4ee6a4SAndroid Build Coastguard Worker     use data_model::Le32;
166*bb4ee6a4SAndroid Build Coastguard Worker     use serde::Deserialize;
167*bb4ee6a4SAndroid Build Coastguard Worker     use serde::Serialize;
168*bb4ee6a4SAndroid Build Coastguard Worker     use serde_keyvalue::FromKeyValues;
169*bb4ee6a4SAndroid Build Coastguard Worker     use zerocopy::AsBytes;
170*bb4ee6a4SAndroid Build Coastguard Worker     use zerocopy::FromBytes;
171*bb4ee6a4SAndroid Build Coastguard Worker     use zerocopy::FromZeroes;
172*bb4ee6a4SAndroid Build Coastguard Worker 
173*bb4ee6a4SAndroid Build Coastguard Worker     pub const CMD_QUEUE_INDEX: usize = 0;
174*bb4ee6a4SAndroid Build Coastguard Worker     pub const EVENT_QUEUE_INDEX: usize = 1;
175*bb4ee6a4SAndroid Build Coastguard Worker     pub const NUM_QUEUES: usize = 2;
176*bb4ee6a4SAndroid Build Coastguard Worker 
177*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_VIDEO_F_RESOURCE_GUEST_PAGES: u32 = 0;
178*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_VIDEO_F_RESOURCE_NON_CONTIG: u32 = 1;
179*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_VIDEO_F_RESOURCE_VIRTIO_OBJECT: u32 = 2;
180*bb4ee6a4SAndroid Build Coastguard Worker 
181*bb4ee6a4SAndroid Build Coastguard Worker     #[derive(Debug, Clone, Copy)]
182*bb4ee6a4SAndroid Build Coastguard Worker     pub enum VideoDeviceType {
183*bb4ee6a4SAndroid Build Coastguard Worker         Decoder,
184*bb4ee6a4SAndroid Build Coastguard Worker         Encoder,
185*bb4ee6a4SAndroid Build Coastguard Worker     }
186*bb4ee6a4SAndroid Build Coastguard Worker 
187*bb4ee6a4SAndroid Build Coastguard Worker     #[derive(Clone, Copy, Debug, Deserialize, PartialEq, Eq, Serialize)]
188*bb4ee6a4SAndroid Build Coastguard Worker     #[serde(rename_all = "kebab-case")]
189*bb4ee6a4SAndroid Build Coastguard Worker     pub enum VideoBackendType {
190*bb4ee6a4SAndroid Build Coastguard Worker         #[cfg(feature = "libvda")]
191*bb4ee6a4SAndroid Build Coastguard Worker         Libvda,
192*bb4ee6a4SAndroid Build Coastguard Worker         #[cfg(feature = "libvda")]
193*bb4ee6a4SAndroid Build Coastguard Worker         LibvdaVd,
194*bb4ee6a4SAndroid Build Coastguard Worker         #[cfg(feature = "ffmpeg")]
195*bb4ee6a4SAndroid Build Coastguard Worker         Ffmpeg,
196*bb4ee6a4SAndroid Build Coastguard Worker         #[cfg(feature = "vaapi")]
197*bb4ee6a4SAndroid Build Coastguard Worker         Vaapi,
198*bb4ee6a4SAndroid Build Coastguard Worker     }
199*bb4ee6a4SAndroid Build Coastguard Worker 
200*bb4ee6a4SAndroid Build Coastguard Worker     #[derive(Debug, Serialize, Deserialize, FromKeyValues)]
201*bb4ee6a4SAndroid Build Coastguard Worker     pub struct VideoDeviceConfig {
202*bb4ee6a4SAndroid Build Coastguard Worker         pub backend: VideoBackendType,
203*bb4ee6a4SAndroid Build Coastguard Worker     }
204*bb4ee6a4SAndroid Build Coastguard Worker 
205*bb4ee6a4SAndroid Build Coastguard Worker     /// The same set of virtio features is supported by the ffmpeg decoder and encoder.
ffmpeg_supported_virtio_features() -> u64206*bb4ee6a4SAndroid Build Coastguard Worker     pub fn ffmpeg_supported_virtio_features() -> u64 {
207*bb4ee6a4SAndroid Build Coastguard Worker         1u64 << VIRTIO_VIDEO_F_RESOURCE_GUEST_PAGES
208*bb4ee6a4SAndroid Build Coastguard Worker             | 1u64 << VIRTIO_VIDEO_F_RESOURCE_NON_CONTIG
209*bb4ee6a4SAndroid Build Coastguard Worker             | 1u64 << VIRTIO_VIDEO_F_RESOURCE_VIRTIO_OBJECT
210*bb4ee6a4SAndroid Build Coastguard Worker     }
211*bb4ee6a4SAndroid Build Coastguard Worker 
212*bb4ee6a4SAndroid Build Coastguard Worker     /// The same set of virtio features is supported by the vaapi decoder and encoder.
vaapi_supported_virtio_features() -> u64213*bb4ee6a4SAndroid Build Coastguard Worker     pub fn vaapi_supported_virtio_features() -> u64 {
214*bb4ee6a4SAndroid Build Coastguard Worker         1u64 << VIRTIO_VIDEO_F_RESOURCE_GUEST_PAGES
215*bb4ee6a4SAndroid Build Coastguard Worker             | 1u64 << VIRTIO_VIDEO_F_RESOURCE_NON_CONTIG
216*bb4ee6a4SAndroid Build Coastguard Worker             | 1u64 << VIRTIO_VIDEO_F_RESOURCE_VIRTIO_OBJECT
217*bb4ee6a4SAndroid Build Coastguard Worker     }
218*bb4ee6a4SAndroid Build Coastguard Worker 
219*bb4ee6a4SAndroid Build Coastguard Worker     /// The same set of virtio features is supported by the vda decoder and encoder.
vda_supported_virtio_features() -> u64220*bb4ee6a4SAndroid Build Coastguard Worker     pub fn vda_supported_virtio_features() -> u64 {
221*bb4ee6a4SAndroid Build Coastguard Worker         1u64 << VIRTIO_VIDEO_F_RESOURCE_NON_CONTIG | 1u64 << VIRTIO_VIDEO_F_RESOURCE_VIRTIO_OBJECT
222*bb4ee6a4SAndroid Build Coastguard Worker     }
223*bb4ee6a4SAndroid Build Coastguard Worker 
backend_supported_virtio_features(backend: VideoBackendType) -> u64224*bb4ee6a4SAndroid Build Coastguard Worker     pub fn backend_supported_virtio_features(backend: VideoBackendType) -> u64 {
225*bb4ee6a4SAndroid Build Coastguard Worker         match backend {
226*bb4ee6a4SAndroid Build Coastguard Worker             #[cfg(feature = "libvda")]
227*bb4ee6a4SAndroid Build Coastguard Worker             VideoBackendType::Libvda | VideoBackendType::LibvdaVd => {
228*bb4ee6a4SAndroid Build Coastguard Worker                 vda_supported_virtio_features()
229*bb4ee6a4SAndroid Build Coastguard Worker             }
230*bb4ee6a4SAndroid Build Coastguard Worker             #[cfg(feature = "ffmpeg")]
231*bb4ee6a4SAndroid Build Coastguard Worker             VideoBackendType::Ffmpeg => ffmpeg_supported_virtio_features(),
232*bb4ee6a4SAndroid Build Coastguard Worker             #[cfg(feature = "vaapi")]
233*bb4ee6a4SAndroid Build Coastguard Worker             VideoBackendType::Vaapi => vaapi_supported_virtio_features(),
234*bb4ee6a4SAndroid Build Coastguard Worker         }
235*bb4ee6a4SAndroid Build Coastguard Worker     }
236*bb4ee6a4SAndroid Build Coastguard Worker 
237*bb4ee6a4SAndroid Build Coastguard Worker     #[repr(C)]
238*bb4ee6a4SAndroid Build Coastguard Worker     #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)]
239*bb4ee6a4SAndroid Build Coastguard Worker     pub struct virtio_video_config {
240*bb4ee6a4SAndroid Build Coastguard Worker         pub version: Le32,
241*bb4ee6a4SAndroid Build Coastguard Worker         pub max_caps_length: Le32,
242*bb4ee6a4SAndroid Build Coastguard Worker         pub max_resp_length: Le32,
243*bb4ee6a4SAndroid Build Coastguard Worker         pub device_name: [u8; 32],
244*bb4ee6a4SAndroid Build Coastguard Worker     }
245*bb4ee6a4SAndroid Build Coastguard Worker }
246*bb4ee6a4SAndroid Build Coastguard Worker 
247*bb4ee6a4SAndroid Build Coastguard Worker pub mod vsock {
248*bb4ee6a4SAndroid Build Coastguard Worker     pub const NUM_QUEUES: usize = 3;
249*bb4ee6a4SAndroid Build Coastguard Worker }
250*bb4ee6a4SAndroid Build Coastguard Worker 
251*bb4ee6a4SAndroid Build Coastguard Worker pub mod wl {
252*bb4ee6a4SAndroid Build Coastguard Worker     pub const NUM_QUEUES: usize = 2;
253*bb4ee6a4SAndroid Build Coastguard Worker 
254*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_WL_F_TRANS_FLAGS: u32 = 0x01;
255*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_WL_F_SEND_FENCES: u32 = 0x02;
256*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_WL_F_USE_SHMEM: u32 = 0x03;
257*bb4ee6a4SAndroid Build Coastguard Worker }
258*bb4ee6a4SAndroid Build Coastguard Worker 
259*bb4ee6a4SAndroid Build Coastguard Worker pub mod console {
260*bb4ee6a4SAndroid Build Coastguard Worker     use data_model::Le16;
261*bb4ee6a4SAndroid Build Coastguard Worker     use data_model::Le32;
262*bb4ee6a4SAndroid Build Coastguard Worker     use zerocopy::AsBytes;
263*bb4ee6a4SAndroid Build Coastguard Worker     use zerocopy::FromBytes;
264*bb4ee6a4SAndroid Build Coastguard Worker     use zerocopy::FromZeroes;
265*bb4ee6a4SAndroid Build Coastguard Worker 
266*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_CONSOLE_F_SIZE: u32 = 0;
267*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_CONSOLE_F_MULTIPORT: u32 = 1;
268*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_CONSOLE_F_EMERG_WRITE: u32 = 2;
269*bb4ee6a4SAndroid Build Coastguard Worker 
270*bb4ee6a4SAndroid Build Coastguard Worker     #[derive(Copy, Clone, Debug, Default, AsBytes, FromZeroes, FromBytes)]
271*bb4ee6a4SAndroid Build Coastguard Worker     #[repr(C)]
272*bb4ee6a4SAndroid Build Coastguard Worker     pub struct virtio_console_config {
273*bb4ee6a4SAndroid Build Coastguard Worker         pub cols: Le16,
274*bb4ee6a4SAndroid Build Coastguard Worker         pub rows: Le16,
275*bb4ee6a4SAndroid Build Coastguard Worker         pub max_nr_ports: Le32,
276*bb4ee6a4SAndroid Build Coastguard Worker         pub emerg_wr: Le32,
277*bb4ee6a4SAndroid Build Coastguard Worker     }
278*bb4ee6a4SAndroid Build Coastguard Worker 
279*bb4ee6a4SAndroid Build Coastguard Worker     #[derive(Copy, Clone, Debug, Default, FromZeroes, FromBytes, AsBytes)]
280*bb4ee6a4SAndroid Build Coastguard Worker     #[repr(C)]
281*bb4ee6a4SAndroid Build Coastguard Worker     pub struct virtio_console_control {
282*bb4ee6a4SAndroid Build Coastguard Worker         pub id: Le32,
283*bb4ee6a4SAndroid Build Coastguard Worker         pub event: Le16,
284*bb4ee6a4SAndroid Build Coastguard Worker         pub value: Le16,
285*bb4ee6a4SAndroid Build Coastguard Worker     }
286*bb4ee6a4SAndroid Build Coastguard Worker 
287*bb4ee6a4SAndroid Build Coastguard Worker     #[derive(Copy, Clone, Debug, Default, FromZeroes, FromBytes, AsBytes)]
288*bb4ee6a4SAndroid Build Coastguard Worker     #[repr(C)]
289*bb4ee6a4SAndroid Build Coastguard Worker     pub struct virtio_console_resize {
290*bb4ee6a4SAndroid Build Coastguard Worker         pub cols: Le16,
291*bb4ee6a4SAndroid Build Coastguard Worker         pub rows: Le16,
292*bb4ee6a4SAndroid Build Coastguard Worker     }
293*bb4ee6a4SAndroid Build Coastguard Worker 
294*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_CONSOLE_DEVICE_READY: u16 = 0;
295*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_CONSOLE_DEVICE_ADD: u16 = 1;
296*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_CONSOLE_DEVICE_REMOVE: u16 = 2;
297*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_CONSOLE_PORT_READY: u16 = 3;
298*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_CONSOLE_CONSOLE_PORT: u16 = 4;
299*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_CONSOLE_RESIZE: u16 = 5;
300*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_CONSOLE_PORT_OPEN: u16 = 6;
301*bb4ee6a4SAndroid Build Coastguard Worker     pub const VIRTIO_CONSOLE_PORT_NAME: u16 = 7;
302*bb4ee6a4SAndroid Build Coastguard Worker }
303