如何解决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 举报,一经查实,本站将立刻删除。