From d4a1bd480003f3e1a0590bc46fbcb24f05652ca7 Mon Sep 17 00:00:00 2001
From: tzh <tanzhtanzh@gmail.com>
Date: Thu, 15 Aug 2024 06:56:47 +0000
Subject: [PATCH] feat(wfit/bt): update aic8800 wifi/bt drive and hal

---
 longan/kernel/linux-4.9/drivers/net/wireless/aic8800/aic8800_bsp/aicsdio_txrxif.c |   30 +++++++++++++-----------------
 1 files changed, 13 insertions(+), 17 deletions(-)

diff --git a/longan/kernel/linux-4.9/drivers/net/wireless/aic8800/aic8800_bsp/aicsdio_txrxif.c b/longan/kernel/linux-4.9/drivers/net/wireless/aic8800/aic8800_bsp/aicsdio_txrxif.c
old mode 100644
new mode 100755
index 428687d..2b11800
--- a/longan/kernel/linux-4.9/drivers/net/wireless/aic8800/aic8800_bsp/aicsdio_txrxif.c
+++ b/longan/kernel/linux-4.9/drivers/net/wireless/aic8800/aic8800_bsp/aicsdio_txrxif.c
@@ -21,7 +21,7 @@
 
 int aicwf_bus_init(uint bus_hdrlen, struct device *dev)
 {
-	int ret = 0;
+	int ret = -ENOMEM;
 	struct aicwf_bus *bus_if;
 
 	if (!dev) {
@@ -31,7 +31,6 @@
 	bus_if = dev_get_drvdata(dev);
 	bus_if->cmd_buf = kzalloc(CMD_BUF_MAX, GFP_KERNEL);
 	if (!bus_if->cmd_buf) {
-		ret = -ENOMEM;
 		txrx_err("proto_attach failed\n");
 		goto fail;
 	}
@@ -56,7 +55,7 @@
 		goto fail;
 	}
 
-	return ret;
+	return 0;
 fail:
 	aicwf_bus_deinit(dev);
 
@@ -72,8 +71,8 @@
 		txrx_err("device not found\n");
 		return;
 	}
-	printk("%s", __func__);
-	bus_if = dev_get_drvdata(dev);
+	sdio_dbg("%s", __func__);
+	bus_if = aicbsp_get_drvdata(dev);
 	aicwf_bus_stop(bus_if);
 
 	sdiodev = bus_if->bus_priv.sdio;
@@ -84,11 +83,10 @@
 	}
 
 	if (bus_if->bustx_thread) {
-		complete(&bus_if->bustx_trgg);
+		complete_all(&bus_if->bustx_trgg);
 		kthread_stop(bus_if->bustx_thread);
 		bus_if->bustx_thread = NULL;
 	}
-	printk("exit %s\n", __func__);
 }
 
 void aicwf_frame_tx(void *dev, struct sk_buff *skb)
@@ -201,25 +199,23 @@
 				else
 					adjust_len = aggr_len;
 
-			   skb_inblock = __dev_alloc_skb(aggr_len+4, GFP_KERNEL);
-			   if (skb_inblock == NULL) {
-				   txrx_err("no more space!\n");
-				   aicwf_dev_skb_free(skb);
-				   return -EBADE;
+				skb_inblock = __dev_alloc_skb(aggr_len+4, GFP_KERNEL);
+				if (skb_inblock == NULL) {
+					txrx_err("no more space!\n");
+					aicwf_dev_skb_free(skb);
+					return -EBADE;
 				}
 
 				skb_put(skb_inblock, aggr_len+4);
 				memcpy(skb_inblock->data, data, aggr_len+4);
 				if ((*(skb_inblock->data + 2) & 0x7f) == SDIO_TYPE_CFG_CMD_RSP)
 					rwnx_rx_handle_msg(rx_priv->sdiodev, (struct ipc_e2a_msg *)(skb_inblock->data + 4));
-				#if 0
-				if ((*(skb_inblock->data + 2) & 0x7f) == SDIO_TYPE_CFG_DATA_CFM)
-					aicwf_sdio_host_tx_cfm_handler(&(rx_priv->sdiodev->rwnx_hw->sdio_env), (u32 *)(skb_inblock->data + 4));
-				#endif
 				skb_pull(skb, adjust_len+4);
 			}
 		}
 
+		/* skb_inblock no used currently, just free it! */
+		dev_kfree_skb(skb_inblock);
 		dev_kfree_skb(skb);
 		atomic_dec(&rx_priv->rx_cnt);
 	}
@@ -288,7 +284,7 @@
 void aicwf_rx_deinit(struct aicwf_rx_priv *rx_priv)
 {
 	if (rx_priv->sdiodev->bus_if->busrx_thread) {
-		complete(&rx_priv->sdiodev->bus_if->busrx_trgg);
+		complete_all(&rx_priv->sdiodev->bus_if->busrx_trgg);
 		kthread_stop(rx_priv->sdiodev->bus_if->busrx_thread);
 		rx_priv->sdiodev->bus_if->busrx_thread = NULL;
 	}

--
Gitblit v1.6.2