diff -rupw tmp-orig/mt_wifi/embedded/common/cmm_info.c tmp/mt_wifi/embedded/common/cmm_info.c
--- tmp-orig/mt_wifi/embedded/common/cmm_info.c	2022-04-25 18:12:15.000000000 +0800
+++ tmp/mt_wifi/embedded/common/cmm_info.c	2022-11-12 18:39:29.117486205 +0800
@@ -6898,6 +6898,35 @@ USHORT RTMPGetLastTxRate(PRTMP_ADAPTER p
 	return lastTxRate.word;
 }
 
+USHORT RTMPGetLastRxRate(PRTMP_ADAPTER pAd, MAC_TABLE_ENTRY *pEntry)
+{
+	HTTRANSMIT_SETTING lastRxRate;
+	UCHAR ucBand = HcGetBandByWdev(pEntry->wdev);
+#ifdef RACTRL_FW_OFFLOAD_SUPPORT
+	EXT_EVENT_PHY_STATE_RX_RATE rRxStatResult = {0, 0, 0, 0, 0, 0, 0, 0};
+#endif
+	os_zero_mem(&lastRxRate, sizeof(HTTRANSMIT_SETTING));
+
+#ifdef RACTRL_FW_OFFLOAD_SUPPORT
+	MtCmdPhyGetRxRate(pAd, CMD_PHY_STATE_CONTENTION_RX_PHYRATE, ucBand, pEntry->wcid, &rRxStatResult);
+	lastRxRate.field.MODE = rRxStatResult.u1RxMode;
+	lastRxRate.field.BW = rRxStatResult.u1BW;
+	lastRxRate.field.ldpc = rRxStatResult.u1Coding;
+	lastRxRate.field.ShortGI = rRxStatResult.u1Gi ? 1 : 0;
+	lastRxRate.field.STBC = rRxStatResult.u1Stbc;
+
+	if (lastRxRate.field.MODE >= MODE_VHT)
+		lastRxRate.field.MCS = ((rRxStatResult.u1RxNsts & 0x3) << 4) + rRxStatResult.u1RxRate;
+	else if (lastRxRate.field.MODE == MODE_OFDM)
+		lastRxRate.field.MCS = getLegacyOFDMMCSIndex(rRxStatResult.u1RxRate & 0xF);
+	else
+		lastRxRate.field.MCS = rRxStatResult.u1RxRate;
+#else
+	lastRxRate.word = pEntry->LastRxRate;
+#endif /* RACTRL_FW_OFFLOAD_SUPPORT */
+	return lastRxRate.word;
+}
+
 VOID RTMPIoctlGetMacTableStaInfo(
 	IN PRTMP_ADAPTER pAd,
 	IN RTMP_IOCTL_INPUT_STRUCT *wrq)
@@ -6909,6 +6938,7 @@ VOID RTMPIoctlGetMacTableStaInfo(
 	MAC_TABLE_ENTRY *pEntry;
 	/* allocate memory */
 	os_alloc_mem(NULL, (UCHAR **)&pMacTab, sizeof(RT_802_11_MAC_TABLE));
+	CHAR rssi[4] = {-127, -127, -127, -127};
 
 	if (pMacTab == NULL) {
 		MTWF_DBG(pAd, DBG_CAT_CFG, DBG_SUBCAT_ALL, DBG_LVL_ERROR, "Allocate memory fail!!!\n");
@@ -6937,13 +6967,14 @@ VOID RTMPIoctlGetMacTableStaInfo(
 			pDst->MimoPs = pEntry->MmpsMode;
 #endif /* DOT11_N_SUPPORT */
 			/* Fill in RSSI per entry*/
-			pDst->AvgRssi0 = pEntry->RssiSample.AvgRssi[0];
-			pDst->AvgRssi1 = pEntry->RssiSample.AvgRssi[1];
-			pDst->AvgRssi2 = pEntry->RssiSample.AvgRssi[2];
+			rtmp_get_rssi(pAd, pEntry->wcid, rssi, 4);
+			pDst->AvgRssi0 = rssi[0];
+			pDst->AvgRssi1 = rssi[1];
+			pDst->AvgRssi2 = rssi[2];
 			/* the connected time per entry*/
 			pDst->ConnectedTime = pEntry->StaConnectTime;
 			pDst->TxRate.word = RTMPGetLastTxRate(pAd, pEntry);
-			pDst->LastRxRate = pEntry->LastRxRate;
+			pDst->LastRxRate = RTMPGetLastRxRate(pAd, pEntry);
 			pMacTab->Num += 1;
 			/* Add to avoid Array cross board */
 			if (pMacTab->Num >= MAX_LEN_OF_MAC_TABLE)
