Android-cuttlefish cvd tool
shm_layout.h
Go to the documentation of this file.
1//
2// Copyright (C) 2020 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15
16#pragma once
17
19
20namespace cuttlefish {
21// TODO (b/175151042): get these from the kernel headers when available
22
23enum class AudioCommandType : uint32_t {
24 /* jack control request types */
27
28 /* PCM control request types */
29 VIRTIO_SND_R_PCM_INFO = 0x0100,
35
36 /* channel map control request types */
38};
39
40enum class AudioStatus : uint32_t {
41 /* common status codes */
42 VIRTIO_SND_S_OK = 0x8000,
46 // Not a virtio constant, but it's only used internally as an invalid value so
47 // it's safe.
48 NOT_SET = static_cast<uint32_t>(-1),
49};
50
51enum class AudioStreamDirection : uint8_t {
54};
55
56enum class AudioStreamFormat : uint8_t {
57 /* analog formats (width / physical width) */
58 VIRTIO_SND_PCM_FMT_IMA_ADPCM = 0, /* 4 / 4 bits */
59 VIRTIO_SND_PCM_FMT_MU_LAW, /* 8 / 8 bits */
60 VIRTIO_SND_PCM_FMT_A_LAW, /* 8 / 8 bits */
61 VIRTIO_SND_PCM_FMT_S8, /* 8 / 8 bits */
62 VIRTIO_SND_PCM_FMT_U8, /* 8 / 8 bits */
63 VIRTIO_SND_PCM_FMT_S16, /* 16 / 16 bits */
64 VIRTIO_SND_PCM_FMT_U16, /* 16 / 16 bits */
65 VIRTIO_SND_PCM_FMT_S18_3, /* 18 / 24 bits */
66 VIRTIO_SND_PCM_FMT_U18_3, /* 18 / 24 bits */
67 VIRTIO_SND_PCM_FMT_S20_3, /* 20 / 24 bits */
68 VIRTIO_SND_PCM_FMT_U20_3, /* 20 / 24 bits */
69 VIRTIO_SND_PCM_FMT_S24_3, /* 24 / 24 bits */
70 VIRTIO_SND_PCM_FMT_U24_3, /* 24 / 24 bits */
71 VIRTIO_SND_PCM_FMT_S20, /* 20 / 32 bits */
72 VIRTIO_SND_PCM_FMT_U20, /* 20 / 32 bits */
73 VIRTIO_SND_PCM_FMT_S24, /* 24 / 32 bits */
74 VIRTIO_SND_PCM_FMT_U24, /* 24 / 32 bits */
75 VIRTIO_SND_PCM_FMT_S32, /* 32 / 32 bits */
76 VIRTIO_SND_PCM_FMT_U32, /* 32 / 32 bits */
77 VIRTIO_SND_PCM_FMT_FLOAT, /* 32 / 32 bits */
78 VIRTIO_SND_PCM_FMT_FLOAT64, /* 64 / 64 bits */
79 /* digital formats (width / physical width) */
80 VIRTIO_SND_PCM_FMT_DSD_U8, /* 8 / 8 bits */
81 VIRTIO_SND_PCM_FMT_DSD_U16, /* 16 / 16 bits */
82 VIRTIO_SND_PCM_FMT_DSD_U32, /* 32 / 32 bits */
83 VIRTIO_SND_PCM_FMT_IEC958_SUBFRAME /* 32 / 32 bits */
84};
85
86/* supported PCM frame rates */
87enum AudioStreamRate : uint8_t {
103
104/* standard channel position definition */
105enum AudioChannelMap : uint8_t {
106 VIRTIO_SND_CHMAP_NONE = 0, /* undefined */
108 VIRTIO_SND_CHMAP_MONO, /* mono stream */
109 VIRTIO_SND_CHMAP_FL, /* front left */
110 VIRTIO_SND_CHMAP_FR, /* front right */
111 VIRTIO_SND_CHMAP_RL, /* rear left */
112 VIRTIO_SND_CHMAP_RR, /* rear right */
113 VIRTIO_SND_CHMAP_FC, /* front center */
114 VIRTIO_SND_CHMAP_LFE, /* low frequency (LFE) */
115 VIRTIO_SND_CHMAP_SL, /* side left */
116 VIRTIO_SND_CHMAP_SR, /* side right */
117 VIRTIO_SND_CHMAP_RC, /* rear center */
118 VIRTIO_SND_CHMAP_FLC, /* front left center */
119 VIRTIO_SND_CHMAP_FRC, /* front right center */
120 VIRTIO_SND_CHMAP_RLC, /* rear left center */
121 VIRTIO_SND_CHMAP_RRC, /* rear right center */
122 VIRTIO_SND_CHMAP_FLW, /* front left wide */
123 VIRTIO_SND_CHMAP_FRW, /* front right wide */
124 VIRTIO_SND_CHMAP_FLH, /* front left high */
125 VIRTIO_SND_CHMAP_FCH, /* front center high */
126 VIRTIO_SND_CHMAP_FRH, /* front right high */
127 VIRTIO_SND_CHMAP_TC, /* top center */
128 VIRTIO_SND_CHMAP_TFL, /* top front left */
129 VIRTIO_SND_CHMAP_TFR, /* top front right */
130 VIRTIO_SND_CHMAP_TFC, /* top front center */
131 VIRTIO_SND_CHMAP_TRL, /* top rear left */
132 VIRTIO_SND_CHMAP_TRR, /* top rear right */
133 VIRTIO_SND_CHMAP_TRC, /* top rear center */
134 VIRTIO_SND_CHMAP_TFLC, /* top front left center */
135 VIRTIO_SND_CHMAP_TFRC, /* top front right center */
136 VIRTIO_SND_CHMAP_TSL, /* top side left */
137 VIRTIO_SND_CHMAP_TSR, /* top side right */
138 VIRTIO_SND_CHMAP_LLFE, /* left LFE */
139 VIRTIO_SND_CHMAP_RLFE, /* right LFE */
140 VIRTIO_SND_CHMAP_BC, /* bottom center */
141 VIRTIO_SND_CHMAP_BLC, /* bottom left center */
142 VIRTIO_SND_CHMAP_BRC /* bottom right center */
144
146 Le32 code;
147};
148
152 Le32 count;
153 Le32 size; // unused
154};
155
158};
159
160/* supported jack features */
161enum AudioJackFeatures: uint8_t {
164
167 Le32 features; /* 1 << VIRTIO_SND_JACK_F_XXX */
170 uint8_t connected;
171
172 uint8_t padding[7];
173};
174
175constexpr uint8_t VIRTIO_SND_CHMAP_MAX_SIZE = 18;
178 uint8_t direction;
179 uint8_t channels;
181};
182
185 Le32 features; /* 1 << VIRTIO_SND_PCM_F_XXX */
186 Le64 formats; /* 1 << VIRTIO_SND_PCM_FMT_XXX */
187 Le64 rates; /* 1 << VIRTIO_SND_PCM_RATE_XXX */
188 uint8_t direction;
191
192 uint8_t padding[5];
193};
194
198};
199
204 Le32 features; /* 1 << VIRTIO_SND_PCM_F_XXX */
205 uint8_t channels;
206 uint8_t format;
207 uint8_t rate;
208 uint8_t padding;
209};
210
213};
214
216 Le32 status;
218};
219
220// Update this value when the msg layouts change
221const uint32_t VIOS_VERSION = 2;
222
224 uint32_t version;
225 uint32_t jacks;
226 uint32_t streams;
227 uint32_t chmaps;
228};
229
233 uint32_t buffer_len;
234};
235
240};
241
242// Ensure all message structs have predictable sizes
243#define ASSERT_VALID_MSG_TYPE(T, size) \
244 static_assert(sizeof(T) == (size), #T " has the wrong size")
253#undef ASSERT_VALID_MSG_TYPE
254
255} // namespace cuttlefish
Definition: alloc_utils.cpp:23
AudioChannelMap
Definition: shm_layout.h:105
@ VIRTIO_SND_CHMAP_BRC
Definition: shm_layout.h:142
@ VIRTIO_SND_CHMAP_TFC
Definition: shm_layout.h:130
@ VIRTIO_SND_CHMAP_RL
Definition: shm_layout.h:111
@ VIRTIO_SND_CHMAP_TSL
Definition: shm_layout.h:136
@ VIRTIO_SND_CHMAP_FRC
Definition: shm_layout.h:119
@ VIRTIO_SND_CHMAP_TFL
Definition: shm_layout.h:128
@ VIRTIO_SND_CHMAP_FLH
Definition: shm_layout.h:124
@ VIRTIO_SND_CHMAP_FCH
Definition: shm_layout.h:125
@ VIRTIO_SND_CHMAP_FRW
Definition: shm_layout.h:123
@ VIRTIO_SND_CHMAP_LLFE
Definition: shm_layout.h:138
@ VIRTIO_SND_CHMAP_TRL
Definition: shm_layout.h:131
@ VIRTIO_SND_CHMAP_FR
Definition: shm_layout.h:110
@ VIRTIO_SND_CHMAP_FLC
Definition: shm_layout.h:118
@ VIRTIO_SND_CHMAP_FC
Definition: shm_layout.h:113
@ VIRTIO_SND_CHMAP_BLC
Definition: shm_layout.h:141
@ VIRTIO_SND_CHMAP_FL
Definition: shm_layout.h:109
@ VIRTIO_SND_CHMAP_RRC
Definition: shm_layout.h:121
@ VIRTIO_SND_CHMAP_FRH
Definition: shm_layout.h:126
@ VIRTIO_SND_CHMAP_TC
Definition: shm_layout.h:127
@ VIRTIO_SND_CHMAP_RLC
Definition: shm_layout.h:120
@ VIRTIO_SND_CHMAP_TFR
Definition: shm_layout.h:129
@ VIRTIO_SND_CHMAP_MONO
Definition: shm_layout.h:108
@ VIRTIO_SND_CHMAP_RC
Definition: shm_layout.h:117
@ VIRTIO_SND_CHMAP_BC
Definition: shm_layout.h:140
@ VIRTIO_SND_CHMAP_NONE
Definition: shm_layout.h:106
@ VIRTIO_SND_CHMAP_LFE
Definition: shm_layout.h:114
@ VIRTIO_SND_CHMAP_TRC
Definition: shm_layout.h:133
@ VIRTIO_SND_CHMAP_TFRC
Definition: shm_layout.h:135
@ VIRTIO_SND_CHMAP_TRR
Definition: shm_layout.h:132
@ VIRTIO_SND_CHMAP_SL
Definition: shm_layout.h:115
@ VIRTIO_SND_CHMAP_SR
Definition: shm_layout.h:116
@ VIRTIO_SND_CHMAP_RR
Definition: shm_layout.h:112
@ VIRTIO_SND_CHMAP_FLW
Definition: shm_layout.h:122
@ VIRTIO_SND_CHMAP_NA
Definition: shm_layout.h:107
@ VIRTIO_SND_CHMAP_TFLC
Definition: shm_layout.h:134
@ VIRTIO_SND_CHMAP_TSR
Definition: shm_layout.h:137
@ VIRTIO_SND_CHMAP_RLFE
Definition: shm_layout.h:139
AudioCommandType
Definition: shm_layout.h:23
AudioStreamFormat
Definition: shm_layout.h:56
const uint32_t VIOS_VERSION
Definition: shm_layout.h:221
constexpr uint8_t VIRTIO_SND_CHMAP_MAX_SIZE
Definition: shm_layout.h:175
AudioJackFeatures
Definition: shm_layout.h:161
@ VIRTIO_SND_JACK_F_REMAP
Definition: shm_layout.h:162
AudioStreamRate
Definition: shm_layout.h:87
@ VIRTIO_SND_PCM_RATE_88200
Definition: shm_layout.h:97
@ VIRTIO_SND_PCM_RATE_44100
Definition: shm_layout.h:94
@ VIRTIO_SND_PCM_RATE_11025
Definition: shm_layout.h:90
@ VIRTIO_SND_PCM_RATE_64000
Definition: shm_layout.h:96
@ VIRTIO_SND_PCM_RATE_192000
Definition: shm_layout.h:100
@ VIRTIO_SND_PCM_RATE_96000
Definition: shm_layout.h:98
@ VIRTIO_SND_PCM_RATE_22050
Definition: shm_layout.h:92
@ VIRTIO_SND_PCM_RATE_32000
Definition: shm_layout.h:93
@ VIRTIO_SND_PCM_RATE_176400
Definition: shm_layout.h:99
@ VIRTIO_SND_PCM_RATE_16000
Definition: shm_layout.h:91
@ VIRTIO_SND_PCM_RATE_8000
Definition: shm_layout.h:89
@ VIRTIO_SND_PCM_RATE_48000
Definition: shm_layout.h:95
@ VIRTIO_SND_PCM_RATE_5512
Definition: shm_layout.h:88
@ VIRTIO_SND_PCM_RATE_384000
Definition: shm_layout.h:101
AudioStatus
Definition: shm_layout.h:40
AudioStreamDirection
Definition: shm_layout.h:51
ASSERT_VALID_MSG_TYPE(virtio_snd_query_info, 16)
Definition: shm_layout.h:236
uint32_t consumed_length
Definition: shm_layout.h:239
virtio_snd_pcm_status status
Definition: shm_layout.h:237
uint32_t buffer_offset
Definition: shm_layout.h:238
Definition: shm_layout.h:230
uint32_t buffer_len
Definition: shm_layout.h:233
virtio_snd_pcm_xfer io_xfer
Definition: shm_layout.h:231
uint32_t buffer_offset
Definition: shm_layout.h:232
Definition: shm_layout.h:223
uint32_t version
Definition: shm_layout.h:224
uint32_t jacks
Definition: shm_layout.h:225
uint32_t streams
Definition: shm_layout.h:226
uint32_t chmaps
Definition: shm_layout.h:227
Definition: shm_layout.h:176
uint8_t direction
Definition: shm_layout.h:178
uint8_t channels
Definition: shm_layout.h:179
struct virtio_snd_info hdr
Definition: shm_layout.h:177
uint8_t positions[VIRTIO_SND_CHMAP_MAX_SIZE]
Definition: shm_layout.h:180
Definition: shm_layout.h:145
Le32 code
Definition: shm_layout.h:146
Definition: shm_layout.h:156
Le32 hda_fn_nid
Definition: shm_layout.h:157
Definition: shm_layout.h:165
struct virtio_snd_info hdr
Definition: shm_layout.h:166
Le32 features
Definition: shm_layout.h:167
uint8_t padding[7]
Definition: shm_layout.h:172
uint8_t connected
Definition: shm_layout.h:170
Le32 hda_reg_caps
Definition: shm_layout.h:169
Le32 hda_reg_defconf
Definition: shm_layout.h:168
Definition: shm_layout.h:195
Le32 stream_id
Definition: shm_layout.h:197
struct virtio_snd_hdr hdr
Definition: shm_layout.h:196
Definition: shm_layout.h:183
Le32 features
Definition: shm_layout.h:185
Le64 formats
Definition: shm_layout.h:186
uint8_t channels_min
Definition: shm_layout.h:189
struct virtio_snd_info hdr
Definition: shm_layout.h:184
Le64 rates
Definition: shm_layout.h:187
uint8_t channels_max
Definition: shm_layout.h:190
uint8_t padding[5]
Definition: shm_layout.h:192
uint8_t direction
Definition: shm_layout.h:188
Definition: shm_layout.h:200
Le32 buffer_bytes
Definition: shm_layout.h:202
uint8_t format
Definition: shm_layout.h:206
Le32 features
Definition: shm_layout.h:204
uint8_t rate
Definition: shm_layout.h:207
uint8_t padding
Definition: shm_layout.h:208
uint8_t channels
Definition: shm_layout.h:205
Le32 period_bytes
Definition: shm_layout.h:203
struct virtio_snd_pcm_hdr hdr
Definition: shm_layout.h:201
Definition: shm_layout.h:215
Le32 status
Definition: shm_layout.h:216
Le32 latency_bytes
Definition: shm_layout.h:217
Definition: shm_layout.h:211
Le32 stream_id
Definition: shm_layout.h:212
Definition: shm_layout.h:149
Le32 start_id
Definition: shm_layout.h:151
Le32 count
Definition: shm_layout.h:152
struct virtio_snd_hdr hdr
Definition: shm_layout.h:150
Le32 size
Definition: shm_layout.h:153