欢迎来到天天文库
浏览记录
ID:57647394
大小:43.50 KB
页数:6页
时间:2020-08-30
《多队列(queues)网卡DMA收包方式.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、本文档介绍了多队列(queues)网卡DMA接收数据包方式:1. Queues:增加驱动I/O能力,提供多个输入队列2. DMA:减少CPU负载处理一. 主要数据结构Receivedescriptornodestructrxbd_desc{ u16 status; /*StatusFields*/ /*optional*/ u16 length; /*BufferLength*//*op
2、tional*/ u32 bufPtr; /*BufferPointer 通常DMA指向skb->data*/ };Rx_buffer:skbstructrx_buffer{ structsk_buff*skb; ……… };Queueringdescriptor:ring->desc包含count个structrxbd_desc和structrx_bufferStructr
3、ing{ void*desc; /*descriptorringmemory*/ structrx_buffer *rx_buffer_info;/*skbdata*/ u16count; /*amountof descriptors */
4、 unsignedintsize; /*lengthinbytes(of descriptors)*/ dma_addr_tdma; /*phys.addressofdescriptorring*/ next_to_clean; next_to_use;
5、 ……..}二.主要寄存器:每个queue都有下列一组寄存器,n表示queue编号1. ReceiveDescriptorBaseAddress(RDBA[n]):存放ring->desc的dma地址2. ReceiveDescriptorLength(RDLEN[n]): 存放该ring的描述符长度(ring->count*sizeof(structrxdb_desc))3. ReceiveDescriptorControl(RXDCTL[n]):queue使能控制器三.程序分析1. 在驱
6、动probe函数中为每个queue分配一个ring:staticintalloc_rx_queues(structixgbe_adapter*adapter){ intrx=0,nid=adapter->node; for(;rxnum_rx_queues;rx++){ structring*ring; r
7、ing=kzalloc_node(sizeof(*ring),GFP_KERNEL,nid); if(!ring) ring=kzalloc(sizeof(*ring),GFP_KERNEL); if(!ring)
8、 gotoerr_allocation; ring->count=adapter->rx_ring_count; ring->queue_index=rx; ring->reg_idx=rin
此文档下载收益归作者所有