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

모든 리소스 종류에 공통적인 비트 플래그를 포함하는 값입니다.

비트 의미
0 - 소비자/생산자 플래그
설정하면 디바이스가 이 리소스를 사용한다는 것을 나타냅니다.
1 - 디코딩 형식
설정되면 이 브리지가 주소를 빼서 디코딩한다는 것을 나타냅니다. 이는 최상위 브리지에만 적용됩니다.

설정되지 않은 경우 이 브리지가 이 주소를 긍정적으로 디코딩한다는 것을 나타냅니다.

2 - 고정된 최소 주소
설정되면 최소 주소가 고정되었음을 나타냅니다.
3 - 최대 주소 고정
설정되면 최대 주소가 고정됨을 나타냅니다.
4~7 - 예약됨
이러한 비트는 예약되어 있으며 0으로 설정해야 합니다.

TypeSpecificFlags

이 멤버의 값은 ResourceFlags 멤버의 값에 따라 달라집니다. 각 리소스 종류에 대한 플래그는 아래 표에 설명되어 있습니다.

메모리 리소스(ResourceFlags = 0)

비트 의미
0 - 쓰기 상태
를 설정하면 이 메모리 범위를 읽고 쓸 수 있음을 나타냅니다. 그렇지 않으면 이 메모리 범위가 읽기 전용임을 나타냅니다.
1~2 - MEM(메모리 특성)
0 - 메모리를 캐시할 수 없음을 나타냅니다.

1 - 메모리를 캐시할 수 있음을 나타냅니다.

2 - 메모리가 캐시 가능하고 쓰기 결합을 지원합니다.

3 - 메모리는 캐시 가능하고 프리페치할 수 있습니다.

3~4 - MTP(메모리 특성)
이러한 비트는 이 메모리 리소스가 시스템 RAM을 설명하는 경우에만 정의됩니다.

0 - 주소 범위 메모리: 이 범위는 운영 체제에서 사용할 수 있는 RAM입니다.

1 - 예약된 주소 범위: 이 주소 범위는 시스템에서 사용 중이거나 예약되어 있으며 운영 체제 메모리 관리자의 할당 가능한 메모리 풀에 포함되지 않습니다.

2 - 주소 범위 ACPI: ACPI 메모리 회수. 이 범위는 ACPI 테이블을 읽은 후 OS에서 사용할 수 있는 RAM입니다.

3 - 주소 범위 NVS: ACPI NVS 메모리. 이 주소 범위는 시스템에서 사용 중이거나 예약되어 있으며 운영 체제에서 사용해서는 안 됩니다. 이 범위는 NVS 절전 모드에서 저장하고 복원해야 합니다.

5 - 메모리에서 IO로 변환
0 - 형식 정적: 이 리소스는 브리지의 기본 및 보조 측면에 있는 메모리입니다.

1 - 형식 변환: 이 리소스는 브리지의 보조 쪽에 있는 메모리이고 브리지의 기본 쪽에 있는 IO입니다.

6~7 - 예약됨
이러한 비트는 예약되어 있으며 0으로 설정해야 합니다.
 

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 - 예약됨
이러한 비트는 예약되어 있으며 0으로 설정해야 합니다.
4 - IO에서 메모리로 변환
0 - 형식 정적: 이 리소스는 브리지의 기본 및 보조 쪽에 있는 IO입니다.

1 - 형식 변환: 이 리소스는 브리지의 보조 쪽에 있는 IO이고 브리지의 기본 쪽에 있는 메모리입니다.

5 - 스파스 번역
이 비트는 비트 4(IO-메모리 변환)가 설정된 경우에만 의미가 있습니다.

0 - 조밀한 변환: 보조 쪽 범위 내의 특정 IO 포트의 기본 쪽 메모리 주소는 다음 함수를 사용하여 찾을 수 있습니다.

address = port + TranslationAddress

1 - 스파스 변환: 보조 쪽 범위 내의 특정 IO 포트의 기본 쪽 메모리 주소는 다음 함수를 사용하여 찾을 수 있습니다.

address = (((port & 0xFFFc) 10) << || (포트 & 0xFFF)) + TranslationAddress

IO 포트에 액세스하는 데 사용되는 주소에서 비트 2~11은 비트 12~21과 동일해야 합니다. 이렇게 하면 각 4KB 페이지에서 4바이트의 IO 포트가 표시됩니다.

6~7 - 예약됨
이러한 비트는 예약되어 있으며 0으로 설정해야 합니다.
 

버스 번호 범위 리소스(ResourceFlags = 2)

비트 의미
0~7 - 예약됨
이러한 비트는 예약되어 있으며 0으로 설정해야 합니다.

RevisionId

이 구조에 자세히 설명된 확장 주소 공간 설명자의 수정 버전을 나타냅니다. ACPI 3.0의 경우 이 값은 1입니다.

Reserved

Granularity

디코딩된 비트를 나타내는 비트 마스크입니다.

MinimumAddress

최소 시작 주소입니다. 주소를 변환하는 브리지의 경우 브리지의 보조 쪽에 있는 주소 공간입니다.

MaximumAddress

최대 시작 주소입니다. 주소를 변환하는 브리지의 경우 브리지의 보조 쪽에 있는 주소 공간입니다.

TranslationAddress

브리지를 가로질러 주소를 변환하는 브리지의 경우 기본 쪽의 주소입니다.

AddressLength

주소 길이입니다.

TypeAttribute

ResourceFlags 멤버에 지정된 리소스 종류와 관련된 특성을 나타냅니다. ResourceFlags가 0이면 이 값이 0이면 값의 의미는 GetMemoryMap()이라는 섹션의 UEFI 사양에서 찾을 수 있습니다.

DescriptorName

이 리소스 설명자의 이름입니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 10 부터 지원합니다.
머리글 pepfx.h(Pep_x.h 포함)