linux/net/mac80211/rc80211_minstrel.c
<<
tionv2./spa > v2./form > v2.a tionv2 href="../linux+v3.17.1/net/mac80211/rc80211_minstrel.c">tionv2.img src="../.static/gfx/right.png" alt=">>">ti./spa >ti.spa class="lxr_search">tiontionv2.input typionhidden" namionnavtarget" /option">tionv2.input typiontext" namionsearch" idonsearch">tionv2.butt.3Search v2./form > ./spa >ti.spa class="lxr_prefs" > v2.a href="+prefs?return=net/mac80211/rc80211_minstrel.c"tionv2 onclick="return ajax_prefs();">tionv2Prefs> v2./a>ti./spa >onv2 2./div >onv2 2.form ac" ="ajax+*" method="post" onsubmit="return false;">ti.input typionhidden" namionajax_lookup" idonajax_lookup" /option">tonv2 2./form >tonv2 2.div class="headingbott.m">
onv2
onv2 v2 2.div idonsearch_results" class="search_results"> v >onv2 2./div > .div idoncontent">> .div idonfile_contents"
2 21./a>.spa  class="comment">/*./spa  >2 22./a>.spa  class="comment"> * Copyright (C) 2008 Felix Fietkau <nbd@openwrt.org>./spa  >2 23./a>.spa  class="comment"> *./spa  >2 24./a>.spa  class="comment"> * This program is free software; you ca  redistribute it and/or modify./spa  >2 25./a>.spa  class="comment"> * it under the terms of the GNU General Public License vers2.3<2 as./spa  >2 26./a>.spa  class="comment"> * published by the Free Software Founda"
	 ../spa  >2 27./a>.spa  class="comment"> *./spa  >2 28./a>.spa  class="comment"> * Based .32 29./a>.spa  class="comment"> *   Copyright (C) 2005-2007 Derek Smithies <derek@indranet.co.nz>./spa  >2 .11"a>.spa  class="comment"> *   Sponsored by Indranet Technologies Ltd./spa  >2 11./a>.spa  class="comment"> *./spa  >2 12./a>.spa  class="comment"> * Based .32 13./a>.spa  class="comment"> *   Copyright (c) 2005 John Bicket./spa  >2 14./a>.spa  class="comment"> *   All rights reserved../spa  >2 15./a>.spa  class="comment"> *./spa  >2 16./a>.spa  class="comment"> *   Redistribut2.32 17./a>.spa  class="comment"> *   modifica"
	 , are permitted provided that the following condi"
	 s./spa  >2 18./a>.spa  class="comment"> *   are met:./spa  >2 19./a>.spa  class="comment"> *   1. Redistribut2.3s of source2 211"a>.spa  class="comment"> *      notice, this list of condi"
	 s2 21./a>.spa  class="comment"> *      without modifica"
	 ../spa  >2 22./a>.spa  class="comment"> * 2 2. Redistribut2.3s i32 23./a>.spa  class="comment"> *      similar to the "NO WARRANTY" disclaimer below ("Disclaimer")2 24./a>.spa  class="comment"> *      redistribut2.32 25./a>.spa  class="comment"> *      similar Disclaimer requirement for further2 26./a>.spa  class="comment"> *   3. Neither2 27./a>.spa  class="comment"> *   v2 of any contributors may be used to endorse or promote products derived./spa  >2 28./a>.spa  class="comment"> *      from this software without specific prior written permiss2.3../spa  >2 29./a>.spa  class="comment"> *./spa  >2 311"a>.spa  class="comment"> *   Alterna"
vely, this software may be distributed under the terms of the./spa  >2 31./a>.spa  class="comment"> *   GNU General Public License ("GPL")2 32./a>.spa  class="comment"> * 2 Software Founda"
	 ../spa  >2 33./a>.spa  class="comment"> *./spa  >2 34./a>.spa  class="comment"> *   NO WARRANTY./spa  >2 35./a>.spa  class="comment"> *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS./spa  >2 36./a>.spa  class="comment"> *   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT./spa  >2 37./a>.spa  class="comment"> *   LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY./spa  >2 38./a>.spa  class="comment"> *   AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL./spa  >2 39./a>.spa  class="comment"> *   THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,./spa  >2 411"a>.spa  class="comment"> *   OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF./spa  >2 41./a>.spa  class="comment"> *   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS./spa  >2 42./a>.spa  class="comment"> * 2 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER./spa  >2 43./a>.spa  class="comment"> *   IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)./spa  >2 44./a>.spa  class="comment"> *   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF./spa  >2 45./a>.spa  class="comment"> *   THE POSSIBILITY OF SUCH DAMAGES../spa  >2 46./a>.spa  class="comment"> */./spa  >2 47./a>#i3clude <linux/netdevice.h./a>>>2 48./a>#i3clude <linux/typis.h./a>>>2 49./a>#i3clude <linux/skbuff.h./a>>>2 50./a>#i3clude <linux/debugfs.h./a>>>2 51./a>#i3clude <linux/random.h./a>>>2 52./a>#i3clude <linux/ieee80211.h./a>>>2 53./a>#i3clude <linux/slab.h./a>>>2 54./a>#i3clude <net/mac80211.h./a>>>2 55./a>#i3clude "rate.h./a>">2 56./a>#i3clude "rc80211_minstrel.h./a>">2 57./a>>2 58./a>#define2.a href="+code=SAMPLE_COLUMNS" class="sref">SAMPLE_COLUMNS./a>2 .1>2 59./a>#define2.a href="+code=SAMPLE_TBL" class="sref">SAMPLE_TBL./a>(.a href="+code=_mi" class="sref">_mi./a>,2.a href="+code=_idx" class="sref">_idx./a>,2.a href="+code=_col" class="sref">_col./a>) \>2 60./a>2               .a href="+code=_mi" class="sref">_mi./a>->.a href="+code=sample_table" class="sref">sample_table./a>[(.a href="+code=_idx" class="sref">_idx./a> * .a href="+code=SAMPLE_COLUMNS" class="sref">SAMPLE_COLUMNS./a>) +2.a href="+code=_col" class="sref">_col./a>]>2 61./a>>2 62./a>.spa  class="comment">/* convert mac80211 rate index to local array index */./spa  >2 63./a>static2.a href="+code=inline" class="sref">inline./a> int>2 64./a>.a href="+code=rix_to_ndx" class="sref">rix_to_ndx./a>(struct2.a href="+code=minstrel_sta_info" class="sref">minstrel_sta_info./a> *.a href="+code=mi" class="sref">mi./a>,2int2.a href="+code=rix" class="sref">rix./a>)>2 65./a>{>2 66./a>2       int2.a href="+code=i" class="sref">i./a> =2.a href="+code=rix" class="sref">rix./a>;>2 67./a>2       for (.a href="+code=i" class="sref">i./a> =2.a href="+code=rix" class="sref">rix./a>;2.a href="+code=i" class="sref">i./a> >= 0;2.a href="+code=i" class="sref">i./a>--)>2 68./a>2               if (.a href="+code=mi" class="sref">mi./a>->.a href="+code=r" class="sref">r./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=rix" class="sref">rix./a> ==2.a href="+code=rix" class="sref">rix./a>)>2 69./a>2                       break;>2 70./a>2       return .a href="+code=i" class="sref">i./a>;>2 71./a>}>2 72./a>>2 73./a>static2void>2 74./a>.a href="+code=minstrel_update_stats" class="sref">minstrel_update_stats./a>(struct2.a href="+code=minstrel_priv" class="sref">minstrel_priv./a> *.a href="+code=mp" class="sref">mp./a>,2struct2.a href="+code=minstrel_sta_info" class="sref">minstrel_sta_info./a> *.a href="+code=mi" class="sref">mi./a>)>2 75./a>{>2 76./a>2       .a href="+code=u32" class="sref">u32./a>2.a href="+code=max_tp" class="sref">max_tp./a> =20,2.a href="+code=index_max_tp" class="sref">index_max_tp./a> =20,2.a href="+code=index_max_tp2" class="sref">index_max_tp2./a> =20;>2 77./a>2       .a href="+code=u32" class="sref">u32./a>2.a href="+code=max_prob" class="sref">max_prob./a> =20,2.a href="+code=index_max_prob" class="sref">index_max_prob./a> =20;>2 78./a>2       .a href="+code=u32" class="sref">u32./a>2.a href="+code=usecs" class="sref">usecs./a>;>2 79./a>2       .a href="+code=u32" class="sref">u32./a>2.a href="+code=p" class="sref">p./a>;>2 80./a>2       int2.a href="+code=i" class="sref">i./a>;>2 81./a>>2 82./a>2       .a href="+code=mi" class="sref">mi./a>->.a href="+code=stats_update" class="sref">stats_update./a> =2.a href="+code=jiffies" class="sref">jiffies./a>;>2 83./a>2       for (.a href="+code=i" class="sref">i./a> =20;2.a href="+code=i" class="sref">i./a> < .a href="+code=mi" class="sref">mi./a>->.a href="+code=n_rates" class="sref">n_rates./a>;2.a href="+code=i" class="sref">i./a>++) {>2 84./a>2               struct2.a href="+code=minstrel_rate" class="sref">minstrel_rate./a> *.a href="+code=mr" class="sref">mr./a> =2&.a href="+code=mi" class="sref">mi./a>->.a href="+code=r" class="sref">r./a>[.a href="+code=i" class="sref">i./a>];>2 85./a>>2 86./a>2               .a href="+code=usecs" class="sref">usecs./a> =2.a href="+code=mr" class="sref">mr./a>->.a href="+code=perfect_tx_time" class="sref">perfect_tx_time./a>;>2 87./a>2               if (!.a href="+code=usecs" class="sref">usecs./a>)>2 88./a>2                       .a href="+code=usecs" class="sref">usecs./a> =21000000;>2 89./a>>2 90./a>2               .spa  class="comment">/* To avoid rounding issues, probabilities scale from 0 (0%)./spa  >2 91./a>.spa  class="comment">                 * to 18000 (100%) */./spa  >2 92./a>2               if (.a href="+code=mr" class="sref">mr./a>->.a href="+code=attempts" class="sref">attempts./a>) {>2 93./a>2                       .a href="+code=p" class="sref">p./a> =2(.a href="+code=mr" class="sref">mr./a>->.a href="+code=success" class="sref">success./a> * 18000) /2.a href="+code=mr" class="sref">mr./a>->.a href="+code=attempts" class="sref">attempts./a>;>2 94./a>2                       .a href="+code=mr" class="sref">mr./a>->.a href="+code=succ_hist" class="sref">succ_hist./a>2+=2.a href="+code=mr" class="sref">mr./a>->.a href="+code=success" class="sref">success./a>;>2 95./a>2                       .a href="+code=mr" class="sref">mr./a>->.a href="+code=att_hist" class="sref">att_hist./a>2+=2.a href="+code=mr" class="sref">mr./a>->.a href="+code=attempts" class="sref">attempts./a>;>2 96./a>2                       .a href="+code=mr" class="sref">mr./a>->.a href="+code=cur_prob" class="sref">cur_prob./a> =2.a href="+code=p" class="sref">p./a>;>2 97./a>2                       .a href="+code=p" class="sref">p./a> =2((.a href="+code=p" class="sref">p./a> * (100 - .a href="+code=mp" class="sref">mp./a>->.a href="+code=ewma_level" class="sref">ewma_level./a>)) +2(.a href="+code=mr" class="sref">mr./a>->.a href="+code=probability" class="sref">probability./a> *>2 98./a>2                               .a href="+code=mp" class="sref">mp./a>->.a href="+code=ewma_level" class="sref">ewma_level./a>)) /2100;>2 99./a>2                       .a href="+code=mr" class="sref">mr./a>->.a href="+code=probability" class="sref">probability./a> =2.a href="+code=p" class="sref">p./a>;>2100./a>2                       .a href="+code=mr" class="sref">mr./a>->.a href="+code=cur_tp" class="sref">cur_tp./a> =2.a href="+code=p" class="sref">p./a> * (1000000 /2.a href="+code=usecs" class="sref">usecs./a>);>2101./a>2               }>2102./a>>2103./a>2               .a href="+code=mr" class="sref">mr./a>->.a href="+code=last_success" class="sref">last_success./a> =2.a href="+code=mr" class="sref">mr./a>->.a href="+code=success" class="sref">success./a>;>2104./a>2               .a href="+code=mr" class="sref">mr./a>->.a href="+code=last_attempts" class="sref">last_attempts./a> =2.a href="+code=mr" class="sref">mr./a>->.a href="+code=attempts" class="sref">attempts./a>;>2105./a>2               .a href="+code=mr" class="sref">mr./a>->.a href="+code=success" class="sref">success./a> =20;>2106./a>2               .a href="+code=mr" class="sref">mr./a>->.a href="+code=attempts" class="sref">attempts./a> =20;>2107./a>>2108./a>2               .spa  class="comment">/* Sample less often below the 10% chance of success../spa  >2109./a>.spa  class="comment">                 * Sample less often above2110./a>2               if ((.a href="+code=mr" class="sref">mr./a>->.a href="+code=probability" class="sref">probability./a> > 17100) ||2(.a href="+code=mr" class="sref">mr./a>->.a href="+code=probability" class="sref">probability./a> < 1800)) {>2111./a>2                       .a href="+code=mr" class="sref">mr./a>->.a href="+code=adjusted_retry_count" class="sref">adjusted_retry_count./a> =2.a href="+code=mr" class="sref">mr./a>->.a href="+code=retry_count" class="sref">retry_count./a> >> 1;>2112./a>2                       if (.a href="+code=mr" class="sref">mr./a>->.a href="+code=adjusted_retry_count" class="sref">adjusted_retry_count./a> > 2)>2113./a>2                               .a href="+code=mr" class="sref">mr./a>->.a href="+code=adjusted_retry_count" class="sref">adjusted_retry_count./a> =22;>2114./a>2                       .a href="+code=mr" class="sref">mr./a>->.a href="+code=sample_limit" class="sref">sample_limit./a> =24;>2115./a>2               } else {>2116./a>2                       .a href="+code=mr" class="sref">mr./a>->.a href="+code=sample_limit" class="sref">sample_limit./a> =2-1;>2117./a>2                       .a href="+code=mr" class="sref">mr./a>->.a href="+code=adjusted_retry_count" class="sref">adjusted_retry_count./a> =2.a href="+code=mr" class="sref">mr./a>->.a href="+code=retry_count" class="sref">retry_count./a>;>2118./a>2               }>2119./a>2               if (!.a href="+code=mr" class="sref">mr./a>->.a href="+code=adjusted_retry_count" class="sref">adjusted_retry_count./a>)>2120./a>2                       .a href="+code=mr" class="sref">mr./a>->.a href="+code=adjusted_retry_count" class="sref">adjusted_retry_count./a> =22;>2121./a>2       }>2122./a>>2123./a>2       for (.a href="+code=i" class="sref">i./a> =20;2.a href="+code=i" class="sref">i./a> < .a href="+code=mi" class="sref">mi./a>->.a href="+code=n_rates" class="sref">n_rates./a>;2.a href="+code=i" class="sref">i./a>++) {>2124./a>2               struct2.a href="+code=minstrel_rate" class="sref">minstrel_rate./a> *.a href="+code=mr" class="sref">mr./a> =2&.a href="+code=mi" class="sref">mi./a>->.a href="+code=r" class="sref">r./a>[.a href="+code=i" class="sref">i./a>];>2125./a>2               if (.a href="+code=max_tp" class="sref">max_tp./a> < .a href="+code=mr" class="sref">mr./a>->.a href="+code=cur_tp" class="sref">cur_tp./a>) {>2126./a>2                       .a href="+code=index_max_tp" class="sref">index_max_tp./a> =2.a href="+code=i" class="sref">i./a>;>2127./a>2                       .a href="+code=max_tp" class="sref">max_tp./a> =2.a href="+code=mr" class="sref">mr./a>->.a href="+code=cur_tp" class="sref">cur_tp./a>;>2128./a>2               }>2129./a>2               if (.a href="+code=max_prob" class="sref">max_prob./a> < .a href="+code=mr" class="sref">mr./a>->.a href="+code=probability" class="sref">probability./a>) {>2130./a>2                       .a href="+code=index_max_prob" class="sref">index_max_prob./a> =2.a href="+code=i" class="sref">i./a>;>2131./a>2                       .a href="+code=max_prob" class="sref">max_prob./a> =2.a href="+code=mr" class="sref">mr./a>->.a href="+code=probability" class="sref">probability./a>;>2132./a>2               }>2133./a>2       }>2134./a>>2135./a>2       .a href="+code=max_tp" class="sref">max_tp./a> =20;>2136./a>2       for (.a href="+code=i" class="sref">i./a> =20;2.a href="+code=i" class="sref">i./a> < .a href="+code=mi" class="sref">mi./a>->.a href="+code=n_rates" class="sref">n_rates./a>;2.a href="+code=i" class="sref">i./a>++) {>2137./a>2               struct2.a href="+code=minstrel_rate" class="sref">minstrel_rate./a> *.a href="+code=mr" class="sref">mr./a> =2&.a href="+code=mi" class="sref">mi./a>->.a href="+code=r" class="sref">r./a>[.a href="+code=i" class="sref">i./a>];>2138./a>>2139./a>2               if (.a href="+code=i" class="sref">i./a> ==2.a href="+code=index_max_tp" class="sref">index_max_tp./a>)>2140./a>2                       continue;>2141./a>>2142./a>2               if (.a href="+code=max_tp" class="sref">max_tp./a> < .a href="+code=mr" class="sref">mr./a>->.a href="+code=cur_tp" class="sref">cur_tp./a>) {>2143./a>2                       .a href="+code=index_max_tp2" class="sref">index_max_tp2./a> =2.a href="+code=i" class="sref">i./a>;>2144./a>2                       .a href="+code=max_tp" class="sref">max_tp./a> =2.a href="+code=mr" class="sref">mr./a>->.a href="+code=cur_tp" class="sref">cur_tp./a>;>2145./a>2               }>2146./a>2       }>2147./a>2       .a href="+code=mi" class="sref">mi./a>->.a href="+code=max_tp_rate" class="sref">max_tp_rate./a> =2.a href="+code=index_max_tp" class="sref">index_max_tp./a>;>2148./a>2       .a href="+code=mi" class="sref">mi./a>->.a href="+code=max_tp_rate2" class="sref">max_tp_rate2./a> =2.a href="+code=index_max_tp2" class="sref">index_max_tp2./a>;>2149./a>2       .a href="+code=mi" class="sref">mi./a>->.a href="+code=max_prob_rate" class="sref">max_prob_rate./a> =2.a href="+code=index_max_prob" class="sref">index_max_prob./a>;>2150./a>}>2151./a>>2152./a>static2void>2153./a>.a href="+code=minstrel_tx_status" class="sref">minstrel_tx_status./a>(void *.a href="+code=priv" class="sref">priv./a>,2struct2.a href="+code=ieee80211_supported_band" class="sref">ieee80211_supported_band./a> *.a href="+code=sband" class="sref">sband./a>,>2154./a>2                  struct2.a href="+code=ieee80211_sta" class="sref">ieee80211_sta./a> *.a href="+code=sta" class="sref">sta./a>, void *.a href="+code=priv_sta" class="sref">priv_sta./a>,>2155./a>2                  struct2.a href="+code=sk_buff" class="sref">sk_buff./a> *.a href="+code=skb" class="sref">skb./a>)>2156./a>{>2157./a>2       struct2.a href="+code=minstrel_sta_info" class="sref">minstrel_sta_info./a> *.a href="+code=mi" class="sref">mi./a> =2.a href="+code=priv_sta" class="sref">priv_sta./a>;>2158./a>2       struct2.a href="+code=ieee80211_tx_info" class="sref">ieee80211_tx_info./a> *.a href="+code=info" class="sref">info./a> =2.a href="+code=IEEE80211_SKB_CB" class="sref">IEEE80211_SKB_CB./a>(.a href="+code=skb" class="sref">skb./a>);>2159./a>2       struct2.a href="+code=ieee80211_tx_rate" class="sref">ieee80211_tx_rate./a> *.a href="+code=ar" class="sref">ar./a> =2.a href="+code=info" class="sref">info./a>->.a href="+code=status" class="sref">status./a>..a href="+code=rates" class="sref">rates./a>;>2160./a>2       int2.a href="+code=i" class="sref">i./a>,2.a href="+code=ndx" class="sref">ndx./a>;>2161./a>2       int2.a href="+code=success" class="sref">success./a>;>2162./a>>2163./a>2       .a href="+code=success" class="sref">success./a> =2!!(.a href="+code=info" class="sref">info./a>->.a href="+code=flags" class="sref">flags./a> &2.a href="+code=IEEE80211_TX_STAT_ACK" class="sref">IEEE80211_TX_STAT_ACK./a>);>2164./a>>2165./a>2       for (.a href="+code=i" class="sref">i./a> =20;2.a href="+code=i" class="sref">i./a> < .a href="+code=IEEE80211_TX_MAX_RATES" class="sref">IEEE80211_TX_MAX_RATES./a>;2.a href="+code=i" class="sref">i./a>++) {>2166./a>2               if (.a href="+code=ar" class="sref">ar./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=idx" class="sref">idx./a> < 0)>2167./a>2                       break;>2168./a>>2169./a>2               .a href="+code=ndx" class="sref">ndx./a> =2.a href="+code=rix_to_ndx" class="sref">rix_to_ndx./a>(.a href="+code=mi" class="sref">mi./a>,2.a href="+code=ar" class="sref">ar./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=idx" class="sref">idx./a>);>2170./a>2               if (.a href="+code=ndx" class="sref">ndx./a> < 0)>2171./a>2                       continue;>2172./a>>2173./a>2               .a href="+code=mi" class="sref">mi./a>->.a href="+code=r" class="sref">r./a>[.a href="+code=ndx" class="sref">ndx./a>]..a href="+code=attempts" class="sref">attempts./a> +=2.a href="+code=ar" class="sref">ar./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=count" class="sref">count./a>;>2174./a>>2175./a>2               if ((.a href="+code=i" class="sref">i./a> !=2.a href="+code=IEEE80211_TX_MAX_RATES" class="sref">IEEE80211_TX_MAX_RATES./a> - 1) &&2(.a href="+code=ar" class="sref">ar./a>[.a href="+code=i" class="sref">i./a> + 1]..a href="+code=idx" class="sref">idx./a> < 0))>2176./a>2                       .a href="+code=mi" class="sref">mi./a>->.a href="+code=r" class="sref">r./a>[.a href="+code=ndx" class="sref">ndx./a>]..a href="+code=success" class="sref">success./a> +=2.a href="+code=success" class="sref">success./a>;>2177./a>2       }>2178./a>>2179./a>2       if ((.a href="+code=info" class="sref">info./a>->.a href="+code=flags" class="sref">flags./a> &2.a href="+code=IEEE80211_TX_CTL_RATE_CTRL_PROBE" class="sref">IEEE80211_TX_CTL_RATE_CTRL_PROBE./a>) &&2(.a href="+code=i" class="sref">i./a> >= 0))>2180./a>2               .a href="+code=mi" class="sref">mi./a>->.a href="+code=sample_count" class="sref">sample_count./a>++;>2181./a>>2182./a>2       if (.a href="+code=mi" class="sref">mi./a>->.a href="+code=sample_deferred" class="sref">sample_deferred./a> > 0)>2183./a>2               .a href="+code=mi" class="sref">mi./a>->.a href="+code=sample_deferred" class="sref">sample_deferred./a>--;>2184./a>}>2185./a>>2186./a>>2187./a>static2.a href="+code=inline" class="sref">inline./a> unsig ed int>2188./a>.a href="+code=minstrel_get_retry_count" class="sref">minstrel_get_retry_count./a>(struct2.a href="+code=minstrel_rate" class="sref">minstrel_rate./a> *.a href="+code=mr" class="sref">mr./a>,>2189./a>2                        struct2.a href="+code=ieee80211_tx_info" class="sref">ieee80211_tx_info./a> *.a href="+code=info" class="sref">info./a>)>2190./a>{>2191./a>2       unsig ed int2.a href="+code=retry" class="sref">retry./a> =2.a href="+code=mr" class="sref">mr./a>->.a href="+code=adjusted_retry_count" class="sref">adjusted_retry_count./a>;>2192./a>>2193./a>2       if (.a href="+code=info" class="sref">info./a>->.a href="+code=control" class="sref">control./a>..a href="+code=rates" class="sref">rates./a>[0]..a href="+code=flags" class="sref">flags./a> &2.a href="+code=IEEE80211_TX_RC_USE_RTS_CTS" class="sref">IEEE80211_TX_RC_USE_RTS_CTS./a>)>2194./a>2               .a href="+code=retry" class="sref">retry./a> =2.a href="+code=max" class="sref">max./a>(2U,2.a href="+code=min" class="sref">min./a>(.a href="+code=mr" class="sref">mr./a>->.a href="+code=retry_count_rtscts" class="sref">retry_count_rtscts./a>,2.a href="+code=retry" class="sref">retry./a>));>2195./a>2       else if (.a href="+code=info" class="sref">info./a>->.a href="+code=control" class="sref">control./a>..a href="+code=rates" class="sref">rates./a>[0]..a href="+code=flags" class="sref">flags./a> &2.a href="+code=IEEE80211_TX_RC_USE_CTS_PROTECT" class="sref">IEEE80211_TX_RC_USE_CTS_PROTECT./a>)>2196./a>2               .a href="+code=retry" class="sref">retry./a> =2.a href="+code=max" class="sref">max./a>(2U,2.a href="+code=min" class="sref">min./a>(.a href="+code=mr" class="sref">mr./a>->.a href="+code=retry_count_cts" class="sref">retry_count_cts./a>,2.a href="+code=retry" class="sref">retry./a>));>2197./a>2       return .a href="+code=retry" class="sref">retry./a>;>2198./a>}>2199./a>>2200./a>>2201./a>static2int>2202./a>.a href="+code=minstrel_get_next_sample" class="sref">minstrel_get_next_sample./a>(struct2.a href="+code=minstrel_sta_info" class="sref">minstrel_sta_info./a> *.a href="+code=mi" class="sref">mi./a>)>2203./a>{>2204./a>2       unsig ed int2.a href="+code=sample_ndx" class="sref">sample_ndx./a>;>2205./a>2       .a href="+code=sample_ndx" class="sref">sample_ndx./a> =2.a href="+code=SAMPLE_TBL" class="sref">SAMPLE_TBL./a>(.a href="+code=mi" class="sref">mi./a>,2.a href="+code=mi" class="sref">mi./a>->.a href="+code=sample_idx" class="sref">sample_idx./a>,2.a href="+code=mi" class="sref">mi./a>->.a href="+code=sample_column" class="sref">sample_column./a>);>2206./a>2       .a href="+code=mi" class="sref">mi./a>->.a href="+code=sample_idx" class="sref">sample_idx./a>++;>2207./a>2       if ((int) .a href="+code=mi" class="sref">mi./a>->.a href="+code=sample_idx" class="sref">sample_idx./a> > (.a href="+code=mi" class="sref">mi./a>->.a href="+code=n_rates" class="sref">n_rates./a> - 2)) {>2208./a>2               .a href="+code=mi" class="sref">mi./a>->.a href="+code=sample_idx" class="sref">sample_idx./a> =20;>2209./a>2               .a href="+code=mi" class="sref">mi./a>->.a href="+code=sample_column" class="sref">sample_column./a>++;>2210./a>2               if (.a href="+code=mi" class="sref">mi./a>->.a href="+code=sample_column" class="sref">sample_column./a> >= .a href="+code=SAMPLE_COLUMNS" class="sref">SAMPLE_COLUMNS./a>)>2211./a>2                       .a href="+code=mi" class="sref">mi./a>->.a href="+code=sample_column" class="sref">sample_column./a> =20;>2212./a>2       }>2213./a>2       return .a href="+code=sample_ndx" class="sref">sample_ndx./a>;>2214./a>}>2215./a>>2216./a>static2void>2217./a>.a href="+code=minstrel_get_rate" class="sref">minstrel_get_rate./a>(void *.a href="+code=priv" class="sref">priv./a>,2struct2.a href="+code=ieee80211_sta" class="sref">ieee80211_sta./a> *.a href="+code=sta" class="sref">sta./a>,>2218./a>2                 void *.a href="+code=priv_sta" class="sref">priv_sta./a>, struct2.a href="+code=ieee80211_tx_rate_control" class="sref">ieee80211_tx_rate_control./a> *.a href="+code=txrc" class="sref">txrc./a>)>2219./a>{>2220./a>2       struct2.a href="+code=sk_buff" class="sref">sk_buff./a> *.a href="+code=skb" class="sref">skb./a> =2.a href="+code=txrc" class="sref">txrc./a>->.a href="+code=skb" class="sref">skb./a>;>2221./a>2       struct2.a href="+code=ieee80211_tx_info" class="sref">ieee80211_tx_info./a> *.a href="+code=info" class="sref">info./a> =2.a href="+code=IEEE80211_SKB_CB" class="sref">IEEE80211_SKB_CB./a>(.a href="+code=skb" class="sref">skb./a>);>2222./a>2       struct2.a href="+code=minstrel_sta_info" class="sref">minstrel_sta_info./a> *.a href="+code=mi" class="sref">mi./a> =2.a href="+code=priv_sta" class="sref">priv_sta./a>;>2223./a>2       struct2.a href="+code=minstrel_priv" class="sref">minstrel_priv./a> *.a href="+code=mp" class="sref">mp./a> =2.a href="+code=priv" class="sref">priv./a>;>2224./a>2       struct2.a href="+code=ieee80211_tx_rate" class="sref">ieee80211_tx_rate./a> *.a href="+code=ar" class="sref">ar./a> =2.a href="+code=info" class="sref">info./a>->.a href="+code=control" class="sref">control./a>..a href="+code=rates" class="sref">rates./a>;>2225./a>2       unsig ed int2.a href="+code=ndx" class="sref">ndx./a>,2.a href="+code=sample_ndx" class="sref">sample_ndx./a> =20;>2226./a>2       .a href="+code=bool" class="sref">bool./a>2.a href="+code=mrr" class="sref">mrr./a>;>2227./a>2       .a href="+code=bool" class="sref">bool./a>2.a href="+code=sample_slower" class="sref">sample_slower./a> =2.a href="+code=false" class="sref">false./a>;>2228./a>2       .a href="+code=bool" class="sref">bool./a>2.a href="+code=sample" class="sref">sample./a> =2.a href="+code=false" class="sref">false./a>;>2229./a>2       int2.a href="+code=i" class="sref">i./a>,2.a href="+code=delta" class="sref">delta./a>;>2230./a>2       int2.a href="+code=mrr_ndx" class="sref">mrr_ndx./a>[3];>2231./a>2       int2.a href="+code=sample_rate" class="sref">sample_rate./a>;>2232./a>>2233./a>2       if (.a href="+code=rate_control_send_low" class="sref">rate_control_send_low./a>(.a href="+code=sta" class="sref">sta./a>, .a href="+code=priv_sta" class="sref">priv_sta./a>, .a href="+code=txrc" class="sref">txrc./a>))>2234./a>2               return;>2235./a>>2236./a>2       .a href="+code=mrr" class="sref">mrr./a> =2.a href="+code=mp" class="sref">mp./a>->.a href="+code=has_mrr" class="sref">has_mrr./a> &&2!.a href="+code=txrc" class="sref">txrc./a>->.a href="+code=rts" class="sref">rts./a> &&2!.a href="+code=txrc" class="sref">txrc./a>->.a href="+code=bss_conf" class="sref">bss_conf./a>->.a href="+code=use_cts_prot" class="sref">use_cts_prot./a>;>2237./a>>2238./a>2       if (.a href="+code=time_after" class="sref">time_after./a>(.a href="+code=jiffies" class="sref">jiffies./a>,2.a href="+code=mi" class="sref">mi./a>->.a href="+code=stats_update" class="sref">stats_update./a>2+2(.a href="+code=mp" class="sref">mp./a>->.a href="+code=update_interval" class="sref">update_interval./a> *>2239./a>2               2       .a href="+code=HZ" class="sref">HZ./a>) /21000))>2240./a>2               .a href="+code=minstrel_update_stats" class="sref">minstrel_update_stats./a>(.a href="+code=mp" class="sref">mp./a>,2.a href="+code=mi" class="sref">mi./a>);>2241./a>>2242./a>2       .a href="+code=ndx" class="sref">ndx./a> =2.a href="+code=mi" class="sref">mi./a>->.a href="+code=max_tp_rate" class="sref">max_tp_rate./a>;>2243./a>>2244./a>2       if (.a href="+code=mrr" class="sref">mrr./a>)>2245./a>2               .a href="+code=sample_rate" class="sref">sample_rate./a> =2.a href="+code=mp" class="sref">mp./a>->.a href="+code=lookaround_rate_mrr" class="sref">lookaround_rate_mrr./a>;>2246./a>2       else>2247./a>2               .a href="+code=sample_rate" class="sref">sample_rate./a> =2.a href="+code=mp" class="sref">mp./a>->.a href="+code=lookaround_rate" class="sref">lookaround_rate./a>;>2248./a>>2249./a>2       .a href="+code=mi" class="sref">mi./a>->.a href="+code=packet_count" class="sref">packet_count./a>++;>2250./a>2       .a href="+code=delta" class="sref">delta./a> =2(.a href="+code=mi" class="sref">mi./a>->.a href="+code=packet_count" class="sref">packet_count./a> * .a href="+code=sample_rate" class="sref">sample_rate./a> /2100) ->2251./a>2                       (.a href="+code=mi" class="sref">mi./a>->.a href="+code=sample_count" class="sref">sample_count./a>2+2.a href="+code=mi" class="sref">mi./a>->.a href="+code=sample_deferred" class="sref">sample_deferred./a> / 2);>2252./a>>2253./a>2       .spa  class="comment">/* delta > 0: sampling required */./spa  >2254./a>2       if ((.a href="+code=delta" class="sref">delta./a> > 0) &&2(.a href="+code=mrr" class="sref">mrr./a> ||2!.a href="+code=mi" class="sref">mi./a>->.a href="+code=prev_sample" class="sref">prev_sample./a>)) {>2255./a>2               struct2.a href="+code=minstrel_rate" class="sref">minstrel_rate./a> *.a href="+code=msr" class="sref">msr./a>;>2256./a>2               if (.a href="+code=mi" class="sref">mi./a>->.a href="+code=packet_count" class="sref">packet_count./a> >= 10000) {>2257./a>2                       .a href="+code=mi" class="sref">mi./a>->.a href="+code=sample_deferred" class="sref">sample_deferred./a> =20;>2258./a>2                       .a href="+code=mi" class="sref">mi./a>->.a href="+code=sample_count" class="sref">sample_count./a>2=20;>2259./a>2               2       .a href="+code=mi" class="sref">mi./a>->.a href="+code=packet_count" class="sref">packet_count./a> =20;>2260./a>2               } else if (.a href="+code=delta" class="sref">delta./a> > .a href="+code=mi" class="sref">mi./a>->.a href="+code=n_rates" class="sref">n_rates./a> * 2) {>2261./a>2                       .spa  class="comment">/* With multi-rate retry, not every plan ed sample./spa  >2262./a>.spa  class="comment">                         * attempt actually gets used, due to2263./a>.spa  class="comment">                         * chain is set up - [max_tp,sample,prob,lowest] for./spa  >2264./a>.spa  class="comment">                         * sample_rate < max_tp../spa  >2265./a>.spa  class="comment">                         *./spa  >2266./a>.spa  class="comment">                         * If2267./a>.spa  class="comment">                         * starts getting worse, minstrel would start bursting./spa  >2268./a>.spa  class="comment">                         * out lots of sampling framis, which would result./spa  >2269./a>.spa  class="comment">                         * in a large throughput loss. */./spa  >2270./a>2                       .a href="+code=mi" class="sref">mi./a>->.a href="+code=sample_count" class="sref">sample_count./a>2+=2(.a href="+code=delta" class="sref">delta./a> - .a href="+code=mi" class="sref">mi./a>->.a href="+code=n_rates" class="sref">n_rates./a> * 2);>2271./a>2               }>2272./a>>2273./a>2               .a href="+code=sample_ndx" class="sref">sample_ndx./a> =2.a href="+code=minstrel_get_next_sample" class="sref">minstrel_get_next_sample./a>(.a href="+code=mi" class="sref">mi./a>);>2274./a>2               .a href="+code=msr" class="sref">msr./a> =2&.a href="+code=mi" class="sref">mi./a>->.a href="+code=r" class="sref">r./a>[.a href="+code=sample_ndx" class="sref">sample_ndx./a>];>2275./a>2               .a href="+code=sample" class="sref">sample./a> =2.a href="+code=true" class="sref">true./a>;>2276./a>2               .a href="+code=sample_slower" class="sref">sample_slower./a> =2.a href="+code=mrr" class="sref">mrr./a> &&2(.a href="+code=msr" class="sref">msr./a>->.a href="+code=perfect_tx_time" class="sref">perfect_tx_time./a> >>2277./a>2                       .a href="+code=mi" class="sref">mi./a>->.a href="+code=r" class="sref">r./a>[.a href="+code=ndx" class="sref">ndx./a>]..a href="+code=perfect_tx_time" class="sref">perfect_tx_time./a>);>2278./a>>2279./a>2               if (!.a href="+code=sample_slower" class="sref">sample_slower./a>) {>2280./a>2                       if (.a href="+code=msr" class="sref">msr./a>->.a href="+code=sample_limit" class="sref">sample_limit./a>2!= 0) {>2281./a>2                               .a href="+code=ndx" class="sref">ndx./a> =2.a href="+code=sample_ndx" class="sref">sample_ndx./a>;>2282./a>2       2                       .a href="+code=mi" class="sref">mi./a>->.a href="+code=sample_count" class="sref">sample_count./a>++;>2283./a>2                               if (.a href="+code=msr" class="sref">msr./a>->.a href="+code=sample_limit" class="sref">sample_limit./a>2> 0)>2284./a>2                                       .a href="+code=msr" class="sref">msr./a>->.a href="+code=sample_limit" class="sref">sample_limit./a>--;>2285./a>2                       } else {>2286./a>2                               .a href="+code=sample" class="sref">sample./a> =2.a href="+code=false" class="sref">false./a>;>2287./a>2                       }>2288./a>2               } else {>2289./a>2                       .spa  class="comment">/* Only use IEEE80211_TX_CTL_RATE_CTRL_PROBE to2290./a>.spa  class="comment">                         * packets that have2291./a>.spa  class="comment">                         * second MRR stage. Increase2292./a>.spa  class="comment">                         * if2293./a>.spa  class="comment">                         * Use2294./a>.spa  class="comment">                         * the sampling is not done in large bursts */./spa  >2295./a>2                       .a href="+code=info" class="sref">info./a>->.a href="+code=flags" class="sref">flags./a> |=2.a href="+code=IEEE80211_TX_CTL_RATE_CTRL_PROBE" class="sref">IEEE80211_TX_CTL_RATE_CTRL_PROBE./a>;>2296./a>2                       .a href="+code=mi" class="sref">mi./a>->.a href="+code=sample_deferred" class="sref">sample_deferred./a>++;>2297./a>2               }>2298./a>2       }>2299./a>2       .a href="+code=mi" class="sref">mi./a>->.a href="+code=prev_sample" class="sref">prev_sample./a> =2.a href="+code=sample" class="sref">sample./a>;>2300./a>>2301./a>2       .spa  class="comment">/* If we're not using MRR and2302./a>.spa  class="comment">         * has a probability of >95%, we shouldn't be attempting./spa  >2303./a>.spa  class="comment">         * to2304./a>2       if (!.a href="+code=mrr" class="sref">mrr./a> &&2.a href="+code=sample" class="sref">sample./a> &&2(.a href="+code=mi" class="sref">mi./a>->.a href="+code=r" class="sref">r./a>[.a href="+code=ndx" class="sref">ndx./a>]..a href="+code=probability" class="sref">probability./a>2> 17100))>2305./a>2               .a href="+code=ndx" class="sref">ndx./a> =2.a href="+code=mi" class="sref">mi./a>->.a href="+code=max_tp_rate" class="sref">max_tp_rate./a>;>2306./a>>2307./a>2       .a href="+code=ar" class="sref">ar./a>[0]..a href="+code=idx" class="sref">idx./a> =2.a href="+code=mi" class="sref">mi./a>->.a href="+code=r" class="sref">r./a>[.a href="+code=ndx" class="sref">ndx./a>]..a href="+code=rix" class="sref">rix./a>;>2308./a>2       .a href="+code=ar" class="sref">ar./a>[0]..a href="+code=count" class="sref">count./a> =2.a href="+code=minstrel_get_retry_count" class="sref">minstrel_get_retry_count./a>(&.a href="+code=mi" class="sref">mi./a>->.a href="+code=r" class="sref">r./a>[.a href="+code=ndx" class="sref">ndx./a>],2.a href="+code=info" class="sref">info./a>);>2309./a>>2310./a>2       if (!.a href="+code=mrr" class="sref">mrr./a>) {>2311./a>2               if (!.a href="+code=sample" class="sref">sample./a>)>2312./a>2       2               .a href="+code=ar" class="sref">ar./a>[0]..a href="+code=count" class="sref">count./a> =2.a href="+code=mp" class="sref">mp./a>->.a href="+code=max_retry" class="sref">max_retry./a>;>2313./a>2               .a href="+code=ar" class="sref">ar./a>[1]..a href="+code=idx" class="sref">idx./a> =2.a href="+code=mi" class="sref">mi./a>->.a href="+code=lowest_rix" class="sref">lowest_rix./a>;>2314./a>2               .a href="+code=ar" class="sref">ar./a>[1]..a href="+code=count" class="sref">count./a> =2.a href="+code=mp" class="sref">mp./a>->.a href="+code=max_retry" class="sref">max_retry./a>;>2315./a>2               return;>2316./a>2       }>2317./a>>2318./a>2       .spa  class="comment">/* MRR setup */./spa  >2319./a>2       if (.a href="+code=sample" class="sref">sample./a>) {>2320./a>2               if (.a href="+code=sample_slower" class="sref">sample_slower./a>)>2321./a>2                       .a href="+code=mrr_ndx" class="sref">mrr_ndx./a>[0] =2.a href="+code=sample_ndx" class="sref">sample_ndx./a>;>2322./a>2       2       else>2323./a>2                       .a href="+code=mrr_ndx" class="sref">mrr_ndx./a>[0] =2.a href="+code=mi" class="sref">mi./a>->.a href="+code=max_tp_rate" class="sref">max_tp_rate./a>;>2324./a>2       } else {>2325./a>2               .a href="+code=mrr_ndx" class="sref">mrr_ndx./a>[0] =2.a href="+code=mi" class="sref">mi./a>->.a href="+code=max_tp_rate2" class="sref">max_tp_rate2./a>;>2326./a>2       }>2327./a>2       .a href="+code=mrr_ndx" class="sref">mrr_ndx./a>[1] =2.a href="+code=mi" class="sref">mi./a>->.a href="+code=max_prob_rate" class="sref">max_prob_rate./a>;>2328./a>2       .a href="+code=mrr_ndx" class="sref">mrr_ndx./a>[2] =20;>2329./a>2       for2(.a href="+code=i" class="sref">i./a> = 1;2.a href="+code=i" class="sref">i./a> < 4;2.a href="+code=i" class="sref">i./a>++) {>2330./a>2               .a href="+code=ar" class="sref">ar./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=idx" class="sref">idx./a> =2.a href="+code=mi" class="sref">mi./a>->.a href="+code=r" class="sref">r./a>[.a href="+code=mrr_ndx" class="sref">mrr_ndx./a>[.a href="+code=i" class="sref">i./a> - 1]]..a href="+code=rix" class="sref">rix./a>;>2331./a>2               .a href="+code=ar" class="sref">ar./a>[.a href="+code=i" class="sref">i./a>]..a href="+code=count" class="sref">count./a> =2.a href="+code=mi" class="sref">mi./a>->.a href="+code=r" class="sref">r./a>[.a href="+code=mrr_ndx" class="sref">mrr_ndx./a>[.a href="+code=i" class="sref">i./a> - 1]]..a href="+code=adjusted_retry_count" class="sref">adjusted_retry_count./a>;>[.a hrunt" class="sref">minstrel_get_re">jiffies./a>,2.a href="+code=mi" claa> /2ruct2.afies.2    8hrefs="sref">nd141         e" namionL3 121"+cod,q0211/rc80211_minamioode=mp" class="sref">mp./a>->.a href="+code=ef="+code=idx" c>2325./use IEEE80211_TX_CTL_RAT32L244" i325./lass="sref">rix./fnstrel.c#L221" idonL221" "sref">rix./a>;>->.a hrcalce_mrr"du_mrionfsref"enumonL224">2224./a>2       stban;.a href="+code=2       stban; clasnL224">2224./a>ban;.a href="+code=ban; clacode=sta" class="sref">sta./a>,>2255./a>2               struct2.a href="+code=minstrel_rate" class="sref">mins;.a href="+code=; clacode=sta" class="sref">sta./a>,>2255./a>2       2       stt2.a href="+code=ieee80211_txl_rate" class="sref">minst2.a href="+code=iel_rate" class="sref">sample_slower./a>)>2190./a>{>2231.er">count./a> =2.aer"code=co!!amionL233">2233./a>2 href="+code=iel_rate" de=info" class="sref">info./a>->.a href="+code=flags" class="sref">flags./a> &classERP_Go./a>->.a hrlags./a> &classERP_G"+code=info" class="sref">info./a>);>2272./a>>mins;.a href="+code=; clacode=msr" class="sref">msr./a>->.a href="+code=perfect_tx_time" cla+code=ar" class="se80211_tx     "du_mrion href="+code=ieee80211_tx     "du_mrionsref"nL224">2224./a>ban;.a href="+code=ban; clac 1200code=sta" class="sref">sta./a>,>22mionL233">2233./a>2 href="+code=iel_rate" de=info" class="srefbit/a>2 href="+code=iebit/a>2 clac mionL231">2231.er">count./a> =2.aer"codec 1de=info" class="sref">info./a>);>mins;.a href="+code=; clacode=msr" class="sreack->.a href="+code=ack->" cla+code=ar" class="se80211_tx     "du_mrion href="+code=ieee80211_tx     "du_mrionsref"nL224">2224./a>ban;.a href="+code=ban; clac 10code=sta" class="sref">sta./a>,>2296./a>2        /a>2 href="+code=iel_rate" de=info" class="srefbit/a>2 href="+code=iebit/a>2 clac mionL231">2231.er">count./a> =2.aer"codec 1de=info" class="sref">info./a>);>,2.a href="+code=mi" claa> /2ruct2.mac80211/3c80211_minstrel.c#L248" 3donL238" class="line" namionL248">2248./a>>rix./a>;>2255./a>2               struct2.a href="+code=minstrel_sta_info" class="sref">minstrel_sta_info./a> *.a href="+code=mi" class="sref">mi./a>)>2190./a>{>2225./a>2     /a>2       int2.a href="+code=i" classco./a>->.a href="l href="+code=i" classnew./a>->.a href="+new./a>ss="sref">adjusted_retry_count./a>;>2225./a>2      _s">mi./a>->.a href="s+code=n_racount" class="sref">count./a> =2.a href="+code=mi" class="sref">mi./a>->.a href="+code=n_rate1sref">adjusted_retry_count./a>;>2224./a>rn;.a href="+code=rn; cla[8x" class="sref">sample_ndx./a>];>2325./use IEEE80211_TX_CTL_RAT32L244"mac80211/3c80211_minstrel.c#L256" 3donL235" class="line" namionL206">2206./a>2       .a href="+code=mi" class="sref">mi./a>->.a href="+code=sample_column" class="sref">sample_column./a> =20;>23              .a href="+code=mi" class="sref">mi./a>->.a href="+code=sample_idx" class="sref">sample_idx./a> =20;>23emse"+code=minstrel_gemse"sref"nL224">2224./a>3              .a href="+code=mi" class="sref">mi.tab       if (.a hrelass="_tab  sref, 0f="+code=i" classlumn./a> >= .a href="+code=SAMPLE_COLUMNS" c class="sref">packf">count./a> =2.a href="+code=mi" class="sref">mi./a>->.a href="+code=n_rde=info" class="sref">info./a>);>2309./a>>2329./co./a>->.a href="l hrex" cl="+code=i" classco./a>->.a href="l href="+co"+code=i" classlumn./a> >= .a href="+code=SAMPLE_COLUMNS" cl="+code=i" classco./a>->.a href="l href="+code=i" class="sref">i./a>++) {>2329./a>2       for2(.a href="cl="+code=i" classef">i./a> = 1;2.a href="+co>2225./a>2      _s">mi./a>->.a href="s+code=n_re=i" class="sref">i./a> < 4;2.a href="+code=i" class="sref">i./a>++) {>2312./a>2       2t_ratendom_bymi./a>->.a hreft_ratendom_bymi.sref"nL224">2224./a>rn;.a href="+code=rn; cla, sizeof"nL224">2224./a>rn;.a href="+code=rn; cla)de=info" class="sref">info./a>);>2323./a>2        new./a>->.a href="+new./a>ss="=delta" class="srefef">i./a> = 1;2.a hrefclass="sref">samprn;.a href="+code=rn; cla["+code=i" classef">i./a> = 1;2.a href=lags"7])  * hao>2225./a>2      _s">mi./a>->.a href="s+code=n_re=info" class="sref">info./a>);>22whileelta" class="sref=SAMPLETBL .a href="+code=SAMPLETBLsref"nL224">2224./a>3              .a href=f="+code=i" classnew./a>->.a href="+new./a>ss="f="+code=i" classco./a>->.a href="l hre) classnL3 121"+cod,q0211/rc80211_minamioode=mp" clmac80211/3c80211_minstrel.c#L266" 3donL236" class="line" namionL286">2286./a>2                new./a>->.a href="+new./a>ss="=delta" class="srefnew./a>->.a href="+new./a>ss="=+ 1)  * hao>2225./a>2      _s">mi./a>->.a href="s+code=n_re=info" class="sref">info./a>);>2317./a>>225 namionL318">2318./a>2  Dolity of        f we&code=lnot us(i.e.e&code=lnbase sampling rate deferred to2269./a>.spa  class="commenot u). We mu=lnp samme_defe f we&code=lnot usworks sampling rate deferred to2290./a>.spa  class="commenfrel,  nanamioo     manageL290        will also be sampling rate deferred to2291./a>.spa  class="commenfai;re n9;s too much will break  class="comment">/* MRR setup */./spa  >2312./a>2       2=SAMPLETBL .a href="+code=SAMPLETBLsref"nL224">2224./a>3              .a href=f="+code=i" classnew./a>->.a href="+new./a>ss="f="+code=i" classco./a>->.a href="l hre) +code=ar" class="sf">i./a> = 1;2.a hrefcl1sref">adjusted_retry_count./a>;>,2.a href="+code=mi" claa> /2ruct2.mac80211/3c80211_minstrel.c#L274" 3donL234" class="lineiffies./a>,2.a href="+code=mi" claa> /2ruct2.mac80211/3c80211_minstrel.c#L275" 3donL235" claiffies./a>,2.a href="+code=mi" claa> /2ruct2.mac80211/3c80211_minstrel.c#L276" 3donL237" class="line" namionL306">2306./a>>rix./a>;>2               struc_rei t2.a href="+code=minstrel_ra_rei sref"f">rs="sref">minstrelsref">mp./a> =2.a href="+co,9L255">2255./a>2       2       stsupporetryban;.a href="+code=2       stsupporetryban;class="sref">minstrelsban;.a href="+code=sban; clacode=sta" class="sref">sta./a>,>2255./a>2       2       stsunt./a>2+=2(.a hr2       stsunclass="sref">minstrels_send_low./a>(.a href="+cof">rs="sref">minstrelsref">sta./a>, .a href="+code=priv_snL3 121"+cod,q0211/rc80211_minamioode=mp" clmac80211/3c80211_minstrel.c#L280" 3donL238" class="line" namionL190">2190./a>{>2255./a>2               struct2.a href="+code=minstrel_sta_info" class="sref">minstrel_sta_info./a> *.a href="+code=mp" class="sref">sta./a>, .a href="+code=priv_sref">adjusted_retry_count./a>;>2255./a>2               ssref">mp./a> =2.a h        ssrefclass="sref">minstrel_">count./a> =2.a href="+code=mp" class="sref">mp./a> =2.a href="+cosref">adjusted_retry_count./a>;>2255./a>2       2       stt2.a href="+code=ieee80211_txl_rate" class="sref">minsct struct2.a href="+codct struc"+cosref">adjusted_retry_count./a>;>2225./a>2     /a>2       int2.a href="+code=i" classgt;.a href="+codumn" class="sref">sample_column./a> =20;>2225./a>2     tle_s t2.a href="+codtle_s mn" cla9;25 namionL318">2318./a>2  FIXME:     reale&coe fthis only wastes precious airtime */./spa  >2306./a>>23              .a href="+code=mi" class="sref">mi./a>->.a href="+code=lowest_ri"+code=mp" class="l_ra_code=loinde>i./a> - 1]]..a h_ra_code=loinde>sref"nL224">2224./a>sban;.a href="+code=sban; clac class="sref">mrr_send_low./a>(.a href="+de=info" class="sref">info./a>);>2ct struct2.a href="+codct struc"+cocode=msr" class="sref">sban;.a href="+code=sban; clade=info" class="srefbit/a>2./a>->.a hrefbit/a>2. cla["+code=i" class3              .a href="+code=mi" class="sref">mi./a>->.a href="+code=lowest_rix" class="sref">sample_ndx./a>];>2224./a>3              .a href="+code=mi" class="srep_ack-duf (.a href="+codep_ack-duf" cla+code=ar" class="se80211_tx     "du_mrion href="+code=ieee80211_tx     "du_mrionsref"nL224">2224./a>sban;.a href="+code=sban; clade=info" class="srefban;.a href="+code=ban; clac 10code=sta" class="sref">sta./a>,>22ss="line" namionL328">2ct struct2.a href="+codct struc"+code=info" class="srefbit/a>2 href="+code=iebit/a>2 clacode=sta" class="sref">sta./a>,>2281./a>2 !!amionL233">2233.ct struct2.a href="+codct struc"+code=info" class="sref">info./a>->.a href="+code=flags" class="sref">flags./a> &classERP_Go./a>->.a hrlags./a> &classERP_G"+codc 1de=info" class="sref">info./a>);>2272./a>>2329./a>2       for2(.a href="cl="+code=i" classef">i./a> = 1;2.a href="+co>2225./a>2     sban;.a href="+code=sban; clade=info" class="srefn_bit/a>2./a>->.a hrefn_bit/a>2.=n_re=i" class="sref">i./a> < 4;2.a href="+code=i" class="sref">i./a>++) {>2255./a>2               struct2.a href="+code=minstrel_rate" class="sref">minsm2       if (!.a hr"+cocode=msr" class="sref">count./a>(&.a href="+code=mi" class="sref">mi./a>->.a href="+code=r" classt;.a href="+codumn" x" class="sref">sample_ndx./a>];>2225./a>2     t>->.a href="+code=tx_time" cla+c0f="+code=i" classtx_time_cref="+code=minstrtx_time_cre" cla+c0f="+code=i" classtx_time_rtscref="+code=minstrtx_time_rtscremn" class="sref">sample_column./a> =20;>2225./a>2     t>->_comm       if (.a hret>->_comm  "+cosref">adjusted_retry_count./a>;>2225./a>2     cwt2.a href="+codcw" cla+code=ar" class="f">count./a> =2.a href="+code=mp" class="srcw>adjusted_retry_count./a>;>2248./a>>2311./a>2     h_ra_supporetri./a> - 1]]..a h_ra_supporetrsref"nL224">2224./a>s_send_low./a>(.a href="+conL224">2224./a>sban;.a href="+code=sban; clade=info" class="srefban;.a href="+code=ban; clac i" class="sref">i./a> < 4;2.a hreef">probability./a>2> 17100))>22continuesref">adjusted_retry_count./a>;>2331./a>2st;.a href="+codumn" ass="sref">sample_deferred./a>++;>2224./a>32       if (!.a hr"+co, 0f=sizeof"lass="sref">minsm2       if (!.a hr"+co)de=info" class="sref">info./a>);>info./a>);>minsm2       if (!.a hr"+co"+code=mi" class="sre">i./a> - 1]]..a href="+ +code=ar" class="sf">i./a> = 1;2.a hree=info" class="sref">info./a>);>2305./a>2m2       if (!.a hr"+co"+code=mi" class="srbit/a>2 href="+code=iebit/a>2 clax" class="sref">mrrban;.a href="+code=sban; clade=info" class="srefbit/a>2./a>->.a hrefbit/a>2. cla["+code=i" class="sref">ar./a>[.a href="+code=i" classbit/a>2 href="+code=iebit/a>2 clax/ 5e=info" class="sref">info./a>);>2276./a>2calce_mrr"du_mrionfo./a>->.a hrcalce_mrr"du_mrionfsref"nL224">2224./a>sban;.a href="+code=sban; clade=info" class="srefban;.a href="+code=ban; clac i" class="sref"32       if (!.a hr"+co, e=msr" class="sref">sban;.a href="+code=sban; clade=info" class="srefbit/a>2./a>->.a hrefbit/a>2. cla["+code=i" class="sref">ar./a>[.a hrefde=info" class="sref">info./a>);>2317./a>>2318./a>2  calcult usmaximum numbage.f getsansmissionf be" ne sampling rate deferred to2269./a>.spa  claenfallther (based onsmaximum segL290 size)s only wastes precious airtime */./spa  >2330./a>2m2       if (!.a hr"+co"+code=mi" class="srf">msr./a>->.a href="+code=sample_limit" = -1sref">adjusted_retry_count./a>;>minsm2       if (!.a hr"+co"+code=mi" class="sre 1]]..a href="+code=adjus_count" class="f="+cref">adjusted_retry_count./a>;>minsm2       if (!.a hr"+co"+code=mi" class="sre 1]]..a hr_cref="+code=minstre 1]]..a hr_cress="f="+cref">adjusted_retry_count./a>;>2313./a>2m2       if (!.a hr"+co"+code=mi" class="sre 1]]..a hr_rtscref="+code=minstre 1]]..a hr_rtscress="f="+cref">adjusted_retry_count./a>;>2314./a>2t>->.a href="+code=tx_time" cla+cL313">2313./a>2m2       if (!.a hr"+co"+code=mi" class="srf">msr./a>->.a href="+code=perfect_tx_time" claclass="sref">samp3              .a href="+code=mi" class="srep_ack-duf (.a href="+codep_ack-duf" clcref">adjusted_retry_count./a>;>i./a>++) {>229 namionL318">2318./a>2  add one getsansmissions only wastes precious airtime */./spa  >2277./a>2        t>->_comm       if (.a hret>->_comm  "+coa+cL313">2313./a>2m2       if (!.a hr"+co"+code=mi" class="srack->.a href="+code=ack->" claclass="sref">samp32       if (!.a hr"+co"+code=mi" class="srf">msr./a>->.a href="+code=perfect_tx_time" clcref">adjusted_retry_count./a>;>2248./a>>229 namionL318">2318./a>2  cont8./ionswindows only wastes precious airtime */./spa  >2277./a>2        t>->_comm       if (.a hret>->_comm  "+coaclass="sref">sampletle_s t2.a href="+codtle_s mn" cclass="sref">packcwt2.a href="+codcw" cl)" cla classcref">adjusted_retry_count./a>;>2321./a>2        cwt2.a href="+codcw" cla+code=ar" class="fa t2.a href="+cod2233.cwt2.a href="+codcw" cla="+c="+co1) | 1c i" class="sref"3">count./a> =2.a href="+code=mp" class="srcw>i./a> - 1]]..a cw>f="+de=info" class="sref">info./a>);>2272./a>>2323./a>2        t>->.a href="+code=tx_time" cla+mple" class="sref">->_comm       if (.a hret>->_comm  "+cosref">adjusted_retry_count./a>;>2277./a>2        t>->_cref="+code=minstrtx_time_cre" cla+mple" class="sref">->_comm       if (.a hret>->_comm  "+coaclass="sref">samp3              .a href="+code=mi" class="srep_ack-duf (.a href="+codep_ack-duf" clcref">adjusted_retry_count./a>;>2277./a>2        t>->_rtscref="+code=minstrtx_time_rtscremn" c+mple" class="sref">->_comm       if (.a hret>->_comm  "+coacl2 class="sref">packf">count./a> =2.a href="+code=mi" class="srep_ack-duf (.a href="+codep_ack-duf" clcref">adjusted_retry_count./a>;>22L311ss="sref">samplet>->_cref="+code=minstrtx_time_cre" cla="+co>2225./a>2     3">count./a> =2.a href="+code=mp" class="srsegL290_size (.a href="+codeegL290_size" cl)" ple" clasref">adjusted_retry_count./a>;>2222222222"nL224">2224./a>32       if (!.a hr"+co"+code=mi" class="sre 1]]..a hr_cref="+code=minstre 1]]..a hr_cress="f="+co>2225./a>2     3">count./a> =2.a href="+code=mp" class="sref">mp./a>->.a href="+code=max_retef">probability./a>2> 17100))>22L277">2277./a>2        32       if (!.a hr"+co"+code=mi" class="sre 1]]..a hr_cref="+code=minstre 1]]..a hr_cress="ass="sref">sample_deferred./a>++;>22L311ss="sref">samplet>->_rtscref="+code=minstrtx_time_rtscremn" c="+co>2225./a>2     3">count./a> =2.a href="+code=mp" class="srsegL290_size (.a href="+codeegL290_size" cl)" ple" clasref">adjusted_retry_count./a>;>2222222222"nL224">2224./a>32       if (!.a hr"+co"+code=mi" class="sre 1]]..a hr_rtscref="+code=minstre 1]]..a hr_rtscress="f="+co>2225./a>2     3">count./a> =2.a href="+code=mp" class="sref">mp./a>->.a href="+code=max_retef">probability./a>2> 17100))>22L277">2277./a>2        32       if (!.a hr"+co"+code=mi" class="sre 1]]..a hr_rtscref="+code=minstre 1]]..a hr_rtscress="ass="sref">sample_deferred./a>++;>samplet>->.a href="+code=tx_time" cla="+co>2225./a>2     3">count./a> =2.a href="+code=mp" class="srsegL290_size (.a href="+codeegL290_size" cl)" ple" clasref">adjusted_retry_count./a>;>minst4el_ge43" class="line" namionL283">2283./a>2 (++ass="sref">minsm2       if (!.a hr"+co"+code=mi" class="sre 1]]..a href="+code=adjus_count" class="f="+co>2225./a>2     3">count./a> =2.a href="+code=mp" class="sref">mp./a>->.a href="+code=max_retefsref">adjusted_retry_count./a>;>nd141    4    e43" class="line" namionass="sref">minsm2       if (!.a hr"+co"+code=mi" class="srf">i./a> - 1]]..a href="+code=adjusted_retry_count" class="a+cL313">2313./a>2m2       if (!.a hr"+co"+code=mi" class="sre 1]]..a href="+code=adjus_count" class="sref">adjusted_retry_count./a>;> /2ruct24 i325./la4s="sref">rix./fnstrel.c#4221" 43" class="line" namionL306">2306./a>>2329./a>2       for2(.a href="L331">2331./a>2st;.a href="+codumn" l="+code=i" classef">i./a> = 1;2.a href="+co>2225./a>2     sban;.a href="+code=sban; clade=info" class="srefn_bit/a>2./a>->.a hrefn_bit/a>2.=n_re=i" class="sref">i./a> < 4;2.a href="+code=i" class="sref">i./a>++) {>2255./a>2               struct2.a href="+code=minstrel_rate" class="sref">minsm2       if (!.a hr"+cocode=msr" class="sref">count./a>(&.a href="+code=mi" class="sref">mi./a>->.a href="+code=r" clas="sref">ar./a>[.a hrefsref">adjusted_retry_count./a>;>minsm2       if (!.a hr"+co"+code=mi" class="sre">i./a> - 1]]..a href="+ +c-1sref">adjusted_retry_count./a>;> /2ruct24mac80211/4c80211_minstrel.c#L241" 4donL244" claffies./a>,2.a href="+code=mi" claa> /2ruct24mac80211/4c80211_minstrel.c#L242" 4donL244" class="line" class="sref">count./a>(&.a href="+code=mi" class="sref">mi./a>->.a href="+code=n_ra="L331">2331./a>2st;.a href="+codumn" lffies./a>,2.a href="+code=mi" claa> /2ruct24mac80211/4c80211_minstrel.c#L243" 4donL244" class="line"ss="sref">minsf">count./a> =2.a href="+code=mi" class="sretats_updruct2.a href="+codetats_updruc=n_ra="L331">2331./a>2jiffii./a>->.a hrefjiffii.mn" lffies./a>,2.a href="+code=mi" claa> /2ruct24mac80211/4c80211_minstrel.c#L244" 4donL244namionL3 121"+cod,q0211/rc80211_minamioode=mp" c4mss="sref4c80211_minstrel.c#L245" 4donL245" class="line"ss="sref">minsrei class="_tab       if (.a hrerei class="_tab  sref""ss="sref">minsf">count./a> =2.a href=fsref">adjusted_retry_count./a>;>,2.a href="+code=mi" claa> /2ruct24ml.c#L3314c80211_minstrel.c#L247" 4donL244" class="line" namionL317">2317./a>>r *ss="line" namionL317">2317./a>>2               salloc">sta./a>, .a href=        salloc">stsref"f">rs="sref">minstrelsref">mp./a> =2.a href="+co,9L255">2255./a>2       2       stsunt./a>2+=2(.a hr2       stsunclass="sref">minstrels_send_low./a>(.a href="+co"sref">minstrelgfp_ref="+code=adjusgfp_rclass"sref">minstrelgfpef="+code=adjusgfpref=fss="line" namionL317">2317./a>>2190./a>{>2255./a>2       2       stsupporetryban;.a href="+code=2       stsupporetryban;class="sref">minstrelsban;.a href="+code=sban; clasref">adjusted_retry_count./a>;>2255./a>2               struct2.a href="+code=minstrel_sta_info" class="sref">minstrel_sta_info./a> *.a href=sref">adjusted_retry_count./a>;>2255./a>2               ssref">mp./a> =2.a h        ssrefclass="sref">minstrel_">count./a> =2.a href="+code=mp" class="sref">mp./a> =2.a href="+cosref">adjusted_retry_count./a>;>2255./a>2       2       sthwt2.a href="+cod2       sthwclass="sref">minstrelhwt2.a href="+codhw" cla+code=ar" class="f">count./a> =2.a href="+code=mp" class="srhwt2.a href="+codhw" clsref">adjusted_retry_count./a>;>2225./a>2     +code>mi./a>->.a href+code>mi." cla+css="sref">sample_column./a> =20;>2225./a>2     /a>2       int2.a hres="sref">sample_column./a> =20;>2317./a>>23sta_info./a> *.a href="+code=mp" class="kzallocta_info./a> *.akzallocsref"sizeof"L255">2255./a>2               struct2.a href="+code=minstrel_sta_info" clas)co"sref">minstrelgfpef="+code=adjusgfpref=fs="sref">sample_column./a> =20;>2310./asta_info./a> *.a href="+code=mi" class="sref">mi./a>)>o"sref">minstrelNULL .a href="+codeNULL hres="sref">sample_column./a> =20;>,2.a href="+code=mi" claa> /2ruct24mac80211/4c80211_minstrel.c#L262" 4donL246" class="line" namionL329">2329./a>2       for2(.a href="cl="+code=i" classef">i./a> = 1;2.a href="+co>2225./a>2     lags./a> &NUM_BAND= .a href="+codelags./a> &NUM_BAND==n_re=i" class="sref">i./a> < 4;2.a href="+code=i" class="sref">i./a>++) {>minstrelsban;.a href="+code=sban; cla"+code=mp" class="hwt2.a href="+codhw" cl"+code=mp" class="srwipha>->.a href="wipha" cl"+code=mp" class="srban;./a>->.a hrefban;. href="+code=r" clas="sref">ar./a>[.a hrefsref">adjusted_retry_count./a>;>2320./a>2     ban;.a href="+code=sban; cla" ple" claso>2225./a>2     sban;.a href="+code=sban; clade=info" class="srefn_bit/a>2./a>->.a hrefn_bit/a>2.=n_r" cla">2225./a>2     +code>mi./a>->.a href+code>mi." cl"+code=mi" class="sref">mi./a>)>22>2225./a>2     +code>mi./a>->.a href+code>mi." cla+c>2225./a>2     sban;.a href="+code=sban; clade=info" class="srefn_bit/a>2./a>->.a hrefn_bit/a>2.=n_re+code=mi" class="sref">mi./a>)>2326./a>2       }>2317./a>>23sta_info./a> *.a href="+code=mi" class="sref">mi./a>->.a hre"+code=mp" class="kzallocta_info./a> *.akzallocsref"sizeof"L255">2255./a>2               struct2.a href="+code=minstrel_rate" ) class="sref">packfcode>mi./a>->.a href+code>mi." clco"sref">minstrelgfpef="+code=adjusgfpref=fs="sref">sample_column./a> =20;>2310./asta_info./a> *.a href="+code=mi" class="sref">mi./a>->.a hre"+code=mi" class="sref">mi./a>)>minstrelerroef">mi./a>->.erroe=n_re+code=mi" class="sref">mi./a>)>,2.a href="+code=mi" claa> /2ruct24mac80211/4c80211_minstrel.c#L272" 4donL247" class="line" class="sref">count./a>(&.a href="+code=mi" class="sref">mi.tab       if (.a hrelass="_tab  sref"+code=mp" class="kmallocta_info./a> *.akmallocsref"ode=mp" class="lumn./a> >= .a href="+code=SAMPLE_COLUMNS" c class="sref">packfcode>mi./a>->.a href+code>mi." clco"sref">minstrelgfpef="+code=adjusgfpref=fs="sref">sample_column./a> =20;>2310./asta_info./a> *.a href="+code=mi" class="sref">mi.tab       if (.a hrelass="_tab  sref"+code=mi" class="sref">mi./a>)>minstrelerroe1f">mi./a>->.erroe1=n_re+code=mi" class="sref">mi./a>)>2325./use IEEE80211_TX_CTL_RAT32L2444mac80211/4c80211_minstrel.c#L276" 4donL247" class="line" namionL206">2206./a>2       .a href="+code=mi" class="sretats_updruct2.a href="+codetats_updruc=n_ra="L331">2331./a>2jiffii./a>->.a hrefjiffii.mn" lffies./a>,2.a href="+code=mi" claa> /2ruct24mac80211/4c80211_minstrel.c#L277" 4donL247" class="lineL315">o"sref">minstrel_sta_info./a> *.a href=sref">adjusted_retry_count./a>;>2248./a>>2       erroe1f">mi./a>->.erroe1=n_r:ss="line" namionL248">2248./a>>2kfrect2.a href="+codkfrecsref""ss="sref">minsf">count./a> =2.a href="+code=mi" class="sref">mi./a>->.a hre"sref">adjusted_retry_count./a>;>minstrelerroef">mi./a>->.erroe=n_r:ss="line" namionL248">2248./a>>kfrect2.a href="+codkfrecsref""ss="sref">minsf">count./a> =2.a href="sref">adjusted_retry_count./a>;>o"sref">minstrelNULL .a href="+codeNULL hres="sref">sample_column./a> =20;>2326./a>2       }>2325./use IEEE80211_TX_CTL_RAT32L2444mac80211/4c80211_minstrel.c#L286" 4donL248onL221" "sref">rix./a>;>sta./a>, .a href=        sfrec">stsref"f">rs="sref">minstrelsref">mp./a> =2.a href="+co,9L255">2255./a>2       2       stsunt./a>2+=2(.a hr2       stsunclass="sref">minstrels_send_low./a>(.a href="+cof">rs="sref">minstrelsref">sta./a>, .a href="+code=priv_snL3 121"+cod,q0211/rc80211_minamioode=mp" c4mac80211/4c80211_minstrel.c#L288" 4donL248" clacode=i" class="sref">i./a>++) {>2255./a>2               struct2.a href="+code=minstrel_sta_info" class="sref">minstrel_sta_info./a> *.a href="+code=mp" class="sref">sta./a>, .a href="+code=priv_sref">adjusted_retry_count./a>;>adjusted_retry_count./a>;>2kfrect2.a href="+codkfrecsref""ss="sref">minsf">count./a> =2.a href="+code=mi" class="sref">mi.tab       if (.a hrelass="_tab  sref"sref">adjusted_retry_count./a>;>kfrect2.a href="+codkfrecsref""ss="sref">minsf">count./a> =2.a href="+code=mi" class="sref">mi./a>->.a hre"sref">adjusted_retry_count./a>;>minskfrect2.a href="+codkfrecsref""ss="sref">minsf">count./a> =2.a href="sref">adjusted_retry_count./a>;>2326./a>2       }>2325./use IEEE80211_TX_CTL_RAT32L2444mac80211/4c80211_minstrel.c#L296" 4donL249onL221" "sref">r *ss="line" namionL317">2317./a>> *.ae=minstreallocsref"s255">2255./a>2       2       sthwt2.a href="+cod2       sthwclass="sref">minstrelhwt2.a href="+codhw" cl,9L255">2255./a>2       den./a>->.a href="den./aclass="sref">minstreldebugfsdief">mi./a>->.debugfsdieriv_snL3 121"+cod,q0211/rc80211_minamioode=mp" c4mac80211/4c80211_minstrel.c#L298" 4donL249" clacode=i" class="sref">i./a>++) {>2255./a>2               ssref">mp./a> =2.a h        ssrefclass="sref">minstrel_">count./a> =2.a href=sref">adjusted_retry_count./a>;>adjusted_retry_count./a>;>2_">count./a> =2.a href="+code=mp" class="kzallocta_info./a> *.akzallocsref"sizeof"L255">2255./a>2               ssref">mp./a> =2.a h        ssrefclas)co"sref">minstrelGFP_ATOMIC">mp./a> =2.a hGFP_ATOMICref="sref">adjusted_retry_count./a>;>2310./a">count./a> =2.a href=snL3 121"+cod,q0211/rc80211_minamioode=mp" c5mac80211/5c80211_minstrel.c#L303" 5donL350" class="line" namionL315">o"sref">minstrelNULL .a href="+codeNULL hres="sref">sample_column./a> =20;>2318./a>2  cont8./ionswindowssettings sampling rate deferred to2269./a>.* Ju=ln"liapproximmrion. Ucomm too per-queue valu   would coss=icruc=nampling rate deferred to2269./a>.* too calcult ionf 9;s is probab y unnecessarys only wastes precious airtime */./spa  >23">count./a> =2.a href="+code=mp" class="srcw>info./a>);>2224./a>3">count./a> =2.a href="+code=mp" class="srcw>i./a> - 1]]..a cw>f="+f="+023e=info" class="sref">info./a>);>adjusted_retry_count./a>;>2318./a>2  numbage.f packets (in  * ha) to usee" nalass=omm o     e>mi." y wastes precious airtime */./spa  >2269./a>.*        lesse.ft8.e" nanon-mrr packets, becauseetoo overhead" y wastes precious airtime */./spa  >2269./a>.* is much hig    thanswith mrr  only wastes precious airtime */./spa  >2224./a>3">count./a> =2.a href="+code=mp" class="srlookaroundstruct2.a href="+codlookaroundstrucf="+f="5e=info" class="sref">info./a>);>mins3">count./a> =2.a href="+code=mp" class="srlookaroundstruc_mrrt2.a href="+codlookaroundstruc_mrrf="+f="+0e=info" class="sref">info./a>);>2306./a>>2318./a>2  movre n9verage weig te" naEWMA  only wastes precious airtime */./spa  >23">count./a> =2.a href="+code=mp" class="srewma_leve./a>->.a hrefewma_leve.f="+f="75e=info" class="sref">info./a>);>info./a>);>2318./a>2  maximum fthisdefe f wehw is allowed to stay in one MRR segL290  only wastes precious airtime */./spa  >2_">count./a> =2.a href="+code=mp" class="srsegL290_size (.a href="+codeegL290_size" clf="6000e=info" class="sref">info./a>);>2272./a>>minstrelhwt2.a href="+codhw" cl"+code=mp" class="sref">mruc_trii./a>->.a hrefef">mruc_trii. clas cla"ssnL3 121"+cod,q0211/rc80211_minamioode=mp" c5mac80211/5c80211_minstrel.c#L324" 5donL352" class="line" namion" namionL206">2_">count./a> =2.a href="+code=mp" class="sref">mp./a>->.a href="+code=max_ret"+code=mp" class="hwt2.a href="+codhw" cl"+code=mp" class="sref">mruc_trii./a>->.a hrefef">mruc_trii. clae=info" class="sref">info./a>);>info./a>);>2318./a>2  safe default, do   not necessari y h9ve to mmrch hw propertii.  only wastes precious airtime */./spa  >2_">count./a> =2.a href="+code=mp" class="sref">mp./a>->.a href="+code=max_ret"+c7e=info" class="sref">info./a>);>2248./a>>mruc./a>->.a href+code>mi." cla+cod= 4snL3 121"+cod,q0211/rc80211_minamioode=mp" c5mac80211/5c80211_minstrel.c#L330" 5donL350" class="line" namion" namionL206">2_">count./a> =2.a href="+code=mp" class="srhas_mrrt2.a href="+codhas_mrr_ret"+code=mp" class="true (.a href="+codtrue clae=info" class="sref">info./a>);>,2.a href="+code=mi" claa> /2ruct25mac80211/5c80211_minstrel.c#L332" 5donL353" class="line" class="sref">c">count./a> =2.a href="+code=mp" class="srhwt2.a href="+codhw" cl"+code=mp" class="hwt2.a href="+codhw" cle=info" class="sref">info./a>);>minst5el_ge53" class="line"ss="sref">minsf">count./a> =2.a href="+code=mp" class="srupdruc_interva./a>->.a hrefupdruc_interva.f="+f="+00e=info" class="sref">info./a>);>nd141    5    e53namionL3 121"+cod,q0211/rc80211_minamioode=mp" c5mac80211/5>mp./a>->.a href="+co5e=ef=53" cla#ifdefe"ss="sref">minsCONFIG_MAC1_minaDEBUGF= .a href="+codeCONFIG_MAC1_minaDEBUGF=amionL3 121"+cod,q0211/rc80211_minamioode=mp" c5m6c80211/5s="sref">rix./fnstrel.c#5221" 53" class="line" namionL206">22">count./a> =2.a href="+code=mp" class="srfixedstruc_id>i./a> - 1]]..a fixedstruc_id>f="+f="aode=mp" class="uc80211_minsa hrefu3" cla)c-1sref">adjusted_retry_count./a>;>23">count./a> =2.a href="+code=mp" class="srdbg_fixedstrucf">mi./a>->.dbg_fixedstruc" cl"+code=mp" class="debugfs_creruc_uc80211_minsa hrefdebugfs_creruc_uc8sref"" namionL318"hrere ">"fixedstruc_id>"nly wascode=sta" class="sref">sta./a>,>2S_IRUGO0211_minsa hrefS_IRUGO clas|e" namionL327">2S_IWUGO0211_minsa hrefS_IWUGO claco"sref">minstreldebugfsdief">mi./a>->.debugfsdieriv_, e=msr" class="sref">2">count./a> =2.a href="+code=mp" class="srfixedstruc_id>i./a> - 1]]..a fixedstruc_id>f="+"sref">adjusted_retry_count./a>;>adjusted_retry_count./a>;>adjusted_retry_count./a>;>o"sref">minstrel_">count./a> =2.a href=sref">adjusted_retry_count./a>;>2326./a>2       }>info./a>);>rix./a>;>2               sfrect2.a href="+cod        sfrecsref"f">rs="sref">minstrelsref">mp./a> =2.a href="+cosnL3 121"+cod,q0211/rc80211_minamioode=mp" c5mi325./la5c80211_minstrel.c#L246" 5donL254" clacode=i" class="sref">i./a>++) {>minsCONFIG_MAC1_minaDEBUGF= .a href="+codeCONFIG_MAC1_minaDEBUGF=amionL3 121"+cod,q0211/rc80211_minamioode=mp" c5mac80211/5c80211_minstrel.c#L248" 5donL254" class="line" namionL328">2debugfs_removcf">mi./a>->.debugfs_removcsref"("L255">2255./a>2               ssref">mp./a> =2.a h        ssrefclas *)"sref">minstrelsref">mp./a> =2.a href="+cos"+code=mp" class="srdbg_fixedstrucf">mi./a>->.dbg_fixedstruc" cl"sref">adjusted_retry_count./a>;>adjusted_retry_count./a>;>2kfrect2.a href="+codkfrecsref""ss="sref">minssref">mp./a> =2.a href="+cossref">adjusted_retry_count./a>;>2326./a>2       }>2272./a>>2255./a>2       truc_control_opef="+code=minstreruc_control_ope clase=mp" class="sref72./a>>->.a href+c72./a>>i./a>++) {>->.a href#L25" cl"+co namionL318"hrere ">"sta./a>,>sta./a>,>mi./a>->.getstruc" cl"+code=mp" class="        sgetstrucf">mi./a>->.        sgetstrucriv_,ode=sta" class="sref">sta./a>,>sta./a>,> *.aallocsref"+code=mp" class="        sallocta_info./a> *.ae=minstreallocsref,ode=sta" class="sref">sta./a>,>sta./a>,>sta./a>, .a href=alloc">stsref"+code=mp" class="        salloc">sta./a>, .a href=        salloc">stsref,ode=sta" class="sref">sta./a>,>sta./a>, .a href=frec">stsref"+code=mp" class="        sfrec">sta./a>, .a href=        sfrec">stsref,ode=sta" class="sref">sta./a>,>minsCONFIG_MAC1_minaDEBUGF= .a href="+codeCONFIG_MAC1_minaDEBUGF=amionL3 121"+cod,q0211/rc80211_minamioode=mp" c5mac80211/5c80211_minstrel.c#L263" 5donL256" class="line="+code=i" classaddta_indebugfsa./a>, .a href=addta_indebugfssref"+code=mp" class="        saddta_indebugfsa./a>, .a href=        saddta_indebugfssref,ode=sta" class="sref">sta./a>,>, .a href=removcta_indebugfs" cl"+code=mp" class="        stemovcta_indebugfsa./a>, .a href=        stemovcta_indebugfssref,ode=sta" class="sref">sta./a>,>adjusted_retry_count./a>;>adjusted_retry_count./a>;>2317./a>>2225./a>2     __in->.a href="+co__in-&riv_ss="line" namionL317">2317./a>>2       317./a>>rsnL3 121"+cod,q0211/rc80211_minamioode=mp" c5mac80211/5c80211_minstrel.c#L270" 5donL257" class="line" namionL190">2190./a>{>o"sref">minstrel2       steruc_control_registeef">mi./a>->.2       steruc_control_registeesref"e=msr" class="sref">2f72./a>>->.a href+c72./a>>adjusted_retry_count./a>;>2326./a>2       }>info./a>);>rix./a>;>2       t17./a>>rsnL3 121"+cod,q0211/rc80211_minamioode=mp" c5mac80211/5c80211_minstrel.c#L276" 5donL257" clacode=i" class="sref">i./a>++) {>22       steruc_control_unregisteef">mi./a>->.2       steruc_control_unregisteesref"e=msr" class="sref">2f72./a>>->.a href+c72./a>>adjusted_retry_count./a>;>2326./a>2       }>info./a>);>





Too original LXR software by f weinfo" clahttp://sourceforge.ss="projects/lxef>LXR >231un-&yriv_, this experi18./al versionsby info" clamailto:lxe@treux.no">lxe@treux.noriv_.


lxe.treux.no kind y horetrsby info" clahttp://www.redpill-trepro.no">Redpill Lrepro ASriv_, providage.f Lreux consultre n9nd opert ionf servicef since 1995.