2 ** $Id: //Department/DaVinci/BRANCHES/MT6620_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.
19 * [WCXRP00000851] [MT6628 Wi-Fi][Driver] Add HIFSYS related definition to driver source tree
20 * add MT6628-specific definitions.
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.
26 * 06 14 2011 eddie.chen
27 * [WCXRP00000753] [MT5931 Wi-Fi][DRV] Adjust QM for MT5931
28 * Change the parameter for WMM pass.
30 * 05 31 2011 eddie.chen
31 * [WCXRP00000753] [MT5931 Wi-Fi][DRV] Adjust QM for MT5931
32 * Fix the QM quota in MT5931.
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.
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..
42 * 04 08 2011 eddie.chen
43 * [WCXRP00000617] [MT6620 Wi-Fi][DRV/FW] Fix for sigma
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.
50 * 03 15 2011 eddie.chen
51 * [WCXRP00000554] [MT6620 Wi-Fi][DRV] Add sw control debug counter
52 * Add sw debug counter for QM.
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
59 * 01 12 2011 eddie.chen
60 * [WCXRP00000322] Add WMM IE in beacon,
62 Add per station flow control when STA is in PS
65 * 1) Check Bss if support QoS before adding WMMIE
66 * 2) Check if support prAdapter->rWifiVar QoS and uapsd in flow control
68 * 12 29 2010 eddie.chen
69 * [WCXRP00000322] Add WMM IE in beacon,
71 Add per station flow control when STA is in PS
74 * 1) PS flow control event
76 * 2) WMM IE in beacon, assoc resp, probe resp
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
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
87 * 09 21 2010 kevin.huang
88 * [WCXRP00000052] [MT6620 Wi-Fi][Driver] Eliminate Linux Compile Warning
89 * Eliminate Linux Compile Warning
91 * 08 04 2010 yarco.yang
93 * Add TX_AMPDU and ADDBA_REJECT command
95 * 07 22 2010 george.huang
97 * Update fgIsQoS information in BSS INFO by CMD
99 * 07 16 2010 yarco.yang
101 * 1. Support BSS Absence/Presence Event
102 * 2. Support STA change PS mode Event
103 * 3. Support BMC forwarding for AP mode.
105 * 07 14 2010 yarco.yang
107 * 1. Remove CFG_MQM_MIGRATION
108 * 2. Add CMD_UPDATE_WMM_PARMS command
110 * 07 13 2010 yarco.yang
113 * [MT6620 and MT5931] SW Migration, add qmGetFrameAction() API for CMD Queue Processing
115 * 07 09 2010 yarco.yang
117 * [MT6620 and MT5931] SW Migration: Add ADDBA support
121 * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
123 * 06 29 2010 yarco.yang
124 * [WPD00003837][MT6620]Data Path Refine
125 * replace g_rQM with Adpater->rQM
128 * [WPD00003833][MT6620 and MT5931] Driver migration
129 * add API in que_mgt to retrieve sta-rec index for security frames.
131 * 06 23 2010 yarco.yang
132 * [WPD00003837][MT6620]Data Path Refine
133 * Merge g_arStaRec[] into adapter->arStaRec[]
135 * 06 21 2010 yarco.yang
136 * [WPD00003837][MT6620]Data Path Refine
137 * Support CFG_MQM_MIGRATION flag
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
144 * [WPD00003833][MT6620 and MT5931] Driver migration
145 * add hem_mbox.c and cnm_mem.h (but disabled some feature) for further migration
147 * 06 06 2010 kevin.huang
148 * [WPD00003832][MT6620 5931] Create driver base
149 * [MT6620 5931] Create driver base
151 * 03 30 2010 tehuang.liu
152 * [WPD00001943]Create WiFi test driver framework on WinXP
153 * Enabled adaptive TC resource control
155 * 03 24 2010 jeffrey.chang
156 * [WPD00003826]Initial import for Linux port
157 * initial import for Linux port
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
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)
167 * 03 11 2010 tehuang.liu
168 * [WPD00001943]Create WiFi test driver framework on WinXP
169 * Fixed buffer leak when processing BAR frames
171 * 02 25 2010 tehuang.liu
172 * [WPD00001943]Create WiFi test driver framework on WinXP
173 * Enabled multi-STA TX path with fairness
175 * 02 24 2010 tehuang.liu
176 * [WPD00001943]Create WiFi test driver framework on WinXP
177 * Enabled dynamically activating and deactivating STA_RECs
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.
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
198 /*******************************************************************************
199 * C O M P I L E R F L A G S
200 ********************************************************************************
203 /*******************************************************************************
204 * E X T E R N A L R E F E R E N C E S
205 ********************************************************************************
208 /*******************************************************************************
210 ********************************************************************************
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 */
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 */
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
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
242 #elif defined(MT5931)
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
251 #elif defined(MT6628)
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
267 #define QM_EXTRA_RESERVED_RESOURCE_WHEN_BUSY 0
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
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 \
284 /* Hard-coded network type for Phase 3: NETWORK_TYPE_AIS/P2P/BOW */
285 #define QM_OPERATING_NETWORK_TYPE NETWORK_TYPE_AIS
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
293 #define QM_DEBUG_COUNTER 0
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
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
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
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)
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)
327 /* WMM Power Saving FLAGS */
328 #define AC_FLAG_TRIGGER_ENABLED BIT(1)
329 #define AC_FLAG_DELIVERY_ENABLED BIT(2)
331 /* WMM-2.2.1 WMM Information Element */
332 #define ELEM_MAX_LEN_WMM_INFO 7
334 /* WMM-2.2.2 WMM Parameter Element */
335 #define ELEM_MAX_LEN_WMM_PARAM 24
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)
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)
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
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
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)
371 #define WMM_ACI(_AC) (_AC << WMM_ACIAIFSN_ACI_OFFSET)
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
378 #define TXM_DEFAULT_FLUSH_QUEUE_GUARD_TIME 0 /* Unit: 64 us */
380 #define QM_RX_BA_ENTRY_MISS_TIMEOUT_MS (1000)
382 /*******************************************************************************
384 ********************************************************************************
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,
438 } ENUM_MAC_TX_QUEUE_INDEX_T;
440 typedef struct _RX_BA_ENTRY_T {
447 /* For identifying the RX BA agreement */
451 BOOLEAN fgIsWaitingForPktWithSsn;
453 //UINT_8 ucTxBufferSize;
454 //BOOL fgIsAcConstrain;
455 //BOOL fgIsBaEnabled;
456 } RX_BA_ENTRY_T, *P_RX_BA_ENTRY_T;
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;
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;
470 typedef struct _QUE_MGT_T{ /* Queue Management Control Info */
472 /* Per-Type Queues: [0] BMCAST or UNKNOWN-STA packets */
473 QUE_T arTxQueue[NUM_OF_PER_TYPE_TX_QUEUES];
476 /* For TX Scheduling */
477 UINT_8 arRemainingTxOppt[NUM_OF_PER_STA_TX_QUEUES];
478 UINT_8 arCurrentTxStaIndex[NUM_OF_PER_STA_TX_QUEUES];
482 /* Reordering Queue Parameters */
483 RX_BA_ENTRY_T arRxBaTable[CFG_NUM_OF_RX_BA_AGREEMENTS];
485 /* Current number of activated RX BA agreements <= CFG_NUM_OF_RX_BA_AGREEMENTS */
490 P_ADAPTER_T prAdapter;
492 #if QM_TEST_FAIR_FORWARDING
493 UINT_32 u4CurrentStaRecIndexToEnqueue;
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];
503 /* The current serving STA with respect to a TC index */
504 UINT_32 au4HeadStaRecIndex [NUM_OF_PER_STA_TX_QUEUES];
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 */
513 UINT_32 u4TimeToAdjustTcResource;
514 UINT_32 u4TimeToUpdateQueLen;
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;
523 UINT_32 au4QmDebugCounters[QM_DBG_CNT_NUM];
525 #if QM_TC_RESOURCE_EMPTY_COUNTER
526 UINT_32 au4QmTcResourceEmptyCounter[NET_TYPE_NUM][TC_NUM];
528 } QUE_MGT_T, *P_QUE_MGT_T;
532 typedef struct _EVENT_RX_ADDBA_T {
535 UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */
538 UINT_8 aucReserved2[2];
540 /* Fields not present in the received ADDBA_REQ */
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 */
549 } EVENT_RX_ADDBA_T, *P_EVENT_RX_ADDBA_T;
551 typedef struct _EVENT_RX_DELBA_T {
554 UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */
557 UINT_8 aucReserved2[2];
559 /* Fields not present in the received ADDBA_REQ */
562 } EVENT_RX_DELBA_T, *P_EVENT_RX_DELBA_T;
565 typedef struct _EVENT_BSS_ABSENCE_PRESENCE_T {
568 UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */
571 UINT_8 aucReserved2[2];
576 UINT_8 ucBssFreeQuota;
577 UINT_8 aucReserved[1];
578 } EVENT_BSS_ABSENCE_PRESENCE_T, *P_EVENT_BSS_ABSENCE_PRESENCE_T;
581 typedef struct _EVENT_STA_CHANGE_PS_MODE_T {
584 UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */
587 UINT_8 aucReserved2[2];
594 } EVENT_STA_CHANGE_PS_MODE_T, *P_EVENT_STA_CHANGE_PS_MODE_T;
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 {
601 UINT_16 u2Reserved1; /* Must be filled with 0x0001 (EVENT Packet) */
604 UINT_8 aucReserved2[2];
610 UINT_8 aucReserved[1];
611 } EVENT_STA_UPDATE_FREE_QUOTA_T, *P_EVENT_STA_UPDATE_FREE_QUOTA_T;
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;
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 */
634 UINT_8 aucOui[3]; /* OUI */
635 UINT_8 ucOuiType; /* OUI Type */
636 UINT_8 ucOuiSubtype; /* OUI Subtype */
637 UINT_8 ucVersion; /* Version */
640 UINT_8 ucQosInfo; /* QoS Info field */
644 UINT_8 ucAciAifsn_BE;
646 UINT_8 aucTxopLimit_BE[2];
648 UINT_8 ucAciAifsn_BG;
650 UINT_8 aucTxopLimit_BG[2];
652 UINT_8 ucAciAifsn_VI;
654 UINT_8 aucTxopLimit_VI[2];
656 UINT_8 ucAciAifsn_VO;
658 UINT_8 aucTxopLimit_VO[2];
660 } IE_WMM_PARAM_T, *P_IE_WMM_PARAM_T;
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 */
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;
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;
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. */
692 } AC_QUE_PARMS_T, *P_AC_QUE_PARMS_T;
694 /* WMM ACI (AC index) */
695 typedef enum _ENUM_WMM_ACI_T {
701 } ENUM_WMM_ACI_T, *P_ENUM_WMM_ACI_T;
704 /* Used for CMD Queue Operation */
705 typedef enum _ENUM_FRAME_ACTION_T {
706 FRAME_ACTION_DROP_PKT = 0,
707 FRAME_ACTION_QUEUE_PKT,
710 } ENUM_FRAME_ACTION_T;
713 typedef enum _ENUM_FRAME_TYPE_IN_CMD_Q_T {
714 FRAME_TYPE_802_1X = 0,
717 } ENUM_FRAME_TYPE_IN_CMD_Q_T;
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;
728 typedef struct _CMD_UPDATE_WMM_PARMS_T {
729 AC_QUE_PARMS_T arACQueParms[AC_NUM];
730 UINT_8 ucNetTypeIndex;
732 UINT_8 aucReserved[2];
733 } CMD_UPDATE_WMM_PARMS_T, *P_CMD_UPDATE_WMM_PARMS_T;
736 typedef struct _CMD_TX_AMPDU_T {
738 UINT_8 aucReserved[3];
739 } CMD_TX_AMPDU_T, *P_CMD_TX_AMPDU_T;
742 typedef struct _CMD_ADDBA_REJECT {
744 UINT_8 aucReserved[3];
745 } CMD_ADDBA_REJECT_T, *P_CMD_ADDBA_REJECT_T;
747 /*******************************************************************************
748 * P U B L I C D A T A
749 ********************************************************************************
752 /*******************************************************************************
753 * P R I V A T E D A T A
754 ********************************************************************************
757 /*******************************************************************************
759 ********************************************************************************
762 #define QM_TX_SET_NEXT_MSDU_INFO(_prMsduInfoPreceding, _prMsduInfoNext) \
763 ((((_prMsduInfoPreceding)->rQueEntry).prNext) = (P_QUE_ENTRY_T)(_prMsduInfoNext))
765 #define QM_TX_SET_NEXT_SW_RFB(_prSwRfbPreceding, _prSwRfbNext) \
766 ((((_prSwRfbPreceding)->rQueEntry).prNext) = (P_QUE_ENTRY_T)(_prSwRfbNext))
769 #define QM_TX_GET_NEXT_MSDU_INFO(_prMsduInfo) \
770 ((P_MSDU_INFO_T)(((_prMsduInfo)->rQueEntry).prNext))
772 #define QM_RX_SET_NEXT_SW_RFB(_prSwRfbPreceding, _prSwRfbNext) \
773 ((((_prSwRfbPreceding)->rQueEntry).prNext) = (P_QUE_ENTRY_T)(_prSwRfbNext))
775 #define QM_RX_GET_NEXT_SW_RFB(_prSwRfb) \
776 ((P_SW_RFB_T)(((_prSwRfb)->rQueEntry).prNext))
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)
784 #define QM_GET_STA_REC_PTR_FROM_INDEX(_prAdapter, _ucIndex) \
785 cnmGetStaRecByIndex(_prAdapter,_ucIndex)
788 #define QM_TX_SET_MSDU_INFO_FOR_DATA_PACKET(\
797 _ucPsForwardingType,\
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);\
814 #define QM_INIT_STA_REC(\
822 (_prStaRec)->fgIsValid = (_fgIsValid);\
823 (_prStaRec)->fgIsQoS = (_fgIsQoS);\
824 (_prStaRec)->fgIsInPS = FALSE; \
825 (_prStaRec)->ucPsSessionID = 0xFF;\
826 COPY_MAC_ADDR((_prStaRec)->aucMacAddr,(_pucMacAddr));\
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))
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)
839 #define QM_DBG_CNT_INC(_prQM, _index) { (_prQM)->au4QmDebugCounters[(_index)]++; }
841 #define QM_DBG_CNT_INC(_prQM, _index) {}
846 /*******************************************************************************
847 * F U N C T I O N D E C L A R A T I O N S
848 ********************************************************************************
850 /*----------------------------------------------------------------------------*/
851 /* Queue Management and STA_REC Initialization */
852 /*----------------------------------------------------------------------------*/
856 IN P_ADAPTER_T prAdapter
862 IN P_ADAPTER_T prAdapter
868 IN P_ADAPTER_T prAdapter,
869 IN P_STA_RECORD_T prStaRec
874 IN P_ADAPTER_T prAdapter,
875 IN UINT_32 u4StaRecIdx
879 /*----------------------------------------------------------------------------*/
880 /* TX-Related Queue Management */
881 /*----------------------------------------------------------------------------*/
885 IN P_ADAPTER_T prAdapter
890 IN P_ADAPTER_T prAdapter,
891 IN UINT_32 u4StaRecIdx
896 IN P_ADAPTER_T prAdapter,
897 IN P_MSDU_INFO_T prMsduInfoListHead
902 IN P_ADAPTER_T prAdapter,
903 IN P_TX_TCQ_STATUS_T prTcqStatus
908 IN P_ADAPTER_T prAdapter,
909 OUT P_TX_TCQ_ADJUST_T prTcqAdjust,
910 IN P_TX_TCQ_STATUS_T prTcqStatus
914 #if QM_ADAPTIVE_TC_RESOURCE_CTRL
916 qmReassignTcResource(
917 IN P_ADAPTER_T prAdapter
921 qmUpdateAverageTxQueLen(
922 IN P_ADAPTER_T prAdapter
927 /*----------------------------------------------------------------------------*/
928 /* RX-Related Queue Management */
929 /*----------------------------------------------------------------------------*/
933 IN P_ADAPTER_T prAdapter
938 IN P_ADAPTER_T prAdapter
943 IN P_ADAPTER_T prAdapter,
944 IN P_SW_RFB_T prSwRfbListHead
948 qmProcessPktWithReordering(
949 IN P_ADAPTER_T prAdapter,
950 IN P_SW_RFB_T prSwRfb,
951 OUT P_QUE_T prReturnedQue
956 IN P_ADAPTER_T prAdapter,
957 IN P_SW_RFB_T prSwRfb,
958 OUT P_QUE_T prReturnedQue
962 qmInsertFallWithinReorderPkt(
963 IN P_SW_RFB_T prSwRfb,
964 IN P_RX_BA_ENTRY_T prReorderQueParm,
965 OUT P_QUE_T prReturnedQue
969 qmInsertFallAheadReorderPkt(
970 IN P_SW_RFB_T prSwRfb,
971 IN P_RX_BA_ENTRY_T prReorderQueParm,
972 OUT P_QUE_T prReturnedQue
976 qmPopOutDueToFallWithin(
977 IN P_RX_BA_ENTRY_T prReorderQueParm,
978 OUT P_QUE_T prReturnedQue
982 qmPopOutDueToFallAhead(
983 IN P_RX_BA_ENTRY_T prReorderQueParm,
984 OUT P_QUE_T prReturnedQue
989 qmHandleMailboxRxMessage(
990 IN MAILBOX_MSG_T prMailboxRxMsg
994 qmCompareSnIsLessThan(
996 IN UINT_32 u4SnGreater
1000 qmHandleEventRxAddBa(
1001 IN P_ADAPTER_T prAdapter,
1002 IN P_WIFI_EVENT_T prEvent
1006 qmHandleEventRxDelBa(
1007 IN P_ADAPTER_T prAdapter,
1008 IN P_WIFI_EVENT_T prEvent
1013 IN P_ADAPTER_T prAdapter,
1014 IN UINT_8 ucStaRecIdx,
1020 IN P_ADAPTER_T prAdapter,
1021 IN UINT_8 ucStaRecIdx,
1023 IN UINT_16 u2WinStart,
1024 IN UINT_16 u2WinSize
1030 IN P_ADAPTER_T prAdapter,
1031 IN UINT_8 ucStaRecIdx,
1033 IN BOOLEAN fgFlushToHost
1038 mqmProcessAssocRsp (
1039 IN P_ADAPTER_T prAdapter,
1040 IN P_SW_RFB_T prSwRfb,
1042 IN UINT_16 u2IELength
1046 mqmParseEdcaParameters (
1047 IN P_ADAPTER_T prAdapter,
1048 IN P_SW_RFB_T prSwRfb,
1050 IN UINT_16 u2IELength,
1051 IN BOOLEAN fgForceOverride
1056 IN P_IE_WMM_PARAM_T prIeWmmParam,
1057 IN UINT_32 u4AcOffset,
1058 OUT P_AC_QUE_PARMS_T prAcQueParams
1062 mqmProcessScanResult(
1063 IN P_ADAPTER_T prAdapter,
1064 IN P_BSS_DESC_T prScanResult,
1065 OUT P_STA_RECORD_T prStaRec
1069 /* Utility function: for deciding STA-REC index */
1072 IN P_ADAPTER_T prAdapter,
1073 IN PUINT_8 pucEthDestAddr,
1074 IN ENUM_NETWORK_TYPE_INDEX_T eNetworkType
1078 mqmGenerateWmmInfoIE (
1079 IN P_ADAPTER_T prAdapter,
1080 IN P_MSDU_INFO_T prMsduInfo
1084 mqmGenerateWmmParamIE (
1085 IN P_ADAPTER_T prAdapter,
1086 IN P_MSDU_INFO_T prMsduInfo
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
1100 qmHandleEventBssAbsencePresence(
1101 IN P_ADAPTER_T prAdapter,
1102 IN P_WIFI_EVENT_T prEvent
1106 qmHandleEventStaChangePsMode(
1107 IN P_ADAPTER_T prAdapter,
1108 IN P_WIFI_EVENT_T prEvent
1112 mqmProcessAssocReq (
1113 IN P_ADAPTER_T prAdapter,
1114 IN P_SW_RFB_T prSwRfb,
1116 IN UINT_16 u2IELength
1120 qmHandleEventStaUpdateFreeQuota(
1121 IN P_ADAPTER_T prAdapter,
1122 IN P_WIFI_EVENT_T prEvent
1128 IN P_ADAPTER_T prAdapter,
1129 IN P_STA_RECORD_T prStaRec,
1130 IN UINT_8 ucUpdateMode,
1131 IN UINT_8 ucFreeQuota
1136 IN P_ADAPTER_T prAdapter,
1137 IN ENUM_NETWORK_TYPE_INDEX_T eNetworkTypeIdx
1141 qmGetRxReorderQueuedBufferCount(
1142 IN P_ADAPTER_T prAdapter
1145 /*******************************************************************************
1147 ********************************************************************************
1150 #endif /* _QUE_MGT_H */