wmfw.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  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. #ifndef __WMFW_H
  10. #define __WMFW_H
  11. #include <linux/types.h>
  12. #define WMFW_MAX_ALG_NAME 256
  13. #define WMFW_MAX_ALG_DESCR_NAME 256
  14. #define WMFW_MAX_COEFF_NAME 256
  15. #define WMFW_MAX_COEFF_DESCR_NAME 256
  16. #define WMFW_CTL_FLAG_SYS 0x8000
  17. #define WMFW_CTL_FLAG_VOLATILE 0x0004
  18. #define WMFW_CTL_FLAG_WRITEABLE 0x0002
  19. #define WMFW_CTL_FLAG_READABLE 0x0001
  20. /* Non-ALSA coefficient types start at 0x1000 */
  21. #define WMFW_CTL_TYPE_ACKED 0x1000 /* acked control */
  22. #define WMFW_CTL_TYPE_HOSTEVENT 0x1001 /* event control */
  23. #define WMFW_CTL_TYPE_HOST_BUFFER 0x1002 /* host buffer pointer */
  24. struct wmfw_header {
  25. char magic[4];
  26. __le32 len;
  27. __le16 rev;
  28. u8 core;
  29. u8 ver;
  30. } __packed;
  31. struct wmfw_footer {
  32. __le64 timestamp;
  33. __le32 checksum;
  34. } __packed;
  35. struct wmfw_adsp1_sizes {
  36. __le32 dm;
  37. __le32 pm;
  38. __le32 zm;
  39. } __packed;
  40. struct wmfw_adsp2_sizes {
  41. __le32 xm;
  42. __le32 ym;
  43. __le32 pm;
  44. __le32 zm;
  45. } __packed;
  46. struct wmfw_region {
  47. union {
  48. __be32 type;
  49. __le32 offset;
  50. };
  51. __le32 len;
  52. u8 data[];
  53. } __packed;
  54. struct wmfw_id_hdr {
  55. __be32 core_id;
  56. __be32 core_rev;
  57. __be32 id;
  58. __be32 ver;
  59. } __packed;
  60. struct wmfw_v3_id_hdr {
  61. __be32 core_id;
  62. __be32 block_rev;
  63. __be32 vendor_id;
  64. __be32 id;
  65. __be32 ver;
  66. } __packed;
  67. struct wmfw_adsp1_id_hdr {
  68. struct wmfw_id_hdr fw;
  69. __be32 zm;
  70. __be32 dm;
  71. __be32 n_algs;
  72. } __packed;
  73. struct wmfw_adsp2_id_hdr {
  74. struct wmfw_id_hdr fw;
  75. __be32 zm;
  76. __be32 xm;
  77. __be32 ym;
  78. __be32 n_algs;
  79. } __packed;
  80. struct wmfw_halo_id_hdr {
  81. struct wmfw_v3_id_hdr fw;
  82. __be32 xm_base;
  83. __be32 xm_size;
  84. __be32 ym_base;
  85. __be32 ym_size;
  86. __be32 n_algs;
  87. } __packed;
  88. struct wmfw_alg_hdr {
  89. __be32 id;
  90. __be32 ver;
  91. } __packed;
  92. struct wmfw_adsp1_alg_hdr {
  93. struct wmfw_alg_hdr alg;
  94. __be32 zm;
  95. __be32 dm;
  96. } __packed;
  97. struct wmfw_adsp2_alg_hdr {
  98. struct wmfw_alg_hdr alg;
  99. __be32 zm;
  100. __be32 xm;
  101. __be32 ym;
  102. } __packed;
  103. struct wmfw_halo_alg_hdr {
  104. struct wmfw_alg_hdr alg;
  105. __be32 xm_base;
  106. __be32 xm_size;
  107. __be32 ym_base;
  108. __be32 ym_size;
  109. } __packed;
  110. struct wmfw_adsp_alg_data {
  111. __le32 id;
  112. u8 name[WMFW_MAX_ALG_NAME];
  113. u8 descr[WMFW_MAX_ALG_DESCR_NAME];
  114. __le32 ncoeff;
  115. u8 data[];
  116. } __packed;
  117. struct wmfw_adsp_coeff_data {
  118. struct {
  119. __le16 offset;
  120. __le16 type;
  121. __le32 size;
  122. } hdr;
  123. u8 name[WMFW_MAX_COEFF_NAME];
  124. u8 descr[WMFW_MAX_COEFF_DESCR_NAME];
  125. __le16 ctl_type;
  126. __le16 flags;
  127. __le32 len;
  128. u8 data[];
  129. } __packed;
  130. struct 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. struct wmfw_coeff_item {
  144. __le16 offset;
  145. __le16 type;
  146. __le32 id;
  147. __le32 ver;
  148. __le32 sr;
  149. __le32 len;
  150. u8 data[];
  151. } __packed;
  152. #define WMFW_ADSP1 1
  153. #define WMFW_ADSP2 2
  154. #define WMFW_HALO 4
  155. #define WMFW_ABSOLUTE 0xf0
  156. #define WMFW_ALGORITHM_DATA 0xf2
  157. #define WMFW_METADATA 0xfc
  158. #define WMFW_NAME_TEXT 0xfe
  159. #define WMFW_INFO_TEXT 0xff
  160. #define WMFW_ADSP1_PM 2
  161. #define WMFW_ADSP1_DM 3
  162. #define WMFW_ADSP1_ZM 4
  163. #define WMFW_ADSP2_PM 2
  164. #define WMFW_ADSP2_ZM 4
  165. #define WMFW_ADSP2_XM 5
  166. #define WMFW_ADSP2_YM 6
  167. #define WMFW_HALO_PM_PACKED 0x10
  168. #define WMFW_HALO_XM_PACKED 0x11
  169. #define WMFW_HALO_YM_PACKED 0x12
  170. #endif