mirror of https://gitee.com/openkylin/linux.git
qtnfmac: do not track STA states in driver
Remove STA connection states tracking from driver. Leave it wireless core on host and to firmware. Signed-off-by: Sergey Matyukevich <sergey.matyukevich.os@quantenna.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
a7dd5d7c2d
commit
263ee96b77
|
@ -216,7 +216,6 @@ static struct wireless_dev *qtnf_add_virtual_intf(struct wiphy *wiphy,
|
||||||
eth_zero_addr(vif->mac_addr);
|
eth_zero_addr(vif->mac_addr);
|
||||||
eth_zero_addr(vif->bssid);
|
eth_zero_addr(vif->bssid);
|
||||||
vif->bss_priority = QTNF_DEF_BSS_PRIORITY;
|
vif->bss_priority = QTNF_DEF_BSS_PRIORITY;
|
||||||
vif->sta_state = QTNF_STA_DISCONNECTED;
|
|
||||||
memset(&vif->wdev, 0, sizeof(vif->wdev));
|
memset(&vif->wdev, 0, sizeof(vif->wdev));
|
||||||
vif->wdev.wiphy = wiphy;
|
vif->wdev.wiphy = wiphy;
|
||||||
vif->wdev.iftype = type;
|
vif->wdev.iftype = type;
|
||||||
|
@ -624,9 +623,6 @@ qtnf_connect(struct wiphy *wiphy, struct net_device *dev,
|
||||||
if (vif->wdev.iftype != NL80211_IFTYPE_STATION)
|
if (vif->wdev.iftype != NL80211_IFTYPE_STATION)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
if (vif->sta_state != QTNF_STA_DISCONNECTED)
|
|
||||||
return -EBUSY;
|
|
||||||
|
|
||||||
if (sme->bssid)
|
if (sme->bssid)
|
||||||
ether_addr_copy(vif->bssid, sme->bssid);
|
ether_addr_copy(vif->bssid, sme->bssid);
|
||||||
else
|
else
|
||||||
|
@ -639,7 +635,6 @@ qtnf_connect(struct wiphy *wiphy, struct net_device *dev,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
vif->sta_state = QTNF_STA_CONNECTING;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -664,9 +659,6 @@ qtnf_disconnect(struct wiphy *wiphy, struct net_device *dev,
|
||||||
|
|
||||||
qtnf_scan_done(mac, true);
|
qtnf_scan_done(mac, true);
|
||||||
|
|
||||||
if (vif->sta_state == QTNF_STA_DISCONNECTED)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
ret = qtnf_cmd_send_disconnect(vif, reason_code);
|
ret = qtnf_cmd_send_disconnect(vif, reason_code);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
pr_err("VIF%u.%u: failed to disconnect\n", mac->macid,
|
pr_err("VIF%u.%u: failed to disconnect\n", mac->macid,
|
||||||
|
@ -675,9 +667,6 @@ qtnf_disconnect(struct wiphy *wiphy, struct net_device *dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (vif->sta_state == QTNF_STA_CONNECTING)
|
|
||||||
vif->sta_state = QTNF_STA_DISCONNECTED;
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1152,28 +1141,10 @@ void qtnf_virtual_intf_cleanup(struct net_device *ndev)
|
||||||
struct qtnf_wmac *mac = wiphy_priv(vif->wdev.wiphy);
|
struct qtnf_wmac *mac = wiphy_priv(vif->wdev.wiphy);
|
||||||
|
|
||||||
if (vif->wdev.iftype == NL80211_IFTYPE_STATION) {
|
if (vif->wdev.iftype == NL80211_IFTYPE_STATION) {
|
||||||
switch (vif->sta_state) {
|
cfg80211_disconnected(vif->netdev, WLAN_REASON_DEAUTH_LEAVING,
|
||||||
case QTNF_STA_DISCONNECTED:
|
NULL, 0, 1, GFP_KERNEL);
|
||||||
break;
|
qtnf_disconnect(vif->wdev.wiphy, ndev,
|
||||||
case QTNF_STA_CONNECTING:
|
WLAN_REASON_DEAUTH_LEAVING);
|
||||||
cfg80211_connect_result(vif->netdev,
|
|
||||||
vif->bssid, NULL, 0,
|
|
||||||
NULL, 0,
|
|
||||||
WLAN_STATUS_UNSPECIFIED_FAILURE,
|
|
||||||
GFP_KERNEL);
|
|
||||||
qtnf_disconnect(vif->wdev.wiphy, ndev,
|
|
||||||
WLAN_REASON_DEAUTH_LEAVING);
|
|
||||||
break;
|
|
||||||
case QTNF_STA_CONNECTED:
|
|
||||||
cfg80211_disconnected(vif->netdev,
|
|
||||||
WLAN_REASON_DEAUTH_LEAVING,
|
|
||||||
NULL, 0, 1, GFP_KERNEL);
|
|
||||||
qtnf_disconnect(vif->wdev.wiphy, ndev,
|
|
||||||
WLAN_REASON_DEAUTH_LEAVING);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
vif->sta_state = QTNF_STA_DISCONNECTED;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
qtnf_scan_done(mac, true);
|
qtnf_scan_done(mac, true);
|
||||||
|
@ -1181,27 +1152,11 @@ void qtnf_virtual_intf_cleanup(struct net_device *ndev)
|
||||||
|
|
||||||
void qtnf_cfg80211_vif_reset(struct qtnf_vif *vif)
|
void qtnf_cfg80211_vif_reset(struct qtnf_vif *vif)
|
||||||
{
|
{
|
||||||
if (vif->wdev.iftype == NL80211_IFTYPE_STATION) {
|
if (vif->wdev.iftype == NL80211_IFTYPE_STATION)
|
||||||
switch (vif->sta_state) {
|
cfg80211_disconnected(vif->netdev, WLAN_REASON_DEAUTH_LEAVING,
|
||||||
case QTNF_STA_CONNECTING:
|
NULL, 0, 1, GFP_KERNEL);
|
||||||
cfg80211_connect_result(vif->netdev,
|
|
||||||
vif->bssid, NULL, 0,
|
|
||||||
NULL, 0,
|
|
||||||
WLAN_STATUS_UNSPECIFIED_FAILURE,
|
|
||||||
GFP_KERNEL);
|
|
||||||
break;
|
|
||||||
case QTNF_STA_CONNECTED:
|
|
||||||
cfg80211_disconnected(vif->netdev,
|
|
||||||
WLAN_REASON_DEAUTH_LEAVING,
|
|
||||||
NULL, 0, 1, GFP_KERNEL);
|
|
||||||
break;
|
|
||||||
case QTNF_STA_DISCONNECTED:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cfg80211_shutdown_all_interfaces(vif->wdev.wiphy);
|
cfg80211_shutdown_all_interfaces(vif->wdev.wiphy);
|
||||||
vif->sta_state = QTNF_STA_DISCONNECTED;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void qtnf_band_init_rates(struct ieee80211_supported_band *band)
|
void qtnf_band_init_rates(struct ieee80211_supported_band *band)
|
||||||
|
|
|
@ -64,12 +64,6 @@ struct qtnf_sta_list {
|
||||||
atomic_t size;
|
atomic_t size;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum qtnf_sta_state {
|
|
||||||
QTNF_STA_DISCONNECTED,
|
|
||||||
QTNF_STA_CONNECTING,
|
|
||||||
QTNF_STA_CONNECTED
|
|
||||||
};
|
|
||||||
|
|
||||||
struct qtnf_vif {
|
struct qtnf_vif {
|
||||||
struct wireless_dev wdev;
|
struct wireless_dev wdev;
|
||||||
u8 bssid[ETH_ALEN];
|
u8 bssid[ETH_ALEN];
|
||||||
|
@ -77,7 +71,6 @@ struct qtnf_vif {
|
||||||
u8 vifid;
|
u8 vifid;
|
||||||
u8 bss_priority;
|
u8 bss_priority;
|
||||||
u8 bss_status;
|
u8 bss_status;
|
||||||
enum qtnf_sta_state sta_state;
|
|
||||||
u16 mgmt_frames_bitmask;
|
u16 mgmt_frames_bitmask;
|
||||||
struct net_device *netdev;
|
struct net_device *netdev;
|
||||||
struct qtnf_wmac *mac;
|
struct qtnf_wmac *mac;
|
||||||
|
|
|
@ -171,24 +171,14 @@ qtnf_event_handle_bss_join(struct qtnf_vif *vif,
|
||||||
return -EPROTO;
|
return -EPROTO;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vif->sta_state != QTNF_STA_CONNECTING) {
|
|
||||||
pr_err("VIF%u.%u: BSS_JOIN event when STA is not connecting\n",
|
|
||||||
vif->mac->macid, vif->vifid);
|
|
||||||
return -EPROTO;
|
|
||||||
}
|
|
||||||
|
|
||||||
pr_debug("VIF%u.%u: BSSID:%pM\n", vif->mac->macid, vif->vifid,
|
pr_debug("VIF%u.%u: BSSID:%pM\n", vif->mac->macid, vif->vifid,
|
||||||
join_info->bssid);
|
join_info->bssid);
|
||||||
|
|
||||||
cfg80211_connect_result(vif->netdev, join_info->bssid, NULL, 0, NULL,
|
cfg80211_connect_result(vif->netdev, join_info->bssid, NULL, 0, NULL,
|
||||||
0, le16_to_cpu(join_info->status), GFP_KERNEL);
|
0, le16_to_cpu(join_info->status), GFP_KERNEL);
|
||||||
|
|
||||||
if (le16_to_cpu(join_info->status) == WLAN_STATUS_SUCCESS) {
|
if (le16_to_cpu(join_info->status) == WLAN_STATUS_SUCCESS)
|
||||||
vif->sta_state = QTNF_STA_CONNECTED;
|
|
||||||
netif_carrier_on(vif->netdev);
|
netif_carrier_on(vif->netdev);
|
||||||
} else {
|
|
||||||
vif->sta_state = QTNF_STA_DISCONNECTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -211,16 +201,10 @@ qtnf_event_handle_bss_leave(struct qtnf_vif *vif,
|
||||||
return -EPROTO;
|
return -EPROTO;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vif->sta_state != QTNF_STA_CONNECTED)
|
|
||||||
pr_warn("VIF%u.%u: BSS_LEAVE event when STA is not connected\n",
|
|
||||||
vif->mac->macid, vif->vifid);
|
|
||||||
|
|
||||||
pr_debug("VIF%u.%u: disconnected\n", vif->mac->macid, vif->vifid);
|
pr_debug("VIF%u.%u: disconnected\n", vif->mac->macid, vif->vifid);
|
||||||
|
|
||||||
cfg80211_disconnected(vif->netdev, le16_to_cpu(leave_info->reason),
|
cfg80211_disconnected(vif->netdev, le16_to_cpu(leave_info->reason),
|
||||||
NULL, 0, 0, GFP_KERNEL);
|
NULL, 0, 0, GFP_KERNEL);
|
||||||
|
|
||||||
vif->sta_state = QTNF_STA_DISCONNECTED;
|
|
||||||
netif_carrier_off(vif->netdev);
|
netif_carrier_off(vif->netdev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue