source: branches/backfire/package/mac80211/patches/560-minstrel_ht_optimize.patch @ 28388

Last change on this file since 28388 was 28388, checked in by nbd, 5 years ago

mac80211: update to latest version from trunk

File size: 4.9 KB
  • net/mac80211/rc80211_minstrel_ht.h

    a b struct minstrel_mcs_group_data { 
    7070}; 
    7171 
    7272struct minstrel_ht_sta { 
     73        struct ieee80211_tx_rate tx_rates[3]; 
     74 
    7375        /* ampdu length (average, per sampling interval) */ 
    7476        unsigned int ampdu_len; 
    7577        unsigned int ampdu_packets; 
  • net/mac80211/rc80211_minstrel_ht.c

    a b const struct mcs_group minstrel_mcs_grou 
    8787 
    8888static u8 sample_table[SAMPLE_COLUMNS][MCS_GROUP_RATES]; 
    8989 
     90static void 
     91minstrel_ht_set_rate(struct minstrel_priv *mp, struct minstrel_ht_sta *mi, 
     92                     struct ieee80211_tx_rate *rate, int index, 
     93                     bool sample, bool rtscts); 
    9094/* 
    9195 * Perform EWMA (Exponentially Weighted Moving Average) calculation 
    9296 */ 
    minstrel_ht_calc_tp(struct minstrel_priv 
    174178        mr->cur_tp = MINSTREL_TRUNC((1000000 / usecs) * mr->probability); 
    175179} 
    176180 
     181static void 
     182minstrel_ht_update_rates(struct minstrel_priv *mp, struct minstrel_ht_sta *mi) 
     183{ 
     184        minstrel_ht_set_rate(mp, mi, &mi->tx_rates[0], mi->max_tp_rate, 
     185                             false, false); 
     186        minstrel_ht_set_rate(mp, mi, &mi->tx_rates[1], mi->max_tp_rate2, 
     187                             false, true); 
     188        minstrel_ht_set_rate(mp, mi, &mi->tx_rates[2], mi->max_prob_rate, 
     189                             false, true); 
     190} 
     191 
    177192/* 
    178193 * Update rate statistics and select new primary rates 
    179194 * 
    minstrel_ht_update_stats(struct minstrel 
    292307                } 
    293308        } 
    294309 
     310        minstrel_ht_update_rates(mp, mi); 
    295311        mi->stats_update = jiffies; 
    296312} 
    297313 
    minstrel_next_sample_idx(struct minstrel 
    330346} 
    331347 
    332348static void 
    333 minstrel_downgrade_rate(struct minstrel_ht_sta *mi, unsigned int *idx, 
    334                         bool primary) 
     349minstrel_downgrade_rate(struct minstrel_priv *mp, struct minstrel_ht_sta *mi, 
     350                        unsigned int *idx, bool primary) 
    335351{ 
    336352        int group, orig_group; 
    337353 
    minstrel_downgrade_rate(struct minstrel_ 
    350366                        *idx = mi->groups[group].max_tp_rate; 
    351367                else 
    352368                        *idx = mi->groups[group].max_tp_rate2; 
     369                minstrel_ht_update_rates(mp, mi); 
    353370                break; 
    354371        } 
    355372} 
    minstrel_ht_tx_status(void *priv, struct 
    450467        if (rate->attempts > 30 && 
    451468            MINSTREL_FRAC(rate->success, rate->attempts) < 
    452469            MINSTREL_FRAC(20, 100)) 
    453                 minstrel_downgrade_rate(mi, &mi->max_tp_rate, true); 
     470                minstrel_downgrade_rate(mp, mi, &mi->max_tp_rate, true); 
    454471 
    455472        rate2 = minstrel_get_ratestats(mi, mi->max_tp_rate2); 
    456473        if (rate2->attempts > 30 && 
    457474            MINSTREL_FRAC(rate2->success, rate2->attempts) < 
    458475            MINSTREL_FRAC(20, 100)) 
    459                 minstrel_downgrade_rate(mi, &mi->max_tp_rate2, false); 
     476                minstrel_downgrade_rate(mp, mi, &mi->max_tp_rate2, false); 
    460477 
    461478        if (time_after(jiffies, mi->stats_update + (mp->update_interval / 2 * HZ) / 1000)) { 
    462479                minstrel_ht_update_stats(mp, mi); 
    minstrel_calc_retransmit(struct minstrel 
    521538static void 
    522539minstrel_ht_set_rate(struct minstrel_priv *mp, struct minstrel_ht_sta *mi, 
    523540                     struct ieee80211_tx_rate *rate, int index, 
    524                      struct ieee80211_tx_rate_control *txrc, 
    525541                     bool sample, bool rtscts) 
    526542{ 
    527543        const struct mcs_group *group = &minstrel_mcs_groups[index / MCS_GROUP_RATES]; 
    minstrel_ht_get_rate(void *priv, struct  
    609625        struct minstrel_priv *mp = priv; 
    610626        int sample_idx; 
    611627        bool sample = false; 
     628        int last = 0; 
    612629 
    613630        if (rate_control_send_low(sta, priv_sta, txrc)) 
    614631                return; 
    minstrel_ht_get_rate(void *priv, struct  
    634651        if (sample_idx >= 0) { 
    635652                sample = true; 
    636653                minstrel_ht_set_rate(mp, mi, &ar[0], sample_idx, 
    637                         txrc, true, false); 
     654                        true, false); 
    638655                info->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE; 
    639656        } else { 
    640                 minstrel_ht_set_rate(mp, mi, &ar[0], mi->max_tp_rate, 
    641                         txrc, false, false); 
     657                ar[0] = mi->tx_rates[0]; 
    642658        } 
    643659 
    644660        if (mp->hw->max_rates >= 3) { 
    minstrel_ht_get_rate(void *priv, struct  
    648664                 * max_tp_rate -> max_tp_rate2 -> max_prob_rate by default. 
    649665                 */ 
    650666                if (sample_idx >= 0) 
    651                         minstrel_ht_set_rate(mp, mi, &ar[1], mi->max_tp_rate, 
    652                                 txrc, false, false); 
     667                        ar[1] = mi->tx_rates[0]; 
    653668                else 
    654                         minstrel_ht_set_rate(mp, mi, &ar[1], mi->max_tp_rate2, 
    655                                 txrc, false, true); 
    656  
    657                 minstrel_ht_set_rate(mp, mi, &ar[2], mi->max_prob_rate, 
    658                                      txrc, false, !sample); 
     669                        ar[1] = mi->tx_rates[1]; 
    659670 
    660                 ar[3].count = 0; 
    661                 ar[3].idx = -1; 
     671                ar[2] = mi->tx_rates[2]; 
     672                last = 3; 
    662673        } else if (mp->hw->max_rates == 2) { 
    663674                /* 
    664675                 * Only 2 tx rates supported, use 
    665676                 * sample_rate -> max_prob_rate for sampling and 
    666677                 * max_tp_rate -> max_prob_rate by default. 
    667678                 */ 
    668                 minstrel_ht_set_rate(mp, mi, &ar[1], mi->max_prob_rate, 
    669                                      txrc, false, !sample); 
    670  
    671                 ar[2].count = 0; 
    672                 ar[2].idx = -1; 
     679                ar[1] = mi->tx_rates[2]; 
     680                last = 2; 
    673681        } else { 
    674682                /* Not using MRR, only use the first rate */ 
    675                 ar[1].count = 0; 
    676                 ar[1].idx = -1; 
     683                last = 1; 
     684 
    677685        } 
     686        ar[last].count = 0; 
     687        ar[last].idx = -1; 
    678688 
    679689        mi->total_packets++; 
    680690 
    minstrel_ht_update_caps(void *priv, stru 
    766776        if (!n_supported) 
    767777                goto use_legacy; 
    768778 
     779        minstrel_ht_update_rates(mp, mi); 
    769780        return; 
    770781 
    771782use_legacy: 
Note: See TracBrowser for help on using the repository browser.