瀏覽代碼

qcacmn: Fix compilation issues in mgmt Rx REO

Fix compilation issues in mgmt Rx REO feature.

CRs-Fixed: 3179407
Change-Id: I19e475b9f4eb5615d9ae63a85af3daf3ea1434ba
Edayilliam Jayadev 3 年之前
父節點
當前提交
cecf753cac

+ 1 - 1
target_if/init_deinit/src/mlo_global_h_shmem_arena_api.c

@@ -94,7 +94,7 @@ static bool mgmt_rx_reo_snapshot_is_consistent(uint32_t snapshot_low,
 static uint32_t mgmt_rx_reo_snapshot_get_global_timestamp(
 	uint32_t snapshot_low, uint32_t snapshot_high, uint8_t snapshot_version)
 {
-	return MLO_SHMEM_MGMT_RX_REO_SNAPSHOT_GLOBAL_TIMESTAMP_GET_FROM_DWORDS
+	return MLO_SHMEM_MGMT_RX_REO_SNAPSHOT_GLOBAL_TIMESTAMP_GET
 		(snapshot_low, snapshot_high, snapshot_version);
 }
 

+ 16 - 16
umac/cmn_services/mgmt_txrx/core/src/wlan_mgmt_txrx_rx_reo.c

@@ -1501,7 +1501,7 @@ mgmt_rx_reo_log_egress_frame_after_delivery(
  */
 static QDF_STATUS
 mgmt_rx_reo_print_egress_frame_info(struct mgmt_rx_reo_context *reo_ctx,
-				    uint16_t num_frames))
+				    uint16_t num_frames)
 {
 	struct reo_egress_debug_info *egress_frame_debug_info;
 	int start_index;
@@ -2389,11 +2389,17 @@ wlan_mgmt_rx_reo_update_host_snapshot(struct wlan_objmgr_pdev *pdev,
 
 	host_ss = &rx_reo_pdev_ctx->host_snapshot;
 
-	/* There should not be any holes in the packet counter */
-	qdf_assert_always(!host_ss->valid ||
-			  mgmt_rx_reo_subtract_pkt_ctrs(
+	/*
+	 * Under back pressure scenarios, FW may drop management Rx frame
+	 * WMI events. So holes in the management packet counter is expected.
+	 * Add a debug print to track the holes.
+	 */
+	if (!(mgmt_rx_reo_subtract_pkt_ctrs(reo_params->mgmt_pkt_ctr,
+					    host_ss->mgmt_pkt_ctr) == 1))
+		mgmt_rx_reo_debug("Pkt ctr gap: link=%u, prev=%u cur=%u ts =%u",
+				  reo_params->link_id, host_ss->mgmt_pkt_ctr,
 				  reo_params->mgmt_pkt_ctr,
-				  host_ss->mgmt_pkt_ctr) == 1);
+				  reo_params->global_timestamp);
 
 	host_ss->valid = true;
 	host_ss->global_timestamp = reo_params->global_timestamp;
@@ -2874,9 +2880,6 @@ wlan_mgmt_rx_reo_algo_entry(struct wlan_objmgr_pdev *pdev,
 {
 	struct mgmt_rx_reo_context *reo_ctx;
 	QDF_STATUS ret;
-	uint8_t frame_type;
-	uint8_t frame_subtype;
-	struct ieee80211_frame *wh;
 
 	if (!is_queued)
 		return QDF_STATUS_E_NULL_VALUE;
@@ -2983,15 +2986,12 @@ wlan_mgmt_rx_reo_algo_entry(struct wlan_objmgr_pdev *pdev,
 	 */
 	qdf_spin_lock(&reo_ctx->reo_algo_entry_lock);
 
-	if ((desc->type == MGMT_RX_REO_FRAME_DESC_HOST_CONSUMED_FRAME ||
-	     desc->type == MGMT_RX_REO_FRAME_DESC_FW_CONSUMED_FRAME) &&
-	    !desc->rx_params->reo_params->valid)
-		qdf_assert_always(0);
+	qdf_assert_always(desc->rx_params->reo_params->valid);
+	qdf_assert_always(desc->frame_type == IEEE80211_FC0_TYPE_MGT);
 
-	wh = (struct ieee80211_frame *)qdf_nbuf_data(desc->nbuf);
-	frame_type = wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK;
-	frame_subtype = wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK;
-	qdf_assert_always(mgmt_type == IEEE80211_FC0_TYPE_MGT);
+	if (desc->type == MGMT_RX_REO_FRAME_DESC_HOST_CONSUMED_FRAME ||
+	    desc->type == MGMT_RX_REO_FRAME_DESC_FW_CONSUMED_FRAME)
+		qdf_assert_always(desc->rx_params->reo_params->duration_us);
 
 	/* Update the Host snapshot */
 	ret = wlan_mgmt_rx_reo_update_host_snapshot(

+ 4 - 0
umac/cmn_services/mgmt_txrx/core/src/wlan_mgmt_txrx_rx_reo_i.h

@@ -630,6 +630,8 @@ struct mgmt_rx_reo_context {
  * struct mgmt_rx_reo_frame_descriptor - Frame Descriptor used to describe
  * a management frame in mgmt rx reo module.
  * @type: Frame descriptor type
+ * @frame_type: frame type
+ * @frame_subtype: frame subtype
  * @nbuf: nbuf corresponding to this frame
  * @rx_params: Management rx event parameters
  * @wait_count: Wait counts for the frame
@@ -653,6 +655,8 @@ struct mgmt_rx_reo_context {
  */
 struct mgmt_rx_reo_frame_descriptor {
 	enum mgmt_rx_reo_frame_descriptor_type type;
+	uint8_t frame_type;
+	uint8_t frame_subtype;
 	qdf_nbuf_t nbuf;
 	struct mgmt_rx_event_params *rx_params;
 	struct mgmt_rx_reo_wait_count wait_count;

+ 5 - 0
umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_rx_reo_tgt_api.c

@@ -128,6 +128,8 @@ tgt_mgmt_rx_reo_enter_algo_without_buffer(
 	desc.ingress_timestamp = qdf_get_log_timestamp();
 	desc.list_size_rx = -1;
 	desc.list_insertion_pos = -1;
+	desc.frame_type = IEEE80211_FC0_TYPE_MGT;
+	desc.frame_subtype = 0xFF;
 
 	/** If REO is not required for this descriptor,
 	 *  no need to proceed further
@@ -283,6 +285,9 @@ QDF_STATUS tgt_mgmt_rx_reo_frame_handler(
 	frame_type = wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK;
 	frame_subtype = wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK;
 
+	desc.frame_type = frame_type;
+	desc.frame_subtype = frame_subtype;
+
 	/* If REO is not required for this frame, process it right away */
 	if (frame_type != IEEE80211_FC0_TYPE_MGT ||
 	    !is_mgmt_rx_reo_required(pdev, &desc)) {

+ 2 - 0
umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_rx_reo_utils_api.c

@@ -234,6 +234,8 @@ wlan_mgmt_rx_reo_is_feature_enabled_at_pdev(struct wlan_objmgr_pdev *pdev)
 	return wlan_mgmt_rx_reo_is_feature_enabled_at_psoc(
 			wlan_pdev_get_psoc(pdev));
 }
+
+qdf_export_symbol(wlan_mgmt_rx_reo_is_feature_enabled_at_pdev);
 #else
 bool
 wlan_mgmt_rx_reo_is_feature_enabled_at_psoc(struct wlan_objmgr_psoc *psoc)