2012-10-04 19:31:52 +04:00
|
|
|
/*
|
|
|
|
* wmfw.h - Wolfson firmware format information
|
|
|
|
*
|
|
|
|
* Copyright 2012 Wolfson Microelectronics plc
|
|
|
|
*
|
|
|
|
* Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
|
|
* published by the Free Software Foundation.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __WMFW_H
|
|
|
|
#define __WMFW_H
|
|
|
|
|
|
|
|
#include <linux/types.h>
|
|
|
|
|
2015-04-13 15:28:02 +03:00
|
|
|
#define WMFW_MAX_ALG_NAME 256
|
|
|
|
#define WMFW_MAX_ALG_DESCR_NAME 256
|
|
|
|
|
|
|
|
#define WMFW_MAX_COEFF_NAME 256
|
|
|
|
#define WMFW_MAX_COEFF_DESCR_NAME 256
|
|
|
|
|
2015-04-20 15:52:45 +03:00
|
|
|
#define WMFW_CTL_FLAG_SYS 0x8000
|
|
|
|
#define WMFW_CTL_FLAG_VOLATILE 0x0004
|
|
|
|
#define WMFW_CTL_FLAG_WRITEABLE 0x0002
|
|
|
|
#define WMFW_CTL_FLAG_READABLE 0x0001
|
|
|
|
|
2016-11-09 20:14:17 +03:00
|
|
|
/* Non-ALSA coefficient types start at 0x1000 */
|
2016-11-09 20:14:18 +03:00
|
|
|
#define WMFW_CTL_TYPE_ACKED 0x1000 /* acked control */
|
2016-11-09 20:14:17 +03:00
|
|
|
#define WMFW_CTL_TYPE_HOSTEVENT 0x1001 /* event control */
|
|
|
|
|
2012-10-04 19:31:52 +04:00
|
|
|
struct wmfw_header {
|
|
|
|
char magic[4];
|
|
|
|
__le32 len;
|
|
|
|
__le16 rev;
|
|
|
|
u8 core;
|
|
|
|
u8 ver;
|
|
|
|
} __packed;
|
|
|
|
|
|
|
|
struct wmfw_footer {
|
|
|
|
__le64 timestamp;
|
|
|
|
__le32 checksum;
|
|
|
|
} __packed;
|
|
|
|
|
|
|
|
struct wmfw_adsp1_sizes {
|
|
|
|
__le32 dm;
|
|
|
|
__le32 pm;
|
|
|
|
__le32 zm;
|
|
|
|
} __packed;
|
|
|
|
|
2012-10-11 06:54:02 +04:00
|
|
|
struct wmfw_adsp2_sizes {
|
|
|
|
__le32 xm;
|
|
|
|
__le32 ym;
|
|
|
|
__le32 pm;
|
|
|
|
__le32 zm;
|
|
|
|
} __packed;
|
|
|
|
|
2012-10-04 19:31:52 +04:00
|
|
|
struct wmfw_region {
|
|
|
|
union {
|
|
|
|
__be32 type;
|
|
|
|
__le32 offset;
|
|
|
|
};
|
|
|
|
__le32 len;
|
|
|
|
u8 data[];
|
|
|
|
} __packed;
|
|
|
|
|
2012-10-05 22:43:18 +04:00
|
|
|
struct wmfw_id_hdr {
|
|
|
|
__be32 core_id;
|
|
|
|
__be32 core_rev;
|
|
|
|
__be32 id;
|
|
|
|
__be32 ver;
|
|
|
|
} __packed;
|
|
|
|
|
|
|
|
struct wmfw_adsp1_id_hdr {
|
|
|
|
struct wmfw_id_hdr fw;
|
|
|
|
__be32 zm;
|
|
|
|
__be32 dm;
|
2015-04-13 15:27:54 +03:00
|
|
|
__be32 n_algs;
|
2012-10-05 22:43:18 +04:00
|
|
|
} __packed;
|
|
|
|
|
2012-10-11 06:54:02 +04:00
|
|
|
struct wmfw_adsp2_id_hdr {
|
|
|
|
struct wmfw_id_hdr fw;
|
|
|
|
__be32 zm;
|
|
|
|
__be32 xm;
|
|
|
|
__be32 ym;
|
2015-04-13 15:27:54 +03:00
|
|
|
__be32 n_algs;
|
2012-10-11 06:54:02 +04:00
|
|
|
} __packed;
|
|
|
|
|
2012-10-05 22:43:18 +04:00
|
|
|
struct wmfw_alg_hdr {
|
|
|
|
__be32 id;
|
|
|
|
__be32 ver;
|
|
|
|
} __packed;
|
|
|
|
|
|
|
|
struct wmfw_adsp1_alg_hdr {
|
|
|
|
struct wmfw_alg_hdr alg;
|
|
|
|
__be32 zm;
|
|
|
|
__be32 dm;
|
|
|
|
} __packed;
|
|
|
|
|
2012-10-11 06:54:02 +04:00
|
|
|
struct wmfw_adsp2_alg_hdr {
|
|
|
|
struct wmfw_alg_hdr alg;
|
|
|
|
__be32 zm;
|
|
|
|
__be32 xm;
|
|
|
|
__be32 ym;
|
|
|
|
} __packed;
|
|
|
|
|
2015-04-13 15:28:02 +03:00
|
|
|
struct wmfw_adsp_alg_data {
|
|
|
|
__le32 id;
|
|
|
|
u8 name[WMFW_MAX_ALG_NAME];
|
|
|
|
u8 descr[WMFW_MAX_ALG_DESCR_NAME];
|
|
|
|
__le32 ncoeff;
|
|
|
|
u8 data[];
|
|
|
|
} __packed;
|
|
|
|
|
|
|
|
struct wmfw_adsp_coeff_data {
|
|
|
|
struct {
|
|
|
|
__le16 offset;
|
|
|
|
__le16 type;
|
|
|
|
__le32 size;
|
|
|
|
} hdr;
|
|
|
|
u8 name[WMFW_MAX_COEFF_NAME];
|
|
|
|
u8 descr[WMFW_MAX_COEFF_DESCR_NAME];
|
|
|
|
__le16 ctl_type;
|
|
|
|
__le16 flags;
|
|
|
|
__le32 len;
|
|
|
|
u8 data[];
|
|
|
|
} __packed;
|
|
|
|
|
2012-10-05 22:43:18 +04:00
|
|
|
struct wmfw_coeff_hdr {
|
|
|
|
u8 magic[4];
|
|
|
|
__le32 len;
|
2013-01-16 11:59:04 +04:00
|
|
|
union {
|
|
|
|
__be32 rev;
|
|
|
|
__le32 ver;
|
|
|
|
};
|
|
|
|
union {
|
|
|
|
__be32 core;
|
|
|
|
__le32 core_ver;
|
|
|
|
};
|
2012-10-05 22:43:18 +04:00
|
|
|
u8 data[];
|
|
|
|
} __packed;
|
|
|
|
|
|
|
|
struct wmfw_coeff_item {
|
2013-01-16 11:59:04 +04:00
|
|
|
__le16 offset;
|
|
|
|
__le16 type;
|
2012-10-05 22:43:18 +04:00
|
|
|
__le32 id;
|
|
|
|
__le32 ver;
|
|
|
|
__le32 sr;
|
|
|
|
__le32 len;
|
|
|
|
u8 data[];
|
|
|
|
} __packed;
|
2012-10-11 06:54:02 +04:00
|
|
|
|
2012-10-04 19:31:52 +04:00
|
|
|
#define WMFW_ADSP1 1
|
2012-10-11 06:54:02 +04:00
|
|
|
#define WMFW_ADSP2 2
|
2012-10-04 19:31:52 +04:00
|
|
|
|
2015-04-13 15:28:02 +03:00
|
|
|
#define WMFW_ABSOLUTE 0xf0
|
|
|
|
#define WMFW_ALGORITHM_DATA 0xf2
|
|
|
|
#define WMFW_NAME_TEXT 0xfe
|
|
|
|
#define WMFW_INFO_TEXT 0xff
|
2012-10-04 19:31:52 +04:00
|
|
|
|
|
|
|
#define WMFW_ADSP1_PM 2
|
|
|
|
#define WMFW_ADSP1_DM 3
|
|
|
|
#define WMFW_ADSP1_ZM 4
|
|
|
|
|
2012-10-11 06:54:02 +04:00
|
|
|
#define WMFW_ADSP2_PM 2
|
|
|
|
#define WMFW_ADSP2_ZM 4
|
|
|
|
#define WMFW_ADSP2_XM 5
|
|
|
|
#define WMFW_ADSP2_YM 6
|
|
|
|
|
2012-10-04 19:31:52 +04:00
|
|
|
#endif
|