|
有个问题想请教各位高人:
在e1000初始化的时候,有一下这段代码,其中cleaned_count初始是255。在这段代码中内核对每个申请的块做了pci映射,那么这里有个问题,当网卡将一个接收到的包传到指定的映射区域中后,会准备接受下一个到达的包,那么网卡怎么会知道下一个数据包要放到哪里呢?是不是要放到 buffer_info[i+1]的位置呢?
还是说PCI控制器本身能完成这一功能,即我映射了10个缓冲区,那么网卡就依次的向0号缓冲区填充,然后填充1号,直到9号填充完再回过来填充0号?
struct e1000_buffer *buffer_info = &rx_ring->buffer_info[0];
while (cleaned_count--) {
skb = buffer_info->skb;
skb = netdev_alloc_skb(netdev, bufsz);
skb_reserve(skb, NET_IP_ALIGN);
buffer_info->skb = skb;
buffer_info->length = adapter->rx_buffer_len;
map_skb:
//在这里做dma映射
buffer_info->dma = pci_map_single(pdev,skb->data,adapter->rx_buffer_len
,PCI_DMA_FROMDEVICE);
rx_desc = E1000_RX_DESC(*rx_ring, i);
rx_desc->buffer_addr = cpu_to_le64(buffer_info->dma);
if (unlikely(++i == rx_ring->count))
i = 0;
buffer_info = &rx_ring->buffer_info;
} |
|