diff options
author | Sujith <Sujith.Manoharan@atheros.com> | 2008-11-17 22:37:06 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-11-26 09:47:28 -0500 |
commit | fe7f4a77450c1d0e463a9b1456b40c2305433e41 (patch) | |
tree | e6f3b4532b1d5bda3e9863df21e48d0adc22522d /drivers | |
parent | 5ddfac3b550250388f1222ec7d09069784a68af6 (diff) |
ath9k: Remove ath_rate_softc
Move the hw rate tables to ath_softc, and access them directly.
tx_triglevel_max is global, move it to ath_rate_node.
Now that ath_rate_softc is gone, rate control attach becomes simpler.
Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/ath9k/core.c | 6 | ||||
-rw-r--r-- | drivers/net/wireless/ath9k/core.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/ath9k/main.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath9k/rc.c | 110 | ||||
-rw-r--r-- | drivers/net/wireless/ath9k/rc.h | 13 |
5 files changed, 45 insertions, 87 deletions
diff --git a/drivers/net/wireless/ath9k/core.c b/drivers/net/wireless/ath9k/core.c index ea332a2f18fe..6c872e704b93 100644 --- a/drivers/net/wireless/ath9k/core.c +++ b/drivers/net/wireless/ath9k/core.c | |||
@@ -1071,11 +1071,7 @@ int ath_init(u16 devid, struct ath_softc *sc) | |||
1071 | sc->sc_ani.sc_noise_floor = ATH_DEFAULT_NOISE_FLOOR; | 1071 | sc->sc_ani.sc_noise_floor = ATH_DEFAULT_NOISE_FLOOR; |
1072 | setup_timer(&sc->sc_ani.timer, ath_ani_calibrate, (unsigned long)sc); | 1072 | setup_timer(&sc->sc_ani.timer, ath_ani_calibrate, (unsigned long)sc); |
1073 | 1073 | ||
1074 | sc->sc_rc = ath_rate_attach(sc); | 1074 | ath_rate_attach(sc); |
1075 | if (sc->sc_rc == NULL) { | ||
1076 | error = -EIO; | ||
1077 | goto bad2; | ||
1078 | } | ||
1079 | 1075 | ||
1080 | if (ath9k_hw_getcapability(ah, ATH9K_CAP_CIPHER, | 1076 | if (ath9k_hw_getcapability(ah, ATH9K_CAP_CIPHER, |
1081 | ATH9K_CIPHER_TKIP, NULL)) { | 1077 | ATH9K_CIPHER_TKIP, NULL)) { |
diff --git a/drivers/net/wireless/ath9k/core.h b/drivers/net/wireless/ath9k/core.h index 2ff33b80b485..cf2d9410b3dd 100644 --- a/drivers/net/wireless/ath9k/core.h +++ b/drivers/net/wireless/ath9k/core.h | |||
@@ -784,7 +784,6 @@ struct ath_softc { | |||
784 | struct tasklet_struct bcon_tasklet; | 784 | struct tasklet_struct bcon_tasklet; |
785 | struct ath_config sc_config; | 785 | struct ath_config sc_config; |
786 | struct ath_hal *sc_ah; | 786 | struct ath_hal *sc_ah; |
787 | struct ath_rate_softc *sc_rc; | ||
788 | void __iomem *mem; | 787 | void __iomem *mem; |
789 | 788 | ||
790 | u8 sc_curbssid[ETH_ALEN]; | 789 | u8 sc_curbssid[ETH_ALEN]; |
@@ -859,6 +858,7 @@ struct ath_softc { | |||
859 | 858 | ||
860 | /* Rate */ | 859 | /* Rate */ |
861 | struct ieee80211_rate rates[IEEE80211_NUM_BANDS][ATH_RATE_MAX]; | 860 | struct ieee80211_rate rates[IEEE80211_NUM_BANDS][ATH_RATE_MAX]; |
861 | struct ath_rate_table *hw_rate_table[ATH9K_MODE_MAX]; | ||
862 | const struct ath9k_rate_table *sc_currates; | 862 | const struct ath9k_rate_table *sc_currates; |
863 | u8 sc_protrix; /* protection rate index */ | 863 | u8 sc_protrix; /* protection rate index */ |
864 | struct { | 864 | struct { |
diff --git a/drivers/net/wireless/ath9k/main.c b/drivers/net/wireless/ath9k/main.c index 7b843820fa66..ca7809836c33 100644 --- a/drivers/net/wireless/ath9k/main.c +++ b/drivers/net/wireless/ath9k/main.c | |||
@@ -737,7 +737,6 @@ static void ath_detach(struct ath_softc *sc) | |||
737 | ieee80211_unregister_hw(hw); | 737 | ieee80211_unregister_hw(hw); |
738 | 738 | ||
739 | ath_rate_control_unregister(); | 739 | ath_rate_control_unregister(); |
740 | ath_rate_detach(sc->sc_rc); | ||
741 | 740 | ||
742 | ath_rx_cleanup(sc); | 741 | ath_rx_cleanup(sc); |
743 | ath_tx_cleanup(sc); | 742 | ath_tx_cleanup(sc); |
diff --git a/drivers/net/wireless/ath9k/rc.c b/drivers/net/wireless/ath9k/rc.c index 0fa1b30bdcb6..59c146cdd0db 100644 --- a/drivers/net/wireless/ath9k/rc.c +++ b/drivers/net/wireless/ath9k/rc.c | |||
@@ -23,8 +23,6 @@ | |||
23 | /* FIXME: remove this include! */ | 23 | /* FIXME: remove this include! */ |
24 | #include "../net/mac80211/rate.h" | 24 | #include "../net/mac80211/rate.h" |
25 | 25 | ||
26 | static u32 tx_triglevel_max; | ||
27 | |||
28 | static struct ath_rate_table ar5416_11na_ratetable = { | 26 | static struct ath_rate_table ar5416_11na_ratetable = { |
29 | 42, | 27 | 42, |
30 | { | 28 | { |
@@ -436,7 +434,7 @@ static inline int8_t median(int8_t a, int8_t b, int8_t c) | |||
436 | } | 434 | } |
437 | } | 435 | } |
438 | 436 | ||
439 | static void ath_rc_sort_validrates(const struct ath_rate_table *rate_table, | 437 | static void ath_rc_sort_validrates(struct ath_rate_table *rate_table, |
440 | struct ath_rate_node *ath_rc_priv) | 438 | struct ath_rate_node *ath_rc_priv) |
441 | { | 439 | { |
442 | u8 i, j, idx, idx_next; | 440 | u8 i, j, idx, idx_next; |
@@ -481,7 +479,7 @@ static inline int ath_rc_isvalid_txmask(struct ath_rate_node *ath_rc_priv, | |||
481 | 479 | ||
482 | /* Iterators for valid_txrate_mask */ | 480 | /* Iterators for valid_txrate_mask */ |
483 | static inline int | 481 | static inline int |
484 | ath_rc_get_nextvalid_txrate(const struct ath_rate_table *rate_table, | 482 | ath_rc_get_nextvalid_txrate(struct ath_rate_table *rate_table, |
485 | struct ath_rate_node *ath_rc_priv, | 483 | struct ath_rate_node *ath_rc_priv, |
486 | u8 cur_valid_txrate, | 484 | u8 cur_valid_txrate, |
487 | u8 *next_idx) | 485 | u8 *next_idx) |
@@ -519,7 +517,7 @@ static int ath_rc_valid_phyrate(u32 phy, u32 capflag, int ignore_cw) | |||
519 | } | 517 | } |
520 | 518 | ||
521 | static inline int | 519 | static inline int |
522 | ath_rc_get_nextlowervalid_txrate(const struct ath_rate_table *rate_table, | 520 | ath_rc_get_nextlowervalid_txrate(struct ath_rate_table *rate_table, |
523 | struct ath_rate_node *ath_rc_priv, | 521 | struct ath_rate_node *ath_rc_priv, |
524 | u8 cur_valid_txrate, u8 *next_idx) | 522 | u8 cur_valid_txrate, u8 *next_idx) |
525 | { | 523 | { |
@@ -539,7 +537,7 @@ ath_rc_get_nextlowervalid_txrate(const struct ath_rate_table *rate_table, | |||
539 | */ | 537 | */ |
540 | static u8 | 538 | static u8 |
541 | ath_rc_sib_init_validrates(struct ath_rate_node *ath_rc_priv, | 539 | ath_rc_sib_init_validrates(struct ath_rate_node *ath_rc_priv, |
542 | const struct ath_rate_table *rate_table, | 540 | struct ath_rate_table *rate_table, |
543 | u32 capflag) | 541 | u32 capflag) |
544 | { | 542 | { |
545 | u8 i, hi = 0; | 543 | u8 i, hi = 0; |
@@ -572,7 +570,7 @@ ath_rc_sib_init_validrates(struct ath_rate_node *ath_rc_priv, | |||
572 | */ | 570 | */ |
573 | static u8 | 571 | static u8 |
574 | ath_rc_sib_setvalid_rates(struct ath_rate_node *ath_rc_priv, | 572 | ath_rc_sib_setvalid_rates(struct ath_rate_node *ath_rc_priv, |
575 | const struct ath_rate_table *rate_table, | 573 | struct ath_rate_table *rate_table, |
576 | struct ath_rateset *rateset, | 574 | struct ath_rateset *rateset, |
577 | u32 capflag) | 575 | u32 capflag) |
578 | { | 576 | { |
@@ -620,7 +618,7 @@ ath_rc_sib_setvalid_rates(struct ath_rate_node *ath_rc_priv, | |||
620 | 618 | ||
621 | static u8 | 619 | static u8 |
622 | ath_rc_sib_setvalid_htrates(struct ath_rate_node *ath_rc_priv, | 620 | ath_rc_sib_setvalid_htrates(struct ath_rate_node *ath_rc_priv, |
623 | const struct ath_rate_table *rate_table, | 621 | struct ath_rate_table *rate_table, |
624 | u8 *mcs_set, u32 capflag) | 622 | u8 *mcs_set, u32 capflag) |
625 | { | 623 | { |
626 | u8 i, j, hi = 0; | 624 | u8 i, j, hi = 0; |
@@ -653,50 +651,13 @@ ath_rc_sib_setvalid_htrates(struct ath_rate_node *ath_rc_priv, | |||
653 | return hi; | 651 | return hi; |
654 | } | 652 | } |
655 | 653 | ||
656 | struct ath_rate_softc *ath_rate_attach(struct ath_softc *sc) | ||
657 | { | ||
658 | struct ath_rate_softc *asc; | ||
659 | |||
660 | asc = kzalloc(sizeof(struct ath_rate_softc), GFP_KERNEL); | ||
661 | if (asc == NULL) | ||
662 | return NULL; | ||
663 | |||
664 | asc->hw_rate_table[ATH9K_MODE_11B] = &ar5416_11b_ratetable; | ||
665 | asc->hw_rate_table[ATH9K_MODE_11A] = &ar5416_11a_ratetable; | ||
666 | asc->hw_rate_table[ATH9K_MODE_11G] = &ar5416_11g_ratetable; | ||
667 | |||
668 | asc->hw_rate_table[ATH9K_MODE_11NA_HT20] = &ar5416_11na_ratetable; | ||
669 | asc->hw_rate_table[ATH9K_MODE_11NG_HT20] = &ar5416_11ng_ratetable; | ||
670 | |||
671 | asc->hw_rate_table[ATH9K_MODE_11NA_HT40PLUS] = | ||
672 | &ar5416_11na_ratetable; | ||
673 | asc->hw_rate_table[ATH9K_MODE_11NA_HT40MINUS] = | ||
674 | &ar5416_11na_ratetable; | ||
675 | asc->hw_rate_table[ATH9K_MODE_11NG_HT40PLUS] = | ||
676 | &ar5416_11ng_ratetable; | ||
677 | asc->hw_rate_table[ATH9K_MODE_11NG_HT40MINUS] = | ||
678 | &ar5416_11ng_ratetable; | ||
679 | |||
680 | /* Save Maximum TX Trigger Level (used for 11n) */ | ||
681 | tx_triglevel_max = sc->sc_ah->ah_caps.tx_triglevel_max; | ||
682 | |||
683 | return asc; | ||
684 | } | ||
685 | |||
686 | void ath_rate_detach(struct ath_rate_softc *asc) | ||
687 | { | ||
688 | if (asc != NULL) | ||
689 | kfree(asc); | ||
690 | } | ||
691 | |||
692 | u8 ath_rate_findrateix(struct ath_softc *sc, | 654 | u8 ath_rate_findrateix(struct ath_softc *sc, |
693 | u8 dot11rate) | 655 | u8 dot11rate) |
694 | { | 656 | { |
695 | const struct ath_rate_table *ratetable; | 657 | struct ath_rate_table *ratetable; |
696 | struct ath_rate_softc *rsc = sc->sc_rc; | ||
697 | int i; | 658 | int i; |
698 | 659 | ||
699 | ratetable = rsc->hw_rate_table[sc->sc_curmode]; | 660 | ratetable = sc->hw_rate_table[sc->sc_curmode]; |
700 | 661 | ||
701 | if (WARN_ON(!ratetable)) | 662 | if (WARN_ON(!ratetable)) |
702 | return 0; | 663 | return 0; |
@@ -711,7 +672,7 @@ u8 ath_rate_findrateix(struct ath_softc *sc, | |||
711 | 672 | ||
712 | static u8 ath_rc_ratefind_ht(struct ath_softc *sc, | 673 | static u8 ath_rc_ratefind_ht(struct ath_softc *sc, |
713 | struct ath_rate_node *ath_rc_priv, | 674 | struct ath_rate_node *ath_rc_priv, |
714 | const struct ath_rate_table *rate_table, | 675 | struct ath_rate_table *rate_table, |
715 | int probe_allowed, int *is_probing, | 676 | int probe_allowed, int *is_probing, |
716 | int is_retry) | 677 | int is_retry) |
717 | { | 678 | { |
@@ -843,7 +804,7 @@ static u8 ath_rc_ratefind_ht(struct ath_softc *sc, | |||
843 | return rate; | 804 | return rate; |
844 | } | 805 | } |
845 | 806 | ||
846 | static void ath_rc_rate_set_series(const struct ath_rate_table *rate_table , | 807 | static void ath_rc_rate_set_series(struct ath_rate_table *rate_table , |
847 | struct ath_rc_series *series, | 808 | struct ath_rc_series *series, |
848 | u8 tries, | 809 | u8 tries, |
849 | u8 rix, | 810 | u8 rix, |
@@ -864,7 +825,7 @@ static void ath_rc_rate_set_series(const struct ath_rate_table *rate_table , | |||
864 | 825 | ||
865 | static u8 ath_rc_rate_getidx(struct ath_softc *sc, | 826 | static u8 ath_rc_rate_getidx(struct ath_softc *sc, |
866 | struct ath_rate_node *ath_rc_priv, | 827 | struct ath_rate_node *ath_rc_priv, |
867 | const struct ath_rate_table *rate_table, | 828 | struct ath_rate_table *rate_table, |
868 | u8 rix, u16 stepdown, | 829 | u8 rix, u16 stepdown, |
869 | u16 min_rate) | 830 | u16 min_rate) |
870 | { | 831 | { |
@@ -898,11 +859,9 @@ static void ath_rc_ratefind(struct ath_softc *sc, | |||
898 | int is_retry) | 859 | int is_retry) |
899 | { | 860 | { |
900 | u8 try_per_rate = 0, i = 0, rix, nrix; | 861 | u8 try_per_rate = 0, i = 0, rix, nrix; |
901 | struct ath_rate_softc *asc = (struct ath_rate_softc *)sc->sc_rc; | ||
902 | struct ath_rate_table *rate_table; | 862 | struct ath_rate_table *rate_table; |
903 | 863 | ||
904 | rate_table = | 864 | rate_table = sc->hw_rate_table[sc->sc_curmode]; |
905 | (struct ath_rate_table *)asc->hw_rate_table[sc->sc_curmode]; | ||
906 | rix = ath_rc_ratefind_ht(sc, ath_rc_priv, rate_table, | 865 | rix = ath_rc_ratefind_ht(sc, ath_rc_priv, rate_table, |
907 | (rcflag & ATH_RC_PROBE_ALLOWED) ? 1 : 0, | 866 | (rcflag & ATH_RC_PROBE_ALLOWED) ? 1 : 0, |
908 | is_probe, is_retry); | 867 | is_probe, is_retry); |
@@ -1003,10 +962,7 @@ static void ath_rc_update_ht(struct ath_softc *sc, | |||
1003 | u32 now_msec = jiffies_to_msecs(jiffies); | 962 | u32 now_msec = jiffies_to_msecs(jiffies); |
1004 | int state_change = FALSE, rate, count; | 963 | int state_change = FALSE, rate, count; |
1005 | u8 last_per; | 964 | u8 last_per; |
1006 | struct ath_rate_softc *asc = (struct ath_rate_softc *)sc->sc_rc; | 965 | struct ath_rate_table *rate_table = sc->hw_rate_table[sc->sc_curmode]; |
1007 | struct ath_rate_table *rate_table = | ||
1008 | (struct ath_rate_table *)asc->hw_rate_table[sc->sc_curmode]; | ||
1009 | |||
1010 | static u32 nretry_to_per_lookup[10] = { | 966 | static u32 nretry_to_per_lookup[10] = { |
1011 | 100 * 0 / 1, | 967 | 100 * 0 / 1, |
1012 | 100 * 1 / 4, | 968 | 100 * 1 / 4, |
@@ -1330,15 +1286,13 @@ static void ath_rc_update(struct ath_softc *sc, | |||
1330 | struct ath_tx_info_priv *info_priv, int final_ts_idx, | 1286 | struct ath_tx_info_priv *info_priv, int final_ts_idx, |
1331 | int xretries, int long_retry) | 1287 | int xretries, int long_retry) |
1332 | { | 1288 | { |
1333 | struct ath_rate_softc *asc = (struct ath_rate_softc *)sc->sc_rc; | ||
1334 | struct ath_rate_table *rate_table; | 1289 | struct ath_rate_table *rate_table; |
1335 | struct ath_rc_series rcs[4]; | 1290 | struct ath_rc_series rcs[4]; |
1336 | u8 flags; | 1291 | u8 flags; |
1337 | u32 series = 0, rix; | 1292 | u32 series = 0, rix; |
1338 | 1293 | ||
1339 | memcpy(rcs, info_priv->rcs, 4 * sizeof(rcs[0])); | 1294 | memcpy(rcs, info_priv->rcs, 4 * sizeof(rcs[0])); |
1340 | rate_table = (struct ath_rate_table *) | 1295 | rate_table = sc->hw_rate_table[sc->sc_curmode]; |
1341 | asc->hw_rate_table[sc->sc_curmode]; | ||
1342 | ASSERT(rcs[0].tries != 0); | 1296 | ASSERT(rcs[0].tries != 0); |
1343 | 1297 | ||
1344 | /* | 1298 | /* |
@@ -1432,7 +1386,7 @@ static void ath_rate_tx_complete(struct ath_softc *sc, | |||
1432 | */ | 1386 | */ |
1433 | if (info_priv->tx.ts_flags & | 1387 | if (info_priv->tx.ts_flags & |
1434 | (ATH9K_TX_DATA_UNDERRUN | ATH9K_TX_DELIM_UNDERRUN) && | 1388 | (ATH9K_TX_DATA_UNDERRUN | ATH9K_TX_DELIM_UNDERRUN) && |
1435 | ((sc->sc_ah->ah_txTrigLevel) >= tx_triglevel_max)) { | 1389 | ((sc->sc_ah->ah_txTrigLevel) >= rc_priv->tx_triglevel_max)) { |
1436 | tx_status = 1; | 1390 | tx_status = 1; |
1437 | is_underrun = 1; | 1391 | is_underrun = 1; |
1438 | } | 1392 | } |
@@ -1452,21 +1406,17 @@ static void ath_rc_init(struct ath_softc *sc, | |||
1452 | struct ieee80211_sta *sta) | 1406 | struct ieee80211_sta *sta) |
1453 | { | 1407 | { |
1454 | struct ath_rate_table *rate_table = NULL; | 1408 | struct ath_rate_table *rate_table = NULL; |
1455 | struct ath_rate_softc *asc = (struct ath_rate_softc *)sc->sc_rc; | ||
1456 | struct ath_rateset *rateset = &ath_rc_priv->neg_rates; | 1409 | struct ath_rateset *rateset = &ath_rc_priv->neg_rates; |
1457 | u8 *ht_mcs = (u8 *)&ath_rc_priv->neg_ht_rates; | 1410 | u8 *ht_mcs = (u8 *)&ath_rc_priv->neg_ht_rates; |
1458 | u8 i, j, k, hi = 0, hthi = 0; | 1411 | u8 i, j, k, hi = 0, hthi = 0; |
1459 | 1412 | ||
1460 | rate_table = (struct ath_rate_table *) | 1413 | rate_table = sc->hw_rate_table[sc->sc_curmode]; |
1461 | asc->hw_rate_table[sc->sc_curmode]; | ||
1462 | 1414 | ||
1463 | if (sta->ht_cap.ht_supported) { | 1415 | if (sta->ht_cap.ht_supported) { |
1464 | if (sband->band == IEEE80211_BAND_2GHZ) | 1416 | if (sband->band == IEEE80211_BAND_2GHZ) |
1465 | rate_table = (struct ath_rate_table *) | 1417 | rate_table = sc->hw_rate_table[ATH9K_MODE_11NG_HT20]; |
1466 | asc->hw_rate_table[ATH9K_MODE_11NG_HT20]; | ||
1467 | else | 1418 | else |
1468 | rate_table = (struct ath_rate_table *) | 1419 | rate_table = sc->hw_rate_table[ATH9K_MODE_11NA_HT20]; |
1469 | asc->hw_rate_table[ATH9K_MODE_11NA_HT20]; | ||
1470 | 1420 | ||
1471 | ath_rc_priv->ht_cap = (WLAN_RC_HT_FLAG | WLAN_RC_DS_FLAG); | 1421 | ath_rc_priv->ht_cap = (WLAN_RC_HT_FLAG | WLAN_RC_DS_FLAG); |
1472 | if (sta->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) | 1422 | if (sta->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) |
@@ -1691,8 +1641,8 @@ static void *ath_rate_alloc_sta(void *priv, struct ieee80211_sta *sta, gfp_t gfp | |||
1691 | return NULL; | 1641 | return NULL; |
1692 | } | 1642 | } |
1693 | 1643 | ||
1694 | rate_priv->asc = sc->sc_rc; | ||
1695 | rate_priv->rssi_down_time = jiffies_to_msecs(jiffies); | 1644 | rate_priv->rssi_down_time = jiffies_to_msecs(jiffies); |
1645 | rate_priv->tx_triglevel_max = sc->sc_ah->ah_caps.tx_triglevel_max; | ||
1696 | 1646 | ||
1697 | return rate_priv; | 1647 | return rate_priv; |
1698 | } | 1648 | } |
@@ -1717,6 +1667,28 @@ static struct rate_control_ops ath_rate_ops = { | |||
1717 | .free_sta = ath_rate_free_sta, | 1667 | .free_sta = ath_rate_free_sta, |
1718 | }; | 1668 | }; |
1719 | 1669 | ||
1670 | void ath_rate_attach(struct ath_softc *sc) | ||
1671 | { | ||
1672 | sc->hw_rate_table[ATH9K_MODE_11B] = | ||
1673 | &ar5416_11b_ratetable; | ||
1674 | sc->hw_rate_table[ATH9K_MODE_11A] = | ||
1675 | &ar5416_11a_ratetable; | ||
1676 | sc->hw_rate_table[ATH9K_MODE_11G] = | ||
1677 | &ar5416_11g_ratetable; | ||
1678 | sc->hw_rate_table[ATH9K_MODE_11NA_HT20] = | ||
1679 | &ar5416_11na_ratetable; | ||
1680 | sc->hw_rate_table[ATH9K_MODE_11NG_HT20] = | ||
1681 | &ar5416_11ng_ratetable; | ||
1682 | sc->hw_rate_table[ATH9K_MODE_11NA_HT40PLUS] = | ||
1683 | &ar5416_11na_ratetable; | ||
1684 | sc->hw_rate_table[ATH9K_MODE_11NA_HT40MINUS] = | ||
1685 | &ar5416_11na_ratetable; | ||
1686 | sc->hw_rate_table[ATH9K_MODE_11NG_HT40PLUS] = | ||
1687 | &ar5416_11ng_ratetable; | ||
1688 | sc->hw_rate_table[ATH9K_MODE_11NG_HT40MINUS] = | ||
1689 | &ar5416_11ng_ratetable; | ||
1690 | } | ||
1691 | |||
1720 | int ath_rate_control_register(void) | 1692 | int ath_rate_control_register(void) |
1721 | { | 1693 | { |
1722 | return ieee80211_rate_control_register(&ath_rate_ops); | 1694 | return ieee80211_rate_control_register(&ath_rate_ops); |
diff --git a/drivers/net/wireless/ath9k/rc.h b/drivers/net/wireless/ath9k/rc.h index 07319c6c2e02..30248de5b2b6 100644 --- a/drivers/net/wireless/ath9k/rc.h +++ b/drivers/net/wireless/ath9k/rc.h | |||
@@ -199,15 +199,6 @@ struct ath_rateset { | |||
199 | u8 rs_rates[ATH_RATE_MAX]; | 199 | u8 rs_rates[ATH_RATE_MAX]; |
200 | }; | 200 | }; |
201 | 201 | ||
202 | /* per-device state */ | ||
203 | struct ath_rate_softc { | ||
204 | /* phy tables that contain rate control data */ | ||
205 | const void *hw_rate_table[ATH9K_MODE_MAX]; | ||
206 | |||
207 | /* -1 or index of fixed rate */ | ||
208 | int fixedrix; | ||
209 | }; | ||
210 | |||
211 | /** | 202 | /** |
212 | * struct ath_rate_node - Rate Control priv data | 203 | * struct ath_rate_node - Rate Control priv data |
213 | * @state: RC state | 204 | * @state: RC state |
@@ -261,6 +252,7 @@ struct ath_rate_node { | |||
261 | u32 per_down_time; | 252 | u32 per_down_time; |
262 | u32 probe_interval; | 253 | u32 probe_interval; |
263 | u32 prev_data_rix; | 254 | u32 prev_data_rix; |
255 | u32 tx_triglevel_max; | ||
264 | struct ath_tx_ratectrl_state state[MAX_TX_RATE_TBL]; | 256 | struct ath_tx_ratectrl_state state[MAX_TX_RATE_TBL]; |
265 | struct ath_rateset neg_rates; | 257 | struct ath_rateset neg_rates; |
266 | struct ath_rateset neg_ht_rates; | 258 | struct ath_rateset neg_ht_rates; |
@@ -276,8 +268,7 @@ struct ath_tx_info_priv { | |||
276 | u8 min_rate; | 268 | u8 min_rate; |
277 | }; | 269 | }; |
278 | 270 | ||
279 | struct ath_rate_softc *ath_rate_attach(struct ath_softc *sch); | 271 | void ath_rate_attach(struct ath_softc *sc); |
280 | void ath_rate_detach(struct ath_rate_softc *asc); | ||
281 | u8 ath_rate_findrateix(struct ath_softc *sc, u8 dot11_rate); | 272 | u8 ath_rate_findrateix(struct ath_softc *sc, u8 dot11_rate); |
282 | int ath_rate_control_register(void); | 273 | int ath_rate_control_register(void); |
283 | void ath_rate_control_unregister(void); | 274 | void ath_rate_control_unregister(void); |