2022-07-05 22:05:40

by Muna Sinada

[permalink] [raw]
Subject: [PATCH v2 1/2] mac80211: Add VHT MU-MIMO related flags in ieee80211_bss_conf

Adding flags for SU Beamformer, SU Beamformee, MU Beamformer and
MU Beamformee for VHT. This is utilized to pass MU-MIMO
configurations from user space to driver.

Signed-off-by: Muna Sinada <[email protected]>
---
include/net/mac80211.h | 8 ++++++++
net/mac80211/cfg.c | 15 +++++++++++++++
2 files changed, 23 insertions(+)

diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index ebadb2103968..ef4133091d41 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -636,6 +636,10 @@ struct ieee80211_fils_discovery {
* @tx_pwr_env_num: number of @tx_pwr_env.
* @pwr_reduction: power constraint of BSS.
* @eht_support: does this BSS support EHT
+ * @vht_su_beamformer: does this BSS support operation as an VHT SU beamformer
+ * @vht_su_beamformee: does this BSS support operation as an VHT SU beamformee
+ * @vht_mu_beamformer: does this BSS support operation as an VHT MU beamformer
+ * @vht_mu_beamformee: does this BSS support operation as an VHT MU beamformee
*/
struct ieee80211_bss_conf {
const u8 *bssid;
@@ -711,6 +715,10 @@ struct ieee80211_bss_conf {
u8 tx_pwr_env_num;
u8 pwr_reduction;
bool eht_support;
+ bool vht_su_beamformer;
+ bool vht_su_beamformee;
+ bool vht_mu_beamformer;
+ bool vht_mu_beamformee;
};

/**
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index f7896f257e1b..76418bb360fa 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -1164,6 +1164,21 @@ static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
prev_beacon_int = sdata->vif.bss_conf.beacon_int;
sdata->vif.bss_conf.beacon_int = params->beacon_interval;

+ if (params->vht_cap) {
+ sdata->vif.bss_conf.vht_su_beamformer =
+ !!(ap_vht_cap->vht_cap_info &
+ cpu_to_le32(IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE));
+ sdata->vif.bss_conf.vht_su_beamformee =
+ !!(ap_vht_cap->vht_cap_info &
+ cpu_to_le32(IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE));
+ sdata->vif.bss_conf.vht_mu_beamformer =
+ !!(ap_vht_cap->vht_cap_info &
+ cpu_to_le32(IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE));
+ sdata->vif.bss_conf.vht_mu_beamformee =
+ !!(ap_vht_cap->vht_cap_info &
+ cpu_to_le32(IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE));
+ }
+
if (params->he_cap && params->he_oper) {
sdata->vif.bss_conf.he_support = true;
sdata->vif.bss_conf.htc_trig_based_pkt_ext =
--
2.7.4


2022-07-05 22:06:09

by Muna Sinada

[permalink] [raw]
Subject: [PATCH v2 2/2] mac80211: Add HE MU-MIMO related flags in ieee80211_bss_conf

Adding flags for SU Beamformer, SU Beamformee, MU Beamformer and Full
Bandwidth UL MU-MIMO for HE. This is utilized to pass MU-MIMO
configurations from user space to driver.

Signed-off-by: Muna Sinada <[email protected]>
---
include/net/mac80211.h | 10 ++++++++++
net/mac80211/cfg.c | 15 +++++++++++++++
2 files changed, 25 insertions(+)

diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index ef4133091d41..615fc64c8060 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -640,6 +640,12 @@ struct ieee80211_fils_discovery {
* @vht_su_beamformee: does this BSS support operation as an VHT SU beamformee
* @vht_mu_beamformer: does this BSS support operation as an VHT MU beamformer
* @vht_mu_beamformee: does this BSS support operation as an VHT MU beamformee
+ * @he_su_beamformer: does this BSS support operation as an HE SU beamformer
+ * @he_su_beamformee: does this BSS support operation as an HE SU beamformee
+ * @he_mu_beamformer: does this BSS support operation as an HE MU beamformer
+ * @he_full_ul_mumimo: does this BSS support the reception (AP) or transmission
+ * (non-AP STA) of an HE TB PPDU on an RU that spans the entire PPDU
+ * bandwidth
*/
struct ieee80211_bss_conf {
const u8 *bssid;
@@ -719,6 +725,10 @@ struct ieee80211_bss_conf {
bool vht_su_beamformee;
bool vht_mu_beamformer;
bool vht_mu_beamformee;
+ bool he_su_beamformer;
+ bool he_su_beamformee;
+ bool he_mu_beamformer;
+ bool he_full_ul_mumimo;
};

/**
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 76418bb360fa..bb6faab4e94a 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -1193,6 +1193,21 @@ static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
changed |= BSS_CHANGED_HE_BSS_COLOR;
}

+ if (params->he_cap) {
+ sdata->vif.bss_conf.he_su_beamformer =
+ !!(params->he_cap->phy_cap_info[3] &
+ IEEE80211_HE_PHY_CAP3_SU_BEAMFORMER);
+ sdata->vif.bss_conf.he_su_beamformee =
+ !!(params->he_cap->phy_cap_info[4] &
+ IEEE80211_HE_PHY_CAP4_SU_BEAMFORMEE);
+ sdata->vif.bss_conf.he_mu_beamformer =
+ !!(params->he_cap->phy_cap_info[4] &
+ IEEE80211_HE_PHY_CAP4_MU_BEAMFORMER);
+ sdata->vif.bss_conf.he_full_ul_mumimo =
+ !!(params->he_cap->phy_cap_info[2] &
+ IEEE80211_HE_PHY_CAP2_UL_MU_FULL_MU_MIMO);
+ }
+
if (sdata->vif.type == NL80211_IFTYPE_AP &&
params->mbssid_config.tx_wdev) {
err = ieee80211_set_ap_mbssid_options(sdata,
--
2.7.4

2022-07-06 03:45:51

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v2 1/2] mac80211: Add VHT MU-MIMO related flags in ieee80211_bss_conf

Hi Muna,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on wireless/main]
[also build test ERROR on linus/master v5.19-rc5]
[cannot apply to wireless-next/main next-20220705]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url: https://github.com/intel-lab-lkp/linux/commits/Muna-Sinada/mac80211-Add-VHT-MU-MIMO-related-flags-in-ieee80211_bss_conf/20220706-060509
base: https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless.git main
config: hexagon-randconfig-r045-20220703 (https://download.01.org/0day-ci/archive/20220706/[email protected]/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project f553287b588916de09c66e3e32bf75e5060f967f)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/d0909fa7d00b2857a0b258722221e1e94ba9c05e
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Muna-Sinada/mac80211-Add-VHT-MU-MIMO-related-flags-in-ieee80211_bss_conf/20220706-060509
git checkout d0909fa7d00b2857a0b258722221e1e94ba9c05e
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash net/mac80211/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <[email protected]>

All errors (new ones prefixed by >>):

>> net/mac80211/cfg.c:1169:13: error: use of undeclared identifier 'ap_vht_cap'
!!(ap_vht_cap->vht_cap_info &
^
net/mac80211/cfg.c:1172:13: error: use of undeclared identifier 'ap_vht_cap'
!!(ap_vht_cap->vht_cap_info &
^
net/mac80211/cfg.c:1175:13: error: use of undeclared identifier 'ap_vht_cap'
!!(ap_vht_cap->vht_cap_info &
^
net/mac80211/cfg.c:1178:13: error: use of undeclared identifier 'ap_vht_cap'
!!(ap_vht_cap->vht_cap_info &
^
4 errors generated.


vim +/ap_vht_cap +1169 net/mac80211/cfg.c

1135
1136 static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
1137 struct cfg80211_ap_settings *params)
1138 {
1139 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1140 struct ieee80211_local *local = sdata->local;
1141 struct beacon_data *old;
1142 struct ieee80211_sub_if_data *vlan;
1143 u32 changed = BSS_CHANGED_BEACON_INT |
1144 BSS_CHANGED_BEACON_ENABLED |
1145 BSS_CHANGED_BEACON |
1146 BSS_CHANGED_SSID |
1147 BSS_CHANGED_P2P_PS |
1148 BSS_CHANGED_TXPOWER |
1149 BSS_CHANGED_TWT;
1150 int i, err;
1151 int prev_beacon_int;
1152
1153 old = sdata_dereference(sdata->u.ap.beacon, sdata);
1154 if (old)
1155 return -EALREADY;
1156
1157 if (params->smps_mode != NL80211_SMPS_OFF)
1158 return -ENOTSUPP;
1159
1160 sdata->smps_mode = IEEE80211_SMPS_OFF;
1161
1162 sdata->needed_rx_chains = sdata->local->rx_chains;
1163
1164 prev_beacon_int = sdata->vif.bss_conf.beacon_int;
1165 sdata->vif.bss_conf.beacon_int = params->beacon_interval;
1166
1167 if (params->vht_cap) {
1168 sdata->vif.bss_conf.vht_su_beamformer =
> 1169 !!(ap_vht_cap->vht_cap_info &
1170 cpu_to_le32(IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE));
1171 sdata->vif.bss_conf.vht_su_beamformee =
1172 !!(ap_vht_cap->vht_cap_info &
1173 cpu_to_le32(IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE));
1174 sdata->vif.bss_conf.vht_mu_beamformer =
1175 !!(ap_vht_cap->vht_cap_info &
1176 cpu_to_le32(IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE));
1177 sdata->vif.bss_conf.vht_mu_beamformee =
1178 !!(ap_vht_cap->vht_cap_info &
1179 cpu_to_le32(IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE));
1180 }
1181
1182 if (params->he_cap && params->he_oper) {
1183 sdata->vif.bss_conf.he_support = true;
1184 sdata->vif.bss_conf.htc_trig_based_pkt_ext =
1185 le32_get_bits(params->he_oper->he_oper_params,
1186 IEEE80211_HE_OPERATION_DFLT_PE_DURATION_MASK);
1187 sdata->vif.bss_conf.frame_time_rts_th =
1188 le32_get_bits(params->he_oper->he_oper_params,
1189 IEEE80211_HE_OPERATION_RTS_THRESHOLD_MASK);
1190 changed |= BSS_CHANGED_HE_OBSS_PD;
1191
1192 if (params->beacon.he_bss_color.enabled)
1193 changed |= BSS_CHANGED_HE_BSS_COLOR;
1194 }
1195
1196 if (sdata->vif.type == NL80211_IFTYPE_AP &&
1197 params->mbssid_config.tx_wdev) {
1198 err = ieee80211_set_ap_mbssid_options(sdata,
1199 params->mbssid_config);
1200 if (err)
1201 return err;
1202 }
1203
1204 mutex_lock(&local->mtx);
1205 err = ieee80211_vif_use_channel(sdata, &params->chandef,
1206 IEEE80211_CHANCTX_SHARED);
1207 if (!err)
1208 ieee80211_vif_copy_chanctx_to_vlans(sdata, false);
1209 mutex_unlock(&local->mtx);
1210 if (err) {
1211 sdata->vif.bss_conf.beacon_int = prev_beacon_int;
1212 return err;
1213 }
1214
1215 /*
1216 * Apply control port protocol, this allows us to
1217 * not encrypt dynamic WEP control frames.
1218 */
1219 sdata->control_port_protocol = params->crypto.control_port_ethertype;
1220 sdata->control_port_no_encrypt = params->crypto.control_port_no_encrypt;
1221 sdata->control_port_over_nl80211 =
1222 params->crypto.control_port_over_nl80211;
1223 sdata->control_port_no_preauth =
1224 params->crypto.control_port_no_preauth;
1225 sdata->encrypt_headroom = ieee80211_cs_headroom(sdata->local,
1226 &params->crypto,
1227 sdata->vif.type);
1228
1229 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) {
1230 vlan->control_port_protocol =
1231 params->crypto.control_port_ethertype;
1232 vlan->control_port_no_encrypt =
1233 params->crypto.control_port_no_encrypt;
1234 vlan->control_port_over_nl80211 =
1235 params->crypto.control_port_over_nl80211;
1236 vlan->control_port_no_preauth =
1237 params->crypto.control_port_no_preauth;
1238 vlan->encrypt_headroom =
1239 ieee80211_cs_headroom(sdata->local,
1240 &params->crypto,
1241 vlan->vif.type);
1242 }
1243
1244 sdata->vif.bss_conf.dtim_period = params->dtim_period;
1245 sdata->vif.bss_conf.enable_beacon = true;
1246 sdata->vif.bss_conf.allow_p2p_go_ps = sdata->vif.p2p;
1247 sdata->vif.bss_conf.twt_responder = params->twt_responder;
1248 sdata->vif.bss_conf.he_obss_pd = params->he_obss_pd;
1249 sdata->vif.bss_conf.he_bss_color = params->beacon.he_bss_color;
1250 sdata->vif.bss_conf.s1g = params->chandef.chan->band ==
1251 NL80211_BAND_S1GHZ;
1252
1253 sdata->vif.bss_conf.ssid_len = params->ssid_len;
1254 if (params->ssid_len)
1255 memcpy(sdata->vif.bss_conf.ssid, params->ssid,
1256 params->ssid_len);
1257 sdata->vif.bss_conf.hidden_ssid =
1258 (params->hidden_ssid != NL80211_HIDDEN_SSID_NOT_IN_USE);
1259
1260 memset(&sdata->vif.bss_conf.p2p_noa_attr, 0,
1261 sizeof(sdata->vif.bss_conf.p2p_noa_attr));
1262 sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow =
1263 params->p2p_ctwindow & IEEE80211_P2P_OPPPS_CTWINDOW_MASK;
1264 if (params->p2p_opp_ps)
1265 sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow |=
1266 IEEE80211_P2P_OPPPS_ENABLE_BIT;
1267
1268 sdata->beacon_rate_set = false;
1269 if (wiphy_ext_feature_isset(local->hw.wiphy,
1270 NL80211_EXT_FEATURE_BEACON_RATE_LEGACY)) {
1271 for (i = 0; i < NUM_NL80211_BANDS; i++) {
1272 sdata->beacon_rateidx_mask[i] =
1273 params->beacon_rate.control[i].legacy;
1274 if (sdata->beacon_rateidx_mask[i])
1275 sdata->beacon_rate_set = true;
1276 }
1277 }
1278
1279 if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL))
1280 sdata->vif.bss_conf.beacon_tx_rate = params->beacon_rate;
1281
1282 err = ieee80211_assign_beacon(sdata, &params->beacon, NULL, NULL);
1283 if (err < 0)
1284 goto error;
1285 changed |= err;
1286
1287 if (params->fils_discovery.max_interval) {
1288 err = ieee80211_set_fils_discovery(sdata,
1289 &params->fils_discovery);
1290 if (err < 0)
1291 goto error;
1292 changed |= BSS_CHANGED_FILS_DISCOVERY;
1293 }
1294
1295 if (params->unsol_bcast_probe_resp.interval) {
1296 err = ieee80211_set_unsol_bcast_probe_resp(sdata,
1297 &params->unsol_bcast_probe_resp);
1298 if (err < 0)
1299 goto error;
1300 changed |= BSS_CHANGED_UNSOL_BCAST_PROBE_RESP;
1301 }
1302
1303 err = drv_start_ap(sdata->local, sdata);
1304 if (err) {
1305 old = sdata_dereference(sdata->u.ap.beacon, sdata);
1306
1307 if (old)
1308 kfree_rcu(old, rcu_head);
1309 RCU_INIT_POINTER(sdata->u.ap.beacon, NULL);
1310 goto error;
1311 }
1312
1313 ieee80211_recalc_dtim(local, sdata);
1314 ieee80211_bss_info_change_notify(sdata, changed);
1315
1316 netif_carrier_on(dev);
1317 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
1318 netif_carrier_on(vlan->dev);
1319
1320 return 0;
1321
1322 error:
1323 mutex_lock(&local->mtx);
1324 ieee80211_vif_release_channel(sdata);
1325 mutex_unlock(&local->mtx);
1326
1327 return err;
1328 }
1329

