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_driver 代码语言:javascript 代码运行次数:0 运行 AI代码解释 struct phy_driver { struct mdio_driver_common mdiodrv; u32 phy_id; char *name; u32 phy_id_mask; u32 features; u32 flags; const void *driver_data; int (*soft_reset)(struct phy_device *phydev); int (*config_init)(struc...
new_driver->mdiodrv.flags |= MDIO_DEVICE_IS_PHY; new_driver->mdiodrv.driver.name = new_driver->name;//驱动名称 new_driver->mdiodrv.driver.bus = &mdio_bus_type;//驱动挂载的总线 new_driver->mdiodrv.driver.probe = phy_probe;//PHY设备和驱动匹配后调用的probe函数 new_driver->mdiodrv.dr...
每个phy 芯片会创建一个 struct phy_device 类型的设备,对应的有 struct phy_driver 类型的驱动,这两者实际上是挂载在 mdio_bus_type 总线上的,mac 会被注册成 struct net_device。 phy_devicestructphy_device{ structphy_driver*drv;// PHY设备驱动 structmii_bus*bus;// 对应的MII总线 structdevicedev;//...
每个phy 芯片会创建一个 struct phy_device 类型的设备,对应的有 struct phy_driver 类型的驱动,这两者实际上是挂载在 mdio_bus_type 总线上的,mac 会被注册成 struct net_device。 phy_device struct phy_device{struct phy_driver*drv;// PHY设备驱动struct mii_bus*bus;// 对应的MII总线struct device dev...
PHY_DOWN: phy、phy driver、mac 都没准备好 如果phy driver 被集成在内核中,PHY.probe 后,phydev 状态为 PHY_READY。 如果phy driver 被未集成在内核中,PHY.probe 后,phydev 状态为 PHY_STARTING。 PHY_READY:phy、phy driver 已经就绪,mac 未准备好 ...
.read_status=&genphy_read_status, .ack_interrupt=&rtl8211f_ack_interrupt, .config_intr=&rtl8211f_config_intr, .suspend=genphy_suspend, .resume=genphy_resume, }, }; module_phy_driver(realtek_drvs);//注册PHY驱动 staticstructmdio_device_id__maybe_unusedrealtek_tbl[]={ ...
driver_probe_device phy_probe//非常重要的一个探测接口 phydev->supported=phydrv->features;//phydrv->features = PHY_BASIC_FEATURES | SUPPORTED_Pause | SUPPORTED_Asym_Pause phydev->advertising=phydrv->features; phydev->state=PHY_READY;//设置phy的状态 ---2--- phy_...
PHY一般和具体的MAC控制驱动联系一起,这里以TI的MAC驱动为例,由它切入到PHY驱动。Linux内核通过mdio总线访问、控制PHY,源码实现在driver/net/phy/mdio_bus.c中。下面是mdio扫描、找到并注册phy的过程: 1.davinci_mdio_probe 2.->mdiobus_register 3.-> device_register ...
.read_status = &genphy_read_status, .suspend = genphy_suspend, .resume = genphy_resume, .driver = { .owner = THIS_MODULE,}, }; static int __init rtl820x_init(void) { int ret; ret = phy_driver_register(&rtl820x_driver); ...