Forráskód Böngészése

qcacld-3.0: Use dp_link in txrx path

Use dp_link in the core TX/RX path instead
of currently used dp_intf.

Change-Id: Id32a4053094fae844d190043d57f85a8e9659339
CRs-Fixed: 3518897
Rakesh Pillai 2 éve
szülő
commit
1e093bec44

+ 10 - 0
components/dp/core/inc/wlan_dp_main.h

@@ -561,6 +561,16 @@ dp_del_latency_critical_client(struct wlan_objmgr_vdev *vdev,
  */
 int is_dp_intf_valid(struct wlan_dp_intf *dp_intf);
 
+/**
+ * is_dp_link_valid() - check if DP link is valid
+ * @dp_link: DP link handle
+ *
+ * API to check whether DP link is valid
+ *
+ * Return: true if dp_link is valid, else false.
+ */
+bool is_dp_link_valid(struct wlan_dp_link *dp_link);
+
 /**
  * dp_send_rps_ind() - send rps indication to daemon
  * @dp_intf: DP interface

+ 8 - 8
components/dp/core/inc/wlan_dp_txrx.h

@@ -162,11 +162,11 @@ QDF_STATUS dp_rx_flush_packet_cbk(void *dp_link_context, uint8_t link_id);
 /**
  * dp_softap_start_xmit() - Transmit a frame for SAP interface
  * @nbuf: pointer to Network buffer
- * @dp_intf: DP interface
+ * @dp_link: DP link handle
  *
  * Return: QDF_STATUS_SUCCESS on successful transmission
  */
-QDF_STATUS dp_softap_start_xmit(qdf_nbuf_t nbuf, struct wlan_dp_intf *dp_intf);
+QDF_STATUS dp_softap_start_xmit(qdf_nbuf_t nbuf, struct wlan_dp_link *dp_link);
 
 /**
  * dp_softap_tx_timeout() - TX timeout handler
@@ -297,7 +297,7 @@ QDF_STATUS dp_rx_thread_gro_flush_ind_cbk(void *intf_ctx, int rx_ctx_id);
 
 /**
  * dp_rx_pkt_thread_enqueue_cbk() - receive pkt handler to enqueue into thread
- * @intf_ctx: pointer to DP interface context
+ * @link_ctx: pointer to DP link context
  * @nbuf_list: pointer to qdf_nbuf list
  *
  * Receive callback registered with DP layer which enqueues packets into dp rx
@@ -306,7 +306,7 @@ QDF_STATUS dp_rx_thread_gro_flush_ind_cbk(void *intf_ctx, int rx_ctx_id);
  * Return: QDF_STATUS_E_FAILURE if any errors encountered,
  *	   QDF_STATUS_SUCCESS otherwise
  */
-QDF_STATUS dp_rx_pkt_thread_enqueue_cbk(void *intf_ctx,
+QDF_STATUS dp_rx_pkt_thread_enqueue_cbk(void *link_ctx,
 					qdf_nbuf_t nbuf_list);
 
 /**
@@ -426,12 +426,12 @@ qdf_nbuf_t dp_nbuf_orphan(struct wlan_dp_intf *dp_intf,
 
 /**
  * dp_get_tx_resource() - check tx resources and take action
- * @dp_intf: DP interface
+ * @dp_link: DP link handle
  * @mac_addr: mac address
  *
  * Return: none
  */
-void dp_get_tx_resource(struct wlan_dp_intf *dp_intf,
+void dp_get_tx_resource(struct wlan_dp_link *dp_link,
 			struct qdf_mac_addr *mac_addr);
 
 #else
@@ -481,13 +481,13 @@ qdf_nbuf_t dp_nbuf_orphan(struct wlan_dp_intf *dp_intf,
 
 /**
  * dp_get_tx_resource() - check tx resources and take action
- * @dp_intf: DP interface
+ * @dp_link: DP link handle
  * @mac_addr: mac address
  *
  * Return: none
  */
 static inline
-void dp_get_tx_resource(struct wlan_dp_intf *dp_intf,
+void dp_get_tx_resource(struct wlan_dp_link *dp_link,
 			struct qdf_mac_addr *mac_addr)
 {
 }

+ 31 - 11
components/dp/core/src/wlan_dp_main.c

@@ -177,22 +177,24 @@ dp_get_intf_by_netdev(struct wlan_dp_psoc_context *dp_ctx, qdf_netdev_t dev)
 }
 
 /**
- * validate_interface_id() - Check if interface ID is valid
- * @intf_id: interface ID
+ * validate_link_id() - Check if link ID is valid
+ * @link_id: DP link ID
  *
- * Return: 0 on success, error code on failure
+ * Return: true on success, false on failure
  */
-static int validate_interface_id(uint8_t intf_id)
+static bool validate_link_id(uint8_t link_id)
 {
-	if (intf_id == WLAN_UMAC_VDEV_ID_MAX) {
+	if (link_id == WLAN_UMAC_VDEV_ID_MAX) {
 		dp_err("Interface is not up: %ps", QDF_RET_IP);
-		return -EINVAL;
+		return false;
 	}
-	if (intf_id >= WLAN_MAX_VDEVS) {
-		dp_err("Bad interface id:%u", intf_id);
-		return -EINVAL;
+
+	if (link_id >= WLAN_MAX_VDEVS) {
+		dp_err("Bad interface id:%u", link_id);
+		return false;
 	}
-	return 0;
+
+	return true;
 }
 
 int is_dp_intf_valid(struct wlan_dp_intf *dp_intf)
@@ -213,7 +215,25 @@ int is_dp_intf_valid(struct wlan_dp_intf *dp_intf)
 		return -EAGAIN;
 	}
 
-	return validate_interface_id(dp_intf->intf_id);
+	return 0;
+}
+
+bool is_dp_link_valid(struct wlan_dp_link *dp_link)
+{
+	struct wlan_dp_intf *dp_intf;
+	int ret;
+
+	if (!dp_link) {
+		dp_err("link is NULL");
+		return false;
+	}
+
+	dp_intf = dp_link->dp_intf;
+	ret = is_dp_intf_valid(dp_intf);
+	if (ret)
+		return false;
+
+	return validate_link_id(dp_link->link_id);
 }
 
 QDF_STATUS dp_get_front_link_no_lock(struct wlan_dp_intf *dp_intf,

+ 9 - 6
components/dp/core/src/wlan_dp_softap_txrx.c

@@ -392,13 +392,15 @@ qdf_nbuf_t dp_sap_nbuf_orphan(struct wlan_dp_intf *dp_intf,
 
 #ifdef QCA_LL_LEGACY_TX_FLOW_CONTROL
 static
-void dp_softap_get_tx_resource(struct wlan_dp_intf *dp_intf,
+void dp_softap_get_tx_resource(struct wlan_dp_link *dp_link,
 			       qdf_nbuf_t nbuf)
 {
+	struct wlan_dp_intf *dp_intf = dp_link->dp_intf;
+
 	if (QDF_NBUF_CB_GET_IS_BCAST(nbuf) || QDF_NBUF_CB_GET_IS_MCAST(nbuf))
-		dp_get_tx_resource(dp_intf, &dp_intf->mac_addr);
+		dp_get_tx_resource(dp_link, &dp_intf->mac_addr);
 	else
-		dp_get_tx_resource(dp_intf,
+		dp_get_tx_resource(dp_link,
 				   (struct qdf_mac_addr *)(qdf_nbuf_data(nbuf) +
 							   QDF_NBUF_DEST_MAC_OFFSET));
 }
@@ -613,12 +615,13 @@ dp_softap_inspect_traffic_end_indication_pkt(struct wlan_dp_intf *dp_intf,
 /**
  * dp_softap_start_xmit() - Transmit a frame
  * @nbuf: pointer to Network buffer
- * @dp_intf: DP interface
+ * @dp_link: DP link handle
  *
  * Return: QDF_STATUS_SUCCESS on successful transmission
  */
-QDF_STATUS dp_softap_start_xmit(qdf_nbuf_t nbuf, struct wlan_dp_intf *dp_intf)
+QDF_STATUS dp_softap_start_xmit(qdf_nbuf_t nbuf, struct wlan_dp_link *dp_link)
 {
+	struct wlan_dp_intf *dp_intf = dp_link->dp_intf;
 	struct wlan_dp_psoc_context *dp_ctx = dp_intf->dp_ctx;
 	struct qdf_mac_addr *dest_mac_addr;
 	void *soc = cds_get_context(QDF_MODULE_ID_SOC);
@@ -639,7 +642,7 @@ QDF_STATUS dp_softap_start_xmit(qdf_nbuf_t nbuf, struct wlan_dp_intf *dp_intf)
 	if (QDF_IS_STATUS_ERROR(dp_softap_validate_peer_state(dp_intf, nbuf)))
 		goto drop_pkt;
 
-	dp_softap_get_tx_resource(dp_intf, nbuf);
+	dp_softap_get_tx_resource(dp_link, nbuf);
 
 	nbuf = dp_sap_nbuf_orphan(dp_intf, nbuf);
 	if (!nbuf)

+ 13 - 10
components/dp/core/src/wlan_dp_txrx.c

@@ -64,12 +64,13 @@ void dp_rx_skip_fisa(struct wlan_dp_psoc_context *dp_ctx, uint32_t value)
 #endif
 
 #ifdef QCA_LL_LEGACY_TX_FLOW_CONTROL
-void dp_get_tx_resource(struct wlan_dp_intf *dp_intf,
+void dp_get_tx_resource(struct wlan_dp_link *dp_link,
 			struct qdf_mac_addr *mac_addr)
 {
+	struct wlan_dp_intf *dp_intf = dp_link->dp_intf;
 	struct wlan_dp_psoc_callbacks *dp_ops = &dp_intf->dp_ctx->dp_ops;
 
-	dp_ops->dp_get_tx_resource(dp_intf->intf_id,
+	dp_ops->dp_get_tx_resource(dp_link->link_id,
 				   mac_addr);
 }
 #endif /* QCA_LL_LEGACY_TX_FLOW_CONTROL */
@@ -627,7 +628,7 @@ dp_start_xmit(struct wlan_dp_link *dp_link, qdf_nbuf_t nbuf)
 		goto drop_pkt;
 	}
 
-	dp_get_tx_resource(dp_intf, &mac_addr_tx_allowed);
+	dp_get_tx_resource(dp_link, &mac_addr_tx_allowed);
 
 	if (!qdf_nbuf_ipa_owned_get(nbuf)) {
 		nbuf = dp_nbuf_orphan(dp_intf, nbuf);
@@ -1341,32 +1342,34 @@ dp_rx_thread_gro_flush_ind_cbk(void *intf_ctx, int rx_ctx_id)
 				   rx_ctx_id, gro_flush_code);
 }
 
-QDF_STATUS dp_rx_pkt_thread_enqueue_cbk(void *intf_ctx,
+QDF_STATUS dp_rx_pkt_thread_enqueue_cbk(void *link_ctx,
 					qdf_nbuf_t nbuf_list)
 {
 	struct wlan_dp_intf *dp_intf;
-	uint8_t intf_id;
+	struct wlan_dp_link *dp_link;
+	uint8_t link_id;
 	qdf_nbuf_t head_ptr;
 
-	if (qdf_unlikely(!intf_ctx || !nbuf_list)) {
+	if (qdf_unlikely(!link_ctx || !nbuf_list)) {
 		dp_err("Null params being passed");
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	dp_intf = (struct wlan_dp_intf *)intf_ctx;
-	if (is_dp_intf_valid(dp_intf))
+	dp_link = (struct wlan_dp_link *)link_ctx;
+	if (!is_dp_link_valid(dp_link))
 		return QDF_STATUS_E_FAILURE;
 
+	dp_intf = dp_link->dp_intf;
 	if (dp_intf->runtime_disable_rx_thread &&
 	    dp_intf->txrx_ops.rx.rx_stack)
 		return dp_intf->txrx_ops.rx.rx_stack(dp_intf, nbuf_list);
 
-	intf_id = dp_intf->intf_id;
+	link_id = dp_link->link_id;
 
 	head_ptr = nbuf_list;
 	while (head_ptr) {
 		qdf_nbuf_cb_update_vdev_id(head_ptr,
-					   intf_id);
+					   link_id);
 		head_ptr = qdf_nbuf_next(head_ptr);
 	}
 

+ 2 - 1
components/dp/dispatcher/inc/wlan_dp_public_struct.h

@@ -641,7 +641,8 @@ struct wlan_dp_psoc_callbacks {
 	qdf_netdev_t (*dp_get_netdev_by_vdev_mac)(struct qdf_mac_addr *mac_addr);
 	unsigned int (*dp_get_tx_flow_low_watermark)(hdd_cb_handle cb_ctx,
 						     uint8_t intf_id);
-	void (*dp_get_tx_resource)(uint8_t intf_id, struct qdf_mac_addr *mac_addr);
+	void (*dp_get_tx_resource)(uint8_t link_id_id,
+				   struct qdf_mac_addr *mac_addr);
 	void (*dp_get_tsf_time)(uint8_t intf_id,
 				uint64_t input_time, uint64_t *tsf_time);
 

+ 1 - 1
components/dp/dispatcher/src/wlan_dp_ucfg_api.c

@@ -1321,7 +1321,7 @@ ucfg_dp_softap_start_xmit(qdf_nbuf_t nbuf, struct wlan_objmgr_vdev *vdev)
 
 	dp_intf = dp_link->dp_intf;
 	qdf_atomic_inc(&dp_intf->num_active_task);
-	status = dp_softap_start_xmit(nbuf, dp_intf);
+	status = dp_softap_start_xmit(nbuf, dp_link);
 	qdf_atomic_dec(&dp_intf->num_active_task);
 
 	return status;