stp_dbg.h 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. #ifndef _STP_DEBUG_H_
  2. #define _STP_DEBUG_H_
  3. #include <linux/time.h>
  4. #include "osal.h"
  5. #define CONFIG_LOG_STP_INTERNAL
  6. #if 1 /* #ifndef CONFIG_LOG_STP_INTERNAL */
  7. #define STP_PKT_SZ 16
  8. #define STP_DMP_SZ 2048
  9. #define STP_PKT_NO 2048
  10. #define STP_DBG_LOG_ENTRY_NUM 1024
  11. #define STP_DBG_LOG_ENTRY_SZ 2048
  12. #else
  13. #define STP_PKT_SZ 16
  14. #define STP_DMP_SZ 16
  15. #define STP_PKT_NO 16
  16. #define STP_DBG_LOG_ENTRY_NUM 28
  17. #define STP_DBG_LOG_ENTRY_SZ 64
  18. #endif
  19. typedef enum {
  20. STP_DBG_EN = 0,
  21. STP_DBG_PKT = 1,
  22. STP_DBG_DR = 2,
  23. STP_DBG_FW_ASSERT = 3,
  24. STP_DBG_FW_LOG = 4,
  25. STP_DBG_FW_DMP = 5,
  26. STP_DBG_MAX
  27. } STP_DBG_OP_T;
  28. typedef enum {
  29. STP_DBG_PKT_FIL_ALL = 0,
  30. STP_DBG_PKT_FIL_BT = 1,
  31. STP_DBG_PKT_FIL_GPS = 2,
  32. STP_DBG_PKT_FIL_FM = 3,
  33. STP_DBG_PKT_FIL_WMT = 4,
  34. STP_DBG_PKT_FIL_MAX
  35. } STP_DBG_PKT_FIL_T;
  36. static PINT8 const gStpDbgType[] = {
  37. "< BT>",
  38. "< FM>",
  39. "<GPS>",
  40. "<WiFi>",
  41. "<WMT>",
  42. "<STP>",
  43. "<DBG>",
  44. "<ANT>",
  45. "<SDIO_OWN_SET>",
  46. "<SDIO_OWN_CLR>",
  47. "<UNKNOWN>"
  48. };
  49. typedef enum {
  50. STP_DBG_DR_MAX = 0,
  51. } STP_DBG_DR_FIL_T;
  52. typedef enum {
  53. STP_DBG_FW_MAX = 0,
  54. } STP_DBG_FW_FIL_T;
  55. typedef enum {
  56. PKT_DIR_RX = 0,
  57. PKT_DIR_TX
  58. } STP_DBG_PKT_DIR_T;
  59. /*simple log system ++*/
  60. typedef struct {
  61. INT32 id;
  62. /*type: 0. pkt trace 1. fw info 2. assert info 3. trace32 dump . -1. linked to the the previous */
  63. INT32 len;
  64. INT8 buffer[STP_DBG_LOG_ENTRY_SZ];
  65. } MTKSTP_LOG_ENTRY_T;
  66. typedef struct log_sys {
  67. MTKSTP_LOG_ENTRY_T queue[STP_DBG_LOG_ENTRY_NUM];
  68. UINT32 size;
  69. UINT32 in;
  70. UINT32 out;
  71. spinlock_t lock;
  72. } MTKSTP_LOG_SYS_T;
  73. /*--*/
  74. typedef struct stp_dbg_pkt_hdr {
  75. /* packet information */
  76. UINT32 sec;
  77. UINT32 usec;
  78. UINT32 dbg_type;
  79. UINT32 last_dbg_type;
  80. UINT32 dmy;
  81. UINT32 no;
  82. UINT32 dir;
  83. /* packet content */
  84. UINT32 type;
  85. UINT32 len;
  86. UINT32 ack;
  87. UINT32 seq;
  88. UINT32 chs;
  89. UINT32 crc;
  90. } STP_DBG_HDR_T;
  91. typedef struct stp_dbg_pkt {
  92. struct stp_dbg_pkt_hdr hdr;
  93. UINT8 raw[STP_DMP_SZ];
  94. } STP_PACKET_T;
  95. typedef struct mtkstp_dbg_t {
  96. /*log_sys */
  97. INT32 pkt_trace_no;
  98. PVOID btm;
  99. INT32 is_enable;
  100. MTKSTP_LOG_SYS_T *logsys;
  101. } MTKSTP_DBG_T;
  102. #define STP_CORE_DUMP_TIMEOUT (5*60*1000) /* default 5minutes */
  103. #define STP_OJB_NAME_SZ 20
  104. #define STP_CORE_DUMP_INFO_SZ 500
  105. typedef enum wcn_compress_algorithm_t {
  106. GZIP = 0,
  107. BZIP2 = 1,
  108. RAR = 2,
  109. LMA = 3,
  110. MAX
  111. } WCN_COMPRESS_ALG_T;
  112. typedef INT32(*COMPRESS_HANDLER) (PVOID worker, PUINT8 in_buf, INT32 in_sz, PUINT8 out_buf,
  113. PINT32 out_sz, INT32 finish);
  114. typedef struct wcn_compressor_t {
  115. /* current object name */
  116. UINT8 name[STP_OJB_NAME_SZ + 1];
  117. /* buffer for raw data, named L1 */
  118. PUINT8 L1_buf;
  119. INT32 L1_buf_sz;
  120. INT32 L1_pos;
  121. /* target buffer, named L2 */
  122. PUINT8 L2_buf;
  123. INT32 L2_buf_sz;
  124. INT32 L2_pos;
  125. /* compress state */
  126. UINT8 f_done;
  127. UINT16 reserved;
  128. UINT32 uncomp_size;
  129. UINT32 crc32;
  130. /* compress algorithm */
  131. UINT8 f_compress_en;
  132. WCN_COMPRESS_ALG_T compress_type;
  133. PVOID worker;
  134. COMPRESS_HANDLER handler;
  135. } WCN_COMPRESSOR_T, *P_WCN_COMPRESSOR_T;
  136. P_WCN_COMPRESSOR_T wcn_compressor_init(PUINT8 name, INT32 L1_buf_sz, INT32 L2_buf_sz);
  137. INT32 wcn_compressor_deinit(P_WCN_COMPRESSOR_T compressor);
  138. INT32 wcn_compressor_in(P_WCN_COMPRESSOR_T compressor, PUINT8 buf, INT32 len, INT32 finish);
  139. INT32 wcn_compressor_out(P_WCN_COMPRESSOR_T compressor, PPUINT8 pbuf, PINT32 len);
  140. INT32 wcn_compressor_reset(P_WCN_COMPRESSOR_T compressor, UINT8 enable, WCN_COMPRESS_ALG_T type);
  141. typedef enum core_dump_state_t {
  142. CORE_DUMP_INIT = 0,
  143. CORE_DUMP_DOING,
  144. CORE_DUMP_TIMEOUT,
  145. CORE_DUMP_DONE,
  146. CORE_DUMP_MAX
  147. } CORE_DUMP_STA;
  148. typedef struct core_dump_t {
  149. /* compress dump data and buffered */
  150. P_WCN_COMPRESSOR_T compressor;
  151. /* timer for monitor timeout */
  152. OSAL_TIMER dmp_timer;
  153. UINT32 timeout;
  154. OSAL_SLEEPABLE_LOCK dmp_lock;
  155. /* state machine for core dump flow */
  156. CORE_DUMP_STA sm;
  157. /* dump info */
  158. INT8 info[STP_CORE_DUMP_INFO_SZ + 1];
  159. PUINT8 p_head;
  160. UINT32 head_len;
  161. } WCN_CORE_DUMP_T, *P_WCN_CORE_DUMP_T;
  162. typedef enum _ENUM_STP_FW_ISSUE_TYPE_ {
  163. STP_FW_ISSUE_TYPE_INVALID = 0x0,
  164. STP_FW_ASSERT_ISSUE = 0x1,
  165. STP_FW_NOACK_ISSUE = 0x2,
  166. STP_FW_WARM_RST_ISSUE = 0x3,
  167. STP_DBG_PROC_TEST = 0x4,
  168. STP_HOST_TRIGGER_FW_ASSERT = 0x5,
  169. STP_FW_ABT = 0x6,
  170. STP_FW_ISSUE_TYPE_MAX
  171. } ENUM_STP_FW_ISSUE_TYPE, *P_ENUM_STP_FW_ISSUE_TYPE;
  172. #define STP_PATCH_TIME_SIZE 12
  173. #define STP_DBG_CPUPCR_NUM 512
  174. #define STP_PATCH_BRANCH_SZIE 8
  175. #define STP_ASSERT_INFO_SIZE 64
  176. #define STP_DBG_WIFI_VER_SIZE 8
  177. #define STP_DBG_ROM_VER_SIZE 4
  178. #define STP_ASSERT_TYPE_SIZE 32
  179. typedef struct stp_dbg_host_assert_t {
  180. UINT32 drv_type;
  181. UINT32 reason;
  182. UINT32 assert_from_host;
  183. } STP_DBG_HOST_ASSERT_T, *P_STP_DBG_HOST_ASSERT_T;
  184. typedef struct stp_dbg_cpupcr_t {
  185. UINT32 chipId;
  186. UINT8 romVer[STP_DBG_ROM_VER_SIZE];
  187. UINT8 patchVer[STP_PATCH_TIME_SIZE];
  188. UINT8 branchVer[STP_PATCH_BRANCH_SZIE];
  189. UINT8 wifiVer[STP_DBG_WIFI_VER_SIZE];
  190. UINT32 count;
  191. UINT32 stop_flag;
  192. UINT32 buffer[STP_DBG_CPUPCR_NUM];
  193. UINT8 assert_info[STP_ASSERT_INFO_SIZE];
  194. UINT32 fwTaskId;
  195. UINT32 fwRrq;
  196. UINT32 fwIsr;
  197. STP_DBG_HOST_ASSERT_T host_assert_info;
  198. UINT8 assert_type[STP_ASSERT_TYPE_SIZE];
  199. ENUM_STP_FW_ISSUE_TYPE issue_type;
  200. OSAL_SLEEPABLE_LOCK lock;
  201. } STP_DBG_CPUPCR_T, *P_STP_DBG_CPUPCR_T;
  202. typedef enum _ENUM_ASSERT_INFO_PARSER_TYPE_ {
  203. STP_DBG_ASSERT_INFO = 0x0,
  204. STP_DBG_FW_TASK_ID = 0x1,
  205. STP_DBG_FW_ISR = 0x2,
  206. STP_DBG_FW_IRQ = 0x3,
  207. STP_DBG_ASSERT_TYPE = 0x4,
  208. STP_DBG_PARSER_TYPE_MAX
  209. } ENUM_ASSERT_INFO_PARSER_TYPE, *P_ENUM_ASSERT_INFO_PARSER_TYPE;
  210. P_WCN_CORE_DUMP_T wcn_core_dump_init(UINT32 timeout);
  211. INT32 wcn_core_dump_deinit(P_WCN_CORE_DUMP_T dmp);
  212. INT32 wcn_core_dump_in(P_WCN_CORE_DUMP_T dmp, PUINT8 buf, INT32 len);
  213. INT32 wcn_core_dump_out(P_WCN_CORE_DUMP_T dmp, PPUINT8 pbuf, PINT32 len);
  214. INT32 wcn_core_dump_reset(P_WCN_CORE_DUMP_T dmp, UINT32 timeout);
  215. extern INT32 wcn_core_dump_flush(INT32 rst);
  216. extern int stp_dbg_enable(MTKSTP_DBG_T *stp_dbg);
  217. extern int stp_dbg_disable(MTKSTP_DBG_T *stp_dbg);
  218. extern MTKSTP_DBG_T *stp_dbg_init(PVOID);
  219. extern int stp_dbg_deinit(MTKSTP_DBG_T *stp_dbg);
  220. extern int stp_dbg_dmp_out_ex(PINT8 buf, PINT32 len);
  221. extern int stp_dbg_dmp_out(MTKSTP_DBG_T *stp_dbg, PINT8 buf, PINT32 len);
  222. extern int stp_dbg_dmp_print(MTKSTP_DBG_T *stp_dbg);
  223. extern INT32 stp_dbg_nl_send(PINT8 aucMsg, UINT8 cmd, INT32 len);
  224. extern INT32 stp_dbg_aee_send(PUINT8 aucMsg, INT32 len, INT32 cmd);
  225. extern INT32
  226. stp_dbg_log_pkt(MTKSTP_DBG_T *stp_dbg,
  227. INT32 dbg_type,
  228. INT32 type,
  229. INT32 ack_no, INT32 seq_no, INT32 crc, INT32 dir, INT32 len, const PUINT8 body);
  230. extern int stp_dbg_log_ctrl(UINT32 on);
  231. extern INT32 stp_dbg_set_version_info(UINT32 chipid, PUINT8 pRomVer, PUINT8 wifiVer,
  232. PUINT8 pPatchVer, PUINT8 pPatchBrh);
  233. extern INT32 stp_dbg_cpupcr_infor_format(PPUINT8 buf, PUINT32 len);
  234. extern INT32 stp_dbg_set_fw_info(PUINT8 assert_info, UINT32 len, ENUM_STP_FW_ISSUE_TYPE issue_type);
  235. extern INT32 stp_dbg_set_host_assert_info(UINT32 drv_type, UINT32 reason, UINT32 en);
  236. #endif /* end of _STP_DEBUG_H_ */