确认phy_read 函数的功能和参数: 通常,phy_read 函数的功能是从指定的PHY设备中读取某个寄存器的值。其参数一般包括PHY设备的地址(或索引)、寄存器的地址(或偏移量)以及一个用于存储读取结果的变量。 假设phy_read 的函数原型如下: c int phy_read(int phy_addr, int reg_addr, uint16_t *value); 其中...
while (gfar_read(®s->miimind) & MIIMIND_BUSY) cpu_relax(); return 0; } 内核启动时的准备工作 4.1 初始化网络相关的全局数据结构,并挂载处理网络相关软中断的钩子函数 start_kernel() --> rest_init() --> do_basic_setup() --> do_initcall -->net_dev_init __initnet_dev_init() { ...
int gfar_local_mdio_read(struct gfar_mii *regs, int mii_id, int regnum) { u16 value; /* Set the PHY address and the register address we want to read */ gfar_write(®s->miimadd, (mii_id << 8) | regnum); /* Clear miimcom, and then initiate a read */ gfar_write(®s...
6.1 TSEC的接收中断处理函数 gfar_receive { #ifdef CONFIG_GFAR_NAPI // test_and_set当前net_device的napi_struct.state 为 NAPI_STATE_SCHED // 在软中断里调用 net_rx_action 会检查状态 napi_struct.state if (netif_rx_schedule_prep(dev, &priv->napi)) { tempval = gfar_read(&priv->regs->...
在PHY设备的注册中(读PHY ID)、PHY的初始化、自协商、中断、状态、能力获取等流程中经常可以看到phy_read和phy_write两个函数(下一节要讲的PHY驱动),这两个函数的实现就依赖于控制器设备mii_bus的读写。 phy_read和phy_write定义在linux-4.9.225\include\linux\phy.h中,如下: ...
其中通用 phy 驱动会调用函数 genphy_read_abilities 来读取状态寄存器来确定 phy 芯片的能力: genphy_read_abilities `-| { | val = phy_read(phydev, MII_BMSR);// 读取 mdio 0x01 寄存器来确定 phy 的 10/100M 能力 | linkmode_mod_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, phydev->supported, val ...
其中通用 phy 驱动会调用函数 genphy_read_abilities 来读取状态寄存器来确定 phy 芯片的能力: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 genphy_read_abilities() `-| { | val = phy_read(phydev, MII_BMSR); // 读取 mdio 0x01 寄存器来确定 phy 的 10/100M 能力 | linkmode_mod_bit(...
其中通用 phy 驱动会调用函数 genphy_read_abilities 来读取状态寄存器来确定 phy 芯片的能力:genphy_read_abilities() `-| { | val = phy_read(phydev, MII_BMSR); // 读取 mdio 0x01 寄存器来确定 phy 的 10/100M 能力 | linkmode_mod_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, phydev->supported, ...
其中通用 phy 驱动会调用函数 genphy_read_abilities 来读取状态寄存器来确定 phy 芯片的能力: genphy_read_abilities() `-| { | val = phy_read(phydev, MII_BMSR); // 读取 mdio 0x01 寄存器来确定 phy 的 10/100M 能力 | linkmode_mod_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, phydev->supported, ...
其中一个关键点是 mdio driver 的 probe 函数是一个通用函数phy_probe(),match 成功时会调用它读取状态寄存器来确定 phy 芯片的能力: phy_probe() `-| genphy_read_abilities() `-| { | val = phy_read(phydev, MII_BMSR);// 读取 mdio 0x01 寄存器来确定 phy 的 10/100M 能力 ...