1 /* 2 * TWD_Debug.c 3 * 4 * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * * Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * * Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the 16 * distribution. 17 * * Neither the name Texas Instruments nor the names of its 18 * contributors may be used to endorse or promote products derived 19 * from this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34 #include "tidef.h" 35 #include "TWDriver.h" 36 #include "rxXfer_api.h" 37 #include "report.h" 38 #include "osApi.h" 39 #include "eventMbox_api.h" 40 #include "CmdQueue_api.h" 41 #include "CmdMBox_api.h" 42 #include "FwEvent_api.h" 43 #include "fwDebug_api.h" 44 #include "CmdBld.h" 45 46 47 /* Phony address used by host access */ 48 #define BB_REGISTER_ADDR_BASE 0x820000 49 50 /* Used for TWD Debug Tests */ 51 typedef enum 52 { 53 /* 54 * General 55 */ 56 /* 0x00 */ TWD_PRINT_HELP, 57 /* 0x01 */ TWD_PRINT_SYS_INFO, 58 /* 0x02 */ TWD_SET_GENERIC_ADDR, 59 /* 0x03 */ TWD_READ_MEM, 60 /* 0x04 */ TWD_WRITE_MEM, 61 62 /* 0x05 */ TWD_PRINT_ISTART, 63 64 /* 0x06 */ TWD_PRINT_MBOX_QUEUE_INFO, 65 /* 0x07 */ TWD_PRINT_MBOX_PRINT_CMD, 66 /* 0x08 */ TWD_MAILBOX_HISTORY_PRINT, 67 68 /* 0x09 */ TWD_MAC_REG, 69 /* 0x0A */ TWD_SET_ARM_CLOCK, 70 /* 0x0B */ TWD_SET_MAC_CLOCK, 71 72 /* 73 * Rx 74 */ 75 /* 0x0C */ TWD_PRINT_RX_INFO, 76 /* 0x0D */ TWD_CLEAR_RX_INFO, 77 78 /* 79 * Acx 80 */ 81 /* 0x0E */ TWD_PRINT_ACX_MAP, 82 /* 0x0F */ TWD_PRINT_ACX_STAT, 83 84 /* 85 * General Debug 86 */ 87 /* 0x10 */ TWD_PWR_SV_DBG, 88 89 /* 0x11 */ TWD_PRINT_LIST_REGS_THROG_MBOX, 90 /* 0x12 */ TWD_PRINT_LIST_MEM_THROG_MBOX, 91 /* 0x13 */ TWD_SET_MAC_REGISTER_THROG_MBOX, 92 /* 0x14 */ TWD_SET_PHY_REGISTER_THROG_MBOX, 93 /* 0x15 */ TWD_SET_MEMORY_THROG_MBOX, 94 95 /* 96 * Recover Debug 97 */ 98 /* 0x16 */ TWD_CHECK_HW, 99 /* 0x17 */ TWD_PRINT_HW_STATUS, 100 101 /* 102 * Event MailBox 103 */ 104 /* 0x18 */ TWD_PRINT_EVENT_MBOX_INFO, 105 /* 0x19 */ TWD_PRINT_EVENT_MBOX_MASK, 106 /* 0x1A */ TWD_PRINT_EVENT_MBOX_UNMASK, 107 108 /* 109 * Other 110 */ 111 TWD_PRINT_FW_EVENT_INFO, 112 TWD_PRINT_TW_IF_INFO, 113 TWD_PRINT_MBOX_INFO, 114 TWD_FORCE_TEMPLATES_RATES, 115 116 TWD_DEBUG_TEST_MAX = 0xFF /* mast be last!!! */ 117 118 } TWD_DebugTest_e; 119 120 121 /* Used for Memory or Registers reading/writing*/ 122 typedef enum 123 { 124 TNETW_INTERNAL_RAM, 125 TNETW_MAC_REGISTERS, 126 TNETW_PHY_REGISTERS 127 128 } readWrite_MemoryType_e; 129 130 static void TWD_PrintMemRegsCB (TI_HANDLE hTWD, TI_UINT32 cmdCbStatus) 131 { 132 TTwd *pTWD = (TTwd *)hTWD; 133 int i; 134 TI_UINT8 *pBuf; 135 TI_UINT32 result; 136 137 if (cmdCbStatus != TI_OK) 138 { 139 WLAN_OS_REPORT(("Command complete error \n\n")); 140 return; 141 } 142 143 result = (((TI_UINT32)pTWD->tPrintRegsBuf.addr) & 0xFFFF0000); 144 145 switch (result) 146 { 147 case REGISTERS_BASE: 148 WLAN_OS_REPORT(("MAC REGS (Base=0x%08x) = 0x%08x\n", 149 ((TI_UINT32)pTWD->tPrintRegsBuf.addr)&0xFFFF, 150 *(TI_UINT32*)(pTWD->tPrintRegsBuf.value))); 151 break; 152 153 case BB_REGISTER_ADDR_BASE: 154 WLAN_OS_REPORT(("PHY REGS (Base=0x%08x) = 0x%08x\n", 155 ((TI_UINT32)pTWD->tPrintRegsBuf.addr)&0xFFFF, 156 *(TI_UINT32*)(pTWD->tPrintRegsBuf.value))); 157 break; 158 159 default: /* Memory*/ 160 for (i=0, pBuf = pTWD->tPrintRegsBuf.value; i < 256; i += 16, pBuf += 16) 161 { 162 WLAN_OS_REPORT(("PrintBuf: 0x%08x: 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n", 163 pTWD->tPrintRegsBuf.addr+i, 164 pBuf[0], pBuf[1], pBuf[2], pBuf[3], pBuf[4], pBuf[5], pBuf[6], pBuf[7], 165 pBuf[8], pBuf[9], pBuf[10], pBuf[11], pBuf[12], pBuf[13], pBuf[14], pBuf[15])); 166 } 167 break; 168 } 169 } 170 171 172 static void TWD_PrintMemRegs (TI_HANDLE hTWD, TI_UINT32 address, TI_UINT32 len, readWrite_MemoryType_e memType) 173 { 174 TTwd *pTWD = (TTwd *)hTWD; 175 ReadWriteCommand_t AcxCmd_ReadMemory; 176 ReadWriteCommand_t* pCmd = &AcxCmd_ReadMemory; 177 178 os_memoryZero (pTWD->hOs, (void *)pCmd, sizeof (*pCmd)); 179 180 switch (memType) 181 { 182 case TNETW_INTERNAL_RAM: 183 pCmd->addr = (TI_UINT32)ENDIAN_HANDLE_LONG (address); 184 pCmd->size = ENDIAN_HANDLE_LONG (len); 185 break; 186 187 case TNETW_MAC_REGISTERS: 188 pCmd->addr = (TI_UINT32)ENDIAN_HANDLE_LONG (((address&0xFFFF) | REGISTERS_BASE)); 189 pCmd->size = 4; 190 break; 191 192 case TNETW_PHY_REGISTERS: 193 pCmd->addr = (TI_UINT32)ENDIAN_HANDLE_LONG (((address&0xFFFF) | BB_REGISTER_ADDR_BASE)); 194 pCmd->size = 4; 195 break; 196 197 default: 198 WLAN_OS_REPORT(("Wrong memory type %d\n\n", memType)); 199 return; 200 } 201 202 os_memoryZero (pTWD->hOs, (void *)&pTWD->tPrintRegsBuf, sizeof(pTWD->tPrintRegsBuf)); 203 204 cmdQueue_SendCommand (pTWD->hCmdQueue, 205 CMD_READ_MEMORY, 206 (char *)pCmd, 207 sizeof(*pCmd), 208 (void *)TWD_PrintMemRegsCB, 209 hTWD, 210 &pTWD->tPrintRegsBuf); 211 } 212 213 static TI_STATUS TWD_PrintMemoryMapCb (TI_HANDLE hTWD, TI_STATUS status, void *pData) 214 { 215 #ifdef REPORT_LOG 216 TTwd *pTWD = (TTwd *)hTWD; 217 MemoryMap_t *pMemMap = &pTWD->MemMap; 218 219 /* Print the memory map */ 220 WLAN_OS_REPORT (("TWD_PrintMemoryMap:\n")); 221 WLAN_OS_REPORT (("\tCode (0x%08x, 0x%08x)\n\tWep (0x%08x, 0x%08x)\n\tTmpl (0x%08x, 0x%08x)\n " 222 "\tQueue (0x%08x, 0x%08x)\n\tPool (0x%08x, 0x%08x)\n\tTraceBuffer (A = 0x%08x, B = 0x%08x)\n", 223 pMemMap->codeStart, 224 pMemMap->codeEnd, 225 pMemMap->wepDefaultKeyStart, 226 pMemMap->wepDefaultKeyEnd, 227 pMemMap->packetTemplateStart, 228 pMemMap->packetTemplateEnd, 229 pMemMap->queueMemoryStart, 230 pMemMap->queueMemoryEnd, 231 pMemMap->packetMemoryPoolStart, 232 pMemMap->packetMemoryPoolEnd, 233 pMemMap->debugBuffer1Start, 234 pMemMap->debugBuffer2Start)); 235 #endif 236 237 return TI_OK; 238 } 239 240 241 /**************************************************************************** 242 * TWD_PrintMemoryMap () 243 **************************************************************************** 244 * DESCRIPTION: Print some of the MemoryMap information element fields 245 * 246 * INPUTS: 247 * HwMboxConfig_T* pHwMboxConfig pointer to the acx mailbox 248 * 249 * OUTPUT: None 250 * 251 * RETURNS: None 252 ****************************************************************************/ 253 static void TWD_PrintMemoryMap (TI_HANDLE hTWD) 254 { 255 TTwd *pTWD = (TTwd *)hTWD; 256 257 TWD_ItrMemoryMap (pTWD, &pTWD->MemMap, (void *)TWD_PrintMemoryMapCb, hTWD); 258 } 259 260 261 /**************************************************************************** 262 * TWD_StatisticsReadCB () 263 **************************************************************************** 264 * DESCRIPTION: Interrogate Statistics from the wlan hardware 265 * 266 * INPUTS: None 267 * 268 * OUTPUT: None 269 * 270 * RETURNS: TI_OK or TI_NOK 271 ****************************************************************************/ 272 static TI_STATUS TWD_StatisticsReadCB (TI_HANDLE hTWD, TI_UINT16 MboxStatus, ACXStatistics_t* pElem) 273 { 274 if (MboxStatus != TI_OK) 275 { 276 return TI_NOK; 277 } 278 279 /* 280 * Handle FW statistics endianess 281 * ============================== 282 */ 283 284 /* Ring */ 285 pElem->ringStat.numOfTxProcs = ENDIAN_HANDLE_LONG(pElem->ringStat.numOfTxProcs); 286 pElem->ringStat.numOfPreparedDescs = ENDIAN_HANDLE_LONG(pElem->ringStat.numOfPreparedDescs); 287 pElem->ringStat.numOfTxXfr = ENDIAN_HANDLE_LONG(pElem->ringStat.numOfTxXfr); 288 pElem->ringStat.numOfTxDma = ENDIAN_HANDLE_LONG(pElem->ringStat.numOfTxDma); 289 pElem->ringStat.numOfTxCmplt = ENDIAN_HANDLE_LONG(pElem->ringStat.numOfTxCmplt); 290 pElem->ringStat.numOfRxProcs = ENDIAN_HANDLE_LONG(pElem->ringStat.numOfRxProcs); 291 pElem->ringStat.numOfRxData = ENDIAN_HANDLE_LONG(pElem->ringStat.numOfRxData); 292 293 /* Debug */ 294 pElem->debug.debug1 = ENDIAN_HANDLE_LONG(pElem->debug.debug1); 295 pElem->debug.debug2 = ENDIAN_HANDLE_LONG(pElem->debug.debug2); 296 pElem->debug.debug3 = ENDIAN_HANDLE_LONG(pElem->debug.debug3); 297 pElem->debug.debug4 = ENDIAN_HANDLE_LONG(pElem->debug.debug4); 298 pElem->debug.debug5 = ENDIAN_HANDLE_LONG(pElem->debug.debug5); 299 pElem->debug.debug6 = ENDIAN_HANDLE_LONG(pElem->debug.debug6); 300 301 /* Isr */ 302 pElem->isr.IRQs = ENDIAN_HANDLE_LONG(pElem->isr.IRQs); 303 304 /* Rx */ 305 pElem->rx.RxOutOfMem = ENDIAN_HANDLE_LONG(pElem->rx.RxOutOfMem ); 306 pElem->rx.RxHdrOverflow = ENDIAN_HANDLE_LONG(pElem->rx.RxHdrOverflow ); 307 pElem->rx.RxHWStuck = ENDIAN_HANDLE_LONG(pElem->rx.RxHWStuck ); 308 pElem->rx.RxDroppedFrame = ENDIAN_HANDLE_LONG(pElem->rx.RxDroppedFrame ); 309 pElem->rx.RxCompleteDroppedFrame = ENDIAN_HANDLE_LONG(pElem->rx.RxCompleteDroppedFrame); 310 pElem->rx.RxAllocFrame = ENDIAN_HANDLE_LONG(pElem->rx.RxAllocFrame ); 311 pElem->rx.RxDoneQueue = ENDIAN_HANDLE_LONG(pElem->rx.RxDoneQueue ); 312 pElem->rx.RxDone = ENDIAN_HANDLE_LONG(pElem->rx.RxDone ); 313 pElem->rx.RxDefrag = ENDIAN_HANDLE_LONG(pElem->rx.RxDefrag ); 314 pElem->rx.RxDefragEnd = ENDIAN_HANDLE_LONG(pElem->rx.RxDefragEnd ); 315 pElem->rx.RxMic = ENDIAN_HANDLE_LONG(pElem->rx.RxMic ); 316 pElem->rx.RxMicEnd = ENDIAN_HANDLE_LONG(pElem->rx.RxMicEnd ); 317 pElem->rx.RxXfr = ENDIAN_HANDLE_LONG(pElem->rx.RxXfr ); 318 pElem->rx.RxXfrEnd = ENDIAN_HANDLE_LONG(pElem->rx.RxXfrEnd ); 319 pElem->rx.RxCmplt = ENDIAN_HANDLE_LONG(pElem->rx.RxCmplt ); 320 pElem->rx.RxPreCmplt = ENDIAN_HANDLE_LONG(pElem->rx.RxPreCmplt ); 321 pElem->rx.RxCmpltTask = ENDIAN_HANDLE_LONG(pElem->rx.RxCmpltTask ); 322 pElem->rx.RxPhyHdr = ENDIAN_HANDLE_LONG(pElem->rx.RxPhyHdr ); 323 pElem->rx.RxTimeout = ENDIAN_HANDLE_LONG(pElem->rx.RxTimeout ); 324 325 /* Tx */ 326 pElem->tx.numOfTxTemplatePrepared = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxTemplatePrepared); 327 pElem->tx.numOfTxDataPrepared = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxDataPrepared); 328 pElem->tx.numOfTxTemplateProgrammed = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxTemplateProgrammed); 329 pElem->tx.numOfTxDataProgrammed = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxDataProgrammed); 330 pElem->tx.numOfTxBurstProgrammed = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxBurstProgrammed); 331 pElem->tx.numOfTxStarts = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxStarts); 332 pElem->tx.numOfTxImmResp = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxImmResp); 333 pElem->tx.numOfTxStartTempaltes = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxStartTempaltes); 334 pElem->tx.numOfTxStartIntTemplate = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxStartIntTemplate); 335 pElem->tx.numOfTxStartFwGen = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxStartFwGen); 336 pElem->tx.numOfTxStartData = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxStartData); 337 pElem->tx.numOfTxStartNullFrame = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxStartNullFrame); 338 pElem->tx.numOfTxExch = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxExch); 339 pElem->tx.numOfTxRetryTemplate = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxRetryTemplate); 340 pElem->tx.numOfTxRetryData = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxRetryData); 341 pElem->tx.numOfTxExchPending = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxExchPending); 342 pElem->tx.numOfTxExchExpiry = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxExchExpiry); 343 pElem->tx.numOfTxExchMismatch = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxExchMismatch); 344 pElem->tx.numOfTxDoneTemplate = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxDoneTemplate); 345 pElem->tx.numOfTxDoneData = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxDoneData); 346 pElem->tx.numOfTxDoneIntTemplate = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxDoneIntTemplate); 347 pElem->tx.numOfTxPreXfr = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxPreXfr); 348 pElem->tx.numOfTxXfr = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxXfr); 349 pElem->tx.numOfTxXfrOutOfMem = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxXfrOutOfMem); 350 pElem->tx.numOfTxDmaProgrammed = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxDmaProgrammed); 351 pElem->tx.numOfTxDmaDone = ENDIAN_HANDLE_LONG(pElem->tx.numOfTxDmaDone); 352 353 /* Dma */ 354 pElem->dma.RxDMAErrors = ENDIAN_HANDLE_LONG(pElem->dma.RxDMAErrors); 355 pElem->dma.TxDMAErrors = ENDIAN_HANDLE_LONG(pElem->dma.TxDMAErrors); 356 357 /* Wep */ 358 pElem->wep.WepAddrKeyCount = ENDIAN_HANDLE_LONG(pElem->wep.WepAddrKeyCount); 359 pElem->wep.WepDefaultKeyCount = ENDIAN_HANDLE_LONG(pElem->wep.WepDefaultKeyCount); 360 pElem->wep.WepKeyNotFound = ENDIAN_HANDLE_LONG(pElem->wep.WepKeyNotFound); 361 pElem->wep.WepDecryptFail = ENDIAN_HANDLE_LONG(pElem->wep.WepDecryptFail); 362 363 /* AES */ 364 pElem->aes.AesEncryptFail = ENDIAN_HANDLE_LONG(pElem->aes.AesEncryptFail); 365 pElem->aes.AesDecryptFail = ENDIAN_HANDLE_LONG(pElem->aes.AesDecryptFail); 366 pElem->aes.AesEncryptPackets = ENDIAN_HANDLE_LONG(pElem->aes.AesEncryptPackets); 367 pElem->aes.AesDecryptPackets = ENDIAN_HANDLE_LONG(pElem->aes.AesDecryptPackets); 368 pElem->aes.AesEncryptInterrupt = ENDIAN_HANDLE_LONG(pElem->aes.AesEncryptInterrupt); 369 pElem->aes.AesDecryptInterrupt = ENDIAN_HANDLE_LONG(pElem->aes.AesDecryptInterrupt); 370 371 /* Events */ 372 pElem->event.calibration = ENDIAN_HANDLE_LONG(pElem->event.calibration); 373 pElem->event.rxMismatch = ENDIAN_HANDLE_LONG(pElem->event.rxMismatch); 374 pElem->event.rxMemEmpty = ENDIAN_HANDLE_LONG(pElem->event.rxMemEmpty); 375 376 /* PS */ 377 pElem->pwr.MissingBcnsCnt = ENDIAN_HANDLE_LONG(pElem->pwr.MissingBcnsCnt); 378 pElem->pwr.RcvdBeaconsCnt = ENDIAN_HANDLE_LONG(pElem->pwr.RcvdBeaconsCnt); 379 pElem->pwr.ConnectionOutOfSync = ENDIAN_HANDLE_LONG(pElem->pwr.ConnectionOutOfSync); 380 pElem->pwr.ContMissBcnsSpread[0] = ENDIAN_HANDLE_LONG(pElem->pwr.ContMissBcnsSpread[0]); 381 pElem->pwr.ContMissBcnsSpread[1] = ENDIAN_HANDLE_LONG(pElem->pwr.ContMissBcnsSpread[1]); 382 pElem->pwr.ContMissBcnsSpread[2] = ENDIAN_HANDLE_LONG(pElem->pwr.ContMissBcnsSpread[2]); 383 pElem->pwr.ContMissBcnsSpread[3] = ENDIAN_HANDLE_LONG(pElem->pwr.ContMissBcnsSpread[3]); 384 pElem->pwr.ContMissBcnsSpread[4] = ENDIAN_HANDLE_LONG(pElem->pwr.ContMissBcnsSpread[4]); 385 pElem->pwr.ContMissBcnsSpread[5] = ENDIAN_HANDLE_LONG(pElem->pwr.ContMissBcnsSpread[5]); 386 pElem->pwr.ContMissBcnsSpread[6] = ENDIAN_HANDLE_LONG(pElem->pwr.ContMissBcnsSpread[6]); 387 pElem->pwr.ContMissBcnsSpread[7] = ENDIAN_HANDLE_LONG(pElem->pwr.ContMissBcnsSpread[7]); 388 pElem->pwr.ContMissBcnsSpread[8] = ENDIAN_HANDLE_LONG(pElem->pwr.ContMissBcnsSpread[8]); 389 pElem->pwr.ContMissBcnsSpread[9] = ENDIAN_HANDLE_LONG(pElem->pwr.ContMissBcnsSpread[9]); 390 391 pElem->ps.psPollTimeOuts = ENDIAN_HANDLE_LONG(pElem->ps.psPollTimeOuts); 392 pElem->ps.upsdTimeOuts = ENDIAN_HANDLE_LONG(pElem->ps.upsdTimeOuts); 393 pElem->ps.upsdMaxAPturn = ENDIAN_HANDLE_LONG(pElem->ps.upsdMaxAPturn); 394 pElem->ps.psPollMaxAPturn = ENDIAN_HANDLE_LONG(pElem->ps.psPollMaxAPturn); 395 pElem->ps.psPollUtilization = ENDIAN_HANDLE_LONG(pElem->ps.psPollUtilization); 396 pElem->ps.upsdUtilization = ENDIAN_HANDLE_LONG(pElem->ps.upsdUtilization); 397 398 pElem->rxFilter.arpFilter = ENDIAN_HANDLE_LONG(pElem->rxFilter.arpFilter); 399 pElem->rxFilter.beaconFilter = ENDIAN_HANDLE_LONG(pElem->rxFilter.beaconFilter); 400 pElem->rxFilter.dataFilter = ENDIAN_HANDLE_LONG(pElem->rxFilter.dataFilter); 401 pElem->rxFilter.dupFilter = ENDIAN_HANDLE_LONG(pElem->rxFilter.dupFilter); 402 pElem->rxFilter.MCFilter = ENDIAN_HANDLE_LONG(pElem->rxFilter.MCFilter); 403 pElem->rxFilter.ibssFilter = ENDIAN_HANDLE_LONG(pElem->rxFilter.ibssFilter); 404 405 pElem->radioCal.calStateFail = ENDIAN_HANDLE_LONG(pElem->radioCal.calStateFail); 406 pElem->radioCal.initCalTotal = ENDIAN_HANDLE_LONG(pElem->radioCal.initCalTotal); 407 pElem->radioCal.initRadioBandsFail = ENDIAN_HANDLE_LONG(pElem->radioCal.initRadioBandsFail); 408 pElem->radioCal.initRxIqMmFail = ENDIAN_HANDLE_LONG(pElem->radioCal.initRxIqMmFail); 409 pElem->radioCal.initSetParams = ENDIAN_HANDLE_LONG(pElem->radioCal.initSetParams); 410 pElem->radioCal.initTxClpcFail = ENDIAN_HANDLE_LONG(pElem->radioCal.initTxClpcFail); 411 pElem->radioCal.tuneCalTotal = ENDIAN_HANDLE_LONG(pElem->radioCal.tuneCalTotal); 412 pElem->radioCal.tuneDrpwChanTune = ENDIAN_HANDLE_LONG(pElem->radioCal.tuneDrpwChanTune); 413 pElem->radioCal.tuneDrpwLnaTank = ENDIAN_HANDLE_LONG(pElem->radioCal.tuneDrpwLnaTank); 414 pElem->radioCal.tuneDrpwPdBufFail = ENDIAN_HANDLE_LONG(pElem->radioCal.tuneDrpwPdBufFail); 415 pElem->radioCal.tuneDrpwRTrimFail = ENDIAN_HANDLE_LONG(pElem->radioCal.tuneDrpwRTrimFail); 416 pElem->radioCal.tuneDrpwRxDac = ENDIAN_HANDLE_LONG(pElem->radioCal.tuneDrpwRxDac); 417 pElem->radioCal.tuneDrpwRxIf2Gain = ENDIAN_HANDLE_LONG(pElem->radioCal.tuneDrpwRxIf2Gain); 418 pElem->radioCal.tuneDrpwRxTxLpf = ENDIAN_HANDLE_LONG(pElem->radioCal.tuneDrpwRxTxLpf); 419 pElem->radioCal.tuneDrpwTaCal = ENDIAN_HANDLE_LONG(pElem->radioCal.tuneDrpwTaCal); 420 pElem->radioCal.tuneDrpwTxMixFreqFail = ENDIAN_HANDLE_LONG(pElem->radioCal.tuneDrpwTxMixFreqFail); 421 pElem->radioCal.tuneRxAnaDcFail = ENDIAN_HANDLE_LONG(pElem->radioCal.tuneRxAnaDcFail); 422 pElem->radioCal.tuneRxIqMmFail = ENDIAN_HANDLE_LONG(pElem->radioCal.tuneRxIqMmFail); 423 pElem->radioCal.tuneTxClpcFail = ENDIAN_HANDLE_LONG(pElem->radioCal.tuneTxClpcFail); 424 pElem->radioCal.tuneTxIqMmFail = ENDIAN_HANDLE_LONG(pElem->radioCal.tuneTxIqMmFail); 425 pElem->radioCal.tuneTxLOLeakFail = ENDIAN_HANDLE_LONG(pElem->radioCal.tuneTxLOLeakFail); 426 pElem->radioCal.tuneTxPdetFail = ENDIAN_HANDLE_LONG(pElem->radioCal.tuneTxPdetFail); 427 pElem->radioCal.tuneTxPPAFail = ENDIAN_HANDLE_LONG(pElem->radioCal.tuneTxPPAFail); 428 429 430 /* 431 * Print FW statistics 432 * =================== 433 */ 434 435 /* Ring */ 436 WLAN_OS_REPORT(("------ Ring statistics -------------------\n")); 437 WLAN_OS_REPORT(("numOfTxProcs = %d\n", pElem->ringStat.numOfTxProcs)); 438 WLAN_OS_REPORT(("numOfPreparedDescs = %d\n", pElem->ringStat.numOfPreparedDescs)); 439 WLAN_OS_REPORT(("numOfTxXfr = %d\n", pElem->ringStat.numOfTxXfr)); 440 WLAN_OS_REPORT(("numOfTxDma = %d\n", pElem->ringStat.numOfTxDma)); 441 WLAN_OS_REPORT(("numOfTxCmplt = %d\n", pElem->ringStat.numOfTxCmplt)); 442 WLAN_OS_REPORT(("numOfRxProcs = %d\n", pElem->ringStat.numOfRxProcs)); 443 WLAN_OS_REPORT(("numOfRxData = %d\n", pElem->ringStat.numOfRxData)); 444 445 /* Debug */ 446 WLAN_OS_REPORT(("------ Debug statistics -------------------\n")); 447 WLAN_OS_REPORT(("debug1 = %d\n", pElem->debug.debug1)); 448 WLAN_OS_REPORT(("debug2 = %d\n", pElem->debug.debug2)); 449 WLAN_OS_REPORT(("debug3 = %d\n", pElem->debug.debug3)); 450 WLAN_OS_REPORT(("debug4 = %d\n", pElem->debug.debug4)); 451 WLAN_OS_REPORT(("debug5 = %d\n", pElem->debug.debug5)); 452 WLAN_OS_REPORT(("debug6 = %d\n", pElem->debug.debug6)); 453 454 /* Isr */ 455 WLAN_OS_REPORT(("------ Isr statistics -------------------\n")); 456 WLAN_OS_REPORT(("IRQs = %d\n", pElem->isr.IRQs)); 457 458 /* Rx */ 459 WLAN_OS_REPORT(("------ Rx statistics -------------------\n")); 460 WLAN_OS_REPORT(("RxOutOfMem = %d\n", pElem->rx.RxOutOfMem )); 461 WLAN_OS_REPORT(("RxHdrOverflow = %d\n", pElem->rx.RxHdrOverflow )); 462 WLAN_OS_REPORT(("RxHWStuck = %d\n", pElem->rx.RxHWStuck )); 463 WLAN_OS_REPORT(("RxDroppedFrame = %d\n", pElem->rx.RxDroppedFrame )); 464 WLAN_OS_REPORT(("RxCompleteDroppedFrame = %d\n", pElem->rx.RxCompleteDroppedFrame)); 465 WLAN_OS_REPORT(("RxAllocFrame = %d\n", pElem->rx.RxAllocFrame )); 466 WLAN_OS_REPORT(("RxDoneQueue = %d\n", pElem->rx.RxDoneQueue )); 467 WLAN_OS_REPORT(("RxDone = %d\n", pElem->rx.RxDone )); 468 WLAN_OS_REPORT(("RxDefrag = %d\n", pElem->rx.RxDefrag )); 469 WLAN_OS_REPORT(("RxDefragEnd = %d\n", pElem->rx.RxDefragEnd )); 470 WLAN_OS_REPORT(("RxMic = %d\n", pElem->rx.RxMic )); 471 WLAN_OS_REPORT(("RxMicEnd = %d\n", pElem->rx.RxMicEnd )); 472 WLAN_OS_REPORT(("RxXfr = %d\n", pElem->rx.RxXfr )); 473 WLAN_OS_REPORT(("RxXfrEnd = %d\n", pElem->rx.RxXfrEnd )); 474 WLAN_OS_REPORT(("RxCmplt = %d\n", pElem->rx.RxCmplt )); 475 WLAN_OS_REPORT(("RxPreCmplt = %d\n", pElem->rx.RxPreCmplt )); 476 WLAN_OS_REPORT(("RxCmpltTask = %d\n", pElem->rx.RxCmpltTask )); 477 WLAN_OS_REPORT(("RxPhyHdr = %d\n", pElem->rx.RxPhyHdr )); 478 WLAN_OS_REPORT(("RxTimeout = %d\n", pElem->rx.RxTimeout )); 479 480 WLAN_OS_REPORT(("------ RxFilters statistics --------------\n")); 481 WLAN_OS_REPORT(("arpFilter = %d\n", pElem->rxFilter.arpFilter)); 482 WLAN_OS_REPORT(("beaconFilter = %d\n", pElem->rxFilter.beaconFilter)); 483 WLAN_OS_REPORT(("dataFilter = %d\n", pElem->rxFilter.dataFilter)); 484 WLAN_OS_REPORT(("dupFilter = %d\n", pElem->rxFilter.dupFilter)); 485 WLAN_OS_REPORT(("MCFilter = %d\n", pElem->rxFilter.MCFilter)); 486 WLAN_OS_REPORT(("ibssFilter = %d\n", pElem->rxFilter.ibssFilter)); 487 488 /* Tx */ 489 WLAN_OS_REPORT(("------ Tx statistics -------------------\n")); 490 WLAN_OS_REPORT(("numOfTxTemplatePrepared = %d\n", pElem->tx.numOfTxTemplatePrepared)); 491 WLAN_OS_REPORT(("numOfTxDataPrepared = %d\n", pElem->tx.numOfTxDataPrepared)); 492 WLAN_OS_REPORT(("numOfTxTemplateProgrammed = %d\n", pElem->tx.numOfTxTemplateProgrammed)); 493 WLAN_OS_REPORT(("numOfTxDataProgrammed = %d\n", pElem->tx.numOfTxDataProgrammed)); 494 WLAN_OS_REPORT(("numOfTxBurstProgrammed = %d\n", pElem->tx.numOfTxBurstProgrammed)); 495 WLAN_OS_REPORT(("numOfTxStarts = %d\n", pElem->tx.numOfTxStarts)); 496 WLAN_OS_REPORT(("numOfTxImmResp = %d\n", pElem->tx.numOfTxImmResp)); 497 WLAN_OS_REPORT(("numOfTxStartTempaltes = %d\n", pElem->tx.numOfTxStartTempaltes)); 498 WLAN_OS_REPORT(("numOfTxStartIntTemplate = %d\n", pElem->tx.numOfTxStartIntTemplate)); 499 WLAN_OS_REPORT(("numOfTxStartFwGen = %d\n", pElem->tx.numOfTxStartFwGen)); 500 WLAN_OS_REPORT(("numOfTxStartData = %d\n", pElem->tx.numOfTxStartData)); 501 WLAN_OS_REPORT(("numOfTxStartNullFrame = %d\n", pElem->tx.numOfTxStartNullFrame)); 502 WLAN_OS_REPORT(("numOfTxExch = %d\n", pElem->tx.numOfTxExch)); 503 WLAN_OS_REPORT(("numOfTxRetryTemplate = %d\n", pElem->tx.numOfTxRetryTemplate)); 504 WLAN_OS_REPORT(("numOfTxRetryData = %d\n", pElem->tx.numOfTxRetryData)); 505 WLAN_OS_REPORT(("numOfTxExchPending = %d\n", pElem->tx.numOfTxExchPending)); 506 WLAN_OS_REPORT(("numOfTxExchExpiry = %d\n", pElem->tx.numOfTxExchExpiry)); 507 WLAN_OS_REPORT(("numOfTxExchMismatch = %d\n", pElem->tx.numOfTxExchMismatch)); 508 WLAN_OS_REPORT(("numOfTxDoneTemplate = %d\n", pElem->tx.numOfTxDoneTemplate)); 509 WLAN_OS_REPORT(("numOfTxDoneData = %d\n", pElem->tx.numOfTxDoneData)); 510 WLAN_OS_REPORT(("numOfTxDoneIntTemplate = %d\n", pElem->tx.numOfTxDoneIntTemplate)); 511 WLAN_OS_REPORT(("numOfTxPreXfr = %d\n", pElem->tx.numOfTxPreXfr)); 512 WLAN_OS_REPORT(("numOfTxXfr = %d\n", pElem->tx.numOfTxXfr)); 513 WLAN_OS_REPORT(("numOfTxXfrOutOfMem = %d\n", pElem->tx.numOfTxXfrOutOfMem)); 514 WLAN_OS_REPORT(("numOfTxDmaProgrammed = %d\n", pElem->tx.numOfTxDmaProgrammed)); 515 WLAN_OS_REPORT(("numOfTxDmaDone = %d\n", pElem->tx.numOfTxDmaDone)); 516 517 /* Dma */ 518 WLAN_OS_REPORT(("------ Dma statistics -------------------\n")); 519 WLAN_OS_REPORT(("RxDMAErrors = %d\n", pElem->dma.RxDMAErrors)); 520 WLAN_OS_REPORT(("TxDMAErrors = %d\n", pElem->dma.TxDMAErrors)); 521 522 /* Wep */ 523 WLAN_OS_REPORT(("------ Wep statistics -------------------\n")); 524 WLAN_OS_REPORT(("WepAddrKeyCount = %d\n", pElem->wep.WepAddrKeyCount)); 525 WLAN_OS_REPORT(("WepDefaultKeyCount= %d\n", pElem->wep.WepDefaultKeyCount)); 526 WLAN_OS_REPORT(("WepKeyNotFound = %d\n", pElem->wep.WepKeyNotFound)); 527 WLAN_OS_REPORT(("WepDecryptFail = %d\n", pElem->wep.WepDecryptFail)); 528 529 /* AES */ 530 WLAN_OS_REPORT(("------------ AES Statistics --------------\n")); 531 WLAN_OS_REPORT(("AesEncryptFail = %d\n", pElem->aes.AesEncryptFail)); 532 WLAN_OS_REPORT(("AesDecryptFail = %d\n", pElem->aes.AesDecryptFail)); 533 WLAN_OS_REPORT(("AesEncryptPackets = %d\n", pElem->aes.AesEncryptPackets)); 534 WLAN_OS_REPORT(("AesDecryptPackets = %d\n", pElem->aes.AesDecryptPackets)); 535 WLAN_OS_REPORT(("AesEncryptInterrupt = %d\n", pElem->aes.AesEncryptInterrupt)); 536 WLAN_OS_REPORT(("AesDecryptInterrupt = %d\n", pElem->aes.AesDecryptInterrupt)); 537 538 /* Events */ 539 WLAN_OS_REPORT(("------ Events -------------------\n")); 540 WLAN_OS_REPORT(("Calibration = %d\n", pElem->event.calibration)); 541 WLAN_OS_REPORT(("rxMismatch = %d\n", pElem->event.rxMismatch)); 542 WLAN_OS_REPORT(("rxMemEmpty = %d\n", pElem->event.rxMemEmpty)); 543 544 /* PsPoll/Upsd */ 545 WLAN_OS_REPORT(("----------- PsPoll / Upsd -----------\n")); 546 WLAN_OS_REPORT(("psPollTimeOuts = %d\n",pElem->ps.psPollTimeOuts)); 547 WLAN_OS_REPORT(("upsdTimeOuts = %d\n",pElem->ps.upsdTimeOuts)); 548 WLAN_OS_REPORT(("upsdMaxAPturn = %d\n",pElem->ps.upsdMaxAPturn)); 549 WLAN_OS_REPORT(("psPollMaxAPturn = %d\n",pElem->ps.psPollMaxAPturn)); 550 WLAN_OS_REPORT(("psPollUtilization = %d\n",pElem->ps.psPollUtilization)); 551 WLAN_OS_REPORT(("upsdUtilization = %d\n",pElem->ps.upsdUtilization)); 552 553 554 555 /* Calibration */ 556 WLAN_OS_REPORT(("----------- Calibrations -------------\n")); 557 WLAN_OS_REPORT(("calStateFail = %d\n", pElem->radioCal.calStateFail)); 558 WLAN_OS_REPORT(("initCalTotal = %d\n", pElem->radioCal.initCalTotal)); 559 WLAN_OS_REPORT(("initRadioBandsFail = %d\n", pElem->radioCal.initRadioBandsFail)); 560 WLAN_OS_REPORT(("initRxIqMmFail = %d\n", pElem->radioCal.initRxIqMmFail)); 561 WLAN_OS_REPORT(("initSetParams = %d\n", pElem->radioCal.initSetParams)); 562 WLAN_OS_REPORT(("initTxClpcFail = %d\n", pElem->radioCal.initTxClpcFail)); 563 WLAN_OS_REPORT(("tuneCalTotal = %d\n", pElem->radioCal.tuneCalTotal)); 564 WLAN_OS_REPORT(("tuneDrpwChanTune = %d\n", pElem->radioCal.tuneDrpwChanTune)); 565 WLAN_OS_REPORT(("tuneDrpwLnaTank = %d\n", pElem->radioCal.tuneDrpwLnaTank)); 566 WLAN_OS_REPORT(("tuneDrpwPdBufFail = %d\n", pElem->radioCal.tuneDrpwPdBufFail)); 567 WLAN_OS_REPORT(("tuneDrpwRTrimFail = %d\n", pElem->radioCal.tuneDrpwRTrimFail)); 568 WLAN_OS_REPORT(("tuneDrpwRxDac = %d\n", pElem->radioCal.tuneDrpwRxDac)); 569 WLAN_OS_REPORT(("tuneDrpwRxIf2Gain = %d\n", pElem->radioCal.tuneDrpwRxIf2Gain)); 570 WLAN_OS_REPORT(("tuneDrpwRxTxLpf = %d\n", pElem->radioCal.tuneDrpwRxTxLpf)); 571 WLAN_OS_REPORT(("tuneDrpwTaCal = %d\n", pElem->radioCal.tuneDrpwTaCal)); 572 WLAN_OS_REPORT(("tuneDrpwTxMixFreqFail = %d\n", pElem->radioCal.tuneDrpwTxMixFreqFail)); 573 WLAN_OS_REPORT(("tuneRxAnaDcFail = %d\n", pElem->radioCal.tuneRxAnaDcFail)); 574 WLAN_OS_REPORT(("tuneRxIqMmFail = %d\n", pElem->radioCal.tuneRxIqMmFail)); 575 WLAN_OS_REPORT(("tuneTxClpcFail = %d\n", pElem->radioCal.tuneTxClpcFail)); 576 WLAN_OS_REPORT(("tuneTxIqMmFail = %d\n", pElem->radioCal.tuneTxIqMmFail)); 577 WLAN_OS_REPORT(("tuneTxLOLeakFail = %d\n", pElem->radioCal.tuneTxLOLeakFail)); 578 WLAN_OS_REPORT(("tuneTxPdetFail = %d\n", pElem->radioCal.tuneTxPdetFail)); 579 WLAN_OS_REPORT(("tuneTxPPAFail = %d\n", pElem->radioCal.tuneTxPPAFail)); 580 581 582 583 /* Power Save Counters */ 584 WLAN_OS_REPORT(("------ Power management ----------\n")); 585 if(pElem->pwr.RcvdBeaconsCnt != 0) 586 { 587 WLAN_OS_REPORT(("MissingBcnsCnt = %d (percentage <= %d) \n", 588 pElem->pwr.MissingBcnsCnt, 589 ((pElem->pwr.MissingBcnsCnt * 100) / (pElem->pwr.RcvdBeaconsCnt + pElem->pwr.MissingBcnsCnt)) )); 590 } 591 else 592 { 593 WLAN_OS_REPORT(("MissingBcnsCnt = %d (percentage = 0) \n", pElem->pwr.MissingBcnsCnt)); 594 } 595 WLAN_OS_REPORT(("RcvdBeaconsCnt = %d\n", pElem->pwr.RcvdBeaconsCnt)); 596 WLAN_OS_REPORT(("ConnectionOutOfSync = %d\n\n", pElem->pwr.ConnectionOutOfSync)); 597 WLAN_OS_REPORT(("Single Missed Beacon = %d\n", (pElem->pwr.ContMissBcnsSpread[0] & 0xFFFF))); 598 WLAN_OS_REPORT(("2 Continuous Missed Beacons = %d\n", (pElem->pwr.ContMissBcnsSpread[1] & 0xFFFF))); 599 WLAN_OS_REPORT(("3 Continuous Missed Beacons = %d\n", (pElem->pwr.ContMissBcnsSpread[2] & 0xFFFF))); 600 WLAN_OS_REPORT(("4 Continuous Missed Beacons = %d\n", (pElem->pwr.ContMissBcnsSpread[3] & 0xFFFF))); 601 WLAN_OS_REPORT(("5 Continuous Missed Beacons = %d\n", (pElem->pwr.ContMissBcnsSpread[4] & 0xFFFF))); 602 WLAN_OS_REPORT(("6 Continuous Missed Beacons = %d\n", (pElem->pwr.ContMissBcnsSpread[5] & 0xFFFF))); 603 WLAN_OS_REPORT(("7 Continuous Missed Beacons = %d\n", (pElem->pwr.ContMissBcnsSpread[6] & 0xFFFF))); 604 WLAN_OS_REPORT(("8 Continuous Missed Beacons = %d\n", (pElem->pwr.ContMissBcnsSpread[7] & 0xFFFF))); 605 WLAN_OS_REPORT(("9 Continuous Missed Beacons = %d\n", (pElem->pwr.ContMissBcnsSpread[8] & 0xFFFF))); 606 WLAN_OS_REPORT((">=10 Continuous Missed Beacons = %d\n\n", (pElem->pwr.ContMissBcnsSpread[9] & 0xFFFF))); 607 608 WLAN_OS_REPORT(("RcvdAwakeBeaconsCnt = %d\n", pElem->pwr.RcvdAwakeBeaconsCnt)); 609 WLAN_OS_REPORT(("Single Missed Beacon [Awake] = %d\n", (pElem->pwr.ContMissBcnsSpread[0] >> 16))); 610 WLAN_OS_REPORT(("2 Continuous Missed Beacons [Awake] = %d\n", (pElem->pwr.ContMissBcnsSpread[1] >> 16))); 611 WLAN_OS_REPORT(("3 Continuous Missed Beacons [Awake] = %d\n", (pElem->pwr.ContMissBcnsSpread[2] >> 16))); 612 WLAN_OS_REPORT(("4 Continuous Missed Beacons [Awake] = %d\n", (pElem->pwr.ContMissBcnsSpread[3] >> 16))); 613 WLAN_OS_REPORT(("5 Continuous Missed Beacons [Awake] = %d\n", (pElem->pwr.ContMissBcnsSpread[4] >> 16))); 614 WLAN_OS_REPORT(("6 Continuous Missed Beacons [Awake] = %d\n", (pElem->pwr.ContMissBcnsSpread[5] >> 16))); 615 WLAN_OS_REPORT(("7 Continuous Missed Beacons [Awake] = %d\n", (pElem->pwr.ContMissBcnsSpread[6] >> 16))); 616 WLAN_OS_REPORT(("8 Continuous Missed Beacons [Awake] = %d\n", (pElem->pwr.ContMissBcnsSpread[7] >> 16))); 617 WLAN_OS_REPORT(("9 Continuous Missed Beacons [Awake] = %d\n", (pElem->pwr.ContMissBcnsSpread[8] >> 16))); 618 WLAN_OS_REPORT((">=10 Continuous Missed Beacons [Awake] = %d\n", (pElem->pwr.ContMissBcnsSpread[9] >> 16))); 619 620 return TI_OK; 621 } 622 623 TI_STATUS TWD_Debug (TI_HANDLE hTWD, TI_UINT32 funcType, void *pParam) 624 { 625 TTwd *pTWD = (TTwd *)hTWD; 626 TI_UINT32 GenericVal; 627 TFwDebugParams* pMemDebug = (TFwDebugParams*)pParam; 628 629 static TI_UINT32 GenericAddr; 630 #ifdef REPORT_LOG 631 static int iStart[100]; /* Note: it is not used properly anyway */ 632 #endif 633 /* check paramemters validity */ 634 if (pMemDebug == NULL) 635 { 636 WLAN_OS_REPORT(("TWD_Debug: Error - pParam is NULL\n")); 637 return TI_NOK; 638 } 639 640 switch (funcType) 641 { 642 case TWD_PRINT_SYS_INFO: 643 WLAN_OS_REPORT(("PLATFORM = TNETW125x\n")); 644 WLAN_OS_REPORT(("ACCESS MODE = SLAVE\n")); 645 break; 646 647 case TWD_SET_GENERIC_ADDR: 648 /* check paramemters validity */ 649 if (pParam == NULL) 650 { 651 WLAN_OS_REPORT(("TWD_Debug, TWD_SET_GENERIC_ADDR Error: No Perameter received\n")); 652 return TI_NOK; 653 } 654 GenericAddr = *(TI_UINT32 *)pParam; 655 break; 656 657 case TWD_READ_MEM: 658 WLAN_OS_REPORT(("TWD_Debug, TWD_READ_MEM, Addr: 0x%X\n", pMemDebug->addr)); 659 660 /* check paramemters validity */ 661 if (pMemDebug == NULL) 662 { 663 WLAN_OS_REPORT(("TWD_Debug, TWD_READ_MEM Error: No Perameters received\n")); 664 return TI_NOK; 665 } 666 667 /* validate length */ 668 *(TI_UINT32*)&pMemDebug->length = 4; 669 670 /* If Address in valid Memory area and there is enough space for Length to R/W */ 671 if (TWD_isValidMemoryAddr(hTWD, pMemDebug) == TI_TRUE) 672 { 673 WLAN_OS_REPORT(("TWD_Debug, TWD_READ_MEM: Reading Valid memory Address\n")); 674 675 /* Init buf before reading */ 676 os_memorySet(pTWD->hOs, (void*)pMemDebug->UBuf.buf8, 0, 4); 677 if ( TWD_readMem (hTWD, pMemDebug, NULL, NULL) != TI_OK ) 678 { 679 WLAN_OS_REPORT(("TWD_Debug, read memory failed\n")); 680 return TI_NOK; 681 } 682 } 683 684 else if (TWD_isValidRegAddr(hTWD, pMemDebug) == TI_TRUE) 685 { 686 WLAN_OS_REPORT(("TWD_Debug, TWD_READ_MEM: Reading Valid register Address\n")); 687 688 /* Init buf before reading */ 689 *(TI_UINT32*)&pMemDebug->UBuf.buf32 = 0; 690 691 if ( TWD_readMem (hTWD, pMemDebug, NULL, NULL) != TI_OK ) 692 { 693 WLAN_OS_REPORT(("TWD_Debug, read register failed\n")); 694 return TI_NOK; 695 } 696 697 } 698 699 /* address Not in valid Area */ 700 else 701 { 702 WLAN_OS_REPORT(("TWD_Debug, TWD_READ_MEM Address is not Valid\n")); 703 return TI_NOK; 704 } 705 706 /* print read memory */ 707 { 708 709 WLAN_OS_REPORT(("Read from MEM Addr 0x%x the following values:\n", ((TFwDebugParams*)pMemDebug)->addr)); 710 711 WLAN_OS_REPORT(("0x%X ",((TFwDebugParams*)pMemDebug)->UBuf.buf32[0])); 712 WLAN_OS_REPORT(("\n")); 713 } 714 715 break; 716 717 case TWD_WRITE_MEM: 718 WLAN_OS_REPORT(("TWD_Debug, TWD_WRITE_MEM, Addr: 0x%X\n", pMemDebug->addr)); 719 720 /* check paramemters validity */ 721 if (pMemDebug == NULL) 722 { 723 WLAN_OS_REPORT(("TWD_Debug, TWD_WRITE_MEM Error: No Perameters received\n")); 724 return TI_NOK; 725 } 726 727 /* validate length */ 728 *(TI_UINT32*)&pMemDebug->length = 4; 729 730 /* If Address in valid Memory area and there is enough space for Length to R/W */ 731 if (TWD_isValidMemoryAddr(hTWD, pMemDebug) == TI_TRUE) 732 { 733 WLAN_OS_REPORT(("TWD_Debug, TWD_WRITE_MEM: Writing Valid memory Address\n")); 734 735 736 return ( TWD_writeMem (hTWD, pMemDebug, NULL, NULL) ); 737 } 738 739 else if (TWD_isValidRegAddr(hTWD, pMemDebug) == TI_TRUE) 740 { 741 742 WLAN_OS_REPORT(("TWD_Debug, TWD_WRITE_MEM: Writing Valid register Address\n")); 743 744 return ( TWD_writeMem (hTWD, pMemDebug, NULL, NULL) ); 745 } 746 /* address Not in valid Area */ 747 748 else 749 { 750 WLAN_OS_REPORT(("TWD_Debug, TWD_WRITE_MEM Address is not Valid\n")); 751 return TI_NOK; 752 } 753 754 break; 755 756 /* HAL Control functions */ 757 758 case TWD_PRINT_MBOX_QUEUE_INFO: 759 cmdQueue_Print (pTWD->hCmdQueue); 760 break; 761 762 case TWD_PRINT_MBOX_PRINT_CMD: 763 /* check paramemters validity */ 764 if (pParam == NULL) 765 { 766 WLAN_OS_REPORT(("TWD_Debug, TWD_PRINT_MBOX_PRINT_CMD Error: No Perameter received\n")); 767 return TI_NOK; 768 } 769 cmdQueue_PrintHistory (pTWD->hCmdQueue, *(int *)pParam); 770 break; 771 772 case TWD_PRINT_EVENT_MBOX_INFO: 773 eventMbox_Print (pTWD->hEventMbox); 774 break; 775 776 case TWD_PRINT_EVENT_MBOX_MASK: 777 /* check paramemters validity */ 778 if (pParam == NULL) 779 { 780 WLAN_OS_REPORT(("TWD_Debug, TWD_PRINT_EVENT_MBOX_MASK Error: No Perameter received\n")); 781 return TI_NOK; 782 } 783 if ( eventMbox_MaskEvent (pTWD->hEventMbox, *(int *)pParam, NULL, NULL) == TI_NOK ) 784 { 785 WLAN_OS_REPORT(("TWD_Debug, TWD_PRINT_EVENT_MBOX_MASK Error: eventMbox_EvMask failed\n")); 786 return(TI_NOK); 787 } 788 break; 789 790 case TWD_PRINT_EVENT_MBOX_UNMASK: 791 /* check paramemters validity */ 792 if (pParam == NULL) 793 { 794 WLAN_OS_REPORT(("TWD_Debug, TWD_PRINT_EVENT_MBOX_UNMASK Error: No Perameter received\n")); 795 return TI_NOK; 796 } 797 if ( eventMbox_UnMaskEvent (pTWD->hEventMbox, *(int *)pParam, NULL, NULL) == TI_NOK ) 798 { 799 WLAN_OS_REPORT(("TWD_Debug, TWD_PRINT_EVENT_MBOX_UNMASK Error: eventMbox_EvUnMask failed\n")); 800 return(TI_NOK); 801 } 802 break; 803 804 case TWD_PRINT_ISTART: 805 { 806 int i; 807 for (i=0; i<20; i+=4) 808 { 809 WLAN_OS_REPORT(("%4d: %08d %08d %08d %08d\n", 810 i, iStart[i+0], iStart[i+1], iStart[i+2], iStart[i+3])); 811 } 812 } 813 break; 814 815 case TWD_PRINT_LIST_REGS_THROG_MBOX: 816 { 817 int i; 818 TI_UINT32 RegAddr; 819 820 RegAddr = *(TI_UINT32 *)pParam; 821 WLAN_OS_REPORT (("PrintListRegsThroughMbox ---------------------\n")); 822 823 for (i = 0; i < 8; i++, RegAddr += 16) 824 { 825 TWD_PrintMemRegs (hTWD, RegAddr + 0, 4, TNETW_MAC_REGISTERS); 826 TWD_PrintMemRegs (hTWD, RegAddr + 4, 4, TNETW_MAC_REGISTERS); 827 TWD_PrintMemRegs (hTWD, RegAddr + 8, 4, TNETW_MAC_REGISTERS); 828 TWD_PrintMemRegs (hTWD, RegAddr + 12, 4, TNETW_MAC_REGISTERS); 829 } 830 } 831 break; 832 833 case TWD_PRINT_LIST_MEM_THROG_MBOX: 834 /* check paramemters validity */ 835 if (pParam == NULL) 836 { 837 WLAN_OS_REPORT(("TWD_Debug, TWD_PRINT_LIST_MEM_THROG_MBOX Error: No Perameter received\n")); 838 return TI_NOK; 839 } 840 TWD_PrintMemRegs (hTWD, *(TI_UINT32*)pParam, 256, TNETW_INTERNAL_RAM); 841 break; 842 843 case TWD_SET_MAC_CLOCK: 844 /* check paramemters validity */ 845 if (pParam == NULL) 846 { 847 WLAN_OS_REPORT(("TWD_Debug, TWD_SET_MAC_CLOCK Error: No Perameter received\n")); 848 return TI_NOK; 849 } 850 851 GenericVal = *(TI_UINT32*)pParam; 852 TWD_CfgMacClock (hTWD, GenericVal); 853 break; 854 855 #if defined(TNETW1150) 856 case TWD_SET_ARM_CLOCK: 857 /* check paramemters validity */ 858 if (pParam == NULL) 859 { 860 WLAN_OS_REPORT(("TWD_Debug, TWD_SET_ARM_CLOCK Error: No Perameter received\n")); 861 return TI_NOK; 862 } 863 864 GenericVal = *(TI_UINT32*)pParam; 865 TWD_ArmClockSet (hTWD, GenericVal); 866 break; 867 #endif 868 869 /* 870 * Rx functions 871 */ 872 #ifdef TI_DBG 873 case TWD_PRINT_RX_INFO: 874 rxXfer_PrintStats (pTWD->hRxXfer); 875 break; 876 877 case TWD_CLEAR_RX_INFO: 878 rxXfer_ClearStats (pTWD->hRxXfer); 879 break; 880 881 #endif /* TI_DBG */ 882 883 /* 884 * Acx functions 885 */ 886 case TWD_PRINT_ACX_MAP: 887 TWD_PrintMemoryMap (hTWD); 888 break; 889 890 case TWD_PRINT_ACX_STAT: 891 TWD_ItrStatistics (hTWD, (void*)TWD_StatisticsReadCB, hTWD, (void *)&pTWD->acxStatistic); 892 break; 893 894 /* 895 * General functions 896 */ 897 case TWD_PRINT_HELP: 898 899 WLAN_OS_REPORT(("Registers: \n")); 900 WLAN_OS_REPORT((" %02d - TWD_PRINT_SYS_INFO \n\n", TWD_PRINT_SYS_INFO)); 901 WLAN_OS_REPORT((" %02d - TWD_SET_GENERIC_ADDR \n", TWD_SET_GENERIC_ADDR)); 902 WLAN_OS_REPORT((" %02d - TWD_READ_REG_OR_4_BYTES_MEM <addr (reg base=0x300000, mem base=0x40000)>\n", TWD_READ_MEM)); 903 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)); 904 905 WLAN_OS_REPORT(("Control: \n")); 906 WLAN_OS_REPORT((" %02d - TWD_PRINT_MBOX_QUEUE_INFO \n",TWD_PRINT_MBOX_QUEUE_INFO)); 907 WLAN_OS_REPORT((" %02d - TWD_PRINT_MBOX_QUEUE_PRINT_CMD \n",TWD_PRINT_MBOX_PRINT_CMD)); 908 WLAN_OS_REPORT((" %02d - TWD_MAILBOX_HISTORY_PRINT \n", TWD_MAILBOX_HISTORY_PRINT)); 909 WLAN_OS_REPORT((" %02d - TWD_MAC_REG \n", TWD_MAC_REG)); 910 WLAN_OS_REPORT((" %02d - TWD_SET_ARM_CLOCK \n", TWD_SET_ARM_CLOCK)); 911 WLAN_OS_REPORT((" %02d - TWD_SET_MAC_CLOCK \n", TWD_SET_MAC_CLOCK)); 912 913 WLAN_OS_REPORT(("Rx: \n")); 914 WLAN_OS_REPORT((" %02d - TWD_PRINT_RX_INFO \n", TWD_PRINT_RX_INFO)); 915 WLAN_OS_REPORT((" %02d - TWD_CLEAR_RX_INFO \n", TWD_CLEAR_RX_INFO)); 916 917 WLAN_OS_REPORT(("ACX: \n")); 918 WLAN_OS_REPORT((" %02d - TWD_PRINT_ACX_MAP \n", TWD_PRINT_ACX_MAP)); 919 WLAN_OS_REPORT((" %02d - TWD_PRINT_ACX_STAT \n", TWD_PRINT_ACX_STAT)); 920 921 WLAN_OS_REPORT(("General: \n")); 922 WLAN_OS_REPORT((" %02d - TWD_PRINT_LIST_REGS_THROG_MBOX \n", TWD_PRINT_LIST_REGS_THROG_MBOX)); 923 WLAN_OS_REPORT((" %02d - TWD_PRINT_LIST_MEM_THROG_MBOX \n", TWD_PRINT_LIST_MEM_THROG_MBOX)); 924 925 WLAN_OS_REPORT(("Recovery: \n")); 926 WLAN_OS_REPORT((" %02d - TWD_CHECK_HW \n", TWD_CHECK_HW)); 927 WLAN_OS_REPORT((" %02d - TWD_PRINT_HW_STATUS \n", TWD_PRINT_HW_STATUS)); 928 929 WLAN_OS_REPORT(("Event Mail Box: \n")); 930 WLAN_OS_REPORT((" %02d - PRINT EVENT MBOX INFO \n", TWD_PRINT_EVENT_MBOX_INFO)); 931 WLAN_OS_REPORT((" %02d - PRINT EVENT MBOX MASK \n", TWD_PRINT_EVENT_MBOX_MASK)); 932 WLAN_OS_REPORT((" %02d - PRINT EVENT MBOX UNMASK \n",TWD_PRINT_EVENT_MBOX_UNMASK)); 933 934 WLAN_OS_REPORT(("Other: \n")); 935 WLAN_OS_REPORT((" %02d - TWD_PRINT_FW_EVENT_INFO \n", TWD_PRINT_FW_EVENT_INFO)); 936 WLAN_OS_REPORT((" %02d - TWD_PRINT_TW_IF_INFO \n", TWD_PRINT_TW_IF_INFO)); 937 WLAN_OS_REPORT((" %02d - TWD_PRINT_MBOX_INFO \n", TWD_PRINT_MBOX_INFO)); 938 WLAN_OS_REPORT((" %02d - TWD_FORCE_TEMPLATES_RATES \n", TWD_FORCE_TEMPLATES_RATES)); 939 break; 940 941 case TWD_PRINT_FW_EVENT_INFO: 942 fwEvent_PrintStat(pTWD->hFwEvent); 943 break; 944 case TWD_PRINT_TW_IF_INFO: 945 twIf_PrintQueues(pTWD->hTwIf); 946 break; 947 case TWD_PRINT_MBOX_INFO: 948 cmdMbox_PrintInfo(pTWD->hCmdMbox); 949 break; 950 951 /* 952 * Recovery functions 953 */ 954 case TWD_CHECK_HW: 955 { 956 int Stt; 957 958 Stt = TWD_CmdHealthCheck (hTWD); 959 WLAN_OS_REPORT(("CheckHwStatus=%d \n", Stt)); 960 } 961 break; 962 963 case TWD_MAILBOX_HISTORY_PRINT: 964 WLAN_OS_REPORT (("PrintMailBoxHistory called \n")); 965 #ifdef TI_DBG 966 /* check paramemters validity */ 967 if (pParam == NULL) 968 { 969 WLAN_OS_REPORT(("TWD_Debug, TWD_MAILBOX_HISTORY_PRINT Error: No Perameter received\n")); 970 return TI_NOK; 971 } 972 973 cmdQueue_PrintHistory (pTWD->hCmdQueue, *(int *)pParam); 974 #endif 975 break; 976 977 case TWD_FORCE_TEMPLATES_RATES: 978 if (pParam == NULL) 979 { 980 WLAN_OS_REPORT(("TWD_Debug, TWD_FORCE_TEMPLATES_RATES Error: No Perameter received\n")); 981 return TI_NOK; 982 } 983 cmdBld_DbgForceTemplatesRates (pTWD->hCmdBld, *(TI_UINT32 *)pParam); 984 break; 985 986 987 default: 988 WLAN_OS_REPORT (("Invalid function type=%d\n\n", funcType)); 989 break; 990 991 } /* switch (funcType) */ 992 993 return TI_OK; 994 } 995 996