hc
2023-11-06 e3e12f52b214121840b44c91de5b3e5af5d3eb84
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
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
/*
 * Broadcom Event  protocol definitions
 *
 * Dependencies: bcmeth.h
 *
 * Copyright (C) 2020, Broadcom.
 *
 *      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.
 *
 *
 * <<Broadcom-WL-IPTag/Dual:>>
 *
 */
 
/*
 * 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 <bcmeth.h>
#if defined(HEALTH_CHECK) || defined(DNGL_EVENT_SUPPORT)
#include <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 */
#ifdef CSI_SUPPORT
#define WLC_E_CSI        63
#else
#define WLC_E_CHANNEL_ADOPTED    63    /* channel adopted (obsoleted) */
#endif /* CSI_SUPPORT */
#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
/* will enable this after proptxstatus code is merged back to ToT */
#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 */
 
#ifdef WLAWDL
#define WLC_E_AWDL_AW            96    /* AWDL AW period starts */
#define WLC_E_AWDL_ROLE            97    /* AWDL Master/Slave/NE master role event */
#define WLC_E_AWDL_EVENT        98    /* Generic AWDL event */
#endif /* WLAWDL */
 
#define WLC_E_PSTA_PRIMARY_INTF_IND    99    /* psta primary interface indication */
#define WLC_E_NAN            100     /* NAN event - Reserved for future */
#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_TWT_SETUP            157    /* TWT Setup Complete event */
#define WLC_E_HE_TWT_SETUP        157    /* TODO:Remove after merging TWT changes to trunk */
#define WLC_E_NAN_CRITICAL        158    /* NAN Critical Event */
#define WLC_E_NAN_NON_CRITICAL        159    /* NAN Non-Critical Event */
#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_FBT            166    /* FBT event */
#define WLC_E_PFN_SCAN_BACKOFF        167    /* PFN SCAN Backoff event */
#define WLC_E_PFN_BSSID_SCAN_BACKOFF    168    /* PFN BSSID SCAN BAckoff event */
#define WLC_E_AGGR_EVENT        169    /* Aggregated event */
#define WLC_E_TVPM_MITIGATION        171    /* Change in mitigation applied by TVPM */
#define WLC_E_SCAN_START        172    /* Deprecated */
#define WLC_E_SCAN            172    /* Scan event */
#define WLC_E_MBO            173    /* MBO event */
#define WLC_E_PHY_CAL            174    /* Phy calibration start indication to host */
#define WLC_E_RPSNOA            175    /* Radio power save start/end indication to host */
#define WLC_E_ADPS            176    /* ADPS event */
#define WLC_E_SLOTTED_BSS_PEER_OP    177    /* Per peer SCB delete */
#define WLC_E_GTK_KEYROT_NO_CHANSW    179    /* Avoid Chanswitch while GTK key rotation */
#define WLC_E_ONBODY_STATUS_CHANGE    180    /* Indication of onbody status change */
#define WLC_E_BCNRECV_ABORTED        181    /* Fake AP bcnrecv aborted roam event */
#define WLC_E_PMK_INFO            182    /* PMK,PMKID information event */
#define WLC_E_BSSTRANS            183    /* BSS Transition request / Response */
#define WLC_E_WA_LQM            184    /* link quality monitoring */
#define WLC_E_ACTION_FRAME_OFF_CHAN_DWELL_COMPLETE  185 /* action frame off channel
                        *  dwell time complete
                        */
#define WLC_E_WSEC            186    /* wsec keymgmt event */
#define WLC_E_OBSS_DETECTION        187    /* OBSS HW event */
#define WLC_E_AP_BCN_MUTE        188    /* Beacon mute mitigation event */
#define WLC_E_SC_CHAN_QUAL        189    /* Event to indicate the SC chanel quality */
#define WLC_E_DYNSAR            190    /* Dynamic SAR indicate optimize on/off */
#define WLC_E_ROAM_CACHE_UPDATE        191    /* Roam cache update indication */
#define WLC_E_AP_BCN_DRIFT        192    /* Beacon Drift event */
#define WLC_E_PFN_SCAN_ALLGONE_EXT    193    /* last found PFN network gets lost. */
#define WLC_E_AUTH_START        194    /* notify upper layer to start auth */
#define WLC_E_TWT            195    /* TWT event */
#define WLC_E_LAST            196    /* highest val + 1 for range checking */
#if (WLC_E_LAST > 196)
#error "WLC_E_LAST: Invalid value for last event; must be <= 196."
#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);
 
#define WLC_ROAM_EVENT_V1 0x1u
 
/* tlv ids for roam event */
#define WLC_ROAM_NO_NETWORKS_TLV_ID 1
 
/* No Networks reasons */
#define WLC_E_REASON_NO_NETWORKS        0x0u /* value 0 means no networks found */
#define WLC_E_REASON_NO_NETWORKS_BY_SCORE    0x01u /* bit 1 indicates filtered by score */
 
/* bit mask field indicating fail reason */
typedef uint32 wlc_roam_fail_reason_t;
 
typedef struct wlc_roam_event_header {
   uint16 version;        /* version */
   uint16 length;        /* total length */
} wlc_roam_event_header_t;
 
typedef struct wlc_roam_event {
   wlc_roam_event_header_t header;
   uint8 xtlvs[];        /* data */
} wl_roam_event_t;
 
#define WLC_ROAM_PREP_EVENT_V1 0x1u
#define WLC_ROAM_START_EVENT_V1 0x1u
 
typedef struct wlc_roam_start_event {
   uint16 version;        /* version */
   uint16 length;        /* total length */
   int16 rssi;        /* current bss rssi */
   int8 pad[2];        /* padding */
   uint8 xtlvs[];        /* optional xtlvs */
} wlc_roam_start_event_t;
 
typedef struct wlc_roam_prep_event {
   uint16 version;        /* version */
   uint16 length;        /* total length */
   int16 rssi;        /* target bss rssi */
   int8 pad[2];        /* padding */
   uint8 xtlvs[];        /* optional xtlvs */
} wlc_roam_prep_event_t;
 
#define WLC_ROAM_CACHE_UPDATE_EVENT_V1    0x1u
 
