diff options
Diffstat (limited to 'sys/contrib/dev/rtw89/cam.c')
| -rw-r--r-- | sys/contrib/dev/rtw89/cam.c | 13 | 
1 files changed, 13 insertions, 0 deletions
| diff --git a/sys/contrib/dev/rtw89/cam.c b/sys/contrib/dev/rtw89/cam.c index 8fa1e6c1ce13..385a238fe5cc 100644 --- a/sys/contrib/dev/rtw89/cam.c +++ b/sys/contrib/dev/rtw89/cam.c @@ -6,6 +6,7 @@  #include "debug.h"  #include "fw.h"  #include "mac.h" +#include "ps.h"  static struct sk_buff *  rtw89_cam_get_sec_key_cmd(struct rtw89_dev *rtwdev, @@ -469,13 +470,25 @@ int rtw89_cam_sec_key_add(struct rtw89_dev *rtwdev,  	bool ext_key = false;  	int ret; +	if (ieee80211_vif_is_mld(vif) && !chip->hw_mlo_bmc_crypto && +	    !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) +		return -EOPNOTSUPP; +  	switch (key->cipher) {  	case WLAN_CIPHER_SUITE_WEP40: +		rtw89_leave_ips_by_hwflags(rtwdev);  		hw_key_type = RTW89_SEC_KEY_TYPE_WEP40;  		break;  	case WLAN_CIPHER_SUITE_WEP104: +		rtw89_leave_ips_by_hwflags(rtwdev);  		hw_key_type = RTW89_SEC_KEY_TYPE_WEP104;  		break; +	case WLAN_CIPHER_SUITE_TKIP: +		if (!chip->hw_tkip_crypto) +			return -EOPNOTSUPP; +		hw_key_type = RTW89_SEC_KEY_TYPE_TKIP; +		key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC; +		break;  	case WLAN_CIPHER_SUITE_CCMP:  		hw_key_type = RTW89_SEC_KEY_TYPE_CCMP128;  		if (!chip->hw_mgmt_tx_encrypt) | 
