PCI 전원 관리 및 디바이스 드라이버

이 문서에서는 PCI-PM(PCI 전원 관리)을 준수하는 하드웨어가 운영 체제의 디바이스 드라이버와 상호 작용하는 방식과 PCI-PM이 ACPI와 통합되는 방식에 대해 공급업체가 경험한 몇 가지 혼란을 명확히 설명합니다. 자세한 내용은 https://www.uefi.org/specifications을 참조하세요.

디바이스 드라이버 및 PCI 전원 관리

이 설명에서는 현재 Windows DDK에 설명된 대로 WDM(Windows 드라이버 모델) 드라이버가 전원 관리 이벤트를 처리하는 방법을 잘 알고 있다고 가정합니다. 일반적으로 디바이스 드라이버에 대한 책임은 다음과 같습니다.

  • 버스 드라이버: 버스 드라이버는 디바이스 열거, 구성 및 제어를 담당합니다. PCI-PM의 경우 PCI 드라이버는 PCI-PM 레지스터를 읽고 하드웨어의 기능을 결정합니다. POWER IRP가 전원 상태 변경을 요청하면 PCI 드라이버는 PCI 전원 관리 레지스터에 기록하여 하드웨어를 다른 Dx 상태로 설정합니다.

    디바이스가 절전 모드 해제를 사용하도록 설정되면 PCI 드라이버가 PCI-PM 레지스터에 기록하여 디바이스가 PME를 발생시킬 수 있도록 합니다(ACPI도 작업을 수행합니다. 다음 섹션 참조). 마지막으로, ACPI가 PCI 버스가 시스템을 절전 모드에서 해제하는 것을 확인하면 PCI 드라이버는 PCI 구성 공간을 검색하여 PME를 어설션하는 디바이스를 찾고, 해당 디바이스에서 PME를 사용하지 않도록 설정하고, 해당 디바이스에 대해 드라이버에 알릴 수 있습니다.

  • 디바이스 드라이버: 디바이스의 특정 드라이버는 디바이스 컨텍스트를 저장 및 복원하고 디바이스에 대한 정책 소유자로서 전원 상태 변경을 요청하는 역할을 합니다. 디바이스 드라이버가 낮은 디바이스 전원 상태 변경을 요청하는 POWER IRP를 받으면 디바이스 드라이버는 나중에 디바이스를 켜는 데 필요한 독점 디바이스 컨텍스트를 저장할 책임이 있습니다. 어떤 경우에는 저장할 것이 없을 수 있습니다.

PCI-PM 레지스터는 엄격하게 PCI 드라이버의 도메인입니다. IHV의 디바이스 드라이버는 이러한 레지스터에 액세스할 필요가 없습니다. 이렇게 하면 시스템이 안정적으로 작동하지 않습니다. 디바이스 드라이버의 책임은 독점 작업만 수행하는 것입니다.

ACPI 및 PCI PM 통합

일부 디바이스, 특히 휴대용의 마더보드 비디오 디바이스는 디바이스를 완전히 전원 관리하기 위해 PCI 전원 관리와 ASL(ACPI 원본 언어 어셈블러)이 모두 필요할 수 있습니다. PCI 전원 관리 레지스터는 내부 클록 및 전원 평면과 같은 디바이스의 내부 상태를 제어합니다. ASL은 외부 클록 및 전원 평면과 같은 외부 상태를 제어하거나 비디오 컨트롤러의 경우 ASL이 비디오 백라이트를 제어합니다. ASL 및 PCI-PM은 마더보드 디바이스에서만 결합할 수 있습니다.

OnNow 아키텍처는 디바이스 드라이버, PCI 드라이버 및 ACPI 드라이버(및 ASL)의 통합을 자연스럽게 처리하는 계층화된 아키텍처입니다. 다음 시나리오에서는 이러한 디바이스를 처리하기 위해 드라이버가 호출되는 순서를 보여 줍니다.

참고

위의 시나리오가 설명된 대로 작동하려면 WDM 드라이버가 현재 버전의 Microsoft Windows DDK에 설명된 대로 POWER IRP를 올바르게 전달해야 합니다.

