Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless into for-davem
This commit is contained in:
Коммит
fb14ca438c
|
@ -990,29 +990,16 @@ static int iwl_trans_tx_stop(struct iwl_trans *trans)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void iwl_trans_pcie_disable_sync_irq(struct iwl_trans *trans)
|
static void iwl_trans_pcie_stop_device(struct iwl_trans *trans)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct iwl_trans_pcie *trans_pcie =
|
struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
|
||||||
IWL_TRANS_GET_PCIE_TRANS(trans);
|
|
||||||
|
|
||||||
|
/* tell the device to stop sending interrupts */
|
||||||
spin_lock_irqsave(&trans->shrd->lock, flags);
|
spin_lock_irqsave(&trans->shrd->lock, flags);
|
||||||
iwl_disable_interrupts(trans);
|
iwl_disable_interrupts(trans);
|
||||||
spin_unlock_irqrestore(&trans->shrd->lock, flags);
|
spin_unlock_irqrestore(&trans->shrd->lock, flags);
|
||||||
|
|
||||||
/* wait to make sure we flush pending tasklet*/
|
|
||||||
synchronize_irq(bus(trans)->irq);
|
|
||||||
tasklet_kill(&trans_pcie->irq_tasklet);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void iwl_trans_pcie_stop_device(struct iwl_trans *trans)
|
|
||||||
{
|
|
||||||
/* stop and reset the on-board processor */
|
|
||||||
iwl_write32(bus(trans), CSR_RESET, CSR_RESET_REG_FLAG_NEVO_RESET);
|
|
||||||
|
|
||||||
/* tell the device to stop sending interrupts */
|
|
||||||
iwl_trans_pcie_disable_sync_irq(trans);
|
|
||||||
|
|
||||||
/* device going down, Stop using ICT table */
|
/* device going down, Stop using ICT table */
|
||||||
iwl_disable_ict(trans);
|
iwl_disable_ict(trans);
|
||||||
|
|
||||||
|
@ -1039,6 +1026,20 @@ static void iwl_trans_pcie_stop_device(struct iwl_trans *trans)
|
||||||
|
|
||||||
/* Stop the device, and put it in low power state */
|
/* Stop the device, and put it in low power state */
|
||||||
iwl_apm_stop(priv(trans));
|
iwl_apm_stop(priv(trans));
|
||||||
|
|
||||||
|
/* Upon stop, the APM issues an interrupt if HW RF kill is set.
|
||||||
|
* Clean again the interrupt here
|
||||||
|
*/
|
||||||
|
spin_lock_irqsave(&trans->shrd->lock, flags);
|
||||||
|
iwl_disable_interrupts(trans);
|
||||||
|
spin_unlock_irqrestore(&trans->shrd->lock, flags);
|
||||||
|
|
||||||
|
/* wait to make sure we flush pending tasklet*/
|
||||||
|
synchronize_irq(bus(trans)->irq);
|
||||||
|
tasklet_kill(&trans_pcie->irq_tasklet);
|
||||||
|
|
||||||
|
/* stop and reset the on-board processor */
|
||||||
|
iwl_write32(bus(trans), CSR_RESET, CSR_RESET_REG_FLAG_NEVO_RESET);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
|
static int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
|
||||||
|
|
|
@ -634,7 +634,7 @@ static int lbs_ret_scan(struct lbs_private *priv, unsigned long dummy,
|
||||||
if (channel &&
|
if (channel &&
|
||||||
!(channel->flags & IEEE80211_CHAN_DISABLED))
|
!(channel->flags & IEEE80211_CHAN_DISABLED))
|
||||||
cfg80211_inform_bss(wiphy, channel,
|
cfg80211_inform_bss(wiphy, channel,
|
||||||
bssid, le64_to_cpu(*(__le64 *)tsfdesc),
|
bssid, get_unaligned_le64(tsfdesc),
|
||||||
capa, intvl, ie, ielen,
|
capa, intvl, ie, ielen,
|
||||||
LBS_SCAN_RSSI_TO_MBM(rssi),
|
LBS_SCAN_RSSI_TO_MBM(rssi),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
|
|
|
@ -819,8 +819,10 @@ mwifiex_scan_setup_scan_config(struct mwifiex_private *priv,
|
||||||
wildcard_ssid_tlv->header.len = cpu_to_le16(
|
wildcard_ssid_tlv->header.len = cpu_to_le16(
|
||||||
(u16) (ssid_len + sizeof(wildcard_ssid_tlv->
|
(u16) (ssid_len + sizeof(wildcard_ssid_tlv->
|
||||||
max_ssid_length)));
|
max_ssid_length)));
|
||||||
wildcard_ssid_tlv->max_ssid_length =
|
|
||||||
user_scan_in->ssid_list[ssid_idx].max_len;
|
/* max_ssid_length = 0 tells firmware to perform
|
||||||
|
specific scan for the SSID filled */
|
||||||
|
wildcard_ssid_tlv->max_ssid_length = 0;
|
||||||
|
|
||||||
memcpy(wildcard_ssid_tlv->ssid,
|
memcpy(wildcard_ssid_tlv->ssid,
|
||||||
user_scan_in->ssid_list[ssid_idx].ssid,
|
user_scan_in->ssid_list[ssid_idx].ssid,
|
||||||
|
|
|
@ -2288,6 +2288,7 @@ void ieee80211_sta_quiesce(struct ieee80211_sub_if_data *sdata)
|
||||||
|
|
||||||
cancel_work_sync(&ifmgd->request_smps_work);
|
cancel_work_sync(&ifmgd->request_smps_work);
|
||||||
|
|
||||||
|
cancel_work_sync(&ifmgd->monitor_work);
|
||||||
cancel_work_sync(&ifmgd->beacon_connection_loss_work);
|
cancel_work_sync(&ifmgd->beacon_connection_loss_work);
|
||||||
if (del_timer_sync(&ifmgd->timer))
|
if (del_timer_sync(&ifmgd->timer))
|
||||||
set_bit(TMR_RUNNING_TIMER, &ifmgd->timers_running);
|
set_bit(TMR_RUNNING_TIMER, &ifmgd->timers_running);
|
||||||
|
@ -2296,7 +2297,6 @@ void ieee80211_sta_quiesce(struct ieee80211_sub_if_data *sdata)
|
||||||
if (del_timer_sync(&ifmgd->chswitch_timer))
|
if (del_timer_sync(&ifmgd->chswitch_timer))
|
||||||
set_bit(TMR_RUNNING_CHANSW, &ifmgd->timers_running);
|
set_bit(TMR_RUNNING_CHANSW, &ifmgd->timers_running);
|
||||||
|
|
||||||
cancel_work_sync(&ifmgd->monitor_work);
|
|
||||||
/* these will just be re-established on connection */
|
/* these will just be re-established on connection */
|
||||||
del_timer_sync(&ifmgd->conn_mon_timer);
|
del_timer_sync(&ifmgd->conn_mon_timer);
|
||||||
del_timer_sync(&ifmgd->bcn_mon_timer);
|
del_timer_sync(&ifmgd->bcn_mon_timer);
|
||||||
|
|
|
@ -141,8 +141,9 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
|
||||||
pos++;
|
pos++;
|
||||||
|
|
||||||
/* IEEE80211_RADIOTAP_RATE */
|
/* IEEE80211_RADIOTAP_RATE */
|
||||||
if (status->flag & RX_FLAG_HT) {
|
if (!rate || status->flag & RX_FLAG_HT) {
|
||||||
/*
|
/*
|
||||||
|
* Without rate information don't add it. If we have,
|
||||||
* MCS information is a separate field in radiotap,
|
* MCS information is a separate field in radiotap,
|
||||||
* added below. The byte here is needed as padding
|
* added below. The byte here is needed as padding
|
||||||
* for the channel though, so initialise it to 0.
|
* for the channel though, so initialise it to 0.
|
||||||
|
@ -163,12 +164,14 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
|
||||||
else if (status->flag & RX_FLAG_HT)
|
else if (status->flag & RX_FLAG_HT)
|
||||||
put_unaligned_le16(IEEE80211_CHAN_DYN | IEEE80211_CHAN_2GHZ,
|
put_unaligned_le16(IEEE80211_CHAN_DYN | IEEE80211_CHAN_2GHZ,
|
||||||
pos);
|
pos);
|
||||||
else if (rate->flags & IEEE80211_RATE_ERP_G)
|
else if (rate && rate->flags & IEEE80211_RATE_ERP_G)
|
||||||
put_unaligned_le16(IEEE80211_CHAN_OFDM | IEEE80211_CHAN_2GHZ,
|
put_unaligned_le16(IEEE80211_CHAN_OFDM | IEEE80211_CHAN_2GHZ,
|
||||||
pos);
|
pos);
|
||||||
else
|
else if (rate)
|
||||||
put_unaligned_le16(IEEE80211_CHAN_CCK | IEEE80211_CHAN_2GHZ,
|
put_unaligned_le16(IEEE80211_CHAN_CCK | IEEE80211_CHAN_2GHZ,
|
||||||
pos);
|
pos);
|
||||||
|
else
|
||||||
|
put_unaligned_le16(IEEE80211_CHAN_2GHZ, pos);
|
||||||
pos += 2;
|
pos += 2;
|
||||||
|
|
||||||
/* IEEE80211_RADIOTAP_DBM_ANTSIGNAL */
|
/* IEEE80211_RADIOTAP_DBM_ANTSIGNAL */
|
||||||
|
|
|
@ -881,6 +881,8 @@ struct sk_buff *ieee80211_build_probe_req(struct ieee80211_sub_if_data *sdata,
|
||||||
skb = ieee80211_probereq_get(&local->hw, &sdata->vif,
|
skb = ieee80211_probereq_get(&local->hw, &sdata->vif,
|
||||||
ssid, ssid_len,
|
ssid, ssid_len,
|
||||||
buf, buf_len);
|
buf, buf_len);
|
||||||
|
if (!skb)
|
||||||
|
goto out;
|
||||||
|
|
||||||
if (dst) {
|
if (dst) {
|
||||||
mgmt = (struct ieee80211_mgmt *) skb->data;
|
mgmt = (struct ieee80211_mgmt *) skb->data;
|
||||||
|
@ -889,6 +891,8 @@ struct sk_buff *ieee80211_build_probe_req(struct ieee80211_sub_if_data *sdata,
|
||||||
}
|
}
|
||||||
|
|
||||||
IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT;
|
IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT;
|
||||||
|
|
||||||
|
out:
|
||||||
kfree(buf);
|
kfree(buf);
|
||||||
|
|
||||||
return skb;
|
return skb;
|
||||||
|
|
|
@ -2265,6 +2265,9 @@ void /* __init_or_exit */ regulatory_exit(void)
|
||||||
|
|
||||||
kfree(last_request);
|
kfree(last_request);
|
||||||
|
|
||||||
|
last_request = NULL;
|
||||||
|
dev_set_uevent_suppress(®_pdev->dev, true);
|
||||||
|
|
||||||
platform_device_unregister(reg_pdev);
|
platform_device_unregister(reg_pdev);
|
||||||
|
|
||||||
spin_lock_bh(®_pending_beacons_lock);
|
spin_lock_bh(®_pending_beacons_lock);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче