xref: /aosp_15_r20/external/crosvm/devices/src/virtio/snd/layout.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
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