--
0-DAY CI Kernel Test Service
https://01.org/lkp

2022-07-06 06:00:44

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v2 1/2] mac80211: Add VHT MU-MIMO related flags in ieee80211_bss_conf

Hi Muna,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on wireless/main]
[also build test ERROR on linus/master v5.19-rc5]
[cannot apply to wireless-next/main next-20220705]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url: https://github.com/intel-lab-lkp/linux/commits/Muna-Sinada/mac80211-Add-VHT-MU-MIMO-related-flags-in-ieee80211_bss_conf/20220706-060509
base: https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless.git main
config: i386-randconfig-a005
compiler: gcc-11 (Debian 11.3.0-3) 11.3.0
reproduce (this is a W=1 build):
# https://github.com/intel-lab-lkp/linux/commit/d0909fa7d00b2857a0b258722221e1e94ba9c05e
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Muna-Sinada/mac80211-Add-VHT-MU-MIMO-related-flags-in-ieee80211_bss_conf/20220706-060509
git checkout d0909fa7d00b2857a0b258722221e1e94ba9c05e
# save the config file
mkdir build_dir && cp config build_dir/.config
make W=1 O=build_dir ARCH=i386 SHELL=/bin/bash net/mac80211/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <[email protected]>

All errors (new ones prefixed by >>):

