Home | History | Annotate | Download | only in Shm_Common
      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 
     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  ****************************************************************************/
     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  ****************************************************************************/
    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  ****************************************************************************/
    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 
    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  ****************************************************************************/
    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  ****************************************************************************/
    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