iwlwifi: expose fw usniffer mode to more utilities
authorGolan Ben-Ami <golan.ben.ami@intel.com>
Sun, 30 Aug 2015 14:41:36 +0000 (17:41 +0300)
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Wed, 16 Dec 2015 08:19:21 +0000 (10:19 +0200)
Today, in order to configure fw in usniffer mode, the ucode
must have the corresponding tlv, which is revealed to the driver
while parsing the ucode.

Expose the mode of the usniffer to other utilities in the driver
(other than the ucode parser) by passing back a pointer to the value.
This can be very useful for allowing configuring the fw dbg data
using an external configuration file, because this configuration
depends on the fw usniffer mode.

Signed-off-by: Golan Ben-Ami <golan.ben.ami@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
drivers/net/wireless/intel/iwlwifi/iwl-drv.c

index 16756f0..47a83ab 100644 (file)
@@ -594,7 +594,8 @@ static int iwl_parse_v1_v2_firmware(struct iwl_drv *drv,
 static int iwl_parse_tlv_firmware(struct iwl_drv *drv,
                                const struct firmware *ucode_raw,
                                struct iwl_firmware_pieces *pieces,
-                               struct iwl_ucode_capabilities *capa)
+                               struct iwl_ucode_capabilities *capa,
+                               bool *usniffer_images)
 {
        struct iwl_tlv_ucode_header *ucode = (void *)ucode_raw->data;
        struct iwl_ucode_tlv *tlv;
@@ -607,7 +608,6 @@ static int iwl_parse_tlv_firmware(struct iwl_drv *drv,
        char buildstr[25];
        u32 build, paging_mem_size;
        int num_of_cpus;
-       bool usniffer_images = false;
        bool usniffer_req = false;
        bool gscan_capa = false;
 
@@ -980,7 +980,7 @@ static int iwl_parse_tlv_firmware(struct iwl_drv *drv,
                        break;
                        }
                case IWL_UCODE_TLV_SEC_RT_USNIFFER:
-                       usniffer_images = true;
+                       *usniffer_images = true;
                        iwl_store_ucode_sec(pieces, tlv_data,
                                            IWL_UCODE_REGULAR_USNIFFER,
                                            tlv_len);
@@ -1031,7 +1031,7 @@ static int iwl_parse_tlv_firmware(struct iwl_drv *drv,
                }
        }
 
-       if (usniffer_req && !usniffer_images) {
+       if (usniffer_req && !*usniffer_images) {
                IWL_ERR(drv,
                        "user selected to work with usniffer but usniffer image isn't available in ucode package\n");
                return -EINVAL;
@@ -1192,6 +1192,7 @@ static void iwl_req_fw_callback(const struct firmware *ucode_raw, void *context)
        u32 api_ver;
        int i;
        bool load_module = false;
+       bool usniffer_images = false;
 
        fw->ucode_capa.max_probe_length = IWL_DEFAULT_MAX_PROBE_LENGTH;
        fw->ucode_capa.standard_phy_calibration_size =
@@ -1229,7 +1230,7 @@ static void iwl_req_fw_callback(const struct firmware *ucode_raw, void *context)
                err = iwl_parse_v1_v2_firmware(drv, ucode_raw, pieces);
        else
                err = iwl_parse_tlv_firmware(drv, ucode_raw, pieces,
-                                            &fw->ucode_capa);
+                                            &fw->ucode_capa, &usniffer_images);
 
        if (err)
                goto try_again;