return ret;
 }
 
+int wcn36xx_smd_enter_imps(struct wcn36xx *wcn)
+{
+       struct wcn36xx_hal_enter_imps_req_msg msg_body;
+       int ret;
+
+       mutex_lock(&wcn->hal_mutex);
+       INIT_HAL_MSG(msg_body, WCN36XX_HAL_ENTER_IMPS_REQ);
+
+       PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+       ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+       if (ret) {
+               wcn36xx_err("Sending hal_enter_imps failed\n");
+               goto out;
+       }
+       ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+       if (ret) {
+               wcn36xx_err("hal_enter_imps response failed err=%d\n", ret);
+               goto out;
+       }
+
+       wcn36xx_dbg(WCN36XX_DBG_HAL, "Entered idle mode\n");
+out:
+       mutex_unlock(&wcn->hal_mutex);
+       return ret;
+}
+
+int wcn36xx_smd_exit_imps(struct wcn36xx *wcn)
+{
+       struct wcn36xx_hal_exit_imps_req_msg msg_body;
+       int ret;
+
+       mutex_lock(&wcn->hal_mutex);
+       INIT_HAL_MSG(msg_body, WCN36XX_HAL_EXIT_IMPS_REQ);
+
+       PREPARE_HAL_BUF(wcn->hal_buf, msg_body);
+
+       ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len);
+       if (ret) {
+               wcn36xx_err("Sending hal_exit_imps failed\n");
+               goto out;
+       }
+       ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len);
+       if (ret) {
+               wcn36xx_err("hal_exit_imps response failed err=%d\n", ret);
+               goto out;
+       }
+       wcn36xx_dbg(WCN36XX_DBG_HAL, "Exited idle mode\n");
+out:
+       mutex_unlock(&wcn->hal_mutex);
+       return ret;
+}
+
 int wcn36xx_smd_set_power_params(struct wcn36xx *wcn, bool ignore_dtim)
 {
        struct wcn36xx_hal_set_power_params_req_msg msg_body;
        case WCN36XX_HAL_GTK_OFFLOAD_RSP:
        case WCN36XX_HAL_GTK_OFFLOAD_GETINFO_RSP:
        case WCN36XX_HAL_HOST_RESUME_RSP:
+       case WCN36XX_HAL_ENTER_IMPS_RSP:
+       case WCN36XX_HAL_EXIT_IMPS_RSP:
                memcpy(wcn->hal_buf, buf, len);
                wcn->hal_rsp_len = len;
                complete(&wcn->hal_rsp_compl);