1*4882a593Smuzhiyun /****************************************************************************** 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * Copyright(c) 2007 - 2019 Realtek Corporation. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify it 6*4882a593Smuzhiyun * under the terms of version 2 of the GNU General Public License as 7*4882a593Smuzhiyun * published by the Free Software Foundation. 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * This program is distributed in the hope that it will be useful, but WITHOUT 10*4882a593Smuzhiyun * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11*4882a593Smuzhiyun * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12*4882a593Smuzhiyun * more details. 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun *****************************************************************************/ 15*4882a593Smuzhiyun #ifndef _RTW_VHT_H_ 16*4882a593Smuzhiyun #define _RTW_VHT_H_ 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #define VHT_CAP_IE_LEN 12 19*4882a593Smuzhiyun #define VHT_OP_IE_LEN 5 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun #define LDPC_VHT_ENABLE_RX BIT0 22*4882a593Smuzhiyun #define LDPC_VHT_ENABLE_TX BIT1 23*4882a593Smuzhiyun #define LDPC_VHT_TEST_TX_ENABLE BIT2 24*4882a593Smuzhiyun #define LDPC_VHT_CAP_TX BIT3 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun #define STBC_VHT_ENABLE_RX BIT0 27*4882a593Smuzhiyun #define STBC_VHT_ENABLE_TX BIT1 28*4882a593Smuzhiyun #define STBC_VHT_TEST_TX_ENABLE BIT2 29*4882a593Smuzhiyun #define STBC_VHT_CAP_TX BIT3 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun /* VHT capability info */ 32*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_MAX_MPDU_LENGTH(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 0, 2, _val) 33*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_CHL_WIDTH(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 2, 2, _val) 34*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_RX_LDPC(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 4, 1, _val) 35*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_SHORT_GI80M(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 5, 1, _val) 36*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_SHORT_GI160M(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 6, 1, _val) 37*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_TX_STBC(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 7, 1, _val) 38*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_RX_STBC(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+1, 0, 3, _val) 39*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_SU_BFER(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+1, 3, 1, _val) 40*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_SU_BFEE(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+1, 4, 1, _val) 41*4882a593Smuzhiyun /* #define SET_VHT_CAPABILITY_ELE_BFER_ANT_SUPP(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+1, 5, 3, _val) */ 42*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_SU_BFEE_STS_CAP(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+1, 5, 3, _val) 43*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_SOUNDING_DIMENSIONS(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+2, 0, 3, _val) /* B16~B18 */ 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_MU_BFER(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+2, 3, 1, _val) 46*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_MU_BFEE(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+2, 4, 1, _val) 47*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_TXOP_PS(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+2, 5, 1, _val) 48*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_HTC_VHT(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+2, 6, 1, _val) 49*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_MAX_RXAMPDU_FACTOR(_pEleStart, _val) SET_BITS_TO_LE_2BYTE((_pEleStart)+2, 7, 3, _val) /* B23~B25 */ 50*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_LINK_ADAPTION(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+2, 2, 2, _val) 51*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_MCS_RX_MAP(_pEleStart, _val) SET_BITS_TO_LE_2BYTE((_pEleStart)+4, 0, 16, _val) /* B0~B15 indicate Rx MCS MAP, we write 0 to indicate MCS0~7. by page */ 52*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_MCS_RX_HIGHEST_RATE(_pEleStart, _val) SET_BITS_TO_LE_2BYTE((_pEleStart)+6, 0, 13, _val) 53*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_MCS_TX_MAP(_pEleStart, _val) SET_BITS_TO_LE_2BYTE((_pEleStart)+8, 0, 16, _val) /* B0~B15 indicate Tx MCS MAP, we write 0 to indicate MCS0~7. by page */ 54*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_MCS_TX_HIGHEST_RATE(_pEleStart, _val) SET_BITS_TO_LE_2BYTE((_pEleStart)+10, 0, 13, _val) 55*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_RX_ANT_PATTERN(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+3, 4, 1, _val) 56*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_TX_ANT_PATTERN(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+3, 5, 1, _val) 57*4882a593Smuzhiyun #define SET_VHT_CAPABILITY_ELE_EXT_NSS_BW(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+3, 6, 2, _val) 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_MAX_MPDU_LENGTH(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 0, 2) 60*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_CHL_WIDTH(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 2, 2) 61*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_RX_LDPC(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 4, 1) 62*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_SHORT_GI80M(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 5, 1) 63*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_SHORT_GI160M(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 6, 1) 64*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_TX_STBC(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 7, 1) 65*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_RX_STBC(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1, 0, 3) 66*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_SU_BFER(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1, 3, 1) 67*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_SU_BFEE(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1, 4, 1) 68*4882a593Smuzhiyun /*phydm-beamforming*/ 69*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_SU_BFEE_STS_CAP(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1, 5, 3) 70*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_SU_BFER_SOUND_DIM_NUM(_pEleStart) LE_BITS_TO_2BYTE((_pEleStart)+2, 0, 3) 71*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_MU_BFER(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+2, 3, 1) 72*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_MU_BFEE(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+2, 4, 1) 73*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_TXOP_PS(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+2, 5, 1) 74*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_HTC_VHT(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+2, 6, 1) 75*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_MAX_RXAMPDU_FACTOR(_pEleStart) LE_BITS_TO_2BYTE((_pEleStart)+2, 7, 3) 76*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_LINK_ADAPTION(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+3, 2, 2) 77*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_RX_ANT_PATTERN(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+3, 4, 1) 78*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_TX_ANT_PATTERN(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+3, 5, 1) 79*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_EXT_NSS_BW(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+3, 6, 2) 80*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_RX_MCS(_pEleStart) ((_pEleStart)+4) 81*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_MCS_RX_HIGHEST_RATE(_pEleStart) LE_BITS_TO_2BYTE((_pEleStart)+6, 0, 13) 82*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_TX_MCS(_pEleStart) ((_pEleStart)+8) 83*4882a593Smuzhiyun #define GET_VHT_CAPABILITY_ELE_MCS_TX_HIGHEST_RATE(_pEleStart) LE_BITS_TO_2BYTE((_pEleStart)+10, 0, 13) 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun /* VHT Operation Information Element */ 87*4882a593Smuzhiyun #define SET_VHT_OPERATION_ELE_CHL_WIDTH(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 0, 8, _val) 88*4882a593Smuzhiyun #define SET_VHT_OPERATION_ELE_CHL_CENTER_FREQ1(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart+1, 0, 8, _val) 89*4882a593Smuzhiyun #define SET_VHT_OPERATION_ELE_CHL_CENTER_FREQ2(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart+2, 0, 8, _val) 90*4882a593Smuzhiyun #define SET_VHT_OPERATION_ELE_BASIC_MCS_SET(_pEleStart, _val) SET_BITS_TO_LE_2BYTE((_pEleStart)+3, 0, 16, _val) 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun #define GET_VHT_OPERATION_ELE_CHL_WIDTH(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 0, 8) 93*4882a593Smuzhiyun #define GET_VHT_OPERATION_ELE_CENTER_FREQ1(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1, 0, 8) 94*4882a593Smuzhiyun #define GET_VHT_OPERATION_ELE_CENTER_FREQ2(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+2, 0, 8) 95*4882a593Smuzhiyun #define GET_VHT_OPERATION_ELE_BASIC_MCS_SET(_pEleStart) LE_BITS_TO_2BYTE((_pEleStart)+3, 0, 16) 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun /* VHT Operating Mode */ 98*4882a593Smuzhiyun #define SET_VHT_OPERATING_MODE_FIELD_CHNL_WIDTH(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 0, 2, _val) 99*4882a593Smuzhiyun #define SET_VHT_OPERATING_MODE_FIELD_RX_NSS(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 4, 3, _val) 100*4882a593Smuzhiyun #define SET_VHT_OPERATING_MODE_FIELD_RX_NSS_TYPE(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 7, 1, _val) 101*4882a593Smuzhiyun #define GET_VHT_OPERATING_MODE_FIELD_CHNL_WIDTH(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 0, 2) 102*4882a593Smuzhiyun #define GET_VHT_OPERATING_MODE_FIELD_RX_NSS(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 4, 3) 103*4882a593Smuzhiyun #define GET_VHT_OPERATING_MODE_FIELD_RX_NSS_TYPE(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 7, 1) 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun #define SET_EXT_CAPABILITY_ELE_OP_MODE_NOTIF(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+7, 6, 1, _val) 106*4882a593Smuzhiyun #define GET_EXT_CAPABILITY_ELE_OP_MODE_NOTIF(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+7, 6, 1) 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun #define VHT_MAX_MPDU_LEN_MAX 3 109*4882a593Smuzhiyun extern const u16 _vht_max_mpdu_len[]; 110*4882a593Smuzhiyun #define vht_max_mpdu_len(val) (((val) >= VHT_MAX_MPDU_LEN_MAX) ? _vht_max_mpdu_len[VHT_MAX_MPDU_LEN_MAX] : _vht_max_mpdu_len[(val)]) 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun #define VHT_SUP_CH_WIDTH_SET_MAX 3 113*4882a593Smuzhiyun extern const u8 _vht_sup_ch_width_set_to_bw_cap[]; 114*4882a593Smuzhiyun #define vht_sup_ch_width_set_to_bw_cap(set) (((set) >= VHT_SUP_CH_WIDTH_SET_MAX) ? _vht_sup_ch_width_set_to_bw_cap[VHT_SUP_CH_WIDTH_SET_MAX] : _vht_sup_ch_width_set_to_bw_cap[(set)]) 115*4882a593Smuzhiyun extern const char *const _vht_sup_ch_width_set_str[]; 116*4882a593Smuzhiyun #define vht_sup_ch_width_set_str(set) (((set) >= VHT_SUP_CH_WIDTH_SET_MAX) ? _vht_sup_ch_width_set_str[VHT_SUP_CH_WIDTH_SET_MAX] : _vht_sup_ch_width_set_str[(set)]) 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun #define VHT_MAX_AMPDU_LEN(f) ((1 << (13 + f)) - 1) 119*4882a593Smuzhiyun void dump_vht_cap_ie(void *sel, const u8 *ie, u32 ie_len); 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun #define VHT_OP_CH_WIDTH_MAX 4 122*4882a593Smuzhiyun extern const char *const _vht_op_ch_width_str[]; 123*4882a593Smuzhiyun #define vht_op_ch_width_str(ch_width) (((ch_width) >= VHT_OP_CH_WIDTH_MAX) ? _vht_op_ch_width_str[VHT_OP_CH_WIDTH_MAX] : _vht_op_ch_width_str[(ch_width)]) 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun void dump_vht_op_ie(void *sel, const u8 *ie, u32 ie_len); 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun struct vht_bf_cap { 128*4882a593Smuzhiyun u8 is_mu_bfer; 129*4882a593Smuzhiyun u8 su_sound_dim; 130*4882a593Smuzhiyun }; 131*4882a593Smuzhiyun 132*4882a593Smuzhiyun struct vht_priv { 133*4882a593Smuzhiyun /* VHT IE is configured by upper layer or not (hostapd or wpa_supplicant) */ 134*4882a593Smuzhiyun u8 upper_layer_setting; 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun u8 vht_option; 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun u8 ldpc_cap; 139*4882a593Smuzhiyun u8 stbc_cap; 140*4882a593Smuzhiyun u8 rx_stbc_nss; /* Support nss spatial stream */ 141*4882a593Smuzhiyun u16 beamform_cap; 142*4882a593Smuzhiyun struct vht_bf_cap ap_bf_cap; 143*4882a593Smuzhiyun u8 num_snd_dim; 144*4882a593Smuzhiyun u8 bfme_sts; 145*4882a593Smuzhiyun u8 sgi_80m; 146*4882a593Smuzhiyun u8 sgi_160m; 147*4882a593Smuzhiyun u8 ampdu_len;/* A-MPDU length exponent : 0 to 7 */ 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun /* 150*4882a593Smuzhiyun * max_amsdu_len 151*4882a593Smuzhiyun * 0: 3895 bytes 152*4882a593Smuzhiyun * 1: 7991 bytes 153*4882a593Smuzhiyun * 2: 11454 bytes 154*4882a593Smuzhiyun */ 155*4882a593Smuzhiyun u8 max_mpdu_len; 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun u8 vht_highest_rate; 158*4882a593Smuzhiyun u8 vht_mcs_map[2]; 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun u8 txop_ps; /* TXOP power save mode*/ 161*4882a593Smuzhiyun u8 htc_vht; /* VHT variant HT Control*/ 162*4882a593Smuzhiyun u8 link_adap_cap; /* VHT Link Adaptation Capable */ 163*4882a593Smuzhiyun u8 tx_ant_pattern; /* Tx Antenna Pattern Consistency */ 164*4882a593Smuzhiyun u8 rx_ant_pattern; /* Rx Antenna Pattern Consistency */ 165*4882a593Smuzhiyun u8 ext_nss_bw; /* Extended NSS BW Support */ 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun u8 op_present:1; /* vht_op is present */ 168*4882a593Smuzhiyun u8 notify_present:1; /* vht_op_mode_notify is present */ 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun u8 vht_cap[32]; 171*4882a593Smuzhiyun u8 vht_op[VHT_OP_IE_LEN]; 172*4882a593Smuzhiyun u8 vht_op_mode_notify; 173*4882a593Smuzhiyun 174*4882a593Smuzhiyun /* Backup these two VHT IEs from hostapd/wpa_supplicant for restore usage */ 175*4882a593Smuzhiyun u8 vht_cap_ie_backup[VHT_CAP_IE_LEN]; 176*4882a593Smuzhiyun u8 vht_op_ie_backup[VHT_OP_IE_LEN]; 177*4882a593Smuzhiyun }; 178*4882a593Smuzhiyun 179*4882a593Smuzhiyun #ifdef ROKU_PRIVATE 180*4882a593Smuzhiyun struct vht_priv_infra_ap { 181*4882a593Smuzhiyun 182*4882a593Smuzhiyun /* Infra mode, only store for AP's info, not intersection of STA and AP*/ 183*4882a593Smuzhiyun u8 ldpc_cap_infra_ap; 184*4882a593Smuzhiyun u8 stbc_cap_infra_ap; 185*4882a593Smuzhiyun u16 beamform_cap_infra_ap; 186*4882a593Smuzhiyun u8 vht_mcs_map_infra_ap[2]; 187*4882a593Smuzhiyun u8 vht_mcs_map_tx_infra_ap[2]; 188*4882a593Smuzhiyun u8 channel_width_infra_ap; 189*4882a593Smuzhiyun u8 number_of_streams_infra_ap; 190*4882a593Smuzhiyun }; 191*4882a593Smuzhiyun #endif /* ROKU_PRIVATE */ 192*4882a593Smuzhiyun 193*4882a593Smuzhiyun u8 rtw_get_vht_highest_rate(u8 *pvht_mcs_map); 194*4882a593Smuzhiyun u16 rtw_vht_mcs_to_data_rate(u8 bw, u8 short_GI, u8 vht_mcs_rate); 195*4882a593Smuzhiyun u64 rtw_vht_mcs_map_to_bitmap(u8 *mcs_map, u8 nss); 196*4882a593Smuzhiyun struct protocol_cap_t; 197*4882a593Smuzhiyun struct role_cap_t; 198*4882a593Smuzhiyun void rtw_vht_get_dft_setting(_adapter *padapter, 199*4882a593Smuzhiyun struct protocol_cap_t *dft_proto_cap, struct role_cap_t *dft_cap); 200*4882a593Smuzhiyun void rtw_vht_get_real_setting(_adapter *padapter); 201*4882a593Smuzhiyun u32 rtw_build_vht_operation_ie(_adapter *padapter, u8 *pbuf, u8 channel); 202*4882a593Smuzhiyun u32 rtw_build_vht_op_mode_notify_ie(_adapter *padapter, u8 *pbuf, u8 bw); 203*4882a593Smuzhiyun u32 rtw_build_vht_cap_ie(_adapter *padapter, u8 *pbuf); 204*4882a593Smuzhiyun void update_sta_vht_info_apmode(_adapter *padapter, void *psta); 205*4882a593Smuzhiyun void update_hw_vht_param(_adapter *padapter); 206*4882a593Smuzhiyun void VHT_caps_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE); 207*4882a593Smuzhiyun #ifdef ROKU_PRIVATE 208*4882a593Smuzhiyun void VHT_caps_handler_infra_ap(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE); 209*4882a593Smuzhiyun #endif /* ROKU_PRIVATE */ 210*4882a593Smuzhiyun void VHT_operation_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE); 211*4882a593Smuzhiyun void rtw_process_vht_op_mode_notify(_adapter *padapter, u8 *pframe, void *sta); 212*4882a593Smuzhiyun u32 rtw_restructure_vht_ie(_adapter *padapter, u8 *in_ie, u8 *out_ie, uint in_len, uint *pout_len, struct country_chplan *req_chplan); 213*4882a593Smuzhiyun void VHTOnAssocRsp(_adapter *padapter); 214*4882a593Smuzhiyun u8 rtw_vht_mcsmap_to_nss(u8 *pvht_mcs_map); 215*4882a593Smuzhiyun void rtw_vht_nss_to_mcsmap(u8 nss, u8 *target_mcs_map, u8 *cur_mcs_map); 216*4882a593Smuzhiyun void rtw_vht_ies_attach(_adapter *padapter, WLAN_BSSID_EX *pcur_network); 217*4882a593Smuzhiyun void rtw_vht_ies_detach(_adapter *padapter, WLAN_BSSID_EX *pcur_network); 218*4882a593Smuzhiyun void rtw_check_for_vht20(_adapter *adapter, u8 *ies, int ies_len); 219*4882a593Smuzhiyun void rtw_update_drv_vht_cap(_adapter *padapter, u8 *vht_cap_ie); 220*4882a593Smuzhiyun void rtw_check_vht_ies(_adapter *padapter, WLAN_BSSID_EX *pnetwork); 221*4882a593Smuzhiyun void rtw_reattach_vht_ies(_adapter *padapter, WLAN_BSSID_EX *pnetwork); 222*4882a593Smuzhiyun #endif /* _RTW_VHT_H_ */ 223