Condividi tramite


Funzione VideoPortStartDma (video.h)

La funzione VideoPortStartDma prepara il sistema per un'operazione DMA. Non appena la risorsa appropriata è disponibile, VideoPortStartDma crea un elenco di dispersione/raccolta, inizializza le risorse di sistema e chiama la routine HwVidExecuteDma fornita dal driver video miniport per eseguire l'operazione DMA.

Sintassi

VIDEOPORT_DEPRECATED VIDEOPORT_API VP_STATUS VideoPortStartDma(
  [in]      IN PVOID           HwDeviceExtension,
  [in]      IN PVP_DMA_ADAPTER VpDmaAdapter,
  [in]      IN PVOID           Mdl,
  [in]      IN ULONG           Offset,
  [in, out] IN OUT PULONG      pLength,
  [in]      IN PEXECUTE_DMA    ExecuteDmaRoutine,
  [in]      IN PVOID           Context,
  [in]      IN BOOLEAN         WriteToDevice
);

Parametri

[in] HwDeviceExtension

Puntatore all'estensione del dispositivo del driver miniport.

[in] VpDmaAdapter

Puntatore alla struttura VP_DMA_ADAPTER che rappresenta l'adattatore bus-master. Questa struttura viene restituita da una chiamata a VideoPortGetDmaAdapter.

[in] Mdl

Puntatore al file MDL che descrive il buffer. Questo puntatore viene restituito da una chiamata alla funzione VideoPortLockBuffer del driver della porta video.

[in] Offset

Specifica l'offset di byte nel buffer in corrispondenza del quale inizia l'operazione DMA. Il parametro Mdl descrive questo buffer.

[in, out] pLength

Puntatore a una variabile che specifica la dimensione di trasferimento richiesta, in byte, e che riceverà le dimensioni effettive da trasferire. La variabile verrà aggiornata quando si verifica uno degli eventi seguenti: VideoPortStartDma restituisce o viene chiamato HwVidExecuteDma . È quindi possibile leggere questa variabile dall'interno di HwVidExecuteDma anche prima che VideoPortStartDma restituisca.

[in] ExecuteDmaRoutine

Puntatore a una routine di callback HwVidExecuteDma fornita dal driver miniport. VideoPortStartDma chiama questa routine per programmare i registri hardware e avviare l'operazione DMA effettiva.

[in] Context

Puntatore al contesto determinato dal driver da passare alla routine di callback HwVidExecuteDma del driver miniport. Poiché la routine di callback HwVidExecuteDma viene eseguita in DISPATCH_LEVEL, i dati a cui punta Context devono trovarsi in memoria non in pagine.

[in] WriteToDevice

Specifica la direzione del trasferimento DMA. Un valore TRUE indica un trasferimento dal buffer al dispositivo e un valore FALSE indica un trasferimento dal dispositivo al buffer.

Valore restituito

VideoPortStartDma restituisce uno dei codici di stato seguenti:

Codice restituito Descrizione
NO_ERROR L'operazione è stata eseguita correttamente.
ERROR_NOT_ENOUGH_MEMORY Non sono disponibili risorse di sistema sufficienti per questa operazione.

Commenti

Per preparare un'operazione di trasferimento DMA, VideoPortStartDma:

  • Scarica l'area di memoria nelle cache del processore host.
  • Compila un elenco a dispersione/raccolta.
  • Chiama il callback HwVidExecuteDma del driver miniport video.
È possibile che non tutti i dati richiesti siano stati trasferiti, poiché la quantità effettiva di memoria trasferita è limitata dal numero di registri mappa disponibili per il driver. I chiamanti di questa funzione devono esaminare le dimensioni effettive del trasferimento restituite in pLength per determinare se i dati aggiuntivi rimangono da trasferire. In tal caso, il driver miniport deve chiamare VideoPortStartDma (e successivamente , VideoPortCompleteDma) quante volte necessario per soddisfare l'intera richiesta di trasferimento.

Requisiti

Requisito Valore
Client minimo supportato Disponibile in Windows XP e versioni successive dei sistemi operativi Windows.
Piattaforma di destinazione Desktop
Intestazione video.h (include Video.h)
Libreria Videoprt.lib
DLL Videoprt.sys
IRQL <=DISPATCH_LEVEL

Vedi anche

HwVidExecuteDma

VP_DMA_ADAPTER

VideoPortCompleteDma

VideoPortGetDmaAdapter