diff options
| author | Yun Park <yunp@codeaurora.org> | 2016-10-11 11:44:15 -0700 |
|---|---|---|
| committer | qcabuildsw <qcabuildsw@localhost> | 2016-10-18 19:54:18 -0700 |
| commit | 4d968dfdc096017f2a642f951b4b4af4d0e0c225 (patch) | |
| tree | 6a22a2037b305a4b0a6b39b1b31ea34014f8e79f | |
| parent | f8d6a124389274198a77ceb2e74271be0e0ca4a8 (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.h | 7 | ||||
| -rw-r--r-- | core/dp/txrx/ol_cfg.c | 6 | ||||
| -rw-r--r-- | core/wma/src/wma_main.c | 17 | ||||
| -rw-r--r-- | target/inc/htt_common.h | 15 |
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_ */ |
