[WCNCR00166796] sniffer: refine sniffer mode for MT7668

[Description]
Fix urb reuse cause exception, fix incorrect RSSI

Change-Id: Iaf3d25ea346862018b23f95fe9c0376cab722aa6
CR-Id: WCNCR00166796
Feature: sniffer
Signed-off-by: guo-jie.wang <guo-jie.wang@mediatek.com>
diff --git a/nic/nic_rx.c b/nic/nic_rx.c
index ec3b11c..cf4491e 100644
--- a/nic/nic_rx.c
+++ b/nic/nic_rx.c
@@ -1308,7 +1308,7 @@
 	}
 
 	/* Bit Number 5 ANT SIGNAL */
-	rMonitorRadiotap.ucAntennaSignal = (((prRxStatusGroup3)->u4RxVector[3] & RX_VT_IB_RSSI_MASK));
+	rMonitorRadiotap.ucAntennaSignal = RCPI_TO_dBm(HAL_RX_STATUS_GET_RCPI0(prSwRfb->prRxStatusGroup3));
 
 	/* Bit Number 6 ANT NOISE */
 	rMonitorRadiotap.ucAntennaNoise = ((((prRxStatusGroup3)->u4RxVector[5] & RX_VT_NF0_MASK) >> 1) + 128);
@@ -1353,6 +1353,7 @@
 	prRxCtrl->ucNumIndPacket++;
 #endif
 
+	prSwRfb->pvPacket = NULL;
 	/* Return RFB */
 	if (nicRxSetupRFB(prAdapter, prSwRfb)) {
 		DBGLOG(RX, WARN, "Cannot allocate packet buffer for SwRfb!\n");
@@ -2754,10 +2755,14 @@
 				switch (prSwRfb->ucPacketType) {
 				case RX_PKT_TYPE_RX_DATA:
 #if CFG_SUPPORT_SNIFFER
-					if (prAdapter->prGlueInfo->fgIsEnableMon) {
+					if (HAL_IS_RX_DIRECT(prAdapter)) {
+						spin_lock_bh(&prAdapter->prGlueInfo->rSpinLock[SPIN_LOCK_RX_DIRECT]);
 						nicRxProcessMonitorPacket(prAdapter, prSwRfb);
-						break;
+						spin_unlock_bh(&prAdapter->prGlueInfo->rSpinLock[SPIN_LOCK_RX_DIRECT]);
+					} else {
+						nicRxProcessMonitorPacket(prAdapter, prSwRfb);
 					}
+					break;
 #endif
 					if (HAL_IS_RX_DIRECT(prAdapter)) {
 						spin_lock_bh(&prAdapter->prGlueInfo->rSpinLock[SPIN_LOCK_RX_DIRECT]);