我想做多帧的dma来发送大帧(jumbo)。我能够发送普通帧(大小为1500)。我需要对dma有些怀疑。
dma_map_single()与其他api相比有什么真正的优势。我们可以用dma_map_page做任何事情,对吗?
假设我们需要在驱动程序中传输一个大帧(jumbo),并且我已将此帧存储在多个缓冲区中。这些缓冲区在物理内存或虚拟内存中不连续。但是这些缓冲区位于内核空间中。我们怎么能把它作为一个框架发送。我们应该使用scatter-gather dma吗?这可能与其他dma_api一起使用吗?
答案 0 :(得分:0)
对于您的问题,SKB可以有一个分散 - 收集列表 - 每个缓冲区然后进行dma映射。 然后将dma地址和缓冲区长度列表写入发送描述符中的NIC,知道如何将它们组合在一起以便发送。
顺便提一下,内核中有分散列表的dma_map_sg API,它将返回一个带有dma地址列表的分散列表。这通常与NIC驱动程序无关。