Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 84363e6e authored by Mohamed Abbas's avatar Mohamed Abbas Committed by John W. Linville
Browse files

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: default avatarMohamed Abbas <mabbas@linux.intel.com>
Signed-off-by: default avatarReinette Chatre <reinette.chatre@intel.com>
Acked-by: default avatarJohannes Berg <johannes@sipsolutions.net>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 380a942b
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -5886,6 +5886,7 @@ static void iwl3945_alive_start(struct iwl3945_priv *priv)
	if (priv->error_recovering)
		iwl3945_error_recovery(priv);

	ieee80211_notify_mac(priv->hw, IEEE80211_NOTIFY_RE_ASSOC);
	return;

 restart:
+1 −0
Original line number Diff line number Diff line
@@ -5714,6 +5714,7 @@ static void iwl4965_alive_start(struct iwl_priv *priv)
		iwl4965_error_recovery(priv);

	iwlcore_low_level_notify(priv, IWLCORE_START_EVT);
	ieee80211_notify_mac(priv->hw, IEEE80211_NOTIFY_RE_ASSOC);
	return;

 restart:
+19 −0
Original line number Diff line number Diff line
@@ -73,6 +73,14 @@
 * 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
 *
@@ -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,
				     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 */
+23 −0
Original line number Diff line number Diff line
@@ -4225,3 +4225,26 @@ int ieee80211_sta_disassociate(struct net_device *dev, u16 reason)
	ieee80211_set_disassoc(dev, ifsta, 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);