enumphy_state{PHY_DOWN =0,//关闭网卡PHY_STARTING,//PHY设备准备好了,PHY driver尚为准备好PHY_READY,//PHY设备注册成功PHY_PENDING,//PHY芯片挂起PHY_UP,//开启网卡PHY_AN,//网卡自协商PHY_RUNNING,//网卡已经插入网线并建立物理连接,该状态可切换到PHY_CHANGELINKPHY_NOLINK,//断网,拔掉网线PHY_FORCING,...
PHY_RESUMING这几个状态,一般由外部模块调用相应的接口进行跳转,而非phy_state_machine自动流转。 针对net_device也有相应的状态定义,如下图所示主要涉及如下几个状态 enum netdev_state_t { __LINK_STATE_START, __LINK_STATE_PRESENT, __LINK_STATE_NOCARRIER, __LINK_STATE_LINKWATCH_PENDING, __LINK_STATE...
->phy_device_create--创建PHY设备,设备总线为mdio_bus_type,设备类型为mdio_bus_phy_type。 ->phy_state_machine->phy_device_register->mdiobus_register_device--将PHY设备注册到MDIO总线。->phy_device_reset--对PHY进行复位。->phy_scan_fixups--判断设备是否需要Fixup,如需要则调用fixup->run()。->de...
* phy_state_machine - Handle the state machine * @work: work_struct that describes the work to be done */voidphy_state_machine(structwork_struct *work){structdelayed_work*dwork=to_delayed_work(work);structphy_device*phydev=container_of(dwork,structphy_device, state_queue);boolneeds_aneg =...
phy_state_machine() `-| phy_check_link_status() `-| phy_read_status() // (1) 读取 link 状态 `-| genphy_read_status() `-| { | genphy_update_link(phydev); // (1.1) 更新 link 状态 | if (phydev->autoneg == AUTONEG_ENABLE && old_link && phydev->link) return 0; | gen...
(phydev); //这里将调用 genphy_config_aneg genphy_config_aneg genphy_config_advert //自动协商声明,关于其源码详见如下 phydev->state = PHY_AN; //设置为自动协商,设置phy的状态为 PHY_AN ---4--- //此时函数返回,又重新进入到上面的状态机 phy_state_machine,不过此时的状态已经变为 PHY_AN cas...
INIT_DELAYED_WORK(&dev->state_queue,phy_state_machine);//初始化一个中断顶版本的延时工作队列,用来处理phy状态机 phy_device_register//phy设备注册 device_add//这里是通过堆栈信息打印的,详见下面的 堆栈信息 bus_probe_device device_attach bus_for_each_drv ...
|||---dev->state=PHY_DOWN//指示PHY设备和驱动程序尚未准备就绪,在PHY驱动的probe函数中会更改为READY |||---INIT_DELAYED_WORK(&dev->state_queue,phy_state_machine)//PHY的状态机(核心WORK) |||---INIT_WORK(&dev->phy_queue,phy_change)//由phy_interrupt/timer调度以处理PHY状态的更改 |||...
dev->state = PHY_DOWN;//指示PHY设备和驱动程序尚未准备就绪,在PHY驱动的probe函数中会更改为READY -> INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine);//PHY的状态机(核心WORK)后续解析 -> INIT_WORK(&dev->phy_queue, phy_change);// 由phy_interrupt / timer调度以处理PHY状态的更改 ...
| | | |--- dev->state = PHY_DOWN//指示PHY设备和驱动程序尚未准备就绪,在PHY驱动的probe函数中会更改为READY | | | |--- INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine)//PHY的状态机(核心WORK) | | | |--- INIT_WORK(&dev->phy_queue, phy_change)//由phy_interrupt / timer...