qcacld-3.0: Save assoc_resp ie in peer common object structure
In case of ML SAP, userspace needs assoc resp IE to get all the ML link info. So, Add support to save assoc_resp ie pointer in peer common object which will send to userspace. Change-Id: If19857ecce62092b1aa4e7fef17c09e819822f5f CRs-Fixed: 3325938
This commit is contained in:

committed by
Madan Koyyalamudi

parent
536cb3b381
commit
cd5cb50120
@@ -160,6 +160,7 @@ struct sae_auth_retry {
|
||||
* @peer_set_key_wakelock: wakelock to protect peer set key op with firmware
|
||||
* @peer_set_key_runtime_wakelock: runtime pm wakelock for set key
|
||||
* @is_key_wakelock_set: flag to check if key wakelock is pending to release
|
||||
* @assoc_rsp: assoc rsp IE received during connection
|
||||
*/
|
||||
struct peer_mlme_priv_obj {
|
||||
uint8_t last_pn_valid;
|
||||
@@ -178,6 +179,7 @@ struct peer_mlme_priv_obj {
|
||||
qdf_wake_lock_t peer_set_key_wakelock;
|
||||
qdf_runtime_lock_t peer_set_key_runtime_wakelock;
|
||||
bool is_key_wakelock_set;
|
||||
struct element_info assoc_rsp;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -755,6 +757,25 @@ bool mlme_get_reconn_after_assoc_timeout_flag(struct wlan_objmgr_psoc *psoc,
|
||||
*/
|
||||
struct element_info *mlme_get_peer_disconnect_ies(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* mlme_free_peer_assoc_rsp_ie() - Free the peer Assoc resp IE
|
||||
* @peer_priv: Peer priv object
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void mlme_free_peer_assoc_rsp_ie(struct peer_mlme_priv_obj *peer_priv);
|
||||
|
||||
/**
|
||||
* mlme_set_peer_assoc_rsp_ie() - Cache Assoc resp IE send to peer
|
||||
* @psoc: soc object
|
||||
* @peer_addr: Mac address of requesting peer
|
||||
* @ie: pointer for assoc resp IEs
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void mlme_set_peer_assoc_rsp_ie(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *peer_addr, struct element_info *ie);
|
||||
|
||||
/**
|
||||
* mlme_set_peer_pmf_status() - set pmf status of peer
|
||||
* @peer: PEER object
|
||||
|
@@ -325,6 +325,7 @@ mlme_peer_object_destroyed_notification(struct wlan_objmgr_peer *peer,
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_legacy_err("unable to detach peer_priv obj to peer obj");
|
||||
|
||||
mlme_free_peer_assoc_rsp_ie(peer_priv);
|
||||
qdf_mem_free(peer_priv);
|
||||
|
||||
return status;
|
||||
@@ -3198,6 +3199,54 @@ struct element_info *mlme_get_peer_disconnect_ies(struct wlan_objmgr_vdev *vdev)
|
||||
return &mlme_priv->disconnect_info.peer_discon_ies;
|
||||
}
|
||||
|
||||
void mlme_free_peer_assoc_rsp_ie(struct peer_mlme_priv_obj *peer_priv)
|
||||
{
|
||||
if (!peer_priv) {
|
||||
mlme_legacy_debug("peer priv is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
if (peer_priv->assoc_rsp.ptr) {
|
||||
qdf_mem_free(peer_priv->assoc_rsp.ptr);
|
||||
peer_priv->assoc_rsp.ptr = NULL;
|
||||
peer_priv->assoc_rsp.len = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void mlme_set_peer_assoc_rsp_ie(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *peer_addr, struct element_info *ie)
|
||||
{
|
||||
struct wlan_objmgr_peer *peer;
|
||||
struct peer_mlme_priv_obj *peer_priv;
|
||||
|
||||
if (!ie || !ie->len || !ie->ptr || !peer_addr) {
|
||||
mlme_legacy_debug("Assoc IE is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
peer = wlan_objmgr_get_peer_by_mac(psoc, peer_addr, WLAN_LEGACY_MAC_ID);
|
||||
if (!peer)
|
||||
return;
|
||||
|
||||
peer_priv = wlan_objmgr_peer_get_comp_private_obj(peer,
|
||||
WLAN_UMAC_COMP_MLME);
|
||||
|
||||
if (!peer_priv)
|
||||
goto end;
|
||||
|
||||
/* Free existing assoc_rsp */
|
||||
mlme_free_peer_assoc_rsp_ie(peer_priv);
|
||||
|
||||
peer_priv->assoc_rsp.ptr = qdf_mem_malloc(ie->len);
|
||||
if (!peer_priv->assoc_rsp.ptr)
|
||||
goto end;
|
||||
|
||||
qdf_mem_copy(peer_priv->assoc_rsp.ptr, ie->ptr, ie->len);
|
||||
peer_priv->assoc_rsp.len = ie->len;
|
||||
end:
|
||||
wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_MAC_ID);
|
||||
}
|
||||
|
||||
void mlme_set_follow_ap_edca_flag(struct wlan_objmgr_vdev *vdev, bool flag)
|
||||
{
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
|
Reference in New Issue
Block a user