Changeset 30867


Ignore:
Timestamp:
2012-03-10T13:59:43+01:00 (6 years ago)
Author:
nbd
Message:

ath9k: merge an ANI improvement patch, improves performance in some environments

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/mac80211/patches/300-pending_work.patch

    r30865 r30867  
    15751575        else 
    15761576                goto unlock; 
    1577 @@ -2300,6 +2302,7 @@ static int ath9k_tx_last_beacon(struct i 
     1577@@ -1955,6 +1957,7 @@ static void ath9k_config_bss(struct ath_ 
     1578                sc->sc_flags &= ~SC_OP_ANI_RUN; 
     1579                del_timer_sync(&common->ani.timer); 
     1580                memset(&sc->caldata, 0, sizeof(sc->caldata)); 
     1581+               ath9k_hw_ani_init(sc->sc_ah); 
     1582        } 
     1583 } 
     1584  
     1585@@ -2300,6 +2303,7 @@ static int ath9k_tx_last_beacon(struct i 
    15781586        struct ath_vif *avp; 
    15791587        struct ath_buf *bf; 
     
    15831591  
    15841592        vif = sc->beacon.bslot[0]; 
    1585 @@ -2310,7 +2313,7 @@ static int ath9k_tx_last_beacon(struct i 
     1593@@ -2310,7 +2314,7 @@ static int ath9k_tx_last_beacon(struct i 
    15861594        if (!avp->is_bslot_active) 
    15871595                return 0; 
     
    16191627 }; 
    16201628  
     1629--- a/drivers/net/wireless/ath/ath9k/ani.c 
     1630+++ b/drivers/net/wireless/ath/ath9k/ani.c 
     1631@@ -46,8 +46,8 @@ static const struct ani_ofdm_level_entry 
     1632        {  5,  4,  1  }, /* lvl 5 */ 
     1633        {  6,  5,  1  }, /* lvl 6 */ 
     1634        {  7,  6,  1  }, /* lvl 7 */ 
     1635-       {  7,  7,  1  }, /* lvl 8 */ 
     1636-       {  7,  8,  0  }  /* lvl 9 */ 
     1637+       {  7,  6,  0  }, /* lvl 8 */ 
     1638+       {  7,  7,  0  }  /* lvl 9 */ 
     1639 }; 
     1640 #define ATH9K_ANI_OFDM_NUM_LEVEL \ 
     1641        ARRAY_SIZE(ofdm_level_table) 
     1642@@ -91,8 +91,8 @@ static const struct ani_cck_level_entry  
     1643        {  4,  0  }, /* lvl 4 */ 
     1644        {  5,  0  }, /* lvl 5 */ 
     1645        {  6,  0  }, /* lvl 6 */ 
     1646-       {  7,  0  }, /* lvl 7 (only for high rssi) */ 
     1647-       {  8,  0  }  /* lvl 8 (only for high rssi) */ 
     1648+       {  6,  0  }, /* lvl 7 (only for high rssi) */ 
     1649+       {  7,  0  }  /* lvl 8 (only for high rssi) */ 
     1650 }; 
     1651  
     1652 #define ATH9K_ANI_CCK_NUM_LEVEL \ 
     1653@@ -290,16 +290,9 @@ static void ath9k_hw_set_ofdm_nil(struct 
     1654                                     ATH9K_ANI_FIRSTEP_LEVEL, 
     1655                                     entry_ofdm->fir_step_level); 
     1656  
     1657-       if ((ah->opmode != NL80211_IFTYPE_STATION && 
     1658-            ah->opmode != NL80211_IFTYPE_ADHOC) || 
     1659-           aniState->noiseFloor <= aniState->rssiThrHigh) { 
     1660-               if (aniState->ofdmWeakSigDetectOff) 
     1661-                       /* force on ofdm weak sig detect */ 
     1662-                       ath9k_hw_ani_control(ah, 
     1663-                               ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION, 
     1664-                                            true); 
     1665-               else if (aniState->ofdmWeakSigDetectOff == 
     1666-                        entry_ofdm->ofdm_weak_signal_on) 
     1667+       if ((aniState->noiseFloor >= aniState->rssiThrHigh) && 
     1668+           (aniState->ofdmWeakSigDetectOff != 
     1669+            entry_ofdm->ofdm_weak_signal_on)) { 
     1670                        ath9k_hw_ani_control(ah, 
     1671                                ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION, 
     1672                                entry_ofdm->ofdm_weak_signal_on); 
     1673@@ -717,26 +710,30 @@ void ath9k_hw_ani_monitor(struct ath_hw  
     1674                ofdmPhyErrRate, aniState->cckNoiseImmunityLevel, 
     1675                cckPhyErrRate, aniState->ofdmsTurn); 
     1676  
     1677-       if (aniState->listenTime > 5 * ah->aniperiod) { 
     1678-               if (ofdmPhyErrRate <= ah->config.ofdm_trig_low && 
     1679-                   cckPhyErrRate <= ah->config.cck_trig_low) { 
     1680+       if (aniState->listenTime > ah->aniperiod) { 
     1681+               if (cckPhyErrRate < ah->config.cck_trig_low && 
     1682+                   ((ofdmPhyErrRate < ah->config.ofdm_trig_low && 
     1683+                     aniState->ofdmNoiseImmunityLevel < 
     1684+                     ATH9K_ANI_OFDM_DEF_LEVEL) || 
     1685+                    (ofdmPhyErrRate < ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI && 
     1686+                     aniState->ofdmNoiseImmunityLevel >= 
     1687+                     ATH9K_ANI_OFDM_DEF_LEVEL))) { 
     1688                        ath9k_hw_ani_lower_immunity(ah); 
     1689                        aniState->ofdmsTurn = !aniState->ofdmsTurn; 
     1690-               } 
     1691-               ath9k_ani_restart(ah); 
     1692-       } else if (aniState->listenTime > ah->aniperiod) { 
     1693-               /* check to see if need to raise immunity */ 
     1694-               if (ofdmPhyErrRate > ah->config.ofdm_trig_high && 
     1695-                   (cckPhyErrRate <= ah->config.cck_trig_high || 
     1696-                    aniState->ofdmsTurn)) { 
     1697+               } else if ((ofdmPhyErrRate > ah->config.ofdm_trig_high && 
     1698+                           aniState->ofdmNoiseImmunityLevel >= 
     1699+                           ATH9K_ANI_OFDM_DEF_LEVEL) || 
     1700+                          (ofdmPhyErrRate > 
     1701+                           ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI && 
     1702+                           aniState->ofdmNoiseImmunityLevel < 
     1703+                           ATH9K_ANI_OFDM_DEF_LEVEL)) { 
     1704                        ath9k_hw_ani_ofdm_err_trigger(ah); 
     1705-                       ath9k_ani_restart(ah); 
     1706                        aniState->ofdmsTurn = false; 
     1707                } else if (cckPhyErrRate > ah->config.cck_trig_high) { 
     1708                        ath9k_hw_ani_cck_err_trigger(ah); 
     1709-                       ath9k_ani_restart(ah); 
     1710                        aniState->ofdmsTurn = true; 
     1711                } 
     1712+               ath9k_ani_restart(ah); 
     1713        } 
     1714 } 
     1715 EXPORT_SYMBOL(ath9k_hw_ani_monitor); 
     1716@@ -911,3 +908,4 @@ void ath9k_hw_ani_init(struct ath_hw *ah 
     1717        ath9k_ani_restart(ah); 
     1718        ath9k_enable_mib_counters(ah); 
     1719 } 
     1720+EXPORT_SYMBOL(ath9k_hw_ani_init); 
     1721--- a/drivers/net/wireless/ath/ath9k/ani.h 
     1722+++ b/drivers/net/wireless/ath/ath9k/ani.h 
     1723@@ -25,11 +25,13 @@ 
     1724  
     1725 /* units are errors per second */ 
     1726 #define ATH9K_ANI_OFDM_TRIG_HIGH_OLD      500 
     1727-#define ATH9K_ANI_OFDM_TRIG_HIGH_NEW      1000 
     1728+#define ATH9K_ANI_OFDM_TRIG_HIGH_NEW      3500 
     1729+#define ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI 1000 
     1730  
     1731 /* units are errors per second */ 
     1732 #define ATH9K_ANI_OFDM_TRIG_LOW_OLD       200 
     1733 #define ATH9K_ANI_OFDM_TRIG_LOW_NEW       400 
     1734+#define ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI 900 
     1735  
     1736 /* units are errors per second */ 
     1737 #define ATH9K_ANI_CCK_TRIG_HIGH_OLD       200 
     1738@@ -53,7 +55,7 @@ 
     1739 #define ATH9K_ANI_RSSI_THR_LOW            7 
     1740  
     1741 #define ATH9K_ANI_PERIOD_OLD              100 
     1742-#define ATH9K_ANI_PERIOD_NEW              1000 
     1743+#define ATH9K_ANI_PERIOD_NEW              300 
     1744  
     1745 /* in ms */ 
     1746 #define ATH9K_ANI_POLLINTERVAL_OLD        100 
     1747--- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c 
     1748+++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c 
     1749@@ -1056,46 +1056,8 @@ static bool ar5008_hw_ani_control_old(st 
     1750                break; 
     1751        } 
     1752        case ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION:{ 
     1753-               static const int m1ThreshLow[] = { 127, 50 }; 
     1754-               static const int m2ThreshLow[] = { 127, 40 }; 
     1755-               static const int m1Thresh[] = { 127, 0x4d }; 
     1756-               static const int m2Thresh[] = { 127, 0x40 }; 
     1757-               static const int m2CountThr[] = { 31, 16 }; 
     1758-               static const int m2CountThrLow[] = { 63, 48 }; 
     1759                u32 on = param ? 1 : 0; 
     1760  
     1761-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW, 
     1762-                             AR_PHY_SFCORR_LOW_M1_THRESH_LOW, 
     1763-                             m1ThreshLow[on]); 
     1764-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW, 
     1765-                             AR_PHY_SFCORR_LOW_M2_THRESH_LOW, 
     1766-                             m2ThreshLow[on]); 
     1767-               REG_RMW_FIELD(ah, AR_PHY_SFCORR, 
     1768-                             AR_PHY_SFCORR_M1_THRESH, 
     1769-                             m1Thresh[on]); 
     1770-               REG_RMW_FIELD(ah, AR_PHY_SFCORR, 
     1771-                             AR_PHY_SFCORR_M2_THRESH, 
     1772-                             m2Thresh[on]); 
     1773-               REG_RMW_FIELD(ah, AR_PHY_SFCORR, 
     1774-                             AR_PHY_SFCORR_M2COUNT_THR, 
     1775-                             m2CountThr[on]); 
     1776-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW, 
     1777-                             AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW, 
     1778-                             m2CountThrLow[on]); 
     1779- 
     1780-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT, 
     1781-                             AR_PHY_SFCORR_EXT_M1_THRESH_LOW, 
     1782-                             m1ThreshLow[on]); 
     1783-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT, 
     1784-                             AR_PHY_SFCORR_EXT_M2_THRESH_LOW, 
     1785-                             m2ThreshLow[on]); 
     1786-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT, 
     1787-                             AR_PHY_SFCORR_EXT_M1_THRESH, 
     1788-                             m1Thresh[on]); 
     1789-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT, 
     1790-                             AR_PHY_SFCORR_EXT_M2_THRESH, 
     1791-                             m2Thresh[on]); 
     1792- 
     1793                if (on) 
     1794                        REG_SET_BIT(ah, AR_PHY_SFCORR_LOW, 
     1795                                    AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW); 
     1796--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c 
     1797+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c 
     1798@@ -824,55 +824,6 @@ static bool ar9003_hw_ani_control(struct 
     1799                 * on == 0 means more noise imm 
     1800                 */ 
     1801                u32 on = param ? 1 : 0; 
     1802-               /* 
     1803-                * make register setting for default 
     1804-                * (weak sig detect ON) come from INI file 
     1805-                */ 
     1806-               int m1ThreshLow = on ? 
     1807-                       aniState->iniDef.m1ThreshLow : m1ThreshLow_off; 
     1808-               int m2ThreshLow = on ? 
     1809-                       aniState->iniDef.m2ThreshLow : m2ThreshLow_off; 
     1810-               int m1Thresh = on ? 
     1811-                       aniState->iniDef.m1Thresh : m1Thresh_off; 
     1812-               int m2Thresh = on ? 
     1813-                       aniState->iniDef.m2Thresh : m2Thresh_off; 
     1814-               int m2CountThr = on ? 
     1815-                       aniState->iniDef.m2CountThr : m2CountThr_off; 
     1816-               int m2CountThrLow = on ? 
     1817-                       aniState->iniDef.m2CountThrLow : m2CountThrLow_off; 
     1818-               int m1ThreshLowExt = on ? 
     1819-                       aniState->iniDef.m1ThreshLowExt : m1ThreshLowExt_off; 
     1820-               int m2ThreshLowExt = on ? 
     1821-                       aniState->iniDef.m2ThreshLowExt : m2ThreshLowExt_off; 
     1822-               int m1ThreshExt = on ? 
     1823-                       aniState->iniDef.m1ThreshExt : m1ThreshExt_off; 
     1824-               int m2ThreshExt = on ? 
     1825-                       aniState->iniDef.m2ThreshExt : m2ThreshExt_off; 
     1826- 
     1827-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW, 
     1828-                             AR_PHY_SFCORR_LOW_M1_THRESH_LOW, 
     1829-                             m1ThreshLow); 
     1830-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW, 
     1831-                             AR_PHY_SFCORR_LOW_M2_THRESH_LOW, 
     1832-                             m2ThreshLow); 
     1833-               REG_RMW_FIELD(ah, AR_PHY_SFCORR, 
     1834-                             AR_PHY_SFCORR_M1_THRESH, m1Thresh); 
     1835-               REG_RMW_FIELD(ah, AR_PHY_SFCORR, 
     1836-                             AR_PHY_SFCORR_M2_THRESH, m2Thresh); 
     1837-               REG_RMW_FIELD(ah, AR_PHY_SFCORR, 
     1838-                             AR_PHY_SFCORR_M2COUNT_THR, m2CountThr); 
     1839-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW, 
     1840-                             AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW, 
     1841-                             m2CountThrLow); 
     1842- 
     1843-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT, 
     1844-                             AR_PHY_SFCORR_EXT_M1_THRESH_LOW, m1ThreshLowExt); 
     1845-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT, 
     1846-                             AR_PHY_SFCORR_EXT_M2_THRESH_LOW, m2ThreshLowExt); 
     1847-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT, 
     1848-                             AR_PHY_SFCORR_EXT_M1_THRESH, m1ThreshExt); 
     1849-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT, 
     1850-                             AR_PHY_SFCORR_EXT_M2_THRESH, m2ThreshExt); 
     1851  
     1852                if (on) 
     1853                        REG_SET_BIT(ah, AR_PHY_SFCORR_LOW, 
Note: See TracChangeset for help on using the changeset viewer.