iwlwifi: mvm: kill iwl_mvm_fw_error_rxf_dump
Its content can move to the caller. While at it, move iwl_mvm_fw_error_rxf_dump to caller. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
This commit is contained in:
parent
78dae98fab
commit
655e6d6db2
@ -80,6 +80,8 @@
|
||||
#include "fw-api-scan.h"
|
||||
#include "iwl-phy-db.h"
|
||||
#include "testmode.h"
|
||||
#include "iwl-fw-error-dump.h"
|
||||
#include "iwl-prph.h"
|
||||
|
||||
static const struct ieee80211_iface_limit iwl_mvm_limits[] = {
|
||||
{
|
||||
@ -645,6 +647,104 @@ static void iwl_mvm_cleanup_iterator(void *data, u8 *mac,
|
||||
mvmvif->phy_ctxt = NULL;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_IWLWIFI_DEBUGFS
|
||||
static void iwl_mvm_fw_error_dump(struct iwl_mvm *mvm)
|
||||
{
|
||||
struct iwl_fw_error_dump_file *dump_file;
|
||||
struct iwl_fw_error_dump_data *dump_data;
|
||||
struct iwl_fw_error_dump_info *dump_info;
|
||||
const struct fw_img *img;
|
||||
u32 sram_len, sram_ofs;
|
||||
u32 file_len, rxf_len;
|
||||
unsigned long flags;
|
||||
u32 trans_len;
|
||||
int reg_val;
|
||||
|
||||
lockdep_assert_held(&mvm->mutex);
|
||||
|
||||
if (mvm->fw_error_dump)
|
||||
return;
|
||||
|
||||
img = &mvm->fw->img[mvm->cur_ucode];
|
||||
sram_ofs = img->sec[IWL_UCODE_SECTION_DATA].offset;
|
||||
sram_len = img->sec[IWL_UCODE_SECTION_DATA].len;
|
||||
|
||||
/* reading buffer size */
|
||||
reg_val = iwl_trans_read_prph(mvm->trans, RXF_SIZE_ADDR);
|
||||
rxf_len = (reg_val & RXF_SIZE_BYTE_CNT_MSK) >> RXF_SIZE_BYTE_CND_POS;
|
||||
|
||||
/* the register holds the value divided by 128 */
|
||||
rxf_len = rxf_len << 7;
|
||||
|
||||
file_len = sizeof(*dump_file) +
|
||||
sizeof(*dump_data) * 3 +
|
||||
sram_len +
|
||||
rxf_len +
|
||||
sizeof(*dump_info);
|
||||
|
||||
trans_len = iwl_trans_dump_data(mvm->trans, NULL, 0);
|
||||
if (trans_len)
|
||||
file_len += trans_len;
|
||||
|
||||
dump_file = vmalloc(file_len);
|
||||
if (!dump_file)
|
||||
return;
|
||||
|
||||
mvm->fw_error_dump = dump_file;
|
||||
|
||||
dump_file->barker = cpu_to_le32(IWL_FW_ERROR_DUMP_BARKER);
|
||||
dump_file->file_len = cpu_to_le32(file_len);
|
||||
dump_data = (void *)dump_file->data;
|
||||
|
||||
dump_data->type = cpu_to_le32(IWL_FW_ERROR_DUMP_DEV_FW_INFO);
|
||||
dump_data->len = cpu_to_le32(sizeof(*dump_info));
|
||||
dump_info = (void *) dump_data->data;
|
||||
dump_info->device_family =
|
||||
mvm->cfg->device_family == IWL_DEVICE_FAMILY_7000 ?
|
||||
cpu_to_le32(IWL_FW_ERROR_DUMP_FAMILY_7) :
|
||||
cpu_to_le32(IWL_FW_ERROR_DUMP_FAMILY_8);
|
||||
memcpy(dump_info->fw_human_readable, mvm->fw->human_readable,
|
||||
sizeof(dump_info->fw_human_readable));
|
||||
strncpy(dump_info->dev_human_readable, mvm->cfg->name,
|
||||
sizeof(dump_info->dev_human_readable));
|
||||
strncpy(dump_info->bus_human_readable, mvm->dev->bus->name,
|
||||
sizeof(dump_info->bus_human_readable));
|
||||
|
||||
dump_data = iwl_fw_error_next_data(dump_data);
|
||||
dump_data->type = cpu_to_le32(IWL_FW_ERROR_DUMP_RXF);
|
||||
dump_data->len = cpu_to_le32(rxf_len);
|
||||
|
||||
if (iwl_trans_grab_nic_access(mvm->trans, false, &flags)) {
|
||||
u32 *rxf = (void *)dump_data->data;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < (rxf_len / sizeof(u32)); i++) {
|
||||
iwl_trans_write_prph(mvm->trans,
|
||||
RXF_LD_FENCE_OFFSET_ADDR,
|
||||
i * sizeof(u32));
|
||||
rxf[i] = iwl_trans_read_prph(mvm->trans,
|
||||
RXF_FIFO_RD_FENCE_ADDR);
|
||||
}
|
||||
iwl_trans_release_nic_access(mvm->trans, &flags);
|
||||
}
|
||||
|
||||
dump_data = iwl_fw_error_next_data(dump_data);
|
||||
dump_data->type = cpu_to_le32(IWL_FW_ERROR_DUMP_SRAM);
|
||||
dump_data->len = cpu_to_le32(sram_len);
|
||||
iwl_trans_read_mem_bytes(mvm->trans, sram_ofs, dump_data->data,
|
||||
sram_len);
|
||||
|
||||
if (trans_len) {
|
||||
void *buf = iwl_fw_error_next_data(dump_data);
|
||||
u32 real_trans_len = iwl_trans_dump_data(mvm->trans, buf,
|
||||
trans_len);
|
||||
dump_data = (void *)((u8 *)buf + real_trans_len);
|
||||
dump_file->file_len =
|
||||
cpu_to_le32(file_len - trans_len + real_trans_len);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void iwl_mvm_restart_cleanup(struct iwl_mvm *mvm)
|
||||
{
|
||||
#ifdef CONFIG_IWLWIFI_DEBUGFS
|
||||
|
@ -595,8 +595,6 @@ struct iwl_mvm {
|
||||
/* -1 for always, 0 for never, >0 for that many times */
|
||||
s8 restart_fw;
|
||||
void *fw_error_dump;
|
||||
u32 *fw_error_rxf;
|
||||
u32 fw_error_rxf_len;
|
||||
|
||||
#ifdef CONFIG_IWLWIFI_LEDS
|
||||
struct led_classdev led;
|
||||
@ -730,10 +728,6 @@ void iwl_mvm_hwrate_to_tx_rate(u32 rate_n_flags,
|
||||
struct ieee80211_tx_rate *r);
|
||||
u8 iwl_mvm_mac80211_idx_to_hwrate(int rate_idx);
|
||||
void iwl_mvm_dump_nic_error_log(struct iwl_mvm *mvm);
|
||||
#ifdef CONFIG_IWLWIFI_DEBUGFS
|
||||
void iwl_mvm_fw_error_dump(struct iwl_mvm *mvm);
|
||||
void iwl_mvm_fw_error_rxf_dump(struct iwl_mvm *mvm);
|
||||
#endif
|
||||
u8 first_antenna(u8 mask);
|
||||
u8 iwl_mvm_next_antenna(struct iwl_mvm *mvm, u8 valid, u8 last_idx);
|
||||
|
||||
|
@ -550,7 +550,6 @@ static void iwl_op_mode_mvm_stop(struct iwl_op_mode *op_mode)
|
||||
|
||||
kfree(mvm->scan_cmd);
|
||||
vfree(mvm->fw_error_dump);
|
||||
kfree(mvm->fw_error_rxf);
|
||||
kfree(mvm->mcast_filter_cmd);
|
||||
mvm->mcast_filter_cmd = NULL;
|
||||
|
||||
@ -821,88 +820,6 @@ static void iwl_mvm_nic_restart(struct iwl_mvm *mvm)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_IWLWIFI_DEBUGFS
|
||||
void iwl_mvm_fw_error_dump(struct iwl_mvm *mvm)
|
||||
{
|
||||
struct iwl_fw_error_dump_file *dump_file;
|
||||
struct iwl_fw_error_dump_data *dump_data;
|
||||
struct iwl_fw_error_dump_info *dump_info;
|
||||
const struct fw_img *img;
|
||||
u32 sram_len, sram_ofs;
|
||||
u32 file_len;
|
||||
u32 trans_len;
|
||||
|
||||
lockdep_assert_held(&mvm->mutex);
|
||||
|
||||
if (mvm->fw_error_dump)
|
||||
return;
|
||||
|
||||
img = &mvm->fw->img[mvm->cur_ucode];
|
||||
sram_ofs = img->sec[IWL_UCODE_SECTION_DATA].offset;
|
||||
sram_len = img->sec[IWL_UCODE_SECTION_DATA].len;
|
||||
|
||||
file_len = sizeof(*dump_file) +
|
||||
sizeof(*dump_data) * 3 +
|
||||
sram_len +
|
||||
mvm->fw_error_rxf_len +
|
||||
sizeof(*dump_info);
|
||||
|
||||
trans_len = iwl_trans_dump_data(mvm->trans, NULL, 0);
|
||||
if (trans_len)
|
||||
file_len += trans_len;
|
||||
|
||||
dump_file = vmalloc(file_len);
|
||||
if (!dump_file)
|
||||
return;
|
||||
|
||||
mvm->fw_error_dump = dump_file;
|
||||
|
||||
dump_file->barker = cpu_to_le32(IWL_FW_ERROR_DUMP_BARKER);
|
||||
dump_file->file_len = cpu_to_le32(file_len);
|
||||
dump_data = (void *)dump_file->data;
|
||||
|
||||
dump_data->type = cpu_to_le32(IWL_FW_ERROR_DUMP_DEV_FW_INFO);
|
||||
dump_data->len = cpu_to_le32(sizeof(*dump_info));
|
||||
dump_info = (void *) dump_data->data;
|
||||
dump_info->device_family =
|
||||
mvm->cfg->device_family == IWL_DEVICE_FAMILY_7000 ?
|
||||
cpu_to_le32(IWL_FW_ERROR_DUMP_FAMILY_7) :
|
||||
cpu_to_le32(IWL_FW_ERROR_DUMP_FAMILY_8);
|
||||
memcpy(dump_info->fw_human_readable, mvm->fw->human_readable,
|
||||
sizeof(dump_info->fw_human_readable));
|
||||
strncpy(dump_info->dev_human_readable, mvm->cfg->name,
|
||||
sizeof(dump_info->dev_human_readable));
|
||||
strncpy(dump_info->bus_human_readable, mvm->dev->bus->name,
|
||||
sizeof(dump_info->bus_human_readable));
|
||||
|
||||
iwl_mvm_fw_error_rxf_dump(mvm);
|
||||
|
||||
dump_data = iwl_fw_error_next_data(dump_data);
|
||||
dump_data->type = cpu_to_le32(IWL_FW_ERROR_DUMP_RXF);
|
||||
dump_data->len = cpu_to_le32(mvm->fw_error_rxf_len);
|
||||
memcpy(dump_data->data, mvm->fw_error_rxf, mvm->fw_error_rxf_len);
|
||||
|
||||
dump_data = iwl_fw_error_next_data(dump_data);
|
||||
dump_data->type = cpu_to_le32(IWL_FW_ERROR_DUMP_SRAM);
|
||||
dump_data->len = cpu_to_le32(sram_len);
|
||||
iwl_trans_read_mem_bytes(mvm->trans, sram_ofs, dump_data->data,
|
||||
sram_len);
|
||||
|
||||
kfree(mvm->fw_error_rxf);
|
||||
mvm->fw_error_rxf = NULL;
|
||||
mvm->fw_error_rxf_len = 0;
|
||||
|
||||
if (trans_len) {
|
||||
void *buf = iwl_fw_error_next_data(dump_data);
|
||||
u32 real_trans_len = iwl_trans_dump_data(mvm->trans, buf,
|
||||
trans_len);
|
||||
dump_data = (void *)((u8 *)buf + real_trans_len);
|
||||
dump_file->file_len =
|
||||
cpu_to_le32(file_len - trans_len + real_trans_len);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void iwl_mvm_nic_error(struct iwl_op_mode *op_mode)
|
||||
{
|
||||
struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode);
|
||||
|
@ -519,49 +519,6 @@ void iwl_mvm_dump_nic_error_log(struct iwl_mvm *mvm)
|
||||
iwl_mvm_dump_umac_error_log(mvm);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_IWLWIFI_DEBUGFS
|
||||
void iwl_mvm_fw_error_rxf_dump(struct iwl_mvm *mvm)
|
||||
{
|
||||
int i, reg_val;
|
||||
unsigned long flags;
|
||||
|
||||
if (!mvm->ucode_loaded || mvm->fw_error_rxf || mvm->fw_error_dump)
|
||||
return;
|
||||
|
||||
/* reading buffer size */
|
||||
reg_val = iwl_trans_read_prph(mvm->trans, RXF_SIZE_ADDR);
|
||||
mvm->fw_error_rxf_len =
|
||||
(reg_val & RXF_SIZE_BYTE_CNT_MSK) >> RXF_SIZE_BYTE_CND_POS;
|
||||
|
||||
/* the register holds the value divided by 128 */
|
||||
mvm->fw_error_rxf_len = mvm->fw_error_rxf_len << 7;
|
||||
|
||||
if (!mvm->fw_error_rxf_len)
|
||||
return;
|
||||
|
||||
mvm->fw_error_rxf = kzalloc(mvm->fw_error_rxf_len, GFP_ATOMIC);
|
||||
if (!mvm->fw_error_rxf) {
|
||||
mvm->fw_error_rxf_len = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!iwl_trans_grab_nic_access(mvm->trans, false, &flags)) {
|
||||
kfree(mvm->fw_error_rxf);
|
||||
mvm->fw_error_rxf = NULL;
|
||||
mvm->fw_error_rxf_len = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < (mvm->fw_error_rxf_len / sizeof(u32)); i++) {
|
||||
iwl_trans_write_prph(mvm->trans, RXF_LD_FENCE_OFFSET_ADDR,
|
||||
i * sizeof(u32));
|
||||
mvm->fw_error_rxf[i] =
|
||||
iwl_trans_read_prph(mvm->trans, RXF_FIFO_RD_FENCE_ADDR);
|
||||
}
|
||||
iwl_trans_release_nic_access(mvm->trans, &flags);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* iwl_mvm_send_lq_cmd() - Send link quality command
|
||||
* @init: This command is sent as part of station initialization right
|
||||
|
Loading…
Reference in New Issue
Block a user