免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1291 | 回复: 0
打印 上一主题 下一主题

请问如何配置网卡自动协商模式? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-03-30 14:00 |只看该作者 |倒序浏览
设置pxa255开发板上嵌入式网卡LAN91C11X系列的自动协商模式部分代码如下:
// Copy our capabilities from PHY_STAT_REG to PHY_AD_REG
        my_phy_caps = ReadPhyReg(*pphyaddr, PHY_STAT_REG);
        my_ad_caps = PHY_AD_CSMA;        // I am CSMA capable
        my_self_caps = 0;
        if (my_phy_caps & PHY_STAT_CAP_T4)
                my_ad_caps |= PHY_AD_T4;
       
        if (my_phy_caps & PHY_STAT_CAP_TXF)
                my_ad_caps |= PHY_AD_TX_FDX;

        if (my_phy_caps & PHY_STAT_CAP_TXH)
                my_ad_caps |= PHY_AD_TX_HDX;

        if (my_phy_caps & PHY_STAT_CAP_TF)
                my_ad_caps |= PHY_AD_10_FDX;

        if (my_phy_caps & PHY_STAT_CAP_TH)
                my_ad_caps |= PHY_AD_10_HDX;
        /*
        if(my_phy_caps & (PHY_STAT_CAP_T4 |PHY_STAT_CAP_TXF |
                                        PHY_STAT_CAP_TXH))
                                        my_self_caps |= PHY_CNTL_SPEED;
        if(my_phy_caps & (PHY_STAT_CAP_TXF | PHY_STAT_CAP_TF))
                                        my_self_caps |= PHY_CNTL_DPLX;
        */
        // Update our Auto-Neg Advertisement Register
        WritePhyReg(*pphyaddr, PHY_AD_REG, my_ad_caps);

        PRINTK("%s:phy caps=%x\n", CARDNAME, my_phy_caps);
        PRINTK("%s:phy advertised caps=%x\n", CARDNAME, my_ad_caps);
       
        // Restart auto-negotiation process in order to advertise my caps
        WritePhyReg(*pphyaddr, PHY_CNTL_REG,
                               PHY_CNTL_ANEG_EN | PHY_CNTL_ANEG_RST);
        Delay(3);
        // Wait for the auto-negotiation to complete.  This may take from
        // 2 to 3 seconds.
        // Wait for the reset to complete, or time out
        timeout = 3;                // Wait up to 10 seconds
        while (timeout--) {
                status = ReadPhyReg(*pphyaddr, PHY_STAT_REG);
                if (status & PHY_STAT_ANEG_ACK) {
                        // auto-negotiate complete
                        break;
                }
                Delay(3);

                // Restart auto-negotiation if remote fault
                if (status & PHY_STAT_REM_FLT) {
                        PRINTK("%sHY remote fault detected\n\n", CARDNAME);

                        // Restart auto-negotiation
                        PRINTK("%sHY restarting auto-negotiation\n",
                                CARDNAME);
                        WritePhyReg(*pphyaddr, PHY_CNTL_REG,
                                               PHY_CNTL_ANEG_EN |
                                               PHY_CNTL_ANEG_RST |
                                               PHY_CNTL_SPEED | PHY_CNTL_DPLX);
                }
        }
但是始终超时失败,网线是正常直连模式。
怎杨抓到目标机发出的协商包?比如用rethereal?以判断目标机是否进行协商?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP