|
@@ -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
|