Interface ACPI: dados específicos do dispositivo (_DSD) para portas raiz PCIe

No Windows 10 (versão 1803), novos métodos de _DSD ACPI foram adicionados para dar suporte a cenários de hot plug PCI e espera modernos.

Suporte ao DRIPS (Estado de Plataforma Ociosa) do Runtime Mais Profundo Direcionado em Portas Raiz pcie

Esse objeto ACPI deve ser implementado no escopo acpi de cada porta/slot raiz pcie que é acessível ao usuário em sistemas habilitados para espera modernos que são capazes de implementar o DFx (Directed Power Management Framework).

Name (_DSD, Package () {

          ToUUID("FDF06FAD-F744-4451-BB64-ECD792215B10"),

            Package () {

                Package (2) {"FundamentalDeviceResetTriggeredOnD3ToD0", 1},
            }
        }
)

Identificando portas raiz PCIe que dão suporte ao hot plug-in D3

Esse objeto ACPI permite que o sistema operacional identifique e gerencie portas PCIe Root que são capazes de lidar com eventos de hot plug enquanto estiverem no estado D3. Se esse objeto não for implementado em uma porta compatível com hot plug PCIe, o sistema não ligará a energia para gerenciar essa porta se não tiver dispositivos PCIe filhos, fazendo com que o sistema consuma mais energia do que o necessário.

Esse objeto deve ser implementado em todas as portas raiz PCIe de hierarquias Thunderbolt, em sistemas compatíveis com Runtime D3 (RTD3), no escopo do dispositivo ACPI de Porta Raiz.

Name (_DSD, Package () {  

        ToUUID("6211E2C0-58A3-4AF3-90E1-927A4E0C55A4"),  

        Package () {  

            Package (2) {"HotPlugSupportInD3", 1},  

                   }
        }
)

Identificando portas raiz PCIe expostas externamente

Esse objeto ACPI permite que o sistema operacional identifique hierarquias PCIe expostas externamente, como Thunderbolt. Esse objeto deve ser implementado no escopo do dispositivo ACPI de Porta Raiz.

Observação: em sistemas que são enviados com Windows 10, versão 1803, esse objeto só deve ser implementado em portas pcie root de hierarquias thunderbolt.

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
                   }
        }
)

Identificar portas PCIe internas acessíveis aos usuários e exigir proteção contra DMA

Esse objeto ACPI permite que o sistema operacional identifique hierarquias pcie internas que são facilmente acessíveis pelos usuários (como slots PCIe do Laptop M.2 acessíveis por meio de uma trava) e exigem proteção pelo mecanismo de Proteção contra DMA do Kernel do SO. Esse objeto deve ser implementado no escopo do dispositivo ACPI de Porta Raiz.

Principais itens de observação:

  • A proteção de portas PCI usando esse objeto ACPI só tem suporte no Windows 10, versão 1903 e posterior.

  • A Proteção contra DMA do Kernel deve ser habilitada no BIOS/UEFI do sistema para que o sistema operacional analise o _DSD e aplique as proteções necessárias à porta PCI.

  • Drivers de dispositivos conectados a essa porta DEVEM dar suporte ao remapeamento de DMA; caso contrário, Windows 10 pode impedir que esses dispositivos operem até que um usuário faça logon ou indefinidamente, dependendo da Política 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
                   }
        }
)

Identificando portas PCIe com suporte D3_COLD_AUX_POWER interface ECN

Esse objeto ACPI permite que o sistema operacional identifique portas PCIe que dão suporte a D3_COLD_AUX_POWER interface ECN, o que permite que dispositivos PCIe solicitem da plataforma energia auxiliar adicional em D3, acima do padrão 375mA @3.3V. Qualquer porta ou ponte PCI que defina esse DSD deve garantir que, ao programar de volta o valor de energia auxiliar negociado anteriormente, a operação seja bem-sucedida.

Name (_DSD, Package () {
            ToUUID("6B4AD420-8FD3-4364-ACF8-EB94876FD9EB"),
            Package () {
            }
        }
)

Mapeamento de protocolos nativos (PCIe, DisplayPort) encapsulados por meio de roteadores de host USB4 para USB4

Esse objeto ACPI permite que o sistema operacional mapeie protocolos nativos, como PCIe e DisplayPort, encapsulados por usb4 para o roteador de host USB4 correto.

No exemplo a seguir, Device (DSB0) tem uma dependência de \_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#},
            }
        })
    }
}

Confira também

Habilitando o controle PCI Express Native no Windows

Proteção de DMA do Kernel para Thunderbolt 3

Habilitando o remapeamento de DMA para drivers de dispositivo

estrutura D3COLD_AUX_POWER_AND_TIMING_INTERFACE