Diferenças entre as versões DDI de áudio HD
A DDI de áudio HD está disponível em três versões ligeiramente diferentes que são definidas da seguinte maneira:
Uma versão de linha de base da DDI de áudio HD, que é definida pela estrutura HDAUDIO_BUS_INTERFACE . A maioria dos drivers de função para codecs de áudio e modem exige apenas os recursos que essa versão DDI fornece. Esta versão está disponível por meio dos drivers de barramento de áudio HD fornecidos com o Windows XP e o Windows Vista.
Uma versão aprimorada da DDI de áudio HD definida pela estrutura HDAUDIO_BUS_INTERFACE_V2 . Esta versão da DDI fornece a funcionalidade adicional necessária para dar suporte à notificação de eventos controlada por DMA com flexibilidade. Ele está disponível no Windows Vista e em versões posteriores do Windows.
Uma versão modificada da DDI de áudio HD definida pela estrutura HDAUDIO_BUS_INTERFACE_BDL . Essa versão acomoda os requisitos de relativamente poucos drivers de áudio e modem que devem ter controle adicional sobre a configuração de BDLs (listas de descritores de buffer) para operações de DMA. Esta versão da DDI está disponível para o Windows XP e versões posteriores do Windows. No entanto, use o HDAUDIO_BUS_INTERFACE ou a versão HDAUDIO_BUS_INTERFACE_V2 DDI. .
Nas três estruturas, os nomes e tipos dos cinco primeiros membros correspondem aos dos cinco membros da estrutura INTERFACE . Para obter informações sobre os valores desses membros, consulte Obtendo um objeto DDI HDAUDIO_BUS_INTERFACE, Obtendo um objeto DDI HDAUDIO_BUS_INTERFACE_V2 ou Obtendo um objeto DDI HDAUDIO_BUS_INTERFACE_BDL.
As rotinas nas três versões da DDI de áudio HD executam as seguintes tarefas:
Transfira comandos para codecs e recupere as respostas para esses comandos.
Aloque e configure mecanismos de AMD para transferir os dados em fluxos de renderização e captura.
Altere o estado do fluxo de um ou mais mecanismos de DMA para em execução, pausado, interrompido ou redefinido.
Reserve largura de banda de link para fluxos de renderização e captura.
Forneça acesso direto aos registros de registro do relógio de parede e à posição do link.
Notifique os clientes sobre respostas não solicitadas de codecs.
Registre eventos de kernel para que eles possam receber notificações de progresso do AMD.
As versões HDAUDIO_BUS_INTERFACE e HDAUDIO_BUS_INTERFACE_BDL da DDI têm as seguintes diferenças:
A estrutura HDAUDIO_BUS_INTERFACE define duas rotinas, AllocateDmaBuffer e FreeDmaBuffer, que não estão presentes no HDAUDIO_BUS_INTERFACE_BDL.
A estrutura HDAUDIO_BUS_INTERFACE_BDL define três rotinas, SetupDmaEngineWithBdl, AllocateContiguousDmaBuffer e FreeContiguousDmaBuffer, que não estão presentes no HDAUDIO_BUS_INTERFACE.
Quando um cliente chama a rotina AllocateDmaBuffer na primeira versão DDI, o driver de barramento de áudio HD:
Aloca um buffer de DMA e BDL para um mecanismo de DMA a ser usado.
Inicializa o BDL.
Configura o mecanismo de DMA para usar o buffer e o BDL.
Por outro lado, a rotina AllocateContiguousDmaBuffer na segunda versão DDI aloca armazenamento para um buffer de DMA e BDL, mas depende do chamador para inicializar o BDL. A rotina SetupDmaEngineWithBdl configura o mecanismo de DMA para usar o buffer e o BDL inicializado pelo chamador.
O BDL contém a lista de blocos de memória física na fila de dispersão/coleta do mecanismo de DMA. Ao chamar SetupDmaEngineWithBdl para configurar o BDL, o cliente pode especificar os pontos no fluxo de dados no qual o mecanismo de DMA gera interrupções. O cliente faz isso definindo o bit ioc (interrupção após a conclusão) em entradas BDL selecionadas. Com essa funcionalidade, o cliente pode controlar precisamente o tempo das interrupções do COI que ocorrem durante o processamento do fluxo de áudio. Os drivers de modem de áudio também usam a segunda versão DDI para obter informações precisas do relógio do sistema.
Para obter mais informações, consulte a Especificação de áudio de alta definição da Intel.
No entanto, quase todos os clientes usarão a versão HDAUDIO_BUS_INTERFACE da DDI. Apenas alguns clientes que exigem controle preciso sobre o tempo das interrupções usarão a versão HDAUDIO_BUS_INTERFACE_BDL.