xmemdma64 内核服务
用途
为直接存储器存取 (DMA) I/O 准备一个页面,或在 DMA I/O 完成后处理一个页面。
语法
#include <sys/types.h>
#include <sys/errno.h>
#include <sys/xmem.h> unsigned long long xmemdma64 (
struct xmem *dp,
caddr_t xaddr,>
int flags)参数
| 项 | 描述 | ||
|---|---|---|---|
| dp | 指定一个跨内存描述符。 | ||
| Xaddr | 标识指定用于传输的页面的地址。 | ||
| 标志 | 指定是为 DMA I/O 准备页面还是在 DMA I/O 完成后对其进行处理。 可能的值为:
|
||
描述
xmemdma64 内核服务在由跨内存描述符指定的区域中的 Xaddr 参数指定的页面上运行。 如果跨内存描述符是针对内核的,那么 Xaddr 参数指定内核地址。 否则, Xaddr 参数将指定跨内存描述符中描述的区域中的偏移量。
对于具有处理器内存高速缓存但未通过高速缓存执行 DMA I/O 的机器,提供了 xmemdma64 内核服务。
如果 旗 参数指示 XMEM_HIDE (即,未设置 XMEM_UNHIDE ) ,并且它是页面的第一个隐藏项,那么 xmemdma64 内核服务会通过清空高速缓存并使该页面无效来为 DMA I/O 准备该页面。 如果设置了 XMEM_UNHIDE 位,并且它是页面的最后一个取消隐藏项,那么将发生以下事件:
- 该页面已生效。
如果页面未处于寻呼机 I/O 状态:
- 任何正在页面上等待的进程都已准备就绪。
- 除非页面具有只读存储键,否则将设置页面的已修改位。
该页面在 DMA 操作期间无效,因此无法使用任何虚拟地址对其进行寻址。 它阻止任何进程在 DMA 操作期间将页面的任何部分读取或装入到高速缓存中。
指定的页面必须位于内存中,并且必须置顶。
如果设置了 XMEM_ACC_CHK 位,那么 xmemdma64 内核服务还会验证对该页面的访问许可权。 如果页访问权是只读的,那么必须在 旗 参数中设置 仅限 XMEM_WRITE_ONLY 位。
注: xmemdma64 内核服务不会隐藏或显示页面,也不会执行任何高速缓存刷新操作。 该服务的主要功能是进行真实地址转换。
执行环境
返回值
成功完成后, xmemdma64 服务会返回对应于 Xaddr 和 西普 参数的真实地址。
错误代码
如果下列其中一项为 true ,那么 xmemdma64 内核服务将返回值 XMEM_FAIL :
- 该描述符无效。
- 由 Xaddr 或 西普 参数指定的页面无效。
- 不允许对页面进行访问。