hc
2024-10-22 8ac6c7a54ed1b98d142dce24b11c6de6a1e239a5
kernel/sound/soc/qcom/qdsp6/q6asm.h
....@@ -20,6 +20,9 @@
2020 #define ASM_CLIENT_EVENT_CMD_RUN_DONE 0x1008
2121 #define ASM_CLIENT_EVENT_DATA_WRITE_DONE 0x1009
2222 #define ASM_CLIENT_EVENT_DATA_READ_DONE 0x100a
23
+#define ASM_WRITE_TOKEN_MASK GENMASK(15, 0)
24
+#define ASM_WRITE_TOKEN_LEN_MASK GENMASK(31, 16)
25
+#define ASM_WRITE_TOKEN_LEN_SHIFT 16
2326
2427 enum {
2528 LEGACY_PCM_MODE = 0,
....@@ -29,8 +32,62 @@
2932 };
3033
3134 #define MAX_SESSIONS 8
32
-#define NO_TIMESTAMP 0xFF00
3335 #define FORMAT_LINEAR_PCM 0x0000
36
+#define ASM_LAST_BUFFER_FLAG BIT(30)
37
+
38
+struct q6asm_flac_cfg {
39
+ u32 sample_rate;
40
+ u32 ext_sample_rate;
41
+ u32 min_frame_size;
42
+ u32 max_frame_size;
43
+ u16 stream_info_present;
44
+ u16 min_blk_size;
45
+ u16 max_blk_size;
46
+ u16 ch_cfg;
47
+ u16 sample_size;
48
+ u16 md5_sum;
49
+};
50
+
51
+struct q6asm_wma_cfg {
52
+ u32 fmtag;
53
+ u32 num_channels;
54
+ u32 sample_rate;
55
+ u32 bytes_per_sec;
56
+ u32 block_align;
57
+ u32 bits_per_sample;
58
+ u32 channel_mask;
59
+ u32 enc_options;
60
+ u32 adv_enc_options;
61
+ u32 adv_enc_options2;
62
+};
63
+
64
+struct q6asm_alac_cfg {
65
+ u32 frame_length;
66
+ u8 compatible_version;
67
+ u8 bit_depth;
68
+ u8 pb;
69
+ u8 mb;
70
+ u8 kb;
71
+ u8 num_channels;
72
+ u16 max_run;
73
+ u32 max_frame_bytes;
74
+ u32 avg_bit_rate;
75
+ u32 sample_rate;
76
+ u32 channel_layout_tag;
77
+};
78
+
79
+struct q6asm_ape_cfg {
80
+ u16 compatible_version;
81
+ u16 compression_level;
82
+ u32 format_flags;
83
+ u32 blocks_per_frame;
84
+ u32 final_frame_blocks;
85
+ u32 total_frames;
86
+ u16 bits_per_sample;
87
+ u16 num_channels;
88
+ u32 sample_rate;
89
+ u32 seek_table_present;
90
+};
3491
3592 typedef void (*q6asm_cb) (uint32_t opcode, uint32_t token,
3693 void *payload, void *priv);
....@@ -39,27 +96,53 @@
3996 q6asm_cb cb, void *priv,
4097 int session_id, int perf_mode);
4198 void q6asm_audio_client_free(struct audio_client *ac);
42
-int q6asm_write_async(struct audio_client *ac, uint32_t len, uint32_t msw_ts,
43
- uint32_t lsw_ts, uint32_t flags);
44
-int q6asm_open_write(struct audio_client *ac, uint32_t format,
45
- uint16_t bits_per_sample);
99
+int q6asm_write_async(struct audio_client *ac, uint32_t stream_id, uint32_t len,
100
+ uint32_t msw_ts, uint32_t lsw_ts, uint32_t flags);
101
+int q6asm_open_write(struct audio_client *ac, uint32_t stream_id,
102
+ uint32_t format, u32 codec_profile,
103
+ uint16_t bits_per_sample, bool is_gapless);
46104
47
-int q6asm_open_read(struct audio_client *ac, uint32_t format,
48
- uint16_t bits_per_sample);
105
+int q6asm_open_read(struct audio_client *ac, uint32_t stream_id,
106
+ uint32_t format, uint16_t bits_per_sample);
49107 int q6asm_enc_cfg_blk_pcm_format_support(struct audio_client *ac,
50
- uint32_t rate, uint32_t channels, uint16_t bits_per_sample);
51
-int q6asm_read(struct audio_client *ac);
108
+ uint32_t stream_id, uint32_t rate,
109
+ uint32_t channels,
110
+ uint16_t bits_per_sample);
111
+
112
+int q6asm_read(struct audio_client *ac, uint32_t stream_id);
52113
53114 int q6asm_media_format_block_multi_ch_pcm(struct audio_client *ac,
115
+ uint32_t stream_id,
54116 uint32_t rate, uint32_t channels,
55117 u8 channel_map[PCM_MAX_NUM_CHANNEL],
56118 uint16_t bits_per_sample);
57
-int q6asm_run(struct audio_client *ac, uint32_t flags, uint32_t msw_ts,
58
- uint32_t lsw_ts);
59
-int q6asm_run_nowait(struct audio_client *ac, uint32_t flags, uint32_t msw_ts,
60
- uint32_t lsw_ts);
61
-int q6asm_cmd(struct audio_client *ac, int cmd);
62
-int q6asm_cmd_nowait(struct audio_client *ac, int cmd);
119
+int q6asm_stream_media_format_block_flac(struct audio_client *ac,
120
+ uint32_t stream_id,
121
+ struct q6asm_flac_cfg *cfg);
122
+int q6asm_stream_media_format_block_wma_v9(struct audio_client *ac,
123
+ uint32_t stream_id,
124
+ struct q6asm_wma_cfg *cfg);
125
+int q6asm_stream_media_format_block_wma_v10(struct audio_client *ac,
126
+ uint32_t stream_id,
127
+ struct q6asm_wma_cfg *cfg);
128
+int q6asm_stream_media_format_block_alac(struct audio_client *ac,
129
+ uint32_t stream_id,
130
+ struct q6asm_alac_cfg *cfg);
131
+int q6asm_stream_media_format_block_ape(struct audio_client *ac,
132
+ uint32_t stream_id,
133
+ struct q6asm_ape_cfg *cfg);
134
+int q6asm_run(struct audio_client *ac, uint32_t stream_id, uint32_t flags,
135
+ uint32_t msw_ts, uint32_t lsw_ts);
136
+int q6asm_run_nowait(struct audio_client *ac, uint32_t stream_id,
137
+ uint32_t flags, uint32_t msw_ts, uint32_t lsw_ts);
138
+int q6asm_stream_remove_initial_silence(struct audio_client *ac,
139
+ uint32_t stream_id,
140
+ uint32_t initial_samples);
141
+int q6asm_stream_remove_trailing_silence(struct audio_client *ac,
142
+ uint32_t stream_id,
143
+ uint32_t trailing_samples);
144
+int q6asm_cmd(struct audio_client *ac, uint32_t stream_id, int cmd);
145
+int q6asm_cmd_nowait(struct audio_client *ac, uint32_t stream_id, int cmd);
63146 int q6asm_get_session_id(struct audio_client *ac);
64147 int q6asm_map_memory_regions(unsigned int dir,
65148 struct audio_client *ac,