b33464f6a9c706d690f2018ca991cb9ac1d13ad9
[GitHub/MotorolaMobilityLLC/kernel-slsi.git] / drivers / net / wireless / scsc / nl80211_vendor.h
1 /*****************************************************************************
2 *
3 * Copyright (c) 2012 - 2019 Samsung Electronics Co., Ltd. All rights reserved
4 *
5 ****************************************************************************/
6
7 #include "nl80211_vendor_nan.h"
8
9 #ifndef __SLSI_NL80211_VENDOR_H_
10 #define __SLSI_NL80211_VENDOR_H_
11
12 #define OUI_GOOGLE 0x001A11
13 #define OUI_SAMSUNG 0x0000f0
14 #define SLSI_NL80211_GSCAN_SUBCMD_RANGE_START 0x1000
15 #define SLSI_NL80211_GSCAN_EVENT_RANGE_START 0x01
16 #define SLSI_NL80211_LOGGING_SUBCMD_RANGE_START 0x1400
17 #define SLSI_NL80211_NAN_SUBCMD_RANGE_START 0x1500
18 #define SLSI_NL80211_RTT_SUBCMD_RANGE_START 0x1100
19 #define SLSI_NL80211_APF_SUBCMD_RANGE_START 0x1600
20 #define SLSI_GSCAN_SCAN_ID_START 0x410
21 #define SLSI_GSCAN_SCAN_ID_END 0x500
22
23 #define SLSI_GSCAN_MAX_BUCKETS (8)
24 #define SLSI_GSCAN_MAX_CHANNELS (16) /* As per gscan.h */
25 #define SLSI_GSCAN_MAX_HOTLIST_APS (64)
26 #define SLSI_GSCAN_MAX_BUCKETS_PER_GSCAN (SLSI_GSCAN_MAX_BUCKETS)
27 #define SLSI_GSCAN_MAX_SCAN_CACHE_SIZE (12000)
28 #define SLSI_GSCAN_MAX_AP_CACHE_PER_SCAN (16)
29 #define SLSI_GSCAN_MAX_SCAN_REPORTING_THRESHOLD (100)
30 #define SLSI_GSCAN_MAX_SIGNIFICANT_CHANGE_APS (64)
31 #define SLSI_GSCAN_MAX_EPNO_SSIDS (32)
32 #define SLSI_GSCAN_MAX_EPNO_HS2_PARAM (8) /* Framework is not using this. Tune when needed */
33
34 #define SLSI_REPORT_EVENTS_NONE (0)
35 #define SLSI_REPORT_EVENTS_EACH_SCAN (1)
36 #define SLSI_REPORT_EVENTS_FULL_RESULTS (2)
37 #define SLSI_REPORT_EVENTS_NO_BATCH (4)
38
39 #define SLSI_NL_ATTRIBUTE_U8_LEN (NLA_HDRLEN + 1)
40 #define SLSI_NL_ATTRIBUTE_U16_LEN (NLA_HDRLEN + 2)
41 #define SLSI_NL_ATTRIBUTE_U32_LEN (NLA_HDRLEN + 4)
42 #define SLSI_NL_ATTRIBUTE_COUNTRY_CODE (4)
43 #define SLSI_NL_ATTRIBUTE_LATENCY_MODE (5)
44
45 #define SLSI_NL_VENDOR_ID_OVERHEAD SLSI_NL_ATTRIBUTE_U32_LEN
46 #define SLSI_NL_VENDOR_SUBCMD_OVERHEAD SLSI_NL_ATTRIBUTE_U32_LEN
47 #define SLSI_NL_VENDOR_DATA_OVERHEAD (NLA_HDRLEN)
48
49 #define SLSI_NL_VENDOR_REPLY_OVERHEAD (SLSI_NL_VENDOR_ID_OVERHEAD + \
50 SLSI_NL_VENDOR_SUBCMD_OVERHEAD + \
51 SLSI_NL_VENDOR_DATA_OVERHEAD)
52
53 #define SLSI_GSCAN_RTT_UNSPECIFIED (-1)
54 #define SLSI_GSCAN_HASH_TABLE_SIZE (32)
55 #define SLSI_GSCAN_HASH_KEY_MASK (0x1F)
56 #define SLSI_GSCAN_GET_HASH_KEY(_key) (_key & SLSI_GSCAN_HASH_KEY_MASK)
57
58 #define SLSI_KEEP_SCAN_RESULT (0)
59 #define SLSI_DISCARD_SCAN_RESULT (1)
60
61 #define SLSI_GSCAN_MAX_BSSID_PER_IE (20)
62
63 #define SLSI_LLS_CAPABILITY_QOS 0x00000001 /* set for QOS association */
64 #define SLSI_LLS_CAPABILITY_PROTECTED 0x00000002 /* set for protected association (802.11 beacon frame control protected bit set)*/
65 #define SLSI_LLS_CAPABILITY_INTERWORKING 0x00000004 /* set if 802.11 Extended Capabilities element interworking bit is set*/
66 #define SLSI_LLS_CAPABILITY_HS20 0x00000008 /* set for HS20 association*/
67 #define SLSI_LLS_CAPABILITY_SSID_UTF8 0x00000010 /* set is 802.11 Extended Capabilities element UTF-8 SSID bit is set*/
68 #define SLSI_LLS_CAPABILITY_COUNTRY 0x00000020 /* set is 802.11 Country Element is present*/
69
70 #define TIMESPEC_TO_US(ts) (((u64)(ts).tv_sec * USEC_PER_SEC) + (ts).tv_nsec / NSEC_PER_USEC)
71
72 /* Feature enums */
73 #define SLSI_WIFI_HAL_FEATURE_INFRA 0x000001 /* Basic infrastructure mode */
74 #define SLSI_WIFI_HAL_FEATURE_INFRA_5G 0x000002 /* Support for 5 GHz Band */
75 #define SLSI_WIFI_HAL_FEATURE_HOTSPOT 0x000004 /* Support for GAS/ANQP */
76 #define SLSI_WIFI_HAL_FEATURE_P2P 0x000008 /* Wifi-Direct */
77 #define SLSI_WIFI_HAL_FEATURE_SOFT_AP 0x000010 /* Soft AP */
78 #define SLSI_WIFI_HAL_FEATURE_GSCAN 0x000020 /* Google-Scan APIs */
79 #define SLSI_WIFI_HAL_FEATURE_NAN 0x000040 /* Neighbor Awareness Networking */
80 #define SLSI_WIFI_HAL_FEATURE_D2D_RTT 0x000080 /* Device-to-device RTT */
81 #define SLSI_WIFI_HAL_FEATURE_D2AP_RTT 0x000100 /* Device-to-AP RTT */
82 #define SLSI_WIFI_HAL_FEATURE_BATCH_SCAN 0x000200 /* Batched Scan (legacy) */
83 #define SLSI_WIFI_HAL_FEATURE_PNO 0x000400 /* Preferred network offload */
84 #define SLSI_WIFI_HAL_FEATURE_ADDITIONAL_STA 0x000800 /* Support for two STAs */
85 #define SLSI_WIFI_HAL_FEATURE_TDLS 0x001000 /* Tunnel directed link setup */
86 #define SLSI_WIFI_HAL_FEATURE_TDLS_OFFCHANNEL 0x002000 /* Support for TDLS off channel */
87 #define SLSI_WIFI_HAL_FEATURE_EPR 0x004000 /* Enhanced power reporting */
88 #define SLSI_WIFI_HAL_FEATURE_AP_STA 0x008000 /* Support for AP STA Concurrency */
89 #define SLSI_WIFI_HAL_FEATURE_LINK_LAYER_STATS 0x010000 /* Link layer stats collection */
90 #define SLSI_WIFI_HAL_FEATURE_LOGGER 0x020000 /* WiFi Logger */
91 #define SLSI_WIFI_HAL_FEATURE_HAL_EPNO 0x040000 /* WiFi PNO enhanced */
92 #define SLSI_WIFI_HAL_FEATURE_RSSI_MONITOR 0x080000 /* RSSI Monitor */
93 #define SLSI_WIFI_HAL_FEATURE_MKEEP_ALIVE 0x100000 /* WiFi mkeep_alive */
94 #define SLSI_WIFI_HAL_FEATURE_CONTROL_ROAMING 0x800000 /* Enable/Disable firmware roaming macro */
95
96 enum slsi_wifi_attr {
97 SLSI_NL_ATTRIBUTE_ND_OFFLOAD_VALUE = 0,
98 SLSI_NL_ATTRIBUTE_PNO_RANDOM_MAC_OUI
99 };
100
101 enum SLSI_APF_ATTRIBUTES {
102 SLSI_APF_ATTR_VERSION = 0,
103 SLSI_APF_ATTR_MAX_LEN,
104 SLSI_APF_ATTR_PROGRAM,
105 SLSI_APF_ATTR_PROGRAM_LEN
106 };
107
108 enum SLSI_ROAM_ATTRIBUTES {
109 SLSI_NL_ATTR_MAX_BLACKLIST_SIZE,
110 SLSI_NL_ATTR_MAX_WHITELIST_SIZE,
111 SLSI_NL_ATTR_ROAM_STATE
112 };
113
114 enum slsi_acs_attr_offload {
115 SLSI_ACS_ATTR_CHANNEL_INVALID = 0,
116 SLSI_ACS_ATTR_PRIMARY_CHANNEL,
117 SLSI_ACS_ATTR_SECONDARY_CHANNEL,
118 SLSI_ACS_ATTR_HW_MODE,
119 SLSI_ACS_ATTR_HT_ENABLED,
120 SLSI_ACS_ATTR_HT40_ENABLED,
121 SLSI_ACS_ATTR_VHT_ENABLED,
122 SLSI_ACS_ATTR_CHWIDTH,
123 SLSI_ACS_ATTR_CH_LIST,
124 SLSI_ACS_ATTR_VHT_SEG0_CENTER_CHANNEL,
125 SLSI_ACS_ATTR_VHT_SEG1_CENTER_CHANNEL,
126 SLSI_ACS_ATTR_FREQ_LIST,
127 /* keep last */
128 SLSI_ACS_ATTR_AFTER_LAST,
129 SLSI_ACS_ATTR_MAX =
130 SLSI_ACS_ATTR_AFTER_LAST - 1
131 };
132
133 #ifdef CONFIG_SLSI_WLAN_STA_FWD_BEACON
134 enum slsi_wips_attr {
135 SLSI_WLAN_VENDOR_ATTR_FORWARD_BEACON_SSID = 0,
136 SLSI_WLAN_VENDOR_ATTR_FORWARD_BEACON_BSSID,
137 SLSI_WLAN_VENDOR_ATTR_FORWARD_BEACON_CHANNEL,
138 SLSI_WLAN_VENDOR_ATTR_FORWARD_BEACON_BCN_INTERVAL,
139 SLSI_WLAN_VENDOR_ATTR_FORWARD_BEACON_TIME_STAMP1,
140 SLSI_WLAN_VENDOR_ATTR_FORWARD_BEACON_TIME_STAMP2,
141 SLSI_WLAN_VENDOR_ATTR_FORWARD_BEACON_SYS_TIME,
142 SLSI_WLAN_VENDOR_ATTR_FORWARD_BEACON_MAX
143 };
144
145 enum slsi_wips_abort_attr {
146 SLSI_WLAN_VENDOR_ATTR_FORWARD_BEACON_ABORT = 0,
147 SLSI_WLAN_VENDOR_ATTR_FORWARD_BEACON_ABORT_MAX,
148 };
149
150 enum slsi_forward_beacon_abort_reason {
151 SLSI_FORWARD_BEACON_ABORT_REASON_UNSPECIFIED = 0,
152 SLSI_FORWARD_BEACON_ABORT_REASON_SCANNING,
153 SLSI_FORWARD_BEACON_ABORT_REASON_ROAMING,
154 SLSI_FORWARD_BEACON_ABORT_REASON_SUSPENDED,
155 SLSI_FORWARD_BEACON_ABORT_REASON_OFFSET = 0x8007,
156 };
157 #endif
158
159 enum slsi_acs_hw_mode {
160 SLSI_ACS_MODE_IEEE80211B,
161 SLSI_ACS_MODE_IEEE80211G,
162 SLSI_ACS_MODE_IEEE80211A,
163 SLSI_ACS_MODE_IEEE80211AD,
164 SLSI_ACS_MODE_IEEE80211ANY,
165 };
166
167 enum GSCAN_ATTRIBUTE {
168 GSCAN_ATTRIBUTE_NUM_BUCKETS = 10,
169 GSCAN_ATTRIBUTE_BASE_PERIOD,
170 GSCAN_ATTRIBUTE_BUCKETS_BAND,
171 GSCAN_ATTRIBUTE_BUCKET_ID,
172 GSCAN_ATTRIBUTE_BUCKET_PERIOD,
173 GSCAN_ATTRIBUTE_BUCKET_NUM_CHANNELS,
174 GSCAN_ATTRIBUTE_BUCKET_CHANNELS,
175 GSCAN_ATTRIBUTE_NUM_AP_PER_SCAN,
176 GSCAN_ATTRIBUTE_REPORT_THRESHOLD,
177 GSCAN_ATTRIBUTE_NUM_SCANS_TO_CACHE,
178 GSCAN_ATTRIBUTE_REPORT_THRESHOLD_NUM_SCANS,
179 GSCAN_ATTRIBUTE_BAND = GSCAN_ATTRIBUTE_BUCKETS_BAND,
180
181 GSCAN_ATTRIBUTE_ENABLE_FEATURE = 20,
182 GSCAN_ATTRIBUTE_SCAN_RESULTS_COMPLETE, /* indicates no more results */
183 GSCAN_ATTRIBUTE_REPORT_EVENTS,
184
185 /* remaining reserved for additional attributes */
186 GSCAN_ATTRIBUTE_NUM_OF_RESULTS = 30,
187 GSCAN_ATTRIBUTE_SCAN_RESULTS, /* flat array of wifi_scan_result */
188 GSCAN_ATTRIBUTE_NUM_CHANNELS,
189 GSCAN_ATTRIBUTE_CHANNEL_LIST,
190 GSCAN_ATTRIBUTE_SCAN_ID,
191 GSCAN_ATTRIBUTE_SCAN_FLAGS,
192 GSCAN_ATTRIBUTE_SCAN_BUCKET_BIT,
193
194 /* remaining reserved for additional attributes */
195 GSCAN_ATTRIBUTE_RSSI_SAMPLE_SIZE = 60,
196 GSCAN_ATTRIBUTE_LOST_AP_SAMPLE_SIZE,
197 GSCAN_ATTRIBUTE_MIN_BREACHING,
198 GSCAN_ATTRIBUTE_SIGNIFICANT_CHANGE_BSSIDS,
199
200 GSCAN_ATTRIBUTE_BUCKET_STEP_COUNT = 70,
201 GSCAN_ATTRIBUTE_BUCKET_EXPONENT,
202 GSCAN_ATTRIBUTE_BUCKET_MAX_PERIOD,
203
204 GSCAN_ATTRIBUTE_NUM_BSSID,
205 GSCAN_ATTRIBUTE_BLACKLIST_BSSID,
206
207 GSCAN_ATTRIBUTE_MAX
208 };
209
210 enum epno_ssid_attribute {
211 SLSI_ATTRIBUTE_EPNO_MINIMUM_5G_RSSI,
212 SLSI_ATTRIBUTE_EPNO_MINIMUM_2G_RSSI,
213 SLSI_ATTRIBUTE_EPNO_INITIAL_SCORE_MAX,
214 SLSI_ATTRIBUTE_EPNO_CUR_CONN_BONUS,
215 SLSI_ATTRIBUTE_EPNO_SAME_NETWORK_BONUS,
216 SLSI_ATTRIBUTE_EPNO_SECURE_BONUS,
217 SLSI_ATTRIBUTE_EPNO_5G_BONUS,
218 SLSI_ATTRIBUTE_EPNO_SSID_NUM,
219 SLSI_ATTRIBUTE_EPNO_SSID_LIST,
220 SLSI_ATTRIBUTE_EPNO_SSID,
221 SLSI_ATTRIBUTE_EPNO_SSID_LEN,
222 SLSI_ATTRIBUTE_EPNO_FLAGS,
223 SLSI_ATTRIBUTE_EPNO_AUTH,
224 SLSI_ATTRIBUTE_EPNO_MAX
225 };
226
227 enum epno_hs_attribute {
228 SLSI_ATTRIBUTE_EPNO_HS_PARAM_LIST,
229 SLSI_ATTRIBUTE_EPNO_HS_NUM,
230 SLSI_ATTRIBUTE_EPNO_HS_ID,
231 SLSI_ATTRIBUTE_EPNO_HS_REALM,
232 SLSI_ATTRIBUTE_EPNO_HS_CONSORTIUM_IDS,
233 SLSI_ATTRIBUTE_EPNO_HS_PLMN,
234 SLSI_ATTRIBUTE_EPNO_HS_MAX
235 };
236
237 enum gscan_bucket_attributes {
238 GSCAN_ATTRIBUTE_CH_BUCKET_1,
239 GSCAN_ATTRIBUTE_CH_BUCKET_2,
240 GSCAN_ATTRIBUTE_CH_BUCKET_3,
241 GSCAN_ATTRIBUTE_CH_BUCKET_4,
242 GSCAN_ATTRIBUTE_CH_BUCKET_5,
243 GSCAN_ATTRIBUTE_CH_BUCKET_6,
244 GSCAN_ATTRIBUTE_CH_BUCKET_7,
245 GSCAN_ATTRIBUTE_CH_BUCKET_8
246 };
247
248 enum wifi_band {
249 WIFI_BAND_UNSPECIFIED,
250 WIFI_BAND_BG = 1, /* 2.4 GHz */
251 WIFI_BAND_A = 2, /* 5 GHz without DFS */
252 WIFI_BAND_A_DFS = 4, /* 5 GHz DFS only */
253 WIFI_BAND_A_WITH_DFS = 6, /* 5 GHz with DFS */
254 WIFI_BAND_ABG = 3, /* 2.4 GHz + 5 GHz; no DFS */
255 WIFI_BAND_ABG_WITH_DFS = 7, /* 2.4 GHz + 5 GHz with DFS */
256 };
257
258 enum wifi_scan_event {
259 WIFI_SCAN_RESULTS_AVAILABLE,
260 WIFI_SCAN_THRESHOLD_NUM_SCANS,
261 WIFI_SCAN_THRESHOLD_PERCENT,
262 WIFI_SCAN_FAILED,
263 };
264
265 enum wifi_mkeep_alive_attribute {
266 MKEEP_ALIVE_ATTRIBUTE_ID,
267 MKEEP_ALIVE_ATTRIBUTE_IP_PKT,
268 MKEEP_ALIVE_ATTRIBUTE_IP_PKT_LEN,
269 MKEEP_ALIVE_ATTRIBUTE_SRC_MAC_ADDR,
270 MKEEP_ALIVE_ATTRIBUTE_DST_MAC_ADDR,
271 MKEEP_ALIVE_ATTRIBUTE_PERIOD_MSEC
272 };
273
274 enum wifi_rssi_monitor_attr {
275 SLSI_RSSI_MONITOR_ATTRIBUTE_MAX_RSSI,
276 SLSI_RSSI_MONITOR_ATTRIBUTE_MIN_RSSI,
277 SLSI_RSSI_MONITOR_ATTRIBUTE_START
278 };
279
280 enum lls_attribute {
281 LLS_ATTRIBUTE_SET_MPDU_SIZE_THRESHOLD = 1,
282 LLS_ATTRIBUTE_SET_AGGR_STATISTICS_GATHERING,
283 LLS_ATTRIBUTE_CLEAR_STOP_REQUEST_MASK,
284 LLS_ATTRIBUTE_CLEAR_STOP_REQUEST,
285 LLS_ATTRIBUTE_MAX
286 };
287
288 enum slsi_hal_vendor_subcmds {
289 SLSI_NL80211_VENDOR_SUBCMD_GET_CAPABILITIES = SLSI_NL80211_GSCAN_SUBCMD_RANGE_START,
290 SLSI_NL80211_VENDOR_SUBCMD_GET_VALID_CHANNELS,
291 SLSI_NL80211_VENDOR_SUBCMD_ADD_GSCAN,
292 SLSI_NL80211_VENDOR_SUBCMD_DEL_GSCAN,
293 SLSI_NL80211_VENDOR_SUBCMD_GET_SCAN_RESULTS,
294 /*****Deprecated due to fapi updates.Do not remove.************/
295 SLSI_NL80211_VENDOR_SUBCMD_SET_BSSID_HOTLIST,
296 SLSI_NL80211_VENDOR_SUBCMD_RESET_BSSID_HOTLIST,
297 SLSI_NL80211_VENDOR_SUBCMD_GET_HOTLIST_RESULTS,
298 SLSI_NL80211_VENDOR_SUBCMD_SET_SIGNIFICANT_CHANGE,
299 SLSI_NL80211_VENDOR_SUBCMD_RESET_SIGNIFICANT_CHANGE,
300 /********************************************************/
301 SLSI_NL80211_VENDOR_SUBCMD_SET_GSCAN_OUI,
302 SLSI_NL80211_VENDOR_SUBCMD_SET_NODFS,
303 SLSI_NL80211_VENDOR_SUBCMD_START_KEEP_ALIVE_OFFLOAD,
304 SLSI_NL80211_VENDOR_SUBCMD_STOP_KEEP_ALIVE_OFFLOAD,
305 SLSI_NL80211_VENDOR_SUBCMD_SET_BSSID_BLACKLIST,
306 SLSI_NL80211_VENDOR_SUBCMD_SET_EPNO_LIST,
307 SLSI_NL80211_VENDOR_SUBCMD_SET_HS_LIST,
308 SLSI_NL80211_VENDOR_SUBCMD_RESET_HS_LIST,
309 SLSI_NL80211_VENDOR_SUBCMD_SET_RSSI_MONITOR,
310 SLSI_NL80211_VENDOR_SUBCMD_LSTATS_SUBCMD_SET_STATS,
311 SLSI_NL80211_VENDOR_SUBCMD_LSTATS_SUBCMD_GET_STATS,
312 SLSI_NL80211_VENDOR_SUBCMD_LSTATS_SUBCMD_CLEAR_STATS,
313 SLSI_NL80211_VENDOR_SUBCMD_GET_FEATURE_SET,
314 SLSI_NL80211_VENDOR_SUBCMD_SET_COUNTRY_CODE,
315 SLSI_NL80211_VENDOR_SUBCMD_CONFIGURE_ND_OFFLOAD,
316 SLSI_NL80211_VENDOR_SUBCMD_GET_ROAMING_CAPABILITIES,
317 SLSI_NL80211_VENDOR_SUBCMD_SET_ROAMING_STATE,
318 SLSI_NL80211_VENDOR_SUBCMD_SET_LATENCY_MODE,
319 SLSI_NL80211_VENDOR_SUBCMD_START_LOGGING = SLSI_NL80211_LOGGING_SUBCMD_RANGE_START,
320 SLSI_NL80211_VENDOR_SUBCMD_TRIGGER_FW_MEM_DUMP,
321 SLSI_NL80211_VENDOR_SUBCMD_GET_FW_MEM_DUMP,
322 SLSI_NL80211_VENDOR_SUBCMD_GET_VERSION,
323 SLSI_NL80211_VENDOR_SUBCMD_GET_RING_STATUS,
324 SLSI_NL80211_VENDOR_SUBCMD_GET_RING_DATA,
325 SLSI_NL80211_VENDOR_SUBCMD_GET_FEATURE,
326 SLSI_NL80211_VENDOR_SUBCMD_RESET_LOGGING,
327 SLSI_NL80211_VENDOR_SUBCMD_TRIGGER_DRIVER_MEM_DUMP,
328 SLSI_NL80211_VENDOR_SUBCMD_GET_DRIVER_MEM_DUMP,
329 SLSI_NL80211_VENDOR_SUBCMD_START_PKT_FATE_MONITORING,
330 SLSI_NL80211_VENDOR_SUBCMD_GET_TX_PKT_FATES,
331 SLSI_NL80211_VENDOR_SUBCMD_GET_RX_PKT_FATES,
332 SLSI_NL80211_VENDOR_SUBCMD_GET_WAKE_REASON_STATS,
333 SLSI_NL80211_VENDOR_SUBCMD_NAN_ENABLE = SLSI_NL80211_NAN_SUBCMD_RANGE_START,
334 SLSI_NL80211_VENDOR_SUBCMD_NAN_DISABLE,
335 SLSI_NL80211_VENDOR_SUBCMD_NAN_PUBLISH,
336 SLSI_NL80211_VENDOR_SUBCMD_NAN_PUBLISHCANCEL,
337 SLSI_NL80211_VENDOR_SUBCMD_NAN_SUBSCRIBE,
338 SLSI_NL80211_VENDOR_SUBCMD_NAN_SUBSCRIBECANCEL,
339 SLSI_NL80211_VENDOR_SUBCMD_NAN_TXFOLLOWUP,
340 SLSI_NL80211_VENDOR_SUBCMD_NAN_CONFIG,
341 SLSI_NL80211_VENDOR_SUBCMD_NAN_CAPABILITIES,
342 SLSI_NL80211_VENDOR_SUBCMD_RTT_GET_CAPABILITIES = SLSI_NL80211_RTT_SUBCMD_RANGE_START,
343 SLSI_NL80211_VENDOR_SUBCMD_RTT_RANGE_START,
344 SLSI_NL80211_VENDOR_SUBCMD_RTT_RANGE_CANCEL,
345 SLSI_NL80211_VENDOR_SUBCMD_APF_SET_FILTER = SLSI_NL80211_APF_SUBCMD_RANGE_START,
346 SLSI_NL80211_VENDOR_SUBCMD_APF_GET_CAPABILITIES,
347 SLSI_NL80211_VENDOR_SUBCMD_APF_READ_FILTER
348 };
349
350 enum slsi_supp_vendor_subcmds {
351 SLSI_NL80211_VENDOR_SUBCMD_UNSPEC = 0,
352 SLSI_NL80211_VENDOR_SUBCMD_KEY_MGMT_SET_KEY,
353 SLSI_NL80211_VENDOR_SUBCMD_ACS_INIT,
354 };
355
356 enum slsi_vendor_event_values {
357 /**********Deprecated now due to fapi updates.Do not remove*/
358 SLSI_NL80211_SIGNIFICANT_CHANGE_EVENT,
359 SLSI_NL80211_HOTLIST_AP_FOUND_EVENT,
360 /******************************************/
361 SLSI_NL80211_SCAN_RESULTS_AVAILABLE_EVENT,
362 SLSI_NL80211_FULL_SCAN_RESULT_EVENT,
363 SLSI_NL80211_SCAN_EVENT,
364 /**********Deprecated now due to fapi updates.Do not remove*/
365 SLSI_NL80211_HOTLIST_AP_LOST_EVENT,
366 /******************************************/
367 SLSI_NL80211_VENDOR_SUBCMD_KEY_MGMT_ROAM_AUTH,
368 SLSI_NL80211_VENDOR_HANGED_EVENT,
369 SLSI_NL80211_EPNO_EVENT,
370 SLSI_NL80211_HOTSPOT_MATCH,
371 SLSI_NL80211_RSSI_REPORT_EVENT,
372 SLSI_NL80211_LOGGER_RING_EVENT,
373 SLSI_NL80211_LOGGER_FW_DUMP_EVENT,
374 SLSI_NL80211_NAN_RESPONSE_EVENT,
375 SLSI_NL80211_NAN_PUBLISH_TERMINATED_EVENT,
376 SLSI_NL80211_NAN_MATCH_EVENT,
377 SLSI_NL80211_NAN_MATCH_EXPIRED_EVENT,
378 SLSI_NL80211_NAN_SUBSCRIBE_TERMINATED_EVENT,
379 SLSI_NL80211_NAN_FOLLOWUP_EVENT,
380 SLSI_NL80211_NAN_DISCOVERY_ENGINE_EVENT,
381 SLSI_NL80211_NAN_DISABLED_EVENT,
382 SLSI_NL80211_RTT_RESULT_EVENT,
383 SLSI_NL80211_RTT_COMPLETE_EVENT,
384 SLSI_NL80211_VENDOR_ACS_EVENT,
385 SLSI_NL80211_VENDOR_FORWARD_BEACON,
386 SLSI_NL80211_VENDOR_FORWARD_BEACON_ABORT,
387 SLSI_NL80211_NAN_TRANSMIT_FOLLOWUP_STATUS,
388 };
389
390 enum slsi_lls_interface_mode {
391 SLSI_LLS_INTERFACE_STA = 0,
392 SLSI_LLS_INTERFACE_SOFTAP = 1,
393 SLSI_LLS_INTERFACE_IBSS = 2,
394 SLSI_LLS_INTERFACE_P2P_CLIENT = 3,
395 SLSI_LLS_INTERFACE_P2P_GO = 4,
396 SLSI_LLS_INTERFACE_NAN = 5,
397 SLSI_LLS_INTERFACE_MESH = 6,
398 SLSI_LLS_INTERFACE_UNKNOWN = -1
399 };
400
401 enum slsi_lls_connection_state {
402 SLSI_LLS_DISCONNECTED = 0,
403 SLSI_LLS_AUTHENTICATING = 1,
404 SLSI_LLS_ASSOCIATING = 2,
405 SLSI_LLS_ASSOCIATED = 3,
406 SLSI_LLS_EAPOL_STARTED = 4, /* if done by firmware/driver*/
407 SLSI_LLS_EAPOL_COMPLETED = 5, /* if done by firmware/driver*/
408 };
409
410 enum slsi_lls_roam_state {
411 SLSI_LLS_ROAMING_IDLE = 0,
412 SLSI_LLS_ROAMING_ACTIVE = 1,
413 };
414
415 /* access categories */
416 enum slsi_lls_traffic_ac {
417 SLSI_LLS_AC_VO = 0,
418 SLSI_LLS_AC_VI = 1,
419 SLSI_LLS_AC_BE = 2,
420 SLSI_LLS_AC_BK = 3,
421 SLSI_LLS_AC_MAX = 4,
422 };
423
424 /* channel operating width */
425 enum slsi_lls_channel_width {
426 SLSI_LLS_CHAN_WIDTH_20 = 0,
427 SLSI_LLS_CHAN_WIDTH_40 = 1,
428 SLSI_LLS_CHAN_WIDTH_80 = 2,
429 SLSI_LLS_CHAN_WIDTH_160 = 3,
430 SLSI_LLS_CHAN_WIDTH_80P80 = 4,
431 SLSI_LLS_CHAN_WIDTH_5 = 5,
432 SLSI_LLS_CHAN_WIDTH_10 = 6,
433 SLSI_LLS_CHAN_WIDTH_INVALID = -1
434 };
435
436 /* wifi peer type */
437 enum slsi_lls_peer_type {
438 SLSI_LLS_PEER_STA,
439 SLSI_LLS_PEER_AP,
440 SLSI_LLS_PEER_P2P_GO,
441 SLSI_LLS_PEER_P2P_CLIENT,
442 SLSI_LLS_PEER_NAN,
443 SLSI_LLS_PEER_TDLS,
444 SLSI_LLS_PEER_INVALID,
445 };
446
447 /* slsi_enhanced_logging_attributes */
448 enum slsi_enhanced_logging_attributes {
449 SLSI_ENHANCED_LOGGING_ATTRIBUTE_DRIVER_VERSION,
450 SLSI_ENHANCED_LOGGING_ATTRIBUTE_FW_VERSION,
451 SLSI_ENHANCED_LOGGING_ATTRIBUTE_RING_ID,
452 SLSI_ENHANCED_LOGGING_ATTRIBUTE_RING_NAME,
453 SLSI_ENHANCED_LOGGING_ATTRIBUTE_RING_FLAGS,
454 SLSI_ENHANCED_LOGGING_ATTRIBUTE_VERBOSE_LEVEL,
455 SLSI_ENHANCED_LOGGING_ATTRIBUTE_LOG_MAX_INTERVAL,
456 SLSI_ENHANCED_LOGGING_ATTRIBUTE_LOG_MIN_DATA_SIZE,
457 SLSI_ENHANCED_LOGGING_ATTRIBUTE_FW_DUMP_LEN,
458 SLSI_ENHANCED_LOGGING_ATTRIBUTE_FW_DUMP_DATA,
459 SLSI_ENHANCED_LOGGING_ATTRIBUTE_RING_DATA,
460 SLSI_ENHANCED_LOGGING_ATTRIBUTE_RING_STATUS,
461 SLSI_ENHANCED_LOGGING_ATTRIBUTE_RING_NUM,
462 SLSI_ENHANCED_LOGGING_ATTRIBUTE_DRIVER_DUMP_LEN,
463 SLSI_ENHANCED_LOGGING_ATTRIBUTE_DRIVER_DUMP_DATA,
464 SLSI_ENHANCED_LOGGING_ATTRIBUTE_PKT_FATE_NUM,
465 SLSI_ENHANCED_LOGGING_ATTRIBUTE_PKT_FATE_DATA,
466 SLSI_ENHANCED_LOGGING_ATTRIBUTE_WAKE_STATS_INVALID = 0,
467 SLSI_ENHANCED_LOGGING_ATTRIBUTE_WAKE_STATS_TOTAL_CMD_EVENT_WAKE,
468 SLSI_ENHANCED_LOGGING_ATTRIBUTE_WAKE_STATS_CMD_EVENT_WAKE_CNT_PTR,
469 SLSI_ENHANCED_LOGGING_ATTRIBUTE_WAKE_STATS_CMD_EVENT_WAKE_CNT_SZ,
470 SLSI_ENHANCED_LOGGING_ATTRIBUTE_WAKE_STATS_TOTAL_DRIVER_FW_LOCAL_WAKE,
471 SLSI_ENHANCED_LOGGING_ATTRIBUTE_WAKE_STATS_DRIVER_FW_LOCAL_WAKE_CNT_PTR,
472 SLSI_ENHANCED_LOGGING_ATTRIBUTE_WAKE_STATS_DRIVER_FW_LOCAL_WAKE_CNT_SZ,
473 SLSI_ENHANCED_LOGGING_ATTRIBUTE_WAKE_STATS_TOTAL_RX_DATA_WAKE,
474 SLSI_ENHANCED_LOGGING_ATTRIBUTE_WAKE_STATS_RX_UNICAST_CNT,
475 SLSI_ENHANCED_LOGGING_ATTRIBUTE_WAKE_STATS_RX_MULTICAST_CNT,
476 SLSI_ENHANCED_LOGGING_ATTRIBUTE_WAKE_STATS_RX_BROADCAST_CNT,
477 SLSI_ENHANCED_LOGGING_ATTRIBUTE_WAKE_STATS_ICMP_PKT,
478 SLSI_ENHANCED_LOGGING_ATTRIBUTE_WAKE_STATS_ICMP6_PKT,
479 SLSI_ENHANCED_LOGGING_ATTRIBUTE_WAKE_STATS_ICMP6_RA,
480 SLSI_ENHANCED_LOGGING_ATTRIBUTE_WAKE_STATS_ICMP6_NA,
481 SLSI_ENHANCED_LOGGING_ATTRIBUTE_WAKE_STATS_ICMP6_NS,
482 SLSI_ENHANCED_LOGGING_ATTRIBUTE_WAKE_STATS_ICMP4_RX_MULTICAST_CNT,
483 SLSI_ENHANCED_LOGGING_ATTRIBUTE_WAKE_STATS_ICMP6_RX_MULTICAST_CNT,
484 SLSI_ENHANCED_LOGGING_ATTRIBUTE_WAKE_STATS_OTHER_RX_MULTICAST_CNT,
485 };
486
487 enum slsi_rtt_event_attributes {
488 SLSI_RTT_EVENT_ATTR_ADDR = 0,
489 SLSI_RTT_EVENT_ATTR_BURST_NUM,
490 SLSI_RTT_EVENT_ATTR_MEASUREMENT_NUM,
491 SLSI_RTT_EVENT_ATTR_SUCCESS_NUM,
492 SLSI_RTT_EVENT_ATTR_NUM_PER_BURST_PEER,
493 SLSI_RTT_EVENT_ATTR_STATUS,
494 SLSI_RTT_EVENT_ATTR_RETRY_AFTER_DURATION,
495 SLSI_RTT_EVENT_ATTR_TYPE,
496 SLSI_RTT_EVENT_ATTR_RSSI,
497 SLSI_RTT_EVENT_ATTR_RSSI_SPREAD,
498 SLSI_RTT_EVENT_ATTR_TX_PREAMBLE,
499 SLSI_RTT_EVENT_ATTR_TX_NSS,
500 SLSI_RTT_EVENT_ATTR_TX_BW,
501 SLSI_RTT_EVENT_ATTR_TX_MCS,
502 SLSI_RTT_EVENT_ATTR_TX_RATE,
503 SLSI_RTT_EVENT_ATTR_RX_PREAMBLE,
504 SLSI_RTT_EVENT_ATTR_RX_NSS,
505 SLSI_RTT_EVENT_ATTR_RX_BW,
506 SLSI_RTT_EVENT_ATTR_RX_MCS,
507 SLSI_RTT_EVENT_ATTR_RX_RATE,
508 SLSI_RTT_EVENT_ATTR_RTT,
509 SLSI_RTT_EVENT_ATTR_RTT_SD,
510 SLSI_RTT_EVENT_ATTR_RTT_SPREAD,
511 SLSI_RTT_EVENT_ATTR_DISTANCE_MM,
512 SLSI_RTT_EVENT_ATTR_DISTANCE_SD_MM,
513 SLSI_RTT_EVENT_ATTR_DISTANCE_SPREAD_MM,
514 SLSI_RTT_EVENT_ATTR_TIMESTAMP_US,
515 SLSI_RTT_EVENT_ATTR_BURST_DURATION_MSN,
516 SLSI_RTT_EVENT_ATTR_NEGOTIATED_BURST_NUM,
517 SLSI_RTT_EVENT_ATTR_LCI,
518 SLSI_RTT_EVENT_ATTR_LCR,
519
520 };
521
522 /* RTT peer type */
523 enum slsi_rtt_peer_type {
524 SLSI_RTT_PEER_AP = 0x1,
525 SLSI_RTT_PEER_STA,
526 SLSI_RTT_PEER_P2P_GO,
527 SLSI_RTT_PEER_P2P_CLIENT,
528 SLSI_RTT_PEER_NAN,
529 };
530
531 /* RTT Measurement Bandwidth */
532 enum slsi_wifi_rtt_bw {
533 SLSI_WIFI_RTT_BW_5 = 0x01,
534 SLSI_WIFI_RTT_BW_10 = 0x02,
535 SLSI_WIFI_RTT_BW_20 = 0x04,
536 SLSI_WIFI_RTT_BW_40 = 0x08,
537 SLSI_WIFI_RTT_BW_80 = 0x10,
538 SLSI_WIFI_RTT_BW_160 = 0x20
539 };
540
541 /* RTT Measurement Preamble */
542 enum slsi_wifi_rtt_preamble {
543 SLSI_WIFI_RTT_PREAMBLE_LEGACY = 0x1,
544 SLSI_WIFI_RTT_PREAMBLE_HT = 0x2,
545 SLSI_WIFI_RTT_PREAMBLE_VHT = 0x4
546 };
547
548 /* RTT Type */
549 enum slsi_wifi_rtt_type {
550 SLSI_RTT_TYPE_1_SIDED = 0x1,
551 SLSI_RTT_TYPE_2_SIDED,
552 };
553
554 enum slsi_rtt_attribute {
555 SLSI_RTT_ATTRIBUTE_TARGET_CNT = 0,
556 SLSI_RTT_ATTRIBUTE_TARGET_INFO,
557 SLSI_RTT_ATTRIBUTE_TARGET_MAC,
558 SLSI_RTT_ATTRIBUTE_TARGET_TYPE,
559 SLSI_RTT_ATTRIBUTE_TARGET_PEER,
560 SLSI_RTT_ATTRIBUTE_TARGET_CHAN_FREQ,
561 SLSI_RTT_ATTRIBUTE_TARGET_PERIOD,
562 SLSI_RTT_ATTRIBUTE_TARGET_NUM_BURST,
563 SLSI_RTT_ATTRIBUTE_TARGET_NUM_FTM_BURST,
564 SLSI_RTT_ATTRIBUTE_TARGET_NUM_RETRY_FTM,
565 SLSI_RTT_ATTRIBUTE_TARGET_NUM_RETRY_FTMR,
566 SLSI_RTT_ATTRIBUTE_TARGET_LCI,
567 SLSI_RTT_ATTRIBUTE_TARGET_LCR,
568 SLSI_RTT_ATTRIBUTE_TARGET_BURST_DURATION,
569 SLSI_RTT_ATTRIBUTE_TARGET_PREAMBLE,
570 SLSI_RTT_ATTRIBUTE_TARGET_BW,
571 SLSI_RTT_ATTRIBUTE_RESULTS_COMPLETE = 30,
572 SLSI_RTT_ATTRIBUTE_RESULTS_PER_TARGET,
573 SLSI_RTT_ATTRIBUTE_RESULT_CNT,
574 SLSI_RTT_ATTRIBUTE_RESULT,
575 SLSI_RTT_ATTRIBUTE_TARGET_ID
576 };
577
578 /* Ranging status */
579 enum slsi_wifi_rtt_status {
580 SLSI_RTT_STATUS_SUCCESS = 0,
581 SLSI_RTT_STATUS_FAILURE, /* general failure status */
582 SLSI_RTT_STATUS_FAIL_NO_RSP, /* target STA does not respond to request */
583 SLSI_RTT_STATUS_FAIL_REJECTED, /* request rejected. Applies to 2-sided RTT only*/
584 SLSI_RTT_STATUS_FAIL_NOT_SCHEDULED_YET,
585 SLSI_RTT_STATUS_FAIL_TM_TIMEOUT, /* timing measurement times out */
586 SLSI_RTT_STATUS_FAIL_AP_ON_DIFF_CHANNEL, /* Target on different channel, cannot range */
587 SLSI_RTT_STATUS_FAIL_NO_CAPABILITY, /* ranging not supported */
588 SLSI_RTT_STATUS_ABORTED, /* request aborted for unknown reason */
589 SLSI_RTT_STATUS_FAIL_INVALID_TS, /* Invalid T1-T4 timestamp */
590 SLSI_RTT_STATUS_FAIL_PROTOCOL, /* 11mc protocol failed */
591 SLSI_RTT_STATUS_FAIL_SCHEDULE, /* request could not be scheduled */
592 SLSI_RTT_STATUS_FAIL_BUSY_TRY_LATER, /* responder cannot collaborate at time of request */
593 SLSI_RTT_STATUS_INVALID_REQ, /* bad request args */
594 SLSI_RTT_STATUS_NO_WIFI, /* WiFi not enabled */
595 SLSI_RTT_STATUS_FAIL_FTM_PARAM_OVERRIDE /* Responder overrides param info, cannot range with new params */
596 };
597
598 /* Format of information elements found in the beacon */
599 struct slsi_wifi_information_element {
600 u8 id; /* element identifier */
601 u8 len; /* number of bytes to follow */
602 u8 data[];
603 };
604
605 struct slsi_nl_gscan_capabilities {
606 int max_scan_cache_size;
607 int max_scan_buckets;
608 int max_ap_cache_per_scan;
609 int max_rssi_sample_size;
610 int max_scan_reporting_threshold;
611 int max_hotlist_aps;
612 int max_hotlist_ssids;
613 int max_significant_wifi_change_aps;
614 int max_bssid_history_entries;
615 int max_number_epno_networks;
616 int max_number_epno_networks_by_ssid;
617 int max_number_of_white_listed_ssid;
618 };
619
620 struct slsi_nl_channel_param {
621 int channel;
622 int dwell_time_ms;
623 int passive; /* 0 => active, 1 => passive scan; ignored for DFS */
624 };
625
626 struct slsi_nl_bucket_param {
627 int bucket_index;
628 enum wifi_band band;
629 int period; /* desired period in millisecond */
630 u8 report_events;
631 int max_period; /* If non-zero: scan period will grow exponentially to a maximum period of max_period */
632 int exponent; /* multiplier: new_period = old_period ^ exponent */
633 int step_count; /* number of scans performed at a given period and until the exponent is applied */
634 int num_channels;
635 struct slsi_nl_channel_param channels[SLSI_GSCAN_MAX_CHANNELS];
636 };
637
638 struct slsi_nl_gscan_param {
639 int base_period; /* base timer period in ms */
640 int max_ap_per_scan; /* number of APs to store in each scan in the BSSID/RSSI history buffer */
641 int report_threshold_percent; /* when scan_buffer is this much full, wake up application processor */
642 int report_threshold_num_scans; /* wake up application processor after these many scans */
643 int num_buckets;
644 struct slsi_nl_bucket_param nl_bucket[SLSI_GSCAN_MAX_BUCKETS];
645 };
646
647 struct slsi_nl_scan_result_param {
648 u64 ts; /* time since boot (in microsecond) when the result was retrieved */
649 u8 ssid[IEEE80211_MAX_SSID_LEN + 1]; /* NULL terminated */
650 u8 bssid[6];
651 int channel; /* channel frequency in MHz */
652 int rssi; /* in db */
653 s64 rtt; /* in nanoseconds */
654 s64 rtt_sd; /* standard deviation in rtt */
655 u16 beacon_period; /* period advertised in the beacon */
656 u16 capability; /* capabilities advertised in the beacon */
657 u32 ie_length; /* size of the ie_data blob */
658 u8 ie_data[1]; /* beacon IE */
659 };
660
661 struct slsi_bucket {
662 bool used; /* to identify if this entry is free */
663 bool for_change_tracking; /* Indicates if this scan_id is used for change_tracking */
664 u8 report_events; /* this is received from HAL/Framework */
665 u16 scan_id; /* SLSI_GSCAN_SCAN_ID_START + <offset in the array> */
666 int scan_cycle; /* To find the current scan cycle */
667 struct slsi_gscan *gscan; /* gscan ref in which this bucket belongs */
668 };
669
670 struct slsi_gscan {
671 int max_ap_per_scan; /* received from HAL/Framework */
672 int report_threshold_percent; /* received from HAL/Framework */
673 int report_threshold_num_scans; /* received from HAL/Framework */
674 int num_scans;
675 int num_buckets; /* received from HAL/Framework */
676 struct slsi_nl_bucket_param nl_bucket; /* store the first bucket params. used in tracking*/
677 struct slsi_bucket *bucket[SLSI_GSCAN_MAX_BUCKETS_PER_GSCAN];
678 struct slsi_gscan *next;
679 };
680
681 struct slsi_gscan_param {
682 struct slsi_nl_bucket_param *nl_bucket;
683 struct slsi_bucket *bucket;
684 };
685
686 struct slsi_gscan_result {
687 struct slsi_gscan_result *hnext;
688 int scan_cycle;
689 int scan_res_len;
690 int anqp_length;
691 struct slsi_nl_scan_result_param nl_scan_res;
692 };
693
694 struct slsi_epno_ssid_param {
695 u16 flags;
696 u8 ssid_len;
697 u8 ssid[32];
698 };
699
700 struct slsi_epno_param {
701 u16 min_5g_rssi; /* minimum 5GHz RSSI for a BSSID to be considered */
702 u16 min_2g_rssi; /* minimum 2.4GHz RSSI for a BSSID to be considered */
703 u16 initial_score_max; /* maximum score that a network can have before bonuses */
704 u8 current_connection_bonus; /* report current connection bonus only, when there is a
705 * network's score this much higher than the current connection
706 */
707 u8 same_network_bonus; /* score bonus for all networks with the same network flag */
708 u8 secure_bonus; /* score bonus for networks that are not open */
709 u8 band_5g_bonus; /* 5GHz RSSI score bonus (applied to all 5GHz networks) */
710 u8 num_networks; /* number of wifi_epno_network objects */
711 struct slsi_epno_ssid_param epno_ssid[]; /* PNO networks */
712 };
713
714 struct slsi_epno_hs2_param {
715 u32 id; /* identifier of this network block, report this in event */
716 u8 realm[256]; /* null terminated UTF8 encoded realm, 0 if unspecified */
717 s64 roaming_consortium_ids[16]; /* roaming consortium ids to match, 0s if unspecified */
718 u8 plmn[3]; /* mcc/mnc combination as per rules, 0s if unspecified */
719 };
720
721 struct slsi_rssi_monitor_evt {
722 s16 rssi;
723 u8 bssid[ETH_ALEN];
724 };
725
726 /* channel information */
727 struct slsi_lls_channel_info {
728 enum slsi_lls_channel_width width; /* channel width (20, 40, 80, 80+80, 160)*/
729 int center_freq; /* primary 20 MHz channel */
730 int center_freq0; /* center frequency (MHz) first segment */
731 int center_freq1; /* center frequency (MHz) second segment */
732 };
733
734 /* channel statistics */
735 struct slsi_lls_channel_stat {
736 struct slsi_lls_channel_info channel;
737 u32 on_time; /* msecs the radio is awake (32 bits number accruing over time) */
738 u32 cca_busy_time; /* msecs the CCA register is busy (32 bits number accruing over time) */
739 };
740
741 /* wifi rate */
742 struct slsi_lls_rate {
743 u32 preamble :3; /* 0: OFDM, 1:CCK, 2:HT 3:VHT 4..7 reserved*/
744 u32 nss :2; /* 0:1x1, 1:2x2, 3:3x3, 4:4x4*/
745 u32 bw :3; /* 0:20MHz, 1:40Mhz, 2:80Mhz, 3:160Mhz*/
746 u32 rate_mcs_idx :8; /* OFDM/CCK rate code mcs index*/
747 u32 reserved :16; /* reserved*/
748 u32 bitrate; /* units of 100 Kbps*/
749 };
750
751 /* per rate statistics */
752 struct slsi_lls_rate_stat {
753 struct slsi_lls_rate rate; /* rate information*/
754 u32 tx_mpdu; /* number of successfully transmitted data pkts (ACK rcvd)*/
755 u32 rx_mpdu; /* number of received data pkts*/
756 u32 mpdu_lost; /* number of data packet losses (no ACK)*/
757 u32 retries; /* total number of data pkt retries*/
758 u32 retries_short; /* number of short data pkt retries*/
759 u32 retries_long; /* number of long data pkt retries*/
760 };
761
762 /* radio statistics */
763 struct slsi_lls_radio_stat {
764 int radio; /* wifi radio (if multiple radio supported)*/
765 u32 on_time; /* msecs the radio is awake (32 bits number accruing over time)*/
766 u32 tx_time; /* msecs the radio is transmitting (32 bits number accruing over time)*/
767 u32 rx_time; /* msecs the radio is in active receive (32 bits number accruing over time)*/
768 u32 on_time_scan; /* msecs the radio is awake due to all scan (32 bits number accruing over time)*/
769 u32 on_time_nbd; /* msecs the radio is awake due to NAN (32 bits number accruing over time)*/
770 u32 on_time_gscan; /* msecs the radio is awake due to G?scan (32 bits number accruing over time)*/
771 u32 on_time_roam_scan; /* msecs the radio is awake due to roam?scan (32 bits number accruing over time)*/
772 u32 on_time_pno_scan; /* msecs the radio is awake due to PNO scan (32 bits number accruing over time)*/
773 u32 on_time_hs20; /* msecs the radio is awake due to HS2.0 scans and GAS exchange (32 bits number accruing over time)*/
774 u32 num_channels; /* number of channels*/
775 struct slsi_lls_channel_stat channels[]; /* channel statistics*/
776 };
777
778 struct slsi_lls_interface_link_layer_info {
779 enum slsi_lls_interface_mode mode; /* interface mode*/
780 u8 mac_addr[6]; /* interface mac address (self)*/
781 enum slsi_lls_connection_state state; /* connection state (valid for STA, CLI only)*/
782 enum slsi_lls_roam_state roaming; /* roaming state*/
783 u32 capabilities; /* WIFI_CAPABILITY_XXX (self)*/
784 u8 ssid[33]; /* null terminated SSID*/
785 u8 bssid[6]; /* bssid*/
786 u8 ap_country_str[3]; /* country string advertised by AP*/
787 u8 country_str[3]; /* country string for this association*/
788 };
789
790 /* per peer statistics */
791 struct slsi_lls_peer_info {
792 enum slsi_lls_peer_type type; /* peer type (AP, TDLS, GO etc.)*/
793 u8 peer_mac_address[6]; /* mac address*/
794 u32 capabilities; /* peer WIFI_CAPABILITY_XXX*/
795 u32 num_rate; /* number of rates*/
796 struct slsi_lls_rate_stat rate_stats[]; /* per rate statistics, number of entries = num_rate*/
797 };
798
799 /* Per access category statistics */
800 struct slsi_lls_wmm_ac_stat {
801 enum slsi_lls_traffic_ac ac; /* access category (VI, VO, BE, BK)*/
802 u32 tx_mpdu; /* number of successfully transmitted unicast data pkts (ACK rcvd)*/
803 u32 rx_mpdu; /* number of received unicast data packets*/
804 u32 tx_mcast; /* number of successfully transmitted multicast data packets*/
805 u32 rx_mcast; /* number of received multicast data packets*/
806 u32 rx_ampdu; /* number of received unicast a-mpdus; support of this counter is optional*/
807 u32 tx_ampdu; /* number of transmitted unicast a-mpdus; support of this counter is optional*/
808 u32 mpdu_lost; /* number of data pkt losses (no ACK)*/
809 u32 retries; /* total number of data pkt retries*/
810 u32 retries_short; /* number of short data pkt retries*/
811 u32 retries_long; /* number of long data pkt retries*/
812 u32 contention_time_min; /* data pkt min contention time (usecs)*/
813 u32 contention_time_max; /* data pkt max contention time (usecs)*/
814 u32 contention_time_avg; /* data pkt avg contention time (usecs)*/
815 u32 contention_num_samples; /* num of data pkts used for contention statistics*/
816 };
817
818 struct slsi_rx_data_cnt_details {
819 int rx_unicast_cnt; /*Total rx unicast packet which woke up host */
820 int rx_multicast_cnt; /*Total rx multicast packet which woke up host */
821 int rx_broadcast_cnt; /*Total rx broadcast packet which woke up host */
822 };
823
824 struct slsi_rx_wake_pkt_type_classification {
825 int icmp_pkt; /*wake icmp packet count */
826 int icmp6_pkt; /*wake icmp6 packet count */
827 int icmp6_ra; /*wake icmp6 RA packet count */
828 int icmp6_na; /*wake icmp6 NA packet count */
829 int icmp6_ns; /*wake icmp6 NS packet count */
830 };
831
832 struct slsi_rx_multicast_cnt {
833 int ipv4_rx_multicast_addr_cnt; /*Rx wake packet was ipv4 multicast */
834 int ipv6_rx_multicast_addr_cnt; /*Rx wake packet was ipv6 multicast */
835 int other_rx_multicast_addr_cnt;/*Rx wake packet was non-ipv4 and non-ipv6*/
836 };
837
838 /*
839 * Structure holding all the driver/firmware wake count reasons.
840 *
841 * Buffers for the array fields (cmd_event_wake_cnt/driver_fw_local_wake_cnt)
842 * are allocated and freed by the framework. The size of each allocated
843 * array is indicated by the corresponding |_cnt| field. HAL needs to fill in
844 * the corresponding |_used| field to indicate the number of elements used in
845 * the array.
846 */
847 struct slsi_wlan_driver_wake_reason_cnt {
848 int total_cmd_event_wake; /* Total count of cmd event wakes */
849 int *cmd_event_wake_cnt; /* Individual wake count array, each index a reason */
850 int cmd_event_wake_cnt_sz; /* Max number of cmd event wake reasons */
851 int cmd_event_wake_cnt_used; /* Number of cmd event wake reasons specific to the driver */
852
853 int total_driver_fw_local_wake; /* Total count of drive/fw wakes, for local reasons */
854 int *driver_fw_local_wake_cnt; /* Individual wake count array, each index a reason */
855 int driver_fw_local_wake_cnt_sz; /* Max number of local driver/fw wake reasons */
856 int driver_fw_local_wake_cnt_used; /* Number of local driver/fw wake reasons specific to the driver */
857
858 int total_rx_data_wake; /* total data rx packets, that woke up host */
859 struct slsi_rx_data_cnt_details rx_wake_details;
860 struct slsi_rx_wake_pkt_type_classification rx_wake_pkt_classification_info;
861 struct slsi_rx_multicast_cnt rx_multicast_wake_pkt_info;
862 };
863
864 /* interface statistics */
865 struct slsi_lls_iface_stat {
866 void *iface; /* wifi interface*/
867 struct slsi_lls_interface_link_layer_info info; /* current state of the interface*/
868 u32 beacon_rx; /* access point beacon received count from connected AP*/
869 u64 average_tsf_offset; /* average beacon offset encountered (beacon_TSF - TBTT)*/
870 u32 leaky_ap_detected; /* indicate that this AP typically leaks packets beyond the driver guard time.*/
871 u32 leaky_ap_avg_num_frames_leaked; /* average number of frame leaked by AP after frame with PM bit set was ACK'ed by AP*/
872 u32 leaky_ap_guard_time;
873 u32 mgmt_rx; /* access point mgmt frames received count from connected AP (including Beacon)*/
874 u32 mgmt_action_rx; /* action frames received count*/
875 u32 mgmt_action_tx; /* action frames transmit count*/
876 int rssi_mgmt; /* access Point Beacon and Management frames RSSI (averaged)*/
877 int rssi_data; /* access Point Data Frames RSSI (averaged) from connected AP*/
878 int rssi_ack; /* access Point ACK RSSI (averaged) from connected AP*/
879 struct slsi_lls_wmm_ac_stat ac[SLSI_LLS_AC_MAX]; /* per ac data packet statistics*/
880 u32 num_peers; /* number of peers*/
881 struct slsi_lls_peer_info peer_info[]; /* per peer statistics*/
882 };
883
884 enum slsi_wifi_hal_api_return_types {
885 WIFI_HAL_SUCCESS = 0,
886 WIFI_HAL_ERROR_NONE = 0,
887 WIFI_HAL_ERROR_UNKNOWN = -1,
888 WIFI_HAL_ERROR_UNINITIALIZED = -2,
889 WIFI_HAL_ERROR_NOT_SUPPORTED = -3,
890 WIFI_HAL_ERROR_NOT_AVAILABLE = -4,
891 WIFI_HAL_ERROR_INVALID_ARGS = -5,
892 WIFI_HAL_ERROR_INVALID_REQUEST_ID = -6,
893 WIFI_HAL_ERROR_TIMED_OUT = -7,
894 WIFI_HAL_ERROR_TOO_MANY_REQUESTS = -8,
895 WIFI_HAL_ERROR_OUT_OF_MEMORY = -9
896 };
897
898 struct slsi_rtt_capabilities {
899 u8 rtt_one_sided_supported; /* if 1-sided rtt data collection is supported */
900 u8 rtt_ftm_supported; /* if ftm rtt data collection is supported */
901 u8 lci_support; /* if initiator supports LCI request. Applies to 2-sided RTT */
902 u8 lcr_support; /* if initiator supports LCR request. Applies to 2-sided RTT */
903 u8 preamble_support; /* bit mask indicates what preamble is supported by initiator */
904 u8 bw_support; /* bit mask indicates what BW is supported by initiator */
905 u8 responder_supported; /* if 11mc responder mode is supported */
906 u8 mc_version; /* draft 11mc spec version supported by chip. For instance,
907 *version 4.0 should be 40 and version 4.3 should be 43 etc.
908 */
909 };
910
911 /* RTT configuration */
912 struct slsi_rtt_config {
913 u8 peer_addr[ETH_ALEN]; /* peer device mac address */
914 u16 type; /* 1-sided or 2-sided RTT */
915 u16 channel_freq; /* Required for STA-AP mode, optional for P2P, NBD etc. */
916 u16 channel_info;
917 u8 burst_period; /* Time interval between bursts (units: 100 ms). */
918 /* Applies to 1-sided and 2-sided RTT multi-burst requests.
919 *Range: 0-31, 0: no preference by initiator (2-sided RTT)
920 */
921 u8 num_burst; /* Total number of RTT bursts to be executed. It will be
922 *specified in the same way as the parameter "Number of
923 *Burst Exponent" found in the FTM frame format. It
924 *applies to both: 1-sided RTT and 2-sided RTT. Valid
925 *values are 0 to 15 as defined in 802.11mc std
926 *0 means single shot
927 *The implication of this parameter on the maximum
928 *number of RTT results is the following:
929 *for 1-sided RTT: max num of RTT results = (2^num_burst)*(num_frames_per_burst)
930 *for 2-sided RTT: max num of RTT results = (2^num_burst)*(num_frames_per_burst - 1)
931 */
932 u8 num_frames_per_burst; /* num of frames per burst.
933 *Minimum value = 1, Maximum value = 31
934 *For 2-sided this equals the number of FTM frames
935 *to be attempted in a single burst. This also
936 *equals the number of FTM frames that the
937 *initiator will request that the responder send
938 *in a single frame.
939 */
940 u8 num_retries_per_ftmr; /* Maximum number of retries that the initiator can
941 *retry an FTMR frame.
942 *Minimum value = 0, Maximum value = 3
943 */
944 u8 burst_duration; /* Applies to 1-sided and 2-sided RTT. Valid values will
945 *be 2-11 and 15 as specified by the 802.11mc std for
946 *the FTM parameter burst duration. In a multi-burst
947 *request, if responder overrides with larger value,
948 *the initiator will return failure. In a single-burst
949 *request if responder overrides with larger value,
950 *the initiator will sent TMR_STOP to terminate RTT
951 *at the end of the burst_duration it requested.
952 */
953 u16 preamble; /* RTT preamble to be used in the RTT frames */
954 u16 bw; /* RTT BW to be used in the RTT frames */
955 u16 LCI_request; /* 1: request LCI, 0: do not request LCI */
956 u16 LCR_request; /* 1: request LCR, 0: do not request LCR */
957 };
958
959 #define MAX_CHAN_VALUE_ACS 39 /*Max number of supported channel is 39*/
960 #define MAX_24G_CHANNELS 14 /*Max number of 2.4G channels*/
961 #define MAX_5G_CHANNELS 25 /*Max number of 5G channels*/
962 #define MAX_AP_THRESHOLD 10 /*Max AP threshold in ACS*/
963
964
965 struct slsi_acs_chan_info {
966 u16 chan;
967 u8 num_ap;
968 u8 num_bss_load_ap;
969 u8 total_chan_utilization;
970 u8 avg_chan_utilization;
971 int rssi_factor;
972 int adj_rssi_factor;
973 };
974
975 struct slsi_acs_selected_channels {
976 u8 pri_channel;
977 u8 sec_channel;
978 u8 vht_seg0_center_ch;
979 u8 vht_seg1_center_ch;
980 u16 ch_width;
981 enum slsi_acs_hw_mode hw_mode;
982 };
983
984 struct slsi_acs_request {
985 struct slsi_acs_chan_info acs_chan_info[MAX_CHAN_VALUE_ACS];
986 u8 hw_mode;
987 u16 ch_width;
988 u8 ch_list_len;
989 };
990
991 void slsi_nl80211_vendor_init(struct slsi_dev *sdev);
992 void slsi_nl80211_vendor_deinit(struct slsi_dev *sdev);
993 u8 slsi_gscan_get_scan_policy(enum wifi_band band);
994 void slsi_gscan_handle_scan_result(struct slsi_dev *sdev, struct net_device *dev, struct sk_buff *skb, u16 scan_id, bool scan_done);
995 void slsi_gscan_hash_remove(struct slsi_dev *sdev, u8 *mac);
996 void slsi_rx_significant_change_ind(struct slsi_dev *sdev, struct net_device *dev, struct sk_buff *skb);
997 int slsi_gscan_alloc_buckets(struct slsi_dev *sdev, struct slsi_gscan *gscan, int num_buckets);
998 int slsi_vendor_event(struct slsi_dev *sdev, int event_id, const void *data, int len);
999 int slsi_mib_get_gscan_cap(struct slsi_dev *sdev, struct slsi_nl_gscan_capabilities *cap);
1000 void slsi_rx_rssi_report_ind(struct slsi_dev *sdev, struct net_device *dev, struct sk_buff *skb);
1001 int slsi_mib_get_apf_cap(struct slsi_dev *sdev, struct net_device *dev);
1002 int slsi_mib_get_rtt_cap(struct slsi_dev *sdev, struct net_device *dev, struct slsi_rtt_capabilities *cap);
1003 int slsi_mlme_add_range_req(struct slsi_dev *sdev, u8 count, struct slsi_rtt_config *nl_rtt_params,
1004 u16 rtt_id, u16 vif_idx, u8 *source_addr);
1005 int slsi_mlme_del_range_req(struct slsi_dev *sdev, struct net_device *dev, u16 count, u8 *addr, u16 rtt_id);
1006 void slsi_rx_range_ind(struct slsi_dev *sdev, struct net_device *dev, struct sk_buff *skb);
1007 void slsi_rx_range_done_ind(struct slsi_dev *sdev, struct net_device *dev, struct sk_buff *skb);
1008 int slsi_tx_rate_calc(struct sk_buff *nl_skb, u16 fw_rate, int res, bool tx_rate);
1009 void slsi_check_num_radios(struct slsi_dev *sdev);
1010 void slsi_rx_event_log_indication(struct slsi_dev *sdev, struct net_device *dev, struct sk_buff *skb);
1011 #ifdef CONFIG_SCSC_WLAN_DEBUG
1012 char *slsi_print_event_name(int event_id);
1013 #endif
1014
1015
1016 static inline bool slsi_is_gscan_id(u16 scan_id)
1017 {
1018 if ((scan_id >= SLSI_GSCAN_SCAN_ID_START) && (scan_id <= SLSI_GSCAN_SCAN_ID_END))
1019 return true;
1020
1021 return false;
1022 }
1023
1024 static inline enum slsi_lls_traffic_ac slsi_fapi_to_android_traffic_q(enum slsi_traffic_q fapi_q)
1025 {
1026 switch (fapi_q) {
1027 case SLSI_TRAFFIC_Q_BE:
1028 return SLSI_LLS_AC_BE;
1029 case SLSI_TRAFFIC_Q_BK:
1030 return SLSI_LLS_AC_BK;
1031 case SLSI_TRAFFIC_Q_VI:
1032 return SLSI_LLS_AC_VI;
1033 case SLSI_TRAFFIC_Q_VO:
1034 return SLSI_LLS_AC_VO;
1035 default:
1036 return SLSI_LLS_AC_MAX;
1037 }
1038 }
1039
1040 #endif