PHY的12种状态 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_connect分析 该接口主要用来进行一个net_device类型的变量与phy_device类型的变量的关联、设置phy_device的状态为PHY_READY,并启动phy_device的状态机,详细处理流程如下图所示 1.确认phy_device是否存在(根据传递的phy_device_id,在mdio_bus_type中查找phy_deviec); 2.若phy_device存在,则进行net_device与phy...
驱动程序一般要通过寄存器来控制PHY, 比如自动协商speed/duplex, 查询物理链路的状态Link up/down; MAC被使能后, 如果没有驱动设置控制寄存器的一个位(CTRL.SLU )的话, MAC和PHY是不能通讯的, 就是说MAC不知道PHY的link已经ready, 所以收不到任何数据的.这位设置以后, PHY完成自协商, 网卡才会有个Link change...
/* (1.1) 在 PHY_DOWN/PHY_READY 状态下不动作 */ casePHY_DOWN: casePHY_READY: break; /* (1.2) 在 PHY_UP 状态下,表明网口被 up 起来,需要启动自协商并且查询自协商后的 link 状态 如果自协商结果是 link up,进入 PHY_RUNNING 状态 如果自协商结果是 link down,进入 PHY_NOLINK 状态 */ casePH...
PHY_READY,//2 phy设备注册成功 PHY_PENDING,//3 phy芯片挂起 PHY_UP,//4 开启网卡,ifconfig eth0 up PHY_AN,//5 网卡自动协商 PHY_RUNNING,//6 网卡上已插入网线、并建立物理连接,同时会从这个状态切换到PHY_CHANGELINK PHY_NOLINK,//7 断网,如拔掉网线 ...
5. MAC被使能后, 如果没有驱动设置控制寄存器的一个位(CTRL.SLU )的话, MAC和PHY是不能通讯的, 就是说MAC不知道PHY的link已经ready, 所以收不到任何数据的。这位设置以后, PHY完成自协商, 网卡才会有个Link change的中断,知道物理连接已经Link UP了。
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状态的更改 ...
MAC被使能后, 如果没有驱动设置控制寄存器的一个位(CTRL.SLU)的话, MAC和PHY是不能通讯的, 就是说MAC不知道PHY的link已经ready, 所以收不到任何数据的.这位设置以后, PHY完成自协商, 网卡才会有个Link change的中断,知道物理连接已经Link UP了;6. 即使Link已经UP, MAC还需要enable接收器的一个位(RCTL.RX...
void phy_state_machine(struct work_struct *work) { old_state = phydev->state; /* (1) 状态机主体 */ switch (phydev->state) { /* (1.1) 在 PHY_DOWN/PHY_READY 状态下不动作 */ case PHY_DOWN: case PHY_READY: break; /* (1.2) 在 PHY_UP 状态下,表明网口被 up 起来,需要启动自协...