/* 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
/* 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