iwlwifi: mvm: add support for WMM Access Control
After the corresponding mac80211 patch, we can now report the airtime used for each transmitted packet and mac80211 will be able to implement WMM-AC with that information. To support WMM-AC in the driver then, report the airtime and advertise support. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
This commit is contained in:
parent
c064ddf318
commit
9b5452fd77
3 changed files with 14 additions and 1 deletions
|
@ -423,7 +423,8 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
|
||||||
NL80211_FEATURE_LOW_PRIORITY_SCAN |
|
NL80211_FEATURE_LOW_PRIORITY_SCAN |
|
||||||
NL80211_FEATURE_P2P_GO_OPPPS |
|
NL80211_FEATURE_P2P_GO_OPPPS |
|
||||||
NL80211_FEATURE_DYNAMIC_SMPS |
|
NL80211_FEATURE_DYNAMIC_SMPS |
|
||||||
NL80211_FEATURE_STATIC_SMPS;
|
NL80211_FEATURE_STATIC_SMPS |
|
||||||
|
NL80211_FEATURE_SUPPORTS_WMM_ADMISSION;
|
||||||
|
|
||||||
if (mvm->fw->ucode_capa.capa[0] &
|
if (mvm->fw->ucode_capa.capa[0] &
|
||||||
IWL_UCODE_TLV_CAPA_TXPOWER_INSERTION_SUPPORT)
|
IWL_UCODE_TLV_CAPA_TXPOWER_INSERTION_SUPPORT)
|
||||||
|
|
|
@ -264,6 +264,7 @@ enum iwl_mvm_agg_state {
|
||||||
* the first packet to be sent in legacy HW queue in Tx AGG stop flow.
|
* the first packet to be sent in legacy HW queue in Tx AGG stop flow.
|
||||||
* Basically when next_reclaimed reaches ssn, we can tell mac80211 that
|
* Basically when next_reclaimed reaches ssn, we can tell mac80211 that
|
||||||
* we are ready to finish the Tx AGG stop / start flow.
|
* we are ready to finish the Tx AGG stop / start flow.
|
||||||
|
* @tx_time: medium time consumed by this A-MPDU
|
||||||
*/
|
*/
|
||||||
struct iwl_mvm_tid_data {
|
struct iwl_mvm_tid_data {
|
||||||
u16 seq_number;
|
u16 seq_number;
|
||||||
|
@ -274,6 +275,7 @@ struct iwl_mvm_tid_data {
|
||||||
enum iwl_mvm_agg_state state;
|
enum iwl_mvm_agg_state state;
|
||||||
u16 txq_id;
|
u16 txq_id;
|
||||||
u16 ssn;
|
u16 ssn;
|
||||||
|
u16 tx_time;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline u16 iwl_mvm_tid_queued(struct iwl_mvm_tid_data *tid_data)
|
static inline u16 iwl_mvm_tid_queued(struct iwl_mvm_tid_data *tid_data)
|
||||||
|
|
|
@ -658,6 +658,12 @@ static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,
|
||||||
seq_ctl = le16_to_cpu(hdr->seq_ctrl);
|
seq_ctl = le16_to_cpu(hdr->seq_ctrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TODO: this is not accurate if we are freeing more than one
|
||||||
|
* packet.
|
||||||
|
*/
|
||||||
|
info->status.tx_time =
|
||||||
|
le16_to_cpu(tx_resp->wireless_media_time);
|
||||||
BUILD_BUG_ON(ARRAY_SIZE(info->status.status_driver_data) < 1);
|
BUILD_BUG_ON(ARRAY_SIZE(info->status.status_driver_data) < 1);
|
||||||
info->status.status_driver_data[0] =
|
info->status.status_driver_data[0] =
|
||||||
(void *)(uintptr_t)tx_resp->reduced_tpc;
|
(void *)(uintptr_t)tx_resp->reduced_tpc;
|
||||||
|
@ -850,6 +856,8 @@ static void iwl_mvm_rx_tx_cmd_agg(struct iwl_mvm *mvm,
|
||||||
mvmsta->tid_data[tid].rate_n_flags =
|
mvmsta->tid_data[tid].rate_n_flags =
|
||||||
le32_to_cpu(tx_resp->initial_rate);
|
le32_to_cpu(tx_resp->initial_rate);
|
||||||
mvmsta->tid_data[tid].reduced_tpc = tx_resp->reduced_tpc;
|
mvmsta->tid_data[tid].reduced_tpc = tx_resp->reduced_tpc;
|
||||||
|
mvmsta->tid_data[tid].tx_time =
|
||||||
|
le16_to_cpu(tx_resp->wireless_media_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
|
@ -878,6 +886,8 @@ static void iwl_mvm_tx_info_from_ba_notif(struct ieee80211_tx_info *info,
|
||||||
info->status.ampdu_len = ba_notif->txed;
|
info->status.ampdu_len = ba_notif->txed;
|
||||||
iwl_mvm_hwrate_to_tx_status(tid_data->rate_n_flags,
|
iwl_mvm_hwrate_to_tx_status(tid_data->rate_n_flags,
|
||||||
info);
|
info);
|
||||||
|
/* TODO: not accounted if the whole A-MPDU failed */
|
||||||
|
info->status.tx_time = tid_data->tx_time;
|
||||||
info->status.status_driver_data[0] =
|
info->status.status_driver_data[0] =
|
||||||
(void *)(uintptr_t)tid_data->reduced_tpc;
|
(void *)(uintptr_t)tid_data->reduced_tpc;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue