Merge branches 'acpi-tables', 'acpi-osl', 'acpi-misc' and 'acpi-tools'
[sfrench/cifs-2.6.git] / sound / soc / codecs / wmfw.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * wmfw.h - Wolfson firmware format information
4  *
5  * Copyright 2012 Wolfson Microelectronics plc
6  *
7  * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
8  */
9
10 #ifndef __WMFW_H
11 #define __WMFW_H
12
13 #include <linux/types.h>
14
15 #define WMFW_MAX_ALG_NAME         256
16 #define WMFW_MAX_ALG_DESCR_NAME   256
17
18 #define WMFW_MAX_COEFF_NAME       256
19 #define WMFW_MAX_COEFF_DESCR_NAME 256
20
21 #define WMFW_CTL_FLAG_SYS         0x8000
22 #define WMFW_CTL_FLAG_VOLATILE    0x0004
23 #define WMFW_CTL_FLAG_WRITEABLE   0x0002
24 #define WMFW_CTL_FLAG_READABLE    0x0001
25
26 /* Non-ALSA coefficient types start at 0x1000 */
27 #define WMFW_CTL_TYPE_ACKED       0x1000 /* acked control */
28 #define WMFW_CTL_TYPE_HOSTEVENT   0x1001 /* event control */
29 #define WMFW_CTL_TYPE_HOST_BUFFER 0x1002 /* host buffer pointer */
30
31 struct wmfw_header {
32         char magic[4];
33         __le32 len;
34         __le16 rev;
35         u8 core;
36         u8 ver;
37 } __packed;
38
39 struct wmfw_footer {
40         __le64 timestamp;
41         __le32 checksum;
42 } __packed;
43
44 struct wmfw_adsp1_sizes {
45         __le32 dm;
46         __le32 pm;
47         __le32 zm;
48 } __packed;
49
50 struct wmfw_adsp2_sizes {
51         __le32 xm;
52         __le32 ym;
53         __le32 pm;
54         __le32 zm;
55 } __packed;
56
57 struct wmfw_region {
58         union {
59                 __be32 type;
60                 __le32 offset;
61         };
62         __le32 len;
63         u8 data[];
64 } __packed;
65
66 struct wmfw_id_hdr {
67         __be32 core_id;
68         __be32 core_rev;
69         __be32 id;
70         __be32 ver;
71 } __packed;
72
73 struct wmfw_v3_id_hdr {
74         __be32 core_id;
75         __be32 block_rev;
76         __be32 vendor_id;
77         __be32 id;
78         __be32 ver;
79 } __packed;
80
81 struct wmfw_adsp1_id_hdr {
82         struct wmfw_id_hdr fw;
83         __be32 zm;
84         __be32 dm;
85         __be32 n_algs;
86 } __packed;
87
88 struct wmfw_adsp2_id_hdr {
89         struct wmfw_id_hdr fw;
90         __be32 zm;
91         __be32 xm;
92         __be32 ym;
93         __be32 n_algs;
94 } __packed;
95
96 struct wmfw_halo_id_hdr {
97         struct wmfw_v3_id_hdr fw;
98         __be32 xm_base;
99         __be32 xm_size;
100         __be32 ym_base;
101         __be32 ym_size;
102         __be32 n_algs;
103 } __packed;
104
105 struct wmfw_alg_hdr {
106         __be32 id;
107         __be32 ver;
108 } __packed;
109
110 struct wmfw_adsp1_alg_hdr {
111         struct wmfw_alg_hdr alg;
112         __be32 zm;
113         __be32 dm;
114 } __packed;
115
116 struct wmfw_adsp2_alg_hdr {
117         struct wmfw_alg_hdr alg;
118         __be32 zm;
119         __be32 xm;
120         __be32 ym;
121 } __packed;
122
123 struct wmfw_halo_alg_hdr {
124         struct wmfw_alg_hdr alg;
125         __be32 xm_base;
126         __be32 xm_size;
127         __be32 ym_base;
128         __be32 ym_size;
129 } __packed;
130
131 struct wmfw_adsp_alg_data {
132         __le32 id;
133         u8 name[WMFW_MAX_ALG_NAME];
134         u8 descr[WMFW_MAX_ALG_DESCR_NAME];
135         __le32 ncoeff;
136         u8 data[];
137 } __packed;
138
139 struct wmfw_adsp_coeff_data {
140         struct {
141                 __le16 offset;
142                 __le16 type;
143                 __le32 size;
144         } hdr;
145         u8 name[WMFW_MAX_COEFF_NAME];
146         u8 descr[WMFW_MAX_COEFF_DESCR_NAME];
147         __le16 ctl_type;
148         __le16 flags;
149         __le32 len;
150         u8 data[];
151 } __packed;
152
153 struct wmfw_coeff_hdr {
154         u8 magic[4];
155         __le32 len;
156         union {
157                 __be32 rev;
158                 __le32 ver;
159         };
160         union {
161                 __be32 core;
162                 __le32 core_ver;
163         };
164         u8 data[];
165 } __packed;
166
167 struct wmfw_coeff_item {
168         __le16 offset;
169         __le16 type;
170         __le32 id;
171         __le32 ver;
172         __le32 sr;
173         __le32 len;
174         u8 data[];
175 } __packed;
176
177 #define WMFW_ADSP1 1
178 #define WMFW_ADSP2 2
179 #define WMFW_HALO 4
180
181 #define WMFW_ABSOLUTE         0xf0
182 #define WMFW_ALGORITHM_DATA   0xf2
183 #define WMFW_NAME_TEXT        0xfe
184 #define WMFW_INFO_TEXT        0xff
185
186 #define WMFW_ADSP1_PM 2
187 #define WMFW_ADSP1_DM 3
188 #define WMFW_ADSP1_ZM 4
189
190 #define WMFW_ADSP2_PM 2
191 #define WMFW_ADSP2_ZM 4
192 #define WMFW_ADSP2_XM 5
193 #define WMFW_ADSP2_YM 6
194
195 #define WMFW_HALO_PM_PACKED 0x10
196 #define WMFW_HALO_XM_PACKED 0x11
197 #define WMFW_HALO_YM_PACKED 0x12
198
199 #endif