• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
33 struct wmfw_header {
34 	char magic[4];
35 	__le32 len;
36 	__le16 rev;
37 	u8 core;
38 	u8 ver;
39 } __packed;
40 
41 struct wmfw_footer {
42 	__le64 timestamp;
43 	__le32 checksum;
44 } __packed;
45 
46 struct wmfw_adsp1_sizes {
47 	__le32 dm;
48 	__le32 pm;
49 	__le32 zm;
50 } __packed;
51 
52 struct wmfw_adsp2_sizes {
53 	__le32 xm;
54 	__le32 ym;
55 	__le32 pm;
56 	__le32 zm;
57 } __packed;
58 
59 struct wmfw_region {
60 	union {
61 		__be32 type;
62 		__le32 offset;
63 	};
64 	__le32 len;
65 	u8 data[];
66 } __packed;
67 
68 struct wmfw_id_hdr {
69 	__be32 core_id;
70 	__be32 core_rev;
71 	__be32 id;
72 	__be32 ver;
73 } __packed;
74 
75 struct wmfw_adsp1_id_hdr {
76 	struct wmfw_id_hdr fw;
77 	__be32 zm;
78 	__be32 dm;
79 	__be32 n_algs;
80 } __packed;
81 
82 struct wmfw_adsp2_id_hdr {
83 	struct wmfw_id_hdr fw;
84 	__be32 zm;
85 	__be32 xm;
86 	__be32 ym;
87 	__be32 n_algs;
88 } __packed;
89 
90 struct wmfw_alg_hdr {
91 	__be32 id;
92 	__be32 ver;
93 } __packed;
94 
95 struct wmfw_adsp1_alg_hdr {
96 	struct wmfw_alg_hdr alg;
97 	__be32 zm;
98 	__be32 dm;
99 } __packed;
100 
101 struct wmfw_adsp2_alg_hdr {
102 	struct wmfw_alg_hdr alg;
103 	__be32 zm;
104 	__be32 xm;
105 	__be32 ym;
106 } __packed;
107 
108 struct wmfw_adsp_alg_data {
109 	__le32 id;
110 	u8 name[WMFW_MAX_ALG_NAME];
111 	u8 descr[WMFW_MAX_ALG_DESCR_NAME];
112 	__le32 ncoeff;
113 	u8 data[];
114 } __packed;
115 
116 struct wmfw_adsp_coeff_data {
117 	struct {
118 		__le16 offset;
119 		__le16 type;
120 		__le32 size;
121 	} hdr;
122 	u8 name[WMFW_MAX_COEFF_NAME];
123 	u8 descr[WMFW_MAX_COEFF_DESCR_NAME];
124 	__le16 ctl_type;
125 	__le16 flags;
126 	__le32 len;
127 	u8 data[];
128 } __packed;
129 
130 struct wmfw_coeff_hdr {
131 	u8 magic[4];
132 	__le32 len;
133 	union {
134 		__be32 rev;
135 		__le32 ver;
136 	};
137 	union {
138 		__be32 core;
139 		__le32 core_ver;
140 	};
141 	u8 data[];
142 } __packed;
143 
144 struct wmfw_coeff_item {
145 	__le16 offset;
146 	__le16 type;
147 	__le32 id;
148 	__le32 ver;
149 	__le32 sr;
150 	__le32 len;
151 	u8 data[];
152 } __packed;
153 
154 #define WMFW_ADSP1 1
155 #define WMFW_ADSP2 2
156 
157 #define WMFW_ABSOLUTE         0xf0
158 #define WMFW_ALGORITHM_DATA   0xf2
159 #define WMFW_NAME_TEXT        0xfe
160 #define WMFW_INFO_TEXT        0xff
161 
162 #define WMFW_ADSP1_PM 2
163 #define WMFW_ADSP1_DM 3
164 #define WMFW_ADSP1_ZM 4
165 
166 #define WMFW_ADSP2_PM 2
167 #define WMFW_ADSP2_ZM 4
168 #define WMFW_ADSP2_XM 5
169 #define WMFW_ADSP2_YM 6
170 
171 #endif
172