ar8031网卡中的光口和电口相互切换

本文详细介绍了实现AR8031网卡光口与电口相互切换的过程,包括对关键概念的理解及驱动流程的解析。特别强调了在使用SFP 1000M模块时需注意的事项,并通过修改配置寄存器实现了不同模式的切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经过一段时间的奋斗,实现了ar8031网卡的光口和电口相互切换。其中的几个关键概念需要厘清。光口如果是SFP的1000M模块需要注意,一定只能是1000M模式。因为这个问题卡了一段时间。不过因为这些问题,把网卡的驱动流程dump了一遍,其中关键的文件为phy_device.c,关键的驱动接口结构体为:

static struct phy_driver genphy_driver = {
	.phy_id		= 0xffffffff,
	.phy_id_mask	= 0xffffffff,
	.name		= "Generic PHY",
	.config_init	= genphy_config_init,
	.features	= 0,
	.config_aneg	= genphy_config_aneg,
	.read_status	= genphy_read_status,
	.suspend	= genphy_suspend,
	.resume		= genphy_resume,
	.driver		= {.owner= THIS_MODULE, },
};
然后这个结构体被在另外一个文件中也实现了,具体文件为at803x.c文件:

static struct phy_driver at8030_driver = {
	.phy_id		= 0x004dd076,
	.name		= "Atheros 8030 ethernet",
	.phy_id_mask	= 0xffffffef,
	.config_init	= at803x_config_init,
	.features	= PHY_GBIT_FEATURES,
	.flags		= PHY_HAS_INTERRUPT,
	.config_aneg	= &genphy_config_aneg,
	.read_status	= &genphy_read_status,
	.driver		= {
		.owner = THIS_MODULE,
	},
};
从这个两个结构体中可以看出,是相互关联实现的。对此可以看出来PHY的基本初始化流程和配置流程。基于此思路我修改了config_aneg的实现。根据PHY的模式修改了对应的配置寄存器实现了光口和电口的互相切换。


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值