d_alloc_dmamem 内核服务
用途
分配 德马阿布尔
内存的区域。
语法
void *
d_alloc_dmamem(d_handle_t device_handle, size_t size,int align)
描述
已导出,记录的内核服务仅在基于 PCI 的系统上受支持。 D_alloc_dmamem 内核服务分配 德马阿布尔
内存的一个区域,该区域满足通过 设备句柄 参数指定的与 DMA 句柄相关联的约束。 约束 (例如,需要连续的物理页或需要 32 位物理地址) 旨在保证给定适配器将能够访问与分配的内存相关联的物理页。 驱动程序通过其 映射初始化 调用上的 标志 参数将此类约束与 dma 句柄相关联。
要分配的区域是由 大小 参数指定的长度中的字节数,并且在 对齐 参数指定的字节边界上对齐。 对齐 参数实际上是所需地址边界的日志底数 2。 例如,如果 对齐 值为 12 ,那么将请求在 4096 字节的边界上对齐已分配的区域。
对于长期映射, D_alloc_dmamem 是合适的。 根据系统配置以及 设备句柄中所编码的约束,底层存储器将来自 real_heap (Rmalloc 服务) 或 pinned_heap (克马洛克 服务)。
注意:
- 应该调用 代弗里 _dmamem 服务以从先前的 D_alloc_dmamem 调用中释放分配。
- D_alloc_dmamem 内核服务只能从进程环境中进行调用。
参数
| 项 | 描述 |
|---|---|
| 设备句柄 | 指示 dma 句柄。 |
| ALIGN | 指定对齐特征。 |
| size_t 大小 | 指定要分配的字节数。 |
返回值
| 项 | 描述 |
|---|---|
| 已分配区域的地址 | 指示 D_alloc_dmamem 已成功。 |
| NULL | 无法分配请求的内存。 |