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