OSDN Git Service

iwlwifi: mvm: kill iwl_mvm_fw_error_rxf_dump
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Wed, 25 Jun 2014 11:08:58 +0000 (14:08 +0300)
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Sun, 6 Jul 2014 08:16:15 +0000 (11:16 +0300)
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>
drivers/net/wireless/iwlwifi/mvm/mac80211.c
drivers/net/wireless/iwlwifi/mvm/mvm.h
drivers/net/wireless/iwlwifi/mvm/ops.c
drivers/net/wireless/iwlwifi/mvm/utils.c

index 9feca4a..9661a52 100644 (file)
@@ -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
index 4cc6788..e067d97 100644 (file)
@@ -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);
 
index 889374d..15c13a7 100644 (file)
@@ -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);
index 15db97c..ac249da 100644 (file)
@@ -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