Dela via


Skillnader mellan HD Audio DDI-versioner

HD Audio DDI finns i tre lite olika versioner som definieras på följande sätt:

  • En baslinjeversion av HD Audio DDI, som definieras av HDAUDIO_BUS_INTERFACE struktur. De flesta funktionsdrivrutiner för ljud- och modemkodkort kräver endast de funktioner som den här DDI-versionen tillhandahåller. Den här versionen är tillgänglig via HD Audio Bus-drivrutinerna som medföljer Windows XP och Windows Vista.

  • En förbättrad version av HD Audio DDI som definieras av HDAUDIO_BUS_INTERFACE_V2 struktur. Den här versionen av DDI ger den ytterligare funktion som krävs för att stödja DMA-drivna händelsemeddelanden med flexibilitet. Den finns i Windows Vista och senare versioner av Windows.

  • En modifierad version av HD Audio DDI som definieras av HDAUDIO_BUS_INTERFACE_BDL struktur. Den här versionen uppfyller kraven för ett relativt fåtal ljud- och modemdrivrutiner som måste ha ytterligare kontroll över konfigurationen av buffertbeskrivningslistor (BDLs) för DMA-åtgärder. Den här versionen av DDI är tillgänglig för Windows XP och senare versioner av Windows. Använd dock antingen HDAUDIO_BUS_INTERFACE eller den HDAUDIO_BUS_INTERFACE_V2 DDI-versionen i stället. .

I alla tre strukturerna matchar namnen och typerna av de första fem medlemmarna de fem medlemmarna i GRÄNSSNITTsstrukturen . Information om värdena för dessa medlemmar finns i Hämta ett HDAUDIO_BUS_INTERFACE DDI-objekt, Hämta ett HDAUDIO_BUS_INTERFACE_V2 DDI-objekt eller Hämta ett HDAUDIO_BUS_INTERFACE_BDL DDI-objekt.

Rutinerna i de tre versionerna av HD Audio DDI utför följande uppgifter:

  • Överför kommandon till codecs och hämta svaren till dessa kommandon.

  • Allokera och konfigurera DMA-motorer för att överföra data i återgivnings- och insamlingsströmmar.

  • Ändra strömtillståndet för en eller flera DMA-motorer till att köra, pausa, stoppa eller återställa.

  • Reservera länkbandbredd för återgivnings- och insamlingsströmmar.

  • Ge direkt åtkomst till väggklockans register och länkpositionsregister.

  • Meddela klienter om oönskade svar från codecs.

  • Registrera kernelhändelser så att de kan ta emot DMA-förloppsmeddelanden.

De HDAUDIO_BUS_INTERFACE och HDAUDIO_BUS_INTERFACE_BDL versionerna av DDI har följande skillnader:

När en klient anropar AllokeraDmaBuffer-rutinen i den första DDI-versionen:

  • Allokerar en DMA-buffert och BDL för en DMA-motor som ska användas.

  • Initierar BDL.

  • Konfigurerar DMA-motorn för att använda bufferten och BDL.

Däremot allokerar rutinen AllocateContiguousDmaBuffer i den andra DDI-versionen lagring för en DMA-buffert och BDL, men förlitar sig på anroparen för att initiera BDL. Rutinen SetupDmaEngineWithBdl konfigurerar DMA-motorn för att använda bufferten och anroparens initierade BDL.

BDL innehåller listan över fysiska minnesblock i DMA-motorns scatter/gather-kö. Genom att anropa SetupDmaEngineWithBdl för att konfigurera BDL kan klienten ange de punkter i dataströmmen där DMA-motorn genererar avbrott. Klienten gör detta genom att ange IOC-biten (interrupt-on-completion) i valda BDL-poster. Med den här funktionen kan klienten exakt styra tidpunkten för de IOK-avbrott som inträffar under bearbetningen av ljudströmmen. Ljudmodemdrivrutiner använder också den andra DDI-versionen för att få korrekt information om systemklockan.

Mer information finns i Ljudspecifikation för Intel High Definition.

Nästan alla klienter använder dock den HDAUDIO_BUS_INTERFACE versionen av DDI. Endast ett fåtal klienter som behöver exakt kontroll över tidpunkten för avbrott använder HDAUDIO_BUS_INTERFACE_BDL version.