diff options
author | Michal Kazior <michal.kazior@tieto.com> | 2014-08-04 02:18:33 -0400 |
---|---|---|
committer | Kalle Valo <kvalo@qca.qualcomm.com> | 2014-08-12 03:42:24 -0400 |
commit | cff990ce7ddd6a43f86757867399a8a64aa29af9 (patch) | |
tree | 35ad2395674acefba4e6822a0773a9219c1cf8af | |
parent | 17dc0b8068f9f01c56b0ade5c36b4c45a3339dda (diff) |
ath10k: fix wmi service bitmap debug
The 10.x and main firmware branches have
conflicting WMI service bitmap definitions.
This also fixes WMI services parsing on big-endian
hosts and changes debugfs output to be more human
friendly.
kvalo: remove braces and the last semicolon from SVCSTR()
Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
-rw-r--r-- | drivers/net/wireless/ath/ath10k/core.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath10k/debug.c | 26 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath10k/wmi.c | 14 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath10k/wmi.h | 369 |
4 files changed, 292 insertions, 119 deletions
diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h index d5c95d46e841..94b1ff2082cf 100644 --- a/drivers/net/wireless/ath/ath10k/core.h +++ b/drivers/net/wireless/ath/ath10k/core.h | |||
@@ -282,7 +282,7 @@ struct ath10k_debug { | |||
282 | struct dentry *debugfs_phy; | 282 | struct dentry *debugfs_phy; |
283 | 283 | ||
284 | struct ath10k_target_stats target_stats; | 284 | struct ath10k_target_stats target_stats; |
285 | u32 wmi_service_bitmap[WMI_SERVICE_BM_SIZE]; | 285 | DECLARE_BITMAP(wmi_service_bitmap, WMI_SERVICE_BM_SIZE); |
286 | 286 | ||
287 | struct completion event_stats_compl; | 287 | struct completion event_stats_compl; |
288 | 288 | ||
diff --git a/drivers/net/wireless/ath/ath10k/debug.c b/drivers/net/wireless/ath/ath10k/debug.c index c9e35c87edfb..df1abe7f1fef 100644 --- a/drivers/net/wireless/ath/ath10k/debug.c +++ b/drivers/net/wireless/ath/ath10k/debug.c | |||
@@ -115,9 +115,10 @@ static ssize_t ath10k_read_wmi_services(struct file *file, | |||
115 | { | 115 | { |
116 | struct ath10k *ar = file->private_data; | 116 | struct ath10k *ar = file->private_data; |
117 | char *buf; | 117 | char *buf; |
118 | unsigned int len = 0, buf_len = 1500; | 118 | unsigned int len = 0, buf_len = 4096; |
119 | const char *status; | 119 | const char *name; |
120 | ssize_t ret_cnt; | 120 | ssize_t ret_cnt; |
121 | bool enabled; | ||
121 | int i; | 122 | int i; |
122 | 123 | ||
123 | buf = kzalloc(buf_len, GFP_KERNEL); | 124 | buf = kzalloc(buf_len, GFP_KERNEL); |
@@ -129,15 +130,22 @@ static ssize_t ath10k_read_wmi_services(struct file *file, | |||
129 | if (len > buf_len) | 130 | if (len > buf_len) |
130 | len = buf_len; | 131 | len = buf_len; |
131 | 132 | ||
132 | for (i = 0; i < WMI_SERVICE_LAST; i++) { | 133 | for (i = 0; i < WMI_MAX_SERVICE; i++) { |
133 | if (WMI_SERVICE_IS_ENABLED(ar->debug.wmi_service_bitmap, i)) | 134 | enabled = test_bit(i, ar->debug.wmi_service_bitmap); |
134 | status = "enabled"; | 135 | name = wmi_service_name(i); |
135 | else | 136 | |
136 | status = "disabled"; | 137 | if (!name) { |
138 | if (enabled) | ||
139 | len += scnprintf(buf + len, buf_len - len, | ||
140 | "%-40s %s (bit %d)\n", | ||
141 | "unknown", "enabled", i); | ||
142 | |||
143 | continue; | ||
144 | } | ||
137 | 145 | ||
138 | len += scnprintf(buf + len, buf_len - len, | 146 | len += scnprintf(buf + len, buf_len - len, |
139 | "0x%02x - %20s - %s\n", | 147 | "%-40s %s\n", |
140 | i, wmi_service_name(i), status); | 148 | name, enabled ? "enabled" : "-"); |
141 | } | 149 | } |
142 | 150 | ||
143 | ret_cnt = simple_read_from_buffer(user_buf, count, ppos, buf, len); | 151 | ret_cnt = simple_read_from_buffer(user_buf, count, ppos, buf, len); |
diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c index fffb15b1b50b..a381006c8124 100644 --- a/drivers/net/wireless/ath/ath10k/wmi.c +++ b/drivers/net/wireless/ath/ath10k/wmi.c | |||
@@ -2080,6 +2080,7 @@ static void ath10k_wmi_service_ready_event_rx(struct ath10k *ar, | |||
2080 | struct sk_buff *skb) | 2080 | struct sk_buff *skb) |
2081 | { | 2081 | { |
2082 | struct wmi_service_ready_event *ev = (void *)skb->data; | 2082 | struct wmi_service_ready_event *ev = (void *)skb->data; |
2083 | DECLARE_BITMAP(svc_bmap, WMI_SERVICE_BM_SIZE) = {}; | ||
2083 | 2084 | ||
2084 | if (skb->len < sizeof(*ev)) { | 2085 | if (skb->len < sizeof(*ev)) { |
2085 | ath10k_warn("Service ready event was %d B but expected %zu B. Wrong firmware version?\n", | 2086 | ath10k_warn("Service ready event was %d B but expected %zu B. Wrong firmware version?\n", |
@@ -2113,8 +2114,10 @@ static void ath10k_wmi_service_ready_event_rx(struct ath10k *ar, | |||
2113 | ar->ath_common.regulatory.current_rd = | 2114 | ar->ath_common.regulatory.current_rd = |
2114 | __le32_to_cpu(ev->hal_reg_capabilities.eeprom_rd); | 2115 | __le32_to_cpu(ev->hal_reg_capabilities.eeprom_rd); |
2115 | 2116 | ||
2116 | ath10k_debug_read_service_map(ar, ev->wmi_service_bitmap, | 2117 | wmi_10x_svc_map(ev->wmi_service_bitmap, svc_bmap); |
2117 | sizeof(ev->wmi_service_bitmap)); | 2118 | ath10k_debug_read_service_map(ar, svc_bmap, sizeof(svc_bmap)); |
2119 | ath10k_dbg_dump(ATH10K_DBG_WMI, NULL, "ath10k: wmi svc: ", | ||
2120 | ev->wmi_service_bitmap, sizeof(ev->wmi_service_bitmap)); | ||
2118 | 2121 | ||
2119 | if (strlen(ar->hw->wiphy->fw_version) == 0) { | 2122 | if (strlen(ar->hw->wiphy->fw_version) == 0) { |
2120 | snprintf(ar->hw->wiphy->fw_version, | 2123 | snprintf(ar->hw->wiphy->fw_version, |
@@ -2154,6 +2157,7 @@ static void ath10k_wmi_10x_service_ready_event_rx(struct ath10k *ar, | |||
2154 | u32 num_units, req_id, unit_size, num_mem_reqs, num_unit_info, i; | 2157 | u32 num_units, req_id, unit_size, num_mem_reqs, num_unit_info, i; |
2155 | int ret; | 2158 | int ret; |
2156 | struct wmi_service_ready_event_10x *ev = (void *)skb->data; | 2159 | struct wmi_service_ready_event_10x *ev = (void *)skb->data; |
2160 | DECLARE_BITMAP(svc_bmap, WMI_SERVICE_BM_SIZE) = {}; | ||
2157 | 2161 | ||
2158 | if (skb->len < sizeof(*ev)) { | 2162 | if (skb->len < sizeof(*ev)) { |
2159 | ath10k_warn("Service ready event was %d B but expected %zu B. Wrong firmware version?\n", | 2163 | ath10k_warn("Service ready event was %d B but expected %zu B. Wrong firmware version?\n", |
@@ -2180,8 +2184,10 @@ static void ath10k_wmi_10x_service_ready_event_rx(struct ath10k *ar, | |||
2180 | ar->ath_common.regulatory.current_rd = | 2184 | ar->ath_common.regulatory.current_rd = |
2181 | __le32_to_cpu(ev->hal_reg_capabilities.eeprom_rd); | 2185 | __le32_to_cpu(ev->hal_reg_capabilities.eeprom_rd); |
2182 | 2186 | ||
2183 | ath10k_debug_read_service_map(ar, ev->wmi_service_bitmap, | 2187 | wmi_main_svc_map(ev->wmi_service_bitmap, svc_bmap); |
2184 | sizeof(ev->wmi_service_bitmap)); | 2188 | ath10k_debug_read_service_map(ar, svc_bmap, sizeof(svc_bmap)); |
2189 | ath10k_dbg_dump(ATH10K_DBG_WMI, NULL, "ath10k: wmi svc: ", | ||
2190 | ev->wmi_service_bitmap, sizeof(ev->wmi_service_bitmap)); | ||
2185 | 2191 | ||
2186 | if (strlen(ar->hw->wiphy->fw_version) == 0) { | 2192 | if (strlen(ar->hw->wiphy->fw_version) == 0) { |
2187 | snprintf(ar->hw->wiphy->fw_version, | 2193 | snprintf(ar->hw->wiphy->fw_version, |
diff --git a/drivers/net/wireless/ath/ath10k/wmi.h b/drivers/net/wireless/ath/ath10k/wmi.h index 1d8dda3240a5..e70836586756 100644 --- a/drivers/net/wireless/ath/ath10k/wmi.h +++ b/drivers/net/wireless/ath/ath10k/wmi.h | |||
@@ -73,116 +73,279 @@ struct wmi_cmd_hdr { | |||
73 | #define HTC_PROTOCOL_VERSION 0x0002 | 73 | #define HTC_PROTOCOL_VERSION 0x0002 |
74 | #define WMI_PROTOCOL_VERSION 0x0002 | 74 | #define WMI_PROTOCOL_VERSION 0x0002 |
75 | 75 | ||
76 | enum wmi_service_id { | 76 | enum wmi_service { |
77 | WMI_SERVICE_BEACON_OFFLOAD = 0, /* beacon offload */ | 77 | WMI_SERVICE_BEACON_OFFLOAD = 0, |
78 | WMI_SERVICE_SCAN_OFFLOAD, /* scan offload */ | 78 | WMI_SERVICE_SCAN_OFFLOAD, |
79 | WMI_SERVICE_ROAM_OFFLOAD, /* roam offload */ | 79 | WMI_SERVICE_ROAM_OFFLOAD, |
80 | WMI_SERVICE_BCN_MISS_OFFLOAD, /* beacon miss offload */ | 80 | WMI_SERVICE_BCN_MISS_OFFLOAD, |
81 | WMI_SERVICE_STA_PWRSAVE, /* fake sleep + basic power save */ | 81 | WMI_SERVICE_STA_PWRSAVE, |
82 | WMI_SERVICE_STA_ADVANCED_PWRSAVE, /* uapsd, pspoll, force sleep */ | 82 | WMI_SERVICE_STA_ADVANCED_PWRSAVE, |
83 | WMI_SERVICE_AP_UAPSD, /* uapsd on AP */ | 83 | WMI_SERVICE_AP_UAPSD, |
84 | WMI_SERVICE_AP_DFS, /* DFS on AP */ | 84 | WMI_SERVICE_AP_DFS, |
85 | WMI_SERVICE_11AC, /* supports 11ac */ | 85 | WMI_SERVICE_11AC, |
86 | WMI_SERVICE_BLOCKACK, /* Supports triggering ADDBA/DELBA from host*/ | 86 | WMI_SERVICE_BLOCKACK, |
87 | WMI_SERVICE_PHYERR, /* PHY error */ | 87 | WMI_SERVICE_PHYERR, |
88 | WMI_SERVICE_BCN_FILTER, /* Beacon filter support */ | 88 | WMI_SERVICE_BCN_FILTER, |
89 | WMI_SERVICE_RTT, /* RTT (round trip time) support */ | 89 | WMI_SERVICE_RTT, |
90 | WMI_SERVICE_RATECTRL, /* Rate-control */ | 90 | WMI_SERVICE_RATECTRL, |
91 | WMI_SERVICE_WOW, /* WOW Support */ | 91 | WMI_SERVICE_WOW, |
92 | WMI_SERVICE_RATECTRL_CACHE, /* Rate-control caching */ | 92 | WMI_SERVICE_RATECTRL_CACHE, |
93 | WMI_SERVICE_IRAM_TIDS, /* TIDs in IRAM */ | 93 | WMI_SERVICE_IRAM_TIDS, |
94 | WMI_SERVICE_ARPNS_OFFLOAD, /* ARP NS Offload support */ | 94 | WMI_SERVICE_ARPNS_OFFLOAD, |
95 | WMI_SERVICE_NLO, /* Network list offload service */ | 95 | WMI_SERVICE_NLO, |
96 | WMI_SERVICE_GTK_OFFLOAD, /* GTK offload */ | 96 | WMI_SERVICE_GTK_OFFLOAD, |
97 | WMI_SERVICE_SCAN_SCH, /* Scan Scheduler Service */ | 97 | WMI_SERVICE_SCAN_SCH, |
98 | WMI_SERVICE_CSA_OFFLOAD, /* CSA offload service */ | 98 | WMI_SERVICE_CSA_OFFLOAD, |
99 | WMI_SERVICE_CHATTER, /* Chatter service */ | 99 | WMI_SERVICE_CHATTER, |
100 | WMI_SERVICE_COEX_FREQAVOID, /* FW report freq range to avoid */ | 100 | WMI_SERVICE_COEX_FREQAVOID, |
101 | WMI_SERVICE_PACKET_POWER_SAVE, /* packet power save service */ | 101 | WMI_SERVICE_PACKET_POWER_SAVE, |
102 | WMI_SERVICE_FORCE_FW_HANG, /* To test fw recovery mechanism */ | 102 | WMI_SERVICE_FORCE_FW_HANG, |
103 | WMI_SERVICE_GPIO, /* GPIO service */ | 103 | WMI_SERVICE_GPIO, |
104 | WMI_SERVICE_STA_DTIM_PS_MODULATED_DTIM, /* Modulated DTIM support */ | 104 | WMI_SERVICE_STA_DTIM_PS_MODULATED_DTIM, |
105 | WMI_STA_UAPSD_BASIC_AUTO_TRIG, /* UAPSD AC Trigger Generation */ | 105 | WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG, |
106 | WMI_STA_UAPSD_VAR_AUTO_TRIG, /* -do- */ | 106 | WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG, |
107 | WMI_SERVICE_STA_KEEP_ALIVE, /* STA keep alive mechanism support */ | 107 | WMI_SERVICE_STA_KEEP_ALIVE, |
108 | WMI_SERVICE_TX_ENCAP, /* Packet type for TX encapsulation */ | 108 | WMI_SERVICE_TX_ENCAP, |
109 | 109 | WMI_SERVICE_BURST, | |
110 | WMI_SERVICE_LAST, | 110 | WMI_SERVICE_SMART_ANTENNA_SW_SUPPORT, |
111 | WMI_MAX_SERVICE = 64 /* max service */ | 111 | WMI_SERVICE_SMART_ANTENNA_HW_SUPPORT, |
112 | }; | ||
113 | |||
114 | enum wmi_10x_service { | ||
115 | WMI_10X_SERVICE_BEACON_OFFLOAD = 0, | ||
116 | WMI_10X_SERVICE_SCAN_OFFLOAD, | ||
117 | WMI_10X_SERVICE_ROAM_OFFLOAD, | ||
118 | WMI_10X_SERVICE_BCN_MISS_OFFLOAD, | ||
119 | WMI_10X_SERVICE_STA_PWRSAVE, | ||
120 | WMI_10X_SERVICE_STA_ADVANCED_PWRSAVE, | ||
121 | WMI_10X_SERVICE_AP_UAPSD, | ||
122 | WMI_10X_SERVICE_AP_DFS, | ||
123 | WMI_10X_SERVICE_11AC, | ||
124 | WMI_10X_SERVICE_BLOCKACK, | ||
125 | WMI_10X_SERVICE_PHYERR, | ||
126 | WMI_10X_SERVICE_BCN_FILTER, | ||
127 | WMI_10X_SERVICE_RTT, | ||
128 | WMI_10X_SERVICE_RATECTRL, | ||
129 | WMI_10X_SERVICE_WOW, | ||
130 | WMI_10X_SERVICE_RATECTRL_CACHE, | ||
131 | WMI_10X_SERVICE_IRAM_TIDS, | ||
132 | WMI_10X_SERVICE_BURST, | ||
133 | |||
134 | /* introduced in 10.2 */ | ||
135 | WMI_10X_SERVICE_SMART_ANTENNA_SW_SUPPORT, | ||
136 | WMI_10X_SERVICE_FORCE_FW_HANG, | ||
137 | WMI_10X_SERVICE_SMART_ANTENNA_HW_SUPPORT, | ||
138 | }; | ||
139 | |||
140 | enum wmi_main_service { | ||
141 | WMI_MAIN_SERVICE_BEACON_OFFLOAD = 0, | ||
142 | WMI_MAIN_SERVICE_SCAN_OFFLOAD, | ||
143 | WMI_MAIN_SERVICE_ROAM_OFFLOAD, | ||
144 | WMI_MAIN_SERVICE_BCN_MISS_OFFLOAD, | ||
145 | WMI_MAIN_SERVICE_STA_PWRSAVE, | ||
146 | WMI_MAIN_SERVICE_STA_ADVANCED_PWRSAVE, | ||
147 | WMI_MAIN_SERVICE_AP_UAPSD, | ||
148 | WMI_MAIN_SERVICE_AP_DFS, | ||
149 | WMI_MAIN_SERVICE_11AC, | ||
150 | WMI_MAIN_SERVICE_BLOCKACK, | ||
151 | WMI_MAIN_SERVICE_PHYERR, | ||
152 | WMI_MAIN_SERVICE_BCN_FILTER, | ||
153 | WMI_MAIN_SERVICE_RTT, | ||
154 | WMI_MAIN_SERVICE_RATECTRL, | ||
155 | WMI_MAIN_SERVICE_WOW, | ||
156 | WMI_MAIN_SERVICE_RATECTRL_CACHE, | ||
157 | WMI_MAIN_SERVICE_IRAM_TIDS, | ||
158 | WMI_MAIN_SERVICE_ARPNS_OFFLOAD, | ||
159 | WMI_MAIN_SERVICE_NLO, | ||
160 | WMI_MAIN_SERVICE_GTK_OFFLOAD, | ||
161 | WMI_MAIN_SERVICE_SCAN_SCH, | ||
162 | WMI_MAIN_SERVICE_CSA_OFFLOAD, | ||
163 | WMI_MAIN_SERVICE_CHATTER, | ||
164 | WMI_MAIN_SERVICE_COEX_FREQAVOID, | ||
165 | WMI_MAIN_SERVICE_PACKET_POWER_SAVE, | ||
166 | WMI_MAIN_SERVICE_FORCE_FW_HANG, | ||
167 | WMI_MAIN_SERVICE_GPIO, | ||
168 | WMI_MAIN_SERVICE_STA_DTIM_PS_MODULATED_DTIM, | ||
169 | WMI_MAIN_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG, | ||
170 | WMI_MAIN_SERVICE_STA_UAPSD_VAR_AUTO_TRIG, | ||
171 | WMI_MAIN_SERVICE_STA_KEEP_ALIVE, | ||
172 | WMI_MAIN_SERVICE_TX_ENCAP, | ||
112 | }; | 173 | }; |
113 | 174 | ||
114 | static inline char *wmi_service_name(int service_id) | 175 | static inline char *wmi_service_name(int service_id) |
115 | { | 176 | { |
177 | #define SVCSTR(x) case x: return #x | ||
178 | |||
116 | switch (service_id) { | 179 | switch (service_id) { |
117 | case WMI_SERVICE_BEACON_OFFLOAD: | 180 | SVCSTR(WMI_SERVICE_BEACON_OFFLOAD); |
118 | return "BEACON_OFFLOAD"; | 181 | SVCSTR(WMI_SERVICE_SCAN_OFFLOAD); |
119 | case WMI_SERVICE_SCAN_OFFLOAD: | 182 | SVCSTR(WMI_SERVICE_ROAM_OFFLOAD); |
120 | return "SCAN_OFFLOAD"; | 183 | SVCSTR(WMI_SERVICE_BCN_MISS_OFFLOAD); |
121 | case WMI_SERVICE_ROAM_OFFLOAD: | 184 | SVCSTR(WMI_SERVICE_STA_PWRSAVE); |
122 | return "ROAM_OFFLOAD"; | 185 | SVCSTR(WMI_SERVICE_STA_ADVANCED_PWRSAVE); |
123 | case WMI_SERVICE_BCN_MISS_OFFLOAD: | 186 | SVCSTR(WMI_SERVICE_AP_UAPSD); |
124 | return "BCN_MISS_OFFLOAD"; | 187 | SVCSTR(WMI_SERVICE_AP_DFS); |
125 | case WMI_SERVICE_STA_PWRSAVE: | 188 | SVCSTR(WMI_SERVICE_11AC); |
126 | return "STA_PWRSAVE"; | 189 | SVCSTR(WMI_SERVICE_BLOCKACK); |
127 | case WMI_SERVICE_STA_ADVANCED_PWRSAVE: | 190 | SVCSTR(WMI_SERVICE_PHYERR); |
128 | return "STA_ADVANCED_PWRSAVE"; | 191 | SVCSTR(WMI_SERVICE_BCN_FILTER); |
129 | case WMI_SERVICE_AP_UAPSD: | 192 | SVCSTR(WMI_SERVICE_RTT); |
130 | return "AP_UAPSD"; | 193 | SVCSTR(WMI_SERVICE_RATECTRL); |
131 | case WMI_SERVICE_AP_DFS: | 194 | SVCSTR(WMI_SERVICE_WOW); |
132 | return "AP_DFS"; | 195 | SVCSTR(WMI_SERVICE_RATECTRL_CACHE); |
133 | case WMI_SERVICE_11AC: | 196 | SVCSTR(WMI_SERVICE_IRAM_TIDS); |
134 | return "11AC"; | 197 | SVCSTR(WMI_SERVICE_ARPNS_OFFLOAD); |
135 | case WMI_SERVICE_BLOCKACK: | 198 | SVCSTR(WMI_SERVICE_NLO); |
136 | return "BLOCKACK"; | 199 | SVCSTR(WMI_SERVICE_GTK_OFFLOAD); |
137 | case WMI_SERVICE_PHYERR: | 200 | SVCSTR(WMI_SERVICE_SCAN_SCH); |
138 | return "PHYERR"; | 201 | SVCSTR(WMI_SERVICE_CSA_OFFLOAD); |
139 | case WMI_SERVICE_BCN_FILTER: | 202 | SVCSTR(WMI_SERVICE_CHATTER); |
140 | return "BCN_FILTER"; | 203 | SVCSTR(WMI_SERVICE_COEX_FREQAVOID); |
141 | case WMI_SERVICE_RTT: | 204 | SVCSTR(WMI_SERVICE_PACKET_POWER_SAVE); |
142 | return "RTT"; | 205 | SVCSTR(WMI_SERVICE_FORCE_FW_HANG); |
143 | case WMI_SERVICE_RATECTRL: | 206 | SVCSTR(WMI_SERVICE_GPIO); |
144 | return "RATECTRL"; | 207 | SVCSTR(WMI_SERVICE_STA_DTIM_PS_MODULATED_DTIM); |
145 | case WMI_SERVICE_WOW: | 208 | SVCSTR(WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG); |
146 | return "WOW"; | 209 | SVCSTR(WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG); |
147 | case WMI_SERVICE_RATECTRL_CACHE: | 210 | SVCSTR(WMI_SERVICE_STA_KEEP_ALIVE); |
148 | return "RATECTRL CACHE"; | 211 | SVCSTR(WMI_SERVICE_TX_ENCAP); |
149 | case WMI_SERVICE_IRAM_TIDS: | 212 | SVCSTR(WMI_SERVICE_BURST); |
150 | return "IRAM TIDS"; | 213 | SVCSTR(WMI_SERVICE_SMART_ANTENNA_SW_SUPPORT); |
151 | case WMI_SERVICE_ARPNS_OFFLOAD: | 214 | SVCSTR(WMI_SERVICE_SMART_ANTENNA_HW_SUPPORT); |
152 | return "ARPNS_OFFLOAD"; | ||
153 | case WMI_SERVICE_NLO: | ||
154 | return "NLO"; | ||
155 | case WMI_SERVICE_GTK_OFFLOAD: | ||
156 | return "GTK_OFFLOAD"; | ||
157 | case WMI_SERVICE_SCAN_SCH: | ||
158 | return "SCAN_SCH"; | ||
159 | case WMI_SERVICE_CSA_OFFLOAD: | ||
160 | return "CSA_OFFLOAD"; | ||
161 | case WMI_SERVICE_CHATTER: | ||
162 | return "CHATTER"; | ||
163 | case WMI_SERVICE_COEX_FREQAVOID: | ||
164 | return "COEX_FREQAVOID"; | ||
165 | case WMI_SERVICE_PACKET_POWER_SAVE: | ||
166 | return "PACKET_POWER_SAVE"; | ||
167 | case WMI_SERVICE_FORCE_FW_HANG: | ||
168 | return "FORCE FW HANG"; | ||
169 | case WMI_SERVICE_GPIO: | ||
170 | return "GPIO"; | ||
171 | case WMI_SERVICE_STA_DTIM_PS_MODULATED_DTIM: | ||
172 | return "MODULATED DTIM"; | ||
173 | case WMI_STA_UAPSD_BASIC_AUTO_TRIG: | ||
174 | return "BASIC UAPSD"; | ||
175 | case WMI_STA_UAPSD_VAR_AUTO_TRIG: | ||
176 | return "VAR UAPSD"; | ||
177 | case WMI_SERVICE_STA_KEEP_ALIVE: | ||
178 | return "STA KEEP ALIVE"; | ||
179 | case WMI_SERVICE_TX_ENCAP: | ||
180 | return "TX ENCAP"; | ||
181 | default: | 215 | default: |
182 | return "UNKNOWN SERVICE\n"; | 216 | return NULL; |
183 | } | 217 | } |
218 | |||
219 | #undef SVCSTR | ||
220 | } | ||
221 | |||
222 | #define WMI_MAX_SERVICE 64 | ||
223 | |||
224 | #define WMI_SERVICE_IS_ENABLED(wmi_svc_bmap, svc_id) \ | ||
225 | (__le32_to_cpu((wmi_svc_bmap)[(svc_id)/(sizeof(u32))]) & \ | ||
226 | BIT((svc_id)%(sizeof(u32)))) | ||
227 | |||
228 | #define SVCMAP(x, y) \ | ||
229 | do { \ | ||
230 | if (WMI_SERVICE_IS_ENABLED((in), (x))) \ | ||
231 | __set_bit(y, out); \ | ||
232 | } while (0) | ||
233 | |||
234 | static inline void wmi_10x_svc_map(const __le32 *in, unsigned long *out) | ||
235 | { | ||
236 | SVCMAP(WMI_10X_SERVICE_BEACON_OFFLOAD, | ||
237 | WMI_SERVICE_BEACON_OFFLOAD); | ||
238 | SVCMAP(WMI_10X_SERVICE_SCAN_OFFLOAD, | ||
239 | WMI_SERVICE_SCAN_OFFLOAD); | ||
240 | SVCMAP(WMI_10X_SERVICE_ROAM_OFFLOAD, | ||
241 | WMI_SERVICE_ROAM_OFFLOAD); | ||
242 | SVCMAP(WMI_10X_SERVICE_BCN_MISS_OFFLOAD, | ||
243 | WMI_SERVICE_BCN_MISS_OFFLOAD); | ||
244 | SVCMAP(WMI_10X_SERVICE_STA_PWRSAVE, | ||
245 | WMI_SERVICE_STA_PWRSAVE); | ||
246 | SVCMAP(WMI_10X_SERVICE_STA_ADVANCED_PWRSAVE, | ||
247 | WMI_SERVICE_STA_ADVANCED_PWRSAVE); | ||
248 | SVCMAP(WMI_10X_SERVICE_AP_UAPSD, | ||
249 | WMI_SERVICE_AP_UAPSD); | ||
250 | SVCMAP(WMI_10X_SERVICE_AP_DFS, | ||
251 | WMI_SERVICE_AP_DFS); | ||
252 | SVCMAP(WMI_10X_SERVICE_11AC, | ||
253 | WMI_SERVICE_11AC); | ||
254 | SVCMAP(WMI_10X_SERVICE_BLOCKACK, | ||
255 | WMI_SERVICE_BLOCKACK); | ||
256 | SVCMAP(WMI_10X_SERVICE_PHYERR, | ||
257 | WMI_SERVICE_PHYERR); | ||
258 | SVCMAP(WMI_10X_SERVICE_BCN_FILTER, | ||
259 | WMI_SERVICE_BCN_FILTER); | ||
260 | SVCMAP(WMI_10X_SERVICE_RTT, | ||
261 | WMI_SERVICE_RTT); | ||
262 | SVCMAP(WMI_10X_SERVICE_RATECTRL, | ||
263 | WMI_SERVICE_RATECTRL); | ||
264 | SVCMAP(WMI_10X_SERVICE_WOW, | ||
265 | WMI_SERVICE_WOW); | ||
266 | SVCMAP(WMI_10X_SERVICE_RATECTRL_CACHE, | ||
267 | WMI_SERVICE_RATECTRL_CACHE); | ||
268 | SVCMAP(WMI_10X_SERVICE_IRAM_TIDS, | ||
269 | WMI_SERVICE_IRAM_TIDS); | ||
270 | SVCMAP(WMI_10X_SERVICE_BURST, | ||
271 | WMI_SERVICE_BURST); | ||
272 | SVCMAP(WMI_10X_SERVICE_SMART_ANTENNA_SW_SUPPORT, | ||
273 | WMI_SERVICE_SMART_ANTENNA_SW_SUPPORT); | ||
274 | SVCMAP(WMI_10X_SERVICE_FORCE_FW_HANG, | ||
275 | WMI_SERVICE_FORCE_FW_HANG); | ||
276 | SVCMAP(WMI_10X_SERVICE_SMART_ANTENNA_HW_SUPPORT, | ||
277 | WMI_SERVICE_SMART_ANTENNA_HW_SUPPORT); | ||
184 | } | 278 | } |
185 | 279 | ||
280 | static inline void wmi_main_svc_map(const __le32 *in, unsigned long *out) | ||
281 | { | ||
282 | SVCMAP(WMI_MAIN_SERVICE_BEACON_OFFLOAD, | ||
283 | WMI_SERVICE_BEACON_OFFLOAD); | ||
284 | SVCMAP(WMI_MAIN_SERVICE_SCAN_OFFLOAD, | ||
285 | WMI_SERVICE_SCAN_OFFLOAD); | ||
286 | SVCMAP(WMI_MAIN_SERVICE_ROAM_OFFLOAD, | ||
287 | WMI_SERVICE_ROAM_OFFLOAD); | ||
288 | SVCMAP(WMI_MAIN_SERVICE_BCN_MISS_OFFLOAD, | ||
289 | WMI_SERVICE_BCN_MISS_OFFLOAD); | ||
290 | SVCMAP(WMI_MAIN_SERVICE_STA_PWRSAVE, | ||
291 | WMI_SERVICE_STA_PWRSAVE); | ||
292 | SVCMAP(WMI_MAIN_SERVICE_STA_ADVANCED_PWRSAVE, | ||
293 | WMI_SERVICE_STA_ADVANCED_PWRSAVE); | ||
294 | SVCMAP(WMI_MAIN_SERVICE_AP_UAPSD, | ||
295 | WMI_SERVICE_AP_UAPSD); | ||
296 | SVCMAP(WMI_MAIN_SERVICE_AP_DFS, | ||
297 | WMI_SERVICE_AP_DFS); | ||
298 | SVCMAP(WMI_MAIN_SERVICE_11AC, | ||
299 | WMI_SERVICE_11AC); | ||
300 | SVCMAP(WMI_MAIN_SERVICE_BLOCKACK, | ||
301 | WMI_SERVICE_BLOCKACK); | ||
302 | SVCMAP(WMI_MAIN_SERVICE_PHYERR, | ||
303 | WMI_SERVICE_PHYERR); | ||
304 | SVCMAP(WMI_MAIN_SERVICE_BCN_FILTER, | ||
305 | WMI_SERVICE_BCN_FILTER); | ||
306 | SVCMAP(WMI_MAIN_SERVICE_RTT, | ||
307 | WMI_SERVICE_RTT); | ||
308 | SVCMAP(WMI_MAIN_SERVICE_RATECTRL, | ||
309 | WMI_SERVICE_RATECTRL); | ||
310 | SVCMAP(WMI_MAIN_SERVICE_WOW, | ||
311 | WMI_SERVICE_WOW); | ||
312 | SVCMAP(WMI_MAIN_SERVICE_RATECTRL_CACHE, | ||
313 | WMI_SERVICE_RATECTRL_CACHE); | ||
314 | SVCMAP(WMI_MAIN_SERVICE_IRAM_TIDS, | ||
315 | WMI_SERVICE_IRAM_TIDS); | ||
316 | SVCMAP(WMI_MAIN_SERVICE_ARPNS_OFFLOAD, | ||
317 | WMI_SERVICE_ARPNS_OFFLOAD); | ||
318 | SVCMAP(WMI_MAIN_SERVICE_NLO, | ||
319 | WMI_SERVICE_NLO); | ||
320 | SVCMAP(WMI_MAIN_SERVICE_GTK_OFFLOAD, | ||
321 | WMI_SERVICE_GTK_OFFLOAD); | ||
322 | SVCMAP(WMI_MAIN_SERVICE_SCAN_SCH, | ||
323 | WMI_SERVICE_SCAN_SCH); | ||
324 | SVCMAP(WMI_MAIN_SERVICE_CSA_OFFLOAD, | ||
325 | WMI_SERVICE_CSA_OFFLOAD); | ||
326 | SVCMAP(WMI_MAIN_SERVICE_CHATTER, | ||
327 | WMI_SERVICE_CHATTER); | ||
328 | SVCMAP(WMI_MAIN_SERVICE_COEX_FREQAVOID, | ||
329 | WMI_SERVICE_COEX_FREQAVOID); | ||
330 | SVCMAP(WMI_MAIN_SERVICE_PACKET_POWER_SAVE, | ||
331 | WMI_SERVICE_PACKET_POWER_SAVE); | ||
332 | SVCMAP(WMI_MAIN_SERVICE_FORCE_FW_HANG, | ||
333 | WMI_SERVICE_FORCE_FW_HANG); | ||
334 | SVCMAP(WMI_MAIN_SERVICE_GPIO, | ||
335 | WMI_SERVICE_GPIO); | ||
336 | SVCMAP(WMI_MAIN_SERVICE_STA_DTIM_PS_MODULATED_DTIM, | ||
337 | WMI_SERVICE_STA_DTIM_PS_MODULATED_DTIM); | ||
338 | SVCMAP(WMI_MAIN_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG, | ||
339 | WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG); | ||
340 | SVCMAP(WMI_MAIN_SERVICE_STA_UAPSD_VAR_AUTO_TRIG, | ||
341 | WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG); | ||
342 | SVCMAP(WMI_MAIN_SERVICE_STA_KEEP_ALIVE, | ||
343 | WMI_SERVICE_STA_KEEP_ALIVE); | ||
344 | SVCMAP(WMI_MAIN_SERVICE_TX_ENCAP, | ||
345 | WMI_SERVICE_TX_ENCAP); | ||
346 | } | ||
347 | |||
348 | #undef SVCMAP | ||
186 | 349 | ||
187 | #define WMI_SERVICE_BM_SIZE \ | 350 | #define WMI_SERVICE_BM_SIZE \ |
188 | ((WMI_MAX_SERVICE + sizeof(u32) - 1)/sizeof(u32)) | 351 | ((WMI_MAX_SERVICE + sizeof(u32) - 1)/sizeof(u32)) |
@@ -1229,10 +1392,6 @@ struct wlan_host_mem_req { | |||
1229 | __le32 num_units; | 1392 | __le32 num_units; |
1230 | } __packed; | 1393 | } __packed; |
1231 | 1394 | ||
1232 | #define WMI_SERVICE_IS_ENABLED(wmi_svc_bmap, svc_id) \ | ||
1233 | ((((wmi_svc_bmap)[(svc_id)/(sizeof(u32))]) & \ | ||
1234 | (1 << ((svc_id)%(sizeof(u32))))) != 0) | ||
1235 | |||
1236 | /* | 1395 | /* |
1237 | * The following struct holds optional payload for | 1396 | * The following struct holds optional payload for |
1238 | * wmi_service_ready_event,e.g., 11ac pass some of the | 1397 | * wmi_service_ready_event,e.g., 11ac pass some of the |