0001
0002
0003
0004
0005 #ifndef VIRTIO_SND_IF_H
0006 #define VIRTIO_SND_IF_H
0007
0008 #include <linux/virtio_types.h>
0009
0010
0011
0012
0013 struct virtio_snd_config {
0014
0015 __le32 jacks;
0016
0017 __le32 streams;
0018
0019 __le32 chmaps;
0020 };
0021
0022 enum {
0023
0024 VIRTIO_SND_VQ_CONTROL = 0,
0025 VIRTIO_SND_VQ_EVENT,
0026 VIRTIO_SND_VQ_TX,
0027 VIRTIO_SND_VQ_RX,
0028
0029 VIRTIO_SND_VQ_MAX
0030 };
0031
0032
0033
0034
0035
0036
0037 enum {
0038 VIRTIO_SND_D_OUTPUT = 0,
0039 VIRTIO_SND_D_INPUT
0040 };
0041
0042 enum {
0043
0044 VIRTIO_SND_R_JACK_INFO = 1,
0045 VIRTIO_SND_R_JACK_REMAP,
0046
0047
0048 VIRTIO_SND_R_PCM_INFO = 0x0100,
0049 VIRTIO_SND_R_PCM_SET_PARAMS,
0050 VIRTIO_SND_R_PCM_PREPARE,
0051 VIRTIO_SND_R_PCM_RELEASE,
0052 VIRTIO_SND_R_PCM_START,
0053 VIRTIO_SND_R_PCM_STOP,
0054
0055
0056 VIRTIO_SND_R_CHMAP_INFO = 0x0200,
0057
0058
0059 VIRTIO_SND_EVT_JACK_CONNECTED = 0x1000,
0060 VIRTIO_SND_EVT_JACK_DISCONNECTED,
0061
0062
0063 VIRTIO_SND_EVT_PCM_PERIOD_ELAPSED = 0x1100,
0064 VIRTIO_SND_EVT_PCM_XRUN,
0065
0066
0067 VIRTIO_SND_S_OK = 0x8000,
0068 VIRTIO_SND_S_BAD_MSG,
0069 VIRTIO_SND_S_NOT_SUPP,
0070 VIRTIO_SND_S_IO_ERR
0071 };
0072
0073
0074 struct virtio_snd_hdr {
0075 __le32 code;
0076 };
0077
0078
0079 struct virtio_snd_event {
0080
0081 struct virtio_snd_hdr hdr;
0082
0083 __le32 data;
0084 };
0085
0086
0087 struct virtio_snd_query_info {
0088
0089 struct virtio_snd_hdr hdr;
0090
0091 __le32 start_id;
0092
0093 __le32 count;
0094
0095 __le32 size;
0096 };
0097
0098
0099 struct virtio_snd_info {
0100
0101 __le32 hda_fn_nid;
0102 };
0103
0104
0105
0106
0107 struct virtio_snd_jack_hdr {
0108
0109 struct virtio_snd_hdr hdr;
0110
0111 __le32 jack_id;
0112 };
0113
0114
0115 enum {
0116 VIRTIO_SND_JACK_F_REMAP = 0
0117 };
0118
0119 struct virtio_snd_jack_info {
0120
0121 struct virtio_snd_info hdr;
0122
0123 __le32 features;
0124
0125 __le32 hda_reg_defconf;
0126
0127 __le32 hda_reg_caps;
0128
0129 __u8 connected;
0130
0131 __u8 padding[7];
0132 };
0133
0134
0135 struct virtio_snd_jack_remap {
0136
0137 struct virtio_snd_jack_hdr hdr;
0138
0139 __le32 association;
0140
0141 __le32 sequence;
0142 };
0143
0144
0145
0146
0147 struct virtio_snd_pcm_hdr {
0148
0149 struct virtio_snd_hdr hdr;
0150
0151 __le32 stream_id;
0152 };
0153
0154
0155 enum {
0156 VIRTIO_SND_PCM_F_SHMEM_HOST = 0,
0157 VIRTIO_SND_PCM_F_SHMEM_GUEST,
0158 VIRTIO_SND_PCM_F_MSG_POLLING,
0159 VIRTIO_SND_PCM_F_EVT_SHMEM_PERIODS,
0160 VIRTIO_SND_PCM_F_EVT_XRUNS
0161 };
0162
0163
0164 enum {
0165
0166 VIRTIO_SND_PCM_FMT_IMA_ADPCM = 0,
0167 VIRTIO_SND_PCM_FMT_MU_LAW,
0168 VIRTIO_SND_PCM_FMT_A_LAW,
0169 VIRTIO_SND_PCM_FMT_S8,
0170 VIRTIO_SND_PCM_FMT_U8,
0171 VIRTIO_SND_PCM_FMT_S16,
0172 VIRTIO_SND_PCM_FMT_U16,
0173 VIRTIO_SND_PCM_FMT_S18_3,
0174 VIRTIO_SND_PCM_FMT_U18_3,
0175 VIRTIO_SND_PCM_FMT_S20_3,
0176 VIRTIO_SND_PCM_FMT_U20_3,
0177 VIRTIO_SND_PCM_FMT_S24_3,
0178 VIRTIO_SND_PCM_FMT_U24_3,
0179 VIRTIO_SND_PCM_FMT_S20,
0180 VIRTIO_SND_PCM_FMT_U20,
0181 VIRTIO_SND_PCM_FMT_S24,
0182 VIRTIO_SND_PCM_FMT_U24,
0183 VIRTIO_SND_PCM_FMT_S32,
0184 VIRTIO_SND_PCM_FMT_U32,
0185 VIRTIO_SND_PCM_FMT_FLOAT,
0186 VIRTIO_SND_PCM_FMT_FLOAT64,
0187
0188 VIRTIO_SND_PCM_FMT_DSD_U8,
0189 VIRTIO_SND_PCM_FMT_DSD_U16,
0190 VIRTIO_SND_PCM_FMT_DSD_U32,
0191 VIRTIO_SND_PCM_FMT_IEC958_SUBFRAME
0192 };
0193
0194
0195 enum {
0196 VIRTIO_SND_PCM_RATE_5512 = 0,
0197 VIRTIO_SND_PCM_RATE_8000,
0198 VIRTIO_SND_PCM_RATE_11025,
0199 VIRTIO_SND_PCM_RATE_16000,
0200 VIRTIO_SND_PCM_RATE_22050,
0201 VIRTIO_SND_PCM_RATE_32000,
0202 VIRTIO_SND_PCM_RATE_44100,
0203 VIRTIO_SND_PCM_RATE_48000,
0204 VIRTIO_SND_PCM_RATE_64000,
0205 VIRTIO_SND_PCM_RATE_88200,
0206 VIRTIO_SND_PCM_RATE_96000,
0207 VIRTIO_SND_PCM_RATE_176400,
0208 VIRTIO_SND_PCM_RATE_192000,
0209 VIRTIO_SND_PCM_RATE_384000
0210 };
0211
0212 struct virtio_snd_pcm_info {
0213
0214 struct virtio_snd_info hdr;
0215
0216 __le32 features;
0217
0218 __le64 formats;
0219
0220 __le64 rates;
0221
0222 __u8 direction;
0223
0224 __u8 channels_min;
0225
0226 __u8 channels_max;
0227
0228 __u8 padding[5];
0229 };
0230
0231
0232 struct virtio_snd_pcm_set_params {
0233
0234 struct virtio_snd_pcm_hdr hdr;
0235
0236 __le32 buffer_bytes;
0237
0238 __le32 period_bytes;
0239
0240 __le32 features;
0241
0242 __u8 channels;
0243
0244 __u8 format;
0245
0246 __u8 rate;
0247
0248 __u8 padding;
0249 };
0250
0251
0252
0253
0254
0255
0256 struct virtio_snd_pcm_xfer {
0257
0258 __le32 stream_id;
0259 };
0260
0261
0262 struct virtio_snd_pcm_status {
0263
0264 __le32 status;
0265
0266 __le32 latency_bytes;
0267 };
0268
0269
0270
0271
0272 struct virtio_snd_chmap_hdr {
0273
0274 struct virtio_snd_hdr hdr;
0275
0276 __le32 chmap_id;
0277 };
0278
0279
0280 enum {
0281 VIRTIO_SND_CHMAP_NONE = 0,
0282 VIRTIO_SND_CHMAP_NA,
0283 VIRTIO_SND_CHMAP_MONO,
0284 VIRTIO_SND_CHMAP_FL,
0285 VIRTIO_SND_CHMAP_FR,
0286 VIRTIO_SND_CHMAP_RL,
0287 VIRTIO_SND_CHMAP_RR,
0288 VIRTIO_SND_CHMAP_FC,
0289 VIRTIO_SND_CHMAP_LFE,
0290 VIRTIO_SND_CHMAP_SL,
0291 VIRTIO_SND_CHMAP_SR,
0292 VIRTIO_SND_CHMAP_RC,
0293 VIRTIO_SND_CHMAP_FLC,
0294 VIRTIO_SND_CHMAP_FRC,
0295 VIRTIO_SND_CHMAP_RLC,
0296 VIRTIO_SND_CHMAP_RRC,
0297 VIRTIO_SND_CHMAP_FLW,
0298 VIRTIO_SND_CHMAP_FRW,
0299 VIRTIO_SND_CHMAP_FLH,
0300 VIRTIO_SND_CHMAP_FCH,
0301 VIRTIO_SND_CHMAP_FRH,
0302 VIRTIO_SND_CHMAP_TC,
0303 VIRTIO_SND_CHMAP_TFL,
0304 VIRTIO_SND_CHMAP_TFR,
0305 VIRTIO_SND_CHMAP_TFC,
0306 VIRTIO_SND_CHMAP_TRL,
0307 VIRTIO_SND_CHMAP_TRR,
0308 VIRTIO_SND_CHMAP_TRC,
0309 VIRTIO_SND_CHMAP_TFLC,
0310 VIRTIO_SND_CHMAP_TFRC,
0311 VIRTIO_SND_CHMAP_TSL,
0312 VIRTIO_SND_CHMAP_TSR,
0313 VIRTIO_SND_CHMAP_LLFE,
0314 VIRTIO_SND_CHMAP_RLFE,
0315 VIRTIO_SND_CHMAP_BC,
0316 VIRTIO_SND_CHMAP_BLC,
0317 VIRTIO_SND_CHMAP_BRC
0318 };
0319
0320
0321 #define VIRTIO_SND_CHMAP_MAX_SIZE 18
0322
0323 struct virtio_snd_chmap_info {
0324
0325 struct virtio_snd_info hdr;
0326
0327 __u8 direction;
0328
0329 __u8 channels;
0330
0331 __u8 positions[VIRTIO_SND_CHMAP_MAX_SIZE];
0332 };
0333
0334 #endif