iwlwifi: mvm: let the firmware choose the antenna for beacons
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Sun, 13 Dec 2015 07:35:30 +0000 (09:35 +0200)
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Thu, 7 Jan 2016 17:01:24 +0000 (19:01 +0200)
The firmware knows better what antenna to choose.
Old firmware still need the setting, so use a flag to know
if the driver should choose the antenna or if the firmware
can do it iself.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
drivers/net/wireless/intel/iwlwifi/iwl-fw-file.h
drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c

index d2294ad6702303075918cab993026a8a1201ddec..9f24f990b7057973f6af1d707ed6cb3cebe85462 100644 (file)
@@ -309,6 +309,8 @@ typedef unsigned int __bitwise__ iwl_ucode_tlv_capa_t;
  * @IWL_UCODE_TLV_CAPA_EXTENDED_DTS_MEASURE: extended DTS measurement
  * @IWL_UCODE_TLV_CAPA_SHORT_PM_TIMEOUTS: supports short PM timeouts
  * @IWL_UCODE_TLV_CAPA_BT_MPLUT_SUPPORT: supports bt-coex Multi-priority LUT
+ * @IWL_UCODE_TLV_CAPA_BEACON_ANT_SELECTION: firmware will decide on what
+ *     antenna the beacon should be transmitted
  *
  * @NUM_IWL_UCODE_TLV_CAPA: number of bits used
  */
@@ -336,6 +338,7 @@ enum iwl_ucode_tlv_capa {
        IWL_UCODE_TLV_CAPA_EXTENDED_DTS_MEASURE         = (__force iwl_ucode_tlv_capa_t)64,
        IWL_UCODE_TLV_CAPA_SHORT_PM_TIMEOUTS            = (__force iwl_ucode_tlv_capa_t)65,
        IWL_UCODE_TLV_CAPA_BT_MPLUT_SUPPORT             = (__force iwl_ucode_tlv_capa_t)67,
+       IWL_UCODE_TLV_CAPA_BEACON_ANT_SELECTION         = (__force iwl_ucode_tlv_capa_t)71,
 
        NUM_IWL_UCODE_TLV_CAPA
 #ifdef __CHECKER__
index 5e3a7582885b8c76ef115a59d57ec5bc336a2d3c..448b9c927b514ba9f047741388b18762a093e206 100644 (file)
@@ -1012,9 +1012,12 @@ static int iwl_mvm_mac_ctxt_send_beacon(struct iwl_mvm *mvm,
                                                TX_CMD_FLG_BT_PRIO_POS;
        beacon_cmd.tx.tx_flags = cpu_to_le32(tx_flags);
 
-       mvm->mgmt_last_antenna_idx =
-               iwl_mvm_next_antenna(mvm, iwl_mvm_get_valid_tx_ant(mvm),
-                                    mvm->mgmt_last_antenna_idx);
+       if (!fw_has_capa(&mvm->fw->ucode_capa,
+                        IWL_UCODE_TLV_CAPA_BEACON_ANT_SELECTION)) {
+               mvm->mgmt_last_antenna_idx =
+                       iwl_mvm_next_antenna(mvm, iwl_mvm_get_valid_tx_ant(mvm),
+                                            mvm->mgmt_last_antenna_idx);
+       }
 
        beacon_cmd.tx.rate_n_flags =
                cpu_to_le32(BIT(mvm->mgmt_last_antenna_idx) <<