tzh
2024-08-15 d4a1bd480003f3e1a0590bc46fbcb24f05652ca7
longan/kernel/linux-4.9/drivers/net/wireless/aic8800/aic8800_fdrv/rwnx_cmds.c
old mode 100644new mode 100755
....@@ -16,7 +16,7 @@
1616 #include "rwnx_cmds.h"
1717 #include "rwnx_defs.h"
1818 #include "rwnx_strs.h"
19
-#define CREATE_TRACE_POINTS
19
+//#define CREATE_TRACE_POINTS
2020 #include "rwnx_events.h"
2121 #include "aicwf_txrxif.h"
2222 #ifdef AICWF_SDIO_SUPPORT
....@@ -63,8 +63,9 @@
6363 bool defer_push = false;
6464
6565 RWNX_DBG(RWNX_FN_ENTRY_STR);
66
+#ifdef CREATE_TRACE_POINTS
6667 trace_msg_send(cmd->id);
67
-
68
+#endif
6869 spin_lock_bh(&cmd_mgr->lock);
6970
7071 if (cmd_mgr->state == RWNX_CMD_MGR_STATE_CRASHED) {
....@@ -118,8 +119,9 @@
118119 bool defer_push = false;
119120
120121 //RWNX_DBG(RWNX_FN_ENTRY_STR);
122
+#ifdef CREATE_TRACE_POINTS
121123 trace_msg_send(cmd->id);
122
-
124
+#endif
123125 spin_lock_bh(&cmd_mgr->lock);
124126
125127 if (cmd_mgr->state == RWNX_CMD_MGR_STATE_CRASHED) {
....@@ -208,7 +210,7 @@
208210 }
209211 #else
210212 unsigned long tout = msecs_to_jiffies(RWNX_80211_CMD_TIMEOUT_MS * cmd_mgr->queue_sz);
211
- if (!wait_for_completion_killable_timeout(&cmd->complete, tout)) {
213
+ if (!wait_for_completion_timeout(&cmd->complete, tout)) {
212214 printk(KERN_CRIT"cmd timed-out\n");
213215 #ifdef AICWF_SDIO_SUPPORT
214216 ret = aicwf_sdio_writeb(sdiodev, SDIOWIFI_WAKEUP_REG, 2);
....@@ -308,12 +310,12 @@
308310 break;
309311
310312 if (next) {
311
- #ifdef AICWF_SDIO_SUPPORT
313
+#ifdef AICWF_SDIO_SUPPORT
312314 struct aic_sdio_dev *sdiodev = container_of(cmd_mgr, struct aic_sdio_dev, cmd_mgr);
313
- #endif
314
- #ifdef AICWF_USB_SUPPORT
315
+#endif
316
+#ifdef AICWF_USB_SUPPORT
315317 struct aic_usb_dev *usbdev = container_of(cmd_mgr, struct aic_usb_dev, cmd_mgr);
316
- #endif
318
+#endif
317319 next->flags &= ~RWNX_CMD_FLAG_WAIT_PUSH;
318320
319321 //printk("cmd_process, cmd->id=%d, tkn=%d\r\n",next->reqid, next->tkn);
....@@ -326,8 +328,13 @@
326328 kfree(next->a2e_msg);
327329
328330 tout = msecs_to_jiffies(RWNX_80211_CMD_TIMEOUT_MS * cmd_mgr->queue_sz);
329
- if (!wait_for_completion_killable_timeout(&next->complete, tout)) {
331
+ if (!wait_for_completion_timeout(&next->complete, tout)) {
330332 printk(KERN_CRIT"cmd timed-out\n");
333
+#ifdef AICWF_SDIO_SUPPORT
334
+ if (aicwf_sdio_writeb(sdiodev, SDIOWIFI_WAKEUP_REG, 2) < 0) {
335
+ sdio_err("reg:%d write failed!\n", SDIOWIFI_WAKEUP_REG);
336
+ }
337
+#endif
331338 cmd_dump(next);
332339 spin_lock_bh(&cmd_mgr->lock);
333340 cmd_mgr->state = RWNX_CMD_MGR_STATE_CRASHED;
....@@ -337,7 +344,7 @@
337344 }
338345 spin_unlock_bh(&cmd_mgr->lock);
339346 } else
340
- kfree(next);
347
+ kfree(next);
341348 }
342349 }
343350
....@@ -353,9 +360,9 @@
353360 return 0;
354361 }
355362 //RWNX_DBG(RWNX_FN_ENTRY_STR);
356
- spin_lock_bh(&rwnx_hw->cb_lock);
363
+ //spin_lock_bh(&rwnx_hw->cb_lock);
357364 res = cb(rwnx_hw, cmd, msg);
358
- spin_unlock_bh(&rwnx_hw->cb_lock);
365
+ //spin_unlock_bh(&rwnx_hw->cb_lock);
359366
360367 return res;
361368 }
....@@ -379,8 +386,9 @@
379386 bool found = false;
380387
381388 // RWNX_DBG(RWNX_FN_ENTRY_STR);
389
+#ifdef CREATE_TRACE_POINTS
382390 trace_msg_recv(msg->id);
383
-
391
+#endif
384392 //printk("cmd->id=%x\n", msg->id);
385393 spin_lock_bh(&cmd_mgr->lock);
386394 list_for_each_entry(cmd, &cmd_mgr->cmds, list) {
....@@ -475,6 +483,8 @@
475483 cmd_mgr->print(cmd_mgr);
476484 cmd_mgr->drain(cmd_mgr);
477485 cmd_mgr->print(cmd_mgr);
486
+ flush_workqueue(cmd_mgr->cmd_wq);
487
+ destroy_workqueue(cmd_mgr->cmd_wq);
478488 memset(cmd_mgr, 0, sizeof(*cmd_mgr));
479489 }
480490