qcacmn: Enable management rx reo scheduler

Enable management Rx reorder scheduler.

CRs-Fixed: 3410648
Change-Id: I90fad2bb3c118f3d9021dc94ecdd1a300c9ab00c
This commit is contained in:
Edayilliam Jayadev
2023-03-01 15:23:14 +05:30
committed by Madan Koyyalamudi
parent fd71acd187
commit 4855c6ef1a
8 changed files with 647 additions and 135 deletions

View File

@@ -129,7 +129,6 @@ target_if_mgmt_rx_reo_extract_reo_params(wmi_unified_t wmi_handle,
QDF_STATUS
target_if_mgmt_rx_reo_host_drop_handler(struct wlan_objmgr_pdev *pdev,
struct mgmt_rx_event_params *params);
/**
* target_if_mgmt_rx_reo_release_frames() - API to release the management
* frames of a given psoc
@@ -212,5 +211,16 @@ target_if_mgmt_rx_reo_host_drop_handler(struct wlan_objmgr_pdev *pdev,
/* Nothing to do when REO is compiled off */
return QDF_STATUS_SUCCESS;
}
/**
* target_if_mgmt_rx_reo_release_frames() - API to release the management
* frames of a given psoc
* @arg: Pointer to void * argument
*
* Return: void
*/
static inline void target_if_mgmt_rx_reo_release_frames(void *arg)
{
}
#endif /* WLAN_MGMT_RX_REO_SUPPORT */
#endif /* _TARGET_IF_MGMT_TXRX_RX_REO_H_ */

View File

@@ -99,6 +99,32 @@ target_if_mgmt_rx_reo_fw_consumed_event_handler(
return 0;
}
void target_if_mgmt_rx_reo_release_frames(void *arg)
{
ol_scn_t scn = arg;
struct wlan_objmgr_psoc *psoc;
struct wlan_lmac_if_mgmt_rx_reo_rx_ops *mgmt_rx_reo_rx_ops;
QDF_STATUS status;
psoc = target_if_get_psoc_from_scn_hdl(scn);
if (!psoc) {
mgmt_rx_reo_err("null psoc");
return;
}
mgmt_rx_reo_rx_ops = target_if_mgmt_rx_reo_get_rx_ops(psoc);
if (!mgmt_rx_reo_rx_ops) {
mgmt_rx_reo_err("rx_ops of MGMT Rx REO module is NULL");
return;
}
status = mgmt_rx_reo_rx_ops->release_frames(psoc);
if (QDF_IS_STATUS_ERROR(status)) {
mgmt_rx_reo_err("Failed to release entries, ret = %d", status);
return;
}
}
QDF_STATUS
target_if_mgmt_rx_reo_register_event_handlers(struct wlan_objmgr_psoc *psoc)
{
@@ -619,14 +645,10 @@ target_if_mgmt_rx_reo_extract_reo_params(
static QDF_STATUS
target_if_mgmt_rx_reo_schedule_delivery(struct wlan_objmgr_psoc *psoc)
{
struct hif_opaque_softc *hif_handle;
struct wmi_unified *wmi_handle;
hif_handle = lmac_get_hif_hdl(psoc);
if (!hif_handle) {
mgmt_rx_reo_err("HIF handle is null");
return QDF_STATUS_E_NULL_VALUE;
}
QDF_STATUS status;
HTC_ENDPOINT_ID wmi_endpoint_id;
HTC_HANDLE htc_handle;
wmi_handle = get_wmi_unified_hdl_from_psoc(psoc);
if (!wmi_handle) {
@@ -634,6 +656,20 @@ target_if_mgmt_rx_reo_schedule_delivery(struct wlan_objmgr_psoc *psoc)
return QDF_STATUS_E_NULL_VALUE;
}
htc_handle = lmac_get_htc_hdl(psoc);
if (!htc_handle) {
mgmt_rx_reo_err("HTC_handle is NULL");
return QDF_STATUS_E_NULL_VALUE;
}
wmi_endpoint_id = wmi_get_endpoint(wmi_handle);
status = htc_enable_custom_cb(htc_handle, wmi_endpoint_id);
if (QDF_IS_STATUS_ERROR(status)) {
mgmt_rx_reo_err("Failed to schedule delivery");
return status;
}
return QDF_STATUS_SUCCESS;
}
@@ -647,14 +683,10 @@ target_if_mgmt_rx_reo_schedule_delivery(struct wlan_objmgr_psoc *psoc)
static QDF_STATUS
target_if_mgmt_rx_reo_cancel_scheduled_delivery(struct wlan_objmgr_psoc *psoc)
{
struct hif_opaque_softc *hif_handle;
struct wmi_unified *wmi_handle;
hif_handle = lmac_get_hif_hdl(psoc);
if (!hif_handle) {
mgmt_rx_reo_err("HIF handle is null");
return QDF_STATUS_E_NULL_VALUE;
}
QDF_STATUS status;
HTC_ENDPOINT_ID wmi_endpoint_id;
HTC_HANDLE htc_handle;
wmi_handle = get_wmi_unified_hdl_from_psoc(psoc);
if (!wmi_handle) {
@@ -662,6 +694,20 @@ target_if_mgmt_rx_reo_cancel_scheduled_delivery(struct wlan_objmgr_psoc *psoc)
return QDF_STATUS_E_NULL_VALUE;
}
htc_handle = lmac_get_htc_hdl(psoc);
if (!htc_handle) {
mgmt_rx_reo_err("HTC_handle is NULL");
return QDF_STATUS_E_NULL_VALUE;
}
wmi_endpoint_id = wmi_get_endpoint(wmi_handle);
status = htc_disable_custom_cb(htc_handle, wmi_endpoint_id);
if (QDF_IS_STATUS_ERROR(status)) {
mgmt_rx_reo_err("Failed to cancel scheduled delivery");
return status;
}
return QDF_STATUS_SUCCESS;
}
@@ -719,29 +765,3 @@ target_if_mgmt_rx_reo_host_drop_handler(struct wlan_objmgr_pdev *pdev,
return mgmt_rx_reo_rx_ops->host_drop_handler(pdev, params->reo_params);
}
void target_if_mgmt_rx_reo_release_frames(void *arg)
{
ol_scn_t scn = arg;
struct wlan_objmgr_psoc *psoc;
struct wlan_lmac_if_mgmt_rx_reo_rx_ops *mgmt_rx_reo_rx_ops;
QDF_STATUS status;
psoc = target_if_get_psoc_from_scn_hdl(scn);
if (!psoc) {
mgmt_rx_reo_err("null psoc");
return;
}
mgmt_rx_reo_rx_ops = target_if_mgmt_rx_reo_get_rx_ops(psoc);
if (!mgmt_rx_reo_rx_ops) {
mgmt_rx_reo_err("rx_ops of MGMT Rx REO module is NULL");
return;
}
status = mgmt_rx_reo_rx_ops->release_frames(psoc);
if (QDF_IS_STATUS_ERROR(status)) {
mgmt_rx_reo_err("Failed to release entries, ret = %d", status);
return;
}
}