| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- #include "precomp.h"
- #include "gl_kal.h"
- struct COMMAND {
- UINT_8 ucCID;
- BOOLEAN fgSetQuery;
- BOOLEAN fgNeedResp;
- UINT_8 ucCmdSeqNum;
- };
- struct SECURITY_FRAME {
- UINT_16 u2EthType;
- UINT_16 u2Reserved;
- };
- struct MGMT_FRAME {
- UINT_16 u2FrameCtl;
- UINT_16 u2DurationID;
- };
- struct TC_RES_RELEASE_ENTRY {
- UINT_64 u8RelaseTime;
- UINT_32 u4RelCID;
- UINT_8 ucTc4RelCnt;
- UINT_8 ucAvailableTc4;
- };
- struct CMD_TRACE_ENTRY {
- UINT_64 u8TxTime;
- COMMAND_TYPE eCmdType;
- union {
- struct COMMAND rCmd;
- struct SECURITY_FRAME rSecFrame;
- struct MGMT_FRAME rMgmtFrame;
- } u;
- };
- typedef struct _COMMAND_ENTRY {
- UINT_64 u8TxTime;
- UINT_64 u8ReadFwTime;
- UINT_32 u4ReadFwValue;
- UINT_32 u4RelCID;
- UINT_16 u2Counter;
- struct COMMAND rCmd;
- } COMMAND_ENTRY, *P_COMMAND_ENTRY;
- #define TC_RELEASE_TRACE_BUF_MAX_NUM 100
- #define TXED_CMD_TRACE_BUF_MAX_NUM 100
- #define TXED_COMMAND_BUF_MAX_NUM 10
- static struct TC_RES_RELEASE_ENTRY *gprTcReleaseTraceBuffer;
- static struct CMD_TRACE_ENTRY *gprCmdTraceEntry;
- static P_COMMAND_ENTRY gprCommandEntry;
- VOID wlanDebugInit(VOID)
- {
- /* debug for command/tc4 resource begin */
- gprTcReleaseTraceBuffer =
- kalMemAlloc(TC_RELEASE_TRACE_BUF_MAX_NUM * sizeof(struct TC_RES_RELEASE_ENTRY), PHY_MEM_TYPE);
- kalMemZero(gprTcReleaseTraceBuffer, TC_RELEASE_TRACE_BUF_MAX_NUM * sizeof(struct TC_RES_RELEASE_ENTRY));
- gprCmdTraceEntry = kalMemAlloc(TXED_CMD_TRACE_BUF_MAX_NUM * sizeof(struct CMD_TRACE_ENTRY), PHY_MEM_TYPE);
- kalMemZero(gprCmdTraceEntry, TXED_CMD_TRACE_BUF_MAX_NUM * sizeof(struct CMD_TRACE_ENTRY));
- gprCommandEntry = kalMemAlloc(TXED_COMMAND_BUF_MAX_NUM * sizeof(COMMAND_ENTRY), PHY_MEM_TYPE);
- kalMemZero(gprCommandEntry, TXED_COMMAND_BUF_MAX_NUM * sizeof(COMMAND_ENTRY));
- /* debug for command/tc4 resource end */
- }
- VOID wlanDebugUninit(VOID)
- {
- /* debug for command/tc4 resource begin */
- kalMemFree(gprTcReleaseTraceBuffer, PHY_MEM_TYPE,
- TC_RELEASE_TRACE_BUF_MAX_NUM * sizeof(struct TC_RES_RELEASE_ENTRY));
- kalMemFree(gprCmdTraceEntry, PHY_MEM_TYPE, TXED_CMD_TRACE_BUF_MAX_NUM * sizeof(struct CMD_TRACE_ENTRY));
- kalMemFree(gprCommandEntry, PHY_MEM_TYPE, TXED_COMMAND_BUF_MAX_NUM * sizeof(COMMAND_ENTRY));
- /* debug for command/tc4 resource end */
- }
- VOID wlanReadFwStatus(P_ADAPTER_T prAdapter)
- {
- static UINT_16 u2CurEntryCmd;
- P_COMMAND_ENTRY prCurCommand = &gprCommandEntry[u2CurEntryCmd];
- prCurCommand->u8ReadFwTime = sched_clock();
- HAL_MCR_RD(prAdapter, MCR_D2HRM2R, &prCurCommand->u4ReadFwValue);
- u2CurEntryCmd++;
- if (u2CurEntryCmd == TXED_COMMAND_BUF_MAX_NUM)
- u2CurEntryCmd = 0;
- }
- VOID wlanTraceTxCmd(P_ADAPTER_T prAdapter, P_CMD_INFO_T prCmd)
- {
- static UINT_16 u2CurEntry;
- static UINT_16 u2CurEntryCmd;
- struct CMD_TRACE_ENTRY *prCurCmd = &gprCmdTraceEntry[u2CurEntry];
- P_COMMAND_ENTRY prCurCommand = &gprCommandEntry[u2CurEntryCmd];
- prCurCmd->u8TxTime = sched_clock();
- prCurCommand->u8TxTime = prCurCmd->u8TxTime;
- prCurCmd->eCmdType = prCmd->eCmdType;
- if (prCmd->eCmdType == COMMAND_TYPE_MANAGEMENT_FRAME) {
- P_WLAN_MAC_MGMT_HEADER_T prMgmt = (P_WLAN_MAC_MGMT_HEADER_T)((P_MSDU_INFO_T)prCmd->prPacket)->prPacket;
- prCurCmd->u.rMgmtFrame.u2FrameCtl = prMgmt->u2FrameCtrl;
- prCurCmd->u.rMgmtFrame.u2DurationID = prMgmt->u2Duration;
- } else if (prCmd->eCmdType == COMMAND_TYPE_SECURITY_FRAME) {
- PUINT_8 pucPkt = (PUINT_8)((struct sk_buff *)prCmd->prPacket)->data;
- prCurCmd->u.rSecFrame.u2EthType =
- (pucPkt[ETH_TYPE_LEN_OFFSET] << 8) | (pucPkt[ETH_TYPE_LEN_OFFSET + 1]);
- } else {
- prCurCmd->u.rCmd.ucCID = prCmd->ucCID;
- prCurCmd->u.rCmd.ucCmdSeqNum = prCmd->ucCmdSeqNum;
- prCurCmd->u.rCmd.fgNeedResp = prCmd->fgNeedResp;
- prCurCmd->u.rCmd.fgSetQuery = prCmd->fgSetQuery;
- prCurCommand->rCmd.ucCID = prCmd->ucCID;
- prCurCommand->rCmd.ucCmdSeqNum = prCmd->ucCmdSeqNum;
- prCurCommand->rCmd.fgNeedResp = prCmd->fgNeedResp;
- prCurCommand->rCmd.fgSetQuery = prCmd->fgSetQuery;
- prCurCommand->u2Counter = u2CurEntryCmd;
- u2CurEntryCmd++;
- if (u2CurEntryCmd == TXED_COMMAND_BUF_MAX_NUM)
- u2CurEntryCmd = 0;
- HAL_MCR_RD(prAdapter, MCR_D2HRM2R, &prCurCommand->u4RelCID);
- }
- u2CurEntry++;
- if (u2CurEntry == TC_RELEASE_TRACE_BUF_MAX_NUM)
- u2CurEntry = 0;
- }
- VOID wlanTraceReleaseTcRes(P_ADAPTER_T prAdapter, PUINT_8 aucTxRlsCnt, UINT_8 ucAvailable)
- {
- static UINT_16 u2CurEntry;
- struct TC_RES_RELEASE_ENTRY *prCurBuf = &gprTcReleaseTraceBuffer[u2CurEntry];
- HAL_MCR_RD(prAdapter, MCR_D2HRM2R, &prCurBuf->u4RelCID);
- prCurBuf->u8RelaseTime = sched_clock();
- prCurBuf->ucTc4RelCnt = aucTxRlsCnt[TC4_INDEX];
- prCurBuf->ucAvailableTc4 = ucAvailable;
- u2CurEntry++;
- if (u2CurEntry == TXED_CMD_TRACE_BUF_MAX_NUM)
- u2CurEntry = 0;
- }
- VOID wlanDumpTcResAndTxedCmd(PUINT_8 pucBuf, UINT_32 maxLen)
- {
- UINT_16 i = 0;
- struct CMD_TRACE_ENTRY *prCmd = gprCmdTraceEntry;
- struct TC_RES_RELEASE_ENTRY *prTcRel = gprTcReleaseTraceBuffer;
- if (pucBuf) {
- int bufLen = 0;
- for (; i < TXED_CMD_TRACE_BUF_MAX_NUM/2; i++) {
- bufLen = snprintf(pucBuf, maxLen,
- "%d: Time %llu, Type %d, Content %08x; %d: Time %llu, Type %d, Content %08x\n",
- i*2, prCmd[i*2].u8TxTime, prCmd[i*2].eCmdType, *(PUINT_32)(&prCmd[i*2].u.rCmd.ucCID),
- i*2+1, prCmd[i*2+1].u8TxTime, prCmd[i*2+1].eCmdType,
- *(PUINT_32)(&prCmd[i*2+1].u.rCmd.ucCID));
- if (bufLen <= 0)
- break;
- pucBuf += bufLen;
- maxLen -= bufLen;
- }
- for (i = 0; i < TC_RELEASE_TRACE_BUF_MAX_NUM/2; i++) {
- bufLen = snprintf(pucBuf, maxLen,
- "%d: Time %llu, Tc4Cnt %d, Free %d, CID %08x; %d: Time %llu, Tc4Cnt %d, Free %d CID %08x\n",
- i*2, prTcRel[i*2].u8RelaseTime, prTcRel[i*2].ucTc4RelCnt, prTcRel[i*2].ucAvailableTc4,
- prTcRel[i*2].u4RelCID,
- i*2+1, prTcRel[i*2+1].u8RelaseTime, prTcRel[i*2+1].ucTc4RelCnt,
- prTcRel[i*2+1].ucAvailableTc4, prTcRel[i*2+1].u4RelCID);
- if (bufLen <= 0)
- break;
- pucBuf += bufLen;
- maxLen -= bufLen;
- }
- return;
- }
- for (; i < TXED_CMD_TRACE_BUF_MAX_NUM/4; i++) {
- LOG_FUNC("%d: Time %llu, Type %d, Content %08x; %d: Time %llu, Type %d, Content %08x; ",
- i*4, prCmd[i*4].u8TxTime, prCmd[i*4].eCmdType,
- *(PUINT_32)(&prCmd[i*4].u.rCmd.ucCID),
- i*4+1, prCmd[i*4+1].u8TxTime, prCmd[i*4+1].eCmdType,
- *(PUINT_32)(&prCmd[i*4+1].u.rCmd.ucCID));
- LOG_FUNC("%d: Time %llu, Type %d, Content %08x; %d: Time %llu, Type %d, Content %08x\n",
- i*4+2, prCmd[i*4+2].u8TxTime, prCmd[i*4+2].eCmdType,
- *(PUINT_32)(&prCmd[i*4+2].u.rCmd.ucCID),
- i*4+3, prCmd[i*4+3].u8TxTime, prCmd[i*4+3].eCmdType,
- *(PUINT_32)(&prCmd[i*4+3].u.rCmd.ucCID));
- }
- for (i = 0; i < TC_RELEASE_TRACE_BUF_MAX_NUM/4; i++) {
- LOG_FUNC(
- "%d: Time %llu, Tc4Cnt %d, Free %d, CID %08x; %d: Time %llu, Tc4Cnt %d, Free %d, CID %08x;",
- i*4, prTcRel[i*4].u8RelaseTime, prTcRel[i*4].ucTc4RelCnt,
- prTcRel[i*4].ucAvailableTc4, prTcRel[i*4].u4RelCID,
- i*4+1, prTcRel[i*4+1].u8RelaseTime, prTcRel[i*4+1].ucTc4RelCnt,
- prTcRel[i*4+1].ucAvailableTc4, prTcRel[i*4+1].u4RelCID);
- LOG_FUNC(
- " %d: Time %llu, Tc4Cnt %d, Free %d, CID %08x; %d: Time %llu, Tc4Cnt %d, Free %d, CID %08x\n",
- i*4+2, prTcRel[i*4+2].u8RelaseTime, prTcRel[i*4+2].ucTc4RelCnt,
- prTcRel[i*4+2].ucAvailableTc4, prTcRel[i*4+2].u4RelCID,
- i*4+3, prTcRel[i*4+3].u8RelaseTime, prTcRel[i*4+3].ucTc4RelCnt,
- prTcRel[i*4+3].ucAvailableTc4, prTcRel[i*4+3].u4RelCID);
- }
- }
- VOID wlanDumpCommandFwStatus(VOID)
- {
- UINT_16 i = 0;
- P_COMMAND_ENTRY prCmd = gprCommandEntry;
- LOG_FUNC("Start\n");
- for (; i < TXED_COMMAND_BUF_MAX_NUM; i++) {
- LOG_FUNC("%d: Time %llu, Content %08x, Count %x, RelCID %08x, ReadFwValue %08x, ReadFwTime %llu\n",
- i, prCmd[i].u8TxTime, *(PUINT_32)(&prCmd[i].rCmd.ucCID),
- prCmd[i].u2Counter, prCmd[i].u4RelCID,
- prCmd[i].u4ReadFwValue, prCmd[i].u8ReadFwTime);
- }
- }
|