1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 | /* SPDX-License-Identifier: (GPL-2.0 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_HEADER_H__ #define __INCLUDE_SOUND_SOF_HEADER_H__ #include <uapi/sound/sof/abi.h> /** \addtogroup sof_uapi uAPI * SOF uAPI specification. * @{ */ /* * IPC messages have a prefixed 32 bit identifier made up as follows :- * * 0xGCCCNNNN where * G is global cmd type (4 bits) * C is command type (12 bits) * I is the ID number (16 bits) - monotonic and overflows * * This is sent at the start of the IPM message in the mailbox. Messages should * not be sent in the doorbell (special exceptions for firmware . */ /* Global Message - Generic */ #define SOF_GLB_TYPE_SHIFT 28 #define SOF_GLB_TYPE_MASK (0xf << SOF_GLB_TYPE_SHIFT) #define SOF_GLB_TYPE(x) ((x) << SOF_GLB_TYPE_SHIFT) /* Command Message - Generic */ #define SOF_CMD_TYPE_SHIFT 16 #define SOF_CMD_TYPE_MASK (0xfff << SOF_CMD_TYPE_SHIFT) #define SOF_CMD_TYPE(x) ((x) << SOF_CMD_TYPE_SHIFT) /* Global Message Types */ #define SOF_IPC_GLB_REPLY SOF_GLB_TYPE(0x1U) #define SOF_IPC_GLB_COMPOUND SOF_GLB_TYPE(0x2U) #define SOF_IPC_GLB_TPLG_MSG SOF_GLB_TYPE(0x3U) #define SOF_IPC_GLB_PM_MSG SOF_GLB_TYPE(0x4U) #define SOF_IPC_GLB_COMP_MSG SOF_GLB_TYPE(0x5U) #define SOF_IPC_GLB_STREAM_MSG SOF_GLB_TYPE(0x6U) #define SOF_IPC_FW_READY SOF_GLB_TYPE(0x7U) #define SOF_IPC_GLB_DAI_MSG SOF_GLB_TYPE(0x8U) #define SOF_IPC_GLB_TRACE_MSG SOF_GLB_TYPE(0x9U) #define SOF_IPC_GLB_GDB_DEBUG SOF_GLB_TYPE(0xAU) #define SOF_IPC_GLB_TEST_MSG SOF_GLB_TYPE(0xBU) /* * DSP Command Message Types */ /* topology */ #define SOF_IPC_TPLG_COMP_NEW SOF_CMD_TYPE(0x001) #define SOF_IPC_TPLG_COMP_FREE SOF_CMD_TYPE(0x002) #define SOF_IPC_TPLG_COMP_CONNECT SOF_CMD_TYPE(0x003) #define SOF_IPC_TPLG_PIPE_NEW SOF_CMD_TYPE(0x010) #define SOF_IPC_TPLG_PIPE_FREE SOF_CMD_TYPE(0x011) #define SOF_IPC_TPLG_PIPE_CONNECT SOF_CMD_TYPE(0x012) #define SOF_IPC_TPLG_PIPE_COMPLETE SOF_CMD_TYPE(0x013) #define SOF_IPC_TPLG_BUFFER_NEW SOF_CMD_TYPE(0x020) #define SOF_IPC_TPLG_BUFFER_FREE SOF_CMD_TYPE(0x021) /* PM */ #define SOF_IPC_PM_CTX_SAVE SOF_CMD_TYPE(0x001) #define SOF_IPC_PM_CTX_RESTORE SOF_CMD_TYPE(0x002) #define SOF_IPC_PM_CTX_SIZE SOF_CMD_TYPE(0x003) #define SOF_IPC_PM_CLK_SET SOF_CMD_TYPE(0x004) #define SOF_IPC_PM_CLK_GET SOF_CMD_TYPE(0x005) #define SOF_IPC_PM_CLK_REQ SOF_CMD_TYPE(0x006) #define SOF_IPC_PM_CORE_ENABLE SOF_CMD_TYPE(0x007) /* component runtime config - multiple different types */ #define SOF_IPC_COMP_SET_VALUE SOF_CMD_TYPE(0x001) #define SOF_IPC_COMP_GET_VALUE SOF_CMD_TYPE(0x002) #define SOF_IPC_COMP_SET_DATA SOF_CMD_TYPE(0x003) #define SOF_IPC_COMP_GET_DATA SOF_CMD_TYPE(0x004) #define SOF_IPC_COMP_NOTIFICATION SOF_CMD_TYPE(0x005) /* DAI messages */ #define SOF_IPC_DAI_CONFIG SOF_CMD_TYPE(0x001) #define SOF_IPC_DAI_LOOPBACK SOF_CMD_TYPE(0x002) /* stream */ #define SOF_IPC_STREAM_PCM_PARAMS SOF_CMD_TYPE(0x001) #define SOF_IPC_STREAM_PCM_PARAMS_REPLY SOF_CMD_TYPE(0x002) #define SOF_IPC_STREAM_PCM_FREE SOF_CMD_TYPE(0x003) #define SOF_IPC_STREAM_TRIG_START SOF_CMD_TYPE(0x004) #define SOF_IPC_STREAM_TRIG_STOP SOF_CMD_TYPE(0x005) #define SOF_IPC_STREAM_TRIG_PAUSE SOF_CMD_TYPE(0x006) #define SOF_IPC_STREAM_TRIG_RELEASE SOF_CMD_TYPE(0x007) #define SOF_IPC_STREAM_TRIG_DRAIN SOF_CMD_TYPE(0x008) #define SOF_IPC_STREAM_TRIG_XRUN SOF_CMD_TYPE(0x009) #define SOF_IPC_STREAM_POSITION SOF_CMD_TYPE(0x00a) #define SOF_IPC_STREAM_VORBIS_PARAMS SOF_CMD_TYPE(0x010) #define SOF_IPC_STREAM_VORBIS_FREE SOF_CMD_TYPE(0x011) /* trace */ #define SOF_IPC_TRACE_DMA_PARAMS SOF_CMD_TYPE(0x001) #define SOF_IPC_TRACE_DMA_POSITION SOF_CMD_TYPE(0x002) #define SOF_IPC_TRACE_DMA_PARAMS_EXT SOF_CMD_TYPE(0x003) /* debug */ #define SOF_IPC_TEST_IPC_FLOOD SOF_CMD_TYPE(0x001) /* Get message component id */ #define SOF_IPC_MESSAGE_ID(x) ((x) & 0xffff) /* maximum message size for mailbox Tx/Rx */ #define SOF_IPC_MSG_MAX_SIZE 384 /* * Structure Header - Header for all IPC structures except command structs. * The size can be greater than the structure size and that means there is * extended bespoke data beyond the end of the structure including variable * arrays. */ struct sof_ipc_hdr { uint32_t size; /**< size of structure */ } __packed; /* * Command Header - Header for all IPC commands. Identifies IPC message. * The size can be greater than the structure size and that means there is * extended bespoke data beyond the end of the structure including variable * arrays. */ struct sof_ipc_cmd_hdr { uint32_t size; /**< size of structure */ uint32_t cmd; /**< SOF_IPC_GLB_ + cmd */ } __packed; /* * Generic reply message. Some commands override this with their own reply * types that must include this at start. */ struct sof_ipc_reply { struct sof_ipc_cmd_hdr hdr; int32_t error; /**< negative error numbers */ } __packed; /* * Compound commands - SOF_IPC_GLB_COMPOUND. * * Compound commands are sent to the DSP as a single IPC operation. The * commands are split into blocks and each block has a header. This header * identifies the command type and the number of commands before the next * header. */ struct sof_ipc_compound_hdr { struct sof_ipc_cmd_hdr hdr; uint32_t count; /**< count of 0 means end of compound sequence */ } __packed; /** * OOPS header architecture specific data. */ struct sof_ipc_dsp_oops_arch_hdr { uint32_t arch; /* Identifier of architecture */ uint32_t totalsize; /* Total size of oops message */ } __packed; /** * OOPS header platform specific data. */ struct sof_ipc_dsp_oops_plat_hdr { uint32_t configidhi; /* ConfigID hi 32bits */ uint32_t configidlo; /* ConfigID lo 32bits */ uint32_t numaregs; /* Special regs num */ uint32_t stackoffset; /* Offset to stack pointer from beginning of * oops message */ uint32_t stackptr; /* Stack ptr */ } __packed; /** @}*/ #endif |