1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
|
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
*/
#ifndef __Q6CORE_H__
#define __Q6CORE_H__
#include <ipc/apr.h>
#include <dsp/apr_audio-v2.h>
#define AVCS_CMD_ADSP_EVENT_GET_STATE 0x0001290C
#define AVCS_CMDRSP_ADSP_EVENT_GET_STATE 0x0001290D
#define AVCS_API_VERSION_V4 4
#define APRV2_IDS_SERVICE_ID_ADSP_CORE_V (0x3)
bool q6core_is_adsp_ready(void);
int avcs_core_query_timer_offset(int64_t *av_offset, int32_t clock_id);
int q6core_get_service_version(uint32_t service_id,
struct avcs_fwk_ver_info *ver_info,
size_t size);
size_t q6core_get_fwk_version_size(uint32_t service_id);
struct audio_uevent_data {
struct kobject kobj;
struct kobj_type ktype;
};
int q6core_init_uevent_data(struct audio_uevent_data *uevent_data, char *name);
void q6core_destroy_uevent_data(struct audio_uevent_data *uevent_data);
int q6core_send_uevent(struct audio_uevent_data *uevent_data, char *name);
int q6core_get_avcs_api_version_per_service(uint32_t service_id);
#define ADSP_CMD_SET_DTS_EAGLE_DATA_ID 0x00012919
#define DTS_EAGLE_LICENSE_ID 0x00028346
struct adsp_dts_eagle {
struct apr_hdr hdr;
uint32_t id;
uint32_t overwrite;
uint32_t size;
char data[];
};
int core_dts_eagle_set(int size, char *data);
int core_dts_eagle_get(int id, int size, char *data);
#define ADSP_CMD_SET_DOLBY_MANUFACTURER_ID 0x00012918
struct adsp_dolby_manufacturer_id {
struct apr_hdr hdr;
int manufacturer_id;
};
uint32_t core_set_dolby_manufacturer_id(int manufacturer_id);
/* Dolby Surround1 Module License ID. This ID is used as an identifier
* for DS1 license via ADSP generic license mechanism.
* Please refer AVCS_CMD_SET_LICENSE for more details.
*/
#define DOLBY_DS1_LICENSE_ID 0x00000001
#define AVCS_CMD_SET_LICENSE 0x00012919
struct avcs_cmd_set_license {
struct apr_hdr hdr;
uint32_t id; /**< A unique ID used to refer to this license */
uint32_t overwrite;
/* 0 = do not overwrite an existing license with this id.
* 1 = overwrite an existing license with this id.
*/
uint32_t size;
/**< Size in bytes of the license data following this header. */
/* uint8_t* data , data and padding follows this structure
* total packet size needs to be multiple of 4 Bytes
*/
};
#define AVCS_CMD_GET_LICENSE_VALIDATION_RESULT 0x0001291A
struct avcs_cmd_get_license_validation_result {
struct apr_hdr hdr;
uint32_t id; /**< A unique ID used to refer to this license */
};
#define AVCS_CMDRSP_GET_LICENSE_VALIDATION_RESULT 0x0001291B
struct avcs_cmdrsp_get_license_validation_result {
uint32_t result;
/* ADSP_EOK if the license validation result was successfully retrieved.
* ADSP_ENOTEXIST if there is no license with the given id.
* ADSP_ENOTIMPL if there is no validation function for a license
* with this id.
*/
uint32_t size;
/* Length in bytes of the result that follows this structure*/
};
/* Set Q6 topologies */
/*
* Registers custom topologies in the aDSP for
* use in audio, voice, AFE and LSM.
*/
#define AVCS_CMD_SHARED_MEM_MAP_REGIONS 0x00012924
#define AVCS_CMDRSP_SHARED_MEM_MAP_REGIONS 0x00012925
#define AVCS_CMD_SHARED_MEM_UNMAP_REGIONS 0x00012926
/* Commands the AVCS to map multiple shared memory regions with remote
* processor ID. All mapped regions must be from the same memory pool.
*
* Return:
* ADSP_EOK : SUCCESS
* ADSP_EHANDLE : Failed due to incorrect handle.
* ADSP_EBADPARAM : Failed due to bad parameters.
*
* Dependencies:
* The mem_map_handle should be obtained earlier
* using AVCS_CMD_SHARED_MEM_MAP_REGIONS with pool ID
* ADSP_MEMORY_MAP_MDF_SHMEM_4K_POOL.
*/
#define AVCS_CMD_MAP_MDF_SHARED_MEMORY 0x00012930
#define AVCS_CMD_REGISTER_TOPOLOGIES 0x00012923
/* The payload for the AVCS_CMD_REGISTER_TOPOLOGIES command */
struct avcs_cmd_register_topologies {
struct apr_hdr hdr;
uint32_t payload_addr_lsw;
/* Lower 32 bits of the topology buffer address. */
uint32_t payload_addr_msw;
/* Upper 32 bits of the topology buffer address. */
uint32_t mem_map_handle;
/* Unique identifier for an address.
* -This memory map handle is returned by the aDSP through the
* memory map command.
* -NULL mem_map_handle is interpreted as in-band parameter
* passing.
* -Client has the flexibility to choose in-band or out-of-band.
* -Out-of-band is recommended in this case.
*/
uint32_t payload_size;
/* Size in bytes of the valid data in the topology buffer. */
} __packed;
#define AVCS_CMD_DEREGISTER_TOPOLOGIES 0x0001292a
/* The payload for the AVCS_CMD_DEREGISTER_TOPOLOGIES command */
struct avcs_cmd_deregister_topologies {
struct apr_hdr hdr;
uint32_t payload_addr_lsw;
/* Lower 32 bits of the topology buffer address. */
uint32_t payload_addr_msw;
/* Upper 32 bits of the topology buffer address. */
uint32_t mem_map_handle;
/* Unique identifier for an address.
* -This memory map handle is returned by the aDSP through the
* memory map command.
* -NULL mem_map_handle is interpreted as in-band parameter
* passing.
* -Client has the flexibility to choose in-band or out-of-band.
* -Out-of-band is recommended in this case.
*/
uint32_t payload_size;
/* Size in bytes of the valid data in the topology buffer. */
uint32_t mode;
/* 1: Deregister selected topologies
* 2: Deregister all topologies
*/
} __packed;
#define AVCS_MODE_DEREGISTER_ALL_CUSTOM_TOPOLOGIES 2
#define AVCS_CMD_LOAD_TOPO_MODULES 0x0001296C
#define AVCS_CMD_UNLOAD_TOPO_MODULES 0x0001296D
#define CORE_LOAD_TOPOLOGY 0
#define CORE_UNLOAD_TOPOLOGY 1
struct avcs_cmd_load_unload_topo_modules {
struct apr_hdr hdr;
uint32_t topology_id;
} __packed;
/* This command allows a remote client(HLOS) creates a client to LPASS NPA
* resource node. Currently, this command supports only the NPA Sleep resource
* "/island/core/drivers" node ID.
*/
#define AVCS_CMD_CREATE_LPASS_NPA_CLIENT 0x00012985
#define AVCS_SLEEP_ISLAND_CORE_DRIVER_NODE_ID 0x00000001
struct avcs_cmd_create_lpass_npa_client_t {
struct apr_hdr hdr;
uint32_t node_id;
/* Unique ID of the NPA node.
* @values
* - #AVCS_SLEEP_ISLAND_CORE_DRIVER_NODE_ID
*/
char client_name[16];
/* Client name, up to a maximum of sixteen characters.*/
};
/* In response to the #AVCS_CMD_CREATE_LPASS_NPA_CLIENT command, the AVCS
* returns the handle to remote HLOS client.
*/
#define AVCS_CMDRSP_CREATE_LPASS_NPA_CLIENT 0x00012986
struct avcs_cmdrsp_create_lpass_npa_client_t {
uint32_t status;
/* Status message (error code).
* @values
* - ADSP_EOK -- Create was successful
* - ADSP_EFAILED -- Create failed
*/
uint32_t client_handle;
/* Handle of the client.*/
};
/* The remote HLOS client use this command to issue the request to the npa
* resource. Remote client(HLOS) must send the valid npa client handle and
* resource id info.
*/
#define AVCS_CMD_REQUEST_LPASS_NPA_RESOURCES 0x00012987
#define AVCS_SLEEP_NODE_ISLAND_TRANSITION_RESOURCE_ID 0x00000001
#define SLEEP_RESTRICT_ISLAND 0x0
#define SLEEP_ALLOW_ISLAND 0x1
/* Immediately following this structure is the resource request configuration
* data payload. Payload varies depend on the resource_id requested.
* Currently supported only island transition payload.
*/
struct avcs_cmd_request_lpass_npa_resources_t {
struct apr_hdr hdr;
uint32_t client_handle;
/* Handle of the client.
* @values
* - Valid uint32 number
*/
uint32_t resource_id;
/* Unique ID of the NPA resource ID.
* @values
* - #AVCS_SLEEP_NODE_ISLAND_TRANSITION_RESOURCE_ID
*/
};
/* This structure contains the sleep node resource payload data.
*/
struct avcs_sleep_node_island_transition_config_t {
struct avcs_cmd_request_lpass_npa_resources_t req_lpass_npa_rsc;
uint32_t island_allow_mode;
/* Specifies the island state.
* @values
* - #SLEEP_RESTRICT_ISLAND
* - #SLEEP_ALLOW_ISLAND
*/
};
/* This command allows remote client(HLOS) to destroy the npa node client
* handle, which is created using the #AVCS_CMD_CREATE_LPASS_NPA_CLIENT command.
* Remote client(HLOS) must send the valid npa client handle.
*/
#define AVCS_CMD_DESTROY_LPASS_NPA_CLIENT 0x00012988
struct avcs_cmd_destroy_lpass_npa_client_t {
struct apr_hdr hdr;
uint32_t client_handle;
/* Handle of the client.
* @values
* - Valid uint32 number
*/
};
int q6core_map_memory_regions(phys_addr_t *buf_add, uint32_t mempool_id,
uint32_t *bufsz, uint32_t bufcnt, uint32_t *map_handle);
int q6core_memory_unmap_regions(uint32_t mem_map_handle);
int q6core_map_mdf_memory_regions(uint64_t *buf_add, uint32_t mempool_id,
uint32_t *bufsz, uint32_t bufcnt, uint32_t *map_handle);
int q6core_map_mdf_shared_memory(uint32_t map_handle, uint64_t *buf_add,
uint32_t proc_id, uint32_t *bufsz, uint32_t bufcnt);
int32_t core_set_license(uint32_t key, uint32_t module_id);
int32_t core_get_license_status(uint32_t module_id);
int32_t q6core_load_unload_topo_modules(uint32_t topology_id,
bool preload_type);
int q6core_create_lpass_npa_client(uint32_t node_id, char *client_name,
uint32_t *client_handle);
int q6core_destroy_lpass_npa_client(uint32_t client_handle);
int q6core_request_island_transition(uint32_t client_handle,
uint32_t island_allow_mode);
#endif /* __Q6CORE_H__ */
|