Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.13.7.
  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
 31struct wmfw_header {
 32	char magic[4];
 33	__le32 len;
 34	__le16 rev;
 35	u8 core;
 36	u8 ver;
 37} __packed;
 38
 39struct wmfw_footer {
 40	__le64 timestamp;
 41	__le32 checksum;
 42} __packed;
 43
 44struct wmfw_adsp1_sizes {
 45	__le32 dm;
 46	__le32 pm;
 47	__le32 zm;
 48} __packed;
 49
 50struct wmfw_adsp2_sizes {
 51	__le32 xm;
 52	__le32 ym;
 53	__le32 pm;
 54	__le32 zm;
 55} __packed;
 56
 57struct wmfw_region {
 58	union {
 59		__be32 type;
 60		__le32 offset;
 61	};
 62	__le32 len;
 63	u8 data[];
 64} __packed;
 65
 66struct wmfw_id_hdr {
 67	__be32 core_id;
 68	__be32 core_rev;
 69	__be32 id;
 70	__be32 ver;
 71} __packed;
 72
 73struct 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
 81struct wmfw_adsp1_id_hdr {
 82	struct wmfw_id_hdr fw;
 83	__be32 zm;
 84	__be32 dm;
 85	__be32 n_algs;
 86} __packed;
 87
 88struct 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
 96struct 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
105struct wmfw_alg_hdr {
106	__be32 id;
107	__be32 ver;
108} __packed;
109
110struct wmfw_adsp1_alg_hdr {
111	struct wmfw_alg_hdr alg;
112	__be32 zm;
113	__be32 dm;
114} __packed;
115
116struct wmfw_adsp2_alg_hdr {
117	struct wmfw_alg_hdr alg;
118	__be32 zm;
119	__be32 xm;
120	__be32 ym;
121} __packed;
122
123struct 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
131struct 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
139struct 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
153struct 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
167struct 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_METADATA         0xfc
184#define WMFW_NAME_TEXT        0xfe
185#define WMFW_INFO_TEXT        0xff
186
187#define WMFW_ADSP1_PM 2
188#define WMFW_ADSP1_DM 3
189#define WMFW_ADSP1_ZM 4
190
191#define WMFW_ADSP2_PM 2
192#define WMFW_ADSP2_ZM 4
193#define WMFW_ADSP2_XM 5
194#define WMFW_ADSP2_YM 6
195
196#define WMFW_HALO_PM_PACKED 0x10
197#define WMFW_HALO_XM_PACKED 0x11
198#define WMFW_HALO_YM_PACKED 0x12
199
200#endif