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

control.h (4983B)


      1/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
      2/*
      3 * This file is provided under a dual BSD/GPLv2 license.  When using or
      4 * redistributing this file, you may do so under either license.
      5 *
      6 * Copyright(c) 2018 Intel Corporation. All rights reserved.
      7 */
      8
      9#ifndef __INCLUDE_SOUND_SOF_CONTROL_H__
     10#define __INCLUDE_SOUND_SOF_CONTROL_H__
     11
     12#include <uapi/sound/sof/header.h>
     13#include <sound/sof/header.h>
     14
     15/*
     16 * Component Mixers and Controls
     17 */
     18
     19/* channel positions - uses same values as ALSA */
     20enum sof_ipc_chmap {
     21	SOF_CHMAP_UNKNOWN = 0,
     22	SOF_CHMAP_NA,		/**< N/A, silent */
     23	SOF_CHMAP_MONO,		/**< mono stream */
     24	SOF_CHMAP_FL,		/**< front left */
     25	SOF_CHMAP_FR,		/**< front right */
     26	SOF_CHMAP_RL,		/**< rear left */
     27	SOF_CHMAP_RR,		/**< rear right */
     28	SOF_CHMAP_FC,		/**< front centre */
     29	SOF_CHMAP_LFE,		/**< LFE */
     30	SOF_CHMAP_SL,		/**< side left */
     31	SOF_CHMAP_SR,		/**< side right */
     32	SOF_CHMAP_RC,		/**< rear centre */
     33	SOF_CHMAP_FLC,		/**< front left centre */
     34	SOF_CHMAP_FRC,		/**< front right centre */
     35	SOF_CHMAP_RLC,		/**< rear left centre */
     36	SOF_CHMAP_RRC,		/**< rear right centre */
     37	SOF_CHMAP_FLW,		/**< front left wide */
     38	SOF_CHMAP_FRW,		/**< front right wide */
     39	SOF_CHMAP_FLH,		/**< front left high */
     40	SOF_CHMAP_FCH,		/**< front centre high */
     41	SOF_CHMAP_FRH,		/**< front right high */
     42	SOF_CHMAP_TC,		/**< top centre */
     43	SOF_CHMAP_TFL,		/**< top front left */
     44	SOF_CHMAP_TFR,		/**< top front right */
     45	SOF_CHMAP_TFC,		/**< top front centre */
     46	SOF_CHMAP_TRL,		/**< top rear left */
     47	SOF_CHMAP_TRR,		/**< top rear right */
     48	SOF_CHMAP_TRC,		/**< top rear centre */
     49	SOF_CHMAP_TFLC,		/**< top front left centre */
     50	SOF_CHMAP_TFRC,		/**< top front right centre */
     51	SOF_CHMAP_TSL,		/**< top side left */
     52	SOF_CHMAP_TSR,		/**< top side right */
     53	SOF_CHMAP_LLFE,		/**< left LFE */
     54	SOF_CHMAP_RLFE,		/**< right LFE */
     55	SOF_CHMAP_BC,		/**< bottom centre */
     56	SOF_CHMAP_BLC,		/**< bottom left centre */
     57	SOF_CHMAP_BRC,		/**< bottom right centre */
     58	SOF_CHMAP_LAST = SOF_CHMAP_BRC,
     59};
     60
     61/* control data type and direction */
     62enum sof_ipc_ctrl_type {
     63	/*  per channel data - uses struct sof_ipc_ctrl_value_chan */
     64	SOF_CTRL_TYPE_VALUE_CHAN_GET = 0,
     65	SOF_CTRL_TYPE_VALUE_CHAN_SET,
     66	/* component data - uses struct sof_ipc_ctrl_value_comp */
     67	SOF_CTRL_TYPE_VALUE_COMP_GET,
     68	SOF_CTRL_TYPE_VALUE_COMP_SET,
     69	/* bespoke data - uses struct sof_abi_hdr */
     70	SOF_CTRL_TYPE_DATA_GET,
     71	SOF_CTRL_TYPE_DATA_SET,
     72};
     73
     74/* control command type */
     75enum sof_ipc_ctrl_cmd {
     76	SOF_CTRL_CMD_VOLUME = 0, /**< maps to ALSA volume style controls */
     77	SOF_CTRL_CMD_ENUM,	/**< maps to ALSA enum style controls */
     78	SOF_CTRL_CMD_SWITCH,	/**< maps to ALSA switch style controls */
     79	SOF_CTRL_CMD_BINARY,	/**< maps to ALSA binary style controls */
     80};
     81
     82/* generic channel mapped value data */
     83struct sof_ipc_ctrl_value_chan {
     84	uint32_t channel;	/**< channel map - enum sof_ipc_chmap */
     85	uint32_t value;
     86} __packed;
     87
     88/* generic component mapped value data */
     89struct sof_ipc_ctrl_value_comp {
     90	uint32_t index;	/**< component source/sink/control index in control */
     91	union {
     92		uint32_t uvalue;
     93		int32_t svalue;
     94	};
     95} __packed;
     96
     97/* generic control data */
     98struct sof_ipc_ctrl_data {
     99	struct sof_ipc_reply rhdr;
    100	uint32_t comp_id;
    101
    102	/* control access and data type */
    103	uint32_t type;		/**< enum sof_ipc_ctrl_type */
    104	uint32_t cmd;		/**< enum sof_ipc_ctrl_cmd */
    105	uint32_t index;		/**< control index for comps > 1 control */
    106
    107	/* control data - can either be appended or DMAed from host */
    108	struct sof_ipc_host_buffer buffer;
    109	uint32_t num_elems;	/**< in array elems or bytes for data type */
    110	uint32_t elems_remaining;	/**< elems remaining if sent in parts */
    111
    112	uint32_t msg_index;	/**< for large messages sent in parts */
    113
    114	/* reserved for future use */
    115	uint32_t reserved[6];
    116
    117	/* control data - add new types if needed */
    118	union {
    119		/* channel values can be used by volume type controls */
    120		struct sof_ipc_ctrl_value_chan chanv[0];
    121		/* component values used by routing controls like mux, mixer */
    122		struct sof_ipc_ctrl_value_comp compv[0];
    123		/* data can be used by binary controls */
    124		struct sof_abi_hdr data[0];
    125	};
    126} __packed;
    127
    128/** Event type */
    129enum sof_ipc_ctrl_event_type {
    130	SOF_CTRL_EVENT_GENERIC = 0,	/**< generic event */
    131	SOF_CTRL_EVENT_GENERIC_METADATA,	/**< generic event with metadata */
    132	SOF_CTRL_EVENT_KD,	/**< keyword detection event */
    133	SOF_CTRL_EVENT_VAD,	/**< voice activity detection event */
    134};
    135
    136/**
    137 * Generic notification data.
    138 */
    139struct sof_ipc_comp_event {
    140	struct sof_ipc_reply rhdr;
    141	uint16_t src_comp_type;	/**< COMP_TYPE_ */
    142	uint32_t src_comp_id;	/**< source component id */
    143	uint32_t event_type;	/**< event type - SOF_CTRL_EVENT_* */
    144	uint32_t num_elems;	/**< in array elems or bytes for data type */
    145
    146	/* reserved for future use */
    147	uint32_t reserved[8];
    148
    149	/* control data - add new types if needed */
    150	union {
    151		/* data can be used by binary controls */
    152		struct sof_abi_hdr data[0];
    153		/* event specific values */
    154		uint32_t event_value;
    155	};
    156} __packed;
    157
    158#endif