mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-07-05 13:25:20 +02:00
wifi: cfg80211: allow IR in 20 MHz configurations
[ Upstream commit cf4bd1608882792d4742e27a819493312904a680 ] Some regulatory bodies doesn't allow IR (initiate radioation) on a specific subband, but allows it for channels with a bandwidth of 20 MHz. Add a channel flag that indicates that, and consider it in cfg80211_reg_check_beaconing. While on it, fix the kernel doc of enum nl80211_reg_rule_flags and change it to use BIT(). Signed-off-by: Anjaneyulu <pagadala.yesu.anjaneyulu@intel.com> Co-developed-by: Somashekhar Puttagangaiah <somashekhar.puttagangaiah@intel.com> Signed-off-by: Somashekhar Puttagangaiah <somashekhar.puttagangaiah@intel.com> Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com> Link: https://patch.msgid.link/20250308225541.d3ab352a73ff.I8a8f79e1c9eb74936929463960ee2a324712fe51@changeid [fix typo] Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
22d8cc7f5d
commit
faba68a86a
|
@ -127,6 +127,8 @@ struct wiphy;
|
|||
* even if it is otherwise disabled.
|
||||
* @IEEE80211_CHAN_ALLOW_6GHZ_VLP_AP: Allow using this channel for AP operation
|
||||
* with very low power (VLP), even if otherwise set to NO_IR.
|
||||
* @IEEE80211_CHAN_ALLOW_20MHZ_ACTIVITY: Allow activity on a 20 MHz channel,
|
||||
* even if otherwise set to NO_IR.
|
||||
*/
|
||||
enum ieee80211_channel_flags {
|
||||
IEEE80211_CHAN_DISABLED = BIT(0),
|
||||
|
@ -155,6 +157,7 @@ enum ieee80211_channel_flags {
|
|||
IEEE80211_CHAN_NO_6GHZ_AFC_CLIENT = BIT(23),
|
||||
IEEE80211_CHAN_CAN_MONITOR = BIT(24),
|
||||
IEEE80211_CHAN_ALLOW_6GHZ_VLP_AP = BIT(25),
|
||||
IEEE80211_CHAN_ALLOW_20MHZ_ACTIVITY = BIT(26),
|
||||
};
|
||||
|
||||
#define IEEE80211_CHAN_NO_HT40 \
|
||||
|
|
|
@ -4294,6 +4294,8 @@ enum nl80211_wmm_rule {
|
|||
* otherwise completely disabled.
|
||||
* @NL80211_FREQUENCY_ATTR_ALLOW_6GHZ_VLP_AP: This channel can be used for a
|
||||
* very low power (VLP) AP, despite being NO_IR.
|
||||
* @NL80211_FREQUENCY_ATTR_ALLOW_20MHZ_ACTIVITY: This channel can be active in
|
||||
* 20 MHz bandwidth, despite being NO_IR.
|
||||
* @NL80211_FREQUENCY_ATTR_MAX: highest frequency attribute number
|
||||
* currently defined
|
||||
* @__NL80211_FREQUENCY_ATTR_AFTER_LAST: internal use
|
||||
|
@ -4338,6 +4340,7 @@ enum nl80211_frequency_attr {
|
|||
NL80211_FREQUENCY_ATTR_NO_6GHZ_AFC_CLIENT,
|
||||
NL80211_FREQUENCY_ATTR_CAN_MONITOR,
|
||||
NL80211_FREQUENCY_ATTR_ALLOW_6GHZ_VLP_AP,
|
||||
NL80211_FREQUENCY_ATTR_ALLOW_20MHZ_ACTIVITY,
|
||||
|
||||
/* keep last */
|
||||
__NL80211_FREQUENCY_ATTR_AFTER_LAST,
|
||||
|
@ -4549,31 +4552,34 @@ enum nl80211_sched_scan_match_attr {
|
|||
* @NL80211_RRF_NO_6GHZ_AFC_CLIENT: Client connection to AFC AP not allowed
|
||||
* @NL80211_RRF_ALLOW_6GHZ_VLP_AP: Very low power (VLP) AP can be permitted
|
||||
* despite NO_IR configuration.
|
||||
* @NL80211_RRF_ALLOW_20MHZ_ACTIVITY: Allow activity in 20 MHz bandwidth,
|
||||
* despite NO_IR configuration.
|
||||
*/
|
||||
enum nl80211_reg_rule_flags {
|
||||
NL80211_RRF_NO_OFDM = 1<<0,
|
||||
NL80211_RRF_NO_CCK = 1<<1,
|
||||
NL80211_RRF_NO_INDOOR = 1<<2,
|
||||
NL80211_RRF_NO_OUTDOOR = 1<<3,
|
||||
NL80211_RRF_DFS = 1<<4,
|
||||
NL80211_RRF_PTP_ONLY = 1<<5,
|
||||
NL80211_RRF_PTMP_ONLY = 1<<6,
|
||||
NL80211_RRF_NO_IR = 1<<7,
|
||||
__NL80211_RRF_NO_IBSS = 1<<8,
|
||||
NL80211_RRF_AUTO_BW = 1<<11,
|
||||
NL80211_RRF_IR_CONCURRENT = 1<<12,
|
||||
NL80211_RRF_NO_HT40MINUS = 1<<13,
|
||||
NL80211_RRF_NO_HT40PLUS = 1<<14,
|
||||
NL80211_RRF_NO_80MHZ = 1<<15,
|
||||
NL80211_RRF_NO_160MHZ = 1<<16,
|
||||
NL80211_RRF_NO_HE = 1<<17,
|
||||
NL80211_RRF_NO_320MHZ = 1<<18,
|
||||
NL80211_RRF_NO_EHT = 1<<19,
|
||||
NL80211_RRF_PSD = 1<<20,
|
||||
NL80211_RRF_DFS_CONCURRENT = 1<<21,
|
||||
NL80211_RRF_NO_6GHZ_VLP_CLIENT = 1<<22,
|
||||
NL80211_RRF_NO_6GHZ_AFC_CLIENT = 1<<23,
|
||||
NL80211_RRF_ALLOW_6GHZ_VLP_AP = 1<<24,
|
||||
NL80211_RRF_NO_OFDM = 1 << 0,
|
||||
NL80211_RRF_NO_CCK = 1 << 1,
|
||||
NL80211_RRF_NO_INDOOR = 1 << 2,
|
||||
NL80211_RRF_NO_OUTDOOR = 1 << 3,
|
||||
NL80211_RRF_DFS = 1 << 4,
|
||||
NL80211_RRF_PTP_ONLY = 1 << 5,
|
||||
NL80211_RRF_PTMP_ONLY = 1 << 6,
|
||||
NL80211_RRF_NO_IR = 1 << 7,
|
||||
__NL80211_RRF_NO_IBSS = 1 << 8,
|
||||
NL80211_RRF_AUTO_BW = 1 << 11,
|
||||
NL80211_RRF_IR_CONCURRENT = 1 << 12,
|
||||
NL80211_RRF_NO_HT40MINUS = 1 << 13,
|
||||
NL80211_RRF_NO_HT40PLUS = 1 << 14,
|
||||
NL80211_RRF_NO_80MHZ = 1 << 15,
|
||||
NL80211_RRF_NO_160MHZ = 1 << 16,
|
||||
NL80211_RRF_NO_HE = 1 << 17,
|
||||
NL80211_RRF_NO_320MHZ = 1 << 18,
|
||||
NL80211_RRF_NO_EHT = 1 << 19,
|
||||
NL80211_RRF_PSD = 1 << 20,
|
||||
NL80211_RRF_DFS_CONCURRENT = 1 << 21,
|
||||
NL80211_RRF_NO_6GHZ_VLP_CLIENT = 1 << 22,
|
||||
NL80211_RRF_NO_6GHZ_AFC_CLIENT = 1 << 23,
|
||||
NL80211_RRF_ALLOW_6GHZ_VLP_AP = 1 << 24,
|
||||
NL80211_RRF_ALLOW_20MHZ_ACTIVITY = 1 << 25,
|
||||
};
|
||||
|
||||
#define NL80211_RRF_PASSIVE_SCAN NL80211_RRF_NO_IR
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
*
|
||||
* Copyright 2009 Johannes Berg <johannes@sipsolutions.net>
|
||||
* Copyright 2013-2014 Intel Mobile Communications GmbH
|
||||
* Copyright 2018-2024 Intel Corporation
|
||||
* Copyright 2018-2025 Intel Corporation
|
||||
*/
|
||||
|
||||
#include <linux/export.h>
|
||||
|
@ -1621,6 +1621,12 @@ bool cfg80211_reg_check_beaconing(struct wiphy *wiphy,
|
|||
if (cfg->reg_power == IEEE80211_REG_VLP_AP)
|
||||
permitting_flags |= IEEE80211_CHAN_ALLOW_6GHZ_VLP_AP;
|
||||
|
||||
if ((cfg->iftype == NL80211_IFTYPE_P2P_GO ||
|
||||
cfg->iftype == NL80211_IFTYPE_AP) &&
|
||||
(chandef->width == NL80211_CHAN_WIDTH_20_NOHT ||
|
||||
chandef->width == NL80211_CHAN_WIDTH_20))
|
||||
permitting_flags |= IEEE80211_CHAN_ALLOW_20MHZ_ACTIVITY;
|
||||
|
||||
return _cfg80211_reg_can_beacon(wiphy, chandef, cfg->iftype,
|
||||
check_no_ir ? IEEE80211_CHAN_NO_IR : 0,
|
||||
permitting_flags);
|
||||
|
|
|
@ -1213,6 +1213,10 @@ static int nl80211_msg_put_channel(struct sk_buff *msg, struct wiphy *wiphy,
|
|||
if ((chan->flags & IEEE80211_CHAN_ALLOW_6GHZ_VLP_AP) &&
|
||||
nla_put_flag(msg, NL80211_FREQUENCY_ATTR_ALLOW_6GHZ_VLP_AP))
|
||||
goto nla_put_failure;
|
||||
if ((chan->flags & IEEE80211_CHAN_ALLOW_20MHZ_ACTIVITY) &&
|
||||
nla_put_flag(msg,
|
||||
NL80211_FREQUENCY_ATTR_ALLOW_20MHZ_ACTIVITY))
|
||||
goto nla_put_failure;
|
||||
}
|
||||
|
||||
if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_MAX_TX_POWER,
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
* Copyright 2008-2011 Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
|
||||
* Copyright 2013-2014 Intel Mobile Communications GmbH
|
||||
* Copyright 2017 Intel Deutschland GmbH
|
||||
* Copyright (C) 2018 - 2024 Intel Corporation
|
||||
* Copyright (C) 2018 - 2025 Intel Corporation
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
|
@ -1603,6 +1603,8 @@ static u32 map_regdom_flags(u32 rd_flags)
|
|||
channel_flags |= IEEE80211_CHAN_PSD;
|
||||
if (rd_flags & NL80211_RRF_ALLOW_6GHZ_VLP_AP)
|
||||
channel_flags |= IEEE80211_CHAN_ALLOW_6GHZ_VLP_AP;
|
||||
if (rd_flags & NL80211_RRF_ALLOW_20MHZ_ACTIVITY)
|
||||
channel_flags |= IEEE80211_CHAN_ALLOW_20MHZ_ACTIVITY;
|
||||
return channel_flags;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user