From nobody Mon Aug 31 21:48:44 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4hYjLB0TG1z6qGsX for ; Mon, 31 Aug 2026 21:48:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hYjL94jxBz43Vc for ; Mon, 31 Aug 2026 21:48:49 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1788212929; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=vXaWCsO7jlxdREvo6kmomppVku83aWNc+fX4+YFOX6o=; b=av7rEchPFlqB62BEfZpVWt4zbJNLCG++b+oo7UgHpK2zuGziyd+kNkWpRrezoA90T5Gw6g A58erdizCZrSdFiSPSqEtzSVG0y5gpZQqgQqLSvTlor6PMjD+A68gpc9jKSMvcihxUliss 7oPuFGAOg6CLLMM/xNhfrCE5Za/yDURS1llsM2XstGotV5C3MbHTVLAlPyPjxfBDQVmKIa /SFRFNA+MCDJFeQ7DQ3sz1CaxjqQKS/ssdjhSDTTRlafj8iJmwJ+WVHuv1xdI+tZaAmllJ 0Y/HLYy6AzelmBR5DUE0LYwH8EIsEzLtVqoCDOBPKEkLv7VOqtkQxMpGLOuaxw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1788212929; a=rsa-sha256; cv=none; b=qKTggW9W96tTNj9j9xSmV2W1ckOYS3+4Pu2lGg6KGgwj6D70laW/Oa6omMwF89dn5mkQqd IK/1kZWVtorUBanAkzV+3VyNhYzmrmY5B6UV/M34DqYsxrfF+A+N3V61pQuPayVyxTbw4F XPF5Eg3Kr3G77sAOFsPtL8gO4IKsnrEOK7MB2kQJnQr7UoyVKnlpFOsgTt8YyFe4mOzEfc F3VlBKapiItUupB1rHp+H13oZ/ZenMUZ2icTr91u7ThsS/r0BsBqx9RagckLSHK3MH42Hx kgtOn90PfKyNLU+m4zEoTa4Vg7a/umafpM5YIB7N2+kGGEaYbOwICIXXgxf9og== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1788212929; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=vXaWCsO7jlxdREvo6kmomppVku83aWNc+fX4+YFOX6o=; b=Ak34stt2HwHNXXiXQfOuCPc4P5iQyint6QyQvUMHc/AqoYw9fYWrMkPYrWu7dyv6n3L+nR pimLf1TPv01LGo2g7MR2LbnUgh8q7nNdV24OpD7BkZOQPotS57dPbNHAMAcsFfWvrTJqiF FfS6J0EtrFT4Y9C/FlRcKoY6QLJc2eepcMWHJ3tox9sF1WR0wPPjvozvT+rIO8MhgiSXuU c+9IfwkHETtsbKhPOBOzg8Qz40nUMqx9ZAPtAFFkMu9Pev4xKitKvK0E25X/j0JtcGzwyh C8MwfuwtO0Ip6vyITAVVks2h5JgOyjx2RgRangJquDV2A/V10Oxbcs/fnLcrKA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hYjL93LmQzTd2 for ; Mon, 31 Aug 2026 21:48:49 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 247f9 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 31 Aug 2026 21:48:44 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Bjoern A. Zeeb Subject: git: 654cffe59dd6 - main - LinuxKPI: 802.11: implement cfg80211_calculate_bitrate() List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bz X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 654cffe59dd6c8818241bf44eff333af28e10168 Auto-Submitted: auto-generated Date: Mon, 31 Aug 2026 21:48:44 +0000 Message-Id: <6a95f6bc.247f9.5a3bcc2f@gitrepo.freebsd.org> The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=654cffe59dd6c8818241bf44eff333af28e10168 commit 654cffe59dd6c8818241bf44eff333af28e10168 Author: Bjoern A. Zeeb AuthorDate: 2026-08-29 01:56:55 +0000 Commit: Bjoern A. Zeeb CommitDate: 2026-08-31 21:42:37 +0000 LinuxKPI: 802.11: implement cfg80211_calculate_bitrate() lkpi_cfg80211_calculate_bitrate_vht() was constantly showing up in my debug traces as a TODO with rtw89 so I went ahead and implemented the HT and VHT versions. Realtek seems to limit amsdu sizes based on the value and ask for it whether needed or not. Sponsored by: The FreeBSD Foundation MFC after: 3 days --- sys/compat/linuxkpi/common/src/linux_80211.c | 109 ++++++++++++++++++++++++++- 1 file changed, 105 insertions(+), 4 deletions(-) diff --git a/sys/compat/linuxkpi/common/src/linux_80211.c b/sys/compat/linuxkpi/common/src/linux_80211.c index f1eef91af0da..ae0c374e2ea6 100644 --- a/sys/compat/linuxkpi/common/src/linux_80211.c +++ b/sys/compat/linuxkpi/common/src/linux_80211.c @@ -8845,15 +8845,116 @@ linuxkpi_80211_wiphy_register(struct wiphy *wiphy) static uint32_t lkpi_cfg80211_calculate_bitrate_ht(struct rate_info *rate) { - TODO("cfg80211_calculate_bitrate_ht"); - return (rate->legacy); + /* + * IEEE Std 802.11-2024, 19.5 Parameters for HT-MCSs; + * Tables Table 19-27-MCS NSS=1 800ns GI, and following. + * We use 100Kbit/s entries, the expacted return scale. + * We can calulate MCS0..31 entries. + */ + uint32_t r; + uint8_t nss, mcsidx; + + if (rate->mcs > 31) + goto inval; + + switch (rate->bw) { + case RATE_INFO_BW_20: + r = 65; + break; + case RATE_INFO_BW_40: + r = 135; + break; + default: + goto inval; + /* NOTREACHED */ + } + + nss = (rate->mcs >> 3) + 1; + mcsidx = rate->mcs & 0x07; + + switch (mcsidx) { + case 0 ... 3: + r *= (mcsidx + 1); + break; + case 4: + r *= (mcsidx + 2); + break; + case 5 ... 7: + r *= (mcsidx + 3); + break; + default: + goto inval; + /* NOTREACHED */ + } + r *= nss; + if ((rate->flags & RATE_INFO_FLAGS_SHORT_GI) != 0) + r = (r * 10) / 9; + + return (r); + +inval: + /* Do not warn every time or we get too much spam on console! */ + WARN_ONCE(1, "%s: rate mcs %u nss %u mcsidx %u invalid!\n", __func__, + rate->mcs, nss, mcsidx); + return (0); } static uint32_t lkpi_cfg80211_calculate_bitrate_vht(struct rate_info *rate) { - TODO("cfg80211_calculate_bitrate_vht"); - return (rate->legacy); + /* + * IEEE Std 802.11-2024, 21.5 Parameters for VHT-MCSs; + * Tables 21-29 NSS=1 800ns GI, and following. + * We use 100Kbit/s entries, the expacted return scale. + */ + static const uint16_t datarate[4][10] = { + /* BW20 */ + { 65, 130, 195, 260, 390, 520, 585, 650, 780, 0 }, + /* BW40 */ + { 135, 270, 405, 540, 810, 1080, 1215, 1350, 1620, 1800 }, + /* BW80 */ + { 293, 585, 878, 1170, 1755, 2340, 2633, 2925, 3510, 3900 }, + /* BW160 */ + { 585, 1170, 1755, 2340, 3510, 4680, 5265, 5850, 7020, 7800 } + }; + uint32_t r; + uint8_t bwidx; + + /* Should we warn about out of bounds values? */ + if (rate->mcs > 9 || rate->nss > 8) + goto inval; + + switch (rate->bw) { + case RATE_INFO_BW_20: + bwidx = 0; + break; + case RATE_INFO_BW_40: + bwidx = 1; + break; + case RATE_INFO_BW_80: + bwidx = 2; + break; + case RATE_INFO_BW_160: + bwidx = 2; + break; + default: + goto inval; + /* NOTREACHED */ + } + + r = datarate[bwidx][rate->mcs]; + /* Calculate the other NSS tables and the SGI column. */ + r *= rate->nss; + if ((rate->flags & RATE_INFO_FLAGS_SHORT_GI) != 0) + r = (r * 10) / 9; + + return (r); + +inval: + /* Do not warn every time or we get too much spam on console! */ + WARN_ONCE(1, "%s: rate mcs %u nss %u bw %d (%s) invalid!\n", __func__, + rate->mcs, rate->nss, rate->bw, lkpi_rate_info_bw_to_str(rate->bw)); + return (0); } uint32_t