hc
2024-03-25 edb30157bad0c0001c32b854271ace01d3b9a16a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
#ifndef _AIC_VENDOR_H
#define _AIC_VENDOR_H
 
#include <linux/types.h>
 
#define GOOGLE_OUI     0x001A11
#define BRCM_OUI       0x001018
 
typedef enum {
   START_MKEEP_ALIVE,
   STOP_MKEEP_ALIVE,
} GetCmdType;
 
typedef enum {
   /* don't use 0 as a valid subcommand */
   VENDOR_NL80211_SUBCMD_UNSPECIFIED,
 
   /* define all vendor startup commands between 0x0 and 0x0FFF */
   VENDOR_NL80211_SUBCMD_RANGE_START = 0x0001,
   VENDOR_NL80211_SUBCMD_RANGE_END   = 0x0FFF,
 
   /* define all GScan related commands between 0x1000 and 0x10FF */
   ANDROID_NL80211_SUBCMD_GSCAN_RANGE_START = 0x1000,
   ANDROID_NL80211_SUBCMD_GSCAN_RANGE_END   = 0x10FF,
 
   /* define all NearbyDiscovery related commands between 0x1100 and 0x11FF */
   ANDROID_NL80211_SUBCMD_NBD_RANGE_START = 0x1100,
   ANDROID_NL80211_SUBCMD_NBD_RANGE_END   = 0x11FF,
 
   /* define all RTT related commands between 0x1100 and 0x11FF */
   ANDROID_NL80211_SUBCMD_RTT_RANGE_START = 0x1100,
   ANDROID_NL80211_SUBCMD_RTT_RANGE_END   = 0x11FF,
 
   ANDROID_NL80211_SUBCMD_LSTATS_RANGE_START = 0x1200,
   ANDROID_NL80211_SUBCMD_LSTATS_RANGE_END   = 0x12FF,
 
   /* define all Logger related commands between 0x1400 and 0x14FF */
   ANDROID_NL80211_SUBCMD_DEBUG_RANGE_START = 0x1400,
   ANDROID_NL80211_SUBCMD_DEBUG_RANGE_END   = 0x14FF,
 
   /* define all wifi offload related commands between 0x1600 and 0x16FF */
   ANDROID_NL80211_SUBCMD_WIFI_OFFLOAD_RANGE_START = 0x1600,
   ANDROID_NL80211_SUBCMD_WIFI_OFFLOAD_RANGE_END   = 0x16FF,
 
   /* define all NAN related commands between 0x1700 and 0x17FF */
   ANDROID_NL80211_SUBCMD_NAN_RANGE_START = 0x1700,
   ANDROID_NL80211_SUBCMD_NAN_RANGE_END   = 0x17FF,
 
   /* define all Android Packet Filter related commands between 0x1800 and 0x18FF */
   ANDROID_NL80211_SUBCMD_PKT_FILTER_RANGE_START = 0x1800,
   ANDROID_NL80211_SUBCMD_PKT_FILTER_RANGE_END   = 0x18FF,
 
   /* This is reserved for future usage */
 
} ANDROID_VENDOR_SUB_COMMAND;
 
typedef enum {
   WIFI_OFFLOAD_SUBCMD_START_MKEEP_ALIVE = ANDROID_NL80211_SUBCMD_WIFI_OFFLOAD_RANGE_START,
   WIFI_OFFLOAD_SUBCMD_STOP_MKEEP_ALIVE,
} WIFI_OFFLOAD_SUB_COMMAND;
 
 
enum mkeep_alive_attributes {
   MKEEP_ALIVE_ATTRIBUTE_ID = 0x1,
   MKEEP_ALIVE_ATTRIBUTE_IP_PKT,
   MKEEP_ALIVE_ATTRIBUTE_IP_PKT_LEN,
   MKEEP_ALIVE_ATTRIBUTE_SRC_MAC_ADDR,
   MKEEP_ALIVE_ATTRIBUTE_DST_MAC_ADDR,
   MKEEP_ALIVE_ATTRIBUTE_PERIOD_MSEC,
   MKEEP_ALIVE_ATTRIBUTE_AFTER_LAST,
   MKEEP_ALIVE_ATTRIBUTE_MAX = MKEEP_ALIVE_ATTRIBUTE_AFTER_LAST - 1
};
 
