iwlwifi: mvm: support dqa-enable hcmd
authorLiad Kaufman <liad.kaufman@intel.com>
Mon, 31 Aug 2015 11:33:23 +0000 (14:33 +0300)
committerLuca Coelho <luciano.coelho@intel.com>
Tue, 5 Jul 2016 21:49:21 +0000 (00:49 +0300)
Support sending the DQA-enablement HCMD to the FW when
working in DQA mode.

This HCMD will enable DQA-specific flows in the FW.

Signed-off-by: Liad Kaufman <liad.kaufman@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/fw-api.h
drivers/net/wireless/intel/iwlwifi/mvm/fw.c

index a1d3d95499d6116ff3c8b7d285e13b1ab497cff0..eea03ecafbe0adff233e12423bf03a3d3f342e9d 100644 (file)
@@ -332,6 +332,7 @@ enum iwl_system_subcmd_ids {
 };
 
 enum iwl_data_path_subcmd_ids {
+       DQA_ENABLE_CMD = 0x0,
        UPDATE_MU_GROUPS_CMD = 0x1,
        TRIGGER_RX_QUEUES_NOTIF_CMD = 0x2,
        MU_GROUP_MGMT_NOTIF = 0xFE,
@@ -361,6 +362,14 @@ struct iwl_cmd_response {
        __le32 status;
 };
 
+/*
+ * struct iwl_dqa_enable_cmd
+ * @cmd_queue: the TXQ number of the command queue
+ */
+struct iwl_dqa_enable_cmd {
+       __le32 cmd_queue;
+} __packed; /* DQA_CONTROL_CMD_API_S_VER_1 */
+
 /*
  * struct iwl_tx_ant_cfg_cmd
  * @valid: valid antenna configuration
index 0a5490c46d2e7c81a392782cdfd7ceea4df9055d..510b4c1be35dfb6f70e11c6ef803fd2fb85bddce 100644 (file)
@@ -134,6 +134,23 @@ static int iwl_send_rss_cfg_cmd(struct iwl_mvm *mvm)
        return iwl_mvm_send_cmd_pdu(mvm, RSS_CONFIG_CMD, 0, sizeof(cmd), &cmd);
 }
 
+static int iwl_mvm_send_dqa_cmd(struct iwl_mvm *mvm)
+{
+       struct iwl_dqa_enable_cmd dqa_cmd = {
+               .cmd_queue = cpu_to_le32(IWL_MVM_DQA_CMD_QUEUE),
+       };
+       u32 cmd_id = iwl_cmd_id(DQA_ENABLE_CMD, DATA_PATH_GROUP, 0);
+       int ret;
+
+       ret = iwl_mvm_send_cmd_pdu(mvm, cmd_id, 0, sizeof(dqa_cmd), &dqa_cmd);
+       if (ret)
+               IWL_ERR(mvm, "Failed to send DQA enabling command: %d\n", ret);
+       else
+               IWL_DEBUG_FW(mvm, "Working in DQA mode\n");
+
+       return ret;
+}
+
 void iwl_free_fw_paging(struct iwl_mvm *mvm)
 {
        int i;
@@ -979,6 +996,15 @@ int iwl_mvm_up(struct iwl_mvm *mvm)
        /* reset quota debouncing buffer - 0xff will yield invalid data */
        memset(&mvm->last_quota_cmd, 0xff, sizeof(mvm->last_quota_cmd));
 
+       /* Enable DQA-mode if required */
+       if (iwl_mvm_is_dqa_supported(mvm)) {
+               ret = iwl_mvm_send_dqa_cmd(mvm);
+               if (ret)
+                       goto error;
+       } else {
+               IWL_DEBUG_FW(mvm, "Working in non-DQA mode\n");
+       }
+
        /* Add auxiliary station for scanning */
        ret = iwl_mvm_add_aux_sta(mvm);
        if (ret)