PEP_ACPI_EXTENDED_ADDRESS结构(pepfx.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

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

Bit(s) 意义
0 - 使用者/生成者标志
设置后,这表示设备使用此资源。
1 - 解码类型
设置后,指示此网桥以减法方式解码地址。 这仅适用于顶级网桥。

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

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

TypeSpecificFlags

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

内存资源(ResourceFlags = 0

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

1 - 指示内存可缓存。

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

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

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

0 - 地址范围内存:此范围可供作系统使用。

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

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

3 - 地址范围 NVS:ACPI NVS 内存。 此范围的地址由系统使用或保留,作系统不得使用。 必须在 NVS 睡眠中保存和还原此范围。

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

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

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

IO 资源(ResourceFlags = 1

Bit(s) 意义
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 端口的主端内存地址。

地址 = 端口 + TranslationAddress

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

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

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

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

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

Bit(s) 意义
0 到 7 - 保留
这些位是保留的,必须设置为零。

RevisionId

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

Reserved

Granularity

一个位掩码,指示已解码了哪些位。

MinimumAddress

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

MaximumAddress

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

TranslationAddress

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

AddressLength

地址长度。

TypeAttribute

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

DescriptorName

此资源描述符的名称。

要求

要求 价值
最低支持的客户端 从 Windows 10 开始支持。
标头 pepfx.h (include Pep_x.h)