net/mac80211/cfg.c: In function 'ieee80211_start_ap':
>> net/mac80211/cfg.c:1169:27: error: 'ap_vht_cap' undeclared (first use in this function)
1169 | !!(ap_vht_cap->vht_cap_info &
| ^~~~~~~~~~
net/mac80211/cfg.c:1169:27: note: each undeclared identifier is reported only once for each function it appears in


vim +/ap_vht_cap +1169 net/mac80211/cfg.c

1135
1136 static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
1137 struct cfg80211_ap_settings *params)
1138 {
1139 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1140 struct ieee80211_local *local = sdata->local;
1141 struct beacon_data *old;
1142 struct ieee80211_sub_if_data *vlan;
1143 u32 changed = BSS_CHANGED_BEACON_INT |
1144 BSS_CHANGED_BEACON_ENABLED |
1145 BSS_CHANGED_BEACON |
1146 BSS_CHANGED_SSID |
1147 BSS_CHANGED_P2P_PS |
1148 BSS_CHANGED_TXPOWER |
1149 BSS_CHANGED_TWT;
1150 int i, err;
1151 int prev_beacon_int;
1152
1153 old = sdata_dereference(sdata->u.ap.beacon, sdata);
1154 if (old)
1155 return -EALREADY;
1156
1157 if (params->smps_mode != NL80211_SMPS_OFF)
1158 return -ENOTSUPP;
1159
1160 sdata->smps_mode = IEEE80211_SMPS_OFF;
1161
1162 sdata->needed_rx_chains = sdata->local->rx_chains;
1163
1164 prev_beacon_int = sdata->vif.bss_conf.beacon_int;
1165 sdata->vif.bss_conf.beacon_int = params->beacon_interval;
1166
1167 if (params->vht_cap) {
1168 sdata->vif.bss_conf.vht_su_beamformer =
> 1169 !!(ap_vht_cap->vht_cap_info &
1170 cpu_to_le32(IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE));
1171 sdata->vif.bss_conf.vht_su_beamformee =
1172 !!(ap_vht_cap->vht_cap_info &
1173 cpu_to_le32(IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE));
1174 sdata->vif.bss_conf.vht_mu_beamformer =
1175 !!(ap_vht_cap->vht_cap_info &
1176 cpu_to_le32(IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE));
1177 sdata->vif.bss_conf.vht_mu_beamformee =
1178 !!(ap_vht_cap->vht_cap_info &
1179 cpu_to_le32(IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE));
1180 }
1181
1182 if (params->he_cap && params->he_oper) {
1183 sdata->vif.bss_conf.he_support = true;
1184 sdata->vif.bss_conf.htc_trig_based_pkt_ext =
1185 le32_get_bits(params->he_oper->he_oper_params,
1186 IEEE80211_HE_OPERATION_DFLT_PE_DURATION_MASK);
1187 sdata->vif.bss_conf.frame_time_rts_th =
1188 le32_get_bits(params->he_oper->he_oper_params,
1189 IEEE80211_HE_OPERATION_RTS_THRESHOLD_MASK);
1190 changed |= BSS_CHANGED_HE_OBSS_PD;
1191
1192 if (params->beacon.he_bss_color.enabled)
1193 changed |= BSS_CHANGED_HE_BSS_COLOR;
1194 }
1195
1196 if (sdata->vif.type == NL80211_IFTYPE_AP &&
1197 params->mbssid_config.tx_wdev) {
1198 err = ieee80211_set_ap_mbssid_options(sdata,
1199 params->mbssid_config);
1200 if (err)
1201 return err;
1202 }
1203
1204 mutex_lock(&local->mtx);
1205 err = ieee80211_vif_use_channel(sdata, &params->chandef,
1206 IEEE80211_CHANCTX_SHARED);
1207 if (!err)
1208 ieee80211_vif_copy_chanctx_to_vlans(sdata, false);
1209 mutex_unlock(&local->mtx);
1210 if (err) {
1211 sdata->vif.bss_conf.beacon_int = prev_beacon_int;
1212 return err;
1213 }
1214
1215 /*
1216 * Apply control port protocol, this allows us to
1217 * not encrypt dynamic WEP control frames.
1218 */
1219 sdata->control_port_protocol = params->crypto.control_port_ethertype;
1220 sdata->control_port_no_encrypt = params->crypto.control_port_no_encrypt;
1221 sdata->control_port_over_nl80211 =
1222 params->crypto.control_port_over_nl80211;
1223 sdata->control_port_no_preauth =
1224 params->crypto.control_port_no_preauth;
1225 sdata->encrypt_headroom = ieee80211_cs_headroom(sdata->local,
1226 &params->crypto,
1227 sdata->vif.type);
1228
1229 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) {
1230 vlan->control_port_protocol =
1231 params->crypto.control_port_ethertype;
1232 vlan->control_port_no_encrypt =
1233 params->crypto.control_port_no_encrypt;
1234 vlan->control_port_over_nl80211 =
1235 params->crypto.control_port_over_nl80211;
1236 vlan->control_port_no_preauth =
1237 params->crypto.control_port_no_preauth;
1238 vlan->encrypt_headroom =
1239 ieee80211_cs_headroom(sdata->local,
1240 &params->crypto,
1241 vlan->vif.type);
1242 }
1243
1244 sdata->vif.bss_conf.dtim_period = params->dtim_period;
1245 sdata->vif.bss_conf.enable_beacon = true;
1246 sdata->vif.bss_conf.allow_p2p_go_ps = sdata->vif.p2p;
1247 sdata->vif.bss_conf.twt_responder = params->twt_responder;
1248 sdata->vif.bss_conf.he_obss_pd = params->he_obss_pd;
1249 sdata->vif.bss_conf.he_bss_color = params->beacon.he_bss_color;
1250 sdata->vif.bss_conf.s1g = params->chandef.chan->band ==
1251 NL80211_BAND_S1GHZ;
1252
1253 sdata->vif.bss_conf.ssid_len = params->ssid_len;
1254 if (params->ssid_len)
1255 memcpy(sdata->vif.bss_conf.ssid, params->ssid,
1256 params->ssid_len);
1257 sdata->vif.bss_conf.hidden_ssid =
1258 (params->hidden_ssid != NL80211_HIDDEN_SSID_NOT_IN_USE);
1259
1260 memset(&sdata->vif.bss_conf.p2p_noa_attr, 0,
1261 sizeof(sdata->vif.bss_conf.p2p_noa_attr));
1262 sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow =
1263 params->p2p_ctwindow & IEEE80211_P2P_OPPPS_CTWINDOW_MASK;
1264 if (params->p2p_opp_ps)
1265 sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow |=
1266 IEEE80211_P2P_OPPPS_ENABLE_BIT;
1267
1268 sdata->beacon_rate_set = false;
1269 if (wiphy_ext_feature_isset(local->hw.wiphy,
1270 NL80211_EXT_FEATURE_BEACON_RATE_LEGACY)) {
1271 for (i = 0; i < NUM_NL80211_BANDS; i++) {
1272 sdata->beacon_rateidx_mask[i] =
1273 params->beacon_rate.control[i].legacy;
1274 if (sdata->beacon_rateidx_mask[i])
1275 sdata->beacon_rate_set = true;
1276 }
1277 }
1278
1279 if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL))
1280 sdata->vif.bss_conf.beacon_tx_rate = params->beacon_rate;
1281
1282 err = ieee80211_assign_beacon(sdata, &params->beacon, NULL, NULL);
1283 if (err < 0)
1284 goto error;
1285 changed |= err;
1286
1287 if (params->fils_discovery.max_interval) {
1288 err = ieee80211_set_fils_discovery(sdata,
1289 &params->fils_discovery);
1290 if (err < 0)
1291 goto error;
1292 changed |= BSS_CHANGED_FILS_DISCOVERY;
1293 }
1294
1295 if (params->unsol_bcast_probe_resp.interval) {
1296 err = ieee80211_set_unsol_bcast_probe_resp(sdata,
1297 &params->unsol_bcast_probe_resp);
1298 if (err < 0)
1299 goto error;
1300 changed |= BSS_CHANGED_UNSOL_BCAST_PROBE_RESP;
1301 }
1302
1303 err = drv_start_ap(sdata->local, sdata);
1304 if (err) {
1305 old = sdata_dereference(sdata->u.ap.beacon, sdata);
1306
1307 if (old)
1308 kfree_rcu(old, rcu_head);
1309 RCU_INIT_POINTER(sdata->u.ap.beacon, NULL);
1310 goto error;
1311 }
1312
1313 ieee80211_recalc_dtim(local, sdata);
1314 ieee80211_bss_info_change_notify(sdata, changed);
1315
1316 netif_carrier_on(dev);
1317 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
1318 netif_carrier_on(vlan->dev);
1319
1320 return 0;
1321
1322 error:
1323 mutex_lock(&local->mtx);
1324 ieee80211_vif_release_channel(sdata);
1325 mutex_unlock(&local->mtx);
1326
1327 return err;
1328 }
1329

--
0-DAY CI Kernel Test Service
https://01.org/lkp


Attachments:
(No filename) (9.28 kB)
config (155.84 kB)
Download all attachments