Compartilhar via


Função NdisMRegisterScatterGatherDma (ndis.h)

Cuidado

Para processadores ARM e ARM64, é altamente recomendável que os gravadores de driver NDIS usem DMA do WDF ou DMA do WDM em vez de DMA de Dispersão/Coleta de NDIS.

Para obter mais informações sobre o DMA do WDF, consulte tratando operações de DMA em drivers KMDF.

Para obter mais informações sobre o DMA do WDM, consulte os tópicos filho relacionados ao DMA de gerenciamento de entrada/saída para drivers.

Os drivers de miniporto mestre do barramento chamam a função NdisMRegisterScatterGatherDma de MiniportInitializeEx para inicializar um canal DMA de dispersão/coleta.

Sintaxe

NDIS_STATUS NdisMRegisterScatterGatherDma(
  [in]      NDIS_HANDLE              MiniportAdapterHandle,
  [in, out] PNDIS_SG_DMA_DESCRIPTION DmaDescription,
  [out]     PNDIS_HANDLE             NdisMiniportDmaHandle
);

Parâmetros

[in] MiniportAdapterHandle

O identificador de miniporto que o NDIS passou para MiniportInitializeEx.

[in, out] DmaDescription

Um ponteiro para uma estrutura NDIS_SG_DMA_DESCRIPTION. Essa estrutura descreve as propriedades de DMA de dispersão/coleta do driver de miniporto. A estrutura é definida da seguinte maneira:

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;
 

Essa estrutura inclui os seguintes membros:

A estrutura NDIS_OBJECT_HEADER para a estrutura NDIS_SG_DMA_DESCRIPTION. Defina o membro tipo da estrutura que de Cabeçalho especifica para NDIS_OBJECT_TYPE_SG_DMA_DESCRIPTION, o membro de Revisão de para NDIS_SG_DMA_DESCRIPTION_REVISION_1 e o membro tamanho do para NDIS_SIZEOF_SG_DMA_DESCRIPTION_REVISION_1.

Sinalizadores

Um conjunto de sinalizadores de bits que definem características de dispersão/coleta. Defina esse membro como OR bit a bit de todos os sinalizadores necessários.

O sinalizador NDIS_SG_DMA_64_BIT_ADDRESS especifica que a NIC pode usar o endereçamento de 64 bits para operações de DMA. Caso contrário, a NIC usará o endereçamento de 32 bits.

Defina esse membro como zero se o endereçamento de 64 bits não for necessário.

MaximumPhysicalMapping

O número máximo de bytes que a NIC pode transferir em uma única operação de DMA. O NDIS fornece esse valor para a camada de abstração de hardware (HAL) ao alocar um canal DMA, e HAL usa esse valor para determinar o número máximo de registros de mapa a serem reservados para a NIC.

ProcessSGListHandler

A função MiniportProcessSGList que o NDIS chama quando HAL terminar de criar a lista de dispersão/coleta.

SharedMemAllocateCompleteHandler

O função MiniportSharedMemoryAllocateComplete para drivers de miniporto que chamam NdisMAllocateSharedMemoryAsyncEx. Esse campo é opcional e deve ser NULL se o driver de miniporto não chamar NdisMAllocateSharedMemoryAsyncEx.

ScatterGatherListSize

O tamanho, em bytes, da memória necessária para manter uma lista de dispersão/coleta. O NDIS define esse valor antes de retornar de NdisMRegisterScatterGatherDma. Os drivers de miniport devem usar esse tamanho para pré-alocar memória para cada lista de dispersão/coleta.

[out] NdisMiniportDmaHandle

Um ponteiro para uma variável que o chamador fornece e que o NDIS preenche com um identificador. O identificador identifica uma área de contexto que o NDIS usa para gerenciar esse recurso de DMA. O driver de miniporto passa esse identificador para o NDIS em chamadas subsequentes para o NDIS que envolvem esse recurso de DMA.

Valor de retorno

NdisMRegisterScatterGatherDma retorna um dos seguintes:

