summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYun Park <yunp@codeaurora.org>2016-10-11 11:44:15 -0700
committerqcabuildsw <qcabuildsw@localhost>2016-10-18 19:54:18 -0700
commit4d968dfdc096017f2a642f951b4b4af4d0e0c225 (patch)
tree6a22a2037b305a4b0a6b39b1b31ea34014f8e79f
parentf8d6a124389274198a77ceb2e74271be0e0ca4a8 (diff)
qcacld-3.0: Support bigger Tx MSDU ID partition
When both host and FW support a new partition, FW uses host use the new parition HTT_TX_IPA_NEW_MSDU_ID_SPACE_BEGIN. If FW doesn't support a new partition, host falls back to use old HTT_TX_IPA_MSDU_ID_SPACE_BEGIN. Handshaking is done through WMI_READY and WMI_INIT. Change-Id: I974c931e1b4b2d84e809ec19537a09b679932568 CRs-Fixed: 1072812
-rw-r--r--core/dp/ol/inc/ol_cfg.h7
-rw-r--r--core/dp/txrx/ol_cfg.c6
-rw-r--r--core/wma/src/wma_main.c17
-rw-r--r--target/inc/htt_common.h15
4 files changed, 44 insertions, 1 deletions
diff --git a/core/dp/ol/inc/ol_cfg.h b/core/dp/ol/inc/ol_cfg.h
index 6f776dd252e5..29ade0c7e055 100644
--- a/core/dp/ol/inc/ol_cfg.h
+++ b/core/dp/ol/inc/ol_cfg.h
@@ -516,6 +516,7 @@ unsigned int ol_cfg_ipa_uc_rx_ind_ring_size(ol_pdev_handle pdev);
* @param pdev - handle to the physical device
*/
unsigned int ol_cfg_ipa_uc_tx_partition_base(ol_pdev_handle pdev);
+void ol_cfg_set_ipa_uc_tx_partition_base(ol_pdev_handle pdev, uint32_t value);
#else
static inline unsigned int ol_cfg_ipa_uc_offload_enabled(
ol_pdev_handle pdev)
@@ -546,6 +547,12 @@ static inline unsigned int ol_cfg_ipa_uc_tx_partition_base(
{
return 0;
}
+
+static inline void ol_cfg_set_ipa_uc_tx_partition_base(
+ ol_pdev_handle pdev, uint32_t value)
+{
+ return;
+}
#endif /* IPA_OFFLOAD */
/**
diff --git a/core/dp/txrx/ol_cfg.c b/core/dp/txrx/ol_cfg.c
index 1b4a5911c0b5..29140a5f93e2 100644
--- a/core/dp/txrx/ol_cfg.c
+++ b/core/dp/txrx/ol_cfg.c
@@ -403,6 +403,12 @@ unsigned int ol_cfg_ipa_uc_tx_partition_base(ol_pdev_handle pdev)
struct txrx_pdev_cfg_t *cfg = (struct txrx_pdev_cfg_t *)pdev;
return cfg->ipa_uc_rsc.tx_partition_base;
}
+
+void ol_cfg_set_ipa_uc_tx_partition_base(ol_pdev_handle pdev, uint32_t val)
+{
+ struct txrx_pdev_cfg_t *cfg = (struct txrx_pdev_cfg_t *)pdev;
+ cfg->ipa_uc_rsc.tx_partition_base = val;
+}
#endif /* IPA_OFFLOAD */
/**
diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c
index 2f0ca115dfa5..fa9198feb700 100644
--- a/core/wma/src/wma_main.c
+++ b/core/wma/src/wma_main.c
@@ -241,6 +241,8 @@ static void wma_set_default_tgt_config(tp_wma_handle wma_handle)
tgt_cfg.scan_max_pending_req = wma_handle->max_scan;
WMI_RSRC_CFG_FLAG_MGMT_COMP_EVT_BUNDLE_SUPPORT_SET(tgt_cfg.flag1, 1);
+ WMI_RSRC_CFG_FLAG_TX_MSDU_ID_NEW_PARTITION_SUPPORT_SET(tgt_cfg.flag1,
+ 1);
WMITLV_SET_HDR(&tgt_cfg.tlv_header,
WMITLV_TAG_STRUC_wmi_resource_config,
@@ -3723,6 +3725,21 @@ static inline void wma_update_target_services(tp_wma_handle wh,
if (WMI_SERVICE_IS_ENABLED(wh->wmi_service_bitmap, WMI_SERVICE_RTT))
g_fw_wlan_feat_caps |= (1 << RTT);
+
+ if (WMI_SERVICE_IS_ENABLED(wh->wmi_service_bitmap,
+ WMI_SERVICE_TX_MSDU_ID_NEW_PARTITION_SUPPORT)) {
+ ol_cfg_set_ipa_uc_tx_partition_base((ol_pdev_handle)
+ ((p_cds_contextType) wh->cds_context)->cfg_ctx,
+ HTT_TX_IPA_NEW_MSDU_ID_SPACE_BEGIN);
+ WMA_LOGI("%s: TX_MSDU_ID_NEW_PARTITION=%d", __func__,
+ HTT_TX_IPA_NEW_MSDU_ID_SPACE_BEGIN);
+ } else {
+ ol_cfg_set_ipa_uc_tx_partition_base((ol_pdev_handle)
+ ((p_cds_contextType) wh->cds_context)->cfg_ctx,
+ HTT_TX_IPA_MSDU_ID_SPACE_BEGIN);
+ WMA_LOGI("%s: TX_MSDU_ID_OLD_PARTITION=%d", __func__,
+ HTT_TX_IPA_MSDU_ID_SPACE_BEGIN);
+ }
}
/**
diff --git a/target/inc/htt_common.h b/target/inc/htt_common.h
index 0e9d7c357d64..8f4d82fe72e3 100644
--- a/target/inc/htt_common.h
+++ b/target/inc/htt_common.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -113,8 +113,21 @@ enum htt_pkt_type {
htt_pkt_num_types
};
+/*
+ * TX MSDU ID partition -
+ * FW supports bigger MSDU ID partition which is defined as
+ * HTT_TX_IPA_NEW_MSDU_ID_SPACE_BEGIN
+ * When both host and FW support new partition, FW uses
+ * HTT_TX_IPA_NEW_MSDU_ID_SPACE_BEGIN
+ * If host doesn't support, FW falls back to HTT_TX_IPA_MSDU_ID_SPACE_BEGIN
+ * Handshaking is done through WMI_READY and WMI_INIT
+ */
#define HTT_TX_HOST_MSDU_ID_SPACE_BEGIN 0
#define HTT_TX_IPA_MSDU_ID_SPACE_BEGIN 3000
#define TGT_RX2TX_MSDU_ID_SPACE_BEGIN 6000
+/* 8192 = 0xr2000 */
+#define HTT_TX_IPA_NEW_MSDU_ID_SPACE_BEGIN 8192
+/* 12288 = 0x3000 */
+#define TGT_RX2TX_NEW_MSDU_ID_SPACE_BEGIN 12288
#endif /* _HTT_COMMON_H_ */