使用DMA总线主控的Linux网络驱动程序

时间:2015-12-04 19:26:46

标签: c driver linux-device-driver

我目前正在编写我的第一个Linux网络驱动程序,现在看起来相当顺利。我的网络设备将创建以太网接口,但通过PCIe将以太网帧转发到PCIe端点。我的问题与从PCIe端点接收转发的以太网帧到我的接口有关。

我通常会做的是分配一个大的DMA缓冲区,告诉端点具有缓冲区所在的总线主控功能,并允许它DMA到该缓冲区。然后它会发送一个中断信号接收,我可以将数据复制到sk_buf

我的问题是: 在LDD3中,它表示我应该能够直接DMA到sk_buf,因为所有sk_buf都在DMA存储器中。我何时何地分配此缓冲区并告诉总线主站它位于何处?我是先在初始化时做的,然后一旦总线主机写了它的第一个sk_buf并中断我的信号接收,我是否分配一个新的缓冲区并写入新的位置?这只能通过启用轮询(我认为它叫做NAPI)接收来完成吗?

提前感谢您的帮助。

0 个答案:

没有答案