summaryrefslogtreecommitdiff
path: root/wilink_6_1/Test/fwdriverdebug.c
diff options
context:
space:
mode:
Diffstat (limited to 'wilink_6_1/Test/fwdriverdebug.c')
-rw-r--r--wilink_6_1/Test/fwdriverdebug.c398
1 files changed, 398 insertions, 0 deletions
diff --git a/wilink_6_1/Test/fwdriverdebug.c b/wilink_6_1/Test/fwdriverdebug.c
new file mode 100644
index 0000000..c7f1ba3
--- /dev/null
+++ b/wilink_6_1/Test/fwdriverdebug.c
@@ -0,0 +1,398 @@
+/*
+ * fwdriverdebug.c
+ *
+ * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name Texas Instruments nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+/***************************************************************************/
+/* */
+/* MODULE: FW_debug.c */
+/* PURPOSE: FW debug implementation */
+/* */
+/***************************************************************************/
+#include "tidef.h"
+#include "DrvMain.h"
+#include "CmdQueue_api.h"
+#include "debug.h"
+#include "connDebug.h"
+#include "siteMgrDebug.h"
+#include "dataCtrlDbg.h"
+#include "rsnDbg.h"
+#include "osApi.h"
+#include "report.h"
+#include "qosMngrDbg.h"
+#include "PowerMgrDebug.h"
+#include "roamingMgrDebug.h"
+#include "scanCncnDbg.h"
+#include "ScanMngrDbg.h"
+#include "scrDbg.h"
+#include "SoftGeminiDbg.h"
+#include "HealthMonitorDbg.h"
+#include "smeDebug.h"
+#include "TWDriver.h"
+#include "CmdBld.h"
+#include "commonTypes.h"
+#include "siteHash.h"
+#include "txCtrl.h"
+#include "802_11Defs.h"
+#include "fwdriverdebug.h"
+#include "mlmeBuilder.h"
+#include "Ethernet.h"
+
+static TI_HANDLE dTimer;
+static TI_HANDLE tmp_hMlme;
+static TI_HANDLE tmp_hTWD;
+static TI_HANDLE tmp_hTxCtrl;
+static TI_BOOL SendFlag = 0;
+static TI_BOOL bSendDataPkt;
+static volatile TI_UINT32 numOfPackets;
+static volatile TI_UINT8 infinitLoopFl = 0;
+static TI_UINT32 packetsNum;
+static TI_UINT32 packetLength;
+
+typedef TI_STATUS (*TCmdCfgFuncB) (TI_HANDLE);
+
+extern TI_STATUS cmdBld_CmdJoinBss (TI_HANDLE hCmdBld, TJoinBss *pJoinBssParams, void *fCb, TI_HANDLE hCb);
+void sendMgmtPacket (TI_HANDLE hOs);
+void sendDataPacket (TI_HANDLE hOs);
+
+void FWDebugFunction(TI_HANDLE hDrvMain,
+ TI_HANDLE hOs,
+ TI_HANDLE hTWD,
+ TI_HANDLE hMlme,
+ TI_HANDLE hTxMgmtQ,
+ TI_HANDLE hTxCtrl,
+ unsigned long funcType,
+ void *pParam)
+{
+ tmp_hMlme = hMlme;
+ tmp_hTWD = hTWD;
+ tmp_hTxCtrl = hTxCtrl;
+
+ switch (funcType)
+ {
+ case DBG_FW_PRINT_HELP:
+ printFWDbgFunctions();
+ break;
+ case DBG_FW_SEND_GENERAL_TEST_CMD:
+ FW_debugSendGeneralTestCmd(hTWD, pParam);
+ break;
+ case DBG_FW_IBSS_CONNECTION:
+ FW_DebugSendJoinCommand(hTWD, hTxMgmtQ);
+ break;
+ case DBG_FW_SEND_MGMT_PACKET:
+ bSendDataPkt = TI_FALSE;
+ FW_DebugSendPacket(hDrvMain, hOs, hTxMgmtQ, pParam);
+ break;
+ case DBG_FW_SEND_DATA_PACKET:
+ bSendDataPkt = TI_TRUE;
+ FW_DebugSendPacket(hDrvMain, hOs, hTxMgmtQ, pParam);
+ break;
+ case DBG_FW_START_LOOPBACK:
+ FW_DebugStartLoopBack (hDrvMain, hTWD);
+ break;
+ case DBG_FW_STOP_LOOPBACK:
+ FW_DebugStopLoopBack (hDrvMain, hTWD);
+ break;
+ case DBG_FW_INFINIT_SEND:
+ FW_DebugInfinitSendPacket (hDrvMain, hTWD);
+ break;
+
+ case DBG_FW_GENERAL:
+ FW_DebugGeneral (hTWD, pParam);
+ break;
+ default:
+ break;
+
+
+ }
+}
+
+void printFWDbgFunctions(void)
+{
+ WLAN_OS_REPORT((" FW Debug Functions \n"));
+ WLAN_OS_REPORT(("---------------------------------------------------\n"));
+ WLAN_OS_REPORT(("2200 - Print the FW Debug Help \n"));
+ WLAN_OS_REPORT(("2201 - Send General Test Command \n"));
+ WLAN_OS_REPORT(("2202 - create IBSS connection \n"));
+ WLAN_OS_REPORT(("2203[n] - Send n<=999 Packets \n"));
+ WLAN_OS_REPORT(("2205 - Start LoopBack \n"));
+ WLAN_OS_REPORT(("2206 - Stop LoopBack \n"));
+}
+
+
+void FW_debugSendGeneralTestCmd(TI_HANDLE hTWD, void *pParam)
+{
+ TTwd *pTWD = (TTwd *)hTWD;
+ FWDebugTestCmdParamter_t Cfg;
+ unsigned char Len;
+ Len = *(unsigned char *)pParam;
+
+ os_memoryCopy(pTWD->hOs, Cfg.buf,(unsigned long*)pParam + sizeof(TI_UINT8),Len * 4 );
+
+ Cfg.len = Len;
+
+ /* Set information element header */
+ Cfg.EleHdr.id = CMD_TEST;
+ Cfg.EleHdr.len = sizeof(Cfg) - sizeof(EleHdrStruct);
+
+ cmdQueue_SendCommand (pTWD->hCmdQueue, CMD_CONFIGURE, (void*)&Cfg, sizeof(Cfg), NULL, NULL, NULL);
+}
+
+void FW_DebugSendJoinCommand(TI_HANDLE hTWD, TI_HANDLE hTxMgmtQ)
+{
+ TTwd *pTWD = (TTwd *)hTWD;
+ TCmdBld *pCmdBld = (TCmdBld *)(pTWD->hCmdBld);
+ TI_STATUS res;
+ TJoinBss JoinBss;
+ char ssid[10];
+ unsigned char Bssid[6] = {0x0,0x12,0x43,0xad,0xe5,0x10};
+
+ os_memoryCopy(pTWD->hOs,ssid,"ronit",5);
+
+ JoinBss.basicRateSet = DRV_RATE_2M;
+ JoinBss.radioBand = RADIO_BAND_2_4_GHZ;
+ JoinBss.pBSSID = Bssid;
+
+ JoinBss.bssType = BSS_INDEPENDENT;
+ JoinBss.pSSID =ssid;
+ JoinBss.ssidLength = 5;
+ JoinBss.channel = 1;
+ JoinBss.beaconInterval = 100;
+ JoinBss.dtimInterval = 2;
+
+ pCmdBld->hReport = pTWD->hReport;
+ pCmdBld->tDb.bss.BssId[0] = 0x0;
+ pCmdBld->tDb.bss.BssId[1] = 0x12;
+ pCmdBld->tDb.bss.BssId[2] = 0x43;
+ pCmdBld->tDb.bss.BssId[3] = 0xad;
+ pCmdBld->tDb.bss.BssId[4] = 0xe5;
+ pCmdBld->tDb.bss.BssId[5] = 0x10;
+ pCmdBld->tDb.bss.RadioChannel = 1;
+
+ txMgmtQ_SetConnState(hTxMgmtQ,TX_CONN_STATE_MGMT);
+
+ res = cmdBld_CmdJoinBss (pCmdBld,
+ &JoinBss,
+ NULL,//cmdBld_ConfigSeq,
+ NULL);//pTWD->hCmdBld
+
+ if (res)
+ {
+ os_printf("\n failed to make IBSS connection\n");
+ }
+
+ os_printf("\n res = %d\n", res);
+
+ txMgmtQ_SetConnState(hTxMgmtQ, TX_CONN_STATE_MGMT);
+
+}
+
+
+void sendDataPacket (TI_HANDLE hOs)
+{
+ TI_UINT32 i;
+ TTxCtrlBlk * pPktCtrlBlk;
+ TI_UINT8 * pPktBuf;
+ TEthernetHeader tEthHeader;
+ char SrcBssid[6] = {0x88,0x88,0x88,0x88,0x88,0x88};
+ char DesBssid[6] = {0x22,0x22,0x22,0x22,0x22,0x22};
+
+ /* Allocate a TxCtrlBlk for the Tx packet and save timestamp, length and packet handle */
+ pPktCtrlBlk = TWD_txCtrlBlk_Alloc (tmp_hTWD);
+ pPktCtrlBlk->tTxDescriptor.startTime = os_timeStampMs (hOs);
+ pPktCtrlBlk->tTxDescriptor.length = (TI_UINT16)packetLength + ETHERNET_HDR_LEN;
+ pPktCtrlBlk->tTxDescriptor.tid = 0;
+ pPktCtrlBlk->tTxPktParams.uPktType = TX_PKT_TYPE_ETHER;
+
+ /* Allocate buffer with headroom for getting the IP header in a 4-byte aligned address */
+ pPktBuf = txCtrl_AllocPacketBuffer (tmp_hTxCtrl, pPktCtrlBlk, packetLength + ETHERNET_HDR_LEN + 2);
+
+ /* Prepare Ethernet header */
+ tEthHeader.type = HTOWLANS(ETHERTYPE_IP);
+ MAC_COPY (tEthHeader.src, SrcBssid);
+ MAC_COPY (tEthHeader.dst, DesBssid);
+ os_memoryCopy (hOs, pPktBuf + 2, &tEthHeader, ETHERNET_HDR_LEN);
+
+ /* Build BDL */
+ BUILD_TX_TWO_BUF_PKT_BDL (pPktCtrlBlk,
+ pPktBuf + 2,
+ ETHERNET_HDR_LEN,
+ pPktBuf + 2 + ETHERNET_HDR_LEN,
+ packetLength)
+
+ /* Fill data buffer with incremented numbers */
+ for (i = 0; i < packetLength; i++)
+ {
+ *(pPktBuf + 2 + ETHERNET_HDR_LEN + i) = i;
+ }
+
+ /* Send Ether packet to TxCtrl */
+ txCtrl_XmitData (tmp_hTxCtrl, pPktCtrlBlk);
+}
+
+
+
+void sendMgmtPacket(TI_HANDLE hOs)
+{
+ static TI_UINT8 aMsg[2000];
+ TI_UINT32 i;
+ dot11MgmtSubType_e eMsgType = DE_AUTH;
+
+ for (i = 0; i < packetLength; i++)
+ {
+ aMsg[i] = i;
+ }
+
+ mlmeBuilder_sendFrame(tmp_hMlme, eMsgType, aMsg, packetLength, 0);
+
+ numOfPackets++;
+ if ((infinitLoopFl == 0) && (numOfPackets > packetsNum))
+ {
+ os_timerStop(hOs, dTimer);
+ os_printf("\n *********** Last Packet was sent **********");
+ os_timerDestroy(hOs, dTimer);
+ }
+ else
+ {
+ os_timerStart(hOs, dTimer, 1000);
+ }
+}
+
+void FW_DebugSendPacket(TI_HANDLE hDrvMain ,TI_HANDLE hOs, TI_HANDLE hTxMgmtQ, void *pParam)
+{
+ void *fSendPkt;
+
+ if ( pParam == NULL )
+ {
+ os_printf("\nFW_DebugSendPacket Error: received NULL parameter\n");
+ return;
+ }
+
+ /* Open Tx path for all packet types */
+ txMgmtQ_SetConnState (hTxMgmtQ, TX_CONN_STATE_MGMT);
+ txMgmtQ_SetConnState (hTxMgmtQ, TX_CONN_STATE_EAPOL);
+ txMgmtQ_SetConnState (hTxMgmtQ, TX_CONN_STATE_OPEN);
+
+ infinitLoopFl = 0;
+ numOfPackets = 1;
+ packetsNum = 1;
+ packetLength = *(TI_UINT32*)pParam;
+ os_printf("\nFW_DebugSendPacket: packetsNum = %d, packetLength = %d\n",packetsNum, packetLength);
+ fSendPkt = bSendDataPkt ? sendDataPacket : sendMgmtPacket;
+ dTimer = os_timerCreate(hOs, fSendPkt, hDrvMain);
+ os_timerStart(hOs, dTimer, 1000);
+
+ SendFlag = TI_TRUE;
+}
+
+void FW_DebugInfinitSendPacket(TI_HANDLE hDrvMain ,TI_HANDLE hOs)
+{
+ infinitLoopFl = 1;
+ numOfPackets = 1;
+
+ dTimer = os_timerCreate(hOs, sendMgmtPacket, hDrvMain);
+ os_timerStart(hOs, dTimer, 1000);
+ SendFlag = TI_TRUE;
+}
+
+void FW_DebugStartLoopBack (TI_HANDLE hDrvMain, TI_HANDLE hTWD)
+{
+ TTwd *pTWD = (TTwd *)hTWD;
+ TTestCmd Plt;
+
+ Plt.testCmdId = TEST_CMD_LOOPBACK_START;
+ os_printf("\n send loopback start command");
+ cmdQueue_SendCommand (pTWD->hCmdQueue, CMD_TEST, (char*)&Plt, sizeof(Plt), NULL, NULL, NULL);
+}
+
+
+void FW_DebugStopLoopBack (TI_HANDLE hDrvMain, TI_HANDLE hTWD)
+{
+ TTwd *pTWD = (TTwd *)hTWD;
+ TTestCmd Plt;
+
+ Plt.testCmdId = TEST_CMD_LOOPBACK_STOP;
+ os_printf("\n send loopback stop command");
+ cmdQueue_SendCommand (pTWD->hCmdQueue, CMD_TEST, (char*)&Plt, sizeof(Plt), NULL, NULL, NULL);
+}
+
+
+void FW_DebugGeneral(TI_HANDLE hTWD, void *pParam)
+{
+ TTwd *pTWD = (TTwd *)hTWD;
+ TI_UINT32 size = *((TI_UINT32*) pParam) + sizeof(TI_UINT32);
+
+ cmdQueue_SendCommand (pTWD->hCmdQueue, CMD_DEBUG, (char*)pParam, size, NULL, NULL, NULL);
+}
+
+
+/*
+void FW_ComparePacket (char *buf)
+ {
+ char *ptemp;
+ int i;
+
+ if (SendFlag)
+ {
+ ptemp = CompBuf;
+ os_printf("\n print before compare save buf");
+ os_printf("\n");
+ for (i=0;i<Len;i++) {
+ os_printf(" 0x%02x ",*ptemp++);
+ if (i %5 == 0) { os_printf("\n");
+ }
+
+ }
+
+ os_printf("\n print before compare recived packet");
+ ptemp = buf;
+ os_printf("\n");
+ for (i=0;i<Len;i++) {
+ os_printf(" 0x%02x ",*ptemp++);
+ if (i %5 == 0) {
+ }
+
+ }
+
+
+ if(memcmp(CompBuf,buf,Len))
+ os_printf("\n LoopBack Packet failed");
+ else
+ os_printf("\n LoopBack Packet success");
+
+ SendFlag = TI_FALSE;
+ }
+
+ }
+*/
+
+