mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-15 01:01:56 -04:00
qcacmn: add HE radiotap flags for MU cases
HE field in radiotap header are not being updated for MU frames. Add support for MU-MIMO and MU-OFDMA frames. Change-Id: If33e9f9039c8df6e1bb8f591879d4defed184ac8 CRs-Fixed: 2191215
This commit is contained in:
parent
f6862a6527
commit
1fe9fd414a
3 changed files with 218 additions and 124 deletions
|
|
@ -752,10 +752,10 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
|
|||
QDF_MON_STATUS_HE_TRIG_FORMAT_TYPE;
|
||||
} else {
|
||||
ppdu_info->rx_status.he_data1 =
|
||||
QDF_MON_STATUS_HE_SU_OR_EXT_SU_FORMAT_TYPE;
|
||||
QDF_MON_STATUS_HE_SU_FORMAT_TYPE;
|
||||
}
|
||||
|
||||
/*data1*/
|
||||
/* data1 */
|
||||
ppdu_info->rx_status.he_data1 |=
|
||||
QDF_MON_STATUS_HE_BSS_COLOR_KNOWN |
|
||||
QDF_MON_STATUS_HE_BEAM_CHANGE_KNOWN |
|
||||
|
|
@ -768,7 +768,7 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
|
|||
QDF_MON_STATUS_HE_DATA_BW_RU_KNOWN |
|
||||
QDF_MON_STATUS_HE_DOPPLER_KNOWN;
|
||||
|
||||
/*data2*/
|
||||
/* data2 */
|
||||
ppdu_info->rx_status.he_data2 =
|
||||
QDF_MON_STATUS_HE_GI_KNOWN;
|
||||
ppdu_info->rx_status.he_data2 |=
|
||||
|
|
@ -779,7 +779,7 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
|
|||
QDF_MON_STATUS_PRE_FEC_PADDING_KNOWN |
|
||||
QDF_MON_STATUS_MIDABLE_PERIODICITY_KNOWN;
|
||||
|
||||
/*data3*/
|
||||
/* data3 */
|
||||
value = HAL_RX_GET(he_sig_a_su_info,
|
||||
HE_SIG_A_SU_INFO_0, BSS_COLOR_ID);
|
||||
ppdu_info->rx_status.he_data3 = value;
|
||||
|
|
@ -791,11 +791,13 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
|
|||
HE_SIG_A_SU_INFO_0, DL_UL_FLAG);
|
||||
value = value << QDF_MON_STATUS_DL_UL_SHIFT;
|
||||
ppdu_info->rx_status.he_data3 |= value;
|
||||
|
||||
value = HAL_RX_GET(he_sig_a_su_info,
|
||||
HE_SIG_A_SU_INFO_0, TRANSMIT_MCS);
|
||||
ppdu_info->rx_status.mcs = value;
|
||||
value = value << QDF_MON_STATUS_TRANSMIT_MCS_SHIFT;
|
||||
ppdu_info->rx_status.he_data3 |= value;
|
||||
|
||||
value = HAL_RX_GET(he_sig_a_su_info,
|
||||
HE_SIG_A_SU_INFO_0, DCM);
|
||||
he_dcm = value;
|
||||
|
|
@ -816,12 +818,12 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
|
|||
value = value << QDF_MON_STATUS_STBC_SHIFT;
|
||||
ppdu_info->rx_status.he_data3 |= value;
|
||||
|
||||
/*data4*/
|
||||
/* data4 */
|
||||
value = HAL_RX_GET(he_sig_a_su_info, HE_SIG_A_SU_INFO_0,
|
||||
SPATIAL_REUSE);
|
||||
ppdu_info->rx_status.he_data4 = value;
|
||||
|
||||
/*data5*/
|
||||
/* data5 */
|
||||
value = HAL_RX_GET(he_sig_a_su_info,
|
||||
HE_SIG_A_SU_INFO_0, TRANSMIT_BW);
|
||||
ppdu_info->rx_status.he_data5 = value;
|
||||
|
|
@ -869,7 +871,7 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
|
|||
value = value << QDF_MON_STATUS_PE_DISAMBIGUITY_SHIFT;
|
||||
ppdu_info->rx_status.he_data5 |= value;
|
||||
|
||||
/*data6*/
|
||||
/* data6 */
|
||||
value = HAL_RX_GET(he_sig_a_su_info, HE_SIG_A_SU_INFO_0, NSTS);
|
||||
value++;
|
||||
ppdu_info->rx_status.nss = value;
|
||||
|
|
@ -891,23 +893,114 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
|
|||
HAL_RX_OFFSET(PHYRX_HE_SIG_A_MU_DL_0,
|
||||
HE_SIG_A_MU_DL_INFO_PHYRX_HE_SIG_A_MU_DL_INFO_DETAILS);
|
||||
|
||||
ppdu_info->rx_status.he_sig_A1 =
|
||||
*((uint32_t *)((uint8_t *)rx_tlv +
|
||||
HAL_RX_OFFSET(PHYRX_HE_SIG_A_MU_DL_0,
|
||||
HE_SIG_A_MU_DL_INFO_PHYRX_HE_SIG_A_MU_DL_INFO_DETAILS)));
|
||||
ppdu_info->rx_status.he_sig_A1 |=
|
||||
QDF_MON_STATUS_HE_SIG_A1_HE_FORMAT_MU;
|
||||
ppdu_info->rx_status.he_sig_A1_known =
|
||||
QDF_MON_STATUS_HE_SIG_A1_MU_KNOWN_ALL;
|
||||
|
||||
ppdu_info->rx_status.he_sig_A2 =
|
||||
*((uint32_t *)((uint8_t *)rx_tlv +
|
||||
HAL_RX_OFFSET(PHYRX_HE_SIG_A_MU_DL_1,
|
||||
HE_SIG_A_MU_DL_INFO_PHYRX_HE_SIG_A_MU_DL_INFO_DETAILS)));
|
||||
ppdu_info->rx_status.he_sig_A2_known =
|
||||
QDF_MON_STATUS_HE_SIG_A2_MU_KNOWN_ALL;
|
||||
|
||||
ppdu_info->rx_status.he_mu_flags = 1;
|
||||
|
||||
/* HE Flags */
|
||||
/*data1*/
|
||||
ppdu_info->rx_status.he_data1 =
|
||||
QDF_MON_STATUS_HE_MU_FORMAT_TYPE;
|
||||
ppdu_info->rx_status.he_data1 |=
|
||||
QDF_MON_STATUS_HE_BSS_COLOR_KNOWN |
|
||||
QDF_MON_STATUS_HE_DL_UL_KNOWN |
|
||||
QDF_MON_STATUS_HE_LDPC_EXTRA_SYMBOL_KNOWN |
|
||||
QDF_MON_STATUS_HE_STBC_KNOWN |
|
||||
QDF_MON_STATUS_HE_DATA_BW_RU_KNOWN |
|
||||
QDF_MON_STATUS_HE_DOPPLER_KNOWN;
|
||||
|
||||
/* data2 */
|
||||
ppdu_info->rx_status.he_data2 =
|
||||
QDF_MON_STATUS_HE_GI_KNOWN;
|
||||
ppdu_info->rx_status.he_data2 |=
|
||||
QDF_MON_STATUS_LTF_SYMBOLS_KNOWN |
|
||||
QDF_MON_STATUS_PRE_FEC_PADDING_KNOWN |
|
||||
QDF_MON_STATUS_PE_DISAMBIGUITY_KNOWN |
|
||||
QDF_MON_STATUS_TXOP_KNOWN |
|
||||
QDF_MON_STATUS_MIDABLE_PERIODICITY_KNOWN;
|
||||
|
||||
/*data3*/
|
||||
value = HAL_RX_GET(he_sig_a_mu_dl_info,
|
||||
HE_SIG_A_MU_DL_INFO_0, BSS_COLOR_ID);
|
||||
ppdu_info->rx_status.he_data3 = value;
|
||||
|
||||
value = HAL_RX_GET(he_sig_a_mu_dl_info,
|
||||
HE_SIG_A_MU_DL_INFO_0, DL_UL_FLAG);
|
||||
value = value << QDF_MON_STATUS_DL_UL_SHIFT;
|
||||
ppdu_info->rx_status.he_data3 |= value;
|
||||
|
||||
value = HAL_RX_GET(he_sig_a_mu_dl_info,
|
||||
HE_SIG_A_MU_DL_INFO_1,
|
||||
LDPC_EXTRA_SYMBOL);
|
||||
value = value << QDF_MON_STATUS_LDPC_EXTRA_SYMBOL_SHIFT;
|
||||
ppdu_info->rx_status.he_data3 |= value;
|
||||
|
||||
value = HAL_RX_GET(he_sig_a_mu_dl_info,
|
||||
HE_SIG_A_MU_DL_INFO_1, STBC);
|
||||
he_stbc = value;
|
||||
value = value << QDF_MON_STATUS_STBC_SHIFT;
|
||||
ppdu_info->rx_status.he_data3 |= value;
|
||||
|
||||
/*data4*/
|
||||
value = HAL_RX_GET(he_sig_a_mu_dl_info, HE_SIG_A_MU_DL_INFO_0,
|
||||
SPATIAL_REUSE);
|
||||
ppdu_info->rx_status.he_data4 = value;
|
||||
|
||||
/*data5*/
|
||||
value = HAL_RX_GET(he_sig_a_mu_dl_info,
|
||||
HE_SIG_A_MU_DL_INFO_0, TRANSMIT_BW);
|
||||
ppdu_info->rx_status.he_data5 = value;
|
||||
ppdu_info->rx_status.bw = value;
|
||||
|
||||
value = HAL_RX_GET(he_sig_a_mu_dl_info,
|
||||
HE_SIG_A_MU_DL_INFO_0, CP_LTF_SIZE);
|
||||
switch (value) {
|
||||
case 0:
|
||||
he_gi = HE_GI_0_8;
|
||||
he_ltf = HE_LTF_4_X;
|
||||
break;
|
||||
case 1:
|
||||
he_gi = HE_GI_0_8;
|
||||
he_ltf = HE_LTF_2_X;
|
||||
break;
|
||||
case 2:
|
||||
he_gi = HE_GI_1_6;
|
||||
he_ltf = HE_LTF_2_X;
|
||||
break;
|
||||
case 3:
|
||||
he_gi = HE_GI_3_2;
|
||||
he_ltf = HE_LTF_4_X;
|
||||
break;
|
||||
}
|
||||
ppdu_info->rx_status.sgi = he_gi;
|
||||
value = he_gi << QDF_MON_STATUS_GI_SHIFT;
|
||||
ppdu_info->rx_status.he_data5 |= value;
|
||||
|
||||
value = he_ltf << QDF_MON_STATUS_HE_LTF_SHIFT;
|
||||
ppdu_info->rx_status.he_data5 |= value;
|
||||
|
||||
value = HAL_RX_GET(he_sig_a_mu_dl_info, HE_SIG_A_MU_DL_INFO_1,
|
||||
PACKET_EXTENSION_A_FACTOR);
|
||||
value = value << QDF_MON_STATUS_PRE_FEC_PAD_SHIFT;
|
||||
ppdu_info->rx_status.he_data5 |= value;
|
||||
|
||||
|
||||
value = HAL_RX_GET(he_sig_a_mu_dl_info, HE_SIG_A_MU_DL_INFO_1,
|
||||
PACKET_EXTENSION_PE_DISAMBIGUITY);
|
||||
value = value << QDF_MON_STATUS_PE_DISAMBIGUITY_SHIFT;
|
||||
ppdu_info->rx_status.he_data5 |= value;
|
||||
|
||||
/*data6*/
|
||||
value = HAL_RX_GET(he_sig_a_mu_dl_info, HE_SIG_A_MU_DL_INFO_0,
|
||||
DOPPLER_INDICATION);
|
||||
value = value << QDF_MON_STATUS_DOPPLER_SHIFT;
|
||||
ppdu_info->rx_status.he_data6 |= value;
|
||||
|
||||
value = HAL_RX_GET(he_sig_a_mu_dl_info, HE_SIG_A_MU_DL_INFO_1,
|
||||
TXOP_DURATION);
|
||||
value = value << QDF_MON_STATUS_TXOP_SHIFT;
|
||||
ppdu_info->rx_status.he_data6 |= value;
|
||||
|
||||
/* HE-MU Flags */
|
||||
/* HE-MU-flags1 */
|
||||
ppdu_info->rx_status.he_flags1 =
|
||||
QDF_MON_STATUS_SIG_B_MCS_KNOWN |
|
||||
QDF_MON_STATUS_SIG_B_DCM_KNOWN |
|
||||
|
|
@ -923,6 +1016,7 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
|
|||
value = value << QDF_MON_STATUS_DCM_FLAG_1_SHIFT;
|
||||
ppdu_info->rx_status.he_flags1 |= value;
|
||||
|
||||
/* HE-MU-flags2 */
|
||||
ppdu_info->rx_status.he_flags2 =
|
||||
QDF_MON_STATUS_BW_KNOWN;
|
||||
|
||||
|
|
@ -963,32 +1057,50 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
|
|||
uint8_t *he_sig_b2_mu_info = (uint8_t *)rx_tlv +
|
||||
HAL_RX_OFFSET(PHYRX_HE_SIG_B2_MU_0,
|
||||
HE_SIG_B2_MU_INFO_PHYRX_HE_SIG_B2_MU_INFO_DETAILS);
|
||||
/*
|
||||
* Not all "HE" fields can be updated from
|
||||
* WIFIPHYRX_HE_SIG_A_MU_DL_E TLV. Use WIFIPHYRX_HE_SIG_B2_MU_E
|
||||
* to populate rest of the "HE" fields for MU scenarios.
|
||||
*/
|
||||
|
||||
ppdu_info->rx_status.he_mu_other_flags = 1;
|
||||
/* HE-data1 */
|
||||
ppdu_info->rx_status.he_data1 |=
|
||||
QDF_MON_STATUS_HE_MCS_KNOWN |
|
||||
QDF_MON_STATUS_HE_CODING_KNOWN;
|
||||
|
||||
ppdu_info->rx_status.he_per_user_known =
|
||||
QDF_MON_STATUS_STA_ID_PER_USER_KNOWN |
|
||||
QDF_MON_STATUS_STA_CODING_KNOWN |
|
||||
QDF_MON_STATUS_STA_SPATIAL_CONFIG_KNOWN |
|
||||
QDF_MON_STATUS_STA_MCS_KNOWN;
|
||||
/* HE-data2 */
|
||||
|
||||
/* HE-data3 */
|
||||
value = HAL_RX_GET(he_sig_b2_mu_info,
|
||||
HE_SIG_B2_MU_INFO_0, STA_MCS);
|
||||
ppdu_info->rx_status.mcs = value;
|
||||
value = value << QDF_MON_STATUS_TRANSMIT_MCS_SHIFT;
|
||||
ppdu_info->rx_status.he_data3 |= value;
|
||||
|
||||
|
||||
value = HAL_RX_GET(he_sig_b2_mu_info,
|
||||
HE_SIG_B2_MU_INFO_0, STA_CODING);
|
||||
value = value << QDF_MON_STATUS_CODING_SHIFT;
|
||||
ppdu_info->rx_status.he_data3 |= value;
|
||||
|
||||
/* HE-data4 */
|
||||
value = HAL_RX_GET(he_sig_b2_mu_info,
|
||||
HE_SIG_B2_MU_INFO_0, STA_ID);
|
||||
ppdu_info->rx_status.he_per_user_1 = value;
|
||||
value = HAL_RX_GET(he_sig_b2_mu_info,
|
||||
HE_SIG_B2_MU_INFO_0, STA_SPATIAL_CONFIG);
|
||||
value = value << QDF_MON_STATUS_STA_SPATIAL_SHIFT;
|
||||
ppdu_info->rx_status.he_per_user_1 |= value;
|
||||
value = value << QDF_MON_STATUS_STA_ID_SHIFT;
|
||||
ppdu_info->rx_status.he_data4 |= value;
|
||||
|
||||
/* HE-data5 */
|
||||
|
||||
/* HE-data6 */
|
||||
value = HAL_RX_GET(he_sig_b2_mu_info,
|
||||
HE_SIG_B2_OFDMA_INFO_0, STA_MCS);
|
||||
ppdu_info->rx_status.he_per_user_2 = value;
|
||||
value = HAL_RX_GET(he_sig_b2_mu_info,
|
||||
HE_SIG_B2_OFDMA_INFO_0, STA_CODING);
|
||||
value = value << QDF_MON_STATUS_STA_DCM_SHIFT;
|
||||
ppdu_info->rx_status.he_per_user_2 |= value;
|
||||
HE_SIG_B2_MU_INFO_0, NSTS);
|
||||
/* value n indicates n+1 spatial streams */
|
||||
value++;
|
||||
ppdu_info->rx_status.nss = value;
|
||||
ppdu_info->rx_status.he_data6 |= value;
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
case WIFIPHYRX_HE_SIG_B2_OFDMA_E:
|
||||
{
|
||||
|
|
@ -996,44 +1108,61 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
|
|||
(uint8_t *)rx_tlv +
|
||||
HAL_RX_OFFSET(PHYRX_HE_SIG_B2_OFDMA_0,
|
||||
HE_SIG_B2_OFDMA_INFO_PHYRX_HE_SIG_B2_OFDMA_INFO_DETAILS);
|
||||
ppdu_info->rx_status.he_sig_b_user =
|
||||
*((uint32_t *)((uint8_t *)rx_tlv +
|
||||
HAL_RX_OFFSET(PHYRX_HE_SIG_B2_OFDMA_0,
|
||||
HE_SIG_B2_OFDMA_INFO_PHYRX_HE_SIG_B2_OFDMA_INFO_DETAILS)));
|
||||
ppdu_info->rx_status.he_sig_b_user_known =
|
||||
QDF_MON_STATUS_HE_SIG_B_USER_KNOWN_SIG_B_ALL;
|
||||
|
||||
ppdu_info->rx_status.he_per_user_known =
|
||||
QDF_MON_STATUS_STA_ID_PER_USER_KNOWN |
|
||||
QDF_MON_STATUS_STA_NSTS_KNOWN |
|
||||
QDF_MON_STATUS_STA_TX_BF_KNOWN |
|
||||
QDF_MON_STATUS_STA_MCS_KNOWN |
|
||||
QDF_MON_STATUS_STA_DCM_KNOWN |
|
||||
QDF_MON_STATUS_STA_CODING_KNOWN;
|
||||
/*
|
||||
* Not all "HE" fields can be updated from
|
||||
* WIFIPHYRX_HE_SIG_A_MU_DL_E TLV. Use WIFIPHYRX_HE_SIG_B2_MU_E
|
||||
* to populate rest of "HE" fields for MU OFDMA scenarios.
|
||||
*/
|
||||
|
||||
value = HAL_RX_GET(he_sig_b2_ofdma_info,
|
||||
HE_SIG_B2_OFDMA_INFO_0, STA_ID);
|
||||
ppdu_info->rx_status.he_per_user_1 = value;
|
||||
value = HAL_RX_GET(he_sig_b2_ofdma_info,
|
||||
HE_SIG_B2_OFDMA_INFO_0, NSTS);
|
||||
value = value << QDF_MON_STATUS_STA_SPATIAL_SHIFT;
|
||||
ppdu_info->rx_status.he_per_user_1 |= value;
|
||||
value = HAL_RX_GET(he_sig_b2_ofdma_info,
|
||||
HE_SIG_B2_OFDMA_INFO_0, TXBF);
|
||||
value = value << QDF_MON_STATUS_TXBF_SHIFT;
|
||||
ppdu_info->rx_status.he_per_user_1 |= value;
|
||||
/* HE-data1 */
|
||||
ppdu_info->rx_status.he_data1 |=
|
||||
QDF_MON_STATUS_HE_MCS_KNOWN |
|
||||
QDF_MON_STATUS_HE_DCM_KNOWN |
|
||||
QDF_MON_STATUS_HE_CODING_KNOWN;
|
||||
|
||||
/* HE-data2 */
|
||||
ppdu_info->rx_status.he_data2 |=
|
||||
QDF_MON_STATUS_TXBF_KNOWN;
|
||||
|
||||
/* HE-data3 */
|
||||
value = HAL_RX_GET(he_sig_b2_ofdma_info,
|
||||
HE_SIG_B2_OFDMA_INFO_0, STA_MCS);
|
||||
ppdu_info->rx_status.he_per_user_2 = value;
|
||||
ppdu_info->rx_status.mcs = value;
|
||||
value = value << QDF_MON_STATUS_TRANSMIT_MCS_SHIFT;
|
||||
ppdu_info->rx_status.he_data3 |= value;
|
||||
|
||||
value = HAL_RX_GET(he_sig_b2_ofdma_info,
|
||||
HE_SIG_B2_OFDMA_INFO_0, STA_DCM);
|
||||
value = value << QDF_MON_STATUS_STA_MCS_SHIFT;
|
||||
ppdu_info->rx_status.he_per_user_2 |= value;
|
||||
he_dcm = value;
|
||||
value = value << QDF_MON_STATUS_DCM_SHIFT;
|
||||
ppdu_info->rx_status.he_data3 |= value;
|
||||
|
||||
value = HAL_RX_GET(he_sig_b2_ofdma_info,
|
||||
HE_SIG_B2_OFDMA_INFO_0, STA_CODING);
|
||||
value = value << QDF_MON_STATUS_STA_DCM_SHIFT;
|
||||
ppdu_info->rx_status.he_per_user_2 |= value;
|
||||
value = value << QDF_MON_STATUS_CODING_SHIFT;
|
||||
ppdu_info->rx_status.he_data3 |= value;
|
||||
|
||||
/* HE-data4 */
|
||||
value = HAL_RX_GET(he_sig_b2_ofdma_info,
|
||||
HE_SIG_B2_OFDMA_INFO_0, STA_ID);
|
||||
value = value << QDF_MON_STATUS_STA_ID_SHIFT;
|
||||
ppdu_info->rx_status.he_data4 |= value;
|
||||
|
||||
/* HE-data5 */
|
||||
value = HAL_RX_GET(he_sig_b2_ofdma_info,
|
||||
HE_SIG_B2_OFDMA_INFO_0, TXBF);
|
||||
value = value << QDF_MON_STATUS_TXBF_SHIFT;
|
||||
ppdu_info->rx_status.he_data5 |= value;
|
||||
|
||||
/* HE-data6 */
|
||||
value = HAL_RX_GET(he_sig_b2_ofdma_info,
|
||||
HE_SIG_B2_OFDMA_INFO_0, NSTS);
|
||||
/* value n indicates n+1 spatial streams */
|
||||
value++;
|
||||
ppdu_info->rx_status.nss = value;
|
||||
ppdu_info->rx_status.he_data6 |= value;
|
||||
|
||||
break;
|
||||
}
|
||||
case WIFIPHYRX_RSSI_LEGACY_E:
|
||||
|
|
|
|||
|
|
@ -164,10 +164,6 @@
|
|||
* struct mon_rx_status - This will have monitor mode rx_status extracted from
|
||||
* htt_rx_desc used later to update radiotap information.
|
||||
* @tsft: Time Synchronization Function timer
|
||||
* @he_sig_A1: HE (11ax) sig A1 field
|
||||
* @he_sig_A2: HE (11ax) sig A1 field
|
||||
* @he_sig_b_user: HE (11ax) sig B user field
|
||||
* @he_sig_b_user_known: HE (11ax) sig B user known field
|
||||
* @preamble_type: Preamble type in radio header
|
||||
* @chan_freq: Capture channel frequency
|
||||
* @chan_num: Capture channel number
|
||||
|
|
@ -222,10 +218,6 @@
|
|||
*/
|
||||
struct mon_rx_status {
|
||||
uint64_t tsft;
|
||||
uint32_t he_sig_A1;
|
||||
uint32_t he_sig_A2;
|
||||
uint32_t he_sig_b_user;
|
||||
uint32_t he_sig_b_user_known;
|
||||
uint32_t preamble_type;
|
||||
uint16_t chan_freq;
|
||||
uint16_t chan_num;
|
||||
|
|
@ -292,10 +284,6 @@ struct mon_rx_status {
|
|||
};
|
||||
|
||||
/* Masks for HE SIG known fields in mon_rx_status structure */
|
||||
#define QDF_MON_STATUS_HE_SIG_A1_SU_KNOWN_ALL 0x000007ff
|
||||
#define QDF_MON_STATUS_HE_SIG_A1_MU_KNOWN_ALL 0x000003ff
|
||||
#define QDF_MON_STATUS_HE_SIG_A2_SU_KNOWN_ALL 0x00000ffd
|
||||
#define QDF_MON_STATUS_HE_SIG_A2_MU_KNOWN_ALL 0x00000ffd
|
||||
#define QDF_MON_STATUS_HE_SIG_B_COMMON_KNOWN_RU0 0x00000001
|
||||
#define QDF_MON_STATUS_HE_SIG_B_COMMON_KNOWN_RU1 0x00000002
|
||||
#define QDF_MON_STATUS_HE_SIG_B_COMMON_KNOWN_RU2 0x00000004
|
||||
|
|
@ -303,7 +291,6 @@ struct mon_rx_status {
|
|||
#define QDF_MON_STATUS_HE_SIG_B_USER_KNOWN_SIG_B_ALL 0x00fe0000
|
||||
#define QDF_MON_STATUS_HE_SIG_A1_HE_FORMAT_SU 0x00000000
|
||||
#define QDF_MON_STATUS_HE_SIG_A1_HE_FORMAT_EXT_SU 0x40000000
|
||||
#define QDF_MON_STATUS_HE_SIG_A1_HE_FORMAT_MU 0x80000000
|
||||
#define QDF_MON_STATUS_HE_SIG_A1_HE_FORMAT_TRIG 0xc0000000
|
||||
|
||||
/* DHCP Related Mask */
|
||||
|
|
@ -366,8 +353,12 @@ struct mon_rx_status {
|
|||
#define QDF_NBUF_IPA_CHECK_MASK 0x80000000
|
||||
|
||||
/* HE Radiotap data1 Mask */
|
||||
#define QDF_MON_STATUS_HE_SU_FORMAT_TYPE 0x0000
|
||||
#define QDF_MON_STATUS_HE_EXT_SU_FORMAT_TYPE 0x0001
|
||||
#define QDF_MON_STATUS_HE_MU_FORMAT_TYPE 0x0002
|
||||
#define QDF_MON_STATUS_HE_TRIG_FORMAT_TYPE 0x0003
|
||||
#define QDF_MON_STATUS_HE_SU_OR_EXT_SU_FORMAT_TYPE 0x0000
|
||||
|
||||
|
||||
#define QDF_MON_STATUS_HE_BEAM_CHANGE_KNOWN 0x0008
|
||||
#define QDF_MON_STATUS_HE_DL_UL_KNOWN 0x0010
|
||||
#define QDF_MON_STATUS_HE_MCS_KNOWN 0x0020
|
||||
|
|
@ -397,6 +388,9 @@ struct mon_rx_status {
|
|||
#define QDF_MON_STATUS_LDPC_EXTRA_SYMBOL_SHIFT 14
|
||||
#define QDF_MON_STATUS_STBC_SHIFT 15
|
||||
|
||||
/* HE radiotap data4 shift values */
|
||||
#define QDF_MON_STATUS_STA_ID_SHIFT 4
|
||||
|
||||
/* HE radiotap data5 */
|
||||
#define QDF_MON_STATUS_GI_SHIFT 4
|
||||
#define QDF_MON_STATUS_HE_LTF_SHIFT 8
|
||||
|
|
|
|||
|
|
@ -3815,34 +3815,24 @@ qdf_nbuf_update_radiotap_he_mu_flags(struct mon_rx_status *rx_status,
|
|||
* IEEE80211_RADIOTAP_HE_MU u16, u16, u8[4]
|
||||
* Enable all "known" he-mu radiotap flags for now
|
||||
*/
|
||||
if (rx_status->he_sig_b_common_known &
|
||||
QDF_MON_STATUS_HE_SIG_B_COMMON_KNOWN_RU0) {
|
||||
rtap_buf[rtap_len] = rx_status->he_RU[0];
|
||||
rtap_len += 1;
|
||||
}
|
||||
|
||||
if (rx_status->he_sig_b_common_known &
|
||||
QDF_MON_STATUS_HE_SIG_B_COMMON_KNOWN_RU1) {
|
||||
rtap_buf[rtap_len] = rx_status->he_RU[1];
|
||||
rtap_len += 1;
|
||||
}
|
||||
if (rx_status->he_sig_b_common_known &
|
||||
QDF_MON_STATUS_HE_SIG_B_COMMON_KNOWN_RU2) {
|
||||
rtap_buf[rtap_len] = rx_status->he_RU[2];
|
||||
rtap_len += 1;
|
||||
}
|
||||
if (rx_status->he_sig_b_common_known &
|
||||
QDF_MON_STATUS_HE_SIG_B_COMMON_KNOWN_RU3) {
|
||||
rtap_buf[rtap_len] = rx_status->he_RU[3];
|
||||
rtap_len += 1;
|
||||
}
|
||||
|
||||
put_unaligned_le16(rx_status->he_flags1, &rtap_buf[rtap_len]);
|
||||
rtap_len += 2;
|
||||
|
||||
put_unaligned_le16(rx_status->he_flags2, &rtap_buf[rtap_len]);
|
||||
rtap_len += 2;
|
||||
|
||||
rtap_buf[rtap_len] = rx_status->he_RU[0];
|
||||
rtap_len += 1;
|
||||
|
||||
rtap_buf[rtap_len] = rx_status->he_RU[1];
|
||||
rtap_len += 1;
|
||||
|
||||
rtap_buf[rtap_len] = rx_status->he_RU[2];
|
||||
rtap_len += 1;
|
||||
|
||||
rtap_buf[rtap_len] = rx_status->he_RU[3];
|
||||
rtap_len += 1;
|
||||
|
||||
return rtap_len;
|
||||
}
|
||||
|
||||
|
|
@ -3876,25 +3866,6 @@ qdf_nbuf_update_radiotap_he_mu_other_flags(struct mon_rx_status *rx_status,
|
|||
rtap_buf[rtap_len] = rx_status->he_per_user_known;
|
||||
rtap_len += 1;
|
||||
|
||||
/* HE fields */
|
||||
put_unaligned_le16(rx_status->he_data1, &rtap_buf[rtap_len]);
|
||||
rtap_len += 2;
|
||||
|
||||
put_unaligned_le16(rx_status->he_data2, &rtap_buf[rtap_len]);
|
||||
rtap_len += 2;
|
||||
|
||||
put_unaligned_le16(rx_status->he_data3, &rtap_buf[rtap_len]);
|
||||
rtap_len += 2;
|
||||
|
||||
put_unaligned_le16(rx_status->he_data4, &rtap_buf[rtap_len]);
|
||||
rtap_len += 2;
|
||||
|
||||
put_unaligned_le16(rx_status->he_data5, &rtap_buf[rtap_len]);
|
||||
rtap_len += 2;
|
||||
|
||||
put_unaligned_le16(rx_status->he_data6, &rtap_buf[rtap_len]);
|
||||
rtap_len += 2;
|
||||
|
||||
return rtap_len;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue