dma_alloc_coherent 如何将 dma 区域映射到 Rx 和 Tx 描述符

问题描述

在 r8169 以太网设备驱动程序中,它确实设置了这样的相干映射

      tp->RxDescArray = dma_alloc_coherent(&pdev->dev,R8169_RX_RING_BYTES,&tp->RxPhyAddr,GFP_KERNEL);

tp->RxDescArray 是一个 Rx 描述符环 这是定义

     struct RxDesc *RxDescArray;    /* 256-aligned Rx descriptor ring */


       struct RxDesc {
            __le32 opts1;
            __le32 opts2;
             __le64 addr;
             }

我相信 RxDesc 是由设备制造商/制造商定义的,所以如果有人能解释一下这意味着什么,将会有很大帮助。

主要问题是关于 dma_alloc_coherent(..) 它返回 void * 并获取 pci_dev->device 作为第一个参数,我想知道所有 pci 设备是否通过调用函数返回不同的对象,这意味着如果我我正在使用 r8169 设备,那么它是否必须返回指向以下内容的指针

       struct RxDesc {
            __le32 opts1;
            __le32 opts2;
             __le64 addr;
             }

其他 pci 设备是否有不同的对象指针从这个函数调用返回?就像英特尔将返回自己的 RxDesc Rx 描述符,而 realtek 设备将返回自己的描述符,或者这些 RxDesc 设备特定结构是否由驱动程序引入操作系统,如果是这种情况,那么设备驱动程序如何将它们引入操作系统。

那么简单地说,dma_alloc_coherent 是如何进行映射的,意味着它返回了可以准确分配给 struct RxDesc 指针的空指针?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)