NdisMRegisterScatterGatherDma 함수(ndis.h)

주의

ARM 및 ARM64 프로세서의 경우 NDIS 드라이버 작성기는 NDIS 분산/수집 DMA 대신 WDF DMA 또는 WDM DMA를 사용하는 것이 좋습니다.

WDF DMA에 대한 자세한 내용은 KMDF 드라이버에서 DMA 작업 처리를 참조하세요.

WDM DMA에 대한 자세한 내용은 드라이버에 대한 입력/출력 관리의 DMA 관련 자식 topics 참조하세요.

버스 master 미니포트 드라이버는 MiniportInitializeEx에서 NdisMRegisterScatterGatherDma 함수를 호출하여 분산/수집 DMA 채널을 초기화합니다.

구문

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

매개 변수

[in] MiniportAdapterHandle

NDIS가 MiniportInitializeEx에 전달한 미니포트 핸들입니다.

[in, out] DmaDescription

NDIS_SG_DMA_DESCRIPTION 구조체에 대한 포인터입니다. 이 구조체는 미니포트 드라이버의 분산/수집 DMA 속성을 설명합니다. 구조체는 다음과 같이 정의됩니다.

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;
 

이 구조체에는 다음 멤버가 포함됩니다.

NDIS_SG_DMA_DESCRIPTION 구조체의 NDIS_OBJECT_HEADER 구조체입니다. Header가 NDIS_OBJECT_TYPE_SG_DMA_DESCRIPTION 지정하는 구조체의 Type 멤버, NDIS_SG_DMA_DESCRIPTION_REVISION_1 수정 멤버 및 NDIS_SIZEOF_SG_DMA_DESCRIPTION_REVISION_1 Size 멤버를 설정합니다.

플래그

분산/수집 특성을 정의하는 비트 플래그 집합입니다. 이 멤버를 필요한 모든 플래그의 비트 OR로 설정합니다.

NDIS_SG_DMA_64_BIT_ADDRESS 플래그는 NIC가 DMA 작업에 64비트 주소 지정을 사용할 수 있음을 지정합니다. 그렇지 않으면 NIC는 32비트 주소 지정을 사용합니다.

64비트 주소 지정이 필요하지 않은 경우 이 멤버를 0으로 설정합니다.

MaximumPhysicalMapping

단일 DMA 작업에서 NIC가 전송할 수 있는 최대 바이트 수입니다. NDIS는 DMA 채널을 할당할 때 HAL(하드웨어 추상화 계층)에 이 값을 제공하고 HAL은 이 값을 사용하여 NIC에 예약할 최대 지도 레지스터 수를 결정합니다.

ProcessSGListHandler

HAL이 분산/수집 목록 빌드를 완료할 때 NDIS에서 호출하는 MiniportProcessSGList 함수입니다.

SharedMemAllocateCompleteHandler

The호출하는 미니포트 드라이버에 대한 MiniportSharedMemoryAllocateComplete 함수 NdisMAllocateSharedMemoryAsyncEx. 이 필드는 선택 사항이며 미니포트 드라이버가 NdisMAllocateSharedMemoryAsyncEx를 호출하지 않는 경우 NULL이어야 합니다.

ScatterGatherListSize

분산/수집 목록을 보유하는 데 필요한 메모리의 크기(바이트)입니다. NDIS는 NdisMRegisterScatterGatherDma에서 반환되기 전에 이 값을 설정합니다. 미니포트 드라이버는 이 크기를 사용하여 각 분산/수집 목록에 대한 메모리를 미리 할당해야 합니다.

[out] NdisMiniportDmaHandle

호출자가 제공하고 NDIS가 핸들로 채우는 변수에 대한 포인터입니다. 핸들은 NDIS가 이 DMA 리소스를 관리하는 데 사용하는 컨텍스트 영역을 식별합니다. 미니포트 드라이버는 이 DMA 리소스를 포함하는 NDIS에 대한 후속 호출에서 이 핸들을 NDIS에 전달합니다.

반환 값

NdisMRegisterScatterGatherDma 는 다음 중 하나를 반환합니다.

