diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index f8664c31cd..f4925a12b7 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -170,6 +170,7 @@ #include "wlan_hdd_cm_api.h" #include "wlan_roam_debug.h" #include "wlan_hdd_avoid_freq_ext.h" +#include "qdf_util.h" #define g_mode_rates_size (12) #define a_mode_rates_size (8) @@ -18933,6 +18934,34 @@ static int __wlan_hdd_cfg80211_add_key(struct wiphy *wiphy, return errno; } +#ifdef CFG80211_KEY_INSTALL_SUPPORT_ON_WDEV +static int wlan_hdd_cfg80211_add_key(struct wiphy *wiphy, + struct wireless_dev *wdev, + u8 key_index, bool pairwise, + const u8 *mac_addr, + struct key_params *params) +{ + int errno = -EINVAL; + struct osif_vdev_sync *vdev_sync; + struct hdd_adapter *adapter = qdf_container_of(wdev, + struct hdd_adapter, + wdev); + + if (!adapter || wlan_hdd_validate_vdev_id(adapter->vdev_id)) + return errno; + + errno = osif_vdev_sync_op_start(adapter->dev, &vdev_sync); + if (errno) + return errno; + + errno = __wlan_hdd_cfg80211_add_key(wiphy, adapter->dev, key_index, + pairwise, mac_addr, params); + + osif_vdev_sync_op_stop(vdev_sync); + + return errno; +} +#else static int wlan_hdd_cfg80211_add_key(struct wiphy *wiphy, struct net_device *ndev, u8 key_index, bool pairwise, @@ -18953,6 +18982,7 @@ static int wlan_hdd_cfg80211_add_key(struct wiphy *wiphy, return errno; } +#endif /* * FUNCTION: __wlan_hdd_cfg80211_get_key @@ -19044,6 +19074,37 @@ static int __wlan_hdd_cfg80211_get_key(struct wiphy *wiphy, return 0; } +#ifdef CFG80211_KEY_INSTALL_SUPPORT_ON_WDEV +static int wlan_hdd_cfg80211_get_key(struct wiphy *wiphy, + struct wireless_dev *wdev, + u8 key_index, bool pairwise, + const u8 *mac_addr, void *cookie, + void (*callback)(void *cookie, + struct key_params *) + ) +{ + int errno = -EINVAL; + struct osif_vdev_sync *vdev_sync; + struct hdd_adapter *adapter = qdf_container_of(wdev, + struct hdd_adapter, + wdev); + + if (!adapter || wlan_hdd_validate_vdev_id(adapter->vdev_id)) + return errno; + + errno = osif_vdev_sync_op_start(adapter->dev, &vdev_sync); + if (errno) + return errno; + + errno = __wlan_hdd_cfg80211_get_key(wiphy, adapter->dev, key_index, + pairwise, mac_addr, cookie, + callback); + + osif_vdev_sync_op_stop(vdev_sync); + + return errno; +} +#else static int wlan_hdd_cfg80211_get_key(struct wiphy *wiphy, struct net_device *ndev, u8 key_index, bool pairwise, @@ -19066,6 +19127,7 @@ static int wlan_hdd_cfg80211_get_key(struct wiphy *wiphy, return errno; } +#endif /** * __wlan_hdd_cfg80211_del_key() - Delete the encryption key for station @@ -19099,7 +19161,7 @@ static int __wlan_hdd_cfg80211_del_key(struct wiphy *wiphy, /** * wlan_hdd_cfg80211_del_key() - cfg80211 delete key handler function * @wiphy: Pointer to wiphy structure. - * @dev: Pointer to net_device structure. + * @wdev: Pointer to wireless_dev structure. * @key_index: key index * @pairwise: pairwise * @mac_addr: mac address @@ -19110,10 +19172,37 @@ static int __wlan_hdd_cfg80211_del_key(struct wiphy *wiphy, * * Return: 0 for success, error number on failure. */ +#ifdef CFG80211_KEY_INSTALL_SUPPORT_ON_WDEV static int wlan_hdd_cfg80211_del_key(struct wiphy *wiphy, - struct net_device *dev, - u8 key_index, - bool pairwise, const u8 *mac_addr) + struct wireless_dev *wdev, + u8 key_index, + bool pairwise, const u8 *mac_addr) +{ + int errno = -EINVAL; + struct osif_vdev_sync *vdev_sync; + struct hdd_adapter *adapter = qdf_container_of(wdev, + struct hdd_adapter, + wdev); + + if (!adapter || wlan_hdd_validate_vdev_id(adapter->vdev_id)) + return errno; + + errno = osif_vdev_sync_op_start(adapter->dev, &vdev_sync); + if (errno) + return errno; + + errno = __wlan_hdd_cfg80211_del_key(wiphy, adapter->dev, key_index, + pairwise, mac_addr); + + osif_vdev_sync_op_stop(vdev_sync); + + return errno; +} +#else +static int wlan_hdd_cfg80211_del_key(struct wiphy *wiphy, + struct net_device *dev, + u8 key_index, + bool pairwise, const u8 *mac_addr) { int errno; struct osif_vdev_sync *vdev_sync; @@ -19129,7 +19218,7 @@ static int wlan_hdd_cfg80211_del_key(struct wiphy *wiphy, return errno; } - +#endif static int __wlan_hdd_cfg80211_set_default_key(struct wiphy *wiphy, struct net_device *ndev, u8 key_index, @@ -19219,6 +19308,34 @@ out: return ret; } +#ifdef CFG80211_KEY_INSTALL_SUPPORT_ON_WDEV +static int wlan_hdd_cfg80211_set_default_key(struct wiphy *wiphy, + struct wireless_dev *wdev, + u8 key_index, + bool unicast, bool multicast) +{ + int errno = -EINVAL; + struct osif_vdev_sync *vdev_sync; + struct hdd_adapter *adapter = qdf_container_of(wdev, + struct hdd_adapter, + wdev); + + if (!adapter || wlan_hdd_validate_vdev_id(adapter->vdev_id)) + return errno; + + errno = osif_vdev_sync_op_start(adapter->dev, &vdev_sync); + if (errno) + return errno; + + errno = __wlan_hdd_cfg80211_set_default_key(wiphy, adapter->dev, + key_index, unicast, + multicast); + + osif_vdev_sync_op_stop(vdev_sync); + + return errno; +} +#else static int wlan_hdd_cfg80211_set_default_key(struct wiphy *wiphy, struct net_device *ndev, u8 key_index, @@ -19238,6 +19355,7 @@ static int wlan_hdd_cfg80211_set_default_key(struct wiphy *wiphy, return errno; } +#endif #if defined (CFG80211_BIGTK_CONFIGURATION_SUPPORT) || \ (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 7, 0)) @@ -19249,6 +19367,32 @@ static int _wlan_hdd_cfg80211_set_default_beacon_key(struct wiphy *wiphy, return 0; } +#ifdef CFG80211_KEY_INSTALL_SUPPORT_ON_WDEV +static int wlan_hdd_cfg80211_set_default_beacon_key(struct wiphy *wiphy, + struct wireless_dev *wdev, + u8 key_index) +{ + int errno = -EINVAL; + struct osif_vdev_sync *vdev_sync; + struct hdd_adapter *adapter = qdf_container_of(wdev, + struct hdd_adapter, + wdev); + + if (!adapter || wlan_hdd_validate_vdev_id(adapter->vdev_id)) + return errno; + + errno = osif_vdev_sync_op_start(adapter->dev, &vdev_sync); + if (errno) + return errno; + + errno = _wlan_hdd_cfg80211_set_default_beacon_key(wiphy, adapter->dev, + key_index); + + osif_vdev_sync_op_stop(vdev_sync); + + return errno; +} +#else static int wlan_hdd_cfg80211_set_default_beacon_key(struct wiphy *wiphy, struct net_device *ndev, u8 key_index) @@ -19268,6 +19412,7 @@ static int wlan_hdd_cfg80211_set_default_beacon_key(struct wiphy *wiphy, return errno; } #endif +#endif #ifdef FEATURE_MONITOR_MODE_SUPPORT static @@ -19522,8 +19667,8 @@ static int wlan_hdd_cfg80211_set_wiphy_params(struct wiphy *wiphy, u32 changed) * Return: 0 */ static int __wlan_hdd_set_default_mgmt_key(struct wiphy *wiphy, - struct net_device *netdev, - u8 key_index) + struct net_device *netdev, + u8 key_index) { hdd_enter(); return 0; @@ -19533,14 +19678,39 @@ static int __wlan_hdd_set_default_mgmt_key(struct wiphy *wiphy, * wlan_hdd_set_default_mgmt_key() - SSR wrapper for * wlan_hdd_set_default_mgmt_key * @wiphy: pointer to wiphy - * @netdev: pointer to net_device structure + * @wdev: pointer to wireless_device structure * @key_index: key index * * Return: 0 on success, error number on failure */ +#ifdef CFG80211_KEY_INSTALL_SUPPORT_ON_WDEV static int wlan_hdd_set_default_mgmt_key(struct wiphy *wiphy, - struct net_device *netdev, - u8 key_index) + struct wireless_dev *wdev, + u8 key_index) +{ + int errno = -EINVAL; + struct osif_vdev_sync *vdev_sync; + struct hdd_adapter *adapter = qdf_container_of(wdev, + struct hdd_adapter, + wdev); + + if (!adapter || wlan_hdd_validate_vdev_id(adapter->vdev_id)) + return errno; + + errno = osif_vdev_sync_op_start(adapter->dev, &vdev_sync); + if (errno) + return errno; + + errno = __wlan_hdd_set_default_mgmt_key(wiphy, adapter->dev, key_index); + + osif_vdev_sync_op_stop(vdev_sync); + + return errno; +} +#else +static int wlan_hdd_set_default_mgmt_key(struct wiphy *wiphy, + struct net_device *netdev, + u8 key_index) { int errno; struct osif_vdev_sync *vdev_sync; @@ -19555,6 +19725,7 @@ static int wlan_hdd_set_default_mgmt_key(struct wiphy *wiphy, return errno; } +#endif /** * Default val of cwmin, this value is used to overide the