/* WLC_E_ROAM_CACHE_UPDATE event data prototype */
typedef struct wlc_roam_cache_update_event {
   uint16 version;        /* version */
   uint16 length;        /* total length */
   uint8 xtlvs[];        /* optional xtlvs */
} wlc_roam_cache_update_event_t;
 
typedef enum wlc_roam_cache_update_reason {
   WLC_ROAM_CACHE_UPDATE_NEW_ROAM_CACHE = 1,    /* new roam cache */
   WLC_ROAM_CACHE_UPDATE_JOIN = 2,            /* join bss */
   WLC_ROAM_CACHE_UPDATE_RSSI_DELTA = 3,        /* rssi delta */
   WLC_ROAM_CACHE_UPDATE_MOTION_RSSI_DELTA = 4,    /* motion rssi delta */
   WLC_ROAM_CACHE_UPDATE_CHANNEL_MISS = 5,        /* channel missed */
   WLC_ROAM_CACHE_UPDATE_START_SPLIT_SCAN = 6,    /* start split scan */
   WLC_ROAM_CACHE_UPDATE_START_FULL_SCAN = 7,    /* start full scan */
   WLC_ROAM_CACHE_UPDATE_INIT_ASSOC = 8,        /* init before assoc */
   WLC_ROAM_CACHE_UPDATE_FULL_SCAN_FAILED = 9,    /* full scan failed */
   WLC_ROAM_CACHE_UPDATE_NO_AP_FOUND = 10,        /* no ap found */
   WLC_ROAM_CACHE_UPDATE_MISSING_AP = 11,        /* cached ap not found */
   WLC_ROAM_CACHE_UPDATE_START_PART_SCAN = 12,    /* RCC */
   WLC_ROAM_CACHE_UPDATE_RCC_MODE = 13,        /* RCC */
   WLC_ROAM_CACHE_UPDATE_RCC_CHANNELS = 14,    /* RCC */
   WLC_ROAM_CACHE_UPDATE_START_LP_FULL_SCAN = 15    /* start low power full scan */
} wlc_roam_cache_update_reason_t;
 
/*
 * Please do not insert/delete events in the middle causing renumbering.
 * It is a problem for host-device compatibility, especially with ROMmed chips.
 */
 
/* Translate between internal and exported status codes */
/* 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 */
#ifdef BCMCCX
#define WLC_E_STATUS_CCXFASTRM        14    /* scan aborted due to CCX fast roam */
#endif /* BCMCCX */
#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_SLOTTED_PEER_ADD    17    /* Slotted scb for peer addition status */
#define WLC_E_STATUS_SLOTTED_PEER_DEL    18    /* Slotted scb for peer deletion status */
#define WLC_E_STATUS_RXBCN        19    /* Rx Beacon event for FAKEAP feature    */
#define WLC_E_STATUS_RXBCN_ABORT    20    /* Rx Beacon abort event for FAKEAP feature */
#define WLC_E_STATUS_LOWPOWER_ON_LOWSPAN    21    /* LOWPOWER scan request during LOWSPAN */
#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
/* Slice-swap status code */
#define WLC_E_STATUS_SLICE_SWAP_START        3
#define WLC_E_STATUS_SLICE_SWAP_COMPLETE    4
 
/* 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
 
#ifdef WLAWDL
#define WLC_E_REASON_AWDL_ENABLE    5
#define WLC_E_REASON_AWDL_DISABLE    6
#endif /* WLAWDL */
 
/* TX STAT ERROR REASON CODE */
#define WLC_E_REASON_TXBACKOFF_NOT_DECREMENTED 0x1
 
/* 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;
 
/* reason codes for WLC_E_GTK_KEYROT_NO_CHANSW event */
#define WLC_E_GTKKEYROT_SCANDELAY       0       /* Delay scan while gtk in progress */
 
#ifdef WLAWDL
#define WLC_E_GTKKEYROT_SKIPCHANSW_AWDL 1       /* Avoid chansw by awdl while gtk in progress */
#endif /* WLAWDL */
 
#define WLC_E_GTKKEYROT_SKIPCHANSW_P2P  2       /* Avoid chansw by p2p while gtk in progress */
 
/* 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 */
 
/* Roam codes (5-7) used primarily by CCX */
#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 */
#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 */
#define WLC_E_REASON_CSA        14    /* roamed due to CSA from AP */
#define WLC_E_REASON_ESTM_LOW        15    /* roamed due to ESTM low tput */
#define WLC_E_REASON_SILENT_ROAM    16    /* roamed due to Silent roam */
#define WLC_E_REASON_INACTIVITY        17    /* full roam scan due to inactivity */
#define WLC_E_REASON_ROAM_SCAN_TIMEOUT        18    /* roam scan timer timeout */
#define WLC_E_REASON_REASSOC        19    /* roamed due to reassoc iovar */
#define WLC_E_REASON_LAST        20    /* NOTE: increment this as you add reasons above */
 
/* 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 */
#ifdef BCMCCX
#define WLC_E_PRUNE_CCXFAST_PREVAP    11    /* CCX FAST ROAM: prune previous AP */
#endif /* def BCMCCX */
#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 */
#ifdef BCMCCX
#define WLC_E_PRUNE_CCXFAST_DROAM    14    /* CCX FAST ROAM: prune unqualified AP */
#endif /* def BCMCCX */
#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 */
#ifdef BCMCCX
#define WLC_E_PRUNE_AP_BLOCKED        18    /* prune blocked AP */
#define WLC_E_PRUNE_NO_DIAG_SUPPORT    19    /* prune due to diagnostic mode not supported */
#endif /* BCMCCX */
#define WLC_E_PRUNE_AUTH_RESP_MAC    20    /* suppress auth resp by MAC filter */
#define WLC_E_PRUNE_ASSOC_RETRY_DELAY    21    /* MBO assoc retry delay */
#define WLC_E_PRUNE_RSSI_ASSOC_REJ    22    /* OCE RSSI-based assoc rejection */
#define WLC_E_PRUNE_MAC_AVOID        23    /* AP's MAC addr is in STA's MAC avoid list */
#define WLC_E_PRUNE_TRANSITION_DISABLE    24    /* AP's Transition Disable Policy */
 
