diff options
author | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2014-03-06 03:30:49 -0500 |
---|---|---|
committer | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2014-03-11 13:50:06 -0400 |
commit | ee7bea582e9d4b7de5928628201a5763e0e4cbbe (patch) | |
tree | c097441b03d331492ffd266655a03ad3c65f4adf | |
parent | 5b7ff6158dc921fa9ae0c47a5a29a750d0d0ce60 (diff) |
iwlwifi: mvm: BT Coex - classify packet priority in BT code
This code is really related to BT Coex - move it to the coex
file.
Also - prepare for a FW API change that will happen soon:
Bits 11 and 12 will be allocated for BT priority. Today, we
only have bit 12.
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/coex.c | 17 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/fw-api-tx.h | 3 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mvm.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/tx.c | 8 |
4 files changed, 24 insertions, 6 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/coex.c b/drivers/net/wireless/iwlwifi/mvm/coex.c index 0b2e351d4e52..43027c346ad3 100644 --- a/drivers/net/wireless/iwlwifi/mvm/coex.c +++ b/drivers/net/wireless/iwlwifi/mvm/coex.c | |||
@@ -61,6 +61,8 @@ | |||
61 | * | 61 | * |
62 | *****************************************************************************/ | 62 | *****************************************************************************/ |
63 | 63 | ||
64 | #include <linux/ieee80211.h> | ||
65 | #include <linux/etherdevice.h> | ||
64 | #include <net/mac80211.h> | 66 | #include <net/mac80211.h> |
65 | 67 | ||
66 | #include "fw-api-coex.h" | 68 | #include "fw-api-coex.h" |
@@ -1205,6 +1207,21 @@ bool iwl_mvm_bt_coex_is_mimo_allowed(struct iwl_mvm *mvm, | |||
1205 | return iwl_get_coex_type(mvm, mvmsta->vif) == BT_COEX_TIGHT_LUT; | 1207 | return iwl_get_coex_type(mvm, mvmsta->vif) == BT_COEX_TIGHT_LUT; |
1206 | } | 1208 | } |
1207 | 1209 | ||
1210 | u8 iwl_mvm_bt_coex_tx_prio(struct iwl_mvm *mvm, struct ieee80211_hdr *hdr, | ||
1211 | struct ieee80211_tx_info *info) | ||
1212 | { | ||
1213 | __le16 fc = hdr->frame_control; | ||
1214 | |||
1215 | /* High prio packet (wrt. BT coex) if it is EAPOL, MCAST or MGMT */ | ||
1216 | if (info->band == IEEE80211_BAND_2GHZ && | ||
1217 | (info->control.flags & IEEE80211_TX_CTRL_PORT_CTRL_PROTO || | ||
1218 | is_multicast_ether_addr(hdr->addr1) || | ||
1219 | ieee80211_is_back_req(fc) || ieee80211_is_mgmt(fc))) | ||
1220 | return 2; | ||
1221 | |||
1222 | return 0; | ||
1223 | } | ||
1224 | |||
1208 | void iwl_mvm_bt_coex_vif_change(struct iwl_mvm *mvm) | 1225 | void iwl_mvm_bt_coex_vif_change(struct iwl_mvm *mvm) |
1209 | { | 1226 | { |
1210 | if (!(mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_NEWBT_COEX)) | 1227 | if (!(mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_NEWBT_COEX)) |
diff --git a/drivers/net/wireless/iwlwifi/mvm/fw-api-tx.h b/drivers/net/wireless/iwlwifi/mvm/fw-api-tx.h index b674c2a2b51c..8e122f3a7a74 100644 --- a/drivers/net/wireless/iwlwifi/mvm/fw-api-tx.h +++ b/drivers/net/wireless/iwlwifi/mvm/fw-api-tx.h | |||
@@ -76,6 +76,8 @@ | |||
76 | * @TX_CMD_FLG_VHT_NDPA: mark frame is NDPA for VHT beamformer sequence | 76 | * @TX_CMD_FLG_VHT_NDPA: mark frame is NDPA for VHT beamformer sequence |
77 | * @TX_CMD_FLG_HT_NDPA: mark frame is NDPA for HT beamformer sequence | 77 | * @TX_CMD_FLG_HT_NDPA: mark frame is NDPA for HT beamformer sequence |
78 | * @TX_CMD_FLG_CSI_FDBK2HOST: mark to send feedback to host (only if good CRC) | 78 | * @TX_CMD_FLG_CSI_FDBK2HOST: mark to send feedback to host (only if good CRC) |
79 | * @TX_CMD_FLG_BT_PRIO_POS: the position of the BT priority (bit 11 is ignored | ||
80 | * on old firmwares). | ||
79 | * @TX_CMD_FLG_BT_DIS: disable BT priority for this frame | 81 | * @TX_CMD_FLG_BT_DIS: disable BT priority for this frame |
80 | * @TX_CMD_FLG_SEQ_CTL: set if FW should override the sequence control. | 82 | * @TX_CMD_FLG_SEQ_CTL: set if FW should override the sequence control. |
81 | * Should be set for mgmt, non-QOS data, mcast, bcast and in scan command | 83 | * Should be set for mgmt, non-QOS data, mcast, bcast and in scan command |
@@ -107,6 +109,7 @@ enum iwl_tx_flags { | |||
107 | TX_CMD_FLG_VHT_NDPA = BIT(8), | 109 | TX_CMD_FLG_VHT_NDPA = BIT(8), |
108 | TX_CMD_FLG_HT_NDPA = BIT(9), | 110 | TX_CMD_FLG_HT_NDPA = BIT(9), |
109 | TX_CMD_FLG_CSI_FDBK2HOST = BIT(10), | 111 | TX_CMD_FLG_CSI_FDBK2HOST = BIT(10), |
112 | TX_CMD_FLG_BT_PRIO_POS = 11, | ||
110 | TX_CMD_FLG_BT_DIS = BIT(12), | 113 | TX_CMD_FLG_BT_DIS = BIT(12), |
111 | TX_CMD_FLG_SEQ_CTL = BIT(13), | 114 | TX_CMD_FLG_SEQ_CTL = BIT(13), |
112 | TX_CMD_FLG_MORE_FRAG = BIT(14), | 115 | TX_CMD_FLG_MORE_FRAG = BIT(14), |
diff --git a/drivers/net/wireless/iwlwifi/mvm/mvm.h b/drivers/net/wireless/iwlwifi/mvm/mvm.h index 4c386541fe35..221a482a36ea 100644 --- a/drivers/net/wireless/iwlwifi/mvm/mvm.h +++ b/drivers/net/wireless/iwlwifi/mvm/mvm.h | |||
@@ -912,6 +912,8 @@ u16 iwl_mvm_coex_agg_time_limit(struct iwl_mvm *mvm, | |||
912 | struct ieee80211_sta *sta); | 912 | struct ieee80211_sta *sta); |
913 | bool iwl_mvm_bt_coex_is_mimo_allowed(struct iwl_mvm *mvm, | 913 | bool iwl_mvm_bt_coex_is_mimo_allowed(struct iwl_mvm *mvm, |
914 | struct ieee80211_sta *sta); | 914 | struct ieee80211_sta *sta); |
915 | u8 iwl_mvm_bt_coex_tx_prio(struct iwl_mvm *mvm, struct ieee80211_hdr *hdr, | ||
916 | struct ieee80211_tx_info *info); | ||
915 | int iwl_mvm_bt_coex_reduced_txp(struct iwl_mvm *mvm, u8 sta_id, bool enable); | 917 | int iwl_mvm_bt_coex_reduced_txp(struct iwl_mvm *mvm, u8 sta_id, bool enable); |
916 | 918 | ||
917 | enum iwl_bt_kill_msk { | 919 | enum iwl_bt_kill_msk { |
diff --git a/drivers/net/wireless/iwlwifi/mvm/tx.c b/drivers/net/wireless/iwlwifi/mvm/tx.c index 6cdbf7b21714..dd813d463218 100644 --- a/drivers/net/wireless/iwlwifi/mvm/tx.c +++ b/drivers/net/wireless/iwlwifi/mvm/tx.c | |||
@@ -90,12 +90,8 @@ static void iwl_mvm_set_tx_cmd(struct iwl_mvm *mvm, struct sk_buff *skb, | |||
90 | else if (ieee80211_is_back_req(fc)) | 90 | else if (ieee80211_is_back_req(fc)) |
91 | tx_flags |= TX_CMD_FLG_ACK | TX_CMD_FLG_BAR; | 91 | tx_flags |= TX_CMD_FLG_ACK | TX_CMD_FLG_BAR; |
92 | 92 | ||
93 | /* High prio packet (wrt. BT coex) if it is EAPOL, MCAST or MGMT */ | 93 | tx_flags |= iwl_mvm_bt_coex_tx_prio(mvm, hdr, info) << |
94 | if (info->band == IEEE80211_BAND_2GHZ && | 94 | TX_CMD_FLG_BT_PRIO_POS; |
95 | (info->control.flags & IEEE80211_TX_CTRL_PORT_CTRL_PROTO || | ||
96 | is_multicast_ether_addr(hdr->addr1) || | ||
97 | ieee80211_is_back_req(fc) || ieee80211_is_mgmt(fc))) | ||
98 | tx_flags |= TX_CMD_FLG_BT_DIS; | ||
99 | 95 | ||
100 | if (ieee80211_has_morefrags(fc)) | 96 | if (ieee80211_has_morefrags(fc)) |
101 | tx_flags |= TX_CMD_FLG_MORE_FRAG; | 97 | tx_flags |= TX_CMD_FLG_MORE_FRAG; |