root/include/sound/sof/control.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: (GPL-2.0 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 */
  20 enum 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 */
  62 enum 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 */
  75 enum 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 */
  83 struct 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 */
  89 struct 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 */
  98 struct 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 */
 129 enum 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  */
 139 struct 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

/* [<][>][^][v][top][bottom][index][help] */