PEP_ACPI_EXTENDED_ADDRESS 结构 (pep_x.h)

PEP_ACPI_EXTENDED_ADDRESS结构用于报告地址空间中的资源使用情况,例如内存和 IO。

语法

typedef struct _PEP_ACPI_EXTENDED_ADDRESS {
  PEP_ACPI_RESOURCE_TYPE  Type;
  PEP_ACPI_RESOURCE_FLAGS Flags;
  UCHAR                   ResourceFlags;
  UCHAR                   GeneralFlags;
  UCHAR                   TypeSpecificFlags;
  UCHAR                   RevisionId;
  UCHAR                   Reserved;
  ULONGLONG               Granularity;
  ULONGLONG               MinimumAddress;
  ULONGLONG               MaximumAddress;
  ULONGLONG               TranslationAddress;
  ULONGLONG               AddressLength;
  ULONGLONG               TypeAttribute;
  PUNICODE_STRING         DescriptorName;
} PEP_ACPI_EXTENDED_ADDRESS, *PPEP_ACPI_EXTENDED_ADDRESS;

成员

Type

描述此资源的 PEP_ACPI_RESOURCE_TYPE 枚举值。

Flags

描述此资源的 PEP_ACPI_RESOURCE_FLAGS 结构。

ResourceFlags

指示此结构描述的资源类型。

含义
0
指示此资源是内存范围。
1
指示此资源是 IO 范围。
2
指示此资源是总线编号范围。
3-191
这些值保留供将来使用。
192-255
这些值保留供硬件供应商使用。

GeneralFlags

一个 值,该值包含所有资源类型通用的位标志。

含义
0 - 使用者/生成者标志
如果设置,则表示设备使用此资源。
1 - 解码类型
设置后,指示此网桥以减分方式解码地址。 这仅适用于顶级网桥。

如果未设置,则表示此桥会积极解码此地址。

2 - 已确定最小地址
设置时,指示最小地址是固定的。
3 - 固定的最大地址
设置时,指示最大地址是固定的。
4 到 7 - 保留
这些位是保留的,必须设置为零。

TypeSpecificFlags

此成员的值取决于 ResourceFlags 成员中的值。 下表描述了每种资源类型的标志。

内存资源 (ResourceFlags = 0)

含义
0 - 写入状态
设置后,指示此内存范围可用于读取和写入。 否则,这表示此内存范围是只读的。
1 到 2 - 内存属性 (MEM)
0 - 指示内存不可缓存。

1 - 指示内存可缓存。

2 - 指示内存可缓存并支持写入组合。

3 - 内存可缓存且可预提取。

3 到 4 - 内存属性 (MTP)
仅当此内存资源描述系统 RAM 时,才定义这些位。

0 - 地址范围内存:此范围是操作系统可用的 RAM。

1 - 保留的地址范围:此地址范围由系统使用或保留,不会包含在操作系统内存管理器的可分配内存池中。

2 - 地址范围 ACPI:ACPI 回收内存。 此范围是 OS 在读取 ACPI 表后可以使用的可用 RAM。

3 - 地址范围 NVS:ACPI NVS 内存。 此地址范围由系统使用或保留,操作系统不得使用。 需要跨 NVS 睡眠保存和还原此范围。

5 - 内存到 IO 的转换
0 - 类型静态:此资源是网桥主端和辅助端的内存。

1 - 类型转换:此资源是网桥辅助端的内存,是网桥主端的 IO。

6 到 7 - 保留
这些位是保留的,必须设置为零。
 

IO 资源 (ResourceFlags = 1)

含义
0 到 1 - 范围
0 - 保留。

1 - 仅限非 ISA 范围。 此标志适用于具有多个网桥的系统上的网桥。 设置此位意味着此描述符中指定的内存窗口仅限于位于指定时段内的非 ISA IO 地址。 非 ISA IO 范围是:n100-n3FF、n500-n7FF、n900-nBFF、nD00-nFFF。 只能为完全通过 ACPI 命名空间配置的网桥设置此位。

2 - 仅 ISA 范围。 此标志适用于具有多个网桥的系统上的网桥。 设置此位意味着此描述符中指定的内存窗口仅限于位于指定时段内的 ISA IO 地址。 ISA IO 范围是:n000-n0FF、n400-n4FF、n800-n8FF、nC00-nCFF。 只能为完全通过 ACPI 命名空间配置的网桥设置此位。

3 - 内存窗口涵盖整个范围

2 到 3 - 保留
这些位是保留的,必须设置为零。
4 - IO 到内存转换
0 - 类型静态:此资源是网桥的主要和辅助端的 IO。

1 - 类型转换:此资源是网桥辅助端的 IO,是网桥主端的内存。

5 - 稀疏翻译
仅当设置了第 4 位 (IO 到内存转换) 时,此位才有意义。

0 - 密集转换:可以使用以下函数找到辅助端范围内任何特定 IO 端口的主端内存地址。

address = port + TranslationAddress

1 - 稀疏转换:可以使用以下函数找到辅助端范围内任何特定 IO 端口的主端内存地址。

address = ( ( (端口 & 0xFFFc) << 10) || (端口 & 0xFFF) ) + TranslationAddress

在用于访问 IO 端口的地址中,位 2 到 11 必须与位 12 到 21 相同,这在每 4 KB 页上提供 4 个字节的 IO 端口。

6 到 7 - 保留
这些位是保留的,必须设置为零。
 

总线编号范围资源 (ResourceFlags = 2)

含义
0 到 7 - 保留
这些位是保留的,必须设置为零。

RevisionId

指示此结构详述的扩展地址空间描述符的修订。 对于 ACPI 3.0,此值为 1。

Reserved

Granularity

指示已解码的位的位掩码。

MinimumAddress

最小起始地址。 对于转换地址的网桥,这是桥次端的地址空间。

MaximumAddress

最大起始地址。 对于转换地址的网桥,这是桥次端的地址空间。

TranslationAddress

对于跨网桥转换地址的网桥,这是主端的地址。

AddressLength

地址长度。

TypeAttribute

指示特定于 ResourceFlags 成员中指定的资源类型的属性。 如果 ResourceFlags 为零,则此值为零,否则可在 UEFI 规范GetMemoryMap () 部分中找到该值的含义。

DescriptorName

此资源描述符的名称。

要求

要求
最低受支持的客户端 从 Windows 10 开始支持。
标头 pep_x.h (包括 Pep_x.h)