Lines Matching defs:rtwdev
15 void rtw89_wow_parse_akm(struct rtw89_dev *rtwdev, struct sk_buff *skb)
18 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
62 static int _pn_to_iv(struct rtw89_dev *rtwdev, struct ieee80211_key_conf *key,
92 static int rtw89_rx_pn_to_iv(struct rtw89_dev *rtwdev,
110 err = _pn_to_iv(rtwdev, key, iv, pn, key->keyidx);
114 rtw89_debug(rtwdev, RTW89_DBG_WOW, "%s key %d pn-%llx to iv-%*ph\n",
120 static int rtw89_tx_pn_to_iv(struct rtw89_dev *rtwdev,
128 err = _pn_to_iv(rtwdev, key, iv, pn, key->keyidx);
132 rtw89_debug(rtwdev, RTW89_DBG_WOW, "%s key %d pn-%llx to iv-%*ph\n",
138 static int _iv_to_pn(struct rtw89_dev *rtwdev, u8 *iv, u64 *pn, u8 *key_id,
168 static int rtw89_rx_iv_to_pn(struct rtw89_dev *rtwdev,
176 err = _iv_to_pn(rtwdev, iv, &pn, NULL, key);
189 rtw89_debug(rtwdev, RTW89_DBG_WOW, "%s key %d iv-%*ph to pn-%*ph\n",
195 static int rtw89_tx_iv_to_pn(struct rtw89_dev *rtwdev,
202 err = _iv_to_pn(rtwdev, iv, &pn, NULL, key);
207 rtw89_debug(rtwdev, RTW89_DBG_WOW, "%s key %d iv-%*ph to pn-%llx\n",
213 static int rtw89_rx_pn_get_pmf(struct rtw89_dev *rtwdev,
238 rtw89_debug(rtwdev, RTW89_DBG_WOW, "%s key %d pn-%llx\n",
244 static int rtw89_rx_pn_set_pmf(struct rtw89_dev *rtwdev,
248 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
264 rtw89_debug(rtwdev, RTW89_DBG_WOW, "%s key %d pn-%*ph\n",
276 struct rtw89_dev *rtwdev = hw->priv;
277 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
293 ret = rtw89_tx_pn_to_iv(rtwdev, key,
297 ret = rtw89_rx_pn_to_iv(rtwdev, key,
305 ret = rtw89_rx_pn_to_iv(rtwdev, key,
315 ret = rtw89_rx_pn_get_pmf(rtwdev, key, gtk_info);
330 rtw89_debug(rtwdev, RTW89_DBG_WOW, "unsupport cipher %x\n",
346 struct rtw89_dev *rtwdev = hw->priv;
347 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
360 ret = rtw89_rx_iv_to_pn(rtwdev, key,
367 ret = rtw89_tx_iv_to_pn(rtwdev, key,
374 ret = rtw89_rx_iv_to_pn(rtwdev, key,
388 ret = rtw89_rx_pn_set_pmf(rtwdev, key,
398 rtw89_debug(rtwdev, RTW89_DBG_WOW, "unsupport cipher %x\n",
409 static void rtw89_wow_key_clear(struct rtw89_dev *rtwdev)
411 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
420 static void rtw89_wow_construct_key_info(struct rtw89_dev *rtwdev)
422 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
424 struct ieee80211_vif *wow_vif = rtwdev->wow.wow_vif;
428 ieee80211_iter_keys_rcu(rtwdev->hw, wow_vif,
433 rtw89_wow_key_clear(rtwdev);
442 static void rtw89_wow_debug_aoac_rpt(struct rtw89_dev *rtwdev)
444 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
447 if (!rtw89_debug_is_enabled(rtwdev, RTW89_DBG_WOW))
450 rtw89_debug(rtwdev, RTW89_DBG_WOW, "[aoac_rpt] rpt_ver = %d\n",
452 rtw89_debug(rtwdev, RTW89_DBG_WOW, "[aoac_rpt] sec_type = %d\n",
454 rtw89_debug(rtwdev, RTW89_DBG_WOW, "[aoac_rpt] key_idx = %d\n",
456 rtw89_debug(rtwdev, RTW89_DBG_WOW, "[aoac_rpt] pattern_idx = %d\n",
458 rtw89_debug(rtwdev, RTW89_DBG_WOW, "[aoac_rpt] rekey_ok = %d\n",
460 rtw89_debug(rtwdev, RTW89_DBG_WOW, "[aoac_rpt] ptk_tx_iv = %*ph\n",
462 rtw89_debug(rtwdev, RTW89_DBG_WOW,
465 rtw89_debug(rtwdev, RTW89_DBG_WOW, "[aoac_rpt] ptk_rx_iv = %*ph\n",
467 rtw89_debug(rtwdev, RTW89_DBG_WOW, "[aoac_rpt] gtk_rx_iv[0] = %*ph\n",
469 rtw89_debug(rtwdev, RTW89_DBG_WOW, "[aoac_rpt] gtk_rx_iv[1] = %*ph\n",
471 rtw89_debug(rtwdev, RTW89_DBG_WOW, "[aoac_rpt] gtk_rx_iv[2] = %*ph\n",
473 rtw89_debug(rtwdev, RTW89_DBG_WOW, "[aoac_rpt] gtk_rx_iv[3] = %*ph\n",
475 rtw89_debug(rtwdev, RTW89_DBG_WOW, "[aoac_rpt] igtk_key_id = %llu\n",
477 rtw89_debug(rtwdev, RTW89_DBG_WOW, "[aoac_rpt] igtk_ipn = %llu\n",
479 rtw89_debug(rtwdev, RTW89_DBG_WOW, "[aoac_rpt] igtk = %*ph\n",
483 static int rtw89_wow_get_aoac_rpt_reg(struct rtw89_dev *rtwdev)
485 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
495 ret = rtw89_fw_msg_reg(rtwdev, &h2c_info, &c2h_info);
529 ret = rtw89_fw_msg_reg(rtwdev, &h2c_info, &c2h_info);
569 static int rtw89_wow_get_aoac_rpt(struct rtw89_dev *rtwdev, bool rx_ready)
571 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
578 ret = rtw89_wow_get_aoac_rpt_reg(rtwdev);
580 rtw89_err(rtwdev, "wow: failed to get aoac rpt by reg\n");
584 ret = rtw89_fw_h2c_wow_request_aoac(rtwdev);
586 rtw89_err(rtwdev, "wow: failed to get aoac rpt by pkt\n");
591 rtw89_wow_debug_aoac_rpt(rtwdev);
596 static struct ieee80211_key_conf *rtw89_wow_gtk_rekey(struct rtw89_dev *rtwdev,
599 struct ieee80211_vif *wow_vif = rtwdev->wow.wow_vif;
620 mutex_unlock(&rtwdev->mutex);
622 mutex_lock(&rtwdev->mutex);
626 rtw89_err(rtwdev, "ieee80211_gtk_rekey_add failed\n");
633 static void rtw89_wow_update_key_info(struct rtw89_dev *rtwdev, bool rx_ready)
635 struct ieee80211_vif *wow_vif = rtwdev->wow.wow_vif;
636 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
643 ieee80211_iter_keys_rcu(rtwdev->hw, wow_vif,
648 rtw89_debug(rtwdev, RTW89_DBG_WOW, "%s error\n", __func__);
655 key = rtw89_wow_gtk_rekey(rtwdev, data.gtk_cipher, aoac_rpt->key_idx,
660 rtw89_rx_iv_to_pn(rtwdev, key,
666 key = rtw89_wow_gtk_rekey(rtwdev, data.igtk_cipher, aoac_rpt->igtk_key_id,
671 rtw89_rx_pn_set_pmf(rtwdev, key, aoac_rpt->igtk_ipn);
677 static void rtw89_wow_leave_deep_ps(struct rtw89_dev *rtwdev)
679 __rtw89_leave_ps_mode(rtwdev);
682 static void rtw89_wow_enter_deep_ps(struct rtw89_dev *rtwdev)
684 struct ieee80211_vif *wow_vif = rtwdev->wow.wow_vif;
687 __rtw89_enter_ps_mode(rtwdev, rtwvif);
690 static void rtw89_wow_enter_lps(struct rtw89_dev *rtwdev)
692 struct ieee80211_vif *wow_vif = rtwdev->wow.wow_vif;
695 rtw89_enter_lps(rtwdev, rtwvif, false);
698 static void rtw89_wow_leave_lps(struct rtw89_dev *rtwdev)
700 rtw89_leave_lps(rtwdev);
703 static int rtw89_wow_config_mac(struct rtw89_dev *rtwdev, bool enable_wow)
705 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
707 return mac->wow_config_mac(rtwdev, enable_wow);
710 static void rtw89_wow_set_rx_filter(struct rtw89_dev *rtwdev, bool enable)
712 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
717 mac->typ_fltr_opt(rtwdev, RTW89_MGNT, fwd_target, RTW89_MAC_0);
718 mac->typ_fltr_opt(rtwdev, RTW89_CTRL, fwd_target, RTW89_MAC_0);
719 mac->typ_fltr_opt(rtwdev, RTW89_DATA, fwd_target, RTW89_MAC_0);
722 static void rtw89_wow_show_wakeup_reason(struct rtw89_dev *rtwdev)
724 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
733 if (RTW89_CHK_FW_FEATURE(WOW_REASON_V1, &rtwdev->fw))
734 wow_reason_reg = rtwdev->chip->wow_reason_reg[RTW89_WOW_REASON_V1];
736 wow_reason_reg = rtwdev->chip->wow_reason_reg[RTW89_WOW_REASON_V0];
738 reason = rtw89_read8(rtwdev, wow_reason_reg);
742 rtw89_debug(rtwdev, RTW89_DBG_WOW, "WOW: Rx deauth\n");
746 rtw89_debug(rtwdev, RTW89_DBG_WOW, "WOW: AP is off\n");
750 rtw89_debug(rtwdev, RTW89_DBG_WOW, "WOW: Rx magic packet\n");
754 rtw89_debug(rtwdev, RTW89_DBG_WOW, "WOW: Rx gtk rekey\n");
758 rtw89_debug(rtwdev, RTW89_DBG_WOW, "WOW: Rx pattern match packet\n");
766 rtw89_debug(rtwdev, RTW89_DBG_WOW, "Rx NLO\n");
769 rtw89_warn(rtwdev, "Unknown wakeup reason %x\n", reason);
770 ieee80211_report_wowlan_wakeup(rtwdev->wow.wow_vif, NULL,
775 ieee80211_report_wowlan_wakeup(rtwdev->wow.wow_vif, &wakeup,
779 static void rtw89_wow_vif_iter(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif)
781 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
881 static int rtw89_wow_pattern_generate(struct rtw89_dev *rtwdev,
954 static int rtw89_wow_parse_patterns(struct rtw89_dev *rtwdev,
958 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
968 ret = rtw89_wow_pattern_generate(rtwdev, rtwvif,
972 rtw89_err(rtwdev, "failed to generate pattern(%d)\n", i);
988 static void rtw89_wow_pattern_clear_cam(struct rtw89_dev *rtwdev)
990 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
997 rtw89_fw_wow_cam_update(rtwdev, rtw_pattern);
1001 static void rtw89_wow_pattern_write(struct rtw89_dev *rtwdev)
1003 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
1008 rtw89_fw_wow_cam_update(rtwdev, rtw_pattern + i);
1011 static void rtw89_wow_pattern_clear(struct rtw89_dev *rtwdev)
1013 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
1015 rtw89_wow_pattern_clear_cam(rtwdev);
1021 static void rtw89_wow_clear_wakeups(struct rtw89_dev *rtwdev)
1023 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
1030 static int rtw89_wow_set_wakeups(struct rtw89_dev *rtwdev,
1033 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
1041 rtw89_for_each_rtwvif(rtwdev, rtwvif)
1042 rtw89_wow_vif_iter(rtwdev, rtwvif);
1048 return rtw89_wow_parse_patterns(rtwdev, rtwvif, wowlan);
1051 static int rtw89_wow_cfg_wake(struct rtw89_dev *rtwdev, bool wow)
1053 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
1074 ret = rtw89_fw_h2c_wow_wakeup_ctrl(rtwdev, rtwvif, wow);
1076 rtw89_err(rtwdev, "failed to fw wow wakeup ctrl\n");
1081 ret = rtw89_chip_h2c_dctl_sec_cam(rtwdev, rtwvif, rtwsta);
1083 rtw89_err(rtwdev, "failed to update dctl cam sec entry: %d\n",
1089 ret = rtw89_fw_h2c_cam(rtwdev, rtwvif, rtwsta, NULL);
1091 rtw89_warn(rtwdev, "failed to send h2c cam\n");
1095 ret = rtw89_fw_h2c_wow_global(rtwdev, rtwvif, wow);
1097 rtw89_err(rtwdev, "failed to fw wow global\n");
1104 static int rtw89_wow_check_fw_status(struct rtw89_dev *rtwdev, bool wow_enable)
1106 const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
1112 50, 50000, false, rtwdev,
1115 rtw89_err(rtwdev, "failed to check wow status %s\n",
1120 static int rtw89_wow_swap_fw(struct rtw89_dev *rtwdev, bool wow)
1123 enum rtw89_chip_gen chip_gen = rtwdev->chip->chip_gen;
1124 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
1127 enum rtw89_core_chip_id chip_id = rtwdev->chip->chip_id;
1128 const struct rtw89_chip_info *chip = rtwdev->chip;
1146 rtw89_hci_disable_intr(rtwdev);
1148 ret = rtw89_fw_download(rtwdev, fw_type, include_bb);
1150 rtw89_warn(rtwdev, "download fw failed\n");
1155 rtw89_hci_enable_intr(rtwdev);
1157 rtw89_phy_init_rf_reg(rtwdev, true);
1159 ret = rtw89_fw_h2c_role_maintain(rtwdev, rtwvif, rtwsta,
1162 rtw89_warn(rtwdev, "failed to send h2c role maintain\n");
1166 ret = rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, wow_vif, wow_sta);
1168 rtw89_warn(rtwdev, "failed to send h2c assoc cmac tbl\n");
1173 rtw89_cam_reset_keys(rtwdev);
1175 ret = rtw89_fw_h2c_join_info(rtwdev, rtwvif, rtwsta, !is_conn);
1177 rtw89_warn(rtwdev, "failed to send h2c join info\n");
1181 ret = rtw89_fw_h2c_cam(rtwdev, rtwvif, rtwsta, NULL);
1183 rtw89_warn(rtwdev, "failed to send h2c cam\n");
1188 ret = rtw89_fw_h2c_general_pkt(rtwdev, rtwvif, rtwsta->mac_id);
1190 rtw89_warn(rtwdev, "failed to send h2c general packet\n");
1193 rtw89_phy_ra_assoc(rtwdev, wow_sta);
1194 rtw89_phy_set_bss_color(rtwdev, wow_vif);
1195 rtw89_chip_cfg_txpwr_ul_tb_offset(rtwdev, wow_vif);
1199 rtw89_phy_rfk_pre_ntfy_and_wait(rtwdev, RTW89_PHY_0, 5);
1201 rtw89_mac_hw_mgnt_sec(rtwdev, wow);
1206 static int rtw89_wow_enable_trx_pre(struct rtw89_dev *rtwdev)
1210 rtw89_hci_ctrl_txdma_ch(rtwdev, false);
1211 rtw89_hci_ctrl_txdma_fw_ch(rtwdev, true);
1213 rtw89_mac_ptk_drop_by_band_and_wait(rtwdev, RTW89_MAC_0);
1215 ret = rtw89_hci_poll_txdma_ch_idle(rtwdev);
1217 rtw89_err(rtwdev, "txdma ch busy\n");
1220 rtw89_wow_set_rx_filter(rtwdev, true);
1222 ret = rtw89_mac_cfg_ppdu_status(rtwdev, RTW89_MAC_0, false);
1224 rtw89_err(rtwdev, "cfg ppdu status\n");
1231 static int rtw89_wow_enable_trx_post(struct rtw89_dev *rtwdev)
1235 rtw89_hci_disable_intr(rtwdev);
1236 rtw89_hci_ctrl_trxhci(rtwdev, false);
1238 ret = rtw89_hci_poll_txdma_ch_idle(rtwdev);
1240 rtw89_err(rtwdev, "failed to poll txdma ch idle pcie\n");
1244 ret = rtw89_wow_config_mac(rtwdev, true);
1246 rtw89_err(rtwdev, "failed to config mac\n");
1250 rtw89_wow_set_rx_filter(rtwdev, false);
1251 rtw89_hci_reset(rtwdev);
1256 static int rtw89_wow_disable_trx_pre(struct rtw89_dev *rtwdev)
1260 rtw89_hci_clr_idx_all(rtwdev);
1262 ret = rtw89_hci_rst_bdram(rtwdev);
1264 rtw89_warn(rtwdev, "reset bdram busy\n");
1268 rtw89_hci_ctrl_trxhci(rtwdev, true);
1269 rtw89_hci_ctrl_txdma_ch(rtwdev, true);
1271 ret = rtw89_wow_config_mac(rtwdev, false);
1273 rtw89_err(rtwdev, "failed to config mac\n");
1284 ret = rtw89_wow_get_aoac_rpt(rtwdev, false);
1286 rtw89_wow_update_key_info(rtwdev, false);
1288 rtw89_hci_enable_intr(rtwdev);
1289 ret = rtw89_wow_get_aoac_rpt(rtwdev, true);
1291 rtw89_wow_update_key_info(rtwdev, true);
1296 static int rtw89_wow_disable_trx_post(struct rtw89_dev *rtwdev)
1298 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
1302 ret = rtw89_mac_cfg_ppdu_status(rtwdev, RTW89_MAC_0, true);
1304 rtw89_err(rtwdev, "cfg ppdu status\n");
1306 rtw89_fw_h2c_set_bcn_fltr_cfg(rtwdev, vif, true);
1311 static int rtw89_wow_fw_start(struct rtw89_dev *rtwdev)
1313 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
1317 rtw89_wow_pattern_write(rtwdev);
1318 rtw89_wow_construct_key_info(rtwdev);
1320 ret = rtw89_fw_h2c_keep_alive(rtwdev, rtwvif, true);
1322 rtw89_err(rtwdev, "wow: failed to enable keep alive\n");
1326 ret = rtw89_fw_h2c_disconnect_detect(rtwdev, rtwvif, true);
1328 rtw89_err(rtwdev, "wow: failed to enable disconnect detect\n");
1332 ret = rtw89_fw_h2c_wow_gtk_ofld(rtwdev, rtwvif, true);
1334 rtw89_err(rtwdev, "wow: failed to enable GTK offload\n");
1338 ret = rtw89_fw_h2c_arp_offload(rtwdev, rtwvif, true);
1340 rtw89_warn(rtwdev, "wow: failed to enable arp offload\n");
1342 ret = rtw89_wow_cfg_wake(rtwdev, true);
1344 rtw89_err(rtwdev, "wow: failed to config wake\n");
1348 ret = rtw89_wow_check_fw_status(rtwdev, true);
1350 rtw89_err(rtwdev, "wow: failed to check enable fw ready\n");
1358 static int rtw89_wow_fw_stop(struct rtw89_dev *rtwdev)
1360 struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
1364 rtw89_wow_pattern_clear(rtwdev);
1366 ret = rtw89_fw_h2c_keep_alive(rtwdev, rtwvif, false);
1368 rtw89_err(rtwdev, "wow: failed to disable keep alive\n");
1372 ret = rtw89_fw_h2c_disconnect_detect(rtwdev, rtwvif, false);
1374 rtw89_err(rtwdev, "wow: failed to disable disconnect detect\n");
1378 ret = rtw89_fw_h2c_wow_gtk_ofld(rtwdev, rtwvif, false);
1380 rtw89_err(rtwdev, "wow: failed to disable GTK offload\n");
1384 ret = rtw89_fw_h2c_arp_offload(rtwdev, rtwvif, false);
1386 rtw89_warn(rtwdev, "wow: failed to disable arp offload\n");
1388 rtw89_wow_key_clear(rtwdev);
1389 rtw89_fw_release_general_pkt_list(rtwdev, true);
1391 ret = rtw89_wow_cfg_wake(rtwdev, false);
1393 rtw89_err(rtwdev, "wow: failed to disable config wake\n");
1397 ret = rtw89_wow_check_fw_status(rtwdev, false);
1399 rtw89_err(rtwdev, "wow: failed to check disable fw ready\n");
1407 static int rtw89_wow_enable(struct rtw89_dev *rtwdev)
1411 set_bit(RTW89_FLAG_WOWLAN, rtwdev->flags);
1413 ret = rtw89_wow_enable_trx_pre(rtwdev);
1415 rtw89_err(rtwdev, "wow: failed to enable trx_pre\n");
1419 rtw89_fw_release_general_pkt_list(rtwdev, true);
1421 ret = rtw89_wow_swap_fw(rtwdev, true);
1423 rtw89_err(rtwdev, "wow: failed to swap to wow fw\n");
1427 ret = rtw89_wow_fw_start(rtwdev);
1429 rtw89_err(rtwdev, "wow: failed to let wow fw start\n");
1433 rtw89_wow_enter_lps(rtwdev);
1435 ret = rtw89_wow_enable_trx_post(rtwdev);
1437 rtw89_err(rtwdev, "wow: failed to enable trx_post\n");
1444 clear_bit(RTW89_FLAG_WOWLAN, rtwdev->flags);
1448 static int rtw89_wow_disable(struct rtw89_dev *rtwdev)
1452 ret = rtw89_wow_disable_trx_pre(rtwdev);
1454 rtw89_err(rtwdev, "wow: failed to disable trx_pre\n");
1458 rtw89_wow_leave_lps(rtwdev);
1460 ret = rtw89_wow_fw_stop(rtwdev);
1462 rtw89_err(rtwdev, "wow: failed to swap to normal fw\n");
1466 ret = rtw89_wow_swap_fw(rtwdev, false);
1468 rtw89_err(rtwdev, "wow: failed to disable trx_post\n");
1472 ret = rtw89_wow_disable_trx_post(rtwdev);
1474 rtw89_err(rtwdev, "wow: failed to disable trx_pre\n");
1479 clear_bit(RTW89_FLAG_WOWLAN, rtwdev->flags);
1483 int rtw89_wow_resume(struct rtw89_dev *rtwdev)
1487 if (!test_bit(RTW89_FLAG_WOWLAN, rtwdev->flags)) {
1488 rtw89_err(rtwdev, "wow is not enabled\n");
1493 if (!rtw89_mac_get_power_state(rtwdev)) {
1494 rtw89_err(rtwdev, "chip is no power when resume\n");
1499 rtw89_wow_leave_deep_ps(rtwdev);
1501 rtw89_wow_show_wakeup_reason(rtwdev);
1503 ret = rtw89_wow_disable(rtwdev);
1505 rtw89_err(rtwdev, "failed to disable wow\n");
1508 rtw89_wow_clear_wakeups(rtwdev);
1512 int rtw89_wow_suspend(struct rtw89_dev *rtwdev, struct cfg80211_wowlan *wowlan)
1516 ret = rtw89_wow_set_wakeups(rtwdev, wowlan);
1518 rtw89_err(rtwdev, "failed to set wakeup event\n");
1522 rtw89_wow_leave_lps(rtwdev);
1524 ret = rtw89_wow_enable(rtwdev);
1526 rtw89_err(rtwdev, "failed to enable wow\n");
1530 rtw89_wow_enter_deep_ps(rtwdev);