struct phy_driver 结构体定义

struct phy_driver {
    char *name;                       // PHY 驱动名称
    unsigned long phy_id;             // PHY 设备的唯一标识符
    unsigned long phy_id_mask;        // 用于匹配 PHY ID 的掩码
    u32 features;                     // 支持的 PHY 功能,例如 10/100/1000 Mbps,半/全双工等
    const struct phy_setting *supported; // 支持的 PHY 设置
    const struct phy_setting *advertises; // 驱动可以发布的功能
    
    /* PHY 操作函数 */
    int  (*probe)(struct phy_device *phydev);            // 设备检测时调用的函数
    int  (*config_init)(struct phy_device *phydev);      // 初始化 PHY 配置的函数
    int  (*soft_reset)(struct phy_device *phydev);       // 执行软复位
    int  (*config_aneg)(struct phy_device *phydev);      // 自动协商配置
    int  (*read_status)(struct phy_device *phydev);      // 读取 PHY 当前状态
    int  (*ack_interrupt)(struct phy_device *phydev);    // 中断处理确认函数
    irqreturn_t (*handle_interrupt)(struct phy_device *phydev); // 中断处理函数

    /* 可选功能 */
    int  (*suspend)(struct phy_device *phydev);          // 挂起 PHY 设备
    int  (*resume)(struct phy_device *phydev);           // 恢复 PHY 设备
    int  (*read_page)(struct phy_device *phydev);        // 读取页
    int  (*write_page)(struct phy_device *phydev, int page);  // 写入页

    /* 内核模块信息 */
    struct mdio_driver_common mdiodrv;  // MDIO 总线驱动
    struct device_driver driver;        // 设备驱动结构体
};

GPHY(Gigabit PHY)是一种用于千兆以太网的物理层(PHY)芯片,用于处理以太网设备的物理连接。它通常通过寄存器来控制和监控 PHY 的状态,寄存器的读写是 PHY 驱动与 PHY 芯片交互的主要方式。

GPHY 寄存器通常遵循 IEEE 802.3 标准中的MDIO(Management Data Input/Output)协议来进行访问。MDIO 协议中规定了 PHY 芯片的多个寄存器,这些寄存器包括控制寄存器、状态寄存器、自动协商寄存器等。下面介绍常见的 GPHY 寄存器及其功能。

1. 基本控制寄存器(Basic Control Register, BMCR,地址:0x00)

该寄存器用于控制 PHY 芯片的主要操作,特别是复位、自动协商、速度设置等。

  • 位 15 - 复位 (Reset):设置为 1 时,复位 PHY 芯片,复位完成后硬件会自动清除此位。
  • 位 14 - 速度选择 (Speed Selection):选择速度。1 表示 100Mbps,0 表示 10Mbps。
  • 位 12 - 自动协商 (Auto-Negotiation Enable):1 表示启用自动协商,0 表示禁用。
  • 位 11 - 电源下模式 (Power Down):1 表示进入低功耗模式。
  • 位 9 - 重启自动协商 (Restart Auto-Negotiation):1 表示重新启动自动协商过程。
  • 位 8 - 全双工模式 (Full Duplex):1 表示启用全双工,0 表示半双工。
  • 位 13 - 速度选择 (Speed Selection):与位 6 共同决定速度(结合使用)。

2. 基本状态寄存器(Basic Status Register, BMSR,地址:0x01)

该寄存器提供 PHY 芯片的当前状态信息,包括链路状态、能力等。

  • 位 2 - 链路状态 (Link Status):1 表示链路已建立,0 表示未建立。
  • 位 3 - 自动协商完成 (Auto-Negotiation Complete):1 表示自动协商完成。
  • 位 4 - 远端错误检测 (Remote Fault):1 表示检测到远端错误。
  • 位 5 - 能够进行自动协商 (Auto-Negotiation Capable):1 表示 PHY 支持自动协商。
  • 位 6 - 支持 10Mbps 半双工 (10BASE-T Half Duplex Capable):1 表示支持。
  • 位 7 - 支持 10Mbps 全双工 (10BASE-T Full Duplex Capable):1 表示支持。
  • 位 8 - 支持 100Mbps 半双工 (100BASE-TX Half Duplex Capable):1 表示支持。
  • 位 9 - 支持 100Mbps 全双工 (100BASE-TX Full Duplex Capable):1 表示支持。

