xref: /linux/drivers/net/wireless/ath/ath12k/coredump.h (revision 60675d4ca1ef0857e44eba5849b74a3a998d0c0f)
1*a9b46dd2SSowmiya Sree Elavalagan /* SPDX-License-Identifier: BSD-3-Clause-Clear */
2*a9b46dd2SSowmiya Sree Elavalagan /*
3*a9b46dd2SSowmiya Sree Elavalagan  * Copyright (c) 2020 The Linux Foundation. All rights reserved.
4*a9b46dd2SSowmiya Sree Elavalagan  * Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
5*a9b46dd2SSowmiya Sree Elavalagan  */
6*a9b46dd2SSowmiya Sree Elavalagan #ifndef _ATH12K_COREDUMP_H_
7*a9b46dd2SSowmiya Sree Elavalagan #define _ATH12K_COREDUMP_H_
8*a9b46dd2SSowmiya Sree Elavalagan 
9*a9b46dd2SSowmiya Sree Elavalagan #define ATH12K_FW_CRASH_DUMP_V2      2
10*a9b46dd2SSowmiya Sree Elavalagan 
11*a9b46dd2SSowmiya Sree Elavalagan enum ath12k_fw_crash_dump_type {
12*a9b46dd2SSowmiya Sree Elavalagan 	FW_CRASH_DUMP_PAGING_DATA,
13*a9b46dd2SSowmiya Sree Elavalagan 	FW_CRASH_DUMP_RDDM_DATA,
14*a9b46dd2SSowmiya Sree Elavalagan 	FW_CRASH_DUMP_REMOTE_MEM_DATA,
15*a9b46dd2SSowmiya Sree Elavalagan 	FW_CRASH_DUMP_PAGEABLE_DATA,
16*a9b46dd2SSowmiya Sree Elavalagan 	FW_CRASH_DUMP_M3_DUMP,
17*a9b46dd2SSowmiya Sree Elavalagan 	FW_CRASH_DUMP_NONE,
18*a9b46dd2SSowmiya Sree Elavalagan 
19*a9b46dd2SSowmiya Sree Elavalagan 	/* keep last */
20*a9b46dd2SSowmiya Sree Elavalagan 	FW_CRASH_DUMP_TYPE_MAX,
21*a9b46dd2SSowmiya Sree Elavalagan };
22*a9b46dd2SSowmiya Sree Elavalagan 
23*a9b46dd2SSowmiya Sree Elavalagan #define COREDUMP_TLV_HDR_SIZE 8
24*a9b46dd2SSowmiya Sree Elavalagan 
25*a9b46dd2SSowmiya Sree Elavalagan struct ath12k_tlv_dump_data {
26*a9b46dd2SSowmiya Sree Elavalagan 	/* see ath11k_fw_crash_dump_type above */
27*a9b46dd2SSowmiya Sree Elavalagan 	__le32 type;
28*a9b46dd2SSowmiya Sree Elavalagan 
29*a9b46dd2SSowmiya Sree Elavalagan 	/* in bytes */
30*a9b46dd2SSowmiya Sree Elavalagan 	__le32 tlv_len;
31*a9b46dd2SSowmiya Sree Elavalagan 
32*a9b46dd2SSowmiya Sree Elavalagan 	/* pad to 32-bit boundaries as needed */
33*a9b46dd2SSowmiya Sree Elavalagan 	u8 tlv_data[];
34*a9b46dd2SSowmiya Sree Elavalagan } __packed;
35*a9b46dd2SSowmiya Sree Elavalagan 
36*a9b46dd2SSowmiya Sree Elavalagan struct ath12k_dump_file_data {
37*a9b46dd2SSowmiya Sree Elavalagan 	/* "ATH12K-FW-DUMP" */
38*a9b46dd2SSowmiya Sree Elavalagan 	char df_magic[16];
39*a9b46dd2SSowmiya Sree Elavalagan 	/* total dump len in bytes */
40*a9b46dd2SSowmiya Sree Elavalagan 	__le32 len;
41*a9b46dd2SSowmiya Sree Elavalagan 	/* file dump version */
42*a9b46dd2SSowmiya Sree Elavalagan 	__le32 version;
43*a9b46dd2SSowmiya Sree Elavalagan 	/* pci device id */
44*a9b46dd2SSowmiya Sree Elavalagan 	__le32 chip_id;
45*a9b46dd2SSowmiya Sree Elavalagan 	/* qrtr instance id */
46*a9b46dd2SSowmiya Sree Elavalagan 	__le32 qrtr_id;
47*a9b46dd2SSowmiya Sree Elavalagan 	/* pci domain id */
48*a9b46dd2SSowmiya Sree Elavalagan 	__le32 bus_id;
49*a9b46dd2SSowmiya Sree Elavalagan 	guid_t guid;
50*a9b46dd2SSowmiya Sree Elavalagan 	/* time-of-day stamp */
51*a9b46dd2SSowmiya Sree Elavalagan 	__le64 tv_sec;
52*a9b46dd2SSowmiya Sree Elavalagan 	/* time-of-day stamp, nano-seconds */
53*a9b46dd2SSowmiya Sree Elavalagan 	__le64 tv_nsec;
54*a9b46dd2SSowmiya Sree Elavalagan 	/* room for growth w/out changing binary format */
55*a9b46dd2SSowmiya Sree Elavalagan 	u8 unused[128];
56*a9b46dd2SSowmiya Sree Elavalagan 	u8 data[];
57*a9b46dd2SSowmiya Sree Elavalagan } __packed;
58*a9b46dd2SSowmiya Sree Elavalagan 
59*a9b46dd2SSowmiya Sree Elavalagan #ifdef CONFIG_ATH12K_COREDUMP
60*a9b46dd2SSowmiya Sree Elavalagan enum ath12k_fw_crash_dump_type ath12k_coredump_get_dump_type
61*a9b46dd2SSowmiya Sree Elavalagan 						(enum ath12k_qmi_target_mem type);
62*a9b46dd2SSowmiya Sree Elavalagan void ath12k_coredump_upload(struct work_struct *work);
63*a9b46dd2SSowmiya Sree Elavalagan void ath12k_coredump_collect(struct ath12k_base *ab);
64*a9b46dd2SSowmiya Sree Elavalagan #else
65*a9b46dd2SSowmiya Sree Elavalagan static inline enum ath12k_fw_crash_dump_type ath12k_coredump_get_dump_type
66*a9b46dd2SSowmiya Sree Elavalagan 							(enum ath12k_qmi_target_mem type)
67*a9b46dd2SSowmiya Sree Elavalagan {
68*a9b46dd2SSowmiya Sree Elavalagan 	return FW_CRASH_DUMP_TYPE_MAX;
69*a9b46dd2SSowmiya Sree Elavalagan }
70*a9b46dd2SSowmiya Sree Elavalagan 
71*a9b46dd2SSowmiya Sree Elavalagan static inline void ath12k_coredump_upload(struct work_struct *work)
72*a9b46dd2SSowmiya Sree Elavalagan {
73*a9b46dd2SSowmiya Sree Elavalagan }
74*a9b46dd2SSowmiya Sree Elavalagan 
75*a9b46dd2SSowmiya Sree Elavalagan static inline void ath12k_coredump_collect(struct ath12k_base *ab)
76*a9b46dd2SSowmiya Sree Elavalagan {
77*a9b46dd2SSowmiya Sree Elavalagan }
78*a9b46dd2SSowmiya Sree Elavalagan #endif
79*a9b46dd2SSowmiya Sree Elavalagan 
80*a9b46dd2SSowmiya Sree Elavalagan #endif
81