ACPI 인터페이스: PCIe 루트 포트에 대한 디바이스별 데이터(_DSD)
Windows 10(버전 1803)에서는 최신 대기 및 PCI 핫 플러그 시나리오를 지원하기 위해 새로운 ACPI _DSD 메서드가 추가되었습니다.
PCIe 루트 포트에서 DRIPS(Directed Deepest Runtime 유휴 플랫폼 상태) 지원
이 ACPI 개체는 DFx(Directed Power Management Framework)를 구현할 수 있는 최신 대기 사용 시스템에서 사용자가 액세스할 수 있는 모든 PCIe 루트 포트/슬롯의 ACPI 범위에서 구현되어야 합니다.
Name (_DSD, Package () {
ToUUID("FDF06FAD-F744-4451-BB64-ECD792215B10"),
Package () {
Package (2) {"FundamentalDeviceResetTriggeredOnD3ToD0", 1},
}
}
)
핫 플러그 인 D3를 지원하는 PCIe 루트 포트 식별
이 ACPI 개체를 사용하면 운영 체제가 D3 상태인 동안 핫 플러그 이벤트를 처리할 수 있는 PCIe 루트 포트를 식별하고 전원을 관리할 수 있습니다. 이 개체가 PCIe 핫 플러그 지원 포트에서 구현되지 않은 경우 자식 PCIe 디바이스가 없으면 시스템에서 이 포트를 관리하지 않으므로 시스템에서 필요한 것보다 더 많은 전력을 소비하게 됩니다.
이 개체는 썬더볼트 계층의 모든 PCIe 루트 포트, RTD3(런타임 D3) 지원 시스템의 루트 포트 ACPI 디바이스 범위에서 구현되어야 합니다.
Name (_DSD, Package () {
ToUUID("6211E2C0-58A3-4AF3-90E1-927A4E0C55A4"),
Package () {
Package (2) {"HotPlugSupportInD3", 1},
}
}
)
외부에 노출된 PCIe 루트 포트 식별
이 ACPI 개체를 사용하면 운영 체제에서 외부에 노출된 PCIe 계층(예: Thunderbolt)을 식별할 수 있습니다. 이 개체는 루트 포트 ACPI 디바이스 범위에서 구현해야 합니다.
참고: Windows 10 버전 1803과 함께 제공되는 시스템에서 이 개체는 Thunderbolt 계층 구조의 PCIe 루트 포트에서만 구현되어야 합니다.
Name (_DSD, Package () {
ToUUID("EFCC06CC-73AC-4BC3-BFF0-76143807C389"),
Package () {
Package (2) {"ExternalFacingPort", 1}, // Property 1: This is an externally facing port/hierarchy
Package (2) {"UID", 0}, // Property 2: UID of the externally facing port on platform, range is: 0, 1, …, n-1
}
}
)
사용자가 액세스할 수 있는 내부 PCIe 포트 식별 및 DMA 보호 필요
이 ACPI 개체를 사용하면 운영 체제에서 사용자가 쉽게 액세스할 수 있는 내부 PCIe 계층 구조(예: 래치를 통해 액세스할 수 있는 노트북 M.2 PCIe 슬롯)를 식별하고 OS 커널 DMA 보호 메커니즘을 통해 보호해야 합니다. 이 개체는 루트 포트 ACPI 디바이스 범위에서 구현해야 합니다.
주요 참고 항목:
이 ACPI 개체를 사용하여 PCI 포트 보호는 Windows 10 버전 1903 이상에서만 지원됩니다.
OS가 _DSD 구문 분석하고 PCI 포트에 필요한 보호를 적용하려면 시스템 BIOS/UEFI에서 커널 DMA 보호를 사용하도록 설정해야 합니다.
이 포트에 연결된 디바이스의 드라이버는 DMA 다시 매핑을 지원해야 합니다. 그렇지 않으면 Windows 10은 DMAGuard 정책에 따라 사용자가 로그인하거나 무기한으로 로그인할 때까지 이러한 디바이스의 작동을 차단할 수 있습니다.
Name (_DSD, Package () {
ToUUID("70D24161-6DD5-4C9E-8070-705531292865"),
Package () {
Package (2) {"DmaProperty", 1}, // Property 1: This port needs to be protected by the OS
Package (2) {"UID", 0}, // Property 2: UID of the PCIe port on platform, range is: 0, 1, …, n-1
}
}
)
D3_COLD_AUX_POWER ECN 인터페이스를 지원하는 PCIe 포트 식별
이 ACPI 개체를 사용하면 운영 체제에서 D3_COLD_AUX_POWER ECN 인터페이스를 지원하는 PCIe 포트를 식별할 수 있습니다. 이를 통해 PCIe 디바이스는 기본 375mA @3.3V를 초과하는 D3의 플랫폼 추가 보조 전원을 플랫폼에서 요청할 수 있습니다. 이 DSD 를 정의하는 모든 PCI 포트 또는 브리지는 이전에 협상한 보조 전력 값을 다시 프로그래밍할 때 작업이 성공한다는 것을 보장해야 합니다 .
Name (_DSD, Package () {
ToUUID("6B4AD420-8FD3-4364-ACF8-EB94876FD9EB"),
Package () {
}
}
)
USB4를 통해 터널된 네이티브 프로토콜(PCIe, DisplayPort)을 USB4 호스트 라우터로 매핑
이 ACPI 개체를 사용하면 운영 체제가 USB4를 통해 터널링된 PCIe 및 DisplayPort와 같은 네이티브 프로토콜을 올바른 USB4 호스트 라우터에 매핑할 수 있습니다.
다음 샘플 Device (DSB0)
\_SB.PCI0.NHI0
에서는 .
Scope (\_SB.PCI0)
{
Device (NHI0) { } //Host interface instance which has dependency on \_SB.PCI0.NHI0
Device (DSB0) //Tunneled PCIe port instance
{
Name (_DSD, Package () {
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), //Device Properties UUID
Package () {
Package () { "usb4-host-interface", \_SB.PCI0.NHI0 },
Package () { "usb4-port-number", PortInstance#},
}
})
}
Device (…) //Extend to DP and USB tunneled ports, as needed
{
Name (_DSD, Package () {
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), //Device Properties UUID
Package () {
Package () { "usb4-host-interface", \_SB.PCI0.NHI0 },
Package () { "usb4-port-number", PortInstance#},
}
})
}
}