/* 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 */
#define WLC_E_SUP_GTK_UPDATE_FAIL    18  /* GTK update failure */
#define WLC_E_SUP_TK_UPDATE_FAIL    19  /* TK update failure */
#define WLC_E_SUP_KEY_INSTALL_FAIL    20  /* Buffered key install failure */
#define WLC_E_SUP_PTK_UPDATE        21    /* PTK update */
#define WLC_E_SUP_MSG1_PMKID_MISMATCH    22    /* MSG1 PMKID not matched to PMKSA cache list */
 
/* event msg for WLC_E_SUP_PTK_UPDATE */
typedef struct wlc_sup_ptk_update {
   uint16 version;        /* 0x0001 */
   uint16 length;        /* length of data that follows */
   uint32 tsf_low;        /* tsf at which ptk updated by internal supplicant */
   uint32 tsf_high;
   uint8 key_id;        /* always 0 for PTK update */
   uint8 tid;        /* tid for the PN below - PTK refresh is per key */
   uint16 pn_low;
   uint32 pn_high;        /* local highest PN of any tid of the key when M4 was sent */
} wlc_sup_ptk_update_t;
 
/* sub event of WLC_E_WSEC */
typedef enum {
   WLC_WSEC_EVENT_PTK_PN_SYNC_ERROR = 0x01
} wl_wsec_event_type_t;
 
/* sub event msg - WLC_WSEC_EVENT_PTK_PN_SYNC_ERROR */
struct wlc_wsec_ptk_pn_sync_error_v1 {
   uint32 tsf_low;        /* tsf at which PN sync error happened */
   uint32 tsf_high;
   uint8 key_id;        /* always 0 for PTK update */
   uint8 tid;        /* tid for the PN below - PTK refresh is per key */
   uint16 PAD1;
   uint16 rx_seqn;        /* d11 seq number */
   uint16 pn_low;
   uint32 pn_high;        /* local PN window start for the tid */
   uint16 key_idx;        /* key idx in the keymgmt */
   uint16 rx_pn_low;
   uint32 rx_pn_high;    /* Rx PN window start for the tid */
   uint32 span_time;    /* time elapsed since replay */
   uint32 span_pkts;    /* pkt count since replay */
};
 
typedef struct wlc_wsec_ptk_pn_sync_error_v1 wlc_wsec_ptk_pn_sync_error_t;
 
/* WLC_E_WSEC event msg */
typedef struct wlc_wsec_event {
   uint16 version;        /* 0x0001 */
   uint16 length;        /* length of data that follows */
   uint16 type;        /* wsec_event_type_t */
   uint16 PAD1;
   union {
       wlc_wsec_ptk_pn_sync_error_t pn_sync_err;
   } data;
} wlc_wsec_event_t;
 
/* 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
 */
 
#ifdef WLAWDL
#define WLC_E_AWDL_SCAN_START        1    /* Scan start indication to host */
#define WLC_E_AWDL_SCAN_DONE        0    /* Scan Done indication to host */
#endif /* WLAWDL */
 
#define MAX_PHY_CORE_NUM 4u
 
#define BCM_RX_FRAME_DATA_VERSION_2    2u
 
typedef BWL_PRE_PACKED_STRUCT struct wl_event_rx_frame_data_v2 {
   uint16    version;
   uint16    len;
   uint16    channel;    /* Matches chanspec_t format from bcmwifi_channels.h */
   uint16    pad;
   int32    rssi;
   uint32    mactime;
   uint32    rate;
   int8    per_core_rssi[MAX_PHY_CORE_NUM];
} BWL_POST_PACKED_STRUCT wl_event_rx_frame_data_v2_t;
 
typedef BWL_PRE_PACKED_STRUCT struct wl_event_rx_frame_data_v1 {
   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_v1_t;
 
#define BCM_RX_FRAME_DATA_VERSION_1 1u
 
#ifndef WL_EVENT_RX_FRAME_DATA_ALIAS
#define BCM_RX_FRAME_DATA_VERSION BCM_RX_FRAME_DATA_VERSION_1
typedef wl_event_rx_frame_data_v1_t wl_event_rx_frame_data_t;
#endif
 
/* 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 */
 
#ifdef WLAWDL
#define WLC_E_IF_ROLE_AWDL        7    /* AWDL */
#endif /* WLAWDL */
 
#define WLC_E_IF_ROLE_IBSS        8    /* IBSS */
#define WLC_E_IF_ROLE_NAN        9    /* NAN */
 
#define WLC_E_IF_ROLE_MESH        10u    /* identifies the role as MESH */
 
/* WLC_E_RSSI event data */
typedef struct wl_event_data_rssi {
   int32 rssi;
   int32 snr;
   int32 noise;
} wl_event_data_rssi_t;
 
#define WL_EVENT_WA_LQM_VER    0    /* initial version */
 
#define WL_EVENT_WA_LQM_BASIC    0    /* event sub-types */
typedef struct {            /* payload of subevent in xtlv */
   int32 rssi;
   int32 snr;
   uint32 tx_rate;
   uint32 rx_rate;
} wl_event_wa_lqm_basic_t;
 
typedef struct wl_event_wa_lqm {
   uint16 ver;            /* version */
   uint16 len;            /* total length structure */
   uint8 subevent[];        /* sub-event data in bcm_xtlv_t format */
} wl_event_wa_lqm_t;
 
/* WLC_E_IF flag */
#define WLC_E_IF_FLAGS_BSSCFG_NOIF    0x1    /* no host I/F creation needed */
 
/* Reason codes for LINK */
/* 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 */
#define WLC_E_LINK_ASSOC_FAIL        5    /* Link down due to assoc to new AP during roam */
#define WLC_E_LINK_REASSOC_ROAM_FAIL    6    /* Link down due to reassoc roaming failed */
#define WLC_E_LINK_LOWRSSI_ROAM_FAIL    7    /* Link down due to Low rssi roaming failed */
#define WLC_E_LINK_NO_FIRST_BCN_RX    8    /* Link down due to 1st beacon rx failure */
 
/* 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
 
#define PHY_CAL_EVT_VERSION 1
typedef struct wlc_phy_cal_info {
   uint16 version; /* structure version */
   uint16 length; /* length of the rest of the structure */
   uint16 chanspec;
   uint8 start;
   uint8 phase;
   int16 temp;
   uint8 reason;
   uint8 slice;
} wlc_phy_cal_info_t;
 
