问题描述
在 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 (将#修改为@)