// pep_x.h
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;
View the official Windows Driver Kit DDI reference// pepfx.h
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;
View the official Windows Driver Kit DDI referenceNo description available.
The PEP_ACPI_EXTENDED_ADDRESS structure is used to report resource usage in the address space such as memory and IO.
TypeA PEP_ACPI_RESOURCE_TYPE enumeration value describing this resource.
FlagsA PEP_ACPI_RESOURCE_FLAGS structure describing this resource.
ResourceFlagsIndicates the type of resource this structure describes.
| Value | Meaning |
|---|---|
| 0 | Indicates that this resource is a memory range. |
| 1 | Indicates that this resource is an IO range. |
| 2 | Indicates that this resource is a bus number range. |
| 3-191 | These values are reserved for future use. |
| 192-255 | These values are reserved for use by the hardware vendor. |
GeneralFlagsA value containing the bit flags that are common to all resource types.
| Bit(s) | Meaning |
|---|---|
| 0 - Consumer/Producer flag | When set, this indicates that the device consumes this resource. |
| 1 - Decode type | When set, indicates that this bridge subtractively decodes the address. This applies to top level bridges only. When not set, indicates that this bridge positively decodes this address. |
| 2 - Minimum address fixed | When set, indicates that the minimum address is fixed. |
| 3 - Max address fixed | When set, indicates that the maximum address is fixed. |
| 4 to 7 - Reserved | These bits are reserved and must be set to zero. |
TypeSpecificFlagsThe value of this member is dependent on the value in ResourceFlags member. The flags for each resource type are described in the tables below.
Memory Resource (ResourceFlags = 0)
| Bit(s) | Meaning |
|---|---|
| 0 - Write status | When set, indicates that this memory range is available for reading and writing. Otherwise, this indicates that this memory range is read-only. |
| 1 to 2 - Memory attributes (MEM) | 0 - Indicates the memory is non-cacheable. 1 - Indicates the memory is cacheable. 2 - Indicates the memory is cacheable and supports write combining. 3 - The memory is cacheable and prefetchable. |
| 3 to 4 - Memory attributes (MTP) | These bits are only defined if this memory resource describes system RAM. 0 - Address range memory: This range is available RAM usable by the operating system. 1 - Address range reserved: This range of addresses is in use or reserved by the system and is not to be included in the allocatable memory pool of the operating system's memory manager. 2 - Address range ACPI: ACPI Reclaim Memory. This range is available RAM usable by the OS after it reads the ACPI tables. 3 - Address Range NVS: ACPI NVS Memory. This range of addresses is in use or reserved by the system and must not be used by the operating system. This range is required to be saved and restored across an NVS sleep. |
| 5 - Memory to IO translation | 0 - Type-static: This resource is memory on the primary and secondary sides of the bridge. 1 - Type-translation: This resource is memory on the secondary side of the bridge and IO on the primary side of the bridge. |
| 6 to 7 - Reserved | These bits are reserved and must be set to zero. |
IO Resource (ResourceFlags = 1)
| Bit(s) | Meaning | ||
|---|---|---|---|
| 0 to 1 - Range | 0 - Reserved. 1 - Non-ISA ranges only. This flag is for bridges on systems with multiple bridges. Setting this bit means the memory window specified in this descriptor is limited to the non-ISA IO addresses that fall within the specified window. The non-ISA IO ranges are: n100-n3FF, n500-n7FF, n900-nBFF, nD00-nFFF. This bit can only be set for bridges entirely configured through the ACPI namespace. 2 - ISA ranges only. This flag is for bridges on systems with multiple bridges. Setting this bit means the memory window specified in this descriptor is limited to the ISA IO addresses that fall within the specified window. The ISA IO ranges are: n000-n0FF, n400-n4FF, n800-n8FF, nC00-nCFF. This bit can only be set for bridges entirely configured through the ACPI namespace. 3 - The memory window covers the entire range |
||
| 2 to 3 - Reserved | These bits are reserved and must be set to zero. | ||
| 4 - IO to memory translation | 0 - Type-static: This resource is IO on the primary and secondary sides of the bridge. 1 - Type-translation: This resource is IO on the secondary side of the bridge and memory on the primary side of the bridge. |
||
| 5 - Sparse translation | This bit is only meaningful if bit 4 (IO to memory translation) is set. 0 - Dense translation: The primary-side memory address of any specific IO port within the secondary-side range can be found using the following function. address = port + TranslationAddress 1 - Sparse translation: The primary-side memory address of any specific IO port within the secondary-side range can be found using the following function. *address = (((port & 0xFFFc) << 10) |
(port & 0xFFF)) + TranslationAddress* In the address used to access the IO port, bits 2 to 11 must be identical to bits 12 to 21, this gives four bytes of IO ports on each 4 KB page. |
|
| 6 to 7 - Reserved | These bits are reserved and must be set to zero. |
Bus Number Range Resource (ResourceFlags = 2)
| Bit(s) | Meaning |
|---|---|
| 0 to 7 - Reserved | These bits are reserved and must be set to zero. |
RevisionIdIndicates the revision of the extended address space descriptor detailed by this structure. For ACPI 3.0, this value is 1.
ReservedGranularityA bit mask indicating which bits have been decoded.
MinimumAddressThe minimum starting address. For bridges that translate addresses, this is the address space on the secondary side of the bridge.
MaximumAddressThe maximum starting address. For bridges that translate addresses, this is the address space on the secondary side of the bridge.
TranslationAddressFor bridges that translate addresses across the bridge, this is the address on the primary side.
AddressLengthThe address length.
TypeAttributeIndicates attributes that are specific to the resource type that is specified in the ResourceFlags member. If ResourceFlags is zero, this value is zero, otherwise the meaning of the value can be found in the UEFI Specification in the section titled GetMemoryMap().
DescriptorNameThe name of this resource descriptor.
The PEP_ACPI_EXTENDED_ADDRESS structure is used to report resource usage in the address space such as memory and IO.
TypeA PEP_ACPI_RESOURCE_TYPE enumeration value describing this resource.
FlagsA PEP_ACPI_RESOURCE_FLAGS structure describing this resource.
ResourceFlagsIndicates the type of resource this structure describes.
| Value | Meaning |
|---|---|
| 0 | Indicates that this resource is a memory range. |
| 1 | Indicates that this resource is an IO range. |
| 2 | Indicates that this resource is a bus number range. |
| 3-191 | These values are reserved for future use. |
| 192-255 | These values are reserved for use by the hardware vendor. |
GeneralFlagsA value containing the bit flags that are common to all resource types.
| Bit(s) | Meaning |
|---|---|
| 0 - Consumer/Producer flag | When set, this indicates that the device consumes this resource. |
| 1 - Decode type | When set, indicates that this bridge subtractively decodes the address. This applies to top level bridges only. When not set, indicates that this bridge positively decodes this address. |
| 2 - Minimum address fixed | When set, indicates that the minimum address is fixed. |
| 3 - Max address fixed | When set, indicates that the maximum address is fixed. |
| 4 to 7 - Reserved | These bits are reserved and must be set to zero. |
TypeSpecificFlagsThe value of this member is dependent on the value in ResourceFlags member. The flags for each resource type are described in the tables below.
Memory Resource (ResourceFlags = 0)
| Bit(s) | Meaning |
|---|---|
| 0 - Write status | When set, indicates that this memory range is available for reading and writing. Otherwise, this indicates that this memory range is read-only. |
| 1 to 2 - Memory attributes (MEM) | 0 - Indicates the memory is non-cacheable. 1 - Indicates the memory is cacheable. 2 - Indicates the memory is cacheable and supports write combining. 3 - The memory is cacheable and prefetchable. |
| 3 to 4 - Memory attributes (MTP) | These bits are only defined if this memory resource describes system RAM. 0 - Address range memory: This range is available RAM usable by the operating system. 1 - Address range reserved: This range of addresses is in use or reserved by the system and is not to be included in the allocatable memory pool of the operating system's memory manager. 2 - Address range ACPI: ACPI Reclaim Memory. This range is available RAM usable by the OS after it reads the ACPI tables. 3 - Address Range NVS: ACPI NVS Memory. This range of addresses is in use or reserved by the system and must not be used by the operating system. This range is required to be saved and restored across an NVS sleep. |
| 5 - Memory to IO translation | 0 - Type-static: This resource is memory on the primary and secondary sides of the bridge. 1 - Type-translation: This resource is memory on the secondary side of the bridge and IO on the primary side of the bridge. |
| 6 to 7 - Reserved | These bits are reserved and must be set to zero. |
IO Resource (ResourceFlags = 1)
| Bit(s) | Meaning | ||
|---|---|---|---|
| 0 to 1 - Range | 0 - Reserved. 1 - Non-ISA ranges only. This flag is for bridges on systems with multiple bridges. Setting this bit means the memory window specified in this descriptor is limited to the non-ISA IO addresses that fall within the specified window. The non-ISA IO ranges are: n100-n3FF, n500-n7FF, n900-nBFF, nD00-nFFF. This bit can only be set for bridges entirely configured through the ACPI namespace. 2 - ISA ranges only. This flag is for bridges on systems with multiple bridges. Setting this bit means the memory window specified in this descriptor is limited to the ISA IO addresses that fall within the specified window. The ISA IO ranges are: n000-n0FF, n400-n4FF, n800-n8FF, nC00-nCFF. This bit can only be set for bridges entirely configured through the ACPI namespace. 3 - The memory window covers the entire range |
||
| 2 to 3 - Reserved | These bits are reserved and must be set to zero. | ||
| 4 - IO to memory translation | 0 - Type-static: This resource is IO on the primary and secondary sides of the bridge. 1 - Type-translation: This resource is IO on the secondary side of the bridge and memory on the primary side of the bridge. |
||
| 5 - Sparse translation | This bit is only meaningful if bit 4 (IO to memory translation) is set. 0 - Dense translation: The primary-side memory address of any specific IO port within the secondary-side range can be found using the following function. address = port + TranslationAddress 1 - Sparse translation: The primary-side memory address of any specific IO port within the secondary-side range can be found using the following function. *address = (((port & 0xFFFc) << 10) |
(port & 0xFFF)) + TranslationAddress* In the address used to access the IO port, bits 2 to 11 must be identical to bits 12 to 21, this gives four bytes of IO ports on each 4 KB page. |
|
| 6 to 7 - Reserved | These bits are reserved and must be set to zero. |
Bus Number Range Resource (ResourceFlags = 2)
| Bit(s) | Meaning |
|---|---|
| 0 to 7 - Reserved | These bits are reserved and must be set to zero. |
RevisionIdIndicates the revision of the extended address space descriptor detailed by this structure. For ACPI 3.0, this value is 1.
ReservedGranularityA bit mask indicating which bits have been decoded.
MinimumAddressThe minimum starting address. For bridges that translate addresses, this is the address space on the secondary side of the bridge.
MaximumAddressThe maximum starting address. For bridges that translate addresses, this is the address space on the secondary side of the bridge.
TranslationAddressFor bridges that translate addresses across the bridge, this is the address on the primary side.
AddressLengthThe address length.
TypeAttributeIndicates attributes that are specific to the resource type that is specified in the ResourceFlags member. If ResourceFlags is zero, this value is zero, otherwise the meaning of the value can be found in the UEFI Specification in the section titled GetMemoryMap().
DescriptorNameThe name of this resource descriptor.