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