3. PHY ID 寄存器 1 和 2(PHY Identifier Registers, PHYID1PHYID2,地址:0x02 和 0x03)

这些寄存器包含 PHY 芯片的制造商和型号 ID,用于识别特定的 PHY 芯片。

  • PHYID1:包含制造商的识别码。
  • PHYID2:包含制造商的扩展 ID 和 PHY 的版本号。

4. 自动协商广告寄存器(Auto-Negotiation Advertisement Register, ANAR,地址:0x04)

该寄存器用于控制 PHY 在自动协商期间发布其能力,例如支持的速度和双工模式。

  • 位 5 - 支持 10Mbps 半双工 (10BASE-T Half Duplex Capable):1 表示支持。
  • 位 6 - 支持 10Mbps 全双工 (10BASE-T Full Duplex Capable):1 表示支持。
  • 位 7 - 支持 100Mbps 半双工 (100BASE-TX Half Duplex Capable):1 表示支持。
  • 位 8 - 支持 100Mbps 全双工 (100BASE-TX Full Duplex Capable):1 表示支持。

5. 自动协商链接伙伴能力寄存器(Auto-Negotiation Link Partner Ability Register, ANLPAR,地址:0x05)

该寄存器表示链路对端设备在自动协商过程中报告的能力。

  • 位 5-8:与 ANAR 中类似,表示链路对端设备的能力。

6. 自动协商扩展寄存器(Auto-Negotiation Expansion Register, ANER,地址:0x06)

该寄存器提供自动协商过程中的额外状态信息。

  • 位 0 - 自动协商页面接收 (Auto-Negotiation Page Received):1 表示接收到新页面。
  • 位 1 - 能力匹配 (Capability Match):1 表示自动协商时能力匹配成功。

7. Gigabit 控制寄存器(Gigabit Control Register, GCR,地址:0x09)

该寄存器用于配置 PHY 在千兆速率下的工作模式。

  • 位 9 - 支持 1000Mbps 半双工 (1000BASE-T Half Duplex Capable):1 表示支持。
  • 位 10 - 支持 1000Mbps 全双工 (1000BASE-T Full Duplex Capable):1 表示支持。

8. Gigabit 状态寄存器(Gigabit Status Register, GSR,地址:0x0A)

该寄存器提供 PHY 在千兆速率下的状态信息。

  • 位 11 - 远端设备支持 1000Mbps 半双工 (1000BASE-T Half Duplex Capable):1 表示支持。
  • 位 12 - 远端设备支持 1000Mbps 全双工 (1000BASE-T Full Duplex Capable):1 表示支持。

9. 扩展控制寄存器(Extended Control Register, ECR,地址:0x10)

扩展控制寄存器通常用于特定厂商的扩展功能,如电源管理或诊断功能。

10. 中断寄存器(Interrupt Register, 可选)

一些 PHY 支持中断机制,通过此寄存器可以启用或禁用特定事件的中断,并查看中断状态。例如链路状态变化时可能会触发中断。

11. 页选择寄存器(Page Select Register, 可选)

有些 PHY 寄存器分为多个页,Page Select Register 用于选择当前访问的页号。

12. 专用和厂商定义寄存器

不同厂商的 PHY 芯片可能还会提供一些专用寄存器,用于诊断、调试或执行特定功能。这些寄存器的定义通常在芯片的技术文档中提供。

寄存器访问方法

  • MDIO 总线:通过 MDIO 接口访问 GPHY 寄存器。驱动程序通常使用 phy_read()phy_write() 函数来与寄存器交互。
  • MII(Media Independent Interface):大多数 PHY 寄存器基于 MII 协议,可以通过标准的 MDIO 命令进行访问。

总结

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值