diff --git a/dp/wifi3.0/be/dp_be_tx.c b/dp/wifi3.0/be/dp_be_tx.c index f20315d0f9..629570bbf9 100644 --- a/dp/wifi3.0/be/dp_be_tx.c +++ b/dp/wifi3.0/be/dp_be_tx.c @@ -24,6 +24,8 @@ #include "hal_tx.h" #include +extern uint8_t sec_type_map[MAX_CDP_SEC_TYPE]; + #ifdef DP_FEATURE_HW_COOKIE_CONVERSION #ifdef DP_HW_COOKIE_CONVERT_EXCEPTION void dp_tx_comp_get_params_from_hal_desc_be(struct dp_soc *soc, @@ -120,6 +122,19 @@ dp_tx_hw_enqueue_be(struct dp_soc *soc, struct dp_vdev *vdev, return QDF_STATUS_E_RESOURCES; } + if (qdf_unlikely(tx_exc_metadata)) { + qdf_assert_always((tx_exc_metadata->tx_encap_type == + CDP_INVALID_TX_ENCAP_TYPE) || + (tx_exc_metadata->tx_encap_type == + vdev->tx_encap_type)); + + if (tx_exc_metadata->tx_encap_type == htt_cmn_pkt_type_raw) + qdf_assert_always((tx_exc_metadata->sec_type == + CDP_INVALID_SEC_TYPE) || + tx_exc_metadata->sec_type == + vdev->sec_type); + } + hal_tx_desc_cached = (void *)cached_desc; hal_tx_desc_set_buf_addr(soc->hal_soc, hal_tx_desc_cached, @@ -249,17 +264,22 @@ void dp_tx_get_vdev_bank_config(struct dp_vdev_be *be_vdev, bank_config->encap_type = vdev->tx_encap_type; /* Only valid for raw frames. Needs work for RAW mode */ - bank_config->encrypt_type = 0; + if (vdev->tx_encap_type == htt_cmn_pkt_type_raw) { + bank_config->encrypt_type = sec_type_map[vdev->sec_type]; + } else { + bank_config->encrypt_type = 0; + } bank_config->src_buffer_swap = 0; bank_config->link_meta_swap = 0; - if (soc->is_peer_map_unmap_v2 && vdev->opmode == wlan_op_mode_sta) - vdev->search_type = HAL_TX_ADDR_INDEX_SEARCH; - else - vdev->search_type = HAL_TX_ADDR_SEARCH_DEFAULT; - - bank_config->index_lookup_enable = 0; + if (soc->is_peer_map_unmap_v2 && vdev->opmode == wlan_op_mode_sta) { + bank_config->index_lookup_enable = 1; + bank_config->mcast_pkt_ctrl = 2; + } else { + bank_config->index_lookup_enable = 0; + bank_config->mcast_pkt_ctrl = 0; + } bank_config->addrx_en = (vdev->hal_desc_addr_search_flags & HAL_TX_DESC_ADDRX_EN) ? @@ -274,8 +294,6 @@ void dp_tx_get_vdev_bank_config(struct dp_vdev_be *be_vdev, bank_config->vdev_id_check_en = be_vdev->vdev_id_check_en; bank_config->pmac_id = vdev->lmac_id; - - bank_config->mcast_pkt_ctrl = 0; } int dp_tx_get_bank_profile(struct dp_soc_be *be_soc, diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index 21e8403a68..e972082696 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/dp/wifi3.0/dp_tx.c @@ -27,6 +27,7 @@ #include "qdf_mem.h" #include "qdf_nbuf.h" #include "qdf_net_types.h" +#include "qdf_module.h" #include #include "dp_ipa.h" #if defined(MESH_MODE_SUPPORT) || defined(FEATURE_PERPKT_INFO) @@ -61,6 +62,21 @@ /* invalid peer id for reinject*/ #define DP_INVALID_PEER 0XFFFE +/*mapping between hal encrypt type and cdp_sec_type*/ +uint8_t sec_type_map[MAX_CDP_SEC_TYPE] = {HAL_TX_ENCRYPT_TYPE_NO_CIPHER, + HAL_TX_ENCRYPT_TYPE_WEP_128, + HAL_TX_ENCRYPT_TYPE_WEP_104, + HAL_TX_ENCRYPT_TYPE_WEP_40, + HAL_TX_ENCRYPT_TYPE_TKIP_WITH_MIC, + HAL_TX_ENCRYPT_TYPE_TKIP_NO_MIC, + HAL_TX_ENCRYPT_TYPE_AES_CCMP_128, + HAL_TX_ENCRYPT_TYPE_WAPI, + HAL_TX_ENCRYPT_TYPE_AES_CCMP_256, + HAL_TX_ENCRYPT_TYPE_AES_GCMP_128, + HAL_TX_ENCRYPT_TYPE_AES_GCMP_256, + HAL_TX_ENCRYPT_TYPE_WAPI_GCM_SM4}; +qdf_export_symbol(sec_type_map); + #ifdef CONFIG_WLAN_SYSFS_MEM_STATS /** * dp_update_tx_desc_stats - Update the increase or decrease in diff --git a/dp/wifi3.0/dp_tx.h b/dp/wifi3.0/dp_tx.h index f3087bed0b..f760142fe5 100644 --- a/dp/wifi3.0/dp_tx.h +++ b/dp/wifi3.0/dp_tx.h @@ -75,6 +75,8 @@ do { \ #endif /* TX_PER_PDEV_DESC_POOL */ #define DP_TX_QUEUE_MASK 0x3 +#define MAX_CDP_SEC_TYPE 12 + /* number of dwords for htt_tx_msdu_desc_ext2_t */ #define DP_TX_MSDU_INFO_META_DATA_DWORDS 7 diff --git a/dp/wifi3.0/li/dp_li_tx.c b/dp/wifi3.0/li/dp_li_tx.c index 1d14d956cc..75902ab27b 100644 --- a/dp/wifi3.0/li/dp_li_tx.c +++ b/dp/wifi3.0/li/dp_li_tx.c @@ -25,20 +25,7 @@ #include #include -/*mapping between hal encrypt type and cdp_sec_type*/ -#define MAX_CDP_SEC_TYPE 12 -uint8_t sec_type_map[MAX_CDP_SEC_TYPE] = {HAL_TX_ENCRYPT_TYPE_NO_CIPHER, - HAL_TX_ENCRYPT_TYPE_WEP_128, - HAL_TX_ENCRYPT_TYPE_WEP_104, - HAL_TX_ENCRYPT_TYPE_WEP_40, - HAL_TX_ENCRYPT_TYPE_TKIP_WITH_MIC, - HAL_TX_ENCRYPT_TYPE_TKIP_NO_MIC, - HAL_TX_ENCRYPT_TYPE_AES_CCMP_128, - HAL_TX_ENCRYPT_TYPE_WAPI, - HAL_TX_ENCRYPT_TYPE_AES_CCMP_256, - HAL_TX_ENCRYPT_TYPE_AES_GCMP_128, - HAL_TX_ENCRYPT_TYPE_AES_GCMP_256, - HAL_TX_ENCRYPT_TYPE_WAPI_GCM_SM4}; +extern uint8_t sec_type_map[MAX_CDP_SEC_TYPE]; void dp_tx_comp_get_params_from_hal_desc_li(struct dp_soc *soc, void *tx_comp_hal_desc, diff --git a/hal/wifi3.0/be/hal_be_generic_api.c b/hal/wifi3.0/be/hal_be_generic_api.c index f9d2683216..c1bb42eb87 100644 --- a/hal/wifi3.0/be/hal_be_generic_api.c +++ b/hal/wifi3.0/be/hal_be_generic_api.c @@ -213,6 +213,7 @@ void hal_tx_desc_set_cache_set_num_generic_be(void *desc, uint8_t cache_num) } #endif +#if defined(QCA_WIFI_WCN7850) || defined(CONFIG_WIFI_EMULATION_WIFI_3_0) static inline uint32_t hal_wbm2sw_release_source_get(void *hal_desc, enum hal_be_wbm_release_dir dir) { @@ -248,6 +249,13 @@ hal_wbm2sw_release_source_get(void *hal_desc, enum hal_be_wbm_release_dir dir) return buf_src; } +#else +static inline uint32_t +hal_wbm2sw_release_source_get(void *hal_desc, enum hal_be_wbm_release_dir dir) +{ + return HAL_WBM2SW_RELEASE_SRC_GET(hal_desc); +} +#endif uint32_t hal_tx_comp_get_buffer_source_generic_be(void *hal_desc) { diff --git a/hal/wifi3.0/hal_tx.h b/hal/wifi3.0/hal_tx.h index b60518c492..10cb8dbcfb 100644 --- a/hal/wifi3.0/hal_tx.h +++ b/hal/wifi3.0/hal_tx.h @@ -553,7 +553,7 @@ static inline uint32_t hal_tx_comp_get_buffer_type(void *hal_desc) HAL_TX_COMP_BUFFER_OR_DESC_TYPE_LSB; } -#ifdef QCA_WIFI_WCN7850 +#if defined(QCA_WIFI_WCN7850) || defined(CONFIG_WIFI_EMULATION_WIFI_3_0) /** * hal_tx_comp_get_buffer_source() - Get buffer release source value * @hal_desc: completion ring descriptor pointer