📄 e100kd.c
字号:
dprintf(" RecvList @ %p , nReadyRecv = %d\n",
pAdapter+Off, (LONG)ReadField(nReadyRecv));
}
if(!GetFieldOffset("MP_ADAPTER", "RecvPendList", &Off))
{
dprintf(" RecvPendList @ %p , RefCount = %d\n",
pAdapter+Off, (LONG)ReadField(RefCount));
}
dprintf(" NumRfd = %d, CurrNumRfd = %d , HwRfdSize = %d\n",
(LONG)ReadField(NumRfd), (LONG)ReadField(CurrNumRfd), (LONG)ReadField(HwRfdSize));
dprintf(" bAllocNewRfd = %s, RfdShrinkCount = %d\n",
(BOOLEAN)ReadField(bAllocNewRfd) ? "TRUE" : "FALSE",
(LONG)ReadField(RfdShrinkCount));
dprintf(" RecvPacketPool = %p , RecvBufferPool = %p\n",
ReadField(RecvPacketPool), ReadField(RecvBufferPool));
dprintf("\n");
PacketFilter = (ULONG)ReadField(PacketFilter);
dprintf(" PacketFilter : 0x%08x\n", PacketFilter);
j = 0;
for(i = 0; i < sizeof(DbgFilterTable)/sizeof(DBG_FILTER); i++)
{
if(PacketFilter & DbgFilterTable[i].Val)
{
if(j == 0)
{
dprintf(" ");
}
dprintf("%s", DbgFilterTable[i].Name);
j++;
if(j != MAX_FLAGS_PER_LINE)
{
dprintf(", ");
}
else
{
dprintf("\n");
j = 0;
}
}
}
if(j != 0)
{
dprintf("\n");
}
dprintf(" ulLookAhead=%d, usLinkSpeed=%d, usDuplexMode=%d\n",
(ULONG)ReadField(ulLookAhead), (USHORT)ReadField(usLinkSpeed),
(USHORT)ReadField(usDuplexMode));
dprintf("\n");
MCAddressCount = (UINT)ReadField(MCAddressCount);
dprintf(" MCAddressCount = %d\n", MCAddressCount);
pBuffer = malloc(MCAddressCount * MAC_ADDRESS_LENGTH);
if(pBuffer)
{
if(!GetFieldOffset("MP_ADAPTER", "MCList", &Off))
{
if(GetData(pBuffer, pAdapter+Off, MCAddressCount * MAC_ADDRESS_LENGTH, "MCList[]"))
{
for(i=0; i<MCAddressCount; i++)
{
j = i * MAC_ADDRESS_LENGTH;
dprintf(" (%d) = %02x-%02x-%02x-%02x-%02x-%02x\n",
i, pBuffer[j], pBuffer[j+1], pBuffer[j+2],
pBuffer[j+3], pBuffer[j+4], pBuffer[j+5]);
}
}
}
free(pBuffer);
}
else
{
}
dprintf("\n");
dprintf(" IoBaseAddress = 0x%x, IoRange = 0x%x, InterrupLevel = 0x%x, MemPhysAddress = 0x%x\n",
(ULONG)ReadField(IoBaseAddress), (ULONG)ReadField(IoRange),
(ULONG)ReadField(InterruptLevel), (ULONG)ReadField(MemPhysAddress.LowPart));
dprintf(" PortOffset = %p , CSRAddress = %p\n",
ReadField(PortOffset), ReadField(CSRAddress));
dprintf(" RevsionID = %d, SubVendorID = 0x%02x, SubSystemID = 0x%02x\n",
(UCHAR)ReadField(RevsionID), (USHORT)ReadField(SubVendorID),
(USHORT)ReadField(SubSystemID));
}
DECLARE_API(csr)
{
ULONG64 pHwCsr;
int ArgCount = 0;
UCHAR ucVal;
USHORT usVal;
ULONG i;
if(*args)
{
ArgCount = sscanf(args,"%I64lx", &pHwCsr);
}
//check for arguments
if(ArgCount < 1)
{
dprintf("Usage: csr <CSRAddress>\n");
return ;
}
dprintf(" pHwCsr %x : \n", pHwCsr);
InitTypeRead(pHwCsr, HW_CSR);
// ScbStatus
usVal = (USHORT)ReadField(ScbStatus);
dprintf(" ScbStatus - 0x%04x ", usVal);
dprintf("CUS-");
switch(usVal & SCB_CUS_MASK)
{
case SCB_CUS_IDLE:
dprintf("IDLE ");
break;
case SCB_CUS_SUSPEND:
dprintf("SUSPEND ");
break;
case SCB_CUS_ACTIVE:
dprintf("ACTIVE ");
break;
default:
dprintf("Reserved ");
}
for(i = 0; i < sizeof(DbgScbStatusRus)/sizeof(DBG_USHORT_VALUE); i++)
{
if((usVal & SCB_RUS_MASK) == DbgScbStatusRus[i].Val)
{
dprintf("RUS-%s ", DbgScbStatusRus[i].Name);
break;
}
}
dprintf("STAT-");
for(i = 0; i < sizeof(DbgScbStatusBits)/sizeof(DBG_USHORT_BITS); i++)
{
if(usVal & DbgScbStatusBits[i].Val)
{
dprintf("%s ", DbgScbStatusBits[i].Name);
}
}
dprintf("\n");
//ScbCommandLow
ucVal = (UCHAR)ReadField(ScbCommandLow);
dprintf(" ScbCommandLow - 0x%02x ", ucVal);
for(i = 0; i < sizeof(DbgScbCommandCuc)/sizeof(DBG_UCHAR_VALUE); i++)
{
if((ucVal & SCB_CUC_MASK) == DbgScbCommandCuc[i].Val)
{
dprintf("CUC-%s ", DbgScbCommandCuc[i].Name);
break;
}
}
for(i = 0; i < sizeof(DbgScbCommandRuc)/sizeof(DBG_UCHAR_VALUE); i++)
{
if((ucVal & SCB_RUC_MASK) == DbgScbCommandRuc[i].Val)
{
dprintf("RUC-%s ", DbgScbCommandRuc[i].Name);
break;
}
}
//ScbCommandHigh
ucVal = (UCHAR)ReadField(ScbCommandHigh);
dprintf(" ScbCommandHigh - 0x%02x ", ucVal);
if(ucVal & SCB_INT_MASK)
{
dprintf("INT_MASK ");
}
if(ucVal & SCB_SOFT_INT)
{
dprintf("SOFT_INT ");
}
dprintf("\n");
}
DECLARE_API(sendlist)
{
ULONG64 pMpTcb;
ULONG64 pFirstMpTcb;
int ArgCount = 0;
int Verbosity = 0;
int index = 0;
if(*args)
{
ArgCount = sscanf(args,"%I64lx %lx", &pMpTcb, &Verbosity);
}
//check for arguments
if(ArgCount < 1 || Verbosity > 1)
{
dprintf("Usage: sendlist <CurrSendHead> <verbosity>\n");
dprintf("1-Show HW_TCB info\n");
return ;
}
SIGN_EXTEND(pMpTcb);
pFirstMpTcb = pMpTcb;
do
{
dprintf(" (%d) pMpTcb %p : \n", index, pMpTcb);
PrintMpTcbDetails(pMpTcb, Verbosity);
if(GetFieldValue(pMpTcb, "MP_TCB", "Next", pMpTcb))
{
break;
}
index++;
if(CheckControlC())
{
dprintf("***Control-C***\n");
break;
}
} while(pMpTcb != pFirstMpTcb);
}
DECLARE_API(mptcb)
{
ULONG64 pMpTcb;
int ArgCount = 0;
if(*args)
{
ArgCount = sscanf(args,"%I64lx", &pMpTcb);
}
//check for arguments
if(ArgCount < 1)
{
dprintf("Usage: mptcb <MP_TCB>\n");
return ;
}
dprintf(" pMpTcb %p : \n", pMpTcb);
PrintMpTcbDetails(pMpTcb, 1);
}
DECLARE_API(hwtcb)
{
ULONG64 pHwTcb;
int ArgCount = 0;
if(*args)
{
ArgCount = sscanf(args,"%I64lx", &pHwTcb);
}
//check for arguments
if(ArgCount < 1)
{
dprintf("Usage: hwtcb <HW_TCB>\n");
return ;
}
dprintf(" pHwTcb %p : \n", pHwTcb);
PrintHwTcbDetails(pHwTcb);
}
void PrintMpTcbDetails(ULONG64 pMpTcb, int Verbosity)
{
ULONG Flags;
ULONG64 pMpTxBuf;
ULONG64 pHwTcb;
ULONG64 pVal;
ULONG ulVal;
USHORT usVal;
InitTypeRead(pMpTcb, MP_TCB);
dprintf(" Next %p", ReadField(Next));
Flags = (ULONG) ReadField(Flags);
dprintf(" , Flags - 0x%x", Flags);
if(Flags & fMP_TCB_IN_USE)
{
dprintf(" IN_USE");
}
if(Flags & fMP_TCB_USE_LOCAL_BUF)
{
dprintf(" USE_LOCAL_BUF");
}
if(Flags & fMP_TCB_MULTICAST)
{
dprintf(" MULTICAST");
}
dprintf("\n");
if(Flags & fMP_TCB_USE_LOCAL_BUF)
{
pMpTxBuf = ReadField(MpTxBuf);
dprintf(" MpTxBuf = %p", pMpTxBuf);
GetFieldValue(pMpTxBuf, "MP_TXBUF", "NdisBuffer", pVal);
dprintf(" - NdisBuffer = %p", pVal);
GetFieldValue(pMpTxBuf, "MP_TXBUF", "AllocSize", ulVal);
dprintf(" , AllocSize = %d", ulVal);
GetFieldValue(pMpTxBuf, "MP_TXBUF", "AllocVa", pVal);
dprintf(" , AllocVa = %p", pVal);
GetFieldValue(pMpTxBuf, "MP_TXBUF", "pBuffer", pVal);
dprintf(" , pBuffer = %p\n", pVal);
dprintf("\n");
}
if(Flags & fMP_TCB_IN_USE)
{
dprintf(" Packet = %p\n", ReadField(Packet));
pHwTcb = ReadField(HwTcb);
dprintf(" HwTcb = %p , HwTcbPhys = 0x%lx , PrevHwTcb = 0x%x\n",
pHwTcb, (ULONG)ReadField(HwTcbPhys), ReadField(PrevHwTcb));
dprintf(" HwTbd (First) = %p , HwTbdPhys = 0x%x\n",
ReadField(HwTbd), (ULONG)ReadField(HwTbdPhys));
dprintf(" PhysBufCount = %d, BufferCount = %d, FirstBuffer = %p , PacketLength = %d\n",
(ULONG)ReadField(PhysBufCount), (ULONG)ReadField(BufferCount),
ReadField(FirstBuffer), (ULONG)ReadField(PacketLength));
}
dprintf("\n");
if((Flags & fMP_TCB_IN_USE) && Verbosity == 1)
{
PrintHwTcbDetails(pHwTcb);
}
}
void PrintHwTcbDetails(ULONG64 pHwTcb)
{
USHORT HwCbStatus;
USHORT HwCbCommand;
ULONG i;
InitTypeRead(pHwTcb, HW_TCB);
HwCbStatus = (USHORT) ReadField(TxCbHeader.CbStatus);
HwCbCommand = (USHORT) ReadField(TxCbHeader.CbCommand);
dprintf(" TxCbHeader.CbStatus = 0x%04x ,", HwCbStatus);
if(HwCbStatus & CB_STATUS_COMPLETE)
{
dprintf(" COMPLETE");
}
if(HwCbStatus & CB_STATUS_OK)
{
dprintf(" OK");
}
if(HwCbStatus & CB_STATUS_UNDERRUN)
{
dprintf(" UNDERRUN");
}
dprintf("\n");
dprintf(" TxCbHeader.CbCommand = 0x%04x ", HwCbCommand);
for(i = 0; i < sizeof(DbgCbCommandBits)/sizeof(DBG_USHORT_BITS); i++)
{
if(HwCbCommand & DbgCbCommandBits[i].Val)
{
dprintf(", %s", DbgCbCommandBits[i].Name);
}
}
for(i = 0; i < sizeof(DbgCbCommands)/sizeof(DBG_USHORT_VALUE); i++)
{
if((HwCbCommand & CB_CMD_MASK) == DbgCbCommands[i].Val)
{
dprintf(", %s", DbgCbCommands[i].Name);
break;
}
}
if(i == sizeof(DbgCbCommands)/sizeof(DBG_USHORT_VALUE))
{
dprintf(", UNKNOWN COMMAND");
}
dprintf("\n");
dprintf(" TxCbHeader.CbLinkPointer = 0x%x\n", (ULONG)ReadField(TxCbHeader.CbLinkPointer));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -