mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-04-02 04:14:14 +00:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
This commit is contained in:
commit
031cf0e94c
17 changed files with 119 additions and 29 deletions
|
@ -1961,7 +1961,7 @@ static void iwl4965_rx_reply_tx(struct iwl_priv *priv,
|
||||||
struct ieee80211_tx_info *info;
|
struct ieee80211_tx_info *info;
|
||||||
struct iwl4965_tx_resp *tx_resp = (void *)&pkt->u.raw[0];
|
struct iwl4965_tx_resp *tx_resp = (void *)&pkt->u.raw[0];
|
||||||
u32 status = le32_to_cpu(tx_resp->u.status);
|
u32 status = le32_to_cpu(tx_resp->u.status);
|
||||||
int tid = MAX_TID_COUNT - 1;
|
int uninitialized_var(tid);
|
||||||
int sta_id;
|
int sta_id;
|
||||||
int freed;
|
int freed;
|
||||||
u8 *qc = NULL;
|
u8 *qc = NULL;
|
||||||
|
|
|
@ -1600,6 +1600,7 @@ struct iwl_cfg iwl5300_agn_cfg = {
|
||||||
.use_bsm = false,
|
.use_bsm = false,
|
||||||
.ht_greenfield_support = true,
|
.ht_greenfield_support = true,
|
||||||
.led_compensation = 51,
|
.led_compensation = 51,
|
||||||
|
.use_rts_for_ht = true, /* use rts/cts protection */
|
||||||
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1623,6 +1624,7 @@ struct iwl_cfg iwl5100_bgn_cfg = {
|
||||||
.use_bsm = false,
|
.use_bsm = false,
|
||||||
.ht_greenfield_support = true,
|
.ht_greenfield_support = true,
|
||||||
.led_compensation = 51,
|
.led_compensation = 51,
|
||||||
|
.use_rts_for_ht = true, /* use rts/cts protection */
|
||||||
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1668,6 +1670,7 @@ struct iwl_cfg iwl5100_agn_cfg = {
|
||||||
.use_bsm = false,
|
.use_bsm = false,
|
||||||
.ht_greenfield_support = true,
|
.ht_greenfield_support = true,
|
||||||
.led_compensation = 51,
|
.led_compensation = 51,
|
||||||
|
.use_rts_for_ht = true, /* use rts/cts protection */
|
||||||
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1691,6 +1694,7 @@ struct iwl_cfg iwl5350_agn_cfg = {
|
||||||
.use_bsm = false,
|
.use_bsm = false,
|
||||||
.ht_greenfield_support = true,
|
.ht_greenfield_support = true,
|
||||||
.led_compensation = 51,
|
.led_compensation = 51,
|
||||||
|
.use_rts_for_ht = true, /* use rts/cts protection */
|
||||||
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1714,6 +1718,7 @@ struct iwl_cfg iwl5150_agn_cfg = {
|
||||||
.use_bsm = false,
|
.use_bsm = false,
|
||||||
.ht_greenfield_support = true,
|
.ht_greenfield_support = true,
|
||||||
.led_compensation = 51,
|
.led_compensation = 51,
|
||||||
|
.use_rts_for_ht = true, /* use rts/cts protection */
|
||||||
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -2334,6 +2334,21 @@ static void iwl_ht_conf(struct iwl_priv *priv,
|
||||||
IWL_DEBUG_MAC80211(priv, "leave\n");
|
IWL_DEBUG_MAC80211(priv, "leave\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void iwl_set_no_assoc(struct iwl_priv *priv)
|
||||||
|
{
|
||||||
|
priv->assoc_id = 0;
|
||||||
|
iwl_led_disassociate(priv);
|
||||||
|
/*
|
||||||
|
* inform the ucode that there is no longer an
|
||||||
|
* association and that no more packets should be
|
||||||
|
* sent
|
||||||
|
*/
|
||||||
|
priv->staging_rxon.filter_flags &=
|
||||||
|
~RXON_FILTER_ASSOC_MSK;
|
||||||
|
priv->staging_rxon.assoc_id = 0;
|
||||||
|
iwlcore_commit_rxon(priv);
|
||||||
|
}
|
||||||
|
|
||||||
#define IWL_DELAY_NEXT_SCAN_AFTER_ASSOC (HZ*6)
|
#define IWL_DELAY_NEXT_SCAN_AFTER_ASSOC (HZ*6)
|
||||||
void iwl_bss_info_changed(struct ieee80211_hw *hw,
|
void iwl_bss_info_changed(struct ieee80211_hw *hw,
|
||||||
struct ieee80211_vif *vif,
|
struct ieee80211_vif *vif,
|
||||||
|
@ -2465,20 +2480,8 @@ void iwl_bss_info_changed(struct ieee80211_hw *hw,
|
||||||
IWL_DELAY_NEXT_SCAN_AFTER_ASSOC;
|
IWL_DELAY_NEXT_SCAN_AFTER_ASSOC;
|
||||||
if (!iwl_is_rfkill(priv))
|
if (!iwl_is_rfkill(priv))
|
||||||
priv->cfg->ops->lib->post_associate(priv);
|
priv->cfg->ops->lib->post_associate(priv);
|
||||||
} else {
|
} else
|
||||||
priv->assoc_id = 0;
|
iwl_set_no_assoc(priv);
|
||||||
iwl_led_disassociate(priv);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* inform the ucode that there is no longer an
|
|
||||||
* association and that no more packets should be
|
|
||||||
* send
|
|
||||||
*/
|
|
||||||
priv->staging_rxon.filter_flags &=
|
|
||||||
~RXON_FILTER_ASSOC_MSK;
|
|
||||||
priv->staging_rxon.assoc_id = 0;
|
|
||||||
iwlcore_commit_rxon(priv);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changes && iwl_is_associated(priv) && priv->assoc_id) {
|
if (changes && iwl_is_associated(priv) && priv->assoc_id) {
|
||||||
|
@ -2493,12 +2496,14 @@ void iwl_bss_info_changed(struct ieee80211_hw *hw,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((changes & BSS_CHANGED_BEACON_ENABLED) &&
|
if (changes & BSS_CHANGED_BEACON_ENABLED) {
|
||||||
vif->bss_conf.enable_beacon) {
|
if (vif->bss_conf.enable_beacon) {
|
||||||
memcpy(priv->staging_rxon.bssid_addr,
|
memcpy(priv->staging_rxon.bssid_addr,
|
||||||
bss_conf->bssid, ETH_ALEN);
|
bss_conf->bssid, ETH_ALEN);
|
||||||
memcpy(priv->bssid, bss_conf->bssid, ETH_ALEN);
|
memcpy(priv->bssid, bss_conf->bssid, ETH_ALEN);
|
||||||
iwlcore_config_ap(priv);
|
iwlcore_config_ap(priv);
|
||||||
|
} else
|
||||||
|
iwl_set_no_assoc(priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_unlock(&priv->mutex);
|
mutex_unlock(&priv->mutex);
|
||||||
|
|
|
@ -712,7 +712,7 @@ extern void iwl_txq_ctx_stop(struct iwl_priv *priv);
|
||||||
extern int iwl_queue_space(const struct iwl_queue *q);
|
extern int iwl_queue_space(const struct iwl_queue *q);
|
||||||
static inline int iwl_queue_used(const struct iwl_queue *q, int i)
|
static inline int iwl_queue_used(const struct iwl_queue *q, int i)
|
||||||
{
|
{
|
||||||
return q->write_ptr > q->read_ptr ?
|
return q->write_ptr >= q->read_ptr ?
|
||||||
(i >= q->read_ptr && i < q->write_ptr) :
|
(i >= q->read_ptr && i < q->write_ptr) :
|
||||||
!(i < q->read_ptr && i >= q->write_ptr);
|
!(i < q->read_ptr && i >= q->write_ptr);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,29 @@
|
||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright(c) 2009 - 2010 Intel Corporation. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of version 2 of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
|
||||||
|
*
|
||||||
|
* The full GNU General Public License is included in this distribution in the
|
||||||
|
* file called LICENSE.
|
||||||
|
*
|
||||||
|
* Contact Information:
|
||||||
|
* Intel Linux Wireless <ilw@linux.intel.com>
|
||||||
|
* Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
|
||||||
|
*
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
|
||||||
/* sparse doesn't like tracepoint macros */
|
/* sparse doesn't like tracepoint macros */
|
||||||
|
|
|
@ -1,3 +1,29 @@
|
||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright(c) 2009 - 2010 Intel Corporation. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of version 2 of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
|
||||||
|
*
|
||||||
|
* The full GNU General Public License is included in this distribution in the
|
||||||
|
* file called LICENSE.
|
||||||
|
*
|
||||||
|
* Contact Information:
|
||||||
|
* Intel Linux Wireless <ilw@linux.intel.com>
|
||||||
|
* Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
|
||||||
|
*
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
#if !defined(__IWLWIFI_DEVICE_TRACE) || defined(TRACE_HEADER_MULTI_READ)
|
#if !defined(__IWLWIFI_DEVICE_TRACE) || defined(TRACE_HEADER_MULTI_READ)
|
||||||
#define __IWLWIFI_DEVICE_TRACE
|
#define __IWLWIFI_DEVICE_TRACE
|
||||||
|
|
||||||
|
|
|
@ -973,6 +973,10 @@ int iwm_send_pmkid_update(struct iwm_priv *iwm,
|
||||||
|
|
||||||
memset(&update, 0, sizeof(struct iwm_umac_pmkid_update));
|
memset(&update, 0, sizeof(struct iwm_umac_pmkid_update));
|
||||||
|
|
||||||
|
update.hdr.oid = UMAC_WIFI_IF_CMD_PMKID_UPDATE;
|
||||||
|
update.hdr.buf_size = cpu_to_le16(sizeof(struct iwm_umac_pmkid_update) -
|
||||||
|
sizeof(struct iwm_umac_wifi_if));
|
||||||
|
|
||||||
update.command = cpu_to_le32(command);
|
update.command = cpu_to_le32(command);
|
||||||
if (pmksa->bssid)
|
if (pmksa->bssid)
|
||||||
memcpy(&update.bssid, pmksa->bssid, ETH_ALEN);
|
memcpy(&update.bssid, pmksa->bssid, ETH_ALEN);
|
||||||
|
|
|
@ -463,6 +463,7 @@ struct iwm_umac_cmd_stop_resume_tx {
|
||||||
#define IWM_CMD_PMKID_FLUSH 3
|
#define IWM_CMD_PMKID_FLUSH 3
|
||||||
|
|
||||||
struct iwm_umac_pmkid_update {
|
struct iwm_umac_pmkid_update {
|
||||||
|
struct iwm_umac_wifi_if hdr;
|
||||||
__le32 command;
|
__le32 command;
|
||||||
u8 bssid[ETH_ALEN];
|
u8 bssid[ETH_ALEN];
|
||||||
__le16 reserved;
|
__le16 reserved;
|
||||||
|
|
|
@ -197,6 +197,14 @@ static void p54p_check_rx_ring(struct ieee80211_hw *dev, u32 *index,
|
||||||
i %= ring_limit;
|
i %= ring_limit;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (unlikely(len > priv->common.rx_mtu)) {
|
||||||
|
if (net_ratelimit())
|
||||||
|
dev_err(&priv->pdev->dev, "rx'd frame size "
|
||||||
|
"exceeds length threshold.\n");
|
||||||
|
|
||||||
|
len = priv->common.rx_mtu;
|
||||||
|
}
|
||||||
skb_put(skb, len);
|
skb_put(skb, len);
|
||||||
|
|
||||||
if (p54_rx(dev, skb)) {
|
if (p54_rx(dev, skb)) {
|
||||||
|
|
|
@ -62,6 +62,7 @@ static struct usb_device_id usb_ids[] = {
|
||||||
{ USB_DEVICE(0x6891, 0xa727), .driver_info = DEVICE_ZD1211 },
|
{ USB_DEVICE(0x6891, 0xa727), .driver_info = DEVICE_ZD1211 },
|
||||||
/* ZD1211B */
|
/* ZD1211B */
|
||||||
{ USB_DEVICE(0x0053, 0x5301), .driver_info = DEVICE_ZD1211B },
|
{ USB_DEVICE(0x0053, 0x5301), .driver_info = DEVICE_ZD1211B },
|
||||||
|
{ USB_DEVICE(0x0409, 0x0248), .driver_info = DEVICE_ZD1211B },
|
||||||
{ USB_DEVICE(0x0411, 0x00da), .driver_info = DEVICE_ZD1211B },
|
{ USB_DEVICE(0x0411, 0x00da), .driver_info = DEVICE_ZD1211B },
|
||||||
{ USB_DEVICE(0x0471, 0x1236), .driver_info = DEVICE_ZD1211B },
|
{ USB_DEVICE(0x0471, 0x1236), .driver_info = DEVICE_ZD1211B },
|
||||||
{ USB_DEVICE(0x0471, 0x1237), .driver_info = DEVICE_ZD1211B },
|
{ USB_DEVICE(0x0471, 0x1237), .driver_info = DEVICE_ZD1211B },
|
||||||
|
|
|
@ -1389,6 +1389,9 @@ static int ieee80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *dev,
|
||||||
struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
|
struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
|
||||||
struct ieee80211_conf *conf = &local->hw.conf;
|
struct ieee80211_conf *conf = &local->hw.conf;
|
||||||
|
|
||||||
|
if (sdata->vif.type != NL80211_IFTYPE_STATION)
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS))
|
if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS))
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
|
|
|
@ -684,21 +684,25 @@ static u16 ieee80211_monitor_select_queue(struct net_device *dev,
|
||||||
struct ieee80211_local *local = sdata->local;
|
struct ieee80211_local *local = sdata->local;
|
||||||
struct ieee80211_hdr *hdr;
|
struct ieee80211_hdr *hdr;
|
||||||
struct ieee80211_radiotap_header *rtap = (void *)skb->data;
|
struct ieee80211_radiotap_header *rtap = (void *)skb->data;
|
||||||
|
u8 *p;
|
||||||
|
|
||||||
if (local->hw.queues < 4)
|
if (local->hw.queues < 4)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (skb->len < 4 ||
|
if (skb->len < 4 ||
|
||||||
skb->len < rtap->it_len + 2 /* frame control */)
|
skb->len < le16_to_cpu(rtap->it_len) + 2 /* frame control */)
|
||||||
return 0; /* doesn't matter, frame will be dropped */
|
return 0; /* doesn't matter, frame will be dropped */
|
||||||
|
|
||||||
hdr = (void *)((u8 *)skb->data + rtap->it_len);
|
hdr = (void *)((u8 *)skb->data + le16_to_cpu(rtap->it_len));
|
||||||
|
|
||||||
if (!ieee80211_is_data(hdr->frame_control)) {
|
if (!ieee80211_is_data_qos(hdr->frame_control)) {
|
||||||
skb->priority = 7;
|
skb->priority = 7;
|
||||||
return ieee802_1d_to_ac[skb->priority];
|
return ieee802_1d_to_ac[skb->priority];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
p = ieee80211_get_qos_ctl(hdr);
|
||||||
|
skb->priority = *p & IEEE80211_QOS_CTL_TAG1D_MASK;
|
||||||
|
|
||||||
return ieee80211_downgrade_queue(local, skb);
|
return ieee80211_downgrade_queue(local, skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1478,7 +1478,9 @@ static void ieee80211_sta_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
|
||||||
rma = ieee80211_rx_mgmt_disassoc(sdata, mgmt, skb->len);
|
rma = ieee80211_rx_mgmt_disassoc(sdata, mgmt, skb->len);
|
||||||
break;
|
break;
|
||||||
case IEEE80211_STYPE_ACTION:
|
case IEEE80211_STYPE_ACTION:
|
||||||
/* XXX: differentiate, can only happen for CSA now! */
|
if (mgmt->u.action.category != WLAN_CATEGORY_SPECTRUM_MGMT)
|
||||||
|
break;
|
||||||
|
|
||||||
ieee80211_sta_process_chanswitch(sdata,
|
ieee80211_sta_process_chanswitch(sdata,
|
||||||
&mgmt->u.action.u.chan_switch.sw_elem,
|
&mgmt->u.action.u.chan_switch.sw_elem,
|
||||||
(void *)ifmgd->associated->priv);
|
(void *)ifmgd->associated->priv);
|
||||||
|
|
|
@ -190,7 +190,7 @@ static void rate_control_pid_sample(struct rc_pid_info *pinfo,
|
||||||
rate_control_pid_normalize(pinfo, sband->n_bitrates);
|
rate_control_pid_normalize(pinfo, sband->n_bitrates);
|
||||||
|
|
||||||
/* Compute the proportional, integral and derivative errors. */
|
/* Compute the proportional, integral and derivative errors. */
|
||||||
err_prop = (pinfo->target << RC_PID_ARITH_SHIFT) - pf;
|
err_prop = (pinfo->target - pf) << RC_PID_ARITH_SHIFT;
|
||||||
|
|
||||||
err_avg = spinfo->err_avg_sc >> pinfo->smoothing_shift;
|
err_avg = spinfo->err_avg_sc >> pinfo->smoothing_shift;
|
||||||
spinfo->err_avg_sc = spinfo->err_avg_sc - err_avg + err_prop;
|
spinfo->err_avg_sc = spinfo->err_avg_sc - err_avg + err_prop;
|
||||||
|
|
|
@ -1946,6 +1946,10 @@ ieee80211_rx_h_action(struct ieee80211_rx_data *rx)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
/* do not process rejected action frames */
|
||||||
|
if (mgmt->u.action.category & 0x80)
|
||||||
|
return RX_DROP_MONITOR;
|
||||||
|
|
||||||
return RX_CONTINUE;
|
return RX_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -746,9 +746,9 @@ static int cfg80211_netdev_notifier_call(struct notifier_block * nb,
|
||||||
mutex_unlock(&rdev->devlist_mtx);
|
mutex_unlock(&rdev->devlist_mtx);
|
||||||
dev_put(dev);
|
dev_put(dev);
|
||||||
}
|
}
|
||||||
#ifdef CONFIG_CFG80211_WEXT
|
|
||||||
cfg80211_lock_rdev(rdev);
|
cfg80211_lock_rdev(rdev);
|
||||||
mutex_lock(&rdev->devlist_mtx);
|
mutex_lock(&rdev->devlist_mtx);
|
||||||
|
#ifdef CONFIG_CFG80211_WEXT
|
||||||
wdev_lock(wdev);
|
wdev_lock(wdev);
|
||||||
switch (wdev->iftype) {
|
switch (wdev->iftype) {
|
||||||
case NL80211_IFTYPE_ADHOC:
|
case NL80211_IFTYPE_ADHOC:
|
||||||
|
@ -761,10 +761,10 @@ static int cfg80211_netdev_notifier_call(struct notifier_block * nb,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
wdev_unlock(wdev);
|
wdev_unlock(wdev);
|
||||||
|
#endif
|
||||||
rdev->opencount++;
|
rdev->opencount++;
|
||||||
mutex_unlock(&rdev->devlist_mtx);
|
mutex_unlock(&rdev->devlist_mtx);
|
||||||
cfg80211_unlock_rdev(rdev);
|
cfg80211_unlock_rdev(rdev);
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
case NETDEV_UNREGISTER:
|
case NETDEV_UNREGISTER:
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -656,6 +656,7 @@ void __cfg80211_disconnected(struct net_device *dev, const u8 *ie,
|
||||||
memset(&wrqu, 0, sizeof(wrqu));
|
memset(&wrqu, 0, sizeof(wrqu));
|
||||||
wrqu.ap_addr.sa_family = ARPHRD_ETHER;
|
wrqu.ap_addr.sa_family = ARPHRD_ETHER;
|
||||||
wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL);
|
wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL);
|
||||||
|
wdev->wext.connect.ssid_len = 0;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue