亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? c6455_mdio.c

?? TI公司的NSP
?? C
?? 第 1 頁 / 共 2 頁
字號:
                // If we didn't find a PHY, try again
                if( tmp1 == 32 )
                {
                    pd->phyAddr       = 0;
                    pd->phyState      = PHYSTATE_MDIOINIT;
                    pd->phyStateTicks = 0;
                    RetVal = MDIO_EVENT_PHYERROR;
                }
            }
            break;

        case PHYSTATE_NWAYSTART:
            /*
            // Here we started NWAY. We check to see if NWAY is done.
            // If not done and timeout occured, we find another PHY.
            */

            /* Read the CONTROL reg to verify "restart" is not set */
            PHYREG_read( PHYREG_CONTROL, pd->phyAddr );
            PHYREG_waitResultsAck( tmp1, ack );
            if( !ack )
            {
                MDIO_initStateMachine( pd );
                break;
            }
            if( tmp1 & PHYREG_CONTROL_AUTORESTART )
                goto CheckTimeout;

            /* Flush latched "link status" from the STATUS reg */
            PHYREG_read( PHYREG_STATUS, pd->phyAddr );
            PHYREG_wait();

            pd->phyState = PHYSTATE_NWAYWAIT;

            /* Fallthrough */

        case PHYSTATE_NWAYWAIT:
            /*
            // Here we are waiting for NWAY to complete.
            */

            /* Read the STATUS reg to check for "complete" */
            PHYREG_read( PHYREG_STATUS, pd->phyAddr );
            PHYREG_waitResultsAck( tmp1, ack );
            if( !ack )
            {
                MDIO_initStateMachine( pd );
                break;
            }
            if( !(tmp1 & PHYREG_STATUS_AUTOCOMPLETE) )
                goto CheckTimeout;

            /* We can now check the negotiation results */

                        if ( (macsel == CSL_DEV_DEVSTAT_MACSEL_GMII) || (macsel == CSL_DEV_DEVSTAT_MACSEL_RGMII) )
                        {
                                PHYREG_read( PHYREG_1000CONTROL, pd->phyAddr );
                                PHYREG_waitResults( tmp1gig );
                                PHYREG_read( PHYREG_1000STATUS, pd->phyAddr );
                                PHYREG_waitResults( tmp2gig );
                        }

            PHYREG_read( PHYREG_ADVERTISE, pd->phyAddr );
            PHYREG_waitResults( tmp1 );
            PHYREG_read( PHYREG_PARTNER, pd->phyAddr );
            PHYREG_waitResults( tmp2 );
            /*
            // Use the "best" results
            */
            tmp2 &= tmp1;

            /* Check first for 1 Gigabit */
                        if( (tmp1gig & PHYREG_ADVERTISE_FD1000) && (tmp2gig & PHYREG_PARTNER_FD1000) )
                                pd->PendingStatus = MDIO_LINKSTATUS_FD1000;
            else if( tmp2 & PHYREG_ADVERTISE_FD100 )
                pd->PendingStatus = MDIO_LINKSTATUS_FD100;
            else if( tmp2 & PHYREG_ADVERTISE_HD100 )
                pd->PendingStatus = MDIO_LINKSTATUS_HD100;
            else if( tmp2 & PHYREG_ADVERTISE_FD10 )
                pd->PendingStatus = MDIO_LINKSTATUS_FD10;
            else if( tmp2 & PHYREG_ADVERTISE_HD10 )
                pd->PendingStatus = MDIO_LINKSTATUS_HD10;
            /*
            // If we get here the negotiation failed
            // We just use HD 100 or 10 - the best we think we can do
            */
            else if( tmp1 & PHYREG_ADVERTISE_HD100 )
                pd->PendingStatus = MDIO_LINKSTATUS_HD100;
            else
                pd->PendingStatus = MDIO_LINKSTATUS_HD10;

            pd->phyState = PHYSTATE_LINKWAIT;

            /* Fallthrough */

        case PHYSTATE_LINKWAIT:
            /*
            // Here we are waiting for LINK
            */

            /* Read the STATUS reg to check for "link" */
            PHYREG_read( PHYREG_STATUS, pd->phyAddr );
            PHYREG_waitResultsAck( tmp1, ack );
            if( !ack )
            {
                MDIO_initStateMachine( pd );
                break;
            }
            if( !(tmp1 & PHYREG_STATUS_LINKSTATUS) )
                goto CheckTimeout;

            /* Make sure we're linked in the MDIO module as well */
            ltmp1 = MDIO_REGS->LINK;
            if( !(ltmp1&(1<<pd->phyAddr)) )
                goto CheckTimeout;

            /* Start monitoring this PHY */
            MDIO_REGS->USERPHYSEL0 = pd->phyAddr;

            /* Clear the link change flag so we can detect a "re-link" later */
            MDIO_REGS->LINKINTRAW = 1;

            /* Setup our linked state */
            pd->phyState   = PHYSTATE_LINKED;
            pd->LinkStatus = pd->PendingStatus;
            RetVal = MDIO_EVENT_LINKUP;

            break;
        }
    }

    return( RetVal );
}


