다음을 통해 공유


DMA_OPERATIONS 구조체(wdm.h)

DMA_OPERATIONS 구조체는 DMA 컨트롤러의 작업을 제어하는 함수에 대한 포인터 테이블을 제공합니다.

구문

typedef struct _DMA_OPERATIONS {
  ULONG                                   Size;
  PPUT_DMA_ADAPTER                        PutDmaAdapter;
  PALLOCATE_COMMON_BUFFER                 AllocateCommonBuffer;
  PFREE_COMMON_BUFFER                     FreeCommonBuffer;
  PALLOCATE_ADAPTER_CHANNEL               AllocateAdapterChannel;
  PFLUSH_ADAPTER_BUFFERS                  FlushAdapterBuffers;
  PFREE_ADAPTER_CHANNEL                   FreeAdapterChannel;
  PFREE_MAP_REGISTERS                     FreeMapRegisters;
  PMAP_TRANSFER                           MapTransfer;
  PGET_DMA_ALIGNMENT                      GetDmaAlignment;
  PREAD_DMA_COUNTER                       ReadDmaCounter;
  PGET_SCATTER_GATHER_LIST                GetScatterGatherList;
  PPUT_SCATTER_GATHER_LIST                PutScatterGatherList;
  PCALCULATE_SCATTER_GATHER_LIST_SIZE     CalculateScatterGatherList;
  PBUILD_SCATTER_GATHER_LIST              BuildScatterGatherList;
  PBUILD_MDL_FROM_SCATTER_GATHER_LIST     BuildMdlFromScatterGatherList;
  PGET_DMA_ADAPTER_INFO                   GetDmaAdapterInfo;
  PGET_DMA_TRANSFER_INFO                  GetDmaTransferInfo;
  PINITIALIZE_DMA_TRANSFER_CONTEXT        InitializeDmaTransferContext;
  PALLOCATE_COMMON_BUFFER_EX              AllocateCommonBufferEx;
  PALLOCATE_ADAPTER_CHANNEL_EX            AllocateAdapterChannelEx;
  PCONFIGURE_ADAPTER_CHANNEL              ConfigureAdapterChannel;
  PCANCEL_ADAPTER_CHANNEL                 CancelAdapterChannel;
  PMAP_TRANSFER_EX                        MapTransferEx;
  PGET_SCATTER_GATHER_LIST_EX             GetScatterGatherListEx;
  PBUILD_SCATTER_GATHER_LIST_EX           BuildScatterGatherListEx;
  PFLUSH_ADAPTER_BUFFERS_EX               FlushAdapterBuffersEx;
  PFREE_ADAPTER_OBJECT                    FreeAdapterObject;
  PCANCEL_MAPPED_TRANSFER                 CancelMappedTransfer;
  PALLOCATE_DOMAIN_COMMON_BUFFER          AllocateDomainCommonBuffer;
  PFLUSH_DMA_BUFFER                       FlushDmaBuffer;
  PJOIN_DMA_DOMAIN                        JoinDmaDomain;
  PLEAVE_DMA_DOMAIN                       LeaveDmaDomain;
  PGET_DMA_DOMAIN                         GetDmaDomain;
  PALLOCATE_COMMON_BUFFER_WITH_BOUNDS     AllocateCommonBufferWithBounds;
  PALLOCATE_COMMON_BUFFER_VECTOR          AllocateCommonBufferVector;
  PGET_COMMON_BUFFER_FROM_VECTOR_BY_INDEX GetCommonBufferFromVectorByIndex;
  PFREE_COMMON_BUFFER_FROM_VECTOR         FreeCommonBufferFromVector;
  PFREE_COMMON_BUFFER_VECTOR              FreeCommonBufferVector;
  PCREATE_COMMON_BUFFER_FROM_MDL          CreateCommonBufferFromMdl;
} *PDMA_OPERATIONS, DMA_OPERATIONS;

멤버

Size

DMA_OPERATIONS 구조체의 크기(바이트)입니다.

PutDmaAdapter

DMA_ADAPTER 구조를 해제하는 시스템 정의 루틴에 대한 포인터입니다. 자세한 내용은 PutDmaAdapter를 참조하세요.

AllocateCommonBuffer

물리적으로 연속된 DMA 버퍼를 할당하기 위한 시스템 정의 루틴에 대한 포인터입니다. 자세한 내용은 AllocateCommonBuffer를 참조하세요.

FreeCommonBuffer

