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