Lines Matching refs:rate

597 			uint8_t rate = rateset->rs_rates[i];
601 * We allow a rate only if its valid and the
605 if (((rate & 0x7F) == (dot11rate & 0x7F)) &&
645 uint8_t rate = rateset->rs_rates[i];
648 if (((rate & 0x7F) != (dot11rate & 0x7F)) ||
676 uint8_t rate, next_rate, best_rate, maxindex, minindex;
710 * Now look up the rate in the rssi table and return it.
711 * If no rates match then we return 0 (lowest rate)
721 * Try the higher rate first. It will reduce memory moving time
727 rate = ath_rc_priv->valid_rate_index[index];
728 if (rate > ath_rc_priv->rate_max_phy)
732 * For TCP the average collision rate is around 11%,
734 * prevent the rate we are currently using (whose
737 * rate whose PER has decayed close to 0. If we
738 * used to next lower rate, its PER would grow to
740 * at the current rate.
742 per_thres = ath_rc_priv->state[rate].per;
746 this_thruput = rate_table->info[rate].user_ratekbps *
751 best_rate = rate;
755 rate = best_rate;
759 * of max retries, use the min rate for the next retry
762 rate = ath_rc_priv->valid_rate_index[minindex];
767 * Must check the actual rate (ratekbps) to account for
768 * non-monoticity of 11g's rate table
771 if (rate >= ath_rc_priv->rate_max_phy && probe_allowed) {
772 rate = ath_rc_priv->rate_max_phy;
777 ath_rc_priv, rate, &next_rate) &&
781 rate = next_rate;
782 ath_rc_priv->probe_rate = rate;
789 if (rate > (ath_rc_priv->rate_table_size - 1))
790 rate = ath_rc_priv->rate_table_size - 1;
792 ASSERT((rate_table->info[rate].valid && !ath_rc_priv->single_stream) ||
793 (rate_table->info[rate].valid_single_stream &&
796 return (rate);
801 struct ath9k_tx_rate *rate,
810 rate->count = tries;
811 rate->idx = rix;
814 rate->flags |= ATH9K_TX_RC_USE_RTS_CTS;
818 rate->flags |= ATH9K_TX_RC_USE_SHORT_PREAMBLE;
822 rate->flags |= ATH9K_TX_RC_40_MHZ_WIDTH;
824 rate->flags |= ATH9K_TX_RC_SHORT_GI;
826 rate->flags |= ATH9K_TX_RC_MCS;
885 * Get the next tried/allowed rate. No RTS for the next series
886 * after the probe rate
894 /* Set the choosen rate. No RTS for first series entry. */
916 * NB:Change rate series to enable aggregation when operating
917 * at lower MCS rates. When first rate in series is MCS2
922 * When first rate in series is MCS3 in HT20 @ 2.4GHz, series should
927 * So, set fourth rate in series to be same as third one for
1037 * If we got at most one retry then increase the max rate if
1151 #define CHK_RSSI(rate) \
1152 ((ath_rc_priv->state[(rate)].rssi_thres + \
1153 rate_table->info[(rate)].rssi_ack_deltamin) > \
1154 ath_rc_priv->state[(rate)+1].rssi_thres)
1158 int rate;
1182 * If this rate looks bad (high PER) then stop using it for
1205 for (rate = tx_rate; rate < size - 1; rate++) {
1206 if (rate_table->info[rate+1].phy !=
1210 if (CHK_RSSI(rate)) {
1211 ath_rc_priv->state[rate+1].rssi_thres =
1212 ath_rc_priv->state[rate].rssi_thres +
1213 rate_table->info[rate].rssi_ack_deltamin;
1218 for (rate = tx_rate - 1; rate >= 0; rate--) {
1219 if (rate_table->info[rate].phy !=
1223 if (CHK_RSSI(rate)) {
1224 if (ath_rc_priv->state[rate+1].rssi_thres <
1225 rate_table->info[rate].rssi_ack_deltamin)
1226 ath_rc_priv->state[rate].rssi_thres = 0;
1228 ath_rc_priv->state[rate].rssi_thres =
1229 ath_rc_priv->state[rate+1].
1231 rate_table->info[rate].
1235 if (ath_rc_priv->state[rate].rssi_thres <
1236 rate_table->info[rate].rssi_ack_validmin) {
1237 ath_rc_priv->state[rate].rssi_thres =
1238 rate_table->info[rate].
1246 /* Monotonicity is kept only for rates below the current rate. */
1248 for (rate = tx_rate - 1; rate >= 0; rate--) {
1249 if (rate_table->info[rate].phy !=
1253 if (ath_rc_priv->state[rate].per >
1254 ath_rc_priv->state[rate+1].per) {
1255 ath_rc_priv->state[rate].per =
1256 ath_rc_priv->state[rate+1].per;
1261 /* Maintain monotonicity for rates above the current rate */
1262 for (rate = tx_rate; rate < size - 1; rate++) {
1263 if (ath_rc_priv->state[rate+1].per <
1264 ath_rc_priv->state[rate].per)
1265 ath_rc_priv->state[rate+1].per =
1266 ath_rc_priv->state[rate].per;
1276 for (rate = 0; rate < size; rate++) {
1277 if (ath_rc_priv->state[rate].rssi_thres >
1278 rate_table->info[rate].rssi_ack_validmin)
1279 ath_rc_priv->state[rate].rssi_thres -= 1;
1290 for (rate = 0; rate < size; rate++) {
1291 ath_rc_priv->state[rate].per =
1292 7 * ath_rc_priv->state[rate].per / 8;
1303 struct ath9k_tx_rate *rate)
1307 if ((rate->flags & ATH9K_TX_RC_40_MHZ_WIDTH) &&
1308 (rate->flags & ATH9K_TX_RC_SHORT_GI))
1309 rix = rate_table->info[rate->idx].ht_index;
1310 else if (rate->flags & ATH9K_TX_RC_SHORT_GI)
1311 rix = rate_table->info[rate->idx].sgi_index;
1312 else if (rate->flags & ATH9K_TX_RC_40_MHZ_WIDTH)
1313 rix = rate_table->info[rate->idx].cw40index;
1315 rix = rate_table->info[rate->idx].base_index;
1334 * If the first rate is not the final index, there
1335 * are intermediate rate failures to be processed.
1364 * aggregate is sent out with only one rate and one try.
1365 * Treating it as an excessive retry penalizes the rate
1417 ARN_DBG((ARN_DBG_RATE, "choose rate table:ATH9K_MODE_11A\n"));
1420 ARN_DBG((ARN_DBG_RATE, "choose rate table:ATH9K_MODE_11B\n"));
1423 ARN_DBG((ARN_DBG_RATE, "choose rate table:ATH9K_MODE_11G\n"));
1427 "choose rate table:ATH9K_MODE_11NA_HT20\n"));
1431 "choose rate table:ATH9K_MODE_11NA_HT40PLUS\n"));
1435 "choose rate table:ATH9K_MODE_11NG_HT20\n"));
1439 "choose rate table:ATH9K_MODE_11NG_HT40PLUS\n"));
1446 ARN_DBG((ARN_DBG_RATE, "Choosing rate table for mode: %d\n",
1451 /* Private rate contral initialization */
1503 * Initial rate table size. Will change depending
1504 * on the working rate set
1508 /* Initialize thresholds according to the global rate table */
1530 /* No working rate, just initialize valid rates */
1595 * times. This affects how ratectrl updates PER for the failed rate.
1629 /* lowest rate for management and multicast/broadcast frames */
1638 /* Find tx rate for unicast frames */
1703 /* negotiated ht rate set ??? */
1798 arn_rate_update(struct arn_softc *sc, struct ieee80211_node *in, int32_t rate)
1806 in->in_txrate = rate;
1817 * Before associating a node has no rate set setup
1821 * lowest hardware rate.
1826 in->in_rates.ir_rates[rate] & IEEE80211_RATE_VAL];
1832 * Hardware supports multi-rate retry; setup two
1833 * step-down retry rates and make the lowest rate
1838 an->an_tx_try0 = 1 + 3; /* 4 tries at rate 0 */
1839 if (--rate >= 0) {
1841 in->in_rates.ir_rates[rate]&IEEE80211_RATE_VAL];
1848 if (--rate >= 0) {
1850 in->in_rates.ir_rates[rate]&IEEE80211_RATE_VAL];
1857 if (rate > 0) {
1865 an->an_tx_try0 = ATH_TXMAXTRY; /* max tries at rate 0 */
1875 * Set the starting transmit rate for a node.
1885 * No fixed rate is requested. For 11b start with
1886 * the highest negotiated rate; otherwise, for 11g
1892 * Scan the negotiated rate set to find the
1893 * closest rate.
1895 /* NB: the rate set is assumed sorted */
1901 * A fixed rate is to be used; We know the rate is
1902 * there because the rate set is checked when the
1905 /* NB: the rate set is assumed sorted */
1912 "srate=%d rate=%d\n", srate, IEEE80211_RATE(srate)));
1924 * Reset the rate control state for each 802.11 state transition.
1955 * tx rate state of each node.
1965 * Examine and potentially adjust the transmit rate.