diff options
Diffstat (limited to 'sys/contrib/dev/rtw89/wow.c')
| -rw-r--r-- | sys/contrib/dev/rtw89/wow.c | 28 | 
1 files changed, 15 insertions, 13 deletions
| diff --git a/sys/contrib/dev/rtw89/wow.c b/sys/contrib/dev/rtw89/wow.c index 311bf82b355e..695884e6cb22 100644 --- a/sys/contrib/dev/rtw89/wow.c +++ b/sys/contrib/dev/rtw89/wow.c @@ -12,7 +12,7 @@  #include "util.h"  #include "wow.h" -void rtw89_wow_parse_akm(struct rtw89_dev *rtwdev, struct sk_buff *skb) +void __rtw89_wow_parse_akm(struct rtw89_dev *rtwdev, struct sk_buff *skb)  {  	struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)skb->data;  	struct rtw89_wow_param *rtw_wow = &rtwdev->wow; @@ -639,6 +639,8 @@ static struct ieee80211_key_conf *rtw89_wow_gtk_rekey(struct rtw89_dev *rtwdev,  	struct ieee80211_key_conf *key;  	u8 sz; +	lockdep_assert_wiphy(rtwdev->hw->wiphy); +  	cipher_info = rtw89_cipher_alg_recognize(cipher);  	sz = struct_size(rekey_conf, key, cipher_info->len);  	rekey_conf = kmalloc(sz, GFP_KERNEL); @@ -651,15 +653,13 @@ static struct ieee80211_key_conf *rtw89_wow_gtk_rekey(struct rtw89_dev *rtwdev,  	memcpy(rekey_conf->key, gtk,  	       flex_array_size(rekey_conf, key, cipher_info->len)); -	/* ieee80211_gtk_rekey_add() will call set_key(), therefore we -	 * need to unlock mutex -	 */ -	mutex_unlock(&rtwdev->mutex);  	if (ieee80211_vif_is_mld(wow_vif)) -		key = ieee80211_gtk_rekey_add(wow_vif, rekey_conf, rtwvif_link->link_id); +		key = ieee80211_gtk_rekey_add(wow_vif, keyidx, gtk, +					      cipher_info->len, +					      rtwvif_link->link_id);  	else -		key = ieee80211_gtk_rekey_add(wow_vif, rekey_conf, -1); -	mutex_lock(&rtwdev->mutex); +		key = ieee80211_gtk_rekey_add(wow_vif, keyidx, gtk, +					      cipher_info->len, -1);  	kfree(rekey_conf);  	if (IS_ERR(key)) { @@ -1124,8 +1124,7 @@ static int rtw89_wow_set_wakeups(struct rtw89_dev *rtwdev,  		rtw89_wow_init_pno(rtwdev, wowlan->nd_config);  	rtw89_for_each_rtwvif(rtwdev, rtwvif) { -		/* use the link on HW-0 to do wow flow */ -		rtwvif_link = rtw89_vif_get_link_inst(rtwvif, 0); +		rtwvif_link = rtw89_get_designated_link(rtwvif);  		if (!rtwvif_link)  			continue; @@ -1451,6 +1450,8 @@ static void rtw89_fw_release_pno_pkt_list(struct rtw89_dev *rtwdev,  static int rtw89_pno_scan_update_probe_req(struct rtw89_dev *rtwdev,  					   struct rtw89_vif_link *rtwvif_link)  { +	static const u8 basic_rate_ie[] = {WLAN_EID_SUPP_RATES, 0x08, +		 0x0c, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6c};  	struct rtw89_wow_param *rtw_wow = &rtwdev->wow;  	struct cfg80211_sched_scan_request *nd_config = rtw_wow->nd_config;  	u8 num = nd_config->n_match_sets, i; @@ -1462,10 +1463,11 @@ static int rtw89_pno_scan_update_probe_req(struct rtw89_dev *rtwdev,  		skb = ieee80211_probereq_get(rtwdev->hw, rtwvif_link->mac_addr,  					     nd_config->match_sets[i].ssid.ssid,  					     nd_config->match_sets[i].ssid.ssid_len, -					     nd_config->ie_len); +					     nd_config->ie_len + sizeof(basic_rate_ie));  		if (!skb)  			return -ENOMEM; +		skb_put_data(skb, basic_rate_ie, sizeof(basic_rate_ie));  		skb_put_data(skb, nd_config->ie, nd_config->ie_len);  		info = kzalloc(sizeof(*info), GFP_KERNEL); @@ -1516,7 +1518,7 @@ static int rtw89_pno_scan_offload(struct rtw89_dev *rtwdev, bool enable)  	opt.enable = enable;  	opt.repeat = RTW89_SCAN_NORMAL;  	opt.norm_pd = max(interval, 1) * 10; /* in unit of 100ms */ -	opt.delay = max(rtw_wow->nd_config->delay, 1); +	opt.delay = max(rtw_wow->nd_config->delay, 1) * 1000;  	if (rtwdev->chip->chip_gen == RTW89_CHIP_BE) {  		opt.operation = enable ? RTW89_SCAN_OP_START : RTW89_SCAN_OP_STOP; @@ -1528,7 +1530,7 @@ static int rtw89_pno_scan_offload(struct rtw89_dev *rtwdev, bool enable)  		opt.opch_end = RTW89_CHAN_INVALID;  	} -	mac->scan_offload(rtwdev, &opt, rtwvif_link, true); +	rtw89_mac_scan_offload(rtwdev, &opt, rtwvif_link, true);  	return 0;  } | 
