网卡设备驱动.pdf
网卡设备驱动
1.8139too网卡设备简介
一个PCI设备,总共有三个地址空间:内存,端口和配置。内存和端口其实是同一个内容
的不同访问路径而已。PCI设备的配置空间是标准化的,每个PCI设备的配置空间的前64
个字节的含义都是一样的。但各个设备的内存和端口空间是完全不一样的。在硬件概念上,
设备的I/内存和I/端口空间没有区别,其实都是设备拥用的一些读写寄存器。
8139too网卡拥有256字节的读写寄存器空间。它的整个布局如下:
/*Symbolicoffsetstoregisters.*/
enumRTL8139_registers{
MAC0=0,/*Ethernethardwareaddress.*/
MAR0=8,/*Multicastfilter.*/
TxStatus0=0x10,/*Transmitstatus(Four32bitregisters).*/
TxAddr0=0x20,/*Txdescriptors(alsofour32bit).*/
RxBuf=0x30,
ChipCmd=0x37,
RxBufPtr=0x38,
RxBufAddr=0x3A,
IntrMask=0x3C,
IntrStatus=0x3E,
TxConfig=0x40,
RxConfig=0x44,
Timer=0x48,/*Ageneral-purposecounter.*/
RxMissed=0x4C,/*24bitsvalid,writeclears.*/
Cfg9346=0x50,
Config0=0x51,
Config1=0x52,
FlashReg=0x54,
MediaStatus=0x58,
Config3=0x59,
Config4=0x5A,/*absentonRTL-8139A*/
HltClk=0x5B,
MultiIntr=0x5C,
TxSummary=0x60,
BasicModeCtrl=0x62,
BasicModeStatus=0x64,
NWayAdvert=0x66,
NWayLPAR=0x68,
NWayExpansion=0x6A,
/*Undocumentedregisters,butrequiredforproperoperation.*/
FIFOTMS=0x70,/*FIFOControlandtest.*/
CSCR=0x74,/*ChipStatusandConfigurationRegister.*/
PARA78=0x78,
1/47
PARA7c=0x7c,/*Magictransceiverparameterregister.*/
Config5=0xD8,/*absentonRTL-8139A*/
};
每个寄存器都有它特殊的含义和用途。举个例子(我们假设使用I/O内存的方式,ioaddr
为设备内存映射在CPU内存地址空间的起始地址,下述代码能读取板卡的版本号):
#defineHW_REVID(b30,b29,b28,b27,