Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
This commit is contained in:
commit
7dd30d447b
@ -1251,7 +1251,6 @@ ATHEROS ATH5K WIRELESS DRIVER
|
||||
M: Jiri Slaby <jirislaby@gmail.com>
|
||||
M: Nick Kossifidis <mickflemm@gmail.com>
|
||||
M: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
|
||||
M: Bob Copeland <me@bobcopeland.com>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
L: ath5k-devel@lists.ath5k.org
|
||||
W: http://wireless.kernel.org/en/users/Drivers/ath5k
|
||||
|
@ -20,7 +20,6 @@
|
||||
|
||||
/* Common calibration code */
|
||||
|
||||
#define ATH9K_NF_TOO_HIGH -60
|
||||
|
||||
static int16_t ath9k_hw_get_nf_hist_mid(int16_t *nfCalBuffer)
|
||||
{
|
||||
@ -346,10 +345,10 @@ static void ath9k_hw_nf_sanitize(struct ath_hw *ah, s16 *nf)
|
||||
"NF calibrated [%s] [chain %d] is %d\n",
|
||||
(i >= 3 ? "ext" : "ctl"), i % 3, nf[i]);
|
||||
|
||||
if (nf[i] > ATH9K_NF_TOO_HIGH) {
|
||||
if (nf[i] > limit->max) {
|
||||
ath_dbg(common, CALIBRATE,
|
||||
"NF[%d] (%d) > MAX (%d), correcting to MAX\n",
|
||||
i, nf[i], ATH9K_NF_TOO_HIGH);
|
||||
i, nf[i], limit->max);
|
||||
nf[i] = limit->max;
|
||||
} else if (nf[i] < limit->min) {
|
||||
ath_dbg(common, CALIBRATE,
|
||||
|
@ -680,7 +680,7 @@ void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
|
||||
hw->queues = 4;
|
||||
hw->max_rates = 4;
|
||||
hw->channel_change_time = 5000;
|
||||
hw->max_listen_interval = 10;
|
||||
hw->max_listen_interval = 1;
|
||||
hw->max_rate_tries = 10;
|
||||
hw->sta_data_size = sizeof(struct ath_node);
|
||||
hw->vif_data_size = sizeof(struct ath_vif);
|
||||
|
@ -1913,13 +1913,13 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
|
||||
if (sc->rx.frag) {
|
||||
int space = skb->len - skb_tailroom(hdr_skb);
|
||||
|
||||
sc->rx.frag = NULL;
|
||||
|
||||
if (pskb_expand_head(hdr_skb, 0, space, GFP_ATOMIC) < 0) {
|
||||
dev_kfree_skb(skb);
|
||||
goto requeue_drop_frag;
|
||||
}
|
||||
|
||||
sc->rx.frag = NULL;
|
||||
|
||||
skb_copy_from_linear_data(skb, skb_put(hdr_skb, skb->len),
|
||||
skb->len);
|
||||
dev_kfree_skb_any(skb);
|
||||
|
@ -2673,8 +2673,6 @@ il3945_bg_restart(struct work_struct *data)
|
||||
|
||||
if (test_and_clear_bit(S_FW_ERROR, &il->status)) {
|
||||
mutex_lock(&il->mutex);
|
||||
/* FIXME: vif can be dereferenced */
|
||||
il->vif = NULL;
|
||||
il->is_open = 0;
|
||||
mutex_unlock(&il->mutex);
|
||||
il3945_down(il);
|
||||
|
@ -5652,8 +5652,6 @@ il4965_bg_restart(struct work_struct *data)
|
||||
|
||||
if (test_and_clear_bit(S_FW_ERROR, &il->status)) {
|
||||
mutex_lock(&il->mutex);
|
||||
/* FIXME: do we dereference vif without mutex locked ? */
|
||||
il->vif = NULL;
|
||||
il->is_open = 0;
|
||||
|
||||
__il4965_down(il);
|
||||
|
@ -4508,6 +4508,7 @@ il_mac_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
|
||||
{
|
||||
struct il_priv *il = hw->priv;
|
||||
int err;
|
||||
bool reset;
|
||||
|
||||
mutex_lock(&il->mutex);
|
||||
D_MAC80211("enter: type %d, addr %pM\n", vif->type, vif->addr);
|
||||
@ -4518,7 +4519,12 @@ il_mac_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (il->vif) {
|
||||
/*
|
||||
* We do not support multiple virtual interfaces, but on hardware reset
|
||||
* we have to add the same interface again.
|
||||
*/
|
||||
reset = (il->vif == vif);
|
||||
if (il->vif && !reset) {
|
||||
err = -EOPNOTSUPP;
|
||||
goto out;
|
||||
}
|
||||
@ -4528,8 +4534,11 @@ il_mac_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
|
||||
|
||||
err = il_set_mode(il);
|
||||
if (err) {
|
||||
il->vif = NULL;
|
||||
il->iw_mode = NL80211_IFTYPE_STATION;
|
||||
IL_WARN("Fail to set mode %d\n", vif->type);
|
||||
if (!reset) {
|
||||
il->vif = NULL;
|
||||
il->iw_mode = NL80211_IFTYPE_STATION;
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
@ -5279,9 +5288,9 @@ il_mac_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
D_MAC80211("BSSID %pM\n", bss_conf->bssid);
|
||||
|
||||
/*
|
||||
* If there is currently a HW scan going on in the
|
||||
* background then we need to cancel it else the RXON
|
||||
* below/in post_associate will fail.
|
||||
* If there is currently a HW scan going on in the background,
|
||||
* then we need to cancel it, otherwise sometimes we are not
|
||||
* able to authenticate (FIXME: why ?)
|
||||
*/
|
||||
if (il_scan_cancel_timeout(il, 100)) {
|
||||
D_MAC80211("leave - scan abort failed\n");
|
||||
@ -5290,14 +5299,10 @@ il_mac_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
}
|
||||
|
||||
/* mac80211 only sets assoc when in STATION mode */
|
||||
if (vif->type == NL80211_IFTYPE_ADHOC || bss_conf->assoc) {
|
||||
memcpy(il->staging.bssid_addr, bss_conf->bssid,
|
||||
ETH_ALEN);
|
||||
memcpy(il->staging.bssid_addr, bss_conf->bssid, ETH_ALEN);
|
||||
|
||||
/* currently needed in a few places */
|
||||
memcpy(il->bssid, bss_conf->bssid, ETH_ALEN);
|
||||
} else
|
||||
il->staging.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
|
||||
/* FIXME: currently needed in a few places */
|
||||
memcpy(il->bssid, bss_conf->bssid, ETH_ALEN);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -163,7 +163,13 @@ static bool rt2800usb_tx_sta_fifo_read_completed(struct rt2x00_dev *rt2x00dev,
|
||||
|
||||
/* Reschedule urb to read TX status again instantly */
|
||||
return true;
|
||||
} else if (rt2800usb_txstatus_pending(rt2x00dev)) {
|
||||
}
|
||||
|
||||
/* Check if there is any entry that timedout waiting on TX status */
|
||||
if (rt2800usb_txstatus_timeout(rt2x00dev))
|
||||
queue_work(rt2x00dev->workqueue, &rt2x00dev->txdone_work);
|
||||
|
||||
if (rt2800usb_txstatus_pending(rt2x00dev)) {
|
||||
/* Read register after 250 us */
|
||||
hrtimer_start(&rt2x00dev->txstatus_timer, ktime_set(0, 250000),
|
||||
HRTIMER_MODE_REL);
|
||||
@ -178,7 +184,7 @@ static bool rt2800usb_tx_sta_fifo_read_completed(struct rt2x00_dev *rt2x00dev,
|
||||
* here again if status reading is needed.
|
||||
*/
|
||||
if (rt2800usb_txstatus_pending(rt2x00dev) &&
|
||||
test_and_set_bit(TX_STATUS_READING, &rt2x00dev->flags))
|
||||
!test_and_set_bit(TX_STATUS_READING, &rt2x00dev->flags))
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
|
@ -1893,7 +1893,7 @@ void rtl92c_phy_set_io(struct ieee80211_hw *hw)
|
||||
break;
|
||||
case IO_CMD_PAUSE_DM_BY_SCAN:
|
||||
rtlphy->initgain_backup.xaagccore1 = dm_digtable.cur_igvalue;
|
||||
dm_digtable.cur_igvalue = 0x17;
|
||||
dm_digtable.cur_igvalue = 0x37;
|
||||
rtl92c_dm_write_dig(hw);
|
||||
break;
|
||||
default:
|
||||
|
@ -3077,7 +3077,7 @@ static void rtl92d_phy_set_io(struct ieee80211_hw *hw)
|
||||
break;
|
||||
case IO_CMD_PAUSE_DM_BY_SCAN:
|
||||
rtlphy->initgain_backup.xaagccore1 = de_digtable.cur_igvalue;
|
||||
de_digtable.cur_igvalue = 0x17;
|
||||
de_digtable.cur_igvalue = 0x37;
|
||||
rtl92d_dm_write_dig(hw);
|
||||
break;
|
||||
default:
|
||||
|
@ -620,8 +620,10 @@ struct sta_bss_parameters {
|
||||
* @llid: mesh local link id
|
||||
* @plid: mesh peer link id
|
||||
* @plink_state: mesh peer link state
|
||||
* @signal: signal strength of last received packet in dBm
|
||||
* @signal_avg: signal strength average in dBm
|
||||
* @signal: the signal strength, type depends on the wiphy's signal_type
|
||||
NOTE: For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.
|
||||
* @signal_avg: avg signal strength, type depends on the wiphy's signal_type
|
||||
NOTE: For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.
|
||||
* @txrate: current unicast bitrate from this station
|
||||
* @rxrate: current unicast bitrate to this station
|
||||
* @rx_packets: packets received from this station
|
||||
|
@ -49,6 +49,8 @@ static void ieee80211_free_tid_rx(struct rcu_head *h)
|
||||
container_of(h, struct tid_ampdu_rx, rcu_head);
|
||||
int i;
|
||||
|
||||
del_timer_sync(&tid_rx->reorder_timer);
|
||||
|
||||
for (i = 0; i < tid_rx->buf_size; i++)
|
||||
dev_kfree_skb(tid_rx->reorder_buf[i]);
|
||||
kfree(tid_rx->reorder_buf);
|
||||
@ -91,7 +93,6 @@ void ___ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid,
|
||||
tid, WLAN_BACK_RECIPIENT, reason);
|
||||
|
||||
del_timer_sync(&tid_rx->session_timer);
|
||||
del_timer_sync(&tid_rx->reorder_timer);
|
||||
|
||||
call_rcu(&tid_rx->rcu_head, ieee80211_free_tid_rx);
|
||||
}
|
||||
|
@ -102,9 +102,6 @@ int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
|
||||
|
||||
might_sleep();
|
||||
|
||||
/* If this off-channel logic ever changes, ieee80211_on_oper_channel
|
||||
* may need to change as well.
|
||||
*/
|
||||
offchannel_flag = local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL;
|
||||
if (local->scan_channel) {
|
||||
chan = local->scan_channel;
|
||||
|
@ -2386,7 +2386,9 @@ static bool nl80211_put_sta_rate(struct sk_buff *msg, struct rate_info *info,
|
||||
}
|
||||
|
||||
static int nl80211_send_station(struct sk_buff *msg, u32 pid, u32 seq,
|
||||
int flags, struct net_device *dev,
|
||||
int flags,
|
||||
struct cfg80211_registered_device *rdev,
|
||||
struct net_device *dev,
|
||||
const u8 *mac_addr, struct station_info *sinfo)
|
||||
{
|
||||
void *hdr;
|
||||
@ -2425,12 +2427,18 @@ static int nl80211_send_station(struct sk_buff *msg, u32 pid, u32 seq,
|
||||
if (sinfo->filled & STATION_INFO_PLINK_STATE)
|
||||
NLA_PUT_U8(msg, NL80211_STA_INFO_PLINK_STATE,
|
||||
sinfo->plink_state);
|
||||
if (sinfo->filled & STATION_INFO_SIGNAL)
|
||||
NLA_PUT_U8(msg, NL80211_STA_INFO_SIGNAL,
|
||||
sinfo->signal);
|
||||
if (sinfo->filled & STATION_INFO_SIGNAL_AVG)
|
||||
NLA_PUT_U8(msg, NL80211_STA_INFO_SIGNAL_AVG,
|
||||
sinfo->signal_avg);
|
||||
switch (rdev->wiphy.signal_type) {
|
||||
case CFG80211_SIGNAL_TYPE_MBM:
|
||||
if (sinfo->filled & STATION_INFO_SIGNAL)
|
||||
NLA_PUT_U8(msg, NL80211_STA_INFO_SIGNAL,
|
||||
sinfo->signal);
|
||||
if (sinfo->filled & STATION_INFO_SIGNAL_AVG)
|
||||
NLA_PUT_U8(msg, NL80211_STA_INFO_SIGNAL_AVG,
|
||||
sinfo->signal_avg);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (sinfo->filled & STATION_INFO_TX_BITRATE) {
|
||||
if (!nl80211_put_sta_rate(msg, &sinfo->txrate,
|
||||
NL80211_STA_INFO_TX_BITRATE))
|
||||
@ -2523,7 +2531,7 @@ static int nl80211_dump_station(struct sk_buff *skb,
|
||||
if (nl80211_send_station(skb,
|
||||
NETLINK_CB(cb->skb).pid,
|
||||
cb->nlh->nlmsg_seq, NLM_F_MULTI,
|
||||
netdev, mac_addr,
|
||||
dev, netdev, mac_addr,
|
||||
&sinfo) < 0)
|
||||
goto out;
|
||||
|
||||
@ -2568,7 +2576,7 @@ static int nl80211_get_station(struct sk_buff *skb, struct genl_info *info)
|
||||
return -ENOMEM;
|
||||
|
||||
if (nl80211_send_station(msg, info->snd_pid, info->snd_seq, 0,
|
||||
dev, mac_addr, &sinfo) < 0) {
|
||||
rdev, dev, mac_addr, &sinfo) < 0) {
|
||||
nlmsg_free(msg);
|
||||
return -ENOBUFS;
|
||||
}
|
||||
@ -7596,7 +7604,8 @@ void nl80211_send_sta_event(struct cfg80211_registered_device *rdev,
|
||||
if (!msg)
|
||||
return;
|
||||
|
||||
if (nl80211_send_station(msg, 0, 0, 0, dev, mac_addr, sinfo) < 0) {
|
||||
if (nl80211_send_station(msg, 0, 0, 0,
|
||||
rdev, dev, mac_addr, sinfo) < 0) {
|
||||
nlmsg_free(msg);
|
||||
return;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user