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