enum debug_sub_command {
   LOGGER_START_LOGGING = ANDROID_NL80211_SUBCMD_DEBUG_RANGE_START,
   LOGGER_TRIGGER_MEM_DUMP,
   LOGGER_GET_MEM_DUMP,
   LOGGER_GET_VER,
   LOGGER_GET_RING_STATUS,
   LOGGER_GET_RING_DATA,
   LOGGER_GET_FEATURE,
   LOGGER_RESET_LOGGING,
   LOGGER_TRIGGER_DRIVER_MEM_DUMP,
   LOGGER_GET_DRIVER_MEM_DUMP,
   LOGGER_START_PKT_FATE_MONITORING,
   LOGGER_GET_TX_PKT_FATES,
   LOGGER_GET_RX_PKT_FATES,
   LOGGER_GET_WAKE_REASON_STATS,
   LOGGER_DEBUG_GET_DUMP,
   LOGGER_FILE_DUMP_DONE_IND,
   LOGGER_SET_HAL_START,
   LOGGER_HAL_STOP,
   LOGGER_SET_HAL_PID,
};
 
enum logger_attributes {
   LOGGER_ATTRIBUTE_INVALID = 0,
   LOGGER_ATTRIBUTE_DRIVER_VER,
   LOGGER_ATTRIBUTE_FW_VER,
   LOGGER_ATTRIBUTE_RING_ID,
   LOGGER_ATTRIBUTE_RING_NAME,
   LOGGER_ATTRIBUTE_RING_FLAGS,
   LOGGER_ATTRIBUTE_LOG_LEVEL,
   LOGGER_ATTRIBUTE_LOG_TIME_INTVAL,
   LOGGER_ATTRIBUTE_LOG_MIN_DATA_SIZE,
   LOGGER_ATTRIBUTE_FW_DUMP_LEN,
   LOGGER_ATTRIBUTE_FW_DUMP_DATA,
   // LOGGER_ATTRIBUTE_FW_ERR_CODE,
   LOGGER_ATTRIBUTE_RING_DATA,
   LOGGER_ATTRIBUTE_RING_STATUS,
   LOGGER_ATTRIBUTE_RING_NUM,
   LOGGER_ATTRIBUTE_DRIVER_DUMP_LEN,
   LOGGER_ATTRIBUTE_DRIVER_DUMP_DATA,
   LOGGER_ATTRIBUTE_PKT_FATE_NUM,
   LOGGER_ATTRIBUTE_PKT_FATE_DATA,
   LOGGER_ATTRIBUTE_AFTER_LAST,
   LOGGER_ATTRIBUTE_MAX = LOGGER_ATTRIBUTE_AFTER_LAST - 1,
};
 
enum wifi_sub_command {
   GSCAN_SUBCMD_GET_CAPABILITIES = ANDROID_NL80211_SUBCMD_GSCAN_RANGE_START,
   GSCAN_SUBCMD_SET_CONFIG,                            /* 0x1001 */
   GSCAN_SUBCMD_SET_SCAN_CONFIG,                       /* 0x1002 */
   GSCAN_SUBCMD_ENABLE_GSCAN,                          /* 0x1003 */
   GSCAN_SUBCMD_GET_SCAN_RESULTS,                      /* 0x1004 */
   GSCAN_SUBCMD_SCAN_RESULTS,                          /* 0x1005 */
   GSCAN_SUBCMD_SET_HOTLIST,                           /* 0x1006 */
   GSCAN_SUBCMD_SET_SIGNIFICANT_CHANGE_CONFIG,         /* 0x1007 */
   GSCAN_SUBCMD_ENABLE_FULL_SCAN_RESULTS,              /* 0x1008 */
   GSCAN_SUBCMD_GET_CHANNEL_LIST,                      /* 0x1009 */
   WIFI_SUBCMD_GET_FEATURE_SET,                        /* 0x100A */
   WIFI_SUBCMD_GET_FEATURE_SET_MATRIX,                 /* 0x100B */
   WIFI_SUBCMD_SET_PNO_RANDOM_MAC_OUI,                 /* 0x100C */
   WIFI_SUBCMD_NODFS_SET,                              /* 0x100D */
   WIFI_SUBCMD_SET_COUNTRY_CODE,                       /* 0x100E */
   /* Add more sub commands here */
   GSCAN_SUBCMD_SET_EPNO_SSID,                         /* 0x100F */
   WIFI_SUBCMD_SET_SSID_WHITE_LIST,                    /* 0x1010 */
   WIFI_SUBCMD_SET_ROAM_PARAMS,                        /* 0x1011 */
   WIFI_SUBCMD_ENABLE_LAZY_ROAM,                       /* 0x1012 */
   WIFI_SUBCMD_SET_BSSID_PREF,                         /* 0x1013 */
   WIFI_SUBCMD_SET_BSSID_BLACKLIST,                    /* 0x1014 */
   GSCAN_SUBCMD_ANQPO_CONFIG,                          /* 0x1015 */
   WIFI_SUBCMD_SET_RSSI_MONITOR,                       /* 0x1016 */
   WIFI_SUBCMD_CONFIG_ND_OFFLOAD,                      /* 0x1017 */
   /* Add more sub commands here */
   GSCAN_SUBCMD_MAX,
   APF_SUBCMD_GET_CAPABILITIES = ANDROID_NL80211_SUBCMD_PKT_FILTER_RANGE_START,
   APF_SUBCMD_SET_FILTER,
};
 
enum gscan_attributes {
   GSCAN_ATTRIBUTE_NUM_BUCKETS = 10,
   GSCAN_ATTRIBUTE_BASE_PERIOD,
   GSCAN_ATTRIBUTE_BUCKETS_BAND,
   GSCAN_ATTRIBUTE_BUCKET_ID,
   GSCAN_ATTRIBUTE_BUCKET_PERIOD,
   GSCAN_ATTRIBUTE_BUCKET_NUM_CHANNELS,
   GSCAN_ATTRIBUTE_BUCKET_CHANNELS,
   GSCAN_ATTRIBUTE_NUM_AP_PER_SCAN,
   GSCAN_ATTRIBUTE_REPORT_THRESHOLD,
   GSCAN_ATTRIBUTE_NUM_SCANS_TO_CACHE,
   GSCAN_ATTRIBUTE_BAND = GSCAN_ATTRIBUTE_BUCKETS_BAND,
 
   GSCAN_ATTRIBUTE_ENABLE_FEATURE = 20,
   GSCAN_ATTRIBUTE_SCAN_RESULTS_COMPLETE,              /* indicates no more results */
   GSCAN_ATTRIBUTE_FLUSH_FEATURE,                      /* Flush all the configs */
   GSCAN_ENABLE_FULL_SCAN_RESULTS,
   GSCAN_ATTRIBUTE_REPORT_EVENTS,
 
   /* remaining reserved for additional attributes */
   GSCAN_ATTRIBUTE_NUM_OF_RESULTS = 30,
   GSCAN_ATTRIBUTE_FLUSH_RESULTS,
   GSCAN_ATTRIBUTE_SCAN_RESULTS,                       /* flat array of wifi_scan_result */
   GSCAN_ATTRIBUTE_SCAN_ID,                            /* indicates scan number */
   GSCAN_ATTRIBUTE_SCAN_FLAGS,                         /* indicates if scan was aborted */
   GSCAN_ATTRIBUTE_AP_FLAGS,                           /* flags on significant change event */
   GSCAN_ATTRIBUTE_NUM_CHANNELS,
   GSCAN_ATTRIBUTE_CHANNEL_LIST,
   GSCAN_ATTRIBUTE_CH_BUCKET_BITMASK,
 
