Lines Matching defs:ar

39 int ath12k_wow_enable(struct ath12k *ar)
41 struct ath12k_base *ab = ar->ab;
54 ret = ath12k_wmi_wow_enable(ar);
81 int ath12k_wow_wakeup(struct ath12k *ar)
83 struct ath12k_base *ab = ar->ab;
88 ret = ath12k_wmi_wow_host_wakeup_ind(ar);
106 struct ath12k *ar = arvif->ar;
110 ret = ath12k_wmi_wow_add_wakeup_event(ar, arvif->vdev_id, i, 0);
112 ath12k_warn(ar->ab, "failed to issue wow wakeup for event %s on vdev %i: %d\n",
118 for (i = 0; i < ar->wow.max_num_patterns; i++) {
119 ret = ath12k_wmi_wow_del_pattern(ar, arvif->vdev_id, i);
121 ath12k_warn(ar->ab, "failed to delete wow pattern %d for vdev %i: %d\n",
130 static int ath12k_wow_cleanup(struct ath12k *ar)
135 lockdep_assert_wiphy(ath12k_ar_to_hw(ar)->wiphy);
137 list_for_each_entry(arvif, &ar->arvifs, list) {
140 ath12k_warn(ar->ab, "failed to clean wow wakeups on vdev %i: %d\n",
160 ath12k_wow_convert_8023_to_80211(struct ath12k *ar,
264 ath12k_wow_pno_check_and_convert(struct ath12k *ar, u32 vdev_id,
337 ath12k_warn(ar->ab, "Invalid number of PNO scan plans: %d",
361 struct ath12k *ar = arvif->ar;
399 ar->nlo_enabled = true;
401 ret = ath12k_wow_pno_check_and_convert(ar, arvif->vdev_id,
404 ath12k_wmi_wow_config_pno(ar, arvif->vdev_id, pno);
422 if (ar->ab->wow.wmi_conf_rx_decap_mode ==
424 ath12k_wow_convert_8023_to_80211(ar, eth_pattern,
442 ret = ath12k_wmi_wow_add_pattern(ar, arvif->vdev_id,
449 ath12k_warn(ar->ab, "failed to add pattern %i to vdev %i: %d\n",
462 ret = ath12k_wmi_wow_add_wakeup_event(ar, arvif->vdev_id, i, 1);
464 ath12k_warn(ar->ab, "failed to enable wakeup event %s on vdev %i: %d\n",
473 static int ath12k_wow_set_wakeups(struct ath12k *ar,
479 lockdep_assert_wiphy(ath12k_ar_to_hw(ar)->wiphy);
481 list_for_each_entry(arvif, &ar->arvifs, list) {
486 ath12k_warn(ar->ab, "failed to set wow wakeups on vdev %i: %d\n",
495 static int ath12k_wow_vdev_clean_nlo(struct ath12k *ar, u32 vdev_id)
500 if (!ar->nlo_enabled)
508 ret = ath12k_wmi_wow_config_pno(ar, vdev_id, pno);
510 ath12k_warn(ar->ab, "failed to disable PNO: %d", ret);
514 ar->nlo_enabled = false;
523 struct ath12k *ar = arvif->ar;
527 return ath12k_wow_vdev_clean_nlo(ar, arvif->vdev_id);
533 static int ath12k_wow_nlo_cleanup(struct ath12k *ar)
538 lockdep_assert_wiphy(ath12k_ar_to_hw(ar)->wiphy);
540 list_for_each_entry(arvif, &ar->arvifs, list) {
546 ath12k_warn(ar->ab, "failed to clean nlo settings on vdev %i: %d\n",
555 static int ath12k_wow_set_hw_filter(struct ath12k *ar)
561 lockdep_assert_wiphy(ath12k_ar_to_hw(ar)->wiphy);
563 list_for_each_entry(arvif, &ar->arvifs, list) {
570 ret = ath12k_wmi_hw_data_filter_cmd(ar, &arg);
572 ath12k_warn(ar->ab, "failed to set hw data filter on vdev %i: %d\n",
581 static int ath12k_wow_clear_hw_filter(struct ath12k *ar)
587 lockdep_assert_wiphy(ath12k_ar_to_hw(ar)->wiphy);
589 list_for_each_entry(arvif, &ar->arvifs, list) {
596 ret = ath12k_wmi_hw_data_filter_cmd(ar, &arg);
599 ath12k_warn(ar->ab, "failed to clear hw data filter on vdev %i: %d\n",
633 struct ath12k_base *ab = arvif->ar->ab;
718 struct ath12k_base *ab = arvif->ar->ab;
732 static int ath12k_wow_arp_ns_offload(struct ath12k *ar, bool enable)
739 lockdep_assert_wiphy(ath12k_ar_to_hw(ar)->wiphy);
745 list_for_each_entry(arvif, &ar->arvifs, list) {
757 ret = ath12k_wmi_arp_ns_offload(ar, arvif, offload, enable);
759 ath12k_warn(ar->ab, "failed to set arp ns offload vdev %i: enable %d, ret %d\n",
770 static int ath12k_gtk_rekey_offload(struct ath12k *ar, bool enable)
775 lockdep_assert_wiphy(ath12k_ar_to_hw(ar)->wiphy);
777 list_for_each_entry(arvif, &ar->arvifs, list) {
785 ret = ath12k_wmi_gtk_rekey_getinfo(ar, arvif);
787 ath12k_warn(ar->ab, "failed to request rekey info vdev %i, ret %d\n",
793 ret = ath12k_wmi_gtk_rekey_offload(ar, arvif, enable);
796 ath12k_warn(ar->ab, "failed to offload gtk reky vdev %i: enable %d, ret %d\n",
805 static int ath12k_wow_protocol_offload(struct ath12k *ar, bool enable)
809 ret = ath12k_wow_arp_ns_offload(ar, enable);
811 ath12k_warn(ar->ab, "failed to offload ARP and NS %d %d\n",
816 ret = ath12k_gtk_rekey_offload(ar, enable);
818 ath12k_warn(ar->ab, "failed to offload gtk rekey %d %d\n",
826 static int ath12k_wow_set_keepalive(struct ath12k *ar,
833 lockdep_assert_wiphy(ath12k_ar_to_hw(ar)->wiphy);
835 list_for_each_entry(arvif, &ar->arvifs, list) {
848 struct ath12k *ar = ath12k_ah_to_ar(ah, 0);
853 ret = ath12k_wow_cleanup(ar);
855 ath12k_warn(ar->ab, "failed to clear wow wakeup events: %d\n",
860 ret = ath12k_wow_set_wakeups(ar, wowlan);
862 ath12k_warn(ar->ab, "failed to set wow wakeup events: %d\n",
867 ret = ath12k_wow_protocol_offload(ar, true);
869 ath12k_warn(ar->ab, "failed to set wow protocol offload events: %d\n",
874 ret = ath12k_mac_wait_tx_complete(ar);
876 ath12k_warn(ar->ab, "failed to wait tx complete: %d\n", ret);
880 ret = ath12k_wow_set_hw_filter(ar);
882 ath12k_warn(ar->ab, "failed to set hw filter: %d\n",
887 ret = ath12k_wow_set_keepalive(ar,
891 ath12k_warn(ar->ab, "failed to enable wow keepalive: %d\n", ret);
895 ret = ath12k_wow_enable(ar);
897 ath12k_warn(ar->ab, "failed to start wow: %d\n", ret);
901 ath12k_hif_irq_disable(ar->ab);
902 ath12k_hif_ce_irq_disable(ar->ab);
904 ret = ath12k_hif_suspend(ar->ab);
906 ath12k_warn(ar->ab, "failed to suspend hif: %d\n", ret);
913 ath12k_wow_wakeup(ar);
916 ath12k_wow_cleanup(ar);
925 struct ath12k *ar = ath12k_ah_to_ar(ah, 0);
929 device_set_wakeup_enable(ar->ab->dev, enabled);
935 struct ath12k *ar = ath12k_ah_to_ar(ah, 0);
940 ret = ath12k_hif_resume(ar->ab);
942 ath12k_warn(ar->ab, "failed to resume hif: %d\n", ret);
946 ath12k_hif_ce_irq_enable(ar->ab);
947 ath12k_hif_irq_enable(ar->ab);
949 ret = ath12k_wow_wakeup(ar);
951 ath12k_warn(ar->ab, "failed to wakeup from wow: %d\n", ret);
955 ret = ath12k_wow_nlo_cleanup(ar);
957 ath12k_warn(ar->ab, "failed to cleanup nlo: %d\n", ret);
961 ret = ath12k_wow_clear_hw_filter(ar);
963 ath12k_warn(ar->ab, "failed to clear hw filter: %d\n", ret);
967 ret = ath12k_wow_protocol_offload(ar, false);
969 ath12k_warn(ar->ab, "failed to clear wow protocol offload events: %d\n",
974 ret = ath12k_wow_set_keepalive(ar,
978 ath12k_warn(ar->ab, "failed to disable wow keepalive: %d\n", ret);
994 ath12k_warn(ar->ab, "encountered unexpected device state %d on resume, cannot recover\n",
1004 int ath12k_wow_init(struct ath12k *ar)
1006 if (!test_bit(WMI_TLV_SERVICE_WOW, ar->wmi->wmi_ab->svc_map))
1009 ar->wow.wowlan_support = ath12k_wowlan_support;
1011 if (ar->ab->wow.wmi_conf_rx_decap_mode == ATH12K_HW_TXRX_NATIVE_WIFI) {
1012 ar->wow.wowlan_support.pattern_max_len -= WOW_MAX_REDUCE;
1013 ar->wow.wowlan_support.max_pkt_offset -= WOW_MAX_REDUCE;
1016 if (test_bit(WMI_TLV_SERVICE_NLO, ar->wmi->wmi_ab->svc_map)) {
1017 ar->wow.wowlan_support.flags |= WIPHY_WOWLAN_NET_DETECT;
1018 ar->wow.wowlan_support.max_nd_match_sets = WMI_PNO_MAX_SUPP_NETWORKS;
1021 ar->wow.max_num_patterns = ATH12K_WOW_PATTERNS;
1022 ar->wow.wowlan_support.n_patterns = ar->wow.max_num_patterns;
1023 ar->ah->hw->wiphy->wowlan = &ar->wow.wowlan_support;
1025 device_set_wakeup_capable(ar->ab->dev, true);