Merge dc29e1d7f3
on remote branch
Change-Id: Ife9a81ff625602b5eb70bd855e0808ebe6637c17
This commit is contained in:
commit
3c72258e79
@ -31,6 +31,81 @@ defined(WLAN_PKT_CAPTURE_RX_2_0)
|
||||
#include <hal_generic_api.h>
|
||||
#include <hal_api_mon.h>
|
||||
|
||||
#define HAL_RX_PPDU_START_PHY_PPDU_ID_OFFSET 0x00000000
|
||||
#define HAL_RX_PPDU_START_PHY_PPDU_ID_LSB 0
|
||||
#define HAL_RX_PPDU_START_PHY_PPDU_ID_MSB 15
|
||||
#define HAL_RX_PPDU_START_PHY_PPDU_ID_MASK 0x0000ffff
|
||||
|
||||
#define HAL_RX_PPDU_START_SW_PHY_META_DATA_OFFSET 0x00000004
|
||||
#define HAL_RX_PPDU_START_SW_PHY_META_DATA_LSB 0
|
||||
#define HAL_RX_PPDU_START_SW_PHY_META_DATA_MSB 31
|
||||
#define HAL_RX_PPDU_START_SW_PHY_META_DATA_MASK 0xffffffff
|
||||
|
||||
#define HAL_RX_PPDU_START_PPDU_START_TIMESTAMP_31_0_OFFSET 0x00000008
|
||||
#define HAL_RX_PPDU_START_PPDU_START_TIMESTAMP_31_0_LSB 0
|
||||
#define HAL_RX_PPDU_START_PPDU_START_TIMESTAMP_31_0_MSB 31
|
||||
#define HAL_RX_PPDU_START_PPDU_START_TIMESTAMP_31_0_MASK 0xffffffff
|
||||
|
||||
#define HAL_RXPCU_PPDU_END_INFO_WB_TIMESTAMP_LOWER_32_OFFSET 0x00000000
|
||||
#define HAL_RXPCU_PPDU_END_INFO_WB_TIMESTAMP_LOWER_32_LSB 0
|
||||
#define HAL_RXPCU_PPDU_END_INFO_WB_TIMESTAMP_LOWER_32_MSB 31
|
||||
#define HAL_RXPCU_PPDU_END_INFO_WB_TIMESTAMP_LOWER_32_MASK 0xffffffff
|
||||
|
||||
#define HAL_RXPCU_PPDU_END_INFO_WB_TIMESTAMP_UPPER_32_OFFSET 0x00000004
|
||||
#define HAL_RXPCU_PPDU_END_INFO_WB_TIMESTAMP_UPPER_32_LSB 0
|
||||
#define HAL_RXPCU_PPDU_END_INFO_WB_TIMESTAMP_UPPER_32_MSB 31
|
||||
#define HAL_RXPCU_PPDU_END_INFO_WB_TIMESTAMP_UPPER_32_MASK 0xffffffff
|
||||
|
||||
#define HAL_RXPCU_PPDU_END_INFO_RX_ANTENNA_OFFSET 0x00000008
|
||||
#define HAL_RXPCU_PPDU_END_INFO_RX_ANTENNA_LSB 0
|
||||
#define HAL_RXPCU_PPDU_END_INFO_RX_ANTENNA_MSB 23
|
||||
#define HAL_RXPCU_PPDU_END_INFO_RX_ANTENNA_MASK 0x00ffffff
|
||||
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_95_64_OFFSET 0x00000004
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_95_64_LSB 0
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_95_64_MSB 31
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_95_64_MASK 0xffffffff
|
||||
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_127_96_OFFSET 0x00000008
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_127_96_LSB 0
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_127_96_MSB 31
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_127_96_MASK 0xffffffff
|
||||
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_159_128_OFFSET 0x0000000c
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_159_128_LSB 0
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_159_128_MSB 31
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_159_128_MASK 0xffffffff
|
||||
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_191_160_OFFSET 0x00000010
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_191_160_LSB 0
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_191_160_MSB 31
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_191_160_MASK 0xffffffff
|
||||
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_223_192_OFFSET 0x00000014
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_223_192_LSB 0
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_223_192_MSB 31
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_223_192_MASK 0xffffffff
|
||||
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_255_224_OFFSET 0x00000018
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_255_224_LSB 0
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_255_224_MSB 31
|
||||
#define HAL_RX_PPDU_END_USER_STATS_EXT_FCS_OK_BITMAP_255_224_MASK 0xffffffff
|
||||
|
||||
#define HAL_RXPCU_PPDU_END_INFO_RX_PPDU_DURATION_OFFSET 0x00000024
|
||||
#define HAL_RXPCU_PPDU_END_INFO_RX_PPDU_DURATION_LSB 0
|
||||
#define HAL_RXPCU_PPDU_END_INFO_RX_PPDU_DURATION_MSB 23
|
||||
#define HAL_RXPCU_PPDU_END_INFO_RX_PPDU_DURATION_MASK 0x00ffffff
|
||||
|
||||
#define HAL_PHYRX_RSSI_LEGACY_RECEPTION_TYPE_OFFSET 0x00000000
|
||||
#define HAL_PHYRX_RSSI_LEGACY_RECEPTION_TYPE_LSB 0
|
||||
#define HAL_PHYRX_RSSI_LEGACY_RECEPTION_TYPE_MSB 3
|
||||
#define HAL_PHYRX_RSSI_LEGACY_RECEPTION_TYPE_MASK 0x0000000f
|
||||
|
||||
#define HAL_RX_MPDU_END_FCS_ERR_OFFSET 0x00000004
|
||||
#define HAL_RX_MPDU_END_FCS_ERR_LSB 19
|
||||
#define HAL_RX_MPDU_END_FCS_ERR_MSB 19
|
||||
#define HAL_RX_MPDU_END_FCS_ERR_MASK 0x00080000
|
||||
|
||||
#if defined(WLAN_PKT_CAPTURE_TX_2_0) || \
|
||||
defined(WLAN_PKT_CAPTURE_RX_2_0) || \
|
||||
defined(QCA_SINGLE_WIFI_3_0)
|
||||
@ -78,11 +153,11 @@ defined(QCA_SINGLE_WIFI_3_0)
|
||||
#endif
|
||||
|
||||
#define UNIFIED_RXPCU_PPDU_END_INFO_8_RX_PPDU_DURATION_OFFSET \
|
||||
RXPCU_PPDU_END_INFO_RX_PPDU_DURATION_OFFSET
|
||||
HAL_RXPCU_PPDU_END_INFO_RX_PPDU_DURATION_OFFSET
|
||||
#define UNIFIED_RXPCU_PPDU_END_INFO_8_RX_PPDU_DURATION_MASK \
|
||||
RXPCU_PPDU_END_INFO_RX_PPDU_DURATION_MASK
|
||||
HAL_RXPCU_PPDU_END_INFO_RX_PPDU_DURATION_MASK
|
||||
#define UNIFIED_RXPCU_PPDU_END_INFO_8_RX_PPDU_DURATION_LSB \
|
||||
RXPCU_PPDU_END_INFO_RX_PPDU_DURATION_LSB
|
||||
HAL_RXPCU_PPDU_END_INFO_RX_PPDU_DURATION_LSB
|
||||
#define UNIFIED_PHYRX_HT_SIG_0_HT_SIG_INFO_PHYRX_HT_SIG_INFO_DETAILS_OFFSET \
|
||||
PHYRX_HT_SIG_PHYRX_HT_SIG_INFO_DETAILS_MCS_OFFSET
|
||||
#define UNIFIED_PHYRX_L_SIG_B_0_L_SIG_B_INFO_PHYRX_L_SIG_B_INFO_DETAILS_OFFSET \
|
||||
@ -2657,21 +2732,21 @@ hal_rx_status_get_tlv_info_generic_be(void *rx_tlv_hdr, void *ppduinfo,
|
||||
case WIFIRX_PPDU_START_E:
|
||||
{
|
||||
if (qdf_unlikely(ppdu_info->com_info.last_ppdu_id ==
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_START, PHY_PPDU_ID)))
|
||||
HAL_RX_GET(rx_tlv, HAL_RX_PPDU_START, PHY_PPDU_ID)))
|
||||
hal_err("Matching ppdu_id(%u) detected",
|
||||
ppdu_info->com_info.last_ppdu_id);
|
||||
|
||||
ppdu_info->com_info.last_ppdu_id =
|
||||
ppdu_info->com_info.ppdu_id =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_START,
|
||||
PHY_PPDU_ID);
|
||||
HAL_RX_GET(rx_tlv, HAL_RX_PPDU_START,
|
||||
PHY_PPDU_ID);
|
||||
|
||||
/* channel number is set in PHY meta data */
|
||||
ppdu_info->rx_status.chan_num =
|
||||
(HAL_RX_GET_64(rx_tlv, RX_PPDU_START,
|
||||
(HAL_RX_GET(rx_tlv, HAL_RX_PPDU_START,
|
||||
SW_PHY_META_DATA) & 0x0000FFFF);
|
||||
ppdu_info->rx_status.chan_freq =
|
||||
(HAL_RX_GET_64(rx_tlv, RX_PPDU_START,
|
||||
(HAL_RX_GET(rx_tlv, HAL_RX_PPDU_START,
|
||||
SW_PHY_META_DATA) & 0xFFFF0000) >> 16;
|
||||
if (ppdu_info->rx_status.chan_num &&
|
||||
ppdu_info->rx_status.chan_freq) {
|
||||
@ -2682,8 +2757,8 @@ hal_rx_status_get_tlv_info_generic_be(void *rx_tlv_hdr, void *ppduinfo,
|
||||
}
|
||||
|
||||
ppdu_info->com_info.ppdu_timestamp =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_START,
|
||||
PPDU_START_TIMESTAMP_31_0);
|
||||
HAL_RX_GET(rx_tlv, HAL_RX_PPDU_START,
|
||||
PPDU_START_TIMESTAMP_31_0);
|
||||
ppdu_info->rx_status.ppdu_timestamp =
|
||||
ppdu_info->com_info.ppdu_timestamp;
|
||||
ppdu_info->rx_state = HAL_RX_MON_PPDU_START;
|
||||
@ -2706,16 +2781,16 @@ hal_rx_status_get_tlv_info_generic_be(void *rx_tlv_hdr, void *ppduinfo,
|
||||
|
||||
case WIFIRXPCU_PPDU_END_INFO_E:
|
||||
ppdu_info->rx_status.rx_antenna =
|
||||
HAL_RX_GET_64(rx_tlv, RXPCU_PPDU_END_INFO, RX_ANTENNA);
|
||||
HAL_RX_GET(rx_tlv, HAL_RXPCU_PPDU_END_INFO, RX_ANTENNA);
|
||||
ppdu_info->rx_status.tsft =
|
||||
HAL_RX_GET_64(rx_tlv, RXPCU_PPDU_END_INFO,
|
||||
WB_TIMESTAMP_UPPER_32);
|
||||
HAL_RX_GET(rx_tlv, HAL_RXPCU_PPDU_END_INFO,
|
||||
WB_TIMESTAMP_UPPER_32);
|
||||
ppdu_info->rx_status.tsft = (ppdu_info->rx_status.tsft << 32) |
|
||||
HAL_RX_GET_64(rx_tlv, RXPCU_PPDU_END_INFO,
|
||||
WB_TIMESTAMP_LOWER_32);
|
||||
HAL_RX_GET(rx_tlv, HAL_RXPCU_PPDU_END_INFO,
|
||||
WB_TIMESTAMP_LOWER_32);
|
||||
ppdu_info->rx_status.duration =
|
||||
HAL_RX_GET_64(rx_tlv, UNIFIED_RXPCU_PPDU_END_INFO_8,
|
||||
RX_PPDU_DURATION);
|
||||
HAL_RX_GET(rx_tlv, UNIFIED_RXPCU_PPDU_END_INFO_8,
|
||||
RX_PPDU_DURATION);
|
||||
hal_rx_get_bb_info(hal_soc_hdl, rx_tlv, ppdu_info);
|
||||
break;
|
||||
|
||||
@ -2829,28 +2904,28 @@ hal_rx_status_get_tlv_info_generic_be(void *rx_tlv_hdr, void *ppduinfo,
|
||||
|
||||
case WIFIRX_PPDU_END_USER_STATS_EXT_E:
|
||||
ppdu_info->com_info.mpdu_fcs_ok_bitmap[2] =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS_EXT,
|
||||
FCS_OK_BITMAP_95_64);
|
||||
HAL_RX_GET(rx_tlv, HAL_RX_PPDU_END_USER_STATS_EXT,
|
||||
FCS_OK_BITMAP_95_64);
|
||||
|
||||
ppdu_info->com_info.mpdu_fcs_ok_bitmap[3] =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS_EXT,
|
||||
FCS_OK_BITMAP_127_96);
|
||||
HAL_RX_GET(rx_tlv, HAL_RX_PPDU_END_USER_STATS_EXT,
|
||||
FCS_OK_BITMAP_127_96);
|
||||
|
||||
ppdu_info->com_info.mpdu_fcs_ok_bitmap[4] =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS_EXT,
|
||||
FCS_OK_BITMAP_159_128);
|
||||
HAL_RX_GET(rx_tlv, HAL_RX_PPDU_END_USER_STATS_EXT,
|
||||
FCS_OK_BITMAP_159_128);
|
||||
|
||||
ppdu_info->com_info.mpdu_fcs_ok_bitmap[5] =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS_EXT,
|
||||
FCS_OK_BITMAP_191_160);
|
||||
HAL_RX_GET(rx_tlv, HAL_RX_PPDU_END_USER_STATS_EXT,
|
||||
FCS_OK_BITMAP_191_160);
|
||||
|
||||
ppdu_info->com_info.mpdu_fcs_ok_bitmap[6] =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS_EXT,
|
||||
FCS_OK_BITMAP_223_192);
|
||||
HAL_RX_GET(rx_tlv, HAL_RX_PPDU_END_USER_STATS_EXT,
|
||||
FCS_OK_BITMAP_223_192);
|
||||
|
||||
ppdu_info->com_info.mpdu_fcs_ok_bitmap[7] =
|
||||
HAL_RX_GET_64(rx_tlv, RX_PPDU_END_USER_STATS_EXT,
|
||||
FCS_OK_BITMAP_255_224);
|
||||
HAL_RX_GET(rx_tlv, HAL_RX_PPDU_END_USER_STATS_EXT,
|
||||
FCS_OK_BITMAP_255_224);
|
||||
break;
|
||||
|
||||
case WIFIRX_PPDU_END_STATUS_DONE_E:
|
||||
@ -3544,9 +3619,8 @@ hal_rx_status_get_tlv_info_generic_be(void *rx_tlv_hdr, void *ppduinfo,
|
||||
ppdu_info->rx_status.bw = hal->ops->hal_rx_get_tlv(rx_tlv);
|
||||
ppdu_info->rx_status.he_re = 0;
|
||||
|
||||
reception_type = HAL_RX_GET_64(rx_tlv,
|
||||
PHYRX_RSSI_LEGACY,
|
||||
RECEPTION_TYPE);
|
||||
reception_type = HAL_RX_GET(rx_tlv, HAL_PHYRX_RSSI_LEGACY,
|
||||
RECEPTION_TYPE);
|
||||
switch (reception_type) {
|
||||
case QDF_RECEPTION_TYPE_ULOFMDA:
|
||||
ppdu_info->rx_status.ulofdma_flag = 1;
|
||||
@ -3564,46 +3638,38 @@ hal_rx_status_get_tlv_info_generic_be(void *rx_tlv_hdr, void *ppduinfo,
|
||||
ppdu_info->rx_status.ul_mu_type = reception_type;
|
||||
|
||||
hal_rx_update_rssi_chain(ppdu_info, rssi_info_tlv);
|
||||
rssi_value = HAL_RX_GET_64(rssi_info_tlv,
|
||||
RECEIVE_RSSI_INFO,
|
||||
RSSI_PRI20_CHAIN0);
|
||||
rssi_value = HAL_RX_GET(rssi_info_tlv, RECEIVE_RSSI_INFO,
|
||||
RSSI_PRI20_CHAIN0);
|
||||
ppdu_info->rx_status.rssi[0] = rssi_value;
|
||||
|
||||
rssi_value = HAL_RX_GET_64(rssi_info_tlv,
|
||||
RECEIVE_RSSI_INFO,
|
||||
RSSI_PRI20_CHAIN1);
|
||||
rssi_value = HAL_RX_GET(rssi_info_tlv, RECEIVE_RSSI_INFO,
|
||||
RSSI_PRI20_CHAIN1);
|
||||
ppdu_info->rx_status.rssi[1] = rssi_value;
|
||||
|
||||
rssi_value = HAL_RX_GET_64(rssi_info_tlv,
|
||||
RECEIVE_RSSI_INFO,
|
||||
RSSI_PRI20_CHAIN2);
|
||||
rssi_value = HAL_RX_GET(rssi_info_tlv, RECEIVE_RSSI_INFO,
|
||||
RSSI_PRI20_CHAIN2);
|
||||
ppdu_info->rx_status.rssi[2] = rssi_value;
|
||||
|
||||
rssi_value = HAL_RX_GET_64(rssi_info_tlv,
|
||||
RECEIVE_RSSI_INFO,
|
||||
RSSI_PRI20_CHAIN3);
|
||||
rssi_value = HAL_RX_GET(rssi_info_tlv, RECEIVE_RSSI_INFO,
|
||||
RSSI_PRI20_CHAIN3);
|
||||
ppdu_info->rx_status.rssi[3] = rssi_value;
|
||||
|
||||
#ifdef DP_BE_NOTYET_WAR
|
||||
// TODO - this is not preset for kiwi
|
||||
rssi_value = HAL_RX_GET_64(rssi_info_tlv,
|
||||
RECEIVE_RSSI_INFO,
|
||||
RSSI_PRI20_CHAIN4);
|
||||
rssi_value = HAL_RX_GET(rssi_info_tlv, RECEIVE_RSSI_INFO,
|
||||
RSSI_PRI20_CHAIN4);
|
||||
ppdu_info->rx_status.rssi[4] = rssi_value;
|
||||
|
||||
rssi_value = HAL_RX_GET_64(rssi_info_tlv,
|
||||
RECEIVE_RSSI_INFO,
|
||||
RSSI_PRI20_CHAIN5);
|
||||
rssi_value = HAL_RX_GET(rssi_info_tlv, RECEIVE_RSSI_INFO,
|
||||
RSSI_PRI20_CHAIN5);
|
||||
ppdu_info->rx_status.rssi[5] = rssi_value;
|
||||
|
||||
rssi_value = HAL_RX_GET_64(rssi_info_tlv,
|
||||
RECEIVE_RSSI_INFO,
|
||||
RSSI_PRI20_CHAIN6);
|
||||
rssi_value = HAL_RX_GET(rssi_info_tlv, RECEIVE_RSSI_INFO,
|
||||
RSSI_PRI20_CHAIN6);
|
||||
ppdu_info->rx_status.rssi[6] = rssi_value;
|
||||
|
||||
rssi_value = HAL_RX_GET_64(rssi_info_tlv,
|
||||
RECEIVE_RSSI_INFO,
|
||||
RSSI_PRI20_CHAIN7);
|
||||
rssi_value = HAL_RX_GET(rssi_info_tlv, RECEIVE_RSSI_INFO,
|
||||
RSSI_PRI20_CHAIN7);
|
||||
ppdu_info->rx_status.rssi[7] = rssi_value;
|
||||
#endif
|
||||
break;
|
||||
@ -3720,8 +3786,7 @@ hal_rx_status_get_tlv_info_generic_be(void *rx_tlv_hdr, void *ppduinfo,
|
||||
case WIFIRX_MPDU_END_E:
|
||||
ppdu_info->user_id = user_id;
|
||||
ppdu_info->fcs_err =
|
||||
HAL_RX_GET_64(rx_tlv, RX_MPDU_END,
|
||||
FCS_ERR);
|
||||
HAL_RX_GET(rx_tlv, HAL_RX_MPDU_END, FCS_ERR);
|
||||
|
||||
ppdu_info->mpdu_info[user_id].fcs_err = ppdu_info->fcs_err;
|
||||
hal_rx_record_tlv_info(ppdu_info, tlv_tag);
|
||||
|
@ -1687,6 +1687,7 @@ void hal_qca8074_attach(struct hal_soc *hal_soc);
|
||||
* @hal_soc: HAL soc
|
||||
*/
|
||||
void hal_kiwi_attach(struct hal_soc *hal_soc);
|
||||
void hal_peach_attach(struct hal_soc *hal_soc);
|
||||
|
||||
void hal_qcn9224v2_attach(struct hal_soc *hal_soc);
|
||||
void hal_wcn6450_attach(struct hal_soc *hal_soc);
|
||||
|
@ -65,9 +65,12 @@ void hal_qca5018_attach(struct hal_soc *hal);
|
||||
#ifdef QCA_WIFI_QCA5332
|
||||
void hal_qca5332_attach(struct hal_soc *hal);
|
||||
#endif
|
||||
#ifdef QCA_WIFI_KIWI
|
||||
#ifdef INCLUDE_HAL_KIWI
|
||||
void hal_kiwi_attach(struct hal_soc *hal);
|
||||
#endif
|
||||
#ifdef INCLUDE_HAL_PEACH
|
||||
void hal_peach_attach(struct hal_soc *hal);
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_VERBOSE_DEBUG
|
||||
bool is_hal_verbose_debug_enabled;
|
||||
@ -443,14 +446,19 @@ static void hal_target_based_configure(struct hal_soc *hal)
|
||||
hal_qca6750_attach(hal);
|
||||
break;
|
||||
#endif
|
||||
#ifdef QCA_WIFI_KIWI
|
||||
#ifdef INCLUDE_HAL_KIWI
|
||||
case TARGET_TYPE_KIWI:
|
||||
case TARGET_TYPE_MANGO:
|
||||
case TARGET_TYPE_PEACH:
|
||||
hal->use_register_windowing = true;
|
||||
hal_kiwi_attach(hal);
|
||||
break;
|
||||
#endif
|
||||
#ifdef INCLUDE_HAL_PEACH
|
||||
case TARGET_TYPE_PEACH:
|
||||
hal->use_register_windowing = true;
|
||||
hal_peach_attach(hal);
|
||||
break;
|
||||
#endif
|
||||
#if defined(QCA_WIFI_QCA8074) && defined(WIFI_TARGET_TYPE_3_0)
|
||||
case TARGET_TYPE_QCA8074:
|
||||
hal_qca8074_attach(hal);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@ -38,12 +38,6 @@
|
||||
|
||||
#include <hal_be_rx.h>
|
||||
|
||||
#define UNIFIED_RXPCU_PPDU_END_INFO_8_RX_PPDU_DURATION_OFFSET \
|
||||
RXPCU_PPDU_END_INFO_RX_PPDU_DURATION_OFFSET
|
||||
#define UNIFIED_RXPCU_PPDU_END_INFO_8_RX_PPDU_DURATION_MASK \
|
||||
RXPCU_PPDU_END_INFO_RX_PPDU_DURATION_MASK
|
||||
#define UNIFIED_RXPCU_PPDU_END_INFO_8_RX_PPDU_DURATION_LSB \
|
||||
RXPCU_PPDU_END_INFO_RX_PPDU_DURATION_LSB
|
||||
#define UNIFIED_PHYRX_HT_SIG_0_HT_SIG_INFO_PHYRX_HT_SIG_INFO_DETAILS_OFFSET \
|
||||
PHYRX_HT_SIG_PHYRX_HT_SIG_INFO_DETAILS_MCS_OFFSET
|
||||
#define UNIFIED_PHYRX_L_SIG_B_0_L_SIG_B_INFO_PHYRX_L_SIG_B_INFO_DETAILS_OFFSET \
|
||||
|
2548
hal/wifi3.0/peach/hal_peach.c
Normal file
2548
hal/wifi3.0/peach/hal_peach.c
Normal file
File diff suppressed because it is too large
Load Diff
207
hal/wifi3.0/peach/hal_peach_rx.h
Normal file
207
hal/wifi3.0/peach/hal_peach_rx.h
Normal file
@ -0,0 +1,207 @@
|
||||
/*
|
||||
* Copyright (c) 2023-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef _HAL_PEACH_RX_H_
|
||||
#define _HAL_PEACH_RX_H_
|
||||
#include "qdf_util.h"
|
||||
#include "qdf_types.h"
|
||||
#include "qdf_lock.h"
|
||||
#include "qdf_mem.h"
|
||||
#include "qdf_nbuf.h"
|
||||
#include "tcl_data_cmd.h"
|
||||
//#include "mac_tcl_reg_seq_hwioreg.h"
|
||||
#include "phyrx_rssi_legacy.h"
|
||||
#include "rx_msdu_start.h"
|
||||
#include "tlv_tag_def.h"
|
||||
#include "hal_hw_headers.h"
|
||||
#include "hal_internal.h"
|
||||
#include "cdp_txrx_mon_struct.h"
|
||||
#include "qdf_trace.h"
|
||||
#include "hal_rx.h"
|
||||
#include "hal_tx.h"
|
||||
#include "dp_types.h"
|
||||
#include "hal_api_mon.h"
|
||||
#include "phyrx_other_receive_info_ru_details.h"
|
||||
|
||||
#define HAL_RX_MSDU0_BUFFER_ADDR_LSB(link_desc_va) \
|
||||
(uint8_t *)(link_desc_va) + \
|
||||
RX_MSDU_LINK_MSDU_0_BUFFER_ADDR_INFO_DETAILS_BUFFER_ADDR_31_0_OFFSET
|
||||
|
||||
#define HAL_RX_MSDU_DESC_INFO_PTR_GET(msdu0) \
|
||||
(uint8_t *)(msdu0) + \
|
||||
RX_MSDU_DETAILS_RX_MSDU_DESC_INFO_DETAILS_FIRST_MSDU_IN_MPDU_FLAG_OFFSET
|
||||
|
||||
#define HAL_ENT_MPDU_DESC_INFO(ent_ring_desc) \
|
||||
(uint8_t *)(ent_ring_desc) + \
|
||||
RX_MPDU_DETAILS_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_OFFSET
|
||||
|
||||
#define HAL_DST_MPDU_DESC_INFO(dst_ring_desc) \
|
||||
(uint8_t *)(dst_ring_desc) + \
|
||||
REO_DESTINATION_RING_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_OFFSET
|
||||
|
||||
#define HAL_RX_GET_MAC_ADDR1_VALID(rx_mpdu_start) \
|
||||
HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO, MAC_ADDR_AD1_VALID)
|
||||
|
||||
#define HAL_RX_GET_SW_FRAME_GROUP_ID(rx_mpdu_start) \
|
||||
HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO, SW_FRAME_GROUP_ID)
|
||||
|
||||
#define HAL_RX_GET_SW_PEER_ID(rx_mpdu_start) \
|
||||
HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO, SW_PEER_ID)
|
||||
|
||||
#define HAL_REO_R0_CONFIG(soc, reg_val, reo_params) \
|
||||
do { \
|
||||
reg_val &= \
|
||||
~(HWIO_REO_R0_GENERAL_ENABLE_AGING_LIST_ENABLE_BMSK |\
|
||||
HWIO_REO_R0_GENERAL_ENABLE_AGING_FLUSH_ENABLE_BMSK); \
|
||||
reg_val |= \
|
||||
HAL_SM(HWIO_REO_R0_GENERAL_ENABLE, \
|
||||
AGING_LIST_ENABLE, 1) |\
|
||||
HAL_SM(HWIO_REO_R0_GENERAL_ENABLE, \
|
||||
AGING_FLUSH_ENABLE, 1);\
|
||||
HAL_REG_WRITE((soc), \
|
||||
HWIO_REO_R0_GENERAL_ENABLE_ADDR( \
|
||||
REO_REG_REG_BASE), \
|
||||
(reg_val)); \
|
||||
reg_val = \
|
||||
HAL_REG_READ((soc), \
|
||||
HWIO_REO_R0_MISC_CTL_ADDR( \
|
||||
REO_REG_REG_BASE)); \
|
||||
reg_val &= \
|
||||
~(HWIO_REO_R0_MISC_CTL_FRAGMENT_DEST_RING_BMSK); \
|
||||
reg_val |= \
|
||||
HAL_SM(HWIO_REO_R0_MISC_CTL, \
|
||||
FRAGMENT_DEST_RING, \
|
||||
(reo_params)->frag_dst_ring); \
|
||||
reg_val &= \
|
||||
(~HWIO_REO_R0_MISC_CTL_BAR_DEST_RING_BMSK |\
|
||||
(REO_REMAP_TCL << HWIO_REO_R0_MISC_CTL_BAR_DEST_RING_SHFT)); \
|
||||
HAL_REG_WRITE((soc), \
|
||||
HWIO_REO_R0_MISC_CTL_ADDR( \
|
||||
REO_REG_REG_BASE), \
|
||||
(reg_val)); \
|
||||
} while (0)
|
||||
|
||||
#define HAL_RX_MSDU_DESC_INFO_GET(msdu_details_ptr) \
|
||||
((struct rx_msdu_desc_info *) \
|
||||
_OFFSET_TO_BYTE_PTR(msdu_details_ptr, \
|
||||
RX_MSDU_DETAILS_RX_MSDU_DESC_INFO_DETAILS_RESERVED_0A_OFFSET))
|
||||
|
||||
#define HAL_RX_LINK_DESC_MSDU0_PTR(link_desc) \
|
||||
((struct rx_msdu_details *) \
|
||||
_OFFSET_TO_BYTE_PTR((link_desc),\
|
||||
RX_MSDU_LINK_MSDU_0_BUFFER_ADDR_INFO_DETAILS_BUFFER_ADDR_31_0_OFFSET))
|
||||
|
||||
#if defined(QCA_WIFI_PEACH) && defined(WLAN_CFR_ENABLE) && \
|
||||
defined(WLAN_ENH_CFR_ENABLE)
|
||||
|
||||
#define PHYRX_LOCATION_RX_LOCATION_INFO_DETAILS_CHAN_CAPTURE_STATUS_BMASK 0x00000006
|
||||
#define PHYRX_LOCATION_RX_LOCATION_INFO_DETAILS_CHAN_CAPTURE_STATUS_LSB 1
|
||||
#define PHYRX_LOCATION_RX_LOCATION_INFO_DETAILS_CHAN_CAPTURE_STATUS_MSB 2
|
||||
|
||||
#define HAL_GET_RX_LOCATION_INFO_CHAN_CAPTURE_STATUS(rx_tlv) \
|
||||
((HAL_RX_GET_64((rx_tlv), \
|
||||
PHYRX_LOCATION_RX_LOCATION_INFO_DETAILS, \
|
||||
RTT_CFR_STATUS) & \
|
||||
PHYRX_LOCATION_RX_LOCATION_INFO_DETAILS_CHAN_CAPTURE_STATUS_BMASK) >> \
|
||||
PHYRX_LOCATION_RX_LOCATION_INFO_DETAILS_CHAN_CAPTURE_STATUS_LSB)
|
||||
|
||||
static inline
|
||||
void hal_rx_get_bb_info_peach(void *rx_tlv,
|
||||
void *ppdu_info_hdl)
|
||||
{
|
||||
struct hal_rx_ppdu_info *ppdu_info = ppdu_info_hdl;
|
||||
|
||||
ppdu_info->cfr_info.bb_captured_channel =
|
||||
HAL_RX_GET_64(rx_tlv, RXPCU_PPDU_END_INFO, BB_CAPTURED_CHANNEL);
|
||||
|
||||
ppdu_info->cfr_info.bb_captured_timeout =
|
||||
HAL_RX_GET_64(rx_tlv, RXPCU_PPDU_END_INFO, BB_CAPTURED_TIMEOUT);
|
||||
|
||||
ppdu_info->cfr_info.bb_captured_reason =
|
||||
HAL_RX_GET_64(rx_tlv, RXPCU_PPDU_END_INFO, BB_CAPTURED_REASON);
|
||||
}
|
||||
|
||||
static inline
|
||||
void hal_rx_get_rtt_info_peach(void *rx_tlv,
|
||||
void *ppdu_info_hdl)
|
||||
{
|
||||
struct hal_rx_ppdu_info *ppdu_info = ppdu_info_hdl;
|
||||
|
||||
ppdu_info->cfr_info.rx_location_info_valid =
|
||||
HAL_RX_GET_64(rx_tlv, PHYRX_LOCATION_RX_LOCATION_INFO_DETAILS,
|
||||
RX_LOCATION_INFO_VALID);
|
||||
|
||||
ppdu_info->cfr_info.rtt_che_buffer_pointer_low32 =
|
||||
HAL_RX_GET_64(rx_tlv,
|
||||
PHYRX_LOCATION_RX_LOCATION_INFO_DETAILS,
|
||||
RTT_CHE_BUFFER_POINTER_LOW32);
|
||||
|
||||
ppdu_info->cfr_info.rtt_che_buffer_pointer_high8 =
|
||||
HAL_RX_GET_64(rx_tlv,
|
||||
PHYRX_LOCATION_RX_LOCATION_INFO_DETAILS,
|
||||
RTT_CHE_BUFFER_POINTER_HIGH8);
|
||||
|
||||
ppdu_info->cfr_info.chan_capture_status =
|
||||
HAL_GET_RX_LOCATION_INFO_CHAN_CAPTURE_STATUS(rx_tlv);
|
||||
|
||||
ppdu_info->cfr_info.rx_start_ts =
|
||||
HAL_RX_GET_64(rx_tlv,
|
||||
PHYRX_LOCATION_RX_LOCATION_INFO_DETAILS,
|
||||
RX_START_TS);
|
||||
|
||||
ppdu_info->cfr_info.rtt_cfo_measurement = (int16_t)
|
||||
HAL_RX_GET_64(rx_tlv,
|
||||
PHYRX_LOCATION_RX_LOCATION_INFO_DETAILS,
|
||||
RTT_CFO_MEASUREMENT);
|
||||
|
||||
ppdu_info->cfr_info.agc_gain_info0 =
|
||||
HAL_RX_GET_64(rx_tlv,
|
||||
PHYRX_LOCATION_RX_LOCATION_INFO_DETAILS,
|
||||
GAIN_CHAIN0);
|
||||
|
||||
ppdu_info->cfr_info.agc_gain_info0 |=
|
||||
(((uint32_t)HAL_RX_GET_64(rx_tlv,
|
||||
PHYRX_LOCATION_RX_LOCATION_INFO_DETAILS,
|
||||
GAIN_CHAIN1)) << 16);
|
||||
|
||||
ppdu_info->cfr_info.agc_gain_info1 =
|
||||
HAL_RX_GET_64(rx_tlv,
|
||||
PHYRX_LOCATION_RX_LOCATION_INFO_DETAILS,
|
||||
GAIN_CHAIN2);
|
||||
|
||||
ppdu_info->cfr_info.agc_gain_info1 |=
|
||||
(((uint32_t)HAL_RX_GET_64(rx_tlv,
|
||||
PHYRX_LOCATION_RX_LOCATION_INFO_DETAILS,
|
||||
GAIN_CHAIN3)) << 16);
|
||||
|
||||
ppdu_info->cfr_info.agc_gain_info2 = 0;
|
||||
|
||||
ppdu_info->cfr_info.agc_gain_info3 = 0;
|
||||
|
||||
ppdu_info->cfr_info.mcs_rate =
|
||||
HAL_RX_GET_64(rx_tlv,
|
||||
PHYRX_LOCATION_RX_LOCATION_INFO_DETAILS,
|
||||
RTT_MCS_RATE);
|
||||
|
||||
ppdu_info->cfr_info.gi_type =
|
||||
HAL_RX_GET_64(rx_tlv,
|
||||
PHYRX_LOCATION_RX_LOCATION_INFO_DETAILS,
|
||||
RTT_GI_TYPE);
|
||||
}
|
||||
#endif
|
||||
#endif
|
209
hal/wifi3.0/peach/hal_peach_tx.h
Normal file
209
hal/wifi3.0/peach/hal_peach_tx.h
Normal file
@ -0,0 +1,209 @@
|
||||
/*
|
||||
* Copyright (c) 2023-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
#include "tcl_data_cmd.h"
|
||||
//#include "mac_tcl_reg_seq_hwioreg.h"
|
||||
#include "phyrx_rssi_legacy.h"
|
||||
#include "hal_be_hw_headers.h"
|
||||
#include "hal_internal.h"
|
||||
#include "cdp_txrx_mon_struct.h"
|
||||
#include "qdf_trace.h"
|
||||
#include "hal_rx.h"
|
||||
#include "hal_tx.h"
|
||||
#include "dp_types.h"
|
||||
#include "hal_api_mon.h"
|
||||
|
||||
#define DSCP_TID_TABLE_SIZE 24
|
||||
#define NUM_WORDS_PER_DSCP_TID_TABLE (DSCP_TID_TABLE_SIZE / 4)
|
||||
|
||||
/**
|
||||
* hal_tx_set_dscp_tid_map_peach() - Configure default DSCP to TID map table
|
||||
* @hal_soc: HAL SoC context
|
||||
* @map: DSCP-TID mapping table
|
||||
* @id: mapping table ID - 0-31
|
||||
*
|
||||
* DSCP are mapped to 8 TID values using TID values programmed
|
||||
* in any of the 32 DSCP_TID_MAPS (id = 0-31).
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
static void hal_tx_set_dscp_tid_map_peach(struct hal_soc *hal_soc, uint8_t *map,
|
||||
uint8_t id)
|
||||
{
|
||||
int i;
|
||||
uint32_t addr, cmn_reg_addr;
|
||||
uint32_t value = 0, regval;
|
||||
uint8_t val[DSCP_TID_TABLE_SIZE], cnt = 0;
|
||||
|
||||
struct hal_soc *soc = (struct hal_soc *)hal_soc;
|
||||
|
||||
if (id >= HAL_MAX_HW_DSCP_TID_MAPS_11AX)
|
||||
return;
|
||||
|
||||
cmn_reg_addr = HWIO_TCL_R0_CONS_RING_CMN_CTRL_REG_ADDR(
|
||||
MAC_TCL_REG_REG_BASE);
|
||||
|
||||
addr = HWIO_TCL_R0_DSCP_TID_MAP_n_ADDR(
|
||||
MAC_TCL_REG_REG_BASE,
|
||||
id * NUM_WORDS_PER_DSCP_TID_TABLE);
|
||||
|
||||
/* Enable read/write access */
|
||||
regval = HAL_REG_READ(soc, cmn_reg_addr);
|
||||
regval |=
|
||||
(1 <<
|
||||
HWIO_TCL_R0_CONS_RING_CMN_CTRL_REG_DSCP_TID_MAP_PROGRAM_EN_SHFT);
|
||||
|
||||
HAL_REG_WRITE(soc, cmn_reg_addr, regval);
|
||||
|
||||
/* Write 8 (24 bits) DSCP-TID mappings in each iteration */
|
||||
for (i = 0; i < 64; i += 8) {
|
||||
value = (map[i] |
|
||||
(map[i + 1] << 0x3) |
|
||||
(map[i + 2] << 0x6) |
|
||||
(map[i + 3] << 0x9) |
|
||||
(map[i + 4] << 0xc) |
|
||||
(map[i + 5] << 0xf) |
|
||||
(map[i + 6] << 0x12) |
|
||||
(map[i + 7] << 0x15));
|
||||
|
||||
qdf_mem_copy(&val[cnt], (void *)&value, 3);
|
||||
cnt += 3;
|
||||
}
|
||||
|
||||
for (i = 0; i < DSCP_TID_TABLE_SIZE; i += 4) {
|
||||
regval = *(uint32_t *)(val + i);
|
||||
HAL_REG_WRITE(soc, addr,
|
||||
(regval & HWIO_TCL_R0_DSCP_TID_MAP_n_RMSK));
|
||||
addr += 4;
|
||||
}
|
||||
|
||||
/* Disable read/write access */
|
||||
regval = HAL_REG_READ(soc, cmn_reg_addr);
|
||||
regval &=
|
||||
~(HWIO_TCL_R0_CONS_RING_CMN_CTRL_REG_DSCP_TID_MAP_PROGRAM_EN_BMSK);
|
||||
|
||||
HAL_REG_WRITE(soc, cmn_reg_addr, regval);
|
||||
}
|
||||
|
||||
/**
|
||||
* hal_tx_update_dscp_tid_peach() - Update the dscp tid map table as updated
|
||||
* by the user
|
||||
* @hal_soc: HAL SoC context
|
||||
* @tid: TID
|
||||
* @id : MAP ID
|
||||
* @dscp: DSCP_TID map index
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static void hal_tx_update_dscp_tid_peach(struct hal_soc *hal_soc, uint8_t tid,
|
||||
uint8_t id, uint8_t dscp)
|
||||
{
|
||||
int index;
|
||||
uint32_t addr;
|
||||
uint32_t value;
|
||||
uint32_t regval;
|
||||
struct hal_soc *soc = (struct hal_soc *)hal_soc;
|
||||
|
||||
addr = HWIO_TCL_R0_DSCP_TID_MAP_n_ADDR(
|
||||
MAC_TCL_REG_REG_BASE, id);
|
||||
|
||||
index = dscp % HAL_TX_NUM_DSCP_PER_REGISTER;
|
||||
addr += 4 * (dscp / HAL_TX_NUM_DSCP_PER_REGISTER);
|
||||
value = tid << (HAL_TX_BITS_PER_TID * index);
|
||||
|
||||
regval = HAL_REG_READ(soc, addr);
|
||||
regval &= ~(HAL_TX_TID_BITS_MASK << (HAL_TX_BITS_PER_TID * index));
|
||||
regval |= value;
|
||||
|
||||
HAL_REG_WRITE(soc, addr, (regval & HWIO_TCL_R0_DSCP_TID_MAP_n_RMSK));
|
||||
}
|
||||
|
||||
/**
|
||||
* hal_tx_init_cmd_credit_ring_peach() - Initialize command/credit SRNG
|
||||
* @hal_soc_hdl: Handle to HAL SoC structure
|
||||
* @hal_ring_hdl: Handle to HAL SRNG structure
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
static inline void
|
||||
hal_tx_init_cmd_credit_ring_peach(hal_soc_handle_t hal_soc_hdl,
|
||||
hal_ring_handle_t hal_ring_hdl)
|
||||
{
|
||||
}
|
||||
|
||||
#ifdef DP_TX_IMPLICIT_RBM_MAPPING
|
||||
|
||||
#define RBM_MAPPING_BMSK HWIO_TCL_R0_RBM_MAPPING0_SW2TCL1_RING_BMSK
|
||||
#define RBM_MAPPING_SHFT HWIO_TCL_R0_RBM_MAPPING0_SW2TCL2_RING_SHFT
|
||||
|
||||
#define RBM_PPE2TCL_OFFSET \
|
||||
(HWIO_TCL_R0_RBM_MAPPING0_PPE2TCL1_RING_SHFT >> 2)
|
||||
#define RBM_TCL_CMD_CREDIT_OFFSET \
|
||||
(HWIO_TCL_R0_RBM_MAPPING0_SW2TCL_CREDIT_RING_SHFT >> 2)
|
||||
|
||||
/**
|
||||
* hal_tx_config_rbm_mapping_be_peach() - Update return buffer manager ring id
|
||||
* @hal_soc_hdl: HAL SoC context
|
||||
* @hal_ring_hdl: Source ring pointer
|
||||
* @rbm_id: return buffer manager ring id
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static inline void
|
||||
hal_tx_config_rbm_mapping_be_peach(hal_soc_handle_t hal_soc_hdl,
|
||||
hal_ring_handle_t hal_ring_hdl,
|
||||
uint8_t rbm_id)
|
||||
{
|
||||
struct hal_srng *srng = (struct hal_srng *)hal_ring_hdl;
|
||||
struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
|
||||
uint32_t reg_addr = 0;
|
||||
uint32_t reg_val = 0;
|
||||
uint32_t val = 0;
|
||||
uint8_t ring_num;
|
||||
enum hal_ring_type ring_type;
|
||||
|
||||
ring_type = srng->ring_type;
|
||||
ring_num = hal_soc->hw_srng_table[ring_type].start_ring_id;
|
||||
ring_num = srng->ring_id - ring_num;
|
||||
|
||||
reg_addr = HWIO_TCL_R0_RBM_MAPPING0_ADDR(MAC_TCL_REG_REG_BASE);
|
||||
|
||||
if (ring_type == PPE2TCL)
|
||||
ring_num = ring_num + RBM_PPE2TCL_OFFSET;
|
||||
else if (ring_type == TCL_CMD_CREDIT)
|
||||
ring_num = ring_num + RBM_TCL_CMD_CREDIT_OFFSET;
|
||||
|
||||
/* get current value stored in register address */
|
||||
val = HAL_REG_READ(hal_soc, reg_addr);
|
||||
|
||||
/* mask out other stored value */
|
||||
val &= (~(RBM_MAPPING_BMSK << (RBM_MAPPING_SHFT * ring_num)));
|
||||
|
||||
reg_val = val | ((RBM_MAPPING_BMSK & rbm_id) <<
|
||||
(RBM_MAPPING_SHFT * ring_num));
|
||||
|
||||
/* write rbm mapped value to register address */
|
||||
HAL_REG_WRITE(hal_soc, reg_addr, reg_val);
|
||||
}
|
||||
#else
|
||||
static inline void
|
||||
hal_tx_config_rbm_mapping_be_peach(hal_soc_handle_t hal_soc_hdl,
|
||||
hal_ring_handle_t hal_ring_hdl,
|
||||
uint8_t rbm_id)
|
||||
{
|
||||
}
|
||||
#endif
|
@ -2540,8 +2540,9 @@ bool __qdf_nbuf_data_is_ipv4_mcast_pkt(uint8_t *data)
|
||||
* Check first word of the IPV4 address and if it is
|
||||
* equal to 0xE then it represents multicast IP.
|
||||
*/
|
||||
if ((*dst_addr & QDF_NBUF_TRAC_IPV4_ADDR_BCAST_MASK) ==
|
||||
QDF_NBUF_TRAC_IPV4_ADDR_MCAST_MASK)
|
||||
if ((*dst_addr &
|
||||
QDF_SWAP_U32(QDF_NBUF_TRAC_IPV4_ADDR_BCAST_MASK)) ==
|
||||
QDF_SWAP_U32(QDF_NBUF_TRAC_IPV4_ADDR_MCAST_MASK))
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
@ -2559,10 +2560,10 @@ bool __qdf_nbuf_data_is_ipv6_mcast_pkt(uint8_t *data)
|
||||
|
||||
/*
|
||||
* Check first byte of the IP address and if it
|
||||
* 0xFF00 then it is a IPV6 mcast packet.
|
||||
* 0xFF then it is a IPV6 mcast packet.
|
||||
*/
|
||||
if (*dst_addr ==
|
||||
QDF_SWAP_U16(QDF_NBUF_TRAC_IPV6_DEST_ADDR))
|
||||
if ((*dst_addr & QDF_SWAP_U16(QDF_NBUF_TRAC_IPV6_DEST_ADDR)) ==
|
||||
QDF_SWAP_U16(QDF_NBUF_TRAC_IPV6_DEST_ADDR))
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
|
@ -32,14 +32,18 @@
|
||||
#ifdef CONN_MGR_ADV_FEATURE
|
||||
#include "wlan_mlme_api.h"
|
||||
#include "wlan_wfa_tgt_if_tx_api.h"
|
||||
#include "wlan_action_oui_main.h"
|
||||
#endif
|
||||
#include "wlan_cm_main_api.h"
|
||||
#include "wlan_cm_public_struct.h"
|
||||
|
||||
#define CM_PCL_RSSI_THRESHOLD -75
|
||||
|
||||
#define TWO_LINK_BOOST 20
|
||||
#define ONE_LINK_MLMR_BOOST 10
|
||||
/* To differentiate between SLO and 11AX candidate */
|
||||
#define SLO_BOOST 5
|
||||
#define ONE_LINK_MLMR_BOOST 5
|
||||
#define LINK_BOOST 10
|
||||
|
||||
#define CANDIDATE_DUMP_MAX_LEN 255
|
||||
|
||||
#define LINK_SCORE BIT(0)
|
||||
@ -144,14 +148,35 @@ SNR_DB_TO_BIT_PER_TONE_LUT[DB_NUM] = {0, 171, 212, 262, 323, 396, 484,
|
||||
586, 706, 844, 1000, 1176, 1370, 1583, 1812, 2058, 2317, 2588, 2870, 3161};
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_FEATURE_11BE_MLO
|
||||
static bool
|
||||
cm_is_mlo_entry(struct scan_cache_entry *bss1, struct scan_cache_entry *bss2)
|
||||
{
|
||||
if (bss1->ie_list.multi_link_bv &&
|
||||
!bss2->ie_list.multi_link_bv)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
#else
|
||||
static inline bool
|
||||
cm_is_mlo_entry(struct scan_cache_entry *bss1, struct scan_cache_entry *bss2)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
static bool cm_is_better_bss(struct scan_cache_entry *bss1,
|
||||
struct scan_cache_entry *bss2)
|
||||
{
|
||||
if (bss1->bss_score > bss2->bss_score)
|
||||
return true;
|
||||
else if (bss1->bss_score == bss2->bss_score)
|
||||
else if (bss1->bss_score == bss2->bss_score) {
|
||||
if (bss1->rssi_raw > bss2->rssi_raw)
|
||||
return true;
|
||||
if (qdf_is_macaddr_equal(&bss1->bssid, &bss2->bssid))
|
||||
return cm_is_mlo_entry(bss1, bss2);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
@ -1764,53 +1789,24 @@ static uint16_t cm_get_ch_width(struct scan_cache_entry *entry,
|
||||
static uint8_t mlo_boost_pct[MLO_TYPE_MAX] = {0, 10, CM_MAX_PCT_SCORE};
|
||||
|
||||
/**
|
||||
* struct mlo_rssi_pct: MLO AP rssi joint factor and score percent
|
||||
* @joint_factor: rssi joint factor (0 - 100)
|
||||
* @rssi_pcnt: Rssi score percent (0 - 100)
|
||||
* @prorate_pcnt: RSSI prorated percent
|
||||
*/
|
||||
struct mlo_rssi_pct {
|
||||
uint16_t joint_factor;
|
||||
uint16_t rssi_pcnt;
|
||||
uint16_t prorate_pcnt;
|
||||
};
|
||||
|
||||
#define CM_RSSI_BUCKET_NUM 7
|
||||
static struct mlo_rssi_pct mlo_rssi_pcnt[CM_RSSI_BUCKET_NUM] = {
|
||||
{80, 100, 100}, {60, 87, 100}, {44, 74, 100}, {30, 61, 100}, {20, 48, 54},
|
||||
{10, 35, 28}, {0, 22, 1} };
|
||||
|
||||
/**
|
||||
* cm_get_mlo_rssi_score() - Calculate joint rssi score for MLO AP
|
||||
* @rssi_weightage: rssi weightage
|
||||
* cm_get_mlo_rssi() - Calculate joint rssi for MLO AP
|
||||
*
|
||||
* @link1_rssi: link1 rssi
|
||||
* @link2_rssi: link2 rssi
|
||||
* @prorate_pcnt: pointer to store RSSI prorated percent
|
||||
* @cw_link1: channel width of link 1
|
||||
* @cw_link2: channel width of link 2
|
||||
*
|
||||
* Return: MLO AP joint rssi score
|
||||
*/
|
||||
static uint32_t cm_get_mlo_rssi_score(uint8_t rssi_weightage, int8_t link1_rssi,
|
||||
int8_t link2_rssi, uint16_t *prorate_pcnt)
|
||||
static uint32_t cm_get_mlo_rssi(int8_t link1_rssi, int8_t link2_rssi,
|
||||
uint16_t cw_link1, uint16_t cw_link2)
|
||||
{
|
||||
int8_t link1_factor = 0, link2_factor = 0;
|
||||
int32_t joint_factor = 0;
|
||||
int16_t rssi_pcnt = 0;
|
||||
int8_t i;
|
||||
uint32_t rssi_mlo;
|
||||
|
||||
/* Calculate RSSI score -- using joint rssi, but limit to 2 links */
|
||||
link1_factor = QDF_MAX(QDF_MIN(link1_rssi, -50), -95) + 95;
|
||||
link2_factor = QDF_MAX(QDF_MIN(link2_rssi, -50), -95) + 95;
|
||||
joint_factor = QDF_MIN((link1_factor * link1_factor +
|
||||
link2_factor * link2_factor) * 100 / (2 * 45 * 45),
|
||||
100);
|
||||
for (i = 0; i < CM_RSSI_BUCKET_NUM; i++)
|
||||
if (joint_factor > mlo_rssi_pcnt[i].joint_factor) {
|
||||
rssi_pcnt = mlo_rssi_pcnt[i].rssi_pcnt;
|
||||
*prorate_pcnt = mlo_rssi_pcnt[i].prorate_pcnt;
|
||||
break;
|
||||
}
|
||||
rssi_mlo = (cw_link1 * link1_rssi + cw_link2 * link2_rssi) /
|
||||
(cw_link1 + cw_link2);
|
||||
|
||||
return (rssi_weightage * rssi_pcnt);
|
||||
return rssi_mlo;
|
||||
}
|
||||
|
||||
static inline int cm_calculate_emlsr_score(struct weight_cfg *weight_config)
|
||||
@ -2033,6 +2029,7 @@ static int cm_calculate_mlo_bss_score(struct wlan_objmgr_psoc *psoc,
|
||||
{
|
||||
struct scan_cache_entry *entry_partner[MLD_MAX_LINKS - 1];
|
||||
int32_t rssi[MLD_MAX_LINKS - 1];
|
||||
uint32_t rssi_mlo[MLD_MAX_LINKS - 1] = {};
|
||||
uint32_t rssi_score[MLD_MAX_LINKS - 1] = {};
|
||||
uint16_t prorated_pct[MLD_MAX_LINKS - 1] = {};
|
||||
uint32_t freq[MLD_MAX_LINKS - 1];
|
||||
@ -2118,10 +2115,18 @@ static int cm_calculate_mlo_bss_score(struct wlan_objmgr_psoc *psoc,
|
||||
true);
|
||||
mlme_nofl_debug("No entry for partner, estimate with rnr");
|
||||
}
|
||||
rssi_mlo[i] =
|
||||
cm_get_mlo_rssi(entry->rssi_raw, rssi[i],
|
||||
chan_width, ch_width[i]);
|
||||
|
||||
rssi_score[i] =
|
||||
cm_get_mlo_rssi_score(weight_config->rssi_weightage,
|
||||
entry->rssi_raw, rssi[i],
|
||||
&prorated_pct[i]);
|
||||
cm_calculate_rssi_score(&score_params->rssi_score,
|
||||
rssi_mlo[i],
|
||||
weight_config->rssi_weightage);
|
||||
prorated_pct[i] =
|
||||
cm_get_rssi_prorate_pct(&score_params->rssi_score,
|
||||
rssi_mlo[i],
|
||||
weight_config->rssi_weightage);
|
||||
|
||||
bandwidth_score[i] =
|
||||
cm_get_bw_score(weight_config->chan_width_weightage,
|
||||
@ -2431,25 +2436,32 @@ static void cm_vendor_specific_boost(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t freq = 0;
|
||||
uint32_t freq_entry = 0;
|
||||
|
||||
/* Add boost of 20% for 2 link candidate */
|
||||
if (entry->ml_info.num_links == TWO_LINK)
|
||||
score = score + (score * TWO_LINK_BOOST) / 100;
|
||||
if (entry->ie_list.multi_link_bv) {
|
||||
if (entry->ml_info.num_links == ONE_LINK) {
|
||||
freq_entry = entry->channel.chan_freq;
|
||||
link = &entry->ml_info.link_info[0];
|
||||
|
||||
if (entry->ml_info.num_links == ONE_LINK) {
|
||||
freq_entry = entry->channel.chan_freq;
|
||||
link = &entry->ml_info.link_info[0];
|
||||
if (!link[0].is_valid_link)
|
||||
return;
|
||||
|
||||
if (!link[0].is_valid_link)
|
||||
return;
|
||||
freq = link[0].freq;
|
||||
|
||||
freq = link[0].freq;
|
||||
|
||||
/* Add boost of 10% for one link MLMR candidate */
|
||||
if (!policy_mgr_are_2_freq_on_same_mac(psoc,
|
||||
freq,
|
||||
freq_entry))
|
||||
score = score + (score * ONE_LINK_MLMR_BOOST) / 100;
|
||||
/* Add boost of 15% for one link MLMR candidate */
|
||||
if (!policy_mgr_are_2_freq_on_same_mac(psoc, freq,
|
||||
freq_entry))
|
||||
score = score + (score *
|
||||
(LINK_BOOST +
|
||||
ONE_LINK_MLMR_BOOST)) / 100;
|
||||
else
|
||||
score = score + (score * (LINK_BOOST)) / 100;
|
||||
} else if (entry->ml_info.num_links > ONE_LINK) {
|
||||
/* Add boost of 5%/per link for MLO candidate */
|
||||
score = score + (score * (entry->ml_info.num_links * LINK_BOOST)) / 100;
|
||||
} else {
|
||||
/* Add boost of 5% for SLO candidate */
|
||||
score = score + (score * (SLO_BOOST)) / 100;
|
||||
}
|
||||
}
|
||||
|
||||
entry->bss_score = score;
|
||||
}
|
||||
@ -2686,8 +2698,13 @@ static int cm_calculate_bss_score(struct wlan_objmgr_psoc *psoc,
|
||||
prorated_pcnt);
|
||||
score += eht_score;
|
||||
|
||||
if (!(IS_LINK_SCORE(ml_flag)))
|
||||
if (!(IS_LINK_SCORE(ml_flag))) {
|
||||
/* Add boost of 10% for one partner link MLMR candidate */
|
||||
if (bss_mlo_type == MLMR)
|
||||
score = score + (score * ONE_LINK_MLMR_BOOST) / 100;
|
||||
|
||||
entry->bss_score = score;
|
||||
}
|
||||
|
||||
if (bss_mlo_type == SLO || IS_LINK_SCORE(ml_flag))
|
||||
mlme_nofl_debug("%s("QDF_MAC_ADDR_FMT" freq %d): rssi %d HT %d VHT %d HE %d EHT %d su_bfer %d phy %d atf %d qbss %d cong_pct %d NSS %d ap_tx_pwr %d oce_subnet %d sae_pk_cap %d prorated_pcnt %d keymgmt 0x%x mlo type %d",
|
||||
@ -2847,7 +2864,6 @@ void cm_print_candidate_list(qdf_list_t *candidate_list)
|
||||
mlme_err("failed to get front of candidate_list");
|
||||
return;
|
||||
}
|
||||
|
||||
while (cur_node) {
|
||||
qdf_list_peek_next(candidate_list, cur_node, &next_node);
|
||||
|
||||
@ -2864,8 +2880,10 @@ void cm_print_candidate_list(qdf_list_t *candidate_list)
|
||||
QDF_MAC_ADDR_REF(link[i].link_addr.bytes),
|
||||
link[i].freq, link[i].link_id,
|
||||
link[i].is_valid_link);
|
||||
mlme_debug("Candidate(" QDF_MAC_ADDR_FMT " freq %d self_link_id %d): %s bss_score %d ",
|
||||
mlme_nofl_debug("Candidate(" QDF_MAC_ADDR_FMT " %s freq %d self_link_id %d): %s bss_score %d ",
|
||||
QDF_MAC_ADDR_REF(scan_entry->entry->bssid.bytes),
|
||||
scan_entry->entry->ie_list.multi_link_bv ? "MLO" :
|
||||
"NON MLO",
|
||||
scan_entry->entry->channel.chan_freq,
|
||||
scan_entry->entry->ml_info.self_link_id,
|
||||
log_str,
|
||||
@ -2944,10 +2962,12 @@ static void cm_find_and_remove_dup_candidate(struct scan_cache_node *bss_entry,
|
||||
|
||||
match = 0;
|
||||
for (i = 0; i < bss_num_link; i++)
|
||||
if (qdf_is_macaddr_equal(&bss_entry->entry->bssid,
|
||||
if ((bss_entry->entry->ie_list.multi_link_bv &&
|
||||
scan_node->entry->ie_list.multi_link_bv) &&
|
||||
(qdf_is_macaddr_equal(&bss_entry->entry->bssid,
|
||||
&scan_node->entry->bssid) ||
|
||||
qdf_is_macaddr_equal(&bss_entry->entry->bssid,
|
||||
&cur_can[i].link_addr))
|
||||
&cur_can[i].link_addr)))
|
||||
match++;
|
||||
for (i = 0; i < bss_num_link; i++) {
|
||||
for (j = 0; j < curr_num_link; j++) {
|
||||
@ -2981,8 +3001,85 @@ next:
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(FEATURE_DENYLIST_MGR) && defined(WLAN_FEATURE_11BE_MLO)
|
||||
/**
|
||||
* cm_add_11_ax_candidate() - update candidate list with 11AX candidate
|
||||
* @pdev: pdev object
|
||||
* @candidate_list: candidate list
|
||||
* @scan_entry: scan entry node
|
||||
*
|
||||
* This API update candidate list with new 11AX candidate.
|
||||
*
|
||||
*Return: NA
|
||||
*/
|
||||
static void
|
||||
cm_add_11_ax_candidate(struct wlan_objmgr_pdev *pdev,
|
||||
qdf_list_t *candidate_list,
|
||||
struct scan_cache_node *scan_entry)
|
||||
{
|
||||
struct scan_cache_node *scan_node = NULL;
|
||||
struct scan_cache_entry *tmp_scan_entry = NULL;
|
||||
|
||||
tmp_scan_entry = util_scan_copy_cache_entry(scan_entry->entry);
|
||||
if (!tmp_scan_entry) {
|
||||
mlme_err("Copy cache entry failed");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Add 11AX entry for MLO Candidate */
|
||||
if (!tmp_scan_entry->ie_list.multi_link_bv) {
|
||||
util_scan_free_cache_entry(tmp_scan_entry);
|
||||
return;
|
||||
}
|
||||
|
||||
scan_node = qdf_mem_malloc_atomic(sizeof(*scan_node));
|
||||
if (!scan_node) {
|
||||
util_scan_free_cache_entry(tmp_scan_entry);
|
||||
return;
|
||||
}
|
||||
tmp_scan_entry->ml_info.num_links = 0;
|
||||
tmp_scan_entry->mlo_max_recom_simult_links = 0;
|
||||
tmp_scan_entry->ie_list.multi_link_bv = NULL;
|
||||
tmp_scan_entry->ie_list.ehtcap = NULL;
|
||||
tmp_scan_entry->ie_list.ehtop = NULL;
|
||||
qdf_mem_zero(&tmp_scan_entry->ml_info, sizeof(struct ml_info));
|
||||
tmp_scan_entry->phy_mode =
|
||||
util_scan_get_phymode(pdev, tmp_scan_entry);
|
||||
|
||||
scan_node->entry = tmp_scan_entry;
|
||||
qdf_list_insert_after(candidate_list, &scan_node->node,
|
||||
&scan_entry->node);
|
||||
}
|
||||
#else
|
||||
static inline void
|
||||
cm_add_11_ax_candidate(struct wlan_objmgr_pdev *pdev,
|
||||
qdf_list_t *candidate_list,
|
||||
struct scan_cache_node *scan_entry)
|
||||
{};
|
||||
#endif
|
||||
|
||||
static bool cm_is_slo_candidate_allowed(struct wlan_objmgr_psoc *psoc,
|
||||
struct scan_cache_entry *scan_entry)
|
||||
{
|
||||
struct action_oui_search_attr attr = {0};
|
||||
|
||||
attr.ie_data = util_scan_entry_ie_data(scan_entry);
|
||||
attr.ie_length = util_scan_entry_ie_len(scan_entry);
|
||||
|
||||
if (wlan_action_oui_search(psoc, &attr,
|
||||
ACTION_OUI_RESTRICT_MAX_MLO_LINKS)) {
|
||||
mlme_debug("IoT AP " QDF_MAC_ADDR_FMT
|
||||
" slo candidate not allowed",
|
||||
QDF_MAC_ADDR_REF(scan_entry->bssid.bytes));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* cm_mlo_generate_candidate_list() - generate candidate list
|
||||
* @pdev: pdev object
|
||||
* @candidate_list: candidate list
|
||||
*
|
||||
* For any candidate list this api generates all possible unique
|
||||
@ -3008,7 +3105,8 @@ next:
|
||||
*
|
||||
* Return none
|
||||
*/
|
||||
static void cm_mlo_generate_candidate_list(qdf_list_t *candidate_list)
|
||||
static void cm_mlo_generate_candidate_list(struct wlan_objmgr_pdev *pdev,
|
||||
qdf_list_t *candidate_list)
|
||||
{
|
||||
struct scan_cache_entry *tmp_scan_entry = NULL;
|
||||
struct scan_cache_node *scan_entry = NULL, *scan_node = NULL;
|
||||
@ -3018,12 +3116,21 @@ static void cm_mlo_generate_candidate_list(qdf_list_t *candidate_list)
|
||||
uint32_t num_link = 0;
|
||||
uint32_t i = 0;
|
||||
uint32_t j = 0;
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
bool is_slo_candidate_allowed = true;
|
||||
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
if (!psoc) {
|
||||
mlme_err("psoc NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
if (qdf_list_peek_front(candidate_list, &cur_node) !=
|
||||
QDF_STATUS_SUCCESS) {
|
||||
mlme_err("failed to get front of candidate_list");
|
||||
return;
|
||||
}
|
||||
|
||||
while (cur_node) {
|
||||
qdf_list_peek_next(candidate_list, cur_node, &next_node);
|
||||
|
||||
@ -3031,6 +3138,11 @@ static void cm_mlo_generate_candidate_list(qdf_list_t *candidate_list)
|
||||
node);
|
||||
num_link = scan_entry->entry->ml_info.num_links;
|
||||
|
||||
is_slo_candidate_allowed =
|
||||
cm_is_slo_candidate_allowed(psoc, scan_entry->entry);
|
||||
if (!is_slo_candidate_allowed)
|
||||
goto next;
|
||||
|
||||
for (i = 0; i < num_link; i++) {
|
||||
tmp_scan_entry = util_scan_copy_cache_entry(
|
||||
scan_entry->entry);
|
||||
@ -3073,6 +3185,8 @@ static void cm_mlo_generate_candidate_list(qdf_list_t *candidate_list)
|
||||
&scan_entry->node);
|
||||
}
|
||||
}
|
||||
|
||||
cm_add_11_ax_candidate(pdev, candidate_list, scan_entry);
|
||||
next:
|
||||
cur_node = next_node;
|
||||
next_node = NULL;
|
||||
@ -3189,8 +3303,9 @@ static void cm_validate_partner_links(struct wlan_objmgr_psoc *psoc,
|
||||
}
|
||||
}
|
||||
#else
|
||||
|
||||
static void cm_mlo_generate_candidate_list(qdf_list_t *candidate_list)
|
||||
static inline void
|
||||
cm_mlo_generate_candidate_list(struct wlan_objmgr_pdev *pdev,
|
||||
qdf_list_t *candidate_list)
|
||||
{
|
||||
}
|
||||
|
||||
@ -3250,7 +3365,7 @@ void wlan_cm_calculate_bss_score(struct wlan_objmgr_pdev *pdev,
|
||||
config->bw_above_20_5ghz, config->vdev_nss_24g,
|
||||
config->vdev_nss_5g);
|
||||
|
||||
cm_mlo_generate_candidate_list(scan_list);
|
||||
cm_mlo_generate_candidate_list(pdev, scan_list);
|
||||
|
||||
/* calculate score for each AP */
|
||||
if (qdf_list_peek_front(scan_list, &cur_node) != QDF_STATUS_SUCCESS) {
|
||||
|
@ -1458,7 +1458,7 @@ QDF_STATUS util_validate_reportingsta_ie(const uint8_t *reportingsta_ie,
|
||||
|
||||
if ((reportingsta_ie[ID_POS] == WLAN_ELEMID_VENDOR) &&
|
||||
(reportingsta_ie_size < (PAYLOAD_START_POS + OUI_LEN))) {
|
||||
mlo_err_rl("Total length %zu of element for reporting STA is smaller than minimum required to access vendor EID %u",
|
||||
mlo_err_rl("Total length %zu of element for reporting STA is smaller than minimum required of %u to access vendor EID",
|
||||
reportingsta_ie_size, PAYLOAD_START_POS + OUI_LEN);
|
||||
return QDF_STATUS_E_PROTO;
|
||||
}
|
||||
|
@ -3885,6 +3885,10 @@ reg_skip_invalid_chan_freq(struct wlan_objmgr_pdev *pdev,
|
||||
bool include_indoor_channel, dfs_master_capable;
|
||||
uint8_t enable_srd_chan, srd_mask = 0;
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
enum reg_6g_ap_type ap_pwr_type;
|
||||
enum supported_6g_pwr_types ap_pwr_mode;
|
||||
enum channel_state chan_state;
|
||||
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
if (!psoc) {
|
||||
reg_err("invalid psoc");
|
||||
@ -3911,6 +3915,17 @@ reg_skip_invalid_chan_freq(struct wlan_objmgr_pdev *pdev,
|
||||
return status;
|
||||
}
|
||||
|
||||
wlan_reg_get_cur_6g_ap_pwr_type(pdev, &ap_pwr_type);
|
||||
|
||||
if (ap_pwr_type == REG_INDOOR_AP)
|
||||
ap_pwr_mode = REG_AP_LPI;
|
||||
else if (ap_pwr_type == REG_STANDARD_POWER_AP)
|
||||
ap_pwr_mode = REG_AP_SP;
|
||||
else if (ap_pwr_type == REG_VERY_LOW_POWER_AP)
|
||||
ap_pwr_mode = REG_AP_VLP;
|
||||
else
|
||||
ap_pwr_mode = REG_INVALID_PWR_MODE;
|
||||
|
||||
while (iface_mode_mask) {
|
||||
if (iface_mode_mask & (1 << IFTYPE_AP)) {
|
||||
srd_mask = 1;
|
||||
@ -3923,6 +3938,7 @@ reg_skip_invalid_chan_freq(struct wlan_objmgr_pdev *pdev,
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
||||
for (chan_enum = 0; chan_enum < *no_usable_channels;
|
||||
chan_enum++) {
|
||||
if (iface_mode_mask & (1 << IFTYPE_NAN)) {
|
||||
@ -3933,9 +3949,13 @@ reg_skip_invalid_chan_freq(struct wlan_objmgr_pdev *pdev,
|
||||
if (!res_msg[chan_enum].iface_mode_mask)
|
||||
reg_remove_freq(res_msg, chan_enum);
|
||||
} else {
|
||||
if (wlan_reg_is_freq_indoor(
|
||||
chan_state = reg_get_channel_state_for_pwrmode(
|
||||
pdev, res_msg[chan_enum].freq,
|
||||
ap_pwr_mode);
|
||||
if (!reg_is_state_allowed(chan_state) ||
|
||||
(wlan_reg_is_freq_indoor(
|
||||
pdev, res_msg[chan_enum].freq) &&
|
||||
!include_indoor_channel) {
|
||||
!include_indoor_channel)) {
|
||||
res_msg[chan_enum].iface_mode_mask &=
|
||||
~(iface_mode);
|
||||
if (!res_msg[chan_enum].iface_mode_mask)
|
||||
|
@ -96,7 +96,7 @@ typedef uint32_t wlan_scan_id;
|
||||
* length + atleast 1 byte of datai
|
||||
* @BSS_INDEX_POS: Position of BSSID index field in Multiple BSSID index tag
|
||||
* @MIN_VENDOR_TAG_LEN: Minimum length of a vendor specific tag
|
||||
* @OUI_LEN: OUI + OUI Type + Min DATA
|
||||
* @OUI_LEN: OUI + OUI Type
|
||||
* @ELEM_ID_EXTN_POS: Position of element ID extension in an extension element
|
||||
* @ELEM_ID_LIST_LEN_POS: Position of length field in list of element IDs
|
||||
* @ELEM_ID_LIST_POS: Position to the start of element ID list
|
||||
@ -118,7 +118,7 @@ typedef uint32_t wlan_scan_id;
|
||||
#define SPLIT_PROF_DATA_LEAST_LEN 3
|
||||
#define BSS_INDEX_POS 2
|
||||
#define MIN_VENDOR_TAG_LEN 7
|
||||
#define OUI_LEN 5
|
||||
#define OUI_LEN 4
|
||||
#define ELEM_ID_EXTN_POS 2
|
||||
#define ELEM_ID_LIST_LEN_POS 3
|
||||
#define ELEM_ID_LIST_POS 4
|
||||
|
@ -1662,6 +1662,12 @@ util_scan_entry_bw_ind(struct scan_cache_entry *scan_entry)
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_FEATURE_11BE_MLO
|
||||
static inline uint8_t*
|
||||
util_scan_entry_bv_ml_ie(struct scan_cache_entry *scan_entry)
|
||||
{
|
||||
return scan_entry->ie_list.multi_link_bv;
|
||||
}
|
||||
|
||||
static inline uint8_t*
|
||||
util_scan_entry_t2lm(struct scan_cache_entry *scan_entry)
|
||||
{
|
||||
@ -1676,6 +1682,12 @@ util_scan_entry_t2lm(struct scan_cache_entry *scan_entry)
|
||||
*/
|
||||
uint32_t util_scan_entry_t2lm_len(struct scan_cache_entry *scan_entry);
|
||||
#else
|
||||
static inline uint8_t*
|
||||
util_scan_entry_bv_ml_ie(struct scan_cache_entry *scan_entry)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline uint8_t*
|
||||
util_scan_entry_t2lm(struct scan_cache_entry *scan_entry)
|
||||
{
|
||||
@ -1959,6 +1971,7 @@ util_scan_get_6g_oper_channel(uint8_t *he_op_ie)
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* util_is_bssid_non_tx() - Is the given BSSID a non-tx neighbor
|
||||
* entry in the RNR db
|
||||
@ -1970,4 +1983,15 @@ util_scan_get_6g_oper_channel(uint8_t *he_op_ie)
|
||||
*/
|
||||
bool util_is_bssid_non_tx(struct wlan_objmgr_psoc *psoc,
|
||||
struct qdf_mac_addr *bssid, qdf_freq_t freq);
|
||||
|
||||
/**
|
||||
* util_scan_get_phymode() - function to get phy mode
|
||||
* @pdev : pdev object
|
||||
* @scan_params: scan entry
|
||||
*
|
||||
* Return: phy mode.
|
||||
*/
|
||||
enum wlan_phymode
|
||||
util_scan_get_phymode(struct wlan_objmgr_pdev *pdev,
|
||||
struct scan_cache_entry *scan_params);
|
||||
#endif
|
||||
|
@ -962,7 +962,7 @@ util_scan_get_phymode_2g(struct scan_cache_entry *scan_params)
|
||||
return phymode;
|
||||
}
|
||||
|
||||
static enum wlan_phymode
|
||||
enum wlan_phymode
|
||||
util_scan_get_phymode(struct wlan_objmgr_pdev *pdev,
|
||||
struct scan_cache_entry *scan_params)
|
||||
{
|
||||
@ -3073,7 +3073,7 @@ static uint32_t util_gen_new_ie(struct wlan_objmgr_pdev *pdev,
|
||||
|
||||
if (extn_elem && extn_elem[TAG_LEN_POS] >= VALID_ELEM_LEAST_LEN) {
|
||||
if (((extn_elem + extn_elem[1] + MIN_IE_LEN) - sub_copy)
|
||||
< subie_len)
|
||||
<= subie_len)
|
||||
util_parse_noninheritance_list(extn_elem, &elem_list,
|
||||
&extn_elem_list, &ninh);
|
||||
}
|
||||
|
@ -1183,6 +1183,7 @@ static QDF_STATUS send_vdev_stop_cmd_tlv(wmi_unified_t wmi,
|
||||
wmi_buf_t buf;
|
||||
int32_t len = sizeof(*cmd);
|
||||
uint8_t *buf_ptr;
|
||||
uint32_t vdev_id = params->vdev_id;
|
||||
|
||||
len += vdev_stop_mlo_params_size(params);
|
||||
|
||||
@ -1205,7 +1206,7 @@ static QDF_STATUS send_vdev_stop_cmd_tlv(wmi_unified_t wmi,
|
||||
wmi_buf_free(buf);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
wmi_debug("vdev id = %d", cmd->vdev_id);
|
||||
wmi_debug("vdev id = %d", vdev_id);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user