From nobody Thu Sep 10 09:48:41 2026 X-Original-To: dev-commits-src-branches@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 4hgXtd61qdz6rmMG for ; Thu, 10 Sep 2026 09:48:41 +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 4hgXtd1RhTz4b9R for ; Thu, 10 Sep 2026 09:48:41 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1789033721; 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=zYzEVmsU3rAeIjWrIprdhhr8Rl8R4dNVvKtJyYXSvNg=; b=rDFMTbGUFYNo4oyKEAUMpvcVGc6erZbsp8PjeOHiOUlX6nUZJQPgSrrrq1HuZMb4HuOO4/ LLcj2nU5O97Up6QZ0XK1G4wt/Ik7yXIMZ17MGjsQBEBKbvQZ39r0/CjR2G57t88VKkAPJs z1NLInLR+QtzfkzBmrFy5ZhAPQN6+lm/J8QWDlHQEfRIg09psCaINbEgKnG1S3zX/vO2qM n0yrHbFDCIh0eUIpN90fs4mYfaY1ds+Ovs9Tbp3echWryY8PNnA2zng7dtAijTwX3Nj6/a l2jtCm8lTLCNLJldzE4eUbQJBWK02xFt6vv9rfIr19mnO1SyK1wc6jF+eE7JeA== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1789033721; b=wgbdUxRkcEY/YcQdWFjiv1t10z6CS8ym9tZXVIA3D0dOYv1rp9yzE1b4oxnVl8MU/+Yar8 SzzHongcEnb1nwUn2hp/HpX6C6xUuBiYmFZU5N+sKBDJ7igpr7Hv3XrQ7sbuz9VQgQb1JS qNVHFWENLQ/mMFCccI6SHSPjhCnZDi4D7AWtsnqAzVyMz7MHtG+IERBcqNWuyhO7Oucuh+ Iu8RAP2BuWNVCiZaIdgF8OMi2xcr3fuHF41MzP1fSVs6pptMKQG+/8nfSmN52RHWbglNtM EAwRDoj71XFhC3VifPKNWLVdL6m5DG6PjIUYXRipxsP8yHEWdgwy4bkC9W1zog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1789033721; 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=zYzEVmsU3rAeIjWrIprdhhr8Rl8R4dNVvKtJyYXSvNg=; b=puuqTLP+b5c31um/GyMONJo37dKP7IzK58giuJs+BLP9nIQa0TuxiQRtw758/LO4LwHchn pPes3QQBlmn0axrFMDc+YCNtuGVgsetF2Ta0zMbs9fvN8pyXvBGUxUAMkAdJH6iOqZMdH9 ckeJpIwk2wEa0i6KKxq2+z9dRJUeggIKYey7U9r0RInzd0marecGE+AxGKv+ZKQfE4f/Rr +/vUCjuYnT00LHIZTH77viHWyrB+TvJ2tL+JnH7VAUmPTekgMJTzaKyj5k6HRJn7GHMo5D 2PjCaXI1BabV4nEKz55pwktI6Jshzfd//92S+uprcy/o9KCh8RxGv53wLtTp3g== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hgXtd08d4zMFL for ; Thu, 10 Sep 2026 09:48:41 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 24bc3 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 10 Sep 2026 09:48:41 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Bjoern A. Zeeb Subject: git: 1fbabf2d4f8d - stable/15 - LinuxKPI: 802.11: implement cfg80211_calculate_bitrate() List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@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/stable/15 X-Git-Reftype: branch X-Git-Commit: 1fbabf2d4f8d3c3ecfb47287881e5df932630fd9 Auto-Submitted: auto-generated Date: Thu, 10 Sep 2026 09:48:41 +0000 Message-Id: <6aa27cf9.24bc3.1364a706@gitrepo.freebsd.org> The branch stable/15 has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=1fbabf2d4f8d3c3ecfb47287881e5df932630fd9 commit 1fbabf2d4f8d3c3ecfb47287881e5df932630fd9 Author: Bjoern A. Zeeb AuthorDate: 2026-08-29 01:56:55 +0000 Commit: Bjoern A. Zeeb CommitDate: 2026-09-10 09:46:53 +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 (cherry picked from commit 654cffe59dd6c8818241bf44eff333af28e10168) --- 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 52897e16df9c..18273bc5fd67 100644 --- a/sys/compat/linuxkpi/common/src/linux_80211.c +++ b/sys/compat/linuxkpi/common/src/linux_80211.c @@ -8839,15 +8839,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