Lines Matching refs:rate

1213 static u32 cfg80211_calculate_bitrate_ht(struct rate_info *rate)
1218 if (WARN_ON_ONCE(rate->mcs >= 32))
1221 modulation = rate->mcs & 7;
1222 streams = (rate->mcs >> 3) + 1;
1224 bitrate = (rate->bw == RATE_INFO_BW_40) ? 13500000 : 6500000;
1235 if (rate->flags & RATE_INFO_FLAGS_SHORT_GI)
1242 static u32 cfg80211_calculate_bitrate_dmg(struct rate_info *rate)
1283 if (WARN_ON_ONCE(rate->mcs >= ARRAY_SIZE(__mcs2bitrate)))
1286 return __mcs2bitrate[rate->mcs];
1289 static u32 cfg80211_calculate_bitrate_extended_sc_dmg(struct rate_info *rate)
1302 if (WARN_ON_ONCE(rate->mcs < 6 || rate->mcs > 12))
1305 return __mcs2bitrate[rate->mcs - 6];
1308 static u32 cfg80211_calculate_bitrate_edmg(struct rate_info *rate)
1336 if (WARN_ON_ONCE(rate->mcs >= ARRAY_SIZE(__mcs2bitrate)))
1339 return __mcs2bitrate[rate->mcs] * rate->n_bonded_ch;
1342 static u32 cfg80211_calculate_bitrate_vht(struct rate_info *rate)
1402 if (rate->mcs > 11)
1405 switch (rate->bw) {
1423 bitrate = base[idx][rate->mcs];
1424 bitrate *= rate->nss;
1426 if (rate->flags & RATE_INFO_FLAGS_SHORT_GI)
1432 WARN_ONCE(1, "invalid rate bw=%d, mcs=%d, nss=%d\n",
1433 rate->bw, rate->mcs, rate->nss);
1437 static u32 cfg80211_calculate_bitrate_he(struct rate_info *rate)
1466 if (WARN_ON_ONCE(rate->mcs > 13))
1469 if (WARN_ON_ONCE(rate->he_gi > NL80211_RATE_INFO_HE_GI_3_2))
1471 if (WARN_ON_ONCE(rate->he_ru_alloc >
1474 if (WARN_ON_ONCE(rate->nss < 1 || rate->nss > 8))
1477 if (rate->bw == RATE_INFO_BW_160)
1478 result = rates_160M[rate->he_gi];
1479 else if (rate->bw == RATE_INFO_BW_80 ||
1480 (rate->bw == RATE_INFO_BW_HE_RU &&
1481 rate->he_ru_alloc == NL80211_RATE_INFO_HE_RU_ALLOC_996))
1482 result = rates_969[rate->he_gi];
1483 else if (rate->bw == RATE_INFO_BW_40 ||
1484 (rate->bw == RATE_INFO_BW_HE_RU &&
1485 rate->he_ru_alloc == NL80211_RATE_INFO_HE_RU_ALLOC_484))
1486 result = rates_484[rate->he_gi];
1487 else if (rate->bw == RATE_INFO_BW_20 ||
1488 (rate->bw == RATE_INFO_BW_HE_RU &&
1489 rate->he_ru_alloc == NL80211_RATE_INFO_HE_RU_ALLOC_242))
1490 result = rates_242[rate->he_gi];
1491 else if (rate->bw == RATE_INFO_BW_HE_RU &&
1492 rate->he_ru_alloc == NL80211_RATE_INFO_HE_RU_ALLOC_106)
1493 result = rates_106[rate->he_gi];
1494 else if (rate->bw == RATE_INFO_BW_HE_RU &&
1495 rate->he_ru_alloc == NL80211_RATE_INFO_HE_RU_ALLOC_52)
1496 result = rates_52[rate->he_gi];
1497 else if (rate->bw == RATE_INFO_BW_HE_RU &&
1498 rate->he_ru_alloc == NL80211_RATE_INFO_HE_RU_ALLOC_26)
1499 result = rates_26[rate->he_gi];
1502 rate->bw, rate->he_ru_alloc);
1509 do_div(tmp, mcs_divisors[rate->mcs]);
1513 result = (result * rate->nss) / 8;
1514 if (rate->he_dcm)
1520 static u32 cfg80211_calculate_bitrate_eht(struct rate_info *rate)
1550 if (WARN_ON_ONCE(rate->mcs > 15))
1552 if (WARN_ON_ONCE(rate->eht_gi > NL80211_RATE_INFO_EHT_GI_3_2))
1554 if (WARN_ON_ONCE(rate->eht_ru_alloc >
1557 if (WARN_ON_ONCE(rate->nss < 1 || rate->nss > 8))
1561 if (rate->mcs == 14) {
1562 if ((rate->bw != RATE_INFO_BW_EHT_RU &&
1563 rate->bw != RATE_INFO_BW_80 &&
1564 rate->bw != RATE_INFO_BW_160 &&
1565 rate->bw != RATE_INFO_BW_320) ||
1566 (rate->bw == RATE_INFO_BW_EHT_RU &&
1567 rate->eht_ru_alloc != NL80211_RATE_INFO_EHT_RU_ALLOC_996 &&
1568 rate->eht_ru_alloc != NL80211_RATE_INFO_EHT_RU_ALLOC_2x996 &&
1569 rate->eht_ru_alloc != NL80211_RATE_INFO_EHT_RU_ALLOC_4x996)) {
1571 rate->bw, rate->eht_ru_alloc);
1576 if (rate->bw == RATE_INFO_BW_320 ||
1577 (rate->bw == RATE_INFO_BW_EHT_RU &&
1578 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_4x996))
1579 result = 4 * rates_996[rate->eht_gi];
1580 else if (rate->bw == RATE_INFO_BW_EHT_RU &&
1581 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_3x996P484)
1582 result = 3 * rates_996[rate->eht_gi] + rates_484[rate->eht_gi];
1583 else if (rate->bw == RATE_INFO_BW_EHT_RU &&
1584 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_3x996)
1585 result = 3 * rates_996[rate->eht_gi];
1586 else if (rate->bw == RATE_INFO_BW_EHT_RU &&
1587 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_2x996P484)
1588 result = 2 * rates_996[rate->eht_gi] + rates_484[rate->eht_gi];
1589 else if (rate->bw == RATE_INFO_BW_160 ||
1590 (rate->bw == RATE_INFO_BW_EHT_RU &&
1591 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_2x996))
1592 result = 2 * rates_996[rate->eht_gi];
1593 else if (rate->bw == RATE_INFO_BW_EHT_RU &&
1594 rate->eht_ru_alloc ==
1596 result = rates_996[rate->eht_gi] + rates_484[rate->eht_gi]
1597 + rates_242[rate->eht_gi];
1598 else if (rate->bw == RATE_INFO_BW_EHT_RU &&
1599 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_996P484)
1600 result = rates_996[rate->eht_gi] + rates_484[rate->eht_gi];
1601 else if (rate->bw == RATE_INFO_BW_80 ||
1602 (rate->bw == RATE_INFO_BW_EHT_RU &&
1603 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_996))
1604 result = rates_996[rate->eht_gi];
1605 else if (rate->bw == RATE_INFO_BW_EHT_RU &&
1606 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_484P242)
1607 result = rates_484[rate->eht_gi] + rates_242[rate->eht_gi];
1608 else if (rate->bw == RATE_INFO_BW_40 ||
1609 (rate->bw == RATE_INFO_BW_EHT_RU &&
1610 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_484))
1611 result = rates_484[rate->eht_gi];
1612 else if (rate->bw == RATE_INFO_BW_20 ||
1613 (rate->bw == RATE_INFO_BW_EHT_RU &&
1614 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_242))
1615 result = rates_242[rate->eht_gi];
1616 else if (rate->bw == RATE_INFO_BW_EHT_RU &&
1617 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_106P26)
1618 result = rates_106[rate->eht_gi] + rates_26[rate->eht_gi];
1619 else if (rate->bw == RATE_INFO_BW_EHT_RU &&
1620 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_106)
1621 result = rates_106[rate->eht_gi];
1622 else if (rate->bw == RATE_INFO_BW_EHT_RU &&
1623 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_52P26)
1624 result = rates_52[rate->eht_gi] + rates_26[rate->eht_gi];
1625 else if (rate->bw == RATE_INFO_BW_EHT_RU &&
1626 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_52)
1627 result = rates_52[rate->eht_gi];
1628 else if (rate->bw == RATE_INFO_BW_EHT_RU &&
1629 rate->eht_ru_alloc == NL80211_RATE_INFO_EHT_RU_ALLOC_26)
1630 result = rates_26[rate->eht_gi];
1633 rate->bw, rate->eht_ru_alloc);
1640 do_div(tmp, mcs_divisors[rate->mcs]);
1643 tmp *= rate->nss;
1651 static u32 cfg80211_calculate_bitrate_s1g(struct rate_info *rate)
1717 if (rate->mcs >= 11)
1720 switch (rate->bw) {
1746 bitrate = base[idx][rate->mcs];
1747 bitrate *= rate->nss;
1749 if (rate->flags & RATE_INFO_FLAGS_SHORT_GI)
1754 WARN_ONCE(1, "invalid rate bw=%d, mcs=%d, nss=%d\n",
1755 rate->bw, rate->mcs, rate->nss);
1759 u32 cfg80211_calculate_bitrate(struct rate_info *rate)
1761 if (rate->flags & RATE_INFO_FLAGS_MCS)
1762 return cfg80211_calculate_bitrate_ht(rate);
1763 if (rate->flags & RATE_INFO_FLAGS_DMG)
1764 return cfg80211_calculate_bitrate_dmg(rate);
1765 if (rate->flags & RATE_INFO_FLAGS_EXTENDED_SC_DMG)
1766 return cfg80211_calculate_bitrate_extended_sc_dmg(rate);
1767 if (rate->flags & RATE_INFO_FLAGS_EDMG)
1768 return cfg80211_calculate_bitrate_edmg(rate);
1769 if (rate->flags & RATE_INFO_FLAGS_VHT_MCS)
1770 return cfg80211_calculate_bitrate_vht(rate);
1771 if (rate->flags & RATE_INFO_FLAGS_HE_MCS)
1772 return cfg80211_calculate_bitrate_he(rate);
1773 if (rate->flags & RATE_INFO_FLAGS_EHT_MCS)
1774 return cfg80211_calculate_bitrate_eht(rate);
1775 if (rate->flags & RATE_INFO_FLAGS_S1G_MCS)
1776 return cfg80211_calculate_bitrate_s1g(rate);
1778 return rate->legacy;
2355 int rate = (rates[i] & 0x7f) * 5;
2359 if (sband->bitrates[j].bitrate == rate) {