Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
This commit is contained in:
@@ -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)
|
|||||||
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,
|
|||||||
|
|
||||||
/* 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,
|
|||||||
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] = {
|
|||||||
|
|
||||||
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)
|
|||||||
/* 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 {
|
|||||||
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)
|
|||||||
|
|
||||||
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)
|
|||||||
/* 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)
|
|||||||
/* 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,
|
|||||||
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,
|
|||||||
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)
|
|||||||
|
|
||||||
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 {
|
|||||||
/* 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,
|
|||||||
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,
|
|||||||
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);
|
|||||||
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,
|
|||||||
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);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user