mac80211: notify mac from low level driver (iwlwifi)
Add new API to MAC80211 to allow low level driver to notify MAC with driver status. Signed-off-by: Mohamed Abbas <mabbas@linux.intel.com> Signed-off-by: Reinette Chatre <reinette.chatre@intel.com> Acked-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
380a942b91
commit
84363e6e07
|
@ -5886,6 +5886,7 @@ static void iwl3945_alive_start(struct iwl3945_priv *priv)
|
||||||
if (priv->error_recovering)
|
if (priv->error_recovering)
|
||||||
iwl3945_error_recovery(priv);
|
iwl3945_error_recovery(priv);
|
||||||
|
|
||||||
|
ieee80211_notify_mac(priv->hw, IEEE80211_NOTIFY_RE_ASSOC);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
restart:
|
restart:
|
||||||
|
|
|
@ -5714,6 +5714,7 @@ static void iwl4965_alive_start(struct iwl_priv *priv)
|
||||||
iwl4965_error_recovery(priv);
|
iwl4965_error_recovery(priv);
|
||||||
|
|
||||||
iwlcore_low_level_notify(priv, IWLCORE_START_EVT);
|
iwlcore_low_level_notify(priv, IWLCORE_START_EVT);
|
||||||
|
ieee80211_notify_mac(priv->hw, IEEE80211_NOTIFY_RE_ASSOC);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
restart:
|
restart:
|
||||||
|
|
|
@ -73,6 +73,14 @@
|
||||||
* not do so then mac80211 may add this under certain circumstances.
|
* not do so then mac80211 may add this under certain circumstances.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enum ieee80211_notification_type - Low level driver notification
|
||||||
|
* @IEEE80211_NOTIFY_RE_ASSOC: start the re-association sequence
|
||||||
|
*/
|
||||||
|
enum ieee80211_notification_types {
|
||||||
|
IEEE80211_NOTIFY_RE_ASSOC,
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct ieee80211_ht_bss_info - describing BSS's HT characteristics
|
* struct ieee80211_ht_bss_info - describing BSS's HT characteristics
|
||||||
*
|
*
|
||||||
|
@ -1678,4 +1686,15 @@ void ieee80211_stop_tx_ba_cb(struct ieee80211_hw *hw, u8 *ra, u8 tid);
|
||||||
void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_hw *hw, const u8 *ra,
|
void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_hw *hw, const u8 *ra,
|
||||||
u16 tid);
|
u16 tid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ieee80211_notify_mac - low level driver notification
|
||||||
|
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||||
|
* @notification_types: enum ieee80211_notification_types
|
||||||
|
*
|
||||||
|
* This function must be called by low level driver to inform mac80211 of
|
||||||
|
* low level driver status change or force mac80211 to re-assoc for low
|
||||||
|
* level driver internal error that require re-assoc.
|
||||||
|
*/
|
||||||
|
void ieee80211_notify_mac(struct ieee80211_hw *hw,
|
||||||
|
enum ieee80211_notification_types notif_type);
|
||||||
#endif /* MAC80211_H */
|
#endif /* MAC80211_H */
|
||||||
|
|
|
@ -4225,3 +4225,26 @@ int ieee80211_sta_disassociate(struct net_device *dev, u16 reason)
|
||||||
ieee80211_set_disassoc(dev, ifsta, 0);
|
ieee80211_set_disassoc(dev, ifsta, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ieee80211_notify_mac(struct ieee80211_hw *hw,
|
||||||
|
enum ieee80211_notification_types notif_type)
|
||||||
|
{
|
||||||
|
struct ieee80211_local *local = hw_to_local(hw);
|
||||||
|
struct ieee80211_sub_if_data *sdata;
|
||||||
|
|
||||||
|
switch (notif_type) {
|
||||||
|
case IEEE80211_NOTIFY_RE_ASSOC:
|
||||||
|
rcu_read_lock();
|
||||||
|
list_for_each_entry_rcu(sdata, &local->interfaces, list) {
|
||||||
|
|
||||||
|
if (sdata->vif.type == IEEE80211_IF_TYPE_STA) {
|
||||||
|
ieee80211_sta_req_auth(sdata->dev,
|
||||||
|
&sdata->u.sta);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
rcu_read_unlock();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(ieee80211_notify_mac);
|
||||||
|
|
Loading…
Reference in New Issue