mirror of https://gitee.com/openkylin/linux.git
iwlwifi: mvm: save low latency causes in an enum
Currently we have a boolean variable for each cause. This costs space, and requires to check each separately when determining low latency. Since we have another cause incoming, convert it to an enum. While at it, move the retrieval of the prev value and the assignment of the new value to be inside iwl_mvm_update_low_latency and save the need for each caller to do it separately. Signed-off-by: Sara Sharon <sara.sharon@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
This commit is contained in:
parent
8f27036a0e
commit
9b137866f9
|
@ -1276,7 +1276,6 @@ static ssize_t iwl_dbgfs_low_latency_write(struct ieee80211_vif *vif, char *buf,
|
|||
{
|
||||
struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
|
||||
struct iwl_mvm *mvm = mvmvif->mvm;
|
||||
bool prev;
|
||||
u8 value;
|
||||
int ret;
|
||||
|
||||
|
@ -1287,9 +1286,7 @@ static ssize_t iwl_dbgfs_low_latency_write(struct ieee80211_vif *vif, char *buf,
|
|||
return -EINVAL;
|
||||
|
||||
mutex_lock(&mvm->mutex);
|
||||
prev = iwl_mvm_vif_low_latency(mvmvif);
|
||||
mvmvif->low_latency_dbgfs = value;
|
||||
iwl_mvm_update_low_latency(mvm, vif, prev);
|
||||
iwl_mvm_update_low_latency(mvm, vif, value, LOW_LATENCY_DEBUGFS);
|
||||
mutex_unlock(&mvm->mutex);
|
||||
|
||||
return count;
|
||||
|
@ -1306,9 +1303,9 @@ static ssize_t iwl_dbgfs_low_latency_read(struct file *file,
|
|||
|
||||
len = scnprintf(buf, sizeof(buf) - 1,
|
||||
"traffic=%d\ndbgfs=%d\nvcmd=%d\n",
|
||||
mvmvif->low_latency_traffic,
|
||||
mvmvif->low_latency_dbgfs,
|
||||
mvmvif->low_latency_vcmd);
|
||||
!!(mvmvif->low_latency & LOW_LATENCY_TRAFFIC),
|
||||
!!(mvmvif->low_latency & LOW_LATENCY_DEBUGFS),
|
||||
!!(mvmvif->low_latency & LOW_LATENCY_VCMD));
|
||||
return simple_read_from_buffer(user_buf, count, ppos, buf, len);
|
||||
}
|
||||
|
||||
|
|
|
@ -299,6 +299,18 @@ enum iwl_bt_force_ant_mode {
|
|||
BT_FORCE_ANT_MAX,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct iwl_mvm_low_latency_cause - low latency set causes
|
||||
* @LOW_LATENCY_TRAFFIC: indicates low latency traffic was detected
|
||||
* @LOW_LATENCY_DEBUGFS: low latency mode set from debugfs
|
||||
* @LOW_LATENCY_VCMD: low latency mode set from vendor command
|
||||
*/
|
||||
enum iwl_mvm_low_latency_cause {
|
||||
LOW_LATENCY_TRAFFIC = BIT(0),
|
||||
LOW_LATENCY_DEBUGFS = BIT(1),
|
||||
LOW_LATENCY_VCMD = BIT(2),
|
||||
};
|
||||
|
||||
/**
|
||||
* struct iwl_mvm_vif_bf_data - beacon filtering related data
|
||||
* @bf_enabled: indicates if beacon filtering is enabled
|
||||
|
@ -335,9 +347,8 @@ struct iwl_mvm_vif_bf_data {
|
|||
* @pm_enabled - Indicate if MAC power management is allowed
|
||||
* @monitor_active: indicates that monitor context is configured, and that the
|
||||
* interface should get quota etc.
|
||||
* @low_latency_traffic: indicates low latency traffic was detected
|
||||
* @low_latency_dbgfs: low latency mode set from debugfs
|
||||
* @low_latency_vcmd: low latency mode set from vendor command
|
||||
* @low_latency: indicates low latency is set, see
|
||||
* enum &iwl_mvm_low_latency_cause for causes.
|
||||
* @ps_disabled: indicates that this interface requires PS to be disabled
|
||||
* @queue_params: QoS params for this MAC
|
||||
* @bcast_sta: station used for broadcast packets. Used by the following
|
||||
|
@ -367,7 +378,7 @@ struct iwl_mvm_vif {
|
|||
bool ap_ibss_active;
|
||||
bool pm_enabled;
|
||||
bool monitor_active;
|
||||
bool low_latency_traffic, low_latency_dbgfs, low_latency_vcmd;
|
||||
u8 low_latency;
|
||||
bool ps_disabled;
|
||||
struct iwl_mvm_vif_bf_data bf_data;
|
||||
|
||||
|
@ -1756,7 +1767,8 @@ bool iwl_mvm_rx_diversity_allowed(struct iwl_mvm *mvm);
|
|||
|
||||
/* Low latency */
|
||||
int iwl_mvm_update_low_latency(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
|
||||
bool value);
|
||||
bool low_latency,
|
||||
enum iwl_mvm_low_latency_cause cause);
|
||||
/* get SystemLowLatencyMode - only needed for beacon threshold? */
|
||||
bool iwl_mvm_low_latency(struct iwl_mvm *mvm);
|
||||
/* get VMACLowLatencyMode */
|
||||
|
@ -1772,9 +1784,17 @@ static inline bool iwl_mvm_vif_low_latency(struct iwl_mvm_vif *mvmvif)
|
|||
* binding, so this has no real impact. For now, just return
|
||||
* the current desired low-latency state.
|
||||
*/
|
||||
return mvmvif->low_latency_dbgfs ||
|
||||
mvmvif->low_latency_traffic ||
|
||||
mvmvif->low_latency_vcmd;
|
||||
return mvmvif->low_latency;
|
||||
}
|
||||
|
||||
static inline
|
||||
void iwl_mvm_vif_set_low_latency(struct iwl_mvm_vif *mvmvif, bool set,
|
||||
enum iwl_mvm_low_latency_cause cause)
|
||||
{
|
||||
if (set)
|
||||
mvmvif->low_latency |= cause;
|
||||
else
|
||||
mvmvif->low_latency &= ~cause;
|
||||
}
|
||||
|
||||
/* hw scheduler queue config */
|
||||
|
|
|
@ -1034,14 +1034,18 @@ bool iwl_mvm_rx_diversity_allowed(struct iwl_mvm *mvm)
|
|||
}
|
||||
|
||||
int iwl_mvm_update_low_latency(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
|
||||
bool prev)
|
||||
bool low_latency,
|
||||
enum iwl_mvm_low_latency_cause cause)
|
||||
{
|
||||
struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
|
||||
int res;
|
||||
bool low_latency;
|
||||
bool prev;
|
||||
|
||||
lockdep_assert_held(&mvm->mutex);
|
||||
|
||||
prev = iwl_mvm_vif_low_latency(mvmvif);
|
||||
iwl_mvm_vif_set_low_latency(mvmvif, low_latency, cause);
|
||||
|
||||
low_latency = iwl_mvm_vif_low_latency(mvmvif);
|
||||
|
||||
if (low_latency == prev)
|
||||
|
|
Loading…
Reference in New Issue