本文是DM9000网卡驱动的最后一篇,具体分析dm9000_ethtool_ops里所实现的工作。为了支持ethtool,其中的函数主要是用于查询和设置网卡参数(当然也有的驱动程序可能不支持ethtool)。
下面我们来逐个分析每一项的操作
1.dm9000_get_drvinfo
顾名思义,函数完成了把网络设备net_device通过成员name绑定到info。
2.dm9000_get_settings
里面的主角mii_ethtool_gset代码如下
函数实现从mii接口取得的状态信息赋值到传入的结构体ecmd。
3.dm9000_set_settings
分析主角mii_ethtool_sset
其作用与mii_ethtool_gset恰好相反,取传入的结构体ecmd的信息写入mii接口里。
4.dm9000_get_msglevel
返回结构体board_info_t 里成员msg_enable的状态。
5.dm9000_set_msglevel
设置msg_enable的状态
6.dm9000_nway_reset
mii_nway_restrart函数代码如下
重新启动nway功能,其中nway指通信速率通过双方协商,协商的结果是两个设备中能同时支持的最大速度和最好的双工模式,这个技术被称为Auto Negotiation或者NWAY。
7.dm9000_get_link
函数作用显而易见,返回链接状态。
8.dm9000_get_wol
ethtool_wolinfo结构体如下
把网络设备的成员wake_supported和wake_state传送到ethtool_wolinfo结构体的supported和wolopts里。
9.dm9000_set_wol
dm9000_set_wol函数完成更新中断状态,并读回wake_state(对应dm9000_get_wol)
10.dm9000_get_eeprom_len
eeprom长度默认128bytes
11.dm9000_get_eeprom
读取eeprom内容
12.dm9000_set_eeprom
对应读取,本函数完成写入的工作
13.dm9000_get_rx_csum
说来惭愧,还不知道rx_csum所代表的具体含义,是接收的什么呢?希望有前辈指点一二
14.dm9000_set_rx_csum
其中dm9000_set_rx_csum_unlocked代码如下
设置rx_csum吧~
15.ethtool_op_get_tx_csum
呵呵,有接收自然就有发送
16.dm9000_set_tx_csum
核心工作在于ret = ethtool_op_set_tx_csum(dev, data);
通过传入的参数data设置tx_csum是0或1,具体作用还不清楚。
呼呼,我还是以蜗牛般的速度、豆腐渣式的分析把DM9000网卡驱动完整的过了一遍。与其说是分析,更贴切来说,应该是贴出代码,提供一个针对这个驱动讨论的平台罢了。很多枝节功能由于本人功力有限,还理所不能及,如有令到各位看官感觉不知所云,实在抱歉,以后定当更加努力,提供更高质量的学习记录给大家分享!
本系列课程链接地址
DM9000网卡驱动(1)http://blog.csdn.net/jarvis_xian/archive/2011/06/10/6537446.aspx
DM9000网卡驱动(2)http://blog.csdn.net/jarvis_xian/archive/2011/06/12/6539931.aspx
DM9000网卡驱动(3)http://blog.csdn.net/jarvis_xian/archive/2011/06/13/6542411.aspx
DM9000网卡驱动(4)http://blog.csdn.net/jarvis_xian/archive/2011/06/15/6545109.aspx
DM9000网卡驱动(5)http://blog.csdn.net/jarvis_xian/archive/2011/06/15/6547203.aspx