iwl-fw-error-dump.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. /******************************************************************************
  2. *
  3. * This file is provided under a dual BSD/GPLv2 license. When using or
  4. * redistributing this file, you may do so under either license.
  5. *
  6. * GPL LICENSE SUMMARY
  7. *
  8. * Copyright(c) 2014 Intel Corporation. All rights reserved.
  9. *
  10. * This program is free software; you can redistribute it and/or modify
  11. * it under the terms of version 2 of the GNU General Public License as
  12. * published by the Free Software Foundation.
  13. *
  14. * This program is distributed in the hope that it will be useful, but
  15. * WITHOUT ANY WARRANTY; without even the implied warranty of
  16. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  17. * General Public License for more details.
  18. *
  19. * You should have received a copy of the GNU General Public License
  20. * along with this program; if not, write to the Free Software
  21. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
  22. * USA
  23. *
  24. * The full GNU General Public License is included in this distribution
  25. * in the file called COPYING.
  26. *
  27. * Contact Information:
  28. * Intel Linux Wireless <ilw@linux.intel.com>
  29. * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
  30. *
  31. * BSD LICENSE
  32. *
  33. * Copyright(c) 2014 Intel Corporation. All rights reserved.
  34. * All rights reserved.
  35. *
  36. * Redistribution and use in source and binary forms, with or without
  37. * modification, are permitted provided that the following conditions
  38. * are met:
  39. *
  40. * * Redistributions of source code must retain the above copyright
  41. * notice, this list of conditions and the following disclaimer.
  42. * * Redistributions in binary form must reproduce the above copyright
  43. * notice, this list of conditions and the following disclaimer in
  44. * the documentation and/or other materials provided with the
  45. * distribution.
  46. * * Neither the name Intel Corporation nor the names of its
  47. * contributors may be used to endorse or promote products derived
  48. * from this software without specific prior written permission.
  49. *
  50. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  51. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  52. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  53. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  54. * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  55. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  56. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  57. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  58. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  59. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  60. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  61. *****************************************************************************/
  62. #ifndef __fw_error_dump_h__
  63. #define __fw_error_dump_h__
  64. #include <linux/types.h>
  65. #define IWL_FW_ERROR_DUMP_BARKER 0x14789632
  66. /**
  67. * enum iwl_fw_error_dump_type - types of data in the dump file
  68. * @IWL_FW_ERROR_DUMP_SRAM:
  69. * @IWL_FW_ERROR_DUMP_REG:
  70. * @IWL_FW_ERROR_DUMP_RXF:
  71. * @IWL_FW_ERROR_DUMP_TXCMD: last TX command data, structured as
  72. * &struct iwl_fw_error_dump_txcmd packets
  73. * @IWL_FW_ERROR_DUMP_DEV_FW_INFO: struct %iwl_fw_error_dump_info
  74. * info on the device / firmware.
  75. * @IWL_FW_ERROR_DUMP_FW_MONITOR: firmware monitor
  76. */
  77. enum iwl_fw_error_dump_type {
  78. IWL_FW_ERROR_DUMP_SRAM = 0,
  79. IWL_FW_ERROR_DUMP_REG = 1,
  80. IWL_FW_ERROR_DUMP_RXF = 2,
  81. IWL_FW_ERROR_DUMP_TXCMD = 3,
  82. IWL_FW_ERROR_DUMP_DEV_FW_INFO = 4,
  83. IWL_FW_ERROR_DUMP_FW_MONITOR = 5,
  84. IWL_FW_ERROR_DUMP_MAX,
  85. };
  86. /**
  87. * struct iwl_fw_error_dump_data - data for one type
  88. * @type: %enum iwl_fw_error_dump_type
  89. * @len: the length starting from %data - must be a multiplier of 4.
  90. * @data: the data itself padded to be a multiplier of 4.
  91. */
  92. struct iwl_fw_error_dump_data {
  93. __le32 type;
  94. __le32 len;
  95. __u8 data[];
  96. } __packed;
  97. /**
  98. * struct iwl_fw_error_dump_file - the layout of the header of the file
  99. * @barker: must be %IWL_FW_ERROR_DUMP_BARKER
  100. * @file_len: the length of all the file starting from %barker
  101. * @data: array of %struct iwl_fw_error_dump_data
  102. */
  103. struct iwl_fw_error_dump_file {
  104. __le32 barker;
  105. __le32 file_len;
  106. u8 data[0];
  107. } __packed;
  108. /**
  109. * struct iwl_fw_error_dump_txcmd - TX command data
  110. * @cmdlen: original length of command
  111. * @caplen: captured length of command (may be less)
  112. * @data: captured command data, @caplen bytes
  113. */
  114. struct iwl_fw_error_dump_txcmd {
  115. __le32 cmdlen;
  116. __le32 caplen;
  117. u8 data[];
  118. } __packed;
  119. enum iwl_fw_error_dump_family {
  120. IWL_FW_ERROR_DUMP_FAMILY_7 = 7,
  121. IWL_FW_ERROR_DUMP_FAMILY_8 = 8,
  122. };
  123. /**
  124. * struct iwl_fw_error_dump_info - info on the device / firmware
  125. * @device_family: the family of the device (7 / 8)
  126. * @hw_step: the step of the device
  127. * @fw_human_readable: human readable FW version
  128. * @dev_human_readable: name of the device
  129. * @bus_human_readable: name of the bus used
  130. */
  131. struct iwl_fw_error_dump_info {
  132. __le32 device_family;
  133. __le32 hw_step;
  134. u8 fw_human_readable[FW_VER_HUMAN_READABLE_SZ];
  135. u8 dev_human_readable[64];
  136. u8 bus_human_readable[8];
  137. } __packed;
  138. /**
  139. * struct iwl_fw_error_fw_mon - FW monitor data
  140. * @fw_mon_wr_ptr: the position of the write pointer in the cyclic buffer
  141. * @fw_mon_base_ptr: base pointer of the data
  142. * @fw_mon_cycle_cnt: number of wrap arounds
  143. * @reserved: for future use
  144. * @data: captured data
  145. */
  146. struct iwl_fw_error_fw_mon {
  147. __le32 fw_mon_wr_ptr;
  148. __le32 fw_mon_base_ptr;
  149. __le32 fw_mon_cycle_cnt;
  150. __le32 reserved[3];
  151. u8 data[];
  152. } __packed;
  153. /**
  154. * iwl_fw_error_next_data - advance fw error dump data pointer
  155. * @data: previous data block
  156. * Returns: next data block
  157. */
  158. static inline struct iwl_fw_error_dump_data *
  159. iwl_fw_error_next_data(struct iwl_fw_error_dump_data *data)
  160. {
  161. return (void *)(data->data + le32_to_cpu(data->len));
  162. }
  163. #endif /* __fw_error_dump_h__ */