Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
This commit is contained in:
commit
64db880e74
|
@ -169,10 +169,8 @@ int bcma_bus_register(struct bcma_bus *bus)
|
||||||
err = bcma_sprom_get(bus);
|
err = bcma_sprom_get(bus);
|
||||||
if (err == -ENOENT) {
|
if (err == -ENOENT) {
|
||||||
pr_err("No SPROM available\n");
|
pr_err("No SPROM available\n");
|
||||||
} else if (err) {
|
} else if (err)
|
||||||
pr_err("Failed to get SPROM: %d\n", err);
|
pr_err("Failed to get SPROM: %d\n", err);
|
||||||
return -ENOENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Register found cores */
|
/* Register found cores */
|
||||||
bcma_register_cores(bus);
|
bcma_register_cores(bus);
|
||||||
|
|
|
@ -1037,13 +1037,16 @@ void ath9k_hw_init_global_settings(struct ath_hw *ah)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Workaround for early ACK timeouts, add an offset to match the
|
* Workaround for early ACK timeouts, add an offset to match the
|
||||||
* initval's 64us ack timeout value.
|
* initval's 64us ack timeout value. Use 48us for the CTS timeout.
|
||||||
* This was initially only meant to work around an issue with delayed
|
* This was initially only meant to work around an issue with delayed
|
||||||
* BA frames in some implementations, but it has been found to fix ACK
|
* BA frames in some implementations, but it has been found to fix ACK
|
||||||
* timeout issues in other cases as well.
|
* timeout issues in other cases as well.
|
||||||
*/
|
*/
|
||||||
if (conf->channel && conf->channel->band == IEEE80211_BAND_2GHZ)
|
if (conf->channel && conf->channel->band == IEEE80211_BAND_2GHZ) {
|
||||||
acktimeout += 64 - sifstime - ah->slottime;
|
acktimeout += 64 - sifstime - ah->slottime;
|
||||||
|
ctstimeout += 48 - sifstime - ah->slottime;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
ath9k_hw_set_sifs_time(ah, sifstime);
|
ath9k_hw_set_sifs_time(ah, sifstime);
|
||||||
ath9k_hw_setslottime(ah, slottime);
|
ath9k_hw_setslottime(ah, slottime);
|
||||||
|
|
|
@ -822,6 +822,11 @@ int ath9k_init_device(u16 devid, struct ath_softc *sc,
|
||||||
ARRAY_SIZE(ath9k_tpt_blink));
|
ARRAY_SIZE(ath9k_tpt_blink));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
INIT_WORK(&sc->hw_reset_work, ath_reset_work);
|
||||||
|
INIT_WORK(&sc->hw_check_work, ath_hw_check);
|
||||||
|
INIT_WORK(&sc->paprd_work, ath_paprd_calibrate);
|
||||||
|
INIT_DELAYED_WORK(&sc->hw_pll_work, ath_hw_pll_work);
|
||||||
|
|
||||||
/* Register with mac80211 */
|
/* Register with mac80211 */
|
||||||
error = ieee80211_register_hw(hw);
|
error = ieee80211_register_hw(hw);
|
||||||
if (error)
|
if (error)
|
||||||
|
@ -840,10 +845,6 @@ int ath9k_init_device(u16 devid, struct ath_softc *sc,
|
||||||
goto error_world;
|
goto error_world;
|
||||||
}
|
}
|
||||||
|
|
||||||
INIT_WORK(&sc->hw_reset_work, ath_reset_work);
|
|
||||||
INIT_WORK(&sc->hw_check_work, ath_hw_check);
|
|
||||||
INIT_WORK(&sc->paprd_work, ath_paprd_calibrate);
|
|
||||||
INIT_DELAYED_WORK(&sc->hw_pll_work, ath_hw_pll_work);
|
|
||||||
sc->last_rssi = ATH_RSSI_DUMMY_MARKER;
|
sc->last_rssi = ATH_RSSI_DUMMY_MARKER;
|
||||||
|
|
||||||
ath_init_leds(sc);
|
ath_init_leds(sc);
|
||||||
|
|
|
@ -694,7 +694,7 @@ static u8 ath_rc_get_highest_rix(struct ath_softc *sc,
|
||||||
return rate;
|
return rate;
|
||||||
|
|
||||||
/* This should not happen */
|
/* This should not happen */
|
||||||
WARN_ON(1);
|
WARN_ON_ONCE(1);
|
||||||
|
|
||||||
rate = ath_rc_priv->valid_rate_index[0];
|
rate = ath_rc_priv->valid_rate_index[0];
|
||||||
|
|
||||||
|
|
|
@ -822,6 +822,14 @@ static bool ath9k_rx_accept(struct ath_common *common,
|
||||||
(ATH9K_RXERR_DECRYPT | ATH9K_RXERR_CRC | ATH9K_RXERR_MIC |
|
(ATH9K_RXERR_DECRYPT | ATH9K_RXERR_CRC | ATH9K_RXERR_MIC |
|
||||||
ATH9K_RXERR_KEYMISS));
|
ATH9K_RXERR_KEYMISS));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Key miss events are only relevant for pairwise keys where the
|
||||||
|
* descriptor does contain a valid key index. This has been observed
|
||||||
|
* mostly with CCMP encryption.
|
||||||
|
*/
|
||||||
|
if (rx_stats->rs_keyix == ATH9K_RXKEYIX_INVALID)
|
||||||
|
rx_stats->rs_status &= ~ATH9K_RXERR_KEYMISS;
|
||||||
|
|
||||||
if (!rx_stats->rs_datalen)
|
if (!rx_stats->rs_datalen)
|
||||||
return false;
|
return false;
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -382,7 +382,8 @@ mwifiex_free_adapter(struct mwifiex_adapter *adapter)
|
||||||
|
|
||||||
adapter->if_ops.cleanup_if(adapter);
|
adapter->if_ops.cleanup_if(adapter);
|
||||||
|
|
||||||
dev_kfree_skb_any(adapter->sleep_cfm);
|
if (adapter->sleep_cfm)
|
||||||
|
dev_kfree_skb_any(adapter->sleep_cfm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -822,7 +822,9 @@ int mwifiex_remove_card(struct mwifiex_adapter *adapter, struct semaphore *sem)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
rtnl_lock();
|
rtnl_lock();
|
||||||
mwifiex_del_virtual_intf(priv->wdev->wiphy, priv->netdev);
|
if (priv->wdev && priv->netdev)
|
||||||
|
mwifiex_del_virtual_intf(priv->wdev->wiphy,
|
||||||
|
priv->netdev);
|
||||||
rtnl_unlock();
|
rtnl_unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -830,9 +832,11 @@ int mwifiex_remove_card(struct mwifiex_adapter *adapter, struct semaphore *sem)
|
||||||
if (!priv)
|
if (!priv)
|
||||||
goto exit_remove;
|
goto exit_remove;
|
||||||
|
|
||||||
wiphy_unregister(priv->wdev->wiphy);
|
if (priv->wdev) {
|
||||||
wiphy_free(priv->wdev->wiphy);
|
wiphy_unregister(priv->wdev->wiphy);
|
||||||
kfree(priv->wdev);
|
wiphy_free(priv->wdev->wiphy);
|
||||||
|
kfree(priv->wdev);
|
||||||
|
}
|
||||||
|
|
||||||
mwifiex_terminate_workqueue(adapter);
|
mwifiex_terminate_workqueue(adapter);
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ int mwifiex_copy_mcast_addr(struct mwifiex_multicast_list *mlist,
|
||||||
int mwifiex_wait_queue_complete(struct mwifiex_adapter *adapter)
|
int mwifiex_wait_queue_complete(struct mwifiex_adapter *adapter)
|
||||||
{
|
{
|
||||||
bool cancel_flag = false;
|
bool cancel_flag = false;
|
||||||
int status = adapter->cmd_wait_q.status;
|
int status;
|
||||||
struct cmd_ctrl_node *cmd_queued;
|
struct cmd_ctrl_node *cmd_queued;
|
||||||
|
|
||||||
if (!adapter->cmd_queued)
|
if (!adapter->cmd_queued)
|
||||||
|
@ -79,6 +79,8 @@ int mwifiex_wait_queue_complete(struct mwifiex_adapter *adapter)
|
||||||
mwifiex_cancel_pending_ioctl(adapter);
|
mwifiex_cancel_pending_ioctl(adapter);
|
||||||
dev_dbg(adapter->dev, "cmd cancel\n");
|
dev_dbg(adapter->dev, "cmd cancel\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
status = adapter->cmd_wait_q.status;
|
||||||
adapter->cmd_wait_q.status = 0;
|
adapter->cmd_wait_q.status = 0;
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
|
@ -240,6 +242,8 @@ int mwifiex_bss_start(struct mwifiex_private *priv, struct cfg80211_bss *bss,
|
||||||
|
|
||||||
if (!netif_queue_stopped(priv->netdev))
|
if (!netif_queue_stopped(priv->netdev))
|
||||||
mwifiex_stop_net_dev_queue(priv->netdev, adapter);
|
mwifiex_stop_net_dev_queue(priv->netdev, adapter);
|
||||||
|
if (netif_carrier_ok(priv->netdev))
|
||||||
|
netif_carrier_off(priv->netdev);
|
||||||
|
|
||||||
/* Clear any past association response stored for
|
/* Clear any past association response stored for
|
||||||
* application retrieval */
|
* application retrieval */
|
||||||
|
@ -271,6 +275,8 @@ int mwifiex_bss_start(struct mwifiex_private *priv, struct cfg80211_bss *bss,
|
||||||
|
|
||||||
if (!netif_queue_stopped(priv->netdev))
|
if (!netif_queue_stopped(priv->netdev))
|
||||||
mwifiex_stop_net_dev_queue(priv->netdev, adapter);
|
mwifiex_stop_net_dev_queue(priv->netdev, adapter);
|
||||||
|
if (netif_carrier_ok(priv->netdev))
|
||||||
|
netif_carrier_off(priv->netdev);
|
||||||
|
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
dev_dbg(adapter->dev, "info: network found in scan"
|
dev_dbg(adapter->dev, "info: network found in scan"
|
||||||
|
|
|
@ -866,6 +866,14 @@ static int fill_ctrlset(struct zd_mac *mac,
|
||||||
|
|
||||||
ZD_ASSERT(frag_len <= 0xffff);
|
ZD_ASSERT(frag_len <= 0xffff);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Firmware computes the duration itself (for all frames except PSPoll)
|
||||||
|
* and needs the field set to 0 at input, otherwise firmware messes up
|
||||||
|
* duration_id and sets bits 14 and 15 on.
|
||||||
|
*/
|
||||||
|
if (!ieee80211_is_pspoll(hdr->frame_control))
|
||||||
|
hdr->duration_id = 0;
|
||||||
|
|
||||||
txrate = ieee80211_get_tx_rate(mac->hw, info);
|
txrate = ieee80211_get_tx_rate(mac->hw, info);
|
||||||
|
|
||||||
cs->modulation = txrate->hw_value;
|
cs->modulation = txrate->hw_value;
|
||||||
|
|
Loading…
Reference in New Issue