Различия между версиями DDI для HD Audio
Hd Audio DDI доступен в трех немного разных версиях, которые определены следующим образом:
Базовая версия HD Audio DDI, определяемая структурой HDAUDIO_BUS_INTERFACE . Большинству драйверов функций для аудио- и модемных кодеков требуются только те возможности, которые предоставляет эта версия DDI. Эта версия доступна через драйверы шины HD Audio, которые предоставляются в Windows XP и Windows Vista.
Расширенная версия HD Audio DDI, определяемая структурой HDAUDIO_BUS_INTERFACE_V2 . Эта версия DDI предоставляет дополнительные возможности, необходимые для гибкой поддержки уведомлений о событиях на основе DMA. Он доступен в Windows Vista и более поздних версиях Windows.
Измененная версия HD Audio DDI, определяемая структурой HDAUDIO_BUS_INTERFACE_BDL . Эта версия соответствует требованиям относительно небольшого числа драйверов аудио и модема, которые должны иметь дополнительный контроль над настройкой списков дескрипторов буфера (BDL) для операций DMA. Эта версия DDI доступна для Windows XP и более поздних версий Windows. Однако вместо этого используйте версию HDAUDIO_BUS_INTERFACE или HDAUDIO_BUS_INTERFACE_V2 DDI. .
Во всех трех структурах имена и типы первых пяти элементов соответствуют именам пяти членов структуры INTERFACE . Сведения о значениях этих элементов см. в разделах Получение объекта HDAUDIO_BUS_INTERFACE DDI, Получение объекта HDAUDIO_BUS_INTERFACE_V2 DDI или Получение объекта HDAUDIO_BUS_INTERFACE_BDL DDI.
Подпрограммы в трех версиях HD Audio DDI выполняют следующие задачи:
Перенесите команды в кодеки и получите ответы на эти команды.
Выделение и настройка подсистем DMA для передачи данных в потоках отрисовки и записи.
Измените состояние потока одного или нескольких обработчиков DMA на запущено, приостановлено, остановлено или сброшено.
Зарезервируйте пропускную способность канала для потоков отрисовки и записи.
Предоставьте прямой доступ к регистру настенных часов и регистрам положения ссылок.
Уведомлять клиентов о нежелательных ответах от кодеков.
Регистрируйте события ядра, чтобы они могли получать уведомления о ходе выполнения DMA.
HDAUDIO_BUS_INTERFACE и HDAUDIO_BUS_INTERFACE_BDL версии DDI имеют следующие отличия.
Структура HDAUDIO_BUS_INTERFACE определяет две подпрограммы, AllocateDmaBuffer и FreeDmaBuffer, которые отсутствуют в HDAUDIO_BUS_INTERFACE_BDL.
Структура HDAUDIO_BUS_INTERFACE_BDL определяет три подпрограммы SetupDmaEngineWithBdl, AllocateContiguousDmaBuffer и FreeContiguousDmaBuffer, которые отсутствуют в HDAUDIO_BUS_INTERFACE.
Когда клиент вызывает подпрограмму AllocateDmaBuffer в первой версии DDI, драйвер шины HD Audio:
Выделяет буфер DMA и BDL для подсистемы DMA.
Инициализирует BDL.
Настраивает подсистему DMA для использования буфера и BDL.
В отличие от этого, подпрограмма AllocateContiguousDmaBuffer во второй версии DDI выделяет хранилище для буфера DMA и BDL, но использует вызывающий объект для инициализации BDL. Подпрограмма SetupDmaEngineWithBdl настраивает подсистему DMA для использования буфера и инициализированного вызывающего метода BDL.
BDL содержит список блоков физической памяти в очереди точечной и сборной подсистемы DMA. Вызвав SetupDmaEngineWithBdl для настройки BDL, клиент может указать точки в потоке данных, в которых обработчик DMA создает прерывания. Клиент делает это, задав бит прерывания при завершении (IOC) в выбранных записях BDL. С помощью этой возможности клиент может точно управлять временем прерываний IOC, которые происходят во время обработки аудиопотока. Драйверы аудиомодумов также используют вторую версию DDI для получения точной информации о системных часах.
Дополнительные сведения см. в спецификации Intel High Definition Audio.
Однако почти все клиенты будут использовать HDAUDIO_BUS_INTERFACE версию DDI. Только несколько клиентов, которым требуется точный контроль над временем прерываний, будут использовать версию HDAUDIO_BUS_INTERFACE_BDL.