1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2020 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 use data_model::Le32; 6*bb4ee6a4SAndroid Build Coastguard Worker use data_model::Le64; 7*bb4ee6a4SAndroid Build Coastguard Worker use serde::Deserialize; 8*bb4ee6a4SAndroid Build Coastguard Worker use serde::Serialize; 9*bb4ee6a4SAndroid Build Coastguard Worker use zerocopy::AsBytes; 10*bb4ee6a4SAndroid Build Coastguard Worker use zerocopy::FromBytes; 11*bb4ee6a4SAndroid Build Coastguard Worker use zerocopy::FromZeroes; 12*bb4ee6a4SAndroid Build Coastguard Worker 13*bb4ee6a4SAndroid Build Coastguard Worker use crate::virtio::snd::constants::StatusCode; 14*bb4ee6a4SAndroid Build Coastguard Worker use crate::virtio::snd::constants::VIRTIO_SND_CHMAP_MAX_SIZE; 15*bb4ee6a4SAndroid Build Coastguard Worker 16*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Copy, Clone, Default, AsBytes, FromZeroes, FromBytes, Serialize, Deserialize)] 17*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)] 18*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_snd_hdr { 19*bb4ee6a4SAndroid Build Coastguard Worker pub code: Le32, 20*bb4ee6a4SAndroid Build Coastguard Worker } 21*bb4ee6a4SAndroid Build Coastguard Worker 22*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Copy, Clone, Default, AsBytes, FromZeroes, FromBytes)] 23*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)] 24*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_snd_jack_hdr { 25*bb4ee6a4SAndroid Build Coastguard Worker pub hdr: virtio_snd_hdr, 26*bb4ee6a4SAndroid Build Coastguard Worker pub jack_id: Le32, 27*bb4ee6a4SAndroid Build Coastguard Worker } 28*bb4ee6a4SAndroid Build Coastguard Worker 29*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Copy, Clone, Default, AsBytes, FromZeroes, FromBytes)] 30*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)] 31*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_snd_event { 32*bb4ee6a4SAndroid Build Coastguard Worker pub hdr: virtio_snd_hdr, 33*bb4ee6a4SAndroid Build Coastguard Worker pub data: Le32, 34*bb4ee6a4SAndroid Build Coastguard Worker } 35*bb4ee6a4SAndroid Build Coastguard Worker 36*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Copy, Clone, Default, AsBytes, FromZeroes, FromBytes)] 37*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)] 38*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_snd_query_info { 39*bb4ee6a4SAndroid Build Coastguard Worker pub hdr: virtio_snd_hdr, 40*bb4ee6a4SAndroid Build Coastguard Worker pub start_id: Le32, 41*bb4ee6a4SAndroid Build Coastguard Worker pub count: Le32, 42*bb4ee6a4SAndroid Build Coastguard Worker pub size: Le32, 43*bb4ee6a4SAndroid Build Coastguard Worker } 44*bb4ee6a4SAndroid Build Coastguard Worker 45*bb4ee6a4SAndroid Build Coastguard Worker #[derive( 46*bb4ee6a4SAndroid Build Coastguard Worker Copy, 47*bb4ee6a4SAndroid Build Coastguard Worker Clone, 48*bb4ee6a4SAndroid Build Coastguard Worker Default, 49*bb4ee6a4SAndroid Build Coastguard Worker AsBytes, 50*bb4ee6a4SAndroid Build Coastguard Worker FromZeroes, 51*bb4ee6a4SAndroid Build Coastguard Worker FromBytes, 52*bb4ee6a4SAndroid Build Coastguard Worker Serialize, 53*bb4ee6a4SAndroid Build Coastguard Worker Deserialize, 54*bb4ee6a4SAndroid Build Coastguard Worker PartialEq, 55*bb4ee6a4SAndroid Build Coastguard Worker Eq, 56*bb4ee6a4SAndroid Build Coastguard Worker Debug, 57*bb4ee6a4SAndroid Build Coastguard Worker )] 58*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)] 59*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_snd_info { 60*bb4ee6a4SAndroid Build Coastguard Worker pub hda_fn_nid: Le32, 61*bb4ee6a4SAndroid Build Coastguard Worker } 62*bb4ee6a4SAndroid Build Coastguard Worker 63*bb4ee6a4SAndroid Build Coastguard Worker #[derive( 64*bb4ee6a4SAndroid Build Coastguard Worker Copy, 65*bb4ee6a4SAndroid Build Coastguard Worker Clone, 66*bb4ee6a4SAndroid Build Coastguard Worker Default, 67*bb4ee6a4SAndroid Build Coastguard Worker AsBytes, 68*bb4ee6a4SAndroid Build Coastguard Worker FromZeroes, 69*bb4ee6a4SAndroid Build Coastguard Worker FromBytes, 70*bb4ee6a4SAndroid Build Coastguard Worker Serialize, 71*bb4ee6a4SAndroid Build Coastguard Worker Deserialize, 72*bb4ee6a4SAndroid Build Coastguard Worker PartialEq, 73*bb4ee6a4SAndroid Build Coastguard Worker Eq, 74*bb4ee6a4SAndroid Build Coastguard Worker Debug, 75*bb4ee6a4SAndroid Build Coastguard Worker )] 76*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)] 77*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_snd_pcm_info { 78*bb4ee6a4SAndroid Build Coastguard Worker pub hdr: virtio_snd_info, 79*bb4ee6a4SAndroid Build Coastguard Worker pub features: Le32, /* 1 << VIRTIO_SND_PCM_F_XXX */ 80*bb4ee6a4SAndroid Build Coastguard Worker pub formats: Le64, /* 1 << VIRTIO_SND_PCM_FMT_XXX */ 81*bb4ee6a4SAndroid Build Coastguard Worker pub rates: Le64, /* 1 << VIRTIO_SND_PCM_RATE_XXX */ 82*bb4ee6a4SAndroid Build Coastguard Worker pub direction: u8, 83*bb4ee6a4SAndroid Build Coastguard Worker pub channels_min: u8, 84*bb4ee6a4SAndroid Build Coastguard Worker pub channels_max: u8, 85*bb4ee6a4SAndroid Build Coastguard Worker 86*bb4ee6a4SAndroid Build Coastguard Worker pub padding: [u8; 5], 87*bb4ee6a4SAndroid Build Coastguard Worker } 88*bb4ee6a4SAndroid Build Coastguard Worker 89*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Copy, Clone, Default, AsBytes, FromZeroes, FromBytes, Serialize, Deserialize)] 90*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)] 91*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_snd_pcm_hdr { 92*bb4ee6a4SAndroid Build Coastguard Worker pub hdr: virtio_snd_hdr, 93*bb4ee6a4SAndroid Build Coastguard Worker pub stream_id: Le32, 94*bb4ee6a4SAndroid Build Coastguard Worker } 95*bb4ee6a4SAndroid Build Coastguard Worker 96*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Copy, Clone, Default, AsBytes, FromZeroes, FromBytes, Serialize, Deserialize)] 97*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)] 98*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_snd_pcm_set_params { 99*bb4ee6a4SAndroid Build Coastguard Worker pub hdr: virtio_snd_pcm_hdr, 100*bb4ee6a4SAndroid Build Coastguard Worker pub buffer_bytes: Le32, 101*bb4ee6a4SAndroid Build Coastguard Worker pub period_bytes: Le32, 102*bb4ee6a4SAndroid Build Coastguard Worker pub features: Le32, /* 1 << VIRTIO_SND_PCM_F_XXX */ 103*bb4ee6a4SAndroid Build Coastguard Worker pub channels: u8, 104*bb4ee6a4SAndroid Build Coastguard Worker pub format: u8, 105*bb4ee6a4SAndroid Build Coastguard Worker pub rate: u8, 106*bb4ee6a4SAndroid Build Coastguard Worker pub padding: u8, 107*bb4ee6a4SAndroid Build Coastguard Worker } 108*bb4ee6a4SAndroid Build Coastguard Worker 109*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Copy, Clone, AsBytes, FromZeroes, FromBytes)] 110*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)] 111*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_snd_pcm_xfer { 112*bb4ee6a4SAndroid Build Coastguard Worker pub stream_id: Le32, 113*bb4ee6a4SAndroid Build Coastguard Worker } 114*bb4ee6a4SAndroid Build Coastguard Worker 115*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Copy, Clone, Default, AsBytes, FromZeroes, FromBytes)] 116*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)] 117*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_snd_pcm_status { 118*bb4ee6a4SAndroid Build Coastguard Worker pub status: Le32, 119*bb4ee6a4SAndroid Build Coastguard Worker pub latency_bytes: Le32, 120*bb4ee6a4SAndroid Build Coastguard Worker } 121*bb4ee6a4SAndroid Build Coastguard Worker 122*bb4ee6a4SAndroid Build Coastguard Worker impl virtio_snd_pcm_status { new(status: StatusCode, latency_bytes: u32) -> Self123*bb4ee6a4SAndroid Build Coastguard Worker pub fn new(status: StatusCode, latency_bytes: u32) -> Self { 124*bb4ee6a4SAndroid Build Coastguard Worker Self { 125*bb4ee6a4SAndroid Build Coastguard Worker status: Le32::from(status as u32), 126*bb4ee6a4SAndroid Build Coastguard Worker latency_bytes: Le32::from(latency_bytes), 127*bb4ee6a4SAndroid Build Coastguard Worker } 128*bb4ee6a4SAndroid Build Coastguard Worker } 129*bb4ee6a4SAndroid Build Coastguard Worker } 130*bb4ee6a4SAndroid Build Coastguard Worker 131*bb4ee6a4SAndroid Build Coastguard Worker #[derive( 132*bb4ee6a4SAndroid Build Coastguard Worker Copy, 133*bb4ee6a4SAndroid Build Coastguard Worker Clone, 134*bb4ee6a4SAndroid Build Coastguard Worker Default, 135*bb4ee6a4SAndroid Build Coastguard Worker AsBytes, 136*bb4ee6a4SAndroid Build Coastguard Worker FromZeroes, 137*bb4ee6a4SAndroid Build Coastguard Worker FromBytes, 138*bb4ee6a4SAndroid Build Coastguard Worker Serialize, 139*bb4ee6a4SAndroid Build Coastguard Worker Deserialize, 140*bb4ee6a4SAndroid Build Coastguard Worker PartialEq, 141*bb4ee6a4SAndroid Build Coastguard Worker Eq, 142*bb4ee6a4SAndroid Build Coastguard Worker Debug, 143*bb4ee6a4SAndroid Build Coastguard Worker )] 144*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)] 145*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_snd_jack_info { 146*bb4ee6a4SAndroid Build Coastguard Worker pub hdr: virtio_snd_info, 147*bb4ee6a4SAndroid Build Coastguard Worker pub features: Le32, /* 1 << VIRTIO_SND_JACK_F_XXX */ 148*bb4ee6a4SAndroid Build Coastguard Worker pub hda_reg_defconf: Le32, 149*bb4ee6a4SAndroid Build Coastguard Worker pub hda_reg_caps: Le32, 150*bb4ee6a4SAndroid Build Coastguard Worker pub connected: u8, 151*bb4ee6a4SAndroid Build Coastguard Worker pub padding: [u8; 7], 152*bb4ee6a4SAndroid Build Coastguard Worker } 153*bb4ee6a4SAndroid Build Coastguard Worker 154*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Copy, Clone, Default, AsBytes, FromZeroes, FromBytes)] 155*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)] 156*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_snd_jack_remap { 157*bb4ee6a4SAndroid Build Coastguard Worker pub hdr: virtio_snd_jack_hdr, /* .code = VIRTIO_SND_R_JACK_REMAP */ 158*bb4ee6a4SAndroid Build Coastguard Worker pub association: Le32, 159*bb4ee6a4SAndroid Build Coastguard Worker pub sequence: Le32, 160*bb4ee6a4SAndroid Build Coastguard Worker } 161*bb4ee6a4SAndroid Build Coastguard Worker 162*bb4ee6a4SAndroid Build Coastguard Worker #[derive( 163*bb4ee6a4SAndroid Build Coastguard Worker Copy, 164*bb4ee6a4SAndroid Build Coastguard Worker Clone, 165*bb4ee6a4SAndroid Build Coastguard Worker Default, 166*bb4ee6a4SAndroid Build Coastguard Worker AsBytes, 167*bb4ee6a4SAndroid Build Coastguard Worker FromZeroes, 168*bb4ee6a4SAndroid Build Coastguard Worker FromBytes, 169*bb4ee6a4SAndroid Build Coastguard Worker Serialize, 170*bb4ee6a4SAndroid Build Coastguard Worker Deserialize, 171*bb4ee6a4SAndroid Build Coastguard Worker PartialEq, 172*bb4ee6a4SAndroid Build Coastguard Worker Eq, 173*bb4ee6a4SAndroid Build Coastguard Worker Debug, 174*bb4ee6a4SAndroid Build Coastguard Worker )] 175*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)] 176*bb4ee6a4SAndroid Build Coastguard Worker pub struct virtio_snd_chmap_info { 177*bb4ee6a4SAndroid Build Coastguard Worker pub hdr: virtio_snd_info, 178*bb4ee6a4SAndroid Build Coastguard Worker pub direction: u8, 179*bb4ee6a4SAndroid Build Coastguard Worker pub channels: u8, 180*bb4ee6a4SAndroid Build Coastguard Worker pub positions: [u8; VIRTIO_SND_CHMAP_MAX_SIZE], 181*bb4ee6a4SAndroid Build Coastguard Worker } 182