📄 gei82543debug.c
字号:
* This routine returns the PHY's register value, or -1 if an error occurs.
*
* RETURNS: PHY's register value
*/
int gei82543PhyRegGet
(
int unit, /* device unit */
UINT16 reg /* PHY's register */
)
{
END_DEVICE * pDrvCtrl; /* driver structure */
UINT16 tmp;
if ( (pDrvCtrl = gei82543Unit (unit)) == NULL)
{
return -1;
}
gei82544PhyRead (pDrvCtrl, pDrvCtrl->pPhyInfo->phyAddr, (UINT8)reg, &tmp);
printf ("PHY Device, Reg:%d, value:0x%x\n", reg, tmp);
return tmp;
}
/***************************************************************************
*
* gei82543Unit - return a pointer to the END_DEVICE for a gei unit
*
* RETURNS: A pointer the END_DEVICE for the unit, or NULL.
*/
END_DEVICE * gei82543Unit
(
int unit
)
{
END_DEVICE * pDrvCtrl;
/* sanity check */
if (unit < 1 ||unit>MAX_IF_CARD_NUM)
{
printf ("Invalid unit number %d\n", unit);
return (END_DEVICE *)ERROR;
}
pDrvCtrl = geiEndDevice[unit];
if ( (END_DEVICE *)NULL==pDrvCtrl )
{
printf ("Can't find device gei%d.\n", unit);
return (END_DEVICE *)ERROR;
}
return pDrvCtrl;
}
STATUS gei82543ShowCount(UINT8 slot)
{
END_DEVICE * pDrvCtrl=(END_DEVICE *)NULL;
int ix;
if (slot<1||slot>MAX_IF_CARD_NUM)
{
return ERROR;
}
pDrvCtrl=geiEndDevice[slot];
if( (END_DEVICE *)NULL==pDrvCtrl )
{
printf("Can't find\n");
return ERROR;
}
printf("**********slot = %d**********\n",slot);
printf("RX/TX Handle Routine :%d\n",pDrvCtrl->rxtxHandlerNum);
printf("Total Interrupt :%d\n",pDrvCtrl->totalIntNum);
printf("Recieve Interrupt :%d\n",pDrvCtrl->rxIntCount);
printf("Recieve Timer Interrupt :%d\n",pDrvCtrl->rxTimerIntCount);
printf("Device Link Interrupt :%d\n",pDrvCtrl->linkIntCount);
printf("Transmit Interrupt :%d\n",pDrvCtrl->txIntCount);
printf("Transmit BD Not OK :%d\n",pDrvCtrl->txBDNotOK);
printf("Fwd Job Add Error :%d\n",pDrvCtrl->rxJobAddErr);
printf("Link Job Add Error :%d\n",pDrvCtrl->linkJobAddErr);
printf("Receive Overrun Interrupt :%d\n",pDrvCtrl->rxORunIntCount);
printf("Receive Packets :%d\n",pDrvCtrl->rxPacketNum);
printf("Transmit Packets :%d\n",pDrvCtrl->txPacketNum);
printf("Receive Packet Error :%d\n",pDrvCtrl->rxPacketDrvErr);
printf("Search Net Error :%d\n",pDrvCtrl->searchNetErr);
printf("No Endbuf Error :%d\n",pDrvCtrl->noEndBuf);
printf("Not Set Packet EOP :%d\n",pDrvCtrl->noPacketEOP);
printf("Packet Data Error :%d\n",pDrvCtrl->errPacketNum);
printf("HardWare doesn't Done with RxD :%d\n",pDrvCtrl->rxDesDoneErr);
printf("Receiving Packets Fail :%d\n",pDrvCtrl->recvPktFailNum);
printf("Retry Receiving Packets Fail :%d\n",pDrvCtrl->recvRetryFailNum);
printf("RxSetup Endbuf Alloc Count :%d\n",pDrvCtrl->rxPktAlloc0Num);
printf("RxRecv Endbuf Alloc Count :%d\n",pDrvCtrl->rxPktAlloc1Num);
printf("TxSetup Endbuf Free Count :%d\n",pDrvCtrl->txResFreeNum);
printf("RxSetup Endbuf Free Count :%d\n",pDrvCtrl->rxResFreeNum);
printf("MDI Read Error :%d\n",pDrvCtrl->MDIReadErr);
printf("MDI Write Error :%d\n",pDrvCtrl->MDIWriteErr);
printf ("Adapter Ethernet Address");
for (ix = 0; ix < 6; ix ++)
printf (":%2.2X", pDrvCtrl->adaptor.enetAddr[ix]);
printf ("\n");
return OK;
}
STATUS gei82543ClearCount(UINT8 slot)
{
END_DEVICE * pDrvCtrl=(END_DEVICE *)NULL;
if (slot<1||slot>MAX_IF_CARD_NUM)
{
return ERROR;
}
pDrvCtrl=geiEndDevice[slot];
if( (END_DEVICE *)NULL==pDrvCtrl )
{
printf("Can't find\n");
return ERROR;
}
pDrvCtrl->rxtxHandlerNum =0;
pDrvCtrl->rxIntCount =0;
pDrvCtrl->rxTimerIntCount =0;
pDrvCtrl->txIntCount =0;
pDrvCtrl->txBDNotOK =0;
pDrvCtrl->rxORunIntCount =0;
pDrvCtrl->rxPacketNum =0;
pDrvCtrl->txPacketNum =0;
pDrvCtrl->rxPacketDrvErr =0;
pDrvCtrl->rxJobAddErr =0;
pDrvCtrl->noEndBuf =0;
pDrvCtrl->noPacketEOP =0;
pDrvCtrl->errPacketNum =0;
pDrvCtrl->rxDesDoneErr=0;
pDrvCtrl->recvPktFailNum=0;
pDrvCtrl->recvRetryFailNum=0;
pDrvCtrl->linkIntCount=0;
pDrvCtrl->totalIntNum=0;
pDrvCtrl->linkJobAddErr=0;
pDrvCtrl->searchNetErr=0;
pDrvCtrl->rxPktAlloc0Num =0;
pDrvCtrl->rxPktAlloc1Num =0;
pDrvCtrl->txResFreeNum =0;
pDrvCtrl->rxResFreeNum =0;
pDrvCtrl->MDIReadErr =0;
pDrvCtrl->MDIWriteErr =0;
return OK;
}
/***************************************************************************
*
* gei82543RegShow - get all the registers value of the device
*
* This routine returns the device's register value, or -1 if an error occurs.
*
* RETURNS: all the 82545's register value
*/
void gei82543RegShow
(
UINT8 slot /* device unit */
)
{
UINT32 regVal; /* PHY's register */
UINT32 regVal2;
END_DEVICE * pDrvCtrl; /* driver structure */
UINT32 tmp;
UINT32 tmp2;
UINT16 phyVal;
int ix;
if ((END_DEVICE *)NULL== (pDrvCtrl = gei82543Unit (slot)))
{
return (void)ERROR;
}
printf("\n**********Slot %d MGEO Key Registers Value**********\n", slot);
printf("\noffset regval register description\n");
GEI_READ_REG(INTEL_82543GC_CTRL, regVal);
printf("0x0000 0x%08x Device Control Register\n",regVal);
GEI_READ_REG(INTEL_82543GC_STATUS,regVal);
printf("0x0008 0x%08x Device Status Register\n",regVal);
GEI_READ_REG(INTEL_82543GC_EECD, regVal);
printf("0x0010 0x%08x EEPROM/Flash Control Register\n",regVal);
GEI_READ_REG(INTEL_82543GC_EERD,regVal);
printf("0x0014 0x%08x EEPROM Read Register\n",regVal);
GEI_READ_REG(INTEL_82543GC_CTRL_EXT,regVal);
printf("0x0018 0x%08x Extended Device Control Register\n",regVal);
GEI_READ_REG(INTEL_82543GC_MDI,regVal);
printf("0x0020 0x%08x MDI Control Register\n",regVal);
GEI_READ_REG(INTEL_82543GC_TXCW,regVal);
printf("0x0178 0x%08x Transmit Configuration Word Register\n",regVal);
GEI_READ_REG(INTEL_82543GC_RXCW,regVal);
printf("0x0180 0x%08x Receive Configuration Word egister\n",regVal);
GEI_READ_REG(INTEL_82543GC_PBA,regVal);
printf("0x1000 0x%08x Packet Buffer Allocation Register\n",regVal);
GEI_READ_REG(INTEL_82543GC_ICR,regVal);
printf("0x00c0 0x%08x Interrupt Cause Read Register\n",regVal);
GEI_READ_REG(INTEL_82543GC_IMS,regVal);
printf("0x00d0 0x%08x Interrupt Mask Set/Read Register\n",regVal);
GEI_READ_REG(INTEL_82543GC_ICS,regVal);
printf("0x00c8 0x%08x Interrupt Cause Set Register\n",regVal);
GEI_READ_REG(INTEL_82543GC_IMC,regVal);
printf("0x00d8 0x%08x Interrupt Mask Clear Register\n",regVal);
GEI_READ_REG(INTEL_82543GC_RCTL,regVal);
printf("\n0x0100 0x%08x Receive Control Register\n",regVal);
GEI_READ_REG(INTEL_82543GC_RDBAL,regVal);
printf("0x2800 0x%08x Receive Descriptor Base Low Register\n",regVal);
GEI_READ_REG(INTEL_82543GC_RDLEN,regVal);
printf("0x2808 0x%08x Receive Descriptor Length Register\n",regVal);
GEI_READ_REG(INTEL_82543GC_RDH,regVal);
printf("0x2810 0x%08x Receive Descriptor Head Register\n",regVal);
GEI_READ_REG(INTEL_82543GC_RDT,regVal);
printf("0x2818 0x%08x Receive Descriptor Tail Register\n",regVal);
GEI_READ_REG(INTEL_82543GC_RDTR,regVal);
printf("0x2820 0x%08x Receive Delay Timer Register\n",regVal);
GEI_READ_REG(INTEL_82546EB_RADV,regVal);
printf("0x282c 0x%08x Receive Interrupt Absolute Delay Timer Register\n",regVal);
#if 0
printf("Multicast Address Registers:\n");
for (ix = 0; ix < NUM_MTA; ix++)
{
tmp = INTEL_82543GC_MTA + (UINT16)ix * 4;
GEI_READ_REG(tmp, regVal);
if((ix%8)==0)
{
printf("\n0x%08x:",tmp);
}
printf("0x%08x",regVal);
}
#endif
/*transmit registers*/
GEI_READ_REG(INTEL_82543GC_TCTL, regVal);
printf("\n0x0400 0x%08x Transmit Control Register\n",regVal);
GEI_READ_REG(INTEL_82543GC_TDBAL, regVal);
printf("0x3800 0x%08x Transmit Descriptor Base Low Register\n",regVal);
GEI_READ_REG(INTEL_82543GC_TDLEN, regVal);
printf("0x3808 0x%08x Transmit Descriptor Length Register\n",regVal);
GEI_READ_REG(INTEL_82543GC_TDH, regVal);
printf("0x3810 0x%08x Transmit Descriptor Head Register\n",regVal);
GEI_READ_REG(INTEL_82543GC_TDT, regVal);
printf("0x3818 0x%08x Transmit Descriptor Tail Register\n",regVal);
GEI_READ_REG(INTEL_82543GC_TIDV, regVal);
printf("0x3820 0x%08x Transmit Interrupt Delay Value Register\n",regVal);
/*Receive Address,16*/
printf("\nReceive Address Registers:\n");
for (ix = 0; ix < NUM_RAR; ix ++)
{
tmp = INTEL_82543GC_RAL + (UINT16)ix * 8;
tmp2=INTEL_82543GC_RAH+ (UINT16)ix * 8;
GEI_READ_REG(tmp, regVal);
GEI_READ_REG(tmp2, regVal2);
printf("index=%02d,offset=0x%04x,regval=0x%08x%08x \n",ix,tmp,Drv_Swap32(regVal),Drv_Swap32(regVal2));
}
if(GEI_COPPER_MEDIA==pDrvCtrl->cableType)
{
printf("\n**********PHY Registers**********\n");
for (ix = 0; ix < 32; ix ++)
{
gei82544PhyRead (pDrvCtrl, pDrvCtrl->pPhyInfo->phyAddr, (UINT8)ix, &phyVal);
if ((ix % 8) == 0)
{
printf("\n%02d: ", ix);
}
printf ("0x%04x ", phyVal);
}
printf("\n");
}
return;
}
void gei82543BDShow(UINT8 slot)
{
END_DEVICE * pDrvCtrl=(END_DEVICE *)NULL;
int ix;
INTEL82543_TX_DES* pTxDesc;
INTEL82543_RX_DES* pRxDesc;
if ((END_DEVICE *)NULL== (pDrvCtrl = gei82543Unit (slot)))
{
return (void)ERROR;
}
printf("\n**********Tx BDs Information**********\nTxBdBaseAddr=0x%x,TxBdNum=%d,TxBdIndx=%d,TxBDFreeNum=%d\n",
pDrvCtrl->pTxDescBase,pDrvCtrl->txDescNum,pDrvCtrl->txDescTail, \
pDrvCtrl->txDescFreeNum);
printf("TxBD BufAddress Length Command Status\n");
for(ix=0;ix<pDrvCtrl->txDescNum;ix++)
{
pTxDesc = (INTEL82543_TX_DES*)GEI_GET_TX_DESC_ADDR(ix);
printf("%03d 0x%08x 0x%04x 0x%02x 0x%02x\n", \
ix,Drv_Swap32((UINT32)pTxDesc->pTxBufferLow),Drv_Swap16(pTxDesc->TxpktLen), \
pTxDesc->TxCmd,pTxDesc->TxStatus);
}
printf("\n********** Rx BDs Information:**********\nRxBdBaseAddr=0x%x,RxBdNum=%d,RxBdIndx=%d\n",\
pDrvCtrl->pRxDescBase,pDrvCtrl->rxDescNum,pDrvCtrl->rxDescTail);
printf("RxBD BufAddress Length Errors Status\n");
for(ix=0;ix<pDrvCtrl->rxDescNum;ix++)
{
pRxDesc = (INTEL82543_RX_DES*)GEI_GET_RX_DESC_ADDR(ix);
printf("%03d 0x%08x 0x%04x 0x%02x 0x%02x\n", \
ix,Drv_Swap32((UINT32)pRxDesc->pRxBufferLow),Drv_Swap16(pRxDesc->RxpktLen), \
pRxDesc->RxErr,pRxDesc->RxStatus);
}
return;
}
void gei82543DebugHelp(void)
{
printf("Global Debug Variable gei82543GCDebug\n");
printf("DRV_DEBUG_OFF 0x0000\n");
printf("DRV_DEBUG_RX 0x0001\n");
printf("DRV_DEBUG_TX 0x0002\n");
printf("DRV_DEBUG_INT 0x0004\n");
printf("DRV_DEBUG_POLL (DRV_DEBUG_POLL_RX | DRV_DEBUG_POLL_TX)\n");
printf("DRV_DEBUG_POLL_RX 0x0008\n");
printf("DRV_DEBUG_POLL_TX 0x0010\n");
printf("DRV_DEBUG_LOAD 0x0020\n");
printf("DRV_DEBUG_IOCTL 0x0040\n");
printf("DRV_DEBUG_TIMER 0x20000\n");
return;
}
void gei82543DrvInfoShow(UINT8 slot)
{
END_DEVICE* pDrvCtrl=(END_DEVICE *)NULL;
if ((END_DEVICE *)NULL== (pDrvCtrl = gei82543Unit (slot)))
{
return (void)ERROR;
}
printf("***************Slot %d Driver Control Information**************\n",pDrvCtrl->drvObj.slot);
printf("Registers Base Address :0x%x\n",pDrvCtrl->devRegBase);
printf("TX Descriptor Base :0x%x\n",(UINT32)pDrvCtrl->pTxDescBase);
printf("RX Descriptor Base :%p\n",pDrvCtrl->pRxDescBase);
printf("TBD Size :%d\n",TXDESC_SIZE);
printf("RBD size :%d\n",RXDESC_SIZE);
printf("TX Tail :%d\n",pDrvCtrl->txDescTail);
printf("RX Tail :%d\n",pDrvCtrl->rxDescTail);
printf("TX Descriptors Number :%d\n",pDrvCtrl->txDescNum);
printf("RX Descriptors Number :%d\n",pDrvCtrl->rxDescNum);
printf("RX Buffer Size :%d\n",pDrvCtrl->rxBufSize);
printf("RX Handling Indicator :%d\n",pDrvCtrl->rxtxHandling);
printf("RX Buffer Memory :%p\n",pDrvCtrl->pRxBufMem);
printf("Max Packets per Int :%d\n",pDrvCtrl->maxRxNumPerInt);
printf("Multicast Table Type :%d\n",pDrvCtrl->multiCastFilterType);
printf("Link Status :%d\n",pDrvCtrl->linkStatus);
printf("Link Method :%d\n",pDrvCtrl->linkMethod);
printf("Control Register Value :0x%08x\n",pDrvCtrl->devCtrlRegVal);
printf("Receive Control Value :0x%08x\n",pDrvCtrl->rxCtrlRegVal);
printf("Transmit Configuration :0x%08x\n",pDrvCtrl->txConfigureWord);
printf("Cable Type :%d\n",pDrvCtrl->cableType);
printf("RXTX Total Memory Size :%d\n",pDrvCtrl->memSize);
printf("Driver Attach :%d\n",pDrvCtrl->attach);
printf("Driver Start :%d\n",pDrvCtrl->devStartFlag);
printf("Driver Flags :0x%08x\n",pDrvCtrl->flags);
printf("Driver Object Flags :0x%08x\n",pDrvCtrl->drvObj.flag);
printf("Multicast Address Num :%d\n",pDrvCtrl->drvObj.nMulti);
return;
}
void gei82543Help(void)
{
printf("**********MGEO 82545GM Help Information**********\n");
printf("\n"); printf("Display the 82545 driver information\n");
printf("Func:gei82543DrvInfoShow(slot)\n");
printf("\n"); printf("Display the 82545 status information\n");
printf("Func:gei82543StatusShow(slot)\n");
printf("\n");
printf("Display the 82545 statistic register information\n");
printf("Func:gei82543DumpCount(slot)\n");
printf("\n");
printf("Display the 82545 buffer information\n");
printf("Func:gei82543BDShow(slot)\n");
printf("\n"); printf("Display the 82543 register information\n");
printf("Func:gei82543RegShow(slot)\n");
printf("\n");
printf("Display the MGEO CPLD register information\n");
printf("Func:gei82543CpldRegShow(slot)\n");
printf("\n"); printf("Display the 82543 statistics information\n");
printf("Func:gei82543ShowCount(slot)\n");
printf("\n"); printf("Clear the 82543 statistics information\n");
printf("Func:gei82543ClearCount(slot)\n");
printf("\n");
printf("Display the 82543 pci information\n");
printf("Func:sys543Show(slot)\n");
printf("\n");
printf("Display the 82543 debug help\n");
printf("Func:gei82543DebugHelp()\n");
printf("\n");
return;
}
/******************************************************
Function:
gei82543cpldRegShow()
Description:
读CPLD寄存器内容
Inputs:
slotNum 槽位号
Outputs:
None
Returns:
UINT32 32位,低八位有效
Remarks:
*******************************************************/
STATUS gei82543CpldRegShow(UINT8 slot)
{
UINT32 baseaddr;
int ix;
UINT32 addr;
UINT8 value;
for(ix = 0;ix < 16;ix++)
{
baseaddr = b_infBaseAddrGet(slot);
addr=baseaddr + IF_TYPE_REG + (UINT32)ix * 4;
value = (UINT8)Drv_Swap32(*((UINT32 *)(addr)));
printf("addr=0x%8x, value=0x%2x\n",addr,value);
}
return OK;
}
#endif /* INCLUDE_GEI82543_DEBUG_ROUTINE */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -