qcacmn: Fixes for IPA enablement for lithium/Hastings

- Support to pass IPA enabled(disabled) flag from ini to DP layer
- Use ioremap call to translate tx_comp_doorbell_paddr obtained from
  calling ipa_setup api to tx_comp_doorbell_vaddr. This is needed to
  write the initial value of HP at the doorbell address.
- Change REO_DST_RING_SIZE and WLAN_CFG_TX_RING_SIZE to 1023
  for napier/hastings if IPA is enabled. This is needed because,
  ipa_setup API can handle only 16-bit values for the size param(bytes)
  of the ring.
- Disable hash based flow steering for SAP peers in case IPA is enabled
  and set default reo_dest_ring_4 as default RX ring. Since IPA will be
  reaping RX packets from reo_dest_ring_4 only, flow steering is not
  needed for SAP peers.
- Unmap pre-allocated TX buffers for IPA in the TX completion ring.
- Donot execute IPA functionality if IPA is disabled from ini.

Change-Id: I6855bfe293a457ccc0abd1ad5567f5c95232a9d2
CRs-Fixed: 2183519
此提交包含在:
Mohit Khanna
2018-08-16 20:50:43 -07:00
提交者 nshrivas
父節點 f83015ce04
當前提交 81179cb75e
共有 9 個檔案被更改,包括 391 行新增184 行删除

查看文件

