和记娱乐


网站导航

联系我们

和记娱乐

联系人: 

电 话:021-64057486

公司网址:http://www.happy123456789.com

   址:成都市松江区漕河泾松江新兴产业园区研展路丰产支路55号B座803室

邮编:201165


通信科技

您的当前位置: 和记娱乐主页 > 通信科技 >

82599网卡驱动rx descriptor结构体分析

发布日期:2020-02-29 08:36 来源:和记h88 发布人:和记娱乐 点击:

  这个数据结构是在驱动中修改的。就两个64bit地址。这两个地址都是物理地址,当一个数据包接收完成时,驱动就将对应的存放当前数据包的dma ring buffer的物理地址写到这个数据结构中。 header buffer的物理地址的最低位被用来表示当前的buffer是否可用。 DD的意思是Descriptor Done。 驱动每次要接收数据包的时候就检查这个DD是不是1,如果是1, 那么这个描述符对应的packet buffer中就有一个新来的数据包,然后就取出来数据包,取完之后就设置为0,这样硬件下次就可以继续使用。如果检查发现DD为0,驱动会认为当前packet fifo为空,没有新的数据包了。直接就会返回。 网卡每次来了新的数据包,就检查当前这个buffer的DD位是否为0,如果为0那么表示当前buffer可以使用,就让DMA将数据包copy到这个buffer中,设置DD为1,这样驱动就可以根据DD 1读取这个新来的数据包了。如果硬件检查为1,那么硬件就认为fifo满了,可能直接就将这个包给丢弃掉了。 典型的生产者---消费者模型。

  在驱动代码中并没有发现单独的代码来设置DD为0。这是因为结构体中的这两个物理地址必须2字节对齐,也就是说最低位一定是0.所以直接通过下面的地址写回就可以置0了,不需要再单独的设置一下。 rxdp->read.hdr_addr = dma_addr; rxdp->read.pkt_addr = dma_addr;

      和记娱乐,和记h88,h88平台官网