S3C2440驱动简析——DM9000网卡驱动(5)

时间:2021-08-07 17:41:40

     本文是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