From 0dad10099d8b18690632349ec6717f6c85a12b6f Mon Sep 17 00:00:00 2001 From: Yun Park Date: Fri, 14 Jul 2017 14:57:01 -0700 Subject: [PATCH] qcacld-3.0: Enable WDI3.0 IPA offload Enable CONFIG_IPA Change-Id: I20c6ce30034dd1c66bae32a2b7a891aa04bfa0f4 CRs-Fixed: 2085753 --- Kbuild | 3 ++- core/dp/txrx/ol_txrx.c | 10 +++++----- core/hdd/src/wlan_hdd_assoc.c | 3 ++- core/hdd/src/wlan_hdd_ipa.c | 16 +++++++++------- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/Kbuild b/Kbuild index be8b7e51d4c2..9839e80b3180 100644 --- a/Kbuild +++ b/Kbuild @@ -9,7 +9,6 @@ endif ifeq ($(CONFIG_CNSS_QCA6290), y) CONFIG_LITHIUM := y CONFIG_WLAN_FEATURE_11AX := y - CONFIG_IPA := n endif ifeq ($(CONFIG_CLD_HL_SDIO_CORE), y) @@ -2187,7 +2186,9 @@ CDEFINES += -DQCA_WIFI_QCA8074 CDEFINES += -DQCA_WIFI_QCA8074_VP CDEFINES += -DDP_INTR_POLL_BASED CDEFINES += -DTX_PER_PDEV_DESC_POOL +ifneq ($(CONFIG_IPA_OFFLOAD), 1) CDEFINES += -DWLAN_RX_HASH +endif CDEFINES += -DCONFIG_DP_TRACE CDEFINES += -DFEATURE_TSO CDEFINES += -DTSO_DEBUG_LOG_ENABLE diff --git a/core/dp/txrx/ol_txrx.c b/core/dp/txrx/ol_txrx.c index 54e408b4476c..4b80e38d3de7 100644 --- a/core/dp/txrx/ol_txrx.c +++ b/core/dp/txrx/ol_txrx.c @@ -335,10 +335,11 @@ static QDF_STATUS ol_txrx_get_vdevid(void *ppeer, uint8_t *vdev_id) return QDF_STATUS_SUCCESS; } -static struct cdp_vdev *ol_txrx_get_vdev_by_sta_id(uint8_t sta_id) +static struct cdp_vdev *ol_txrx_get_vdev_by_sta_id(struct cdp_pdev *ppdev, + uint8_t sta_id) { + struct ol_txrx_pdev_t *pdev = (struct ol_txrx_pdev_t *)ppdev; struct ol_txrx_peer_t *peer = NULL; - ol_txrx_pdev_handle pdev = NULL; if (sta_id >= WLAN_MAX_STA_COUNT) { QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_INFO_HIGH, @@ -346,7 +347,6 @@ static struct cdp_vdev *ol_txrx_get_vdev_by_sta_id(uint8_t sta_id) return NULL; } - pdev = cds_get_context(QDF_MODULE_ID_TXRX); if (!pdev) { QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_INFO_HIGH, "PDEV not found for sta_id [%d]", sta_id); @@ -377,8 +377,8 @@ static struct cdp_vdev *ol_txrx_get_vdev_by_sta_id(uint8_t sta_id) * Return: peer handle if peer is found, NULL if peer is not found. */ void *ol_txrx_find_peer_by_addr(struct cdp_pdev *ppdev, - uint8_t *peer_addr, - uint8_t *peer_id) + uint8_t *peer_addr, + uint8_t *peer_id) { struct ol_txrx_peer_t *peer; struct ol_txrx_pdev_t *pdev = (struct ol_txrx_pdev_t *)ppdev; diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index 9059ed54a8cf..cf905a95e454 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -1885,6 +1885,7 @@ QDF_STATUS hdd_update_dp_vdev_flags(void *cbk_data, QDF_STATUS status = QDF_STATUS_SUCCESS; void *soc = cds_get_context(QDF_MODULE_ID_SOC); struct hdd_context *hdd_ctx; + void *pdev = cds_get_context(QDF_MODULE_ID_TXRX); struct wlan_objmgr_psoc **psoc; if (!cbk_data) @@ -1896,7 +1897,7 @@ QDF_STATUS hdd_update_dp_vdev_flags(void *cbk_data, if (!hdd_ctx->tdls_nap_active) return status; - data_vdev = cdp_peer_get_vdev_by_sta_id(soc, sta_id); + data_vdev = cdp_peer_get_vdev_by_sta_id(soc, pdev, sta_id); if (NULL == data_vdev) { status = QDF_STATUS_E_FAILURE; return status; diff --git a/core/hdd/src/wlan_hdd_ipa.c b/core/hdd/src/wlan_hdd_ipa.c index b7489496eaff..815277d225a2 100644 --- a/core/hdd/src/wlan_hdd_ipa.c +++ b/core/hdd/src/wlan_hdd_ipa.c @@ -539,7 +539,7 @@ struct hdd_ipa_priv { #define HDD_IPA_CHECK_HW() 0 #endif /* IPA3 */ -#define HDD_IPA_DBG_DUMP_RX_LEN 32 +#define HDD_IPA_DBG_DUMP_RX_LEN 84 #define HDD_IPA_DBG_DUMP_TX_LEN 48 static struct hdd_ipa_adapter_2_client { @@ -1636,8 +1636,6 @@ static void __hdd_ipa_uc_stat_query(struct hdd_context *hdd_ctx, (false == hdd_ipa->resource_loading)) { *ipa_tx_diff = hdd_ipa->ipa_tx_packets_diff; *ipa_rx_diff = hdd_ipa->ipa_rx_packets_diff; - hdd_debug("STAT Query TX DIFF %d, RX DIFF %d", - *ipa_tx_diff, *ipa_rx_diff); } qdf_mutex_release(&hdd_ipa->ipa_lock); } @@ -1685,7 +1683,6 @@ static void __hdd_ipa_uc_stat_request(struct hdd_adapter *adapter, return; } - hdd_debug("STAT REQ Reason %d", reason); qdf_mutex_acquire(&hdd_ipa->ipa_lock); if ((HDD_IPA_UC_NUM_WDI_PIPE == hdd_ipa->activated_fw_pipe) && (false == hdd_ipa->resource_loading)) { @@ -3931,11 +3928,14 @@ static enum hdd_ipa_forward_type hdd_ipa_intrabss_forward( qdf_nbuf_t skb) { int ret = HDD_IPA_FORWARD_PKT_NONE; + void *soc = cds_get_context(QDF_MODULE_ID_SOC); + struct ol_txrx_pdev_t *pdev = cds_get_context(QDF_MODULE_ID_TXRX); if ((desc & FW_RX_DESC_FORWARD_M)) { if (!ol_txrx_fwd_desc_thresh_check( - (struct ol_txrx_vdev_t *)ol_txrx_get_vdev_from_vdev_id( - adapter->sessionId))) { + (struct ol_txrx_vdev_t *)cdp_get_vdev_from_vdev_id(soc, + (struct cdp_pdev *)pdev, + adapter->sessionId))) { /* Drop the packet*/ hdd_ipa->stats.num_tx_fwd_err++; kfree_skb(skb); @@ -4761,6 +4761,8 @@ static int hdd_ipa_setup_iface(struct hdd_ipa_priv *hdd_ipa, struct hdd_adapter *adapter, uint8_t sta_id) { struct hdd_ipa_iface_context *iface_context = NULL; + void *soc = cds_get_context(QDF_MODULE_ID_SOC); + struct ol_txrx_pdev_t *pdev = cds_get_context(QDF_MODULE_ID_TXRX); void *tl_context = NULL; int i, ret = 0; @@ -4792,7 +4794,7 @@ static int hdd_ipa_setup_iface(struct hdd_ipa_priv *hdd_ipa, iface_context->adapter = adapter; iface_context->sta_id = sta_id; tl_context = (void *)cdp_peer_get_vdev_by_sta_id( - cds_get_context(QDF_MODULE_ID_SOC), sta_id); + soc, (struct cdp_pdev *)pdev, sta_id); if (tl_context == NULL) { HDD_IPA_LOG(QDF_TRACE_LEVEL_ERROR, "Not able to get TL context sta_id: %d", sta_id);