Funzione NdisMRegisterScatterGatherDma (ndis.h)
Attenzione
Per i processori ARM e ARM64, è consigliabile che i writer di driver NDIS usino WDF DMA o WDM DMA anziché NDIS Scatter/Gather DMA.
Per altre informazioni su WDF DMA, vedere Gestione delle operazioni DMA nei driver KMDF.
Per altre informazioni su WDM DMA, vedere gli argomenti figlio correlati a DMA di Gestione dell'input/output per i driver.
I driver miniport master del bus chiamano la funzione NdisMRegisterScatterGatherDma da MiniportInitializeEx per inizializzare un canale DMA a dispersione/raccolta.
Sintassi
NDIS_STATUS NdisMRegisterScatterGatherDma(
[in] NDIS_HANDLE MiniportAdapterHandle,
[in, out] PNDIS_SG_DMA_DESCRIPTION DmaDescription,
[out] PNDIS_HANDLE NdisMiniportDmaHandle
);
Parametri
[in] MiniportAdapterHandle
Handle miniport passato a MiniportInitializeEx.
[in, out] DmaDescription
Puntatore a una struttura NDIS_SG_DMA_DESCRIPTION. Questa struttura descrive le proprietà DMA a dispersione/raccolta del driver miniport. La struttura è definita come segue:
typedef struct _NDIS_SG_DMA_DESCRIPTION {
NDIS_OBJECT_HEADER Header;
ULONG Flags;
ULONG MaximumPhysicalMapping;
MINIPORT_PROCESS_SG_LIST_HANDLER ProcessSGListHandler;
MINIPORT_ALLOCATE_SHARED_MEM_COMPLETE_HANDLER SharedMemAllocateCompleteHandler;
ULONG ScatterGatherListSize;
} NDIS_SG_DMA_DESCRIPTION, *PNDIS_SG_DMA_DESCRIPTION;
Questa struttura include i membri seguenti:
Intestazione
Struttura NDIS_OBJECT_HEADER per la struttura NDIS_SG_DMA_DESCRIPTION. Impostare il membro Type della struttura che Header specifica su NDIS_OBJECT_TYPE_SG_DMA_DESCRIPTION, il membro Revision su NDIS_SG_DMA_DESCRIPTION_REVISION_1 e il membro Size su NDIS_SIZEOF_SG_DMA_DESCRIPTION_REVISION_1.
Flags
Set di flag di bit che definiscono caratteristiche di dispersione/raccolta. Impostare questo membro sull'OR bit per bit di tutti i flag necessari.
Il flag NDIS_SG_DMA_64_BIT_ADDRESS specifica che la scheda di interfaccia di rete può usare l'indirizzamento a 64 bit per le operazioni DMA. In caso contrario, la scheda di interfaccia di rete usa l'indirizzamento a 32 bit.
Impostare questo membro su zero se non è necessario l'indirizzamento a 64 bit.
MaximumPhysicalMapping
Numero massimo di byte che la scheda di interfaccia di rete può trasferire in una singola operazione DMA. NDIS fornisce questo valore al livello di astrazione hardware (HAL) durante l'allocazione di un canale DMA e HAL usa questo valore per determinare il numero massimo di registri mappa da riservare per la scheda di interfaccia di rete.
ProcessSGListHandler
La funzione MiniportProcessSGList chiamata da NDIS al termine della compilazione dell'elenco di dispersione/raccolta.
SharedMemAllocateCompleteHandler
The Funzione MiniportSharedMemoryAllocateComplete per i driver miniport che chiamano NdisMAllocateSharedMemoryAsyncEx. Questo campo è facoltativo e deve essere NULL se il driver miniport non chiama NdisMAllocateSharedMemoryAsyncEx.
ScatterGatherListSize
Dimensioni, in byte, della memoria necessaria per contenere un elenco di dispersione/raccolta. NDIS imposta questo valore prima che venga restituito da NdisMRegisterScatterGatherDma. I driver miniport devono usare questa dimensione per preallocare la memoria per ogni elenco di dispersione/raccolta.
[out] NdisMiniportDmaHandle
Puntatore a una variabile fornita dal chiamante e che NDIS riempie con un handle. L'handle identifica un'area di contesto NDIS usata per gestire questa risorsa DMA. Il driver miniport passa questo handle a NDIS nelle chiamate successive a NDIS che coinvolgono questa risorsa DMA.
Valore restituito
NdisMRegisterScatterGatherDma restituisce uno dei seguenti:
Codice restituito | Descrizione |
---|---|
|
NdisMRegisterScatterGatherDma allocato correttamente le risorse per le operazioni DMA master del bus. |
|
NdisMRegisterScatterGatherDma non è riuscito a causa di risorse insufficienti. |
|
NdisMRegisterScatterGatherDma non è riuscito perché il miniport non ha specificato che supporta NDIS 6.0 o versioni successive oppure perché il driver miniport non ha specificato che la scheda di interfaccia di rete è un dispositivo DMA master del bus. Un driver miniport specifica la versione NDIS quando chiama NdisMRegisterMiniportDriver. Un driver miniport specifica che supporta i dispositivi DMA bus-master quando chiama NdisMSetMiniportAttributes. |
|
La versione corrente di NDIS non supporta la versione specificata nel membro Revisione della struttura Intestazione di DmaDescription . |
Commenti
Un driver miniport del bus NDIS chiama NdisMRegisterScatterGatherDma all'interno della funzione MiniportInitializeEx per inizializzare le risorse per le operazioni DMA a dispersione/raccolta. Il parametro DmaDescription che il driver miniport passa a NdisMRegisterScatterGatherDma contiene le informazioni usate da NDIS per inizializzare le risorse DMA di dispersione/raccolta. Dopo che NdisMRegisterScatterGatherDma restituisce, il membro ScatterGatherListSize di DmaDescription contiene una dimensione del buffer sufficiente per contenere un elenco di dispersione/raccolta. I driver miniport devono usare questa dimensione per preallocare la memoria per elenchi di dispersione/raccolta.
Il membro ProcessSGListHandler nel parametro DmaDescription definisce il punto di ingresso nel driver miniport per la funzione MiniportProcessSGList . Quando un driver miniport chiama NdisMAllocateNetBufferSGList, NDIS chiama HAL per fornire l'elenco di dispersione/raccolta al driver miniport. HAL chiama MiniportProcessSGList al termine della compilazione dell'elenco di dispersione/raccolta. NDIS può chiamare MiniportProcessSGList al di fuori del contesto della chiamata a NdisMAllocateNetBufferSGList.
NdisMRegisterScatterGatherDma restituisce un puntatore a un'area di contesto opaca al driver miniport. Il driver miniport deve usare questo handle nelle chiamate successive alle funzioni DMA a dispersione/raccolta NDIS.
Chiama i driver miniport master del bus NdisMAllocateSharedMemoryAsyncEx per allocare dinamicamente memoria condivisa per le operazioni di trasferimento dei dati. Questa chiamata è necessaria quando il traffico di rete elevato causa l'esecuzione del driver miniport in basso nello spazio di memoria condiviso allocato dal driver durante l'inizializzazione. Se NdisMAllocateSharedMemoryAsyncEx restituisce NDIS_STATUS_PENDING, NDIS chiama Funzione MiniportSharedMemoryAllocateComplete per completare l'operazione in un secondo momento. I driver Miniport specificano il punto di ingresso per la funzione MiniportSharedMemoryAllocateComplete nel membro SharedMemAllocateCompleteHandler del parametro DmaDescription .
I driver miniport chiamano Funzione NdisMDeregisterScatterGatherDma per deallocare le risorse DMA assegnate da NdisMRegisterScatterGatherDma .
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Supportato in NDIS 6.0 e versioni successive. |
Piattaforma di destinazione | Universale |
Intestazione | ndis.h (includere Ndis.h) |
Libreria | Ndis.lib |
IRQL | PASSIVE_LEVEL |
Regole di conformità DDI | Init_RegisterSG(ndis), Irql_Gather_DMA_Function(ndis) |