Macro NdisMSetupDmaTransfer (ndis.h)

La funzione NdisMSetupDmaTransfer configura il controller DMA host per un trasferimento DMA.

Sintassi

void NdisMSetupDmaTransfer(
   _S,
   _H,
   _B,
   _O,
   _L,
   _M_
);

Parametri

_S

Puntatore a una variabile fornita dal chiamante in cui questa funzione restituisce lo stato della richiesta, che può essere una delle seguenti:

NDIS_STATUS_SUCCESS

Il controller DMA è stato configurato per trasferire i dati specificati, che sono stati scaricati da o verso il dispositivo per mantenere l'integrità dei dati.

NDIS_STATUS_RESOURCES

Un tentativo di configurazione del controller DMA per il trasferimento non è riuscito perché il canale designato da MiniportDmaHandle è attualmente in uso per il trasferimento dei dati o perché la lunghezza specificata non è valida.

_H

Handle DMA restituito dalla funzione NdisMRegisterDmaChannel durante l'inizializzazione.

_B

Puntatore al descrittore del buffer che esegue il mapping dell'intervallo di memoria host da cui o in cui verranno trasferiti i dati.

_O

Offset di byte all'interno del buffer mappato in corrispondenza del quale deve iniziare il trasferimento. Zero indica che il trasferimento deve iniziare in corrispondenza del byte iniziale dell'intervallo specificato in Buffer .

_L

Numero di byte di dati da trasferire. L'intervallo specificato da Offset e Length deve essere un sottoinsieme appropriato di quello specificato in Buffer .

_M_

Valore booleano true per un trasferimento in uscita dal sistema tramite la scheda di interfaccia di rete. In caso contrario, è FALSE.

Valore restituito

nessuno

Osservazioni

I driver delle schede di interfaccia di rete subordinate-DMA chiamano NdisMSetupDmaTransfer in risposta alle richieste di invio in ingresso, per cui il driver imposta WriteToDevice su TRUE. Impostano WriteToDevice su FALSE quando trasferiscono i dati ricevuti dalla scheda di interfaccia di rete per ospitare la memoria.

Il chiamante di NdisMSetupDmaTransfer fornisce un descrittore del buffer che esegue il mapping dell'intervallo di memoria host che è la destinazione del trasferimento o che contiene dati per un'operazione di download dall'host alla scheda di interfaccia di rete. Per specificare una dimensione di trasferimento in base ai vincoli DMA della scheda di interfaccia di rete, il chiamante può impostare un intervallo secondario da trasferire con i parametri Offset e Length , se necessario.

Il chiamante deve fornire un descrittore di buffer che specifica l'intervallo host in cui verranno trasferiti i dati ricevuti dalla scheda di interfaccia di rete quando WriteToDevice è FALSE. In caso contrario, il descrittore di buffer in Buffer è stato concatenato a un input del descrittore di pacchetti al driver miniport Funzione MiniportSendNetBufferLists .

Per migliorare le prestazioni per le richieste di trasmissione di piccole dimensioni, ad esempio una richiesta di invio di lunghezza inferiore a 256 byte, un driver miniport può copiare i dati del pacchetto in un buffer di staging interno e passare un mapping del descrittore del buffer allocato dal driver a NdisMSetupDmaTransfer.

Al ritorno da NdisMSetupDmaTransfer, il controller DMA host è stato programmato per il trasferimento. Il driver miniport quindi programma la scheda di interfaccia di rete per l'operazione di trasferimento.

Al termine del trasferimento, il driver miniport deve chiamare il Funzione NdisMCompleteDmaTransfer .

Requisiti

Requisito Valore
Client minimo supportato Supportato per i driver NDIS 6.0 e NDIS 5.1 (vedere NdisMSetupDmaTransfer (NDIS 5.1)) in Windows Vista. Supportato per i driver NDIS 5.1 (vedere NdisMSetupDmaTransfer (NDIS 5.1)) in Windows XP.
Piattaforma di destinazione Universale
Intestazione ndis.h (include Ndis.h)
IRQL <= DISPATCH_LEVEL
Regole di conformità DDI Irql_Miniport_Driver_Function(ndis)

Vedi anche

MiniportSendNetBufferLists

NdisMCompleteDmaTransfer

NdisMRegisterDmaChannel