⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gei82543debug.c

📁 intel 82543 千兆网卡 vxworks驱动源码
💻 C
📖 第 1 页 / 共 2 页
字号:
* 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 + -