diff options
author | Janusz Dziedzic <janusz.dziedzic@tieto.com> | 2015-03-23 11:32:53 -0400 |
---|---|---|
committer | Kalle Valo <kvalo@qca.qualcomm.com> | 2015-03-30 02:09:22 -0400 |
commit | f5431e87ae0357bd72cfbfbe9552aa3d555c3800 (patch) | |
tree | e5f6bf94470a0d002cb77f91b34987500cd78f53 | |
parent | b3e71d7a51486b523ffef0abd517cd25e4ec9588 (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.h | 70 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath10k/wmi-tlv.c | 116 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath10k/wmi-tlv.h | 21 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath10k/wmi.h | 144 |
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 | ||
155 | int ath10k_wmi_cmd_send(struct ath10k *ar, struct sk_buff *skb, u32 cmd_id); | 162 | int 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 | ||
288 | static inline int | 295 | static inline int |
296 | ath10k_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 | |||
305 | static inline int | ||
289 | ath10k_wmi_mgmt_tx(struct ath10k *ar, struct sk_buff *msdu) | 306 | ath10k_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 | ||
1092 | static inline int | ||
1093 | ath10k_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 | |||
1109 | static inline int | ||
1110 | ath10k_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 | |||
1128 | static inline int | ||
1129 | ath10k_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 | ||
34 | static const struct wmi_tlv_policy wmi_tlv_policies[] = { | 34 | static 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 | ||
73 | static int | 75 | static 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 | ||
1095 | static int | ||
1096 | ath10k_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 | |||
1093 | static struct sk_buff * | 1125 | static struct sk_buff * |
1094 | ath10k_wmi_tlv_op_gen_pdev_suspend(struct ath10k *ar, u32 opt) | 1126 | ath10k_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 | ||
2598 | static struct sk_buff * | ||
2599 | ath10k_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 | |||
2622 | static struct sk_buff * | ||
2623 | ath10k_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 | |||
2652 | static struct sk_buff * | ||
2653 | ath10k_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 | ||
1467 | struct wmi_tlv_wow_add_del_event_cmd { | ||
1468 | __le32 vdev_id; | ||
1469 | __le32 is_add; | ||
1470 | __le32 event_bitmap; | ||
1471 | } __packed; | ||
1472 | |||
1473 | struct wmi_tlv_wow_enable_cmd { | ||
1474 | __le32 enable; | ||
1475 | } __packed; | ||
1476 | |||
1477 | struct wmi_tlv_wow_host_wakeup_ind { | ||
1478 | __le32 reserved; | ||
1479 | } __packed; | ||
1480 | |||
1481 | struct wmi_tlv_wow_event_info { | ||
1482 | __le32 vdev_id; | ||
1483 | __le32 flag; | ||
1484 | __le32 wake_reason; | ||
1485 | __le32 data_len; | ||
1486 | } __packed; | ||
1487 | |||
1467 | void ath10k_wmi_tlv_attach(struct ath10k *ar); | 1488 | void 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 */ | ||
4888 | enum 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 | |||
4918 | static 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 | |||
4951 | enum 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 | |||
4984 | static 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 | |||
5024 | struct 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 | |||
4887 | struct ath10k; | 5031 | struct ath10k; |
4888 | struct ath10k_vif; | 5032 | struct ath10k_vif; |
4889 | struct ath10k_fw_stats_pdev; | 5033 | struct ath10k_fw_stats_pdev; |