brintos

brintos / linux-shallow public Read only

0
0
Text · 4.9 KiB · 8d3300d Raw
159 lines · c
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 or4 * redistributing this file, you may do so under either license.5 *6 * Copyright(c) 2018 Intel Corporation7 */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 Controls17 */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		DECLARE_FLEX_ARRAY(struct sof_ipc_ctrl_value_chan, chanv);121		/* component values used by routing controls like mux, mixer */122		DECLARE_FLEX_ARRAY(struct sof_ipc_ctrl_value_comp, compv);123		/* data can be used by binary controls */124		DECLARE_FLEX_ARRAY(struct sof_abi_hdr, data);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#endif159