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