다음을 통해 공유


ACPI 서비스에 PEP 사용

이 항목에서는 ACPI 서비스에 PEP(플랫폼 확장 플러그 인)를 사용하는 방법에 대한 정보를 제공합니다.

PEP는 동적 런타임 ACPI 메서드를 제공합니다. 정적 테이블(FADT, MADT, DBG2 등)은 DSDT/SSDT 디바이스 계층 구조뿐만 아니라 ACPI 펌웨어에서도 구현되어야 합니다.

PEP는 Off-SoC 전원 관리 방법에 사용됩니다. 설치 가능한 이진 파일이므로 펌웨어 플래시가 필요한 ACPI 펌웨어와 달리 즉석에서 업데이트할 수 있습니다. 즉, 업데이트된 드라이버를 Windows 업데이트 게시하여 이미 제공된 플랫폼에서 전원 관리 코드를 개선할 수 있습니다. 전원 관리는 PEP의 원래 의도였지만 임의의 ACPI 런타임 메서드를 제공하거나 재정의하는 데 사용할 수 있습니다.

펌웨어 DSDT에서 네임스페이스 계층 구조를 제공해야 하므로 PEP는 ACPI 네임스페이스 계층 구조의 생성에 아무런 역할을 하지 않습니다. ACPI 드라이버는 런타임에 메서드를 평가할 때 해당 디바이스에 대해 PEP의 구현된 메서드에 대해 검사, 있는 경우 PEP를 실행하고 펌웨어의 버전을 무시합니다. 그러나 디바이스 자체는 펌웨어에 정의되어야 합니다.

사용 가능한 도구로 인해 ACPI 펌웨어용으로 작성된 코드보다 PEP를 사용하여 전원 관리를 제공하는 것이 훨씬 쉽게 디버그할 수 있습니다. ACPI 펌웨어를 디버깅하는 도구는 대부분 익숙하지 않으며 도구 옵션이 제한됩니다. 반면, PEP는 Windows 드라이버로 개발되므로 개발자는 가장 익숙한 개발 및 디버깅 도구를 사용할 수 있습니다.

ACPI 서비스 대신 PEP를 사용하는 경우 서비스의 역할을 클레임하기 위해 특별한 작업이나 작업이 필요하지 않습니다. PEP에서 메서드가 구현되면 Windows에서 자동으로 사용합니다. 동일한 디바이스에서 동일한 메서드의 펌웨어 버전이 제공되면 무시됩니다.

PEP는 디바이스 드라이버에서 서비스를 사용할 수 있도록 매우 일찍 로드됩니다. 또한 Windows를 통한 추상화 계층은 디바이스 드라이버에 투명하게 설계되었습니다. 드라이버는 PEP가 사용되지 않는 것처럼 ACPI 메서드와 상호 작용할 수 있어야 합니다.

DPM(디바이스 전원 관리) 및 ACPI 서비스 모두에 PEP를 사용하는 경우 별도의 PEP 핸들을 사용하는 것이 좋지만 이는 기본 설정의 문제일 뿐입니다. 핸들 DPM 및 ACPI 상태를 공유하는 경우 핸들이 동일하기 때문에 디바이스에 대해 쉽게 추적할 수 있습니다. 그러나 수명 관리 처리는 좀 더 복잡합니다. PEP는 해당 핸들에 대해 DPM 및 ACPI 서비스가 모두 제거된 후에만 삭제되도록 핸들에 대한 참조 계산을 제공해야 합니다(즉, 해당 핸들에서 PEP_DPM_UNREGISTER_DEVICEPEP_NOTIFY_ACPI_UNREGISTER_DEVICE 모두 수신됨). 다른 핸들을 사용하는 경우 DPM 및 ACPI 상태는 별도로 추적되지만 처리 수명 관리는 더 간단합니다. 이 경우 해당 등록 취소 알림을 보낼 때 핸들을 제거할 수 있습니다.

ACPI 리소스 작업 프로세스를 간소화하기 위해 PoFx(전원 관리 프레임워크)는 ACPI 리소스를 BIOS 리소스로 변환하는 PEP_REQUEST_COMMON_ACPI_CONVERT_TO_BIOS_RESOURCES 도우미 루틴을 제공합니다.

PEP는 PoFx의 ACPI 알림에 대한 응답으로 동기적으로 수행할 수 없는 예약 작업을 담당하지만 사용된 메서드는 PEP 개발자에 의해 결정됩니다. 일반적으로 PEP는 일부 내부 큐에서 작업을 큐에 넣은 다음 필요한 경우 작업자 스레드를 시작합니다. 작업에서 일부 외부 이벤트(예: 디바이스 인터럽트)를 기다려야 하고 해당 이벤트의 컨텍스트에서 처리될 수도 있습니다. 작업이 완료되면 PEP는 PEP_KERNEL_INFORMATION_STRUCT_V3-RequestWorker>()를 호출하여 PoFx에 작업을 쿼리하도록 요청할 수 있습니다. 이에 대한 응답으로 PoFx는 DPM 알림 처리기(AcceptDeviceNotification)를 구현하는 PEP에 대한 PEP_DPM_WORK 알림 또는 ACPI 전용 알림 처리기(AcceptAcpiNotification)를 구현하는 PEP에 대한 PEP_NOTIFY_ACPI_WORK 알림을 보냅니다.

ACPI 시스템 설명 테이블
PEP_DPM_UNREGISTER_DEVICE
PEP_NOTIFY_ACPI_UNREGISTER_DEVICE
PEP_KERNEL_INFORMATION_STRUCT_V3
PEP_DPM_WORK
PEP_NOTIFY_ACPI_WORK
RequestWorker
AcceptDeviceNotification
ACPI 알림