从phy driver, 在drivers/net/phy里面针对一个品牌的网络交换设备对应添加一个文件 例如,我们这里要讲的smsc, 目录中就有一个smsc.c 文件。

同一个品牌,会有不同型号,就会有很多个设备,每一个设备型号,内核抽象出来,用一个结构体数组保存,如下代码:struct phy_driver smsc_phy_driver[] 这个结构就是很好的体现。该数组类型为统一的类型 struct phy_driver。

文件路径:

W:\hisi\3520_3521_project\Hi3521A_SDK_V1.0.5.0\osdrv\opensource\kernel\linux-3.10.y\drivers\net\phy\smsc.c 文件

这个文件功能,主要是将SMSC 设备 注册到 PHY驱动 上。

module_init(smsc_init);

static int __init smsc_init(void)

{

return phy_drivers_register(smsc_phy_driver,

ARRAY_SIZE(smsc_phy_driver));

}

在这 phy_drivers_register 进行注册 smsc phy driver。

static struct phy_driver smsc_phy_driver[] = {

{

.phy_id = 0x0007c0a0, /* OUI=0x00800f, Model#=0x0a */

.phy_id_mask = 0xfffffff0,

.name = "SMSC LAN83C185",

.features = (PHY_BASIC_FEATURES | SUPPORTED_Pause

| SUPPORTED_Asym_Pause),

.flags = PHY_HAS_INTERRUPT | PHY_HAS_MAGICANEG,

/* basic functions */

.config_aneg = genphy_config_aneg,

.read_status = genphy_read_status,

.config_init = smsc_phy_config_init,

/* IRQ related */

.ack_interrupt = smsc_phy_ack_interrupt,

.config_intr = smsc_phy_config_intr,

.suspend = genphy_suspend,

.resume = genphy_resume,

.driver = { .owner = THIS_MODULE, }

}, {

.phy_id = 0x0007c0b0, /* OUI=0x00800f, Model#=0x0b */

.phy_id_mask = 0xfffffff0,

.name = "SMSC LAN8187",

.features = (PHY_BASIC_FEATURES | SUPPORTED_Pause

| SUPPORTED_Asym_Pause),

.flags = PHY_HAS_INTERRUPT | PHY_HAS_MAGICANEG,

/* basic functions */

.config_aneg = genphy_config_aneg,

.read_status = genphy_read_status,

.config_init = smsc_phy_config_init,

/* IRQ related */

.ack_interrupt = smsc_phy_ack_interrupt,

.config_intr = smsc_phy_config_intr,

.suspend = genphy_suspend,

.resume = genphy_resume,

.driver = { .owner = THIS_MODULE, }

}, {

.phy_id = 0x0007c0c0, /* OUI=0x00800f, Model#=0x0c */

.phy_id_mask = 0xfffffff0,

.name = "SMSC LAN8700",

.features = (PHY_BASIC_FEATURES | SUPPORTED_Pause

| SUPPORTED_Asym_Pause),

.flags = PHY_HAS_INTERRUPT | PHY_HAS_MAGICANEG,

/* basic functions */

.config_aneg = genphy_config_aneg,

.read_status = genphy_read_status,

.config_init = smsc_phy_config_init,

/* IRQ related */

.ack_interrupt = smsc_phy_ack_interrupt,

.config_intr = smsc_phy_config_intr,

.suspend = genphy_suspend,

.resume = genphy_resume,

.driver = { .owner = THIS_MODULE, }

}, {

.phy_id = 0x0007c0d0, /* OUI=0x00800f, Model#=0x0d */

.phy_id_mask = 0xfffffff0,

.name = "SMSC LAN911x Internal PHY",

.features = (PHY_BASIC_FEATURES | SUPPORTED_Pause

| SUPPORTED_Asym_Pause),

.flags = PHY_HAS_INTERRUPT | PHY_HAS_MAGICANEG,

/* basic functions */

.config_aneg = genphy_config_aneg,

.read_status = genphy_read_status,

.config_init = lan911x_config_init,

/* IRQ related */

.ack_interrupt = smsc_phy_ack_interrupt,

.config_intr = smsc_phy_config_intr,

.suspend = genphy_suspend,

.resume = genphy_resume,

.driver = { .owner = THIS_MODULE, }

}, {

.phy_id = 0x0007c0f0, /* OUI=0x00800f, Model#=0x0f */

.phy_id_mask = 0xfffffff0,

.name = "SMSC LAN8710/LAN8720",

.features = (PHY_BASIC_FEATURES | SUPPORTED_Pause

| SUPPORTED_Asym_Pause),

.flags = PHY_HAS_INTERRUPT | PHY_HAS_MAGICANEG,

/* basic functions */

.config_aneg = genphy_config_aneg,

.read_status = lan87xx_read_status,

.config_init = smsc_phy_config_init,

/* IRQ related */

.ack_interrupt = smsc_phy_ack_interrupt,

.config_intr = smsc_phy_config_intr,

.suspend = genphy_suspend,

.resume = genphy_resume,

.driver = { .owner = THIS_MODULE, }

} };

由于3520D中我们的网卡芯片是 SMSC LAN8710 型号。因此我们主要看看 LAN8710 部分。

