staging: wilc1000: adjust for management frame register API changes
Adjust to the API changes in cfg80211 for management frame registration.
Fixes: 6cd536fe62
("cfg80211: change internal management frame registration API")
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Reviewed-by: Sergey Matyukevich <sergey.matyukevich.os@quantenna.com>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Acked-by: Ajay Singh <ajay.kathat@microchip.com>
Link: https://lore.kernel.org/r/20200428101400.bac7e94c2bf8.I6a2287b9f68f35aff5f6de409c5ffa388de760e2@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
2e410da6a0
commit
d530b98640
|
@ -1217,33 +1217,31 @@ static int mgmt_tx_cancel_wait(struct wiphy *wiphy,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wilc_mgmt_frame_register(struct wiphy *wiphy, struct wireless_dev *wdev,
|
void wilc_update_mgmt_frame_registrations(struct wiphy *wiphy,
|
||||||
u16 frame_type, bool reg)
|
struct wireless_dev *wdev,
|
||||||
|
struct mgmt_frame_regs *upd)
|
||||||
{
|
{
|
||||||
struct wilc *wl = wiphy_priv(wiphy);
|
struct wilc *wl = wiphy_priv(wiphy);
|
||||||
struct wilc_vif *vif = netdev_priv(wdev->netdev);
|
struct wilc_vif *vif = netdev_priv(wdev->netdev);
|
||||||
|
u32 presp_bit = BIT(IEEE80211_STYPE_PROBE_REQ >> 4);
|
||||||
|
u32 action_bit = BIT(IEEE80211_STYPE_ACTION >> 4);
|
||||||
|
|
||||||
if (!frame_type)
|
if (wl->initialized) {
|
||||||
return;
|
bool prev = vif->mgmt_reg_stypes & presp_bit;
|
||||||
|
bool now = upd->interface_stypes & presp_bit;
|
||||||
|
|
||||||
switch (frame_type) {
|
if (now != prev)
|
||||||
case IEEE80211_STYPE_PROBE_REQ:
|
wilc_frame_register(vif, IEEE80211_STYPE_PROBE_REQ, now);
|
||||||
vif->frame_reg[0].type = frame_type;
|
|
||||||
vif->frame_reg[0].reg = reg;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IEEE80211_STYPE_ACTION:
|
prev = vif->mgmt_reg_stypes & action_bit;
|
||||||
vif->frame_reg[1].type = frame_type;
|
now = upd->interface_stypes & action_bit;
|
||||||
vif->frame_reg[1].reg = reg;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
if (now != prev)
|
||||||
break;
|
wilc_frame_register(vif, IEEE80211_STYPE_ACTION, now);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!wl->initialized)
|
vif->mgmt_reg_stypes =
|
||||||
return;
|
upd->interface_stypes & (presp_bit | action_bit);
|
||||||
wilc_frame_register(vif, frame_type, reg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int set_cqm_rssi_config(struct wiphy *wiphy, struct net_device *dev,
|
static int set_cqm_rssi_config(struct wiphy *wiphy, struct net_device *dev,
|
||||||
|
@ -1665,7 +1663,7 @@ static const struct cfg80211_ops wilc_cfg80211_ops = {
|
||||||
.cancel_remain_on_channel = cancel_remain_on_channel,
|
.cancel_remain_on_channel = cancel_remain_on_channel,
|
||||||
.mgmt_tx_cancel_wait = mgmt_tx_cancel_wait,
|
.mgmt_tx_cancel_wait = mgmt_tx_cancel_wait,
|
||||||
.mgmt_tx = mgmt_tx,
|
.mgmt_tx = mgmt_tx,
|
||||||
.mgmt_frame_register = wilc_mgmt_frame_register,
|
.update_mgmt_frame_registrations = wilc_update_mgmt_frame_registrations,
|
||||||
.set_power_mgmt = set_power_mgmt,
|
.set_power_mgmt = set_power_mgmt,
|
||||||
.set_cqm_rssi_config = set_cqm_rssi_config,
|
.set_cqm_rssi_config = set_cqm_rssi_config,
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,9 @@ void wilc_wfi_deinit_mon_interface(struct wilc *wl, bool rtnl_locked);
|
||||||
struct net_device *wilc_wfi_init_mon_interface(struct wilc *wl,
|
struct net_device *wilc_wfi_init_mon_interface(struct wilc *wl,
|
||||||
const char *name,
|
const char *name,
|
||||||
struct net_device *real_dev);
|
struct net_device *real_dev);
|
||||||
void wilc_mgmt_frame_register(struct wiphy *wiphy, struct wireless_dev *wdev,
|
void wilc_update_mgmt_frame_registrations(struct wiphy *wiphy,
|
||||||
u16 frame_type, bool reg);
|
struct wireless_dev *wdev,
|
||||||
|
struct mgmt_frame_regs *upd);
|
||||||
struct wilc_vif *wilc_get_interface(struct wilc *wl);
|
struct wilc_vif *wilc_get_interface(struct wilc *wl);
|
||||||
struct wilc_vif *wilc_get_wl_to_vif(struct wilc *wl);
|
struct wilc_vif *wilc_get_wl_to_vif(struct wilc *wl);
|
||||||
void wlan_deinit_locks(struct wilc *wilc);
|
void wlan_deinit_locks(struct wilc *wilc);
|
||||||
|
|
|
@ -571,6 +571,7 @@ static int wilc_mac_open(struct net_device *ndev)
|
||||||
struct wilc *wl = vif->wilc;
|
struct wilc *wl = vif->wilc;
|
||||||
unsigned char mac_add[ETH_ALEN] = {0};
|
unsigned char mac_add[ETH_ALEN] = {0};
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
struct mgmt_frame_regs mgmt_regs = {};
|
||||||
|
|
||||||
if (!wl || !wl->dev) {
|
if (!wl || !wl->dev) {
|
||||||
netdev_err(ndev, "device not ready\n");
|
netdev_err(ndev, "device not ready\n");
|
||||||
|
@ -602,14 +603,12 @@ static int wilc_mac_open(struct net_device *ndev)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
wilc_mgmt_frame_register(vif->ndev->ieee80211_ptr->wiphy,
|
mgmt_regs.interface_stypes = vif->mgmt_reg_stypes;
|
||||||
vif->ndev->ieee80211_ptr,
|
/* so we detect a change */
|
||||||
vif->frame_reg[0].type,
|
vif->mgmt_reg_stypes = 0;
|
||||||
vif->frame_reg[0].reg);
|
wilc_update_mgmt_frame_registrations(vif->ndev->ieee80211_ptr->wiphy,
|
||||||
wilc_mgmt_frame_register(vif->ndev->ieee80211_ptr->wiphy,
|
vif->ndev->ieee80211_ptr,
|
||||||
vif->ndev->ieee80211_ptr,
|
&mgmt_regs);
|
||||||
vif->frame_reg[1].type,
|
|
||||||
vif->frame_reg[1].reg);
|
|
||||||
netif_wake_queue(ndev);
|
netif_wake_queue(ndev);
|
||||||
wl->open_ifcs++;
|
wl->open_ifcs++;
|
||||||
vif->mac_opened = 1;
|
vif->mac_opened = 1;
|
||||||
|
@ -792,12 +791,10 @@ void wilc_wfi_mgmt_rx(struct wilc *wilc, u8 *buff, u32 size)
|
||||||
srcu_idx = srcu_read_lock(&wilc->srcu);
|
srcu_idx = srcu_read_lock(&wilc->srcu);
|
||||||
list_for_each_entry_rcu(vif, &wilc->vif_list, list) {
|
list_for_each_entry_rcu(vif, &wilc->vif_list, list) {
|
||||||
u16 type = le16_to_cpup((__le16 *)buff);
|
u16 type = le16_to_cpup((__le16 *)buff);
|
||||||
|
u32 type_bit = BIT(type >> 4);
|
||||||
|
|
||||||
if (vif->priv.p2p_listen_state &&
|
if (vif->priv.p2p_listen_state &&
|
||||||
((type == vif->frame_reg[0].type &&
|
vif->mgmt_reg_stypes & type_bit)
|
||||||
vif->frame_reg[0].reg) ||
|
|
||||||
(type == vif->frame_reg[1].type &&
|
|
||||||
vif->frame_reg[1].reg)))
|
|
||||||
wilc_wfi_p2p_rx(vif, buff, size);
|
wilc_wfi_p2p_rx(vif, buff, size);
|
||||||
|
|
||||||
if (vif->monitor_flag)
|
if (vif->monitor_flag)
|
||||||
|
|
|
@ -24,8 +24,6 @@
|
||||||
#define PMKID_FOUND 1
|
#define PMKID_FOUND 1
|
||||||
#define NUM_STA_ASSOCIATED 8
|
#define NUM_STA_ASSOCIATED 8
|
||||||
|
|
||||||
#define NUM_REG_FRAME 2
|
|
||||||
|
|
||||||
#define TCP_ACK_FILTER_LINK_SPEED_THRESH 54
|
#define TCP_ACK_FILTER_LINK_SPEED_THRESH 54
|
||||||
#define DEFAULT_LINK_SPEED 72
|
#define DEFAULT_LINK_SPEED 72
|
||||||
|
|
||||||
|
@ -151,11 +149,6 @@ struct wilc_priv {
|
||||||
u64 inc_roc_cookie;
|
u64 inc_roc_cookie;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct frame_reg {
|
|
||||||
u16 type;
|
|
||||||
bool reg;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define MAX_TCP_SESSION 25
|
#define MAX_TCP_SESSION 25
|
||||||
#define MAX_PENDING_ACKS 256
|
#define MAX_PENDING_ACKS 256
|
||||||
|
|
||||||
|
@ -187,7 +180,7 @@ struct wilc_vif {
|
||||||
u8 iftype;
|
u8 iftype;
|
||||||
int monitor_flag;
|
int monitor_flag;
|
||||||
int mac_opened;
|
int mac_opened;
|
||||||
struct frame_reg frame_reg[NUM_REG_FRAME];
|
u32 mgmt_reg_stypes;
|
||||||
struct net_device_stats netstats;
|
struct net_device_stats netstats;
|
||||||
struct wilc *wilc;
|
struct wilc *wilc;
|
||||||
u8 bssid[ETH_ALEN];
|
u8 bssid[ETH_ALEN];
|
||||||
|
|
Loading…
Reference in New Issue