/*-----------------------------------------------------------------------*\
* MDIO_initPHY()
*
* Force a switch to the specified PHY, and start the negotiation process.
*
* Returns 1 if the PHY selection completed OK, else 0
\*-----------------------------------------------------------------------*/
uint MDIO_initPHY( Handle hMDIO, volatile uint phyAddr )
{
    MDIO_Device *pd = (MDIO_Device *)hMDIO;
    Uint32         ltmp1;
    uint           i,ack;

    /* Switch the PHY */
    pd->phyAddr = phyAddr;

    /* There will be no link when we're done with this PHY */
    pd->LinkStatus = MDIO_LINKSTATUS_NOLINK;

    /* Shutdown all other PHYs */
    ltmp1 = MDIO_REGS->ALIVE ;
    for( i=0; ltmp1; i++,ltmp1>>=1 )
    {
        if( (ltmp1 & 1) && (i != phyAddr) )
        {
            PHYREG_write( PHYREG_CONTROL, i, PHYREG_CONTROL_ISOLATE |
                                             PHYREG_CONTROL_POWERDOWN );
            PHYREG_wait();
        }
    }

    /* Reset the PHY we plan to use */
    PHYREG_write( PHYREG_CONTROL, phyAddr, PHYREG_CONTROL_RESET );
    PHYREG_waitResultsAck( i, ack );

    /* If the PHY did not ACK the write, return zero */
    if( !ack )
        return(0);

        /* Settings for Broadcom phys */

        if ( macsel == CSL_DEV_DEVSTAT_MACSEL_RGMII )
        {
                //Put phy in copper mode
                PHYREG_write( PHYREG_ACCESS, phyAddr, PHYREG_ACCESS_COPPER );
                PHYREG_waitResultsAck( i, ack );

                /* If the PHY did not ACK the write, return zero */
                if( !ack )
                        return(0);

                PHYREG_write( 0x10, phyAddr, 0x0000 );  //GMII Interface
                PHYREG_wait();

                // Put phy in RGMII mode/in-band status data for PG 2.0
                if (EMAC_REGS->TXIDVER != 0x000C1207) {
                        PHYREG_write(PHYREG_SHADOW, phyAddr, PHYREG_SHADOW_INBAND);
                        PHYREG_waitResultsAck( i, ack );

                        /* If the PHY did not ACK the write, return zero */
                        if( !ack )
                                return(0);

                }
        }

        if ( macsel == CSL_DEV_DEVSTAT_MACSEL_GMII )
        {
                //Put phy in copper mode
        PHYREG_write( PHYREG_ACCESS, phyAddr, PHYREG_ACCESS_COPPER );
        PHYREG_wait();

                /* If the PHY did not ACK the write, return zero */
                if( !ack )
                        return(0);
        }

    /* Setup for our next state */
    pd->phyState = PHYSTATE_RESET;
    pd->phyStateTicks = 0;  /* Reset timeout */

    return(1);
}


