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, PHYID1
和 PHYID2
,地址: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 命令进行访问。
总结