phy驱动

     实现phy device处理相关的接口config_init、config_aneg、read_status、ack_interrupt、config_intr、did_interrupt、match_phy_device、ts_info、hwtstamp、rxtstamp、txtstamp、set_wol、get_wol
    其中config_init主要是对phy device进行一些初始化配置;
    config_aneg、read_status主要用于设置phy device的自适应机制已经获取phy的状态(主要用于获取适配速率、双工模式等),一般这两个接口直接使用genphy_config_aneg、genphy_read_status即可,触发该phy device有特殊的定义
    ack_interrupt、config_intr、did_interrupt主要用于phy device的link up/down相关的中断处理,这个与具体的phy device有关
    针对ts_info、hwtstamp、rxtstamp、txtstamp、set_wol、get_wol主要是时间戳相关的处理,大多数phy device均不需实现这几个接口。

    phy_read和phy_write定义在linux-4.9.225\include\linux\phy.h中
    mdiobus_read和mdiobus_write定义在linux-4.9.225\drivers\net\phy\mdio_bus.c
    
    总线注册的入口函数phy_device.c
    总线注册函数mdio_bus.c

    phy_init函数中不仅注册了mdio_bus总线,还注册了一个通用的PHY驱动作为缺省的内核PHY驱动

    PHY设备有多种不同的型号phy.h

    以太网MII接口类型大全-MII、RMII、SMII、GMII、RGMII、SGMII、XGMII、XAUI、RXAUI

    SGMII(高速模拟信号)接口支持10/100/1000M自适应

XAUI和SGMII的区别就是前者10G后者1G,介质无关

XAUI有4个lane,每个lane走2.5G有效数据(实际是3.125G,因为每8bit下插2bits的csma/cd的控制信号),RXAUI是XAUI的reduce版,由4个lane变成2个,6.25G per lane。

    features表示网卡支持的特性,看代码,在genphy_config_init会重新赋值的,这里的赋值似乎无效。soft_reset->genphy_soft_reset:软复位PHY,写1到寄存器0的第15位,该位会自动清零,故要等待其清零后才认为复位成功
    
   config_init ->genphy_config_init:初始化配置,主要初始化features,即supported和advertising
   config_aneg -> genphy_config_aneg:自动协商,当自动协商使能时,配置advertising,并重新自动协商。如不是,则强制设置(写寄存器0)
     aneg_done -> genphy_aneg_done: 读寄存器1,判断第5位,为1表示已经完成自动协商
     read_status -> genphy_read_status:读取状态,是否连接上,当前速率、能力,等等,在phy状态机中,此函数经常被调用


     RJ45 座子上一般有两个灯,一个黄色(橙色),一个绿色,绿色亮的话表示网络连接正常,黄色闪烁的话说明当前正在进行网络通信,黄灯闪动频率快表示网速好,这两个灯由 PHY 芯片控制。

识别phy的过程:
在网口驱动的probe中,调用mdiobus_register;
在mdiobus_register函数中,会对从0到PHY_MAX_ADDR(一般是31)依次调用mdiobus_scan;
在mdiobus_scan中会调用get_phy_device,如果返回成功,则调用phy_device_register;
在get_phy_device中,会调用get_phy_id来读取对应地址上的phy_id,然后如果满足((phy_id & 0x1fffffff) == 0x1fffffff),则认识该phy不存在。
然后在port的probe中会调用phy_connect来连接phy;
在phy_connect中,会调用bus_find_device_by_name来查找对应的phy是否存在。存在则connect_direct。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值