Condividi tramite


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:

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
NDIS_STATUS_SUCCESS
NdisMRegisterScatterGatherDma allocato correttamente le risorse per le operazioni DMA master del bus.
NDIS_STATUS_RESOURCES
NdisMRegisterScatterGatherDma non è riuscito a causa di risorse insufficienti.
NDIS_STATUS_NOT_SUPPORTED
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.
NDIS_STATUS_BAD_VERSION
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)

Vedi anche

MiniportInitializeEx

MiniportProcessSGList

MiniportSharedMemoryAllocateComplete

NDIS dispersione/raccolta DMA

NDIS_OBJECT_HEADER

NdisMAllocateNetBufferSGList

NdisMAllocateSharedMemoryAsyncEx NdisMDeregisterScatterGatherDma

NdisMRegisterMiniportDriver

NdisMSetMiniportAttributes