aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2011-03-23 15:57:26 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-03-30 14:15:19 -0400
commitca7a4deb4a1a87dbdc6e7cab0d1022a535204226 (patch)
treeb647da486f56f56cf1b2d4eefac79c473472267b /drivers/net/wireless/ath
parent845e03c93dda2c00ffb5c68a1f7c8efc412d7c1a (diff)
ath9k_hw: replace REG_READ+REG_WRITE with REG_RMW
It's easier to read and it slightly decreases code size Signed-off-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath')
-rw-r--r--drivers/net/wireless/ath/ath9k/hw.c66
-rw-r--r--drivers/net/wireless/ath/ath9k/mac.c73
2 files changed, 56 insertions, 83 deletions
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
index 9513ec745b93..807d410e7645 100644
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
@@ -675,14 +675,14 @@ static void ath9k_hw_init_qos(struct ath_hw *ah)
675 675
676unsigned long ar9003_get_pll_sqsum_dvc(struct ath_hw *ah) 676unsigned long ar9003_get_pll_sqsum_dvc(struct ath_hw *ah)
677{ 677{
678 REG_WRITE(ah, PLL3, (REG_READ(ah, PLL3) & ~(PLL3_DO_MEAS_MASK))); 678 REG_CLR_BIT(ah, PLL3, PLL3_DO_MEAS_MASK);
679 udelay(100); 679 udelay(100);
680 REG_WRITE(ah, PLL3, (REG_READ(ah, PLL3) | PLL3_DO_MEAS_MASK)); 680 REG_SET_BIT(ah, PLL3, PLL3_DO_MEAS_MASK);
681 681
682 while ((REG_READ(ah, PLL4) & PLL4_MEAS_DONE) == 0) 682 while ((REG_READ(ah, PLL4) & PLL4_MEAS_DONE) == 0)
683 udelay(100); 683 udelay(100);
684 684
685 return (REG_READ(ah, PLL3) & SQSUM_DVC_MASK) >> 3; 685 return (REG_READ(ah, PLL3) & SQSUM_DVC_MASK) >> 3;
686} 686}
687EXPORT_SYMBOL(ar9003_get_pll_sqsum_dvc); 687EXPORT_SYMBOL(ar9003_get_pll_sqsum_dvc);
688 688
@@ -832,8 +832,7 @@ void ath9k_hw_init_global_settings(struct ath_hw *ah)
832 ah->misc_mode); 832 ah->misc_mode);
833 833
834 if (ah->misc_mode != 0) 834 if (ah->misc_mode != 0)
835 REG_WRITE(ah, AR_PCU_MISC, 835 REG_SET_BIT(ah, AR_PCU_MISC, ah->misc_mode);
836 REG_READ(ah, AR_PCU_MISC) | ah->misc_mode);
837 836
838 if (conf->channel && conf->channel->band == IEEE80211_BAND_5GHZ) 837 if (conf->channel && conf->channel->band == IEEE80211_BAND_5GHZ)
839 sifstime = 16; 838 sifstime = 16;
@@ -901,23 +900,19 @@ u32 ath9k_regd_get_ctl(struct ath_regulatory *reg, struct ath9k_channel *chan)
901static inline void ath9k_hw_set_dma(struct ath_hw *ah) 900static inline void ath9k_hw_set_dma(struct ath_hw *ah)
902{ 901{
903 struct ath_common *common = ath9k_hw_common(ah); 902 struct ath_common *common = ath9k_hw_common(ah);
904 u32 regval;
905 903
906 ENABLE_REGWRITE_BUFFER(ah); 904 ENABLE_REGWRITE_BUFFER(ah);
907 905
908 /* 906 /*
909 * set AHB_MODE not to do cacheline prefetches 907 * set AHB_MODE not to do cacheline prefetches
910 */ 908 */
911 if (!AR_SREV_9300_20_OR_LATER(ah)) { 909 if (!AR_SREV_9300_20_OR_LATER(ah))
912 regval = REG_READ(ah, AR_AHB_MODE); 910 REG_SET_BIT(ah, AR_AHB_MODE, AR_AHB_PREFETCH_RD_EN);
913 REG_WRITE(ah, AR_AHB_MODE, regval | AR_AHB_PREFETCH_RD_EN);
914 }
915 911
916 /* 912 /*
917 * let mac dma reads be in 128 byte chunks 913 * let mac dma reads be in 128 byte chunks
918 */ 914 */
919 regval = REG_READ(ah, AR_TXCFG) & ~AR_TXCFG_DMASZ_MASK; 915 REG_RMW(ah, AR_TXCFG, AR_TXCFG_DMASZ_128B, AR_TXCFG_DMASZ_MASK);
920 REG_WRITE(ah, AR_TXCFG, regval | AR_TXCFG_DMASZ_128B);
921 916
922 REGWRITE_BUFFER_FLUSH(ah); 917 REGWRITE_BUFFER_FLUSH(ah);
923 918
@@ -934,8 +929,7 @@ static inline void ath9k_hw_set_dma(struct ath_hw *ah)
934 /* 929 /*
935 * let mac dma writes be in 128 byte chunks 930 * let mac dma writes be in 128 byte chunks
936 */ 931 */
937 regval = REG_READ(ah, AR_RXCFG) & ~AR_RXCFG_DMASZ_MASK; 932 REG_RMW(ah, AR_RXCFG, AR_RXCFG_DMASZ_128B, AR_RXCFG_DMASZ_MASK);
938 REG_WRITE(ah, AR_RXCFG, regval | AR_RXCFG_DMASZ_128B);
939 933
940 /* 934 /*
941 * Setup receive FIFO threshold to hold off TX activities 935 * Setup receive FIFO threshold to hold off TX activities
@@ -974,30 +968,27 @@ static inline void ath9k_hw_set_dma(struct ath_hw *ah)
974 968
975static void ath9k_hw_set_operating_mode(struct ath_hw *ah, int opmode) 969static void ath9k_hw_set_operating_mode(struct ath_hw *ah, int opmode)
976{ 970{
977 u32 val; 971 u32 mask = AR_STA_ID1_STA_AP | AR_STA_ID1_ADHOC;
972 u32 set = AR_STA_ID1_KSRCH_MODE;
978 973
979 val = REG_READ(ah, AR_STA_ID1);
980 val &= ~(AR_STA_ID1_STA_AP | AR_STA_ID1_ADHOC);
981 switch (opmode) { 974 switch (opmode) {
982 case NL80211_IFTYPE_AP:
983 REG_WRITE(ah, AR_STA_ID1, val | AR_STA_ID1_STA_AP
984 | AR_STA_ID1_KSRCH_MODE);
985 REG_CLR_BIT(ah, AR_CFG, AR_CFG_AP_ADHOC_INDICATION);
986 break;
987 case NL80211_IFTYPE_ADHOC: 975 case NL80211_IFTYPE_ADHOC:
988 case NL80211_IFTYPE_MESH_POINT: 976 case NL80211_IFTYPE_MESH_POINT:
989 REG_WRITE(ah, AR_STA_ID1, val | AR_STA_ID1_ADHOC 977 set |= AR_STA_ID1_ADHOC;
990 | AR_STA_ID1_KSRCH_MODE);
991 REG_SET_BIT(ah, AR_CFG, AR_CFG_AP_ADHOC_INDICATION); 978 REG_SET_BIT(ah, AR_CFG, AR_CFG_AP_ADHOC_INDICATION);
992 break; 979 break;
980 case NL80211_IFTYPE_AP:
981 set |= AR_STA_ID1_STA_AP;
982 /* fall through */
993 case NL80211_IFTYPE_STATION: 983 case NL80211_IFTYPE_STATION:
994 REG_WRITE(ah, AR_STA_ID1, val | AR_STA_ID1_KSRCH_MODE); 984 REG_CLR_BIT(ah, AR_CFG, AR_CFG_AP_ADHOC_INDICATION);
995 break; 985 break;
996 default: 986 default:
997 if (ah->is_monitoring) 987 if (!ah->is_monitoring)
998 REG_WRITE(ah, AR_STA_ID1, val | AR_STA_ID1_KSRCH_MODE); 988 set = 0;
999 break; 989 break;
1000 } 990 }
991 REG_RMW(ah, AR_STA_ID1, set, mask);
1001} 992}
1002 993
1003void ath9k_hw_get_delta_slope_vals(struct ath_hw *ah, u32 coef_scaled, 994void ath9k_hw_get_delta_slope_vals(struct ath_hw *ah, u32 coef_scaled,
@@ -1023,10 +1014,8 @@ static bool ath9k_hw_set_reset(struct ath_hw *ah, int type)
1023 u32 tmpReg; 1014 u32 tmpReg;
1024 1015
1025 if (AR_SREV_9100(ah)) { 1016 if (AR_SREV_9100(ah)) {
1026 u32 val = REG_READ(ah, AR_RTC_DERIVED_CLK); 1017 REG_RMW_FIELD(ah, AR_RTC_DERIVED_CLK,
1027 val &= ~AR_RTC_DERIVED_CLK_PERIOD; 1018 AR_RTC_DERIVED_CLK_PERIOD, 1);
1028 val |= SM(1, AR_RTC_DERIVED_CLK_PERIOD);
1029 REG_WRITE(ah, AR_RTC_DERIVED_CLK, val);
1030 (void)REG_READ(ah, AR_RTC_DERIVED_CLK); 1019 (void)REG_READ(ah, AR_RTC_DERIVED_CLK);
1031 } 1020 }
1032 1021
@@ -1451,8 +1440,7 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
1451 ar9002_hw_enable_wep_aggregation(ah); 1440 ar9002_hw_enable_wep_aggregation(ah);
1452 } 1441 }
1453 1442
1454 REG_WRITE(ah, AR_STA_ID1, 1443 REG_SET_BIT(ah, AR_STA_ID1, AR_STA_ID1_PRESERVE_SEQNUM);
1455 REG_READ(ah, AR_STA_ID1) | AR_STA_ID1_PRESERVE_SEQNUM);
1456 1444
1457 ath9k_hw_set_dma(ah); 1445 ath9k_hw_set_dma(ah);
1458 1446
@@ -2204,11 +2192,9 @@ void ath9k_hw_setrxfilter(struct ath_hw *ah, u32 bits)
2204 REG_WRITE(ah, AR_PHY_ERR, phybits); 2192 REG_WRITE(ah, AR_PHY_ERR, phybits);
2205 2193
2206 if (phybits) 2194 if (phybits)
2207 REG_WRITE(ah, AR_RXCFG, 2195 REG_SET_BIT(ah, AR_RXCFG, AR_RXCFG_ZLFDMA);
2208 REG_READ(ah, AR_RXCFG) | AR_RXCFG_ZLFDMA);
2209 else 2196 else
2210 REG_WRITE(ah, AR_RXCFG, 2197 REG_CLR_BIT(ah, AR_RXCFG, AR_RXCFG_ZLFDMA);
2211 REG_READ(ah, AR_RXCFG) & ~AR_RXCFG_ZLFDMA);
2212 2198
2213 REGWRITE_BUFFER_FLUSH(ah); 2199 REGWRITE_BUFFER_FLUSH(ah);
2214} 2200}
diff --git a/drivers/net/wireless/ath/ath9k/mac.c b/drivers/net/wireless/ath/ath9k/mac.c
index 562257ac52cf..db496f2e1f6b 100644
--- a/drivers/net/wireless/ath/ath9k/mac.c
+++ b/drivers/net/wireless/ath/ath9k/mac.c
@@ -465,10 +465,9 @@ bool ath9k_hw_resettxqueue(struct ath_hw *ah, u32 q)
465 REG_WRITE(ah, AR_QCBRCFG(q), 465 REG_WRITE(ah, AR_QCBRCFG(q),
466 SM(qi->tqi_cbrPeriod, AR_Q_CBRCFG_INTERVAL) | 466 SM(qi->tqi_cbrPeriod, AR_Q_CBRCFG_INTERVAL) |
467 SM(qi->tqi_cbrOverflowLimit, AR_Q_CBRCFG_OVF_THRESH)); 467 SM(qi->tqi_cbrOverflowLimit, AR_Q_CBRCFG_OVF_THRESH));
468 REG_WRITE(ah, AR_QMISC(q), 468 REG_SET_BIT(ah, AR_QMISC(q), AR_Q_MISC_FSP_CBR |
469 REG_READ(ah, AR_QMISC(q)) | AR_Q_MISC_FSP_CBR | 469 (qi->tqi_cbrOverflowLimit ?
470 (qi->tqi_cbrOverflowLimit ? 470 AR_Q_MISC_CBR_EXP_CNTR_LIMIT_EN : 0));
471 AR_Q_MISC_CBR_EXP_CNTR_LIMIT_EN : 0));
472 } 471 }
473 if (qi->tqi_readyTime && (qi->tqi_type != ATH9K_TX_QUEUE_CAB)) { 472 if (qi->tqi_readyTime && (qi->tqi_type != ATH9K_TX_QUEUE_CAB)) {
474 REG_WRITE(ah, AR_QRDYTIMECFG(q), 473 REG_WRITE(ah, AR_QRDYTIMECFG(q),
@@ -481,40 +480,31 @@ bool ath9k_hw_resettxqueue(struct ath_hw *ah, u32 q)
481 (qi->tqi_burstTime ? AR_D_CHNTIME_EN : 0)); 480 (qi->tqi_burstTime ? AR_D_CHNTIME_EN : 0));
482 481
483 if (qi->tqi_burstTime 482 if (qi->tqi_burstTime
484 && (qi->tqi_qflags & TXQ_FLAG_RDYTIME_EXP_POLICY_ENABLE)) { 483 && (qi->tqi_qflags & TXQ_FLAG_RDYTIME_EXP_POLICY_ENABLE))
485 REG_WRITE(ah, AR_QMISC(q), 484 REG_SET_BIT(ah, AR_QMISC(q), AR_Q_MISC_RDYTIME_EXP_POLICY);
486 REG_READ(ah, AR_QMISC(q)) |
487 AR_Q_MISC_RDYTIME_EXP_POLICY);
488 485
489 } 486 if (qi->tqi_qflags & TXQ_FLAG_BACKOFF_DISABLE)
490 487 REG_SET_BIT(ah, AR_DMISC(q), AR_D_MISC_POST_FR_BKOFF_DIS);
491 if (qi->tqi_qflags & TXQ_FLAG_BACKOFF_DISABLE) {
492 REG_WRITE(ah, AR_DMISC(q),
493 REG_READ(ah, AR_DMISC(q)) |
494 AR_D_MISC_POST_FR_BKOFF_DIS);
495 }
496 488
497 REGWRITE_BUFFER_FLUSH(ah); 489 REGWRITE_BUFFER_FLUSH(ah);
498 490
499 if (qi->tqi_qflags & TXQ_FLAG_FRAG_BURST_BACKOFF_ENABLE) { 491 if (qi->tqi_qflags & TXQ_FLAG_FRAG_BURST_BACKOFF_ENABLE)
500 REG_WRITE(ah, AR_DMISC(q), 492 REG_SET_BIT(ah, AR_DMISC(q), AR_D_MISC_FRAG_BKOFF_EN);
501 REG_READ(ah, AR_DMISC(q)) | 493
502 AR_D_MISC_FRAG_BKOFF_EN);
503 }
504 switch (qi->tqi_type) { 494 switch (qi->tqi_type) {
505 case ATH9K_TX_QUEUE_BEACON: 495 case ATH9K_TX_QUEUE_BEACON:
506 ENABLE_REGWRITE_BUFFER(ah); 496 ENABLE_REGWRITE_BUFFER(ah);
507 497
508 REG_WRITE(ah, AR_QMISC(q), REG_READ(ah, AR_QMISC(q)) 498 REG_SET_BIT(ah, AR_QMISC(q),
509 | AR_Q_MISC_FSP_DBA_GATED 499 AR_Q_MISC_FSP_DBA_GATED
510 | AR_Q_MISC_BEACON_USE 500 | AR_Q_MISC_BEACON_USE
511 | AR_Q_MISC_CBR_INCR_DIS1); 501 | AR_Q_MISC_CBR_INCR_DIS1);
512 502
513 REG_WRITE(ah, AR_DMISC(q), REG_READ(ah, AR_DMISC(q)) 503 REG_SET_BIT(ah, AR_DMISC(q),
514 | (AR_D_MISC_ARB_LOCKOUT_CNTRL_GLOBAL << 504 (AR_D_MISC_ARB_LOCKOUT_CNTRL_GLOBAL <<
515 AR_D_MISC_ARB_LOCKOUT_CNTRL_S) 505 AR_D_MISC_ARB_LOCKOUT_CNTRL_S)
516 | AR_D_MISC_BEACON_USE 506 | AR_D_MISC_BEACON_USE
517 | AR_D_MISC_POST_FR_BKOFF_DIS); 507 | AR_D_MISC_POST_FR_BKOFF_DIS);
518 508
519 REGWRITE_BUFFER_FLUSH(ah); 509 REGWRITE_BUFFER_FLUSH(ah);
520 510
@@ -533,41 +523,38 @@ bool ath9k_hw_resettxqueue(struct ath_hw *ah, u32 q)
533 case ATH9K_TX_QUEUE_CAB: 523 case ATH9K_TX_QUEUE_CAB:
534 ENABLE_REGWRITE_BUFFER(ah); 524 ENABLE_REGWRITE_BUFFER(ah);
535 525
536 REG_WRITE(ah, AR_QMISC(q), REG_READ(ah, AR_QMISC(q)) 526 REG_SET_BIT(ah, AR_QMISC(q),
537 | AR_Q_MISC_FSP_DBA_GATED 527 AR_Q_MISC_FSP_DBA_GATED
538 | AR_Q_MISC_CBR_INCR_DIS1 528 | AR_Q_MISC_CBR_INCR_DIS1
539 | AR_Q_MISC_CBR_INCR_DIS0); 529 | AR_Q_MISC_CBR_INCR_DIS0);
540 value = (qi->tqi_readyTime - 530 value = (qi->tqi_readyTime -
541 (ah->config.sw_beacon_response_time - 531 (ah->config.sw_beacon_response_time -
542 ah->config.dma_beacon_response_time) - 532 ah->config.dma_beacon_response_time) -
543 ah->config.additional_swba_backoff) * 1024; 533 ah->config.additional_swba_backoff) * 1024;
544 REG_WRITE(ah, AR_QRDYTIMECFG(q), 534 REG_WRITE(ah, AR_QRDYTIMECFG(q),
545 value | AR_Q_RDYTIMECFG_EN); 535 value | AR_Q_RDYTIMECFG_EN);
546 REG_WRITE(ah, AR_DMISC(q), REG_READ(ah, AR_DMISC(q)) 536 REG_SET_BIT(ah, AR_DMISC(q),
547 | (AR_D_MISC_ARB_LOCKOUT_CNTRL_GLOBAL << 537 (AR_D_MISC_ARB_LOCKOUT_CNTRL_GLOBAL <<
548 AR_D_MISC_ARB_LOCKOUT_CNTRL_S)); 538 AR_D_MISC_ARB_LOCKOUT_CNTRL_S));
549 539
550 REGWRITE_BUFFER_FLUSH(ah); 540 REGWRITE_BUFFER_FLUSH(ah);
551 541
552 break; 542 break;
553 case ATH9K_TX_QUEUE_PSPOLL: 543 case ATH9K_TX_QUEUE_PSPOLL:
554 REG_WRITE(ah, AR_QMISC(q), 544 REG_SET_BIT(ah, AR_QMISC(q), AR_Q_MISC_CBR_INCR_DIS1);
555 REG_READ(ah, AR_QMISC(q)) | AR_Q_MISC_CBR_INCR_DIS1);
556 break; 545 break;
557 case ATH9K_TX_QUEUE_UAPSD: 546 case ATH9K_TX_QUEUE_UAPSD:
558 REG_WRITE(ah, AR_DMISC(q), REG_READ(ah, AR_DMISC(q)) | 547 REG_SET_BIT(ah, AR_DMISC(q), AR_D_MISC_POST_FR_BKOFF_DIS);
559 AR_D_MISC_POST_FR_BKOFF_DIS);
560 break; 548 break;
561 default: 549 default:
562 break; 550 break;
563 } 551 }
564 552
565 if (qi->tqi_intFlags & ATH9K_TXQ_USE_LOCKOUT_BKOFF_DIS) { 553 if (qi->tqi_intFlags & ATH9K_TXQ_USE_LOCKOUT_BKOFF_DIS) {
566 REG_WRITE(ah, AR_DMISC(q), 554 REG_SET_BIT(ah, AR_DMISC(q),
567 REG_READ(ah, AR_DMISC(q)) | 555 SM(AR_D_MISC_ARB_LOCKOUT_CNTRL_GLOBAL,
568 SM(AR_D_MISC_ARB_LOCKOUT_CNTRL_GLOBAL, 556 AR_D_MISC_ARB_LOCKOUT_CNTRL) |
569 AR_D_MISC_ARB_LOCKOUT_CNTRL) | 557 AR_D_MISC_POST_FR_BKOFF_DIS);
570 AR_D_MISC_POST_FR_BKOFF_DIS);
571 } 558 }
572 559
573 if (AR_SREV_9300_20_OR_LATER(ah)) 560 if (AR_SREV_9300_20_OR_LATER(ah))