• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /****************************************************************************
2 **+-----------------------------------------------------------------------+**
3 **|                                                                       |**
4 **| Copyright(c) 1998 - 2008 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  *
38  *   MODULE:  whalTrace.c
39  *   PURPOSE: Trace on Rx/Tx packets
40  *
41  ****************************************************************************/
42 
43 #include "whalCommon.h"
44 #include "TNETWIF.h"
45 #include "whalTrace.h"
46 
47 
48 #define SEQUNCE_TRACE
49 
50 #define TRACE_INTERRUPT		0x0001	/* Trace the recieved interupt only */
51 #define TRACE_TX			0x0002	/* Trace all Tx path (os ->>core ->> hal) */
52 #define TRACE_RX			0x0004	/* Trace all Rx path (hal ->> core ->> os) */
53 #define TRACE_COPY_ONLY		0x0008	/* Trace the copy of data from and to the FW only  - for slave mode*/
54 #define TRACE_BUG_ONLY		0x0010	/* Trace the ctrls that only presents an unexpected case*/
55 #define TRACE_All			0xffff	/* Trace all. */
56 
57 
58 
59 /****************************************************************************
60  *                      OBJECT DATA BASE
61  ****************************************************************************
62  *
63  *	TrcDb - Rx Trace buffer of 5000 packets
64  *
65  ****************************************************************************/
66 int whal_tracePrintLine(WhalTrace_T *pTrc, int EventIndex);
67 
local_string_copy(char * str1,char * str2,int size)68 void local_string_copy(char *str1, char *str2, int size)
69 {
70 	int i;
71 	for (i=0; i<size; i++)
72 	{
73 		str1[i] = str2[i];
74 		if (str2[i] == 0)
75 			break;
76 	}
77 }
78 /****************************************************************************
79  *                      whal_traceCreate()
80  ****************************************************************************
81  * DESCRIPTION:	Create the whal trace object
82  *
83  * INPUTS:
84  *
85  * OUTPUT:	None
86  *
87  * RETURNS:	The Created object
88  ****************************************************************************/
whal_traceCreate(TI_HANDLE hOs)89 WhalTrace_T *whal_traceCreate(TI_HANDLE hOs)
90 {
91 	WhalTrace_T *pObj;
92 
93 	pObj = os_memoryAlloc(hOs, sizeof(WhalTrace_T));
94 	if (pObj == NULL)
95 		return NULL;
96 
97 	os_memoryZero(hOs, pObj, sizeof(WhalTrace_T));
98 
99 	pObj->hOs = hOs;
100 	pObj->hProtect = os_protectCreate(pObj->hOs);
101 	if (pObj->hProtect == NULL)
102 	{
103 		whal_traceDestroy(pObj);
104 		return NULL;
105 	}
106 
107 	return(pObj);
108 }
109 
110 /****************************************************************************
111  *                      whal_traceDestroy()
112  ****************************************************************************
113  * DESCRIPTION:	Destroy the object
114  *
115  * INPUTS:
116  *		pTrc		The object to free
117  *
118  * OUTPUT:	None
119  *
120  * RETURNS:	OK or NOK
121  ****************************************************************************/
whal_traceDestroy(WhalTrace_T * pTrc)122 int whal_traceDestroy(WhalTrace_T *pTrc)
123 {
124 	if (pTrc == NULL)
125 		return OK;
126 
127 	if (pTrc->hProtect)
128 		os_protectDestroy(pTrc->hOs, pTrc->hProtect);
129 	os_memoryFree(pTrc->hOs, pTrc, sizeof(WhalTrace_T));
130 	return OK;
131 }
132 
133 /****************************************************************************
134  *                      whal_traceConfig()
135  ****************************************************************************
136  * DESCRIPTION:	Config the object
137  *
138  * INPUTS:
139  *		pTrc		The object
140  *		hReport		The reports objects
141  *
142  * OUTPUT:	None
143  *
144  * RETURNS:	OK or NOK
145  ****************************************************************************/
whal_traceConfig(WhalTrace_T * pTrc,TI_HANDLE hTNETWIF,TI_HANDLE hReport)146 int whal_traceConfig(WhalTrace_T *pTrc, TI_HANDLE hTNETWIF, TI_HANDLE hReport)
147 {
148 	pTrc->hReport = hReport;
149 	pTrc->hTNETWIF = hTNETWIF;
150 	pTrc->Enable = 0; /*Hardcoded*/
151 	pTrc->Idx = 0;
152 	pTrc->Num = 0;
153 	pTrc->MaxFreeBlks = 0;
154 
155 	/* configured the trace mask flag */
156 	pTrc->traceMask = TRACE_BUG_ONLY;
157 	return OK;
158 }
159 
160 /****************************************************************************
161  *                      whal_traceAddTx()
162  ****************************************************************************
163  * DESCRIPTION:	Add Tx info line to the DB
164  *
165  * INPUTS:
166  *
167  * OUTPUT:	None
168  *
169  * RETURNS:	OK or NOK
170  ****************************************************************************/
171 
172 #ifdef TNETW_MASTER_MODE
173 
whal_traceAddTx(WhalTrace_T * pTrc,HwTxDesc_T * pHwTxDesc,char * Action)174 int whal_traceAddTx(WhalTrace_T *pTrc, HwTxDesc_T *pHwTxDesc, char *Action)
175 {
176 	TRACER_EVENT *pEvt;
177 	UINT32 FrameAddress;
178 	DbTescriptor local_TxDesc;
179 	TRACER_DATA	*pData;
180 
181 #ifdef SEQUNCE_TRACE
182 	return 1;
183 #endif
184 	/* Dm: os_protectLock(pTrc->hOs, pTrc->hProtect); */
185 
186 	pEvt = &pTrc->Evt[pTrc->Idx];
187 	pData = &pEvt->Info.TrcData;
188 
189 	/*
190 	 * Common
191 	 */
192 	local_string_copy(pEvt->Action, Action, TRACER_MAX_ACT_LEN-1);
193 	local_string_copy(pEvt->Object, "Tx", TRACER_MAX_OBJ_LEN-1);
194 
195     pEvt->TimStamp = os_timeStampUs(pTrc->hOs);
196 
197 	/*
198 	 * Data
199 	 */
200 	whal_hwTxDesc_Copy(pHwTxDesc, &local_TxDesc);
201 
202 	pData->MpduLen	= local_TxDesc.length;
203 	pData->Ctl		= local_TxDesc.ctl;
204 	pData->Rate		= (UINT16)local_TxDesc.rate;
205 
206     pData->Status[0] = 0;
207 	pData->Status[1] = 0;
208 	pData->Status[3] = 0;
209 
210     /*
211 	pData->Status[0] = local_TxDesc.ctrl2;
212 	pData->Status[1] = local_TxDesc.ackFailures;
213 	pData->Status[3] = local_TxDesc.rtsFailures;
214     */
215 
216 	FrameAddress = 4+whal_hwTxDesc_GetAcxBufAddr(pHwTxDesc);
217 	TNETWIF_ReadMemSync(pTrc->hTNETWIF,
218 						(UINT32)((char *)FrameAddress),
219 						(UINT8 *)((char *)&pData->FrameHeader),
220 						  TRACER_HDR_LEN);
221 
222 	pData->FrameHeader.fc = ENDIAN_HANDLE_WORD(pData->FrameHeader.fc);
223 	pData->FrameHeader.seqCtrl = ENDIAN_HANDLE_WORD(pData->FrameHeader.seqCtrl);
224 	pData->FrameHeader.duration = ENDIAN_HANDLE_WORD(pData->FrameHeader.duration);
225 	TNETWIF_ReadMemSync(pTrc->hTNETWIF,
226 						(UINT32)((char *)FrameAddress+TRACER_HDR_LEN),
227 						(UINT8 *)((char *)&pData->FrameData),
228 						  4);
229 
230 
231 	/*
232 	 * Prepare next index
233 	 */
234 	if (++pTrc->Idx >= TRACER_MAX_EVENTS)
235 		pTrc->Idx = 0;
236 
237 	if (pTrc->Num < TRACER_MAX_EVENTS)
238 		pTrc->Num++;
239 
240 	/* Dm: os_protectUnlock(pTrc->hOs, pTrc->hProtect); */
241 
242 	return(0);
243 }
244 
245 #endif  /* TNETW_MASTER_MODE */
246 
247 
248 /****************************************************************************
249  *                      whal_traceIsEnable()
250  ****************************************************************************
251  * DESCRIPTION:	return the enable value
252  *
253  * INPUTS:	None
254  *
255  * OUTPUT:	None
256  *
257  * RETURNS:	Enable value
258  ****************************************************************************/
whal_traceIsEnable(WhalTrace_T * pTrc)259 int whal_traceIsEnable(WhalTrace_T *pTrc)
260 {
261 	return pTrc->Enable;
262 }
263 
264 /****************************************************************************
265  *                      whal_traceEnable()
266  ****************************************************************************
267  * DESCRIPTION:	enable the tracing
268  *
269  * INPUTS:	None
270  *
271  * OUTPUT:	None
272  *
273  * RETURNS:	None
274  ****************************************************************************/
whal_traceEnable(WhalTrace_T * pTrc,int val)275 void whal_traceEnable(WhalTrace_T *pTrc, int val)
276 {
277 	pTrc->Enable = val;
278 
279 	if(val == 1) /* Enable case*/
280 	{
281 		pTrc->MinNumDescriptorFree = 0xff;
282 		pTrc->MacOccupiedDescriptor = 0;
283 		pTrc->MaxClearDescriptor = 0;
284 		pTrc->BugCounter = 0;
285 		pTrc->reBug = 0;
286 		pTrc->MaxFreeBlks = 0;
287 	}
288 
289 
290 }
291 
292 
293 
294