我正在通过 realtek r8169 驱动程序,但有点卡在这条线上
tp->RxDescArray = dma_alloc_coherent(&pdev->dev, R8169_RX_RING_BYTES,
&tp->RxPhyAddr, GFP_KERNEL);
从书Linux设备驱动程序中,它只是说它是...Function handles both the allocation and the mapping of the buffer, ...arguments are device structure and the size of buffer needed
这是什么意思:分配我可以理解,但它是什么意思mapping
这是否意味着我在 pdev 中拥有的东西代表了设备的 rx 描述符,我将在从dma_alloc_coherent
哪个tp->RxDescArray
描述符作为软件对象的返回中拥有相同的东西?tp->RxDescArray 是RxDesc
驱动程序中的类型,如下所示
struct RxDesc {
__le32 opts1;
__le32 opts2;
__le64 addr;
};
如果这就是映射:意味着我在 pdev 中表示的物理设备上的设备 rx 描述符与我在软件对象中的相同tp->RxDescArray
就是映射的含义。那么谁定义的结构RxDesc
,这是否包含在数据表中。如果是,那么在哪个部分?数据表中有许多部分。应该更清楚吗`
更新 也想知道这条线是做什么的
tp->RxDescArray[NUM_RX_DESC - 1].opts1 |= cpu_to_le32(RingEnd);
tp->RxDescArray 是 RxDesc 类型(不是 RxDesc 数组)此语句是否标记了end
变量 RxDescArray 意味着接下来会发生什么将在该end
地址之后
更新 2
我需要有关是否有数据表的信息,例如来自 intel E1000E 驱动程序或来自 RealTek 的 r8169 驱动程序,然后我如何创建创建 Rx Descrptor 结构,在上面的代码中它执行类似这样的操作
struct RxDesc {
__le32 opts1;
__le32 opts2;
__le64 addr;
}
什么是 opts1、opts2 和 addr?该驱动程序的作者是如何产生创建此结构的想法的。只有他有很多十六进制值的数据表