mac80211: share sta_info->ht_info
Rate control algorithms may need access to a station's HT capabilities, so share the ht_info struct in the public station API. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
ae17e98609
commit
687c7c0807
@@ -1154,10 +1154,10 @@ static int rs_switch_to_mimo2(struct iwl_priv *priv,
|
|||||||
s8 is_green = lq_sta->is_green;
|
s8 is_green = lq_sta->is_green;
|
||||||
|
|
||||||
if (!(conf->flags & IEEE80211_CONF_SUPPORT_HT_MODE) ||
|
if (!(conf->flags & IEEE80211_CONF_SUPPORT_HT_MODE) ||
|
||||||
!sta->ht_info.ht_supported)
|
!sta->sta.ht_info.ht_supported)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (((sta->ht_info.cap & IEEE80211_HT_CAP_SM_PS) >> 2)
|
if (((sta->sta.ht_info.cap & IEEE80211_HT_CAP_SM_PS) >> 2)
|
||||||
== WLAN_HT_CAP_SM_PS_STATIC)
|
== WLAN_HT_CAP_SM_PS_STATIC)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@@ -1222,7 +1222,7 @@ static int rs_switch_to_siso(struct iwl_priv *priv,
|
|||||||
s32 rate;
|
s32 rate;
|
||||||
|
|
||||||
if (!(conf->flags & IEEE80211_CONF_SUPPORT_HT_MODE) ||
|
if (!(conf->flags & IEEE80211_CONF_SUPPORT_HT_MODE) ||
|
||||||
!sta->ht_info.ht_supported)
|
!sta->sta.ht_info.ht_supported)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
IWL_DEBUG_RATE("LQ: try to switch to SISO\n");
|
IWL_DEBUG_RATE("LQ: try to switch to SISO\n");
|
||||||
|
@@ -667,6 +667,7 @@ enum set_key_cmd {
|
|||||||
* @addr: MAC address
|
* @addr: MAC address
|
||||||
* @aid: AID we assigned to the station if we're an AP
|
* @aid: AID we assigned to the station if we're an AP
|
||||||
* @supp_rates: Bitmap of supported rates (per band)
|
* @supp_rates: Bitmap of supported rates (per band)
|
||||||
|
* @ht_info: HT capabilities of this STA
|
||||||
* @drv_priv: data area for driver use, will always be aligned to
|
* @drv_priv: data area for driver use, will always be aligned to
|
||||||
* sizeof(void *), size is determined in hw information.
|
* sizeof(void *), size is determined in hw information.
|
||||||
*/
|
*/
|
||||||
@@ -674,6 +675,7 @@ struct ieee80211_sta {
|
|||||||
u64 supp_rates[IEEE80211_NUM_BANDS];
|
u64 supp_rates[IEEE80211_NUM_BANDS];
|
||||||
u8 addr[ETH_ALEN];
|
u8 addr[ETH_ALEN];
|
||||||
u16 aid;
|
u16 aid;
|
||||||
|
struct ieee80211_ht_info ht_info;
|
||||||
|
|
||||||
/* must be last */
|
/* must be last */
|
||||||
u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *))));
|
u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *))));
|
||||||
|
@@ -672,7 +672,7 @@ static void sta_apply_parameters(struct ieee80211_local *local,
|
|||||||
|
|
||||||
if (params->ht_capa) {
|
if (params->ht_capa) {
|
||||||
ieee80211_ht_cap_ie_to_ht_info(params->ht_capa,
|
ieee80211_ht_cap_ie_to_ht_info(params->ht_capa,
|
||||||
&sta->ht_info);
|
&sta->sta.ht_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ieee80211_vif_is_mesh(&sdata->vif) && params->plink_action) {
|
if (ieee80211_vif_is_mesh(&sdata->vif) && params->plink_action) {
|
||||||
|
@@ -1316,11 +1316,11 @@ static void ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata,
|
|||||||
struct ieee80211_ht_bss_info bss_info;
|
struct ieee80211_ht_bss_info bss_info;
|
||||||
ieee80211_ht_cap_ie_to_ht_info(
|
ieee80211_ht_cap_ie_to_ht_info(
|
||||||
(struct ieee80211_ht_cap *)
|
(struct ieee80211_ht_cap *)
|
||||||
elems.ht_cap_elem, &sta->ht_info);
|
elems.ht_cap_elem, &sta->sta.ht_info);
|
||||||
ieee80211_ht_addt_info_ie_to_ht_bss_info(
|
ieee80211_ht_addt_info_ie_to_ht_bss_info(
|
||||||
(struct ieee80211_ht_addt_info *)
|
(struct ieee80211_ht_addt_info *)
|
||||||
elems.ht_info_elem, &bss_info);
|
elems.ht_info_elem, &bss_info);
|
||||||
ieee80211_handle_ht(local, 1, &sta->ht_info, &bss_info);
|
ieee80211_handle_ht(local, 1, &sta->sta.ht_info, &bss_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
rate_control_rate_init(sta, local);
|
rate_control_rate_init(sta, local);
|
||||||
|
@@ -167,7 +167,6 @@ struct sta_ampdu_mlme {
|
|||||||
* @lock: used for locking all fields that require locking, see comments
|
* @lock: used for locking all fields that require locking, see comments
|
||||||
* in the header file.
|
* in the header file.
|
||||||
* @flaglock: spinlock for flags accesses
|
* @flaglock: spinlock for flags accesses
|
||||||
* @ht_info: HT capabilities of this STA
|
|
||||||
* @addr: MAC address of this STA
|
* @addr: MAC address of this STA
|
||||||
* @aid: STA's unique AID (1..2007, 0 = not assigned yet),
|
* @aid: STA's unique AID (1..2007, 0 = not assigned yet),
|
||||||
* only used in AP (and IBSS?) mode
|
* only used in AP (and IBSS?) mode
|
||||||
@@ -226,7 +225,6 @@ struct sta_info {
|
|||||||
void *rate_ctrl_priv;
|
void *rate_ctrl_priv;
|
||||||
spinlock_t lock;
|
spinlock_t lock;
|
||||||
spinlock_t flaglock;
|
spinlock_t flaglock;
|
||||||
struct ieee80211_ht_info ht_info;
|
|
||||||
|
|
||||||
u16 listen_interval;
|
u16 listen_interval;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user