2 ** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/nic/que_mgt.h#1 $
6 \brief TX/RX queues management header file
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.
13 /*******************************************************************************
14 * Copyright (c) 2007 MediaTek Inc.
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
20 ********************************************************************************
23 /*******************************************************************************
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.
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.
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
52 ********************************************************************************
59 * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree
60 * add MT6628-specific definitions.
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.
66 * 06 14 2011 eddie.chen
67 * [WCXRP00000753] [MT5931 Wi-Fi][DRV] Adjust QM for MT5931
68 * Change the parameter for WMM pass.
70 * 05 31 2011 eddie.chen
71 * [WCXRP00000753] [MT5931 Wi-Fi][DRV] Adjust QM for MT5931
72 * Fix the QM quota in MT5931.
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.
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..
82 * 04 08 2011 eddie.chen
83 * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma
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.
90 * 03 15 2011 eddie.chen
91 * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter
92 * Add sw debug counter for QM.
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
99 * 01 12 2011 eddie.chen
100 * [WCXRP00000322] Add WMM IE in beacon,
102 Add per station flow control when STA is in PS
105 * 1) Check Bss if support QoS before adding WMMIE
106 * 2) Check if support prAdapter->rWifiVar QoS and uapsd in flow control
108 * 12 29 2010 eddie.chen
109 * [WCXRP00000322] Add WMM IE in beacon,
111 Add per station flow control when STA is in PS
114 * 1) PS flow control event
116 * 2) WMM IE in beacon, assoc resp, probe resp
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
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
127 * 09 21 2010 kevin.huang
128 * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning
129 * Eliminate Linux Compile Warning
131 * 08 04 2010 yarco.yang
133 * Add TX_AMPDU and ADDBA_REJECT command
135 * 07 22 2010 george.huang
137 * Update fgIsQoS information in BSS INFO by CMD
139 * 07 16 2010 yarco.yang
141 * 1. Support BSS Absence/Presence Event
142 * 2. Support STA change PS mode Event
143 * 3. Support BMC forwarding for AP mode.
145 * 07 14 2010 yarco.yang
147 * 1. Remove CFG_MQM_MIGRATION
148 * 2. Add CMD_UPDATE_WMM_PARMS command
150 * 07 13 2010 yarco.yang
153 * [MT6620 and MT5931] SW Migration, add qmGetFrameAction() API for CMD Queue Processing
155 * 07 09 2010 yarco.yang
157 * [MT6620 and MT5931] SW Migration: Add ADDBA support
161 * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
163 * 06 29 2010 yarco.yang
164 * [WPD00003837][MT6620]Data Path Refine
165 * replace g_rQM with Adpater->rQM
168 * [WPD00003833][MT6620 and MT5931] Driver migration
169 * add API in que_mgt to retrieve sta-rec index for security frames.
171 * 06 23 2010 yarco.yang
172 * [WPD00003837][MT6620]Data Path Refine
173 * Merge g_arStaRec[] into adapter->arStaRec[]
175 * 06 21 2010 yarco.yang
176 * [WPD00003837][MT6620]Data Path Refine
177 * Support CFG_MQM_MIGRATION flag
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
184 * [WPD00003833][MT6620 and MT5931] Driver migration
185 * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration
187 * 06 06 2010 kevin.huang
188 * [WPD00003832][MT6620 5931] Create driver base
189 * [MT6620 5931] Create driver base
191 * 03 30 2010 tehuang.liu
192 * [WPD00001943]Create WiFi test driver framework on WinXP
193 * Enabled adaptive TC resource control
195 * 03 24 2010 jeffrey.chang
196 * [WPD00003826]Initial import for Linux port
197 * initial import for Linux port
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
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)
207 * 03 11 2010 tehuang.liu
208 * [WPD00001943]Create WiFi test driver framework on WinXP
209 * Fixed buffer leak when processing BAR frames
211 * 02 25 2010 tehuang.liu
212 * [WPD00001943]Create WiFi test driver framework on WinXP
213 * Enabled multi-STA TX path with fairness
215 * 02 24 2010 tehuang.liu
216 * [WPD00001943]Create WiFi test driver framework on WinXP
217 * Enabled dynamically activating and deactivating STA_RECs
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.
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
238 /*******************************************************************************
239 * C O M P I L E R F L A G S
240 ********************************************************************************
243 /*******************************************************************************
244 * E X T E R N A L R E F E R E N C E S
245 ********************************************************************************
248 /*******************************************************************************
250 ********************************************************************************
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 */
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 */
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
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
281 #elif defined(MT5931)
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
290 #elif defined(MT6628)
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
306 #define QM_EXTRA_RESERVED_RESOURCE_WHEN_BUSY 0
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
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 \
323 /* Hard-coded network type for Phase 3: NETWORK_TYPE_AIS/P2P/BOW */
324 #define QM_OPERATING_NETWORK_TYPE NETWORK_TYPE_AIS
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
332 #define QM_DEBUG_COUNTER 0
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
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
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
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)
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)
366 /* WMM Power Saving FLAGS */
367 #define AC_FLAG_TRIGGER_ENABLED BIT(1)
368 #define AC_FLAG_DELIVERY_ENABLED BIT(2)
370 /* WMM-2.2.1 WMM Information Element */
371 #define ELEM_MAX_LEN_WMM_INFO 7
373 /* WMM-2.2.2 WMM Parameter Element */
374 #define ELEM_MAX_LEN_WMM_PARAM 24
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)
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)
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
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
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)
410 #define WMM_ACI(_AC) (_AC << WMM_ACIAIFSN_ACI_OFFSET)
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
417 #define TXM_DEFAULT_FLUSH_QUEUE_GUARD_TIME 0 /* Unit: 64 us */
419 #define QM_RX_BA_ENTRY_MISS_TIMEOUT_MS (1000)
421 /*******************************************************************************
423 ********************************************************************************
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,
477 } ENUM_MAC_TX_QUEUE_INDEX_T;
479 typedef struct _RX_BA_ENTRY_T {
486 /* For identifying the RX BA agreement */
490 BOOLEAN fgIsWaitingForPktWithSsn;
492 //UINT_8 ucTxBufferSize;
493 //BOOL fgIsAcConstrain;
494 //BOOL fgIsBaEnabled;
495 } RX_BA_ENTRY_T, *P_RX_BA_ENTRY_T;
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;
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;
509 typedef struct _QUE_MGT_T{ /* Queue Management Control Info */
511 /* Per-Type Queues: [0] BMCAST or UNKNOWN-STA packets */
512 QUE_T arTxQueue[NUM_OF_PER_TYPE_TX_QUEUES];
515 /* For TX Scheduling */
516 UINT_8 arRemainingTxOppt[NUM_OF_PER_STA_TX_QUEUES];
517 UINT_8 arCurrentTxStaIndex[NUM_OF_PER_STA_TX_QUEUES];
521 /* Reordering Queue Parameters */
522 RX_BA_ENTRY_T arRxBaTable[CFG_NUM_OF_RX_BA_AGREEMENTS];
524 /* Current number of activated RX BA agreements <= CFG_NUM_OF_RX_BA_AGREEMENTS */
529 P_ADAPTER_T prAdapter;
531 #if QM_TEST_FAIR_FORWARDING
532 UINT_32 u4CurrentStaRecIndexToEnqueue;
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];
542 /* The current serving STA with respect to a TC index */
543 UINT_32 au4HeadStaRecIndex [NUM_OF_PER_STA_TX_QUEUES];
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 */
552 UINT_32 u4TimeToAdjustTcResource;
553 UINT_32 u4TimeToUpdateQueLen;
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;
562 UINT_32 au4QmDebugCounters[QM_DBG_CNT_NUM];
568 } QUE_MGT_T, *P_QUE_MGT_T;
572 typedef struct _EVENT_RX_ADDBA_T {
575 UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */
578 UINT_8 aucReserved2[2];
580 /* Fields not present in the received ADDBA_REQ */
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 */
589 } EVENT_RX_ADDBA_T, *P_EVENT_RX_ADDBA_T;
591 typedef struct _EVENT_RX_DELBA_T {
594 UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */
597 UINT_8 aucReserved2[2];
599 /* Fields not present in the received ADDBA_REQ */
602 } EVENT_RX_DELBA_T, *P_EVENT_RX_DELBA_T;
605 typedef struct _EVENT_BSS_ABSENCE_PRESENCE_T {
608 UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */
611 UINT_8 aucReserved2[2];
616 UINT_8 ucBssFreeQuota;
617 UINT_8 aucReserved[1];
618 } EVENT_BSS_ABSENCE_PRESENCE_T, *P_EVENT_BSS_ABSENCE_PRESENCE_T;
621 typedef struct _EVENT_STA_CHANGE_PS_MODE_T {
624 UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */
627 UINT_8 aucReserved2[2];
634 } EVENT_STA_CHANGE_PS_MODE_T, *P_EVENT_STA_CHANGE_PS_MODE_T;
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 {
641 UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */
644 UINT_8 aucReserved2[2];
650 UINT_8 aucReserved[1];
651 } EVENT_STA_UPDATE_FREE_QUOTA_T, *P_EVENT_STA_UPDATE_FREE_QUOTA_T;
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;
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 */
674 UINT_8 aucOui[3]; /* OUI */
675 UINT_8 ucOuiType; /* OUI Type */
676 UINT_8 ucOuiSubtype; /* OUI Subtype */
677 UINT_8 ucVersion; /* Version */
680 UINT_8 ucQosInfo; /* QoS Info field */
684 UINT_8 ucAciAifsn_BE;
686 UINT_8 aucTxopLimit_BE[2];
688 UINT_8 ucAciAifsn_BG;
690 UINT_8 aucTxopLimit_BG[2];
692 UINT_8 ucAciAifsn_VI;
694 UINT_8 aucTxopLimit_VI[2];
696 UINT_8 ucAciAifsn_VO;
698 UINT_8 aucTxopLimit_VO[2];
700 } IE_WMM_PARAM_T, *P_IE_WMM_PARAM_T;
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 */
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;
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;
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. */
732 } AC_QUE_PARMS_T, *P_AC_QUE_PARMS_T;
734 /* WMM ACI (AC index) */
735 typedef enum _ENUM_WMM_ACI_T {
741 } ENUM_WMM_ACI_T, *P_ENUM_WMM_ACI_T;
744 /* Used for CMD Queue Operation */
745 typedef enum _ENUM_FRAME_ACTION_T {
746 FRAME_ACTION_DROP_PKT = 0,
747 FRAME_ACTION_QUEUE_PKT,
750 } ENUM_FRAME_ACTION_T;
753 typedef enum _ENUM_FRAME_TYPE_IN_CMD_Q_T {
754 FRAME_TYPE_802_1X = 0,
757 } ENUM_FRAME_TYPE_IN_CMD_Q_T;
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;
768 typedef struct _CMD_UPDATE_WMM_PARMS_T {
769 AC_QUE_PARMS_T arACQueParms[AC_NUM];
770 UINT_8 ucNetTypeIndex;
772 UINT_8 aucReserved[2];
773 } CMD_UPDATE_WMM_PARMS_T, *P_CMD_UPDATE_WMM_PARMS_T;
776 typedef struct _CMD_TX_AMPDU_T {
778 UINT_8 aucReserved[3];
779 } CMD_TX_AMPDU_T, *P_CMD_TX_AMPDU_T;
782 typedef struct _CMD_ADDBA_REJECT {
784 UINT_8 aucReserved[3];
785 } CMD_ADDBA_REJECT_T, *P_CMD_ADDBA_REJECT_T;
787 /*******************************************************************************
788 * P U B L I C D A T A
789 ********************************************************************************
792 /*******************************************************************************
793 * P R I V A T E D A T A
794 ********************************************************************************
797 /*******************************************************************************
799 ********************************************************************************
802 #define QM_TX_SET_NEXT_MSDU_INFO(_prMsduInfoPreceding, _prMsduInfoNext) \
803 ((((_prMsduInfoPreceding)->rQueEntry).prNext) = (P_QUE_ENTRY_T)(_prMsduInfoNext))
805 #define QM_TX_SET_NEXT_SW_RFB(_prSwRfbPreceding, _prSwRfbNext) \
806 ((((_prSwRfbPreceding)->rQueEntry).prNext) = (P_QUE_ENTRY_T)(_prSwRfbNext))
809 #define QM_TX_GET_NEXT_MSDU_INFO(_prMsduInfo) \
810 ((P_MSDU_INFO_T)(((_prMsduInfo)->rQueEntry).prNext))
812 #define QM_RX_SET_NEXT_SW_RFB(_prSwRfbPreceding, _prSwRfbNext) \
813 ((((_prSwRfbPreceding)->rQueEntry).prNext) = (P_QUE_ENTRY_T)(_prSwRfbNext))
815 #define QM_RX_GET_NEXT_SW_RFB(_prSwRfb) \
816 ((P_SW_RFB_T)(((_prSwRfb)->rQueEntry).prNext))
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)
824 #define QM_GET_STA_REC_PTR_FROM_INDEX(_prAdapter, _ucIndex) \
825 cnmGetStaRecByIndex(_prAdapter,_ucIndex)
828 #define QM_TX_SET_MSDU_INFO_FOR_DATA_PACKET(\
837 _ucPsForwardingType,\
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);\
854 #define QM_INIT_STA_REC(\
862 (_prStaRec)->fgIsValid = (_fgIsValid);\
863 (_prStaRec)->fgIsQoS = (_fgIsQoS);\
864 (_prStaRec)->fgIsInPS = FALSE; \
865 (_prStaRec)->ucPsSessionID = 0xFF;\
866 COPY_MAC_ADDR((_prStaRec)->aucMacAddr,(_pucMacAddr));\
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))
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)
879 #define QM_DBG_CNT_INC(_prQM, _index) { (_prQM)->au4QmDebugCounters[(_index)]++; }
881 #define QM_DBG_CNT_INC(_prQM, _index) {}
886 /*******************************************************************************
887 * F U N C T I O N D E C L A R A T I O N S
888 ********************************************************************************
890 /*----------------------------------------------------------------------------*/
891 /* Queue Management and STA_REC Initialization */
892 /*----------------------------------------------------------------------------*/
896 IN P_ADAPTER_T prAdapter
902 IN P_ADAPTER_T prAdapter
908 IN P_ADAPTER_T prAdapter,
909 IN P_STA_RECORD_T prStaRec
914 IN P_ADAPTER_T prAdapter,
915 IN UINT_32 u4StaRecIdx
919 /*----------------------------------------------------------------------------*/
920 /* TX-Related Queue Management */
921 /*----------------------------------------------------------------------------*/
925 IN P_ADAPTER_T prAdapter
930 IN P_ADAPTER_T prAdapter,
931 IN UINT_32 u4StaRecIdx
936 IN P_ADAPTER_T prAdapter,
937 IN P_MSDU_INFO_T prMsduInfoListHead
942 IN P_ADAPTER_T prAdapter,
943 IN P_TX_TCQ_STATUS_T prTcqStatus
948 IN P_ADAPTER_T prAdapter,
949 OUT P_TX_TCQ_ADJUST_T prTcqAdjust,
950 IN P_TX_TCQ_STATUS_T prTcqStatus
954 #if QM_ADAPTIVE_TC_RESOURCE_CTRL
956 qmReassignTcResource(
957 IN P_ADAPTER_T prAdapter
961 qmUpdateAverageTxQueLen(
962 IN P_ADAPTER_T prAdapter
967 /*----------------------------------------------------------------------------*/
968 /* RX-Related Queue Management */
969 /*----------------------------------------------------------------------------*/
973 IN P_ADAPTER_T prAdapter
978 IN P_ADAPTER_T prAdapter
983 IN P_ADAPTER_T prAdapter,
984 IN P_SW_RFB_T prSwRfbListHead
988 qmProcessPktWithReordering(
989 IN P_ADAPTER_T prAdapter,
990 IN P_SW_RFB_T prSwRfb,
991 OUT P_QUE_T prReturnedQue
996 IN P_ADAPTER_T prAdapter,
997 IN P_SW_RFB_T prSwRfb,
998 OUT P_QUE_T prReturnedQue
1002 qmInsertFallWithinReorderPkt(
1003 IN P_SW_RFB_T prSwRfb,
1004 IN P_RX_BA_ENTRY_T prReorderQueParm,
1005 OUT P_QUE_T prReturnedQue
1009 qmInsertFallAheadReorderPkt(
1010 IN P_SW_RFB_T prSwRfb,
1011 IN P_RX_BA_ENTRY_T prReorderQueParm,
1012 OUT P_QUE_T prReturnedQue
1016 qmPopOutDueToFallWithin(
1017 IN P_RX_BA_ENTRY_T prReorderQueParm,
1018 OUT P_QUE_T prReturnedQue
1022 qmPopOutDueToFallAhead(
1023 IN P_RX_BA_ENTRY_T prReorderQueParm,
1024 OUT P_QUE_T prReturnedQue
1029 qmHandleMailboxRxMessage(
1030 IN MAILBOX_MSG_T prMailboxRxMsg
1034 qmCompareSnIsLessThan(
1035 IN UINT_32 u4SnLess,
1036 IN UINT_32 u4SnGreater
1040 qmHandleEventRxAddBa(
1041 IN P_ADAPTER_T prAdapter,
1042 IN P_WIFI_EVENT_T prEvent
1046 qmHandleEventRxDelBa(
1047 IN P_ADAPTER_T prAdapter,
1048 IN P_WIFI_EVENT_T prEvent
1053 IN P_ADAPTER_T prAdapter,
1054 IN UINT_8 ucStaRecIdx,
1060 IN P_ADAPTER_T prAdapter,
1061 IN UINT_8 ucStaRecIdx,
1063 IN UINT_16 u2WinStart,
1064 IN UINT_16 u2WinSize
1070 IN P_ADAPTER_T prAdapter,
1071 IN UINT_8 ucStaRecIdx,
1073 IN BOOLEAN fgFlushToHost
1078 mqmProcessAssocRsp (
1079 IN P_ADAPTER_T prAdapter,
1080 IN P_SW_RFB_T prSwRfb,
1082 IN UINT_16 u2IELength
1086 mqmParseEdcaParameters (
1087 IN P_ADAPTER_T prAdapter,
1088 IN P_SW_RFB_T prSwRfb,
1090 IN UINT_16 u2IELength,
1091 IN BOOLEAN fgForceOverride
1096 IN P_IE_WMM_PARAM_T prIeWmmParam,
1097 IN UINT_32 u4AcOffset,
1098 OUT P_AC_QUE_PARMS_T prAcQueParams
1102 mqmProcessScanResult(
1103 IN P_ADAPTER_T prAdapter,
1104 IN P_BSS_DESC_T prScanResult,
1105 OUT P_STA_RECORD_T prStaRec
1109 /* Utility function: for deciding STA-REC index */
1112 IN P_ADAPTER_T prAdapter,
1113 IN PUINT_8 pucEthDestAddr,
1114 IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType
1118 mqmGenerateWmmInfoIE (
1119 IN P_ADAPTER_T prAdapter,
1120 IN P_MSDU_INFO_T prMsduInfo
1124 mqmGenerateWmmParamIE (
1125 IN P_ADAPTER_T prAdapter,
1126 IN P_MSDU_INFO_T prMsduInfo
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
1140 qmHandleEventBssAbsencePresence(
1141 IN P_ADAPTER_T prAdapter,
1142 IN P_WIFI_EVENT_T prEvent
1146 qmHandleEventStaChangePsMode(
1147 IN P_ADAPTER_T prAdapter,
1148 IN P_WIFI_EVENT_T prEvent
1152 mqmProcessAssocReq (
1153 IN P_ADAPTER_T prAdapter,
1154 IN P_SW_RFB_T prSwRfb,
1156 IN UINT_16 u2IELength
1160 qmHandleEventStaUpdateFreeQuota(
1161 IN P_ADAPTER_T prAdapter,
1162 IN P_WIFI_EVENT_T prEvent
1168 IN P_ADAPTER_T prAdapter,
1169 IN P_STA_RECORD_T prStaRec,
1170 IN UINT_8 ucUpdateMode,
1171 IN UINT_8 ucFreeQuota
1176 IN P_ADAPTER_T prAdapter,
1177 IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx
1181 qmGetRxReorderQueuedBufferCount(
1182 IN P_ADAPTER_T prAdapter
1185 /*******************************************************************************
1187 ********************************************************************************
1190 #endif /* _QUE_MGT_H */