AllocateCommonBuffer에서 이전에 할당한 물리적으로 연속된 DMA 버퍼를 해제하는 시스템 정의 루틴에 대한 포인터입니다. 자세한 내용은 FreeCommonBuffer를 참조하세요.

AllocateAdapterChannel

DMA 작업에 대한 채널을 할당하는 시스템 정의 루틴에 대한 포인터입니다. 자세한 내용은 AllocateAdapterChannel을 참조하세요.

FlushAdapterBuffers

DMA 작업 후 시스템 또는 버스 master 어댑터의 내부 캐시에서 데이터를 플러시하는 시스템 정의 루틴에 대한 포인터입니다. 자세한 내용은 FlushAdapterBuffers를 참조하세요.

FreeAdapterChannel

AllocateAdapterChannel에서 이전에 DMA 작업에 할당된 채널을 해제하는 시스템 정의 루틴에 대한 포인터입니다. 자세한 내용은 FreeAdapterChannel을 참조하세요.

FreeMapRegisters

DMA 작업에 할당된 무료 맵 레지스터에 대한 시스템 정의 루틴에 대한 포인터입니다. 자세한 내용은 FreeMapRegisters를 참조하세요.

MapTransfer

DMA 작업을 시작하기 위한 시스템 정의 루틴에 대한 포인터입니다. 자세한 내용은 MapTransfer를 참조하세요.

GetDmaAlignment

컨트롤러의 DMA 맞춤 요구 사항을 가져오는 시스템 정의 루틴에 대한 포인터입니다. 자세한 내용은 GetDmaAlignment를 참조하세요.

ReadDmaCounter

DMA 작업에 대한 현재 전송 수를 가져오는 시스템 정의 루틴에 대한 포인터입니다. 자세한 내용은 ReadDmaCounter를 참조하세요.

GetScatterGatherList

맵 레지스터를 할당하고 DMA에 대한 분산/수집 목록을 만드는 시스템 정의 루틴에 대한 포인터입니다. 자세한 내용은 GetScatterGatherList를 참조하세요.

PutScatterGatherList

DMA 작업이 완료된 후 맵 레지스터 및 분산/수집 목록을 해제하는 시스템 정의 루틴에 대한 포인터입니다. 자세한 내용은 PutScatterGatherList를 참조하세요.

CalculateScatterGatherList

I/O 데이터 버퍼를 설명하는 분산/수집 목록을 보유하는 데 필요한 버퍼 크기를 결정하는 시스템 정의 루틴에 대한 포인터입니다. 이 멤버는 DMA_OPERATIONS 버전 2 이상에서만 사용할 수 있습니다. 자세한 내용은 CalculateScatterGatherList를 참조하세요.

BuildScatterGatherList

맵 레지스터를 할당하고 드라이버 제공 버퍼에서 DMA에 대한 분산/수집 목록을 만드는 시스템 정의 루틴에 대한 포인터입니다. 이 멤버는 DMA_OPERATIONS 버전 2 이상에서만 사용할 수 있습니다. 자세한 내용은 BuildScatterGatherList를 참조하세요.

BuildMdlFromScatterGatherList

분산/수집 목록에 해당하는 MDL을 빌드하는 시스템 정의 루틴에 대한 포인터입니다. 이 멤버는 DMA_OPERATIONS 버전 2 이상에서만 사용할 수 있습니다. 자세한 내용은 BuildMdlFromScatterGatherList를 참조하세요.

GetDmaAdapterInfo

버스 master DMA 디바이스 또는 시스템 DMA 컨트롤러의 기능을 설명하는 시스템 정의 루틴에 대한 포인터입니다. GetDmaAdapterInfoDMA_OPERATIONS 버전 3에서만 사용할 수 있습니다. 자세한 내용은 GetDmaAdapterInfo를 참조하세요.

GetDmaTransferInfo

분산/수집 목록에 대한 할당 요구 사항을 설명하는 시스템 정의 루틴에 대한 포인터입니다. 이 루틴은 CalculateScatterGatherList를 대체합니다. GetDmaTransferInfoDMA_OPERATIONS 버전 3에서만 사용할 수 있습니다. 자세한 내용은 GetDmaTransferInfo를 참조하세요.

InitializeDmaTransferContext

불투명 DMA 전송 컨텍스트를 초기화하는 시스템 정의 루틴에 대한 포인터입니다. 운영 체제는 이 컨텍스트에서 DMA 전송의 내부 상태 저장합니다. InitializeDmaTransferContextDMA_OPERATIONS 버전 3에서만 사용할 수 있습니다. 자세한 내용은 InitializeDmaTransferContext를 참조하세요.

