net80211: fix VHT160/80P80/80 chanwidth selection in the "40-" case

Depending on the base channel ni_vht_chan2 - ni_vht_chan1 can be
negative.  Apply abs() as indicated in the comments right above
	| CCFS1 - CCFS0 | = 8  or > 16
in order to fix the channel width selection.

Sponsored by:	The FreeBSD Foundation
PR:		293645
Fixes:		4bf049bfee
MFC after:	3 days
Reviewed by:	adrian
Differential Revision: https://reviews.freebsd.org/D55717
This commit is contained in:
Bjoern A. Zeeb
2026-03-08 00:57:33 +00:00
parent 53c69fd933
commit 6cfd2b93e6
+3 -2
View File
@@ -34,6 +34,7 @@
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/libkern.h>
#include <sys/malloc.h>
#include <sys/systm.h>
#include <sys/endian.h>
@@ -2038,11 +2039,11 @@ do { \
}
/* CCFS1 > 0 and | CCFS1 - CCFS0 | = 8 */
if (ni->ni_vht_chan2 > 0 && (ni->ni_vht_chan2 - ni->ni_vht_chan1) == 8)
if (ni->ni_vht_chan2 > 0 && abs(ni->ni_vht_chan2 - ni->ni_vht_chan1) == 8)
can_vht160 = can_vht80 = true;
/* CCFS1 > 0 and | CCFS1 - CCFS0 | > 16 */
if (ni->ni_vht_chan2 > 0 && (ni->ni_vht_chan2 - ni->ni_vht_chan1) > 16)
if (ni->ni_vht_chan2 > 0 && abs(ni->ni_vht_chan2 - ni->ni_vht_chan1) > 16)
can_vht80p80 = can_vht80 = true;
/* CFFS1 == 0 */