반환 코드 설명
NDIS_STATUS_SUCCESS
NdisMRegisterScatterGatherDma는 버스 master DMA 작업에 대한 리소스를 성공적으로 할당했습니다.
NDIS_STATUS_RESOURCES
리소스가 부족하여 NdisMRegisterScatterGatherDma가 실패했습니다.
NDIS_STATUS_NOT_SUPPORTED
미니포트가 NDIS 6.0 이상 버전을 지원하도록 지정하지 않았거나 미니포트 드라이버가 NIC가 버스 master DMA 디바이스임을 지정하지 않았기 때문에 NdisMRegisterScatterGatherDma가 실패했습니다. 미니포트 드라이버는 호출 시 NDIS 버전을 지정합니다. NdisMRegisterMiniportDriver. 미니포트 드라이버는 호출 시 버스 master DMA 디바이스를 지원하도록 지정합니다. NdisMSetMiniportAttributes.
NDIS_STATUS_BAD_VERSION
현재 버전의 NDIS는 DmaDescription헤더 구조의Revision 멤버에 지정된 버전을 지원하지 않습니다.

설명

NDIS 버스 master 미니포트 드라이버는 MiniportInitializeEx 함수 내에서 NdisMRegisterScatterGatherDma를 호출하여 분산/수집 DMA 작업에 대한 리소스를 초기화합니다. 미니포트 드라이버가 NdisMRegisterScatterGatherDma에 전달하는 DmaDescription 매개 변수에는 NDIS가 분산/수집 DMA 리소스를 초기화하는 데 사용하는 정보가 포함되어 있습니다. NdisMRegisterScatterGatherDma가 반환된 후 DmaDescriptionScatterGatherListSize 멤버에는 분산/수집 목록을 보유하기에 충분한 버퍼 크기가 포함됩니다. 미니포트 드라이버는 이 크기를 사용하여 분산/수집 목록에 대한 메모리를 미리 할당해야 합니다.

DmaDescription 매개 변수의 ProcessSGListHandler 멤버는 MiniportProcessSGList 함수에 대한 미니포트 드라이버의 진입점을 정의합니다. 미니포트 드라이버가 호출하는 경우 NdisMAllocateNetBufferSGList, NDIS는 HAL을 호출하여 미니포트 드라이버에 분산/수집 목록을 제공합니다. HAL이 분산/수집 목록 빌드를 완료한 후 HAL은 MiniportProcessSGList 를 호출합니다. NDIS는 NdisMAllocateNetBufferSGList 호출 컨텍스트 외부에서 MiniportProcessSGList를 호출할 수 있습니다.

NdisMRegisterScatterGatherDma 는 미니포트 드라이버에 불투명한 컨텍스트 영역에 대한 포인터를 반환합니다. 미니포트 드라이버는 NDIS 분산/수집 DMA 함수에 대한 후속 호출에서 이 핸들을 사용해야 합니다.

버스 master 미니포트 드라이버 호출데이터 전송 작업을 위해 공유 메모리를 동적으로 할당하는 NdisMAllocateSharedMemoryAsyncEx. 이 호출은 네트워크 트래픽이 많으면 초기화 중에 드라이버가 할당한 공유 메모리 공간에서 미니포트 드라이버가 낮게 실행되는 경우에 필요합니다. NdisMAllocateSharedMemoryAsyncEx가 NDIS_STATUS_PENDING 반환하는 경우 NDIS는 MiniportSharedMemoryAllocateComplete 함수는 나중에 작업을 완료합니다. 미니포트 드라이버는 DmaDescription 매개 변수의 SharedMemAllocateCompleteHandler 멤버에서 MiniportSharedMemoryAllocateComplete 함수의 진입점을 지정합니다.

미니포트 드라이버는 다음을 호출합니다. NdisMDeregisterScatterGatherDma 함수는 NdisMRegisterScatterGatherDma 가 할당한 DMA 리소스의 할당을 취소합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 NDIS 6.0 이상에서 지원됩니다.
대상 플랫폼 유니버설
헤더 ndis.h(Ndis.h 포함)
라이브러리 Ndis.lib
IRQL PASSIVE_LEVEL
DDI 규정 준수 규칙 Init_RegisterSG(ndis), Irql_Gather_DMA_Function(ndis)

추가 정보

MiniportInitializeEx

MiniportProcessSGList

MiniportSharedMemoryAllocateComplete

NDIS 분산/수집 DMA

NDIS_OBJECT_HEADER

NdisMAllocateNetBufferSGList

NdisMAllocateSharedMemoryAsyncEx NdisMDeregisterScatterGatherDma

NdisMRegisterMiniportDriver

NdisMSetMiniportAttributes