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:

committed by
nshrivas

parent
3c33fde7c7
commit
683c1cfe6c
@@ -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) {
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user