- 论坛徽章:
- 0
|
感谢您的耐心 不过还是有些小细节我想更清楚一点 因为我觉得带描述符的这种数据结构好像在8139里面很难应用
首先就是8139的DMA机制好像比较傻瓜 我查了资料 有这样的描述“ 8139网卡的有⼀个接收缓冲寄存器,用于存放接收缓存的首地址,网卡⼀边把网线上的发出的数据放到内部FIFO,⼀边从FIFO中把数据通过DMA传送到由接收寄存器指定的内存地址中,接收到的数据依次排放,当长度超过默认的缓冲区长度时,会回过头来放到开始的地方,所以接收缓冲区被称为环形缓冲区” 网卡就是一根筋的往指定的缓冲区里填数据 一边填一边往后走 到底了再从头开始 不存在太多的管理 而读数据这头由网卡驱动维护 由一个指针记录上次读到的地方 每次读完就更新 所以不太需要管理的head头(过会再仔细分析下驱动看下)
还有就是这种方式的可行性。 因为在8139中的接收缓存的分配是rtl8139_open函数 中 pci_alloc_consistent这个函数得到的一个dma_addr_t类型的值 然后在rtl8139_hw_start函数中
用RTL_W32_F (RxBuf, tp->rx_ring_dma)写入寄存器 我不确定如果我将一个描述符环首地址传给寄存器 网卡能否通过描述符上若干区域找到正确的区域再找到缓存 网卡恐怕只认dma_addr_t类型的缓存地址而不是其他类型而且含有多个管理信息的头的地址 |
|