/* * \brief Called when a command timeout occur * * \param hCmdQueue - Handle to CmdQueue * \return TI_OK * * \par Description * * \sa cmdQueue_Init, cmdMbox_TimeOut */ TI_STATUS cmdQueue_Error (TI_HANDLE hCmdQueue, TI_UINT32 command, TI_UINT32 status, void *param) { TCmdQueue* pCmdQueue = (TCmdQueue*)hCmdQueue; if (status == CMD_STATUS_UNKNOWN_CMD) { TRACE1(pCmdQueue->hReport, REPORT_SEVERITY_ERROR , "cmdQueue_Error: Unknown Cmd (%d)\n", command); } else if (status == CMD_STATUS_UNKNOWN_IE) { TRACE4( pCmdQueue->hReport, REPORT_SEVERITY_CONSOLE, "cmdQueue_Error: Unknown IE, cmdType : %d (%d) IE: %d (%d)\n", command, command, (param) ? *((TI_UINT16 *) param) : 0, (param) ? *((TI_UINT16 *) param) : 0 ); WLAN_OS_REPORT(("cmdQueue_Error: Unknown IE, cmdType : %s (%d) IE: %s (%d)\n", cmdQueue_GetCmdString (command), command, (param) ? cmdQueue_GetIEString (command, *((TI_UINT16 *) param)) : "", *((TI_UINT16 *) param))); } else { TRACE1(pCmdQueue->hReport, REPORT_SEVERITY_ERROR , "cmdQueue_Error: CmdMbox status is %d\n", status); } if (status != CMD_STATUS_UNKNOWN_CMD && status != CMD_STATUS_UNKNOWN_IE) { #ifdef TI_DBG TCmdQueueNode* pHead = &pCmdQueue->aCmdQueue[pCmdQueue->head]; TI_UINT32 TimeStamp = os_timeStampMs(pCmdQueue->hOs); WLAN_OS_REPORT(("cmdQueue_Error: **ERROR** Command Occured \n" " Cmd = %s %s, Len = %d \n" " NumOfCmd = %d\n" " MAC TimeStamp on timeout = %d\n", cmdQueue_GetCmdString(pHead->cmdType), (pHead->aParamsBuf) ? cmdQueue_GetIEString(pHead->cmdType, *(TI_UINT16 *)pHead->aParamsBuf) : "", pHead->uParamsLen, pCmdQueue->uNumberOfCommandInQueue, TimeStamp)); /* Print The command that was sent before the timeout occur */ cmdQueue_PrintHistory(pCmdQueue, CMDQUEUE_HISTORY_DEPTH); #endif /* TI_DBG */ /* preform Recovery */ if (pCmdQueue->fFailureCb) { pCmdQueue->fFailureCb (pCmdQueue->hFailureCb, TI_NOK); } } return TI_OK; }
TI_STATUS TWD_Debug (TI_HANDLE hTWD, TI_UINT32 funcType, void *pParam) { TTwd *pTWD = (TTwd *)hTWD; TI_UINT32 GenericVal; TFwDebugParams* pMemDebug = (TFwDebugParams*)pParam; static TI_UINT32 GenericAddr; #ifdef REPORT_LOG static int iStart[100]; /* Note: it is not used properly anyway */ #endif /* check paramemters validity */ if (pMemDebug == NULL) { WLAN_OS_REPORT(("TWD_Debug: Error - pParam is NULL\n")); return TI_NOK; } switch (funcType) { case TWD_PRINT_SYS_INFO: WLAN_OS_REPORT(("PLATFORM = TNETW125x\n")); WLAN_OS_REPORT(("ACCESS MODE = SLAVE\n")); break; case TWD_SET_GENERIC_ADDR: /* check paramemters validity */ if (pParam == NULL) { WLAN_OS_REPORT(("TWD_Debug, TWD_SET_GENERIC_ADDR Error: No Perameter received\n")); return TI_NOK; } GenericAddr = *(TI_UINT32 *)pParam; break; case TWD_READ_MEM: WLAN_OS_REPORT(("TWD_Debug, TWD_READ_MEM, Addr: 0x%X\n", pMemDebug->addr)); /* check paramemters validity */ if (pMemDebug == NULL) { WLAN_OS_REPORT(("TWD_Debug, TWD_READ_MEM Error: No Perameters received\n")); return TI_NOK; } /* validate length */ *(TI_UINT32*)&pMemDebug->length = 4; /* If Address in valid Memory area and there is enough space for Length to R/W */ if (TWD_isValidMemoryAddr(hTWD, pMemDebug) == TI_TRUE) { WLAN_OS_REPORT(("TWD_Debug, TWD_READ_MEM: Reading Valid memory Address\n")); /* Init buf before reading */ os_memorySet(pTWD->hOs, (void*)pMemDebug->UBuf.buf8, 0, 4); if ( TWD_readMem (hTWD, pMemDebug, NULL, NULL) != TI_OK ) { WLAN_OS_REPORT(("TWD_Debug, read memory failed\n")); return TI_NOK; } } else if (TWD_isValidRegAddr(hTWD, pMemDebug) == TI_TRUE) { WLAN_OS_REPORT(("TWD_Debug, TWD_READ_MEM: Reading Valid register Address\n")); /* Init buf before reading */ *(TI_UINT32*)&pMemDebug->UBuf.buf32 = 0; if ( TWD_readMem (hTWD, pMemDebug, NULL, NULL) != TI_OK ) { WLAN_OS_REPORT(("TWD_Debug, read register failed\n")); return TI_NOK; } } /* address Not in valid Area */ else { WLAN_OS_REPORT(("TWD_Debug, TWD_READ_MEM Address is not Valid\n")); return TI_NOK; } /* print read memory */ { WLAN_OS_REPORT(("Read from MEM Addr 0x%x the following values:\n", ((TFwDebugParams*)pMemDebug)->addr)); WLAN_OS_REPORT(("0x%X ",((TFwDebugParams*)pMemDebug)->UBuf.buf32[0])); WLAN_OS_REPORT(("\n")); } break; case TWD_WRITE_MEM: WLAN_OS_REPORT(("TWD_Debug, TWD_WRITE_MEM, Addr: 0x%X\n", pMemDebug->addr)); /* check paramemters validity */ if (pMemDebug == NULL) { WLAN_OS_REPORT(("TWD_Debug, TWD_WRITE_MEM Error: No Perameters received\n")); return TI_NOK; } /* validate length */ *(TI_UINT32*)&pMemDebug->length = 4; /* If Address in valid Memory area and there is enough space for Length to R/W */ if (TWD_isValidMemoryAddr(hTWD, pMemDebug) == TI_TRUE) { WLAN_OS_REPORT(("TWD_Debug, TWD_WRITE_MEM: Writing Valid memory Address\n")); return ( TWD_writeMem (hTWD, pMemDebug, NULL, NULL) ); } else if (TWD_isValidRegAddr(hTWD, pMemDebug) == TI_TRUE) { WLAN_OS_REPORT(("TWD_Debug, TWD_WRITE_MEM: Writing Valid register Address\n")); return ( TWD_writeMem (hTWD, pMemDebug, NULL, NULL) ); } /* address Not in valid Area */ else { WLAN_OS_REPORT(("TWD_Debug, TWD_WRITE_MEM Address is not Valid\n")); return TI_NOK; } break; /* HAL Control functions */ case TWD_PRINT_MBOX_QUEUE_INFO: cmdQueue_Print (pTWD->hCmdQueue); break; case TWD_PRINT_MBOX_PRINT_CMD: /* check paramemters validity */ if (pParam == NULL) { WLAN_OS_REPORT(("TWD_Debug, TWD_PRINT_MBOX_PRINT_CMD Error: No Perameter received\n")); return TI_NOK; } cmdQueue_PrintHistory (pTWD->hCmdQueue, *(int *)pParam); break; case TWD_PRINT_EVENT_MBOX_INFO: eventMbox_Print (pTWD->hEventMbox); break; case TWD_PRINT_EVENT_MBOX_MASK: /* check paramemters validity */ if (pParam == NULL) { WLAN_OS_REPORT(("TWD_Debug, TWD_PRINT_EVENT_MBOX_MASK Error: No Perameter received\n")); return TI_NOK; } if ( eventMbox_MaskEvent (pTWD->hEventMbox, *(int *)pParam, NULL, NULL) == TI_NOK ) { WLAN_OS_REPORT(("TWD_Debug, TWD_PRINT_EVENT_MBOX_MASK Error: eventMbox_EvMask failed\n")); return(TI_NOK); } break; case TWD_PRINT_EVENT_MBOX_UNMASK: /* check paramemters validity */ if (pParam == NULL) { WLAN_OS_REPORT(("TWD_Debug, TWD_PRINT_EVENT_MBOX_UNMASK Error: No Perameter received\n")); return TI_NOK; } if ( eventMbox_UnMaskEvent (pTWD->hEventMbox, *(int *)pParam, NULL, NULL) == TI_NOK ) { WLAN_OS_REPORT(("TWD_Debug, TWD_PRINT_EVENT_MBOX_UNMASK Error: eventMbox_EvUnMask failed\n")); return(TI_NOK); } break; case TWD_PRINT_ISTART: { int i; for (i=0; i<20; i+=4) { WLAN_OS_REPORT(("%4d: %08d %08d %08d %08d\n", i, iStart[i+0], iStart[i+1], iStart[i+2], iStart[i+3])); } } break; case TWD_PRINT_LIST_REGS_THROG_MBOX: { int i; TI_UINT32 RegAddr; RegAddr = *(TI_UINT32 *)pParam; WLAN_OS_REPORT (("PrintListRegsThroughMbox ---------------------\n")); for (i = 0; i < 8; i++, RegAddr += 16) { TWD_PrintMemRegs (hTWD, RegAddr + 0, 4, TNETW_MAC_REGISTERS); TWD_PrintMemRegs (hTWD, RegAddr + 4, 4, TNETW_MAC_REGISTERS); TWD_PrintMemRegs (hTWD, RegAddr + 8, 4, TNETW_MAC_REGISTERS); TWD_PrintMemRegs (hTWD, RegAddr + 12, 4, TNETW_MAC_REGISTERS); } } break; case TWD_PRINT_LIST_MEM_THROG_MBOX: /* check paramemters validity */ if (pParam == NULL) { WLAN_OS_REPORT(("TWD_Debug, TWD_PRINT_LIST_MEM_THROG_MBOX Error: No Perameter received\n")); return TI_NOK; } TWD_PrintMemRegs (hTWD, *(TI_UINT32*)pParam, 256, TNETW_INTERNAL_RAM); break; case TWD_SET_MAC_CLOCK: /* check paramemters validity */ if (pParam == NULL) { WLAN_OS_REPORT(("TWD_Debug, TWD_SET_MAC_CLOCK Error: No Perameter received\n")); return TI_NOK; } GenericVal = *(TI_UINT32*)pParam; TWD_CfgMacClock (hTWD, GenericVal); break; #if defined(TNETW1150) case TWD_SET_ARM_CLOCK: /* check paramemters validity */ if (pParam == NULL) { WLAN_OS_REPORT(("TWD_Debug, TWD_SET_ARM_CLOCK Error: No Perameter received\n")); return TI_NOK; } GenericVal = *(TI_UINT32*)pParam; TWD_ArmClockSet (hTWD, GenericVal); break; #endif /* * Rx functions */ #ifdef TI_DBG case TWD_PRINT_RX_INFO: rxXfer_PrintStats (pTWD->hRxXfer); break; case TWD_CLEAR_RX_INFO: rxXfer_ClearStats (pTWD->hRxXfer); break; #endif /* TI_DBG */ /* * Acx functions */ case TWD_PRINT_ACX_MAP: TWD_PrintMemoryMap (hTWD); break; case TWD_PRINT_ACX_STAT: TWD_ItrStatistics (hTWD, (void*)TWD_StatisticsReadCB, hTWD, (void *)&pTWD->acxStatistic); break; /* * General functions */ case TWD_PRINT_HELP: WLAN_OS_REPORT(("Registers: \n")); WLAN_OS_REPORT((" %02d - TWD_PRINT_SYS_INFO \n\n", TWD_PRINT_SYS_INFO)); WLAN_OS_REPORT((" %02d - TWD_SET_GENERIC_ADDR \n", TWD_SET_GENERIC_ADDR)); WLAN_OS_REPORT((" %02d - TWD_READ_REG_OR_4_BYTES_MEM <addr (reg base=0x300000, mem base=0x40000)>\n", TWD_READ_MEM)); WLAN_OS_REPORT((" %02d - TWD_WRITE_REG_OR_4_BYTES_MEM <addr (reg base=0x300000, mem base=0x40000)> <val (chars<=4)>\n", TWD_WRITE_MEM)); WLAN_OS_REPORT(("Control: \n")); WLAN_OS_REPORT((" %02d - TWD_PRINT_MBOX_QUEUE_INFO \n",TWD_PRINT_MBOX_QUEUE_INFO)); WLAN_OS_REPORT((" %02d - TWD_PRINT_MBOX_QUEUE_PRINT_CMD \n",TWD_PRINT_MBOX_PRINT_CMD)); WLAN_OS_REPORT((" %02d - TWD_MAILBOX_HISTORY_PRINT \n", TWD_MAILBOX_HISTORY_PRINT)); WLAN_OS_REPORT((" %02d - TWD_MAC_REG \n", TWD_MAC_REG)); WLAN_OS_REPORT((" %02d - TWD_SET_ARM_CLOCK \n", TWD_SET_ARM_CLOCK)); WLAN_OS_REPORT((" %02d - TWD_SET_MAC_CLOCK \n", TWD_SET_MAC_CLOCK)); WLAN_OS_REPORT(("Rx: \n")); WLAN_OS_REPORT((" %02d - TWD_PRINT_RX_INFO \n", TWD_PRINT_RX_INFO)); WLAN_OS_REPORT((" %02d - TWD_CLEAR_RX_INFO \n", TWD_CLEAR_RX_INFO)); WLAN_OS_REPORT(("ACX: \n")); WLAN_OS_REPORT((" %02d - TWD_PRINT_ACX_MAP \n", TWD_PRINT_ACX_MAP)); WLAN_OS_REPORT((" %02d - TWD_PRINT_ACX_STAT \n", TWD_PRINT_ACX_STAT)); WLAN_OS_REPORT(("General: \n")); WLAN_OS_REPORT((" %02d - TWD_PRINT_LIST_REGS_THROG_MBOX \n", TWD_PRINT_LIST_REGS_THROG_MBOX)); WLAN_OS_REPORT((" %02d - TWD_PRINT_LIST_MEM_THROG_MBOX \n", TWD_PRINT_LIST_MEM_THROG_MBOX)); WLAN_OS_REPORT(("Recovery: \n")); WLAN_OS_REPORT((" %02d - TWD_CHECK_HW \n", TWD_CHECK_HW)); WLAN_OS_REPORT((" %02d - TWD_PRINT_HW_STATUS \n", TWD_PRINT_HW_STATUS)); WLAN_OS_REPORT(("Event Mail Box: \n")); WLAN_OS_REPORT((" %02d - PRINT EVENT MBOX INFO \n", TWD_PRINT_EVENT_MBOX_INFO)); WLAN_OS_REPORT((" %02d - PRINT EVENT MBOX MASK \n", TWD_PRINT_EVENT_MBOX_MASK)); WLAN_OS_REPORT((" %02d - PRINT EVENT MBOX UNMASK \n",TWD_PRINT_EVENT_MBOX_UNMASK)); WLAN_OS_REPORT(("Other: \n")); WLAN_OS_REPORT((" %02d - TWD_PRINT_FW_EVENT_INFO \n", TWD_PRINT_FW_EVENT_INFO)); WLAN_OS_REPORT((" %02d - TWD_PRINT_TW_IF_INFO \n", TWD_PRINT_TW_IF_INFO)); WLAN_OS_REPORT((" %02d - TWD_PRINT_MBOX_INFO \n", TWD_PRINT_MBOX_INFO)); WLAN_OS_REPORT((" %02d - TWD_FORCE_TEMPLATES_RATES \n", TWD_FORCE_TEMPLATES_RATES)); break; case TWD_PRINT_FW_EVENT_INFO: fwEvent_PrintStat(pTWD->hFwEvent); break; case TWD_PRINT_TW_IF_INFO: twIf_PrintQueues(pTWD->hTwIf); break; case TWD_PRINT_MBOX_INFO: cmdMbox_PrintInfo(pTWD->hCmdMbox); break; /* * Recovery functions */ case TWD_CHECK_HW: { int Stt; Stt = TWD_CmdHealthCheck (hTWD); WLAN_OS_REPORT(("CheckHwStatus=%d \n", Stt)); } break; case TWD_MAILBOX_HISTORY_PRINT: WLAN_OS_REPORT (("PrintMailBoxHistory called \n")); #ifdef TI_DBG /* check paramemters validity */ if (pParam == NULL) { WLAN_OS_REPORT(("TWD_Debug, TWD_MAILBOX_HISTORY_PRINT Error: No Perameter received\n")); return TI_NOK; } cmdQueue_PrintHistory (pTWD->hCmdQueue, *(int *)pParam); #endif break; case TWD_FORCE_TEMPLATES_RATES: if (pParam == NULL) { WLAN_OS_REPORT(("TWD_Debug, TWD_FORCE_TEMPLATES_RATES Error: No Perameter received\n")); return TI_NOK; } cmdBld_DbgForceTemplatesRates (pTWD->hCmdBld, *(TI_UINT32 *)pParam); break; default: WLAN_OS_REPORT (("Invalid function type=%d\n\n", funcType)); break; } /* switch (funcType) */ return TI_OK; }
TI_STATUS TWD_Debug (TI_HANDLE hTWD, TI_UINT32 funcType, void *pParam) { TTwd *pTWD = (TTwd *)hTWD; TI_UINT32 GenericVal; TFwDebugParams* pMemDebug = (TFwDebugParams*)pParam; static TI_UINT32 GenericAddr; /* check paramemters validity */ if (pMemDebug == NULL) { return TI_NOK; } switch (funcType) { case TWD_PRINT_SYS_INFO: break; case TWD_SET_GENERIC_ADDR: /* check paramemters validity */ if (pParam == NULL) { return TI_NOK; } GenericAddr = *(TI_UINT32 *)pParam; break; case TWD_READ_MEM: /* check paramemters validity */ if (pMemDebug == NULL) { return TI_NOK; } /* validate length */ *(TI_UINT32*)&pMemDebug->length = 4; /* If Address in valid Memory area and there is enough space for Length to R/W */ if (TWD_isValidMemoryAddr(hTWD, pMemDebug) == TI_TRUE) { /* Init buf before reading */ os_memorySet(pTWD->hOs, (void*)pMemDebug->UBuf.buf8, 0, 4); if ( TWD_readMem (hTWD, pMemDebug, NULL, NULL) != TI_OK ) { return TI_NOK; } } else if (TWD_isValidRegAddr(hTWD, pMemDebug) == TI_TRUE) { /* Init buf before reading */ *(TI_UINT32*)&pMemDebug->UBuf.buf32 = 0; if ( TWD_readMem (hTWD, pMemDebug, NULL, NULL) != TI_OK ) { return TI_NOK; } } /* address Not in valid Area */ else { return TI_NOK; } /* print read memory */ { } break; case TWD_WRITE_MEM: /* check paramemters validity */ if (pMemDebug == NULL) { return TI_NOK; } /* validate length */ *(TI_UINT32*)&pMemDebug->length = 4; /* If Address in valid Memory area and there is enough space for Length to R/W */ if (TWD_isValidMemoryAddr(hTWD, pMemDebug) == TI_TRUE) { return ( TWD_writeMem (hTWD, pMemDebug, NULL, NULL) ); } else if (TWD_isValidRegAddr(hTWD, pMemDebug) == TI_TRUE) { return ( TWD_writeMem (hTWD, pMemDebug, NULL, NULL) ); } /* address Not in valid Area */ else { return TI_NOK; } break; /* HAL Control functions */ case TWD_PRINT_MBOX_QUEUE_INFO: cmdQueue_Print (pTWD->hCmdQueue); break; case TWD_PRINT_MBOX_PRINT_CMD: /* check paramemters validity */ if (pParam == NULL) { return TI_NOK; } cmdQueue_PrintHistory (pTWD->hCmdQueue, *(int *)pParam); break; case TWD_PRINT_EVENT_MBOX_INFO: eventMbox_Print (pTWD->hEventMbox); break; case TWD_PRINT_EVENT_MBOX_MASK: /* check paramemters validity */ if (pParam == NULL) { return TI_NOK; } if ( eventMbox_MaskEvent (pTWD->hEventMbox, *(int *)pParam, NULL, NULL) == TI_NOK ) { return(TI_NOK); } break; case TWD_PRINT_EVENT_MBOX_UNMASK: /* check paramemters validity */ if (pParam == NULL) { return TI_NOK; } if ( eventMbox_UnMaskEvent (pTWD->hEventMbox, *(int *)pParam, NULL, NULL) == TI_NOK ) { return(TI_NOK); } break; case TWD_PRINT_ISTART: { } break; case TWD_PRINT_LIST_REGS_THROG_MBOX: { int i; TI_UINT32 RegAddr; RegAddr = *(TI_UINT32 *)pParam; for (i = 0; i < 8; i++, RegAddr += 16) { TWD_PrintMemRegs (hTWD, RegAddr + 0, 4, TNETW_MAC_REGISTERS); TWD_PrintMemRegs (hTWD, RegAddr + 4, 4, TNETW_MAC_REGISTERS); TWD_PrintMemRegs (hTWD, RegAddr + 8, 4, TNETW_MAC_REGISTERS); TWD_PrintMemRegs (hTWD, RegAddr + 12, 4, TNETW_MAC_REGISTERS); } } break; case TWD_PRINT_LIST_MEM_THROG_MBOX: /* check paramemters validity */ if (pParam == NULL) { return TI_NOK; } TWD_PrintMemRegs (hTWD, *(TI_UINT32*)pParam, 256, TNETW_INTERNAL_RAM); break; case TWD_SET_MAC_CLOCK: /* check paramemters validity */ if (pParam == NULL) { return TI_NOK; } GenericVal = *(TI_UINT32*)pParam; TWD_CfgMacClock (hTWD, GenericVal); break; #if defined(TNETW1150) case TWD_SET_ARM_CLOCK: /* check paramemters validity */ if (pParam == NULL) { return TI_NOK; } GenericVal = *(TI_UINT32*)pParam; TWD_ArmClockSet (hTWD, GenericVal); break; #endif /* * Rx functions */ #ifdef TI_DBG case TWD_PRINT_RX_INFO: rxXfer_PrintStats (pTWD->hRxXfer); break; case TWD_CLEAR_RX_INFO: rxXfer_ClearStats (pTWD->hRxXfer); break; #endif /* TI_DBG */ /* * Acx functions */ case TWD_PRINT_ACX_MAP: TWD_PrintMemoryMap (hTWD); break; case TWD_PRINT_ACX_STAT: TWD_ItrStatistics (hTWD, (void*)TWD_StatisticsReadCB, hTWD, (void *)&pTWD->acxStatistic); break; /* * General functions */ case TWD_PRINT_HELP: break; case TWD_PRINT_FW_EVENT_INFO: fwEvent_PrintStat(pTWD->hFwEvent); break; case TWD_PRINT_TW_IF_INFO: twIf_PrintQueues(pTWD->hTwIf); break; case TWD_PRINT_MBOX_INFO: cmdMbox_PrintInfo(pTWD->hCmdMbox); break; /* * Recovery functions */ case TWD_CHECK_HW: { int Stt; Stt = TWD_CmdHealthCheck (hTWD); } break; case TWD_MAILBOX_HISTORY_PRINT: #ifdef TI_DBG /* check paramemters validity */ if (pParam == NULL) { return TI_NOK; } cmdQueue_PrintHistory (pTWD->hCmdQueue, *(int *)pParam); #endif break; case TWD_FORCE_TEMPLATES_RATES: if (pParam == NULL) { return TI_NOK; } cmdBld_DbgForceTemplatesRates (pTWD->hCmdBld, *(TI_UINT32 *)pParam); break; default: break; } /* switch (funcType) */ return TI_OK; }