linux/sound/soc/codecs/wmfw.h
<<
>>
Prefs
   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
 172