cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

virtio_snd.h (9304B)


      1/* SPDX-License-Identifier: BSD-3-Clause */
      2/*
      3 * Copyright (C) 2021 OpenSynergy GmbH
      4 */
      5#ifndef VIRTIO_SND_IF_H
      6#define VIRTIO_SND_IF_H
      7
      8#include <linux/virtio_types.h>
      9
     10/*******************************************************************************
     11 * CONFIGURATION SPACE
     12 */
     13struct virtio_snd_config {
     14	/* # of available physical jacks */
     15	__le32 jacks;
     16	/* # of available PCM streams */
     17	__le32 streams;
     18	/* # of available channel maps */
     19	__le32 chmaps;
     20};
     21
     22enum {
     23	/* device virtqueue indexes */
     24	VIRTIO_SND_VQ_CONTROL = 0,
     25	VIRTIO_SND_VQ_EVENT,
     26	VIRTIO_SND_VQ_TX,
     27	VIRTIO_SND_VQ_RX,
     28	/* # of device virtqueues */
     29	VIRTIO_SND_VQ_MAX
     30};
     31
     32/*******************************************************************************
     33 * COMMON DEFINITIONS
     34 */
     35
     36/* supported dataflow directions */
     37enum {
     38	VIRTIO_SND_D_OUTPUT = 0,
     39	VIRTIO_SND_D_INPUT
     40};
     41
     42enum {
     43	/* jack control request types */
     44	VIRTIO_SND_R_JACK_INFO = 1,
     45	VIRTIO_SND_R_JACK_REMAP,
     46
     47	/* PCM control request types */
     48	VIRTIO_SND_R_PCM_INFO = 0x0100,
     49	VIRTIO_SND_R_PCM_SET_PARAMS,
     50	VIRTIO_SND_R_PCM_PREPARE,
     51	VIRTIO_SND_R_PCM_RELEASE,
     52	VIRTIO_SND_R_PCM_START,
     53	VIRTIO_SND_R_PCM_STOP,
     54
     55	/* channel map control request types */
     56	VIRTIO_SND_R_CHMAP_INFO = 0x0200,
     57
     58	/* jack event types */
     59	VIRTIO_SND_EVT_JACK_CONNECTED = 0x1000,
     60	VIRTIO_SND_EVT_JACK_DISCONNECTED,
     61
     62	/* PCM event types */
     63	VIRTIO_SND_EVT_PCM_PERIOD_ELAPSED = 0x1100,
     64	VIRTIO_SND_EVT_PCM_XRUN,
     65
     66	/* common status codes */
     67	VIRTIO_SND_S_OK = 0x8000,
     68	VIRTIO_SND_S_BAD_MSG,
     69	VIRTIO_SND_S_NOT_SUPP,
     70	VIRTIO_SND_S_IO_ERR
     71};
     72
     73/* common header */
     74struct virtio_snd_hdr {
     75	__le32 code;
     76};
     77
     78/* event notification */
     79struct virtio_snd_event {
     80	/* VIRTIO_SND_EVT_XXX */
     81	struct virtio_snd_hdr hdr;
     82	/* optional event data */
     83	__le32 data;
     84};
     85
     86/* common control request to query an item information */
     87struct virtio_snd_query_info {
     88	/* VIRTIO_SND_R_XXX_INFO */
     89	struct virtio_snd_hdr hdr;
     90	/* item start identifier */
     91	__le32 start_id;
     92	/* item count to query */
     93	__le32 count;
     94	/* item information size in bytes */
     95	__le32 size;
     96};
     97
     98/* common item information header */
     99struct virtio_snd_info {
    100	/* function group node id (High Definition Audio Specification 7.1.2) */
    101	__le32 hda_fn_nid;
    102};
    103
    104/*******************************************************************************
    105 * JACK CONTROL MESSAGES
    106 */
    107struct virtio_snd_jack_hdr {
    108	/* VIRTIO_SND_R_JACK_XXX */
    109	struct virtio_snd_hdr hdr;
    110	/* 0 ... virtio_snd_config::jacks - 1 */
    111	__le32 jack_id;
    112};
    113
    114/* supported jack features */
    115enum {
    116	VIRTIO_SND_JACK_F_REMAP = 0
    117};
    118
    119struct virtio_snd_jack_info {
    120	/* common header */
    121	struct virtio_snd_info hdr;
    122	/* supported feature bit map (1 << VIRTIO_SND_JACK_F_XXX) */
    123	__le32 features;
    124	/* pin configuration (High Definition Audio Specification 7.3.3.31) */
    125	__le32 hda_reg_defconf;
    126	/* pin capabilities (High Definition Audio Specification 7.3.4.9) */
    127	__le32 hda_reg_caps;
    128	/* current jack connection status (0: disconnected, 1: connected) */
    129	__u8 connected;
    130
    131	__u8 padding[7];
    132};
    133
    134/* jack remapping control request */
    135struct virtio_snd_jack_remap {
    136	/* .code = VIRTIO_SND_R_JACK_REMAP */
    137	struct virtio_snd_jack_hdr hdr;
    138	/* selected association number */
    139	__le32 association;
    140	/* selected sequence number */
    141	__le32 sequence;
    142};
    143
    144/*******************************************************************************
    145 * PCM CONTROL MESSAGES
    146 */
    147struct virtio_snd_pcm_hdr {
    148	/* VIRTIO_SND_R_PCM_XXX */
    149	struct virtio_snd_hdr hdr;
    150	/* 0 ... virtio_snd_config::streams - 1 */
    151	__le32 stream_id;
    152};
    153
    154/* supported PCM stream features */
    155enum {
    156	VIRTIO_SND_PCM_F_SHMEM_HOST = 0,
    157	VIRTIO_SND_PCM_F_SHMEM_GUEST,
    158	VIRTIO_SND_PCM_F_MSG_POLLING,
    159	VIRTIO_SND_PCM_F_EVT_SHMEM_PERIODS,
    160	VIRTIO_SND_PCM_F_EVT_XRUNS
    161};
    162
    163/* supported PCM sample formats */
    164enum {
    165	/* analog formats (width / physical width) */
    166	VIRTIO_SND_PCM_FMT_IMA_ADPCM = 0,	/*  4 /  4 bits */
    167	VIRTIO_SND_PCM_FMT_MU_LAW,		/*  8 /  8 bits */
    168	VIRTIO_SND_PCM_FMT_A_LAW,		/*  8 /  8 bits */
    169	VIRTIO_SND_PCM_FMT_S8,			/*  8 /  8 bits */
    170	VIRTIO_SND_PCM_FMT_U8,			/*  8 /  8 bits */
    171	VIRTIO_SND_PCM_FMT_S16,			/* 16 / 16 bits */
    172	VIRTIO_SND_PCM_FMT_U16,			/* 16 / 16 bits */
    173	VIRTIO_SND_PCM_FMT_S18_3,		/* 18 / 24 bits */
    174	VIRTIO_SND_PCM_FMT_U18_3,		/* 18 / 24 bits */
    175	VIRTIO_SND_PCM_FMT_S20_3,		/* 20 / 24 bits */
    176	VIRTIO_SND_PCM_FMT_U20_3,		/* 20 / 24 bits */
    177	VIRTIO_SND_PCM_FMT_S24_3,		/* 24 / 24 bits */
    178	VIRTIO_SND_PCM_FMT_U24_3,		/* 24 / 24 bits */
    179	VIRTIO_SND_PCM_FMT_S20,			/* 20 / 32 bits */
    180	VIRTIO_SND_PCM_FMT_U20,			/* 20 / 32 bits */
    181	VIRTIO_SND_PCM_FMT_S24,			/* 24 / 32 bits */
    182	VIRTIO_SND_PCM_FMT_U24,			/* 24 / 32 bits */
    183	VIRTIO_SND_PCM_FMT_S32,			/* 32 / 32 bits */
    184	VIRTIO_SND_PCM_FMT_U32,			/* 32 / 32 bits */
    185	VIRTIO_SND_PCM_FMT_FLOAT,		/* 32 / 32 bits */
    186	VIRTIO_SND_PCM_FMT_FLOAT64,		/* 64 / 64 bits */
    187	/* digital formats (width / physical width) */
    188	VIRTIO_SND_PCM_FMT_DSD_U8,		/*  8 /  8 bits */
    189	VIRTIO_SND_PCM_FMT_DSD_U16,		/* 16 / 16 bits */
    190	VIRTIO_SND_PCM_FMT_DSD_U32,		/* 32 / 32 bits */
    191	VIRTIO_SND_PCM_FMT_IEC958_SUBFRAME	/* 32 / 32 bits */
    192};
    193
    194/* supported PCM frame rates */
    195enum {
    196	VIRTIO_SND_PCM_RATE_5512 = 0,
    197	VIRTIO_SND_PCM_RATE_8000,
    198	VIRTIO_SND_PCM_RATE_11025,
    199	VIRTIO_SND_PCM_RATE_16000,
    200	VIRTIO_SND_PCM_RATE_22050,
    201	VIRTIO_SND_PCM_RATE_32000,
    202	VIRTIO_SND_PCM_RATE_44100,
    203	VIRTIO_SND_PCM_RATE_48000,
    204	VIRTIO_SND_PCM_RATE_64000,
    205	VIRTIO_SND_PCM_RATE_88200,
    206	VIRTIO_SND_PCM_RATE_96000,
    207	VIRTIO_SND_PCM_RATE_176400,
    208	VIRTIO_SND_PCM_RATE_192000,
    209	VIRTIO_SND_PCM_RATE_384000
    210};
    211
    212struct virtio_snd_pcm_info {
    213	/* common header */
    214	struct virtio_snd_info hdr;
    215	/* supported feature bit map (1 << VIRTIO_SND_PCM_F_XXX) */
    216	__le32 features;
    217	/* supported sample format bit map (1 << VIRTIO_SND_PCM_FMT_XXX) */
    218	__le64 formats;
    219	/* supported frame rate bit map (1 << VIRTIO_SND_PCM_RATE_XXX) */
    220	__le64 rates;
    221	/* dataflow direction (VIRTIO_SND_D_XXX) */
    222	__u8 direction;
    223	/* minimum # of supported channels */
    224	__u8 channels_min;
    225	/* maximum # of supported channels */
    226	__u8 channels_max;
    227
    228	__u8 padding[5];
    229};
    230
    231/* set PCM stream format */
    232struct virtio_snd_pcm_set_params {
    233	/* .code = VIRTIO_SND_R_PCM_SET_PARAMS */
    234	struct virtio_snd_pcm_hdr hdr;
    235	/* size of the hardware buffer */
    236	__le32 buffer_bytes;
    237	/* size of the hardware period */
    238	__le32 period_bytes;
    239	/* selected feature bit map (1 << VIRTIO_SND_PCM_F_XXX) */
    240	__le32 features;
    241	/* selected # of channels */
    242	__u8 channels;
    243	/* selected sample format (VIRTIO_SND_PCM_FMT_XXX) */
    244	__u8 format;
    245	/* selected frame rate (VIRTIO_SND_PCM_RATE_XXX) */
    246	__u8 rate;
    247
    248	__u8 padding;
    249};
    250
    251/*******************************************************************************
    252 * PCM I/O MESSAGES
    253 */
    254
    255/* I/O request header */
    256struct virtio_snd_pcm_xfer {
    257	/* 0 ... virtio_snd_config::streams - 1 */
    258	__le32 stream_id;
    259};
    260
    261/* I/O request status */
    262struct virtio_snd_pcm_status {
    263	/* VIRTIO_SND_S_XXX */
    264	__le32 status;
    265	/* current device latency */
    266	__le32 latency_bytes;
    267};
    268
    269/*******************************************************************************
    270 * CHANNEL MAP CONTROL MESSAGES
    271 */
    272struct virtio_snd_chmap_hdr {
    273	/* VIRTIO_SND_R_CHMAP_XXX */
    274	struct virtio_snd_hdr hdr;
    275	/* 0 ... virtio_snd_config::chmaps - 1 */
    276	__le32 chmap_id;
    277};
    278
    279/* standard channel position definition */
    280enum {
    281	VIRTIO_SND_CHMAP_NONE = 0,	/* undefined */
    282	VIRTIO_SND_CHMAP_NA,		/* silent */
    283	VIRTIO_SND_CHMAP_MONO,		/* mono stream */
    284	VIRTIO_SND_CHMAP_FL,		/* front left */
    285	VIRTIO_SND_CHMAP_FR,		/* front right */
    286	VIRTIO_SND_CHMAP_RL,		/* rear left */
    287	VIRTIO_SND_CHMAP_RR,		/* rear right */
    288	VIRTIO_SND_CHMAP_FC,		/* front center */
    289	VIRTIO_SND_CHMAP_LFE,		/* low frequency (LFE) */
    290	VIRTIO_SND_CHMAP_SL,		/* side left */
    291	VIRTIO_SND_CHMAP_SR,		/* side right */
    292	VIRTIO_SND_CHMAP_RC,		/* rear center */
    293	VIRTIO_SND_CHMAP_FLC,		/* front left center */
    294	VIRTIO_SND_CHMAP_FRC,		/* front right center */
    295	VIRTIO_SND_CHMAP_RLC,		/* rear left center */
    296	VIRTIO_SND_CHMAP_RRC,		/* rear right center */
    297	VIRTIO_SND_CHMAP_FLW,		/* front left wide */
    298	VIRTIO_SND_CHMAP_FRW,		/* front right wide */
    299	VIRTIO_SND_CHMAP_FLH,		/* front left high */
    300	VIRTIO_SND_CHMAP_FCH,		/* front center high */
    301	VIRTIO_SND_CHMAP_FRH,		/* front right high */
    302	VIRTIO_SND_CHMAP_TC,		/* top center */
    303	VIRTIO_SND_CHMAP_TFL,		/* top front left */
    304	VIRTIO_SND_CHMAP_TFR,		/* top front right */
    305	VIRTIO_SND_CHMAP_TFC,		/* top front center */
    306	VIRTIO_SND_CHMAP_TRL,		/* top rear left */
    307	VIRTIO_SND_CHMAP_TRR,		/* top rear right */
    308	VIRTIO_SND_CHMAP_TRC,		/* top rear center */
    309	VIRTIO_SND_CHMAP_TFLC,		/* top front left center */
    310	VIRTIO_SND_CHMAP_TFRC,		/* top front right center */
    311	VIRTIO_SND_CHMAP_TSL,		/* top side left */
    312	VIRTIO_SND_CHMAP_TSR,		/* top side right */
    313	VIRTIO_SND_CHMAP_LLFE,		/* left LFE */
    314	VIRTIO_SND_CHMAP_RLFE,		/* right LFE */
    315	VIRTIO_SND_CHMAP_BC,		/* bottom center */
    316	VIRTIO_SND_CHMAP_BLC,		/* bottom left center */
    317	VIRTIO_SND_CHMAP_BRC		/* bottom right center */
    318};
    319
    320/* maximum possible number of channels */
    321#define VIRTIO_SND_CHMAP_MAX_SIZE	18
    322
    323struct virtio_snd_chmap_info {
    324	/* common header */
    325	struct virtio_snd_info hdr;
    326	/* dataflow direction (VIRTIO_SND_D_XXX) */
    327	__u8 direction;
    328	/* # of valid channel position values */
    329	__u8 channels;
    330	/* channel position values (VIRTIO_SND_CHMAP_XXX) */
    331	__u8 positions[VIRTIO_SND_CHMAP_MAX_SIZE];
    332};
    333
    334#endif /* VIRTIO_SND_IF_H */