{

.phy_id = 0x0007c0f0, /* OUI=0x00800f, Model#=0x0f */

.phy_id_mask = 0xfffffff0,

.name = "SMSC LAN8710/LAN8720",

.features = (PHY_BASIC_FEATURES | SUPPORTED_Pause

| SUPPORTED_Asym_Pause),

.flags = PHY_HAS_INTERRUPT | PHY_HAS_MAGICANEG,

/* basic functions */

.config_aneg = genphy_config_aneg,

.read_status = lan87xx_read_status,

.config_init = smsc_phy_config_init,

/* IRQ related */

.ack_interrupt = smsc_phy_ack_interrupt,

.config_intr = smsc_phy_config_intr,

.suspend = genphy_suspend,

.resume = genphy_resume,

.driver = { .owner = THIS_MODULE, }

}

SMSC PHY 驱动走读相关推荐

  1. PHY驱动调试之 --- PHY控制器驱动(二)

    1. 前言 内核版本:linux 4.9.225,以freescale为例. 2. 概述 PHY芯片为OSI的最底层-物理层(Physical Layer),通过MII/GMII/RMII/SGMII ...

  2. a5d2 phy驱动

    1. 下面代码实现了phy驱动的实现和注册 2. device tree实现了phy的device 3. 在mdio总线注册后,总线会调用总线驱动的match函数,进行device和driver的匹配 ...

  3. linux PHY驱动

    本文参考3.17版本的内核,结合TI的cpsw驱动(但去掉cpsw大部分代码,保留phy相关的),追踪一下通用PHY驱动.文中使用函数及主要功能语句的形式给出调用过程. MDIO驱动 Linux的md ...

  4. 高通SDX55平台:R8168 PHY驱动适配

    高通SDX55平台 R8168 PHY驱动适配 1. SDX55 CPE应用场景 高通5G平台SDX55支持5G独立组网(SA)和非独立组网(NSA)两种网络架构,同时兼容LTE和WCDMA制式,拥有 ...

  5. phy 驱动与 switch 驱动

    phy 驱动与 switch 驱动 phy 驱动 phy 与 cpu 的硬件连接 一般为 MAC-PHY 模式: ----------- | CPU | RGMII/| ------| MII --- ...

  6. 全志V3s USB PHY驱动分析

    USB PHY作用 USB控制器接受的是数字信号,USB PHY负责:在USB控制器与USB接口之间做数字信号与模拟信号的转换. 参考: 维基百科 PHY usb-phy usb-phy 设备树节点 ...

  7. Mstar Mac Phy 驱动学习

    MII.h 和 MII.c 这是MII协议.里面有MII协议的PHY寄存器地址,及MII通信接口库 Linux的mdio主要是为了管理PHY芯片寄存器的,跟踪代码发现,它会进行创建PHY设备及一些初始 ...

  8. Linux Ethernet PHY 驱动

    今年在FPGA上和IC那边一起验证了MAC/PHY, 基于linux 3.6.4, 这边小结一下代码. phy的初始化顺序 第一步 phy_init   mdio_bus_init     bus_r ...

  9. Linux eth phy驱动框架分析

    Linux中,对于eth phy的驱动,是依附于 mdiobus的,物理上,soc内部会有 mac控制器,要想实现以太网数据收发,需要外挂一颗 phy芯片,然后 soc内部的mac控制器驱动,一般都由 ...

最新文章

  1. P1522 牛的旅行
  2. 2018python培训-2018年5月python自动化运维开发课程新班正式开课!
  3. 卷积神经网络迁移学习
  4. Serverless Devs 2.0 开箱测评:Serverless 开发最佳实践
  5. 180°舵机的使用步骤
  6. ssm项目集成ftp_ssm开发旅游信息管理系统,包括前台和后台
  7. 剖析供应链攻击的防范
  8. C# 9.0 新功能一览!
  9. Spring 下注解说明
  10. 深度探索C++对象模型读书笔记(1)
  11. 计算机图形学入门:什么是光线追踪?
  12. 科研伦理与学术规范期末考试1题库
  13. 古人教你怎样识人不走眼
  14. python 主力资金_真正的主力进场加仓指标源码
  15. 思考是勤奋的一部分,人最大的懒惰是思想懒惰
  16. 2020-12-26[B]比赛总结
  17. Crowding Counter 之 修改ShanghaiTech数据集
  18. 编程实战(4)——python识别图像中的坐标点并保存坐标数据
  19. if语句判断真假的几种情况
  20. C#如何读取身份证阅读器

热门文章

  1. 冯洛伊曼计算机工作原理的设计思想是,冯?诺依曼计算机工作原理的设计思想是( )。...
  2. 万泽云库平台怎么样,靠谱么
  3. 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)读书笔记
  4. Flutter学习资料集合(开发必备)
  5. 图片转成bin文件存储,及转回图片格式
  6. 电脑上最好用的3个mobi阅读器
  7. Log4J的日志文件控制大小
  8. Homework8_ch7 继承和派生(1)
  9. English Learning - Day2 作业打卡 2022.12.8 周四
  10. sqlalchemy.exc.ResourceClosedError: This result object does not return rows. It has been closed auto