diff options
author | Felix Fietkau <nbd@openwrt.org> | 2011-03-23 15:57:26 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-03-30 14:15:19 -0400 |
commit | ca7a4deb4a1a87dbdc6e7cab0d1022a535204226 (patch) | |
tree | b647da486f56f56cf1b2d4eefac79c473472267b /drivers/net/wireless/ath | |
parent | 845e03c93dda2c00ffb5c68a1f7c8efc412d7c1a (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.c | 66 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/mac.c | 73 |
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 | ||
676 | unsigned long ar9003_get_pll_sqsum_dvc(struct ath_hw *ah) | 676 | unsigned 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 | } |
687 | EXPORT_SYMBOL(ar9003_get_pll_sqsum_dvc); | 687 | EXPORT_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) | |||
901 | static inline void ath9k_hw_set_dma(struct ath_hw *ah) | 900 | static 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 | ||
975 | static void ath9k_hw_set_operating_mode(struct ath_hw *ah, int opmode) | 969 | static 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 | ||
1003 | void ath9k_hw_get_delta_slope_vals(struct ath_hw *ah, u32 coef_scaled, | 994 | void 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)) |