wmfw.h (3555B)
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