|
@@ -7507,6 +7507,36 @@ lim_process_sme_cfg_action_frm_in_tb_ppdu(struct mac_context *mac_ctx,
|
|
|
lim_send_action_frm_tb_ppdu_cfg(mac_ctx, msg->vdev_id, msg->cfg);
|
|
|
}
|
|
|
|
|
|
+static void
|
|
|
+lim_process_sme_send_vdev_pause(struct mac_context *mac_ctx,
|
|
|
+ struct sme_vdev_pause *msg)
|
|
|
+{
|
|
|
+ struct pe_session *session;
|
|
|
+ uint16_t vdev_pause_dur_ms;
|
|
|
+
|
|
|
+ if (!msg) {
|
|
|
+ pe_err("Buffer is NULL");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ session = pe_find_session_by_vdev_id(mac_ctx, msg->session_id);
|
|
|
+ if (!session) {
|
|
|
+ pe_warn("Session does not exist for given BSSID");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!(wlan_vdev_mlme_get_opmode(session->vdev) == QDF_STA_MODE) &&
|
|
|
+ wlan_vdev_mlme_is_mlo_vdev(session->vdev)) {
|
|
|
+ pe_err("vdev is not ML STA");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ vdev_pause_dur_ms = session->beaconParams.beaconInterval *
|
|
|
+ msg->vdev_pause_duration;
|
|
|
+ wlan_mlo_send_vdev_pause(mac_ctx->psoc, session->vdev,
|
|
|
+ msg->session_id, vdev_pause_dur_ms);
|
|
|
+}
|
|
|
+
|
|
|
static void lim_process_sme_update_config(struct mac_context *mac_ctx,
|
|
|
struct update_config *msg)
|
|
|
{
|
|
@@ -8625,6 +8655,10 @@ bool lim_process_sme_req_messages(struct mac_context *mac,
|
|
|
lim_process_sme_cfg_action_frm_in_tb_ppdu(mac,
|
|
|
(struct sir_cfg_action_frm_tb_ppdu *)msg_buf);
|
|
|
break;
|
|
|
+ case eWNI_SME_VDEV_PAUSE_IND:
|
|
|
+ lim_process_sme_send_vdev_pause(mac,
|
|
|
+ (struct sme_vdev_pause *)msg_buf);
|
|
|
+ break;
|
|
|
default:
|
|
|
qdf_mem_free((void *)pMsg->bodyptr);
|
|
|
pMsg->bodyptr = NULL;
|