1f25b9f28SKalle Valo /* 2f25b9f28SKalle Valo * Copyright (c) 2011-2017 Qualcomm Atheros, Inc. 3f25b9f28SKalle Valo * 4f25b9f28SKalle Valo * Permission to use, copy, modify, and/or distribute this software for any 5f25b9f28SKalle Valo * purpose with or without fee is hereby granted, provided that the above 6f25b9f28SKalle Valo * copyright notice and this permission notice appear in all copies. 7f25b9f28SKalle Valo * 8f25b9f28SKalle Valo * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9f25b9f28SKalle Valo * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10f25b9f28SKalle Valo * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11f25b9f28SKalle Valo * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12f25b9f28SKalle Valo * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13f25b9f28SKalle Valo * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14f25b9f28SKalle Valo * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15f25b9f28SKalle Valo */ 16f25b9f28SKalle Valo 17f25b9f28SKalle Valo #ifndef _COREDUMP_H_ 18f25b9f28SKalle Valo #define _COREDUMP_H_ 19f25b9f28SKalle Valo 20f25b9f28SKalle Valo #include "core.h" 21f25b9f28SKalle Valo 22f25b9f28SKalle Valo #define ATH10K_FW_CRASH_DUMP_VERSION 1 23f25b9f28SKalle Valo 24f25b9f28SKalle Valo /** 25f25b9f28SKalle Valo * enum ath10k_fw_crash_dump_type - types of data in the dump file 26f25b9f28SKalle Valo * @ATH10K_FW_CRASH_DUMP_REGDUMP: Register crash dump in binary format 27f25b9f28SKalle Valo */ 28f25b9f28SKalle Valo enum ath10k_fw_crash_dump_type { 29f25b9f28SKalle Valo ATH10K_FW_CRASH_DUMP_REGISTERS = 0, 30f25b9f28SKalle Valo ATH10K_FW_CRASH_DUMP_CE_DATA = 1, 31f25b9f28SKalle Valo 32f25b9f28SKalle Valo ATH10K_FW_CRASH_DUMP_MAX, 33f25b9f28SKalle Valo }; 34f25b9f28SKalle Valo 35f25b9f28SKalle Valo struct ath10k_tlv_dump_data { 36f25b9f28SKalle Valo /* see ath10k_fw_crash_dump_type above */ 37f25b9f28SKalle Valo __le32 type; 38f25b9f28SKalle Valo 39f25b9f28SKalle Valo /* in bytes */ 40f25b9f28SKalle Valo __le32 tlv_len; 41f25b9f28SKalle Valo 42f25b9f28SKalle Valo /* pad to 32-bit boundaries as needed */ 43f25b9f28SKalle Valo u8 tlv_data[]; 44f25b9f28SKalle Valo } __packed; 45f25b9f28SKalle Valo 46f25b9f28SKalle Valo struct ath10k_dump_file_data { 47f25b9f28SKalle Valo /* dump file information */ 48f25b9f28SKalle Valo 49f25b9f28SKalle Valo /* "ATH10K-FW-DUMP" */ 50f25b9f28SKalle Valo char df_magic[16]; 51f25b9f28SKalle Valo 52f25b9f28SKalle Valo __le32 len; 53f25b9f28SKalle Valo 54f25b9f28SKalle Valo /* file dump version */ 55f25b9f28SKalle Valo __le32 version; 56f25b9f28SKalle Valo 57f25b9f28SKalle Valo /* some info we can get from ath10k struct that might help */ 58f25b9f28SKalle Valo 59f25b9f28SKalle Valo guid_t guid; 60f25b9f28SKalle Valo 61f25b9f28SKalle Valo __le32 chip_id; 62f25b9f28SKalle Valo 63f25b9f28SKalle Valo /* 0 for now, in place for later hardware */ 64f25b9f28SKalle Valo __le32 bus_type; 65f25b9f28SKalle Valo 66f25b9f28SKalle Valo __le32 target_version; 67f25b9f28SKalle Valo __le32 fw_version_major; 68f25b9f28SKalle Valo __le32 fw_version_minor; 69f25b9f28SKalle Valo __le32 fw_version_release; 70f25b9f28SKalle Valo __le32 fw_version_build; 71f25b9f28SKalle Valo __le32 phy_capability; 72f25b9f28SKalle Valo __le32 hw_min_tx_power; 73f25b9f28SKalle Valo __le32 hw_max_tx_power; 74f25b9f28SKalle Valo __le32 ht_cap_info; 75f25b9f28SKalle Valo __le32 vht_cap_info; 76f25b9f28SKalle Valo __le32 num_rf_chains; 77f25b9f28SKalle Valo 78f25b9f28SKalle Valo /* firmware version string */ 79f25b9f28SKalle Valo char fw_ver[ETHTOOL_FWVERS_LEN]; 80f25b9f28SKalle Valo 81f25b9f28SKalle Valo /* Kernel related information */ 82f25b9f28SKalle Valo 83f25b9f28SKalle Valo /* time-of-day stamp */ 84f25b9f28SKalle Valo __le64 tv_sec; 85f25b9f28SKalle Valo 86f25b9f28SKalle Valo /* time-of-day stamp, nano-seconds */ 87f25b9f28SKalle Valo __le64 tv_nsec; 88f25b9f28SKalle Valo 89f25b9f28SKalle Valo /* LINUX_VERSION_CODE */ 90f25b9f28SKalle Valo __le32 kernel_ver_code; 91f25b9f28SKalle Valo 92f25b9f28SKalle Valo /* VERMAGIC_STRING */ 93f25b9f28SKalle Valo char kernel_ver[64]; 94f25b9f28SKalle Valo 95f25b9f28SKalle Valo /* room for growth w/out changing binary format */ 96f25b9f28SKalle Valo u8 unused[128]; 97f25b9f28SKalle Valo 98f25b9f28SKalle Valo /* struct ath10k_tlv_dump_data + more */ 99f25b9f28SKalle Valo u8 data[0]; 100f25b9f28SKalle Valo } __packed; 101f25b9f28SKalle Valo 102f25b9f28SKalle Valo #ifdef CONFIG_DEV_COREDUMP 103f25b9f28SKalle Valo 104f25b9f28SKalle Valo int ath10k_coredump_submit(struct ath10k *ar); 105f25b9f28SKalle Valo struct ath10k_fw_crash_data *ath10k_coredump_new(struct ath10k *ar); 106f25b9f28SKalle Valo 107f25b9f28SKalle Valo #else /* CONFIG_DEV_COREDUMP */ 108f25b9f28SKalle Valo 109f25b9f28SKalle Valo static inline int ath10k_coredump_submit(struct ath10k *ar) 110f25b9f28SKalle Valo { 111f25b9f28SKalle Valo return 0; 112f25b9f28SKalle Valo } 113f25b9f28SKalle Valo 114f25b9f28SKalle Valo static inline struct ath10k_fw_crash_data *ath10k_coredump_new(struct ath10k *ar) 115f25b9f28SKalle Valo { 116f25b9f28SKalle Valo return NULL; 117f25b9f28SKalle Valo } 118f25b9f28SKalle Valo 119f25b9f28SKalle Valo #endif /* CONFIG_DEV_COREDUMP */ 120f25b9f28SKalle Valo 121f25b9f28SKalle Valo #endif /* _COREDUMP_H_ */ 122