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