qcacld-3.0: Refine PASN peer delete all & pasn auth status path

Refine PASN peer delete all path, to post message to
scheduler thread to process the peer delete all
message for PASN peers. Handle response timeout in WMA.
Resume vdev deletion after removing pasn peers

Add vendor command support to parse below vendor commands:
QCA_NL80211_VENDOR_SUBCMD_PASN
QCA_NL80211_VENDOR_SUBCMD_SECURE_RANGING_CONTEXT

Send install key command to firmware to install the
PTK upon receiving
QCA_NL80211_VENDOR_SUBCMD_SECURE_RANGING_CONTEXT
vendor command. If LTF keyseed is also received,
send the LTF keyseed to firmware.

Sent PASN auth status to firmware upon receiving
QCA_NL80211_VENDOR_SUBCMD_PASN command.

Change-Id: Idc9c69f7288b0774cc6d9bdcfed13ba3684bbc72
CRs-Fixed: 3231205
This commit is contained in:
Pragaspathi Thilagaraj
2022-06-08 16:36:49 +05:30
committed by Madan Koyyalamudi
parent 4b2a3cae5d
commit 832fee1036
25 changed files with 982 additions and 371 deletions

View File

@@ -21,9 +21,19 @@
#define _WLAN_WIFI_POS_IFACE_API_H_
#include <wlan_objmgr_vdev_obj.h>
#include "wma_if.h"
#include "lim_types.h"
#include "wifi_pos_pasn_api.h"
#if defined(WIFI_POS_CONVERGED) && defined(WLAN_FEATURE_RTT_11AZ_SUPPORT)
/**
* wlan_wifi_pos_pasn_peer_delete_all - Delete all pasn peer callback
* @self_peer_del_msg: Scheduler message
*
* Return: True if PASN peer delete all is required
*/
bool wlan_wifi_pos_pasn_peer_delete_all(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id);
/**
* wifi_pos_register_legacy_ops() - Register wifi pos legacy callbacks
* @psoc: Psoc pointer
@@ -53,5 +63,12 @@ wifi_pos_deregister_legacy_ops(struct wlan_objmgr_psoc *psoc)
{
return QDF_STATUS_SUCCESS;
}
static inline bool
wlan_wifi_pos_pasn_peer_delete_all(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id)
{
return false;
}
#endif
#endif /* _WLAN_WIFI_POS_IFACE_API_H_ */

View File

@@ -17,9 +17,9 @@
* DOC: define internal APIs related to the mlme component, legacy APIs are
* called for the time being, but will be cleaned up after convergence
*/
#include "wma_pasn_peer_api.h"
#include "wifi_pos_api.h"
#include "wlan_wifi_pos_interface.h"
#include "wma_pasn_peer_api.h"
#if defined(WIFI_POS_CONVERGED) && defined(WLAN_FEATURE_RTT_11AZ_SUPPORT)
/**
@@ -64,7 +64,58 @@ static QDF_STATUS wlan_wifi_pos_pasn_peer_delete(struct wlan_objmgr_psoc *psoc,
static QDF_STATUS
wlan_wifi_pos_vdev_delete_resume(struct wlan_objmgr_vdev *vdev)
{
return QDF_STATUS_SUCCESS;
return wma_pasn_peer_delete_all_complete(vdev);
}
bool
wlan_wifi_pos_pasn_peer_delete_all(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id)
{
struct wlan_objmgr_vdev *vdev;
QDF_STATUS status;
struct scheduler_msg msg = {0};
struct pasn_peer_delete_msg *req;
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
WLAN_WIFI_POS_TGT_IF_ID);
if (!vdev) {
mlme_err("Vdev is not found for id:%d", vdev_id);
return false;
}
if (!(vdev->vdev_mlme.vdev_opmode == QDF_STA_MODE ||
vdev->vdev_mlme.vdev_opmode == QDF_SAP_MODE)) {
wlan_objmgr_vdev_release_ref(vdev, WLAN_WIFI_POS_TGT_IF_ID);
return false;
}
if (!wifi_pos_get_pasn_peer_count(vdev) ||
wifi_pos_is_delete_all_peer_in_progress(vdev)) {
wlan_objmgr_vdev_release_ref(vdev, WLAN_WIFI_POS_TGT_IF_ID);
return false;
}
wlan_objmgr_vdev_release_ref(vdev, WLAN_WIFI_POS_TGT_IF_ID);
req = qdf_mem_malloc(sizeof(*req));
if (!req)
return false;
req->vdev_id = vdev_id;
msg.type = WIFI_POS_PASN_PEER_DELETE_ALL;
msg.bodyptr = req;
status = scheduler_post_message(QDF_MODULE_ID_WIFIPOS,
QDF_MODULE_ID_PE,
QDF_MODULE_ID_PE, &msg);
if (QDF_IS_STATUS_ERROR(status)) {
qdf_mem_free(req);
mlme_err("Delete all pasn peers failed");
return false;
}
return true;
}
static struct wifi_pos_legacy_ops wifi_pos_ops = {