Sfoglia il codice sorgente

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
Gyanranjan Hazarika 6 anni fa
parent
commit
7f9c050df4

+ 3 - 1
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,

+ 8 - 1
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, &params, 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;

+ 1 - 1
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,

+ 5 - 1
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

+ 6 - 1
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,
 							    &param);
 }

+ 5 - 0
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;
+
 };
 
 /**

+ 3 - 0
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)) {