/*-----------------------------------------------------------------------*\
* MDIO_initContinue()
*
* Continues the initialization process started in MDIO_initPHY()
*
* Returns 0 on an error, 1 on success
\*-----------------------------------------------------------------------*/
static uint MDIO_initContinue( MDIO_Device *pd )
{
    Uint16              tmp1,tmp2;
    Uint16              tmp1gig = 0;

    /* Read the STATUS reg to check autonegotiation capability */
    PHYREG_read( PHYREG_STATUS, pd->phyAddr );
    PHYREG_waitResults( tmp1 );

        if ( (macsel == CSL_DEV_DEVSTAT_MACSEL_GMII) || (macsel == CSL_DEV_DEVSTAT_MACSEL_RGMII) )
        {
                PHYREG_read( PHYREG_EXTSTATUS, pd->phyAddr );
                PHYREG_waitResults( tmp1gig );
        }

    /* See if we auto-neg or not */
    if( (pd->ModeFlags & MDIO_MODEFLG_AUTONEG) &&
                                     (tmp1 & PHYREG_STATUS_AUTOCAPABLE) )
    {
        /* We will use NWAY */

                /* Advertise 1000 for supported interfaces */
                if ( (macsel == CSL_DEV_DEVSTAT_MACSEL_GMII) || (macsel == CSL_DEV_DEVSTAT_MACSEL_RGMII) )
                {
                        tmp1gig >>= 4;
                        tmp1gig &= PHYREG_ADVERTISE_FD1000;

                        PHYREG_write( PHYREG_1000CONTROL, pd->phyAddr, tmp1gig );
                }

        /* Shift down the capability bits */
        tmp1 >>= 6;

        /* Mask with the capabilities */
        tmp1 &= ( PHYREG_ADVERTISE_FD100 | PHYREG_ADVERTISE_HD100 |
                  PHYREG_ADVERTISE_FD10 | PHYREG_ADVERTISE_HD10 );

        /* Set Ethernet message bit */
        tmp1 |= PHYREG_ADVERTISE_MSG;

        /* Write out advertisement */
        PHYREG_write( PHYREG_ADVERTISE, pd->phyAddr, tmp1 );
        PHYREG_wait();

        /* Start NWAY */
        PHYREG_write( PHYREG_CONTROL, pd->phyAddr, PHYREG_CONTROL_AUTONEGEN );
        PHYREG_wait();

        PHYREG_write( PHYREG_CONTROL, pd->phyAddr,
                      PHYREG_CONTROL_AUTONEGEN|PHYREG_CONTROL_AUTORESTART );
        PHYREG_wait();

        /* Setup current state */
        pd->ModeFlags |= MDIO_MODEFLG_NWAYACTIVE;
        pd->phyState = PHYSTATE_NWAYSTART;
        pd->phyStateTicks = 0;  /* Reset timeout */
    }
    else
    {
        /* We will use a fixed configuration */

        /* Shift down the capability bits */
        tmp1 >>= 10;

        /* Mask with possible modes */
        tmp1 &= ( MDIO_MODEFLG_HD10 | MDIO_MODEFLG_FD10 |
                  MDIO_MODEFLG_HD100 | MDIO_MODEFLG_FD100 );

        if ( (macsel == CSL_DEV_DEVSTAT_MACSEL_GMII) || (macsel == CSL_DEV_DEVSTAT_MACSEL_RGMII) )
        {
                        tmp1gig >>= 8;
                        tmp1gig&= MDIO_MODEFLG_FD1000;

                        /* Mask with what the User wants to allow */
                        tmp1gig &= pd->ModeFlags;

                }

        /* Mask with what the User wants to allow */
        tmp1 &= pd->ModeFlags;

        /* If nothing if left, move on */
        if( (!tmp1) && (!tmp1gig) )
            return(0);

        /* Setup Control word and pending status */
        if( tmp1gig ) {
                                tmp2 = PHYREG_CONTROL_SPEEDMSB | PHYREG_CONTROL_DUPLEXFULL;
                                pd->PendingStatus = MDIO_LINKSTATUS_FD1000;
                }
        else if( tmp1 & MDIO_MODEFLG_FD100 )
        {
            tmp2 = PHYREG_CONTROL_SPEEDLSB | PHYREG_CONTROL_DUPLEXFULL;
            pd->PendingStatus = MDIO_LINKSTATUS_FD100;
        }
        else if( tmp1 & MDIO_MODEFLG_HD100 )
        {
            tmp2 = PHYREG_CONTROL_SPEEDLSB;
            pd->PendingStatus = MDIO_LINKSTATUS_HD100;
        }
        else if( tmp1 & MDIO_MODEFLG_FD10 )
        {
            tmp2 = PHYREG_CONTROL_DUPLEXFULL;
            pd->PendingStatus = MDIO_LINKSTATUS_FD10;
        }
        else
        {
            tmp2 = 0;
            pd->PendingStatus = MDIO_LINKSTATUS_HD10;
        }

        /* Add in internal phy loopback if user wanted it */
        if( pd->ModeFlags & MDIO_MODEFLG_LOOPBACK )
            tmp2 |= PHYREG_CONTROL_LOOPBACK;

        /* Configure PHY */
        PHYREG_write( PHYREG_CONTROL, pd->phyAddr, tmp2 );
        PHYREG_wait();

        /* Add in external phy loopback with plug if user wanted it */
        if( pd->ModeFlags & MDIO_MODEFLG_EXTLOOPBACK ) {
                        PHYREG_write( PHYREG_SHADOW, pd->phyAddr, PHYREG_SHADOW_EXTLOOPBACK );
                        PHYREG_wait();
                }

        /* Setup current state */
        pd->ModeFlags &= ~MDIO_MODEFLG_NWAYACTIVE;
        pd->phyState = PHYSTATE_LINKWAIT;
        pd->phyStateTicks = 0;  /* Reset timeout */
    }

    return(1);
}


