diff options
author | David S. Miller <davem@davemloft.net> | 2011-01-12 21:52:31 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-01-12 21:52:31 -0500 |
commit | bb1231052e265e960d902ab32e67c5ccdabc9434 (patch) | |
tree | 3dd999a598355ff0d82f56eea1ffa49a81c8a42c /drivers/net | |
parent | 72b43d0898e97f588293b4a24b33c58c46633d81 (diff) | |
parent | 4e5518ca53be29c1ec3c00089c97bef36bfed515 (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9002_calib.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/eeprom_def.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/htc.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/htc_drv_main.c | 37 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hw.c | 5 | ||||
-rw-r--r-- | drivers/net/wireless/hostap/hostap_cs.c | 15 | ||||
-rw-r--r-- | drivers/net/wireless/ipw2x00/ipw2200.c | 7 | ||||
-rw-r--r-- | drivers/net/wireless/p54/txrx.c | 2 |
8 files changed, 51 insertions, 23 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_calib.c b/drivers/net/wireless/ath/ath9k/ar9002_calib.c index 01880aa13e36..ea2e7d714bda 100644 --- a/drivers/net/wireless/ath/ath9k/ar9002_calib.c +++ b/drivers/net/wireless/ath/ath9k/ar9002_calib.c | |||
@@ -954,6 +954,9 @@ static void ar9002_hw_init_cal_settings(struct ath_hw *ah) | |||
954 | &adc_dc_cal_multi_sample; | 954 | &adc_dc_cal_multi_sample; |
955 | } | 955 | } |
956 | ah->supp_cals = ADC_GAIN_CAL | ADC_DC_CAL | IQ_MISMATCH_CAL; | 956 | ah->supp_cals = ADC_GAIN_CAL | ADC_DC_CAL | IQ_MISMATCH_CAL; |
957 | |||
958 | if (AR_SREV_9287(ah)) | ||
959 | ah->supp_cals &= ~ADC_GAIN_CAL; | ||
957 | } | 960 | } |
958 | } | 961 | } |
959 | 962 | ||
diff --git a/drivers/net/wireless/ath/ath9k/eeprom_def.c b/drivers/net/wireless/ath/ath9k/eeprom_def.c index 088f141f2006..749a93608664 100644 --- a/drivers/net/wireless/ath/ath9k/eeprom_def.c +++ b/drivers/net/wireless/ath/ath9k/eeprom_def.c | |||
@@ -226,6 +226,10 @@ static int ath9k_hw_def_check_eeprom(struct ath_hw *ah) | |||
226 | eep->baseEepHeader.pwdclkind == 0) | 226 | eep->baseEepHeader.pwdclkind == 0) |
227 | ah->need_an_top2_fixup = 1; | 227 | ah->need_an_top2_fixup = 1; |
228 | 228 | ||
229 | if ((common->bus_ops->ath_bus_type == ATH_USB) && | ||
230 | (AR_SREV_9280(ah))) | ||
231 | eep->modalHeader[0].xpaBiasLvl = 0; | ||
232 | |||
229 | return 0; | 233 | return 0; |
230 | } | 234 | } |
231 | 235 | ||
diff --git a/drivers/net/wireless/ath/ath9k/htc.h b/drivers/net/wireless/ath/ath9k/htc.h index a099b3e87ed3..1ce506f23110 100644 --- a/drivers/net/wireless/ath/ath9k/htc.h +++ b/drivers/net/wireless/ath/ath9k/htc.h | |||
@@ -433,6 +433,7 @@ void ath9k_htc_txep(void *priv, struct sk_buff *skb, enum htc_endpoint_id ep_id, | |||
433 | void ath9k_htc_beaconep(void *drv_priv, struct sk_buff *skb, | 433 | void ath9k_htc_beaconep(void *drv_priv, struct sk_buff *skb, |
434 | enum htc_endpoint_id ep_id, bool txok); | 434 | enum htc_endpoint_id ep_id, bool txok); |
435 | 435 | ||
436 | int ath9k_htc_update_cap_target(struct ath9k_htc_priv *priv); | ||
436 | void ath9k_htc_station_work(struct work_struct *work); | 437 | void ath9k_htc_station_work(struct work_struct *work); |
437 | void ath9k_htc_aggr_work(struct work_struct *work); | 438 | void ath9k_htc_aggr_work(struct work_struct *work); |
438 | void ath9k_ani_work(struct work_struct *work);; | 439 | void ath9k_ani_work(struct work_struct *work);; |
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_main.c b/drivers/net/wireless/ath/ath9k/htc_drv_main.c index 845b4c938d16..f4d576bc3ccd 100644 --- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c +++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c | |||
@@ -301,6 +301,16 @@ static int ath9k_htc_add_monitor_interface(struct ath9k_htc_priv *priv) | |||
301 | 301 | ||
302 | priv->nstations++; | 302 | priv->nstations++; |
303 | 303 | ||
304 | /* | ||
305 | * Set chainmask etc. on the target. | ||
306 | */ | ||
307 | ret = ath9k_htc_update_cap_target(priv); | ||
308 | if (ret) | ||
309 | ath_dbg(common, ATH_DBG_CONFIG, | ||
310 | "Failed to update capability in target\n"); | ||
311 | |||
312 | priv->ah->is_monitoring = true; | ||
313 | |||
304 | return 0; | 314 | return 0; |
305 | 315 | ||
306 | err_vif: | 316 | err_vif: |
@@ -328,6 +338,7 @@ static int ath9k_htc_remove_monitor_interface(struct ath9k_htc_priv *priv) | |||
328 | } | 338 | } |
329 | 339 | ||
330 | priv->nstations--; | 340 | priv->nstations--; |
341 | priv->ah->is_monitoring = false; | ||
331 | 342 | ||
332 | return 0; | 343 | return 0; |
333 | } | 344 | } |
@@ -419,7 +430,7 @@ static int ath9k_htc_remove_station(struct ath9k_htc_priv *priv, | |||
419 | return 0; | 430 | return 0; |
420 | } | 431 | } |
421 | 432 | ||
422 | static int ath9k_htc_update_cap_target(struct ath9k_htc_priv *priv) | 433 | int ath9k_htc_update_cap_target(struct ath9k_htc_priv *priv) |
423 | { | 434 | { |
424 | struct ath9k_htc_cap_target tcap; | 435 | struct ath9k_htc_cap_target tcap; |
425 | int ret; | 436 | int ret; |
@@ -1186,6 +1197,20 @@ static int ath9k_htc_config(struct ieee80211_hw *hw, u32 changed) | |||
1186 | } | 1197 | } |
1187 | } | 1198 | } |
1188 | 1199 | ||
1200 | /* | ||
1201 | * Monitor interface should be added before | ||
1202 | * IEEE80211_CONF_CHANGE_CHANNEL is handled. | ||
1203 | */ | ||
1204 | if (changed & IEEE80211_CONF_CHANGE_MONITOR) { | ||
1205 | if (conf->flags & IEEE80211_CONF_MONITOR) { | ||
1206 | if (ath9k_htc_add_monitor_interface(priv)) | ||
1207 | ath_err(common, "Failed to set monitor mode\n"); | ||
1208 | else | ||
1209 | ath_dbg(common, ATH_DBG_CONFIG, | ||
1210 | "HW opmode set to Monitor mode\n"); | ||
1211 | } | ||
1212 | } | ||
1213 | |||
1189 | if (changed & IEEE80211_CONF_CHANGE_CHANNEL) { | 1214 | if (changed & IEEE80211_CONF_CHANGE_CHANNEL) { |
1190 | struct ieee80211_channel *curchan = hw->conf.channel; | 1215 | struct ieee80211_channel *curchan = hw->conf.channel; |
1191 | int pos = curchan->hw_value; | 1216 | int pos = curchan->hw_value; |
@@ -1221,16 +1246,6 @@ static int ath9k_htc_config(struct ieee80211_hw *hw, u32 changed) | |||
1221 | ath_update_txpow(priv); | 1246 | ath_update_txpow(priv); |
1222 | } | 1247 | } |
1223 | 1248 | ||
1224 | if (changed & IEEE80211_CONF_CHANGE_MONITOR) { | ||
1225 | if (conf->flags & IEEE80211_CONF_MONITOR) { | ||
1226 | if (ath9k_htc_add_monitor_interface(priv)) | ||
1227 | ath_err(common, "Failed to set monitor mode\n"); | ||
1228 | else | ||
1229 | ath_dbg(common, ATH_DBG_CONFIG, | ||
1230 | "HW opmode set to Monitor mode\n"); | ||
1231 | } | ||
1232 | } | ||
1233 | |||
1234 | if (changed & IEEE80211_CONF_CHANGE_IDLE) { | 1249 | if (changed & IEEE80211_CONF_CHANGE_IDLE) { |
1235 | mutex_lock(&priv->htc_pm_lock); | 1250 | mutex_lock(&priv->htc_pm_lock); |
1236 | if (!priv->ps_idle) { | 1251 | if (!priv->ps_idle) { |
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c index fde978665e07..1afb8bb85756 100644 --- a/drivers/net/wireless/ath/ath9k/hw.c +++ b/drivers/net/wireless/ath/ath9k/hw.c | |||
@@ -436,9 +436,10 @@ static int ath9k_hw_init_macaddr(struct ath_hw *ah) | |||
436 | 436 | ||
437 | static int ath9k_hw_post_init(struct ath_hw *ah) | 437 | static int ath9k_hw_post_init(struct ath_hw *ah) |
438 | { | 438 | { |
439 | struct ath_common *common = ath9k_hw_common(ah); | ||
439 | int ecode; | 440 | int ecode; |
440 | 441 | ||
441 | if (!AR_SREV_9271(ah)) { | 442 | if (common->bus_ops->ath_bus_type != ATH_USB) { |
442 | if (!ath9k_hw_chip_test(ah)) | 443 | if (!ath9k_hw_chip_test(ah)) |
443 | return -ENODEV; | 444 | return -ENODEV; |
444 | } | 445 | } |
@@ -1213,7 +1214,7 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan, | |||
1213 | ah->txchainmask = common->tx_chainmask; | 1214 | ah->txchainmask = common->tx_chainmask; |
1214 | ah->rxchainmask = common->rx_chainmask; | 1215 | ah->rxchainmask = common->rx_chainmask; |
1215 | 1216 | ||
1216 | if (!ah->chip_fullsleep) { | 1217 | if ((common->bus_ops->ath_bus_type != ATH_USB) && !ah->chip_fullsleep) { |
1217 | ath9k_hw_abortpcurecv(ah); | 1218 | ath9k_hw_abortpcurecv(ah); |
1218 | if (!ath9k_hw_stopdmarecv(ah)) { | 1219 | if (!ath9k_hw_stopdmarecv(ah)) { |
1219 | ath_dbg(common, ATH_DBG_XMIT, | 1220 | ath_dbg(common, ATH_DBG_XMIT, |
diff --git a/drivers/net/wireless/hostap/hostap_cs.c b/drivers/net/wireless/hostap/hostap_cs.c index bd8a4134edeb..2176edede39b 100644 --- a/drivers/net/wireless/hostap/hostap_cs.c +++ b/drivers/net/wireless/hostap/hostap_cs.c | |||
@@ -518,22 +518,21 @@ static int prism2_config(struct pcmcia_device *link) | |||
518 | hw_priv->link = link; | 518 | hw_priv->link = link; |
519 | 519 | ||
520 | /* | 520 | /* |
521 | * Make sure the IRQ handler cannot proceed until at least | 521 | * We enable IRQ here, but IRQ handler will not proceed |
522 | * dev->base_addr is initialized. | 522 | * until dev->base_addr is set below. This protect us from |
523 | * receive interrupts when driver is not initialized. | ||
523 | */ | 524 | */ |
524 | spin_lock_irqsave(&local->irq_init_lock, flags); | ||
525 | |||
526 | ret = pcmcia_request_irq(link, prism2_interrupt); | 525 | ret = pcmcia_request_irq(link, prism2_interrupt); |
527 | if (ret) | 526 | if (ret) |
528 | goto failed_unlock; | 527 | goto failed; |
529 | 528 | ||
530 | ret = pcmcia_enable_device(link); | 529 | ret = pcmcia_enable_device(link); |
531 | if (ret) | 530 | if (ret) |
532 | goto failed_unlock; | 531 | goto failed; |
533 | 532 | ||
533 | spin_lock_irqsave(&local->irq_init_lock, flags); | ||
534 | dev->irq = link->irq; | 534 | dev->irq = link->irq; |
535 | dev->base_addr = link->resource[0]->start; | 535 | dev->base_addr = link->resource[0]->start; |
536 | |||
537 | spin_unlock_irqrestore(&local->irq_init_lock, flags); | 536 | spin_unlock_irqrestore(&local->irq_init_lock, flags); |
538 | 537 | ||
539 | local->shutdown = 0; | 538 | local->shutdown = 0; |
@@ -546,8 +545,6 @@ static int prism2_config(struct pcmcia_device *link) | |||
546 | 545 | ||
547 | return ret; | 546 | return ret; |
548 | 547 | ||
549 | failed_unlock: | ||
550 | spin_unlock_irqrestore(&local->irq_init_lock, flags); | ||
551 | failed: | 548 | failed: |
552 | kfree(hw_priv); | 549 | kfree(hw_priv); |
553 | prism2_release((u_long)link); | 550 | prism2_release((u_long)link); |
diff --git a/drivers/net/wireless/ipw2x00/ipw2200.c b/drivers/net/wireless/ipw2x00/ipw2200.c index 8d6ed5f6f46f..ae438ed80c2f 100644 --- a/drivers/net/wireless/ipw2x00/ipw2200.c +++ b/drivers/net/wireless/ipw2x00/ipw2200.c | |||
@@ -1973,6 +1973,13 @@ static void ipw_irq_tasklet(struct ipw_priv *priv) | |||
1973 | 1973 | ||
1974 | inta = ipw_read32(priv, IPW_INTA_RW); | 1974 | inta = ipw_read32(priv, IPW_INTA_RW); |
1975 | inta_mask = ipw_read32(priv, IPW_INTA_MASK_R); | 1975 | inta_mask = ipw_read32(priv, IPW_INTA_MASK_R); |
1976 | |||
1977 | if (inta == 0xFFFFFFFF) { | ||
1978 | /* Hardware disappeared */ | ||
1979 | IPW_WARNING("TASKLET INTA == 0xFFFFFFFF\n"); | ||
1980 | /* Only handle the cached INTA values */ | ||
1981 | inta = 0; | ||
1982 | } | ||
1976 | inta &= (IPW_INTA_MASK_ALL & inta_mask); | 1983 | inta &= (IPW_INTA_MASK_ALL & inta_mask); |
1977 | 1984 | ||
1978 | /* Add any cached INTA values that need to be handled */ | 1985 | /* Add any cached INTA values that need to be handled */ |
diff --git a/drivers/net/wireless/p54/txrx.c b/drivers/net/wireless/p54/txrx.c index 76b2318a7dc7..f618b9623e5a 100644 --- a/drivers/net/wireless/p54/txrx.c +++ b/drivers/net/wireless/p54/txrx.c | |||
@@ -618,7 +618,7 @@ static void p54_tx_80211_header(struct p54_common *priv, struct sk_buff *skb, | |||
618 | else | 618 | else |
619 | *burst_possible = false; | 619 | *burst_possible = false; |
620 | 620 | ||
621 | if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) | 621 | if (!(info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ)) |
622 | *flags |= P54_HDR_FLAG_DATA_OUT_SEQNR; | 622 | *flags |= P54_HDR_FLAG_DATA_OUT_SEQNR; |
623 | 623 | ||
624 | if (info->flags & IEEE80211_TX_CTL_PSPOLL_RESPONSE) | 624 | if (info->flags & IEEE80211_TX_CTL_PSPOLL_RESPONSE) |