GNU Linux-libre 4.19.264-gnu1
[releases.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_adsp1_id_hdr {
77         struct wmfw_id_hdr fw;
78         __be32 zm;
79         __be32 dm;
80         __be32 n_algs;
81 } __packed;
82
83 struct wmfw_adsp2_id_hdr {
84         struct wmfw_id_hdr fw;
85         __be32 zm;
86         __be32 xm;
87         __be32 ym;
88         __be32 n_algs;
89 } __packed;
90
91 struct wmfw_alg_hdr {
92         __be32 id;
93         __be32 ver;
94 } __packed;
95
96 struct wmfw_adsp1_alg_hdr {
97         struct wmfw_alg_hdr alg;
98         __be32 zm;
99         __be32 dm;
100 } __packed;
101
102 struct wmfw_adsp2_alg_hdr {
103         struct wmfw_alg_hdr alg;
104         __be32 zm;
105         __be32 xm;
106         __be32 ym;
107 } __packed;
108
109 struct wmfw_adsp_alg_data {
110         __le32 id;
111         u8 name[WMFW_MAX_ALG_NAME];
112         u8 descr[WMFW_MAX_ALG_DESCR_NAME];
113         __le32 ncoeff;
114         u8 data[];
115 } __packed;
116
117 struct wmfw_adsp_coeff_data {
118         struct {
119                 __le16 offset;
120                 __le16 type;
121                 __le32 size;
122         } hdr;
123         u8 name[WMFW_MAX_COEFF_NAME];
124         u8 descr[WMFW_MAX_COEFF_DESCR_NAME];
125         __le16 ctl_type;
126         __le16 flags;
127         __le32 len;
128         u8 data[];
129 } __packed;
130
131 struct wmfw_coeff_hdr {
132         u8 magic[4];
133         __le32 len;
134         union {
135                 __be32 rev;
136                 __le32 ver;
137         };
138         union {
139                 __be32 core;
140                 __le32 core_ver;
141         };
142         u8 data[];
143 } __packed;
144
145 struct wmfw_coeff_item {
146         __le16 offset;
147         __le16 type;
148         __le32 id;
149         __le32 ver;
150         __le32 sr;
151         __le32 len;
152         u8 data[];
153 } __packed;
154
155 #define WMFW_ADSP1 1
156 #define WMFW_ADSP2 2
157
158 #define WMFW_ABSOLUTE         0xf0
159 #define WMFW_ALGORITHM_DATA   0xf2
160 #define WMFW_NAME_TEXT        0xfe
161 #define WMFW_INFO_TEXT        0xff
162
163 #define WMFW_ADSP1_PM 2
164 #define WMFW_ADSP1_DM 3
165 #define WMFW_ADSP1_ZM 4
166
167 #define WMFW_ADSP2_PM 2
168 #define WMFW_ADSP2_ZM 4
169 #define WMFW_ADSP2_XM 5
170 #define WMFW_ADSP2_YM 6
171
172 #endif