Lines Matching refs:ra

1374 static void rtl8188e_set_tx_rpt_timing(struct rtl8xxxu_ra_info *ra, u8 timing)  in rtl8188e_set_tx_rpt_timing()  argument
1379 if (dynamic_tx_rpt_timing[idx] == ra->rpt_time) in rtl8188e_set_tx_rpt_timing()
1392 ra->rpt_time = dynamic_tx_rpt_timing[idx]; in rtl8188e_set_tx_rpt_timing()
1395 static void rtl8188e_rate_down(struct rtl8xxxu_ra_info *ra) in rtl8188e_rate_down() argument
1397 u8 rate_id = ra->pre_rate; in rtl8188e_rate_down()
1398 u8 lowest_rate = ra->lowest_rate; in rtl8188e_rate_down()
1399 u8 highest_rate = ra->highest_rate; in rtl8188e_rate_down()
1404 } else if (ra->rate_sgi) { in rtl8188e_rate_down()
1405 ra->rate_sgi = 0; in rtl8188e_rate_down()
1409 if (ra->ra_use_rate & BIT(i)) { in rtl8188e_rate_down()
1420 if (ra->ra_waiting_counter == 1) { in rtl8188e_rate_down()
1421 ra->ra_waiting_counter++; in rtl8188e_rate_down()
1422 ra->ra_pending_counter++; in rtl8188e_rate_down()
1423 } else if (ra->ra_waiting_counter > 1) { in rtl8188e_rate_down()
1424 ra->ra_waiting_counter = 0; in rtl8188e_rate_down()
1425 ra->ra_pending_counter = 0; in rtl8188e_rate_down()
1428 if (ra->ra_pending_counter >= 4) in rtl8188e_rate_down()
1429 ra->ra_pending_counter = 4; in rtl8188e_rate_down()
1431 ra->ra_drop_after_down = 1; in rtl8188e_rate_down()
1433 ra->decision_rate = rate_id; in rtl8188e_rate_down()
1435 rtl8188e_set_tx_rpt_timing(ra, DECREASE_TIMING); in rtl8188e_rate_down()
1438 static void rtl8188e_rate_up(struct rtl8xxxu_ra_info *ra) in rtl8188e_rate_up() argument
1440 u8 rate_id = ra->pre_rate; in rtl8188e_rate_up()
1441 u8 highest_rate = ra->highest_rate; in rtl8188e_rate_up()
1444 if (ra->ra_waiting_counter == 1) { in rtl8188e_rate_up()
1445 ra->ra_waiting_counter = 0; in rtl8188e_rate_up()
1446 ra->ra_pending_counter = 0; in rtl8188e_rate_up()
1447 } else if (ra->ra_waiting_counter > 1) { in rtl8188e_rate_up()
1448 ra->pre_rssi_sta_ra = ra->rssi_sta_ra; in rtl8188e_rate_up()
1452 rtl8188e_set_tx_rpt_timing(ra, DEFAULT_TIMING); in rtl8188e_rate_up()
1456 if (ra->ra_use_rate & BIT(i)) { in rtl8188e_rate_up()
1462 if (ra->sgi_enable && !ra->rate_sgi) in rtl8188e_rate_up()
1463 ra->rate_sgi = 1; in rtl8188e_rate_up()
1464 else if (!ra->sgi_enable) in rtl8188e_rate_up()
1465 ra->rate_sgi = 0; in rtl8188e_rate_up()
1471 if (ra->ra_waiting_counter == (4 + pending_for_rate_up_fail[ra->ra_pending_counter])) in rtl8188e_rate_up()
1472 ra->ra_waiting_counter = 0; in rtl8188e_rate_up()
1474 ra->ra_waiting_counter++; in rtl8188e_rate_up()
1476 ra->decision_rate = rate_id; in rtl8188e_rate_up()
1479 static void rtl8188e_reset_ra_counter(struct rtl8xxxu_ra_info *ra) in rtl8188e_reset_ra_counter() argument
1481 u8 rate_id = ra->decision_rate; in rtl8188e_reset_ra_counter()
1483 ra->nsc_up = (n_threshold_high[rate_id] + n_threshold_low[rate_id]) >> 1; in rtl8188e_reset_ra_counter()
1484 ra->nsc_down = (n_threshold_high[rate_id] + n_threshold_low[rate_id]) >> 1; in rtl8188e_reset_ra_counter()
1487 static void rtl8188e_rate_decision(struct rtl8xxxu_ra_info *ra) in rtl8188e_rate_decision() argument
1489 struct rtl8xxxu_priv *priv = container_of(ra, struct rtl8xxxu_priv, ra_info); in rtl8188e_rate_decision()
1496 if (ra->total == 0) in rtl8188e_rate_decision()
1499 if (ra->ra_drop_after_down) { in rtl8188e_rate_decision()
1500 ra->ra_drop_after_down--; in rtl8188e_rate_decision()
1502 rtl8188e_reset_ra_counter(ra); in rtl8188e_rate_decision()
1517 if (ra->rssi_sta_ra < (ra->pre_rssi_sta_ra - 3) || in rtl8188e_rate_decision()
1518 ra->rssi_sta_ra > (ra->pre_rssi_sta_ra + 3)) { in rtl8188e_rate_decision()
1519 ra->pre_rssi_sta_ra = ra->rssi_sta_ra; in rtl8188e_rate_decision()
1520 ra->ra_waiting_counter = 0; in rtl8188e_rate_decision()
1521 ra->ra_pending_counter = 0; in rtl8188e_rate_decision()
1525 if (ra->pre_rate > ra->highest_rate) in rtl8188e_rate_decision()
1526 rate_id = ra->highest_rate; in rtl8188e_rate_decision()
1528 rate_id = ra->pre_rate; in rtl8188e_rate_decision()
1531 if (ra->rssi_sta_ra > rssi_threshold[rate_id]) in rtl8188e_rate_decision()
1537 ra->nsc_down += ra->retry[i] * retry_penalty[penalty_id1][i]; in rtl8188e_rate_decision()
1539 if (ra->nsc_down > (ra->total * retry_penalty[penalty_id1][5])) in rtl8188e_rate_decision()
1540 ra->nsc_down -= ra->total * retry_penalty[penalty_id1][5]; in rtl8188e_rate_decision()
1542 ra->nsc_down = 0; in rtl8188e_rate_decision()
1548 ra->nsc_up += ra->retry[i] * retry_penalty[penalty_id2][i]; in rtl8188e_rate_decision()
1550 if (ra->nsc_up > (ra->total * retry_penalty[penalty_id2][5])) in rtl8188e_rate_decision()
1551 ra->nsc_up -= ra->total * retry_penalty[penalty_id2][5]; in rtl8188e_rate_decision()
1553 ra->nsc_up = 0; in rtl8188e_rate_decision()
1555 if (ra->nsc_down < n_threshold_low[rate_id] || in rtl8188e_rate_decision()
1556 ra->drop > dropping_necessary[rate_id]) { in rtl8188e_rate_decision()
1557 rtl8188e_rate_down(ra); in rtl8188e_rate_decision()
1559 rtl8xxxu_update_ra_report(&priv->ra_report, ra->decision_rate, in rtl8188e_rate_decision()
1560 ra->rate_sgi, priv->ra_report.txrate.bw); in rtl8188e_rate_decision()
1561 } else if (ra->nsc_up > n_threshold_high[rate_id]) { in rtl8188e_rate_decision()
1562 rtl8188e_rate_up(ra); in rtl8188e_rate_decision()
1564 rtl8xxxu_update_ra_report(&priv->ra_report, ra->decision_rate, in rtl8188e_rate_decision()
1565 ra->rate_sgi, priv->ra_report.txrate.bw); in rtl8188e_rate_decision()
1568 if (ra->decision_rate == ra->pre_rate) in rtl8188e_rate_decision()
1569 ra->dynamic_tx_rpt_timing_counter++; in rtl8188e_rate_decision()
1571 ra->dynamic_tx_rpt_timing_counter = 0; in rtl8188e_rate_decision()
1573 if (ra->dynamic_tx_rpt_timing_counter >= 4) { in rtl8188e_rate_decision()
1575 rtl8188e_set_tx_rpt_timing(ra, INCREASE_TIMING); in rtl8188e_rate_decision()
1576 ra->dynamic_tx_rpt_timing_counter = 0; in rtl8188e_rate_decision()
1579 ra->pre_rate = ra->decision_rate; in rtl8188e_rate_decision()
1581 rtl8188e_reset_ra_counter(ra); in rtl8188e_rate_decision()
1584 static void rtl8188e_power_training_try_state(struct rtl8xxxu_ra_info *ra) in rtl8188e_power_training_try_state() argument
1586 ra->pt_try_state = 0; in rtl8188e_power_training_try_state()
1587 switch (ra->pt_mode_ss) { in rtl8188e_power_training_try_state()
1589 if (ra->decision_rate >= DESC_RATE_MCS13) in rtl8188e_power_training_try_state()
1590 ra->pt_try_state = 1; in rtl8188e_power_training_try_state()
1593 if (ra->decision_rate >= DESC_RATE_MCS5) in rtl8188e_power_training_try_state()
1594 ra->pt_try_state = 1; in rtl8188e_power_training_try_state()
1597 if (ra->decision_rate >= DESC_RATE_48M) in rtl8188e_power_training_try_state()
1598 ra->pt_try_state = 1; in rtl8188e_power_training_try_state()
1601 if (ra->decision_rate >= DESC_RATE_11M) in rtl8188e_power_training_try_state()
1602 ra->pt_try_state = 1; in rtl8188e_power_training_try_state()
1608 if (ra->rssi_sta_ra < 48) { in rtl8188e_power_training_try_state()
1609 ra->pt_stage = 0; in rtl8188e_power_training_try_state()
1610 } else if (ra->pt_try_state == 1) { in rtl8188e_power_training_try_state()
1611 if ((ra->pt_stop_count >= 10) || in rtl8188e_power_training_try_state()
1612 (ra->pt_pre_rssi > ra->rssi_sta_ra + 5) || in rtl8188e_power_training_try_state()
1613 (ra->pt_pre_rssi < ra->rssi_sta_ra - 5) || in rtl8188e_power_training_try_state()
1614 (ra->decision_rate != ra->pt_pre_rate)) { in rtl8188e_power_training_try_state()
1615 if (ra->pt_stage == 0) in rtl8188e_power_training_try_state()
1616 ra->pt_stage = 1; in rtl8188e_power_training_try_state()
1617 else if (ra->pt_stage == 1) in rtl8188e_power_training_try_state()
1618 ra->pt_stage = 3; in rtl8188e_power_training_try_state()
1620 ra->pt_stage = 5; in rtl8188e_power_training_try_state()
1622 ra->pt_pre_rssi = ra->rssi_sta_ra; in rtl8188e_power_training_try_state()
1623 ra->pt_stop_count = 0; in rtl8188e_power_training_try_state()
1625 ra->ra_stage = 0; in rtl8188e_power_training_try_state()
1626 ra->pt_stop_count++; in rtl8188e_power_training_try_state()
1629 ra->pt_stage = 0; in rtl8188e_power_training_try_state()
1630 ra->ra_stage = 0; in rtl8188e_power_training_try_state()
1633 ra->pt_pre_rate = ra->decision_rate; in rtl8188e_power_training_try_state()
1639 ra->pt_stage = 0; in rtl8188e_power_training_try_state()
1640 ra->ra_stage = 0; in rtl8188e_power_training_try_state()
1641 ra->pt_stop_count = 0; in rtl8188e_power_training_try_state()
1645 static void rtl8188e_power_training_decision(struct rtl8xxxu_ra_info *ra) in rtl8188e_power_training_decision() argument
1654 num_total = ra->total * pt_penalty[5]; in rtl8188e_power_training_decision()
1656 numsc += ra->retry[j] * pt_penalty[j]; in rtl8188e_power_training_decision()
1663 temp_stage = (ra->pt_stage + 1) >> 1; in rtl8188e_power_training_decision()
1669 ra->pt_smooth_factor = (ra->pt_smooth_factor >> 1) + in rtl8188e_power_training_decision()
1670 (ra->pt_smooth_factor >> 2) + in rtl8188e_power_training_decision()
1672 if (ra->pt_smooth_factor > 192) in rtl8188e_power_training_decision()
1673 ra->pt_smooth_factor = 192; in rtl8188e_power_training_decision()
1674 stage_id = ra->pt_smooth_factor >> 6; in rtl8188e_power_training_decision()
1678 if (ra->drop > 3) in rtl8188e_power_training_decision()
1680 ra->pt_stage = temp_stage; in rtl8188e_power_training_decision()
1688 struct rtl8xxxu_ra_info *ra = &priv->ra_info; in rtl8188e_handle_ra_tx_report2() local
1712 ra->retry[0] = le16_to_cpu(*(__le16 *)rpt); in rtl8188e_handle_ra_tx_report2()
1713 ra->retry[1] = rpt[2]; in rtl8188e_handle_ra_tx_report2()
1714 ra->retry[2] = rpt[3]; in rtl8188e_handle_ra_tx_report2()
1715 ra->retry[3] = rpt[4]; in rtl8188e_handle_ra_tx_report2()
1716 ra->retry[4] = rpt[5]; in rtl8188e_handle_ra_tx_report2()
1717 ra->drop = rpt[6]; in rtl8188e_handle_ra_tx_report2()
1718 ra->total = ra->retry[0] + ra->retry[1] + ra->retry[2] + in rtl8188e_handle_ra_tx_report2()
1719 ra->retry[3] + ra->retry[4] + ra->drop; in rtl8188e_handle_ra_tx_report2()
1721 if (ra->total > 0) { in rtl8188e_handle_ra_tx_report2()
1722 if (ra->ra_stage < 5) in rtl8188e_handle_ra_tx_report2()
1723 rtl8188e_rate_decision(ra); in rtl8188e_handle_ra_tx_report2()
1724 else if (ra->ra_stage == 5) in rtl8188e_handle_ra_tx_report2()
1725 rtl8188e_power_training_try_state(ra); in rtl8188e_handle_ra_tx_report2()
1727 rtl8188e_power_training_decision(ra); in rtl8188e_handle_ra_tx_report2()
1729 if (ra->ra_stage <= 5) in rtl8188e_handle_ra_tx_report2()
1730 ra->ra_stage++; in rtl8188e_handle_ra_tx_report2()
1732 ra->ra_stage = 0; in rtl8188e_handle_ra_tx_report2()
1740 ra->retry[0], ra->retry[1], ra->retry[2], in rtl8188e_handle_ra_tx_report2()
1741 ra->retry[3], ra->retry[4], ra->drop); in rtl8188e_handle_ra_tx_report2()
1743 if (min_rpt_time > ra->rpt_time) in rtl8188e_handle_ra_tx_report2()
1744 min_rpt_time = ra->rpt_time; in rtl8188e_handle_ra_tx_report2()
1749 if (min_rpt_time != ra->pre_min_rpt_time) { in rtl8188e_handle_ra_tx_report2()
1751 ra->pre_min_rpt_time = min_rpt_time; in rtl8188e_handle_ra_tx_report2()
1755 static void rtl8188e_arfb_refresh(struct rtl8xxxu_ra_info *ra) in rtl8188e_arfb_refresh() argument
1759 ra->ra_use_rate = ra->rate_mask; in rtl8188e_arfb_refresh()
1762 if (ra->ra_use_rate) { in rtl8188e_arfb_refresh()
1764 if (ra->ra_use_rate & BIT(i)) { in rtl8188e_arfb_refresh()
1765 ra->highest_rate = i; in rtl8188e_arfb_refresh()
1770 ra->highest_rate = 0; in rtl8188e_arfb_refresh()
1774 if (ra->ra_use_rate) { in rtl8188e_arfb_refresh()
1776 if (ra->ra_use_rate & BIT(i)) { in rtl8188e_arfb_refresh()
1777 ra->lowest_rate = i; in rtl8188e_arfb_refresh()
1782 ra->lowest_rate = 0; in rtl8188e_arfb_refresh()
1785 if (ra->highest_rate > DESC_RATE_MCS7) in rtl8188e_arfb_refresh()
1786 ra->pt_mode_ss = 3; in rtl8188e_arfb_refresh()
1787 else if (ra->highest_rate > DESC_RATE_54M) in rtl8188e_arfb_refresh()
1788 ra->pt_mode_ss = 2; in rtl8188e_arfb_refresh()
1789 else if (ra->highest_rate > DESC_RATE_11M) in rtl8188e_arfb_refresh()
1790 ra->pt_mode_ss = 1; in rtl8188e_arfb_refresh()
1792 ra->pt_mode_ss = 0; in rtl8188e_arfb_refresh()
1800 struct rtl8xxxu_ra_info *ra = &priv->ra_info; in rtl8188e_update_rate_mask() local
1802 ra->rate_id = rateid; in rtl8188e_update_rate_mask()
1803 ra->rate_mask = ramask; in rtl8188e_update_rate_mask()
1804 ra->sgi_enable = sgi; in rtl8188e_update_rate_mask()
1806 rtl8188e_arfb_refresh(ra); in rtl8188e_update_rate_mask()
1814 void rtl8188e_ra_info_init_all(struct rtl8xxxu_ra_info *ra) in rtl8188e_ra_info_init_all() argument
1816 ra->decision_rate = DESC_RATE_MCS7; in rtl8188e_ra_info_init_all()
1817 ra->pre_rate = DESC_RATE_MCS7; in rtl8188e_ra_info_init_all()
1818 ra->highest_rate = DESC_RATE_MCS7; in rtl8188e_ra_info_init_all()
1819 ra->lowest_rate = 0; in rtl8188e_ra_info_init_all()
1820 ra->rate_id = 0; in rtl8188e_ra_info_init_all()
1821 ra->rate_mask = 0xfffff; in rtl8188e_ra_info_init_all()
1822 ra->rssi_sta_ra = 0; in rtl8188e_ra_info_init_all()
1823 ra->pre_rssi_sta_ra = 0; in rtl8188e_ra_info_init_all()
1824 ra->sgi_enable = 0; in rtl8188e_ra_info_init_all()
1825 ra->ra_use_rate = 0xfffff; in rtl8188e_ra_info_init_all()
1826 ra->nsc_down = (n_threshold_high[DESC_RATE_MCS7] + n_threshold_low[DESC_RATE_MCS7]) / 2; in rtl8188e_ra_info_init_all()
1827 ra->nsc_up = (n_threshold_high[DESC_RATE_MCS7] + n_threshold_low[DESC_RATE_MCS7]) / 2; in rtl8188e_ra_info_init_all()
1828 ra->rate_sgi = 0; in rtl8188e_ra_info_init_all()
1829 ra->rpt_time = 0x927c; in rtl8188e_ra_info_init_all()
1830 ra->drop = 0; in rtl8188e_ra_info_init_all()
1831 ra->retry[0] = 0; in rtl8188e_ra_info_init_all()
1832 ra->retry[1] = 0; in rtl8188e_ra_info_init_all()
1833 ra->retry[2] = 0; in rtl8188e_ra_info_init_all()
1834 ra->retry[3] = 0; in rtl8188e_ra_info_init_all()
1835 ra->retry[4] = 0; in rtl8188e_ra_info_init_all()
1836 ra->total = 0; in rtl8188e_ra_info_init_all()
1837 ra->ra_waiting_counter = 0; in rtl8188e_ra_info_init_all()
1838 ra->ra_pending_counter = 0; in rtl8188e_ra_info_init_all()
1839 ra->ra_drop_after_down = 0; in rtl8188e_ra_info_init_all()
1841 ra->pt_try_state = 0; in rtl8188e_ra_info_init_all()
1842 ra->pt_stage = 5; in rtl8188e_ra_info_init_all()
1843 ra->pt_smooth_factor = 192; in rtl8188e_ra_info_init_all()
1844 ra->pt_stop_count = 0; in rtl8188e_ra_info_init_all()
1845 ra->pt_pre_rate = 0; in rtl8188e_ra_info_init_all()
1846 ra->pt_pre_rssi = 0; in rtl8188e_ra_info_init_all()
1847 ra->pt_mode_ss = 0; in rtl8188e_ra_info_init_all()
1848 ra->ra_stage = 0; in rtl8188e_ra_info_init_all()