@@ -84,50 +84,58 @@ struct wlan_cfg_dp_pdev_ctxt;
/**
* struct wlan_cfg_dp_soc_ctxt - Configuration parameters for SoC (core TxRx)
* @num_int_ctxts - Number of NAPI/Interrupt contexts to be registered for DP
* @max_clients - Maximum number of peers/stations supported by device
* @max_alloc_size - Maximum allocation size for any dynamic memory
* @num_int_ctxts: Number of NAPI/Interrupt contexts to be registered for DP
* @max_clients: Maximum number of peers/stations supported by device
* @max_alloc_size: Maximum allocation size for any dynamic memory
* allocation request for this device
* @per_pdev_tx_ring - 0 - TCL ring is not mapped per radio
* 1 - Each TCL ring is mapped to one radio/pdev
* @num_tcl_data_rings - Number of TCL Data rings supported by device
* @per_pdev_rx_ring - 0 - REO ring is not mapped per radio
* 1 - Each REO ring is mapped to one radio/pdev
* @num_tx_desc_pool - Number of Tx Descriptor pools
* @num_tx_ext_desc_pool - Number of Tx MSDU extension Descriptor pools
* @num_tx_desc - Number of Tx Descriptors per pool
* @num_tx_ext_desc - Number of Tx MSDU extension Descriptors per pool
* @max_peer_id - Maximum value of peer id that FW can assign for a client
* @htt_packet_type - Default 802.11 encapsulation type for any VAP created
* @int_tx_ring_mask - Bitmap of Tx interrupts mapped to each NAPI/Intr context
* @int_rx_ring_mask - Bitmap of Rx interrupts mapped to each NAPI/Intr context
* @int_rx_mon_ring_mask - Bitmap of Rx monitor ring interrupts mapped to each
* @per_pdev_tx_ring: 0: TCL ring is not mapped per radio
* 1: Each TCL ring is mapped to one radio/pdev
* @num_tcl_data_rings: Number of TCL Data rings supported by device
* @per_pdev_rx_ring: 0: REO ring is not mapped per radio
* 1: Each REO ring is mapped to one radio/pdev
* @num_tx_desc_pool: Number of Tx Descriptor pools
* @num_tx_ext_desc_pool: Number of Tx MSDU extension Descriptor pools
* @num_tx_desc: Number of Tx Descriptors per pool
* @num_tx_ext_desc: Number of Tx MSDU extension Descriptors per pool
* @max_peer_id: Maximum value of peer id that FW can assign for a client
* @htt_packet_type: Default 802.11 encapsulation type for any VAP created
* @int_tx_ring_mask: Bitmap of Tx interrupts mapped to each NAPI/Intr context
* @int_rx_ring_mask: Bitmap of Rx interrupts mapped to each NAPI/Intr context
* @int_rx_mon_ring_mask: Bitmap of Rx monitor ring interrupts mapped to each
* NAPI/Intr context
* @int_rx_err_ring_mask - Bitmap of Rx err ring interrupts mapped to each
* @int_rx_err_ring_mask: Bitmap of Rx err ring interrupts mapped to each
* NAPI/Intr context
* @int_wbm_rel_ring_mask - Bitmap of wbm rel ring interrupts mapped to each
* @int_wbm_rel_ring_mask: Bitmap of wbm rel ring interrupts mapped to each
* NAPI/Intr context
* @int_reo_status_ring_mask - Bitmap of reo status ring interrupts mapped to each
* NAPI/Intr context
* @int_ce_ring_mask - Bitmap of CE interrupts mapped to each NAPI/Intr context
* @lro_enabled - enable/disable lro feature
* @rx_hash - Enable hash based steering of rx packets
* @tso_enabled - enable/disable tso feature
* @napi_enabled - enable/disable interrupt mode for reaping tx and rx packets
* @tcp_Udp_Checksumoffload - enable/disable checksum offload
* @nss_cfg - nss configuration
* @rx_defrag_min_timeout - rx defrag minimum timeout
* @wbm_release_ring - wbm release ring size
* @tcl_cmd_ring - tcl cmd ring size
* @tcl_status_ring - tcl status ring size
* @reo_reinject_ring - reo reinject ring
* @rx_release_ring - rx release ring size
* @reo_exception_ring - reo exception ring size
* @reo_cmd_ring - reo cmd ring size
* @reo_status_ring - reo status ting size
* @rxdma_refill_ring - rxdma refill ring size
* @rxdma_err_dst_ring - rxdma error detination ring size
* @raw_mode_war - enable/disable raw mode war
* @int_reo_status_ring_mask: Bitmap of reo status ring interrupts mapped to
* each NAPI/Intr context
* @int_ce_ring_mask: Bitmap of CE interrupts mapped to each NAPI/Intr context
* @lro_enabled: enable/disable lro feature
* @rx_hash: Enable hash based steering of rx packets
* @tso_enabled: enable/disable tso feature
* @lro_enabled: enable/disable LRO feature
* @sg_enabled: enable disable scatter gather feature
* @gro_enabled: enable disable GRO feature
* @ipa_enabled: Flag indicating if IPA is enabled
* @ol_tx_csum_enabled: Flag indicating if TX csum is enabled
* @ol_rx_csum_enabled: Flag indicating if Rx csum is enabled
* @rawmode_enabled: Flag indicating if RAW mode is enabled
* @peer_flow_ctrl_enabled: Flag indicating if peer flow control is enabled
* @napi_enabled: enable/disable interrupt mode for reaping tx and rx packets
* @tcp_udp_checksumoffload: enable/disable checksum offload
* @nss_cfg: nss configuration
* @rx_defrag_min_timeout: rx defrag minimum timeout
* @wbm_release_ring: wbm release ring size
* @tcl_cmd_ring: tcl cmd ring size
* @tcl_status_ring: tcl status ring size
* @reo_reinject_ring: reo reinject ring
* @rx_release_ring: rx release ring size
* @reo_exception_ring: reo exception ring size
* @reo_cmd_ring: reo cmd ring size
* @reo_status_ring: reo status ting size
* @rxdma_refill_ring: rxdma refill ring size
* @rxdma_err_dst_ring: rxdma error detination ring size
* @raw_mode_war: enable/disable raw mode war
*/
struct wlan_cfg_dp_soc_ctxt {
int num_int_ctxts;
@@ -169,6 +177,7 @@ struct wlan_cfg_dp_soc_ctxt {
bool lro_enabled;
bool sg_enabled;
bool gro_enabled;
bool ipa_enabled;
bool ol_tx_csum_enabled;
bool ol_rx_csum_enabled;
bool rawmode_enabled;
@@ -660,20 +669,28 @@ int wlan_cfg_get_num_mac_rings(struct wlan_cfg_dp_pdev_ctxt *cfg);
/*
* wlan_cfg_is_lro_enabled - Return LRO enabled/disabled
* @wlan_cfg_pdev_ctx
* @wlan_cfg_dp_soc_ctxt
*
* Return: true - LRO enabled false - LRO disabled
*/
bool wlan_cfg_is_lro_enabled(struct wlan_cfg_dp_soc_ctxt *cfg);
/*
* wlan_cfg_is_lro_enabled - Return RX hash enabled/disabled
* @wlan_cfg_pdev_ctx
* wlan_cfg_is_rx_hash_enabled - Return RX hash enabled/disabled
* @wlan_cfg_dp_soc_ctxt
*
* Return: true - enabled false - disabled
*/
bool wlan_cfg_is_rx_hash_enabled(struct wlan_cfg_dp_soc_ctxt *cfg);
/*
* wlan_cfg_is_ipa_enabled - Return IPA enabled/disabled
* @wlan_cfg_dp_soc_ctxt
*
* Return: true - enabled false - disabled
*/
bool wlan_cfg_is_ipa_enabled(struct wlan_cfg_dp_soc_ctxt *cfg);
/*
* wlan_cfg_set_rx_hash - set rx hash enabled/disabled
* @wlan_cfg_soc_ctx