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