Commit f966a13f authored by David S. Miller's avatar David S. Miller
parents 7e96fbf2 38d59392
...@@ -2294,6 +2294,8 @@ ath5k_tx_complete_poll_work(struct work_struct *work) ...@@ -2294,6 +2294,8 @@ ath5k_tx_complete_poll_work(struct work_struct *work)
int i; int i;
bool needreset = false; bool needreset = false;
mutex_lock(&sc->lock);
for (i = 0; i < ARRAY_SIZE(sc->txqs); i++) { for (i = 0; i < ARRAY_SIZE(sc->txqs); i++) {
if (sc->txqs[i].setup) { if (sc->txqs[i].setup) {
txq = &sc->txqs[i]; txq = &sc->txqs[i];
...@@ -2321,6 +2323,8 @@ ath5k_tx_complete_poll_work(struct work_struct *work) ...@@ -2321,6 +2323,8 @@ ath5k_tx_complete_poll_work(struct work_struct *work)
ath5k_reset(sc, NULL, true); ath5k_reset(sc, NULL, true);
} }
mutex_unlock(&sc->lock);
ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work, ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work,
msecs_to_jiffies(ATH5K_TX_COMPLETE_POLL_INT)); msecs_to_jiffies(ATH5K_TX_COMPLETE_POLL_INT));
} }
......
...@@ -679,10 +679,6 @@ static bool ar9002_hw_calibrate(struct ath_hw *ah, ...@@ -679,10 +679,6 @@ static bool ar9002_hw_calibrate(struct ath_hw *ah,
/* Do NF cal only at longer intervals */ /* Do NF cal only at longer intervals */
if (longcal || nfcal_pending) { if (longcal || nfcal_pending) {
/* Do periodic PAOffset Cal */
ar9002_hw_pa_cal(ah, false);
ar9002_hw_olc_temp_compensation(ah);
/* /*
* Get the value from the previous NF cal and update * Get the value from the previous NF cal and update
* history buffer. * history buffer.
...@@ -697,8 +693,12 @@ static bool ar9002_hw_calibrate(struct ath_hw *ah, ...@@ -697,8 +693,12 @@ static bool ar9002_hw_calibrate(struct ath_hw *ah,
ath9k_hw_loadnf(ah, ah->curchan); ath9k_hw_loadnf(ah, ah->curchan);
} }
if (longcal) if (longcal) {
ath9k_hw_start_nfcal(ah, false); ath9k_hw_start_nfcal(ah, false);
/* Do periodic PAOffset Cal */
ar9002_hw_pa_cal(ah, false);
ar9002_hw_olc_temp_compensation(ah);
}
} }
return iscaldone; return iscaldone;
......
...@@ -1842,7 +1842,7 @@ static const u32 ar9300_2p2_soc_preamble[][2] = { ...@@ -1842,7 +1842,7 @@ static const u32 ar9300_2p2_soc_preamble[][2] = {
static const u32 ar9300PciePhy_pll_on_clkreq_disable_L1_2p2[][2] = { static const u32 ar9300PciePhy_pll_on_clkreq_disable_L1_2p2[][2] = {
/* Addr allmodes */ /* Addr allmodes */
{0x00004040, 0x08212e5e}, {0x00004040, 0x0821265e},
{0x00004040, 0x0008003b}, {0x00004040, 0x0008003b},
{0x00004044, 0x00000000}, {0x00004044, 0x00000000},
}; };
......
...@@ -146,8 +146,8 @@ static void ar9003_hw_init_mode_regs(struct ath_hw *ah) ...@@ -146,8 +146,8 @@ static void ar9003_hw_init_mode_regs(struct ath_hw *ah)
/* Sleep Setting */ /* Sleep Setting */
INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower, INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower,
ar9300PciePhy_clkreq_enable_L1_2p2, ar9300PciePhy_pll_on_clkreq_disable_L1_2p2,
ARRAY_SIZE(ar9300PciePhy_clkreq_enable_L1_2p2), ARRAY_SIZE(ar9300PciePhy_pll_on_clkreq_disable_L1_2p2),
2); 2);
/* Fast clock modal settings */ /* Fast clock modal settings */
......
...@@ -78,7 +78,7 @@ struct tx_frame_hdr { ...@@ -78,7 +78,7 @@ struct tx_frame_hdr {
u8 node_idx; u8 node_idx;
u8 vif_idx; u8 vif_idx;
u8 tidno; u8 tidno;
u32 flags; /* ATH9K_HTC_TX_* */ __be32 flags; /* ATH9K_HTC_TX_* */
u8 key_type; u8 key_type;
u8 keyix; u8 keyix;
u8 reserved[26]; u8 reserved[26];
......
...@@ -113,6 +113,7 @@ int ath9k_htc_tx_start(struct ath9k_htc_priv *priv, struct sk_buff *skb) ...@@ -113,6 +113,7 @@ int ath9k_htc_tx_start(struct ath9k_htc_priv *priv, struct sk_buff *skb)
if (ieee80211_is_data(fc)) { if (ieee80211_is_data(fc)) {
struct tx_frame_hdr tx_hdr; struct tx_frame_hdr tx_hdr;
u32 flags = 0;
u8 *qc; u8 *qc;
memset(&tx_hdr, 0, sizeof(struct tx_frame_hdr)); memset(&tx_hdr, 0, sizeof(struct tx_frame_hdr));
...@@ -136,13 +137,14 @@ int ath9k_htc_tx_start(struct ath9k_htc_priv *priv, struct sk_buff *skb) ...@@ -136,13 +137,14 @@ int ath9k_htc_tx_start(struct ath9k_htc_priv *priv, struct sk_buff *skb)
/* Check for RTS protection */ /* Check for RTS protection */
if (priv->hw->wiphy->rts_threshold != (u32) -1) if (priv->hw->wiphy->rts_threshold != (u32) -1)
if (skb->len > priv->hw->wiphy->rts_threshold) if (skb->len > priv->hw->wiphy->rts_threshold)
tx_hdr.flags |= ATH9K_HTC_TX_RTSCTS; flags |= ATH9K_HTC_TX_RTSCTS;
/* CTS-to-self */ /* CTS-to-self */
if (!(tx_hdr.flags & ATH9K_HTC_TX_RTSCTS) && if (!(flags & ATH9K_HTC_TX_RTSCTS) &&
(priv->op_flags & OP_PROTECT_ENABLE)) (priv->op_flags & OP_PROTECT_ENABLE))
tx_hdr.flags |= ATH9K_HTC_TX_CTSONLY; flags |= ATH9K_HTC_TX_CTSONLY;
tx_hdr.flags = cpu_to_be32(flags);
tx_hdr.key_type = ath9k_cmn_get_hw_crypto_keytype(skb); tx_hdr.key_type = ath9k_cmn_get_hw_crypto_keytype(skb);
if (tx_hdr.key_type == ATH9K_KEY_TYPE_CLEAR) if (tx_hdr.key_type == ATH9K_KEY_TYPE_CLEAR)
tx_hdr.keyix = (u8) ATH9K_TXKEYIX_INVALID; tx_hdr.keyix = (u8) ATH9K_TXKEYIX_INVALID;
......
...@@ -168,7 +168,7 @@ int iwl_eeprom_check_sku(struct iwl_priv *priv) ...@@ -168,7 +168,7 @@ int iwl_eeprom_check_sku(struct iwl_priv *priv)
/* not using .cfg overwrite */ /* not using .cfg overwrite */
radio_cfg = iwl_eeprom_query16(priv, EEPROM_RADIO_CONFIG); radio_cfg = iwl_eeprom_query16(priv, EEPROM_RADIO_CONFIG);
priv->cfg->valid_tx_ant = EEPROM_RF_CFG_TX_ANT_MSK(radio_cfg); priv->cfg->valid_tx_ant = EEPROM_RF_CFG_TX_ANT_MSK(radio_cfg);
priv->cfg->valid_rx_ant = EEPROM_RF_CFG_TX_ANT_MSK(radio_cfg); priv->cfg->valid_rx_ant = EEPROM_RF_CFG_RX_ANT_MSK(radio_cfg);
if (!priv->cfg->valid_tx_ant || !priv->cfg->valid_rx_ant) { if (!priv->cfg->valid_tx_ant || !priv->cfg->valid_rx_ant) {
IWL_ERR(priv, "Invalid chain (0X%x, 0X%x)\n", IWL_ERR(priv, "Invalid chain (0X%x, 0X%x)\n",
priv->cfg->valid_tx_ant, priv->cfg->valid_tx_ant,
......
...@@ -126,6 +126,7 @@ void *iwm_if_alloc(int sizeof_bus, struct device *dev, ...@@ -126,6 +126,7 @@ void *iwm_if_alloc(int sizeof_bus, struct device *dev,
ndev = alloc_netdev_mq(0, "wlan%d", ether_setup, IWM_TX_QUEUES); ndev = alloc_netdev_mq(0, "wlan%d", ether_setup, IWM_TX_QUEUES);
if (!ndev) { if (!ndev) {
dev_err(dev, "no memory for network device instance\n"); dev_err(dev, "no memory for network device instance\n");
ret = -ENOMEM;
goto out_priv; goto out_priv;
} }
...@@ -138,6 +139,7 @@ void *iwm_if_alloc(int sizeof_bus, struct device *dev, ...@@ -138,6 +139,7 @@ void *iwm_if_alloc(int sizeof_bus, struct device *dev,
GFP_KERNEL); GFP_KERNEL);
if (!iwm->umac_profile) { if (!iwm->umac_profile) {
dev_err(dev, "Couldn't alloc memory for profile\n"); dev_err(dev, "Couldn't alloc memory for profile\n");
ret = -ENOMEM;
goto out_profile; goto out_profile;
} }
......
...@@ -58,6 +58,7 @@ static int rt2x00lib_request_firmware(struct rt2x00_dev *rt2x00dev) ...@@ -58,6 +58,7 @@ static int rt2x00lib_request_firmware(struct rt2x00_dev *rt2x00dev)
if (!fw || !fw->size || !fw->data) { if (!fw || !fw->size || !fw->data) {
ERROR(rt2x00dev, "Failed to read Firmware.\n"); ERROR(rt2x00dev, "Failed to read Firmware.\n");
release_firmware(fw);
return -ENOENT; return -ENOENT;
} }
......
...@@ -959,7 +959,7 @@ struct ieee80211_ht_info { ...@@ -959,7 +959,7 @@ struct ieee80211_ht_info {
/* block-ack parameters */ /* block-ack parameters */
#define IEEE80211_ADDBA_PARAM_POLICY_MASK 0x0002 #define IEEE80211_ADDBA_PARAM_POLICY_MASK 0x0002
#define IEEE80211_ADDBA_PARAM_TID_MASK 0x003C #define IEEE80211_ADDBA_PARAM_TID_MASK 0x003C
#define IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK 0xFFA0 #define IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK 0xFFC0
#define IEEE80211_DELBA_PARAM_TID_MASK 0xF000 #define IEEE80211_DELBA_PARAM_TID_MASK 0xF000
#define IEEE80211_DELBA_PARAM_INITIATOR_MASK 0x0800 #define IEEE80211_DELBA_PARAM_INITIATOR_MASK 0x0800
......
...@@ -185,8 +185,6 @@ void ieee80211_process_addba_request(struct ieee80211_local *local, ...@@ -185,8 +185,6 @@ void ieee80211_process_addba_request(struct ieee80211_local *local,
struct ieee80211_mgmt *mgmt, struct ieee80211_mgmt *mgmt,
size_t len) size_t len)
{ {
struct ieee80211_hw *hw = &local->hw;
struct ieee80211_conf *conf = &hw->conf;
struct tid_ampdu_rx *tid_agg_rx; struct tid_ampdu_rx *tid_agg_rx;
u16 capab, tid, timeout, ba_policy, buf_size, start_seq_num, status; u16 capab, tid, timeout, ba_policy, buf_size, start_seq_num, status;
u8 dialog_token; u8 dialog_token;
...@@ -231,13 +229,8 @@ void ieee80211_process_addba_request(struct ieee80211_local *local, ...@@ -231,13 +229,8 @@ void ieee80211_process_addba_request(struct ieee80211_local *local,
goto end_no_lock; goto end_no_lock;
} }
/* determine default buffer size */ /* determine default buffer size */
if (buf_size == 0) { if (buf_size == 0)
struct ieee80211_supported_band *sband; buf_size = IEEE80211_MAX_AMPDU_BUF;
sband = local->hw.wiphy->bands[conf->channel->band];
buf_size = IEEE80211_MIN_AMPDU_BUF;
buf_size = buf_size << sband->ht_cap.ampdu_factor;
}
/* examine state machine */ /* examine state machine */
......
...@@ -39,6 +39,8 @@ module_param(ieee80211_disable_40mhz_24ghz, bool, 0644); ...@@ -39,6 +39,8 @@ module_param(ieee80211_disable_40mhz_24ghz, bool, 0644);
MODULE_PARM_DESC(ieee80211_disable_40mhz_24ghz, MODULE_PARM_DESC(ieee80211_disable_40mhz_24ghz,
"Disable 40MHz support in the 2.4GHz band"); "Disable 40MHz support in the 2.4GHz band");
static struct lock_class_key ieee80211_rx_skb_queue_class;
void ieee80211_configure_filter(struct ieee80211_local *local) void ieee80211_configure_filter(struct ieee80211_local *local)
{ {
u64 mc; u64 mc;
...@@ -569,7 +571,15 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len, ...@@ -569,7 +571,15 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
spin_lock_init(&local->filter_lock); spin_lock_init(&local->filter_lock);
spin_lock_init(&local->queue_stop_reason_lock); spin_lock_init(&local->queue_stop_reason_lock);
skb_queue_head_init(&local->rx_skb_queue); /*
* The rx_skb_queue is only accessed from tasklets,
* but other SKB queues are used from within IRQ
* context. Therefore, this one needs a different
* locking class so our direct, non-irq-safe use of
* the queue's lock doesn't throw lockdep warnings.
*/
skb_queue_head_init_class(&local->rx_skb_queue,
&ieee80211_rx_skb_queue_class);
INIT_DELAYED_WORK(&local->scan_work, ieee80211_scan_work); INIT_DELAYED_WORK(&local->scan_work, ieee80211_scan_work);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment