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) |