blob: 146fc1a6cfcd2ad1742aa96d48f0c896f9eb5d41 (
plain)
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
|
/* Copyright (c) 2012-2014, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef __Q6CORE_H__
#define __Q6CORE_H__
#include <linux/qdsp6v2/apr.h>
#include <soc/qcom/ocmem.h>
#define AVCS_CMD_GET_LOW_POWER_SEGMENTS_INFO 0x00012903
struct avcs_cmd_get_low_power_segments_info {
struct apr_hdr hdr;
} __packed;
#define AVCS_CMDRSP_GET_LOW_POWER_SEGMENTS_INFO 0x00012904
#define AVCS_CMD_ADSP_EVENT_GET_STATE 0x0001290C
#define AVCS_CMDRSP_ADSP_EVENT_GET_STATE 0x0001290D
/* @brief AVCS_CMDRSP_GET_LOW_POWER_SEGMENTS_INFO payload
* structure. Payload for this event comprises one instance of
* avcs_cmd_rsp_get_low_power_segments_info_t, followed
* immediately by num_segments number of instances of the
* avcs_mem_segment_t structure.
*/
/* Types of Low Power Memory Segments. */
#define READ_ONLY_SEGMENT 1
/*< Read Only memory segment. */
#define READ_WRITE_SEGMENT 2
/*< Read Write memory segment. */
/*Category indicates whether audio/os/sensor segments. */
#define AUDIO_SEGMENT 1
/*< Audio memory segment. */
#define OS_SEGMENT 2
/*< QDSP6's OS memory segment. */
/* @brief Payload structure for AVS low power memory segment
* structure.
*/
struct avcs_mem_segment_t {
uint16_t type;
/*< Indicates which type of memory this segment is.
*Allowed values: READ_ONLY_SEGMENT or READ_WRITE_SEGMENT only.
*/
uint16_t category;
/*< Indicates whether audio or OS segments.
*Allowed values: AUDIO_SEGMENT or OS_SEGMENT only.
*/
uint32_t size;
/*< Size (in bytes) of this segment.
* Will be a non-zero value.
*/
uint32_t start_address_lsw;
/*< Lower 32 bits of the 64-bit physical start address
* of this segment.
*/
uint32_t start_address_msw;
/*< Upper 32 bits of the 64-bit physical start address
* of this segment.
*/
};
struct avcs_cmd_rsp_get_low_power_segments_info_t {
uint32_t num_segments;
/*< Number of segments in this response.
* 0: there are no known sections that should be mapped
* from DDR to OCMEM.
* >0: the number of memory segments in the following list.
*/
uint32_t bandwidth;
/*< Required OCMEM read/write bandwidth (in bytes per second)
* if OCMEM is granted.
* 0 if num_segments = 0
* >0 if num_segments > 0.
*/
struct avcs_mem_segment_t mem_segment[OCMEM_MAX_CHUNKS];
};
int core_get_low_power_segments(
struct avcs_cmd_rsp_get_low_power_segments_info_t **);
bool q6core_is_adsp_ready(void);
#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*/
};
int32_t core_set_license(uint32_t key, uint32_t module_id);
int32_t core_get_license_status(uint32_t module_id);
#endif /* __Q6CORE_H__ */
|