Código de retorno Descrição
NDIS_STATUS_SUCCESS
NdisMRegisterScatterGatherDma recursos alocados com êxito para operações de DMA mestre de barramento.
NDIS_STATUS_RESOURCES
NdisMRegisterScatterGatherDma falhou devido a recursos insuficientes.
NDIS_STATUS_NOT_SUPPORTED
NdisMRegisterScatterGatherDma falha porque o miniporto não especificou que ele dá suporte ao NDIS 6.0 ou versões posteriores ou porque o driver de miniporto não especificou que sua NIC é um dispositivo DMA mestre de ônibus. Um driver de miniporto especifica sua versão do NDIS quando ele chama NdisMRegisterMiniportDriver. Um driver de miniporto especifica que ele dá suporte a dispositivos DMA mestres de barramento quando ele chama NdisMSetMiniportAttributes.
NDIS_STATUS_BAD_VERSION
A versão atual do NDIS não dá suporte à versão especificada no membro de Revisão da estrutura de Cabeçalho do DmaDescription.

Observações

Um driver de miniporto mestre de ônibus do NDIS chama NdisMRegisterScatterGatherDma dentro de sua função MiniportInitializeEx para inicializar recursos para operações de DMA de dispersão/coleta. O parâmetro DmaDescription que o driver de miniporto passa para NdisMRegisterScatterGatherDma contém as informações que o NDIS usa para inicializar os recursos de dispersão/coleta de DMA. Depois que NdisMRegisterScatterGatherDma retorna, o ScatterGatherListSize membro do DmaDescription contém um tamanho de buffer que deve ser suficiente para manter uma lista de dispersão/coleta. Os drivers de miniport devem usar esse tamanho para pré-alocar a memória para listas de dispersão/coleta.

O membro ProcessSGListHandler no parâmetro DmaDescription define o ponto de entrada no driver de miniport para a função MiniportProcessSGList. Quando um driver de miniporto chama NdisMAllocateNetBufferSGList, o NDIS chama HAL para fornecer a lista de dispersão/coleta para o driver de miniporto. HAL chama miniportProcessSGList depois que HAL terminar de compilar a lista de dispersão/coleta. O NDIS pode chamar MiniportProcessSGList fora do contexto da chamada para NdisMAllocateNetBufferSGList.

NdisMRegisterScatterGatherDma retorna um ponteiro para uma área de contexto opaca para o driver de miniporto. O driver de miniporto deve usar esse identificador em chamadas subsequentes para funções de DMA de dispersão/coleta de NDIS.

Chamada de motoristas de miniporto mestre do barramento NdisMAllocateSharedMemoryAsyncEx para alocar dinamicamente a memória compartilhada para operações de transferência de dados. Essa chamada é necessária quando o tráfego de rede alto faz com que o driver de miniporto seja executado com pouco espaço de memória compartilhado que o driver alocou durante a inicialização. Se NdisMAllocateSharedMemoryAsyncEx retornar NDIS_STATUS_PENDING, o NDIS chamará o função MiniportSharedMemoryAllocateComplete para concluir a operação posteriormente. Os drivers de miniporto especificam o ponto de entrada para a função MiniportSharedMemoryAllocateComplete no SharedMemAllocateCompleteHandler membro do parâmetro DmaDescription.

Os drivers de miniporto chamam o função NdisMDeregisterScatterGatherDma para desalocar os recursos de DMA que NdisMRegisterScatterGatherDma alocados.

Requisitos

Requisito Valor
de cliente com suporte mínimo Com suporte no NDIS 6.0 e posterior.
da Plataforma de Destino Universal
cabeçalho ndis.h (inclua Ndis.h)
biblioteca Ndis.lib
IRQL PASSIVE_LEVEL
regras de conformidade de DDI Init_RegisterSG(ndis), Irql_Gather_DMA_Function(ndis)

Consulte também

MiniportInitializeEx

MiniportProcessSGList

MiniportSharedMemoryAllocateComplete

de dispersão/coleta de DMA do NDIS

NDIS_OBJECT_HEADER

NdisMAllocateNetBufferSGList

NdisMAllocateSharedMemoryAsyncEx NdisMDeregisterScatterGatherDma

NdisMRegisterMiniportDriver

NdisMSetMiniportAttributes