qcacmn: Add support to force power save the active MLO links

Add MLO manager and target interface support to force power
save on all the active MLO links for a defined number of
beacon periods. Force power save allows the firmware to
suspend STA links for X beacon periods and remain asleep
even if the AP advertises TIM as opposed to regular power
save mode where STA links wake up if the AP indicates that
it has buffered data to send.

Change-Id: Idb3ea42cfc2333a4b177780d09ddec6904ea0c16
CRs-Fixed: 3514468
This commit is contained in:
Gururaj Pandurangi
2023-05-30 12:53:48 -07:00
committed by Rahul Choudhary
parent 8e742a10a9
commit 2d67497cfb
6 changed files with 93 additions and 0 deletions

View File

@@ -93,6 +93,16 @@ QDF_STATUS target_if_mlo_send_link_removal_cmd(
struct wlan_objmgr_psoc *psoc,
const struct mlo_link_removal_cmd_params *param);
/**
* target_if_mlo_send_vdev_pause() - Send WMI command for MLO vdev pause
* @psoc: psoc pointer
* @info: MLO vdev pause information
*
* Return: QDF_STATUS of operation
*/
QDF_STATUS target_if_mlo_send_vdev_pause(struct wlan_objmgr_psoc *psoc,
struct mlo_vdev_pause *info);
/**
* target_if_extract_mlo_link_removal_info_mgmt_rx() - Extract MLO link removal
* information from MGMT Rx event

View File

@@ -631,6 +631,25 @@ QDF_STATUS target_if_mlo_send_link_removal_cmd(
return wmi_send_mlo_link_removal_cmd(wmi_handle, param);
}
QDF_STATUS target_if_mlo_send_vdev_pause(struct wlan_objmgr_psoc *psoc,
struct mlo_vdev_pause *info)
{
struct wmi_unified *wmi_handle;
if (!psoc) {
target_if_err("null psoc");
return QDF_STATUS_E_NULL_VALUE;
}
wmi_handle = get_wmi_unified_hdl_from_psoc(psoc);
if (!wmi_handle) {
target_if_err("null handle");
return QDF_STATUS_E_FAILURE;
}
return wmi_send_mlo_vdev_pause(wmi_handle, info);
}
/**
* target_if_mlo_register_tx_ops() - lmac handler to register mlo tx ops
* callback functions
@@ -664,6 +683,8 @@ target_if_mlo_register_tx_ops(struct wlan_lmac_if_tx_ops *tx_ops)
mlo_tx_ops->send_link_removal_cmd = target_if_mlo_send_link_removal_cmd;
mlo_tx_ops->request_link_state_info_cmd =
target_if_request_ml_link_state_info;
mlo_tx_ops->send_vdev_pause = target_if_mlo_send_vdev_pause;
return QDF_STATUS_SUCCESS;
}