- 论坛徽章:
- 0
|
原帖由 Godbach 于 2009-4-27 09:54 发表
讨论一下read_eeprom这个函数阿。
程序在 rtl8139_init_one函数中调用该函数:
addr_len = read_eeprom (ioaddr, 0, == 0x8129 ? 8 : 6;
for (i = 0; i < 3; i++)
((u16 *) (dev->dev_addr)) =
...
我随便猜下。 这个8130too.c 支持多种网卡,比如8129和8139。不同的网卡型功能大致一样,但是有些小细节不同。 所以addr_len 在针对8129型号的网卡时为8,其他为6。
同时由于硬件上的设计,读EEPROM的时候,要用到这个值。
其实我觉得研究这部分代码用处不大。如果要研究的话,也要参考网卡的硬件手册,比如DATA SHEET, PROGRAMMING GUIDE来看。这些地方都是看硬件工程师怎么设计的,没什么道理可言。而且即使你搞明白了8139,换个网卡又得重新看一遍。功利的说,还是看那些通用得部分收获比较大。比如所有网卡都要有OPEN函数等。另外,如果是 INTEL, OR AMD的硬件手册的话,仔细研究下也是值得的,因为用的太多了。8139的普遍性就差点了。 |
|