AllocateCommonBufferEx

공통 버퍼에 대한 메모리를 할당하고 프로세서와 DMA 디바이스에서 모두 액세스할 수 있도록 이 메모리를 매핑하는 시스템 정의 루틴에 대한 포인터입니다. AllocateCommonBufferExDMA_OPERATIONS 버전 3에서만 사용할 수 있습니다. 자세한 내용은 AllocateCommonBufferEx를 참조하세요.

AllocateAdapterChannelEx

DMA 전송에 필요한 리소스를 할당한 다음 드라이버 제공 AdapterControl 루틴을 호출하여 DMA 전송을 시작하는 시스템 정의 루틴에 대한 포인터입니다. AllocateAdapterChannelExDMA_OPERATIONS 버전 3에서만 사용할 수 있습니다. 자세한 내용은 AllocateAdapterChannelEx를 참조하세요.

ConfigureAdapterChannel

시스템 정의 루틴에 대한 포인터를 사용하면 DMA 컨트롤러에서 구현되는 사용자 지정 함수를 사용할 수 있습니다. ConfigureAdapterChannelDMA_OPERATIONS 버전 3에서만 사용할 수 있습니다. 자세한 내용은 ConfigureAdapterChannel을 참조하세요.

CancelAdapterChannel

DMA 채널을 할당하기 위해 보류 중인 요청을 취소하려고 하는 시스템 정의 루틴에 대한 포인터입니다. CancelAdapterChannelDMA_OPERATIONS 버전 3에서만 사용할 수 있습니다. 자세한 내용은 CancelAdapterChannel을 참조하세요.

MapTransferEx

분산/수집 목록의 실제 주소를 DMA 전송을 수행하는 데 필요한 논리적 주소에 매핑하도록 맵 레지스터를 설정하는 시스템 정의 루틴에 대한 포인터입니다. MapTransferExDMA_OPERATIONS 버전 3에서만 사용할 수 있습니다. 자세한 내용은 MapTransferEx를 참조하세요.

GetScatterGatherListEx

DMA 전송에 필요한 리소스를 할당하고, 분산/수집 목록을 빌드한 다음, 드라이버 제공 AdapterListControl 루틴을 호출하여 DMA 전송을 시작하는 시스템 정의 루틴에 대한 포인터입니다. GetScatterGatherListExDMA_OPERATIONS 버전 3에서만 사용할 수 있습니다. 자세한 내용은 GetScatterGatherListEx를 참조하세요. 이 루틴은 AllocateAdapterChannelExMapTransferEx의 래퍼입니다.

BuildScatterGatherListEx

호출자가 할당한 버퍼에서 분산/수집 목록을 빌드한 다음 드라이버 제공 AdapterListControl 루틴을 호출하여 DMA 전송을 시작하는 시스템 정의 루틴에 대한 포인터입니다. BuildScatterGatherListExDMA_OPERATIONS 버전 3에서만 사용할 수 있습니다. 자세한 내용은 BuildScatterGatherListEx를 참조하세요.

FlushAdapterBuffersEx

시스템 DMA 컨트롤러의 내부 캐시 또는 DMA 전송이 끝날 때 버스 master 어댑터의 내부 캐시에 남아 있는 모든 데이터를 플러시하는 시스템 정의 루틴에 대한 포인터입니다. 시스템 DMA 컨트롤러를 사용하는 디바이스의 경우 전송이 완료되지 않은 경우 이 루틴은 컨트롤러에서 현재 DMA 전송을 취소합니다. FlushAdapterBuffersExDMA_OPERATIONS 버전 3에서만 사용할 수 있습니다. 자세한 내용은 FlushAdapterBuffersEx를 참조하세요.

FreeAdapterObject

드라이버가 모든 DMA 작업을 완료한 후 지정된 어댑터 개체를 해제하는 시스템 정의 루틴에 대한 포인터입니다. FreeAdapterObjectDMA_OPERATIONS 버전 3에서만 사용할 수 있습니다. 자세한 내용은 FreeAdapterObject를 참조하세요.

CancelMappedTransfer

매핑된 전송을 취소하는 시스템 정의 루틴에 대한 포인터입니다. CancelMappedTransferDMA_OPERATIONS 버전 3에서만 사용할 수 있습니다. 자세한 내용은 CancelMappedTransfer를 참조하세요.

