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
18struct wmfw_header {
19	char magic[4];
20	__le32 len;
21	__le16 rev;
22	u8 core;
23	u8 ver;
24} __packed;
25
26struct wmfw_footer {
27	__le64 timestamp;
28	__le32 checksum;
29} __packed;
30
31struct wmfw_adsp1_sizes {
32	__le32 dm;
33	__le32 pm;
34	__le32 zm;
35} __packed;
36
37struct wmfw_adsp2_sizes {
38	__le32 xm;
39	__le32 ym;
40	__le32 pm;
41	__le32 zm;
42} __packed;
43
44struct wmfw_region {
45	union {
46		__be32 type;
47		__le32 offset;
48	};
49	__le32 len;
50	u8 data[];
51} __packed;
52
53struct wmfw_id_hdr {
54	__be32 core_id;
55	__be32 core_rev;
56	__be32 id;
57	__be32 ver;
58} __packed;
59
60struct wmfw_adsp1_id_hdr {
61	struct wmfw_id_hdr fw;
62	__be32 zm;
63	__be32 dm;
64	__be32 algs;
65} __packed;
66
67struct wmfw_adsp2_id_hdr {
68	struct wmfw_id_hdr fw;
69	__be32 zm;
70	__be32 xm;
71	__be32 ym;
72	__be32 algs;
73} __packed;
74
75struct wmfw_alg_hdr {
76	__be32 id;
77	__be32 ver;
78} __packed;
79
80struct wmfw_adsp1_alg_hdr {
81	struct wmfw_alg_hdr alg;
82	__be32 zm;
83	__be32 dm;
84} __packed;
85
86struct wmfw_adsp2_alg_hdr {
87	struct wmfw_alg_hdr alg;
88	__be32 zm;
89	__be32 xm;
90	__be32 ym;
91} __packed;
92
93struct wmfw_coeff_hdr {
94	u8 magic[4];
95	__le32 len;
96	union {
97		__be32 rev;
98		__le32 ver;
99	};
100	union {
101		__be32 core;
102		__le32 core_ver;
103	};
104	u8 data[];
105} __packed;
106
107struct wmfw_coeff_item {
108	__le16 offset;
109	__le16 type;
110	__le32 id;
111	__le32 ver;
112	__le32 sr;
113	__le32 len;
114	u8 data[];
115} __packed;
116
117#define WMFW_ADSP1 1
118#define WMFW_ADSP2 2
119
120#define WMFW_ABSOLUTE  0xf0
121#define WMFW_NAME_TEXT 0xfe
122#define WMFW_INFO_TEXT 0xff
123
124#define WMFW_ADSP1_PM 2
125#define WMFW_ADSP1_DM 3
126#define WMFW_ADSP1_ZM 4
127
128#define WMFW_ADSP2_PM 2
129#define WMFW_ADSP2_ZM 4
130#define WMFW_ADSP2_XM 5
131#define WMFW_ADSP2_YM 6
132
133#endif
134