#ifdef WLAWDL
/* WLC_E_AWDL_EVENT subtypes */
#define WLC_E_AWDL_SCAN_STATUS        0
#define WLC_E_AWDL_RX_ACT_FRAME        1
#define WLC_E_AWDL_RX_PRB_RESP        2
#define WLC_E_AWDL_PHYCAL_STATUS    3
#define WLC_E_AWDL_WOWL_NULLPKT        4
#define WLC_E_AWDL_OOB_AF_STATUS    5
/* WLC_E_AWDL_RANGING_RESULTS will be removed and only WLC_E_AWDL_UNUSED will be here
 * Keeping both of them to avoid compilation errot on trunk
 * It will be removed after wlc_ranging merge from IGUANA
 */
#define WLC_E_AWDL_RANGING_RESULTS    6
#define WLC_E_AWDL_UNUSED        6
#define WLC_E_AWDL_SUB_PEER_STATE    7
#define WLC_E_AWDL_SUB_INTERFACE_STATE    8
#define WLC_E_AWDL_UCAST_AF_TXSTATUS    9
#define WLC_E_AWDL_NAN_CLUSTER_MERGE    10
#define WLC_E_AWDL_NAN_RX_BEACON    11
#define WLC_E_AWDL_SD_DISCOVERY_RESULT    12
#define WLC_E_AWDL_SD_REPLIED        13
#define WLC_E_AWDL_SD_TERMINATED    14
#define WLC_E_AWDL_SD_RECEIVE        15
#define WLC_E_AWDL_SD_VNDR_IE        16
#define WLC_E_AWDL_SD_DEVICE_STATE_IE    17
#define WLC_E_AWDL_DFSP_NOTIF        18
#define WLC_E_AWDL_DFSP_SUSPECT        19
#define WLC_E_AWDL_DFSP_RESUME        20
 
/* WLC_E_AWDL_SCAN_STATUS status values */
#define WLC_E_AWDL_SCAN_START        1    /* Scan start indication to host */
#define WLC_E_AWDL_SCAN_DONE        0    /* Scan Done indication to host */
#define WLC_E_AWDL_PHYCAL_START        1    /* Phy calibration start indication to host */
#define WLC_E_AWDL_PHYCAL_DONE        0    /* Phy calibration done indication to host */
 
typedef BWL_PRE_PACKED_STRUCT struct {
   uint8 subscribe_id;    /* local subscribe instance id */
   uint8 publish_id;    /* publiser's  insance id */
   struct ether_addr addr;  /* publsher's address */
   uint8 service_info_len;  /* length of the service specific information in data[] */
   uint8 data[1];        /* service specific info */
} BWL_PRE_PACKED_STRUCT awdl_sd_discovery_result_t;
 
typedef BWL_PRE_PACKED_STRUCT struct {
   uint8 instance_id;
   struct ether_addr addr;  /* publsher's address */
} BWL_PRE_PACKED_STRUCT awdl_sd_replied_event_t;
 
#define AWDL_SD_TERM_REASON_TIMEOUT    1
#define AWDL_SD_TERM_REASON_USERREQ    2
#define AWDL_SD_TERM_REASON_FAIL    3
typedef BWL_PRE_PACKED_STRUCT struct {
   uint8 instance_id;    /* publish instance id */
   uint8 reason;        /* 1=timeout, 2=user request, 3=failure */
} BWL_PRE_PACKED_STRUCT awdl_sd_term_event_t;
 
typedef BWL_PRE_PACKED_STRUCT struct {
   uint8 instance_id;    /* local publish/subscribe instance id */
   uint8 sender_instance_id;
   struct ether_addr addr;    /* sender's address */
   uint8 service_info_len;    /* length of the service specific information in data[] */
   uint8 data[1];        /* service specific info */
} BWL_PRE_PACKED_STRUCT awdl_sd_receive_t;
 
typedef BWL_PRE_PACKED_STRUCT struct {
   struct ether_addr addr;    /* sender's address */
   uint16 len;        /* length of data[] */
   uint8 data[1];        /* vndr specific info */
} BWL_PRE_PACKED_STRUCT awdl_sd_vndr_ie_event_t;
 
#endif /* WLAWDL */
 
/* 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;
 
#ifdef WLAWDL
/* WLC_E_AWDL_AW event data */
typedef BWL_PRE_PACKED_STRUCT struct awdl_aws_event_data {
   uint32    fw_time;            /* firmware PMU time */
   struct    ether_addr current_master;    /* Current master Mac addr */
   uint16    aw_counter;            /* AW seq# */
   uint8    aw_ext_count;            /* AW extension count */
   uint8    aw_role;            /* AW role */
   uint8    flags;                /* AW event flag */
   uint16    aw_chan;
   uint8    infra_rssi;            /* rssi on the infra channel */
   uint32    infra_rxbcn_count;        /* number of beacons received */
   struct  ether_addr top_master;        /* Top master */
} BWL_POST_PACKED_STRUCT awdl_aws_event_data_t;
 
/* For awdl_aws_event_data_t.flags */
#define AWDL_AW_LAST_EXT    0x01
 
/* WLC_E_AWDL_OOB_AF_STATUS event data */
typedef BWL_PRE_PACKED_STRUCT struct awdl_oob_af_status_data {
   uint32    tx_time_diff;
   uint16    pkt_tag;
   uint8    tx_chan;
} BWL_POST_PACKED_STRUCT awdl_oob_af_status_data_t;
#endif /* WLAWDL */
 
/* 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  ********** */
#ifndef NAN_EVENT_BUFFER_SIZE
#define NAN_EVENT_BUFFER_SIZE 512 /* max size */
#endif /* NAN_EVENT_BUFFER_SIZE */
/* NAN Events sent by firmware */
 
/*
 * If you make changes to this enum, dont forget to update the mask (if need be).
 */
