vxworks phy调试续

LOCAL STATUS etsecPhyRead
    (
    VXB_DEVICE_ID pDev,
    UINT8 phyAddr,
    UINT8 regAddr,
    UINT16 *dataVal
    )
    {
    ETSEC_DRV_CTRL * pDrvCtrl;
    STATUS rval = ERROR;
    FUNCPTR miiRead;
    int i;


    pDrvCtrl = pDev->pDrvCtrl;


    if (CSR_READ_4(pDev, ETSEC_ECNTRL) & ETSEC_ECNTRL_TBIM)
        {
        if (regAddr == MII_PHY_ID1_REG)
            {
            *dataVal = TBI_ID1;
            return (OK);
            }
        if (regAddr == MII_PHY_ID2_REG)
            {
            *dataVal = TBI_ID2;
            return (OK);
            }
        }
    else
        {
        /* Avoid tripping over the TBI management port */


        if (phyAddr == pDrvCtrl->etsecTbiAddr)
            {
            *dataVal = 0xFFFF;
            return (ERROR);
            }
        }


    if (phyAddr != pDrvCtrl->etsecMiiPhyAddr && phyAddr < 0x20)
        {
        *dataVal = 0xFFFF;
        return (ERROR);
        }




    if (phyAddr > 0x1F)
        phyAddr -= 32;
/*this is a false phy*/
if(pDrvCtrl->etsecMiiPhyAddr == 0x7){
       *dataVal = 0x1234;
       return (OK);

}



    /*
     * If we're not the management device (ETSEC0), then
     * forward the read request.
     */


    if (pDrvCtrl->etsecMiiDev != pDev && pDrvCtrl->etsecMiiPhyRead != NULL)
        {
        miiRead = pDrvCtrl->etsecMiiPhyRead;
        phyAddr += 32;
        return (miiRead (pDrvCtrl->etsecMiiDev, phyAddr, regAddr, dataVal));
        }


    semTake (pDrvCtrl->etsecDevSem, WAIT_FOREVER);


    CSR_WRITE_4(pDev, ETSEC_MIIMADD, regAddr | (phyAddr << 8));
    CSR_WRITE_4(pDev, ETSEC_MIIMCOM, 0);
    CSR_WRITE_4(pDev, ETSEC_MIIMCOM, ETSEC_MIIMCOM_READ);


    for (i = 0; i < ETSEC_TIMEOUT; i++)
        {
        if ((CSR_READ_4(pDev, ETSEC_MIIMIND) &
            (ETSEC_MIIMIND_BUSY|ETSEC_MIIMIND_NOT_VALID)) == 0)
            break;
        }


    if (i == ETSEC_TIMEOUT)
        *dataVal = 0xFFFF;
    else
        {
        *dataVal = CSR_READ_4(pDev, ETSEC_MIIMSTAT) & 0xFFFF;
        rval = OK;
        }


    semGive (pDrvCtrl->etsecDevSem);


    return (rval);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值