|
@@ -3436,106 +3436,6 @@ void iwl3945_config_ap(struct iwl_priv *priv)
|
|
|
* clear sta table, add BCAST sta... */
|
|
|
}
|
|
|
|
|
|
-static int iwl3945_mac_config_interface(struct ieee80211_hw *hw,
|
|
|
- struct ieee80211_vif *vif,
|
|
|
- struct ieee80211_if_conf *conf)
|
|
|
-{
|
|
|
- struct iwl_priv *priv = hw->priv;
|
|
|
- int rc;
|
|
|
-
|
|
|
- if (conf == NULL)
|
|
|
- return -EIO;
|
|
|
-
|
|
|
- if (priv->vif != vif) {
|
|
|
- IWL_DEBUG_MAC80211(priv, "leave - priv->vif != vif\n");
|
|
|
- return 0;
|
|
|
- }
|
|
|
-
|
|
|
- /* handle this temporarily here */
|
|
|
- if (priv->iw_mode == NL80211_IFTYPE_ADHOC &&
|
|
|
- conf->changed & IEEE80211_IFCC_BEACON) {
|
|
|
- struct sk_buff *beacon = ieee80211_beacon_get(hw, vif);
|
|
|
- if (!beacon)
|
|
|
- return -ENOMEM;
|
|
|
- mutex_lock(&priv->mutex);
|
|
|
- rc = iwl_mac_beacon_update(hw, beacon);
|
|
|
- mutex_unlock(&priv->mutex);
|
|
|
- if (rc)
|
|
|
- return rc;
|
|
|
- }
|
|
|
-
|
|
|
- if (!iwl_is_alive(priv))
|
|
|
- return -EAGAIN;
|
|
|
-
|
|
|
- mutex_lock(&priv->mutex);
|
|
|
-
|
|
|
- if (conf->bssid)
|
|
|
- IWL_DEBUG_MAC80211(priv, "bssid: %pM\n", conf->bssid);
|
|
|
-
|
|
|
-/*
|
|
|
- * very dubious code was here; the probe filtering flag is never set:
|
|
|
- *
|
|
|
- if (unlikely(test_bit(STATUS_SCANNING, &priv->status)) &&
|
|
|
- !(priv->hw->flags & IEEE80211_HW_NO_PROBE_FILTERING)) {
|
|
|
- */
|
|
|
-
|
|
|
- if (priv->iw_mode == NL80211_IFTYPE_AP) {
|
|
|
- if (!conf->bssid) {
|
|
|
- conf->bssid = priv->mac_addr;
|
|
|
- memcpy(priv->bssid, priv->mac_addr, ETH_ALEN);
|
|
|
- IWL_DEBUG_MAC80211(priv, "bssid was set to: %pM\n",
|
|
|
- conf->bssid);
|
|
|
- }
|
|
|
- if (priv->ibss_beacon)
|
|
|
- dev_kfree_skb(priv->ibss_beacon);
|
|
|
-
|
|
|
- priv->ibss_beacon = ieee80211_beacon_get(hw, vif);
|
|
|
- }
|
|
|
-
|
|
|
- if (iwl_is_rfkill(priv))
|
|
|
- goto done;
|
|
|
-
|
|
|
- if (conf->bssid && !is_zero_ether_addr(conf->bssid) &&
|
|
|
- !is_multicast_ether_addr(conf->bssid)) {
|
|
|
- /* If there is currently a HW scan going on in the background
|
|
|
- * then we need to cancel it else the RXON below will fail. */
|
|
|
- if (iwl_scan_cancel_timeout(priv, 100)) {
|
|
|
- IWL_WARN(priv, "Aborted scan still in progress "
|
|
|
- "after 100ms\n");
|
|
|
- IWL_DEBUG_MAC80211(priv, "leaving:scan abort failed\n");
|
|
|
- mutex_unlock(&priv->mutex);
|
|
|
- return -EAGAIN;
|
|
|
- }
|
|
|
- memcpy(priv->staging_rxon.bssid_addr, conf->bssid, ETH_ALEN);
|
|
|
-
|
|
|
- /* TODO: Audit driver for usage of these members and see
|
|
|
- * if mac80211 deprecates them (priv->bssid looks like it
|
|
|
- * shouldn't be there, but I haven't scanned the IBSS code
|
|
|
- * to verify) - jpk */
|
|
|
- memcpy(priv->bssid, conf->bssid, ETH_ALEN);
|
|
|
-
|
|
|
- if (priv->iw_mode == NL80211_IFTYPE_AP)
|
|
|
- iwlcore_config_ap(priv);
|
|
|
- else {
|
|
|
- rc = iwlcore_commit_rxon(priv);
|
|
|
- if ((priv->iw_mode == NL80211_IFTYPE_STATION) && rc)
|
|
|
- priv->cfg->ops->smgmt->add_station(priv,
|
|
|
- priv->active_rxon.bssid_addr, 1, 0, NULL);
|
|
|
- }
|
|
|
-
|
|
|
- } else {
|
|
|
- iwl_scan_cancel_timeout(priv, 100);
|
|
|
- priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
|
|
|
- iwlcore_commit_rxon(priv);
|
|
|
- }
|
|
|
-
|
|
|
- done:
|
|
|
- IWL_DEBUG_MAC80211(priv, "leave\n");
|
|
|
- mutex_unlock(&priv->mutex);
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
static int iwl3945_mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
|
|
|
struct ieee80211_vif *vif,
|
|
|
struct ieee80211_sta *sta,
|
|
@@ -4213,7 +4113,7 @@ static struct ieee80211_ops iwl3945_hw_ops = {
|
|
|
.add_interface = iwl_mac_add_interface,
|
|
|
.remove_interface = iwl_mac_remove_interface,
|
|
|
.config = iwl_mac_config,
|
|
|
- .config_interface = iwl3945_mac_config_interface,
|
|
|
+ .config_interface = iwl_mac_config_interface,
|
|
|
.configure_filter = iwl_configure_filter,
|
|
|
.set_key = iwl3945_mac_set_key,
|
|
|
.get_tx_stats = iwl3945_mac_get_tx_stats,
|