typedef enum wl_nan_events {
   WL_NAN_EVENT_START            = 1,    /* NAN cluster started */
   WL_NAN_EVENT_JOIN            = 2,    /* To be deprecated */
   WL_NAN_EVENT_ROLE            = 3,    /* Role changed */
   WL_NAN_EVENT_SCAN_COMPLETE        = 4,    /* To be deprecated */
   WL_NAN_EVENT_DISCOVERY_RESULT        = 5,    /* Subscribe Received */
   WL_NAN_EVENT_REPLIED            = 6,    /* Publish Sent */
   WL_NAN_EVENT_TERMINATED            = 7,    /* sub / pub is terminated */
   WL_NAN_EVENT_RECEIVE            = 8,    /* Follow up Received */
   WL_NAN_EVENT_STATUS_CHG            = 9,    /* change in nan_mac status */
   WL_NAN_EVENT_MERGE            = 10,    /* Merged to a NAN cluster */
   WL_NAN_EVENT_STOP            = 11,    /* To be deprecated */
   WL_NAN_EVENT_P2P            = 12,    /* Unused */
   WL_NAN_EVENT_WINDOW_BEGIN_P2P        = 13,    /* Unused */
   WL_NAN_EVENT_WINDOW_BEGIN_MESH        = 14,    /* Unused */
   WL_NAN_EVENT_WINDOW_BEGIN_IBSS        = 15,    /* Unused */
   WL_NAN_EVENT_WINDOW_BEGIN_RANGING    = 16,    /* Unused */
   WL_NAN_EVENT_POST_DISC            = 17,    /* Event for post discovery data */
   WL_NAN_EVENT_DATA_IF_ADD        = 18,    /* Unused */
   WL_NAN_EVENT_DATA_PEER_ADD        = 19,    /* Event for peer add */
   /* nan 2.0 */
   WL_NAN_EVENT_PEER_DATAPATH_IND        = 20,    /* Incoming DP req */
   WL_NAN_EVENT_DATAPATH_ESTB        = 21,    /* DP Established */
   WL_NAN_EVENT_SDF_RX            = 22,    /* SDF payload */
   WL_NAN_EVENT_DATAPATH_END        = 23,    /* DP Terminate recvd */
   WL_NAN_EVENT_BCN_RX            = 24,    /* received beacon payload */
   WL_NAN_EVENT_PEER_DATAPATH_RESP        = 25,    /* Peer's DP response */
   WL_NAN_EVENT_PEER_DATAPATH_CONF        = 26,    /* Peer's DP confirm */
   WL_NAN_EVENT_RNG_REQ_IND        = 27,    /* Range Request */
   WL_NAN_EVENT_RNG_RPT_IND        = 28,    /* Range Report */
   WL_NAN_EVENT_RNG_TERM_IND        = 29,    /* Range Termination */
   WL_NAN_EVENT_PEER_DATAPATH_SEC_INST    = 30,   /* Peer's DP sec install */
   WL_NAN_EVENT_TXS            = 31,   /* for tx status of follow-up and SDFs */
   WL_NAN_EVENT_DW_START            = 32,    /* dw start */
   WL_NAN_EVENT_DW_END            = 33,    /* dw end */
   WL_NAN_EVENT_CHAN_BOUNDARY        = 34,    /* channel switch event */
   WL_NAN_EVENT_MR_CHANGED            = 35,    /* AMR or IMR changed event during DW */
   WL_NAN_EVENT_RNG_RESP_IND        = 36,    /* Range Response Rx */
   WL_NAN_EVENT_PEER_SCHED_UPD_NOTIF    = 37,    /* Peer's schedule update notification */
   WL_NAN_EVENT_PEER_SCHED_REQ        = 38,    /* Peer's schedule request */
   WL_NAN_EVENT_PEER_SCHED_RESP        = 39,    /* Peer's schedule response */
   WL_NAN_EVENT_PEER_SCHED_CONF        = 40,    /* Peer's schedule confirm */
   WL_NAN_EVENT_SENT_DATAPATH_END        = 41,    /* Sent DP terminate frame */
   WL_NAN_EVENT_SLOT_START            = 42,    /* SLOT_START event */
   WL_NAN_EVENT_SLOT_END            = 43,    /* SLOT_END event */
   WL_NAN_EVENT_HOST_ASSIST_REQ        = 44,    /* Requesting host assist */
   WL_NAN_EVENT_RX_MGMT_FRM        = 45,    /* NAN management frame received */
   WL_NAN_EVENT_DISC_CACHE_TIMEOUT        = 46,    /* Disc cache timeout */
   WL_NAN_EVENT_OOB_AF_TXS            = 47,    /* OOB AF transmit status */
   WL_NAN_EVENT_OOB_AF_RX            = 48,   /* OOB AF receive event */
 
   /* keep WL_NAN_EVENT_INVALID as the last element */
   WL_NAN_EVENT_INVALID                /* delimiter for max value */
} nan_app_events_e;
 
/* remove after precommit */
#define NAN_EV_MASK(ev)    (1 << (ev - 1))
#define IS_NAN_EVT_ON(var, evt) ((var & (1 << (evt-1))) != 0)
 
#define NAN_EV_MASK_SET(var, evt)    \
   (((uint32)evt < WL_NAN_EVMASK_EXTN_LEN * 8) ? \
   ((*((uint8 *)var + ((evt - 1)/8))) |= (1 << ((evt - 1) %8))) : 0)
#define IS_NAN_EVENT_ON(var, evt)    \
   (((uint32)evt < WL_NAN_EVMASK_EXTN_LEN * 8) && \
   (((*((uint8 *)var + ((evt - 1)/8))) & (1 << ((evt - 1) %8))) != 0))
 
/*  ******************* end of NAN section *************** */
 
typedef enum wl_scan_events {
   WL_SCAN_START = 1,
   WL_SCAN_END = 2
} wl_scan_events;
 
/* 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;
 
#define WL_EVENT_FBT_VER_1        1
 
#define WL_E_FBT_TYPE_FBT_OTD_AUTH    1
#define WL_E_FBT_TYPE_FBT_OTA_AUTH    2
 
/* event structure for WLC_E_FBT */
typedef struct {
   uint16 version;
   uint16 length;    /* size including 'data' field */
   uint16 type; /* value 0: unknown, 1: FBT OTD Auth Req */
   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[];    /* type specific data; could be empty */
} wl_event_fbt_t;
 
