arm64: dts: qcom: sm8550: add TRNG node
[linux-modified.git] / sound / soc / qcom / qdsp6 / audioreach.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2
3 #ifndef __AUDIOREACH_H__
4 #define __AUDIOREACH_H__
5 #include <linux/types.h>
6 #include <linux/soc/qcom/apr.h>
7 #include <sound/soc.h>
8 struct q6apm;
9 struct q6apm_graph;
10
11 /* Module IDs */
12 #define MODULE_ID_WR_SHARED_MEM_EP      0x07001000
13 #define MODULE_ID_RD_SHARED_MEM_EP      0x07001001
14 #define MODULE_ID_GAIN                  0x07001002
15 #define MODULE_ID_PCM_CNV               0x07001003
16 #define MODULE_ID_PCM_ENC               0x07001004
17 #define MODULE_ID_PCM_DEC               0x07001005
18 #define MODULE_ID_PLACEHOLDER_ENCODER   0x07001008
19 #define MODULE_ID_PLACEHOLDER_DECODER   0x07001009
20 #define MODULE_ID_SAL                   0x07001010
21 #define MODULE_ID_MFC                   0x07001015
22 #define MODULE_ID_CODEC_DMA_SINK        0x07001023
23 #define MODULE_ID_CODEC_DMA_SOURCE      0x07001024
24 #define MODULE_ID_I2S_SINK              0x0700100A
25 #define MODULE_ID_I2S_SOURCE            0x0700100B
26 #define MODULE_ID_DATA_LOGGING          0x0700101A
27 #define MODULE_ID_AAC_DEC               0x0700101F
28 #define MODULE_ID_FLAC_DEC              0x0700102F
29 #define MODULE_ID_MP3_DECODE            0x0700103B
30 #define MODULE_ID_GAPLESS               0x0700104D
31 #define MODULE_ID_DISPLAY_PORT_SINK     0x07001069
32
33 #define APM_CMD_GET_SPF_STATE           0x01001021
34 #define APM_CMD_RSP_GET_SPF_STATE       0x02001007
35
36 #define APM_MODULE_INSTANCE_ID          0x00000001
37 #define PRM_MODULE_INSTANCE_ID          0x00000002
38 #define AMDB_MODULE_INSTANCE_ID         0x00000003
39 #define VCPM_MODULE_INSTANCE_ID         0x00000004
40 #define AR_MODULE_INSTANCE_ID_START     0x00006000
41 #define AR_MODULE_INSTANCE_ID_END       0x00007000
42 #define AR_MODULE_DYNAMIC_INSTANCE_ID_START     0x00007000
43 #define AR_MODULE_DYNAMIC_INSTANCE_ID_END       0x00008000
44 #define AR_CONT_INSTANCE_ID_START       0x00005000
45 #define AR_CONT_INSTANCE_ID_END         0x00006000
46 #define AR_SG_INSTANCE_ID_START         0x00004000
47
48 #define APM_CMD_GRAPH_OPEN                      0x01001000
49 #define APM_CMD_GRAPH_PREPARE                   0x01001001
50 #define APM_CMD_GRAPH_START                     0x01001002
51 #define APM_CMD_GRAPH_STOP                      0x01001003
52 #define APM_CMD_GRAPH_CLOSE                     0x01001004
53 #define APM_CMD_GRAPH_FLUSH                     0x01001005
54 #define APM_CMD_SET_CFG                         0x01001006
55 #define APM_CMD_GET_CFG                         0x01001007
56 #define APM_CMD_SHARED_MEM_MAP_REGIONS          0x0100100C
57 #define APM_CMD_SHARED_MEM_UNMAP_REGIONS        0x0100100D
58 #define APM_CMD_RSP_SHARED_MEM_MAP_REGIONS      0x02001001
59 #define APM_CMD_RSP_GET_CFG                     0x02001000
60 #define APM_CMD_CLOSE_ALL                       0x01001013
61 #define APM_CMD_REGISTER_SHARED_CFG             0x0100100A
62
63 #define APM_MEMORY_MAP_SHMEM8_4K_POOL           3
64
65 struct apm_cmd_shared_mem_map_regions {
66         uint16_t mem_pool_id;
67         uint16_t num_regions;
68         uint32_t property_flag;
69 } __packed;
70
71 struct apm_shared_map_region_payload {
72         uint32_t shm_addr_lsw;
73         uint32_t shm_addr_msw;
74         uint32_t mem_size_bytes;
75 } __packed;
76
77 struct apm_cmd_shared_mem_unmap_regions {
78         uint32_t mem_map_handle;
79 } __packed;
80
81 struct apm_cmd_rsp_shared_mem_map_regions {
82         uint32_t mem_map_handle;
83 } __packed;
84
85 /* APM module */
86 #define APM_PARAM_ID_SUB_GRAPH_LIST             0x08001005
87
88 #define APM_PARAM_ID_MODULE_LIST                0x08001002
89
90 struct apm_param_id_modules_list {
91         uint32_t num_modules_list;
92 } __packed;
93
94 #define APM_PARAM_ID_MODULE_PROP                0x08001003
95
96 struct apm_param_id_module_prop {
97         uint32_t num_modules_prop_cfg;
98 } __packed;
99
100 struct apm_module_prop_cfg {
101         uint32_t instance_id;
102         uint32_t num_props;
103 } __packed;
104
105 #define APM_PARAM_ID_MODULE_CONN                0x08001004
106
107 struct apm_param_id_module_conn {
108         uint32_t num_connections;
109 } __packed;
110
111 struct apm_module_conn_obj {
112         uint32_t src_mod_inst_id;
113         uint32_t src_mod_op_port_id;
114         uint32_t dst_mod_inst_id;
115         uint32_t dst_mod_ip_port_id;
116 } __packed;
117
118 #define APM_PARAM_ID_GAIN                       0x08001006
119
120 struct param_id_gain_cfg {
121         uint16_t gain;
122         uint16_t reserved;
123 } __packed;
124
125 #define PARAM_ID_PCM_OUTPUT_FORMAT_CFG          0x08001008
126
127 struct param_id_pcm_output_format_cfg {
128         uint32_t data_format;
129         uint32_t fmt_id;
130         uint32_t payload_size;
131 } __packed;
132
133 struct payload_pcm_output_format_cfg {
134         uint16_t bit_width;
135         uint16_t alignment;
136         uint16_t bits_per_sample;
137         uint16_t q_factor;
138         uint16_t endianness;
139         uint16_t interleaved;
140         uint16_t reserved;
141         uint16_t num_channels;
142         uint8_t channel_mapping[];
143 } __packed;
144
145 #define PARAM_ID_ENC_BITRATE                    0x08001052
146
147 struct param_id_enc_bitrate_param {
148         uint32_t bitrate;
149 } __packed;
150
151 #define DATA_FORMAT_FIXED_POINT         1
152 #define DATA_FORMAT_GENERIC_COMPRESSED  5
153 #define DATA_FORMAT_RAW_COMPRESSED      6
154 #define PCM_LSB_ALIGNED                 1
155 #define PCM_MSB_ALIGNED                 2
156 #define PCM_LITTLE_ENDIAN               1
157 #define PCM_BIT_ENDIAN                  2
158
159 #define MEDIA_FMT_ID_PCM        0x09001000
160 #define MEDIA_FMT_ID_MP3        0x09001009
161 #define PCM_CHANNEL_L           1
162 #define PCM_CHANNEL_R           2
163 #define SAMPLE_RATE_48K         48000
164 #define BIT_WIDTH_16            16
165
166 #define APM_PARAM_ID_PROP_PORT_INFO             0x08001015
167
168 struct apm_modules_prop_info {
169         uint32_t max_ip_port;
170         uint32_t max_op_port;
171 } __packed;
172
173 /* Shared memory module */
174 #define DATA_CMD_WR_SH_MEM_EP_DATA_BUFFER       0x04001000
175 #define WR_SH_MEM_EP_TIMESTAMP_VALID_FLAG       BIT(31)
176 #define WR_SH_MEM_EP_LAST_BUFFER_FLAG           BIT(30)
177 #define WR_SH_MEM_EP_TS_CONTINUE_FLAG           BIT(29)
178 #define WR_SH_MEM_EP_EOF_FLAG                   BIT(4)
179
180 struct apm_data_cmd_wr_sh_mem_ep_data_buffer {
181         uint32_t buf_addr_lsw;
182         uint32_t buf_addr_msw;
183         uint32_t mem_map_handle;
184         uint32_t buf_size;
185         uint32_t timestamp_lsw;
186         uint32_t timestamp_msw;
187         uint32_t flags;
188 } __packed;
189
190 #define DATA_CMD_WR_SH_MEM_EP_DATA_BUFFER_V2    0x0400100A
191
192 struct apm_data_cmd_wr_sh_mem_ep_data_buffer_v2 {
193         uint32_t buf_addr_lsw;
194         uint32_t buf_addr_msw;
195         uint32_t mem_map_handle;
196         uint32_t buf_size;
197         uint32_t timestamp_lsw;
198         uint32_t timestamp_msw;
199         uint32_t flags;
200         uint32_t md_addr_lsw;
201         uint32_t md_addr_msw;
202         uint32_t md_map_handle;
203         uint32_t md_buf_size;
204 } __packed;
205
206 #define DATA_CMD_RSP_WR_SH_MEM_EP_DATA_BUFFER_DONE      0x05001000
207
208 struct data_cmd_rsp_wr_sh_mem_ep_data_buffer_done {
209         uint32_t buf_addr_lsw;
210         uint32_t buf_addr_msw;
211         uint32_t mem_map_handle;
212         uint32_t status;
213
214 } __packed;
215
216 #define DATA_CMD_RSP_WR_SH_MEM_EP_DATA_BUFFER_DONE_V2   0x05001004
217
218 struct data_cmd_rsp_wr_sh_mem_ep_data_buffer_done_v2 {
219         uint32_t buf_addr_lsw;
220         uint32_t buf_addr_msw;
221         uint32_t mem_map_handle;
222         uint32_t status;
223         uint32_t md_buf_addr_lsw;
224         uint32_t md_buf_addr_msw;
225         uint32_t md_mem_map_handle;
226         uint32_t md_status;
227 } __packed;
228
229 #define PARAM_ID_MEDIA_FORMAT                           0x0800100C
230 #define DATA_CMD_WR_SH_MEM_EP_MEDIA_FORMAT              0x04001001
231
232 struct apm_media_format {
233         uint32_t data_format;
234         uint32_t fmt_id;
235         uint32_t payload_size;
236 } __packed;
237
238 #define MEDIA_FMT_ID_FLAC       0x09001004
239
240 struct payload_media_fmt_flac_t {
241         uint16_t num_channels;
242         uint16_t sample_size;
243         uint16_t min_blk_size;
244         uint16_t max_blk_size;
245         uint32_t sample_rate;
246         uint32_t min_frame_size;
247         uint32_t max_frame_size;
248 } __packed;
249
250 #define MEDIA_FMT_ID_AAC        0x09001001
251
252 struct payload_media_fmt_aac_t {
253         uint16_t aac_fmt_flag;
254         uint16_t audio_obj_type;
255         uint16_t num_channels;
256         uint16_t total_size_of_PCE_bits;
257         uint32_t sample_rate;
258 } __packed;
259
260 #define DATA_CMD_WR_SH_MEM_EP_EOS                       0x04001002
261 #define WR_SH_MEM_EP_EOS_POLICY_LAST    1
262 #define WR_SH_MEM_EP_EOS_POLICY_EACH    2
263
264 struct data_cmd_wr_sh_mem_ep_eos {
265         uint32_t policy;
266
267 } __packed;
268
269 #define DATA_CMD_RD_SH_MEM_EP_DATA_BUFFER               0x04001003
270
271 struct data_cmd_rd_sh_mem_ep_data_buffer {
272         uint32_t buf_addr_lsw;
273         uint32_t buf_addr_msw;
274         uint32_t mem_map_handle;
275         uint32_t buf_size;
276 } __packed;
277
278 #define DATA_CMD_RSP_RD_SH_MEM_EP_DATA_BUFFER           0x05001002
279
280 struct data_cmd_rsp_rd_sh_mem_ep_data_buffer_done {
281         uint32_t status;
282         uint32_t buf_addr_lsw;
283         uint32_t buf_addr_msw;
284         uint32_t mem_map_handle;
285         uint32_t data_size;
286         uint32_t offset;
287         uint32_t timestamp_lsw;
288         uint32_t timestamp_msw;
289         uint32_t flags;
290         uint32_t num_frames;
291 } __packed;
292
293 #define DATA_CMD_RD_SH_MEM_EP_DATA_BUFFER_V2            0x0400100B
294
295 struct data_cmd_rd_sh_mem_ep_data_buffer_v2 {
296         uint32_t buf_addr_lsw;
297         uint32_t buf_addr_msw;
298         uint32_t mem_map_handle;
299         uint32_t buf_size;
300         uint32_t md_buf_addr_lsw;
301         uint32_t md_buf_addr_msw;
302         uint32_t md_mem_map_handle;
303         uint32_t md_buf_size;
304 } __packed;
305
306 #define DATA_CMD_RSP_RD_SH_MEM_EP_DATA_BUFFER_V2        0x05001005
307
308 struct data_cmd_rsp_rd_sh_mem_ep_data_buffer_done_v2 {
309         uint32_t status;
310         uint32_t buf_addr_lsw;
311         uint32_t buf_addr_msw;
312         uint32_t mem_map_handle;
313         uint32_t data_size;
314         uint32_t offset;
315         uint32_t timestamp_lsw;
316         uint32_t timestamp_msw;
317         uint32_t flags;
318         uint32_t num_frames;
319         uint32_t md_status;
320         uint32_t md_buf_addr_lsw;
321         uint32_t md_buf_addr_msw;
322         uint32_t md_mem_map_handle;
323         uint32_t md_size;
324 } __packed;
325
326 #define PARAM_ID_RD_SH_MEM_CFG                          0x08001007
327
328 struct param_id_rd_sh_mem_cfg {
329         uint32_t num_frames_per_buffer;
330         uint32_t metadata_control_flags;
331
332 } __packed;
333
334 #define DATA_CMD_WR_SH_MEM_EP_EOS_RENDERED              0x05001001
335
336 struct data_cmd_wr_sh_mem_ep_eos_rendered {
337         uint32_t module_instance_id;
338         uint32_t render_status;
339 } __packed;
340
341 #define MODULE_ID_WR_SHARED_MEM_EP                      0x07001000
342
343 struct apm_cmd_header {
344         uint32_t payload_address_lsw;
345         uint32_t payload_address_msw;
346         uint32_t mem_map_handle;
347         uint32_t payload_size;
348 } __packed;
349
350 #define APM_CMD_HDR_SIZE sizeof(struct apm_cmd_header)
351
352 struct apm_module_param_data  {
353         uint32_t module_instance_id;
354         uint32_t param_id;
355         uint32_t param_size;
356         uint32_t error_code;
357 } __packed;
358
359 #define APM_MODULE_PARAM_DATA_SIZE      sizeof(struct apm_module_param_data)
360
361 struct apm_module_param_shared_data  {
362         uint32_t param_id;
363         uint32_t param_size;
364 } __packed;
365
366 struct apm_prop_data {
367         uint32_t prop_id;
368         uint32_t prop_size;
369 } __packed;
370
371 /* Sub-Graph Properties */
372 #define APM_PARAM_ID_SUB_GRAPH_CONFIG   0x08001001
373
374 struct apm_param_id_sub_graph_cfg {
375         uint32_t num_sub_graphs;
376 } __packed;
377
378 struct apm_sub_graph_cfg {
379         uint32_t sub_graph_id;
380         uint32_t num_sub_graph_prop;
381 } __packed;
382
383 #define APM_SUB_GRAPH_PROP_ID_PERF_MODE         0x0800100E
384
385 struct apm_sg_prop_id_perf_mode {
386         uint32_t perf_mode;
387 } __packed;
388
389 #define APM_SG_PROP_ID_PERF_MODE_SIZE   4
390
391 #define APM_SUB_GRAPH_PROP_ID_DIRECTION 0x0800100F
392
393 struct apm_sg_prop_id_direction {
394         uint32_t direction;
395 } __packed;
396
397 #define APM_SG_PROP_ID_DIR_SIZE         4
398
399 #define APM_SUB_GRAPH_PROP_ID_SCENARIO_ID       0x08001010
400 #define APM_SUB_GRAPH_SID_AUDIO_PLAYBACK        0x1
401 #define APM_SUB_GRAPH_SID_AUDIO_RECORD          0x2
402 #define APM_SUB_GRAPH_SID_AUDIO_VOICE_CALL      0x3
403
404 struct apm_sg_prop_id_scenario_id {
405         uint32_t scenario_id;
406 } __packed;
407
408 #define APM_SG_PROP_ID_SID_SIZE                 4
409 /* container api */
410 #define APM_PARAM_ID_CONTAINER_CONFIG           0x08001000
411
412 struct apm_param_id_container_cfg {
413         uint32_t num_containers;
414 } __packed;
415
416 struct apm_container_cfg {
417         uint32_t container_id;
418         uint32_t num_prop;
419 } __packed;
420
421 struct apm_cont_capability  {
422         uint32_t capability_id;
423 } __packed;
424
425 #define APM_CONTAINER_PROP_ID_CAPABILITY_LIST   0x08001011
426 #define APM_CONTAINER_PROP_ID_CAPABILITY_SIZE   8
427
428 #define APM_PROP_ID_INVALID                     0x0
429 #define APM_CONTAINER_CAP_ID_PP                 0x1
430 #define APM_CONTAINER_CAP_ID_PP                 0x1
431
432 struct apm_cont_prop_id_cap_list  {
433         uint32_t num_capability_id;
434 } __packed;
435
436 #define APM_CONTAINER_PROP_ID_GRAPH_POS         0x08001012
437
438 struct apm_cont_prop_id_graph_pos  {
439         uint32_t graph_pos;
440 } __packed;
441
442 #define APM_CONTAINER_PROP_ID_STACK_SIZE        0x08001013
443
444 struct apm_cont_prop_id_stack_size  {
445         uint32_t stack_size;
446 } __packed;
447
448 #define APM_CONTAINER_PROP_ID_PROC_DOMAIN       0x08001014
449
450 struct apm_cont_prop_id_domain  {
451         uint32_t proc_domain;
452 } __packed;
453
454 #define CONFIG_I2S_WS_SRC_EXTERNAL              0x0
455 #define CONFIG_I2S_WS_SRC_INTERNAL              0x1
456
457 #define PARAM_ID_I2S_INTF_CFG                   0x08001019
458 struct param_id_i2s_intf_cfg {
459         uint32_t lpaif_type;
460         uint32_t intf_idx;
461         uint16_t sd_line_idx;
462         uint16_t ws_src;
463 } __packed;
464
465 #define I2S_INTF_TYPE_PRIMARY           0
466 #define I2S_INTF_TYPE_SECOINDARY        1
467 #define I2S_INTF_TYPE_TERTINARY         2
468 #define I2S_INTF_TYPE_QUATERNARY        3
469 #define I2S_INTF_TYPE_QUINARY           4
470 #define I2S_SD0                         1
471 #define I2S_SD1                         2
472 #define I2S_SD2                         3
473 #define I2S_SD3                         4
474
475 #define PORT_ID_I2S_INPUT               2
476 #define PORT_ID_I2S_OUPUT               1
477 #define I2S_STACK_SIZE                  2048
478
479 #define PARAM_ID_DISPLAY_PORT_INTF_CFG          0x08001154
480
481 struct param_id_display_port_intf_cfg {
482         uint32_t channel_allocation;
483         /* Multi-Steam Transport index */
484         uint32_t mst_idx;
485         uint32_t dptx_idx;
486 } __packed;
487
488 #define PARAM_ID_HW_EP_MF_CFG                   0x08001017
489 struct param_id_hw_ep_mf {
490         uint32_t sample_rate;
491         uint16_t bit_width;
492         uint16_t num_channels;
493         uint32_t data_format;
494 } __packed;
495
496 #define PARAM_ID_HW_EP_FRAME_SIZE_FACTOR        0x08001018
497
498 struct param_id_fram_size_factor {
499         uint32_t frame_size_factor;
500 } __packed;
501
502 #define APM_CONTAINER_PROP_ID_PARENT_CONTAINER_ID       0x080010CB
503
504 struct apm_cont_prop_id_parent_container  {
505         uint32_t parent_container_id;
506 } __packed;
507
508 #define APM_CONTAINER_PROP_ID_HEAP_ID                   0x08001174
509 #define APM_CONT_HEAP_DEFAULT                           0x1
510 #define APM_CONT_HEAP_LOW_POWER                         0x2
511
512 struct apm_cont_prop_id_headp_id  {
513         uint32_t heap_id;
514 } __packed;
515
516 struct apm_modules_list {
517         uint32_t sub_graph_id;
518         uint32_t container_id;
519         uint32_t num_modules;
520 } __packed;
521
522 struct apm_module_obj {
523         uint32_t module_id;
524         uint32_t instance_id;
525 } __packed;
526
527 #define APM_MODULE_PROP_ID_PORT_INFO            0x08001015
528 #define APM_MODULE_PROP_ID_PORT_INFO_SZ         8
529 struct apm_module_prop_id_port_info {
530         uint32_t max_ip_port;
531         uint32_t max_op_port;
532 } __packed;
533
534 #define DATA_LOGGING_MAX_INPUT_PORTS            0x1
535 #define DATA_LOGGING_MAX_OUTPUT_PORTS           0x1
536 #define DATA_LOGGING_STACK_SIZE                 2048
537 #define PARAM_ID_DATA_LOGGING_CONFIG            0x08001031
538
539 struct data_logging_config {
540         uint32_t log_code;
541         uint32_t log_tap_point_id;
542         uint32_t mode;
543 } __packed;
544
545 #define PARAM_ID_SAL_OUTPUT_CFG                 0x08001016
546 struct param_id_sal_output_config {
547         uint32_t bits_per_sample;
548 } __packed;
549
550 #define PARAM_ID_SAL_LIMITER_ENABLE             0x0800101E
551 struct param_id_sal_limiter_enable {
552         uint32_t enable_lim;
553 } __packed;
554
555 #define PARAM_ID_MFC_OUTPUT_MEDIA_FORMAT        0x08001024
556 #define PARAM_ID_EARLY_EOS_DELAY                0x0800114C
557 #define EARLY_EOS_DELAY_MS                      150
558
559 struct param_id_mfc_media_format {
560         uint32_t sample_rate;
561         uint16_t bit_width;
562         uint16_t num_channels;
563         uint16_t channel_mapping[];
564 } __packed;
565
566 struct param_id_gapless_early_eos_delay_t {
567         uint32_t early_eos_delay_ms;
568 } __packed;
569
570 struct media_format {
571         uint32_t data_format;
572         uint32_t fmt_id;
573         uint32_t payload_size;
574 } __packed;
575
576 struct payload_media_fmt_pcm {
577         uint32_t sample_rate;
578         uint16_t bit_width;
579         uint16_t alignment;
580         uint16_t bits_per_sample;
581         uint16_t q_factor;
582         uint16_t endianness;
583         uint16_t num_channels;
584         uint8_t channel_mapping[];
585 } __packed;
586
587 #define PARAM_ID_MODULE_ENABLE                  0x08001026
588 struct param_id_module_enable {
589         uint32_t enable;
590 } __packed;
591
592 #define PARAM_ID_CODEC_DMA_INTF_CFG             0x08001063
593
594 struct param_id_codec_dma_intf_cfg {
595         /* 1 - RXTX
596          * 2 - WSA
597          * 3 - VA
598          * 4 - AXI
599          */
600         uint32_t lpaif_type;
601         /*
602          *  RX0 | TX0 = 1
603          *  RX1 | TX1 = 2
604          *  RX2 | TX2 = 3... so on
605          */
606         uint32_t intf_index;
607         uint32_t active_channels_mask;
608 } __packed;
609
610 struct audio_hw_clk_cfg {
611         uint32_t clock_id;
612         uint32_t clock_freq;
613         uint32_t clock_attri;
614         uint32_t clock_root;
615 } __packed;
616
617 struct audio_hw_clk_rel_cfg {
618         uint32_t clock_id;
619 } __packed;
620
621 #define PARAM_ID_HW_EP_POWER_MODE_CFG   0x8001176
622 #define AR_HW_EP_POWER_MODE_0   0 /* default */
623 #define AR_HW_EP_POWER_MODE_1   1 /* XO Shutdown allowed */
624 #define AR_HW_EP_POWER_MODE_2   2 /* XO Shutdown not allowed */
625
626 struct param_id_hw_ep_power_mode_cfg {
627         uint32_t power_mode;
628 } __packed;
629
630 #define PARAM_ID_HW_EP_DMA_DATA_ALIGN   0x08001233
631 #define AR_HW_EP_DMA_DATA_ALIGN_MSB     0
632 #define AR_HW_EP_DMA_DATA_ALIGN_LSB     1
633 #define AR_PCM_MAX_NUM_CHANNEL          8
634
635 struct param_id_hw_ep_dma_data_align {
636         uint32_t dma_data_align;
637 } __packed;
638
639 #define PARAM_ID_VOL_CTRL_MASTER_GAIN   0x08001035
640 #define VOL_CTRL_DEFAULT_GAIN           0x2000
641
642 struct param_id_vol_ctrl_master_gain {
643         uint16_t master_gain;
644         uint16_t reserved;
645 } __packed;
646
647
648 #define PARAM_ID_REMOVE_INITIAL_SILENCE         0x0800114B
649 #define PARAM_ID_REMOVE_TRAILING_SILENCE        0x0800115D
650
651 #define PARAM_ID_REAL_MODULE_ID 0x0800100B
652
653 struct param_id_placeholder_real_module_id {
654         uint32_t real_module_id;
655 } __packed;
656
657 /* Graph */
658 struct audioreach_connection {
659         /* Connections */
660         uint32_t src_mod_inst_id;
661         uint32_t src_mod_op_port_id;
662         uint32_t dst_mod_inst_id;
663         uint32_t dst_mod_ip_port_id;
664         struct list_head node;
665 };
666
667 struct audioreach_graph_info {
668         int id;
669         uint32_t num_sub_graphs;
670         struct list_head sg_list;
671         /* DPCM connection from FE Graph to BE graph */
672         uint32_t src_mod_inst_id;
673         uint32_t src_mod_op_port_id;
674         uint32_t dst_mod_inst_id;
675         uint32_t dst_mod_ip_port_id;
676 };
677
678 struct audioreach_sub_graph {
679         uint32_t sub_graph_id;
680         uint32_t perf_mode;
681         uint32_t direction;
682         uint32_t scenario_id;
683         struct list_head node;
684
685         struct audioreach_graph_info *info;
686         uint32_t num_containers;
687         struct list_head container_list;
688 };
689
690 struct audioreach_container {
691         uint32_t container_id;
692         uint32_t capability_id;
693         uint32_t graph_pos;
694         uint32_t stack_size;
695         uint32_t proc_domain;
696         struct list_head node;
697
698         uint32_t num_modules;
699         struct list_head modules_list;
700         struct audioreach_sub_graph *sub_graph;
701 };
702
703 #define AR_MAX_MOD_LINKS        8
704
705 struct audioreach_module {
706         uint32_t module_id;
707         uint32_t instance_id;
708
709         uint32_t max_ip_port;
710         uint32_t max_op_port;
711
712         uint32_t in_port;
713         uint32_t out_port;
714
715         uint32_t num_connections;
716         /* Connections */
717         uint32_t src_mod_inst_id;
718         uint32_t src_mod_op_port_id[AR_MAX_MOD_LINKS];
719         uint32_t dst_mod_inst_id[AR_MAX_MOD_LINKS];
720         uint32_t dst_mod_ip_port_id[AR_MAX_MOD_LINKS];
721
722         /* Format specifics */
723         uint32_t ch_fmt;
724         uint32_t rate;
725         uint32_t bit_depth;
726
727         /* I2S module */
728         uint32_t hw_interface_idx;
729         uint32_t sd_line_idx;
730         uint32_t ws_src;
731         uint32_t frame_size_factor;
732         uint32_t data_format;
733         uint32_t hw_interface_type;
734
735         /* PCM module specific */
736         uint32_t interleave_type;
737
738         /* GAIN/Vol Control Module */
739         uint16_t gain;
740
741         /* Logging */
742         uint32_t log_code;
743         uint32_t log_tap_point_id;
744         uint32_t log_mode;
745
746         /* bookkeeping */
747         struct list_head node;
748         struct audioreach_container *container;
749         struct snd_soc_dapm_widget *widget;
750 };
751
752 struct audioreach_module_config {
753         int     direction;
754         u32     sample_rate;
755         u16     bit_width;
756         u16     bits_per_sample;
757
758         u16     data_format;
759         u16     num_channels;
760         u16     active_channels_mask;
761         u16     dp_idx;
762         u32     channel_allocation;
763         u32     sd_line_mask;
764         int     fmt;
765         struct snd_codec codec;
766         u8 channel_map[AR_PCM_MAX_NUM_CHANNEL];
767 };
768
769 /* Packet Allocation routines */
770 void *audioreach_alloc_apm_cmd_pkt(int pkt_size, uint32_t opcode, uint32_t
771                                     token);
772 void *audioreach_alloc_cmd_pkt(int payload_size, uint32_t opcode,
773                                uint32_t token, uint32_t src_port,
774                                uint32_t dest_port);
775 void *audioreach_alloc_apm_pkt(int pkt_size, uint32_t opcode, uint32_t token,
776                                 uint32_t src_port);
777 void *audioreach_alloc_pkt(int payload_size, uint32_t opcode,
778                            uint32_t token, uint32_t src_port,
779                            uint32_t dest_port);
780 void *audioreach_alloc_graph_pkt(struct q6apm *apm, struct audioreach_graph_info
781                                  *info);
782 /* Topology specific */
783 int audioreach_tplg_init(struct snd_soc_component *component);
784
785 /* Module specific */
786 void audioreach_graph_free_buf(struct q6apm_graph *graph);
787 int audioreach_map_memory_regions(struct q6apm_graph *graph,
788                                   unsigned int dir, size_t period_sz,
789                                   unsigned int periods,
790                                   bool is_contiguous);
791 int audioreach_send_cmd_sync(struct device *dev, gpr_device_t *gdev, struct gpr_ibasic_rsp_result_t *result,
792                              struct mutex *cmd_lock, gpr_port_t *port, wait_queue_head_t *cmd_wait,
793                              struct gpr_pkt *pkt, uint32_t rsp_opcode);
794 int audioreach_graph_send_cmd_sync(struct q6apm_graph *graph, struct gpr_pkt *pkt,
795                                    uint32_t rsp_opcode);
796 int audioreach_set_media_format(struct q6apm_graph *graph,
797                                 struct audioreach_module *module,
798                                 struct audioreach_module_config *cfg);
799 int audioreach_shared_memory_send_eos(struct q6apm_graph *graph);
800 int audioreach_gain_set_vol_ctrl(struct q6apm *apm,
801                                  struct audioreach_module *module, int vol);
802 int audioreach_send_u32_param(struct q6apm_graph *graph, struct audioreach_module *module,
803                               uint32_t param_id, uint32_t param_val);
804 int audioreach_compr_set_param(struct q6apm_graph *graph, struct audioreach_module_config *mcfg);
805
806 #endif /* __AUDIOREACH_H__ */