b7c8d5e7337548c8b13d05c52b009f404c909a9b
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / combo_mt66xx / mt6628 / wlan / include / nic / que_mgt.h
1 /*
2 ** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/que_mgt.h#1 $
3 */
4
5 /*! \file   "que_mgt.h"
6     \brief  TX/RX queues management header file
7
8     The main tasks of queue management include TC-based HIF TX flow control,
9     adaptive TC quota adjustment, HIF TX grant scheduling, Power-Save
10     forwarding control, RX packet reordering, and RX BA agreement management.
11 */
12
13
14
15 /*
16 ** $Log: que_mgt.h $
17  *
18  * 08 15 2011 cp.wu
19  * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree
20  * add MT6628-specific definitions.
21  *
22  * 07 26 2011 eddie.chen
23  * [WCXRP00000874] [MT5931][DRV] API for query the RX reorder queued packets counter
24  * API for query the RX reorder queued packets counter.
25  *
26  * 06 14 2011 eddie.chen
27  * [WCXRP00000753] [MT5931 Wi-Fi][DRV] Adjust QM for MT5931
28  * Change the parameter for WMM pass.
29  *
30  * 05 31 2011 eddie.chen
31  * [WCXRP00000753] [MT5931 Wi-Fi][DRV] Adjust QM for MT5931
32  * Fix the QM quota in MT5931.
33  *
34  * 05 09 2011 eddie.chen
35  * [WCXRP00000709] [MT6620 Wi-Fi][Driver] Check free number before copying broadcast packet
36  * Check free number before copying broadcast packet.
37  *
38  * 04 14 2011 eddie.chen
39  * [WCXRP00000603] [MT6620 Wi-Fi][DRV] Fix Klocwork warning
40  * Check the SW RFB free. Fix the compile warning..
41  *
42  * 04 08 2011 eddie.chen
43  * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma
44  * Fix for sigma
45  *
46  * 03 28 2011 eddie.chen
47  * [WCXRP00000602] [MT6620 Wi-Fi][DRV] Fix wmm parameters in beacon for BOW
48  * Fix wmm parameters in beacon for BOW.
49  *
50  * 03 15 2011 eddie.chen
51  * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter
52  * Add sw debug counter for QM.
53  *
54  * 02 17 2011 eddie.chen
55  * [WCXRP00000458] [MT6620 Wi-Fi][Driver] BOW Concurrent - ProbeResp was exist in other channel
56  * 1) Chnage GetFrameAction decision when BSS is absent.
57  * 2) Check channel and resource in processing ProbeRequest 
58  *
59  * 01 12 2011 eddie.chen
60  * [WCXRP00000322] Add WMM IE in beacon, 
61
62 Add per station flow control when STA is in PS
63
64
65  * 1) Check Bss if support QoS before adding WMMIE
66  * 2) Check if support prAdapter->rWifiVar QoS and uapsd in flow control
67  *
68  * 12 29 2010 eddie.chen
69  * [WCXRP00000322] Add WMM IE in beacon, 
70
71 Add per station flow control when STA is in PS
72
73
74  * 1) PS flow control event
75  * 
76  * 2) WMM IE in beacon, assoc resp, probe resp
77  *
78  * 12 23 2010 george.huang
79  * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function
80  * 1. update WMM IE parsing, with ASSOC REQ handling
81  * 2. extend U-APSD parameter passing from driver to FW
82  *
83  * 10 04 2010 cp.wu
84  * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T and replaced by ENUM_NETWORK_TYPE_INDEX_T only
85  * remove ENUM_NETWORK_TYPE_T definitions
86  *
87  * 09 21 2010 kevin.huang
88  * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning
89  * Eliminate Linux Compile Warning
90  *
91  * 08 04 2010 yarco.yang
92  * NULL
93  * Add TX_AMPDU and ADDBA_REJECT command
94  *
95  * 07 22 2010 george.huang
96  *
97  * Update fgIsQoS information in BSS INFO by CMD
98  *
99  * 07 16 2010 yarco.yang
100  *
101  * 1. Support BSS Absence/Presence Event
102  * 2. Support STA change PS mode Event
103  * 3. Support BMC forwarding for AP mode.
104  *
105  * 07 14 2010 yarco.yang
106  *
107  * 1. Remove CFG_MQM_MIGRATION
108  * 2. Add CMD_UPDATE_WMM_PARMS command
109  *
110  * 07 13 2010 yarco.yang
111  *
112  * [WPD00003849]
113  * [MT6620 and MT5931] SW Migration, add qmGetFrameAction() API for CMD Queue Processing
114  *
115  * 07 09 2010 yarco.yang
116  *
117  * [MT6620 and MT5931] SW Migration: Add ADDBA support
118  *
119  * 07 08 2010 cp.wu
120  *
121  * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
122  *
123  * 06 29 2010 yarco.yang
124  * [WPD00003837][MT6620]Data Path Refine
125  * replace g_rQM with Adpater->rQM
126  *
127  * 06 25 2010 cp.wu
128  * [WPD00003833][MT6620 and MT5931] Driver migration
129  * add API in que_mgt to retrieve sta-rec index for security frames.
130  *
131  * 06 23 2010 yarco.yang
132  * [WPD00003837][MT6620]Data Path Refine
133  * Merge g_arStaRec[] into adapter->arStaRec[]
134  *
135  * 06 21 2010 yarco.yang
136  * [WPD00003837][MT6620]Data Path Refine
137  * Support CFG_MQM_MIGRATION flag
138  *
139  * 06 18 2010 cm.chang
140  * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver
141  * Provide cnmMgtPktAlloc() and alloc/free function of msg/buf
142  *
143  * 06 08 2010 cp.wu
144  * [WPD00003833][MT6620 and MT5931] Driver migration
145  * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration
146  *
147  * 06 06 2010 kevin.huang
148  * [WPD00003832][MT6620 5931] Create driver base
149  * [MT6620 5931] Create driver base
150  *
151  * 03 30 2010 tehuang.liu
152  * [WPD00001943]Create WiFi test driver framework on WinXP
153  * Enabled adaptive TC resource control
154  *
155  * 03 24 2010 jeffrey.chang
156  * [WPD00003826]Initial import for Linux port
157  * initial import for Linux port
158  *
159  * 03 19 2010 tehuang.liu
160  * [WPD00001943]Create WiFi test driver framework on WinXP
161  * By default enabling dynamic STA_REC activation and decactivation
162  *
163  * 03 17 2010 tehuang.liu
164  * [WPD00001943]Create WiFi test driver framework on WinXP
165  * Changed STA_REC index determination rules (DA=BMCAST always --> STA_REC_INDEX_BMCAST)
166  *
167  * 03 11 2010 tehuang.liu
168  * [WPD00001943]Create WiFi test driver framework on WinXP
169  * Fixed buffer leak when processing BAR frames
170  *
171  * 02 25 2010 tehuang.liu
172  * [WPD00001943]Create WiFi test driver framework on WinXP
173  * Enabled multi-STA TX path with fairness
174  *
175  * 02 24 2010 tehuang.liu
176  * [WPD00001943]Create WiFi test driver framework on WinXP
177  * Enabled dynamically activating and deactivating STA_RECs
178  *
179  * 02 24 2010 tehuang.liu
180  * [WPD00001943]Create WiFi test driver framework on WinXP
181  * Added code for dynamic activating and deactivating STA_RECs.
182  *
183  * 01 13 2010 tehuang.liu
184  * [WPD00001943]Create WiFi test driver framework on WinXP
185  * Enabled the Burst_End Indication mechanism
186 **  \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-12-09 14:04:53 GMT MTK02468
187 **  Added RX buffer reordering function prototypes
188 **  \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-12-02 22:08:44 GMT MTK02468
189 **  Added macro QM_INIT_STA_REC for initialize a STA_REC
190 **  \main\maintrunk.MT6620WiFiDriver_Prj\1 2009-11-23 21:58:43 GMT mtk02468
191 **  Initial version
192 **
193 */
194
195 #ifndef _QUE_MGT_H
196 #define _QUE_MGT_H
197
198 /*******************************************************************************
199 *                         C O M P I L E R   F L A G S
200 ********************************************************************************
201 */
202
203 /*******************************************************************************
204 *                    E X T E R N A L   R E F E R E N C E S
205 ********************************************************************************
206 */
207
208 /*******************************************************************************
209 *                              C O N S T A N T S
210 ********************************************************************************
211 */
212
213 /* Queue Manager Features */
214 #define QM_BURST_END_INFO_ENABLED       1  /* 1: Indicate the last TX packet to the FW for each burst */
215 #define QM_FORWARDING_FAIRNESS          1  /* 1: To fairly share TX resource among active STAs */
216 #define QM_ADAPTIVE_TC_RESOURCE_CTRL    1  /* 1: To adaptively adjust resource for each TC */
217 #define QM_PRINT_TC_RESOURCE_CTRL       0  /* 1: To print TC resource adjustment results */
218 #define QM_RX_WIN_SSN_AUTO_ADVANCING    1  /* 1: If pkt with SSN is missing, auto advance the RX reordering window */
219 #define QM_RX_INIT_FALL_BEHIND_PASS     1  /* 1: Indicate the packets falling behind to OS before the frame with SSN is received */
220 #define QM_TC_RESOURCE_EMPTY_COUNTER    1  /* 1: Count times of TC resource empty happened */
221 /* Parameters */
222 #define QM_INIT_TIME_TO_UPDATE_QUE_LEN  60  /* p: Update queue lengths when p TX packets are enqueued */
223 #define QM_INIT_TIME_TO_ADJUST_TC_RSC   3   /* s: Adjust the TC resource every s updates of queue lengths  */
224 #define QM_QUE_LEN_MOVING_AVE_FACTOR    3   /* Factor for Que Len averaging */
225
226 #define QM_MIN_RESERVED_TC0_RESOURCE    1
227 #define QM_MIN_RESERVED_TC1_RESOURCE    1
228 #define QM_MIN_RESERVED_TC2_RESOURCE    1
229 #define QM_MIN_RESERVED_TC3_RESOURCE    1
230 #define QM_MIN_RESERVED_TC4_RESOURCE    2   /* Resource for TC4 is not adjustable */
231 #define QM_MIN_RESERVED_TC5_RESOURCE    1
232
233 #if defined(MT6620)
234
235 #define QM_GUARANTEED_TC0_RESOURCE      4
236 #define QM_GUARANTEED_TC1_RESOURCE      4
237 #define QM_GUARANTEED_TC2_RESOURCE      9
238 #define QM_GUARANTEED_TC3_RESOURCE      11
239 #define QM_GUARANTEED_TC4_RESOURCE      2   /* Resource for TC4 is not adjustable */
240 #define QM_GUARANTEED_TC5_RESOURCE      4
241
242 #elif defined(MT5931) 
243
244 #define QM_GUARANTEED_TC0_RESOURCE      4
245 #define QM_GUARANTEED_TC1_RESOURCE      4
246 #define QM_GUARANTEED_TC2_RESOURCE      4 
247 #define QM_GUARANTEED_TC3_RESOURCE      4
248 #define QM_GUARANTEED_TC4_RESOURCE      2   /* Resource for TC4 is not adjustable */
249 #define QM_GUARANTEED_TC5_RESOURCE      2
250
251 #elif defined(MT6628)
252
253 #define QM_GUARANTEED_TC0_RESOURCE      4
254 #define QM_GUARANTEED_TC1_RESOURCE      4
255 #define QM_GUARANTEED_TC2_RESOURCE      6
256 #define QM_GUARANTEED_TC3_RESOURCE      6
257 #define QM_GUARANTEED_TC4_RESOURCE      2   /* Resource for TC4 is not adjustable */
258 #define QM_GUARANTEED_TC5_RESOURCE      4
259
260
261 #else
262 #error
263 #endif
264
265
266
267 #define QM_EXTRA_RESERVED_RESOURCE_WHEN_BUSY    0
268
269 #define QM_TOTAL_TC_RESOURCE            (\
270         NIC_TX_BUFF_COUNT_TC0 + NIC_TX_BUFF_COUNT_TC1 +\
271         NIC_TX_BUFF_COUNT_TC2 + NIC_TX_BUFF_COUNT_TC3 +\
272         NIC_TX_BUFF_COUNT_TC5)
273 #define QM_AVERAGE_TC_RESOURCE          6
274
275 /* Note: QM_INITIAL_RESIDUAL_TC_RESOURCE shall not be less than 0 */
276 #define QM_INITIAL_RESIDUAL_TC_RESOURCE  (QM_TOTAL_TC_RESOURCE - \
277                                          (QM_GUARANTEED_TC0_RESOURCE +\
278                                           QM_GUARANTEED_TC1_RESOURCE +\
279                                           QM_GUARANTEED_TC2_RESOURCE +\
280                                           QM_GUARANTEED_TC3_RESOURCE +\
281                                           QM_GUARANTEED_TC5_RESOURCE \
282                                           ))
283
284 /* Hard-coded network type for Phase 3: NETWORK_TYPE_AIS/P2P/BOW */
285 #define QM_OPERATING_NETWORK_TYPE   NETWORK_TYPE_AIS
286
287 #define QM_TEST_MODE                        0
288 #define QM_TEST_TRIGGER_TX_COUNT            50
289 #define QM_TEST_STA_REC_DETERMINATION       0
290 #define QM_TEST_STA_REC_DEACTIVATION        0
291 #define QM_TEST_FAIR_FORWARDING             0
292
293 #define QM_DEBUG_COUNTER                    0
294
295 /* Per-STA Queues: [0] AC0, [1] AC1, [2] AC2, [3] AC3, [4] 802.1x */
296 /* Per-Type Queues: [0] BMCAST */
297 #define NUM_OF_PER_STA_TX_QUEUES    5
298 #define NUM_OF_PER_TYPE_TX_QUEUES   1
299
300 /* These two constants are also used for FW to verify the STA_REC index */
301 #define STA_REC_INDEX_BMCAST        0xFF
302 #define STA_REC_INDEX_NOT_FOUND     0xFE
303
304 /* TX Queue Index */
305 #define TX_QUEUE_INDEX_BMCAST       0
306 #define TX_QUEUE_INDEX_NO_STA_REC   0
307 #define TX_QUEUE_INDEX_AC0          0
308 #define TX_QUEUE_INDEX_AC1          1
309 #define TX_QUEUE_INDEX_AC2          2
310 #define TX_QUEUE_INDEX_AC3          3
311 #define TX_QUEUE_INDEX_802_1X       4
312 #define TX_QUEUE_INDEX_NON_QOS      1
313
314
315 //1 WMM-related
316 /* WMM FLAGS */
317 #define WMM_FLAG_SUPPORT_WMM                BIT(0)
318 #define WMM_FLAG_SUPPORT_WMMSA              BIT(1)
319 #define WMM_FLAG_AC_PARAM_PRESENT           BIT(2)
320 #define WMM_FLAG_SUPPORT_UAPSD              BIT(3)
321
322 /* WMM Admission Control Mandatory FLAGS */
323 #define ACM_FLAG_ADM_NOT_REQUIRED           0
324 #define ACM_FLAG_ADM_GRANTED                BIT(0)
325 #define ACM_FLAG_ADM_REQUIRED               BIT(1)
326
327 /* WMM Power Saving FLAGS */
328 #define AC_FLAG_TRIGGER_ENABLED             BIT(1)
329 #define AC_FLAG_DELIVERY_ENABLED            BIT(2)
330
331 /* WMM-2.2.1 WMM Information Element */
332 #define ELEM_MAX_LEN_WMM_INFO               7
333
334 /* WMM-2.2.2 WMM Parameter Element */
335 #define ELEM_MAX_LEN_WMM_PARAM              24
336
337 /* WMM-2.2.1 WMM QoS Info field */
338 #define WMM_QOS_INFO_PARAM_SET_CNT          BITS(0,3) /* Sent by AP */
339 #define WMM_QOS_INFO_UAPSD                  BIT(7)
340
341 #define WMM_QOS_INFO_VO_UAPSD               BIT(0) /* Sent by non-AP STA */
342 #define WMM_QOS_INFO_VI_UAPSD               BIT(1)
343 #define WMM_QOS_INFO_BK_UAPSD               BIT(2)
344 #define WMM_QOS_INFO_BE_UAPSD               BIT(3)
345 #define WMM_QOS_INFO_MAX_SP_LEN_MASK        BITS(5,6)
346 #define WMM_QOS_INFO_MAX_SP_ALL             0
347 #define WMM_QOS_INFO_MAX_SP_2               BIT(5)
348 #define WMM_QOS_INFO_MAX_SP_4               BIT(6)
349 #define WMM_QOS_INFO_MAX_SP_6               BITS(5,6)
350
351 /* -- definitions for Max SP length field */
352 #define WMM_MAX_SP_LENGTH_ALL               0
353 #define WMM_MAX_SP_LENGTH_2                 2
354 #define WMM_MAX_SP_LENGTH_4                 4
355 #define WMM_MAX_SP_LENGTH_6                 6
356
357
358 /* WMM-2.2.2 WMM ACI/AIFSN field */
359 /* -- subfields in the ACI/AIFSN field */
360 #define WMM_ACIAIFSN_AIFSN                  BITS(0,3)
361 #define WMM_ACIAIFSN_ACM                    BIT(4)
362 #define WMM_ACIAIFSN_ACI                    BITS(5,6)
363 #define WMM_ACIAIFSN_ACI_OFFSET             5
364
365 /* -- definitions for ACI field */
366 #define WMM_ACI_AC_BE                       0
367 #define WMM_ACI_AC_BK                       BIT(5)
368 #define WMM_ACI_AC_VI                       BIT(6)
369 #define WMM_ACI_AC_VO                       BITS(5,6)
370
371 #define WMM_ACI(_AC)                        (_AC << WMM_ACIAIFSN_ACI_OFFSET)
372
373 /* -- definitions for ECWmin/ECWmax field */
374 #define WMM_ECW_WMIN_MASK                   BITS(0,3)
375 #define WMM_ECW_WMAX_MASK                   BITS(4,7)
376 #define WMM_ECW_WMAX_OFFSET                 4
377
378 #define TXM_DEFAULT_FLUSH_QUEUE_GUARD_TIME              0   /* Unit: 64 us */
379
380 #define QM_RX_BA_ENTRY_MISS_TIMEOUT_MS      (1000)
381
382 /*******************************************************************************
383 *                             D A T A   T Y P E S
384 ********************************************************************************
385 */
386
387 enum {
388     QM_DBG_CNT_00=0,
389     QM_DBG_CNT_01,
390     QM_DBG_CNT_02,
391     QM_DBG_CNT_03,
392     QM_DBG_CNT_04,
393     QM_DBG_CNT_05,
394     QM_DBG_CNT_06,
395     QM_DBG_CNT_07,
396     QM_DBG_CNT_08,
397     QM_DBG_CNT_09,
398     QM_DBG_CNT_10,
399     QM_DBG_CNT_11,
400     QM_DBG_CNT_12,
401     QM_DBG_CNT_13,
402     QM_DBG_CNT_14,
403     QM_DBG_CNT_15,
404     QM_DBG_CNT_16,
405     QM_DBG_CNT_17,
406     QM_DBG_CNT_18,
407     QM_DBG_CNT_19,
408     QM_DBG_CNT_20,
409     QM_DBG_CNT_21,
410     QM_DBG_CNT_22,
411     QM_DBG_CNT_23,
412     QM_DBG_CNT_24,
413     QM_DBG_CNT_25,
414     QM_DBG_CNT_26,
415     QM_DBG_CNT_27,
416     QM_DBG_CNT_28,
417     QM_DBG_CNT_29,
418     QM_DBG_CNT_30,
419     QM_DBG_CNT_31,
420     QM_DBG_CNT_NUM
421 };
422
423
424
425
426 /* Used for MAC TX */
427 typedef enum _ENUM_MAC_TX_QUEUE_INDEX_T {
428     MAC_TX_QUEUE_AC0_INDEX = 0,
429     MAC_TX_QUEUE_AC1_INDEX,
430     MAC_TX_QUEUE_AC2_INDEX,
431     MAC_TX_QUEUE_AC3_INDEX,
432     MAC_TX_QUEUE_AC4_INDEX,
433     MAC_TX_QUEUE_AC5_INDEX,
434     MAC_TX_QUEUE_AC6_INDEX,
435     MAC_TX_QUEUE_BCN_INDEX,
436     MAC_TX_QUEUE_BMC_INDEX,
437     MAC_TX_QUEUE_NUM
438 } ENUM_MAC_TX_QUEUE_INDEX_T;
439
440 typedef struct _RX_BA_ENTRY_T {
441     BOOLEAN                 fgIsValid;
442     QUE_T                   rReOrderQue;
443     UINT_16                 u2WinStart;
444     UINT_16                 u2WinEnd;
445     UINT_16                 u2WinSize;
446
447     /* For identifying the RX BA agreement */
448     UINT_8                  ucStaRecIdx;
449     UINT_8                  ucTid;
450
451     BOOLEAN                 fgIsWaitingForPktWithSsn;
452
453     //UINT_8                  ucTxBufferSize;
454     //BOOL                    fgIsAcConstrain;
455     //BOOL                    fgIsBaEnabled;
456 } RX_BA_ENTRY_T, *P_RX_BA_ENTRY_T;
457
458 /* The mailbox message (could be used for Host-To-Device or Device-To-Host Mailbox) */
459 typedef struct _MAILBOX_MSG_T{
460     UINT_32 u4Msg[2];   /* [0]: D2HRM0R or H2DRM0R, [1]: D2HRM1R or H2DRM1R */
461 } MAILBOX_MSG_T, *P_MAILBOX_MSG_T;
462
463
464 /* Used for adaptively adjusting TC resources */
465 typedef struct _TC_RESOURCE_CTRL_T {
466     /* TC0, TC1, TC2, TC3, TC5 */
467     UINT_32 au4AverageQueLen[TC_NUM - 1];
468 } TC_RESOURCE_CTRL_T, *P_TC_RESOURCE_CTRL_T;
469
470 typedef struct _QUE_MGT_T{      /* Queue Management Control Info */
471
472     /* Per-Type Queues: [0] BMCAST or UNKNOWN-STA packets */
473     QUE_T arTxQueue[NUM_OF_PER_TYPE_TX_QUEUES];
474
475 #if 0
476     /* For TX Scheduling */
477     UINT_8  arRemainingTxOppt[NUM_OF_PER_STA_TX_QUEUES];
478     UINT_8  arCurrentTxStaIndex[NUM_OF_PER_STA_TX_QUEUES];
479
480 #endif
481
482     /* Reordering Queue Parameters */
483     RX_BA_ENTRY_T  arRxBaTable[CFG_NUM_OF_RX_BA_AGREEMENTS];
484
485     /* Current number of activated RX BA agreements <= CFG_NUM_OF_RX_BA_AGREEMENTS */
486     UINT_8 ucRxBaCount;
487
488 #if QM_TEST_MODE
489     UINT_32 u4PktCount;
490     P_ADAPTER_T prAdapter;
491
492 #if QM_TEST_FAIR_FORWARDING
493     UINT_32 u4CurrentStaRecIndexToEnqueue;
494 #endif
495
496 #endif
497
498
499 #if QM_FORWARDING_FAIRNESS
500     /* The current TX count for a STA with respect to a TC index */
501     UINT_32 au4ForwardCount[NUM_OF_PER_STA_TX_QUEUES];
502
503     /* The current serving STA with respect to a TC index */
504     UINT_32 au4HeadStaRecIndex [NUM_OF_PER_STA_TX_QUEUES];
505 #endif
506
507 #if QM_ADAPTIVE_TC_RESOURCE_CTRL
508     UINT_32 au4AverageQueLen[TC_NUM];
509     UINT_32 au4CurrentTcResource[TC_NUM];
510     UINT_32 au4MinReservedTcResource[TC_NUM]; /* The minimum amount of resource no matter busy or idle */
511     UINT_32 au4GuaranteedTcResource[TC_NUM]; /* The minimum amount of resource when extremely busy */
512
513     UINT_32 u4TimeToAdjustTcResource;
514     UINT_32 u4TimeToUpdateQueLen;
515
516     /* Set to TRUE if the last TC adjustment has not been completely applied (i.e., waiting more TX-Done events
517        to align the TC quotas to the TC resource assignment) */
518     BOOLEAN fgTcResourcePostAnnealing;
519
520 #endif
521
522 #if QM_DEBUG_COUNTER
523     UINT_32 au4QmDebugCounters[QM_DBG_CNT_NUM];
524 #endif
525 #if QM_TC_RESOURCE_EMPTY_COUNTER
526     UINT_32 au4QmTcResourceEmptyCounter[NET_TYPE_NUM][TC_NUM];
527 #endif
528 } QUE_MGT_T, *P_QUE_MGT_T;
529
530
531
532 typedef struct _EVENT_RX_ADDBA_T {
533     /* Event header */
534     UINT_16     u2Length;
535     UINT_16     u2Reserved1;    /* Must be filled with 0x0001 (EVENT Packet) */
536     UINT_8      ucEID;
537     UINT_8      ucSeqNum;
538     UINT_8      aucReserved2[2];
539
540     /* Fields not present in the received ADDBA_REQ */
541     UINT_8      ucStaRecIdx;
542
543     /* Fields that are present in the received ADDBA_REQ */
544     UINT_8      ucDialogToken;              /* Dialog Token chosen by the sender */
545     UINT_16     u2BAParameterSet;           /* BA policy, TID, buffer size */
546     UINT_16     u2BATimeoutValue;
547     UINT_16     u2BAStartSeqCtrl;           /* SSN */
548
549 } EVENT_RX_ADDBA_T, *P_EVENT_RX_ADDBA_T;
550
551 typedef struct _EVENT_RX_DELBA_T {
552     /* Event header */
553         UINT_16     u2Length;
554         UINT_16     u2Reserved1;    /* Must be filled with 0x0001 (EVENT Packet) */
555         UINT_8          ucEID;
556         UINT_8      ucSeqNum;
557         UINT_8          aucReserved2[2];
558
559     /* Fields not present in the received ADDBA_REQ */
560     UINT_8      ucStaRecIdx;
561     UINT_8      ucTid;
562 } EVENT_RX_DELBA_T, *P_EVENT_RX_DELBA_T;
563
564
565 typedef struct _EVENT_BSS_ABSENCE_PRESENCE_T {
566     /* Event header */
567     UINT_16     u2Length;
568     UINT_16     u2Reserved1;    /* Must be filled with 0x0001 (EVENT Packet) */
569     UINT_8              ucEID;
570     UINT_8      ucSeqNum;
571     UINT_8              aucReserved2[2];
572
573     /* Event Body */
574     UINT_8      ucNetTypeIdx;
575     BOOLEAN     fgIsAbsent;
576     UINT_8      ucBssFreeQuota;
577     UINT_8      aucReserved[1];
578 } EVENT_BSS_ABSENCE_PRESENCE_T, *P_EVENT_BSS_ABSENCE_PRESENCE_T;
579
580
581 typedef struct _EVENT_STA_CHANGE_PS_MODE_T {
582     /* Event header */
583     UINT_16     u2Length;
584     UINT_16     u2Reserved1;    /* Must be filled with 0x0001 (EVENT Packet) */
585     UINT_8              ucEID;
586     UINT_8      ucSeqNum;
587     UINT_8              aucReserved2[2];
588
589     /* Event Body */
590     UINT_8      ucStaRecIdx;
591     BOOLEAN     fgIsInPs;
592     UINT_8      ucUpdateMode;
593     UINT_8      ucFreeQuota; 
594 } EVENT_STA_CHANGE_PS_MODE_T, *P_EVENT_STA_CHANGE_PS_MODE_T;
595
596 /* The free quota is used by PS only now */
597 /* The event may be used by per STA flow conttrol in general */
598 typedef struct _EVENT_STA_UPDATE_FREE_QUOTA_T {
599     /* Event header */
600     UINT_16     u2Length;
601     UINT_16     u2Reserved1;    /* Must be filled with 0x0001 (EVENT Packet) */
602     UINT_8      ucEID;
603     UINT_8      ucSeqNum;
604     UINT_8      aucReserved2[2];
605
606     /* Event Body */
607     UINT_8      ucStaRecIdx;
608     UINT_8      ucUpdateMode;
609     UINT_8      ucFreeQuota;
610     UINT_8      aucReserved[1];
611 } EVENT_STA_UPDATE_FREE_QUOTA_T, *P_EVENT_STA_UPDATE_FREE_QUOTA_T;
612
613
614
615
616 /* WMM-2.2.1 WMM Information Element */
617 typedef struct _IE_WMM_INFO_T {
618     UINT_8      ucId;                   /* Element ID */
619     UINT_8      ucLength;               /* Length */
620     UINT_8      aucOui[3];              /* OUI */
621     UINT_8      ucOuiType;              /* OUI Type */
622     UINT_8      ucOuiSubtype;           /* OUI Subtype */
623     UINT_8      ucVersion;              /* Version */
624     UINT_8      ucQosInfo;              /* QoS Info field */
625     UINT_8      ucDummy[3];             /* Dummy for pack */
626 } IE_WMM_INFO_T, *P_IE_WMM_INFO_T;
627
628 /* WMM-2.2.2 WMM Parameter Element */
629 typedef struct _IE_WMM_PARAM_T {
630     UINT_8      ucId;                   /* Element ID */
631     UINT_8      ucLength;               /* Length */
632
633     /* IE Body */
634     UINT_8      aucOui[3];              /* OUI */
635     UINT_8      ucOuiType;              /* OUI Type */
636     UINT_8      ucOuiSubtype;           /* OUI Subtype */
637     UINT_8      ucVersion;              /* Version */
638
639     /* WMM IE Body */
640     UINT_8      ucQosInfo;              /* QoS Info field */
641     UINT_8      ucReserved;
642
643     /* AC Parameters */
644     UINT_8      ucAciAifsn_BE;
645     UINT_8      ucEcw_BE;
646     UINT_8      aucTxopLimit_BE[2];
647
648     UINT_8      ucAciAifsn_BG;
649     UINT_8      ucEcw_BG;
650     UINT_8      aucTxopLimit_BG[2];
651
652     UINT_8      ucAciAifsn_VI;
653     UINT_8      ucEcw_VI;
654     UINT_8      aucTxopLimit_VI[2];
655
656     UINT_8      ucAciAifsn_VO;
657     UINT_8      ucEcw_VO;
658     UINT_8      aucTxopLimit_VO[2];
659
660 } IE_WMM_PARAM_T, *P_IE_WMM_PARAM_T;
661
662 typedef struct _IE_WMM_TSPEC_T {
663     UINT_8      ucId;                   /* Element ID */
664     UINT_8      ucLength;               /* Length */
665     UINT_8      aucOui[3];              /* OUI */
666     UINT_8      ucOuiType;              /* OUI Type */
667     UINT_8      ucOuiSubtype;           /* OUI Subtype */
668     UINT_8      ucVersion;              /* Version */
669     /* WMM TSPEC body */
670     UINT_8      aucTsInfo[3];           /* TS Info */
671     UINT_8      aucTspecBodyPart[1];    /* Note: Utilize PARAM_QOS_TSPEC to fill (memory copy) */
672 } IE_WMM_TSPEC_T, *P_IE_WMM_TSPEC_T;
673
674 typedef struct _IE_WMM_HDR_T {
675     UINT_8      ucId;                   /* Element ID */
676     UINT_8      ucLength;               /* Length */
677     UINT_8      aucOui[3];              /* OUI */
678     UINT_8      ucOuiType;              /* OUI Type */
679     UINT_8      ucOuiSubtype;           /* OUI Subtype */
680     UINT_8      ucVersion;              /* Version */
681     UINT_8      aucBody[1];             /* IE body */
682 } IE_WMM_HDR_T, *P_IE_WMM_HDR_T;
683
684
685 typedef struct _AC_QUE_PARMS_T{
686     UINT_16     u2CWmin;            /*!< CWmin */
687     UINT_16     u2CWmax;            /*!< CWmax */
688     UINT_16     u2TxopLimit;        /*!< TXOP limit */
689     UINT_16     u2Aifsn;            /*!< AIFSN */
690     UINT_8      ucGuradTime;   /*!< GuardTime for STOP/FLUSH. */
691     BOOLEAN     fgIsACMSet;
692 } AC_QUE_PARMS_T, *P_AC_QUE_PARMS_T;
693
694 /* WMM ACI (AC index) */
695 typedef enum _ENUM_WMM_ACI_T {
696     WMM_AC_BE_INDEX = 0,
697     WMM_AC_BK_INDEX,
698     WMM_AC_VI_INDEX,
699     WMM_AC_VO_INDEX,
700     WMM_AC_INDEX_NUM
701 } ENUM_WMM_ACI_T, *P_ENUM_WMM_ACI_T;
702
703
704 /* Used for CMD Queue Operation */
705 typedef enum _ENUM_FRAME_ACTION_T {
706     FRAME_ACTION_DROP_PKT = 0,
707     FRAME_ACTION_QUEUE_PKT,
708     FRAME_ACTION_TX_PKT,
709     FRAME_ACTION_NUM
710 } ENUM_FRAME_ACTION_T;
711
712
713 typedef enum _ENUM_FRAME_TYPE_IN_CMD_Q_T {
714     FRAME_TYPE_802_1X = 0,
715     FRAME_TYPE_MMPDU,
716     FRAME_TYEP_NUM
717 } ENUM_FRAME_TYPE_IN_CMD_Q_T;
718
719 typedef enum _ENUM_FREE_QUOTA_MODET_T {
720     FREE_QUOTA_UPDATE_MODE_INIT = 0,
721     FREE_QUOTA_UPDATE_MODE_OVERWRITE,
722     FREE_QUOTA_UPDATE_MODE_INCREASE,
723     FREE_QUOTA_UPDATE_MODE_DECREASE
724 } ENUM_FREE_QUOTA_MODET_T, *P_ENUM_FREE_QUOTA_MODET_T;
725
726
727
728 typedef struct _CMD_UPDATE_WMM_PARMS_T {
729     AC_QUE_PARMS_T          arACQueParms[AC_NUM];
730     UINT_8                  ucNetTypeIndex;
731     UINT_8                  fgIsQBSS;
732     UINT_8                  aucReserved[2];
733 } CMD_UPDATE_WMM_PARMS_T, *P_CMD_UPDATE_WMM_PARMS_T;
734
735
736 typedef struct _CMD_TX_AMPDU_T {
737     BOOLEAN          fgEnable;
738     UINT_8           aucReserved[3];
739 } CMD_TX_AMPDU_T, *P_CMD_TX_AMPDU_T;
740
741
742 typedef struct _CMD_ADDBA_REJECT {
743     BOOLEAN          fgEnable;
744     UINT_8           aucReserved[3];
745 } CMD_ADDBA_REJECT_T, *P_CMD_ADDBA_REJECT_T;
746
747 /*******************************************************************************
748 *                            P U B L I C   D A T A
749 ********************************************************************************
750 */
751
752 /*******************************************************************************
753 *                           P R I V A T E   D A T A
754 ********************************************************************************
755 */
756
757 /*******************************************************************************
758 *                                 M A C R O S
759 ********************************************************************************
760 */
761
762 #define QM_TX_SET_NEXT_MSDU_INFO(_prMsduInfoPreceding, _prMsduInfoNext) \
763     ((((_prMsduInfoPreceding)->rQueEntry).prNext) = (P_QUE_ENTRY_T)(_prMsduInfoNext))
764
765 #define QM_TX_SET_NEXT_SW_RFB(_prSwRfbPreceding, _prSwRfbNext) \
766     ((((_prSwRfbPreceding)->rQueEntry).prNext) = (P_QUE_ENTRY_T)(_prSwRfbNext))
767
768
769 #define QM_TX_GET_NEXT_MSDU_INFO(_prMsduInfo) \
770     ((P_MSDU_INFO_T)(((_prMsduInfo)->rQueEntry).prNext))
771
772 #define QM_RX_SET_NEXT_SW_RFB(_prSwRfbPreceding, _prSwRfbNext) \
773     ((((_prSwRfbPreceding)->rQueEntry).prNext) = (P_QUE_ENTRY_T)(_prSwRfbNext))
774
775 #define QM_RX_GET_NEXT_SW_RFB(_prSwRfb) \
776     ((P_SW_RFB_T)(((_prSwRfb)->rQueEntry).prNext))
777
778 #if 0
779 #define QM_GET_STA_REC_PTR_FROM_INDEX(_prAdapter, _ucIndex) \
780     ((((_ucIndex) != STA_REC_INDEX_BMCAST) && ((_ucIndex)!= STA_REC_INDEX_NOT_FOUND)) ?\
781     &(_prAdapter->arStaRec[_ucIndex]): NULL)
782 #endif
783
784 #define QM_GET_STA_REC_PTR_FROM_INDEX(_prAdapter, _ucIndex) \
785     cnmGetStaRecByIndex(_prAdapter,_ucIndex)
786
787
788 #define QM_TX_SET_MSDU_INFO_FOR_DATA_PACKET(\
789                                         _prMsduInfo,\
790                                         _ucTC,\
791                                         _ucPacketType,\
792                                         _ucFormatID,\
793                                         _fgIs802_1x,\
794                                         _fgIs802_11,\
795                                         _u2PalLLH,\
796                                         _u2AclSN,\
797                                         _ucPsForwardingType,\
798                                         _ucPsSessionID\
799                                         ) \
800 {\
801     ASSERT(_prMsduInfo);\
802     (_prMsduInfo)->ucTC                 = (_ucTC);\
803     (_prMsduInfo)->ucPacketType         = (_ucPacketType);\
804     (_prMsduInfo)->ucFormatID           = (_ucFormatID);\
805     (_prMsduInfo)->fgIs802_1x           = (_fgIs802_1x);\
806     (_prMsduInfo)->fgIs802_11           = (_fgIs802_11);\
807     (_prMsduInfo)->u2PalLLH             = (_u2PalLLH);\
808     (_prMsduInfo)->u2AclSN              = (_u2AclSN);\
809     (_prMsduInfo)->ucPsForwardingType   = (_ucPsForwardingType);\
810     (_prMsduInfo)->ucPsSessionID        = (_ucPsSessionID);\
811     (_prMsduInfo)->fgIsBurstEnd         = (FALSE);\
812 }
813
814 #define QM_INIT_STA_REC(\
815     _prStaRec,\
816     _fgIsValid,\
817     _fgIsQoS,\
818     _pucMacAddr\
819     )\
820 {\
821     ASSERT(_prStaRec);\
822     (_prStaRec)->fgIsValid      = (_fgIsValid);\
823     (_prStaRec)->fgIsQoS        = (_fgIsQoS);\
824     (_prStaRec)->fgIsInPS         = FALSE; \
825     (_prStaRec)->ucPsSessionID  = 0xFF;\
826     COPY_MAC_ADDR((_prStaRec)->aucMacAddr,(_pucMacAddr));\
827 }
828
829 #if QM_ADAPTIVE_TC_RESOURCE_CTRL
830 #define QM_GET_TX_QUEUE_LEN(_prAdapter, _u4QueIdx) ((_prAdapter->rQM.au4AverageQueLen[(_u4QueIdx)] >> QM_QUE_LEN_MOVING_AVE_FACTOR))
831 #endif
832
833
834 #define WMM_IE_OUI_TYPE(fp)      (((P_IE_WMM_HDR_T)(fp))->ucOuiType)
835 #define WMM_IE_OUI_SUBTYPE(fp)   (((P_IE_WMM_HDR_T)(fp))->ucOuiSubtype)
836 #define WMM_IE_OUI(fp)           (((P_IE_WMM_HDR_T)(fp))->aucOui)
837
838 #if QM_DEBUG_COUNTER
839 #define QM_DBG_CNT_INC(_prQM, _index) { (_prQM)->au4QmDebugCounters[(_index)]++; }
840 #else
841 #define QM_DBG_CNT_INC(_prQM, _index) {}
842 #endif
843
844
845
846 /*******************************************************************************
847 *                   F U N C T I O N   D E C L A R A T I O N S
848 ********************************************************************************
849 */
850 /*----------------------------------------------------------------------------*/
851 /* Queue Management and STA_REC Initialization                                */
852 /*----------------------------------------------------------------------------*/
853
854 VOID
855 qmInit(
856     IN P_ADAPTER_T  prAdapter
857     );
858
859 #if QM_TEST_MODE
860 VOID
861 qmTestCases(
862     IN P_ADAPTER_T  prAdapter
863     );
864 #endif
865
866 VOID
867 qmActivateStaRec(
868     IN P_ADAPTER_T prAdapter,
869     IN P_STA_RECORD_T  prStaRec
870     );
871
872 VOID
873 qmDeactivateStaRec(
874     IN P_ADAPTER_T prAdapter,
875     IN UINT_32 u4StaRecIdx
876     );
877
878
879 /*----------------------------------------------------------------------------*/
880 /* TX-Related Queue Management                                                */
881 /*----------------------------------------------------------------------------*/
882
883 P_MSDU_INFO_T
884 qmFlushTxQueues(
885     IN P_ADAPTER_T prAdapter
886     );
887
888 P_MSDU_INFO_T
889 qmFlushStaTxQueues(
890     IN P_ADAPTER_T prAdapter,
891     IN UINT_32 u4StaRecIdx
892     );
893
894 P_MSDU_INFO_T
895 qmEnqueueTxPackets(
896     IN P_ADAPTER_T  prAdapter,
897     IN P_MSDU_INFO_T prMsduInfoListHead
898     );
899
900 P_MSDU_INFO_T
901 qmDequeueTxPackets(
902     IN P_ADAPTER_T   prAdapter,
903     IN P_TX_TCQ_STATUS_T prTcqStatus
904     );
905
906 VOID
907 qmAdjustTcQuotas (
908     IN P_ADAPTER_T  prAdapter,
909     OUT P_TX_TCQ_ADJUST_T prTcqAdjust,
910     IN P_TX_TCQ_STATUS_T prTcqStatus
911     );
912
913
914 #if QM_ADAPTIVE_TC_RESOURCE_CTRL
915 VOID
916 qmReassignTcResource(
917     IN P_ADAPTER_T   prAdapter
918     );
919
920 VOID
921 qmUpdateAverageTxQueLen(
922     IN P_ADAPTER_T   prAdapter
923     );
924 #endif
925
926
927 /*----------------------------------------------------------------------------*/
928 /* RX-Related Queue Management                                                */
929 /*----------------------------------------------------------------------------*/
930
931 VOID
932 qmInitRxQueues(
933     IN P_ADAPTER_T   prAdapter
934     );
935
936 P_SW_RFB_T
937 qmFlushRxQueues(
938     IN P_ADAPTER_T  prAdapter
939     );
940
941 P_SW_RFB_T
942 qmHandleRxPackets(
943     IN P_ADAPTER_T   prAdapter,
944     IN P_SW_RFB_T prSwRfbListHead
945     );
946
947 VOID
948 qmProcessPktWithReordering(
949     IN P_ADAPTER_T   prAdapter,
950     IN P_SW_RFB_T prSwRfb,
951     OUT P_QUE_T prReturnedQue
952     );
953
954 VOID
955 qmProcessBarFrame(
956     IN P_ADAPTER_T   prAdapter,
957     IN P_SW_RFB_T prSwRfb,
958     OUT P_QUE_T prReturnedQue
959     );
960
961 VOID
962 qmInsertFallWithinReorderPkt(
963     IN P_SW_RFB_T prSwRfb,
964     IN P_RX_BA_ENTRY_T prReorderQueParm,
965     OUT P_QUE_T prReturnedQue
966     );
967
968 VOID
969 qmInsertFallAheadReorderPkt(
970     IN P_SW_RFB_T prSwRfb,
971     IN P_RX_BA_ENTRY_T prReorderQueParm,
972     OUT P_QUE_T prReturnedQue
973     );
974
975 VOID
976 qmPopOutDueToFallWithin(
977     IN P_RX_BA_ENTRY_T prReorderQueParm,
978     OUT P_QUE_T prReturnedQue
979     );
980
981 VOID
982 qmPopOutDueToFallAhead(
983     IN P_RX_BA_ENTRY_T prReorderQueParm,
984     OUT P_QUE_T prReturnedQue
985     );
986
987
988 VOID
989 qmHandleMailboxRxMessage(
990     IN MAILBOX_MSG_T prMailboxRxMsg
991     );
992
993 BOOLEAN
994 qmCompareSnIsLessThan(
995     IN UINT_32 u4SnLess,
996     IN UINT_32 u4SnGreater
997     );
998
999 VOID
1000 qmHandleEventRxAddBa(
1001     IN P_ADAPTER_T prAdapter,
1002     IN P_WIFI_EVENT_T prEvent
1003     );
1004
1005 VOID
1006 qmHandleEventRxDelBa(
1007     IN P_ADAPTER_T prAdapter,
1008     IN P_WIFI_EVENT_T prEvent
1009     );
1010
1011 P_RX_BA_ENTRY_T
1012 qmLookupRxBaEntry(
1013     IN P_ADAPTER_T prAdapter,
1014     IN UINT_8 ucStaRecIdx,
1015     IN UINT_8 ucTid
1016     );
1017
1018 BOOL
1019 qmAddRxBaEntry(
1020     IN P_ADAPTER_T prAdapter,
1021     IN UINT_8 ucStaRecIdx,
1022     IN UINT_8 ucTid,
1023     IN UINT_16 u2WinStart,
1024     IN UINT_16 u2WinSize
1025     );
1026
1027
1028 VOID
1029 qmDelRxBaEntry(
1030     IN P_ADAPTER_T prAdapter,
1031     IN UINT_8 ucStaRecIdx,
1032     IN UINT_8 ucTid,
1033     IN BOOLEAN fgFlushToHost
1034     );
1035
1036
1037 VOID
1038 mqmProcessAssocRsp (
1039     IN P_ADAPTER_T prAdapter,
1040     IN P_SW_RFB_T  prSwRfb,
1041     IN PUINT_8     pucIE,
1042     IN UINT_16     u2IELength
1043     );
1044
1045 VOID
1046 mqmParseEdcaParameters (
1047     IN P_ADAPTER_T prAdapter,
1048     IN P_SW_RFB_T  prSwRfb,
1049     IN PUINT_8     pucIE,
1050     IN UINT_16     u2IELength,
1051     IN BOOLEAN     fgForceOverride
1052     );
1053
1054 VOID
1055 mqmFillAcQueParam(
1056     IN  P_IE_WMM_PARAM_T prIeWmmParam,
1057     IN  UINT_32 u4AcOffset,
1058     OUT P_AC_QUE_PARMS_T prAcQueParams
1059     );
1060
1061 VOID
1062 mqmProcessScanResult(
1063     IN P_ADAPTER_T prAdapter,
1064     IN P_BSS_DESC_T prScanResult,
1065     OUT P_STA_RECORD_T prStaRec
1066     );
1067
1068
1069 /* Utility function: for deciding STA-REC index */
1070 UINT_8
1071 qmGetStaRecIdx(
1072     IN P_ADAPTER_T                  prAdapter,
1073     IN PUINT_8                      pucEthDestAddr,
1074     IN ENUM_NETWORK_TYPE_INDEX_T    eNetworkType
1075     );
1076
1077 VOID
1078 mqmGenerateWmmInfoIE (
1079     IN P_ADAPTER_T          prAdapter,
1080     IN P_MSDU_INFO_T        prMsduInfo
1081     );
1082
1083 VOID
1084 mqmGenerateWmmParamIE (
1085     IN P_ADAPTER_T          prAdapter,
1086     IN P_MSDU_INFO_T        prMsduInfo
1087     );
1088
1089
1090 ENUM_FRAME_ACTION_T
1091 qmGetFrameAction(
1092     IN P_ADAPTER_T                  prAdapter,
1093     IN ENUM_NETWORK_TYPE_INDEX_T    eNetworkType,
1094     IN UINT_8                       ucStaRecIdx,
1095     IN P_MSDU_INFO_T                prMsduInfo,
1096     IN ENUM_FRAME_TYPE_IN_CMD_Q_T   eFrameType
1097 );
1098
1099 VOID
1100 qmHandleEventBssAbsencePresence(
1101     IN P_ADAPTER_T prAdapter,
1102     IN P_WIFI_EVENT_T prEvent
1103     );
1104
1105 VOID
1106 qmHandleEventStaChangePsMode(
1107     IN P_ADAPTER_T prAdapter,
1108     IN P_WIFI_EVENT_T prEvent
1109     );
1110
1111 VOID
1112 mqmProcessAssocReq (
1113     IN P_ADAPTER_T prAdapter,
1114     IN P_SW_RFB_T  prSwRfb,
1115     IN PUINT_8     pucIE,
1116     IN UINT_16     u2IELength
1117     );
1118
1119 VOID
1120 qmHandleEventStaUpdateFreeQuota(
1121     IN P_ADAPTER_T prAdapter,
1122     IN P_WIFI_EVENT_T prEvent
1123     );
1124
1125     
1126 VOID
1127 qmUpdateFreeQuota(
1128     IN P_ADAPTER_T prAdapter,
1129     IN P_STA_RECORD_T prStaRec,
1130     IN UINT_8 ucUpdateMode, 
1131     IN UINT_8 ucFreeQuota
1132     );
1133
1134 VOID
1135 qmFreeAllByNetType(
1136     IN P_ADAPTER_T prAdapter, 
1137     IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx
1138     );
1139
1140 UINT_32
1141 qmGetRxReorderQueuedBufferCount(
1142         IN P_ADAPTER_T  prAdapter
1143         );
1144    
1145 /*******************************************************************************
1146 *                              F U N C T I O N S
1147 ********************************************************************************
1148 */
1149
1150 #endif /* _QUE_MGT_H */