/* 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_EVENT_HDR_LEN (SIZE_OF(wl_twt_event_t, version) + SIZE_OF(wl_twt_event_t, length))
#define WL_TWT_EVENT_BASE_LEN    sizeof(wl_twt_event_t)
typedef enum wl_twt_event_type {
   WL_TWT_EVENT_SETUP        = 1,
   WL_TWT_EVENT_TEARDOWN        = 2,
   WL_TWT_EVENT_INFOFRM        = 3,
   WL_TWT_EVENT_NOTIFY        = 4
} wl_twt_event_type_t;
 
#define WL_TWT_EVENT_VER    0u
 
/* WLC_E_TWT event Main-event */
typedef struct wl_twt_event {
   uint16 version;
   uint16 length;    /* the byte count of fields from 'event_type' onwards */
   uint8 event_type;    /* See sub event types in wl_twt_event_type_t */
   uint8 PAD[3];
   uint8 event_info[];
} wl_twt_event_t;
 
/* 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    0u
 
/* TWT Setup Reason code */
typedef enum wl_twt_setup_rc {
   WL_TWT_SETUP_RC_ACCEPT    = 0u,    /* TWT Setup Accepted */
   WL_TWT_SETUP_RC_REJECT    = 1u,    /* TWT Setup Rejected */
   WL_TWT_SETUP_RC_TIMEOUT    = 2u,    /* TWT Setup Time-out */
   WL_TWT_SETUP_RC_IE    = 3u,    /* TWT Setup IE Validation failed */
   WL_TWT_SETUP_RC_PARAMS    = 4u,    /* TWT Setup IE Params invalid */
   /* Any new reason code add before this */
   WL_TWT_SETUP_RC_ERROR    = 255u,    /* Generic Error cases */
} wl_twt_setup_rc_t;
 
/* 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;    /* Setup frame dialog token */
   uint8 reason_code;    /* see WL_TWT_SETUP_RC_XXXX */
   uint8 configID;    /* TWT Configuration ID */
   uint8 pad[1];
   int32 status;
   /* wl_twt_sdesc_t desc; - defined in wlioctl.h */
} wl_twt_setup_cplt_t;
 
#define WL_TWT_TEARDOWN_CPLT_VER    0u
 
/* TWT teardown Reason code */
typedef enum wl_twt_td_rc {
   WL_TWT_TD_RC_HOST    = 0u,    /* Teardown triggered by Host */
   WL_TWT_TD_RC_PEER    = 1u,    /* Peer initiated teardown */
   WL_TWT_TD_RC_MCHAN    = 2u,    /* Teardown due to MCHAN Active */
   WL_TWT_TD_RC_MCNX    = 3u,    /* Teardown due to MultiConnection */
   WL_TWT_TD_RC_CSA    = 4u,    /* Teardown due to CSA */
   WL_TWT_TD_RC_BTCX    = 5u,    /* Teardown due to BTCX */
   WL_TWT_TD_RC_SETUP_FAIL    = 6u, /* Setup fail midway. Teardown all connections */
   WL_TWT_TD_RC_SCHED    = 7u,    /* Teardown by TWT Scheduler */
   /* Any new reason code add before this */
   WL_TWT_TD_RC_ERROR    = 255u,    /* Generic Error cases */
} wl_twt_td_rc_t;
 
/* TWT Teardown complete event data */
typedef struct wl_twt_teardown_cplt {
   uint16 version;
   uint16 length;        /* the byte count of fields from 'reason_code' onwards */
   uint8 reason_code;    /* WL_TWT_TD_RC_XXXX */
   uint8 configID;        /* TWT Configuration ID */
   uint8 pad[2];
   int32 status;
   /* wl_twt_teardesc_t; - defined in wlioctl.h */
} wl_twt_teardown_cplt_t;
 
#define WL_TWT_INFO_CPLT_VER    0u
 
/* TWT Info Reason code */
typedef enum wl_twt_info_rc {
   WL_TWT_INFO_RC_HOST    = 0u,    /* Host initiated Info complete */
   WL_TWT_INFO_RC_PEER    = 1u,    /* Peer initiated TWT Info */
   /* Any new reason code add before this */
   WL_TWT_INFO_RC_ERROR    = 255u,    /* generic error conditions */
} wl_twt_info_rc_t;
 
/* TWT Info complete event data */
typedef struct wl_twt_info_cplt {
   uint16 version;
   uint16 length;        /* the byte count of fields from 'reason_code' onwards */
   uint8 reason_code;    /* WL_TWT_INFO_RC_XXXX */
   uint8 configID;        /* TWT Configuration ID */
   uint8 pad[2];
   int32 status;
   /* wl_twt_infodesc_t; - defined in wlioctl.h */
} wl_twt_info_cplt_t;
 
#define WL_TWT_NOTIFY_VER    0u
#define WL_TWT_NOTIFY_LEN sizeof(wl_twt_notify_t)
#define WL_TWT_NOTIFY_HDR_LEN (SIZE_OF(wl_twt_notify_t, version) + SIZE_OF(wl_twt_notify_t, length))
 
typedef enum wl_twt_notification {
   WL_TWT_NOTIF_ALLOW_TWT    = 1,    /* Dongle indication of allowing TWT setup */
} wl_twt_notification_t;
 
/* TWT notification event */
typedef struct wl_twt_notify {
   uint16 version;
   uint16 length;        /* the byte count of fields from 'reason_code' onwards */
   uint8 notification;
   uint8 PAD[3];
} wl_twt_notify_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;
 
/* Fixed header portion of Invalid IE Event */
typedef struct wl_invalid_ie_event_hdr {
   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 */
   /* var length IE data follows */
} wl_invalid_ie_event_hdr_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>
 
