needs_aneg =true;break;casePHY_NOLINK:if(phy_interrupt_is_valid(phydev))break; err = phy_read_status(phydev);if(err)break;if(phydev->link) {if(AUTONEG_ENABLE == phydev->autoneg) { err = phy_aneg_done(phydev);if(err <0)break;if(!err) { phydev->state = PHY_AN; phydev->...
| val = phy_read(phydev, MII_ESTATUS);// 读取 mdio 0x0f 寄存器来确定 phy 的 1000M 能力 | linkmode_mod_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, phydev->supported, val & ESTATUS_1000_TFULL); | linkmode_mod_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT, phydev->supported, val & E...
READ PHY STATUS状态 在本状态时,本模块向子模块mdio_control发送所要读取的PHY芯片地址phy_address和寄存器地址register_address,并将mdio_read_en使信号置1,使能mdio_control模块接收数据,随后进入WAIT AUTO NEG DONE状态。在本例程中,读取的为1.2.2节中所述地址为0x19的状态寄存器的bit15,bit10~8,bit2。该寄存...
phy_read_status//读取phy的状态 phydev->drv->read_status(phydev);//.read_status = genphy_read_status genphy_read_status genphy_update_link phy_read(phydev,MII_BMSR);//读取phy的状态寄存器 if((status&BMSR_LSTATUS)==0)//phy 的链路状态 phydev->link=0;//设置网卡的状态处于断开状态 e...
int(*read_status)(struct phy_device *phydev); int(*ack_interrupt)(struct phy_device *phydev); int(*config_intr)(struct phy_device *phydev); int(*did_interrupt)(struct phy_device *phydev); void(*remove)(struct phy_device *phydev); ...
62.err = phy_read_status(phydev); //再次获取 phy 链路状态 63. 64.if (err) 65.break; 66. 67.if (phydev->link) { 68.phydev->state = PHY_RUNNING; //协商成功,建立连接,设置phy的状态为 PHY_RUNNING ---8--- 69.netif_carrier_on(phydev->attached_dev); 70.}...
read_status -> genphy_read_status:读取状态,是否连接上,当前速率、能力,等等,在phy状态机中,此函数经常被调用 下面给出probe的过程: 代码路径:drivers/net/phy/phy_device.c phy_probe在phy_driver_register赋值new_driver,实际上就是genphy_driver,在phy_init调用 ...
.read_status = bcm54210s_read_status, .ack_interrupt = bcm54xx_ack_interrupt, .config_intr = bcm54xx_config_intr, .driver = { .owner = THIS_MODULE }, }; 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 里面对phy的寄存器等进行初始化配置,这边对PHY的驱动进行简单的介绍...
PHYstatus:读流程时,PHY reg的内容会放到此 2.6 MIIMIND 指示寄存器 NotVal:若置1,表示读流程结束,可以去读MIIMSTAT Scan: 若置1,表示扫描流程进行中 Busy: 只有置0时,才能进行新的读写流程 3. linux中MDIO的实现 读写PHY寄存器时通过2个函数 phy_read()和phy_write(), ...