   GSCAN_ATTRIBUTE_AFTER_LAST,
   GSCAN_ATTRIBUTE_MAX = GSCAN_ATTRIBUTE_AFTER_LAST - 1,
};
 
enum andr_wifi_attributes {
   ANDR_WIFI_ATTRIBUTE_NUM_FEATURE_SET,
   ANDR_WIFI_ATTRIBUTE_FEATURE_SET,
   ANDR_WIFI_ATTRIBUTE_PNO_RANDOM_MAC_OUI,
   ANDR_WIFI_ATTRIBUTE_NODFS_SET,
   ANDR_WIFI_ATTRIBUTE_COUNTRY,
   ANDR_WIFI_ATTRIBUTE_ND_OFFLOAD_VALUE,
   // Add more attribute here
   ANDR_WIFI_ATTRIBUTE_AFTER_LAST,
   ANDR_WIFI_ATTRIBUTE_MAX = ANDR_WIFI_ATTRIBUTE_AFTER_LAST - 1,
};
 
enum wifi_support_feature {
   /* Feature enums */
   WIFI_FEATURE_INFRA              = 0x0001,      /* Basic infrastructure mode        */
   WIFI_FEATURE_INFRA_5G           = 0x0002,      /* Support for 5, GHz Band          */
   WIFI_FEATURE_HOTSPOT            = 0x0004,      /* Support for GAS/ANQP             */
   WIFI_FEATURE_P2P                = 0x0008,      /* Wifi-Direct                      */
   WIFI_FEATURE_SOFT_AP            = 0x0010,      /* Soft AP                          */
   WIFI_FEATURE_GSCAN              = 0x0020,      /* Google-Scan APIs                 */
   WIFI_FEATURE_NAN                = 0x0040,      /* Neighbor Awareness Networking    */
   WIFI_FEATURE_D2D_RTT            = 0x0080,      /* Device-to-device RTT             */
   WIFI_FEATURE_D2AP_RTT           = 0x0100,      /* Device-to-AP RTT                 */
   WIFI_FEATURE_BATCH_SCAN         = 0x0200,      /* Batched Scan (legacy)            */
   WIFI_FEATURE_PNO                = 0x0400,      /* Preferred network offload        */
   WIFI_FEATURE_ADDITIONAL_STA     = 0x0800,      /* Support for two STAs             */
   WIFI_FEATURE_TDLS               = 0x1000,      /* Tunnel directed link setup       */
   WIFI_FEATURE_TDLS_OFFCHANNEL    = 0x2000,      /* Support for TDLS off channel     */
   WIFI_FEATURE_EPR                = 0x4000,      /* Enhanced power reporting         */
   WIFI_FEATURE_AP_STA             = 0x8000,      /* Support for AP STA Concurrency   */
   WIFI_FEATURE_LINK_LAYER_STATS   = 0x10000,     /* Support for Linkstats            */
   WIFI_FEATURE_LOGGER             = 0x20000,     /* WiFi Logger                      */
   WIFI_FEATURE_HAL_EPNO           = 0x40000,     /* WiFi PNO enhanced                */
   WIFI_FEATURE_RSSI_MONITOR       = 0x80000,     /* RSSI Monitor                     */
   WIFI_FEATURE_MKEEP_ALIVE        = 0x100000,    /* WiFi mkeep_alive                 */
   WIFI_FEATURE_CONFIG_NDO         = 0x200000,    /* ND offload configure             */
   WIFI_FEATURE_TX_TRANSMIT_POWER  = 0x400000,    /* Capture Tx transmit power levels */
   WIFI_FEATURE_CONTROL_ROAMING    = 0x800000,    /* Enable/Disable firmware roaming  */
   WIFI_FEATURE_IE_WHITELIST       = 0x1000000,   /* Support Probe IE white listing   */
   WIFI_FEATURE_SCAN_RAND          = 0x2000000,   /* Support MAC & Probe Sequence Number randomization */
   WIFI_FEATURE_INVALID            = 0xFFFFFFFF,  /* Invalid Feature                  */
};
 
