什么是“phy_write_paged”函数中的phy页面物理层/phy寄存器

问题描述

我正在读取 NIC 驱动程序 r8169 的 RTL_ReakTek 驱动程序代码,它执行一些 phy 寄存器写入/phy 配置寄存器写入/具有类似这些功能

pci_write_config_byte(tp->pci_dev,PCI_LATENCY_TIMER,0x40);// 必须是 phy config register write/ 但什么是 phy_write_paged/

有内存页吗?在操作系统的物理层处理中,如果是,请告诉我它是否与用于将虚拟内存映射到内核内存的内核页面的概念相同。我假设驱动程序需要做

MMIO registers

Phy registers

Phy Config registers

PHY Paged memory 表示

用于搬运设备

请解释以上所有这些是什么?以及如何处理它们。

解决方法

PHY 寄存器通过称为 MDIO、SMI 或 MIIM 的串行管理总线上的数据包访问,具体取决于您询问的对象。 IEEE 803.3 第 22 条定义的该总线上的原始数据包格式支持访问多达 32 个不同 PHY 地址上的 32 个寄存器。前 16 个寄存器由 IEEE 802.3 定义,其余 16 个由 PHY 供应商定义。

如果 PHY 支持 32 个以上的寄存器,供应商可以将供应商指定的寄存器之一定义为“页面选择”寄存器,以选择不同的 32 个供应商指定寄存器组。这就是 phy_read_pagedphy_write_paged 函数所做的。他们选择页面,读取或写入寄存器,并恢复原始页面,同时在总线上保持锁定以防止试图访问寄存器的其他代码的干扰。

IEEE 802.3 的后续修订版在第 45 条中定义了 MDIO 数据包格式的可选扩展,允许 32 个 PHY 地址中的每一个支持多达 32 个设备地址(不同的地址用于不同的、定义的用途)最多每个设备地址有 65536 个“MMD”寄存器。更晚的修订版定义了原始第 22 条寄存器的寄存器 13 和 14,用于间接访问 MMD 寄存器。 phy_read_mmdphy_write_mmd 函数用于访问这些 MMD 寄存器(如果支持)。一些PHY芯片可能直接支持Clause 45,其他的可能使用Clause 22的寄存器13和14来访问MMD寄存器,其他的可能有一些自定义的方式来访问MMD寄存器,还有一些可能根本不支持MMD寄存器。 phy_read_mmdphy_write_mmd 处理访问 MMD 寄存器的方法的差异。