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:
Sergey Matyukevich 2018-10-05 10:11:27 +00:00 committed by Kalle Valo
parent a7dd5d7c2d
commit 263ee96b77
3 changed files with 8 additions and 76 deletions

View File

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

View File

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

View File

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