wmfw.h 3.5 KB

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