工欲善其事,必先利其器。想学习8139网卡驱动程序,但是连它怎么工作的都不知道看代码看的我头都大了!!!特地看了不少文档总结出如下几点,便于学习!
8139d网卡发送一个数据包的过程中:
1:将数据包发送到一个物理上连续的内存中的缓冲区。2:写指示描述符
(1)填写此缓冲区的起始地址(物理地址)。
(2)填写发送状态:这个包的大小,发送的阈值,清零TSD中的OWN位(这将启动PCI操作)。
3:由于移动到FIFO的数据数满足早期发送阈值,芯片开始从FIFO拷贝数据到line(传输线).
4:当整个包被移动到FIFO,OWN位被设置为1。
5:当整个包被移动到line(传输线),TOK位(TSD中)被设置为1。
6:如果的TOK(IMR)被设置为1,并且的TOK(ISR)被设置,那么一个中断被触发。
7:中断服务程序被调用,驱动程序应该清除TOK(ISR)状态图:(TOK,OWN)
发送使用的寄存器:
. TSAD0-3. TSD0-3
. ISR(TOK,TER),IMR(TOK,TER)
. TCR: transmit configuration register发送配置寄存器
. TSAD: reflect the corresponding bits in the TSD0-3 反映的TSD0-3中的相应位。
8139d网卡接收数据包的过程:
1.从line(传输线)接收的数据被存储在接收FIFO。
2.当接收阈值达到了,便开始从FIFO向接收缓冲区拷贝数据。
3.整个数据包都从FIFO拷贝到接收缓冲器后,接收数据分组首部(接收状态和分组长度)被写入在数据包的前面。 CBA也被更新在数据包的末尾。
4.CMD(BufferEmpty)和ISR(TOK)被设置。
5.ISR(中断服务)被调用,然后驱动程序清空ISR(TOK)和并更新CAPR。
接收使用的寄存器:
RBStart:接收缓冲区的起始地址。
CR(BufferEmpty):象征着驱动程序是空。
CAPR:缓冲区读指针。
CBP:缓冲区写指针。
ISR / IMR(ROK,RER,RxOverflow,RxFIFOOverflow)
RCR:Receive configuration register 接收配置寄存器。
Packet Header(数据包报头)。