aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJanusz Dziedzic <janusz.dziedzic@tieto.com>2015-03-23 11:32:53 -0400
committerKalle Valo <kvalo@qca.qualcomm.com>2015-03-30 02:09:22 -0400
commitf5431e87ae0357bd72cfbfbe9552aa3d555c3800 (patch)
treee5f6bf94470a0d002cb77f91b34987500cd78f53
parentb3e71d7a51486b523ffef0abd517cd25e4ec9588 (diff)
ath10k: add WMI support for WOW
Add WMI support for WOW like enable, wakeup events and host wakeup indication. Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
-rw-r--r--drivers/net/wireless/ath/ath10k/wmi-ops.h70
-rw-r--r--drivers/net/wireless/ath/ath10k/wmi-tlv.c116
-rw-r--r--drivers/net/wireless/ath/ath10k/wmi-tlv.h21
-rw-r--r--drivers/net/wireless/ath/ath10k/wmi.h144
4 files changed, 349 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/ath10k/wmi-ops.h b/drivers/net/wireless/ath/ath10k/wmi-ops.h
index f0a8b8da5b22..bda9fe354656 100644
--- a/drivers/net/wireless/ath/ath10k/wmi-ops.h
+++ b/drivers/net/wireless/ath/ath10k/wmi-ops.h
@@ -47,6 +47,8 @@ struct wmi_ops {
47 struct ath10k_fw_stats *stats); 47 struct ath10k_fw_stats *stats);
48 int (*pull_roam_ev)(struct ath10k *ar, struct sk_buff *skb, 48 int (*pull_roam_ev)(struct ath10k *ar, struct sk_buff *skb,
49 struct wmi_roam_ev_arg *arg); 49 struct wmi_roam_ev_arg *arg);
50 int (*pull_wow_event)(struct ath10k *ar, struct sk_buff *skb,
51 struct wmi_wow_ev_arg *arg);
50 52
51 struct sk_buff *(*gen_pdev_suspend)(struct ath10k *ar, u32 suspend_opt); 53 struct sk_buff *(*gen_pdev_suspend)(struct ath10k *ar, u32 suspend_opt);
52 struct sk_buff *(*gen_pdev_resume)(struct ath10k *ar); 54 struct sk_buff *(*gen_pdev_resume)(struct ath10k *ar);
@@ -150,6 +152,11 @@ struct wmi_ops {
150 u32 num_ac); 152 u32 num_ac);
151 struct sk_buff *(*gen_sta_keepalive)(struct ath10k *ar, 153 struct sk_buff *(*gen_sta_keepalive)(struct ath10k *ar,
152 const struct wmi_sta_keepalive_arg *arg); 154 const struct wmi_sta_keepalive_arg *arg);
155 struct sk_buff *(*gen_wow_enable)(struct ath10k *ar);
156 struct sk_buff *(*gen_wow_add_wakeup_event)(struct ath10k *ar, u32 vdev_id,
157 enum wmi_wow_wakeup_event event,
158 u32 enable);
159 struct sk_buff *(*gen_wow_host_wakeup_ind)(struct ath10k *ar);
153}; 160};
154 161
155int ath10k_wmi_cmd_send(struct ath10k *ar, struct sk_buff *skb, u32 cmd_id); 162int ath10k_wmi_cmd_send(struct ath10k *ar, struct sk_buff *skb, u32 cmd_id);
@@ -286,6 +293,16 @@ ath10k_wmi_pull_roam_ev(struct ath10k *ar, struct sk_buff *skb,
286} 293}
287 294
288static inline int 295static inline int
296ath10k_wmi_pull_wow_event(struct ath10k *ar, struct sk_buff *skb,
297 struct wmi_wow_ev_arg *arg)
298{
299 if (!ar->wmi.ops->pull_wow_event)
300 return -EOPNOTSUPP;
301
302 return ar->wmi.ops->pull_wow_event(ar, skb, arg);
303}
304
305static inline int
289ath10k_wmi_mgmt_tx(struct ath10k *ar, struct sk_buff *msdu) 306ath10k_wmi_mgmt_tx(struct ath10k *ar, struct sk_buff *msdu)
290{ 307{
291 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(msdu); 308 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(msdu);
@@ -1072,4 +1089,57 @@ ath10k_wmi_sta_keepalive(struct ath10k *ar,
1072 return ath10k_wmi_cmd_send(ar, skb, cmd_id); 1089 return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1073} 1090}
1074 1091
1092static inline int
1093ath10k_wmi_wow_enable(struct ath10k *ar)
1094{
1095 struct sk_buff *skb;
1096 u32 cmd_id;
1097
1098 if (!ar->wmi.ops->gen_wow_enable)
1099 return -EOPNOTSUPP;
1100
1101 skb = ar->wmi.ops->gen_wow_enable(ar);
1102 if (IS_ERR(skb))
1103 return PTR_ERR(skb);
1104
1105 cmd_id = ar->wmi.cmd->wow_enable_cmdid;
1106 return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1107}
1108
1109static inline int
1110ath10k_wmi_wow_add_wakeup_event(struct ath10k *ar, u32 vdev_id,
1111 enum wmi_wow_wakeup_event event,
1112 u32 enable)
1113{
1114 struct sk_buff *skb;
1115 u32 cmd_id;
1116
1117 if (!ar->wmi.ops->gen_wow_add_wakeup_event)
1118 return -EOPNOTSUPP;
1119
1120 skb = ar->wmi.ops->gen_wow_add_wakeup_event(ar, vdev_id, event, enable);
1121 if (IS_ERR(skb))
1122 return PTR_ERR(skb);
1123
1124 cmd_id = ar->wmi.cmd->wow_enable_disable_wake_event_cmdid;
1125 return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1126}
1127
1128static inline int
1129ath10k_wmi_wow_host_wakeup_ind(struct ath10k *ar)
1130{
1131 struct sk_buff *skb;
1132 u32 cmd_id;
1133
1134 if (!ar->wmi.ops->gen_wow_host_wakeup_ind)
1135 return -EOPNOTSUPP;
1136
1137 skb = ar->wmi.ops->gen_wow_host_wakeup_ind(ar);
1138 if (IS_ERR(skb))
1139 return PTR_ERR(skb);
1140
1141 cmd_id = ar->wmi.cmd->wow_hostwakeup_from_sleep_cmdid;
1142 return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1143}
1144
1075#endif 1145#endif
diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.c b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
index 3eec042cd009..687ef8dd7003 100644
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
@@ -33,9 +33,9 @@ struct wmi_tlv_policy {
33 33
34static const struct wmi_tlv_policy wmi_tlv_policies[] = { 34static const struct wmi_tlv_policy wmi_tlv_policies[] = {
35 [WMI_TLV_TAG_ARRAY_BYTE] 35 [WMI_TLV_TAG_ARRAY_BYTE]
36 = { .min_len = sizeof(u8) }, 36 = { .min_len = 0 },
37 [WMI_TLV_TAG_ARRAY_UINT32] 37 [WMI_TLV_TAG_ARRAY_UINT32]
38 = { .min_len = sizeof(u32) }, 38 = { .min_len = 0 },
39 [WMI_TLV_TAG_STRUCT_SCAN_EVENT] 39 [WMI_TLV_TAG_STRUCT_SCAN_EVENT]
40 = { .min_len = sizeof(struct wmi_scan_event) }, 40 = { .min_len = sizeof(struct wmi_scan_event) },
41 [WMI_TLV_TAG_STRUCT_MGMT_RX_HDR] 41 [WMI_TLV_TAG_STRUCT_MGMT_RX_HDR]
@@ -68,6 +68,8 @@ static const struct wmi_tlv_policy wmi_tlv_policies[] = {
68 = { .min_len = sizeof(struct wmi_tlv_p2p_noa_ev) }, 68 = { .min_len = sizeof(struct wmi_tlv_p2p_noa_ev) },
69 [WMI_TLV_TAG_STRUCT_ROAM_EVENT] 69 [WMI_TLV_TAG_STRUCT_ROAM_EVENT]
70 = { .min_len = sizeof(struct wmi_tlv_roam_ev) }, 70 = { .min_len = sizeof(struct wmi_tlv_roam_ev) },
71 [WMI_TLV_TAG_STRUCT_WOW_EVENT_INFO]
72 = { .min_len = sizeof(struct wmi_tlv_wow_event_info) },
71}; 73};
72 74
73static int 75static int
@@ -1090,6 +1092,36 @@ static int ath10k_wmi_tlv_op_pull_roam_ev(struct ath10k *ar,
1090 return 0; 1092 return 0;
1091} 1093}
1092 1094
1095static int
1096ath10k_wmi_tlv_op_pull_wow_ev(struct ath10k *ar, struct sk_buff *skb,
1097 struct wmi_wow_ev_arg *arg)
1098{
1099 const void **tb;
1100 const struct wmi_tlv_wow_event_info *ev;
1101 int ret;
1102
1103 tb = ath10k_wmi_tlv_parse_alloc(ar, skb->data, skb->len, GFP_ATOMIC);
1104 if (IS_ERR(tb)) {
1105 ret = PTR_ERR(tb);
1106 ath10k_warn(ar, "failed to parse tlv: %d\n", ret);
1107 return ret;
1108 }
1109
1110 ev = tb[WMI_TLV_TAG_STRUCT_WOW_EVENT_INFO];
1111 if (!ev) {
1112 kfree(tb);
1113 return -EPROTO;
1114 }
1115
1116 arg->vdev_id = __le32_to_cpu(ev->vdev_id);
1117 arg->flag = __le32_to_cpu(ev->flag);
1118 arg->wake_reason = __le32_to_cpu(ev->wake_reason);
1119 arg->data_len = __le32_to_cpu(ev->data_len);
1120
1121 kfree(tb);
1122 return 0;
1123}
1124
1093static struct sk_buff * 1125static struct sk_buff *
1094ath10k_wmi_tlv_op_gen_pdev_suspend(struct ath10k *ar, u32 opt) 1126ath10k_wmi_tlv_op_gen_pdev_suspend(struct ath10k *ar, u32 opt)
1095{ 1127{
@@ -2563,6 +2595,82 @@ ath10k_wmi_tlv_op_gen_p2p_go_bcn_ie(struct ath10k *ar, u32 vdev_id,
2563 return skb; 2595 return skb;
2564} 2596}
2565 2597
2598static struct sk_buff *
2599ath10k_wmi_tlv_op_gen_wow_enable(struct ath10k *ar)
2600{
2601 struct wmi_tlv_wow_enable_cmd *cmd;
2602 struct wmi_tlv *tlv;
2603 struct sk_buff *skb;
2604 size_t len;
2605
2606 len = sizeof(*tlv) + sizeof(*cmd);
2607 skb = ath10k_wmi_alloc_skb(ar, len);
2608 if (!skb)
2609 return ERR_PTR(-ENOMEM);
2610
2611 tlv = (struct wmi_tlv *)skb->data;
2612 tlv->tag = __cpu_to_le16(WMI_TLV_TAG_STRUCT_WOW_ENABLE_CMD);
2613 tlv->len = __cpu_to_le16(sizeof(*cmd));
2614 cmd = (void *)tlv->value;
2615
2616 cmd->enable = __cpu_to_le32(1);
2617
2618 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi tlv wow enable\n");
2619 return skb;
2620}
2621
2622static struct sk_buff *
2623ath10k_wmi_tlv_op_gen_wow_add_wakeup_event(struct ath10k *ar,
2624 u32 vdev_id,
2625 enum wmi_wow_wakeup_event event,
2626 u32 enable)
2627{
2628 struct wmi_tlv_wow_add_del_event_cmd *cmd;
2629 struct wmi_tlv *tlv;
2630 struct sk_buff *skb;
2631 size_t len;
2632
2633 len = sizeof(*tlv) + sizeof(*cmd);
2634 skb = ath10k_wmi_alloc_skb(ar, len);
2635 if (!skb)
2636 return ERR_PTR(-ENOMEM);
2637
2638 tlv = (struct wmi_tlv *)skb->data;
2639 tlv->tag = __cpu_to_le16(WMI_TLV_TAG_STRUCT_WOW_ADD_DEL_EVT_CMD);
2640 tlv->len = __cpu_to_le16(sizeof(*cmd));
2641 cmd = (void *)tlv->value;
2642
2643 cmd->vdev_id = __cpu_to_le32(vdev_id);
2644 cmd->is_add = __cpu_to_le32(enable);
2645 cmd->event_bitmap = __cpu_to_le32(1 << event);
2646
2647 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi tlv wow add wakeup event %s enable %d vdev_id %d\n",
2648 wow_wakeup_event(event), enable, vdev_id);
2649 return skb;
2650}
2651
2652static struct sk_buff *
2653ath10k_wmi_tlv_gen_wow_host_wakeup_ind(struct ath10k *ar)
2654{
2655 struct wmi_tlv_wow_host_wakeup_ind *cmd;
2656 struct wmi_tlv *tlv;
2657 struct sk_buff *skb;
2658 size_t len;
2659
2660 len = sizeof(*tlv) + sizeof(*cmd);
2661 skb = ath10k_wmi_alloc_skb(ar, len);
2662 if (!skb)
2663 return ERR_PTR(-ENOMEM);
2664
2665 tlv = (struct wmi_tlv *)skb->data;
2666 tlv->tag = __cpu_to_le16(WMI_TLV_TAG_STRUCT_WOW_HOSTWAKEUP_FROM_SLEEP_CMD);
2667 tlv->len = __cpu_to_le16(sizeof(*cmd));
2668 cmd = (void *)tlv->value;
2669
2670 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi tlv wow host wakeup ind\n");
2671 return skb;
2672}
2673
2566/****************/ 2674/****************/
2567/* TLV mappings */ 2675/* TLV mappings */
2568/****************/ 2676/****************/
@@ -2815,6 +2923,7 @@ static const struct wmi_ops wmi_tlv_ops = {
2815 .pull_rdy = ath10k_wmi_tlv_op_pull_rdy_ev, 2923 .pull_rdy = ath10k_wmi_tlv_op_pull_rdy_ev,
2816 .pull_fw_stats = ath10k_wmi_tlv_op_pull_fw_stats, 2924 .pull_fw_stats = ath10k_wmi_tlv_op_pull_fw_stats,
2817 .pull_roam_ev = ath10k_wmi_tlv_op_pull_roam_ev, 2925 .pull_roam_ev = ath10k_wmi_tlv_op_pull_roam_ev,
2926 .pull_wow_event = ath10k_wmi_tlv_op_pull_wow_ev,
2818 2927
2819 .gen_pdev_suspend = ath10k_wmi_tlv_op_gen_pdev_suspend, 2928 .gen_pdev_suspend = ath10k_wmi_tlv_op_gen_pdev_suspend,
2820 .gen_pdev_resume = ath10k_wmi_tlv_op_gen_pdev_resume, 2929 .gen_pdev_resume = ath10k_wmi_tlv_op_gen_pdev_resume,
@@ -2860,6 +2969,9 @@ static const struct wmi_ops wmi_tlv_ops = {
2860 .gen_p2p_go_bcn_ie = ath10k_wmi_tlv_op_gen_p2p_go_bcn_ie, 2969 .gen_p2p_go_bcn_ie = ath10k_wmi_tlv_op_gen_p2p_go_bcn_ie,
2861 .gen_vdev_sta_uapsd = ath10k_wmi_tlv_op_gen_vdev_sta_uapsd, 2970 .gen_vdev_sta_uapsd = ath10k_wmi_tlv_op_gen_vdev_sta_uapsd,
2862 .gen_sta_keepalive = ath10k_wmi_tlv_op_gen_sta_keepalive, 2971 .gen_sta_keepalive = ath10k_wmi_tlv_op_gen_sta_keepalive,
2972 .gen_wow_enable = ath10k_wmi_tlv_op_gen_wow_enable,
2973 .gen_wow_add_wakeup_event = ath10k_wmi_tlv_op_gen_wow_add_wakeup_event,
2974 .gen_wow_host_wakeup_ind = ath10k_wmi_tlv_gen_wow_host_wakeup_ind,
2863}; 2975};
2864 2976
2865/************/ 2977/************/
diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.h b/drivers/net/wireless/ath/ath10k/wmi-tlv.h
index 06b37b2f1a02..ab38a088bbf2 100644
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.h
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.h
@@ -1464,6 +1464,27 @@ struct wmi_tlv_roam_ev {
1464 __le32 rssi; 1464 __le32 rssi;
1465} __packed; 1465} __packed;
1466 1466
1467struct wmi_tlv_wow_add_del_event_cmd {
1468 __le32 vdev_id;
1469 __le32 is_add;
1470 __le32 event_bitmap;
1471} __packed;
1472
1473struct wmi_tlv_wow_enable_cmd {
1474 __le32 enable;
1475} __packed;
1476
1477struct wmi_tlv_wow_host_wakeup_ind {
1478 __le32 reserved;
1479} __packed;
1480
1481struct wmi_tlv_wow_event_info {
1482 __le32 vdev_id;
1483 __le32 flag;
1484 __le32 wake_reason;
1485 __le32 data_len;
1486} __packed;
1487
1467void ath10k_wmi_tlv_attach(struct ath10k *ar); 1488void ath10k_wmi_tlv_attach(struct ath10k *ar);
1468 1489
1469#endif 1490#endif
diff --git a/drivers/net/wireless/ath/ath10k/wmi.h b/drivers/net/wireless/ath/ath10k/wmi.h
index 938e6521776b..6ff8456d6cf4 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.h
+++ b/drivers/net/wireless/ath/ath10k/wmi.h
@@ -4884,6 +4884,150 @@ struct wmi_pdev_temperature_event {
4884 __le32 temperature; 4884 __le32 temperature;
4885} __packed; 4885} __packed;
4886 4886
4887/* WOW structures */
4888enum wmi_wow_wakeup_event {
4889 WOW_BMISS_EVENT = 0,
4890 WOW_BETTER_AP_EVENT,
4891 WOW_DEAUTH_RECVD_EVENT,
4892 WOW_MAGIC_PKT_RECVD_EVENT,
4893 WOW_GTK_ERR_EVENT,
4894 WOW_FOURWAY_HSHAKE_EVENT,
4895 WOW_EAPOL_RECVD_EVENT,
4896 WOW_NLO_DETECTED_EVENT,
4897 WOW_DISASSOC_RECVD_EVENT,
4898 WOW_PATTERN_MATCH_EVENT,
4899 WOW_CSA_IE_EVENT,
4900 WOW_PROBE_REQ_WPS_IE_EVENT,
4901 WOW_AUTH_REQ_EVENT,
4902 WOW_ASSOC_REQ_EVENT,
4903 WOW_HTT_EVENT,
4904 WOW_RA_MATCH_EVENT,
4905 WOW_HOST_AUTO_SHUTDOWN_EVENT,
4906 WOW_IOAC_MAGIC_EVENT,
4907 WOW_IOAC_SHORT_EVENT,
4908 WOW_IOAC_EXTEND_EVENT,
4909 WOW_IOAC_TIMER_EVENT,
4910 WOW_DFS_PHYERR_RADAR_EVENT,
4911 WOW_BEACON_EVENT,
4912 WOW_CLIENT_KICKOUT_EVENT,
4913 WOW_EVENT_MAX,
4914};
4915
4916#define C2S(x) case x: return #x
4917
4918static inline const char *wow_wakeup_event(enum wmi_wow_wakeup_event ev)
4919{
4920 switch (ev) {
4921 C2S(WOW_BMISS_EVENT);
4922 C2S(WOW_BETTER_AP_EVENT);
4923 C2S(WOW_DEAUTH_RECVD_EVENT);
4924 C2S(WOW_MAGIC_PKT_RECVD_EVENT);
4925 C2S(WOW_GTK_ERR_EVENT);
4926 C2S(WOW_FOURWAY_HSHAKE_EVENT);
4927 C2S(WOW_EAPOL_RECVD_EVENT);
4928 C2S(WOW_NLO_DETECTED_EVENT);
4929 C2S(WOW_DISASSOC_RECVD_EVENT);
4930 C2S(WOW_PATTERN_MATCH_EVENT);
4931 C2S(WOW_CSA_IE_EVENT);
4932 C2S(WOW_PROBE_REQ_WPS_IE_EVENT);
4933 C2S(WOW_AUTH_REQ_EVENT);
4934 C2S(WOW_ASSOC_REQ_EVENT);
4935 C2S(WOW_HTT_EVENT);
4936 C2S(WOW_RA_MATCH_EVENT);
4937 C2S(WOW_HOST_AUTO_SHUTDOWN_EVENT);
4938 C2S(WOW_IOAC_MAGIC_EVENT);
4939 C2S(WOW_IOAC_SHORT_EVENT);
4940 C2S(WOW_IOAC_EXTEND_EVENT);
4941 C2S(WOW_IOAC_TIMER_EVENT);
4942 C2S(WOW_DFS_PHYERR_RADAR_EVENT);
4943 C2S(WOW_BEACON_EVENT);
4944 C2S(WOW_CLIENT_KICKOUT_EVENT);
4945 C2S(WOW_EVENT_MAX);
4946 default:
4947 return NULL;
4948 }
4949}
4950
4951enum wmi_wow_wake_reason {
4952 WOW_REASON_UNSPECIFIED = -1,
4953 WOW_REASON_NLOD = 0,
4954 WOW_REASON_AP_ASSOC_LOST,
4955 WOW_REASON_LOW_RSSI,
4956 WOW_REASON_DEAUTH_RECVD,
4957 WOW_REASON_DISASSOC_RECVD,
4958 WOW_REASON_GTK_HS_ERR,
4959 WOW_REASON_EAP_REQ,
4960 WOW_REASON_FOURWAY_HS_RECV,
4961 WOW_REASON_TIMER_INTR_RECV,
4962 WOW_REASON_PATTERN_MATCH_FOUND,
4963 WOW_REASON_RECV_MAGIC_PATTERN,
4964 WOW_REASON_P2P_DISC,
4965 WOW_REASON_WLAN_HB,
4966 WOW_REASON_CSA_EVENT,
4967 WOW_REASON_PROBE_REQ_WPS_IE_RECV,
4968 WOW_REASON_AUTH_REQ_RECV,
4969 WOW_REASON_ASSOC_REQ_RECV,
4970 WOW_REASON_HTT_EVENT,
4971 WOW_REASON_RA_MATCH,
4972 WOW_REASON_HOST_AUTO_SHUTDOWN,
4973 WOW_REASON_IOAC_MAGIC_EVENT,
4974 WOW_REASON_IOAC_SHORT_EVENT,
4975 WOW_REASON_IOAC_EXTEND_EVENT,
4976 WOW_REASON_IOAC_TIMER_EVENT,
4977 WOW_REASON_ROAM_HO,
4978 WOW_REASON_DFS_PHYERR_RADADR_EVENT,
4979 WOW_REASON_BEACON_RECV,
4980 WOW_REASON_CLIENT_KICKOUT_EVENT,
4981 WOW_REASON_DEBUG_TEST = 0xFF,
4982};
4983
4984static inline const char *wow_reason(enum wmi_wow_wake_reason reason)
4985{
4986 switch (reason) {
4987 C2S(WOW_REASON_UNSPECIFIED);
4988 C2S(WOW_REASON_NLOD);
4989 C2S(WOW_REASON_AP_ASSOC_LOST);
4990 C2S(WOW_REASON_LOW_RSSI);
4991 C2S(WOW_REASON_DEAUTH_RECVD);
4992 C2S(WOW_REASON_DISASSOC_RECVD);
4993 C2S(WOW_REASON_GTK_HS_ERR);
4994 C2S(WOW_REASON_EAP_REQ);
4995 C2S(WOW_REASON_FOURWAY_HS_RECV);
4996 C2S(WOW_REASON_TIMER_INTR_RECV);
4997 C2S(WOW_REASON_PATTERN_MATCH_FOUND);
4998 C2S(WOW_REASON_RECV_MAGIC_PATTERN);
4999 C2S(WOW_REASON_P2P_DISC);
5000 C2S(WOW_REASON_WLAN_HB);
5001 C2S(WOW_REASON_CSA_EVENT);
5002 C2S(WOW_REASON_PROBE_REQ_WPS_IE_RECV);
5003 C2S(WOW_REASON_AUTH_REQ_RECV);
5004 C2S(WOW_REASON_ASSOC_REQ_RECV);
5005 C2S(WOW_REASON_HTT_EVENT);
5006 C2S(WOW_REASON_RA_MATCH);
5007 C2S(WOW_REASON_HOST_AUTO_SHUTDOWN);
5008 C2S(WOW_REASON_IOAC_MAGIC_EVENT);
5009 C2S(WOW_REASON_IOAC_SHORT_EVENT);
5010 C2S(WOW_REASON_IOAC_EXTEND_EVENT);
5011 C2S(WOW_REASON_IOAC_TIMER_EVENT);
5012 C2S(WOW_REASON_ROAM_HO);
5013 C2S(WOW_REASON_DFS_PHYERR_RADADR_EVENT);
5014 C2S(WOW_REASON_BEACON_RECV);
5015 C2S(WOW_REASON_CLIENT_KICKOUT_EVENT);
5016 C2S(WOW_REASON_DEBUG_TEST);
5017 default:
5018 return NULL;
5019 }
5020}
5021
5022#undef C2S
5023
5024struct wmi_wow_ev_arg {
5025 u32 vdev_id;
5026 u32 flag;
5027 enum wmi_wow_wake_reason wake_reason;
5028 u32 data_len;
5029};
5030
4887struct ath10k; 5031struct ath10k;
4888struct ath10k_vif; 5032struct ath10k_vif;
4889struct ath10k_fw_stats_pdev; 5033struct ath10k_fw_stats_pdev;