问个关于e1000网卡上DMA问题
我是驱动程序开发新手,最近我在读E1000网卡驱动的代码,突然有个关于DMA的疑问,我以前理解的关于DMA的认识就是将IO上的数据转移到内存中。对于e1000网卡而言,是不是每一次网卡有接收到数据之后,都会给CPU以中断,让CPU去设置DMA这次拷贝多少数据,然后DMA将网卡中缓存的数据拷贝到内核设定的buffer中。不知道我这样理解的DMA过程是否正确,同时有个疑问是,如果我CPU还没有将ring buffer数据取走,那么再执行DMA操作,是否会有将之前ring buffer数据覆盖的问题? DMA 是外设直接操作内存,操作完成后通知CPU,即网卡将报文填入内存后,通过中断或者cpu轮询的方式来知道是否有新的报文。 CPU和外设之间通过DMA的BD相关关联。CPU取走报文后,是给个BD上设置一个owner位的,硬件通过查看这个owner位能知道这个BD对应的内存cpu是否还在使用,能否往上放新的数据。 光看驱动代码,不看硬件开发手册是不够的.硬件手册我在这里发过.搜下,看了之后你就明白了.
页:
[1]