AllocateDomainCommonBuffer

도메인 공통 버퍼를 할당하는 PALLOCATE_DOMAIN_COMMON_BUFFER 콜백 루틴에 대한 포인터입니다. 이 옵션은 Windows 10 이상 버전에서 사용할 수 있습니다.

FlushDmaBuffer

캐시에 남아 있는 데이터를 플러시하는 PFLUSH_DMA_BUFFER 콜백 함수에 대한 포인터입니다. 이 옵션은 Windows 10 이상 버전에서 사용할 수 있습니다.

JoinDmaDomain

지정된 DMA 도메인을 조인하는 PJOIN_DMA_DOMAIN 콜백 함수에 대한 포인터입니다. 이 옵션은 Windows 10 이상 버전에서 사용할 수 있습니다.

LeaveDmaDomain

지정된 DMA 도메인을 벗어나는 PLEAVE_DMA_DOMAIN 콜백 함수에 대한 포인터입니다. 이 옵션은 Windows 10 이상 버전에서 사용할 수 있습니다.

GetDmaDomain

DMA 도메인에 대한 핸들을 가져오는 PGET_DMA_DOMAIN 콜백 함수에 대한 포인터입니다. 이 옵션은 Windows 10 이상 버전에서 사용할 수 있습니다.

AllocateCommonBufferWithBounds

공통 버퍼에 대한 메모리를 할당하고 master 디바이스 및 CPU에서 액세스할 수 있도록 매핑하는 PALLOCATE_COMMON_BUFFER_WITH_BOUNDS 콜백 함수에 대한 포인터입니다. 공통 버퍼는 선택적 최소 및 최대 논리 주소로 바인딩할 수 있습니다. 이 옵션은 Windows 10 버전 1803부터 사용할 수 있습니다.

AllocateCommonBufferVector

GetCommonBufferFromVectorByIndex

FreeCommonBufferFromVector

FreeCommonBufferVector

CreateCommonBufferFromMdl

MDL에서 DMA 공통 버퍼를 만들고 버스 마스터링 디바이스 및 CPU에서 액세스할 수 있도록 백업 메모리를 매핑하는 PCREATE_COMMON_BUFFER_FROM_MDL 콜백 함수에 대한 포인터입니다. 이 선택적 콜백은 Windows Server 2022부터 사용할 수 있습니다.

설명

Size를 제외한 이 구조체의 모든 멤버는 드라이버가 디바이스에 대한 DMA 작업을 수행하는 데 사용하는 함수에 대한 포인터입니다. 드라이버는 IoGetDmaAdapter 루틴을 호출하여 이러한 포인터를 가져옵니다. 이 루틴이 반환하는 DMA_OPERATIONS 구조체의 버전은 IoGetDmaAdapter에 입력 매개 변수로 전달되는 DEVICE_DESCRIPTION 구조체의 Version 멤버에 따라 달라집니다. 버전이 DEVICE_DESCRIPTION_VERSION 또는 DEVICE_DESCRIPTION_VERSION1 경우 이 구조의 버전 1이 반환됩니다. 버전이 DEVICE_DESCRIPTION_VERSION2 경우 이 구조의 버전 2가 반환됩니다. DMA_OPERATIONS 버전 2는 Windows XP부터 사용할 수 있습니다. 버전이 DEVICE_DESCRIPTION_VERSION3 경우 이 구조체의 버전 3이 반환됩니다. DMA_OPERATIONS 버전 3은 Windows 8 시작해서 사용할 수 있습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000부터 지원됩니다.
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)

추가 정보

AllocateAdapterChannel

AllocateAdapterChannelEx

AllocateCommonBuffer

AllocateCommonBufferEx

BuildMdlFromScatterGatherList

BuildScatterGatherList

BuildScatterGatherListEx

CalculateScatterGatherList

CancelAdapterChannel

CancelMappedTransfer

ConfigureAdapterChannel

DEVICE_DESCRIPTION

FlushAdapterBuffers

FlushAdapterBuffersEx

FreeAdapterChannel

FreeAdapterObject

FreeCommonBuffer

FreeMapRegisters

GetDmaAdapterInfo

GetDmaAlignment

GetDmaTransferInfo

GetScatterGatherList

GetScatterGatherListEx

InitializeDmaTransferContext

IoGetDmaAdapter

MapTransfer

MapTransferEx

PutDmaAdapter

PutScatterGatherList

ReadDmaCounter