18fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#ifndef __INC_QOS_TYPE_H
28fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define __INC_QOS_TYPE_H
38fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
48fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT0                    0x00000001
58fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT1                    0x00000002
68fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT2                    0x00000004
78fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT3                    0x00000008
88fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT4                    0x00000010
98fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT5                    0x00000020
108fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT6                    0x00000040
118fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT7                    0x00000080
128fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT8                    0x00000100
138fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT9                    0x00000200
148fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT10                   0x00000400
158fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT11                   0x00000800
168fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT12                   0x00001000
178fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT13                   0x00002000
188fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT14                   0x00004000
198fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT15                   0x00008000
208fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT16                   0x00010000
218fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT17                   0x00020000
228fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT18                   0x00040000
238fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT19                   0x00080000
248fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT20                   0x00100000
258fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT21                   0x00200000
268fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT22                   0x00400000
278fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT23                   0x00800000
288fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT24                   0x01000000
298fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT25                   0x02000000
308fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT26                   0x04000000
318fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT27                   0x08000000
328fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT28                   0x10000000
338fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT29                   0x20000000
348fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT30                   0x40000000
358fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define BIT31                   0x80000000
368fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
378fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define	MAX_WMMELE_LENGTH	64
388fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
398fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
408fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// QoS mode.
418fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// enum 0, 1, 2, 4: since we can use the OR(|) operation.
428fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
438fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// QOS_MODE is redefined for enum can't be ++, | under C++ compiler, 2006.05.17, by rcnjko.
448fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//typedef	enum _QOS_MODE{
458fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//	QOS_DISABLE		= 0,
468fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//	QOS_WMM			= 1,
478fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//	QOS_EDCA			= 2,
488fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//	QOS_HCCA			= 4,
498fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//}QOS_MODE,*PQOS_MODE;
508fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
518fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangtypedef u32 QOS_MODE, *PQOS_MODE;
528fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define QOS_DISABLE		0
538fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define QOS_WMM			1
548fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define QOS_WMMSA		2
558fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define QOS_EDCA		4
568fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define QOS_HCCA		8
578fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define QOS_WMM_UAPSD		16   //WMM Power Save, 2006-06-14 Isaiah
588fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
598fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define AC_PARAM_SIZE	4
608fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define WMM_PARAM_ELE_BODY_LEN	18
618fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
628fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
638fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// QoS ACK Policy Field Values
648fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// Ref: WMM spec 2.1.6: QoS Control Field, p.10.
658fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
668fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangtypedef	enum _ACK_POLICY{
678fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	eAckPlc0_ACK		= 0x00,
688fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	eAckPlc1_NoACK		= 0x01,
698fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang}ACK_POLICY,*PACK_POLICY;
708fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
718fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define WMM_PARAM_ELEMENT_SIZE	(8+(4*AC_PARAM_SIZE))
728fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
738fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
748fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// QoS Control Field
758fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// Ref:
768fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//	1. WMM spec 2.1.6: QoS Control Field, p.9.
778fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//	2. 802.11e/D13.0 7.1.3.5, p.26.
788fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
798fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangtypedef	union _QOS_CTRL_FIELD{
808fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8	charData[2];
818fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u16	shortData;
828fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
838fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	// WMM spec
848fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct
858fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	{
868fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		UP:3;
878fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		usRsvd1:1;
888fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		EOSP:1;
898fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		AckPolicy:2;
908fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		usRsvd2:1;
918fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucRsvdByte;
928fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	}WMM;
938fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
948fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	// 802.11e: QoS data type frame sent by non-AP QSTAs.
958fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct
968fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	{
978fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		TID:4;
988fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		bIsQsize:1;// 0: BIT[8:15] is TXOP Duration Requested, 1: BIT[8:15] is Queue Size.
998fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		AckPolicy:2;
1008fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		usRsvd:1;
1018fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		TxopOrQsize;	// (BIT4=0)TXOP Duration Requested or (BIT4=1)Queue Size.
1028fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	}BySta;
1038fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
1048fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	// 802.11e: QoS data, QoS Null, and QoS Data+CF-Ack frames sent by HC.
1058fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct
1068fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	{
1078fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		TID:4;
1088fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		EOSP:1;
1098fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		AckPolicy:2;
1108fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		usRsvd:1;
1118fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		PSBufState;		// QAP PS Buffer State.
1128fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	}ByHc_Data;
1138fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
1148fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	// 802.11e: QoS (+) CF-Poll frames sent by HC.
1158fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct
1168fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	{
1178fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		TID:4;
1188fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		EOSP:1;
1198fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		AckPolicy:2;
1208fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		usRsvd:1;
1218fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		TxopLimit;		// TXOP Limit.
1228fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	}ByHc_CFP;
1238fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
1248fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang}QOS_CTRL_FIELD, *PQOS_CTRL_FIELD;
1258fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
1268fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
1278fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
1288fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// QoS Info Field
1298fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// Ref:
1308fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//	1. WMM spec 2.2.1: WME Information Element, p.11.
1318fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//	2. 8185 QoS code: QOS_INFO [def. in QoS_mp.h]
1328fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
1338fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangtypedef	union _QOS_INFO_FIELD{
1348fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8	charData;
1358fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
1368fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct
1378fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	{
1388fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucParameterSetCount:4;
1398fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucReserved:4;
1408fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	}WMM;
1418fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
1428fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct
1438fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	{
1448fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		//Ref WMM_Specification_1-1.pdf, 2006-06-13 Isaiah
1458fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucAC_VO_UAPSD:1;
1468fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucAC_VI_UAPSD:1;
1478fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucAC_BE_UAPSD:1;
1488fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucAC_BK_UAPSD:1;
1498fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucReserved1:1;
1508fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucMaxSPLen:2;
1518fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucReserved2:1;
1528fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
1538fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	}ByWmmPsSta;
1548fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
1558fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct
1568fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	{
1578fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		//Ref WMM_Specification_1-1.pdf, 2006-06-13 Isaiah
1588fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucParameterSetCount:4;
1598fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucReserved:3;
1608fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucApUapsd:1;
1618fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	}ByWmmPsAp;
1628fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
1638fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct
1648fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	{
1658fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucAC3_UAPSD:1;
1668fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucAC2_UAPSD:1;
1678fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucAC1_UAPSD:1;
1688fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucAC0_UAPSD:1;
1698fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucQAck:1;
1708fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucMaxSPLen:2;
1718fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucMoreDataAck:1;
1728fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	} By11eSta;
1738fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
1748fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct
1758fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	{
1768fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucParameterSetCount:4;
1778fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucQAck:1;
1788fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucQueueReq:1;
1798fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucTXOPReq:1;
1808fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucReserved:1;
1818fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	} By11eAp;
1828fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
1838fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct
1848fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	{
1858fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucReserved1:4;
1868fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucQAck:1;
1878fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucReserved2:2;
1888fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucMoreDataAck:1;
1898fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	} ByWmmsaSta;
1908fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
1918fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct
1928fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	{
1938fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucReserved1:4;
1948fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucQAck:1;
1958fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucQueueReq:1;
1968fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucTXOPReq:1;
1978fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucReserved2:1;
1988fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	} ByWmmsaAp;
1998fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
2008fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct
2018fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	{
2028fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucAC3_UAPSD:1;
2038fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucAC2_UAPSD:1;
2048fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucAC1_UAPSD:1;
2058fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucAC0_UAPSD:1;
2068fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucQAck:1;
2078fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucMaxSPLen:2;
2088fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucMoreDataAck:1;
2098fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	} ByAllSta;
2108fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
2118fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct
2128fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	{
2138fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucParameterSetCount:4;
2148fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucQAck:1;
2158fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucQueueReq:1;
2168fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucTXOPReq:1;
2178fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucApUapsd:1;
2188fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	} ByAllAp;
2198fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
2208fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang}QOS_INFO_FIELD, *PQOS_INFO_FIELD;
2218fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
2228fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
2238fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// ACI to AC coding.
2248fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// Ref: WMM spec 2.2.2: WME Parameter Element, p.13.
2258fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
2268fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// AC_CODING is redefined for enum can't be ++, | under C++ compiler, 2006.05.17, by rcnjko.
2278fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//typedef	enum _AC_CODING{
2288fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//	AC0_BE	= 0,		// ACI: 0x00	// Best Effort
2298fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//	AC1_BK	= 1,		// ACI: 0x01	// Background
2308fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//	AC2_VI	= 2,		// ACI: 0x10	// Video
2318fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//	AC3_VO	= 3,		// ACI: 0x11	// Voice
2328fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//	AC_MAX = 4,		// Max: define total number; Should not to be used as a real enum.
2338fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//}AC_CODING,*PAC_CODING;
2348fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
2358fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangtypedef u32 AC_CODING;
2368fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define AC0_BE	0		// ACI: 0x00	// Best Effort
2378fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define AC1_BK	1		// ACI: 0x01	// Background
2388fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define AC2_VI	2		// ACI: 0x10	// Video
2398fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define AC3_VO	3		// ACI: 0x11	// Voice
2408fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define AC_MAX	4		// Max: define total number; Should not to be used as a real enum.
2418fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
2428fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
2438fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// ACI/AIFSN Field.
2448fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// Ref: WMM spec 2.2.2: WME Parameter Element, p.12.
2458fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
2468fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangtypedef	union _ACI_AIFSN{
2478fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8	charData;
2488fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
2498fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct
2508fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	{
2518fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8	AIFSN:4;
2528fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8	ACM:1;
2538fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8	ACI:2;
2548fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8	Reserved:1;
2558fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	}f;	// Field
2568fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang}ACI_AIFSN, *PACI_AIFSN;
2578fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
2588fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
2598fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// ECWmin/ECWmax field.
2608fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// Ref: WMM spec 2.2.2: WME Parameter Element, p.13.
2618fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
2628fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangtypedef	union _ECW{
2638fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8	charData;
2648fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct
2658fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	{
2668fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8	ECWmin:4;
2678fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8	ECWmax:4;
2688fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	}f;	// Field
2698fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang}ECW, *PECW;
2708fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
2718fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
2728fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// AC Parameters Record Format.
2738fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// Ref: WMM spec 2.2.2: WME Parameter Element, p.12.
2748fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
2758fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangtypedef	union _AC_PARAM{
2768fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u32	longData;
2778fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8	charData[4];
2788fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
2798fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct
2808fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	{
2818fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		ACI_AIFSN	AciAifsn;
2828fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		ECW		Ecw;
2838fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u16		TXOPLimit;
2848fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	}f;	// Field
2858fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang}AC_PARAM, *PAC_PARAM;
2868fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
2878fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
2888fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
2898fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
2908fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// QoS element subtype
2918fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
2928fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangtypedef	enum _QOS_ELE_SUBTYPE{
2938fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	QOSELE_TYPE_INFO	= 0x00,		// 0x00: Information element
2948fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	QOSELE_TYPE_PARAM	= 0x01,		// 0x01: parameter element
2958fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang}QOS_ELE_SUBTYPE,*PQOS_ELE_SUBTYPE;
2968fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
2978fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
2988fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
2998fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// Direction Field Values.
3008fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// Ref: WMM spec 2.2.11: WME TSPEC Element, p.18.
3018fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
3028fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangtypedef	enum _DIRECTION_VALUE{
3038fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	DIR_UP			= 0,		// 0x00	// UpLink
3048fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	DIR_DOWN		= 1,		// 0x01	// DownLink
3058fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	DIR_DIRECT		= 2,		// 0x10	// DirectLink
3068fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	DIR_BI_DIR		= 3,		// 0x11	// Bi-Direction
3078fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang}DIRECTION_VALUE,*PDIRECTION_VALUE;
3088fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
3098fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
3108fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
3118fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// TS Info field in WMM TSPEC Element.
3128fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// Ref:
3138fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//	1. WMM spec 2.2.11: WME TSPEC Element, p.18.
3148fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//	2. 8185 QoS code: QOS_TSINFO [def. in QoS_mp.h]
3158fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
3168fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangtypedef union _QOS_TSINFO{
3178fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8		charData[3];
3188fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct {
3198fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucTrafficType:1;			//WMM is reserved
3208fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucTSID:4;
3218fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucDirection:2;
3228fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucAccessPolicy:2;	//WMM: bit8=0, bit7=1
3238fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucAggregation:1;		//WMM is reserved
3248fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucPSB:1;				//WMMSA is APSD
3258fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucUP:3;
3268fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucTSInfoAckPolicy:2;		//WMM is reserved
3278fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucSchedule:1;			//WMM is reserved
3288fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		ucReserved:7;
3298fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	}field;
3308fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang}QOS_TSINFO, *PQOS_TSINFO;
3318fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
3328fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
3338fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// WMM TSPEC Body.
3348fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// Ref: WMM spec 2.2.11: WME TSPEC Element, p.16.
3358fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
3368fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangtypedef union _TSPEC_BODY{
3378fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8		charData[55];
3388fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
3398fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct
3408fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	{
3418fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		QOS_TSINFO	TSInfo;	//u8	TSInfo[3];
3428fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u16	NominalMSDUsize;
3438fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u16	MaxMSDUsize;
3448fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u32	MinServiceItv;
3458fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u32	MaxServiceItv;
3468fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u32	InactivityItv;
3478fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u32	SuspenItv;
3488fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u32	ServiceStartTime;
3498fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u32	MinDataRate;
3508fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u32	MeanDataRate;
3518fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u32	PeakDataRate;
3528fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u32	MaxBurstSize;
3538fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u32	DelayBound;
3548fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u32	MinPhyRate;
3558fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u16	SurplusBandwidthAllowance;
3568fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u16	MediumTime;
3578fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	} f;	// Field
3588fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang}TSPEC_BODY, *PTSPEC_BODY;
3598fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
3608fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
3618fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
3628fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// WMM TSPEC Element.
3638fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// Ref: WMM spec 2.2.11: WME TSPEC Element, p.16.
3648fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
3658fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangtypedef struct _WMM_TSPEC{
3668fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8		ID;
3678fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8		Length;
3688fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8		OUI[3];
3698fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8		OUI_Type;
3708fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8		OUI_SubType;
3718fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8		Version;
3728fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	TSPEC_BODY	Body;
3738fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang} WMM_TSPEC, *PWMM_TSPEC;
3748fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
3758fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
3768fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// ACM implementation method.
3778fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// Annie, 2005-12-13.
3788fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
3798fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangtypedef	enum _ACM_METHOD{
3808fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	eAcmWay0_SwAndHw		= 0,		// By SW and HW.
3818fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	eAcmWay1_HW			= 1,		// By HW.
3828fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	eAcmWay2_SW			= 2,		// By SW.
3838fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang}ACM_METHOD,*PACM_METHOD;
3848fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
3858fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
3868fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangtypedef struct _ACM{
3878fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//	u8		RegEnableACM;
3888fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u64		UsedTime;
3898fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u64		MediumTime;
3908fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8		HwAcmCtl;	// TRUE: UsedTime exceed => Do NOT USE this AC. It wll be written to ACM_CONTROL(0xBF BIT 0/1/2 in 8185B).
3918fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang}ACM, *PACM;
3928fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
3938fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangtypedef	u8		AC_UAPSD, *PAC_UAPSD;
3948fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
3958fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define	GET_VO_UAPSD(_apsd) ((_apsd) & BIT0)
3968fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define	SET_VO_UAPSD(_apsd) ((_apsd) |= BIT0)
3978fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
3988fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define	GET_VI_UAPSD(_apsd) ((_apsd) & BIT1)
3998fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define	SET_VI_UAPSD(_apsd) ((_apsd) |= BIT1)
4008fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
4018fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define	GET_BK_UAPSD(_apsd) ((_apsd) & BIT2)
4028fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define	SET_BK_UAPSD(_apsd) ((_apsd) |= BIT2)
4038fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
4048fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define	GET_BE_UAPSD(_apsd) ((_apsd) & BIT3)
4058fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define	SET_BE_UAPSD(_apsd) ((_apsd) |= BIT3)
4068fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
4078fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
4088fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//typedef struct _TCLASS{
4098fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// TODO
4108fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//} TCLASS, *PTCLASS;
4118fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangtypedef union _QOS_TCLAS{
4128fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
4138fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct _TYPE_GENERAL{
4148fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		Priority;
4158fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8 		ClassifierType;
4168fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8 		Mask;
4178fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	} TYPE_GENERAL;
4188fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
4198fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct _TYPE0_ETH{
4208fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		Priority;
4218fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8 		ClassifierType;
4228fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8 		Mask;
4238fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		SrcAddr[6];
4248fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		DstAddr[6];
4258fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u16		Type;
4268fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	} TYPE0_ETH;
4278fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
4288fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct _TYPE1_IPV4{
4298fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		Priority;
4308fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8 		ClassifierType;
4318fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8 		Mask;
4328fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8 		Version;
4338fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		SrcIP[4];
4348fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		DstIP[4];
4358fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u16		SrcPort;
4368fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u16		DstPort;
4378fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		DSCP;
4388fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		Protocol;
4398fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		Reserved;
4408fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	} TYPE1_IPV4;
4418fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
4428fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct _TYPE1_IPV6{
4438fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		Priority;
4448fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8 		ClassifierType;
4458fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8 		Mask;
4468fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8 		Version;
4478fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		SrcIP[16];
4488fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		DstIP[16];
4498fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u16		SrcPort;
4508fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u16		DstPort;
4518fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		FlowLabel[3];
4528fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	} TYPE1_IPV6;
4538fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
4548fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	struct _TYPE2_8021Q{
4558fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8		Priority;
4568fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8 		ClassifierType;
4578fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u8 		Mask;
4588fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang		u16		TagType;
4598fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	} TYPE2_8021Q;
4608fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang} QOS_TCLAS, *PQOS_TCLAS;
4618fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
4628fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//typedef struct _WMM_TSTREAM{
4638fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
4648fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//- TSPEC
4658fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//- AC (which to mapping)
4668fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//} WMM_TSTREAM, *PWMM_TSTREAM;
4678fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangtypedef struct _QOS_TSTREAM{
4688fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8			AC;
4698fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	WMM_TSPEC		TSpec;
4708fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	QOS_TCLAS		TClass;
4718fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang} QOS_TSTREAM, *PQOS_TSTREAM;
4728fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
4738fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//typedef struct _U_APSD{
4748fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//- TriggerEnable [4]
4758fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//- MaxSPLength
4768fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//- HighestAcBuffered
4778fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//} U_APSD, *PU_APSD;
4788fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
4798fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//joseph TODO:
4808fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//	UAPSD function should be implemented by 2 data structure
4818fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//	"Qos control field" and "Qos info field"
4828fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//typedef struct _QOS_UAPSD{
4838fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//	u8			bTriggerEnable[4];
4848fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//	u8 			MaxSPLength;
4858fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//	u8			HighestBufAC;
4868fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//} QOS_UAPSD, *PQOS_APSD;
4878fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
4888fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//----------------------------------------------------------------------------
4898fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//      802.11 Management frame Status Code field
4908fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//----------------------------------------------------------------------------
4918fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangtypedef struct _OCTET_STRING{
492e406322b4b963e622f41d76193d8ca9e5435adb8Mauro Carvalho Chehab	u8        	*Octet;
493e406322b4b963e622f41d76193d8ca9e5435adb8Mauro Carvalho Chehab	u16             Length;
4948fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang}OCTET_STRING, *POCTET_STRING;
495b63eaed0da3370817f74002b81a57b25c43e72cbH Hartley Sweeten
4968fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
4978fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// STA QoS data.
4988fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// Ref: DOT11_QOS in 8185 code. [def. in QoS_mp.h]
4998fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
5008fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangtypedef struct _STA_QOS{
5018fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	//DECLARE_RT_OBJECT(STA_QOS);
5028fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8				WMMIEBuf[MAX_WMMELE_LENGTH];
5038fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8*				WMMIE;
5048fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
5058fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	// Part 1. Self QoS Mode.
5068fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	QOS_MODE			QosCapability; //QoS Capability, 2006-06-14 Isaiah
5078fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	QOS_MODE			CurrentQosMode;
5088fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
5098fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	// For WMM Power Save Mode :
5108fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	// ACs are trigger/delivery enabled or legacy power save enabled. 2006-06-13 Isaiah
5118fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	AC_UAPSD			b4ac_Uapsd;  //VoUapsd(bit0), ViUapsd(bit1),  BkUapsd(bit2), BeUapsd(bit3),
5128fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	AC_UAPSD			Curr4acUapsd;
5138fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8				bInServicePeriod;
5148fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8				MaxSPLength;
5158fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	int 				NumBcnBeforeTrigger;
5168fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
5178fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	// Part 2. EDCA Parameter (perAC)
5188fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8 *				pWMMInfoEle;
5198fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8				WMMParamEle[WMM_PARAM_ELEMENT_SIZE];
5208fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8				WMMPELength;
5218fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
5228fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	// <Bruce_Note>
5238fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	//2 ToDo: remove the Qos Info Field and replace it by the above WMM Info element.
5248fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	// By Bruce, 2008-01-30.
5258fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	// Part 2. EDCA Parameter (perAC)
5268fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	QOS_INFO_FIELD			QosInfoField_STA; 	// Maintained by STA
5278fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	QOS_INFO_FIELD			QosInfoField_AP;	// Retrieved from AP
5288fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
5298fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	AC_PARAM			CurAcParameters[4];
5308fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
5318fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	// Part 3. ACM
5328fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	ACM				acm[4];
5338fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	ACM_METHOD			AcmMethod;
5348fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
5358fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	// Part 4. Per TID (Part 5: TCLASS will be described by TStream)
5368fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	QOS_TSTREAM			TStream[16];
5378fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	WMM_TSPEC			TSpec;
5388fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
5398fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u32				QBssWirelessMode;
5408fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
5418fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	// No Ack Setting
5428fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8				bNoAck;
5438fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
5448fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	// Enable/Disable Rx immediate BA capability.
5458fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8				bEnableRxImmBA;
5468fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
5478fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang}STA_QOS, *PSTA_QOS;
5488fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
5498fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
5508fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// BSS QOS data.
5518fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// Ref: BssDscr in 8185 code. [def. in BssDscr.h]
5528fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
5538fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuangtypedef struct _BSS_QOS{
5548fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	QOS_MODE		bdQoSMode;
5558fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
5568fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8			bdWMMIEBuf[MAX_WMMELE_LENGTH];
5578fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8*		bdWMMIE;
5588fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
5598fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	QOS_ELE_SUBTYPE		EleSubType;
5608fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
5618fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8 *			pWMMInfoEle;
5628fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	u8 *			pWMMParamEle;
5638fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
5648fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	QOS_INFO_FIELD		QosInfoField;
5658fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang	AC_PARAM		AcParameter[4];
5668fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang}BSS_QOS, *PBSS_QOS;
5678fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
5688fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
5698fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
5708fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang// Ref: sQoSCtlLng and QoSCtl definition in 8185 QoS code.
5718fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//#define QoSCtl   ((	(Adapter->bRegQoS) && (Adapter->dot11QoS.QoSMode &(QOS_EDCA|QOS_HCCA))	  )  ?sQoSCtlLng:0)
5728fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//
5738fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define sQoSCtlLng			2
5748fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define	QOS_CTRL_LEN(_QosMode)		((_QosMode > QOS_DISABLE)? sQoSCtlLng : 0)
5758fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
5768fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
5778fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//Added by joseph
5788fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//UP Mapping to AC, using in MgntQuery_SequenceNumber() and maybe for DSCP
5798fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang//#define UP2AC(up)			((up<3)?((up==0)?1:0):(up>>1))
5808fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#define IsACValid(ac)			((ac<=7 )?true:false )
5818fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang
5828fc8598e61f6f384f3eaf1d9b09500c12af47b37Jerry Chuang#endif // #ifndef __INC_QOS_TYPE_H
583