audioreach.h 19 KB

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