rmmap_create 内核服务

用途

定义有效地址 [EA] 到实际地址 [RA] 转换区域。

语法

#include <sys/ioacc.h>
#include <sys/adspace.h>
int rmmap_create ( eaddrp,  iomp,  flags)
void **eaddrp;
struct io_map *iomp;
int flags;

参数

描述
埃德尔 映射区域的必需流程有效地址。
iomp 埃德尔 参数所描述的有效地址必须与之对应的总线内存。 对于实内存,必须将总线标识设置为 REALMEM_BID ,并且必须将总线地址设置为实内存地址。 大小字段必须至少为 页大小,不大于 SEGSIZE,且必须为 页大小的倍数。 必须将密钥设置为 IO_MEM_MAP。 不使用 flags 字段。
标志 这些标志用于选择翻译的页面和段属性。 并非所有页面属性标志都兼容。 页属性标志的有效组合如下。
RMMAP_PAGE_W
PowerPC"写穿 "页面属性。 不支持直写方式,并且如果设置了此标志,那么将报告 EINVAL
RMMAP_PAGE_I
PowerPC "高速缓存已禁止" 页面属性。 此标志对于 I/O 映射有效,但对于实内存映射是不允许的。
RMMAP_PAGE_M
PowerPC "需要内存" 页面属性。 对于 I/O 映射,此标志是可选的; 但是,对于内存映射,此标志是必需的。 实内存页的缺省操作方式设置了此位。
RMMAP_PAGE_G
PowerPC "保护" 页面属性。 对于 I/O 映射,此标志是可选的,对于实内存映射,此 0 必须为 0。 虽然对于 I/O 是可选的,但建议必须为 I/O 映射设置此标志。 设置后,处理器不会对页面进行不必要的 (推测性) 引用。 它包括无序的读或写操作和分支访存。 清除时,将应用正常的 PowerPC 推测执行规则。
RMMAP_RDONLY
设置时, HTAB 中使用的页保护位不允许写操作,而不考虑关联段寄存器中的密钥位的设置。 必须正好指定 RMMAP_RDONLYRMMAP_RDWR 中的一个。
RMMAP_RDWR
设置时, HTAB 中使用的页面保护位允许读和写操作,而不考虑关联段寄存器中密钥位的设置。 必须正好指定下列其中一项: RMMAP_RDONLYRMMAP_RDWR
RMMAP_PRELOAD
设置后,此区域的保护属性将立即输入到硬件页表中。 它最初非常缓慢,但会阻止该区域中的每个引用页面单独出现故障。 它只是咨询。 此标志不会作为映射区域的属性进行维护,它仅在当前调用期间使用。
RMMAP_INHERIT
当设置时,此保护属性指定此 rmmap_create 调用所创建的转换区域必须在 操作上继承到子进程。 此继承是通过复制语义实现的。 子级有自己的专用映射到与父级相同的 I/O 或实内存地址范围。

描述

使用 rmmap_create 内核服务创建的转换区域在 I/O 映射段中进行维护。 任何单个这样的段都可能在单个区域中转换多达 256 兆字节的实内存或内存映射 I/O。 可能启动 rmmap_remove 服务的唯一详细程度是通过对 rmmap_create的单个调用创建的单个映射。

对于映射和 标志 参数的大小存在约束 (稍后描述) ,这会导致调用失败,而不考虑是否存在足够的有效地址空间。

如果在有效地址为零的情况下调用 rmmap_create 内核服务,那么该函数将尝试在进程地址空间中查找可用空间。 如果成功,那么会创建 I/O 映射段,并将有效地址 (通过引用传递) 更改为映射到 国际木 内存的第一页的有效地址。

如果使用非零有效地址调用 rmmap_create 内核服务,那么会将其作为必需的有效地址,必须将其转换为传递的 国际木 内存。 此功能验证请求的范围是否可用。 否则,它将失败并返回 EINVAL。 如果有效地址的映射未包含在单个段中,那么该函数将失败并返回 ENOSPC。 否则,将分配该区域,并且不会修改有效地址。 该有效地址将映射到 国际木 内存的第一页。 在已映射区域之外但在同一段内的引用无效。

返回的有效地址 (如果提供) 和总线地址必须是 页大小EINVAL 的倍数。

子进程在 子例程之后不继承 I/O 映射段。

子例程之后,子进程不会继承 I/O 映射段,除非指定了 RMMAP_INHERIT 。 这些段将被段中最后一个范围的 执行退出rmmap_remove 删除。

根据所映射的内存类型,仅允许使用某些标志组合。 对于实内存映射, RMMAP_PAGE_M 是必需的,而不允许 RMMAP_PAGE_WRMMAP_PAGE_IRMMAP_PAGE_G 。 对于 I/O 映射,仅指定 RMMAP_PAGE_M,而不指定其他页面属性标志是有效的。 也可以指定 RMMAP_PAGE_I 以及 (可选) RMMAP_PAGE_MRMMAP_PAGE_G中的任何一个或全部。 从不允许 RMMAP_PAGE_W

国际木 参数所描述的实际地址范围在此 I/O 映射段中必须是唯一的。

执行环境

rmmap_create 内核服务只能从进程环境中进行调用。

返回值

在成功完成时, rmmap_create 内核服务将返回零,并将有效地址修改为新创建的映射区域附加到进程地址空间的值。 否则,它将返回下列其中一个错误:

描述
EINVAL 发生某种类型的参数错误。 这些参数包括 (但不限于) 大小错误和互斥标志选项。
ENOMEM 操作系统无法分配用于表示映射的必需数据结构。
ENOSPC 埃德尔所指示的区域中的有效地址空间已耗尽。
EPERM 此硬件平台未实现此服务。

实现细节

此服务仅在 PowerPC 微处理器上起作用。