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