qcacld-3.0: Fix invalid vdev_id value while sending link report frame

In lim_send_link_report_action_frame(), the link report action
frame is filled in response to the link measurement request from
the AP. wma_tx_frame() is called to send the frame to the firmware.
But the vdev_id is initialized to 0 in
lim_send_link_report_action_frame(), but is not updated from
pe_session before passing it in wma_tx_frame. SO when STA comes
up on vdev 1, the vdev value is still sent as 0. This results in
the action frame dropped in firmware.

Fill the vdev_id from pe_session before sending it to firmware.

Change-Id: I5ee830fc6ca542c29f555bce63a77c3309777d3b
CRs-Fixed: 2530258
This commit is contained in:
Pragaspathi Thilagaraj
2019-09-23 18:40:57 +05:30
committed by nshrivas
parent 3c33fde7c7
commit 683c1cfe6c
2 changed files with 22 additions and 24 deletions

View File

@@ -4170,23 +4170,6 @@ returnAfterError:
return status_code; return status_code;
} /* End lim_send_neighbor_report_request_frame. */ } /* End lim_send_neighbor_report_request_frame. */
/**
* \brief Send a Link Report Action frame
*
*
* \param mac Pointer to the global MAC structure
*
* \param pLinkReport Address of a tSirMacLinkReport
*
* \param peer mac address of peer station.
*
* \param pe_session address of session entry.
*
* \return QDF_STATUS_SUCCESS on success, QDF_STATUS_E_FAILURE else
*
*
*/
QDF_STATUS QDF_STATUS
lim_send_link_report_action_frame(struct mac_context *mac, lim_send_link_report_action_frame(struct mac_context *mac,
tpSirMacLinkReport pLinkReport, tpSirMacLinkReport pLinkReport,
@@ -4200,13 +4183,14 @@ lim_send_link_report_action_frame(struct mac_context *mac,
void *pPacket; void *pPacket;
QDF_STATUS qdf_status; QDF_STATUS qdf_status;
uint8_t txFlag = 0; uint8_t txFlag = 0;
uint8_t smeSessionId = 0; uint8_t vdev_id = 0;
if (!pe_session) { if (!pe_session) {
pe_err("(!psession) in Request to send Link Report action frame"); pe_err("RRM: Send link report: NULL PE session");
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
} }
vdev_id = pe_session->vdev_id;
qdf_mem_zero((uint8_t *) &frm, sizeof(frm)); qdf_mem_zero((uint8_t *) &frm, sizeof(frm));
frm.Category.category = ACTION_CATEGORY_RRM; frm.Category.category = ACTION_CATEGORY_RRM;
@@ -4281,8 +4265,7 @@ lim_send_link_report_action_frame(struct mac_context *mac,
nStatus); nStatus);
} }
pe_warn("Sending a Link Report to"); pe_warn("RRM: Sending Link Report to %pM on vdev[%d]", peer, vdev_id);
lim_print_mac_addr(mac, peer, LOGW);
if (wlan_reg_is_5ghz_ch_freq(pe_session->curr_op_freq) || if (wlan_reg_is_5ghz_ch_freq(pe_session->curr_op_freq) ||
pe_session->opmode == QDF_P2P_CLIENT_MODE || pe_session->opmode == QDF_P2P_CLIENT_MODE ||
@@ -4297,7 +4280,7 @@ lim_send_link_report_action_frame(struct mac_context *mac,
TXRX_FRM_802_11_MGMT, TXRX_FRM_802_11_MGMT,
ANI_TXDIR_TODS, ANI_TXDIR_TODS,
7, lim_tx_complete, pFrame, txFlag, 7, lim_tx_complete, pFrame, txFlag,
smeSessionId, 0, RATEID_DEFAULT); vdev_id, 0, RATEID_DEFAULT);
MTRACE(qdf_trace(QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE, MTRACE(qdf_trace(QDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE,
pe_session->peSessionId, qdf_status)); pe_session->peSessionId, qdf_status));
if (QDF_STATUS_SUCCESS != qdf_status) { if (QDF_STATUS_SUCCESS != qdf_status) {

View File

@@ -600,8 +600,23 @@ QDF_STATUS lim_p2p_oper_chan_change_confirm_action_frame(
QDF_STATUS lim_send_neighbor_report_request_frame(struct mac_context *, QDF_STATUS lim_send_neighbor_report_request_frame(struct mac_context *,
tpSirMacNeighborReportReq, tpSirMacNeighborReportReq,
tSirMacAddr, struct pe_session *); tSirMacAddr, struct pe_session *);
QDF_STATUS lim_send_link_report_action_frame(struct mac_context *, tpSirMacLinkReport,
tSirMacAddr, struct pe_session *); /**
* lim_send_link_report_action_frame() - Send link measurement report action
* frame in response for a link measurement request received.
* @mac: Pointer to Mac context
* @link_report: Pointer to the sSirMacLinkReport struct
* @peer: BSSID of the peer
* @pe_session: Pointer to the pe_session
*
* Return: QDF_STATUS
*
*/
QDF_STATUS
lim_send_link_report_action_frame(struct mac_context *mac,
tpSirMacLinkReport link_report,
tSirMacAddr peer,
struct pe_session *pe_session);
/** /**
* lim_send_radio_measure_report_action_frame - Send RRM report action frame * lim_send_radio_measure_report_action_frame - Send RRM report action frame