File Index
Files and directories
Sign in
FILE

wmfw.h

File preview with syntax highlighting.

linux-6.19.14/include/linux/firmware/cirrus/wmfw.h C
  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#define WMFW_CTL_TYPE_BYTES       0x0004 /* byte control */
 27
 28/* Non-ALSA coefficient types start at 0x1000 */
 29#define WMFW_CTL_TYPE_ACKED       0x1000 /* acked control */
 30#define WMFW_CTL_TYPE_HOSTEVENT   0x1001 /* event control */
 31#define WMFW_CTL_TYPE_HOST_BUFFER 0x1002 /* host buffer pointer */
 32#define WMFW_CTL_TYPE_FWEVENT     0x1004 /* firmware event control */
 33
 34struct wmfw_header {
 35	char magic[4];
 36	__le32 len;
 37	__le16 rev;
 38	u8 core;
 39	u8 ver;
 40} __packed;
 41
 42struct wmfw_footer {
 43	__le64 timestamp;
 44	__le32 checksum;
 45} __packed;
 46
 47struct wmfw_adsp1_sizes {
 48	__le32 dm;
 49	__le32 pm;
 50	__le32 zm;
 51} __packed;
 52
 53struct wmfw_adsp2_sizes {
 54	__le32 xm;
 55	__le32 ym;
 56	__le32 pm;
 57	__le32 zm;
 58} __packed;
 59
 60struct wmfw_region {
 61	union {
 62		__be32 type;
 63		__le32 offset;
 64	};
 65	__le32 len;
 66	u8 data[];
 67} __packed;
 68
 69struct wmfw_id_hdr {
 70	__be32 core_id;
 71	__be32 core_rev;
 72	__be32 id;
 73	__be32 ver;
 74} __packed;
 75
 76struct 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
 84struct wmfw_adsp1_id_hdr {
 85	struct wmfw_id_hdr fw;
 86	__be32 zm;
 87	__be32 dm;
 88	__be32 n_algs;
 89} __packed;
 90
 91struct 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
 99struct 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
108struct wmfw_alg_hdr {
109	__be32 id;
110	__be32 ver;
111} __packed;
112
113struct wmfw_adsp1_alg_hdr {
114	struct wmfw_alg_hdr alg;
115	__be32 zm;
116	__be32 dm;
117} __packed;
118
119struct wmfw_adsp2_alg_hdr {
120	struct wmfw_alg_hdr alg;
121	__be32 zm;
122	__be32 xm;
123	__be32 ym;
124} __packed;
125
126struct 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
134struct 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
142struct 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
156struct 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
170struct 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_METADATA         0xfc
187#define WMFW_NAME_TEXT        0xfe
188#define WMFW_INFO_TEXT        0xff
189
190#define WMFW_ADSP1_PM 2
191#define WMFW_ADSP1_DM 3
192#define WMFW_ADSP1_ZM 4
193
194#define WMFW_ADSP2_PM 2
195#define WMFW_ADSP2_ZM 4
196#define WMFW_ADSP2_XM 5
197#define WMFW_ADSP2_YM 6
198
199#define WMFW_HALO_PM_PACKED 0x10
200#define WMFW_HALO_XM_PACKED 0x11
201#define WMFW_HALO_YM_PACKED 0x12
202
203#endif
~/ Read-only file preview.