/* reason of channel switch */
typedef enum {
   CHANSW_DFS = 10,    /* channel switch due to DFS module */
   CHANSW_HOMECH_REQ = 14, /* channel switch due to HOME Channel Request */
   CHANSW_STA = 15,    /* channel switch due to STA */
   CHANSW_SOFTAP = 16,    /* channel switch due to SodtAP */
   CHANSW_AIBSS = 17,    /* channel switch due to AIBSS */
   CHANSW_NAN = 18,    /* channel switch due to NAN */
   CHANSW_NAN_DISC = 19,    /* channel switch due to NAN Disc */
   CHANSW_NAN_SCHED = 20,    /* channel switch due to NAN Sched */
 
#ifdef WLAWDL
   CHANSW_AWDL_AW = 21,    /* channel switch due to AWDL aw */
   CHANSW_AWDL_SYNC = 22,    /* channel switch due to AWDL sync */
   CHANSW_AWDL_CAL = 23,    /* channel switch due to AWDL Cal */
   CHANSW_AWDL_PSF = 24,    /* channel switch due to AWDL PSF */
   CHANSW_AWDL_OOB_AF = 25, /* channel switch due to AWDL OOB action frame */
#endif /* WLAWDL */
 
   CHANSW_TDLS = 26,    /* channel switch due to TDLS */
   CHANSW_PROXD = 27,    /* channel switch due to PROXD */
   CHANSW_SLOTTED_BSS = 28, /* channel switch due to slotted bss */
   CHANSW_SLOTTED_CMN_SYNC = 29, /* channel switch due to Common Sync Layer */
   CHANSW_SLOTTED_BSS_CAL = 30,    /* channel switch due to Cal request from slotted bss */
   CHANSW_MAX_NUMBER = 31    /* max channel switch reason */
} wl_chansw_reason_t;
 
#define CHANSW_REASON(reason)    (1 << reason)
 
#define EVENT_AGGR_DATA_HDR_LEN    8
 
typedef struct event_aggr_data {
   uint16  num_events; /* No of events aggregated */
   uint16    len;    /* length of the aggregated events, excludes padding */
   uint8    pad[4]; /* Padding to make aggr event packet header aligned
                    * on 64-bit boundary, for a 64-bit host system.
                    */
   uint8    data[];    /* Aggregate buffer containing Events */
} event_aggr_data_t;
 
/* WLC_E_TVPM_MITIGATION event structure version */
#define WL_TVPM_MITIGATION_VERSION 1
 
/* TVPM mitigation on/off status bits */
#define WL_TVPM_MITIGATION_TXDC        0x1
#define WL_TVPM_MITIGATION_TXPOWER    0x2
#define WL_TVPM_MITIGATION_TXCHAINS    0x4
 
/* Event structure for WLC_E_TVPM_MITIGATION */
typedef struct wl_event_tvpm_mitigation {
   uint16 version;        /* structure version */
   uint16 length;        /* length of this structure */
   uint32 timestamp_ms;    /* millisecond timestamp */
   uint8 slice;        /* slice number */
   uint8 pad;
   uint16 on_off;        /* mitigation status bits */
} wl_event_tvpm_mitigation_t;
 
/* Event structures for sub health checks of PHY */
 
#define WL_PHY_HC_DESENSE_STATS_VER (1)
typedef struct wl_hc_desense_stats {
   uint16 version;
   uint16 chanspec;
   int8 allowed_weakest_rssi; /* based on weakest link RSSI */
   uint8 ofdm_desense; /* Desense requested for OFDM */
   uint8 bphy_desense; /* Desense requested for bphy */
   int8 glitch_upd_wait; /* wait post ACI mitigation */
} wl_hc_desense_stats_v1_t;
 
#define WL_PHY_HC_TEMP_STATS_VER (1)
typedef struct wl_hc_temp_stats {
   uint16 version;
   uint16 chanspec;
   int16 curtemp; /* Temperature */
   uint8 temp_disthresh; /* Threshold to reduce tx chain */
   uint8 temp_enthresh; /* Threshold to increase tx chains */
   uint tempsense_period; /* Temperature check period */
   bool heatedup; /* 1: temp throttling on */
   uint8 bitmap; /* Indicating rx and tx chains */
   uint8 pad[2];
} wl_hc_temp_stats_v1_t;
 
#define WL_PHY_HC_TEMP_STATS_VER_2 (2)
typedef struct {
   uint16 version;
   uint16 chanspec;
   int16 curtemp; /* Temperature */
   uint8 pad[2];
} wl_hc_temp_stats_v2_t;
 
#define WL_PHY_HC_VCOCAL_STATS_VER (1)
typedef struct wl_hc_vcocal_stats {
   uint16 version;
   uint16 chanspec;
   int16 curtemp;    /* Temperature */
   /* Ring buffer - Maintains history of previous 16 wake/sleep cycles */
   uint16 vcocal_status_wake;
   uint16 vcocal_status_sleep;
   uint16 plllock_status_wake;
   uint16 plllock_status_sleep;
   /* Cal Codes */
   uint16 cc_maincap;
   uint16 cc_secondcap;
   uint16 cc_auxcap;
} wl_hc_vcocal_stats_v1_t;
 
#define WL_PHY_HC_TXPWR_STATS_VER (1)
typedef struct wl_hc_tx_stats {
   uint16 version;
   uint16 chanspec;
   int8 tgt_pwr[MAX_PHY_CORE_NUM]; /* Target pwr (qdBm) */
   int8 estPwr[MAX_PHY_CORE_NUM]; /* Rate corrected (qdBm) */
   int8 estPwr_adj[MAX_PHY_CORE_NUM]; /* Max power (qdBm) */
   uint8 baseindex[MAX_PHY_CORE_NUM]; /* Tx base index */
   int16 temp;    /* Temperature */
   uint16 TxCtrlWrd[3]; /* 6 PHY ctrl bytes */
   int8 min_txpower; /* min tx power per ant */
   uint8 pad[3];
} wl_hc_txpwr_stats_v1_t;
 
#define WL_PHY_HC_TXPWR_STATS_VER_2 (2)
typedef struct {
   uint16 version;
   uint16 chanspec;
   int8 tgt_pwr[MAX_PHY_CORE_NUM]; /* Target pwr (qdBm) */
   uint8 estPwr[MAX_PHY_CORE_NUM]; /* Rate corrected (qdBm) */
   uint8 estPwr_adj[MAX_PHY_CORE_NUM]; /* Max power (qdBm) */
   uint8 baseindex[MAX_PHY_CORE_NUM]; /* Tx base index */
   int16 temp;    /* Temperature */
   uint16 TxCtrlWrd[3]; /* 6 PHY ctrl bytes */
   int8 min_txpower; /* min tx power per ant */
   uint8 pad[3];
} wl_hc_txpwr_stats_v2_t;
 
