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

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

?? esmcend.c

?? 基于嵌入式操作系統(tǒng)VxWorks的lan91c111的驅動程序
?? C
?? 第 1 頁 / 共 5 頁
字號:
    /* Output Register Address */      for (i=4;i>=0;i--)      esmcClkMDIO(pDev, MII_MGMTval | ESMC_MGMT_MDOE | ((RegAdd>>i) & 0x01) );           /* Implement Turnaround ('Z0') */      esmcClkMDIO(pDev, MII_MGMTval); #ifndef ESMC_LAN91C111     esmcClkMDIO(pDev, MII_MGMTval | ESMC_MGMT_MDOE);#endif     /* Read Data */     wData = 0;      for (i=15;i>=0;i--)          {#ifdef ESMC_LAN91C111         WRITE_WORD(pDev, ESMC_MGMT, MII_MGMTval);         WRITE_WORD(pDev, ESMC_MGMT, MII_MGMTval | ESMC_MGMT_MCLK);          taskDelay (1);         wData |= (((READ_WORD(pDev, ESMC_MGMT) & ESMC_MGMT_MDI) >> 1) << i);          WRITE_WORD(pDev, ESMC_MGMT, MII_MGMTval);#else         esmcClkMDIO(pDev, MII_MGMTval);          wData |= (((READ_WORD(pDev,ESMC_MGMT) & ESMC_MGMT_MDI) >> 1) << i); #endif         } #ifdef ESMC_LAN91C111     /* Send the Turnaround ('Z0') */      esmcClkMDIO(pDev, MII_MGMTval); #endif     return (wData);     } /********************************************************************************* mdioWrite - Write the MDI pin of the ESMC_MGMT register** RETURNS: N/A*/LOCAL void mdioWrite    (    ESMC_DEVICE* pDev,    unsigned char RegAdd,    unsigned short data    )    {    int i;    unsigned short MII_MGMTval;    ESMC_SWITCH_BANK(pDev, 3);    MII_MGMTval = READ_WORD(pDev, ESMC_MGMT);    MII_MGMTval &= 0xfff0; /* masking off lowest nibble */                         /* Output Preamble (32 '1's) */    for (i=0;i<32;i++)      esmcClkMDIO(pDev, MII_MGMTval | ESMC_MGMT_MDOE | ESMC_MGMT_MDO);     /* Output Start of Frame ('01') */     for (i=0;i<2;i++)      esmcClkMDIO(pDev, MII_MGMTval | ESMC_MGMT_MDOE | i);     /* Output OPCode ('01' for write or '10' for Read) */     esmcClkMDIO(pDev, MII_MGMTval | ESMC_MGMT_MDOE | 0 );     esmcClkMDIO(pDev, MII_MGMTval | ESMC_MGMT_MDOE | 1 );     /* Output PHY Address */     for (i=4;i>=0;i--)      esmcClkMDIO(pDev, MII_MGMTval | ESMC_MGMT_MDOE | ((pDev->phyAddr>>i) & 0x01) );     /* Output Register Address */      for (i=4;i>=0;i--)      esmcClkMDIO(pDev, MII_MGMTval | ESMC_MGMT_MDOE | ((RegAdd>>i) & 0x01) );          /* Implement Turnaround ('10') */     esmcClkMDIO(pDev, MII_MGMTval | ESMC_MGMT_MDOE | 1 );    esmcClkMDIO(pDev, MII_MGMTval | ESMC_MGMT_MDOE | 0 );     /* Write Data */    for (i=15;i>=0;i--)             esmcClkMDIO(pDev, MII_MGMTval | ESMC_MGMT_MDOE | ((data>>i) & 0x01));     }/********************************************************************************* phyResetLAN91C111- reset LAN91C111 PHY** RETURNS: N/A*/LOCAL void phyResetLAN91C111    (    ESMC_DEVICE *pDev               /* Pointer to device instance data */    )    {    unsigned short rv = 0;    unsigned short ID1;    unsigned short ID2;    unsigned short dataMacRPCR;    unsigned short dataPhyCtrl;    int timeout;    int ticksPerSec = sysClkRateGet ();    /* Reset the PHY, setting all other bits to zero */    mdioWrite(pDev, PHY_CONTROL, PHY_CTRL_RESET);    /*     * The loop delays for 125ms in order for the reset to complete.     * If after 125ms the device hasn't reset, we wait for another 125ms.     * We keep trying for this for 3 seconds before giving up.     */    timeout = 24; /* 125ms * 24 = 3 seconds */    while (timeout--)        {        if (((rv = mdioRead(pDev, PHY_CONTROL)) & PHY_CTRL_RESET) == 0)            {            /* reset complete */            break;            }        taskDelay (ticksPerSec / 8); /* delay for 125ms */        }    if (timeout < 1)        {        DRV_LOG (DRV_DEBUG_FN_TRACE,                 "phyResetLAN91C111 PHY reset not completed, timeout: %d, PHY_CONTROL: 0x%x\n",                 timeout, (int)rv, 3, 4, 5, 6);        }    DRV_LOG (DRV_DEBUG_FN_TRACE,             "phyResetLAN91C111: PHY reset completed, timeout: %d, PHY_CONTROL: 0x%x\n",             timeout, (int)rv, 3, 4, 5, 6);    /* Configure PHY Interrupt Mask register */    mdioWrite(pDev, PHY_MASK_REG, PHY_MASK_LNKFAIL                                  | PHY_MASK_INT                                  | PHY_MASK_LOSSSYNC                                  | PHY_MASK_CWRD                                  | PHY_MASK_SSD                                  | PHY_MASK_ESD                                  | PHY_MASK_RPOL                                  | PHY_MASK_JAB                                  | PHY_MASK_SPDDET                                  | PHY_MASK_DPLXDET);    /* If speed or duplex are equal to 2, we must auto-negotiation. */    if ((pDev->speed == 2) || (pDev->duplex == 2))        {        /* Configure for auto-negotiation mode */        /* Configure the Receive/Phy Control register */                DRV_LOG (DRV_DEBUG_FN_TRACE,                 "((pDev->speed == 2) || (pDev->duplex == 2))"                 ,1, 2, 3, 4, 5, 6);        ESMC_SWITCH_BANK(pDev, 0);        WRITE_WORD(pDev, ESMC_RPCR, ESMC_RPCR_DEFAULT | ESMC_RPCR_ANEG);        /* Update our Auto-Neg Advertisement Register */        mdioWrite (pDev, PHY_AUTO_AD, PHY_AUTO_AD_TA3                                      | PHY_AUTO_AD_TA2                                      | PHY_AUTO_AD_TA1                                      | PHY_AUTO_AD_TA0                                       | PHY_AUTO_AD_S0);        /* Start auto-negotiation process */        mdioWrite (pDev, PHY_CONTROL, PHY_CTRL_NWAYEN | PHY_CTRL_NWAYREST);        /*         * The loop delays for 250ms in order for the auto-negitiation to complete.         * If after 250ms a remote fault is reported, the process is restarted.         * We keep trying for this for 3 seconds before giving up.         */        timeout = 12; /* 250ms * 12 = 3 seconds */        while (timeout--)            {            taskDelay (ticksPerSec / 4); /* delay for 250ms */            rv = mdioRead(pDev, PHY_STATUS);            DRV_LOG (DRV_DEBUG_FN_TRACE,                     "phyResetLAN91C111: 2. Auto-negotiation, timeout: %d, PHY_STATUS: 0x%x\n",                     timeout, (int)rv, 3, 4, 5, 6);            if (rv & PHY_STAT_NWAY_COMP)                {                /* auto-negotiate complete OK */                DRV_LOG (DRV_DEBUG_FN_TRACE,                         "phyResetLAN91C111: Auto-negotiation OK, PHY_STATUS 0x%x\n",                         (int)rv, 2, 3, 4, 5, 6);                break;                }            /* Restart auto-negotiation if remote fault */            if (rv & PHY_STAT_REM_FAULT)                {                /* Restart auto-negotiation */                mdioWrite(pDev, PHY_CONTROL, PHY_CTRL_NWAYEN                                             | PHY_CTRL_NWAYREST                                             | PHY_CTRL_SPEED                                             | PHY_CTRL_DUPLEX);                }            }        }    else        {        /* Configure speed & duplex manually. */        /* Configure the Receive/Phy Control register */        dataMacRPCR = 0;        dataPhyCtrl = 0;        ESMC_SWITCH_BANK (pDev, 0);        if (pDev->speed == 1)              {            /* 100MBPS */            dataMacRPCR |= ESMC_RPCR_SPEED;            dataPhyCtrl |= PHY_CTRL_SPEED;            }        /* Set to Half or Full Duplex if necessary */        if (pDev->duplex == 1)             {            /* Full duplex */            dataMacRPCR |= ESMC_RPCR_DPLX;            dataPhyCtrl |= PHY_CTRL_DUPLEX;            }        WRITE_WORD (pDev, ESMC_RPCR, dataMacRPCR | ESMC_RPCR_DEFAULT);        mdioWrite (pDev, PHY_CONTROL, dataPhyCtrl);        }    /* Display the PHY ID registers */    ID1 = mdioRead(pDev, PHY_ID1);    ID2 = mdioRead(pDev, PHY_ID2);    DRV_LOG (DRV_DEBUG_FN_TRACE, "phyResetLAN91C111: ID1 0x%x ID2 0x%x\n", ID1, ID2, 3, 4, 5, 6);    (void)mdioRead(pDev, PHY_STATUS_OUTPUT); /* Read out old latched values */    rv = mdioRead(pDev, PHY_STATUS_OUTPUT);  /* Read current status */    DRV_LOG (DRV_DEBUG_FN_TRACE, "phyResetLAN91C111: STATUS_OUTPUT 0x%x\n", rv, 2, 3, 4, 5, 6);    DRV_LOG (DRV_DEBUG_FN_TRACE, "phyResetLAN91C111: Device in %s MBPS Mode and %s duplex\n",            (rv & PHY_STATUS_SPDDET) ? (int)"100" : (int)"10",            (rv & PHY_STATUS_DPLXDET) ? (int)"full" : (int)"half",            3, 4, 5, 6);    //sleep(2);            }/********************************************************************************* phyReset- reset PHY** RETURNS: N/A*/LOCAL void phyReset    (     ESMC_DEVICE *pDev     )    {    int rtn;    unsigned short val1, val2;    int setVal;    int i;    if (pDev->phyAddr == -1)    {        /* Read the ID of the register*/        for (i=0; i <= 0x1f; i++)        {            pDev->phyAddr = i;            val1 = mdioRead(pDev, PHY_ID1);            val2 = mdioRead(pDev, PHY_ID2);            val2 &= 0xff00;            DRV_LOG(DRV_DEBUG_CONFIG,"The val1 is 0x%x and vl2 is 0x%x for i = %d\n", val1, val2, i,4,5,6);                        if (val1 == PHY_SMSC83C180_ID1 && val2 == PHY_SMSC83C180_ID2)                break;        }    }        /* reset PHY */    mdioWrite(pDev,  PHY_CONTROL, 0x8000);        /* Wait for the reset bit to be cleared*/    while (1)    {      rtn = mdioRead(pDev, PHY_CONTROL);      if (!(rtn & 0x8000))          break;    }    setVal = 0;    /* Set to 100Mbits per sec if necessary */    if (pDev->speed == 1)      {        setVal |= 0x2000;    }        /* Set to Half or Full Duplex if necessary */     if (pDev->duplex == 1)      {        setVal |= 0x0100;     }     mdioWrite(pDev,  PHY_CONTROL, setVal);     rtn = mdioRead(pDev, PHY_CONTROL);}/********************************************************************************* esmcChipReset - reset SMC91c9x chip** RETURNS: N/A*/LOCAL void esmcChipReset     (    ESMC_DEVICE *pDev    )    {    unsigned short  val;    DRV_LOG (DRV_DEBUG_FN_TRACE, "%s%d: esmcChipReset\n",         (int) DEV_NAME, pDev->unit, 3, 4, 5, 6);        ESMC_SWITCH_BANK (pDev, 2);    WRITE_WORD(pDev,ESMC_INTERRUPT_, 0);        /* lock INT */       ESMC_SWITCH_BANK (pDev,0);         val = READ_WORD(pDev, ESMC_RCR);    WRITE_WORD (pDev, ESMC_RCR, ESMC_RCR_EPH_RST);    /* software reset */    val = READ_WORD(pDev, ESMC_RCR);    WRITE_WORD (pDev, ESMC_RCR, 0x0000);        /* RX disable */    WRITE_WORD (pDev, ESMC_TCR, 0x0000);        /* TX disable */    if (pDev->chipId != LAN91C111)        {        /* Program buffer size */        WRITE_WORD(pDev, ESMC_MCR, 0x0006);     /* 1532 bytes */        }    ESMC_SWITCH_BANK (pDev,1);    if (pDev->chipId == LAN91C100FD)    {        val = READ_WORD (pDev, ESMC_CONFIG);        WRITE_WORD (pDev, ESMC_CONFIG,        val | ESMC_CFG_NO_WAIT_ST);    }    val = READ_WORD (pDev, ESMC_CONTROL);    WRITE_WORD (pDev, ESMC_CONTROL,        val | ESMC_CTR_AUTO_RELEASE /* TX auto release */            | ESMC_CTR_LE_ENABLE);  /* link error enable */            ESMC_SWITCH_BANK (pDev,2);    WRITE_WORD (pDev, ESMC_MMU, ESMC_MMU_RESET);    /* MMU reset */    if (pDev->chipId == LAN91C100FD)    {        /* Reset the PHY chip */        phyReset( pDev);    }    else if (pDev->chipId == LAN91C111)    {        /* Reset the LAN91C111 internel PHY */        phyResetLAN91C111 (pDev);    }}/********************************************************************************* esmcMemInit - initialize memory for the chip** Using data in the control structure, setup and initialize the memory* areas needed.  If the memory address is not already specified, then allocate* cache safe memory.** RETURNS: OK or ERROR.*/LOCAL STATUS esmcMemInit    (    ESMC_DEVICE *    pDev,  /* device to be initialized */    int            clNum        /* number of clusters to allocate */    )    {    CL_DESC        clDesc;                      /* cluster description */    M_CL_CONFIG    clConfig;    bzero ((char *)&clConfig, sizeof(clConfig));    bzero ((char *)&clDesc, sizeof(clDesc));        pDev->endObj.pNetPool = (NET_POOL_ID) malloc (sizeof(NET_POOL));    if (pDev->endObj.pNetPool == NULL)        return (ERROR);    clDesc.clNum   = clNum;    clDesc.clSize  = MEM_ROUND_UP(ESMC_BUFSIZ + pDev->offset);    clDesc.memSize = ((clDesc.clNum * (clDesc.clSize + 4)) + 4);    clConfig.mBlkNum = clDesc.clNum * 2;    clConfig.clBlkNum = clDesc.clNum;    /*     * mBlk and cluster configuration memory size initialization     * memory size adjusted to hold the netPool pointer at the head.     */    clConfig.memSize =      (clConfig.mBlkNum * (M_BLK_SZ + sizeof (long)))      + (clConfig.clBlkNum * (CL_BLK_SZ + sizeof (long)));    clConfig.memArea = (char *) memalign(sizeof (long),                          clConfig.memSize);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情综合网av| 亚洲午夜精品在线| 日韩精品一区二区三区老鸭窝| 偷拍与自拍一区| 久久久久国产精品麻豆| 色婷婷av久久久久久久| 麻豆91小视频| 亚洲美女免费在线| 国产婷婷色一区二区三区| 欧美在线免费观看亚洲| 成人av电影在线网| 久久电影网站中文字幕| 午夜欧美大尺度福利影院在线看| 亚洲六月丁香色婷婷综合久久| 欧美经典一区二区三区| 亚洲国产精华液网站w| 欧美三级电影精品| 成人aa视频在线观看| 国产乱子伦视频一区二区三区| 亚洲制服欧美中文字幕中文字幕| 亚洲欧美在线另类| 国产精品久久久久久久久搜平片| 欧美一区二区美女| 日韩欧美在线观看一区二区三区| 在线不卡的av| 欧美日韩大陆在线| 欧美人动与zoxxxx乱| 欧美日韩精品二区第二页| 欧美日韩精品综合在线| 欧美日韩国产色站一区二区三区| 91国内精品野花午夜精品 | 国产精品一区二区久激情瑜伽| 日韩国产在线观看一区| 日韩有码一区二区三区| 五月综合激情日本mⅴ| 狠狠色丁香婷综合久久| 成人少妇影院yyyy| 色悠悠亚洲一区二区| 91麻豆精品一区二区三区| 国产不卡一区视频| 国产综合色精品一区二区三区| 不卡的av在线| 成人国产免费视频| 狠狠色丁香婷婷综合久久片| 国产成人丝袜美腿| 欧美精品日韩综合在线| 久久久精品黄色| 怡红院av一区二区三区| 国内精品写真在线观看| 色婷婷激情综合| 中文一区二区完整视频在线观看| 国产精品久久久久影院| 亚洲成年人影院| 成人精品一区二区三区四区| 一本大道久久a久久精二百| 日韩欧美亚洲另类制服综合在线| 日韩欧美一级二级三级久久久| 4438x成人网最大色成网站| 欧美精品一卡两卡| 综合欧美亚洲日本| 国产精品影视网| 69堂精品视频| 亚洲国产成人精品视频| 狠狠色狠狠色综合日日91app| 成人黄色大片在线观看| 9191久久久久久久久久久| 在线综合亚洲欧美在线视频| 久久综合久久99| 国产一区二区伦理片| 精品久久一区二区| 亚洲精品欧美在线| 99久久精品国产网站| 欧美国产97人人爽人人喊| 日韩国产欧美三级| 国产精品主播直播| 日韩视频在线永久播放| 美洲天堂一区二卡三卡四卡视频 | 狠狠色狠狠色合久久伊人| 日韩精品一区二区三区三区免费 | 欧美日韩视频在线第一区 | 亚洲精品免费视频| 亚洲一级二级在线| 正在播放一区二区| 另类中文字幕网| 日韩欧美一区二区视频| 三级不卡在线观看| 久久精品欧美一区二区三区麻豆| jiyouzz国产精品久久| 精品视频免费在线| 亚洲欧美日韩久久| 色综合色狠狠综合色| 亚洲欧美另类在线| 欧美色图激情小说| 天堂成人国产精品一区| 欧美一区二区三区四区五区| 久久精品国产一区二区三| 精品国产精品一区二区夜夜嗨| 精品在线你懂的| 国产精品女人毛片| 欧美日韩一区二区三区高清 | 丁香婷婷深情五月亚洲| 中文字幕在线观看不卡视频| 99视频在线精品| 亚洲国产视频一区| 欧美不卡一二三| 成人手机在线视频| 日韩中文字幕不卡| 国产片一区二区三区| 91精品蜜臀在线一区尤物| 丰满岳乱妇一区二区三区| 亚洲同性gay激情无套| 欧美大度的电影原声| 91看片淫黄大片一级在线观看| 日韩av午夜在线观看| 国产精品美女www爽爽爽| 欧美日韩精品一区二区三区四区| 国产精品羞羞答答xxdd| 亚洲精品成人在线| 精品国产一区二区三区四区四| 日本韩国欧美在线| 国产一区不卡在线| 久久精品99国产精品| 一区在线观看视频| 综合激情成人伊人| 久久日韩粉嫩一区二区三区 | 亚洲日穴在线视频| 亚洲va天堂va国产va久| 国产一区二区在线电影| 国内偷窥港台综合视频在线播放| 日本亚洲最大的色成网站www| 韩日精品视频一区| 99精品视频在线观看| 欧美曰成人黄网| 国产精品欧美久久久久无广告 | 欧美一级生活片| 亚洲摸摸操操av| 乱中年女人伦av一区二区| 成人精品视频.| 91精品国产综合久久精品app| 国产欧美视频在线观看| 国产女同性恋一区二区| 亚洲国产日韩综合久久精品| 精品亚洲成a人| 99久久久久免费精品国产 | 在线免费精品视频| 欧美日韩视频在线一区二区| 日韩亚洲欧美高清| 久久久久国产精品麻豆ai换脸| 国产日韩欧美高清在线| 亚洲欧美日韩国产一区二区三区| 亚洲福利国产精品| 免费久久精品视频| 成人免费va视频| 欧美一区二区久久久| 国产欧美久久久精品影院 | 顶级嫩模精品视频在线看| caoporen国产精品视频| 91看片淫黄大片一级在线观看| 欧美顶级少妇做爰| 综合电影一区二区三区| 日韩综合小视频| 蜜臀99久久精品久久久久久软件| 懂色av一区二区三区蜜臀| 6080午夜不卡| 欧美国产一区在线| 人人超碰91尤物精品国产| 国产福利91精品| 在线成人午夜影院| 一区二区三区视频在线看| 国产成人亚洲综合a∨婷婷图片| 欧美在线你懂的| 精品久久人人做人人爽| 日韩高清在线电影| 在线亚洲人成电影网站色www| 国产精品卡一卡二| 一区二区三区日韩| 久久国产婷婷国产香蕉| 丁香一区二区三区| 欧美视频精品在线观看| 69堂国产成人免费视频| 欧美精品一区二区三区在线| 亚州成人在线电影| 波多野结衣的一区二区三区| 91精品国产高清一区二区三区 | 日韩精品1区2区3区| 欧美日韩视频在线第一区| 欧美激情资源网| 国产成人av在线影院| 久久日韩粉嫩一区二区三区| 国产成人啪午夜精品网站男同| 337p日本欧洲亚洲大胆精品| 极品少妇一区二区| 欧美国产1区2区| 欧美三级电影网站| 日韩电影一二三区| 久久在线免费观看| 成人中文字幕电影| 亚洲欧美国产三级| 欧美一区二区精品在线| 国产精品一区二区无线|