qcacmn: avoid wds source port learning for STA in HKV2

Changes to avoid WDS source port learning in STA mode
if ast override feature is supported by HW

Change-Id: I248c8815429e7417dcf3f451912ee5f037af9c25
This commit is contained in:
Chaithanya Garrepalli
2018-09-11 23:57:43 +05:30
committed by Gerrit - the friendly Code Review server
parent 3e93e5f8ae
commit 2467ed1445
5 changed files with 35 additions and 2 deletions

View File

@@ -8129,13 +8129,18 @@ void *dp_soc_attach_wifi3(void *ctrl_psoc, void *hif_handle,
target_type = hal_get_target_type(soc->hal_soc); target_type = hal_get_target_type(soc->hal_soc);
switch (target_type) { switch (target_type) {
case TARGET_TYPE_QCA6290: case TARGET_TYPE_QCA6290:
wlan_cfg_set_reo_dst_ring_size(soc->wlan_cfg_ctx,
REO_DST_RING_SIZE_QCA6290);
soc->ast_override_support = 1;
break;
#ifdef QCA_WIFI_QCA6390 #ifdef QCA_WIFI_QCA6390
case TARGET_TYPE_QCA6390: case TARGET_TYPE_QCA6390:
#endif
wlan_cfg_set_reo_dst_ring_size(soc->wlan_cfg_ctx, wlan_cfg_set_reo_dst_ring_size(soc->wlan_cfg_ctx,
REO_DST_RING_SIZE_QCA6290); REO_DST_RING_SIZE_QCA6290);
wlan_cfg_set_raw_mode_war(soc->wlan_cfg_ctx, true); wlan_cfg_set_raw_mode_war(soc->wlan_cfg_ctx, true);
soc->ast_override_support = 1;
break; break;
#endif
case TARGET_TYPE_QCA8074: case TARGET_TYPE_QCA8074:
wlan_cfg_set_reo_dst_ring_size(soc->wlan_cfg_ctx, wlan_cfg_set_reo_dst_ring_size(soc->wlan_cfg_ctx,
REO_DST_RING_SIZE_QCA8074); REO_DST_RING_SIZE_QCA8074);
@@ -8147,6 +8152,7 @@ void *dp_soc_attach_wifi3(void *ctrl_psoc, void *hif_handle,
REO_DST_RING_SIZE_QCA8074); REO_DST_RING_SIZE_QCA8074);
wlan_cfg_set_raw_mode_war(soc->wlan_cfg_ctx, false); wlan_cfg_set_raw_mode_war(soc->wlan_cfg_ctx, false);
soc->hw_nac_monitor_support = 1; soc->hw_nac_monitor_support = 1;
soc->ast_override_support = 1;
break; break;
default: default:
qdf_print("%s: Unknown tgt type %d\n", __func__, target_type); qdf_print("%s: Unknown tgt type %d\n", __func__, target_type);

View File

@@ -416,6 +416,12 @@ dp_rx_wds_srcport_learn(struct dp_soc *soc,
if (!(qdf_nbuf_is_rx_chfrag_start(nbuf) && if (!(qdf_nbuf_is_rx_chfrag_start(nbuf) &&
hal_rx_get_mpdu_mac_ad4_valid(rx_tlv_hdr))) hal_rx_get_mpdu_mac_ad4_valid(rx_tlv_hdr)))
return; return;
} else {
/* For HKv2 Source port learing is not needed in STA mode
* as we have support in HW
*/
if (soc->ast_override_support)
return;
} }
memcpy(wds_src_mac, (qdf_nbuf_data(nbuf) + IEEE80211_ADDR_LEN), memcpy(wds_src_mac, (qdf_nbuf_data(nbuf) + IEEE80211_ADDR_LEN),

View File

@@ -923,7 +923,12 @@ static QDF_STATUS dp_tx_hw_enqueue(struct dp_soc *soc, struct dp_vdev *vdev,
hal_tx_desc_set_buf_offset(hal_tx_desc_cached, tx_desc->pkt_offset); hal_tx_desc_set_buf_offset(hal_tx_desc_cached, tx_desc->pkt_offset);
hal_tx_desc_set_encap_type(hal_tx_desc_cached, tx_desc->tx_encap_type); hal_tx_desc_set_encap_type(hal_tx_desc_cached, tx_desc->tx_encap_type);
hal_tx_desc_set_lmac_id(soc->hal_soc, hal_tx_desc_cached, hal_tx_desc_set_lmac_id(soc->hal_soc, hal_tx_desc_cached,
HAL_TX_DESC_DEFAULT_LMAC_ID); vdev->pdev->pdev_id);
hal_tx_desc_set_search_type(soc->hal_soc, hal_tx_desc_cached,
vdev->search_type);
hal_tx_desc_set_search_index(soc->hal_soc, hal_tx_desc_cached,
vdev->bss_ast_hash);
hal_tx_desc_set_dscp_tid_table_id(soc->hal_soc, hal_tx_desc_cached, hal_tx_desc_set_dscp_tid_table_id(soc->hal_soc, hal_tx_desc_cached,
vdev->dscp_tid_map_id); vdev->dscp_tid_map_id);
hal_tx_desc_set_encrypt_type(hal_tx_desc_cached, hal_tx_desc_set_encrypt_type(hal_tx_desc_cached,
@@ -3214,6 +3219,11 @@ void dp_tx_vdev_update_search_flags(struct dp_vdev *vdev)
vdev->hal_desc_addr_search_flags = HAL_TX_DESC_ADDRY_EN; vdev->hal_desc_addr_search_flags = HAL_TX_DESC_ADDRY_EN;
else else
vdev->hal_desc_addr_search_flags = HAL_TX_DESC_ADDRX_EN; vdev->hal_desc_addr_search_flags = HAL_TX_DESC_ADDRX_EN;
if (vdev->opmode == wlan_op_mode_sta)
vdev->search_type = HAL_TX_ADDR_INDEX_SEARCH;
else
vdev->search_type = HAL_TX_ADDR_SEARCH_DEFAULT;
} }
#ifdef QCA_LL_TX_FLOW_CONTROL_V2 #ifdef QCA_LL_TX_FLOW_CONTROL_V2

View File

@@ -688,6 +688,9 @@ struct dp_soc {
/*cce disable*/ /*cce disable*/
bool cce_disable; bool cce_disable;
/*ast override support in HW*/
bool ast_override_support;
/* Link descriptor memory banks */ /* Link descriptor memory banks */
struct { struct {
void *base_vaddr_unaligned; void *base_vaddr_unaligned;
@@ -1407,6 +1410,10 @@ struct dp_vdev {
/* SWAR for HW: Enable WEP bit in the AMSDU frames for RAW mode */ /* SWAR for HW: Enable WEP bit in the AMSDU frames for RAW mode */
bool raw_mode_war; bool raw_mode_war;
/* Address search type to be set in TX descriptor */
uint8_t search_type;
/* AST hash value for BSS peer in HW valid for STA VAP*/ /* AST hash value for BSS peer in HW valid for STA VAP*/
uint16_t bss_ast_hash; uint16_t bss_ast_hash;
}; };

View File

@@ -116,6 +116,10 @@ do { \
#define HAL_TX_DESC_ADDRY_EN 0x2 #define HAL_TX_DESC_ADDRY_EN 0x2
#define HAL_TX_DESC_DEFAULT_LMAC_ID 0x3 #define HAL_TX_DESC_DEFAULT_LMAC_ID 0x3
#define HAL_TX_ADDR_SEARCH_DEFAULT 0x0
#define HAL_TX_ADDR_INDEX_SEARCH 0x1
#define HAL_TX_FLOW_INDEX_SEARCH 0x2
enum hal_tx_ret_buf_manager { enum hal_tx_ret_buf_manager {
HAL_WBM_SW0_BM_ID = 3, HAL_WBM_SW0_BM_ID = 3,
HAL_WBM_SW1_BM_ID = 4, HAL_WBM_SW1_BM_ID = 4,