Răsfoiți Sursa

qcacmn: Add alt_pipe in struct wlan_ipa_iface_context

With IPA_WDI3_TX_TWO_PIPES=y, add support to setup and cleanup alt_pipe
on a per interface basis in struct wlan_ipa_iface_context.

At the same time, add support to dump alt_pipe value in
wlan_ipa_dump_iface_context() for debug purposes.

Change-Id: If618e56036c434cdfe7989d1b4197ed54e3b1147
CRs-Fixed: 3599454
Jia Ding 1 an în urmă
părinte
comite
449758b4de
3 a modificat fișierele cu 59 adăugiri și 13 ștergeri
  1. 4 0
      ipa/core/inc/wlan_ipa_priv.h
  2. 41 13
      ipa/core/src/wlan_ipa_core.c
  3. 14 0
      ipa/core/src/wlan_ipa_stats.c

+ 4 - 0
ipa/core/inc/wlan_ipa_priv.h

@@ -378,6 +378,7 @@ struct wlan_ipa_priv;
  * @stats: Interface stats
  * @bssid: BSSID. valid only for sta iface ctx
  * @is_authenticated: is peer authenticated
+ * @alt_pipe: Indicate whether the interface uses alternate TX pipe
  */
 struct wlan_ipa_iface_context {
 	struct wlan_ipa_priv *ipa_ctx;
@@ -397,6 +398,9 @@ struct wlan_ipa_iface_context {
 	struct wlan_ipa_iface_stats stats;
 	struct qdf_mac_addr bssid;
 	uint8_t is_authenticated;
+#ifdef IPA_WDI3_TX_TWO_PIPES
+	bool alt_pipe;
+#endif
 };
 
 /**

+ 41 - 13
ipa/core/src/wlan_ipa_core.c

@@ -2077,6 +2077,45 @@ static int wlan_ipa_get_ifaceid(struct wlan_ipa_priv *ipa_ctx,
 	return i;
 }
 
+#ifdef IPA_WDI3_TX_TWO_PIPES
+#define WLAN_IPA_SESSION_ID_SHIFT 1
+static uint8_t wlan_ipa_set_session_id(uint8_t session_id, bool is_2g_iface)
+{
+	return (session_id << WLAN_IPA_SESSION_ID_SHIFT) | is_2g_iface;
+}
+
+static void
+wlan_ipa_setup_iface_alt_pipe(struct wlan_ipa_iface_context *iface_context,
+			      bool alt_pipe)
+{
+	iface_context->alt_pipe = alt_pipe;
+}
+
+static void
+wlan_ipa_cleanup_iface_alt_pipe(struct wlan_ipa_iface_context *iface_context)
+{
+	iface_context->alt_pipe = false;
+}
+
+#else
+static uint8_t wlan_ipa_set_session_id(uint8_t session_id, bool is_2g_iface)
+{
+	return session_id;
+}
+
+static void
+wlan_ipa_setup_iface_alt_pipe(struct wlan_ipa_iface_context *iface_context,
+			      bool alt_pipe)
+{
+}
+
+static void
+wlan_ipa_cleanup_iface_alt_pipe(struct wlan_ipa_iface_context *iface_context)
+{
+}
+
+#endif
+
 /**
  * wlan_ipa_cleanup_iface() - Cleanup IPA on a given interface
  * @iface_context: interface-specific IPA context
@@ -2128,6 +2167,7 @@ static void wlan_ipa_cleanup_iface(struct wlan_ipa_iface_context *iface_context,
 	iface_context->device_mode = QDF_MAX_NO_OF_MODE;
 	iface_context->session_id = WLAN_IPA_MAX_SESSION;
 	qdf_mem_set(iface_context->mac_addr, QDF_MAC_ADDR_SIZE, 0);
+	wlan_ipa_cleanup_iface_alt_pipe(iface_context);
 	qdf_spin_unlock_bh(&iface_context->interface_lock);
 	iface_context->ifa_address = 0;
 	qdf_zero_macaddr(&iface_context->bssid);
@@ -2218,19 +2258,6 @@ static void wlan_ipa_nbuf_cb(qdf_nbuf_t skb)
 
 #endif /* QCA_LL_TX_FLOW_CONTROL_V2 */
 
-#ifdef IPA_WDI3_TX_TWO_PIPES
-#define WLAN_IPA_SESSION_ID_SHIFT 1
-static uint8_t wlan_ipa_set_session_id(uint8_t session_id, bool is_2g_iface)
-{
-	return (session_id << WLAN_IPA_SESSION_ID_SHIFT) | is_2g_iface;
-}
-#else
-static uint8_t wlan_ipa_set_session_id(uint8_t session_id, bool is_2g_iface)
-{
-	return session_id;
-}
-#endif
-
 /**
  * wlan_ipa_setup_iface() - Setup IPA on a given interface
  * @ipa_ctx: IPA IPA global context
@@ -2328,6 +2355,7 @@ static QDF_STATUS wlan_ipa_setup_iface(struct wlan_ipa_priv *ipa_ctx,
 	iface_context->device_mode = device_mode;
 	iface_context->session_id = session_id;
 	qdf_mem_copy(iface_context->mac_addr, mac_addr, QDF_MAC_ADDR_SIZE);
+	wlan_ipa_setup_iface_alt_pipe(iface_context, is_2g_iface);
 	qdf_spin_unlock_bh(&iface_context->interface_lock);
 
 	status = cdp_ipa_setup_iface(ipa_ctx->dp_soc, net_dev->name,

+ 14 - 0
ipa/core/src/wlan_ipa_stats.c

@@ -406,6 +406,19 @@ static void wlan_ipa_dump_sys_pipe(struct wlan_ipa_priv *ipa_ctx)
 	}
 }
 
+#ifdef IPA_WDI3_TX_TWO_PIPES
+static void
+wlan_ipa_dump_iface_context_alt_pipe(struct wlan_ipa_iface_context *iface)
+{
+	ipa_info("\talt_pipe: %d\n", iface->alt_pipe);
+}
+#else
+static void
+wlan_ipa_dump_iface_context_alt_pipe(struct wlan_ipa_iface_context *iface)
+{
+}
+#endif
+
 /**
  * wlan_ipa_dump_iface_context() - Dump IPA interface context structure
  * @ipa_ctx: IPA private context structure
@@ -442,6 +455,7 @@ static void wlan_ipa_dump_iface_context(struct wlan_ipa_priv *ipa_ctx)
 			iface_context->iface_id,
 			&iface_context->interface_lock,
 			iface_context->ifa_address);
+		wlan_ipa_dump_iface_context_alt_pipe(iface_context);
 	}
 }