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_wakelock: wakelock to protect peer set key op with firmware
|
||||||
* @peer_set_key_runtime_wakelock: runtime pm wakelock for set key
|
* @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
|
* @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 {
|
struct peer_mlme_priv_obj {
|
||||||
uint8_t last_pn_valid;
|
uint8_t last_pn_valid;
|
||||||
@@ -178,6 +179,7 @@ struct peer_mlme_priv_obj {
|
|||||||
qdf_wake_lock_t peer_set_key_wakelock;
|
qdf_wake_lock_t peer_set_key_wakelock;
|
||||||
qdf_runtime_lock_t peer_set_key_runtime_wakelock;
|
qdf_runtime_lock_t peer_set_key_runtime_wakelock;
|
||||||
bool is_key_wakelock_set;
|
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);
|
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
|
* mlme_set_peer_pmf_status() - set pmf status of peer
|
||||||
* @peer: PEER object
|
* @peer: PEER object
|
||||||
|
@@ -325,6 +325,7 @@ mlme_peer_object_destroyed_notification(struct wlan_objmgr_peer *peer,
|
|||||||
if (QDF_IS_STATUS_ERROR(status))
|
if (QDF_IS_STATUS_ERROR(status))
|
||||||
mlme_legacy_err("unable to detach peer_priv obj to peer obj");
|
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);
|
qdf_mem_free(peer_priv);
|
||||||
|
|
||||||
return status;
|
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;
|
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)
|
void mlme_set_follow_ap_edca_flag(struct wlan_objmgr_vdev *vdev, bool flag)
|
||||||
{
|
{
|
||||||
struct mlme_legacy_priv *mlme_priv;
|
struct mlme_legacy_priv *mlme_priv;
|
||||||
|
@@ -1649,6 +1649,7 @@ lim_send_assoc_rsp_mgmt_frame(struct mac_context *mac_ctx,
|
|||||||
bool is_band_2g;
|
bool is_band_2g;
|
||||||
uint16_t ie_buf_size;
|
uint16_t ie_buf_size;
|
||||||
uint16_t mlo_ie_len = 0;
|
uint16_t mlo_ie_len = 0;
|
||||||
|
struct element_info ie;
|
||||||
|
|
||||||
if (!pe_session) {
|
if (!pe_session) {
|
||||||
pe_err("pe_session is NULL");
|
pe_err("pe_session is NULL");
|
||||||
@@ -2076,6 +2077,11 @@ lim_send_assoc_rsp_mgmt_frame(struct mac_context *mac_ctx,
|
|||||||
pe_session->opmode == QDF_P2P_GO_MODE)
|
pe_session->opmode == QDF_P2P_GO_MODE)
|
||||||
tx_flag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
|
tx_flag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
|
||||||
|
|
||||||
|
ie.ptr = frame + sizeof(tSirMacMgmtHdr) + WLAN_ASSOC_RSP_IES_OFFSET;
|
||||||
|
ie.len = payload - WLAN_ASSOC_RSP_IES_OFFSET;
|
||||||
|
|
||||||
|
mlme_set_peer_assoc_rsp_ie(mac_ctx->psoc, peer_addr, &ie);
|
||||||
|
|
||||||
MTRACE(qdf_trace(QDF_MODULE_ID_PE, TRACE_CODE_TX_MGMT,
|
MTRACE(qdf_trace(QDF_MODULE_ID_PE, TRACE_CODE_TX_MGMT,
|
||||||
pe_session->peSessionId, mac_hdr->fc.subType));
|
pe_session->peSessionId, mac_hdr->fc.subType));
|
||||||
lim_diag_mgmt_tx_event_report(mac_ctx, mac_hdr,
|
lim_diag_mgmt_tx_event_report(mac_ctx, mac_hdr,
|
||||||
|
Reference in New Issue
Block a user