~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/sound/soc/intel/catpt/messages.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0-only */
  2 /*
  3  * Copyright(c) 2020 Intel Corporation
  4  *
  5  * Author: Cezary Rojewski <cezary.rojewski@intel.com>
  6  */
  7 
  8 #ifndef __SND_SOC_INTEL_CATPT_MSG_H
  9 #define __SND_SOC_INTEL_CATPT_MSG_H
 10 
 11 struct catpt_dev;
 12 
 13 /* IPC messages base types  */
 14 
 15 enum catpt_reply_status {
 16         CATPT_REPLY_SUCCESS = 0,
 17         CATPT_REPLY_ERROR_INVALID_PARAM = 1,
 18         CATPT_REPLY_UNKNOWN_MESSAGE_TYPE = 2,
 19         CATPT_REPLY_OUT_OF_RESOURCES = 3,
 20         CATPT_REPLY_BUSY = 4,
 21         CATPT_REPLY_PENDING = 5,
 22         CATPT_REPLY_FAILURE = 6,
 23         CATPT_REPLY_INVALID_REQUEST = 7,
 24         CATPT_REPLY_UNINITIALIZED = 8,
 25         CATPT_REPLY_NOT_FOUND = 9,
 26         CATPT_REPLY_SOURCE_NOT_STARTED = 10,
 27 };
 28 
 29 /* GLOBAL messages */
 30 
 31 enum catpt_global_msg_type {
 32         CATPT_GLB_GET_FW_VERSION = 0,
 33         CATPT_GLB_ALLOCATE_STREAM = 3,
 34         CATPT_GLB_FREE_STREAM = 4,
 35         CATPT_GLB_STREAM_MESSAGE = 6,
 36         CATPT_GLB_REQUEST_CORE_DUMP = 7,
 37         CATPT_GLB_SET_DEVICE_FORMATS = 10,
 38         CATPT_GLB_ENTER_DX_STATE = 12,
 39         CATPT_GLB_GET_MIXER_STREAM_INFO = 13,
 40 };
 41 
 42 union catpt_global_msg {
 43         u32 val;
 44         struct {
 45                 u32 status:5;
 46                 u32 context:19; /* stream or module specific */
 47                 u32 global_msg_type:5;
 48                 u32 fw_ready:1;
 49                 u32 done:1;
 50                 u32 busy:1;
 51         };
 52 } __packed;
 53 
 54 #define CATPT_MSG(hdr) { .val = hdr }
 55 #define CATPT_GLOBAL_MSG(msg_type) \
 56         { .global_msg_type = CATPT_GLB_##msg_type }
 57 
 58 #define BUILD_HASH_SIZE         40
 59 
 60 struct catpt_fw_version {
 61         u8 build;
 62         u8 minor;
 63         u8 major;
 64         u8 type;
 65         u8 build_hash[BUILD_HASH_SIZE];
 66         u32 log_providers_hash;
 67 } __packed;
 68 
 69 int catpt_ipc_get_fw_version(struct catpt_dev *cdev,
 70                              struct catpt_fw_version *version);
 71 
 72 enum catpt_pin_id {
 73         CATPT_PIN_ID_SYSTEM = 0,
 74         CATPT_PIN_ID_REFERENCE = 1,
 75         CATPT_PIN_ID_CAPTURE1 = 2,
 76         CATPT_PIN_ID_CAPTURE2 = 3,
 77         CATPT_PIN_ID_OFFLOAD1 = 4,
 78         CATPT_PIN_ID_OFFLOAD2 = 5,
 79         CATPT_PIN_ID_MIXER = 7,
 80         CATPT_PIN_ID_BLUETOOTH_CAPTURE = 8,
 81         CATPT_PIN_ID_BLUETOOTH_RENDER = 9,
 82 };
 83 
 84 enum catpt_path_id {
 85         CATPT_PATH_SSP0_OUT = 0,
 86         CATPT_PATH_SSP0_IN = 1,
 87         CATPT_PATH_SSP1_OUT = 2,
 88         CATPT_PATH_SSP1_IN = 3,
 89         /* duplicated audio in capture path */
 90         CATPT_PATH_SSP0_IN_DUP = 4,
 91 };
 92 
 93 enum catpt_stream_type {
 94         CATPT_STRM_TYPE_RENDER = 0, /* offload */
 95         CATPT_STRM_TYPE_SYSTEM = 1,
 96         CATPT_STRM_TYPE_CAPTURE = 2,
 97         CATPT_STRM_TYPE_LOOPBACK = 3,
 98         CATPT_STRM_TYPE_BLUETOOTH_RENDER = 4,
 99         CATPT_STRM_TYPE_BLUETOOTH_CAPTURE = 5,
100 };
101 
102 enum catpt_format_id {
103         CATPT_FORMAT_PCM = 0,
104         CATPT_FORMAT_MP3 = 1,
105         CATPT_FORMAT_AAC = 2,
106         CATPT_FORMAT_WMA = 3,
107 };
108 
109 enum catpt_channel_index {
110         CATPT_CHANNEL_LEFT = 0x0,
111         CATPT_CHANNEL_CENTER = 0x1,
112         CATPT_CHANNEL_RIGHT = 0x2,
113         CATPT_CHANNEL_LEFT_SURROUND = 0x3,
114         CATPT_CHANNEL_CENTER_SURROUND = 0x3,
115         CATPT_CHANNEL_RIGHT_SURROUND = 0x4,
116         CATPT_CHANNEL_LFE = 0x7,
117         CATPT_CHANNEL_INVALID = 0xF,
118 };
119 
120 enum catpt_channel_config {
121         CATPT_CHANNEL_CONFIG_MONO       = 0, /* One channel only */
122         CATPT_CHANNEL_CONFIG_STEREO     = 1, /* L & R */
123         CATPT_CHANNEL_CONFIG_2_POINT_1  = 2, /* L, R & LFE; PCM only */
124         CATPT_CHANNEL_CONFIG_3_POINT_0  = 3, /* L, C & R; MP3 & AAC only */
125         CATPT_CHANNEL_CONFIG_3_POINT_1  = 4, /* L, C, R & LFE; PCM only */
126         CATPT_CHANNEL_CONFIG_QUATRO     = 5, /* L, R, Ls & Rs; PCM only */
127         CATPT_CHANNEL_CONFIG_4_POINT_0  = 6, /* L, C, R & Cs; MP3 & AAC only */
128         CATPT_CHANNEL_CONFIG_5_POINT_0  = 7, /* L, C, R, Ls & Rs */
129         CATPT_CHANNEL_CONFIG_5_POINT_1  = 8, /* L, C, R, Ls, Rs & LFE */
130         CATPT_CHANNEL_CONFIG_DUAL_MONO  = 9, /* One channel replicated in two */
131         CATPT_CHANNEL_CONFIG_INVALID    = 10,
132 };
133 
134 enum catpt_interleaving_style {
135         CATPT_INTERLEAVING_PER_CHANNEL  = 0,
136         CATPT_INTERLEAVING_PER_SAMPLE   = 1,
137 };
138 
139 struct catpt_audio_format {
140         u32 sample_rate;
141         u32 bit_depth;
142         u32 channel_map;
143         u32 channel_config;
144         u32 interleaving;
145         u8 num_channels;
146         u8 valid_bit_depth;
147         u8 reserved[2];
148 } __packed;
149 
150 struct catpt_ring_info {
151         u32 page_table_addr;
152         u32 num_pages;
153         u32 size;
154         u32 offset;
155         u32 ring_first_page_pfn;
156 } __packed;
157 
158 #define CATPT_MODULE_COUNT (CATPT_MODID_LAST + 1)
159 
160 enum catpt_module_id {
161         CATPT_MODID_BASE_FW             = 0x0,
162         CATPT_MODID_MP3                 = 0x1,
163         CATPT_MODID_AAC_5_1             = 0x2,
164         CATPT_MODID_AAC_2_0             = 0x3,
165         CATPT_MODID_SRC                 = 0x4,
166         CATPT_MODID_WAVES               = 0x5,
167         CATPT_MODID_DOLBY               = 0x6,
168         CATPT_MODID_BOOST               = 0x7,
169         CATPT_MODID_LPAL                = 0x8,
170         CATPT_MODID_DTS                 = 0x9,
171         CATPT_MODID_PCM_CAPTURE         = 0xA,
172         CATPT_MODID_PCM_SYSTEM          = 0xB,
173         CATPT_MODID_PCM_REFERENCE       = 0xC,
174         CATPT_MODID_PCM                 = 0xD, /* offload */
175         CATPT_MODID_BLUETOOTH_RENDER    = 0xE,
176         CATPT_MODID_BLUETOOTH_CAPTURE   = 0xF,
177         CATPT_MODID_LAST                = CATPT_MODID_BLUETOOTH_CAPTURE,
178 };
179 
180 struct catpt_module_entry {
181         u32 module_id;
182         u32 entry_point;
183 } __packed;
184 
185 struct catpt_module_map {
186         u8 num_entries;
187         struct catpt_module_entry entries[];
188 } __packed;
189 
190 struct catpt_memory_info {
191         u32 offset;
192         u32 size;
193 } __packed;
194 
195 #define CATPT_CHANNELS_MAX      4
196 #define CATPT_ALL_CHANNELS_MASK UINT_MAX
197 
198 struct catpt_stream_info {
199         u32 stream_hw_id;
200         u32 reserved;
201         u32 read_pos_regaddr;
202         u32 pres_pos_regaddr;
203         u32 peak_meter_regaddr[CATPT_CHANNELS_MAX];
204         u32 volume_regaddr[CATPT_CHANNELS_MAX];
205 } __packed;
206 
207 int catpt_ipc_alloc_stream(struct catpt_dev *cdev,
208                            enum catpt_path_id path_id,
209                            enum catpt_stream_type type,
210                            struct catpt_audio_format *afmt,
211                            struct catpt_ring_info *rinfo,
212                            u8 num_modules,
213                            struct catpt_module_entry *modules,
214                            struct resource *persistent,
215                            struct resource *scratch,
216                            struct catpt_stream_info *sinfo);
217 int catpt_ipc_free_stream(struct catpt_dev *cdev, u8 stream_hw_id);
218 
219 enum catpt_ssp_iface {
220         CATPT_SSP_IFACE_0 = 0,
221         CATPT_SSP_IFACE_1 = 1,
222         CATPT_SSP_COUNT,
223 };
224 
225 enum catpt_mclk_frequency {
226         CATPT_MCLK_OFF = 0,
227         CATPT_MCLK_FREQ_6_MHZ = 1,
228         CATPT_MCLK_FREQ_21_MHZ = 2,
229         CATPT_MCLK_FREQ_24_MHZ = 3,
230 };
231 
232 enum catpt_ssp_mode {
233         CATPT_SSP_MODE_I2S_CONSUMER = 0,
234         CATPT_SSP_MODE_I2S_PROVIDER = 1,
235         CATPT_SSP_MODE_TDM_PROVIDER = 2,
236 };
237 
238 struct catpt_ssp_device_format {
239         u32 iface;
240         u32 mclk;
241         u32 mode;
242         u16 clock_divider;
243         u8 channels;
244 } __packed;
245 
246 int catpt_ipc_set_device_format(struct catpt_dev *cdev,
247                                 struct catpt_ssp_device_format *devfmt);
248 
249 enum catpt_dx_state {
250         CATPT_DX_STATE_D3 = 3,
251 };
252 
253 enum catpt_dx_type {
254         CATPT_DX_TYPE_FW_IMAGE = 0,
255         CATPT_DX_TYPE_MEMORY_DUMP = 1,
256 };
257 
258 struct catpt_save_meminfo {
259         u32 offset;
260         u32 size;
261         u32 source;
262 } __packed;
263 
264 #define SAVE_MEMINFO_MAX        14
265 
266 struct catpt_dx_context {
267         u32 num_meminfo;
268         struct catpt_save_meminfo meminfo[SAVE_MEMINFO_MAX];
269 } __packed;
270 
271 int catpt_ipc_enter_dxstate(struct catpt_dev *cdev, enum catpt_dx_state state,
272                             struct catpt_dx_context *context);
273 
274 struct catpt_mixer_stream_info {
275         u32 mixer_hw_id;
276         u32 peak_meter_regaddr[CATPT_CHANNELS_MAX];
277         u32 volume_regaddr[CATPT_CHANNELS_MAX];
278 } __packed;
279 
280 int catpt_ipc_get_mixer_stream_info(struct catpt_dev *cdev,
281                                     struct catpt_mixer_stream_info *info);
282 
283 /* STREAM messages */
284 
285 enum catpt_stream_msg_type {
286         CATPT_STRM_RESET_STREAM = 0,
287         CATPT_STRM_PAUSE_STREAM = 1,
288         CATPT_STRM_RESUME_STREAM = 2,
289         CATPT_STRM_STAGE_MESSAGE = 3,
290         CATPT_STRM_NOTIFICATION = 4,
291 };
292 
293 enum catpt_stage_action {
294         CATPT_STG_SET_VOLUME = 1,
295         CATPT_STG_SET_WRITE_POSITION = 2,
296         CATPT_STG_MUTE_LOOPBACK = 3,
297 };
298 
299 union catpt_stream_msg {
300         u32 val;
301         struct {
302                 u32 status:5;
303                 u32 reserved:7;
304                 u32 stage_action:4;
305                 u32 stream_hw_id:4;
306                 u32 stream_msg_type:4;
307                 u32 global_msg_type:5;
308                 u32 fw_ready:1;
309                 u32 done:1;
310                 u32 busy:1;
311         };
312 } __packed;
313 
314 #define CATPT_STREAM_MSG(msg_type) \
315 { \
316         .stream_msg_type = CATPT_STRM_##msg_type, \
317         .global_msg_type = CATPT_GLB_STREAM_MESSAGE }
318 #define CATPT_STAGE_MSG(msg_type) \
319 { \
320         .stage_action = CATPT_STG_##msg_type, \
321         .stream_msg_type = CATPT_STRM_STAGE_MESSAGE, \
322         .global_msg_type = CATPT_GLB_STREAM_MESSAGE }
323 
324 int catpt_ipc_reset_stream(struct catpt_dev *cdev, u8 stream_hw_id);
325 int catpt_ipc_pause_stream(struct catpt_dev *cdev, u8 stream_hw_id);
326 int catpt_ipc_resume_stream(struct catpt_dev *cdev, u8 stream_hw_id);
327 
328 /* STREAM messages - STAGE subtype */
329 
330 enum catpt_audio_curve_type {
331         CATPT_AUDIO_CURVE_NONE = 0,
332         CATPT_AUDIO_CURVE_WINDOWS_FADE = 1,
333 };
334 
335 int catpt_ipc_set_volume(struct catpt_dev *cdev, u8 stream_hw_id,
336                          u32 channel, u32 volume,
337                          u32 curve_duration,
338                          enum catpt_audio_curve_type curve_type);
339 
340 int catpt_ipc_set_write_pos(struct catpt_dev *cdev, u8 stream_hw_id,
341                             u32 pos, bool eob, bool ll);
342 
343 int catpt_ipc_mute_loopback(struct catpt_dev *cdev, u8 stream_hw_id, bool mute);
344 
345 /* NOTIFICATION messages */
346 
347 enum catpt_notify_reason {
348         CATPT_NOTIFY_POSITION_CHANGED = 0,
349         CATPT_NOTIFY_GLITCH_OCCURRED = 1,
350 };
351 
352 union catpt_notify_msg {
353         u32 val;
354         struct {
355                 u32 mailbox_address:29;
356                 u32 fw_ready:1;
357                 u32 done:1;
358                 u32 busy:1;
359         };
360         struct {
361                 u32 status:5;
362                 u32 reserved:7;
363                 u32 notify_reason:4;
364                 u32 stream_hw_id:4;
365                 u32 stream_msg_type:4;
366                 u32 global_msg_type:5;
367                 u32 hdr:3; /* fw_ready, done, busy */
368         };
369 } __packed;
370 
371 #define FW_INFO_SIZE_MAX        100
372 
373 struct catpt_fw_ready {
374         u32 inbox_offset;
375         u32 outbox_offset;
376         u32 inbox_size;
377         u32 outbox_size;
378         u32 fw_info_size;
379         char fw_info[FW_INFO_SIZE_MAX];
380 } __packed;
381 
382 struct catpt_notify_position {
383         u32 stream_position;
384         u32 fw_cycle_count;
385 } __packed;
386 
387 enum catpt_glitch_type {
388         CATPT_GLITCH_UNDERRUN = 1,
389         CATPT_GLITCH_DECODER_ERROR = 2,
390         CATPT_GLITCH_DOUBLED_WRITE_POS = 3,
391 };
392 
393 struct catpt_notify_glitch {
394         u32 type;
395         u64 presentation_pos;
396         u32 write_pos;
397 } __packed;
398 
399 #endif
400 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php