// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause /* * Copyright (C) 2012-2014, 2018-2023 Intel Corporation * Copyright (C) 2013-2014 Intel Mobile Communications GmbH * Copyright (C) 2015-2017 Intel Deutschland GmbH */ #include <linux/devcoredump.h> #include "iwl-drv.h" #include "runtime.h" #include "dbg.h" #include "debugfs.h" #include "iwl-io.h" #include "iwl-prph.h" #include "iwl-csr.h" #include "pnvm.h" #define FW_ASSERT_LMAC_FATAL … #define FW_ASSERT_LMAC2_FATAL … #define FW_ASSERT_UMAC_FATAL … #define UMAC_RT_NMI_LMAC2_FATAL … #define RT_NMI_INTERRUPT_OTHER_LMAC_FATAL … #define FW_ASSERT_NMI_UNKNOWN … /* * Note: This structure is read from the device with IO accesses, * and the reading already does the endian conversion. As it is * read with u32-sized accesses, any members with a different size * need to be ordered correctly though! */ struct iwl_error_event_table { … } __packed /* LOG_ERROR_TABLE_API_S_VER_3 */; /* * UMAC error struct - relevant starting from family 8000 chip. * Note: This structure is read from the device with IO accesses, * and the reading already does the endian conversion. As it is * read with u32-sized accesses, any members with a different size * need to be ordered correctly though! */ struct iwl_umac_error_event_table { … } __packed; #define ERROR_START_OFFSET … #define ERROR_ELEM_SIZE … static bool iwl_fwrt_if_errorid_other_cpu(u32 err_id) { … } static void iwl_fwrt_dump_umac_error_log(struct iwl_fw_runtime *fwrt) { … } static void iwl_fwrt_dump_lmac_error_log(struct iwl_fw_runtime *fwrt, u8 lmac_num) { … } /* * TCM error struct. * Note: This structure is read from the device with IO accesses, * and the reading already does the endian conversion. As it is * read with u32-sized accesses, any members with a different size * need to be ordered correctly though! */ struct iwl_tcm_error_event_table { … } __packed; /* TCM_LOG_ERROR_TABLE_API_S_VER_1 */ static void iwl_fwrt_dump_tcm_error_log(struct iwl_fw_runtime *fwrt, int idx) { … } /* * RCM error struct. * Note: This structure is read from the device with IO accesses, * and the reading already does the endian conversion. As it is * read with u32-sized accesses, any members with a different size * need to be ordered correctly though! */ struct iwl_rcm_error_event_table { … } __packed; /* RCM_LOG_ERROR_TABLE_API_S_VER_1 */ static void iwl_fwrt_dump_rcm_error_log(struct iwl_fw_runtime *fwrt, int idx) { … } static void iwl_fwrt_dump_iml_error_log(struct iwl_fw_runtime *fwrt) { … } #define FSEQ_REG(x) … static void iwl_fwrt_dump_fseq_regs(struct iwl_fw_runtime *fwrt) { … } void iwl_fwrt_dump_error_logs(struct iwl_fw_runtime *fwrt) { … } IWL_EXPORT_SYMBOL(iwl_fwrt_dump_error_logs);