시나리오 1: 디바이스 끄기

  1. 디바이스 드라이버: 독점 디바이스 상태를 저장합니다.
  2. PCI 드라이버: 플러그 앤 플레이 구성을 저장하고, 디바이스(인터럽트 및 BAR)를 사용하지 않도록 설정하고, PCI-PM 레지스터를 사용하여 디바이스를 D3에 넣습니다.
  3. ACPI 드라이버: ASL 코드(더 이상 사용되지 않는 전원 리소스에 대한 _PS3 및 _OFF)를 실행하여 칩 외부의 상태를 제어합니다.

시나리오 2: PCI 전원 관리 및 디바이스 드라이버

  1. ACPI 드라이버: 칩 외부의 상태를 제어하기 위해 ASL 코드(_PS0 및 OnNow 필수 전원 리소스에 대한 _ON)를 실행합니다.
  2. PCI 드라이버: PCI-PM을 사용하여 디바이스를 D0에 배치하면 구성이 플러그 앤 플레이 등록 및 복원됩니다(인터럽트 및 BAR은 디바이스가 이전에 있던 것과 다를 수 있습니다).
  3. 디바이스 드라이버: 디바이스에서 독점 컨텍스트를 복원합니다.

시나리오 3: 절전 모드 해제 사용

  1. 디바이스 드라이버: 절전 모드 해제를 사용하도록 칩의 독점 레지스터를 설정합니다. 예를 들어 패턴 일치 네트워크 절 해제에서 패턴이 어댑터로 프로그래밍되는 경우입니다.
  2. PCI 드라이버: 디바이스가 PME를 어설션할 수 있도록 PCI PM 레지스터의 절전 모드 해제 사용 비트를 설정합니다.
  3. ACPI 드라이버: PME와 연결된 칩 집합에서 GPE를 사용하도록 설정합니다(루트 PCI 버스 아래에 나열된 _PRW 개체에서 설명).

시나리오 4: 절식

  1. ACPI 드라이버: GPE 상태 비트에서 절전 모드 해제 이벤트를 확인하고, GPE 상태 비트 집합에 대해 GPE를 사용하지 않도록 설정하고, 설정된 GPE 비트와 연결된 _Lxx 또는 _Exx 메서드를 실행합니다. PCI 버스의 절전 모드 해제 알림에 대한 응답으로 ACPI 드라이버는 PCI 드라이버의 WAIT_WAKE IRP를 완료하여 PCI 드라이버에 시스템 절전 모드를 해제했음을 알립니다.
  2. PCI 드라이버: 설정된 PME 상태 비트가 있는 모든 디바이스를 찾는 구성 공간을 검사합니다. 각 디바이스에 대해 PME를 사용하지 않도록 설정하고 해당 디바이스에 대한 WAIT_WAKE IRP를 완료하여 드라이버에 절전 모드 해제를 어설션하고 있음을 알릴 수 있습니다. PCI 드라이버는 어설션 PME를 찾지 못하고 PME가 어설션되는 것을 중지하는 경우 모든 PCI 디바이스를 완전히 통과했을 때 절전 모드 해제 디바이스에 대한 검사를 중지합니다.
  3. 디바이스 드라이버: 디바이스를 D0(시나리오 2 참조)에 배치하도록 요청하고 절전 모드 해제 이벤트를 처리하는 데 필요한 칩의 독점 레지스터를 설정합니다.

PCI 전원 관리 및 디바이스 드라이버에 대한 작업 호출

  • 이 문서에 설명된 대로 ACPI 및 PCI-PM 기능을 디바이스에 통합합니다.
  • PCI 전원 관리 사양은 PCI-SIG 웹 사이트에서 사용할 수 있습니다.
  • ACPI 사양은 에서 https://www.uefi.org/specifications사용할 수 있습니다. 이 링크는 Microsoft.com 사이트를 남깁니다.
  • ACPICA(ACPI 구성 요소 아키텍처) 컴파일러는 에서 https://acpica.org/downloads/binary-tools찾을 수 있습니다.