Lines Matching refs:rate
1266 static u32 cfg80211_calculate_bitrate_ht(struct rate_info *rate) in cfg80211_calculate_bitrate_ht() argument
1271 if (WARN_ON_ONCE(rate->mcs >= 32)) in cfg80211_calculate_bitrate_ht()
1274 modulation = rate->mcs & 7; in cfg80211_calculate_bitrate_ht()
1275 streams = (rate->mcs >> 3) + 1; in cfg80211_calculate_bitrate_ht()
1277 bitrate = (rate->bw == RATE_INFO_BW_40) ? 13500000 : 6500000; in cfg80211_calculate_bitrate_ht()
1288 if (rate->flags & RATE_INFO_FLAGS_SHORT_GI) in cfg80211_calculate_bitrate_ht()
1295 static u32 cfg80211_calculate_bitrate_dmg(struct rate_info *rate) in cfg80211_calculate_bitrate_dmg() argument
1336 if (WARN_ON_ONCE(rate->mcs >= ARRAY_SIZE(__mcs2bitrate))) in cfg80211_calculate_bitrate_dmg()
1339 return __mcs2bitrate[rate->mcs]; in cfg80211_calculate_bitrate_dmg()
1342 static u32 cfg80211_calculate_bitrate_extended_sc_dmg(struct rate_info *rate) in cfg80211_calculate_bitrate_extended_sc_dmg() argument
1355 if (WARN_ON_ONCE(rate->mcs < 6 || rate->mcs > 12)) in cfg80211_calculate_bitrate_extended_sc_dmg()
1358 return __mcs2bitrate[rate->mcs - 6]; in cfg80211_calculate_bitrate_extended_sc_dmg()
1361 static u32 cfg80211_calculate_bitrate_edmg(struct rate_info *rate) in cfg80211_calculate_bitrate_edmg() argument
1389 if (WARN_ON_ONCE(rate->mcs >= ARRAY_SIZE(__mcs2bitrate))) in cfg80211_calculate_bitrate_edmg()
1392 return __mcs2bitrate[rate->mcs] * rate->n_bonded_ch; in cfg80211_calculate_bitrate_edmg()
1395 static u32 cfg80211_calculate_bitrate_vht(struct rate_info *rate) in cfg80211_calculate_bitrate_vht() argument
1455 if (rate->mcs > 11) in cfg80211_calculate_bitrate_vht()
1458 switch (rate->bw) { in cfg80211_calculate_bitrate_vht()
1476 bitrate = base[idx][rate->mcs]; in cfg80211_calculate_bitrate_vht()
1477 bitrate *= rate->nss; in cfg80211_calculate_bitrate_vht()
1479 if (rate->flags & RATE_INFO_FLAGS_SHORT_GI) in cfg80211_calculate_bitrate_vht()
1486 rate->bw, rate->mcs, rate->nss); in cfg80211_calculate_bitrate_vht()
1490 static u32 cfg80211_calculate_bitrate_he(struct rate_info *rate) in cfg80211_calculate_bitrate_he() argument
1519 if (WARN_ON_ONCE(rate->mcs > 13)) in cfg80211_calculate_bitrate_he()
1522 if (WARN_ON_ONCE(rate->he_gi > NL80211_RATE_INFO_HE_GI_3_2)) in cfg80211_calculate_bitrate_he()
1524 if (WARN_ON_ONCE(rate->he_ru_alloc > in cfg80211_calculate_bitrate_he()
1527 if (WARN_ON_ONCE(rate->nss < 1 || rate->nss > 8)) in cfg80211_calculate_bitrate_he()
1530 if (rate->bw == RATE_INFO_BW_160 || in cfg80211_calculate_bitrate_he()
1531 (rate->bw == RATE_INFO_BW_HE_RU && in cfg80211_calculate_bitrate_he()
1532 rate->he_ru_alloc == NL80211_RATE_INFO_HE_RU_ALLOC_2x996)) in cfg80211_calculate_bitrate_he()
1533 result = rates_160M[rate->he_gi]; in cfg80211_calculate_bitrate_he()
1534 else if (rate->bw == RATE_INFO_BW_80 || in cfg80211_calculate_bitrate_he()
1535 (rate->bw == RATE_INFO_BW_HE_RU && in cfg80211_calculate_bitrate_he()
1536 rate->he_ru_alloc == NL80211_RATE_INFO_HE_RU_ALLOC_996)) in cfg80211_calculate_bitrate_he()
1537 result = rates_996[rate->he_gi]; in cfg80211_calculate_bitrate_he()
1538 else if (rate->bw == RATE_INFO_BW_40 || in cfg80211_calculate_bitrate_he()
1539 (rate->bw == RATE_INFO_BW_HE_RU && in cfg80211_calculate_bitrate_he()
1540 rate->he_ru_alloc == NL80211_RATE_INFO_HE_RU_ALLOC_484)) in cfg80211_calculate_bitrate_he()
1541 result = rates_484[rate->he_gi]; in cfg80211_calculate_bitrate_he()
1542 else if (rate->bw == RATE_INFO_BW_20 || in cfg80211_calculate_bitrate_he()
1543 (rate->bw == RATE_INFO_BW_HE_RU && in cfg80211_calculate_bitrate_he()
1544 rate->he_ru_alloc == NL80211_RATE_INFO_HE_RU_ALLOC_242)) in cfg80211_calculate_bitrate_he()
1545 result = rates_242[rate->he_gi]; in cfg80211_calculate_bitrate_he()
1546 else if (rate->bw == RATE_INFO_BW_HE_RU && in cfg80211_calculate_bitrate_he()
1547 rate->he_ru_alloc == NL80211_RATE_INFO_HE_RU_ALLOC_106) in cfg80211_calculate_bitrate_he()
1548 result = rates_106[rate->he_gi]; in cfg80211_calculate_bitrate_he()
1549 else if (rate->bw == RATE_INFO_BW_HE_RU && in cfg80211_calculate_bitrate_he()
1550 rate->he_ru_alloc == NL80211_RATE_INFO_HE_RU_ALLOC_52) in cfg80211_calculate_bitrate_he()
1551 result = rates_52[rate->he_gi]; in cfg80211_calculate_bitrate_he()
1552 else if (rate->bw == RATE_INFO_BW_HE_RU && in cfg80211_calculate_bitrate_he()
1553 rate->he_ru_alloc == NL80211_RATE_INFO_HE_RU_ALLOC_26) in cfg80211_calculate_bitrate_he()
1554 result = rates_26[rate->he_gi]; in cfg80211_calculate_bitrate_he()
1557 rate->bw, rate->he_ru_alloc); in cfg80211_calculate_bitrate_he()
1564 do_div(tmp, mcs_divisors[rate->mcs]); in cfg80211_calculate_bitrate_he()
1567 tmp *= rate->nss; in cfg80211_calculate_bitrate_he()
1569 if (rate->he_dcm) in cfg80211_calculate_bitrate_he()
1577 static u32 _cfg80211_calculate_bitrate_eht_uhr(struct rate_info *rate) in _cfg80211_calculate_bitrate_eht_uhr() argument
1611 if (WARN_ON_ONCE(rate->eht_gi > NL80211_RATE_INFO_EHT_GI_3_2)) in _cfg80211_calculate_bitrate_eht_uhr()
1613 if (WARN_ON_ONCE(rate->eht_ru_alloc > in _cfg80211_calculate_bitrate_eht_uhr()
1616 if (WARN_ON_ONCE(rate->nss < 1 || rate->nss > 8)) in _cfg80211_calculate_bitrate_eht_uhr()
1620 if (rate->mcs == 14) { in _cfg80211_calculate_bitrate_eht_uhr()
1621 if ((rate->bw != RATE_INFO_BW_EHT_RU && in _cfg80211_calculate_bitrate_eht_uhr()
1622 rate->bw != RATE_INFO_BW_80 && in _cfg80211_calculate_bitrate_eht_uhr()
1623 rate->bw != RATE_INFO_BW_160 && in _cfg80211_calculate_bitrate_eht_uhr()
1624 rate->bw != RATE_INFO_BW_320) || in _cfg80211_calculate_bitrate_eht_uhr()
1625 (rate->bw == RATE_INFO_BW_EHT_RU && in _cfg80211_calculate_bitrate_eht_uhr()
1626 rate->eht_ru_alloc != NL80211_RATE_INFO_EHT_RU_ALLOC_996 && in _cfg80211_calculate_bitrate_eht_uhr()
1627 rate->eht_ru_alloc != NL80211_RATE_INFO_EHT_RU_ALLOC_2x996 && in _cfg80211_calculate_bitrate_eht_uhr()
1628 rate->eht_ru_alloc != NL80211_RATE_INFO_EHT_RU_ALLOC_4x996)) { in _cfg80211_calculate_bitrate_eht_uhr()
1630 rate->bw, rate->eht_ru_alloc); in _cfg80211_calculate_bitrate_eht_uhr()
1635 if (rate->bw == RATE_INFO_BW_320 || in _cfg80211_calculate_bitrate_eht_uhr()
1636 (rate->bw == RATE_INFO_BW_EHT_RU && in _cfg80211_calculate_bitrate_eht_uhr()
1637 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_4x996)) in _cfg80211_calculate_bitrate_eht_uhr()
1638 result = 4 * rates_996[rate->eht_gi]; in _cfg80211_calculate_bitrate_eht_uhr()
1639 else if (rate->bw == RATE_INFO_BW_EHT_RU && in _cfg80211_calculate_bitrate_eht_uhr()
1640 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_3x996P484) in _cfg80211_calculate_bitrate_eht_uhr()
1641 result = 3 * rates_996[rate->eht_gi] + rates_484[rate->eht_gi]; in _cfg80211_calculate_bitrate_eht_uhr()
1642 else if (rate->bw == RATE_INFO_BW_EHT_RU && in _cfg80211_calculate_bitrate_eht_uhr()
1643 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_3x996) in _cfg80211_calculate_bitrate_eht_uhr()
1644 result = 3 * rates_996[rate->eht_gi]; in _cfg80211_calculate_bitrate_eht_uhr()
1645 else if (rate->bw == RATE_INFO_BW_EHT_RU && in _cfg80211_calculate_bitrate_eht_uhr()
1646 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_2x996P484) in _cfg80211_calculate_bitrate_eht_uhr()
1647 result = 2 * rates_996[rate->eht_gi] + rates_484[rate->eht_gi]; in _cfg80211_calculate_bitrate_eht_uhr()
1648 else if (rate->bw == RATE_INFO_BW_160 || in _cfg80211_calculate_bitrate_eht_uhr()
1649 (rate->bw == RATE_INFO_BW_EHT_RU && in _cfg80211_calculate_bitrate_eht_uhr()
1650 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_2x996)) in _cfg80211_calculate_bitrate_eht_uhr()
1651 result = 2 * rates_996[rate->eht_gi]; in _cfg80211_calculate_bitrate_eht_uhr()
1652 else if (rate->bw == RATE_INFO_BW_EHT_RU && in _cfg80211_calculate_bitrate_eht_uhr()
1653 rate->eht_ru_alloc == in _cfg80211_calculate_bitrate_eht_uhr()
1655 result = rates_996[rate->eht_gi] + rates_484[rate->eht_gi] in _cfg80211_calculate_bitrate_eht_uhr()
1656 + rates_242[rate->eht_gi]; in _cfg80211_calculate_bitrate_eht_uhr()
1657 else if (rate->bw == RATE_INFO_BW_EHT_RU && in _cfg80211_calculate_bitrate_eht_uhr()
1658 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_996P484) in _cfg80211_calculate_bitrate_eht_uhr()
1659 result = rates_996[rate->eht_gi] + rates_484[rate->eht_gi]; in _cfg80211_calculate_bitrate_eht_uhr()
1660 else if (rate->bw == RATE_INFO_BW_80 || in _cfg80211_calculate_bitrate_eht_uhr()
1661 (rate->bw == RATE_INFO_BW_EHT_RU && in _cfg80211_calculate_bitrate_eht_uhr()
1662 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_996)) in _cfg80211_calculate_bitrate_eht_uhr()
1663 result = rates_996[rate->eht_gi]; in _cfg80211_calculate_bitrate_eht_uhr()
1664 else if (rate->bw == RATE_INFO_BW_EHT_RU && in _cfg80211_calculate_bitrate_eht_uhr()
1665 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_484P242) in _cfg80211_calculate_bitrate_eht_uhr()
1666 result = rates_484[rate->eht_gi] + rates_242[rate->eht_gi]; in _cfg80211_calculate_bitrate_eht_uhr()
1667 else if (rate->bw == RATE_INFO_BW_40 || in _cfg80211_calculate_bitrate_eht_uhr()
1668 (rate->bw == RATE_INFO_BW_EHT_RU && in _cfg80211_calculate_bitrate_eht_uhr()
1669 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_484)) in _cfg80211_calculate_bitrate_eht_uhr()
1670 result = rates_484[rate->eht_gi]; in _cfg80211_calculate_bitrate_eht_uhr()
1671 else if (rate->bw == RATE_INFO_BW_20 || in _cfg80211_calculate_bitrate_eht_uhr()
1672 (rate->bw == RATE_INFO_BW_EHT_RU && in _cfg80211_calculate_bitrate_eht_uhr()
1673 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_242)) in _cfg80211_calculate_bitrate_eht_uhr()
1674 result = rates_242[rate->eht_gi]; in _cfg80211_calculate_bitrate_eht_uhr()
1675 else if (rate->bw == RATE_INFO_BW_EHT_RU && in _cfg80211_calculate_bitrate_eht_uhr()
1676 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_106P26) in _cfg80211_calculate_bitrate_eht_uhr()
1677 result = rates_106[rate->eht_gi] + rates_26[rate->eht_gi]; in _cfg80211_calculate_bitrate_eht_uhr()
1678 else if (rate->bw == RATE_INFO_BW_EHT_RU && in _cfg80211_calculate_bitrate_eht_uhr()
1679 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_106) in _cfg80211_calculate_bitrate_eht_uhr()
1680 result = rates_106[rate->eht_gi]; in _cfg80211_calculate_bitrate_eht_uhr()
1681 else if (rate->bw == RATE_INFO_BW_EHT_RU && in _cfg80211_calculate_bitrate_eht_uhr()
1682 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_52P26) in _cfg80211_calculate_bitrate_eht_uhr()
1683 result = rates_52[rate->eht_gi] + rates_26[rate->eht_gi]; in _cfg80211_calculate_bitrate_eht_uhr()
1684 else if (rate->bw == RATE_INFO_BW_EHT_RU && in _cfg80211_calculate_bitrate_eht_uhr()
1685 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_52) in _cfg80211_calculate_bitrate_eht_uhr()
1686 result = rates_52[rate->eht_gi]; in _cfg80211_calculate_bitrate_eht_uhr()
1687 else if (rate->bw == RATE_INFO_BW_EHT_RU && in _cfg80211_calculate_bitrate_eht_uhr()
1688 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_26) in _cfg80211_calculate_bitrate_eht_uhr()
1689 result = rates_26[rate->eht_gi]; in _cfg80211_calculate_bitrate_eht_uhr()
1692 rate->bw, rate->eht_ru_alloc); in _cfg80211_calculate_bitrate_eht_uhr()
1699 do_div(tmp, mcs_divisors[rate->mcs]); in _cfg80211_calculate_bitrate_eht_uhr()
1702 tmp *= rate->nss; in _cfg80211_calculate_bitrate_eht_uhr()
1706 if (rate->flags & RATE_INFO_FLAGS_UHR_IM) { in _cfg80211_calculate_bitrate_eht_uhr()
1707 if (WARN(rate->nss != 1 || rate->mcs == 15, in _cfg80211_calculate_bitrate_eht_uhr()
1719 static u32 cfg80211_calculate_bitrate_eht(struct rate_info *rate) in cfg80211_calculate_bitrate_eht() argument
1721 if (WARN_ONCE(rate->mcs > 15, "bad EHT MCS %d\n", rate->mcs)) in cfg80211_calculate_bitrate_eht()
1724 if (WARN_ONCE(rate->flags & (RATE_INFO_FLAGS_UHR_ELR_MCS | in cfg80211_calculate_bitrate_eht()
1726 "bad EHT MCS flags 0x%x\n", rate->flags)) in cfg80211_calculate_bitrate_eht()
1729 return _cfg80211_calculate_bitrate_eht_uhr(rate); in cfg80211_calculate_bitrate_eht()
1732 static u32 cfg80211_calculate_bitrate_uhr(struct rate_info *rate) in cfg80211_calculate_bitrate_uhr() argument
1734 if (rate->flags & RATE_INFO_FLAGS_UHR_ELR_MCS) { in cfg80211_calculate_bitrate_uhr()
1735 WARN_ONCE(rate->eht_gi != NL80211_RATE_INFO_EHT_GI_1_6, in cfg80211_calculate_bitrate_uhr()
1737 rate->eht_gi); in cfg80211_calculate_bitrate_uhr()
1738 WARN_ONCE(rate->mcs > 1, "bad UHR ELR MCS %d\n", rate->mcs); in cfg80211_calculate_bitrate_uhr()
1739 WARN_ONCE(rate->nss != 1, "bad UHR ELR NSS %d\n", rate->nss); in cfg80211_calculate_bitrate_uhr()
1740 WARN_ONCE(rate->bw != RATE_INFO_BW_20, in cfg80211_calculate_bitrate_uhr()
1742 rate->bw); in cfg80211_calculate_bitrate_uhr()
1743 WARN_ONCE(rate->flags & RATE_INFO_FLAGS_UHR_IM, in cfg80211_calculate_bitrate_uhr()
1744 "bad UHR MCS flags 0x%x\n", rate->flags); in cfg80211_calculate_bitrate_uhr()
1745 if (rate->mcs == 0) in cfg80211_calculate_bitrate_uhr()
1750 switch (rate->mcs) { in cfg80211_calculate_bitrate_uhr()
1756 return _cfg80211_calculate_bitrate_eht_uhr(rate); in cfg80211_calculate_bitrate_uhr()
1759 WARN_ONCE(1, "bad UHR MCS %d\n", rate->mcs); in cfg80211_calculate_bitrate_uhr()
1763 static u32 cfg80211_calculate_bitrate_s1g(struct rate_info *rate) in cfg80211_calculate_bitrate_s1g() argument
1829 if (rate->mcs >= 11) in cfg80211_calculate_bitrate_s1g()
1832 switch (rate->bw) { in cfg80211_calculate_bitrate_s1g()
1858 bitrate = base[idx][rate->mcs]; in cfg80211_calculate_bitrate_s1g()
1859 bitrate *= rate->nss; in cfg80211_calculate_bitrate_s1g()
1861 if (rate->flags & RATE_INFO_FLAGS_SHORT_GI) in cfg80211_calculate_bitrate_s1g()
1867 rate->bw, rate->mcs, rate->nss); in cfg80211_calculate_bitrate_s1g()
1871 u32 cfg80211_calculate_bitrate(struct rate_info *rate) in cfg80211_calculate_bitrate() argument
1873 if (rate->flags & RATE_INFO_FLAGS_MCS) in cfg80211_calculate_bitrate()
1874 return cfg80211_calculate_bitrate_ht(rate); in cfg80211_calculate_bitrate()
1875 if (rate->flags & RATE_INFO_FLAGS_DMG) in cfg80211_calculate_bitrate()
1876 return cfg80211_calculate_bitrate_dmg(rate); in cfg80211_calculate_bitrate()
1877 if (rate->flags & RATE_INFO_FLAGS_EXTENDED_SC_DMG) in cfg80211_calculate_bitrate()
1878 return cfg80211_calculate_bitrate_extended_sc_dmg(rate); in cfg80211_calculate_bitrate()
1879 if (rate->flags & RATE_INFO_FLAGS_EDMG) in cfg80211_calculate_bitrate()
1880 return cfg80211_calculate_bitrate_edmg(rate); in cfg80211_calculate_bitrate()
1881 if (rate->flags & RATE_INFO_FLAGS_VHT_MCS) in cfg80211_calculate_bitrate()
1882 return cfg80211_calculate_bitrate_vht(rate); in cfg80211_calculate_bitrate()
1883 if (rate->flags & RATE_INFO_FLAGS_HE_MCS) in cfg80211_calculate_bitrate()
1884 return cfg80211_calculate_bitrate_he(rate); in cfg80211_calculate_bitrate()
1885 if (rate->flags & RATE_INFO_FLAGS_EHT_MCS) in cfg80211_calculate_bitrate()
1886 return cfg80211_calculate_bitrate_eht(rate); in cfg80211_calculate_bitrate()
1887 if (rate->flags & RATE_INFO_FLAGS_UHR_MCS) in cfg80211_calculate_bitrate()
1888 return cfg80211_calculate_bitrate_uhr(rate); in cfg80211_calculate_bitrate()
1889 if (rate->flags & RATE_INFO_FLAGS_S1G_MCS) in cfg80211_calculate_bitrate()
1890 return cfg80211_calculate_bitrate_s1g(rate); in cfg80211_calculate_bitrate()
1892 return rate->legacy; in cfg80211_calculate_bitrate()
2618 int rate = (rates[i] & 0x7f) * 5; in ieee80211_get_ratemask() local
2622 if (sband->bitrates[j].bitrate == rate) { in ieee80211_get_ratemask()