blob: 59baeac6efec317649872ef26587fb90c1061aee [file] [log] [blame]
// Copyright 2020 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use data_model::Le32;
use data_model::Le64;
use serde::Deserialize;
use serde::Serialize;
use zerocopy::AsBytes;
use zerocopy::FromBytes;
use zerocopy::FromZeroes;
use crate::virtio::snd::constants::StatusCode;
use crate::virtio::snd::constants::VIRTIO_SND_CHMAP_MAX_SIZE;
#[derive(Copy, Clone, Default, AsBytes, FromZeroes, FromBytes, Serialize, Deserialize)]
#[repr(C)]
pub struct virtio_snd_hdr {
pub code: Le32,
}
#[derive(Copy, Clone, Default, AsBytes, FromZeroes, FromBytes)]
#[repr(C)]
pub struct virtio_snd_jack_hdr {
pub hdr: virtio_snd_hdr,
pub jack_id: Le32,
}
#[derive(Copy, Clone, Default, AsBytes, FromZeroes, FromBytes)]
#[repr(C)]
pub struct virtio_snd_event {
pub hdr: virtio_snd_hdr,
pub data: Le32,
}
#[derive(Copy, Clone, Default, AsBytes, FromZeroes, FromBytes)]
#[repr(C)]
pub struct virtio_snd_query_info {
pub hdr: virtio_snd_hdr,
pub start_id: Le32,
pub count: Le32,
pub size: Le32,
}
#[derive(
Copy,
Clone,
Default,
AsBytes,
FromZeroes,
FromBytes,
Serialize,
Deserialize,
PartialEq,
Eq,
Debug,
)]
#[repr(C)]
pub struct virtio_snd_info {
pub hda_fn_nid: Le32,
}
#[derive(
Copy,
Clone,
Default,
AsBytes,
FromZeroes,
FromBytes,
Serialize,
Deserialize,
PartialEq,
Eq,
Debug,
)]
#[repr(C)]
pub struct virtio_snd_pcm_info {
pub hdr: virtio_snd_info,
pub features: Le32, /* 1 << VIRTIO_SND_PCM_F_XXX */
pub formats: Le64, /* 1 << VIRTIO_SND_PCM_FMT_XXX */
pub rates: Le64, /* 1 << VIRTIO_SND_PCM_RATE_XXX */
pub direction: u8,
pub channels_min: u8,
pub channels_max: u8,
pub padding: [u8; 5],
}
#[derive(Copy, Clone, Default, AsBytes, FromZeroes, FromBytes, Serialize, Deserialize)]
#[repr(C)]
pub struct virtio_snd_pcm_hdr {
pub hdr: virtio_snd_hdr,
pub stream_id: Le32,
}
#[derive(Copy, Clone, Default, AsBytes, FromZeroes, FromBytes, Serialize, Deserialize)]
#[repr(C)]
pub struct virtio_snd_pcm_set_params {
pub hdr: virtio_snd_pcm_hdr,
pub buffer_bytes: Le32,
pub period_bytes: Le32,
pub features: Le32, /* 1 << VIRTIO_SND_PCM_F_XXX */
pub channels: u8,
pub format: u8,
pub rate: u8,
pub padding: u8,
}
#[derive(Copy, Clone, AsBytes, FromZeroes, FromBytes)]
#[repr(C)]
pub struct virtio_snd_pcm_xfer {
pub stream_id: Le32,
}
#[derive(Copy, Clone, Default, AsBytes, FromZeroes, FromBytes)]
#[repr(C)]
pub struct virtio_snd_pcm_status {
pub status: Le32,
pub latency_bytes: Le32,
}
impl virtio_snd_pcm_status {
pub fn new(status: StatusCode, latency_bytes: u32) -> Self {
Self {
status: Le32::from(status as u32),
latency_bytes: Le32::from(latency_bytes),
}
}
}
#[derive(
Copy,
Clone,
Default,
AsBytes,
FromZeroes,
FromBytes,
Serialize,
Deserialize,
PartialEq,
Eq,
Debug,
)]
#[repr(C)]
pub struct virtio_snd_jack_info {
pub hdr: virtio_snd_info,
pub features: Le32, /* 1 << VIRTIO_SND_JACK_F_XXX */
pub hda_reg_defconf: Le32,
pub hda_reg_caps: Le32,
pub connected: u8,
pub padding: [u8; 7],
}
#[derive(Copy, Clone, Default, AsBytes, FromZeroes, FromBytes)]
#[repr(C)]
pub struct virtio_snd_jack_remap {
pub hdr: virtio_snd_jack_hdr, /* .code = VIRTIO_SND_R_JACK_REMAP */
pub association: Le32,
pub sequence: Le32,
}
#[derive(
Copy,
Clone,
Default,
AsBytes,
FromZeroes,
FromBytes,
Serialize,
Deserialize,
PartialEq,
Eq,
Debug,
)]
#[repr(C)]
pub struct virtio_snd_chmap_info {
pub hdr: virtio_snd_info,
pub direction: u8,
pub channels: u8,
pub positions: [u8; VIRTIO_SND_CHMAP_MAX_SIZE],
}