enum wifi_logger_feature {
   WIFI_LOGGER_MEMORY_DUMP_SUPPORTED = (1 << (0)),             // Memory dump of FW
   WIFI_LOGGER_PER_PACKET_TX_RX_STATUS_SUPPORTED = (1 << (1)), // PKT status
   WIFI_LOGGER_CONNECT_EVENT_SUPPORTED = (1 << (2)),           // Connectivity event
   WIFI_LOGGER_POWER_EVENT_SUPPORTED = (1 << (3)),             // POWER of Driver
   WIFI_LOGGER_WAKE_LOCK_SUPPORTED = (1 << (4)),               // WAKE LOCK of Driver
   WIFI_LOGGER_VERBOSE_SUPPORTED = (1 << (5)),                 // verbose log of FW
   WIFI_LOGGER_WATCHDOG_TIMER_SUPPORTED = (1 << (6)),          // monitor the health of FW
   WIFI_LOGGER_DRIVER_DUMP_SUPPORTED = (1 << (7)),             // dumps driver state
   WIFI_LOGGER_PACKET_FATE_SUPPORTED = (1 << (8)),             // tracks connection packets' fate
};
 
enum wake_stats_attributes {
   WAKE_STAT_ATTRIBUTE_TOTAL_CMD_EVENT,
   WAKE_STAT_ATTRIBUTE_CMD_EVENT_WAKE,
   WAKE_STAT_ATTRIBUTE_CMD_EVENT_COUNT,
   WAKE_STAT_ATTRIBUTE_CMD_COUNT_USED,
   WAKE_STAT_ATTRIBUTE_TOTAL_DRIVER_FW,
   WAKE_STAT_ATTRIBUTE_DRIVER_FW_WAKE,
   WAKE_STAT_ATTRIBUTE_DRIVER_FW_COUNT,
   WAKE_STAT_ATTRIBUTE_DRIVER_FW_COUNT_USED,
   WAKE_STAT_ATTRIBUTE_TOTAL_RX_DATA_WAKE,
   WAKE_STAT_ATTRIBUTE_RX_UNICAST_COUNT,
   WAKE_STAT_ATTRIBUTE_RX_MULTICAST_COUNT,
   WAKE_STAT_ATTRIBUTE_RX_BROADCAST_COUNT,
   WAKE_STAT_ATTRIBUTE_RX_ICMP_PKT,
   WAKE_STAT_ATTRIBUTE_RX_ICMP6_PKT,
   WAKE_STAT_ATTRIBUTE_RX_ICMP6_RA,
   WAKE_STAT_ATTRIBUTE_RX_ICMP6_NA,
   WAKE_STAT_ATTRIBUTE_RX_ICMP6_NS,
   WAKE_STAT_ATTRIBUTE_IPV4_RX_MULTICAST_ADD_CNT,
   WAKE_STAT_ATTRIBUTE_IPV6_RX_MULTICAST_ADD_CNT,
   WAKE_STAT_ATTRIBUTE_OTHER__RX_MULTICAST_ADD_CNT,
   WAKE_STAT_ATTRIBUTE_RX_MULTICAST_PKT_INFO,
   WAKE_STAT_ATTRIBUTE_AFTER_LAST,
   WAKE_STAT_ATTRIBUTE_MAX = WAKE_STAT_ATTRIBUTE_AFTER_LAST - 1,
};
 
