LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 653|回复: 1

关于e1000

[复制链接]
发表于 2008-5-22 08:17:07 | 显示全部楼层 |阅读模式
有个问题想请教各位高人:
在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;
        }
发表于 2008-5-22 10:50:34 | 显示全部楼层
没搞过e1000的驱动,不过仅就Nvidia的forcedeth驱动而言,这个东西一般是一个环,网卡自己知道把内容放在下一个buffer里面,而且如果环满了还可以自己绕回来,驱动程序只要在网卡初始化的时候把对应的内容配置好就可以了,后面的事情都与他无关
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表