2022-02-22 15:36:35

by Veerendranath Jakkam

[permalink] [raw]
Subject: [PATCH 3/3] cfg80211: Add support for key operations on NL80211_IFTYPE_MLO_LINK

Allow key operations on NL80211_IFTYPE_MLO_LINK to support configuring
per MLO link keys such as GTK/IGTK/BIGTK.

Add necessary changes in mac80211 and drivers to conform to updated
function signatures

Signed-off-by: Veerendranath Jakkam <[email protected]>
---
drivers/net/wireless/ath/ath6kl/cfg80211.c | 52 +++++++---
drivers/net/wireless/ath/wil6210/cfg80211.c | 38 +++++---
.../broadcom/brcm80211/brcmfmac/cfg80211.c | 58 ++++++++---
drivers/net/wireless/marvell/libertas/cfg.c | 14 ++-
drivers/net/wireless/marvell/mwifiex/cfg80211.c | 30 ++++--
drivers/net/wireless/microchip/wilc1000/cfg80211.c | 48 ++++++---
drivers/net/wireless/quantenna/qtnfmac/cfg80211.c | 40 ++++++--
drivers/net/wireless/rndis_wlan.c | 24 +++--
drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c | 40 ++++++--
drivers/staging/wlan-ng/cfg80211.c | 41 ++++++--
include/net/cfg80211.h | 12 +--
net/mac80211/cfg.c | 58 ++++++++---
net/wireless/core.h | 8 ++
net/wireless/ibss.c | 2 +-
net/wireless/nl80211.c | 107 ++++++++++++++-------
net/wireless/rdev-ops.h | 36 +++----
net/wireless/sme.c | 2 +-
net/wireless/trace.h | 68 ++++++-------
net/wireless/util.c | 9 +-
net/wireless/wext-compat.c | 10 +-
20 files changed, 486 insertions(+), 211 deletions(-)

diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c
index bd11838..8eb0dd7 100644
--- a/drivers/net/wireless/ath/ath6kl/cfg80211.c
+++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c
@@ -1123,17 +1123,25 @@ void ath6kl_cfg80211_ch_switch_notify(struct ath6kl_vif *vif, int freq,
mutex_unlock(&vif->wdev.mtx);
}

