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