| /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */ | 
 | /* | 
 |  * This file is provided under a dual BSD/GPLv2 license.  When using or | 
 |  * redistributing this file, you may do so under either license. | 
 |  * | 
 |  * Copyright(c) 2018 Intel Corporation. All rights reserved. | 
 |  */ | 
 |  | 
 | #ifndef __INCLUDE_SOUND_SOF_CONTROL_H__ | 
 | #define __INCLUDE_SOUND_SOF_CONTROL_H__ | 
 |  | 
 | #include <uapi/sound/sof/header.h> | 
 | #include <sound/sof/header.h> | 
 |  | 
 | /* | 
 |  * Component Mixers and Controls | 
 |  */ | 
 |  | 
 | /* channel positions - uses same values as ALSA */ | 
 | enum sof_ipc_chmap { | 
 | 	SOF_CHMAP_UNKNOWN = 0, | 
 | 	SOF_CHMAP_NA,		/**< N/A, silent */ | 
 | 	SOF_CHMAP_MONO,		/**< mono stream */ | 
 | 	SOF_CHMAP_FL,		/**< front left */ | 
 | 	SOF_CHMAP_FR,		/**< front right */ | 
 | 	SOF_CHMAP_RL,		/**< rear left */ | 
 | 	SOF_CHMAP_RR,		/**< rear right */ | 
 | 	SOF_CHMAP_FC,		/**< front centre */ | 
 | 	SOF_CHMAP_LFE,		/**< LFE */ | 
 | 	SOF_CHMAP_SL,		/**< side left */ | 
 | 	SOF_CHMAP_SR,		/**< side right */ | 
 | 	SOF_CHMAP_RC,		/**< rear centre */ | 
 | 	SOF_CHMAP_FLC,		/**< front left centre */ | 
 | 	SOF_CHMAP_FRC,		/**< front right centre */ | 
 | 	SOF_CHMAP_RLC,		/**< rear left centre */ | 
 | 	SOF_CHMAP_RRC,		/**< rear right centre */ | 
 | 	SOF_CHMAP_FLW,		/**< front left wide */ | 
 | 	SOF_CHMAP_FRW,		/**< front right wide */ | 
 | 	SOF_CHMAP_FLH,		/**< front left high */ | 
 | 	SOF_CHMAP_FCH,		/**< front centre high */ | 
 | 	SOF_CHMAP_FRH,		/**< front right high */ | 
 | 	SOF_CHMAP_TC,		/**< top centre */ | 
 | 	SOF_CHMAP_TFL,		/**< top front left */ | 
 | 	SOF_CHMAP_TFR,		/**< top front right */ | 
 | 	SOF_CHMAP_TFC,		/**< top front centre */ | 
 | 	SOF_CHMAP_TRL,		/**< top rear left */ | 
 | 	SOF_CHMAP_TRR,		/**< top rear right */ | 
 | 	SOF_CHMAP_TRC,		/**< top rear centre */ | 
 | 	SOF_CHMAP_TFLC,		/**< top front left centre */ | 
 | 	SOF_CHMAP_TFRC,		/**< top front right centre */ | 
 | 	SOF_CHMAP_TSL,		/**< top side left */ | 
 | 	SOF_CHMAP_TSR,		/**< top side right */ | 
 | 	SOF_CHMAP_LLFE,		/**< left LFE */ | 
 | 	SOF_CHMAP_RLFE,		/**< right LFE */ | 
 | 	SOF_CHMAP_BC,		/**< bottom centre */ | 
 | 	SOF_CHMAP_BLC,		/**< bottom left centre */ | 
 | 	SOF_CHMAP_BRC,		/**< bottom right centre */ | 
 | 	SOF_CHMAP_LAST = SOF_CHMAP_BRC, | 
 | }; | 
 |  | 
 | /* control data type and direction */ | 
 | enum sof_ipc_ctrl_type { | 
 | 	/*  per channel data - uses struct sof_ipc_ctrl_value_chan */ | 
 | 	SOF_CTRL_TYPE_VALUE_CHAN_GET = 0, | 
 | 	SOF_CTRL_TYPE_VALUE_CHAN_SET, | 
 | 	/* component data - uses struct sof_ipc_ctrl_value_comp */ | 
 | 	SOF_CTRL_TYPE_VALUE_COMP_GET, | 
 | 	SOF_CTRL_TYPE_VALUE_COMP_SET, | 
 | 	/* bespoke data - uses struct sof_abi_hdr */ | 
 | 	SOF_CTRL_TYPE_DATA_GET, | 
 | 	SOF_CTRL_TYPE_DATA_SET, | 
 | }; | 
 |  | 
 | /* control command type */ | 
 | enum sof_ipc_ctrl_cmd { | 
 | 	SOF_CTRL_CMD_VOLUME = 0, /**< maps to ALSA volume style controls */ | 
 | 	SOF_CTRL_CMD_ENUM,	/**< maps to ALSA enum style controls */ | 
 | 	SOF_CTRL_CMD_SWITCH,	/**< maps to ALSA switch style controls */ | 
 | 	SOF_CTRL_CMD_BINARY,	/**< maps to ALSA binary style controls */ | 
 | }; | 
 |  | 
 | /* generic channel mapped value data */ | 
 | struct sof_ipc_ctrl_value_chan { | 
 | 	uint32_t channel;	/**< channel map - enum sof_ipc_chmap */ | 
 | 	uint32_t value; | 
 | } __packed; | 
 |  | 
 | /* generic component mapped value data */ | 
 | struct sof_ipc_ctrl_value_comp { | 
 | 	uint32_t index;	/**< component source/sink/control index in control */ | 
 | 	union { | 
 | 		uint32_t uvalue; | 
 | 		int32_t svalue; | 
 | 	}; | 
 | } __packed; | 
 |  | 
 | /* generic control data */ | 
 | struct sof_ipc_ctrl_data { | 
 | 	struct sof_ipc_reply rhdr; | 
 | 	uint32_t comp_id; | 
 |  | 
 | 	/* control access and data type */ | 
 | 	uint32_t type;		/**< enum sof_ipc_ctrl_type */ | 
 | 	uint32_t cmd;		/**< enum sof_ipc_ctrl_cmd */ | 
 | 	uint32_t index;		/**< control index for comps > 1 control */ | 
 |  | 
 | 	/* control data - can either be appended or DMAed from host */ | 
 | 	struct sof_ipc_host_buffer buffer; | 
 | 	uint32_t num_elems;	/**< in array elems or bytes for data type */ | 
 | 	uint32_t elems_remaining;	/**< elems remaining if sent in parts */ | 
 |  | 
 | 	uint32_t msg_index;	/**< for large messages sent in parts */ | 
 |  | 
 | 	/* reserved for future use */ | 
 | 	uint32_t reserved[6]; | 
 |  | 
 | 	/* control data - add new types if needed */ | 
 | 	union { | 
 | 		/* channel values can be used by volume type controls */ | 
 | 		struct sof_ipc_ctrl_value_chan chanv[0]; | 
 | 		/* component values used by routing controls like mux, mixer */ | 
 | 		struct sof_ipc_ctrl_value_comp compv[0]; | 
 | 		/* data can be used by binary controls */ | 
 | 		struct sof_abi_hdr data[0]; | 
 | 	}; | 
 | } __packed; | 
 |  | 
 | /** Event type */ | 
 | enum sof_ipc_ctrl_event_type { | 
 | 	SOF_CTRL_EVENT_GENERIC = 0,	/**< generic event */ | 
 | 	SOF_CTRL_EVENT_GENERIC_METADATA,	/**< generic event with metadata */ | 
 | 	SOF_CTRL_EVENT_KD,	/**< keyword detection event */ | 
 | 	SOF_CTRL_EVENT_VAD,	/**< voice activity detection event */ | 
 | }; | 
 |  | 
 | /** | 
 |  * Generic notification data. | 
 |  */ | 
 | struct sof_ipc_comp_event { | 
 | 	struct sof_ipc_reply rhdr; | 
 | 	uint16_t src_comp_type;	/**< COMP_TYPE_ */ | 
 | 	uint32_t src_comp_id;	/**< source component id */ | 
 | 	uint32_t event_type;	/**< event type - SOF_CTRL_EVENT_* */ | 
 | 	uint32_t num_elems;	/**< in array elems or bytes for data type */ | 
 |  | 
 | 	/* reserved for future use */ | 
 | 	uint32_t reserved[8]; | 
 |  | 
 | 	/* control data - add new types if needed */ | 
 | 	union { | 
 | 		/* data can be used by binary controls */ | 
 | 		struct sof_abi_hdr data[0]; | 
 | 		/* event specific values */ | 
 | 		uint32_t event_value; | 
 | 	}; | 
 | } __packed; | 
 |  | 
 | #endif |