-static int ath6kl_cfg80211_add_key(struct wiphy *wiphy, struct net_device *ndev,
+static int ath6kl_cfg80211_add_key(struct wiphy *wiphy,
+ struct wireless_dev *wdev,
u8 key_index, bool pairwise,
const u8 *mac_addr,
struct key_params *params)
{
- struct ath6kl *ar = ath6kl_priv(ndev);
- struct ath6kl_vif *vif = netdev_priv(ndev);
+ struct ath6kl *ar;
+ struct ath6kl_vif *vif;
struct ath6kl_key *key = NULL;
int seq_len;
u8 key_usage;
u8 key_type;
+ struct net_device *ndev = wdev->netdev;
+
+ if (!ndev)
+ return -EOPNOTSUPP;
+
+ ar = ath6kl_priv(ndev);
+ vif = netdev_priv(ndev);

if (!ath6kl_cfg80211_ready(vif))
return -EIO;
@@ -1248,12 +1256,20 @@ static int ath6kl_cfg80211_add_key(struct wiphy *wiphy, struct net_device *ndev,
(u8 *) mac_addr, SYNC_BOTH_WMIFLAG);
}

-static int ath6kl_cfg80211_del_key(struct wiphy *wiphy, struct net_device *ndev,
+static int ath6kl_cfg80211_del_key(struct wiphy *wiphy,
+ struct wireless_dev *wdev,
u8 key_index, bool pairwise,
const u8 *mac_addr)
{
- struct ath6kl *ar = ath6kl_priv(ndev);
- struct ath6kl_vif *vif = netdev_priv(ndev);
+ struct ath6kl *ar;
+ struct ath6kl_vif *vif;
+ struct net_device *ndev = wdev->netdev;
+
+ if (!ndev)
+ return -EOPNOTSUPP;
+
+ ar = ath6kl_priv(ndev);
+ vif = netdev_priv(ndev);

ath6kl_dbg(ATH6KL_DBG_WLAN_CFG, "%s: index %d\n", __func__, key_index);

@@ -1278,15 +1294,22 @@ static int ath6kl_cfg80211_del_key(struct wiphy *wiphy, struct net_device *ndev,
return ath6kl_wmi_deletekey_cmd(ar->wmi, vif->fw_vif_idx, key_index);
}

-static int ath6kl_cfg80211_get_key(struct wiphy *wiphy, struct net_device *ndev,
+static int ath6kl_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 *))
{
- struct ath6kl_vif *vif = netdev_priv(ndev);
+ struct ath6kl_vif *vif;
struct ath6kl_key *key = NULL;
struct key_params params;
+ struct net_device *ndev = wdev->netdev;
+
+ if (!ndev)
+ return -EOPNOTSUPP;
+
+ vif = netdev_priv(ndev);

ath6kl_dbg(ATH6KL_DBG_WLAN_CFG, "%s: index %d\n", __func__, key_index);

@@ -1314,15 +1337,22 @@ static int ath6kl_cfg80211_get_key(struct wiphy *wiphy, struct net_device *ndev,
}

static int ath6kl_cfg80211_set_default_key(struct wiphy *wiphy,
- struct net_device *ndev,
+ struct wireless_dev *wdev,
u8 key_index, bool unicast,
bool multicast)
{
- struct ath6kl *ar = ath6kl_priv(ndev);
- struct ath6kl_vif *vif = netdev_priv(ndev);
+ struct ath6kl *ar;
+ struct ath6kl_vif *vif;
struct ath6kl_key *key = NULL;
u8 key_usage;
enum ath6kl_crypto_type key_type = NONE_CRYPT;
+ struct net_device *ndev = wdev->netdev;
+
+ if (!ndev)
+ return -EOPNOTSUPP;
+
+ ar = ath6kl_priv(ndev);
+ vif = netdev_priv(ndev);

ath6kl_dbg(ATH6KL_DBG_WLAN_CFG, "%s: index %d\n", __func__, key_index);

diff --git a/drivers/net/wireless/ath/wil6210/cfg80211.c b/drivers/net/wireless/ath/wil6210/cfg80211.c
index 764d1d1..685ac3a 100644
--- a/drivers/net/wireless/ath/wil6210/cfg80211.c
+++ b/drivers/net/wireless/ath/wil6210/cfg80211.c
@@ -1620,19 +1620,23 @@ static void wil_del_rx_key(u8 key_index, enum wmi_key_usage key_usage,
}

static int wil_cfg80211_add_key(struct wiphy *wiphy,
- struct net_device *ndev,
+ struct wireless_dev *wdev,
u8 key_index, bool pairwise,
const u8 *mac_addr,
struct key_params *params)
{
int rc;
- struct wil6210_vif *vif = ndev_to_vif(ndev);
+ struct wil6210_vif *vif;
struct wil6210_priv *wil = wiphy_to_wil(wiphy);
- struct wireless_dev *wdev = vif_to_wdev(vif);
enum wmi_key_usage key_usage = wil_detect_key_usage(wdev, pairwise);
- struct wil_sta_info *cs = wil_find_sta_by_key_usage(wil, vif->mid,
- key_usage,
- mac_addr);
+ struct wil_sta_info *cs;
+ struct net_device *ndev = wdev->netdev;
+
+ if (!ndev)
+ return -EOPNOTSUPP;
+
+ vif = ndev_to_vif(ndev);
+ cs = wil_find_sta_by_key_usage(wil, vif->mid, key_usage, mac_addr);

if (!params) {
wil_err(wil, "NULL params\n");
@@ -1697,17 +1701,21 @@ static int wil_cfg80211_add_key(struct wiphy *wiphy,
}

static int wil_cfg80211_del_key(struct wiphy *wiphy,
- struct net_device *ndev,
+ struct wireless_dev *wdev,
u8 key_index, bool pairwise,
const u8 *mac_addr)
{
- struct wil6210_vif *vif = ndev_to_vif(ndev);
+ struct wil6210_vif *vif;
struct wil6210_priv *wil = wiphy_to_wil(wiphy);
- struct wireless_dev *wdev = vif_to_wdev(vif);
enum wmi_key_usage key_usage = wil_detect_key_usage(wdev, pairwise);
- struct wil_sta_info *cs = wil_find_sta_by_key_usage(wil, vif->mid,
- key_usage,
- mac_addr);
+ struct wil_sta_info *cs;
+ struct net_device *ndev = wdev->netdev;
+
+ if (!ndev)
+ return -EOPNOTSUPP;
+
+ vif = ndev_to_vif(ndev);
+ cs = wil_find_sta_by_key_usage(wil, vif->mid, key_usage, mac_addr);

wil_dbg_misc(wil, "del_key: %pM %s[%d]\n", mac_addr,
key_usage_str[key_usage], key_index);
@@ -1724,7 +1732,7 @@ static int wil_cfg80211_del_key(struct wiphy *wiphy,

/* Need to be present or wiphy_new() will WARN */
static int wil_cfg80211_set_default_key(struct wiphy *wiphy,
- struct net_device *ndev,
+ struct wireless_dev *wdev,
u8 key_index, bool unicast,
bool multicast)
{
@@ -2038,11 +2046,13 @@ void wil_cfg80211_ap_recovery(struct wil6210_priv *wil)
struct net_device *ndev;
struct cfg80211_beacon_data bcon = {};
struct key_params key_params = {};
+ struct wireless_dev *wdev;

if (!vif || vif->ssid_len == 0)
continue;

ndev = vif_to_ndev(vif);
+ wdev = ndev->ieee80211_ptr;
bcon.proberesp_ies = vif->proberesp_ies;
bcon.assocresp_ies = vif->assocresp_ies;
bcon.probe_resp = vif->proberesp;
@@ -2073,7 +2083,7 @@ void wil_cfg80211_ap_recovery(struct wil6210_priv *wil)
key_params.key = vif->gtk;
key_params.key_len = vif->gtk_len;
key_params.seq_len = IEEE80211_GCMP_PN_LEN;
- rc = wil_cfg80211_add_key(wiphy, ndev, vif->gtk_index, false,
+ rc = wil_cfg80211_add_key(wiphy, wdev, vif->gtk_index, false,
NULL, &key_params);
if (rc)
wil_err(wil, "vif %d recovery add key failed (%d)\n",
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index b2fb9fc..cf568a2 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -2360,14 +2360,22 @@ brcmf_cfg80211_get_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev,
}

static s32
-brcmf_cfg80211_config_default_key(struct wiphy *wiphy, struct net_device *ndev,
+brcmf_cfg80211_config_default_key(struct wiphy *wiphy,
+ struct wireless_dev *wdev,
u8 key_idx, bool unicast, bool multicast)
{
- struct brcmf_if *ifp = netdev_priv(ndev);
- struct brcmf_pub *drvr = ifp->drvr;
+ struct brcmf_if *ifp;
+ struct brcmf_pub *drvr;
u32 index;
u32 wsec;
s32 err = 0;
+ struct net_device *ndev = wdev->netdev;
+
+ if (!ndev)
+ return -EOPNOTSUPP;
+
+ ifp = netdev_priv(ndev);
+ drvr = ifp->drvr;

brcmf_dbg(TRACE, "Enter\n");
brcmf_dbg(CONN, "key index (%d)\n", key_idx);
@@ -2394,13 +2402,18 @@ brcmf_cfg80211_config_default_key(struct wiphy *wiphy, struct net_device *ndev,
}

static s32
-brcmf_cfg80211_del_key(struct wiphy *wiphy, struct net_device *ndev,
+brcmf_cfg80211_del_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_idx, bool pairwise, const u8 *mac_addr)
{
- struct brcmf_if *ifp = netdev_priv(ndev);
+ struct brcmf_if *ifp;
struct brcmf_wsec_key *key;
s32 err;
+ struct net_device *ndev = wdev->netdev;

+ if (!ndev)
+ return -EOPNOTSUPP;
+
+ ifp = netdev_priv(ndev);
brcmf_dbg(TRACE, "Enter\n");
brcmf_dbg(CONN, "key index (%d)\n", key_idx);

@@ -2431,12 +2444,12 @@ brcmf_cfg80211_del_key(struct wiphy *wiphy, struct net_device *ndev,
}

static s32
-brcmf_cfg80211_add_key(struct wiphy *wiphy, struct net_device *ndev,
+brcmf_cfg80211_add_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_idx, bool pairwise, const u8 *mac_addr,
struct key_params *params)
{
struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
- struct brcmf_if *ifp = netdev_priv(ndev);
+ struct brcmf_if *ifp;
struct brcmf_pub *drvr = cfg->pub;
struct brcmf_wsec_key *key;
s32 val;
@@ -2444,7 +2457,12 @@ brcmf_cfg80211_add_key(struct wiphy *wiphy, struct net_device *ndev,
s32 err;
u8 keybuf[8];
bool ext_key;
+ struct net_device *ndev = wdev->netdev;
+
+ if (!ndev)
+ return -EOPNOTSUPP;

+ ifp = netdev_priv(ndev);
brcmf_dbg(TRACE, "Enter\n");
brcmf_dbg(CONN, "key index (%d)\n", key_idx);
if (!check_vif_up(ifp->vif))
@@ -2457,7 +2475,7 @@ brcmf_cfg80211_add_key(struct wiphy *wiphy, struct net_device *ndev,
}

if (params->key_len == 0)
- return brcmf_cfg80211_del_key(wiphy, ndev, key_idx, pairwise,
+ return brcmf_cfg80211_del_key(wiphy, wdev, key_idx, pairwise,
mac_addr);

if (params->key_len > sizeof(key->data)) {
@@ -2553,20 +2571,27 @@ brcmf_cfg80211_add_key(struct wiphy *wiphy, struct net_device *ndev,
}

static s32
-brcmf_cfg80211_get_key(struct wiphy *wiphy, struct net_device *ndev, u8 key_idx,
- bool pairwise, const u8 *mac_addr, void *cookie,
+brcmf_cfg80211_get_key(struct wiphy *wiphy, struct wireless_dev *wdev,
+ u8 key_idx, bool pairwise, const u8 *mac_addr,
+ void *cookie,
void (*callback)(void *cookie,
struct key_params *params))
{
struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
struct key_params params;
- struct brcmf_if *ifp = netdev_priv(ndev);
- struct brcmf_cfg80211_profile *profile = &ifp->vif->profile;
+ struct brcmf_if *ifp;
+ struct brcmf_cfg80211_profile *profile;
struct brcmf_pub *drvr = cfg->pub;
struct brcmf_cfg80211_security *sec;
s32 wsec;
s32 err = 0;
+ struct net_device *ndev = wdev->netdev;

+ if (!ndev)
+ return -EOPNOTSUPP;
+
+ ifp = netdev_priv(ndev);
+ profile = &ifp->vif->profile;
brcmf_dbg(TRACE, "Enter\n");
brcmf_dbg(CONN, "key index (%d)\n", key_idx);
if (!check_vif_up(ifp->vif))
@@ -2610,10 +2635,15 @@ brcmf_cfg80211_get_key(struct wiphy *wiphy, struct net_device *ndev, u8 key_idx,

static s32
brcmf_cfg80211_config_default_mgmt_key(struct wiphy *wiphy,
- struct net_device *ndev, u8 key_idx)
+ struct wireless_dev *wdev, u8 key_idx)
{
- struct brcmf_if *ifp = netdev_priv(ndev);
+ struct brcmf_if *ifp;
+ struct net_device *ndev = wdev->netdev;
+
+ if (!ndev)
+ return -EOPNOTSUPP;

+ ifp = netdev_priv(ndev);
brcmf_dbg(TRACE, "Enter key_idx %d\n", key_idx);

if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_MFP))
diff --git a/drivers/net/wireless/marvell/libertas/cfg.c b/drivers/net/wireless/marvell/libertas/cfg.c
index 4e3de68..cc8a98d 100644
--- a/drivers/net/wireless/marvell/libertas/cfg.c
+++ b/drivers/net/wireless/marvell/libertas/cfg.c
@@ -1437,11 +1437,15 @@ static int lbs_cfg_disconnect(struct wiphy *wiphy, struct net_device *dev,
}

static int lbs_cfg_set_default_key(struct wiphy *wiphy,
- struct net_device *netdev,
+ struct wireless_dev *wdev,
u8 key_index, bool unicast,
bool multicast)
{
struct lbs_private *priv = wiphy_priv(wiphy);
+ struct net_device *netdev = wdev->netdev;
+
+ if (!netdev)
+ return -EOPNOTSUPP;

if (netdev == priv->mesh_dev)
return -EOPNOTSUPP;
@@ -1456,7 +1460,7 @@ static int lbs_cfg_set_default_key(struct wiphy *wiphy,
}


-static int lbs_cfg_add_key(struct wiphy *wiphy, struct net_device *netdev,
+static int lbs_cfg_add_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 idx, bool pairwise, const u8 *mac_addr,
struct key_params *params)
{
@@ -1464,6 +1468,10 @@ static int lbs_cfg_add_key(struct wiphy *wiphy, struct net_device *netdev,
u16 key_info;
u16 key_type;
int ret = 0;
+ struct net_device *netdev = wdev->netdev;
+
+ if (!netdev)
+ return -EOPNOTSUPP;

if (netdev == priv->mesh_dev)
return -EOPNOTSUPP;
@@ -1517,7 +1525,7 @@ static int lbs_cfg_add_key(struct wiphy *wiphy, struct net_device *netdev,
}


-static int lbs_cfg_del_key(struct wiphy *wiphy, struct net_device *netdev,
+static int lbs_cfg_del_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_index, bool pairwise, const u8 *mac_addr)
{

diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
index 6f23ec3..f1b4b4d 100644
--- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
@@ -153,12 +153,18 @@ static void *mwifiex_cfg80211_get_adapter(struct wiphy *wiphy)
* CFG802.11 operation handler to delete a network key.
*/
static int
-mwifiex_cfg80211_del_key(struct wiphy *wiphy, struct net_device *netdev,
+mwifiex_cfg80211_del_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_index, bool pairwise, const u8 *mac_addr)
{
- struct mwifiex_private *priv = mwifiex_netdev_get_priv(netdev);
+ struct mwifiex_private *priv;
static const u8 bc_mac[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
const u8 *peer_mac = pairwise ? mac_addr : bc_mac;
+ struct net_device *netdev = wdev->netdev;
+
+ if (!netdev)
+ return -EOPNOTSUPP;
+
+ priv = mwifiex_netdev_get_priv(netdev);

if (mwifiex_set_encode(priv, NULL, NULL, 0, key_index, peer_mac, 1)) {
mwifiex_dbg(priv->adapter, ERROR, "deleting the crypto keys\n");
@@ -467,14 +473,20 @@ mwifiex_cfg80211_set_default_key(struct wiphy *wiphy, struct net_device *netdev,
* CFG802.11 operation handler to add a network key.
*/
static int
-mwifiex_cfg80211_add_key(struct wiphy *wiphy, struct net_device *netdev,
+mwifiex_cfg80211_add_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_index, bool pairwise, const u8 *mac_addr,
struct key_params *params)
{
- struct mwifiex_private *priv = mwifiex_netdev_get_priv(netdev);
+ struct mwifiex_private *priv;
struct mwifiex_wep_key *wep_key;
static const u8 bc_mac[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
const u8 *peer_mac = pairwise ? mac_addr : bc_mac;
+ struct net_device *netdev = wdev->netdev;
+
+ if (!netdev)
+ return -EOPNOTSUPP;
+
+ priv = mwifiex_netdev_get_priv(netdev);

if (GET_BSS_ROLE(priv) == MWIFIEX_BSS_ROLE_UAP &&
(params->cipher == WLAN_CIPHER_SUITE_WEP40 ||
@@ -505,11 +517,17 @@ mwifiex_cfg80211_add_key(struct wiphy *wiphy, struct net_device *netdev,
*/
static int
mwifiex_cfg80211_set_default_mgmt_key(struct wiphy *wiphy,
- struct net_device *netdev,
+ struct wireless_dev *wdev,
u8 key_index)
{
- struct mwifiex_private *priv = mwifiex_netdev_get_priv(netdev);
+ struct mwifiex_private *priv;
struct mwifiex_ds_encrypt_key encrypt_key;
+ struct net_device *netdev = wdev->netdev;
+
+ if (!netdev)
+ return -EOPNOTSUPP;
+
+ priv = mwifiex_netdev_get_priv(netdev);

wiphy_dbg(wiphy, "set default mgmt key, key index=%d\n", key_index);

diff --git a/drivers/net/wireless/microchip/wilc1000/cfg80211.c b/drivers/net/wireless/microchip/wilc1000/cfg80211.c
index 8d8378b..0186650 100644
--- a/drivers/net/wireless/microchip/wilc1000/cfg80211.c
+++ b/drivers/net/wireless/microchip/wilc1000/cfg80211.c
@@ -539,7 +539,7 @@ static int wilc_wfi_cfg_copy_wpa_info(struct wilc_wfi_key *key_info,
return 0;
}

-static int add_key(struct wiphy *wiphy, struct net_device *netdev, u8 key_index,
+static int add_key(struct wiphy *wiphy, struct wireless_dev *wdev, u8 key_index,
bool pairwise, const u8 *mac_addr, struct key_params *params)

{
@@ -548,8 +548,15 @@ static int add_key(struct wiphy *wiphy, struct net_device *netdev, u8 key_index,
const u8 *tx_mic = NULL;
u8 mode = WILC_FW_SEC_NO;
u8 op_mode;
- struct wilc_vif *vif = netdev_priv(netdev);
- struct wilc_priv *priv = &vif->priv;
+ struct wilc_vif *vif;
+ struct wilc_priv *priv;
+ struct net_device *netdev = wdev->netdev;
+
+ if (!netdev)
+ return -EOPNOTSUPP;
+
+ vif = netdev_priv(netdev);
+ priv = &vif->priv;

switch (params->cipher) {
case WLAN_CIPHER_SUITE_WEP40:
@@ -649,13 +656,20 @@ static int add_key(struct wiphy *wiphy, struct net_device *netdev, u8 key_index,
return ret;
}

-static int del_key(struct wiphy *wiphy, struct net_device *netdev,
+static int del_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_index,
bool pairwise,
const u8 *mac_addr)
{
- struct wilc_vif *vif = netdev_priv(netdev);
- struct wilc_priv *priv = &vif->priv;
+ struct wilc_vif *vif;
+ struct wilc_priv *priv;
+ struct net_device *netdev = wdev->netdev;
+
+ if (!netdev)
+ return -EOPNOTSUPP;
+
+ vif = netdev_priv(netdev);
+ priv = &vif->priv;

if (priv->wilc_gtk[key_index]) {
kfree(priv->wilc_gtk[key_index]->key);
@@ -686,13 +700,20 @@ static int del_key(struct wiphy *wiphy, struct net_device *netdev,
return 0;
}

-static int get_key(struct wiphy *wiphy, struct net_device *netdev, u8 key_index,
+static int 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 *))
{
- struct wilc_vif *vif = netdev_priv(netdev);
- struct wilc_priv *priv = &vif->priv;
+ struct wilc_vif *vif;
+ struct wilc_priv *priv;
struct key_params key_params;
+ struct net_device *netdev = wdev->netdev;
+
+ if (!netdev)
+ return -EOPNOTSUPP;
+
+ vif = netdev_priv(netdev);
+ priv = &vif->priv;

if (!pairwise) {
key_params.key = priv->wilc_gtk[key_index]->key;
@@ -713,11 +734,16 @@ static int get_key(struct wiphy *wiphy, struct net_device *netdev, u8 key_index,
return 0;
}

-static int set_default_key(struct wiphy *wiphy, struct net_device *netdev,
+static int set_default_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_index, bool unicast, bool multicast)
{
- struct wilc_vif *vif = netdev_priv(netdev);
+ struct wilc_vif *vif;
+ struct net_device *netdev = wdev->netdev;
+
+ if (!netdev)
+ return -EOPNOTSUPP;

+ vif = netdev_priv(netdev);
wilc_set_wep_default_keyid(vif, key_index);

return 0;
diff --git a/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c b/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
index 84b15a6..1aab9bb 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
+++ b/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
@@ -530,12 +530,18 @@ qtnf_dump_station(struct wiphy *wiphy, struct net_device *dev,
return ret;
}

-static int qtnf_add_key(struct wiphy *wiphy, struct net_device *dev,
+static int qtnf_add_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_index, bool pairwise, const u8 *mac_addr,
struct key_params *params)
{
- struct qtnf_vif *vif = qtnf_netdev_get_priv(dev);
+ struct qtnf_vif *vif;
int ret;
+ struct net_device *dev = wdev->netdev;
+
+ if (!dev)
+ return -EOPNOTSUPP;
+
+ vif = qtnf_netdev_get_priv(dev);

ret = qtnf_cmd_send_add_key(vif, key_index, pairwise, mac_addr, params);
if (ret)
@@ -546,11 +552,17 @@ static int qtnf_add_key(struct wiphy *wiphy, struct net_device *dev,
return ret;
}

-static int qtnf_del_key(struct wiphy *wiphy, struct net_device *dev,
+static int qtnf_del_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_index, bool pairwise, const u8 *mac_addr)
{
- struct qtnf_vif *vif = qtnf_netdev_get_priv(dev);
+ struct qtnf_vif *vif;
int ret;
+ struct net_device *dev = wdev->netdev;
+
+ if (!dev)
+ return -EOPNOTSUPP;
+
+ vif = qtnf_netdev_get_priv(dev);

ret = qtnf_cmd_send_del_key(vif, key_index, pairwise, mac_addr);
if (ret) {
@@ -567,11 +579,17 @@ static int qtnf_del_key(struct wiphy *wiphy, struct net_device *dev,
return ret;
}

-static int qtnf_set_default_key(struct wiphy *wiphy, struct net_device *dev,
+static int qtnf_set_default_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_index, bool unicast, bool multicast)
{
- struct qtnf_vif *vif = qtnf_netdev_get_priv(dev);
+ struct qtnf_vif *vif;
int ret;
+ struct net_device *dev = wdev->netdev;
+
+ if (!dev)
+ return -EOPNOTSUPP;
+
+ vif = qtnf_netdev_get_priv(dev);

ret = qtnf_cmd_send_set_default_key(vif, key_index, unicast, multicast);
if (ret)
@@ -583,11 +601,17 @@ static int qtnf_set_default_key(struct wiphy *wiphy, struct net_device *dev,
}

static int
-qtnf_set_default_mgmt_key(struct wiphy *wiphy, struct net_device *dev,
+qtnf_set_default_mgmt_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_index)
{
- struct qtnf_vif *vif = qtnf_netdev_get_priv(dev);
+ struct qtnf_vif *vif;
int ret;
+ struct net_device *dev = wdev->netdev;
+
+ if (!dev)
+ return -EOPNOTSUPP;
+
+ vif = qtnf_netdev_get_priv(dev);

ret = qtnf_cmd_send_set_default_mgmt_key(vif, key_index);
if (ret)
diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c
index ff24483..b62fbc6 100644
--- a/drivers/net/wireless/rndis_wlan.c
+++ b/drivers/net/wireless/rndis_wlan.c
@@ -488,14 +488,14 @@ static int rndis_join_ibss(struct wiphy *wiphy, struct net_device *dev,

static int rndis_leave_ibss(struct wiphy *wiphy, struct net_device *dev);

-static int rndis_add_key(struct wiphy *wiphy, struct net_device *netdev,
+static int rndis_add_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_index, bool pairwise, const u8 *mac_addr,
struct key_params *params);

-static int rndis_del_key(struct wiphy *wiphy, struct net_device *netdev,
+static int rndis_del_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_index, bool pairwise, const u8 *mac_addr);

-static int rndis_set_default_key(struct wiphy *wiphy, struct net_device *netdev,
+static int rndis_set_default_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_index, bool unicast, bool multicast);

static int rndis_get_station(struct wiphy *wiphy, struct net_device *dev,
@@ -2376,13 +2376,17 @@ static int rndis_leave_ibss(struct wiphy *wiphy, struct net_device *dev)
return deauthenticate(usbdev);
}

-static int rndis_add_key(struct wiphy *wiphy, struct net_device *netdev,
+static int rndis_add_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_index, bool pairwise, const u8 *mac_addr,
struct key_params *params)
{
struct rndis_wlan_private *priv = wiphy_priv(wiphy);
struct usbnet *usbdev = priv->usbdev;
__le32 flags;
+ struct net_device *netdev = wdev->netdev;
+
+ if (!netdev)
+ return -EOPNOTSUPP;

netdev_dbg(usbdev->net, "%s(%i, %pM, %08x)\n",
__func__, key_index, mac_addr, params->cipher);
@@ -2412,23 +2416,31 @@ static int rndis_add_key(struct wiphy *wiphy, struct net_device *netdev,
}
}

-static int rndis_del_key(struct wiphy *wiphy, struct net_device *netdev,
+static int rndis_del_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_index, bool pairwise, const u8 *mac_addr)
{
struct rndis_wlan_private *priv = wiphy_priv(wiphy);
struct usbnet *usbdev = priv->usbdev;
+ struct net_device *netdev = wdev->netdev;
+
+ if (!netdev)
+ return -EOPNOTSUPP;

netdev_dbg(usbdev->net, "%s(%i, %pM)\n", __func__, key_index, mac_addr);

return remove_key(usbdev, key_index, mac_addr);
}

-static int rndis_set_default_key(struct wiphy *wiphy, struct net_device *netdev,
+static int rndis_set_default_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_index, bool unicast, bool multicast)
{
struct rndis_wlan_private *priv = wiphy_priv(wiphy);
struct usbnet *usbdev = priv->usbdev;
struct rndis_wlan_encr_key key;
+ struct net_device *netdev = wdev->netdev;
+
+ if (!netdev)
+ return -EOPNOTSUPP;

netdev_dbg(usbdev->net, "%s(%i)\n", __func__, key_index);

diff --git a/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
index 5157b5b..7217d60 100644
--- a/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
@@ -934,7 +934,7 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, struct ieee_param
return ret;
}

-static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev,
+static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_index, bool pairwise, const u8 *mac_addr,
struct key_params *params)
{
@@ -942,9 +942,15 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev,
u32 param_len;
struct ieee_param *param = NULL;
int ret = 0;
- struct adapter *padapter = rtw_netdev_priv(ndev);
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct adapter *padapter;
+ struct mlme_priv *pmlmepriv;
+ struct net_device *ndev = wdev->netdev;
+
+ if (!ndev)
+ return -EOPNOTSUPP;

+ padapter = rtw_netdev_priv(ndev);
+ pmlmepriv = &padapter->mlmepriv;
param_len = sizeof(struct ieee_param) + params->key_len;
param = rtw_malloc(param_len);
if (!param)
@@ -1026,7 +1032,7 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev,

}

-static int cfg80211_rtw_get_key(struct wiphy *wiphy, struct net_device *ndev,
+static int cfg80211_rtw_get_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_index, bool pairwise, const u8 *mac_addr,
void *cookie,
void (*callback)(void *cookie,
@@ -1035,11 +1041,18 @@ static int cfg80211_rtw_get_key(struct wiphy *wiphy, struct net_device *ndev,
return 0;
}

-static int cfg80211_rtw_del_key(struct wiphy *wiphy, struct net_device *ndev,
+static int cfg80211_rtw_del_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_index, bool pairwise, const u8 *mac_addr)
{
- struct adapter *padapter = rtw_netdev_priv(ndev);
- struct security_priv *psecuritypriv = &padapter->securitypriv;
+ struct adapter *padapter;
+ struct security_priv *psecuritypriv;
+ struct net_device *ndev = wdev->netdev;
+
+ if (!ndev)
+ return -EOPNOTSUPP;
+
+ padapter = rtw_netdev_priv(ndev);
+ psecuritypriv = &padapter->securitypriv;

if (key_index == psecuritypriv->dot11PrivacyKeyIndex)
{
@@ -1051,12 +1064,19 @@ static int cfg80211_rtw_del_key(struct wiphy *wiphy, struct net_device *ndev,
}

static int cfg80211_rtw_set_default_key(struct wiphy *wiphy,
- struct net_device *ndev, u8 key_index
+ struct wireless_dev *wdev, u8 key_index
, bool unicast, bool multicast
)
{
- struct adapter *padapter = rtw_netdev_priv(ndev);
- struct security_priv *psecuritypriv = &padapter->securitypriv;
+ struct adapter *padapter;
+ struct security_priv *psecuritypriv;
+ struct net_device *ndev = wdev->netdev;
+
+ if (!ndev)
+ return -EOPNOTSUPP;
+
+ padapter = rtw_netdev_priv(ndev);
+ psecuritypriv = &padapter->securitypriv;

if ((key_index < WEP_KEYS) && ((psecuritypriv->dot11PrivacyAlgrthm == _WEP40_) || (psecuritypriv->dot11PrivacyAlgrthm == _WEP104_))) /* set wep default key */
{
diff --git a/drivers/staging/wlan-ng/cfg80211.c b/drivers/staging/wlan-ng/cfg80211.c
index 7951bd6..5e5e7d0 100644
--- a/drivers/staging/wlan-ng/cfg80211.c
+++ b/drivers/staging/wlan-ng/cfg80211.c
@@ -142,12 +142,18 @@ static int prism2_change_virtual_intf(struct wiphy *wiphy,
return err;
}

-static int prism2_add_key(struct wiphy *wiphy, struct net_device *dev,
+static int prism2_add_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_index, bool pairwise, const u8 *mac_addr,
struct key_params *params)
{
- struct wlandevice *wlandev = dev->ml_priv;
+ struct wlandevice *wlandev;
u32 did;
+ struct net_device *dev = wdev->netdev;
+
+ if (!dev)
+ return -EOPNOTSUPP;
+
+ wlandev = dev->ml_priv;

if (key_index >= NUM_WEPKEYS)
return -EINVAL;
@@ -171,14 +177,20 @@ static int prism2_add_key(struct wiphy *wiphy, struct net_device *dev,
return 0;
}

-static int prism2_get_key(struct wiphy *wiphy, struct net_device *dev,
+static int prism2_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*))
{
- struct wlandevice *wlandev = dev->ml_priv;
+ struct wlandevice *wlandev;
struct key_params params;
int len;
+ struct net_device *dev = wdev->netdev;
+
+ if (!dev)
+ return -EOPNOTSUPP;
+
+ wlandev = dev->ml_priv;

if (key_index >= NUM_WEPKEYS)
return -EINVAL;
@@ -201,13 +213,19 @@ static int prism2_get_key(struct wiphy *wiphy, struct net_device *dev,
return 0;
}

-static int prism2_del_key(struct wiphy *wiphy, struct net_device *dev,
+static int prism2_del_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_index, bool pairwise, const u8 *mac_addr)
{
- struct wlandevice *wlandev = dev->ml_priv;
+ struct wlandevice *wlandev;
u32 did;
int err = 0;
int result = 0;
+ struct net_device *dev = wdev->netdev;
+
+ if (!dev)
+ return -EOPNOTSUPP;
+
+ wlandev = dev->ml_priv;

/* There is no direct way in the hardware (AFAIK) of removing
* a key, so we will cheat by setting the key to a bogus value
@@ -226,10 +244,17 @@ static int prism2_del_key(struct wiphy *wiphy, struct net_device *dev,
return err;
}

-static int prism2_set_default_key(struct wiphy *wiphy, struct net_device *dev,
+static int prism2_set_default_key(struct wiphy *wiphy,
+ struct wireless_dev *wdev,
u8 key_index, bool unicast, bool multicast)
{
- struct wlandevice *wlandev = dev->ml_priv;
+ struct wlandevice *wlandev;
+ struct net_device *dev = wdev->netdev;
+
+ if (!dev)
+ return -EOPNOTSUPP;
+
+ wlandev = dev->ml_priv;

return prism2_domibset_uint32(wlandev,
DIDMIB_DOT11SMT_PRIVACYTABLE_WEPDEFAULTKEYID,
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index f000e87..c3e43e8 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -4177,23 +4177,23 @@ struct cfg80211_ops {
enum nl80211_iftype type,
struct vif_params *params);

- int (*add_key)(struct wiphy *wiphy, struct net_device *netdev,
+ int (*add_key)(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_index, bool pairwise, const u8 *mac_addr,
struct key_params *params);
- int (*get_key)(struct wiphy *wiphy, struct net_device *netdev,
+ int (*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 (*del_key)(struct wiphy *wiphy, struct net_device *netdev,
+ int (*del_key)(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_index, bool pairwise, const u8 *mac_addr);
int (*set_default_key)(struct wiphy *wiphy,
- struct net_device *netdev,
+ struct wireless_dev *wdev,
u8 key_index, bool unicast, bool multicast);
int (*set_default_mgmt_key)(struct wiphy *wiphy,
- struct net_device *netdev,
+ struct wireless_dev *wdev,
u8 key_index);
int (*set_default_beacon_key)(struct wiphy *wiphy,
- struct net_device *netdev,
+ struct wireless_dev *wdev,
u8 key_index);

int (*start_ap)(struct wiphy *wiphy, struct net_device *dev,
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 67a1602..522d3ad 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -431,17 +431,23 @@ static int ieee80211_set_tx(struct ieee80211_sub_if_data *sdata,
return ret;
}

-static int ieee80211_add_key(struct wiphy *wiphy, struct net_device *dev,
+static int ieee80211_add_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_idx, bool pairwise, const u8 *mac_addr,
struct key_params *params)
{
- struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
- struct ieee80211_local *local = sdata->local;
+ struct ieee80211_sub_if_data *sdata;
+ struct ieee80211_local *local;
struct sta_info *sta = NULL;
const struct ieee80211_cipher_scheme *cs = NULL;
struct ieee80211_key *key;
int err;

+ if (!wdev->netdev)
+ return -EOPNOTSUPP;
+
+ sdata = IEEE80211_DEV_TO_SUB_IF(wdev->netdev);
+ local = sdata->local;
+
if (!ieee80211_sdata_running(sdata))
return -ENETDOWN;

@@ -549,15 +555,21 @@ static int ieee80211_add_key(struct wiphy *wiphy, struct net_device *dev,
return err;
}

-static int ieee80211_del_key(struct wiphy *wiphy, struct net_device *dev,
+static int ieee80211_del_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_idx, bool pairwise, const u8 *mac_addr)
{
- struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
- struct ieee80211_local *local = sdata->local;
+ struct ieee80211_sub_if_data *sdata;
+ struct ieee80211_local *local;
struct sta_info *sta;
struct ieee80211_key *key = NULL;
int ret;

+ if (!wdev->netdev)
+ return -EOPNOTSUPP;
+
+ sdata = IEEE80211_DEV_TO_SUB_IF(wdev->netdev);
+ local = sdata->local;
+
mutex_lock(&local->sta_mtx);
mutex_lock(&local->key_mtx);

@@ -590,7 +602,7 @@ static int ieee80211_del_key(struct wiphy *wiphy, struct net_device *dev,
return ret;
}

-static int ieee80211_get_key(struct wiphy *wiphy, struct net_device *dev,
+static int ieee80211_get_key(struct wiphy *wiphy, struct wireless_dev *wdev,
u8 key_idx, bool pairwise, const u8 *mac_addr,
void *cookie,
void (*callback)(void *cookie,
@@ -607,7 +619,10 @@ static int ieee80211_get_key(struct wiphy *wiphy, struct net_device *dev,
int err = -ENOENT;
struct ieee80211_key_seq kseq = {};

- sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+ if (!wdev->netdev)
+ return -EOPNOTSUPP;
+
+ sdata = IEEE80211_DEV_TO_SUB_IF(wdev->netdev);

rcu_read_lock();

@@ -710,11 +725,16 @@ static int ieee80211_get_key(struct wiphy *wiphy, struct net_device *dev,
}

static int ieee80211_config_default_key(struct wiphy *wiphy,
- struct net_device *dev,
+ struct wireless_dev *wdev,
u8 key_idx, bool uni,
bool multi)
{
- struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+ struct ieee80211_sub_if_data *sdata;
+
+ if (!wdev->netdev)
+ return -EOPNOTSUPP;
+
+ sdata = IEEE80211_DEV_TO_SUB_IF(wdev->netdev);

ieee80211_set_default_key(sdata, key_idx, uni, multi);

@@ -722,10 +742,15 @@ static int ieee80211_config_default_key(struct wiphy *wiphy,
}

static int ieee80211_config_default_mgmt_key(struct wiphy *wiphy,
- struct net_device *dev,
+ struct wireless_dev *wdev,
u8 key_idx)
{
- struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+ struct ieee80211_sub_if_data *sdata;
+
+ if (!wdev->netdev)
+ return -EOPNOTSUPP;
+
+ sdata = IEEE80211_DEV_TO_SUB_IF(wdev->netdev);

ieee80211_set_default_mgmt_key(sdata, key_idx);

@@ -733,10 +758,15 @@ static int ieee80211_config_default_mgmt_key(struct wiphy *wiphy,
}

static int ieee80211_config_default_beacon_key(struct wiphy *wiphy,
- struct net_device *dev,
+ struct wireless_dev *wdev,
u8 key_idx)
{
- struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+ struct ieee80211_sub_if_data *sdata;
+
+ if (!wdev->netdev)
+ return -EOPNOTSUPP;
+
+ sdata = IEEE80211_DEV_TO_SUB_IF(wdev->netdev);

ieee80211_set_default_beacon_key(sdata, key_idx);

diff --git a/net/wireless/core.h b/net/wireless/core.h
index f3a5d7a..da55f76 100644
--- a/net/wireless/core.h
+++ b/net/wireless/core.h
@@ -584,4 +584,12 @@ cfg80211_get_colocated_ap_chan(struct cfg80211_registered_device *rdev,
struct cfg80211_internal_bss *intbss,
const u8 *colocated_bssid);

+#define wdev_err(wdev, fmt, ...) \
+ do { \
+ if ((wdev)->netdev) \
+ netdev_err((wdev)->netdev, fmt, ##__VA_ARGS__); \
+ else \
+ pr_err(fmt, ##__VA_ARGS__); \
+ } while (0)
+
#endif /* __NET_WIRELESS_CORE_H */
diff --git a/net/wireless/ibss.c b/net/wireless/ibss.c
index 8f98e54..63c3537 100644
--- a/net/wireless/ibss.c
+++ b/net/wireless/ibss.c
@@ -173,7 +173,7 @@ static void __cfg80211_clear_ibss(struct net_device *dev, bool nowext)
*/
if (rdev->ops->del_key)
for (i = 0; i < 6; i++)
- rdev_del_key(rdev, dev, i, false, NULL);
+ rdev_del_key(rdev, wdev, i, false, NULL);

if (wdev->current_bss) {
cfg80211_unhold_bss(wdev->current_bss);
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 37f483f..0c1fd11 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -4307,7 +4307,7 @@ static int nl80211_get_key(struct sk_buff *skb, struct genl_info *info)
{
struct cfg80211_registered_device *rdev = info->user_ptr[0];
int err;
- struct net_device *dev = info->user_ptr[1];
+ struct wireless_dev *wdev = info->user_ptr[1];
u8 key_idx = 0;
const u8 *mac_addr = NULL;
bool pairwise;
@@ -4318,12 +4318,20 @@ static int nl80211_get_key(struct sk_buff *skb, struct genl_info *info)
struct sk_buff *msg;
bool bigtk_support = false;

+ if (!wdev->netdev) {
+ if (wdev->iftype != NL80211_IFTYPE_MLO_LINK)
+ return -EINVAL;
+ if (!(rdev->wiphy.interface_modes &
+ BIT(NL80211_IFTYPE_MLO_LINK)))
+ return -EOPNOTSUPP;
+ }
+
if (wiphy_ext_feature_isset(&rdev->wiphy,
NL80211_EXT_FEATURE_BEACON_PROTECTION))
bigtk_support = true;

- if ((dev->ieee80211_ptr->iftype == NL80211_IFTYPE_STATION ||
- dev->ieee80211_ptr->iftype == NL80211_IFTYPE_P2P_CLIENT) &&
+ if ((wdev->iftype == NL80211_IFTYPE_STATION ||
+ wdev->iftype == NL80211_IFTYPE_P2P_CLIENT) &&
wiphy_ext_feature_isset(&rdev->wiphy,
NL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT))
bigtk_support = true;
@@ -4368,14 +4376,17 @@ static int nl80211_get_key(struct sk_buff *skb, struct genl_info *info)
cookie.msg = msg;
cookie.idx = key_idx;

- if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) ||
+ if ((wdev->netdev &&
+ nla_put_u32(msg, NL80211_ATTR_IFINDEX, wdev->netdev->ifindex)) ||
+ nla_put_u64_64bit(msg, NL80211_ATTR_WDEV, wdev_id(wdev),
+ NL80211_ATTR_PAD) ||
nla_put_u8(msg, NL80211_ATTR_KEY_IDX, key_idx))
goto nla_put_failure;
if (mac_addr &&
nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, mac_addr))
goto nla_put_failure;

- err = rdev_get_key(rdev, dev, key_idx, pairwise, mac_addr, &cookie,
+ err = rdev_get_key(rdev, wdev, key_idx, pairwise, mac_addr, &cookie,
get_key_callback);

if (err)
@@ -4399,7 +4410,15 @@ static int nl80211_set_key(struct sk_buff *skb, struct genl_info *info)
struct cfg80211_registered_device *rdev = info->user_ptr[0];
struct key_parse key;
int err;
- struct net_device *dev = info->user_ptr[1];
+ struct wireless_dev *wdev = info->user_ptr[1];
+
+ if (!wdev->netdev) {
+ if (wdev->iftype != NL80211_IFTYPE_MLO_LINK)
+ return -EINVAL;
+ if (!(rdev->wiphy.interface_modes &
+ BIT(NL80211_IFTYPE_MLO_LINK)))
+ return -EOPNOTSUPP;
+ }

err = nl80211_parse_key(info, &key);
if (err)
@@ -4415,7 +4434,7 @@ static int nl80211_set_key(struct sk_buff *skb, struct genl_info *info)
!(key.p.mode == NL80211_KEY_SET_TX))
return -EINVAL;

- wdev_lock(dev->ieee80211_ptr);
+ wdev_lock(wdev);

if (key.def) {
if (!rdev->ops->set_default_key) {
@@ -4423,18 +4442,18 @@ static int nl80211_set_key(struct sk_buff *skb, struct genl_info *info)
goto out;
}

- err = nl80211_key_allowed(dev->ieee80211_ptr);
+ err = nl80211_key_allowed(wdev);
if (err)
goto out;

- err = rdev_set_default_key(rdev, dev, key.idx,
- key.def_uni, key.def_multi);
+ err = rdev_set_default_key(rdev, wdev, key.idx,
+ key.def_uni, key.def_multi);

if (err)
goto out;

#ifdef CONFIG_CFG80211_WEXT
- dev->ieee80211_ptr->wext.default_key = key.idx;
+ wdev->wext.default_key = key.idx;
#endif
} else if (key.defmgmt) {
if (key.def_uni || !key.def_multi) {
@@ -4447,16 +4466,16 @@ static int nl80211_set_key(struct sk_buff *skb, struct genl_info *info)
goto out;
}

- err = nl80211_key_allowed(dev->ieee80211_ptr);
+ err = nl80211_key_allowed(wdev);
if (err)
goto out;

- err = rdev_set_default_mgmt_key(rdev, dev, key.idx);
+ err = rdev_set_default_mgmt_key(rdev, wdev, key.idx);
if (err)
goto out;

#ifdef CONFIG_CFG80211_WEXT
- dev->ieee80211_ptr->wext.default_mgmt_key = key.idx;
+ wdev->wext.default_mgmt_key = key.idx;
#endif
} else if (key.defbeacon) {
if (key.def_uni || !key.def_multi) {
@@ -4469,11 +4488,11 @@ static int nl80211_set_key(struct sk_buff *skb, struct genl_info *info)
goto out;
}

- err = nl80211_key_allowed(dev->ieee80211_ptr);
+ err = nl80211_key_allowed(wdev);
if (err)
goto out;

- err = rdev_set_default_beacon_key(rdev, dev, key.idx);
+ err = rdev_set_default_beacon_key(rdev, wdev, key.idx);
if (err)
goto out;
} else if (key.p.mode == NL80211_KEY_SET_TX &&
@@ -4489,14 +4508,14 @@ static int nl80211_set_key(struct sk_buff *skb, struct genl_info *info)
goto out;
}

- err = rdev_add_key(rdev, dev, key.idx,
+ err = rdev_add_key(rdev, wdev, key.idx,
NL80211_KEYTYPE_PAIRWISE,
mac_addr, &key.p);
} else {
err = -EINVAL;
}
out:
- wdev_unlock(dev->ieee80211_ptr);
+ wdev_unlock(wdev);

return err;
}
@@ -4505,10 +4524,18 @@ static int nl80211_new_key(struct sk_buff *skb, struct genl_info *info)
{
struct cfg80211_registered_device *rdev = info->user_ptr[0];
int err;
- struct net_device *dev = info->user_ptr[1];
+ struct wireless_dev *wdev = info->user_ptr[1];
struct key_parse key;
const u8 *mac_addr = NULL;

+ if (!wdev->netdev) {
+ if (wdev->iftype != NL80211_IFTYPE_MLO_LINK)
+ return -EINVAL;
+ if (!(rdev->wiphy.interface_modes &
+ BIT(NL80211_IFTYPE_MLO_LINK)))
+ return -EOPNOTSUPP;
+ }
+
err = nl80211_parse_key(info, &key);
if (err)
return err;
@@ -4549,18 +4576,18 @@ static int nl80211_new_key(struct sk_buff *skb, struct genl_info *info)
return -EINVAL;
}

- wdev_lock(dev->ieee80211_ptr);
- err = nl80211_key_allowed(dev->ieee80211_ptr);
+ wdev_lock(wdev);
+ err = nl80211_key_allowed(wdev);
if (err)
GENL_SET_ERR_MSG(info, "key not allowed");
if (!err) {
- err = rdev_add_key(rdev, dev, key.idx,
+ err = rdev_add_key(rdev, wdev, key.idx,
key.type == NL80211_KEYTYPE_PAIRWISE,
mac_addr, &key.p);
if (err)
GENL_SET_ERR_MSG(info, "key addition failed");
}
- wdev_unlock(dev->ieee80211_ptr);
+ wdev_unlock(wdev);

return err;
}
@@ -4569,10 +4596,18 @@ static int nl80211_del_key(struct sk_buff *skb, struct genl_info *info)
{
struct cfg80211_registered_device *rdev = info->user_ptr[0];
int err;
- struct net_device *dev = info->user_ptr[1];
+ struct wireless_dev *wdev = info->user_ptr[1];
u8 *mac_addr = NULL;
struct key_parse key;

+ if (!wdev->netdev) {
+ if (wdev->iftype != NL80211_IFTYPE_MLO_LINK)
+ return -EINVAL;
+ if (!(rdev->wiphy.interface_modes &
+ BIT(NL80211_IFTYPE_MLO_LINK)))
+ return -EOPNOTSUPP;
+ }
+
err = nl80211_parse_key(info, &key);
if (err)
return err;
@@ -4599,27 +4634,27 @@ static int nl80211_del_key(struct sk_buff *skb, struct genl_info *info)
if (!rdev->ops->del_key)
return -EOPNOTSUPP;

- wdev_lock(dev->ieee80211_ptr);
- err = nl80211_key_allowed(dev->ieee80211_ptr);
+ wdev_lock(wdev);
+ err = nl80211_key_allowed(wdev);

if (key.type == NL80211_KEYTYPE_GROUP && mac_addr &&
!(rdev->wiphy.flags & WIPHY_FLAG_IBSS_RSN))
err = -ENOENT;

if (!err)
- err = rdev_del_key(rdev, dev, key.idx,
+ err = rdev_del_key(rdev, wdev, key.idx,
key.type == NL80211_KEYTYPE_PAIRWISE,
mac_addr);

#ifdef CONFIG_CFG80211_WEXT
if (!err) {
- if (key.idx == dev->ieee80211_ptr->wext.default_key)
- dev->ieee80211_ptr->wext.default_key = -1;
- else if (key.idx == dev->ieee80211_ptr->wext.default_mgmt_key)
- dev->ieee80211_ptr->wext.default_mgmt_key = -1;
+ if (key.idx == wdev->wext.default_key)
+ wdev->wext.default_key = -1;
+ else if (key.idx == wdev->wext.default_mgmt_key)
+ wdev->wext.default_mgmt_key = -1;
}
#endif
- wdev_unlock(dev->ieee80211_ptr);
+ wdev_unlock(wdev);

return err;
}
@@ -15590,14 +15625,14 @@ static const struct genl_small_ops nl80211_small_ops[] = {
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
.doit = nl80211_get_key,
.flags = GENL_UNS_ADMIN_PERM,
- .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+ .internal_flags = NL80211_FLAG_NEED_WDEV_UP,
},
{
.cmd = NL80211_CMD_SET_KEY,
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
.doit = nl80211_set_key,
.flags = GENL_UNS_ADMIN_PERM,
- .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
+ .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
NL80211_FLAG_CLEAR_SKB,
},
{
@@ -15605,7 +15640,7 @@ static const struct genl_small_ops nl80211_small_ops[] = {
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
.doit = nl80211_new_key,
.flags = GENL_UNS_ADMIN_PERM,
- .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
+ .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
NL80211_FLAG_CLEAR_SKB,
},
{
@@ -15613,7 +15648,7 @@ static const struct genl_small_ops nl80211_small_ops[] = {
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
.doit = nl80211_del_key,
.flags = GENL_UNS_ADMIN_PERM,
- .internal_flags = NL80211_FLAG_NEED_NETDEV_UP,
+ .internal_flags = NL80211_FLAG_NEED_WDEV_UP,
},
{
.cmd = NL80211_CMD_SET_BEACON,
diff --git a/net/wireless/rdev-ops.h b/net/wireless/rdev-ops.h
index 439bcf5..e12c621 100644
--- a/net/wireless/rdev-ops.h
+++ b/net/wireless/rdev-ops.h
@@ -72,39 +72,39 @@ rdev_change_virtual_intf(struct cfg80211_registered_device *rdev,
}

static inline int rdev_add_key(struct cfg80211_registered_device *rdev,
- struct net_device *netdev, u8 key_index,
+ struct wireless_dev *wdev, u8 key_index,
bool pairwise, const u8 *mac_addr,
struct key_params *params)
{
int ret;
- trace_rdev_add_key(&rdev->wiphy, netdev, key_index, pairwise,
+ trace_rdev_add_key(&rdev->wiphy, wdev, key_index, pairwise,
mac_addr, params->mode);
- ret = rdev->ops->add_key(&rdev->wiphy, netdev, key_index, pairwise,
+ ret = rdev->ops->add_key(&rdev->wiphy, wdev, key_index, pairwise,
mac_addr, params);
trace_rdev_return_int(&rdev->wiphy, ret);
return ret;
}

static inline int
-rdev_get_key(struct cfg80211_registered_device *rdev, struct net_device *netdev,
+rdev_get_key(struct cfg80211_registered_device *rdev, struct wireless_dev *wdev,
u8 key_index, bool pairwise, const u8 *mac_addr, void *cookie,
void (*callback)(void *cookie, struct key_params*))
{
int ret;
- trace_rdev_get_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr);
- ret = rdev->ops->get_key(&rdev->wiphy, netdev, key_index, pairwise,
+ trace_rdev_get_key(&rdev->wiphy, wdev, key_index, pairwise, mac_addr);
+ ret = rdev->ops->get_key(&rdev->wiphy, wdev, key_index, pairwise,
mac_addr, cookie, callback);
trace_rdev_return_int(&rdev->wiphy, ret);
return ret;
}

static inline int rdev_del_key(struct cfg80211_registered_device *rdev,
- struct net_device *netdev, u8 key_index,
+ struct wireless_dev *wdev, u8 key_index,
bool pairwise, const u8 *mac_addr)
{
int ret;
- trace_rdev_del_key(&rdev->wiphy, netdev, key_index, pairwise, mac_addr);
- ret = rdev->ops->del_key(&rdev->wiphy, netdev, key_index, pairwise,
+ trace_rdev_del_key(&rdev->wiphy, wdev, key_index, pairwise, mac_addr);
+ ret = rdev->ops->del_key(&rdev->wiphy, wdev, key_index, pairwise,
mac_addr);
trace_rdev_return_int(&rdev->wiphy, ret);
return ret;
@@ -112,13 +112,13 @@ static inline int rdev_del_key(struct cfg80211_registered_device *rdev,

static inline int
rdev_set_default_key(struct cfg80211_registered_device *rdev,
- struct net_device *netdev, u8 key_index, bool unicast,
+ struct wireless_dev *wdev, u8 key_index, bool unicast,
bool multicast)
{
int ret;
- trace_rdev_set_default_key(&rdev->wiphy, netdev, key_index,
+ trace_rdev_set_default_key(&rdev->wiphy, wdev, key_index,
unicast, multicast);
- ret = rdev->ops->set_default_key(&rdev->wiphy, netdev, key_index,
+ ret = rdev->ops->set_default_key(&rdev->wiphy, wdev, key_index,
unicast, multicast);
trace_rdev_return_int(&rdev->wiphy, ret);
return ret;
@@ -126,11 +126,11 @@ rdev_set_default_key(struct cfg80211_registered_device *rdev,

static inline int
rdev_set_default_mgmt_key(struct cfg80211_registered_device *rdev,
- struct net_device *netdev, u8 key_index)
+ struct wireless_dev *wdev, u8 key_index)
{
int ret;
- trace_rdev_set_default_mgmt_key(&rdev->wiphy, netdev, key_index);
- ret = rdev->ops->set_default_mgmt_key(&rdev->wiphy, netdev,
+ trace_rdev_set_default_mgmt_key(&rdev->wiphy, wdev, key_index);
+ ret = rdev->ops->set_default_mgmt_key(&rdev->wiphy, wdev,
key_index);
trace_rdev_return_int(&rdev->wiphy, ret);
return ret;
@@ -138,12 +138,12 @@ rdev_set_default_mgmt_key(struct cfg80211_registered_device *rdev,

static inline int
rdev_set_default_beacon_key(struct cfg80211_registered_device *rdev,
- struct net_device *netdev, u8 key_index)
+ struct wireless_dev *wdev, u8 key_index)
{
int ret;

- trace_rdev_set_default_beacon_key(&rdev->wiphy, netdev, key_index);
- ret = rdev->ops->set_default_beacon_key(&rdev->wiphy, netdev,
+ trace_rdev_set_default_beacon_key(&rdev->wiphy, wdev, key_index);
+ ret = rdev->ops->set_default_beacon_key(&rdev->wiphy, wdev,
key_index);
trace_rdev_return_int(&rdev->wiphy, ret);
return ret;
diff --git a/net/wireless/sme.c b/net/wireless/sme.c
index 5d76e52..e287eb0 100644
--- a/net/wireless/sme.c
+++ b/net/wireless/sme.c
@@ -1187,7 +1187,7 @@ void __cfg80211_disconnected(struct net_device *dev, const u8 *ie,
NL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT))
max_key_idx = 7;
for (i = 0; i <= max_key_idx; i++)
- rdev_del_key(rdev, dev, i, false, NULL);
+ rdev_del_key(rdev, wdev, i, false, NULL);
}

rdev_set_qos_map(rdev, dev, NULL);
diff --git a/net/wireless/trace.h b/net/wireless/trace.h
index 228079d..a848b05 100644
--- a/net/wireless/trace.h
+++ b/net/wireless/trace.h
@@ -434,47 +434,47 @@ TRACE_EVENT(rdev_change_virtual_intf,
);

DECLARE_EVENT_CLASS(key_handle,
- TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 key_index,
+ TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev, u8 key_index,
bool pairwise, const u8 *mac_addr),
- TP_ARGS(wiphy, netdev, key_index, pairwise, mac_addr),
+ TP_ARGS(wiphy, wdev, key_index, pairwise, mac_addr),
TP_STRUCT__entry(
WIPHY_ENTRY
- NETDEV_ENTRY
+ WDEV_ENTRY
MAC_ENTRY(mac_addr)
__field(u8, key_index)
__field(bool, pairwise)
),
TP_fast_assign(
WIPHY_ASSIGN;
- NETDEV_ASSIGN;
+ WDEV_ASSIGN;
MAC_ASSIGN(mac_addr, mac_addr);
__entry->key_index = key_index;
__entry->pairwise = pairwise;
),
- TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", key_index: %u, pairwise: %s, mac addr: " MAC_PR_FMT,
- WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->key_index,
+ TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT ", key_index: %u, pairwise: %s, mac addr: " MAC_PR_FMT,
+ WIPHY_PR_ARG, WDEV_PR_ARG, __entry->key_index,
BOOL_TO_STR(__entry->pairwise), MAC_PR_ARG(mac_addr))
);

DEFINE_EVENT(key_handle, rdev_get_key,
- TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 key_index,
+ TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev, u8 key_index,
bool pairwise, const u8 *mac_addr),
- TP_ARGS(wiphy, netdev, key_index, pairwise, mac_addr)
+ TP_ARGS(wiphy, wdev, key_index, pairwise, mac_addr)
);

DEFINE_EVENT(key_handle, rdev_del_key,
- TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 key_index,
+ TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev, u8 key_index,
bool pairwise, const u8 *mac_addr),
- TP_ARGS(wiphy, netdev, key_index, pairwise, mac_addr)
+ TP_ARGS(wiphy, wdev, key_index, pairwise, mac_addr)
);

TRACE_EVENT(rdev_add_key,
- TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 key_index,
+ TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev, u8 key_index,
bool pairwise, const u8 *mac_addr, u8 mode),
- TP_ARGS(wiphy, netdev, key_index, pairwise, mac_addr, mode),
+ TP_ARGS(wiphy, wdev, key_index, pairwise, mac_addr, mode),
TP_STRUCT__entry(
WIPHY_ENTRY
- NETDEV_ENTRY
+ WDEV_ENTRY
MAC_ENTRY(mac_addr)
__field(u8, key_index)
__field(bool, pairwise)
@@ -482,75 +482,75 @@ TRACE_EVENT(rdev_add_key,
),
TP_fast_assign(
WIPHY_ASSIGN;
- NETDEV_ASSIGN;
+ WDEV_ASSIGN;
MAC_ASSIGN(mac_addr, mac_addr);
__entry->key_index = key_index;
__entry->pairwise = pairwise;
__entry->mode = mode;
),
- TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", key_index: %u, "
+ TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT ", key_index: %u, "
"mode: %u, pairwise: %s, mac addr: " MAC_PR_FMT,
- WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->key_index,
+ WIPHY_PR_ARG, WDEV_PR_ARG, __entry->key_index,
__entry->mode, BOOL_TO_STR(__entry->pairwise),
MAC_PR_ARG(mac_addr))
);

TRACE_EVENT(rdev_set_default_key,
- TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 key_index,
+ TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev, u8 key_index,
bool unicast, bool multicast),
- TP_ARGS(wiphy, netdev, key_index, unicast, multicast),
+ TP_ARGS(wiphy, wdev, key_index, unicast, multicast),
TP_STRUCT__entry(
WIPHY_ENTRY
- NETDEV_ENTRY
+ WDEV_ENTRY
__field(u8, key_index)
__field(bool, unicast)
__field(bool, multicast)
),
TP_fast_assign(
WIPHY_ASSIGN;
- NETDEV_ASSIGN;
+ WDEV_ASSIGN;
__entry->key_index = key_index;
__entry->unicast = unicast;
__entry->multicast = multicast;
),
- TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", key index: %u, unicast: %s, multicast: %s",
- WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->key_index,
+ TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT ", key index: %u, unicast: %s, multicast: %s",
+ WIPHY_PR_ARG, WDEV_PR_ARG, __entry->key_index,
BOOL_TO_STR(__entry->unicast),
BOOL_TO_STR(__entry->multicast))
);

TRACE_EVENT(rdev_set_default_mgmt_key,
- TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 key_index),
- TP_ARGS(wiphy, netdev, key_index),
+ TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev, u8 key_index),
+ TP_ARGS(wiphy, wdev, key_index),
TP_STRUCT__entry(
WIPHY_ENTRY
- NETDEV_ENTRY
+ WDEV_ENTRY
__field(u8, key_index)
),
TP_fast_assign(
WIPHY_ASSIGN;
- NETDEV_ASSIGN;
+ WDEV_ASSIGN;
__entry->key_index = key_index;
),
- TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", key index: %u",
- WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->key_index)
+ TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT ", key index: %u",
+ WIPHY_PR_ARG, WDEV_PR_ARG, __entry->key_index)
);

TRACE_EVENT(rdev_set_default_beacon_key,
- TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 key_index),
- TP_ARGS(wiphy, netdev, key_index),
+ TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev, u8 key_index),
+ TP_ARGS(wiphy, wdev, key_index),
TP_STRUCT__entry(
WIPHY_ENTRY
- NETDEV_ENTRY
+ WDEV_ENTRY
__field(u8, key_index)
),
TP_fast_assign(
WIPHY_ASSIGN;
- NETDEV_ASSIGN;
+ WDEV_ASSIGN;
__entry->key_index = key_index;
),
- TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", key index: %u",
- WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->key_index)
+ TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT ", key index: %u",
+ WIPHY_PR_ARG, WDEV_PR_ARG, __entry->key_index)
);

TRACE_EVENT(rdev_start_ap,
diff --git a/net/wireless/util.c b/net/wireless/util.c
index e692a17..3dc83bb 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -926,7 +926,6 @@ EXPORT_SYMBOL(ieee80211_bss_get_elem);
void cfg80211_upload_connect_keys(struct wireless_dev *wdev)
{
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
- struct net_device *dev = wdev->netdev;
int i;

if (!wdev->connect_keys)
@@ -935,14 +934,14 @@ void cfg80211_upload_connect_keys(struct wireless_dev *wdev)
for (i = 0; i < CFG80211_MAX_WEP_KEYS; i++) {
if (!wdev->connect_keys->params[i].cipher)
continue;
- if (rdev_add_key(rdev, dev, i, false, NULL,
+ if (rdev_add_key(rdev, wdev, i, false, NULL,
&wdev->connect_keys->params[i])) {
- netdev_err(dev, "failed to set key %d\n", i);
+ wdev_err(wdev, "failed to set key %d\n", i);
continue;
}
if (wdev->connect_keys->def == i &&
- rdev_set_default_key(rdev, dev, i, true, true)) {
- netdev_err(dev, "failed to set defkey %d\n", i);
+ rdev_set_default_key(rdev, wdev, i, true, true)) {
+ wdev_err(wdev, "failed to set defkey %d\n", i);
continue;
}
}
diff --git a/net/wireless/wext-compat.c b/net/wireless/wext-compat.c
index a32065d..08fcd20 100644
--- a/net/wireless/wext-compat.c
+++ b/net/wireless/wext-compat.c
@@ -465,7 +465,7 @@ static int __cfg80211_set_encryption(struct cfg80211_registered_device *rdev,
!(rdev->wiphy.flags & WIPHY_FLAG_IBSS_RSN))
err = -ENOENT;
else
- err = rdev_del_key(rdev, dev, idx, pairwise,
+ err = rdev_del_key(rdev, wdev, idx, pairwise,
addr);
}
wdev->wext.connect.privacy = false;
@@ -502,7 +502,7 @@ static int __cfg80211_set_encryption(struct cfg80211_registered_device *rdev,

err = 0;
if (wdev->current_bss)
- err = rdev_add_key(rdev, dev, idx, pairwise, addr, params);
+ err = rdev_add_key(rdev, wdev, idx, pairwise, addr, params);
else if (params->cipher != WLAN_CIPHER_SUITE_WEP40 &&
params->cipher != WLAN_CIPHER_SUITE_WEP104)
return -EINVAL;
@@ -537,7 +537,7 @@ static int __cfg80211_set_encryption(struct cfg80211_registered_device *rdev,
__cfg80211_leave_ibss(rdev, wdev->netdev, true);
rejoin = true;
}
- err = rdev_set_default_key(rdev, dev, idx, true, true);
+ err = rdev_set_default_key(rdev, wdev, idx, true, true);
}
if (!err) {
wdev->wext.default_key = idx;
@@ -550,7 +550,7 @@ static int __cfg80211_set_encryption(struct cfg80211_registered_device *rdev,
if (params->cipher == WLAN_CIPHER_SUITE_AES_CMAC &&
(tx_key || (!addr && wdev->wext.default_mgmt_key == -1))) {
if (wdev->current_bss)
- err = rdev_set_default_mgmt_key(rdev, dev, idx);
+ err = rdev_set_default_mgmt_key(rdev, wdev, idx);
if (!err)
wdev->wext.default_mgmt_key = idx;
return err;
@@ -614,7 +614,7 @@ static int cfg80211_wext_siwencode(struct net_device *dev,
err = 0;
wdev_lock(wdev);
if (wdev->current_bss)
- err = rdev_set_default_key(rdev, dev, idx, true,
+ err = rdev_set_default_key(rdev, wdev, idx, true,
true);
if (!err)
wdev->wext.default_key = idx;
--
2.7.4


2022-02-23 10:37:42

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH 3/3] cfg80211: Add support for key operations on NL80211_IFTYPE_MLO_LINK

Hi Veerendranath,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on wireless-next/main]
[also build test ERROR on next-20220222]
[cannot apply to wireless/main jberg-mac80211-next/master jberg-mac80211/master v5.17-rc5]
[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/0day-ci/linux/commits/Veerendranath-Jakkam/cfg80211-Add-MLO-Link-Device-abstraction/20220222-232453
base: https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git main
config: m68k-allyesconfig (https://download.01.org/0day-ci/archive/20220223/[email protected]/config)
compiler: m68k-linux-gcc (GCC) 11.2.0
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/0day-ci/linux/commit/01fd3272c5cf2f778a16c217e6c0dbe7064fc9f5
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Veerendranath-Jakkam/cfg80211-Add-MLO-Link-Device-abstraction/20220222-232453
git checkout 01fd3272c5cf2f778a16c217e6c0dbe7064fc9f5
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=m68k SHELL=/bin/bash

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

All errors (new ones prefixed by >>):

>> drivers/net/wireless/marvell/mwifiex/cfg80211.c:4250:28: error: initialization of 'int (*)(struct wiphy *, struct wireless_dev *, u8, bool, bool)' {aka 'int (*)(struct wiphy *, struct wireless_dev *, unsigned char, _Bool, _Bool)'} from incompatible pointer type 'int (*)(struct wiphy *, struct net_device *, u8, bool, bool)' {aka 'int (*)(struct wiphy *, struct net_device *, unsigned char, _Bool, _Bool)'} [-Werror=incompatible-pointer-types]
4250 | .set_default_key = mwifiex_cfg80211_set_default_key,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/wireless/marvell/mwifiex/cfg80211.c:4250:28: note: (near initialization for 'mwifiex_cfg80211_ops.set_default_key')
cc1: some warnings being treated as errors


vim +4250 drivers/net/wireless/marvell/mwifiex/cfg80211.c

1f4dfd8a1e911c drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2014-02-07 4227
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4228 /* station cfg80211 operations */
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4229 static struct cfg80211_ops mwifiex_cfg80211_ops = {
93a1df48d22429 drivers/net/wireless/mwifiex/cfg80211.c Yogesh Ashok Powar 2011-09-26 4230 .add_virtual_intf = mwifiex_add_virtual_intf,
93a1df48d22429 drivers/net/wireless/mwifiex/cfg80211.c Yogesh Ashok Powar 2011-09-26 4231 .del_virtual_intf = mwifiex_del_virtual_intf,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4232 .change_virtual_intf = mwifiex_cfg80211_change_virtual_intf,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4233 .scan = mwifiex_cfg80211_scan,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4234 .connect = mwifiex_cfg80211_connect,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4235 .disconnect = mwifiex_cfg80211_disconnect,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4236 .get_station = mwifiex_cfg80211_get_station,
f85aae6bec6707 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2012-03-15 4237 .dump_station = mwifiex_cfg80211_dump_station,
6bc6c49f1e2f3a drivers/net/wireless/mwifiex/cfg80211.c Xinming Hu 2014-10-31 4238 .dump_survey = mwifiex_cfg80211_dump_survey,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4239 .set_wiphy_params = mwifiex_cfg80211_set_wiphy_params,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4240 .join_ibss = mwifiex_cfg80211_join_ibss,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4241 .leave_ibss = mwifiex_cfg80211_leave_ibss,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4242 .add_key = mwifiex_cfg80211_add_key,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4243 .del_key = mwifiex_cfg80211_del_key,
89951db2be5310 drivers/net/wireless/marvell/mwifiex/cfg80211.c Ganapathi Bhat 2016-09-20 4244 .set_default_mgmt_key = mwifiex_cfg80211_set_default_mgmt_key,
e39faa73ef14f6 drivers/net/wireless/mwifiex/cfg80211.c Stone Piao 2012-09-25 4245 .mgmt_tx = mwifiex_cfg80211_mgmt_tx,
6cd536fe62ef58 drivers/net/wireless/marvell/mwifiex/cfg80211.c Johannes Berg 2020-04-17 4246 .update_mgmt_frame_registrations =
6cd536fe62ef58 drivers/net/wireless/marvell/mwifiex/cfg80211.c Johannes Berg 2020-04-17 4247 mwifiex_cfg80211_update_mgmt_frame_registrations,
7feb4c48313d58 drivers/net/wireless/mwifiex/cfg80211.c Stone Piao 2012-09-25 4248 .remain_on_channel = mwifiex_cfg80211_remain_on_channel,
7feb4c48313d58 drivers/net/wireless/mwifiex/cfg80211.c Stone Piao 2012-09-25 4249 .cancel_remain_on_channel = mwifiex_cfg80211_cancel_remain_on_channel,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 @4250 .set_default_key = mwifiex_cfg80211_set_default_key,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4251 .set_power_mgmt = mwifiex_cfg80211_set_power_mgmt,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4252 .set_tx_power = mwifiex_cfg80211_set_tx_power,
7d54bacadce17f drivers/net/wireless/marvell/mwifiex/cfg80211.c Javier Martinez Canillas 2016-06-06 4253 .get_tx_power = mwifiex_cfg80211_get_tx_power,
5d82c53a380ca9 drivers/net/wireless/mwifiex/cfg80211.c Yogesh Ashok Powar 2011-07-11 4254 .set_bitrate_mask = mwifiex_cfg80211_set_bitrate_mask,
12190c5d80bd3c drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2012-05-08 4255 .start_ap = mwifiex_cfg80211_start_ap,
12190c5d80bd3c drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2012-05-08 4256 .stop_ap = mwifiex_cfg80211_stop_ap,
5370c83684d9e7 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2012-06-28 4257 .change_beacon = mwifiex_cfg80211_change_beacon,
fa444bf88ce2ba drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2012-03-15 4258 .set_cqm_rssi_config = mwifiex_cfg80211_set_cqm_rssi_config,
8a279d5b4dc128 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2012-07-02 4259 .set_antenna = mwifiex_cfg80211_set_antenna,
3ee712857958c2 drivers/net/wireless/marvell/mwifiex/cfg80211.c Shengzhen Li 2016-06-06 4260 .get_antenna = mwifiex_cfg80211_get_antenna,
0f9e9b8ba72bc7 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2013-05-17 4261 .del_station = mwifiex_cfg80211_del_station,
0c9b7f22e8e1f3 drivers/net/wireless/marvell/mwifiex/cfg80211.c Xinming Hu 2016-01-13 4262 .sched_scan_start = mwifiex_cfg80211_sched_scan_start,
0c9b7f22e8e1f3 drivers/net/wireless/marvell/mwifiex/cfg80211.c Xinming Hu 2016-01-13 4263 .sched_scan_stop = mwifiex_cfg80211_sched_scan_stop,
7da060c1c01b10 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2013-03-04 4264 #ifdef CONFIG_PM
7da060c1c01b10 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2013-03-04 4265 .suspend = mwifiex_cfg80211_suspend,
7da060c1c01b10 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2013-03-04 4266 .resume = mwifiex_cfg80211_resume,
7da060c1c01b10 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2013-03-04 4267 .set_wakeup = mwifiex_cfg80211_set_wakeup,
f6b1cbe029f682 drivers/net/wireless/marvell/mwifiex/cfg80211.c Ganapathi Bhat 2016-04-05 4268 .set_rekey_data = mwifiex_set_rekey_data,
7da060c1c01b10 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2013-03-04 4269 #endif
d1e2586f484dfc drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2013-08-09 4270 .set_coalesce = mwifiex_cfg80211_set_coalesce,
b23bce29656801 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2014-02-07 4271 .tdls_mgmt = mwifiex_cfg80211_tdls_mgmt,
429d90d2212b56 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2014-02-07 4272 .tdls_oper = mwifiex_cfg80211_tdls_oper,
b04975970676d7 drivers/net/wireless/mwifiex/cfg80211.c Xinming Hu 2015-06-22 4273 .tdls_channel_switch = mwifiex_cfg80211_tdls_chan_switch,
b04975970676d7 drivers/net/wireless/mwifiex/cfg80211.c Xinming Hu 2015-06-22 4274 .tdls_cancel_channel_switch = mwifiex_cfg80211_tdls_cancel_chan_switch,
e48e0de0053f07 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2014-02-07 4275 .add_station = mwifiex_cfg80211_add_station,
1f4dfd8a1e911c drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2014-02-07 4276 .change_station = mwifiex_cfg80211_change_station,
3935ccc14d2c68 drivers/net/wireless/marvell/mwifiex/cfg80211.c Xinming Hu 2016-09-02 4277 CFG80211_TESTMODE_CMD(mwifiex_tm_cmd)
7ee38bf4edeac8 drivers/net/wireless/mwifiex/cfg80211.c Xinming Hu 2015-06-03 4278 .get_channel = mwifiex_cfg80211_get_channel,
85afb18621be39 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2015-01-28 4279 .start_radar_detection = mwifiex_cfg80211_start_radar_detection,
7d652034d1a08b drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2015-01-28 4280 .channel_switch = mwifiex_cfg80211_channel_switch,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4281 };
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4282

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

2022-02-24 01:09:26

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH 3/3] cfg80211: Add support for key operations on NL80211_IFTYPE_MLO_LINK

Hi Veerendranath,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on wireless-next/main]
[also build test ERROR on next-20220222]
[cannot apply to wireless/main jberg-mac80211-next/master jberg-mac80211/master v5.17-rc5]
[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/0day-ci/linux/commits/Veerendranath-Jakkam/cfg80211-Add-MLO-Link-Device-abstraction/20220222-232453
base: https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git main
config: hexagon-allyesconfig (https://download.01.org/0day-ci/archive/20220223/[email protected]/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project d271fc04d5b97b12e6b797c6067d3c96a8d7470e)
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/0day-ci/linux/commit/01fd3272c5cf2f778a16c217e6c0dbe7064fc9f5
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Veerendranath-Jakkam/cfg80211-Add-MLO-Link-Device-abstraction/20220222-232453
git checkout 01fd3272c5cf2f778a16c217e6c0dbe7064fc9f5
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash

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

All errors (new ones prefixed by >>):

>> drivers/net/wireless/marvell/mwifiex/cfg80211.c:4250:21: error: incompatible function pointer types initializing 'int (*)(struct wiphy *, struct wireless_dev *, u8, bool, bool)' (aka 'int (*)(struct wiphy *, struct wireless_dev *, unsigned char, _Bool, _Bool)') with an expression of type 'int (struct wiphy *, struct net_device *, u8, bool, bool)' (aka 'int (struct wiphy *, struct net_device *, unsigned char, _Bool, _Bool)') [-Werror,-Wincompatible-function-pointer-types]
.set_default_key = mwifiex_cfg80211_set_default_key,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.


vim +4250 drivers/net/wireless/marvell/mwifiex/cfg80211.c

1f4dfd8a1e911c drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2014-02-07 4227
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4228 /* station cfg80211 operations */
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4229 static struct cfg80211_ops mwifiex_cfg80211_ops = {
93a1df48d22429 drivers/net/wireless/mwifiex/cfg80211.c Yogesh Ashok Powar 2011-09-26 4230 .add_virtual_intf = mwifiex_add_virtual_intf,
93a1df48d22429 drivers/net/wireless/mwifiex/cfg80211.c Yogesh Ashok Powar 2011-09-26 4231 .del_virtual_intf = mwifiex_del_virtual_intf,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4232 .change_virtual_intf = mwifiex_cfg80211_change_virtual_intf,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4233 .scan = mwifiex_cfg80211_scan,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4234 .connect = mwifiex_cfg80211_connect,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4235 .disconnect = mwifiex_cfg80211_disconnect,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4236 .get_station = mwifiex_cfg80211_get_station,
f85aae6bec6707 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2012-03-15 4237 .dump_station = mwifiex_cfg80211_dump_station,
6bc6c49f1e2f3a drivers/net/wireless/mwifiex/cfg80211.c Xinming Hu 2014-10-31 4238 .dump_survey = mwifiex_cfg80211_dump_survey,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4239 .set_wiphy_params = mwifiex_cfg80211_set_wiphy_params,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4240 .join_ibss = mwifiex_cfg80211_join_ibss,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4241 .leave_ibss = mwifiex_cfg80211_leave_ibss,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4242 .add_key = mwifiex_cfg80211_add_key,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4243 .del_key = mwifiex_cfg80211_del_key,
89951db2be5310 drivers/net/wireless/marvell/mwifiex/cfg80211.c Ganapathi Bhat 2016-09-20 4244 .set_default_mgmt_key = mwifiex_cfg80211_set_default_mgmt_key,
e39faa73ef14f6 drivers/net/wireless/mwifiex/cfg80211.c Stone Piao 2012-09-25 4245 .mgmt_tx = mwifiex_cfg80211_mgmt_tx,
6cd536fe62ef58 drivers/net/wireless/marvell/mwifiex/cfg80211.c Johannes Berg 2020-04-17 4246 .update_mgmt_frame_registrations =
6cd536fe62ef58 drivers/net/wireless/marvell/mwifiex/cfg80211.c Johannes Berg 2020-04-17 4247 mwifiex_cfg80211_update_mgmt_frame_registrations,
7feb4c48313d58 drivers/net/wireless/mwifiex/cfg80211.c Stone Piao 2012-09-25 4248 .remain_on_channel = mwifiex_cfg80211_remain_on_channel,
7feb4c48313d58 drivers/net/wireless/mwifiex/cfg80211.c Stone Piao 2012-09-25 4249 .cancel_remain_on_channel = mwifiex_cfg80211_cancel_remain_on_channel,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 @4250 .set_default_key = mwifiex_cfg80211_set_default_key,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4251 .set_power_mgmt = mwifiex_cfg80211_set_power_mgmt,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4252 .set_tx_power = mwifiex_cfg80211_set_tx_power,
7d54bacadce17f drivers/net/wireless/marvell/mwifiex/cfg80211.c Javier Martinez Canillas 2016-06-06 4253 .get_tx_power = mwifiex_cfg80211_get_tx_power,
5d82c53a380ca9 drivers/net/wireless/mwifiex/cfg80211.c Yogesh Ashok Powar 2011-07-11 4254 .set_bitrate_mask = mwifiex_cfg80211_set_bitrate_mask,
12190c5d80bd3c drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2012-05-08 4255 .start_ap = mwifiex_cfg80211_start_ap,
12190c5d80bd3c drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2012-05-08 4256 .stop_ap = mwifiex_cfg80211_stop_ap,
5370c83684d9e7 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2012-06-28 4257 .change_beacon = mwifiex_cfg80211_change_beacon,
fa444bf88ce2ba drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2012-03-15 4258 .set_cqm_rssi_config = mwifiex_cfg80211_set_cqm_rssi_config,
8a279d5b4dc128 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2012-07-02 4259 .set_antenna = mwifiex_cfg80211_set_antenna,
3ee712857958c2 drivers/net/wireless/marvell/mwifiex/cfg80211.c Shengzhen Li 2016-06-06 4260 .get_antenna = mwifiex_cfg80211_get_antenna,
0f9e9b8ba72bc7 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2013-05-17 4261 .del_station = mwifiex_cfg80211_del_station,
0c9b7f22e8e1f3 drivers/net/wireless/marvell/mwifiex/cfg80211.c Xinming Hu 2016-01-13 4262 .sched_scan_start = mwifiex_cfg80211_sched_scan_start,
0c9b7f22e8e1f3 drivers/net/wireless/marvell/mwifiex/cfg80211.c Xinming Hu 2016-01-13 4263 .sched_scan_stop = mwifiex_cfg80211_sched_scan_stop,
7da060c1c01b10 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2013-03-04 4264 #ifdef CONFIG_PM
7da060c1c01b10 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2013-03-04 4265 .suspend = mwifiex_cfg80211_suspend,
7da060c1c01b10 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2013-03-04 4266 .resume = mwifiex_cfg80211_resume,
7da060c1c01b10 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2013-03-04 4267 .set_wakeup = mwifiex_cfg80211_set_wakeup,
f6b1cbe029f682 drivers/net/wireless/marvell/mwifiex/cfg80211.c Ganapathi Bhat 2016-04-05 4268 .set_rekey_data = mwifiex_set_rekey_data,
7da060c1c01b10 drivers/net/wireless/mwifiex/cfg80211.c Amitkumar Karwar 2013-03-04 4269 #endif
d1e2586f484dfc drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2013-08-09 4270 .set_coalesce = mwifiex_cfg80211_set_coalesce,
b23bce29656801 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2014-02-07 4271 .tdls_mgmt = mwifiex_cfg80211_tdls_mgmt,
429d90d2212b56 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2014-02-07 4272 .tdls_oper = mwifiex_cfg80211_tdls_oper,
b04975970676d7 drivers/net/wireless/mwifiex/cfg80211.c Xinming Hu 2015-06-22 4273 .tdls_channel_switch = mwifiex_cfg80211_tdls_chan_switch,
b04975970676d7 drivers/net/wireless/mwifiex/cfg80211.c Xinming Hu 2015-06-22 4274 .tdls_cancel_channel_switch = mwifiex_cfg80211_tdls_cancel_chan_switch,
e48e0de0053f07 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2014-02-07 4275 .add_station = mwifiex_cfg80211_add_station,
1f4dfd8a1e911c drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2014-02-07 4276 .change_station = mwifiex_cfg80211_change_station,
3935ccc14d2c68 drivers/net/wireless/marvell/mwifiex/cfg80211.c Xinming Hu 2016-09-02 4277 CFG80211_TESTMODE_CMD(mwifiex_tm_cmd)
7ee38bf4edeac8 drivers/net/wireless/mwifiex/cfg80211.c Xinming Hu 2015-06-03 4278 .get_channel = mwifiex_cfg80211_get_channel,
85afb18621be39 drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2015-01-28 4279 .start_radar_detection = mwifiex_cfg80211_start_radar_detection,
7d652034d1a08b drivers/net/wireless/mwifiex/cfg80211.c Avinash Patil 2015-01-28 4280 .channel_switch = mwifiex_cfg80211_channel_switch,
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4281 };
5e6e3a92b9a4c9 drivers/net/wireless/mwifiex/cfg80211.c Bing Zhao 2011-03-21 4282

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]