0001
0002
0003
0004
0005
0006
0007
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
0027
0028
0029 #define WMFW_CTL_TYPE_ACKED 0x1000
0030 #define WMFW_CTL_TYPE_HOSTEVENT 0x1001
0031 #define WMFW_CTL_TYPE_HOST_BUFFER 0x1002
0032 #define WMFW_CTL_TYPE_FWEVENT 0x1004
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