Introduktion till adapterobjekt

Alla drivrutiner som använder direkt I/O och DMA måste skapa ett adapterobjekt. Adapterobjektet representerar antingen en DMA-styrenhetskanal eller port eller en bus-master-enhet.

Två typer av drivrutiner på lägsta nivå måste använda adapterobjekt:

  • Drivrutiner för enheter som använder system-DMA-styrenheten. Sådana enheter kallas underordnade enheter och sägs använda "system- (eller underordnad) DMA".

  • Drivrutiner för enheter som är bus-master-adaptrar. Sådana enheter förhandlar med systemet för användning av I/O-bussen och använder därmed bus-master DMA.

Drivrutiner tillhandahåller lagring, vanligtvis i ett enhetstillägg, för en pekare till adapterobjektet.

För att utföra DMA-överföringar har drivrutiner för enheter som använder någon av dessa DMA-metoder vanligtvis en AdapterControl-rutin och anropar systemspecifika supportrutiner som manipulerar adapterobjekt. (Drivrutiner som inte kräver AdapterControl-rutiner inkluderar de som använder scatter/gather DMA och de som använder common-buffer, bus-master DMA.)

Som en del av enhetens startåtgärder anropar drivrutiner som hanterar DMA-åtgärder I/O-chefen, som i sin tur anropar den plattformsspecifika HAL för att skapa en uppsättning adapterobjekt. På alla Windows-plattformar innehåller uppsättningen adapterobjekt ett adapterobjekt för:

  • Varje system-DMA-styrkanal eller port som en underordnad enhet är ansluten till.

  • Varje DMA-enhet för busshanterare på datorn.

I/O-chefen och HAL arbetar tillsammans för att allokera lämpligt adapterobjekt baserat på enhetens DMA-funktioner och systemkonfiguration.

(För SCSI-enheter som kan busshanterad DMA konfigurerar SCSI-portdrivrutinen adapterobjekt för HBA-specifika SCSI-miniportdrivrutiner. Miniportdrivrutinens HwScsiFindAdapter-rutin förser portdrivrutinen med adapterspecifika data.)

Se det här avsnittet samt Använda Bus-Master DMA för mer information om när och hur drivrutiner använder adapterobjekt och AdapterControl-rutiner .

Aktivera DMA-ommappning för enhetsdrivrutiner