问题描述
我正在阅读驱动程序代码,看起来每个 Rx 描述符缓冲区都是这样定义的
struct page *Rx_databuff [256] //256 Rx Descriptors in Overall Buffer for DMA
上述代码如何与数据包大小相关联。上面的数组是否一次只能处理 256 个数据包,这个值不应该是动态的,这意味着使用 Ethtool 或一些工具增加这个大小,以便 DMA 缓冲区中可以一次累积超过 256 个数据包,也可以在内核中增加到接受那个数量的数据包。或者数组中的单个 Rx_databuf 指针元素可以接受多个数据包。真的会发生什么?感谢帮助
Driver 也定义了 Rx Descrptor 的结构,就像这样用于驱动程序
struct RxDesc {
__le32 opts1;
__le32 opts2;
__le64 addr;
};
addr
是从 page
指针类型的 Rx_databuff 到单个页面的 DMA 映射地址
其中使用了整体 Coherent DMA 映射,并且在驱动程序中也使用了单页流映射以用于相同的 RxDesc。 RxDesc 的 addr 映射到内核页面(单个页面明智的流映射 api)和之前的 Coherent 映射像这样
mystruct_obj->RxDesc_pointer = dma_alloc_coherent(&pdev->dev,RX_RING_BYTES,&tp->RxPhyAddr,GFP_KERNEL);
Rx_RING_BYTES = NUM_RX_DESC * sizeof(struct RxDesc))
NUM_RX_DESC = 256U
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)