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
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
|
/*
* Broadcom Event protocol definitions
*
* Dependencies: proto/bcmeth.h
*
* Copyright (C) 1999-2017, Broadcom Corporation
*
* Unless you and Broadcom execute a separate written software license
* agreement governing use of this software, this software is licensed to you
* under the terms of the GNU General Public License version 2 (the "GPL"),
* available at http://www.broadcom.com/licenses/GPLv2.php, with the
* following added to such license:
*
* As a special exception, the copyright holders of this software give you
* permission to link this software with independent modules, and to copy and
* distribute the resulting executable under terms of your choice, provided that
* you also meet, for each linked independent module, the terms and conditions of
* the license of that module. An independent module is a module which is not
* derived from this software. The special exception does not apply to any
* modifications of the software.
*
* Notwithstanding the above, under no circumstances may you combine this
* software in any way with any other Broadcom software provided under a license
* other than the GPL, without Broadcom's express prior written consent.
*
*
* <<Broadcom-WL-IPTag/Open:>>
*
* $Id: bcmevent.h 660193 2016-09-19 12:56:55Z $
*
*/
/*
* Broadcom Ethernet Events protocol defines
*
*/
#ifndef _BCMEVENT_H_
#define _BCMEVENT_H_
#include <typedefs.h>
/* #include <ethernet.h> -- TODO: req., excluded to overwhelming coupling (break up ethernet.h) */
#include <proto/bcmeth.h>
#if defined(HEALTH_CHECK) || defined(DNGL_EVENT_SUPPORT)
#include <proto/dnglevent.h>
#endif /* HEALTH_CHECK || DNGL_EVENT_SUPPORT */
/* This marks the start of a packed structure section. */
#include <packed_section_start.h>
#define BCM_EVENT_MSG_VERSION 2 /* wl_event_msg_t struct version */
#define BCM_MSG_IFNAME_MAX 16 /* max length of interface name */
/* flags */
#define WLC_EVENT_MSG_LINK 0x01 /* link is up */
#define WLC_EVENT_MSG_FLUSHTXQ 0x02 /* flush tx queue on MIC error */
#define WLC_EVENT_MSG_GROUP 0x04 /* group MIC error */
#define WLC_EVENT_MSG_UNKBSS 0x08 /* unknown source bsscfg */
#define WLC_EVENT_MSG_UNKIF 0x10 /* unknown source OS i/f */
/* these fields are stored in network order */
/* version 1 */
typedef BWL_PRE_PACKED_STRUCT struct
{
uint16 version;
uint16 flags; /* see flags below */
uint32 event_type; /* Message (see below) */
uint32 status; /* Status code (see below) */
uint32 reason; /* Reason code (if applicable) */
uint32 auth_type; /* WLC_E_AUTH */
uint32 datalen; /* data buf */
struct ether_addr addr; /* Station address (if applicable) */
char ifname[BCM_MSG_IFNAME_MAX]; /* name of the packet incoming interface */
} BWL_POST_PACKED_STRUCT wl_event_msg_v1_t;
/* the current version */
typedef BWL_PRE_PACKED_STRUCT struct
{
uint16 version;
uint16 flags; /* see flags below */
uint32 event_type; /* Message (see below) */
uint32 status; /* Status code (see below) */
uint32 reason; /* Reason code (if applicable) */
uint32 auth_type; /* WLC_E_AUTH */
uint32 datalen; /* data buf */
struct ether_addr addr; /* Station address (if applicable) */
char ifname[BCM_MSG_IFNAME_MAX]; /* name of the packet incoming interface */
uint8 ifidx; /* destination OS i/f index */
uint8 bsscfgidx; /* source bsscfg index */
} BWL_POST_PACKED_STRUCT wl_event_msg_t;
/* used by driver msgs */
typedef BWL_PRE_PACKED_STRUCT struct bcm_event {
struct ether_header eth;
bcmeth_hdr_t bcm_hdr;
wl_event_msg_t event;
/* data portion follows */
} BWL_POST_PACKED_STRUCT bcm_event_t;
/*
* used by host event
* note: if additional event types are added, it should go with is_wlc_event_frame() as well.
*/
typedef union bcm_event_msg_u {
wl_event_msg_t event;
#if defined(HEALTH_CHECK) || defined(DNGL_EVENT_SUPPORT)
bcm_dngl_event_msg_t dngl_event;
#endif /* HEALTH_CHECK || DNGL_EVENT_SUPPORT */
/* add new event here */
} bcm_event_msg_u_t;
#define BCM_MSG_LEN (sizeof(bcm_event_t) - sizeof(bcmeth_hdr_t) - sizeof(struct ether_header))
/* Event messages */
#define WLC_E_SET_SSID 0 /* indicates status of set SSID */
#define WLC_E_JOIN 1 /* differentiates join IBSS from found (WLC_E_START) IBSS */
#define WLC_E_START 2 /* STA founded an IBSS or AP started a BSS */
#define WLC_E_AUTH 3 /* 802.11 AUTH request */
#define WLC_E_AUTH_IND 4 /* 802.11 AUTH indication */
#define WLC_E_DEAUTH 5 /* 802.11 DEAUTH request */
#define WLC_E_DEAUTH_IND 6 /* 802.11 DEAUTH indication */
#define WLC_E_ASSOC 7 /* 802.11 ASSOC request */
#define WLC_E_ASSOC_IND 8 /* 802.11 ASSOC indication */
#define WLC_E_REASSOC 9 /* 802.11 REASSOC request */
#define WLC_E_REASSOC_IND 10 /* 802.11 REASSOC indication */
#define WLC_E_DISASSOC 11 /* 802.11 DISASSOC request */
#define WLC_E_DISASSOC_IND 12 /* 802.11 DISASSOC indication */
#define WLC_E_QUIET_START 13 /* 802.11h Quiet period started */
#define WLC_E_QUIET_END 14 /* 802.11h Quiet period ended */
#define WLC_E_BEACON_RX 15 /* BEACONS received/lost indication */
#define WLC_E_LINK 16 /* generic link indication */
#define WLC_E_MIC_ERROR 17 /* TKIP MIC error occurred */
#define WLC_E_NDIS_LINK 18 /* NDIS style link indication */
#define WLC_E_ROAM 19 /* roam complete: indicate status & reason */
#define WLC_E_TXFAIL 20 /* change in dot11FailedCount (txfail) */
#define WLC_E_PMKID_CACHE 21 /* WPA2 pmkid cache indication */
#define WLC_E_RETROGRADE_TSF 22 /* current AP's TSF value went backward */
#define WLC_E_PRUNE 23 /* AP was pruned from join list for reason */
#define WLC_E_AUTOAUTH 24 /* report AutoAuth table entry match for join attempt */
#define WLC_E_EAPOL_MSG 25 /* Event encapsulating an EAPOL message */
#define WLC_E_SCAN_COMPLETE 26 /* Scan results are ready or scan was aborted */
#define WLC_E_ADDTS_IND 27 /* indicate to host addts fail/success */
#define WLC_E_DELTS_IND 28 /* indicate to host delts fail/success */
#define WLC_E_BCNSENT_IND 29 /* indicate to host of beacon transmit */
#define WLC_E_BCNRX_MSG 30 /* Send the received beacon up to the host */
#define WLC_E_BCNLOST_MSG 31 /* indicate to host loss of beacon */
#define WLC_E_ROAM_PREP 32 /* before attempting to roam association */
#define WLC_E_PFN_NET_FOUND 33 /* PFN network found event */
#define WLC_E_PFN_NET_LOST 34 /* PFN network lost event */
#define WLC_E_RESET_COMPLETE 35
#define WLC_E_JOIN_START 36
#define WLC_E_ROAM_START 37 /* roam attempt started: indicate reason */
#define WLC_E_ASSOC_START 38
#define WLC_E_IBSS_ASSOC 39
#define WLC_E_RADIO 40
#define WLC_E_PSM_WATCHDOG 41 /* PSM microcode watchdog fired */
#define WLC_E_PROBREQ_MSG 44 /* probe request received */
#define WLC_E_SCAN_CONFIRM_IND 45
#define WLC_E_PSK_SUP 46 /* WPA Handshake fail */
#define WLC_E_COUNTRY_CODE_CHANGED 47
#define WLC_E_EXCEEDED_MEDIUM_TIME 48 /* WMMAC excedded medium time */
#define WLC_E_ICV_ERROR 49 /* WEP ICV error occurred */
#define WLC_E_UNICAST_DECODE_ERROR 50 /* Unsupported unicast encrypted frame */
#define WLC_E_MULTICAST_DECODE_ERROR 51 /* Unsupported multicast encrypted frame */
#define WLC_E_TRACE 52
#define WLC_E_IF 54 /* I/F change (for dongle host notification) */
#define WLC_E_P2P_DISC_LISTEN_COMPLETE 55 /* listen state expires */
#define WLC_E_RSSI 56 /* indicate RSSI change based on configured levels */
#define WLC_E_PFN_BEST_BATCHING 57 /* PFN best network batching event */
#define WLC_E_EXTLOG_MSG 58
#define WLC_E_ACTION_FRAME 59 /* Action frame Rx */
#define WLC_E_ACTION_FRAME_COMPLETE 60 /* Action frame Tx complete */
#define WLC_E_PRE_ASSOC_IND 61 /* assoc request received */
#define WLC_E_PRE_REASSOC_IND 62 /* re-assoc request received */
#define WLC_E_CHANNEL_ADOPTED 63
#define WLC_E_AP_STARTED 64 /* AP started */
#define WLC_E_DFS_AP_STOP 65 /* AP stopped due to DFS */
#define WLC_E_DFS_AP_RESUME 66 /* AP resumed due to DFS */
#define WLC_E_WAI_STA_EVENT 67 /* WAI stations event */
#define WLC_E_WAI_MSG 68 /* event encapsulating an WAI message */
#define WLC_E_ESCAN_RESULT 69 /* escan result event */
#define WLC_E_ACTION_FRAME_OFF_CHAN_COMPLETE 70 /* action frame off channel complete */
#define WLC_E_PROBRESP_MSG 71 /* probe response received */
#define WLC_E_P2P_PROBREQ_MSG 72 /* P2P Probe request received */
#define WLC_E_DCS_REQUEST 73
#define WLC_E_FIFO_CREDIT_MAP 74 /* credits for D11 FIFOs. [AC0,AC1,AC2,AC3,BC_MC,ATIM] */
#define WLC_E_ACTION_FRAME_RX 75 /* Received action frame event WITH
* wl_event_rx_frame_data_t header
*/
#define WLC_E_WAKE_EVENT 76 /* Wake Event timer fired, used for wake WLAN test mode */
#define WLC_E_RM_COMPLETE 77 /* Radio measurement complete */
#define WLC_E_HTSFSYNC 78 /* Synchronize TSF with the host */
#define WLC_E_OVERLAY_REQ 79 /* request an overlay IOCTL/iovar from the host */
#define WLC_E_CSA_COMPLETE_IND 80 /* 802.11 CHANNEL SWITCH ACTION completed */
#define WLC_E_EXCESS_PM_WAKE_EVENT 81 /* excess PM Wake Event to inform host */
#define WLC_E_PFN_SCAN_NONE 82 /* no PFN networks around */
/* PFN BSSID network found event, conflict/share with WLC_E_PFN_SCAN_NONE */
#define WLC_E_PFN_BSSID_NET_FOUND 82
#define WLC_E_PFN_SCAN_ALLGONE 83 /* last found PFN network gets lost */
/* PFN BSSID network lost event, conflict/share with WLC_E_PFN_SCAN_ALLGONE */
#define WLC_E_PFN_BSSID_NET_LOST 83
#define WLC_E_GTK_PLUMBED 84
#define WLC_E_ASSOC_IND_NDIS 85 /* 802.11 ASSOC indication for NDIS only */
#define WLC_E_REASSOC_IND_NDIS 86 /* 802.11 REASSOC indication for NDIS only */
#define WLC_E_ASSOC_REQ_IE 87
#define WLC_E_ASSOC_RESP_IE 88
#define WLC_E_ASSOC_RECREATED 89 /* association recreated on resume */
#define WLC_E_ACTION_FRAME_RX_NDIS 90 /* rx action frame event for NDIS only */
#define WLC_E_AUTH_REQ 91 /* authentication request received */
#define WLC_E_TDLS_PEER_EVENT 92 /* discovered peer, connected/disconnected peer */
#define WLC_E_SPEEDY_RECREATE_FAIL 93 /* fast assoc recreation failed */
#define WLC_E_NATIVE 94 /* port-specific event and payload (e.g. NDIS) */
#define WLC_E_PKTDELAY_IND 95 /* event for tx pkt delay suddently jump */
#define WLC_E_PSTA_PRIMARY_INTF_IND 99 /* psta primary interface indication */
#define WLC_E_NAN 100 /* NAN event */
#define WLC_E_BEACON_FRAME_RX 101
#define WLC_E_SERVICE_FOUND 102 /* desired service found */
#define WLC_E_GAS_FRAGMENT_RX 103 /* GAS fragment received */
#define WLC_E_GAS_COMPLETE 104 /* GAS sessions all complete */
#define WLC_E_P2PO_ADD_DEVICE 105 /* New device found by p2p offload */
#define WLC_E_P2PO_DEL_DEVICE 106 /* device has been removed by p2p offload */
#define WLC_E_WNM_STA_SLEEP 107 /* WNM event to notify STA enter sleep mode */
#define WLC_E_TXFAIL_THRESH 108 /* Indication of MAC tx failures (exhaustion of
* 802.11 retries) exceeding threshold(s)
*/
#define WLC_E_PROXD 109 /* Proximity Detection event */
#define WLC_E_IBSS_COALESCE 110 /* IBSS Coalescing */
#define WLC_E_AIBSS_TXFAIL 110 /* TXFAIL event for AIBSS, re using event 110 */
#define WLC_E_BSS_LOAD 114 /* Inform host of beacon bss load */
#define WLC_E_MIMO_PWR_SAVE 115 /* Inform host MIMO PWR SAVE learning events */
#define WLC_E_LEAKY_AP_STATS 116 /* Inform host leaky Ap stats events */
#define WLC_E_ALLOW_CREDIT_BORROW 117 /* Allow or disallow wlfc credit borrowing in DHD */
#define WLC_E_MSCH 120 /* Multiple channel scheduler event */
#define WLC_E_CSA_START_IND 121
#define WLC_E_CSA_DONE_IND 122
#define WLC_E_CSA_FAILURE_IND 123
#define WLC_E_CCA_CHAN_QUAL 124 /* CCA based channel quality report */
#define WLC_E_BSSID 125 /* to report change in BSSID while roaming */
#define WLC_E_TX_STAT_ERROR 126 /* tx error indication */
#define WLC_E_BCMC_CREDIT_SUPPORT 127 /* credit check for BCMC supported */
#define WLC_E_PEER_TIMEOUT 128 /* silently drop a STA because of inactivity */
#define WLC_E_BT_WIFI_HANDOVER_REQ 130 /* Handover Request Initiated */
#define WLC_E_SPW_TXINHIBIT 131 /* Southpaw TxInhibit notification */
#define WLC_E_FBT_AUTH_REQ_IND 132 /* FBT Authentication Request Indication */
#define WLC_E_RSSI_LQM 133 /* Enhancement addition for WLC_E_RSSI */
#define WLC_E_PFN_GSCAN_FULL_RESULT 134 /* Full probe/beacon (IEs etc) results */
#define WLC_E_PFN_SWC 135 /* Significant change in rssi of bssids being tracked */
#define WLC_E_AUTHORIZED 136 /* a STA been authroized for traffic */
#define WLC_E_PROBREQ_MSG_RX 137 /* probe req with wl_event_rx_frame_data_t header */
#define WLC_E_PFN_SCAN_COMPLETE 138 /* PFN completed scan of network list */
#define WLC_E_RMC_EVENT 139 /* RMC Event */
#define WLC_E_DPSTA_INTF_IND 140 /* DPSTA interface indication */
#define WLC_E_RRM 141 /* RRM Event */
#define WLC_E_PFN_SSID_EXT 142 /* SSID EXT event */
#define WLC_E_ROAM_EXP_EVENT 143 /* Expanded roam event */
#define WLC_E_ULP 146 /* ULP entered indication */
#define WLC_E_MACDBG 147 /* Ucode debugging event */
#define WLC_E_RESERVED 148 /* reserved */
#define WLC_E_PRE_ASSOC_RSEP_IND 149 /* assoc resp received */
#define WLC_E_PSK_AUTH 150 /* PSK AUTH WPA2-PSK 4 WAY Handshake failure */
#define WLC_E_TKO 151 /* TCP keepalive offload */
#define WLC_E_SDB_TRANSITION 152 /* SDB mode-switch event */
#define WLC_E_NATOE_NFCT 153 /* natoe event */
#define WLC_E_TEMP_THROTTLE 154 /* Temperature throttling control event */
#define WLC_E_LINK_QUALITY 155 /* Link quality measurement complete */
#define WLC_E_BSSTRANS_RESP 156 /* BSS Transition Response received */
#define WLC_E_HE_TWT_SETUP 157 /* HE TWT Setup Complete event */
#define WLC_E_NAN_DATA_IND 158 /* NAN 2.0 data indication */
#define WLC_E_NAN_DATA_CONF 159 /* NAN 2.0 data confirmation */
#define WLC_E_RADAR_DETECTED 160 /* Radar Detected event */
#define WLC_E_RANGING_EVENT 161 /* Ranging event */
#define WLC_E_INVALID_IE 162 /* Received invalid IE */
#define WLC_E_MODE_SWITCH 163 /* Mode switch event */
#define WLC_E_PKT_FILTER 164 /* Packet filter event */
#define WLC_E_DMA_TXFLUSH_COMPLETE 165 /* TxFlush done before changing
* tx/rxchain
*/
#define WLC_E_LAST 166 /* highest val + 1 for range checking */
#if (WLC_E_LAST > 166)
#error "WLC_E_LAST: Invalid value for last event; must be <= 165."
#endif /* WLC_E_LAST */
/* define an API for getting the string name of an event */
extern const char *bcmevent_get_name(uint event_type);
extern void wl_event_to_host_order(wl_event_msg_t * evt);
extern void wl_event_to_network_order(wl_event_msg_t * evt);
/* validate if the event is proper and if valid copy event header to event */
extern int is_wlc_event_frame(void *pktdata, uint pktlen, uint16 exp_usr_subtype,
bcm_event_msg_u_t *out_event);
/* conversion between host and network order for events */
void wl_event_to_host_order(wl_event_msg_t * evt);
void wl_event_to_network_order(wl_event_msg_t * evt);
/* Event status codes */
#define WLC_E_STATUS_SUCCESS 0 /* operation was successful */
#define WLC_E_STATUS_FAIL 1 /* operation failed */
#define WLC_E_STATUS_TIMEOUT 2 /* operation timed out */
#define WLC_E_STATUS_NO_NETWORKS 3 /* failed due to no matching network found */
#define WLC_E_STATUS_ABORT 4 /* operation was aborted */
#define WLC_E_STATUS_NO_ACK 5 /* protocol failure: packet not ack'd */
#define WLC_E_STATUS_UNSOLICITED 6 /* AUTH or ASSOC packet was unsolicited */
#define WLC_E_STATUS_ATTEMPT 7 /* attempt to assoc to an auto auth configuration */
#define WLC_E_STATUS_PARTIAL 8 /* scan results are incomplete */
#define WLC_E_STATUS_NEWSCAN 9 /* scan aborted by another scan */
#define WLC_E_STATUS_NEWASSOC 10 /* scan aborted due to assoc in progress */
#define WLC_E_STATUS_11HQUIET 11 /* 802.11h quiet period started */
#define WLC_E_STATUS_SUPPRESS 12 /* user disabled scanning (WLC_SET_SCANSUPPRESS) */
#define WLC_E_STATUS_NOCHANS 13 /* no allowable channels to scan */
#define WLC_E_STATUS_CS_ABORT 15 /* abort channel select */
#define WLC_E_STATUS_ERROR 16 /* request failed due to error */
#define WLC_E_STATUS_INVALID 0xff /* Invalid status code to init variables. */
/* 4-way handshake event type */
#define WLC_E_PSK_AUTH_SUB_EAPOL_START 1 /* EAPOL start */
#define WLC_E_PSK_AUTH_SUB_EAPOL_DONE 2 /* EAPOL end */
/* GTK event type */
#define WLC_E_PSK_AUTH_SUB_GTK_DONE 3 /* GTK end */
/* 4-way handshake event status code */
#define WLC_E_STATUS_PSK_AUTH_WPA_TIMOUT 1 /* operation timed out */
#define WLC_E_STATUS_PSK_AUTH_MIC_WPA_ERR 2 /* MIC error */
#define WLC_E_STATUS_PSK_AUTH_IE_MISMATCH_ERR 3 /* IE Missmatch error */
#define WLC_E_STATUS_PSK_AUTH_REPLAY_COUNT_ERR 4
#define WLC_E_STATUS_PSK_AUTH_PEER_BLACKISTED 5 /* Blaclisted peer */
#define WLC_E_STATUS_PSK_AUTH_GTK_REKEY_FAIL 6 /* GTK event status code */
/* SDB transition status code */
#define WLC_E_STATUS_SDB_START 1
#define WLC_E_STATUS_SDB_COMPLETE 2
/* SDB transition reason code */
#define WLC_E_REASON_HOST_DIRECT 0
#define WLC_E_REASON_INFRA_ASSOC 1
#define WLC_E_REASON_INFRA_ROAM 2
#define WLC_E_REASON_INFRA_DISASSOC 3
#define WLC_E_REASON_NO_MODE_CHANGE_NEEDED 4
/* WLC_E_SDB_TRANSITION event data */
#define WL_MAX_BSSCFG 4
#define WL_EVENT_SDB_TRANSITION_VER 1
typedef struct wl_event_sdb_data {
uint8 wlunit; /* Core index */
uint8 is_iftype; /* Interface Type(Station, SoftAP, P2P_GO, P2P_GC */
uint16 chanspec; /* Interface Channel/Chanspec */
char ssidbuf[(4 * 32) + 1]; /* SSID_FMT_BUF_LEN: ((4 * DOT11_MAX_SSID_LEN) + 1) */
} wl_event_sdb_data_t;
typedef struct wl_event_sdb_trans {
uint8 version; /* Event Data Version */
uint8 rsdb_mode;
uint8 enable_bsscfg;
uint8 reserved;
struct wl_event_sdb_data values[WL_MAX_BSSCFG];
} wl_event_sdb_trans_t;
/* roam reason codes */
#define WLC_E_REASON_INITIAL_ASSOC 0 /* initial assoc */
#define WLC_E_REASON_LOW_RSSI 1 /* roamed due to low RSSI */
#define WLC_E_REASON_DEAUTH 2 /* roamed due to DEAUTH indication */
#define WLC_E_REASON_DISASSOC 3 /* roamed due to DISASSOC indication */
#define WLC_E_REASON_BCNS_LOST 4 /* roamed due to lost beacons */
#define WLC_E_REASON_FAST_ROAM_FAILED 5 /* roamed due to fast roam failure */
#define WLC_E_REASON_DIRECTED_ROAM 6 /* roamed due to request by AP */
#define WLC_E_REASON_TSPEC_REJECTED 7 /* roamed due to TSPEC rejection */
#define WLC_E_REASON_BETTER_AP 8 /* roamed due to finding better AP */
#define WLC_E_REASON_MINTXRATE 9 /* roamed because at mintxrate for too long */
#define WLC_E_REASON_TXFAIL 10 /* We can hear AP, but AP can't hear us */
/* retained for precommit auto-merging errors; remove once all branches are synced */
#define WLC_E_REASON_REQUESTED_ROAM 11
#define WLC_E_REASON_BSSTRANS_REQ 11 /* roamed due to BSS Transition request by AP */
#define WLC_E_REASON_LOW_RSSI_CU 12 /* roamed due to low RSSI and Channel Usage */
#define WLC_E_REASON_RADAR_DETECTED 13 /* roamed due to radar detection by STA */
/* prune reason codes */
#define WLC_E_PRUNE_ENCR_MISMATCH 1 /* encryption mismatch */
#define WLC_E_PRUNE_BCAST_BSSID 2 /* AP uses a broadcast BSSID */
#define WLC_E_PRUNE_MAC_DENY 3 /* STA's MAC addr is in AP's MAC deny list */
#define WLC_E_PRUNE_MAC_NA 4 /* STA's MAC addr is not in AP's MAC allow list */
#define WLC_E_PRUNE_REG_PASSV 5 /* AP not allowed due to regulatory restriction */
#define WLC_E_PRUNE_SPCT_MGMT 6 /* AP does not support STA locale spectrum mgmt */
#define WLC_E_PRUNE_RADAR 7 /* AP is on a radar channel of STA locale */
#define WLC_E_RSN_MISMATCH 8 /* STA does not support AP's RSN */
#define WLC_E_PRUNE_NO_COMMON_RATES 9 /* No rates in common with AP */
#define WLC_E_PRUNE_BASIC_RATES 10 /* STA does not support all basic rates of BSS */
#define WLC_E_PRUNE_CIPHER_NA 12 /* BSS's cipher not supported */
#define WLC_E_PRUNE_KNOWN_STA 13 /* AP is already known to us as a STA */
#define WLC_E_PRUNE_WDS_PEER 15 /* AP is already known to us as a WDS peer */
#define WLC_E_PRUNE_QBSS_LOAD 16 /* QBSS LOAD - AAC is too low */
#define WLC_E_PRUNE_HOME_AP 17 /* prune home AP */
#define WLC_E_PRUNE_AUTH_RESP_MAC 20 /* suppress auth resp by MAC filter */
/* WPA failure reason codes carried in the WLC_E_PSK_SUP event */
#define WLC_E_SUP_OTHER 0 /* Other reason */
#define WLC_E_SUP_DECRYPT_KEY_DATA 1 /* Decryption of key data failed */
#define WLC_E_SUP_BAD_UCAST_WEP128 2 /* Illegal use of ucast WEP128 */
#define WLC_E_SUP_BAD_UCAST_WEP40 3 /* Illegal use of ucast WEP40 */
#define WLC_E_SUP_UNSUP_KEY_LEN 4 /* Unsupported key length */
#define WLC_E_SUP_PW_KEY_CIPHER 5 /* Unicast cipher mismatch in pairwise key */
#define WLC_E_SUP_MSG3_TOO_MANY_IE 6 /* WPA IE contains > 1 RSN IE in key msg 3 */
#define WLC_E_SUP_MSG3_IE_MISMATCH 7 /* WPA IE mismatch in key message 3 */
#define WLC_E_SUP_NO_INSTALL_FLAG 8 /* INSTALL flag unset in 4-way msg */
#define WLC_E_SUP_MSG3_NO_GTK 9 /* encapsulated GTK missing from msg 3 */
#define WLC_E_SUP_GRP_KEY_CIPHER 10 /* Multicast cipher mismatch in group key */
#define WLC_E_SUP_GRP_MSG1_NO_GTK 11 /* encapsulated GTK missing from group msg 1 */
#define WLC_E_SUP_GTK_DECRYPT_FAIL 12 /* GTK decrypt failure */
#define WLC_E_SUP_SEND_FAIL 13 /* message send failure */
#define WLC_E_SUP_DEAUTH 14 /* received FC_DEAUTH */
#define WLC_E_SUP_WPA_PSK_TMO 15 /* WPA PSK 4-way handshake timeout */
#define WLC_E_SUP_WPA_PSK_M1_TMO 16 /* WPA PSK 4-way handshake M1 timeout */
#define WLC_E_SUP_WPA_PSK_M3_TMO 17 /* WPA PSK 4-way handshake M3 timeout */
/* Ucode reason codes carried in the WLC_E_MACDBG event */
#define WLC_E_MACDBG_LIST_PSM 0 /* Dump list update for PSM registers */
#define WLC_E_MACDBG_LIST_PSMX 1 /* Dump list update for PSMx registers */
#define WLC_E_MACDBG_REGALL 2 /* Dump all registers */
/* Event data for events that include frames received over the air */
/* WLC_E_PROBRESP_MSG
* WLC_E_P2P_PROBREQ_MSG
* WLC_E_ACTION_FRAME_RX
*/
typedef BWL_PRE_PACKED_STRUCT struct wl_event_rx_frame_data {
uint16 version;
uint16 channel; /* Matches chanspec_t format from bcmwifi_channels.h */
int32 rssi;
uint32 mactime;
uint32 rate;
} BWL_POST_PACKED_STRUCT wl_event_rx_frame_data_t;
#define BCM_RX_FRAME_DATA_VERSION 1
/* WLC_E_IF event data */
typedef struct wl_event_data_if {
uint8 ifidx; /* RTE virtual device index (for dongle) */
uint8 opcode; /* see I/F opcode */
uint8 reserved; /* bit mask (WLC_E_IF_FLAGS_XXX ) */
uint8 bssidx; /* bsscfg index */
uint8 role; /* see I/F role */
} wl_event_data_if_t;
/* WLC_E_NATOE event data */
typedef struct wl_event_data_natoe {
uint32 natoe_active;
uint32 sta_ip;
uint16 start_port;
uint16 end_port;
} wl_event_data_natoe_t;
/* opcode in WLC_E_IF event */
#define WLC_E_IF_ADD 1 /* bsscfg add */
#define WLC_E_IF_DEL 2 /* bsscfg delete */
#define WLC_E_IF_CHANGE 3 /* bsscfg role change */
/* I/F role code in WLC_E_IF event */
#define WLC_E_IF_ROLE_STA 0 /* Infra STA */
#define WLC_E_IF_ROLE_AP 1 /* Access Point */
#define WLC_E_IF_ROLE_WDS 2 /* WDS link */
#define WLC_E_IF_ROLE_P2P_GO 3 /* P2P Group Owner */
#define WLC_E_IF_ROLE_P2P_CLIENT 4 /* P2P Client */
#define WLC_E_IF_ROLE_IBSS 8 /* IBSS */
#define WLC_E_IF_ROLE_NAN 9 /* NAN */
/* WLC_E_RSSI event data */
typedef struct wl_event_data_rssi {
int32 rssi;
int32 snr;
int32 noise;
} wl_event_data_rssi_t;
/* WLC_E_IF flag */
#define WLC_E_IF_FLAGS_BSSCFG_NOIF 0x1 /* no host I/F creation needed */
/* Reason codes for LINK */
#define WLC_E_LINK_BCN_LOSS 1 /* Link down because of beacon loss */
#define WLC_E_LINK_DISASSOC 2 /* Link down because of disassoc */
#define WLC_E_LINK_ASSOC_REC 3 /* Link down because assoc recreate failed */
#define WLC_E_LINK_BSSCFG_DIS 4 /* Link down due to bsscfg down */
/* WLC_E_NDIS_LINK event data */
typedef BWL_PRE_PACKED_STRUCT struct ndis_link_parms {
struct ether_addr peer_mac; /* 6 bytes */
uint16 chanspec; /* 2 bytes */
uint32 link_speed; /* current datarate in units of 500 Kbit/s */
uint32 max_link_speed; /* max possible datarate for link in units of 500 Kbit/s */
int32 rssi; /* average rssi */
} BWL_POST_PACKED_STRUCT ndis_link_parms_t;
/* reason codes for WLC_E_OVERLAY_REQ event */
#define WLC_E_OVL_DOWNLOAD 0 /* overlay download request */
#define WLC_E_OVL_UPDATE_IND 1 /* device indication of host overlay update */
/* reason codes for WLC_E_TDLS_PEER_EVENT event */
#define WLC_E_TDLS_PEER_DISCOVERED 0 /* peer is ready to establish TDLS */
#define WLC_E_TDLS_PEER_CONNECTED 1
#define WLC_E_TDLS_PEER_DISCONNECTED 2
/* reason codes for WLC_E_RMC_EVENT event */
#define WLC_E_REASON_RMC_NONE 0
#define WLC_E_REASON_RMC_AR_LOST 1
#define WLC_E_REASON_RMC_AR_NO_ACK 2
#ifdef WLTDLS
/* TDLS Action Category code */
#define TDLS_AF_CATEGORY 12
/* Wi-Fi Display (WFD) Vendor Specific Category */
/* used for WFD Tunneled Probe Request and Response */
#define TDLS_VENDOR_SPECIFIC 127
/* TDLS Action Field Values */
#define TDLS_ACTION_SETUP_REQ 0
#define TDLS_ACTION_SETUP_RESP 1
#define TDLS_ACTION_SETUP_CONFIRM 2
#define TDLS_ACTION_TEARDOWN 3
#define WLAN_TDLS_SET_PROBE_WFD_IE 11
#define WLAN_TDLS_SET_SETUP_WFD_IE 12
#define WLAN_TDLS_SET_WFD_ENABLED 13
#define WLAN_TDLS_SET_WFD_DISABLED 14
#endif
/* WLC_E_RANGING_EVENT subtypes */
#define WLC_E_RANGING_RESULTS 0
/* GAS event data */
typedef BWL_PRE_PACKED_STRUCT struct wl_event_gas {
uint16 channel; /* channel of GAS protocol */
uint8 dialog_token; /* GAS dialog token */
uint8 fragment_id; /* fragment id */
uint16 status_code; /* status code on GAS completion */
uint16 data_len; /* length of data to follow */
uint8 data[1]; /* variable length specified by data_len */
} BWL_POST_PACKED_STRUCT wl_event_gas_t;
/* service discovery TLV */
typedef BWL_PRE_PACKED_STRUCT struct wl_sd_tlv {
uint16 length; /* length of response_data */
uint8 protocol; /* service protocol type */
uint8 transaction_id; /* service transaction id */
uint8 status_code; /* status code */
uint8 data[1]; /* response data */
} BWL_POST_PACKED_STRUCT wl_sd_tlv_t;
/* service discovery event data */
typedef BWL_PRE_PACKED_STRUCT struct wl_event_sd {
uint16 channel; /* channel */
uint8 count; /* number of tlvs */
wl_sd_tlv_t tlv[1]; /* service discovery TLV */
} BWL_POST_PACKED_STRUCT wl_event_sd_t;
/* WLC_E_PKT_FILTER event sub-classification codes */
#define WLC_E_PKT_FILTER_TIMEOUT 1 /* Matching packet not received in last timeout seconds */
/* Note: proxd has a new API (ver 3.0) deprecates the following */
/* Reason codes for WLC_E_PROXD */
#define WLC_E_PROXD_FOUND 1 /* Found a proximity device */
#define WLC_E_PROXD_GONE 2 /* Lost a proximity device */
#define WLC_E_PROXD_START 3 /* used by: target */
#define WLC_E_PROXD_STOP 4 /* used by: target */
#define WLC_E_PROXD_COMPLETED 5 /* used by: initiator completed */
#define WLC_E_PROXD_ERROR 6 /* used by both initiator and target */
#define WLC_E_PROXD_COLLECT_START 7 /* used by: target & initiator */
#define WLC_E_PROXD_COLLECT_STOP 8 /* used by: target */
#define WLC_E_PROXD_COLLECT_COMPLETED 9 /* used by: initiator completed */
#define WLC_E_PROXD_COLLECT_ERROR 10 /* used by both initiator and target */
#define WLC_E_PROXD_NAN_EVENT 11 /* used by both initiator and target */
#define WLC_E_PROXD_TS_RESULTS 12 /* used by: initiator completed */
/* proxd_event data */
typedef struct ftm_sample {
uint32 value; /* RTT in ns */
int8 rssi; /* RSSI */
} ftm_sample_t;
typedef struct ts_sample {
uint32 t1;
uint32 t2;
uint32 t3;
uint32 t4;
} ts_sample_t;
typedef BWL_PRE_PACKED_STRUCT struct proxd_event_data {
uint16 ver; /* version */
uint16 mode; /* mode: target/initiator */
uint16 method; /* method: rssi/TOF/AOA */
uint8 err_code; /* error classification */
uint8 TOF_type; /* one way or two way TOF */
uint8 OFDM_frame_type; /* legacy or VHT */
uint8 bandwidth; /* Bandwidth is 20, 40,80, MHZ */
struct ether_addr peer_mac; /* (e.g for tgt:initiator's */
uint32 distance; /* dst to tgt, units meter */
uint32 meanrtt; /* mean delta */
uint32 modertt; /* Mode delta */
uint32 medianrtt; /* median RTT */
uint32 sdrtt; /* Standard deviation of RTT */
int32 gdcalcresult; /* Software or Hardware Kind of redundant, but if */
/* frame type is VHT, then we should do it by hardware */
int16 avg_rssi; /* avg rssi accroos the ftm frames */
int16 validfrmcnt; /* Firmware's valid frame counts */
int32 peer_router_info; /* Peer router information if available in TLV, */
/* We will add this field later */
int32 var1; /* average of group delay */
int32 var2; /* average of threshold crossing */
int32 var3; /* difference between group delay and threshold crossing */
/* raw Fine Time Measurements (ftm) data */
uint16 ftm_unit; /* ftm cnt resolution in picoseconds , 6250ps - default */
uint16 ftm_cnt; /* num of rtd measurments/length in the ftm buffer */
ftm_sample_t ftm_buff[1]; /* 1 ... ftm_cnt */
} BWL_POST_PACKED_STRUCT wl_proxd_event_data_t;
typedef BWL_PRE_PACKED_STRUCT struct proxd_event_ts_results {
uint16 ver; /* version */
uint16 mode; /* mode: target/initiator */
uint16 method; /* method: rssi/TOF/AOA */
uint8 err_code; /* error classification */
uint8 TOF_type; /* one way or two way TOF */
uint16 ts_cnt; /* number of timestamp measurements */
ts_sample_t ts_buff[1]; /* Timestamps */
} BWL_POST_PACKED_STRUCT wl_proxd_event_ts_results_t;
/* Video Traffic Interference Monitor Event */
#define INTFER_EVENT_VERSION 1
#define INTFER_STREAM_TYPE_NONTCP 1
#define INTFER_STREAM_TYPE_TCP 2
#define WLINTFER_STATS_NSMPLS 4
typedef struct wl_intfer_event {
uint16 version; /* version */
uint16 status; /* status */
uint8 txfail_histo[WLINTFER_STATS_NSMPLS]; /* txfail histo */
} wl_intfer_event_t;
#define RRM_EVENT_VERSION 0
typedef struct wl_rrm_event {
int16 version;
int16 len;
int16 cat; /* Category */
int16 subevent;
char payload[1]; /* Measurement payload */
} wl_rrm_event_t;
/* WLC_E_PSTA_PRIMARY_INTF_IND event data */
typedef struct wl_psta_primary_intf_event {
struct ether_addr prim_ea; /* primary intf ether addr */
} wl_psta_primary_intf_event_t;
/* WLC_E_DPSTA_INTF_IND event data */
typedef enum {
WL_INTF_PSTA = 1,
WL_INTF_DWDS = 2
} wl_dpsta_intf_type;
typedef struct wl_dpsta_intf_event {
wl_dpsta_intf_type intf_type; /* dwds/psta intf register */
} wl_dpsta_intf_event_t;
/* ********** NAN protocol events/subevents ********** */
#define NAN_EVENT_BUFFER_SIZE 512 /* max size */
/* NAN Events sent by firmware */
typedef enum wl_nan_events {
WL_NAN_EVENT_START = 1, /* NAN cluster started */
WL_NAN_EVENT_JOIN = 2, /* Joined to a NAN cluster */
WL_NAN_EVENT_ROLE = 3, /* Role changed */
WL_NAN_EVENT_SCAN_COMPLETE = 4,
WL_NAN_EVENT_DISCOVERY_RESULT = 5,
WL_NAN_EVENT_REPLIED = 6,
WL_NAN_EVENT_TERMINATED = 7, /* the instance ID will be present in the ev data */
WL_NAN_EVENT_RECEIVE = 8,
WL_NAN_EVENT_STATUS_CHG = 9, /* generated on any change in nan_mac status */
WL_NAN_EVENT_MERGE = 10, /* Merged to a NAN cluster */
WL_NAN_EVENT_STOP = 11, /* NAN stopped */
WL_NAN_EVENT_P2P = 12, /* NAN P2P EVENT */
WL_NAN_EVENT_WINDOW_BEGIN_P2P = 13, /* Event for begin of P2P further availability window */
WL_NAN_EVENT_WINDOW_BEGIN_MESH = 14,
WL_NAN_EVENT_WINDOW_BEGIN_IBSS = 15,
WL_NAN_EVENT_WINDOW_BEGIN_RANGING = 16,
WL_NAN_EVENT_POST_DISC = 17, /* Event for post discovery data */
WL_NAN_EVENT_DATA_IF_ADD = 18, /* Event for Data IF add */
WL_NAN_EVENT_DATA_PEER_ADD = 19, /* Event for peer add */
/* nan 2.0 */
WL_NAN_EVENT_DATA_IND = 20, /* Will be removed after source code is committed. */
WL_NAN_EVENT_PEER_DATAPATH_IND = 20, /* Peer's Datapath request Indication to Host */
WL_NAN_EVENT_DATA_CONF = 21, /* Will be removed after source code is committed. */
WL_NAN_EVENT_DATAPATH_ESTB = 21, /* Datapath Established to Host */
WL_NAN_EVENT_SDF_RX = 22, /* entire service discovery frame */
WL_NAN_EVENT_DATA_END = 23, /* Will be removed after source code is committed. */
WL_NAN_EVENT_DATAPATH_END = 23, /* Data End to Host */
WL_NAN_EVENT_BCN_RX = 24, /* received beacon payload */
WL_NAN_EVENT_PEER_DATAPATH_RESP = 25, /* Peer's Data Response indication to Host */
WL_NAN_EVENT_PEER_DATAPATH_CONF = 26, /* Peer's Data Confirm indication to Host */
WL_NAN_EVENT_INVALID /* delimiter for max value */
} nan_app_events_e;
#define IS_NAN_EVT_ON(var, evt) ((var & (1 << (evt-1))) != 0)
/* ******************* end of NAN section *************** */
/* WLC_E_ULP event data */
#define WL_ULP_EVENT_VERSION 1
#define WL_ULP_DISABLE_CONSOLE 1 /* Disable console message on ULP entry */
#define WL_ULP_UCODE_DOWNLOAD 2 /* Download ULP ucode file */
typedef struct wl_ulp_event {
uint16 version;
uint16 ulp_dongle_action;
} wl_ulp_event_t;
/* TCP keepalive event data */
typedef BWL_PRE_PACKED_STRUCT struct wl_event_tko {
uint8 index; /* TCP connection index, 0 to max-1 */
uint8 pad[3]; /* 4-byte struct alignment */
} BWL_POST_PACKED_STRUCT wl_event_tko_t;
typedef struct {
uint8 radar_type; /* one of RADAR_TYPE_XXX */
uint16 min_pw; /* minimum pulse-width (usec * 20) */
uint16 max_pw; /* maximum pulse-width (usec * 20) */
uint16 min_pri; /* minimum pulse repetition interval (usec) */
uint16 max_pri; /* maximum pulse repetition interval (usec) */
uint16 subband; /* subband/frequency */
} radar_detected_event_info_t;
typedef struct wl_event_radar_detect_data {
uint32 version;
uint16 current_chanspec; /* chanspec on which the radar is recieved */
uint16 target_chanspec; /* Target chanspec after detection of radar on current_chanspec */
radar_detected_event_info_t radar_info[2];
} wl_event_radar_detect_data_t;
#define WL_EVENT_MODESW_VER_1 1
#define WL_EVENT_MODESW_VER_CURRENT WL_EVENT_MODESW_VER_1
#define WL_E_MODESW_FLAG_MASK_DEVICE 0x01u /* mask of device: belongs to local or peer */
#define WL_E_MODESW_FLAG_MASK_FROM 0x02u /* mask of origin: firmware or user */
#define WL_E_MODESW_FLAG_MASK_STATE 0x0Cu /* mask of state: modesw progress state */
#define WL_E_MODESW_FLAG_DEVICE_LOCAL 0x00u /* flag - device: info is about self/local */
#define WL_E_MODESW_FLAG_DEVICE_PEER 0x01u /* flag - device: info is about peer */
#define WL_E_MODESW_FLAG_FROM_FIRMWARE 0x00u /* flag - from: request is from firmware */
#define WL_E_MODESW_FLAG_FROM_USER 0x02u /* flag - from: request is from user/iov */
#define WL_E_MODESW_FLAG_STATE_REQUESTED 0x00u /* flag - state: mode switch request */
#define WL_E_MODESW_FLAG_STATE_INITIATED 0x04u /* flag - state: switch initiated */
#define WL_E_MODESW_FLAG_STATE_COMPLETE 0x08u /* flag - state: switch completed/success */
#define WL_E_MODESW_FLAG_STATE_FAILURE 0x0Cu /* flag - state: failed to switch */
/* Get sizeof *X including variable data's length where X is pointer to wl_event_mode_switch_t */
#define WL_E_MODESW_SIZE(X) (sizeof(*(X)) + (X)->length)
/* Get variable data's length where X is pointer to wl_event_mode_switch_t */
#define WL_E_MODESW_DATA_SIZE(X) (((X)->length > sizeof(*(X))) ? ((X)->length - sizeof(*(X))) : 0)
#define WL_E_MODESW_REASON_UNKNOWN 0u /* reason: UNKNOWN */
#define WL_E_MODESW_REASON_ACSD 1u /* reason: ACSD (based on events from FW */
#define WL_E_MODESW_REASON_OBSS_DBS 2u /* reason: OBSS DBS (eg. on interference) */
#define WL_E_MODESW_REASON_DFS 3u /* reason: DFS (eg. on subband radar) */
#define WL_E_MODESW_REASON_DYN160 4u /* reason: DYN160 (160/2x2 - 80/4x4) */
/* event structure for WLC_E_MODE_SWITCH */
typedef struct {
uint16 version;
uint16 length; /* size including 'data' field */
uint16 opmode_from;
uint16 opmode_to;
uint32 flags; /* bit 0: peer(/local==0);
* bit 1: user(/firmware==0);
* bits 3,2: 00==requested, 01==initiated,
* 10==complete, 11==failure;
* rest: reserved
*/
uint16 reason; /* value 0: unknown, 1: ACSD, 2: OBSS_DBS,
* 3: DFS, 4: DYN160, rest: reserved
*/
uint16 data_offset; /* offset to 'data' from beginning of this struct.
* fields may be added between data_offset and data
*/
/* ADD NEW FIELDS HERE */
uint8 data[]; /* reason specific data; could be empty */
} wl_event_mode_switch_t;
/* when reason in WLC_E_MODE_SWITCH is DYN160, data will carry the following structure */
typedef struct {
uint16 trigger; /* value 0: MU to SU, 1: SU to MU, 2: metric_dyn160, 3:re-/assoc,
* 4: disassoc, 5: rssi, 6: traffic, 7: interference,
* 8: chanim_stats
*/
struct ether_addr sta_addr; /* causal STA's MAC address when known */
uint16 metric_160_80; /* latest dyn160 metric */
uint8 nss; /* NSS of the STA */
uint8 bw; /* BW of the STA */
int8 rssi; /* RSSI of the STA */
uint8 traffic; /* internal metric of traffic */
} wl_event_mode_switch_dyn160;
/* TWT Setup Completion is designed to notify the user of TWT Setup process
* status. When 'status' field is value of BCME_OK, the user must check the
* 'setup_cmd' field value in 'wl_twt_sdesc_t' structure that at the end of
* the event data to see the response from the TWT Responding STA; when
* 'status' field is value of BCME_ERROR or non BCME_OK, user must not use
* anything from 'wl_twt_sdesc_t' structure as it is the TWT Requesting STA's
* own TWT parameter.
*/
#define WL_TWT_SETUP_CPLT_VER 0
/* TWT Setup Completion event data */
typedef struct wl_twt_setup_cplt {
uint16 version;
uint16 length; /* the byte count of fields from 'dialog' onwards */
uint8 dialog; /* the dialog token user supplied to the TWT setup API */
uint8 pad[3];
int32 status;
/* wl_twt_sdesc_t desc; - defined in wlioctl.h */
} wl_twt_setup_cplt_t;
#define WL_INVALID_IE_EVENT_VERSION 0
/* Invalid IE Event data */
typedef struct wl_invalid_ie_event {
uint16 version;
uint16 len; /* Length of the invalid IE copy */
uint16 type; /* Type/subtype of the frame which contains the invalid IE */
uint16 error; /* error code of the wrong IE, defined in ie_error_code_t */
uint8 ie[]; /* Variable length buffer for the invalid IE copy */
} wl_invalid_ie_event_t;
typedef enum ie_error_code {
IE_ERROR_OUT_OF_RANGE = 0x01
} ie_error_code_t;
/* This marks the end of a packed structure section. */
#include <packed_section_end.h>
#endif /* _BCMEVENT_H_ */
|