/*-----------------------------------------------------------------------*\
* MDIO_phyRegRead()
*
* Raw data read of a PHY register.
*
* Returns 1 if the PHY ACK'd the read, else 0
\*-----------------------------------------------------------------------*/
uint MDIO_phyRegRead( volatile uint phyIdx, volatile uint phyReg, Uint16 *pData )
{
    uint data,ack;

    PHYREG_read( phyReg, phyIdx );
    PHYREG_waitResultsAck( data, ack );
    if( !ack )
        return(0);
    if( pData )
        *pData = data;
    return(1);
}


/*-----------------------------------------------------------------------*\
* MDIO_phyRegWrite()
*
* Raw data write of a PHY register.
*
* Returns 1 if the PHY ACK'd the write, else 0
\*-----------------------------------------------------------------------*/
uint MDIO_phyRegWrite( volatile uint phyIdx, volatile uint phyReg, Uint16 data )
{
    uint ack;

    PHYREG_write( phyReg, phyIdx, data );
    PHYREG_waitResultsAck( data, ack );
    if( !ack )
        return(0);
    return(1);
}

/******************************************************************************\
* End of c6455_mdio.c
\******************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
经典三级视频一区| 色婷婷一区二区| 波多野结衣在线aⅴ中文字幕不卡| 91理论电影在线观看| 欧美剧情片在线观看| 欧美国产日韩a欧美在线观看| 亚洲制服丝袜一区| 高清av一区二区| 精品精品国产高清a毛片牛牛| 一区二区视频在线看| 国产精品综合一区二区三区| 欧美性色综合网| 亚洲人精品午夜| 国产成人免费9x9x人网站视频| 欧美一区二区三区视频在线| 亚洲欧美日韩综合aⅴ视频| 国产精品自产自拍| 精品国产乱码久久久久久久久| 亚洲福利视频三区| 91精品福利在线| 亚洲欧洲日产国码二区| 国产一二三精品| 337p日本欧洲亚洲大胆精品| 日韩精品亚洲一区| 欧美精品日韩一区| 午夜精品一区在线观看| 91浏览器打开| 亚洲精品国产视频| 色哟哟精品一区| 洋洋成人永久网站入口| 91美女福利视频| 亚洲日本va午夜在线电影| 国产成人h网站| 国产精品欧美精品| 成人av在线播放网址| 中文字幕第一区综合| 成人国产电影网| 亚洲色图一区二区三区| 99久久精品一区| 亚洲一区二区欧美| 欧美伦理影视网| 久久精品国产久精国产| 一区二区理论电影在线观看| 成人午夜视频在线| 亚洲人快播电影网| 欧美午夜影院一区| 日韩精品电影一区亚洲| 日韩手机在线导航| 国产不卡一区视频| 亚洲免费观看高清在线观看| 欧美在线你懂的| 美女mm1313爽爽久久久蜜臀| 精品国产一区二区国模嫣然| 国产99久久久久久免费看农村| 一区二区中文视频| 欧美午夜免费电影| 国内精品伊人久久久久av一坑| 久久精品夜色噜噜亚洲a∨| 高清不卡一二三区| 午夜不卡av在线| 国产三级三级三级精品8ⅰ区| 91一区在线观看| 日韩电影在线一区二区三区| 久久综合一区二区| 色婷婷综合久久久久中文一区二区| 亚洲成人午夜电影| 国产日韩欧美精品电影三级在线| 色网综合在线观看| 精品一区二区三区日韩| 中文字幕在线不卡视频| 精品婷婷伊人一区三区三| 精品亚洲免费视频| 一区二区三区中文在线观看| 日韩精品最新网址| 91浏览器在线视频| 日本午夜精品视频在线观看 | 2023国产精品视频| 99久久精品情趣| 老司机精品视频线观看86| 2024国产精品| 欧美日本乱大交xxxxx| 国产成人精品免费看| 亚洲国产精品麻豆| 中文子幕无线码一区tr| 欧美日韩精品综合在线| 成人精品视频一区二区三区尤物| 日韩精品一二三| 一区二区久久久久久| 日本一区二区三区视频视频| 欧美喷水一区二区| 日本道免费精品一区二区三区| 国内精品在线播放| 男女男精品网站| 午夜精品久久久久久久| 中文字幕亚洲区| 国产午夜精品久久久久久免费视| 欧美日韩免费一区二区三区| 国产在线精品一区二区夜色| 亚洲成人1区2区| 一区二区中文视频| 国产精品丝袜一区| 欧美xfplay| 日韩一区二区中文字幕| 欧美日韩国产一级片| 91啪九色porn原创视频在线观看| 岛国精品在线观看| 国产精品一品二品| 国产不卡视频一区二区三区| 国产在线国偷精品产拍免费yy | 国产乱码精品一区二区三| 日韩avvvv在线播放| 亚洲国产成人tv| 亚洲成人av一区二区| 亚洲一区二区三区在线| 亚洲一线二线三线久久久| 亚洲激情自拍偷拍| 一区二区三区91| 一区二区三区精品在线| 一区二区三区中文字幕电影| 一区二区三区小说| 亚洲国产美女搞黄色| 午夜影院久久久| 另类的小说在线视频另类成人小视频在线| 亚洲一区二区精品视频| 午夜国产精品影院在线观看| 日韩专区一卡二卡| 久久国产夜色精品鲁鲁99| 国内一区二区在线| 成人免费看视频| 色综合激情五月| 欧美精品三级日韩久久| 日韩一区二区在线播放| 2020国产精品久久精品美国| 欧美国产禁国产网站cc| 中文字幕一区日韩精品欧美| 亚洲欧美日韩人成在线播放| 亚洲尤物在线视频观看| 久久精品国产亚洲a| 日韩电影在线一区| 国产色婷婷亚洲99精品小说| 久久精品亚洲精品国产欧美kt∨| 久久久精品黄色| 国产精品久久久久一区二区三区共| 亚洲久本草在线中文字幕| 亚洲一区二区三区激情| 久久精品国产99久久6| 国产高清视频一区| 欧美性视频一区二区三区| 56国语精品自产拍在线观看| 久久久久亚洲综合| 一区二区高清在线| 九一九一国产精品| 色哟哟精品一区| 久久久久久黄色| 亚洲成在线观看| 国产成人精品aa毛片| 欧美日韩一区高清| 国产欧美视频一区二区三区| 亚洲综合在线五月| 国产乱码精品一品二品| 欧美在线小视频| 国产三级一区二区| 亚洲福利一区二区| 99久久久精品| 久久综合资源网| 亚洲成精国产精品女| 国产999精品久久久久久| 欧美视频精品在线| 国产精品传媒入口麻豆| 全部av―极品视觉盛宴亚洲| 9人人澡人人爽人人精品| 欧美一区二区三区免费观看视频| 国产精品不卡一区二区三区| 久草这里只有精品视频| 欧美日韩你懂的| 亚洲伦在线观看| 国产成人免费9x9x人网站视频| 欧美嫩在线观看| 一区二区三区欧美日| 成人黄色国产精品网站大全在线免费观看| 欧美精品在线观看播放| 亚洲欧洲另类国产综合| 国产精品一区二区在线观看网站| 欧美二区在线观看| 亚洲精品视频免费观看| 成人午夜精品一区二区三区| 欧美大片在线观看一区二区| 午夜精品一区二区三区免费视频| 91福利在线免费观看| 国产精品福利在线播放| 国产999精品久久久久久| 欧美精品一区二区久久久| 日本亚洲三级在线| 欧美乱妇23p| 亚洲大尺度视频在线观看| 欧美日韩一二三区| 亚洲成人免费电影| 欧美精品日韩一区| 青青草国产成人av片免费| 欧美日韩精品综合在线|