mirror of
https://github.com/YikeStone/MT7601u.git
synced 2025-08-02 19:04:09 +05:30
480 lines
14 KiB
C
480 lines
14 KiB
C
/****************************************************************************
|
|
* Ralink Tech Inc.
|
|
* 4F, No. 2 Technology 5th Rd.
|
|
* Science-based Industrial Park
|
|
* Hsin-chu, Taiwan, R.O.C.
|
|
* (c) Copyright 2002, Ralink Technology, Inc.
|
|
*
|
|
* All rights reserved. Ralink's source code is an unpublished work and the
|
|
* use of a copyright notice does not imply otherwise. This source code
|
|
* contains confidential trade secret material of Ralink Tech. Any attemp
|
|
* or participation in deciphering, decoding, reverse engineering or in any
|
|
* way altering the source code is stricitly prohibited, unless the prior
|
|
* written consent of Ralink Technology, Inc. is obtained.
|
|
****************************************************************************
|
|
|
|
Module Name:
|
|
dot11ac_vht.h
|
|
|
|
Abstract:
|
|
Defined IE/frame structures of 802.11ac (D1.2).
|
|
|
|
Revision History:
|
|
Who When What
|
|
--------- ---------- ----------------------------------------------
|
|
Shiang Tu 01-11-2012 created for 11ac
|
|
*/
|
|
|
|
#ifdef DOT11_VHT_AC
|
|
|
|
|
|
#ifndef __DOT11AC_VHT_H
|
|
#define __DOT11AC_VHT_H
|
|
|
|
#include "rtmp_type.h"
|
|
|
|
|
|
#define IE_VHT_CAP 191
|
|
#define IE_VHT_OP 192
|
|
|
|
|
|
/*
|
|
IEEE 802.11AC D2.0, sec 8.4.2.160.2
|
|
VHT Capabilities Info field
|
|
|
|
max_mpdu_len: MAximun MPDU Length
|
|
->Indicate the max MPDU length.
|
|
0: 3895 octets(Max A-MSDU length in HT Cap set to 3839)
|
|
1: 7991 octets(Max A-MSDU length in HT Cap set to 7935)
|
|
2: 11454 octets(Max A-MSDU length in HT Cap set to 7935)
|
|
3: reserved
|
|
ch_width: Supported Channel Width Set
|
|
->Indicates the channel widths supported by the STA.
|
|
0: the STA does not support either 160 or 80+80 MHz
|
|
1: the STA support 160 MHz
|
|
2: the STA support 160 MHz and 80 + 80 MHz
|
|
3: reserved
|
|
rx_ldpc: Rx LDPC
|
|
-> Indicates support of receiving LDPC coded packets
|
|
0: not support
|
|
1: support
|
|
sgi_80M: Short GI for 80 MHz
|
|
-> Indicates short GI support for the reception of VHT+CBW80 packet
|
|
0: not support
|
|
1: support
|
|
sgi_160M: Short GI for 160 and 80 + 80 MHz
|
|
->Indicates rx short GI for VHT+(CBW160 and CBW80+80) packet
|
|
0: not support
|
|
1: support
|
|
tx_stbc: Tx STBC
|
|
-> Indicates support for tx of at least 2x1 STBC
|
|
0: not support
|
|
1: support
|
|
rx_stbc: Rx STBC
|
|
-> Indicates support for rx of PPDUs using STBC
|
|
0: not support
|
|
1: support 1SS
|
|
2: support 1SS and 2SS
|
|
3: support 1SS, 2SS and 3SS
|
|
4: support 1SS, 2SS, 3SS and 4SS
|
|
5,6,7: reserved
|
|
bfer_cap_su: SU Beamformer Capable
|
|
->Indicates support for operation as a single user beamformer
|
|
0: not support
|
|
1: support
|
|
bfee_cap_su: SU Beamformee Capable
|
|
-> Indicates support for operation as a single user beamformee
|
|
0: not support
|
|
1: support
|
|
cmp_st_num_bfer: Compressed Steering Number of Beamformer Antenna Supported
|
|
-> Beamformee's capability indicateing the max number of beamformer
|
|
antennas the beamformee can support when sending compressed
|
|
beamforming feedback
|
|
If SU beamformee capable, set to the max value minus 1.
|
|
otehrwise, reserved.
|
|
num_snd_dimension: Number of Sounding Dimensions
|
|
-> Beamformer's capability indicating the number of antennas used for
|
|
beamformed transmissions.
|
|
If SU beamformer capable, set to value minus 1.
|
|
otehrwise, reserved.
|
|
bfer_cap_mu: MU Beamformer Capable
|
|
-> Indicates support for operation as an MU beamformer
|
|
0: if not supported or if sent by a non-AP STA
|
|
1: supported
|
|
bfee_cap_mu: MU Beamformee Capable
|
|
-> Indicates support for operation as an MU beamformer
|
|
0: if not supported or if snet by an AP
|
|
1: supported
|
|
vht_txop_ps: VHT TXOP PS
|
|
-> Indicates whether or not the AP supports VHT TXOP Power Save Mode or
|
|
whether or not the STA is in VHT TXOP Power Save Mode
|
|
->When tx by a VHT AP in the VHT Capabilities element included in Beacon,
|
|
ProbeResp, AssocResp, and ReassocResp, frames:
|
|
0: if the VHT AP does not support VHT TXOP PS in the BSS.
|
|
1: if the VHT AP support TXOP PS in the BSS.
|
|
->When tx by a VHT non-AP STA in the VHT Capabilities element included
|
|
in AssocReq, ReassocReq and ProbReq frames:
|
|
0: if the VHT STA is not in TXOP Power Save Mode.
|
|
1: if the VHT STA is in TXOP Power Save Mode.
|
|
htc_vht_cap: +HTC-VHT Capable
|
|
-> Indicates whether or not the STA supports receiving an HT Control
|
|
field in the VHT format
|
|
0: if not support
|
|
1: if support
|
|
max_ampdu_exp: Maximum A-MPDU Length Exponent
|
|
-> Indicates the maximum length of A-MPDU pre-EOF padding that the STA
|
|
can receive.
|
|
->The length defined by this field is equal to 2^(13 + max_ampdu_exp) -1
|
|
0~7 : integer in the range of 0 to 7.
|
|
vht_link_adapt: VHT Link Adaptation Capable
|
|
-> Indicates whether or not the STA support link adaptation using VHT
|
|
variant HT Control field.
|
|
-> This field is ignored if the _HTC-VHT Capble field is set to 0.
|
|
0: (No Feedback), if the STA does not provide VHT MFB
|
|
2: (Unsolicited), if the STA provides only unsolicited VHT MFB
|
|
3: (Both), if the STA can provide VHT MFB in response to VHT MRQ
|
|
and if the STA provides unsolicited VHT MFB.
|
|
1: reserved
|
|
rx_ant_consistency: Rx Antenna Pattern Consistency
|
|
->Indicates the possibility of Rx antenna pattern change
|
|
0: if Rx antenna pattern might change during association
|
|
1: if Rx antenna pattern does not change during association
|
|
tx_ant_consistency: Tx Antenna Pattern Consistency
|
|
->Indicates the possibility of Tx antenna pattern change
|
|
0: if Tx antenna pattern might change during association
|
|
1: if Tx antenna pattern does not change during association
|
|
*/
|
|
typedef struct GNU_PACKED _VHT_CAP_INFO{
|
|
#ifdef RT_BIG_ENDIAN
|
|
UINT32 rsv:2;
|
|
UINT32 tx_ant_consistency:1;
|
|
UINT32 rx_ant_consistency:1;
|
|
UINT32 vht_link_adapt:2;
|
|
UINT32 max_ampdu_exp:3;
|
|
UINT32 htc_vht_cap:1;
|
|
UINT32 vht_txop_ps:1;
|
|
UINT32 bfee_cap_mu:1;
|
|
UINT32 bfer_cap_mu:1;
|
|
UINT32 num_snd_dimension:3;
|
|
|
|
UINT32 cmp_st_num_bfer:3;
|
|
UINT32 bfee_cap_su:1;
|
|
UINT32 bfer_cap_su:1;
|
|
UINT32 rx_stbc:3;
|
|
|
|
UINT32 tx_stbc:1;
|
|
UINT32 sgi_160M:1;
|
|
UINT32 sgi_80M:1;
|
|
UINT32 rx_ldpc:1;
|
|
UINT32 ch_width:2;
|
|
UINT32 max_mpdu_len:2;
|
|
#else
|
|
UINT32 max_mpdu_len:2; /* 0: 3895, 1: 7991, 2: 11454, 3: rsv */
|
|
UINT32 ch_width:2; /* */
|
|
UINT32 rx_ldpc:1;
|
|
UINT32 sgi_80M:1;
|
|
UINT32 sgi_160M:1;
|
|
UINT32 tx_stbc:1;
|
|
|
|
UINT32 rx_stbc:3;
|
|
UINT32 bfer_cap_su:1;
|
|
UINT32 bfee_cap_su:1;
|
|
UINT32 cmp_st_num_bfer:3;
|
|
|
|
UINT32 num_snd_dimension:3;
|
|
UINT32 bfer_cap_mu:1;
|
|
UINT32 bfee_cap_mu:1;
|
|
UINT32 vht_txop_ps:1;
|
|
UINT32 htc_vht_cap:1;
|
|
UINT32 max_ampdu_exp:3;
|
|
UINT32 vht_link_adapt:2;
|
|
UINT32 rx_ant_consistency:1;
|
|
UINT32 tx_ant_consistency:1;
|
|
UINT32 rsv:2;
|
|
#endif /* RT_BIG_ENDIAN */
|
|
}VHT_CAP_INFO;
|
|
|
|
|
|
/*
|
|
IEEE 802.11AC D2.0, sec 8.4.2.160.3
|
|
Rx MCS Map and Tx MCS map, figure 8-401bt
|
|
|
|
mcs_ss1: Max MCS for 1SS
|
|
mcs_ss2: Max MCS for 2SS
|
|
mcs_ss3: Max MCS for 3SS
|
|
mcs_ss4: Max MCS for 4SS
|
|
mcs_ss5: Max MCS for 5SS
|
|
mcs_ss6: Max MCS for 6SS
|
|
mcs_ss7: Max MCS for 7SS
|
|
mcs_ss8: Max MCS for 8SS
|
|
|
|
The 2-bit MAx MCS for n SS field for each number of spatial streams n = 1~8
|
|
is encoded as following:
|
|
0: indicates support for MCS 0~7
|
|
1: indicates support for MCS 0~8
|
|
2: indicates support for MCS 0~9
|
|
3: indicates that n spatial streams is not supported.
|
|
Note: some MCSs are not be valid for particular bandwidth and number of
|
|
spatial stream combinations.
|
|
*/
|
|
#define VHT_MCS_CAP_7 0
|
|
#define VHT_MCS_CAP_8 1
|
|
#define VHT_MCS_CAP_9 2
|
|
#define VHT_MCS_CAP_NA 3
|
|
|
|
typedef struct GNU_PACKED _VHT_MCS_MAP{
|
|
#ifdef RT_BIG_ENDIAN
|
|
UINT16 mcs_ss8:2;
|
|
UINT16 mcs_ss7:2;
|
|
UINT16 mcs_ss6:2;
|
|
UINT16 mcs_ss5:2;
|
|
UINT16 mcs_ss4:2;
|
|
UINT16 mcs_ss3:2;
|
|
UINT16 mcs_ss2:2;
|
|
UINT16 mcs_ss1:2;
|
|
#else
|
|
UINT16 mcs_ss1:2;
|
|
UINT16 mcs_ss2:2;
|
|
UINT16 mcs_ss3:2;
|
|
UINT16 mcs_ss4:2;
|
|
UINT16 mcs_ss5:2;
|
|
UINT16 mcs_ss6:2;
|
|
UINT16 mcs_ss7:2;
|
|
UINT16 mcs_ss8:2;
|
|
#endif /* RT_BIG_ENDIAN */
|
|
}VHT_MCS_MAP;
|
|
|
|
|
|
/*
|
|
IEEE 802.11AC D2.0, sec 8.4.2.160.3
|
|
VHT Supported MCS Set field, figure 8-401bs
|
|
|
|
rx_mcs_map: Rx MCS Map
|
|
-> Indicates the maximum MCS that can be received for each number of
|
|
spatial streams
|
|
See "VHT_MCS_MAP"
|
|
rx_high_rate: Rx Highest Supported Data Rate
|
|
-> Indicates the maximum data rate that the STA can receive
|
|
-> In unit of 1Mb/s where 1 represents 1Mb/s, and incrementing in steps
|
|
of 1 Mb/s.
|
|
-> If the maximum data rate expressed in Mb/s is not an integer, then
|
|
the value is rounded up to the next integer.
|
|
tx_mcs_map: Tx MCS Map
|
|
tx_high_rate: Tx Highest Supported Data Rate
|
|
-> Indicates the maximum data rate that the STA will transmit
|
|
-> In unit of 1Mb/s where 1 represents 1Mb/s, and incrementing in steps
|
|
of 1 Mb/s.
|
|
-> If the maximum data rate expressed in Mb/s is not an integer, then
|
|
the value is rounded up to the next integer.
|
|
*/
|
|
|
|
// TODO: shiang-6590, check the layout of this data structure!!!!
|
|
typedef struct GNU_PACKED _VHT_MCS_SET{
|
|
#ifdef RT_BIG_ENDIAN
|
|
UINT16 rsv2:3;
|
|
UINT16 tx_high_rate:13;
|
|
struct _VHT_MCS_MAP tx_mcs_map;
|
|
UINT16 rsv:3;
|
|
UINT16 rx_high_rate:13;
|
|
struct _VHT_MCS_MAP rx_mcs_map;
|
|
#else
|
|
struct _VHT_MCS_MAP rx_mcs_map;
|
|
UINT16 rx_high_rate:13;
|
|
UINT16 rsv:3;
|
|
struct _VHT_MCS_MAP tx_mcs_map;
|
|
UINT16 tx_high_rate:13;
|
|
UINT16 rsv2:3;
|
|
#endif /* RT_BIG_ENDIAN */
|
|
}VHT_MCS_SET;
|
|
|
|
|
|
/*
|
|
IEEE 802.11AC D2.0, sec 8.4.2.160.1
|
|
VHT Capabilities Element structure
|
|
|
|
eid: Element ID
|
|
191 (IE_VHT_CAP)
|
|
len: Length
|
|
12
|
|
vht_cap: VHT Capabilities Info
|
|
->contains a numner of fields that are used to advertise VHT capabilities
|
|
of a VHT STA
|
|
mcs_set: VHT supported MCS Set
|
|
->Used to convey the combinations of MCSs and spatial streams a STA
|
|
supports for both reception and transmission.
|
|
*/
|
|
typedef struct GNU_PACKED _VHT_CAP_IE{
|
|
VHT_CAP_INFO vht_cap;
|
|
VHT_MCS_SET mcs_set;
|
|
}VHT_CAP_IE;
|
|
|
|
|
|
/*
|
|
IEEE 802.11AC D2.0, sec 8.4.2.161
|
|
VHT Operation Information field, figure 8-401bv
|
|
|
|
The operation of VHT STAs in the BSS is controlled by the HT Operation
|
|
element and the VHT Operation element.
|
|
|
|
ch_width: Channel Width
|
|
-> This field, together with the HT Operation element STA Channel Width
|
|
field, defines the BSS operating channel width.
|
|
0: for 20MHz or 40MHz operating channel width
|
|
1: for 80MHz operating channel width
|
|
2: for 160MHz operating channel width
|
|
3: for 80+80MHz operating channel width
|
|
4~255: reserved
|
|
center_freq_1: Channel Center Frequency Segment 1
|
|
-> Defines the channel center frequency for an 80 and 160MHz VHT BSS
|
|
and the segment 1 channel center frequency for an 80+90MHz VHT BSS.
|
|
-> For 80MHZ or 160MHz operating channel width, indicates the channel
|
|
center frequency index for the 80MHz or 160MHz channel on which the
|
|
VHT BSS operates.
|
|
->For 80+80MHz operating channel width, indicates the channel center
|
|
frequency index for the 80MHz channel of frequency segment 1 on
|
|
which the VHT BSS operates.
|
|
->Set 0 for 20MHz or 40MHz operating channel width.
|
|
|
|
center_freq_2: Channel Center Frequency Segment 2
|
|
-> Defines the seg 2 channel center frequency for an 80+80MHz VHT BSS
|
|
->For a 80+80MHz operating channel width, indicates the channel center
|
|
frequency index of the 80MHz channel of frequency segment 2 on
|
|
which the VHT BSS operates. Reserved otherwise.
|
|
*/
|
|
typedef struct GNU_PACKED _VHT_OP_INFO{
|
|
UINT8 ch_width;
|
|
UINT8 center_freq_1;
|
|
UINT8 center_freq_2;
|
|
}VHT_OP_INFO;
|
|
|
|
|
|
/*
|
|
IEEE 802.11AC D2.0, sec 8.4.2.161
|
|
VHT Operation element, figure 8-401bu
|
|
|
|
The operation of VHT STAs in the BSS is controlled by the HT Operation
|
|
element and the VHT Operation element.
|
|
|
|
eid: Element ID
|
|
192 (IE_VHT_OP)
|
|
len: Length
|
|
5
|
|
vht_op_info: VHT Operation Information
|
|
basic_mcs_set: VHT Basic MCS Set
|
|
*/
|
|
typedef struct GNU_PACKED _VHT_OP_IE{
|
|
VHT_OP_INFO vht_op_info;
|
|
VHT_MCS_MAP basic_mcs_set;
|
|
}VHT_OP_IE;
|
|
|
|
|
|
/*
|
|
IEEE 802.11AC D2.0, sec 8.4.2.163
|
|
Wide Bandwidth Channel Switch element, figure 8-401bx
|
|
|
|
included in the Channel Switch Announcement frames.
|
|
|
|
new_ch_width: New STA Channel Width
|
|
center_freq_1: New Channel Center Frequency Segment 1
|
|
center_freq_2: New Channel Center Frequency Segment 2
|
|
|
|
The definition of upper subfields is the same as "VHT_OP_INFO"
|
|
*/
|
|
typedef struct GNU_PACKED _WIDE_BW_CH_SWITCH_IE{
|
|
UINT8 e_id;
|
|
UINT len;
|
|
UINT8 new_ch_width;
|
|
UINT8 center_freq_1;
|
|
UINT8 center_freq_2;
|
|
}WIDE_BW_CH_SWITCH_IE;
|
|
|
|
|
|
/*
|
|
IEEE 802.11AC D2.0, sec 8.4.2.164
|
|
VHT Transmit Power Envelope element
|
|
|
|
|
|
*/
|
|
typedef struct GNU_PACKED _CH_SEG_PAIR{
|
|
UINT8 ch_center_freq;
|
|
UINT8 seg_ch_width;
|
|
}CH_SEG_PAIR;
|
|
|
|
|
|
/*
|
|
IEEE 802.11AC D2.0, sec 8.4.2.164
|
|
VHT Transmit Power Envelope element
|
|
|
|
max_txpwr: Maximum Transmit Power
|
|
-> Define the maximum transmit power limit of the tx bandwidth defined
|
|
by the VHT Transmit Power Envelop element. The Maximum Transmit
|
|
Power field is a 8 bit 2's complement signed integer in the range of
|
|
-64 dBm to 63.5 dBm with a 0.5 dB step.
|
|
|
|
NOTE: The following two subfields may repeated as needed.
|
|
center_freq_1: Channel Center Frequency Segment
|
|
ch_seg_width: Segment Channel Width
|
|
*/
|
|
typedef struct GNU_PACKED _VHT_TXPWR_ENV_IE{
|
|
UINT8 e_id;
|
|
UINT8 len;
|
|
UINT8 max_txpwr;
|
|
CH_SEG_PAIR ch_seg_pair[0];
|
|
}VHT_TXPWR_ENV_IE;
|
|
|
|
|
|
|
|
typedef struct GNU_PACKED _VHT_CONTROL{
|
|
#ifdef RT_BIG_ENDIAN
|
|
UINT32 RDG:1;
|
|
UINT32 ACConstraint:1;
|
|
UINT32 unso_mfb:1;
|
|
UINT32 fb_tx_type:1;
|
|
UINT32 coding:1;
|
|
UINT32 gid_h:3;
|
|
UINT32 mfb_snr:6;
|
|
UINT32 mfb_bw:2;
|
|
UINT32 mfb_mcs:4;
|
|
UINT32 mfb_n_sts:3;
|
|
UINT32 mfsi_gidl:3;
|
|
UINT32 stbc_ind:1;
|
|
UINT32 comp_msi:2;
|
|
UINT32 mrq:1;
|
|
UINT32 rsv:1;
|
|
UINT32 vht:1;
|
|
#else
|
|
UINT32 vht:1;
|
|
UINT32 rsv:1;
|
|
UINT32 mrq:1;
|
|
UINT32 comp_msi:2;
|
|
UINT32 stbc_ind:1;
|
|
UINT32 mfsi_gidl:3;
|
|
UINT32 mfb_n_sts:3;
|
|
UINT32 mfb_mcs:4;
|
|
UINT32 mfb_bw:2;
|
|
UINT32 mfb_snr:6;
|
|
UINT32 gid_h:3;
|
|
UINT32 coding:1;
|
|
UINT32 fb_tx_type:1;
|
|
UINT32 unso_mfb:1;
|
|
UINT32 ACConstraint:1;
|
|
UINT32 RDG:1;
|
|
#endif
|
|
}VHT_CONTROL;
|
|
|
|
|
|
typedef struct GNU_PACKED _NDPA_PKT{
|
|
USHORT frm_ctrl;
|
|
USHORT duration;
|
|
UINT8 ra[MAC_ADDR_LEN];
|
|
UINT8 ta[MAC_ADDR_LEN];
|
|
UINT8 snd_seq;
|
|
}DNPA_PKT;
|
|
|
|
|
|
|
|
#endif /* __DOT11AC_VHT_H */
|
|
|
|
#endif /* DOT11_VHT_AC */
|
|
|