Staging: add otus Atheros wireless network driver
[safe/jmp/linux-2.6] / drivers / staging / otus / 80211core / struct.h
1 /*
2  * Copyright (c) 2007-2008 Atheros Communications Inc.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16
17 #ifndef _STRUCT_H
18 #define _STRUCT_H
19
20 #include "../oal_marc.h"
21
22 #define ZM_SW_LOOP_BACK                     0 /* 1=>enable, 0=>disable */
23 #define ZM_PCI_LOOP_BACK                    0 /* 1=>enable, 0=>disable */
24 #define ZM_PROTOCOL_RESPONSE_SIMULATION     0
25
26 #define ZM_RX_FRAME_SIZE               1600
27
28 extern const u8_t zg11bRateTbl[4];
29 extern const u8_t zg11gRateTbl[8];
30
31 #define ZM_DRIVER_CORE_MAJOR_VERSION        1
32 #define ZM_DRIVER_CORE_MINOR_VERSION        1
33 #define ZM_DRIVER_CORE_BRANCH_MAJOR_VERSION 3
34 #define ZM_DRIVER_CORE_BRANCH_MINOR_VERSION 39
35
36 #ifndef ZM_VTXQ_SIZE
37 #define ZM_VTXQ_SIZE                        1024 //2^N
38 #endif
39
40 #define ZM_VTXQ_SIZE_MASK                   (ZM_VTXQ_SIZE-1)
41 #define ZM_VMMQ_SIZE                        8 //2^N
42 #define ZM_VMMQ_SIZE_MASK                   (ZM_VMMQ_SIZE-1)
43
44 #include "cagg.h"
45
46 #define ZM_AGG_POOL_SIZE                    20
47 #define ZM_RATE_TABLE_SIZE                  32
48
49 #define ZM_MAX_BUF_DISCRETE_NUMBER          5
50
51
52
53
54
55
56
57
58
59 /**********************************************************************************/
60 /* IBSS macros                                                     */
61 /**********************************************************************************/
62 #define ZM_IBSS_PEER_ALIVE_COUNTER     4
63
64 /**********************************************************************************/
65 /* BIT mapping related macros                                                     */
66 /**********************************************************************************/
67
68 #define ZM_BIT_0       0x1
69 #define ZM_BIT_1       0x2
70 #define ZM_BIT_2       0x4
71 #define ZM_BIT_3       0x8
72 #define ZM_BIT_4       0x10
73 #define ZM_BIT_5       0x20
74 #define ZM_BIT_6       0x40
75 #define ZM_BIT_7       0x80
76 #define ZM_BIT_8       0x100
77 #define ZM_BIT_9       0x200
78 #define ZM_BIT_10      0x400
79 #define ZM_BIT_11      0x800
80 #define ZM_BIT_12      0x1000
81 #define ZM_BIT_13      0x2000
82 #define ZM_BIT_14      0x4000
83 #define ZM_BIT_15      0x8000
84 #define ZM_BIT_16      0x10000
85 #define ZM_BIT_17      0x20000
86 #define ZM_BIT_18      0x40000
87 #define ZM_BIT_19      0x80000
88 #define ZM_BIT_20      0x100000
89 #define ZM_BIT_21      0x200000
90 #define ZM_BIT_22      0x400000
91 #define ZM_BIT_23      0x800000
92 #define ZM_BIT_24      0x1000000
93 #define ZM_BIT_25      0x2000000
94 #define ZM_BIT_26      0x4000000
95 #define ZM_BIT_27      0x8000000
96 #define ZM_BIT_28      0x10000000
97 #define ZM_BIT_29      0x20000000   //WPA support
98 #define ZM_BIT_30      0x40000000
99 #define ZM_BIT_31      0x80000000
100
101
102 /**********************************************************************************/
103 /* MAC address related macros                                                     */
104 /**********************************************************************************/
105 #define ZM_MAC_BYTE_TO_WORD(macb, macw)   macw[0] = macb[0] + (macb[1] << 8); \
106                                           macw[1] = macb[2] + (macb[3] << 8); \
107                                           macw[2] = macb[4] + (macb[5] << 8);
108
109 #define ZM_MAC_WORD_TO_BYTE(macw, macb)   macb[0] = (u8_t) (macw[0] & 0xff); \
110                                           macb[1] = (u8_t) (macw[0] >> 8);   \
111                                           macb[2] = (u8_t) (macw[1] & 0xff); \
112                                           macb[3] = (u8_t) (macw[1] >> 8);   \
113                                           macb[4] = (u8_t) (macw[2] & 0xff); \
114                                           macb[5] = (u8_t) (macw[2] >> 8);
115
116 #define ZM_MAC_0(macw)   ((u8_t)(macw[0] & 0xff))
117 #define ZM_MAC_1(macw)   ((u8_t)(macw[0] >> 8))
118 #define ZM_MAC_2(macw)   ((u8_t)(macw[1] & 0xff))
119 #define ZM_MAC_3(macw)   ((u8_t)(macw[1] >> 8))
120 #define ZM_MAC_4(macw)   ((u8_t)(macw[2] & 0xff))
121 #define ZM_MAC_5(macw)   ((u8_t)(macw[2] >> 8))
122
123 #define ZM_IS_MULTICAST_OR_BROADCAST(mac) (mac[0] & 0x01)
124 #define ZM_IS_MULTICAST(mac) ((mac[0] & 0x01) && (((u8_t)mac[0]) != 0xFF))
125
126 #define ZM_MAC_EQUAL(mac1, mac2)   ((mac1[0]==mac2[0])&&(mac1[1]==mac2[1])&&(mac1[2]==mac2[2]))
127 #define ZM_MAC_NOT_EQUAL(mac1, mac2)   ((mac1[0]!=mac2[0])||(mac1[1]!=mac2[1])||(mac1[2]!=mac2[2]))
128 /**********************************************************************************/
129 /* MAC address related mac'ros (end)                                               */
130 /**********************************************************************************/
131 #define ZM_BYTE_TO_WORD(A, B)   ((A<<8)+B)
132 #define ZM_ROL32( A, n ) \
133         ( ((A) << (n)) | ( ((A)>>(32-(n)))  & ( (1UL << (n)) - 1 ) ) )
134 #define ZM_ROR32( A, n ) ZM_ROL32( (A), 32-(n) )
135 #define ZM_LO8(v16)  ((u8_t)((v16) & 0xFF))
136 #define ZM_HI8(v16)  ((u8_t)(((v16)>>8)&0xFF))
137
138 #ifdef ZM_ENABLE_BUFFER_TRACE
139 extern void zfwBufTrace(zdev_t* dev, zbuf_t *buf, u8_t *functionName);
140 #define ZM_BUFFER_TRACE(dev, buf)       zfwBufTrace(dev, buf, __FUNCTION__);
141 #else
142 #define ZM_BUFFER_TRACE(dev, buf)
143 #endif
144
145 /* notification events to heart beat function */
146 #define ZM_BSSID_LIST_SCAN         0x01
147
148 /* CAM mode */
149 #define ZM_CAM_AP                       0x1
150 #define ZM_CAM_STA                      0x2
151 #define ZM_CAM_HOST                     0x4
152
153 /* finite state machine for adapter */
154 #define ZM_STA_STATE_DISCONNECT           1
155 #define ZM_STA_STATE_CONNECTING           2
156 #define ZM_STA_STATE_CONNECTED            3
157
158 /* Event definitions for  finite state machine */
159 #define ZM_EVENT_TIMEOUT_SCAN             0x0000
160 #define ZM_EVENT_TIMEOUT_BG_SCAN          0x0001
161 #define ZN_EVENT_TIMEOUT_RECONNECT        0x0002
162 #define ZM_EVENT_TIMEOUT_INIT_SCAN        0x0003
163 #define ZM_EVENT_TIMEOUT_AUTH             0x0004
164 #define ZM_EVENT_TIMEOUT_ASSO             0x0005
165 #define ZM_EVENT_TIMEOUT_AUTO_SCAN        0x0006
166 #define ZM_EVENT_TIMEOUT_MIC_FAIL         0x0007
167 #define ZM_EVENT_TIMEOUT_CHECK_AP         0x0008
168 #define ZM_EVENT_CONNECT                  0x0009
169 #define ZM_EVENT_INIT_SCAN                0x000a
170 #define ZM_EVENT_SCAN                     0x000b
171 #define ZM_EVENT_BG_SCAN                  0x000c
172 #define ZM_EVENT_DISCONNECT               0x000d
173 #define ZM_EVENT_WPA_MIC_FAIL             0x000e
174 #define ZM_EVENT_AP_ALIVE                 0x000f
175 #define ZM_EVENT_CHANGE_TO_AP             0x0010
176 #define ZM_EVENT_CHANGE_TO_STA            0x0011
177 #define ZM_EVENT_IDLE                     0x0012
178 #define ZM_EVENT_AUTH                     0x0013
179 #define ZM_EVENT_ASSO_RSP                 0x0014
180 #define ZM_EVENT_WPA_PK_OK                0x0015
181 #define ZM_EVENT_WPA_GK_OK                0x0016
182 #define ZM_EVENT_RCV_BEACON               0x0017
183 #define ZM_EVENT_RCV_PROBE_RSP            0x0018
184 #define ZM_EVENT_SEND_DATA                0x0019
185 #define ZM_EVENT_AUTO_SCAN                0x001a
186 #define ZM_EVENT_MIC_FAIL1                0x001d
187 #define ZM_EVENT_MIC_FAIL2                0x001e
188 #define ZM_EVENT_IBSS_MONITOR             0x001f
189 #define ZM_EVENT_IN_SCAN                  0x0020
190 #define ZM_EVENT_CM_TIMER                 0x0021
191 #define ZM_EVENT_CM_DISCONNECT            0x0022
192 #define ZM_EVENT_CM_BLOCK_TIMER           0x0023
193 #define ZM_EVENT_TIMEOUT_ADDBA            0x0024
194 #define ZM_EVENT_TIMEOUT_PERFORMANCE      0x0025
195 #define ZM_EVENT_SKIP_COUNTERMEASURE      0x0026
196 #define ZM_EVENT_NONE                     0xffff
197
198 /* Actions after call finite state machine */
199 #define ZM_ACTION_NONE                    0x0000
200 #define ZM_ACTION_QUEUE_DATA              0x0001
201 #define ZM_ACTION_DROP_DATA               0x0002
202
203 /* Timers for finite state machine */
204 #define ZM_TICK_ZERO                      0
205 #define ZM_TICK_INIT_SCAN_END             8
206 #define ZM_TICK_NEXT_BG_SCAN              50
207 #define ZM_TICK_BG_SCAN_END               8
208 #define ZM_TICK_AUTH_TIMEOUT              4
209 #define ZM_TICK_ASSO_TIMEOUT              4
210 #define ZM_TICK_AUTO_SCAN                 300
211 #define ZM_TICK_MIC_FAIL_TIMEOUT          6000
212 #define ZM_TICK_CHECK_AP1                 150
213 #define ZM_TICK_CHECK_AP2                 350
214 #define ZM_TICK_CHECK_AP3                 250
215 #define ZM_TICK_IBSS_MONITOR              160
216 #define ZM_TICK_IN_SCAN                   4
217 #define ZM_TICK_CM_TIMEOUT                6000
218 #define ZM_TICK_CM_DISCONNECT             200
219 #define ZM_TICK_CM_BLOCK_TIMEOUT          6000
220
221 /* Fix bug#33338 Counter Measure Issur */
222 #ifdef NDIS_CM_FOR_XP
223 #define ZM_TICK_CM_TIMEOUT_OFFSET        2160
224 #define ZM_TICK_CM_DISCONNECT_OFFSET     72
225 #define ZM_TICK_CM_BLOCK_TIMEOUT_OFFSET  2160
226 #else
227 #define ZM_TICK_CM_TIMEOUT_OFFSET        0
228 #define ZM_TICK_CM_DISCONNECT_OFFSET     0
229 #define ZM_TICK_CM_BLOCK_TIMEOUT_OFFSET  0
230 #endif
231
232 #define ZM_TIME_ACTIVE_SCAN               30 //ms
233 #define ZM_TIME_PASSIVE_SCAN              110 //ms
234
235 /* finite state machine for BSS connect */
236 #define ZM_STA_CONN_STATE_NONE            0
237 #define ZM_STA_CONN_STATE_AUTH_OPEN       1
238 #define ZM_STA_CONN_STATE_AUTH_SHARE_1    2
239 #define ZM_STA_CONN_STATE_AUTH_SHARE_2    3
240 #define ZM_STA_CONN_STATE_ASSOCIATE       4
241 #define ZM_STA_CONN_STATE_SSID_NOT_FOUND  5
242 #define ZM_STA_CONN_STATE_AUTH_COMPLETED  6
243
244 /* finite state machine for WPA handshaking */
245 #define ZM_STA_WPA_STATE_INIT             0
246 #define ZM_STA_WPA_STATE_PK_OK            1
247 #define ZM_STA_WPA_STATE_GK_OK            2
248
249 /* various timers */
250 #define ZM_INTERVAL_CONNECT_TIMEOUT          20   /* 200 milisecond */
251
252 /* IBSS definitions */
253 #define ZM_IBSS_PARTNER_LOST                 0
254 #define ZM_IBSS_PARTNER_ALIVE                1
255 #define ZM_IBSS_PARTNER_CHECK                2
256
257 #define ZM_BCMC_ARRAY_SIZE                  16 /* Must be 2^N */
258 #define ZM_UNI_ARRAY_SIZE                   16 /* Must be 2^N */
259
260 #define ZM_MAX_DEFRAG_ENTRIES               4  /* 2^N */
261 #define ZM_DEFRAG_AGING_TIME_SEC            5  /* 5 seconds */
262
263 #define ZM_MAX_WPAIE_SIZE                   128
264 /* WEP related definitions */
265 #define ZM_USER_KEY_DEFAULT                 64
266 #define ZM_USER_KEY_PK                      0                /* Pairwise Key */
267 #define ZM_USER_KEY_GK                      1                /* Group Key */
268 /* AP WLAN Type */
269 #define ZM_WLAN_TYPE_PURE_B                 2
270 #define ZM_WLAN_TYPE_PURE_G                 1
271 #define ZM_WLAN_TYPE_MIXED                  0
272
273 /* HAL State */
274 #define ZM_HAL_STATE_INIT                   0
275 #define ZM_HAL_STATE_RUNNING                1
276
277 /* AP Capability */
278 #define ZM_All11N_AP                        0x01
279 #define ZM_XR_AP                            0x02
280 #define ZM_SuperG_AP                        0x04
281
282 /* MPDU Density */
283 #define ZM_MPDU_DENSITY_NONE                0
284 #define ZM_MPDU_DENSITY_1_8US               1
285 #define ZM_MPDU_DENSITY_1_4US               2
286 #define ZM_MPDU_DENSITY_1_2US               3
287 #define ZM_MPDU_DENSITY_1US                 4
288 #define ZM_MPDU_DENSITY_2US                 5
289 #define ZM_MPDU_DENSITY_4US                 6
290 #define ZM_MPDU_DENSITY_8US                 7
291
292 /* Software Encryption */
293 #define ZM_SW_TKIP_ENCRY_EN                0x01
294 #define ZM_SW_TKIP_DECRY_EN                0x02
295 #define ZM_SW_WEP_ENCRY_EN                 0x04
296 #define ZM_SW_WEP_DECRY_EN                 0x08
297
298 /* Default Support Rate */
299 #define ZM_DEFAULT_SUPPORT_RATE_ZERO       0x0
300 #define ZM_DEFAULT_SUPPORT_RATE_DISCONNECT 0x1
301 #define ZM_DEFAULT_SUPPORT_RATE_IBSS_B     0x2
302 #define ZM_DEFAULT_SUPPORT_RATE_IBSS_AG    0x3
303
304 /* security related definitions */
305 struct zsTkipSeed
306 {
307     u8_t   tk[32];     /* key */
308     u8_t   ta[6];
309     u16_t  ttak[5];
310     u16_t  ppk[6];
311     u16_t  iv16,iv16tmp;
312     u32_t  iv32,iv32tmp;
313 };
314
315 struct zsMicVar
316 {
317     u32_t  k0, k1;        // Key
318     u32_t  left, right;   // Current state
319     u32_t  m;             // Message accumulator (single word)
320     u16_t  nBytes;        // # bytes in M
321 };
322
323 struct zsDefragEntry
324 {
325     u8_t    fragCount;
326     u8_t    addr[6];
327     u16_t   seqNum;
328     zbuf_t* fragment[8];
329     u32_t   tick;
330 };
331
332 struct zsDefragList
333 {
334     struct zsDefragEntry   defragEntry[ZM_MAX_DEFRAG_ENTRIES];
335     u8_t                   replaceNum;
336 };
337
338 #define ZM_MAX_OPPOSITE_COUNT      16
339 #define ZM_MAX_TX_SAMPLES          15
340 #define ZM_TX_RATE_DOWN_CRITERIA   80
341 #define ZM_TX_RATE_UP_CRITERIA    200
342
343
344 #define ZM_MAX_PROBE_HIDDEN_SSID_SIZE 2
345 struct zsSsidList
346 {
347     u8_t            ssid[32];
348     u8_t            ssidLen;
349 };
350
351 struct zsWrapperSetting
352 {
353     u8_t            bDesiredBssid;
354     u8_t            desiredBssid[6];
355     u16_t           bssid[3];
356     u8_t            ssid[32];
357     u8_t            ssidLen;
358     u8_t            authMode;
359     u8_t            wepStatus;
360     u8_t            encryMode;
361     u8_t            wlanMode;
362     u16_t           frequency;
363     u16_t           beaconInterval;
364     u8_t            dtim;
365     u8_t            preambleType;
366     u16_t           atimWindow;
367
368     struct zsSsidList probingSsidList[ZM_MAX_PROBE_HIDDEN_SSID_SIZE];
369
370     u8_t            dropUnencryptedPkts;
371     u8_t            ibssJoinOnly;
372     u32_t           adhocMode;
373     u8_t            countryIsoName[4];
374     u16_t           autoSetFrequency;
375
376     /* AP */
377     u8_t            bRateBasic;
378     u8_t            gRateBasic;
379     u32_t           nRateBasic;
380     u8_t            bgMode;
381
382     /* Common */
383     u8_t            staWmeEnabled;
384     u8_t            staWmeQosInfo;
385     u8_t            apWmeEnabled;
386
387
388     /* rate information: added in the future */
389 };
390
391 struct zsWrapperFeatureCtrl
392 {
393     u8_t           bIbssGMode;
394 };
395
396 #define  ZM_MAX_PS_STA            16
397 #define  ZM_PS_QUEUE_SIZE         32
398
399 struct zsStaPSEntity
400 {
401     u8_t           bUsed;
402     u8_t           macAddr[6];
403     u8_t           bDataQueued;
404 };
405
406 struct zsStaPSList
407 {
408     u8_t           count;
409     struct zsStaPSEntity    entity[ZM_MAX_PS_STA];
410 };
411
412 #define ZM_MAX_TIMER_COUNT   32
413
414 /* double linked list */
415 struct zsTimerEntry
416 {
417     u16_t   event;
418     u32_t   timer;
419     struct zsTimerEntry *pre;
420     struct zsTimerEntry *next;
421 };
422
423 struct zsTimerList
424 {
425     u8_t   freeCount;
426     struct zsTimerEntry list[ZM_MAX_TIMER_COUNT];
427     struct zsTimerEntry *head;
428     struct zsTimerEntry *tail;
429 };
430
431 /* Multicast list */
432 #define ZM_MAX_MULTICAST_LIST_SIZE     64
433
434 struct zsMulticastAddr
435 {
436     u8_t addr[6];
437 };
438
439 struct zsMulticastList
440 {
441     u8_t   size;
442     struct zsMulticastAddr macAddr[ZM_MAX_MULTICAST_LIST_SIZE];
443 };
444
445 enum ieee80211_cwm_mode {
446     CWM_MODE20,
447     CWM_MODE2040,
448     CWM_MODE40,
449     CWM_MODEMAX
450
451 };
452
453 enum ieee80211_cwm_extprotspacing {
454     CWM_EXTPROTSPACING20,
455     CWM_EXTPROTSPACING25,
456     CWM_EXTPROTSPACINGMAX
457 };
458
459 enum ieee80211_cwm_width {
460     CWM_WIDTH20,
461     CWM_WIDTH40
462 };
463
464 enum ieee80211_cwm_extprotmode {
465     CWM_EXTPROTNONE,  /* no protection */
466     CWM_EXTPROTCTSONLY,   /* CTS to self */
467     CWM_EXTPROTRTSCTS,    /* RTS-CTS */
468     CWM_EXTPROTMAX
469 };
470
471 struct ieee80211_cwm {
472
473     /* Configuration */
474     enum ieee80211_cwm_mode         cw_mode;            /* CWM mode */
475     u8_t                            cw_extoffset;       /* CWM Extension Channel Offset */
476     enum ieee80211_cwm_extprotmode  cw_extprotmode;     /* CWM Extension Channel Protection Mode */
477     enum ieee80211_cwm_extprotspacing cw_extprotspacing;/* CWM Extension Channel Protection Spacing */
478     u32_t                           cw_enable;          /* CWM State Machine Enabled */
479     u32_t                           cw_extbusythreshold;/* CWM Extension Channel Busy Threshold */
480
481     /* State */
482     enum ieee80211_cwm_width        cw_width;           /* CWM channel width */
483 };
484
485
486 /* AP : STA database structure */
487 struct zsStaTable
488 {
489     u32_t time;     /* tick time */
490     //u32_t phyCtrl;   /* Tx PHY CTRL */
491     u16_t addr[3];  /* STA MAC address */
492     u16_t state;    /* aut/asoc */
493     //u16_t retry;    /* Retry count */
494     struct zsRcCell rcCell;
495
496     u8_t valid;     /* Valid flag : 1=>valid */
497     u8_t psMode;    /* STA power saving mode */
498     u8_t staType;   /* 0=>11b, 1=>11g, 2=>11n */
499     u8_t qosType;   /* 0=>Legacy, 1=>WME */
500     u8_t qosInfo;   /* WME QoS info */
501     u8_t vap;       /* Virtual AP ID */
502     u8_t encryMode; /* Encryption type for this STA */
503     u8_t keyIdx;
504     struct zsMicVar     txMicKey;
505     struct zsMicVar     rxMicKey;
506     u16_t iv16;
507     u32_t iv32;
508 #ifdef ZM_ENABLE_CENC
509     /* CENC */
510     u8_t cencKeyIdx;
511     u32_t txiv[4];
512     u32_t rxiv[4];
513 #endif //ZM_ENABLE_CENC
514 };
515
516 struct zdStructWds
517 {
518     u8_t    wdsBitmap;                      /* Set bit-N to 1 to enable WDS */
519     u8_t    encryMode[ZM_MAX_WDS_SUPPORT];  /* WDS encryption mode */
520     u16_t   macAddr[ZM_MAX_WDS_SUPPORT][3]; /* WDS neighbor MAC address */
521 };
522
523     // htcapinfo 16bits
524 #define HTCAP_AdvCodingCap          0x0001
525 #define HTCAP_SupChannelWidthSet    0x0002
526 #define HTCAP_DynamicSMPS           0x0004
527 #define HTCAP_SMEnabled             0x000C
528 #define HTCAP_GreenField            0x0010
529 #define HTCAP_ShortGIfor20MHz       0x0020
530 #define HTCAP_ShortGIfor40MHz       0x0040
531 #define HTCAP_TxSTBC                0x0080
532 #define HTCAP_RxOneStream           0x0100
533 #define HTCAP_RxTwoStream           0x0200
534 #define HTCAP_RxThreeStream         0x0300
535 #define HTCAP_DelayedBlockACK       0x0400
536 #define HTCAP_MaxAMSDULength        0x0800
537 #define HTCAP_DSSSandCCKin40MHz     0x1000
538 #define HTCAP_PSMPSup               0x2000
539 #define HTCAP_STBCControlFrameSup   0x4000
540 #define HTCAP_LSIGTXOPProtectionSUP 0x8000
541     // Ampdu HT Parameter Info 8bits
542 #define HTCAP_MaxRxAMPDU0           0x00
543 #define HTCAP_MaxRxAMPDU1           0x01
544 #define HTCAP_MaxRxAMPDU2           0x02
545 #define HTCAP_MaxRxAMPDU3           0x03
546     // PCO 8bits
547 #define HTCAP_PCO                   0x01
548 #define HTCAP_TransmissionTime1     0x02
549 #define HTCAP_TransmissionTime2     0x04
550 #define HTCAP_TransmissionTime3     0x06
551     // MCS FeedBack 8bits
552 #define HTCAP_PlusHTCSupport        0x04
553 #define HTCAP_RDResponder           0x08
554     // TX Beamforming 0 8bits
555 #define HTCAP_TxBFCapable           0x01
556 #define HTCAP_RxStaggeredSoundCap   0x02
557 #define HTCAP_TxStaggeredSoundCap   0x04
558 #define HTCAP_RxZLFCapable          0x08
559 #define HTCAP_TxZLFCapable          0x10
560 #define HTCAP_ImplicitTxBFCapable   0x20
561     // Tx Beamforming 1 8bits
562 #define HTCAP_ExplicitCSITxBFCap    0x01
563 #define HTCAP_ExpUncompSteerMatrCap 0x02
564     // Antenna Selection Capabilities 8bits
565 #define HTCAP_AntennaSelectionCap       0x01
566 #define HTCAP_ExplicitCSITxASCap        0x02
567 #define HTCAP_AntennaIndFeeTxASCap      0x04
568 #define HTCAP_ExplicitCSIFeedbackCap    0x08
569 #define HTCAP_AntennaIndFeedbackCap     0x10
570 #define HTCAP_RxASCap                   0x20
571 #define HTCAP_TxSoundPPDUsCap           0x40
572
573
574
575 struct zsHTCapability
576 {
577     u8_t ElementID;
578     u8_t Length;
579     // HT Capability Info
580     u16_t HtCapInfo;
581     u8_t AMPDUParam;
582     u8_t MCSSet[16];    //16 bytes
583     // Extended HT Capability Info
584     u8_t PCO;
585     u8_t MCSFeedBack;
586
587     u8_t TxBFCap[4];
588     u8_t AselCap;
589 };
590
591 union zuHTCapability
592 {
593     struct zsHTCapability Data;
594     u8_t Byte[28];
595 };
596
597     //channelinfo 8bits
598 #define ExtHtCap_ExtChannelOffsetAbove  0x01
599 #define ExtHtCap_ExtChannelOffsetBelow  0x03
600 #define ExtHtCap_RecomTxWidthSet        0x04
601 #define ExtHtCap_RIFSMode               0x08
602 #define ExtHtCap_ControlAccessOnly      0x10
603     //operatinginfo 16bits
604 #define ExtHtCap_NonGFDevicePresent     0x0004
605     //beaconinfo 16bits
606 #define ExtHtCap_DualBeacon             0x0040
607 #define ExtHtCap_DualSTBCProtection     0x0080
608 #define ExtHtCap_SecondaryBeacon        0x0100
609 #define ExtHtCap_LSIGTXOPProtectFullSup 0x0200
610 #define ExtHtCap_PCOActive              0x0400
611 #define ExtHtCap_PCOPhase               0x0800
612
613
614 struct zsExtHTCapability
615 {
616     u8_t    ElementID;
617     u8_t    Length;
618     u8_t    ControlChannel;
619     u8_t    ChannelInfo;
620     u16_t   OperatingInfo;
621     u16_t   BeaconInfo;
622     // Supported MCS Set
623     u8_t    MCSSet[16];
624 };
625
626 union zuExtHTCapability
627 {
628     struct zsExtHTCapability Data;
629     u8_t Byte[24];
630 };
631
632 struct InformationElementSta {
633     struct zsHTCapability       HtCap;
634     struct zsExtHTCapability    HtInfo;
635 };
636
637 struct InformationElementAp {
638     struct zsHTCapability       HtCap;
639 };
640
641 #define ZM_MAX_FREQ_REQ_QUEUE  32
642 typedef void (*zfpFreqChangeCompleteCb)(zdev_t* dev);
643
644 struct zsWlanDevFreqControl
645 {
646     u16_t                     freqReqQueue[ZM_MAX_FREQ_REQ_QUEUE];
647     u8_t                     freqReqBw40[ZM_MAX_FREQ_REQ_QUEUE];
648     u8_t                     freqReqExtOffset[ZM_MAX_FREQ_REQ_QUEUE];
649     zfpFreqChangeCompleteCb   freqChangeCompCb[ZM_MAX_FREQ_REQ_QUEUE];
650     u8_t                      freqReqQueueHead;
651     u8_t                      freqReqQueueTail;
652 };
653
654 struct zsWlanDevAp
655 {
656     u16_t   protectedObss;    /* protected overlap BSS */
657     u16_t   staAgingTimeSec;  /* in second, STA will be deathed if it does not */
658                               /* active for this long time                     */
659     u16_t   staProbingTimeSec;/* in second, STA will be probed if it does not  */
660                               /* active for this long time                     */
661     u8_t    authSharing;      /* authentication on going*/
662     u8_t    bStaAssociated;   /* 11b STA associated */
663     u8_t    gStaAssociated;   /* 11g STA associated */
664     u8_t    nStaAssociated;   /* 11n STA associated */
665     u16_t   protectionMode;   /* AP protection mode flag */
666     u16_t   staPowerSaving;   /* Set associated power saving STA count */
667
668
669
670     zbuf_t*  uniArray[ZM_UNI_ARRAY_SIZE]; /* array to store unicast frames */
671     u16_t   uniHead;
672     u16_t   uniTail;
673
674     /* HT Capability Info */
675     union zuHTCapability HTCap; //CWYang(+)
676
677     /* Extended HT Capability Info */
678     union zuExtHTCapability ExtHTCap; //CWYang(+)
679
680     /* STA table */
681     struct zsStaTable staTable[ZM_MAX_STA_SUPPORT];
682
683     /* WDS */
684     struct zdStructWds wds;
685     /* WPA */
686     u8_t wpaIe[ZM_MAX_AP_SUPPORT][ZM_MAX_WPAIE_SIZE];
687     u8_t wpaLen[ZM_MAX_AP_SUPPORT];
688     u8_t stawpaIe[ZM_MAX_AP_SUPPORT][ZM_MAX_WPAIE_SIZE];
689     u8_t stawpaLen[ZM_MAX_AP_SUPPORT];
690     u8_t wpaSupport[ZM_MAX_AP_SUPPORT];
691
692     //struct zsTkipSeed   bcSeed;
693     u8_t bcKeyIndex[ZM_MAX_AP_SUPPORT];
694     u8_t bcHalKeyIdx[ZM_MAX_AP_SUPPORT];
695     struct zsMicVar     bcMicKey[ZM_MAX_AP_SUPPORT];
696     u16_t iv16[ZM_MAX_AP_SUPPORT];
697     u32_t iv32[ZM_MAX_AP_SUPPORT];
698
699 #ifdef ZM_ENABLE_CENC
700     /* CENC */
701     u32_t txiv[ZM_MAX_AP_SUPPORT][4];
702 #endif //ZM_ENABLE_CENC
703
704     /* Virtual AP */
705     u8_t    beaconCounter;
706     u8_t    vapNumber;
707     u8_t    apBitmap;                         /* Set bit-N to 1 to enable VAP */
708     u8_t    hideSsid[ZM_MAX_AP_SUPPORT];
709     u8_t    authAlgo[ZM_MAX_AP_SUPPORT];
710     u8_t    ssid[ZM_MAX_AP_SUPPORT][32];      /* SSID */
711     u8_t    ssidLen[ZM_MAX_AP_SUPPORT];       /* SSID length */
712     u8_t    encryMode[ZM_MAX_AP_SUPPORT];
713     u8_t    wepStatus[ZM_MAX_AP_SUPPORT];
714     u16_t   capab[ZM_MAX_AP_SUPPORT];         /* Capability */
715     u8_t    timBcmcBit[ZM_MAX_AP_SUPPORT];    /* BMCM bit of TIM */
716     u8_t    wlanType[ZM_MAX_AP_SUPPORT];
717
718     /* Array to store BC or MC frames */
719     zbuf_t*  bcmcArray[ZM_MAX_AP_SUPPORT][ZM_BCMC_ARRAY_SIZE];
720     u16_t   bcmcHead[ZM_MAX_AP_SUPPORT];
721     u16_t   bcmcTail[ZM_MAX_AP_SUPPORT];
722
723     u8_t                    qosMode;                          /* 1=>WME */
724     u8_t                    uapsdEnabled;
725     struct zsQueue*         uapsdQ;
726
727     u8_t                    challengeText[128];
728
729     struct InformationElementAp ie[ZM_MAX_STA_SUPPORT];
730
731
732 };
733
734 #define ZM_MAX_BLOCKING_AP_LIST_SIZE    4 /* 2^N */
735 struct zsBlockingAp
736 {
737     u8_t addr[6];
738     u8_t weight;
739 };
740
741 #define ZM_SCAN_MGR_SCAN_NONE           0
742 #define ZM_SCAN_MGR_SCAN_INTERNAL       1
743 #define ZM_SCAN_MGR_SCAN_EXTERNAL       2
744
745 struct zsWlanDevStaScanMgr
746 {
747     u8_t                    scanReqs[2];
748     u8_t                    currScanType;
749     u8_t                    scanStartDelay;
750 };
751
752 #define ZM_PS_MSG_STATE_ACTIVE          0
753 #define ZM_PS_MSG_STATE_SLEEP           1
754 #define ZM_PS_MSG_STATE_T1              2
755 #define ZM_PS_MSG_STATE_T2              3
756 #define ZM_PS_MSG_STATE_S1              4
757
758 #define ZM_PS_MAX_SLEEP_PERIODS         3       // The number of beacon periods
759
760 struct zsWlanDevStaPSMgr
761 {
762     u8_t                    state;
763     u8_t                    isSleepAllowed;
764     u8_t                    maxSleepPeriods;
765     u8_t                    ticks;
766     u32_t                   lastTxUnicastFrm;
767     u32_t                   lastTxMulticastFrm;
768     u32_t                   lastTxBroadcastFrm;
769     u8_t                    tempWakeUp; /*enable when wake up but still in ps mode */
770     u16_t                   sleepAllowedtick;
771 };
772
773 struct zsWlanDevSta
774 {
775     u32_t                   beaconTxCnt;  /* Transmitted beacon counter (in IBSS) */
776     u8_t                    txBeaconInd;  /* In IBSS mode, true means that we just transmit a beacon during
777                                              last beacon period.
778                                            */
779     u16_t                   beaconCnt;    /* receive beacon count, will be perodically reset */
780     u16_t                   bssid[3];     /* BSSID of connected AP */
781     u8_t                    ssid[32];     /* SSID */
782     u8_t                    ssidLen;      /* SSID length */
783     u8_t                    mTxRate;      /* Tx rate for multicast */
784     u8_t                    uTxRate;      /* Tx rate for unicast */
785     u8_t                    mmTxRate;     /* Tx rate for management frame */
786     u8_t                    bChannelScan;
787     u8_t                    bScheduleScan;
788
789     u8_t                    InternalScanReq;
790     u16_t                   activescanTickPerChannel;
791     u16_t                   passiveScanTickPerChannel;
792     u16_t                   scanFrequency;
793     u32_t                   connPowerInHalfDbm;
794
795     u16_t                   currentFrequency;
796     u16_t                   currentBw40;
797     u16_t                   currentExtOffset;
798
799     u8_t                    bPassiveScan;
800
801     struct zsBlockingAp     blockingApList[ZM_MAX_BLOCKING_AP_LIST_SIZE];
802
803     //struct zsBssInfo        bssInfoPool[ZM_MAX_BSS];
804     struct zsBssInfo*       bssInfoArray[ZM_MAX_BSS];
805     struct zsBssList        bssList;
806     u8_t                    bssInfoArrayHead;
807     u8_t                    bssInfoArrayTail;
808     u8_t                    bssInfoFreeCount;
809
810     u8_t                    authMode;
811     u8_t                    currentAuthMode;
812     u8_t                    wepStatus;
813     u8_t                    encryMode;
814     u8_t                    keyId;
815 #ifdef ZM_ENABLE_IBSS_WPA2PSK
816     u8_t                    ibssWpa2Psk;
817 #endif
818 #ifdef ZM_ENABLE_CENC
819     u8_t                    cencKeyId; //CENC
820 #endif //ZM_ENABLE_CENC
821     u8_t                    dropUnencryptedPkts;
822     u8_t                    ibssJoinOnly;
823     u8_t                    adapterState;
824     u8_t                    oldAdapterState;
825     u8_t                    connectState;
826     u8_t                    connectRetry;
827     u8_t                    wpaState;
828     u8_t                    wpaIe[ZM_MAX_IE_SIZE + 2];
829     u8_t                    rsnIe[ZM_MAX_IE_SIZE + 2];
830     u8_t                    challengeText[255+2];
831     u8_t                    capability[2];
832     //u8_t                    connectingHiddenAP;
833     //u8_t                    scanWithSSID;
834     u16_t                   aid;
835     u32_t                   mgtFrameCount;
836     u8_t                    bProtectionMode;
837         u32_t                                   NonNAPcount;
838         u8_t                                    RTSInAGGMode;
839     u32_t                   connectTimer;
840     u16_t                   atimWindow;
841     u8_t                    desiredBssid[6];
842     u8_t                    bDesiredBssid;
843     struct zsTkipSeed       txSeed;
844     struct zsTkipSeed       rxSeed[4];
845     struct zsMicVar         txMicKey;
846     struct zsMicVar         rxMicKey[4];
847     u16_t                   iv16;
848     u32_t                   iv32;
849     struct zsOppositeInfo   oppositeInfo[ZM_MAX_OPPOSITE_COUNT];
850     u8_t                    oppositeCount;
851     u8_t                    bssNotFoundCount;     /* sitesurvey for search desired ISBB threshold */
852     u16_t                   rxBeaconCount;
853     u8_t                    beaconMissState;
854     u32_t                   rxBeaconTotal;
855     u8_t                    bIsSharedKey;
856     u8_t                    connectTimeoutCount;
857
858     u8_t                    recvAtim;
859
860     /* ScanMgr Control block */
861     struct zsWlanDevStaScanMgr scanMgr;
862     struct zsWlanDevStaPSMgr   psMgr;
863
864     // The callback would be called if receiving an unencrypted packets but
865     // the station is in encrypted mode. The wrapper could decide whether
866     // to drop the packet by its OS setting.
867     zfpStaRxSecurityCheckCb pStaRxSecurityCheckCb;
868
869     /* WME */
870     u8_t                    apWmeCapability; //bit-0 => a WME AP
871                                              //bit-7 => a UAPSD AP
872     u8_t                    wmeParameterSetCount;
873
874     u8_t                    wmeEnabled;
875     #define ZM_STA_WME_ENABLE_BIT       0x1
876     #define ZM_STA_UAPSD_ENABLE_BIT     0x2
877     u8_t                    wmeQosInfo;
878
879     u8_t                    wmeConnected;
880     u8_t                    qosInfo;
881     struct zsQueue*         uapsdQ;
882
883     /* countermeasures */
884     u8_t                    cmMicFailureCount;
885     u8_t                    cmDisallowSsidLength;
886     u8_t                    cmDisallowSsid[32];
887
888     /* power-saving mode */
889     u8_t                    powerSaveMode;
890     zbuf_t*                 staPSDataQueue[ZM_PS_QUEUE_SIZE];
891     u8_t                    staPSDataCount;
892
893     /* IBSS power-saving mode */
894     /* record the STA which has entered the PS mode */
895     struct zsStaPSList      staPSList;
896     /* queue the data of the PS STAs */
897     zbuf_t*                  ibssPSDataQueue[ZM_PS_QUEUE_SIZE];
898     u8_t                    ibssPSDataCount;
899     u8_t                    ibssPrevPSDataCount;
900     u8_t                    bIbssPSEnable;
901     /* BIT_15: ON/OFF, BIT_0~14: Atim Timer */
902     u16_t                   ibssAtimTimer;
903
904     /* WPA2 */
905     struct zsPmkidInfo      pmkidInfo;
906
907     /* Multicast list related objects */
908     struct zsMulticastList  multicastList;
909
910     /* XP packet filter feature : */
911     /* 1=>enable: All multicast address packets, not just the ones enumerated in the multicast address list. */
912     /* 0=>disable */
913     u8_t                    bAllMulticast;
914
915     /* reassociation flag */
916     u8_t                    connectByReasso;
917     u8_t                    failCntOfReasso;
918
919         /* for HT configure control setting */
920     u8_t                    preambleTypeHT;  /* HT: 0 Mixed mode    1 Green field */
921         u8_t                    htCtrlBandwidth;
922         u8_t                    htCtrlSTBC;
923         u8_t                    htCtrlSG;
924     u8_t                    defaultTA;
925
926     u8_t                    connection_11b;
927
928     u8_t                    EnableHT;
929     u8_t                    SG40;
930     u8_t                    HT2040;
931     /* for WPA setting */
932     u8_t                    wpaSupport;
933     u8_t                    wpaLen;
934
935     /* IBSS related objects */
936     u8_t                    ibssDelayedInd;
937     struct zsPartnerNotifyEvent ibssDelayedIndEvent;
938     u8_t                    ibssPartnerStatus;
939
940     u8_t                    bAutoReconnect;
941
942     u8_t                    flagFreqChanging;
943     u8_t                    flagKeyChanging;
944     struct zsBssInfo        ibssBssDesc;
945     u8_t                    ibssBssIsCreator;
946     u16_t                   ibssReceiveBeaconCount;
947     u8_t                    ibssSiteSurveyStatus;
948
949     u8_t                    disableProbingWithSsid;
950 #ifdef ZM_ENABLE_CENC
951     /* CENC */
952     u8_t                    cencIe[ZM_MAX_IE_SIZE + 2];
953 #endif //ZM_ENABLE_CENC
954     u32_t txiv[4];  //Tx PN Sequence
955     u32_t rxiv[4];  //Rx PN Sequence
956     u32_t rxivGK[4];//Broadcast Rx PN Sequence
957     u8_t  wepKey[4][32];    // For Software WEP
958         u8_t  SWEncryMode[4];
959
960     /* 802.11d */
961     u8_t b802_11D;
962
963     /* 802.11h */
964     u8_t TPCEnable;
965     u8_t DFSEnable;
966     u8_t DFSDisableTx;
967
968     /* Owl AP */
969     u8_t athOwlAp;
970
971     /* Enable BA response in driver */
972     u8_t enableDrvBA;
973
974     /* HT Capability Info */
975     union zuHTCapability HTCap; //CWYang(+)
976
977     /* Extended HT Capability Info */
978     union zuExtHTCapability ExtHTCap; //CWYang(+)
979
980     struct InformationElementSta   ie;
981
982 #define ZM_CACHED_FRAMEBODY_SIZE   200
983     u8_t                    asocReqFrameBody[ZM_CACHED_FRAMEBODY_SIZE];
984     u16_t                   asocReqFrameBodySize;
985     u8_t                    asocRspFrameBody[ZM_CACHED_FRAMEBODY_SIZE];
986     u16_t                   asocRspFrameBodySize;
987     u8_t                    beaconFrameBody[ZM_CACHED_FRAMEBODY_SIZE];
988     u16_t                   beaconFrameBodySize;
989
990     u8_t                    ac0PriorityHigherThanAc2;
991     u8_t                    SWEncryptEnable;
992
993     u8_t                    leapEnabled;
994
995     u32_t                    TotalNumberOfReceivePackets;
996     u32_t                    TotalNumberOfReceiveBytes;
997     u32_t                    avgSizeOfReceivePackets;
998
999     u32_t                    ReceivedPacketRateCounter;
1000     u32_t                    ReceivedPktRatePerSecond;
1001
1002     /* #2 Record the sequence number to determine whether the unicast frame is separated by RIFS or not */
1003 #define    ZM_RIFS_STATE_DETECTING    0
1004 #define    ZM_RIFS_STATE_DETECTED     1
1005 #define    ZM_RIFS_TIMER_TIMEOUT      4480          // <Driver time>4480ms <Real time>7s
1006     u8_t                    rifsState;
1007     u8_t                    rifsLikeFrameCnt;
1008     u16_t                   rifsLikeFrameSequence[3];
1009     u32_t                   rifsTimer;
1010     u32_t                   rifsCount;
1011
1012     /* RX filter desired by upper layers.  Note this contains some bits which must be filtered
1013        by sw since the hw supports only a subset of possible filter actions.= */
1014     u32_t  osRxFilter;
1015
1016     u8_t   bSafeMode;
1017
1018     u32_t  ibssAdditionalIESize;
1019     u8_t   ibssAdditionalIE[256];
1020 }; //struct zsWlanDevSta
1021
1022 #define ZM_CMD_QUEUE_SIZE                   256  //Roger Check, test 64 when ready
1023
1024 #define ZM_OID_READ                         1
1025 #define ZM_OID_WRITE                        2
1026 #define ZM_OID_INTERNAL_WRITE               3
1027 #define ZM_CMD_SET_FREQUENCY                4
1028 #define ZM_CMD_SET_KEY                      5
1029 #define ZM_CWM_READ                         6
1030 #define ZM_MAC_READ                         7
1031 #define ZM_ANI_READ                         8
1032 #define ZM_EEPROM_READ                      9
1033 #define ZM_EEPROM_WRITE                     0x0A
1034 #define ZM_OID_CHAN                                                     0x30
1035 #define ZM_OID_SYNTH                                            0x32
1036 #define ZM_OID_TALLY                                            0x81
1037 #define ZM_OID_TALLY_APD                                        0x82
1038
1039 #define ZM_OID_DKTX_STATUS                  0x92
1040 #define ZM_OID_FLASH_CHKSUM                 0xD0
1041 #define ZM_OID_FLASH_READ                   0xD1
1042 #define ZM_OID_FLASH_PROGRAM                0xD2
1043 #define ZM_OID_FW_DL_INIT                   0xD3
1044
1045 /* Driver to Firmware OID */
1046 #define ZM_CMD_ECHO         0x80
1047 #define ZM_CMD_TALLY        0x81
1048 #define ZM_CMD_TALLY_APD    0x82
1049 #define ZM_CMD_CONFIG       0x83
1050 #define ZM_CMD_RREG         0x00
1051 #define ZM_CMD_WREG         0x01
1052 #define ZM_CMD_RMEM         0x02
1053 #define ZM_CMD_WMEM         0x03
1054 #define ZM_CMD_BITAND       0x04
1055 #define ZM_CMD_BITOR        0x05
1056 #define ZM_CMD_EKEY         0x28
1057 #define ZM_CMD_DKEY         0x29
1058 #define ZM_CMD_FREQUENCY    0x30
1059 #define ZM_CMD_RF_INIT      0x31
1060 #define ZM_CMD_SYNTH        0x32
1061 #define ZM_CMD_FREQ_STRAT   0x33
1062 #define ZM_CMD_RESET        0x90
1063 #define ZM_CMD_DKRESET      0x91
1064 #define ZM_CMD_DKTX_STATUS  0x92
1065 #define ZM_CMD_FDC          0xA0
1066 #define ZM_CMD_WREEPROM     0xB0
1067 #define ZM_CMD_WFLASH       0xB0
1068 #define ZM_CMD_FLASH_ERASE  0xB1
1069 #define ZM_CMD_FLASH_PROG   0xB2
1070 #define ZM_CMD_FLASH_CHKSUM 0xB3
1071 #define ZM_CMD_FLASH_READ   0xB4
1072 #define ZM_CMD_FW_DL_INIT   0xB5
1073 #define ZM_CMD_MEM_WREEPROM 0xBB
1074
1075
1076 /* duplicate filter table column */
1077 #define ZM_FILTER_TABLE_COL                 2 /* 2^n */
1078 /* duplicate filter table Row */
1079 #define ZM_FILTER_TABLE_ROW                 8 /* 2^n */
1080
1081 /* duplicate filter table structure */
1082 struct zsRxFilter
1083 {
1084     u16_t addr[3];
1085     u16_t seq;
1086     u8_t up;
1087 };
1088
1089 struct zsWlanDev
1090 {
1091     /* AP global variables */
1092     struct zsWlanDevAp ap;
1093     /* STA global variables */
1094     struct zsWlanDevSta sta;
1095     /* save wrapper setting */
1096     struct zsWrapperSetting ws;
1097     /* features determined by wrapper (vendor) */
1098     struct zsWrapperFeatureCtrl wfc;
1099     /* Traffic Monitor tally */
1100     struct zsTrafTally trafTally;
1101     /* Communication tally */
1102     struct zsCommTally commTally;
1103     /* Duplicate frame filter table */
1104     struct zsRxFilter rxFilterTbl[ZM_FILTER_TABLE_COL][ZM_FILTER_TABLE_ROW];
1105     /* Regulatory table */
1106     struct zsRegulationTable  regulationTable;
1107
1108     /* */
1109     struct zsWlanDevFreqControl freqCtrl;
1110
1111     enum devState state;
1112
1113     u8_t  halState;
1114     u8_t  wlanMode;         /* AP/INFRASTRUCTURE/IBSS/PSEUDO */
1115     u16_t macAddr[3];       /* MAC address */
1116     u16_t beaconInterval;   /* beacon Interval */
1117     u8_t dtim;              /* DTIM period */
1118     u8_t            CurrentDtimCount;
1119     u8_t  preambleType;
1120     u8_t  preambleTypeInUsed;
1121     u8_t  maxTxPower2;      /* 2.4 GHz Max Tx power (Unit: 0.5 dBm) */
1122     u8_t  maxTxPower5;      /* 5 GHz Max Tx power (Unit: 0.5 dBm) */
1123     u8_t  connectMode;
1124     u32_t supportMode;
1125
1126     u8_t bRate;             /* 11b Support Rate bit map */
1127     u8_t bRateBasic;        /* 11b Basic Rate bit map */
1128     u8_t gRate;             /* 11g Support Rate bit map */
1129     u8_t gRateBasic;        /* 11g Basic Rate bit map */
1130     /* channel index point to the item in regulation table */
1131     u8_t channelIndex;
1132
1133     /* channel management */
1134     u8_t    BandWidth40;
1135     u8_t    ExtOffset;      //1 above, 3 below, 0 not present
1136     u16_t   frequency;      /* operation frequency */
1137
1138     u8_t erpElement;        /* ERP information element data */
1139
1140     u8_t disableSelfCts;    /* set to 1 to disable Self-CTS */
1141     u8_t bgMode;
1142
1143         /* private test flag */
1144     u32_t enableProtectionMode;   /* force enable/disable self cts */
1145         u32_t checksumTest;     /* OTUS checksum test 1=>zero checksum 0=>normal */
1146         u32_t rxPacketDump;     /* rx packet dump */
1147
1148     u8_t enableAggregation; /* force enable/disable A-MSPU */
1149     u8_t enableWDS;         /* force enable/disable WDS testing */
1150         u8_t enableTxPathMode;  /* OTUS special testing mode 1=>diable, 0=>enable: ZM_SYSTEM_TEST_MODE */
1151     u8_t enableHALDbgInfo;  /*  */
1152
1153     u32_t forceTxTPC;       /* force tx packet send TPC */
1154
1155     u16_t seq[4];
1156     u16_t mmseq;
1157
1158     /* driver core time tick */
1159     u32_t tick;
1160     u16_t tickIbssSendBeacon;
1161     u16_t tickIbssReceiveBeacon;
1162
1163     /* RTS threshold */
1164     u16_t rtsThreshold;
1165
1166     /* fragmentation threshold,  256 <= value <= 2346, 0=disabled */
1167     u16_t fragThreshold;
1168
1169     /* Tx Rate */
1170     u16_t txMCS;
1171     u16_t txMT;
1172     u32_t CurrentTxRateKbps; //CWYang(+)
1173     /* Rx Rate */
1174     u32_t CurrentRxRateKbps; //Janet(+)
1175     u8_t CurrentRxRateUpdated;
1176     u8_t modulationType;
1177     u8_t rxInfo;
1178     u16_t rateField;
1179
1180     /* timer related objects */
1181     struct zsTimerList  timerList;
1182     u8_t                bTimerReady;
1183
1184     /* for defragmentation */
1185     struct zsDefragList defragTable;
1186
1187     /* Data struct for Interface Dependent Layer */
1188     //struct zsIdlStruct idlStruct;
1189
1190     /* Signal Strength/Quality Related Parameters */
1191     u8_t SignalStrength; //CWYang(+)
1192     u8_t SignalQuality;  //CWYang(+)
1193
1194
1195
1196     /* QoS */
1197     zbuf_t* vtxq[4][ZM_VTXQ_SIZE];
1198     u16_t vtxqHead[4];
1199     u16_t vtxqTail[4];
1200     u16_t qosDropIpFrag[4];
1201
1202     /* Management Tx queue */
1203     zbuf_t* vmmq[ZM_VMMQ_SIZE];
1204     u16_t vmmqHead;
1205     u16_t vmmqTail;
1206
1207     u8_t                vtxqPushing;
1208
1209     /*
1210      * add by honda
1211      * 1. Aggregate queues
1212      * 2. STA's associated information and queue number
1213      * 3. rx aggregation re-ordering queue
1214      */
1215     struct aggQueue    *aggQPool[ZM_AGG_POOL_SIZE];
1216     u8_t                aggInitiated;
1217     u8_t                addbaComplete;
1218     u8_t                addbaCount;
1219     u8_t                aggState;
1220     u8_t                destLock;
1221     struct aggSta       aggSta[ZM_MAX_STA_SUPPORT];
1222     struct agg_tid_rx  *tid_rx[ZM_AGG_POOL_SIZE];
1223     struct aggTally     agg_tal;
1224     struct destQ        destQ;
1225     struct baw_enabler *baw_enabler;
1226     struct ieee80211_cwm    cwm;
1227     u16_t               reorder;
1228     u16_t               seq_debug;
1229     /* rate control */
1230     u32_t txMPDU[ZM_RATE_TABLE_SIZE];
1231     u32_t txFail[ZM_RATE_TABLE_SIZE];
1232     u32_t PER[ZM_RATE_TABLE_SIZE];
1233     u16_t probeCount;
1234     u16_t probeSuccessCount;
1235     u16_t probeInterval;
1236     u16_t success_probing;
1237     /*
1238      * end of add by honda
1239      */
1240
1241     /* airopeek sniffer mode for upper sw */
1242     u32_t               swSniffer;   /* window: airoPeek */
1243     u32_t               XLinkMode;
1244
1245     /* MDK mode */
1246     /* init by 0=>normal driver 1=>MDK driver */
1247     u32_t               modeMDKEnable;
1248
1249     u32_t               heartBeatNotification;
1250
1251     /* pointer for HAL Plus private memory */
1252     void* hpPrivate;
1253
1254     /* for WPA setting */
1255     //u8_t                    wpaSupport[ZM_MAX_AP_SUPPORT];
1256     //u8_t                    wpaLen[ZM_MAX_AP_SUPPORT];
1257     //u8_t                    wpaIe[ZM_MAX_AP_SUPPORT][ZM_MAX_IE_SIZE];
1258
1259     struct zsLedStruct      ledStruct;
1260
1261     /* ani flag */
1262     u8_t aniEnable;
1263     u16_t txq_threshold;
1264
1265         //Skip Mic Error Check
1266         u8_t    TKIP_Group_KeyChanging;
1267
1268         u8_t    dynamicSIFSEnable;
1269
1270         u8_t    queueFlushed;
1271
1272     u16_t (*zfcbAuthNotify)(zdev_t* dev, u16_t* macAddr);
1273     u16_t (*zfcbAsocNotify)(zdev_t* dev, u16_t* macAddr, u8_t* body, u16_t bodySize, u16_t port);
1274     u16_t (*zfcbDisAsocNotify)(zdev_t* dev, u8_t* macAddr, u16_t port);
1275     u16_t (*zfcbApConnectNotify)(zdev_t* dev, u8_t* macAddr, u16_t port);
1276     void (*zfcbConnectNotify)(zdev_t* dev, u16_t status, u16_t* bssid);
1277     void (*zfcbScanNotify)(zdev_t* dev, struct zsScanResult* result);
1278     void (*zfcbMicFailureNotify)(zdev_t* dev, u16_t* addr, u16_t status);
1279     void (*zfcbApMicFailureNotify)(zdev_t* dev, u8_t* addr, zbuf_t* buf);
1280     void (*zfcbIbssPartnerNotify)(zdev_t* dev, u16_t status, struct zsPartnerNotifyEvent *event);
1281     void (*zfcbMacAddressNotify)(zdev_t* dev, u8_t* addr);
1282     void (*zfcbSendCompleteIndication)(zdev_t* dev, zbuf_t* buf);
1283     void (*zfcbRecvEth)(zdev_t* dev, zbuf_t* buf, u16_t port);
1284     void (*zfcbRecv80211)(zdev_t* dev, zbuf_t* buf, struct zsAdditionInfo* addInfo);
1285     void (*zfcbRestoreBufData)(zdev_t* dev, zbuf_t* buf);
1286 #ifdef ZM_ENABLE_CENC
1287     u16_t (*zfcbCencAsocNotify)(zdev_t* dev, u16_t* macAddr, u8_t* body,
1288             u16_t bodySize, u16_t port);
1289 #endif //ZM_ENABLE_CENC
1290     u8_t (*zfcbClassifyTxPacket)(zdev_t* dev, zbuf_t* buf);
1291     void (*zfcbHwWatchDogNotify)(zdev_t* dev);
1292 };
1293
1294
1295 struct zsWlanKey
1296 {
1297     u8_t key;
1298 };
1299
1300
1301 /* These macros are defined here for backward compatibility */
1302 /* Please leave them alone */
1303 /* For Tx packet allocated in upper layer layer */
1304 #define zmw_tx_buf_readb(dev, buf, offset) zmw_buf_readb(dev, buf, offset)
1305 #define zmw_tx_buf_readh(dev, buf, offset) zmw_buf_readh(dev, buf, offset)
1306 #define zmw_tx_buf_writeb(dev, buf, offset, value) zmw_buf_writeb(dev, buf, offset, value)
1307 #define zmw_tx_buf_writeh(dev, buf, offset, value) zmw_buf_writeh(dev, buf, offset, value)
1308
1309 /* For Rx packet allocated in driver */
1310 #define zmw_rx_buf_readb(dev, buf, offset) zmw_buf_readb(dev, buf, offset)
1311 #define zmw_rx_buf_readh(dev, buf, offset) zmw_buf_readh(dev, buf, offset)
1312 #define zmw_rx_buf_writeb(dev, buf, offset, value) zmw_buf_writeb(dev, buf, offset, value)
1313 #define zmw_rx_buf_writeh(dev, buf, offset, value) zmw_buf_writeh(dev, buf, offset, value)
1314
1315 #endif /* #ifndef _STRUCT_H */