diff options
author | Himanshu Agarwal <himanaga@codeaurora.org> | 2018-01-24 22:24:17 +0530 |
---|---|---|
committer | snandini <snandini@codeaurora.org> | 2018-02-06 17:33:03 -0800 |
commit | c4cec662cfc96a80bc80ebedd5c31b2bf6c2310d (patch) | |
tree | b08f509a43c4c84f98a9f311a3dba6a78dac4a79 /target_if | |
parent | f31b24105bd65287845361ce60173b46b95d3633 (diff) | |
download | qca-wfi-host-cmn-c4cec662cfc96a80bc80ebedd5c31b2bf6c2310d.tar.gz |
qcacmn: Remove dependency on WMA layer for green AP component
Remove dependency on WMA layer for green AP component by registering
green AP events through target_if layer.
Change-Id: I8fe9079c6ba6b23cd5f1d98a7d1b333fde31f19b
CRs-Fixed: 2178143
Diffstat (limited to 'target_if')
-rw-r--r-- | target_if/green_ap/inc/target_if_green_ap.h | 10 | ||||
-rw-r--r-- | target_if/green_ap/src/target_if_green_ap.c | 73 |
2 files changed, 83 insertions, 0 deletions
diff --git a/target_if/green_ap/inc/target_if_green_ap.h b/target_if/green_ap/inc/target_if_green_ap.h index 46666069f..9fa04e57f 100644 --- a/target_if/green_ap/inc/target_if_green_ap.h +++ b/target_if/green_ap/inc/target_if_green_ap.h @@ -38,6 +38,16 @@ QDF_STATUS target_if_register_green_ap_tx_ops( struct wlan_lmac_if_tx_ops *tx_ops); /** + * target_if_green_ap_register_egap_event_handler() - registers enhanced + * green ap event handler + * @pdev: objmgr pdev + * + * Return: QDF_STATUS in case of success + */ +QDF_STATUS target_if_green_ap_register_egap_event_handler( + struct wlan_objmgr_pdev *pdev); + +/** * target_if_green_ap_enable_egap() - enable enhanced green ap * @pdev: pdev pointer * @egap_params: enhanced green ap params diff --git a/target_if/green_ap/src/target_if_green_ap.c b/target_if/green_ap/src/target_if_green_ap.c index 185bca79e..9477ec471 100644 --- a/target_if/green_ap/src/target_if_green_ap.c +++ b/target_if/green_ap/src/target_if_green_ap.c @@ -48,6 +48,79 @@ QDF_STATUS target_if_register_green_ap_tx_ops( return QDF_STATUS_SUCCESS; } +/** + * target_if_green_ap_egap_status_info_event() - egap status info event + * @scn: pointer to scn handle + * @evt_buf: pointer to event buffer + * @data_len: data len of the event buffer + * + * Return: 0 for success, otherwise appropriate error code + */ +static int target_if_green_ap_egap_status_info_event( + ol_scn_t scn, uint8_t *evt_buf, uint32_t data_len) +{ + struct wlan_objmgr_pdev *pdev; + struct wlan_green_ap_egap_status_info egap_status_info_params; + + pdev = target_if_get_pdev_from_scn_hdl(scn); + if (!pdev) { + green_ap_err("pdev is null"); + return QDF_STATUS_E_FAILURE; + } + + if (wmi_extract_green_ap_egap_status_info(GET_WMI_HDL_FROM_PDEV(pdev), + evt_buf, + &egap_status_info_params) != + QDF_STATUS_SUCCESS) { + green_ap_err("unable to extract green ap egap status info"); + return QDF_STATUS_E_FAILURE; + } + + green_ap_debug("mac_id: %d, status: %d, tx_mask: %x, rx_mask: %d", + egap_status_info_params.mac_id, + egap_status_info_params.status, + egap_status_info_params.tx_chainmask, + egap_status_info_params.rx_chainmask); + + return 0; +} + +QDF_STATUS target_if_green_ap_register_egap_event_handler( + struct wlan_objmgr_pdev *pdev) +{ + struct wlan_pdev_green_ap_ctx *green_ap_ctx; + struct wlan_green_ap_egap_params *egap_params; + int ret; + + if (!pdev || !GET_WMI_HDL_FROM_PDEV(pdev)) { + green_ap_err("pdev or pdev->tgt_if_handle is null"); + return QDF_STATUS_E_INVAL; + } + + green_ap_ctx = wlan_objmgr_pdev_get_comp_private_obj( + pdev, WLAN_UMAC_COMP_GREEN_AP); + if (!green_ap_ctx) { + green_ap_err("green ap context obtained is NULL"); + return QDF_STATUS_E_FAILURE; + } + egap_params = &green_ap_ctx->egap_params; + + ret = wmi_unified_register_event_handler( + GET_WMI_HDL_FROM_PDEV(pdev), + wmi_ap_ps_egap_info_event_id, + target_if_green_ap_egap_status_info_event, + WMI_RX_UMAC_CTX); + if (ret < 0) { + green_ap_err("Failed to register Enhance Green AP event"); + egap_params->fw_egap_support = false; + } else { + green_ap_info("Set the Enhance Green AP event handler"); + egap_params->fw_egap_support = true; + } + + return QDF_STATUS_SUCCESS; +} + QDF_STATUS target_if_green_ap_enable_egap( struct wlan_objmgr_pdev *pdev, struct wlan_green_ap_egap_params *egap_params) |