Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Um driver de miniporta WaveCyclic copia dados de áudio entre o buffer DMA, que o hardware do controlador de áudio HD acessa, e o buffer do cliente, que o aplicativo de áudio de modo de usuário acessa:
Para um fluxo de dados de reprodução, o driver copia dados do buffer do cliente para o buffer DMA.
Para um fluxo de dados de captura, o driver copia dados do buffer DMA para o buffer do cliente.
Para fluxos de reprodução e captura, o driver pode obter o melhor desempenho ativando o cache da memória buffer DMA (tipo de cache MmCached) e confiando no mecanismo de monitorização de barramento do controlador PCI para garantir a coerência do cache. No entanto, algumas implementações da controladora PCI Express não espionam as transferências de dados isócronas da controladora de áudio HD (como o chipset PCI Express inicial da Intel).
O driver de função não pode detetar se o hardware do controlador PCI suporta espionagem de transferências de buffer DMA ou executa transferências de dados isócronas. Para evitar possíveis problemas de coerência de cache, o driver desabilita o cache da memória buffer DMA especificando o tipo de cache para essa memória como MmWriteCombined. (MmNonCached também funcionaria, mas poderia não funcionar tão bem.) Se você escrever um driver de adaptador personalizado baseado no driver de função de exemplo, seu driver de miniporta WaveCyclic deve se comportar de forma semelhante, a menos que você possa verificar se o controlador PCI de fato suporta espionagem de transferências de buffer DMA.
Para suportar dispositivos e sistemas que não executam espionagem de barramento, um driver de função personalizada deve seguir estas regras:
Para um fluxo de reprodução, especifique o tipo de cache do buffer DMA como MmWriteCombined. Depois de copiar um bloco de dados do buffer do cliente para o buffer DMA, chame a função KeMemoryBarrier para tornar os dados visíveis para o mecanismo DMA. KeMemoryBarrier libera os dados copiados para a memória de uma forma eficiente que deixa os caches de dados do processador em grande parte intactos.
Para um fluxo de captura, especifique o tipo de cache do buffer DMA como MmWriteCombined ou MmNonCached. Além disso, o driver de função deve evitar gravar no buffer DMA. Se tiver de executar o processamento in-loco de amostras de áudio, deve primeiro copiar os dados noutro local.
O bloco de dados que o driver de função copia de ou para o buffer DMA não precisa começar ou terminar num limite de buffer de combinação de escrita, e o seu tamanho não precisa ser um múltiplo do tamanho do buffer de combinação de escrita (normalmente, 32 ou 64 bytes).
Para drivers de função de codec que utilizam a versão HDAUDIO_BUS_INTERFACE_BDL do DDI, a rotina AllocateContiguousDmaBuffer realiza tanto a alocação quanto o mapeamento da memória do buffer DMA. A rotina sempre define o tipo de cache do buffer como MmWriteCombined.
Para obter mais informações sobre write-combining, consulte o Manual de Programador de Software da Arquitetura Intel IA-32 no website da Intel.