Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.13.7.
  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
 33struct wmfw_header {
 34	char magic[4];
 35	__le32 len;
 36	__le16 rev;
 37	u8 core;
 38	u8 ver;
 39} __packed;
 40
 41struct wmfw_footer {
 42	__le64 timestamp;
 43	__le32 checksum;
 44} __packed;
 45
 46struct wmfw_adsp1_sizes {
 47	__le32 dm;
 48	__le32 pm;
 49	__le32 zm;
 50} __packed;
 51
 52struct wmfw_adsp2_sizes {
 53	__le32 xm;
 54	__le32 ym;
 55	__le32 pm;
 56	__le32 zm;
 57} __packed;
 58
 59struct wmfw_region {
 60	union {
 61		__be32 type;
 62		__le32 offset;
 63	};
 64	__le32 len;
 65	u8 data[];
 66} __packed;
 67
 68struct wmfw_id_hdr {
 69	__be32 core_id;
 70	__be32 core_rev;
 71	__be32 id;
 72	__be32 ver;
 73} __packed;
 74
 75struct wmfw_adsp1_id_hdr {
 76	struct wmfw_id_hdr fw;
 77	__be32 zm;
 78	__be32 dm;
 79	__be32 n_algs;
 80} __packed;
 81
 82struct 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
 90struct wmfw_alg_hdr {
 91	__be32 id;
 92	__be32 ver;
 93} __packed;
 94
 95struct wmfw_adsp1_alg_hdr {
 96	struct wmfw_alg_hdr alg;
 97	__be32 zm;
 98	__be32 dm;
 99} __packed;
100
101struct wmfw_adsp2_alg_hdr {
102	struct wmfw_alg_hdr alg;
103	__be32 zm;
104	__be32 xm;
105	__be32 ym;
106} __packed;
107
108struct 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
116struct 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
130struct 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
144struct 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