HD 오디오 DDI 버전 간의 차이점

HD 오디오 DDI는 다음과 같이 정의된 세 가지 약간 다른 버전에서 사용할 수 있습니다.

  • HDAUDIO_BUS_INTERFACE 구조체에 의해 정의된 HD Audio DDI의 기준 버전입니다. 오디오 및 모뎀 코덱에 대한 대부분의 함수 드라이버에는 이 DDI 버전에서 제공하는 기능만 필요합니다. 이 버전은 Windows XP 및 Windows Vista와 함께 제공되는 HD 오디오 버스 드라이버를 통해 사용할 수 있습니다.

  • HDAUDIO_BUS_INTERFACE_V2 구조에 의해 정의된 HD Audio DDI의 향상된 버전입니다. 이 버전의 DDI는 DMA 기반 이벤트 알림을 유연하게 지원하는 데 필요한 추가 기능을 제공합니다. Windows Vista 이상 버전의 Windows에서 사용할 수 있습니다.

  • HDAUDIO_BUS_INTERFACE_BDL 구조체에 의해 정의된 HD Audio DDI의 수정된 버전입니다. 이 버전은 DMA 작업에 대한 버퍼 설명자 목록(BDL) 설정을 추가로 제어해야 하는 비교적 적은 수의 오디오 및 모뎀 드라이버의 요구 사항을 수용합니다. 이 버전의 DDI는 Windows XP 이상 버전의 Windows에서 사용할 수 있습니다. 그러나 HDAUDIO_BUS_INTERFACE 또는 HDAUDIO_BUS_INTERFACE_V2 DDI 버전을 대신 사용합니다. .

세 구조체에서 처음 5개 멤버의 이름과 형식은 INTERFACE 구조체의 5개 멤버와 일치합니다. 이러한 멤버의 값에 대한 자세한 내용은 HDAUDIO_BUS_INTERFACE DDI 개체 가져오기, HDAUDIO_BUS_INTERFACE_V2 DDI 개체 가져오기 또는 HDAUDIO_BUS_INTERFACE_BDL DDI 개체가져오기를 참조하세요.

세 가지 버전의 HD Audio DDI의 루틴은 다음 작업을 수행합니다.

  • 명령을 코덱으로 전송하고 해당 명령에 대한 응답을 검색합니다.

  • DMA 엔진을 할당하고 설정하여 렌더링 및 캡처 스트림에서 데이터를 전송합니다.

  • 하나 이상의 DMA 엔진의 스트림 상태를 실행, 일시 중지, 중지 또는 다시 설정으로 변경합니다.

  • 렌더링 및 캡처 스트림에 대한 링크 대역폭을 예약합니다.

  • 벽시계 레지스터 및 링크 위치 레지스터에 직접 액세스할 수 있도록 합니다.

  • 코덱에서 원치 않는 응답을 클라이언트에 알립니다.

  • 커널 이벤트를 등록하여 DMA 진행률 알림을 받을 수 있도록 합니다.

DDI의 HDAUDIO_BUS_INTERFACE 및 HDAUDIO_BUS_INTERFACE_BDL 버전에는 다음과 같은 차이점이 있습니다.

클라이언트가 첫 번째 DDI 버전에서 AllocateDmaBuffer 루틴을 호출하는 경우 HD 오디오 버스 드라이버는 다음과 같습니다.

  • 사용할 DMA 엔진에 대한 DMA 버퍼 및 BDL을 할당합니다.

  • BDL을 초기화합니다.

  • 버퍼 및 BDL을 사용하도록 DMA 엔진을 설정합니다.

반면, 두 번째 DDI 버전의 AllocateContiguousDmaBuffer 루틴은 DMA 버퍼 및 BDL에 대한 스토리지를 할당하지만 호출자를 사용하여 BDL을 초기화합니다. SetupDmaEngineWithBdl 루틴은 버퍼와 호출자가 초기화한 BDL을 사용하도록 DMA 엔진을 설정합니다.

BDL에는 DMA 엔진의 분산/수집 큐에 있는 실제 메모리 블록 목록이 포함됩니다. SetupDmaEngineWithBdl을 호출하여 BDL을 설정하면 클라이언트는 DMA 엔진이 인터럽트 생성되는 데이터 스트림의 지점을 지정할 수 있습니다. 클라이언트는 선택한 BDL 항목에서 IOC(인터럽트 온-완료) 비트를 설정하여 이 작업을 수행합니다. 이 기능을 사용하면 클라이언트가 오디오 스트림을 처리하는 동안 발생하는 IOC 인터럽트 타이밍을 정확하게 제어할 수 있습니다. 또한 오디오 모뎀 드라이버는 두 번째 DDI 버전을 사용하여 정확한 시스템 클록 정보를 가져옵니다.

자세한 내용은 Intel 고화질 오디오 사양을 참조하세요.

그러나 거의 모든 클라이언트가 DDI의 HDAUDIO_BUS_INTERFACE 버전을 사용합니다. 인터럽트 타이밍을 정확하게 제어해야 하는 일부 클라이언트만 HDAUDIO_BUS_INTERFACE_BDL 버전을 사용합니다.