Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*****************************************************************************
** ** ** COPYRIGHT (C) 2000, 2001 MKNET CORPORATION ** ** DEVELOPED FOR THE MK7100-BASED VFIR PCI CONTROLLER. ** ** ** *****************************************************************************/
/**********************************************************************
Module Name: DBG.C
Routines: MyLogEvent MyLogPhysEvent DbgInterPktTimeGap DbgTestInit MK7DbgTestIntTmo
**********************************************************************/
#include "precomp.h"
#pragma hdrstop
#include "protot.h"
#define LOG_LENGTH 1000
#if DBG
UINT DbgLogIndex = 0; char *DbgLogMsg[LOG_LENGTH] = {0}; ULONG DbgLogVal[LOG_LENGTH] = {0};
// This to keep track of the phy buffs
ULONG DbgLogTxPhysBuffs[DEF_TCB_CNT]; ULONG DbgLogRxPhysBuffs[CalRpdSize(DEF_RCB_CNT)]; UINT DbgLogTxPhysBuffsIndex = 0; UINT DbgLogRxPhysBuffsIndex = 0;
// Globals to ease debugging
UINT GDbgDataSize=0; MK7DBG_STAT GDbgStat; ULONG GDbgSleep=0;
LONGLONG GDbgTACmdTime[1000]; LONGLONG GDbgTARspTime[1000]; LONGLONG GDbgTATime[1000]; UINT GDbgTATimeIdx;
//----------------------------------------------------------------------
// Procedure: [MyLogEvent]
//
// Description: Log to our arrary.
//
//----------------------------------------------------------------------
VOID MyLogEvent(char *msg, ULONG val) {
// NdisGetCurrentSystemTime((PLARGE_INTEGER)&DbgLog[DbgLogIndex].usec);
DbgLogMsg[DbgLogIndex] = msg; DbgLogVal[DbgLogIndex] = val; DbgLogIndex++; DbgLogIndex %= LOG_LENGTH; }
//----------------------------------------------------------------------
// Procedure: [MyLogPhysEvent]
//
// Description: Log to our arrary.
//----------------------------------------------------------------------
VOID MyLogPhysEvent(ULONG *logarray, UINT *index, ULONG val) { logarray[*index] = val; (*index)++; }
//----------------------------------------------------------------------
// Procedure: Time gap between successive sends.
//----------------------------------------------------------------------
VOID DbgInterPktTimeGap() { NdisMSleep(GDbgSleep); }
//----------------------------------------------------------------------
// Procedure: [DbgTestInit]
//
// Description: Initialized the test context.
//
//-----------------------------------------------------------------------
VOID DbgTestInit(PMK7_ADAPTER Adapter) { UINT i;
//************************************************************
// The start of this routine is to facilitate debugging. We create
// canned debug/test settings so we don't have to manually change
// variables in debugger. However, tests not covered by the hardcoded
// settings still need to be manually set.
//
// 2 main functions happen here to help w/ test/debug:
// 1. Desired fields in the Adapter struct are extracted here and
// displayed so we don't have to manually look at these fields.
// 2. Setup debug/test fields in Adapter.
//************************************************************
//************************************************************
//
// Set DbgTest here to run canned tests.
//
//************************************************************
//++++++++++++++++++++++++++++++
// Hardcode something to ease debug.
Adapter->DbgTest = 0; //++++++++++++++++++++++++++++++
if (Adapter->DbgTest == 0) return;
switch(Adapter->DbgTest) { //
// Tests 1-5 all need Loopback turned on at startup.
//
case 1: Adapter->LBPktLevel = 1; Adapter->DbgTestDataCnt = GDbgDataSize; break;
case 2: Adapter->LBPktLevel = 4; break;
case 3: Adapter->LBPktLevel = 15; break;
case 4: Adapter->LBPktLevel = 32; break;
case 5: Adapter->LBPktLevel = 4; break;
case 6: Adapter->LBPktLevel = 1; Adapter->DbgTestDataCnt = GDbgDataSize; break;
case 7: Adapter->LBPktLevel = 0; Adapter->DbgTestDataCnt = GDbgDataSize; break;
default: // anything else we're not running any tests
break; }
NdisZeroMemory(&GDbgStat, sizeof(MK7DBG_STAT));
// Use our timer to simulate TX/RX (this to basically tests
// my interrupt handling logic while hw interrupt is not yet
// working. (May be used for other tests.)
// Always set it up but we may not use it.
// NdisMInitializeTimer(&Adapter->MK7DbgTestIntTimer,
// Adapter->MK7AdapterHandle,
// (PNDIS_TIMER_FUNCTION) MK7DbgTestIntTmo,
// (PVOID) Adapter);
for (i=0; i<1000; i++) { GDbgTACmdTime[i] = 0; GDbgTARspTime[i] = 0; GDbgTATime[i] = 0; }
GDbgTATimeIdx = 0;
}
//----------------------------------------------------------------------
// Procedure: [MK7DbgTestIntTmo]
//
// Description: Process a test interrupt time out.
//
// (NOTE: This was used to test the TEST_Int bit when hw interrupt was
// not fully working. This function is no longer needed. It's here as
// as example on how to process an NDIS timer.)
//-----------------------------------------------------------------------
VOID MK7DbgTestIntTmo(PVOID sysspiff1, NDIS_HANDLE MiniportAdapterContext, PVOID sysspiff2, PVOID sysspiff3) { PMK7_ADAPTER Adapter; UINT tcbidx; PTCB tcb; PRCB rcb; UINT testsize; PUCHAR dst, src;
Adapter = PMK7_ADAPTER_FROM_CONTEXT_HANDLE(MiniportAdapterContext);
MK7DisableInterrupt(Adapter);
NdisAcquireSpinLock(&Adapter->Lock);
// Find the tcb-trd being sent. We just go back one becuase after
// the send this gets incremented.
if (Adapter->nextAvailTcbIdx == 0) { tcbidx = Adapter->NumTcb - 1; } else { tcbidx = Adapter->nextAvailTcbIdx - 1; }
tcb = Adapter->pTcbArray[tcbidx]; rcb = Adapter->pRcbArray[Adapter->nextRxRcbIdx];
// Copy from TX buff to RX buff
src = tcb->buff; dst = rcb->rpd->databuff; testsize = tcb->PacketLength; NdisMoveMemory(dst, src, testsize); // now the RX ring buffer fields -- count
rcb->rrd->count = tcb->trd->count; // now make sure the ownerships go to the drv
GrantTrdToDrv(tcb->trd); GrantRrdToDrv(rcb->rrd);
NdisReleaseSpinLock(&Adapter->Lock);
MK7Reg_Write(Adapter, R_INTS, 0x0004); }
#endif // DBG end bracket
|