enum vendor_nl80211_subcmd {
   /* copied from wpa_supplicant brcm definations */
   VENDOR_NL80211_SUBCMD_UNSPEC  = 0,
   VENDOR_NL80211_SUBCMD_SET_PMK = 4,
   VENDOR_NL80211_SUBCMD_SET_MAC = 6,
   VENDOR_NL80211_SCMD_ACS       = 9,
   VENDOR_NL80211_SCMD_MAX       = 10,
};
 
enum nl80211_vendor_subcmd_attributes {
   WIFI_VENDOR_ATTR_DRIVER_CMD        = 0,
   WIFI_VENDOR_ATTR_DRIVER_KEY_PMK    = 1,
   WIFI_VENDOR_ATTR_DRIVER_MAC_ADDR   = 3,
   WIFI_VENDOR_ATTR_DRIVER_AFTER_LAST = 5,
   WIFI_VENDOR_ATTR_DRIVER_MAX        =
   WIFI_VENDOR_ATTR_DRIVER_AFTER_LAST - 1,
};
 
typedef int wifi_ring_buffer_id;
 
struct wifi_ring_buffer_status {
   u8 name[32];
   u32 flags;
   wifi_ring_buffer_id ring_id;
   u32 ring_buffer_byte_size;
   u32 verbose_level;
   u32 written_bytes;
   u32 read_bytes;
   u32 written_records;
};
 
struct rx_data_cnt_details_t {
   int rx_unicast_cnt;     /*Total rx unicast packet which woke up host */
   int rx_multicast_cnt;   /*Total rx multicast packet which woke up host */
   int rx_broadcast_cnt;   /*Total rx broadcast packet which woke up host */
};
 
struct rx_wake_pkt_type_classification_t {
   int icmp_pkt;   /*wake icmp packet count */
   int icmp6_pkt;  /*wake icmp6 packet count */
   int icmp6_ra;   /*wake icmp6 RA packet count */
   int icmp6_na;   /*wake icmp6 NA packet count */
   int icmp6_ns;   /*wake icmp6 NS packet count */
   //ToDo: Any more interesting classification to add?
};
 
struct rx_multicast_cnt_t{
   int ipv4_rx_multicast_addr_cnt; /*Rx wake packet was ipv4 multicast */
   int ipv6_rx_multicast_addr_cnt; /*Rx wake packet was ipv6 multicast */
   int other_rx_multicast_addr_cnt;/*Rx wake packet was non-ipv4 and non-ipv6*/
};
 
struct wlan_driver_wake_reason_cnt_t {
   int total_cmd_event_wake;          /* Total count of cmd event wakes */
   int *cmd_event_wake_cnt;           /* Individual wake count array, each index a reason */
   int cmd_event_wake_cnt_sz;         /* Max number of cmd event wake reasons */
   int cmd_event_wake_cnt_used;       /* Number of cmd event wake reasons specific to the driver */
 
   int total_driver_fw_local_wake;    /* Total count of drive/fw wakes, for local reasons */
   int *driver_fw_local_wake_cnt;     /* Individual wake count array, each index a reason */
   int driver_fw_local_wake_cnt_sz;   /* Max number of local driver/fw wake reasons */
   int driver_fw_local_wake_cnt_used; /* Number of local driver/fw wake reasons specific to the driver */
 
   int total_rx_data_wake;            /* total data rx packets, that woke up host */
   struct rx_data_cnt_details_t rx_wake_details;
   struct rx_wake_pkt_type_classification_t rx_wake_pkt_classification_info;
   struct rx_multicast_cnt_t rx_multicast_wake_pkt_info;
};
 
typedef struct wl_mkeep_alive_pkt {
   u16 version;       /* Version for mkeep_alive */
   u16 length;        /* length of fixed parameters in the structure */
   u32 period_msec;   /* high bit on means immediate send */
   u16 len_bytes;
   u8  keep_alive_id; /* 0 - 3 for N = 4 */
   u8  data[1];
} wl_mkeep_alive_pkt_t;
 
#endif /* _AIC_VENDOR_H */