Differenze tra le versioni DDI audio HD
Hd Audio DDI è disponibile in tre versioni leggermente diverse definite come segue:
Versione di base di HD Audio DDI, definita dalla struttura HDAUDIO_BUS_INTERFACE . La maggior parte dei driver di funzione per codec audio e modem richiede solo le funzionalità offerte da questa versione DDI. Questa versione è disponibile tramite i driver del bus audio HD forniti con Windows XP e Windows Vista.
Versione avanzata dell'HD Audio DDI definita dalla struttura HDAUDIO_BUS_INTERFACE_V2 . Questa versione di DDI offre la funzionalità aggiuntiva necessaria per supportare la notifica degli eventi basata su DMA con flessibilità. È disponibile in Windows Vista e versioni successive di Windows.
Versione modificata di HD Audio DDI definita dalla struttura HDAUDIO_BUS_INTERFACE_BDL . Questa versione supporta i requisiti di un numero relativamente ridotto di driver audio e modem che devono avere un controllo aggiuntivo sulla configurazione degli elenchi di descrittori di buffer (BDLs) per le operazioni DMA. Questa versione di DDI è disponibile per Windows XP e versioni successive di Windows. Tuttavia, usare il HDAUDIO_BUS_INTERFACE o la versione HDAUDIO_BUS_INTERFACE_V2 DDI. .
In tutte e tre le strutture, i nomi e i tipi dei primi cinque membri corrispondono a quelli dei cinque membri della struttura INTERFACE . Per informazioni sui valori di questi membri, vedere Ottenere un oggetto DDI HDAUDIO_BUS_INTERFACE, Ottenere un oggetto DDI HDAUDIO_BUS_INTERFACE_V2 o ottenere un oggetto DDI HDAUDIO_BUS_INTERFACE_BDL.
Le routine nelle tre versioni di HD Audio DDI eseguono le attività seguenti:
Trasferire i comandi ai codec e recuperare le risposte a tali comandi.
Allocare e configurare i motori DMA per trasferire i dati nei flussi di rendering e acquisizione.
Modificare lo stato del flusso di uno o più motori DMA in esecuzione, sospesi, arrestati o reimpostati.
Riservare la larghezza di banda del collegamento per i flussi di rendering e acquisizione.
Fornire l'accesso diretto ai registri di registrazione e alla posizione del collegamento del muro.
Notificare ai client le risposte non richieste dai codec.
Registrare gli eventi del kernel in modo che possano ricevere notifiche di stato DMA.
Le versioni HDAUDIO_BUS_INTERFACE e HDAUDIO_BUS_INTERFACE_BDL dell'DDI presentano le differenze seguenti:
La struttura HDAUDIO_BUS_INTERFACE definisce due routine, AllocateDmaBuffer e FreeDmaBuffer, che non sono presenti in HDAUDIO_BUS_INTERFACE_BDL.
La struttura HDAUDIO_BUS_INTERFACE_BDL definisce tre routine, SetupDmaEngineWithBdl, AllocateContiguousDmaBuffer e FreeContiguousDmaBuffer, che non sono presenti in HDAUDIO_BUS_INTERFACE.
Quando un client chiama la routine AllocateDmaBuffer nella prima versione DDI, il driver del bus audio HD:
Alloca un buffer DMA e un BDL per un motore DMA da usare.
Inizializza il file BDL.
Configura il motore DMA per l'uso del buffer e del BDL.
Al contrario, la routine AllocateContiguousDmaBuffer nella seconda versione DDI alloca l'archiviazione per un buffer DMA e BDL, ma si basa sul chiamante per inizializzare il file BDL. La routine SetupDmaEngineWithBdl configura il motore DMA per l'uso del buffer e del BDL inizializzato dal chiamante.
Il file BDL contiene l'elenco dei blocchi di memoria fisica nella coda di dispersione/raccolta del motore DMA. Chiamando SetupDmaEngineWithBdl per configurare il file BDL, il client può specificare i punti nel flusso di dati in cui il motore DMA genera interrupt. Il client esegue questa operazione impostando il bit di interrupt-on-completion (IOC) nelle voci BDL selezionate. Con questa funzionalità, il client può controllare con precisione la tempistica degli interrupt IOC che si verificano durante l'elaborazione del flusso audio. I driver modem audio usano anche la seconda versione DDI per ottenere informazioni accurate sull'orologio di sistema.
Per altre informazioni, vedere La specifica audio intel ad alta definizione.
Tuttavia, quasi tutti i client useranno la versione HDAUDIO_BUS_INTERFACE dell'DDI. Solo alcuni client che richiedono un controllo preciso sull'intervallo di interruzioni useranno la versione HDAUDIO_BUS_INTERFACE_BDL.