mirror of https://gitee.com/openkylin/linux.git
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
This commit is contained in:
commit
f966a13f92
|
@ -2294,6 +2294,8 @@ ath5k_tx_complete_poll_work(struct work_struct *work)
|
|||
int i;
|
||||
bool needreset = false;
|
||||
|
||||
mutex_lock(&sc->lock);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(sc->txqs); i++) {
|
||||
if (sc->txqs[i].setup) {
|
||||
txq = &sc->txqs[i];
|
||||
|
@ -2321,6 +2323,8 @@ ath5k_tx_complete_poll_work(struct work_struct *work)
|
|||
ath5k_reset(sc, NULL, true);
|
||||
}
|
||||
|
||||
mutex_unlock(&sc->lock);
|
||||
|
||||
ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work,
|
||||
msecs_to_jiffies(ATH5K_TX_COMPLETE_POLL_INT));
|
||||
}
|
||||
|
|
|
@ -679,10 +679,6 @@ static bool ar9002_hw_calibrate(struct ath_hw *ah,
|
|||
|
||||
/* Do NF cal only at longer intervals */
|
||||
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
|
||||
* history buffer.
|
||||
|
@ -697,8 +693,12 @@ static bool ar9002_hw_calibrate(struct ath_hw *ah,
|
|||
ath9k_hw_loadnf(ah, ah->curchan);
|
||||
}
|
||||
|
||||
if (longcal)
|
||||
if (longcal) {
|
||||
ath9k_hw_start_nfcal(ah, false);
|
||||
/* Do periodic PAOffset Cal */
|
||||
ar9002_hw_pa_cal(ah, false);
|
||||
ar9002_hw_olc_temp_compensation(ah);
|
||||
}
|
||||
}
|
||||
|
||||
return iscaldone;
|
||||
|
|
|
@ -1842,7 +1842,7 @@ static const u32 ar9300_2p2_soc_preamble[][2] = {
|
|||
|
||||
static const u32 ar9300PciePhy_pll_on_clkreq_disable_L1_2p2[][2] = {
|
||||
/* Addr allmodes */
|
||||
{0x00004040, 0x08212e5e},
|
||||
{0x00004040, 0x0821265e},
|
||||
{0x00004040, 0x0008003b},
|
||||
{0x00004044, 0x00000000},
|
||||
};
|
||||
|
|
|
@ -146,8 +146,8 @@ static void ar9003_hw_init_mode_regs(struct ath_hw *ah)
|
|||
/* Sleep Setting */
|
||||
|
||||
INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower,
|
||||
ar9300PciePhy_clkreq_enable_L1_2p2,
|
||||
ARRAY_SIZE(ar9300PciePhy_clkreq_enable_L1_2p2),
|
||||
ar9300PciePhy_pll_on_clkreq_disable_L1_2p2,
|
||||
ARRAY_SIZE(ar9300PciePhy_pll_on_clkreq_disable_L1_2p2),
|
||||
2);
|
||||
|
||||
/* Fast clock modal settings */
|
||||
|
|
|
@ -78,7 +78,7 @@ struct tx_frame_hdr {
|
|||
u8 node_idx;
|
||||
u8 vif_idx;
|
||||
u8 tidno;
|
||||
u32 flags; /* ATH9K_HTC_TX_* */
|
||||
__be32 flags; /* ATH9K_HTC_TX_* */
|
||||
u8 key_type;
|
||||
u8 keyix;
|
||||
u8 reserved[26];
|
||||
|
|
|
@ -113,6 +113,7 @@ int ath9k_htc_tx_start(struct ath9k_htc_priv *priv, struct sk_buff *skb)
|
|||
|
||||
if (ieee80211_is_data(fc)) {
|
||||
struct tx_frame_hdr tx_hdr;
|
||||
u32 flags = 0;
|
||||
u8 *qc;
|
||||
|
||||
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)
|
|||
/* Check for RTS protection */
|
||||
if (priv->hw->wiphy->rts_threshold != (u32) -1)
|
||||
if (skb->len > priv->hw->wiphy->rts_threshold)
|
||||
tx_hdr.flags |= ATH9K_HTC_TX_RTSCTS;
|
||||
flags |= ATH9K_HTC_TX_RTSCTS;
|
||||
|
||||
/* CTS-to-self */
|
||||
if (!(tx_hdr.flags & ATH9K_HTC_TX_RTSCTS) &&
|
||||
if (!(flags & ATH9K_HTC_TX_RTSCTS) &&
|
||||
(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);
|
||||
if (tx_hdr.key_type == ATH9K_KEY_TYPE_CLEAR)
|
||||
tx_hdr.keyix = (u8) ATH9K_TXKEYIX_INVALID;
|
||||
|
|
|
@ -168,7 +168,7 @@ int iwl_eeprom_check_sku(struct iwl_priv *priv)
|
|||
/* not using .cfg overwrite */
|
||||
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_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) {
|
||||
IWL_ERR(priv, "Invalid chain (0X%x, 0X%x)\n",
|
||||
priv->cfg->valid_tx_ant,
|
||||
|
|
|
@ -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);
|
||||
if (!ndev) {
|
||||
dev_err(dev, "no memory for network device instance\n");
|
||||
ret = -ENOMEM;
|
||||
goto out_priv;
|
||||
}
|
||||
|
||||
|
@ -138,6 +139,7 @@ void *iwm_if_alloc(int sizeof_bus, struct device *dev,
|
|||
GFP_KERNEL);
|
||||
if (!iwm->umac_profile) {
|
||||
dev_err(dev, "Couldn't alloc memory for profile\n");
|
||||
ret = -ENOMEM;
|
||||
goto out_profile;
|
||||
}
|
||||
|
||||
|
|
|
@ -58,6 +58,7 @@ static int rt2x00lib_request_firmware(struct rt2x00_dev *rt2x00dev)
|
|||
|
||||
if (!fw || !fw->size || !fw->data) {
|
||||
ERROR(rt2x00dev, "Failed to read Firmware.\n");
|
||||
release_firmware(fw);
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
|
|
|
@ -959,7 +959,7 @@ struct ieee80211_ht_info {
|
|||
/* block-ack parameters */
|
||||
#define IEEE80211_ADDBA_PARAM_POLICY_MASK 0x0002
|
||||
#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_INITIATOR_MASK 0x0800
|
||||
|
||||
|
|
|
@ -185,8 +185,6 @@ void ieee80211_process_addba_request(struct ieee80211_local *local,
|
|||
struct ieee80211_mgmt *mgmt,
|
||||
size_t len)
|
||||
{
|
||||
struct ieee80211_hw *hw = &local->hw;
|
||||
struct ieee80211_conf *conf = &hw->conf;
|
||||
struct tid_ampdu_rx *tid_agg_rx;
|
||||
u16 capab, tid, timeout, ba_policy, buf_size, start_seq_num, status;
|
||||
u8 dialog_token;
|
||||
|
@ -231,13 +229,8 @@ void ieee80211_process_addba_request(struct ieee80211_local *local,
|
|||
goto end_no_lock;
|
||||
}
|
||||
/* determine default buffer size */
|
||||
if (buf_size == 0) {
|
||||
struct ieee80211_supported_band *sband;
|
||||
|
||||
sband = local->hw.wiphy->bands[conf->channel->band];
|
||||
buf_size = IEEE80211_MIN_AMPDU_BUF;
|
||||
buf_size = buf_size << sband->ht_cap.ampdu_factor;
|
||||
}
|
||||
if (buf_size == 0)
|
||||
buf_size = IEEE80211_MAX_AMPDU_BUF;
|
||||
|
||||
|
||||
/* examine state machine */
|
||||
|
|
|
@ -39,6 +39,8 @@ module_param(ieee80211_disable_40mhz_24ghz, bool, 0644);
|
|||
MODULE_PARM_DESC(ieee80211_disable_40mhz_24ghz,
|
||||
"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)
|
||||
{
|
||||
u64 mc;
|
||||
|
@ -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->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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue