Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * wmfw.h - Wolfson firmware format information
0004  *
0005  * Copyright 2012 Wolfson Microelectronics plc
0006  *
0007  * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
0008  */
0009 
0010 #ifndef __WMFW_H
0011 #define __WMFW_H
0012 
0013 #include <linux/types.h>
0014 
0015 #define WMFW_MAX_ALG_NAME         256
0016 #define WMFW_MAX_ALG_DESCR_NAME   256
0017 
0018 #define WMFW_MAX_COEFF_NAME       256
0019 #define WMFW_MAX_COEFF_DESCR_NAME 256
0020 
0021 #define WMFW_CTL_FLAG_SYS         0x8000
0022 #define WMFW_CTL_FLAG_VOLATILE    0x0004
0023 #define WMFW_CTL_FLAG_WRITEABLE   0x0002
0024 #define WMFW_CTL_FLAG_READABLE    0x0001
0025 
0026 #define WMFW_CTL_TYPE_BYTES       0x0004 /* byte control */
0027 
0028 /* Non-ALSA coefficient types start at 0x1000 */
0029 #define WMFW_CTL_TYPE_ACKED       0x1000 /* acked control */
0030 #define WMFW_CTL_TYPE_HOSTEVENT   0x1001 /* event control */
0031 #define WMFW_CTL_TYPE_HOST_BUFFER 0x1002 /* host buffer pointer */
0032 #define WMFW_CTL_TYPE_FWEVENT     0x1004 /* firmware event control */
0033 
0034 struct wmfw_header {
0035     char magic[4];
0036     __le32 len;
0037     __le16 rev;
0038     u8 core;
0039     u8 ver;
0040 } __packed;
0041 
0042 struct wmfw_footer {
0043     __le64 timestamp;
0044     __le32 checksum;
0045 } __packed;
0046 
0047 struct wmfw_adsp1_sizes {
0048     __le32 dm;
0049     __le32 pm;
0050     __le32 zm;
0051 } __packed;
0052 
0053 struct wmfw_adsp2_sizes {
0054     __le32 xm;
0055     __le32 ym;
0056     __le32 pm;
0057     __le32 zm;
0058 } __packed;
0059 
0060 struct wmfw_region {
0061     union {
0062         __be32 type;
0063         __le32 offset;
0064     };
0065     __le32 len;
0066     u8 data[];
0067 } __packed;
0068 
0069 struct wmfw_id_hdr {
0070     __be32 core_id;
0071     __be32 core_rev;
0072     __be32 id;
0073     __be32 ver;
0074 } __packed;
0075 
0076 struct wmfw_v3_id_hdr {
0077     __be32 core_id;
0078     __be32 block_rev;
0079     __be32 vendor_id;
0080     __be32 id;
0081     __be32 ver;
0082 } __packed;
0083 
0084 struct wmfw_adsp1_id_hdr {
0085     struct wmfw_id_hdr fw;
0086     __be32 zm;
0087     __be32 dm;
0088     __be32 n_algs;
0089 } __packed;
0090 
0091 struct wmfw_adsp2_id_hdr {
0092     struct wmfw_id_hdr fw;
0093     __be32 zm;
0094     __be32 xm;
0095     __be32 ym;
0096     __be32 n_algs;
0097 } __packed;
0098 
0099 struct wmfw_halo_id_hdr {
0100     struct wmfw_v3_id_hdr fw;
0101     __be32 xm_base;
0102     __be32 xm_size;
0103     __be32 ym_base;
0104     __be32 ym_size;
0105     __be32 n_algs;
0106 } __packed;
0107 
0108 struct wmfw_alg_hdr {
0109     __be32 id;
0110     __be32 ver;
0111 } __packed;
0112 
0113 struct wmfw_adsp1_alg_hdr {
0114     struct wmfw_alg_hdr alg;
0115     __be32 zm;
0116     __be32 dm;
0117 } __packed;
0118 
0119 struct wmfw_adsp2_alg_hdr {
0120     struct wmfw_alg_hdr alg;
0121     __be32 zm;
0122     __be32 xm;
0123     __be32 ym;
0124 } __packed;
0125 
0126 struct wmfw_halo_alg_hdr {
0127     struct wmfw_alg_hdr alg;
0128     __be32 xm_base;
0129     __be32 xm_size;
0130     __be32 ym_base;
0131     __be32 ym_size;
0132 } __packed;
0133 
0134 struct wmfw_adsp_alg_data {
0135     __le32 id;
0136     u8 name[WMFW_MAX_ALG_NAME];
0137     u8 descr[WMFW_MAX_ALG_DESCR_NAME];
0138     __le32 ncoeff;
0139     u8 data[];
0140 } __packed;
0141 
0142 struct wmfw_adsp_coeff_data {
0143     struct {
0144         __le16 offset;
0145         __le16 type;
0146         __le32 size;
0147     } hdr;
0148     u8 name[WMFW_MAX_COEFF_NAME];
0149     u8 descr[WMFW_MAX_COEFF_DESCR_NAME];
0150     __le16 ctl_type;
0151     __le16 flags;
0152     __le32 len;
0153     u8 data[];
0154 } __packed;
0155 
0156 struct wmfw_coeff_hdr {
0157     u8 magic[4];
0158     __le32 len;
0159     union {
0160         __be32 rev;
0161         __le32 ver;
0162     };
0163     union {
0164         __be32 core;
0165         __le32 core_ver;
0166     };
0167     u8 data[];
0168 } __packed;
0169 
0170 struct wmfw_coeff_item {
0171     __le16 offset;
0172     __le16 type;
0173     __le32 id;
0174     __le32 ver;
0175     __le32 sr;
0176     __le32 len;
0177     u8 data[];
0178 } __packed;
0179 
0180 #define WMFW_ADSP1 1
0181 #define WMFW_ADSP2 2
0182 #define WMFW_HALO 4
0183 
0184 #define WMFW_ABSOLUTE         0xf0
0185 #define WMFW_ALGORITHM_DATA   0xf2
0186 #define WMFW_METADATA         0xfc
0187 #define WMFW_NAME_TEXT        0xfe
0188 #define WMFW_INFO_TEXT        0xff
0189 
0190 #define WMFW_ADSP1_PM 2
0191 #define WMFW_ADSP1_DM 3
0192 #define WMFW_ADSP1_ZM 4
0193 
0194 #define WMFW_ADSP2_PM 2
0195 #define WMFW_ADSP2_ZM 4
0196 #define WMFW_ADSP2_XM 5
0197 #define WMFW_ADSP2_YM 6
0198 
0199 #define WMFW_HALO_PM_PACKED 0x10
0200 #define WMFW_HALO_XM_PACKED 0x11
0201 #define WMFW_HALO_YM_PACKED 0x12
0202 
0203 #endif