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_fdrv/rwnx_cmds.c |   36 +++++++++++++++++++++++-------------
 1 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/longan/kernel/linux-4.9/drivers/net/wireless/aic8800/aic8800_fdrv/rwnx_cmds.c b/longan/kernel/linux-4.9/drivers/net/wireless/aic8800/aic8800_fdrv/rwnx_cmds.c
old mode 100644
new mode 100755
index 940d6fb..ff1e849
--- a/longan/kernel/linux-4.9/drivers/net/wireless/aic8800/aic8800_fdrv/rwnx_cmds.c
+++ b/longan/kernel/linux-4.9/drivers/net/wireless/aic8800/aic8800_fdrv/rwnx_cmds.c
@@ -16,7 +16,7 @@
 #include "rwnx_cmds.h"
 #include "rwnx_defs.h"
 #include "rwnx_strs.h"
-#define CREATE_TRACE_POINTS
+//#define CREATE_TRACE_POINTS
 #include "rwnx_events.h"
 #include "aicwf_txrxif.h"
 #ifdef AICWF_SDIO_SUPPORT
@@ -63,8 +63,9 @@
 	bool defer_push = false;
 
 	RWNX_DBG(RWNX_FN_ENTRY_STR);
+#ifdef CREATE_TRACE_POINTS
 	trace_msg_send(cmd->id);
-
+#endif
 	spin_lock_bh(&cmd_mgr->lock);
 
 	if (cmd_mgr->state == RWNX_CMD_MGR_STATE_CRASHED) {
@@ -118,8 +119,9 @@
 	bool defer_push = false;
 
 	//RWNX_DBG(RWNX_FN_ENTRY_STR);
+#ifdef CREATE_TRACE_POINTS
 	trace_msg_send(cmd->id);
-
+#endif
 	spin_lock_bh(&cmd_mgr->lock);
 
 	if (cmd_mgr->state == RWNX_CMD_MGR_STATE_CRASHED) {
@@ -208,7 +210,7 @@
 		}
 		#else
 		unsigned long tout = msecs_to_jiffies(RWNX_80211_CMD_TIMEOUT_MS * cmd_mgr->queue_sz);
-		if (!wait_for_completion_killable_timeout(&cmd->complete, tout)) {
+		if (!wait_for_completion_timeout(&cmd->complete, tout)) {
 			printk(KERN_CRIT"cmd timed-out\n");
 			#ifdef AICWF_SDIO_SUPPORT
 			ret = aicwf_sdio_writeb(sdiodev, SDIOWIFI_WAKEUP_REG, 2);
@@ -308,12 +310,12 @@
 			break;
 
 		if (next) {
-		#ifdef AICWF_SDIO_SUPPORT
+#ifdef AICWF_SDIO_SUPPORT
 			struct aic_sdio_dev *sdiodev = container_of(cmd_mgr, struct aic_sdio_dev, cmd_mgr);
-		#endif
-		#ifdef AICWF_USB_SUPPORT
+#endif
+#ifdef AICWF_USB_SUPPORT
 			struct aic_usb_dev *usbdev = container_of(cmd_mgr, struct aic_usb_dev, cmd_mgr);
-		#endif
+#endif
 			next->flags &= ~RWNX_CMD_FLAG_WAIT_PUSH;
 
 			//printk("cmd_process, cmd->id=%d, tkn=%d\r\n",next->reqid, next->tkn);
@@ -326,8 +328,13 @@
 			kfree(next->a2e_msg);
 
 			tout = msecs_to_jiffies(RWNX_80211_CMD_TIMEOUT_MS * cmd_mgr->queue_sz);
-			if (!wait_for_completion_killable_timeout(&next->complete, tout)) {
+			if (!wait_for_completion_timeout(&next->complete, tout)) {
 				printk(KERN_CRIT"cmd timed-out\n");
+#ifdef AICWF_SDIO_SUPPORT
+				if (aicwf_sdio_writeb(sdiodev, SDIOWIFI_WAKEUP_REG, 2) < 0) {
+					sdio_err("reg:%d write failed!\n", SDIOWIFI_WAKEUP_REG);
+				}
+#endif
 				cmd_dump(next);
 				spin_lock_bh(&cmd_mgr->lock);
 				cmd_mgr->state = RWNX_CMD_MGR_STATE_CRASHED;
@@ -337,7 +344,7 @@
 				}
 				spin_unlock_bh(&cmd_mgr->lock);
 			} else
-		kfree(next);
+				kfree(next);
 		}
 	}
 
@@ -353,9 +360,9 @@
 		return 0;
 	}
 	//RWNX_DBG(RWNX_FN_ENTRY_STR);
-	spin_lock_bh(&rwnx_hw->cb_lock);
+	//spin_lock_bh(&rwnx_hw->cb_lock);
 	res = cb(rwnx_hw, cmd, msg);
-	spin_unlock_bh(&rwnx_hw->cb_lock);
+	//spin_unlock_bh(&rwnx_hw->cb_lock);
 
 	return res;
 }
@@ -379,8 +386,9 @@
 	bool found = false;
 
 	// RWNX_DBG(RWNX_FN_ENTRY_STR);
+#ifdef CREATE_TRACE_POINTS
 	trace_msg_recv(msg->id);
-
+#endif
 	//printk("cmd->id=%x\n", msg->id);
 	spin_lock_bh(&cmd_mgr->lock);
 	list_for_each_entry(cmd, &cmd_mgr->cmds, list) {
@@ -475,6 +483,8 @@
 	cmd_mgr->print(cmd_mgr);
 	cmd_mgr->drain(cmd_mgr);
 	cmd_mgr->print(cmd_mgr);
+	flush_workqueue(cmd_mgr->cmd_wq);
+	destroy_workqueue(cmd_mgr->cmd_wq);
 	memset(cmd_mgr, 0, sizeof(*cmd_mgr));
 }
 

--
Gitblit v1.6.2