• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * fwdriverdebug.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 
35 /***************************************************************************/
36 /*                                                                         */
37 /*    MODULE:   FW_debug.c                                                 */
38 /*    PURPOSE:  FW debug implementation                                    */
39 /*                                                                         */
40 /***************************************************************************/
41 #include "tidef.h"
42 #include "DrvMain.h"
43 #include "CmdQueue_api.h"
44 #include "debug.h"
45 #include "connDebug.h"
46 #include "siteMgrDebug.h"
47 #include "dataCtrlDbg.h"
48 #include "rsnDbg.h"
49 #include "osApi.h"
50 #include "report.h"
51 #include "qosMngrDbg.h"
52 #include "PowerMgrDebug.h"
53 #include "roamingMgrDebug.h"
54 #include "scanCncnDbg.h"
55 #include "ScanMngrDbg.h"
56 #include "scrDbg.h"
57 #include "SoftGeminiDbg.h"
58 #include "HealthMonitorDbg.h"
59 #include "smeDebug.h"
60 #include "TWDriver.h"
61 #include "CmdBld.h"
62 #include "commonTypes.h"
63 #include "siteHash.h"
64 #include "txCtrl.h"
65 #include "802_11Defs.h"
66 #include "fwdriverdebug.h"
67 #include "mlmeBuilder.h"
68 #include "Ethernet.h"
69 
70 static TI_HANDLE dTimer;
71 static TI_HANDLE tmp_hMlme;
72 static TI_HANDLE tmp_hTWD;
73 static TI_HANDLE tmp_hTxCtrl;
74 static TI_BOOL SendFlag = 0;
75 static TI_BOOL bSendDataPkt;
76 static volatile TI_UINT32 numOfPackets;
77 static volatile TI_UINT8 infinitLoopFl = 0;
78 static TI_UINT32 packetsNum;
79 static TI_UINT32 packetLength;
80 
81 typedef TI_STATUS (*TCmdCfgFuncB) (TI_HANDLE);
82 
83 extern TI_STATUS cmdBld_CmdJoinBss (TI_HANDLE hCmdBld, TJoinBss *pJoinBssParams, void *fCb, TI_HANDLE hCb);
84 void sendMgmtPacket (TI_HANDLE hOs);
85 void sendDataPacket (TI_HANDLE hOs);
86 
FWDebugFunction(TI_HANDLE hDrvMain,TI_HANDLE hOs,TI_HANDLE hTWD,TI_HANDLE hMlme,TI_HANDLE hTxMgmtQ,TI_HANDLE hTxCtrl,unsigned long funcType,void * pParam)87 void FWDebugFunction(TI_HANDLE hDrvMain,
88 					 TI_HANDLE hOs,
89 					 TI_HANDLE hTWD,
90 					 TI_HANDLE hMlme,
91 					 TI_HANDLE hTxMgmtQ,
92 					 TI_HANDLE hTxCtrl,
93 					 unsigned long funcType,
94 					 void *pParam)
95 {
96 	tmp_hMlme   = hMlme;
97     tmp_hTWD    = hTWD;
98     tmp_hTxCtrl = hTxCtrl;
99 
100 	switch (funcType)
101 	{
102 	case DBG_FW_PRINT_HELP:
103 		 printFWDbgFunctions();
104 		 break;
105 	case DBG_FW_SEND_GENERAL_TEST_CMD:
106 		 FW_debugSendGeneralTestCmd(hTWD, pParam);
107 		 break;
108 	case DBG_FW_IBSS_CONNECTION:
109 		 FW_DebugSendJoinCommand(hTWD, hTxMgmtQ);
110 		 break;
111 	case DBG_FW_SEND_MGMT_PACKET:
112          bSendDataPkt = TI_FALSE;
113 		 FW_DebugSendPacket(hDrvMain, hOs, hTxMgmtQ, pParam);
114 		 break;
115     case DBG_FW_SEND_DATA_PACKET:
116          bSendDataPkt = TI_TRUE;
117 		 FW_DebugSendPacket(hDrvMain, hOs, hTxMgmtQ, pParam);
118 		 break;
119 	case DBG_FW_START_LOOPBACK:
120 		 FW_DebugStartLoopBack (hDrvMain, hTWD);
121 		 break;
122 	case DBG_FW_STOP_LOOPBACK:
123 		 FW_DebugStopLoopBack (hDrvMain, hTWD);
124 		 break;
125 	case DBG_FW_INFINIT_SEND:
126 		 FW_DebugInfinitSendPacket (hDrvMain, hTWD);
127 		 break;
128 
129 	case DBG_FW_GENERAL:
130 		 FW_DebugGeneral (hTWD, pParam);
131 		 break;
132 	default:
133 		break;
134 
135 
136  }
137 }
138 
printFWDbgFunctions(void)139 void printFWDbgFunctions(void)
140 {
141     WLAN_OS_REPORT(("    FW Debug Functions     	          	\n"));
142     WLAN_OS_REPORT(("---------------------------------------------------\n"));
143     WLAN_OS_REPORT(("2200 		- Print the FW Debug Help		\n"));
144     WLAN_OS_REPORT(("2201 		- Send General Test Command 	\n"));
145     WLAN_OS_REPORT(("2202 		- create IBSS connection   	 	\n"));
146     WLAN_OS_REPORT(("2203[n] 	- Send n<=999 Packets           \n"));
147     WLAN_OS_REPORT(("2205 		- Start LoopBack            	\n"));
148     WLAN_OS_REPORT(("2206 		- Stop LoopBack             	\n"));
149 }
150 
151 
FW_debugSendGeneralTestCmd(TI_HANDLE hTWD,void * pParam)152 void FW_debugSendGeneralTestCmd(TI_HANDLE hTWD, void *pParam)
153 {
154 	TTwd     *pTWD = (TTwd *)hTWD;
155 	FWDebugTestCmdParamter_t Cfg;
156 	unsigned char Len;
157 	Len = *(unsigned char *)pParam;
158 
159 	os_memoryCopy(pTWD->hOs, Cfg.buf,(unsigned long*)pParam + sizeof(TI_UINT8),Len * 4 );
160 
161 	Cfg.len = Len;
162 
163 	/* Set information element header */
164 	Cfg.EleHdr.id = CMD_TEST;
165 	Cfg.EleHdr.len = sizeof(Cfg) - sizeof(EleHdrStruct);
166 
167     cmdQueue_SendCommand (pTWD->hCmdQueue, CMD_CONFIGURE, (void*)&Cfg, sizeof(Cfg), NULL, NULL, NULL);
168 }
169 
FW_DebugSendJoinCommand(TI_HANDLE hTWD,TI_HANDLE hTxMgmtQ)170 void FW_DebugSendJoinCommand(TI_HANDLE hTWD, TI_HANDLE hTxMgmtQ)
171 {
172 	TTwd     *pTWD = (TTwd *)hTWD;
173 	TCmdBld  *pCmdBld = (TCmdBld *)(pTWD->hCmdBld);
174 	TI_STATUS res;
175 	TJoinBss  JoinBss;
176 	char ssid[10];
177 	unsigned char Bssid[6] = {0x0,0x12,0x43,0xad,0xe5,0x10};
178 
179 	os_memoryCopy(pTWD->hOs,ssid,"ronit",5);
180 
181 	JoinBss.basicRateSet = DRV_RATE_2M;
182 	JoinBss.radioBand = RADIO_BAND_2_4_GHZ;
183 	JoinBss.pBSSID = Bssid;
184 
185 	JoinBss.bssType = BSS_INDEPENDENT;
186 	JoinBss.pSSID =ssid;
187 	JoinBss.ssidLength = 5;
188 	JoinBss.channel = 1;
189 	JoinBss.beaconInterval = 100;
190 	JoinBss.dtimInterval = 2;
191 
192 	pCmdBld->hReport = pTWD->hReport;
193 	pCmdBld->tDb.bss.BssId[0] = 0x0;
194 	pCmdBld->tDb.bss.BssId[1] = 0x12;
195 	pCmdBld->tDb.bss.BssId[2] = 0x43;
196 	pCmdBld->tDb.bss.BssId[3] = 0xad;
197 	pCmdBld->tDb.bss.BssId[4] = 0xe5;
198 	pCmdBld->tDb.bss.BssId[5] = 0x10;
199 	pCmdBld->tDb.bss.RadioChannel = 1;
200 
201 	txMgmtQ_SetConnState(hTxMgmtQ,TX_CONN_STATE_MGMT);
202 
203 	res = cmdBld_CmdJoinBss  (pCmdBld,
204 							  &JoinBss,
205 							  NULL,//cmdBld_ConfigSeq,
206 							  NULL);//pTWD->hCmdBld
207 
208 	if (res)
209 	{
210 		os_printf("\n failed to make IBSS connection\n");
211 	}
212 
213 	os_printf("\n res = %d\n", res);
214 
215 	txMgmtQ_SetConnState(hTxMgmtQ, TX_CONN_STATE_MGMT);
216 
217 }
218 
219 
sendDataPacket(TI_HANDLE hOs)220 void sendDataPacket (TI_HANDLE hOs)
221 {
222     TI_UINT32       i;
223 	TTxCtrlBlk *    pPktCtrlBlk;
224     TI_UINT8 *      pPktBuf;
225     TEthernetHeader tEthHeader;
226 	char SrcBssid[6] = {0x88,0x88,0x88,0x88,0x88,0x88};
227 	char DesBssid[6] = {0x22,0x22,0x22,0x22,0x22,0x22};
228 
229 	/* Allocate a TxCtrlBlk for the Tx packet and save timestamp, length and packet handle */
230     pPktCtrlBlk = TWD_txCtrlBlk_Alloc (tmp_hTWD);
231     pPktCtrlBlk->tTxDescriptor.startTime = os_timeStampMs (hOs);
232     pPktCtrlBlk->tTxDescriptor.length    = (TI_UINT16)packetLength + ETHERNET_HDR_LEN;
233     pPktCtrlBlk->tTxDescriptor.tid       = 0;
234     pPktCtrlBlk->tTxPktParams.uPktType   = TX_PKT_TYPE_ETHER;
235 
236     /* Allocate buffer with headroom for getting the IP header in a 4-byte aligned address */
237     pPktBuf = txCtrl_AllocPacketBuffer (tmp_hTxCtrl, pPktCtrlBlk, packetLength + ETHERNET_HDR_LEN + 2);
238 
239     /* Prepare Ethernet header */
240     tEthHeader.type = HTOWLANS(ETHERTYPE_IP);
241     MAC_COPY (tEthHeader.src, SrcBssid);
242     MAC_COPY (tEthHeader.dst, DesBssid);
243     os_memoryCopy (hOs, pPktBuf + 2, &tEthHeader, ETHERNET_HDR_LEN);
244 
245     /* Build BDL */
246     BUILD_TX_TWO_BUF_PKT_BDL (pPktCtrlBlk,
247                               pPktBuf + 2,
248                               ETHERNET_HDR_LEN,
249                               pPktBuf + 2 + ETHERNET_HDR_LEN,
250                               packetLength)
251 
252     /* Fill data buffer with incremented numbers */
253     for (i = 0; i < packetLength; i++)
254     {
255         *(pPktBuf + 2 + ETHERNET_HDR_LEN + i) = i;
256     }
257 
258     /* Send Ether packet to TxCtrl */
259     txCtrl_XmitData (tmp_hTxCtrl, pPktCtrlBlk);
260 }
261 
262 
263 
sendMgmtPacket(TI_HANDLE hOs)264 void sendMgmtPacket(TI_HANDLE hOs)
265 {
266     static TI_UINT8     aMsg[2000];
267     TI_UINT32           i;
268     dot11MgmtSubType_e  eMsgType = DE_AUTH;
269 
270     for (i = 0; i < packetLength; i++)
271     {
272         aMsg[i] = i;
273     }
274 
275     mlmeBuilder_sendFrame(tmp_hMlme, eMsgType, aMsg, packetLength, 0);
276 
277     numOfPackets++;
278     if ((infinitLoopFl == 0) && (numOfPackets > packetsNum))
279     {
280         os_timerStop(hOs, dTimer);
281         os_printf("\n *********** Last Packet was sent **********");
282         os_timerDestroy(hOs, dTimer);
283     }
284     else
285     {
286         os_timerStart(hOs, dTimer, 1000);
287     }
288 }
289 
FW_DebugSendPacket(TI_HANDLE hDrvMain,TI_HANDLE hOs,TI_HANDLE hTxMgmtQ,void * pParam)290 void FW_DebugSendPacket(TI_HANDLE hDrvMain ,TI_HANDLE hOs, TI_HANDLE hTxMgmtQ, void *pParam)
291 {
292     void *fSendPkt;
293 
294 	if ( pParam == NULL )
295 	{
296         os_printf("\nFW_DebugSendPacket Error: received NULL parameter\n");
297 		return;
298 	}
299 
300     /* Open Tx path for all packet types */
301     txMgmtQ_SetConnState (hTxMgmtQ, TX_CONN_STATE_MGMT);
302     txMgmtQ_SetConnState (hTxMgmtQ, TX_CONN_STATE_EAPOL);
303     txMgmtQ_SetConnState (hTxMgmtQ, TX_CONN_STATE_OPEN);
304 
305 	infinitLoopFl	= 0;
306 	numOfPackets 	= 1;
307 	packetsNum 		= 1;
308 	packetLength    = *(TI_UINT32*)pParam;
309     os_printf("\nFW_DebugSendPacket: packetsNum = %d, packetLength = %d\n",packetsNum, packetLength);
310     fSendPkt = bSendDataPkt ? sendDataPacket : sendMgmtPacket;
311     dTimer = os_timerCreate(hOs, fSendPkt, hDrvMain);
312     os_timerStart(hOs, dTimer, 1000);
313 
314     SendFlag = TI_TRUE;
315 }
316 
FW_DebugInfinitSendPacket(TI_HANDLE hDrvMain,TI_HANDLE hOs)317 void FW_DebugInfinitSendPacket(TI_HANDLE hDrvMain ,TI_HANDLE hOs)
318 {
319 	infinitLoopFl = 1;
320 	numOfPackets = 1;
321 
322     dTimer = os_timerCreate(hOs, sendMgmtPacket, hDrvMain);
323     os_timerStart(hOs, dTimer, 1000);
324     SendFlag = TI_TRUE;
325 }
326 
FW_DebugStartLoopBack(TI_HANDLE hDrvMain,TI_HANDLE hTWD)327 void FW_DebugStartLoopBack (TI_HANDLE hDrvMain, TI_HANDLE hTWD)
328 {
329 	TTwd     *pTWD = (TTwd *)hTWD;
330 	TTestCmd     Plt;
331 
332 	Plt.testCmdId = TEST_CMD_LOOPBACK_START;
333 	os_printf("\n send loopback start command");
334 	cmdQueue_SendCommand (pTWD->hCmdQueue, CMD_TEST, (char*)&Plt, sizeof(Plt), NULL, NULL, NULL);
335 }
336 
337 
FW_DebugStopLoopBack(TI_HANDLE hDrvMain,TI_HANDLE hTWD)338 void FW_DebugStopLoopBack (TI_HANDLE hDrvMain, TI_HANDLE hTWD)
339 {
340 	TTwd     *pTWD = (TTwd *)hTWD;
341 	TTestCmd     Plt;
342 
343 	Plt.testCmdId = TEST_CMD_LOOPBACK_STOP;
344 	os_printf("\n send loopback stop command");
345 	cmdQueue_SendCommand (pTWD->hCmdQueue, CMD_TEST, (char*)&Plt, sizeof(Plt), NULL, NULL, NULL);
346 }
347 
348 
FW_DebugGeneral(TI_HANDLE hTWD,void * pParam)349 void FW_DebugGeneral(TI_HANDLE hTWD, void *pParam)
350 {
351 	TTwd     *pTWD = (TTwd *)hTWD;
352 	TI_UINT32 size = *((TI_UINT32*) pParam) + sizeof(TI_UINT32);
353 
354 	cmdQueue_SendCommand (pTWD->hCmdQueue, CMD_DEBUG, (char*)pParam, size, NULL, NULL, NULL);
355 }
356 
357 
358 /*
359 void FW_ComparePacket (char *buf)
360  {
361  char *ptemp;
362  int i;
363 
364    if (SendFlag)
365    {
366        ptemp = CompBuf;
367        os_printf("\n print before compare save buf");
368        os_printf("\n");
369        for (i=0;i<Len;i++) {
370            os_printf(" 0x%02x  ",*ptemp++);
371            if (i %5 == 0) { os_printf("\n");
372            }
373 
374        }
375 
376        os_printf("\n print before compare recived packet");
377        ptemp = buf;
378        os_printf("\n");
379        for (i=0;i<Len;i++) {
380            os_printf(" 0x%02x  ",*ptemp++);
381            if (i %5 == 0) {
382            }
383 
384        }
385 
386 
387      if(memcmp(CompBuf,buf,Len))
388        os_printf("\n LoopBack Packet failed");
389       else
390       os_printf("\n LoopBack Packet success");
391 
392       SendFlag = TI_FALSE;
393    }
394 
395  }
396 */
397 
398 
399