typedef enum wl_mbo_event_type {
   WL_MBO_E_CELLULAR_NW_SWITCH = 1,
   WL_MBO_E_BTM_RCVD = 2,
   /* ADD before this */
   WL_MBO_E_LAST = 3  /* highest val + 1 for range checking */
} wl_mbo_event_type_t;
 
/* WLC_E_MBO event structure version */
#define WL_MBO_EVT_VER 1
 
struct wl_event_mbo {
   uint16 version;    /* structure version */
   uint16 length;        /* length of the rest of the structure from type */
   wl_mbo_event_type_t  type;        /* Event type */
   uint8  data[];    /* Variable length data */
};
 
/* WLC_E_MBO_CELLULAR_NW_SWITCH event structure version */
#define WL_MBO_CELLULAR_NW_SWITCH_VER 1
 
/* WLC_E_MBO_CELLULAR_NW_SWITCH event data */
struct wl_event_mbo_cell_nw_switch {
   uint16 version;        /* structure version */
   uint16 length;        /* length of the rest of the structure from reason */
   /* Reason of switch as per MBO Tech spec */
   uint8 reason;
   /* pad */
   uint8 pad;
   /* delay after which re-association can be tried to current BSS (seconds) */
   uint16 reassoc_delay;
   /* How long current association will be there (milli seconds).
   * This is zero if not known or value is overflowing.
   */
   uint32 assoc_time_remain;
};
 
/* WLC_E_MBO_BTM_RCVD event structure version */
#define WL_BTM_EVENT_DATA_VER_1       1
/* Specific btm event type data */
struct wl_btm_event_type_data {
   uint16    version;
   uint16    len;
   uint8    transition_reason;    /* transition reason code */
   uint8    pad[3];            /* pad */
};
 
/* WLC_E_PRUNE event structure version */
#define WL_BSSID_PRUNE_EVT_VER_1    1
/* MBO-OCE params */
struct wl_bssid_prune_evt_info {
   uint16 version;
   uint16 len;
   uint8    SSID[32];
   uint32    time_remaining;        /* Time remaining */
   struct ether_addr BSSID;
   uint8    SSID_len;
   uint8    reason;            /* Reason code */
   int8    rssi_threshold;        /* RSSI threshold */
   uint8    pad[3];            /* pad */
};
 
/* WLC_E_ADPS status */
enum {
   WL_E_STATUS_ADPS_DEAUTH = 0,
   WL_E_STATUS_ADPS_MAX
};
 
/* WLC_E_ADPS event data */
#define WL_EVENT_ADPS_VER_1        1
 
/* WLC_E_ADPS event type */
#define WL_E_TYPE_ADPS_BAD_AP        1
 
typedef struct wl_event_adps_bad_ap {
   uint32 status;
   uint32 reason;
   struct ether_addr ea;    /* bssid */
} wl_event_adps_bad_ap_t;
 
typedef struct wl_event_adps {
   uint16    version;    /* structure version */
   uint16    length;        /* length of structure */
   uint32    type;        /* event type */
   uint8    data[];        /* variable length data */
} wl_event_adps_v1_t;
 
typedef wl_event_adps_v1_t wl_event_adps_t;
 
#define WLC_USER_E_KEY_UPDATE    1 /* Key add/remove */
#define WLC_USER_E_FORCE_FLUSH    2 /* SDC force flush */
 
/* OBSS HW event data */
typedef struct wlc_obss_hw_event_data {
   uint16 available_chanspec;    /* Contains band, channel and BW info */
} wlc_obss_hw_event_data_t;
 
/* status when WLC_E_OBSS_DETECTION */
#define WLC_OBSS_BW_UPDATED    1 /* Sent when BW is update at SW */
#define WLC_OBSS_BW_AVAILABLE    2 /* Sent When a change in BW is detected / noticed */
 
/* WLC_E_DYNSAR event structure version */
#define WL_DYNSAR_VERSION 1
 
/* bits used in status field */
#define WL_STATUS_DYNSAR_PWR_OPT    (1 << 0)    /* power optimized */
#define WL_STATUS_DYNSAR_FAILSAFE    (1 << 1)    /* radio is using failsafe cap values */
#define WL_STATUS_DYNSAR_NOMUTE_OPT    (1 << 2)    /* ack mute */
 
/* Event structure for WLC_E_DYNSAR */
typedef struct wl_event_dynsar {
   uint16 version;         /* structure version */
   uint16 length;          /* length of this structure */
   uint32 timestamp_ms;    /* millisecond timestamp */
   uint8  opt;             /* optimization power offset */
   uint8  slice;           /* slice number */
   uint8  status;        /* WL_STATUS_DYNSAR_XXX, to indicate which optimization
               * is being applied
               */
   uint8  pad;
} wl_event_dynsar_t;
 
/* status when WLC_E_AP_BCN_MUTE event is sent */
#define BCN_MUTE_MITI_ACTIVE    1u    /* Mitigation is activated when probe response received
                    * but Beacon is not received
                    */
#define BCN_MUTE_MITI_END    2u    /* Sent when beacon is received */
#define BCN_MUTE_MITI_TIMEOUT    3u    /* Mitigation period is reached */
 
/* bcn_mute_miti event data */
#define WLC_BCN_MUTE_MITI_EVENT_DATA_VER_1    1u
typedef struct wlc_bcn_mute_miti_event_data_v1 {
   uint16    version;    /* Structure version number */
   uint16    length;        /* Length of the whole struct */
   uint16    uatbtt_count;    /* Number of UATBTT during mitigation */
   uint8    PAD[2];        /* Pad to fit to 32 bit alignment */
} wlc_bcn_mute_miti_event_data_v1_t;
 
/* bcn_drift event data */
#define WLC_BCN_DRIFT_EVENT_DATA_VER_1    (1u)
typedef struct wlc_bcn_drift_event_data_v1 {
   uint16    version;    /* Structure version number */
   uint16    length;        /* Length of the whole struct */
   int16    drift;        /* in ms */
   int16    jitter;        /* in ms */
} wlc_bcn_drift_event_data_v1_t;
 
#endif /* _BCMEVENT_H_ */