From 7f9c050df479b0e42b008f30dfdf47fd17cc049c Mon Sep 17 00:00:00 2001 From: Gyanranjan Hazarika Date: Wed, 25 Jul 2018 23:26:16 -0700 Subject: [PATCH] qcacmn: ba_window size in WMI for rx_reorder_queue_setup ba_window_size_valid and ba_window size support is missing while sending wmi_peer_reorder_queue_setup. This is needed for handing 256 BA which is not FW default. Change-Id: I3218921c48c0f82225b7992076e73ac0acf7bd11 CRs-fixed: 2285423 --- dp/inc/cdp_txrx_ops.h | 4 +++- dp/wifi3.0/dp_peer.c | 9 ++++++++- hal/wifi3.0/hal_reo.h | 2 +- target_if/dp/inc/target_if_dp.h | 6 +++++- target_if/dp/src/target_if_dp.c | 7 ++++++- wmi/inc/wmi_unified_param.h | 5 +++++ wmi/src/wmi_unified_tlv.c | 3 +++ 7 files changed, 31 insertions(+), 5 deletions(-) diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index 7cb6c6668d36..1a857ec0871b 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -753,7 +753,9 @@ struct ol_if_ops { (*peer_rx_reorder_queue_setup)(struct cdp_ctrl_objmgr_pdev *ctrl_pdev, uint8_t vdev_id, uint8_t *peer_mac, qdf_dma_addr_t hw_qdesc, int tid, - uint16_t queue_num); + uint16_t queue_num, + uint8_t ba_window_size_valid, + uint16_t ba_window_size); QDF_STATUS (*peer_rx_reorder_queue_remove)(struct cdp_ctrl_objmgr_pdev *ctrl_pdev, uint8_t vdev_id, uint8_t *peer_macaddr, diff --git a/dp/wifi3.0/dp_peer.c b/dp/wifi3.0/dp_peer.c index c56b641269a7..5022e8ba8380 100644 --- a/dp/wifi3.0/dp_peer.c +++ b/dp/wifi3.0/dp_peer.c @@ -1128,6 +1128,13 @@ static int dp_rx_tid_update_wifi3(struct dp_peer *peer, int tid, uint32_t dp_reo_send_cmd(soc, CMD_UPDATE_RX_REO_QUEUE, ¶ms, dp_rx_tid_update_cb, rx_tid); rx_tid->ba_win_size = ba_window_size; + if (soc->cdp_soc.ol_ops->peer_rx_reorder_queue_setup) { + soc->cdp_soc.ol_ops->peer_rx_reorder_queue_setup( + peer->vdev->pdev->ctrl_pdev, + peer->vdev->vdev_id, peer->mac_addr.raw, + rx_tid->hw_qdesc_paddr, tid, tid, 1, ba_window_size); + + } return 0; } @@ -1329,7 +1336,7 @@ try_desc_alloc: soc->cdp_soc.ol_ops->peer_rx_reorder_queue_setup( vdev->pdev->ctrl_pdev, peer->vdev->vdev_id, peer->mac_addr.raw, - rx_tid->hw_qdesc_paddr, tid, tid); + rx_tid->hw_qdesc_paddr, tid, tid, 1, ba_window_size); } return 0; diff --git a/hal/wifi3.0/hal_reo.h b/hal/wifi3.0/hal_reo.h index fa672ec17a71..8a53ffe8167e 100644 --- a/hal/wifi3.0/hal_reo.h +++ b/hal/wifi3.0/hal_reo.h @@ -322,7 +322,7 @@ struct hal_reo_cmd_update_queue_params { pn_uneven:1, pn_hand_enab:1, ignore_ampdu:1; - uint32_t ba_window_size:8, + uint32_t ba_window_size:9, pn_size:8, svld:1, ssn:12, diff --git a/target_if/dp/inc/target_if_dp.h b/target_if/dp/inc/target_if_dp.h index ef1d09eddb90..32ef453e16a2 100644 --- a/target_if/dp/inc/target_if_dp.h +++ b/target_if/dp/inc/target_if_dp.h @@ -54,6 +54,8 @@ target_if_peer_set_default_routing(struct cdp_ctrl_objmgr_pdev *pdev, * @hw_qdesc: hw queue descriptor * @tid: tid number * @queue_no: queue number + * @ba_window_size_valid: BA window size validity flag + * @ba_window_size: BA window size * * return: QDF_STATUS_SUCCESS for success or error code */ @@ -61,7 +63,9 @@ QDF_STATUS target_if_peer_rx_reorder_queue_setup(struct cdp_ctrl_objmgr_pdev *pdev, uint8_t vdev_id, uint8_t *peer_macaddr, qdf_dma_addr_t hw_qdesc, int tid, - uint16_t queue_no); + uint16_t queue_no, + uint8_t ba_window_size_valid, + uint16_t ba_window_size); /** * target_if_peer_rx_reorder_queue_remove() - remove rx reorder queue diff --git a/target_if/dp/src/target_if_dp.c b/target_if/dp/src/target_if_dp.c index 12a6e467415a..1b9122d34008 100644 --- a/target_if/dp/src/target_if_dp.c +++ b/target_if/dp/src/target_if_dp.c @@ -62,7 +62,9 @@ QDF_STATUS target_if_peer_rx_reorder_queue_setup(struct cdp_ctrl_objmgr_pdev *pdev, uint8_t vdev_id, uint8_t *peer_macaddr, qdf_dma_addr_t hw_qdesc, int tid, - uint16_t queue_no) + uint16_t queue_no, + uint8_t ba_window_size_valid, + uint16_t ba_window_size) { struct rx_reorder_queue_setup_params param; struct common_wmi_handle *pdev_wmi_handle; @@ -79,6 +81,9 @@ target_if_peer_rx_reorder_queue_setup(struct cdp_ctrl_objmgr_pdev *pdev, param.hw_qdesc_paddr_lo = hw_qdesc & 0xffffffff; param.hw_qdesc_paddr_hi = (uint64_t)hw_qdesc >> 32; param.queue_no = queue_no; + param.ba_window_size_valid = ba_window_size_valid; + param.ba_window_size = ba_window_size; + return wmi_unified_peer_rx_reorder_queue_setup_send(pdev_wmi_handle, ¶m); } diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h index 168667bb7a4c..49b78aa99ca0 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/wmi/inc/wmi_unified_param.h @@ -4863,6 +4863,8 @@ struct rtt_keepalive_req_params { * @hw_qdesc_paddr_lo: lower 32 bits of queue desc adddress * @hw_qdesc_paddr_hi: upper 32 bits of queue desc adddress * @queue_no: 16-bit number assigned by host for queue + * @ba_window_size_valid: BA window size validity flag + * @ba_window_size: BA window size */ struct rx_reorder_queue_setup_params { uint8_t *peer_macaddr; @@ -4871,6 +4873,9 @@ struct rx_reorder_queue_setup_params { uint32_t hw_qdesc_paddr_lo; uint32_t hw_qdesc_paddr_hi; uint16_t queue_no; + uint8_t ba_window_size_valid; + uint16_t ba_window_size; + }; /** diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index bce9c55b2b76..81b85c77437b 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -935,6 +935,9 @@ QDF_STATUS send_peer_rx_reorder_queue_setup_cmd_tlv(wmi_unified_t wmi, cmd->queue_ptr_lo = param->hw_qdesc_paddr_lo; cmd->queue_ptr_hi = param->hw_qdesc_paddr_hi; cmd->queue_no = param->queue_no; + cmd->ba_window_size_valid = param->ba_window_size_valid; + cmd->ba_window_size = param->ba_window_size; + if (wmi_unified_cmd_send(wmi, buf, len, WMI_PEER_REORDER_QUEUE_SETUP_CMDID)) {