rtl819x_Qos.h revision 50a09b3b099ebc8326b85b4f508fb47655e1fed3
1#ifndef __INC_QOS_TYPE_H 2#define __INC_QOS_TYPE_H 3 4//#include "EndianFree.h" 5#define BIT0 0x00000001 6#define BIT1 0x00000002 7#define BIT2 0x00000004 8#define BIT3 0x00000008 9#define BIT4 0x00000010 10#define BIT5 0x00000020 11#define BIT6 0x00000040 12#define BIT7 0x00000080 13#define BIT8 0x00000100 14#define BIT9 0x00000200 15#define BIT10 0x00000400 16#define BIT11 0x00000800 17#define BIT12 0x00001000 18#define BIT13 0x00002000 19#define BIT14 0x00004000 20#define BIT15 0x00008000 21#define BIT16 0x00010000 22#define BIT17 0x00020000 23#define BIT18 0x00040000 24#define BIT19 0x00080000 25#define BIT20 0x00100000 26#define BIT21 0x00200000 27#define BIT22 0x00400000 28#define BIT23 0x00800000 29#define BIT24 0x01000000 30#define BIT25 0x02000000 31#define BIT26 0x04000000 32#define BIT27 0x08000000 33#define BIT28 0x10000000 34#define BIT29 0x20000000 35#define BIT30 0x40000000 36#define BIT31 0x80000000 37 38#define MAX_WMMELE_LENGTH 64 39 40// 41// QoS mode. 42// enum 0, 1, 2, 4: since we can use the OR(|) operation. 43// 44// QOS_MODE is redefined for enum can't be ++, | under C++ compiler, 2006.05.17, by rcnjko. 45//typedef enum _QOS_MODE{ 46// QOS_DISABLE = 0, 47// QOS_WMM = 1, 48// QOS_EDCA = 2, 49// QOS_HCCA = 4, 50//}QOS_MODE,*PQOS_MODE; 51// 52typedef u32 QOS_MODE, *PQOS_MODE; 53#define QOS_DISABLE 0 54#define QOS_WMM 1 55#define QOS_WMMSA 2 56#define QOS_EDCA 4 57#define QOS_HCCA 8 58#define QOS_WMM_UAPSD 16 //WMM Power Save, 2006-06-14 Isaiah 59 60#define AC_PARAM_SIZE 4 61#define WMM_PARAM_ELE_BODY_LEN 18 62 63// 64// QoS ACK Policy Field Values 65// Ref: WMM spec 2.1.6: QoS Control Field, p.10. 66// 67typedef enum _ACK_POLICY{ 68 eAckPlc0_ACK = 0x00, 69 eAckPlc1_NoACK = 0x01, 70}ACK_POLICY,*PACK_POLICY; 71 72#define WMM_PARAM_ELEMENT_SIZE (8+(4*AC_PARAM_SIZE)) 73 74// 75// QoS Control Field 76// Ref: 77// 1. WMM spec 2.1.6: QoS Control Field, p.9. 78// 2. 802.11e/D13.0 7.1.3.5, p.26. 79// 80typedef union _QOS_CTRL_FIELD{ 81 u8 charData[2]; 82 u16 shortData; 83 84 // WMM spec 85 struct 86 { 87 u8 UP:3; 88 u8 usRsvd1:1; 89 u8 EOSP:1; 90 u8 AckPolicy:2; 91 u8 usRsvd2:1; 92 u8 ucRsvdByte; 93 }WMM; 94 95 // 802.11e: QoS data type frame sent by non-AP QSTAs. 96 struct 97 { 98 u8 TID:4; 99 u8 bIsQsize:1;// 0: BIT[8:15] is TXOP Duration Requested, 1: BIT[8:15] is Queue Size. 100 u8 AckPolicy:2; 101 u8 usRsvd:1; 102 u8 TxopOrQsize; // (BIT4=0)TXOP Duration Requested or (BIT4=1)Queue Size. 103 }BySta; 104 105 // 802.11e: QoS data, QoS Null, and QoS Data+CF-Ack frames sent by HC. 106 struct 107 { 108 u8 TID:4; 109 u8 EOSP:1; 110 u8 AckPolicy:2; 111 u8 usRsvd:1; 112 u8 PSBufState; // QAP PS Buffer State. 113 }ByHc_Data; 114 115 // 802.11e: QoS (+) CF-Poll frames sent by HC. 116 struct 117 { 118 u8 TID:4; 119 u8 EOSP:1; 120 u8 AckPolicy:2; 121 u8 usRsvd:1; 122 u8 TxopLimit; // TXOP Limit. 123 }ByHc_CFP; 124 125}QOS_CTRL_FIELD, *PQOS_CTRL_FIELD; 126 127 128// 129// QoS Info Field 130// Ref: 131// 1. WMM spec 2.2.1: WME Information Element, p.11. 132// 2. 8185 QoS code: QOS_INFO [def. in QoS_mp.h] 133// 134typedef union _QOS_INFO_FIELD{ 135 u8 charData; 136 137 struct 138 { 139 u8 ucParameterSetCount:4; 140 u8 ucReserved:4; 141 }WMM; 142 143 struct 144 { 145 //Ref WMM_Specification_1-1.pdf, 2006-06-13 Isaiah 146 u8 ucAC_VO_UAPSD:1; 147 u8 ucAC_VI_UAPSD:1; 148 u8 ucAC_BE_UAPSD:1; 149 u8 ucAC_BK_UAPSD:1; 150 u8 ucReserved1:1; 151 u8 ucMaxSPLen:2; 152 u8 ucReserved2:1; 153 154 }ByWmmPsSta; 155 156 struct 157 { 158 //Ref WMM_Specification_1-1.pdf, 2006-06-13 Isaiah 159 u8 ucParameterSetCount:4; 160 u8 ucReserved:3; 161 u8 ucApUapsd:1; 162 }ByWmmPsAp; 163 164 struct 165 { 166 u8 ucAC3_UAPSD:1; 167 u8 ucAC2_UAPSD:1; 168 u8 ucAC1_UAPSD:1; 169 u8 ucAC0_UAPSD:1; 170 u8 ucQAck:1; 171 u8 ucMaxSPLen:2; 172 u8 ucMoreDataAck:1; 173 } By11eSta; 174 175 struct 176 { 177 u8 ucParameterSetCount:4; 178 u8 ucQAck:1; 179 u8 ucQueueReq:1; 180 u8 ucTXOPReq:1; 181 u8 ucReserved:1; 182 } By11eAp; 183 184 struct 185 { 186 u8 ucReserved1:4; 187 u8 ucQAck:1; 188 u8 ucReserved2:2; 189 u8 ucMoreDataAck:1; 190 } ByWmmsaSta; 191 192 struct 193 { 194 u8 ucReserved1:4; 195 u8 ucQAck:1; 196 u8 ucQueueReq:1; 197 u8 ucTXOPReq:1; 198 u8 ucReserved2:1; 199 } ByWmmsaAp; 200 201 struct 202 { 203 u8 ucAC3_UAPSD:1; 204 u8 ucAC2_UAPSD:1; 205 u8 ucAC1_UAPSD:1; 206 u8 ucAC0_UAPSD:1; 207 u8 ucQAck:1; 208 u8 ucMaxSPLen:2; 209 u8 ucMoreDataAck:1; 210 } ByAllSta; 211 212 struct 213 { 214 u8 ucParameterSetCount:4; 215 u8 ucQAck:1; 216 u8 ucQueueReq:1; 217 u8 ucTXOPReq:1; 218 u8 ucApUapsd:1; 219 } ByAllAp; 220 221}QOS_INFO_FIELD, *PQOS_INFO_FIELD; 222 223 224// 225// ACI to AC coding. 226// Ref: WMM spec 2.2.2: WME Parameter Element, p.13. 227// 228// AC_CODING is redefined for enum can't be ++, | under C++ compiler, 2006.05.17, by rcnjko. 229//typedef enum _AC_CODING{ 230// AC0_BE = 0, // ACI: 0x00 // Best Effort 231// AC1_BK = 1, // ACI: 0x01 // Background 232// AC2_VI = 2, // ACI: 0x10 // Video 233// AC3_VO = 3, // ACI: 0x11 // Voice 234// AC_MAX = 4, // Max: define total number; Should not to be used as a real enum. 235//}AC_CODING,*PAC_CODING; 236// 237typedef u32 AC_CODING; 238#define AC0_BE 0 // ACI: 0x00 // Best Effort 239#define AC1_BK 1 // ACI: 0x01 // Background 240#define AC2_VI 2 // ACI: 0x10 // Video 241#define AC3_VO 3 // ACI: 0x11 // Voice 242#define AC_MAX 4 // Max: define total number; Should not to be used as a real enum. 243 244// 245// ACI/AIFSN Field. 246// Ref: WMM spec 2.2.2: WME Parameter Element, p.12. 247// 248typedef union _ACI_AIFSN{ 249 u8 charData; 250 251 struct 252 { 253 u8 AIFSN:4; 254 u8 ACM:1; 255 u8 ACI:2; 256 u8 Reserved:1; 257 }f; // Field 258}ACI_AIFSN, *PACI_AIFSN; 259 260// 261// ECWmin/ECWmax field. 262// Ref: WMM spec 2.2.2: WME Parameter Element, p.13. 263// 264typedef union _ECW{ 265 u8 charData; 266 struct 267 { 268 u8 ECWmin:4; 269 u8 ECWmax:4; 270 }f; // Field 271}ECW, *PECW; 272 273// 274// AC Parameters Record Format. 275// Ref: WMM spec 2.2.2: WME Parameter Element, p.12. 276// 277typedef union _AC_PARAM{ 278 u32 longData; 279 u8 charData[4]; 280 281 struct 282 { 283 ACI_AIFSN AciAifsn; 284 ECW Ecw; 285 u16 TXOPLimit; 286 }f; // Field 287}AC_PARAM, *PAC_PARAM; 288 289 290 291// 292// QoS element subtype 293// 294typedef enum _QOS_ELE_SUBTYPE{ 295 QOSELE_TYPE_INFO = 0x00, // 0x00: Information element 296 QOSELE_TYPE_PARAM = 0x01, // 0x01: parameter element 297}QOS_ELE_SUBTYPE,*PQOS_ELE_SUBTYPE; 298 299 300// 301// Direction Field Values. 302// Ref: WMM spec 2.2.11: WME TSPEC Element, p.18. 303// 304typedef enum _DIRECTION_VALUE{ 305 DIR_UP = 0, // 0x00 // UpLink 306 DIR_DOWN = 1, // 0x01 // DownLink 307 DIR_DIRECT = 2, // 0x10 // DirectLink 308 DIR_BI_DIR = 3, // 0x11 // Bi-Direction 309}DIRECTION_VALUE,*PDIRECTION_VALUE; 310 311 312// 313// TS Info field in WMM TSPEC Element. 314// Ref: 315// 1. WMM spec 2.2.11: WME TSPEC Element, p.18. 316// 2. 8185 QoS code: QOS_TSINFO [def. in QoS_mp.h] 317// 318typedef union _QOS_TSINFO{ 319 u8 charData[3]; 320 struct { 321 u8 ucTrafficType:1; //WMM is reserved 322 u8 ucTSID:4; 323 u8 ucDirection:2; 324 u8 ucAccessPolicy:2; //WMM: bit8=0, bit7=1 325 u8 ucAggregation:1; //WMM is reserved 326 u8 ucPSB:1; //WMMSA is APSD 327 u8 ucUP:3; 328 u8 ucTSInfoAckPolicy:2; //WMM is reserved 329 u8 ucSchedule:1; //WMM is reserved 330 u8 ucReserved:7; 331 }field; 332}QOS_TSINFO, *PQOS_TSINFO; 333 334// 335// WMM TSPEC Body. 336// Ref: WMM spec 2.2.11: WME TSPEC Element, p.16. 337// 338typedef union _TSPEC_BODY{ 339 u8 charData[55]; 340 341 struct 342 { 343 QOS_TSINFO TSInfo; //u8 TSInfo[3]; 344 u16 NominalMSDUsize; 345 u16 MaxMSDUsize; 346 u32 MinServiceItv; 347 u32 MaxServiceItv; 348 u32 InactivityItv; 349 u32 SuspenItv; 350 u32 ServiceStartTime; 351 u32 MinDataRate; 352 u32 MeanDataRate; 353 u32 PeakDataRate; 354 u32 MaxBurstSize; 355 u32 DelayBound; 356 u32 MinPhyRate; 357 u16 SurplusBandwidthAllowance; 358 u16 MediumTime; 359 } f; // Field 360}TSPEC_BODY, *PTSPEC_BODY; 361 362 363// 364// WMM TSPEC Element. 365// Ref: WMM spec 2.2.11: WME TSPEC Element, p.16. 366// 367typedef struct _WMM_TSPEC{ 368 u8 ID; 369 u8 Length; 370 u8 OUI[3]; 371 u8 OUI_Type; 372 u8 OUI_SubType; 373 u8 Version; 374 TSPEC_BODY Body; 375} WMM_TSPEC, *PWMM_TSPEC; 376 377// 378// ACM implementation method. 379// Annie, 2005-12-13. 380// 381typedef enum _ACM_METHOD{ 382 eAcmWay0_SwAndHw = 0, // By SW and HW. 383 eAcmWay1_HW = 1, // By HW. 384 eAcmWay2_SW = 2, // By SW. 385}ACM_METHOD,*PACM_METHOD; 386 387 388typedef struct _ACM{ 389// u8 RegEnableACM; 390 u64 UsedTime; 391 u64 MediumTime; 392 u8 HwAcmCtl; // TRUE: UsedTime exceed => Do NOT USE this AC. It wll be written to ACM_CONTROL(0xBF BIT 0/1/2 in 8185B). 393}ACM, *PACM; 394 395typedef u8 AC_UAPSD, *PAC_UAPSD; 396 397#define GET_VO_UAPSD(_apsd) ((_apsd) & BIT0) 398#define SET_VO_UAPSD(_apsd) ((_apsd) |= BIT0) 399 400#define GET_VI_UAPSD(_apsd) ((_apsd) & BIT1) 401#define SET_VI_UAPSD(_apsd) ((_apsd) |= BIT1) 402 403#define GET_BK_UAPSD(_apsd) ((_apsd) & BIT2) 404#define SET_BK_UAPSD(_apsd) ((_apsd) |= BIT2) 405 406#define GET_BE_UAPSD(_apsd) ((_apsd) & BIT3) 407#define SET_BE_UAPSD(_apsd) ((_apsd) |= BIT3) 408 409 410//typedef struct _TCLASS{ 411// TODO 412//} TCLASS, *PTCLASS; 413typedef union _QOS_TCLAS{ 414 415 struct _TYPE_GENERAL{ 416 u8 Priority; 417 u8 ClassifierType; 418 u8 Mask; 419 } TYPE_GENERAL; 420 421 struct _TYPE0_ETH{ 422 u8 Priority; 423 u8 ClassifierType; 424 u8 Mask; 425 u8 SrcAddr[6]; 426 u8 DstAddr[6]; 427 u16 Type; 428 } TYPE0_ETH; 429 430 struct _TYPE1_IPV4{ 431 u8 Priority; 432 u8 ClassifierType; 433 u8 Mask; 434 u8 Version; 435 u8 SrcIP[4]; 436 u8 DstIP[4]; 437 u16 SrcPort; 438 u16 DstPort; 439 u8 DSCP; 440 u8 Protocol; 441 u8 Reserved; 442 } TYPE1_IPV4; 443 444 struct _TYPE1_IPV6{ 445 u8 Priority; 446 u8 ClassifierType; 447 u8 Mask; 448 u8 Version; 449 u8 SrcIP[16]; 450 u8 DstIP[16]; 451 u16 SrcPort; 452 u16 DstPort; 453 u8 FlowLabel[3]; 454 } TYPE1_IPV6; 455 456 struct _TYPE2_8021Q{ 457 u8 Priority; 458 u8 ClassifierType; 459 u8 Mask; 460 u16 TagType; 461 } TYPE2_8021Q; 462} QOS_TCLAS, *PQOS_TCLAS; 463 464//typedef struct _WMM_TSTREAM{ 465// 466//- TSPEC 467//- AC (which to mapping) 468//} WMM_TSTREAM, *PWMM_TSTREAM; 469typedef struct _QOS_TSTREAM{ 470 u8 AC; 471 WMM_TSPEC TSpec; 472 QOS_TCLAS TClass; 473} QOS_TSTREAM, *PQOS_TSTREAM; 474 475//typedef struct _U_APSD{ 476//- TriggerEnable [4] 477//- MaxSPLength 478//- HighestAcBuffered 479//} U_APSD, *PU_APSD; 480 481//joseph TODO: 482// UAPSD function should be implemented by 2 data structure 483// "Qos control field" and "Qos info field" 484//typedef struct _QOS_UAPSD{ 485// u8 bTriggerEnable[4]; 486// u8 MaxSPLength; 487// u8 HighestBufAC; 488//} QOS_UAPSD, *PQOS_APSD; 489 490//---------------------------------------------------------------------------- 491// 802.11 Management frame Status Code field 492//---------------------------------------------------------------------------- 493typedef struct _OCTET_STRING{ 494 u8 *Octet; 495 u16 Length; 496}OCTET_STRING, *POCTET_STRING; 497// 498// STA QoS data. 499// Ref: DOT11_QOS in 8185 code. [def. in QoS_mp.h] 500// 501typedef struct _STA_QOS{ 502 //DECLARE_RT_OBJECT(STA_QOS); 503 u8 WMMIEBuf[MAX_WMMELE_LENGTH]; 504 u8* WMMIE; 505 506 // Part 1. Self QoS Mode. 507 QOS_MODE QosCapability; //QoS Capability, 2006-06-14 Isaiah 508 QOS_MODE CurrentQosMode; 509 510 // For WMM Power Save Mode : 511 // ACs are trigger/delivery enabled or legacy power save enabled. 2006-06-13 Isaiah 512 AC_UAPSD b4ac_Uapsd; //VoUapsd(bit0), ViUapsd(bit1), BkUapsd(bit2), BeUapsd(bit3), 513 AC_UAPSD Curr4acUapsd; 514 u8 bInServicePeriod; 515 u8 MaxSPLength; 516 int NumBcnBeforeTrigger; 517 518 // Part 2. EDCA Parameter (perAC) 519 u8 * pWMMInfoEle; 520 u8 WMMParamEle[WMM_PARAM_ELEMENT_SIZE]; 521 u8 WMMPELength; 522 523 // <Bruce_Note> 524 //2 ToDo: remove the Qos Info Field and replace it by the above WMM Info element. 525 // By Bruce, 2008-01-30. 526 // Part 2. EDCA Parameter (perAC) 527 QOS_INFO_FIELD QosInfoField_STA; // Maintained by STA 528 QOS_INFO_FIELD QosInfoField_AP; // Retrieved from AP 529 530 AC_PARAM CurAcParameters[4]; 531 532 // Part 3. ACM 533 ACM acm[4]; 534 ACM_METHOD AcmMethod; 535 536 // Part 4. Per TID (Part 5: TCLASS will be described by TStream) 537 QOS_TSTREAM TStream[16]; 538 WMM_TSPEC TSpec; 539 540 u32 QBssWirelessMode; 541 542 // No Ack Setting 543 u8 bNoAck; 544 545 // Enable/Disable Rx immediate BA capability. 546 u8 bEnableRxImmBA; 547 548}STA_QOS, *PSTA_QOS; 549 550// 551// BSS QOS data. 552// Ref: BssDscr in 8185 code. [def. in BssDscr.h] 553// 554typedef struct _BSS_QOS{ 555 QOS_MODE bdQoSMode; 556 557 u8 bdWMMIEBuf[MAX_WMMELE_LENGTH]; 558 u8* bdWMMIE; 559 560 QOS_ELE_SUBTYPE EleSubType; 561 562 u8 * pWMMInfoEle; 563 u8 * pWMMParamEle; 564 565 QOS_INFO_FIELD QosInfoField; 566 AC_PARAM AcParameter[4]; 567}BSS_QOS, *PBSS_QOS; 568 569 570// 571// Ref: sQoSCtlLng and QoSCtl definition in 8185 QoS code. 572//#define QoSCtl (( (Adapter->bRegQoS) && (Adapter->dot11QoS.QoSMode &(QOS_EDCA|QOS_HCCA)) ) ?sQoSCtlLng:0) 573// 574#define sQoSCtlLng 2 575#define QOS_CTRL_LEN(_QosMode) ((_QosMode > QOS_DISABLE)? sQoSCtlLng : 0) 576 577 578//Added by joseph 579//UP Mapping to AC, using in MgntQuery_SequenceNumber() and maybe for DSCP 580//#define UP2AC(up) ((up<3)?((up==0)?1:0):(up>>1)) 581#define IsACValid(ac) ((ac<=7 )?true:false ) 582 583#endif // #ifndef __INC_QOS_TYPE_H 584