Linux内核和realtek rtl8139驱动程序

时间:2014-03-20 05:42:06

标签: linux linux-kernel linux-device-driver

我试图从头开始为linux 2.6编写rtl8139的驱动程序。我已经编写了TX路径,但是我遇到了一些RX问题。

我将RX置于promiscous模式并接收RX irqs。我通过kmalloc将RBSTART设置为已分配内存的物理地址。

我不知道如何知道有多少收到的数据包以及它们有多长。 我认为ERBCR,CAPR,CBR寄存器告诉它,但它们是== 0。

也许我做错了什么?如何找到收到的数据包?

2 个答案:

答案 0 :(得分:2)

我自己回答了我的问题。

接收到的数据包位于RBSTART处。 rx-ed数据包的前两个字节是状态字节,接下来的2个是帧的长度+ crc的4个字节。

Maybye有人发现此信息有用。

答案 1 :(得分:1)

接收到数据包后,从线路接收的数据将存储在接收FIFO中。当满足早期接收阈值时,数据从FIFO移动到接收缓冲区。

所以,一旦你得到一个中断。您需要检查ROK的中断状态寄存器。然后检查Early Rx状态寄存器,它会显示收到的数据包的状态。如果设置了EROK,则检查ROK的接收缓冲区状态。检查ISR和ERSR中是否有任何错误。另请检查Rx配置寄存器,了解Rx FIFO,RX buf长度的阈值配置。