NET_DMA_DESCRIPTOR 구조체(netdma.h)

참고 NetDMA 인터페이스는 Windows 8 이상에서 지원되지 않습니다.
 
NET_DMA_DESCRIPTOR 구조체는 DMA 설명자의 연결된 목록에 있는 각 항목에 대한 DMA 전송 정보를 지정합니다.

구문

typedef struct _NET_DMA_DESCRIPTOR {
  union {
    ULONG TransferSize;
    struct {
      ULONG DCAContext : 32;
    } DCAContext32;
    struct {
      ULONG DCAContext : 16;
      ULONG Reserved : 16;
    } DCAContext16;
    struct {
      ULONG DCAContext : 8;
      ULONG Reserved : 24;
    } DCAContext8;
  };
  ULONG            ControlFlags;
  PHYSICAL_ADDRESS SourceAddress;
  PHYSICAL_ADDRESS DestinationAddress;
  PHYSICAL_ADDRESS NextDescriptor;
  union {
    ULONG64          Reserved1;
    PHYSICAL_ADDRESS NextSourceAddress;
  };
  union {
    ULONG64          Reserved2;
    PHYSICAL_ADDRESS NextDestinationAddress;
  };
  ULONG64          UserContext1;
  ULONG64          UserContext2;
} NET_DMA_DESCRIPTOR, *PNET_DMA_DESCRIPTOR;

멤버

TransferSize

이 DMA 설명자와 연결된 메모리 블록의 크기(바이트)입니다.

NetDMA 2.0 이상 공급자 드라이버는 DCA(직접 캐시 액세스)를 지원하기 위해 TransferSize와 함께 공용 구조체의 DCAContext32, DCAContext16DCAContext8 멤버를 사용합니다.

DCAContext32

32비트 DCA 컨텍스트입니다.

DCAContext32.DCAContext

DCA 컨텍스트입니다.

DCAContext16

16비트 DCA 컨텍스트입니다.

DCAContext16.DCAContext

DCA 컨텍스트입니다.

DCAContext16.Reserved

예약된 비트입니다.

DCAContext8

8비트 DCA 컨텍스트입니다.

DCAContext8.DCAContext

DCA 컨텍스트입니다.

DCAContext8.Reserved

예약된 비트입니다.

ControlFlags

이 DMA 설명자에 대해 DMA 엔진이 수행해야 하는 작업을 지정하는 플래그 집합입니다. 이 멤버는 다음 값 중 하나 이상을 포함해야 합니다(비트 OR 연산과 결합).

달리 명시되지 않는 한 비트가 설정된 경우에 설명이 적용됩니다. 의미
NET_DMA_SOURCE_PAGE_BREAK
NetDMA 버전 2.0 이상 공급자는 SourceAddress 멤버에 지정된 원본 실제 주소에서 복사본을 시작하고 첫 번째 페이지의 끝에 도달하면 NextSourceAddress 멤버에 지정된 실제 주소에서 복사본을 계속 진행합니다.
NET_DMA_DESTINATION_PAGE_BREAK
NetDMA 버전 2.0 이상 공급자는 DestinationAddress 멤버에 지정된 대상 실제 주소로 복사를 시작하고 첫 번째 페이지의 끝에 도달하면 NextDestinationAddress 멤버에 지정된 실제 주소로 복사를 계속합니다.
NET_DMA_OP_TYPE_CONTEXT_CHANGE
DMA 엔진은 설명자를 컨텍스트 변경 설명자로 식별해야 합니다.

NetDMA 인터페이스는 컨텍스트 변경 설명자를 DCA 지원 NetDMA 공급자에 제출하여 NetDMA 채널의 모든 DMA 전송에 대해 대상 데이터의 DCA 대상 프로세서를 설정합니다. NetDMA 인터페이스는 컨텍스트 변경 설명자의 DCAContext8 멤버를 사용하여 채널에 대한 대상 프로세서의 8비트 APIC(고급 프로그래밍 가능한 인터럽트 컨트롤러) 식별자를 지정합니다.

DCA 지원 NetDMA 공급자는 새 컨텍스트 변경 설명자를 받지 못한 경우 프로세서를 사용하여 DMA 채널의 DCA 선호도를 유지해야 합니다.

NetDMA 인터페이스는 채널이 할당된 후 한 번, 그리고 NetDMA가 DMA 공급자가 하드웨어 컨텍스트를 분실했을 수 있음을 감지할 때(예: 일시 중단 및 다시 시작 작업 후) 컨텍스트 변경 설명자를 한 번 제출합니다.

NET_DMA_DESTINATION_DCA_ENABLE
DMA 작업 유형이 표준 DMA 전송인 경우 DMA 엔진은 대상 데이터에 대한 DCA 힌트를 DMA 채널에 할당된 DCA 대상 프로세서로 보내야 합니다.

DMA 채널의 DCA 대상 프로세서를 설정하기 위해 NetDMA 인터페이스는 이전에 컨텍스트 변경 설명자를 해당 채널에 제출했습니다.

NET_DMA_INTERRUPT_ON_COMPLETION
DMA 엔진은 이 DMA 설명자를 처리한 후 연결된 DMA 채널에 대한 인터럽트를 생성해야 합니다.

이 비트를 지우면 DMA 엔진에서 인터럽트를 생성하지 않습니다.

NET_DMA_SOURCE_NO_SNOOP
원본 주소를 스누핑하면 안 됩니다.

이 비트를 지우면 원본 주소가 일관된 메모리 공간에 있으며 각 CPU 캐시 줄을 스누핑해야 합니다. DMA 클라이언트는 적절한 DMA 작업에 CPU 캐시를 스누핑할 필요가 없는지 확인해야 합니다.

NET_DMA_DESTINATION_NO_SNOOP
대상 주소를 스누핑하면 안 됩니다.

이 비트를 지우면 대상 주소가 일관된 메모리 공간에 있으며 각 CPU 캐시 줄을 스누핑해야 합니다. DMA 클라이언트는 적절한 DMA 작업에 CPU 캐시를 스누핑할 필요가 없는지 확인해야 합니다.

NET_DMA_STATUS_UPDATE_ON_COMPLETION
CompletionVirtualAddressCompletionPhysicalAddress 멤버 NET_DMA_CHANNEL_PARAMETERS 구조체는 완성 상태 값을 참조합니다. DMA 엔진은 이 설명자의 처리를 완료할 때 완료 상태 값을 업데이트합니다.

완성 상태 값은 DMA 엔진이 처리한 최신 DMA 설명자의 실제 주소와 추가 상태 정보의 64비트 전체 조합입니다.

이 비트를 지우면 DMA 엔진은 CompletionVirtualAddress 또는 CompletionPhysicalAddress를 사용하지 않습니다.

NET_DMA_SERIALIZE_TRANSFER
DMA 엔진은 다음 설명자에 대한 데이터를 읽기 전에 데이터 및 완료 상태 포함하여 이 설명자에 대한 모든 쓰기가 완료되도록 보장합니다.

이 비트를 지우면 DMA 엔진은 이 설명자의 처리를 완료하기 전에 다음 설명자 처리를 시작할 수 있습니다.

NET_DMA_NULL_TRANSFER
이 설명자에는 DMA 전송이 필요하지 않습니다. DMA 엔진은 TransferSize, SourceAddress 또는 DestinationAddress 멤버를 검사 필요가 없습니다.

이 비트를 지우면 DMA 전송이 필요하거나 길이가 0인 전송일 수 있습니다. DMA 엔진은 TransferSize, SourceAddress 또는 DestinationAddress 멤버를 검사 합니다.

참고 이 비트가 설정되거나 지워지면 NetDMA 클라이언트는 항상 설명자가 유효한 전송 매개 변수를 정의하는지 확인해야 합니다.
 
 

다음 비트 마스크는 ControlFlags 멤버의 나머지 비트를 식별합니다.

의미
NET_DMA_OP_TYPE_MASK
DMA 작업 유형에 예약된 비트를 지정하는 비트 마스크입니다. NetDMA 인터페이스는 이러한 비트를 0으로 설정합니다.
NET_DMA_RESERVED_MASK
향후 애플리케이션용으로 예약된 비트를 지정하는 비트 마스크입니다. NetDMA 인터페이스는 이러한 비트를 0으로 설정합니다.

SourceAddress

DMA 전송의 원본인 메모리 블록의 실제 주소입니다.

DestinationAddress

DMA 전송 대상인 메모리 블록의 실제 주소입니다.

NextDescriptor

설명자의 연결된 목록에 있는 다음 NET_DMA_DESCRIPTOR 구조체의 실제 주소입니다. 이 설명자가 목록의 마지막 설명자인 경우 NextDescriptorNULL입니다.

Reserved1

사용할 DMA 엔진 또는 DMA 공급자 드라이버용으로 예약된 ULONG64 값입니다. NetDMA 2.0 이상 공급자 드라이버는 Reserved1과 공용 구조체의 NextSourceAddress 멤버를 사용하여 원본 및 대상 페이지 나누기를 지원합니다.

NextSourceAddress

원본 페이지 나누기에 사용되는 원본 주소의 두 번째 페이지의 실제 주소입니다.

Reserved2

사용할 DMA 엔진 또는 DMA 공급자 드라이버를 사용하도록 예약된 ULONG64 값입니다. NetDMA 2.0 이상 공급자 드라이버는 Reserved2와 공용 구조체의 NextDestinationAddress 멤버를 사용하여 원본 및 대상 페이지 나누기를 지원합니다.

NextDestinationAddress

대상 페이지 나누기에 사용되는 대상 주소의 두 번째 페이지의 실제 주소입니다.

UserContext1

사용할 NetDMA 인터페이스에 예약된 ULONG64 값입니다.

UserContext2

사용할 NetDMA 인터페이스에 예약된 ULONG64 값입니다.

설명

NET_DMA_DESCRIPTOR 구조체는 DMA 설명자의 연결된 목록에서 단일 DMA 전송에 대한 원본, 대상 및 제어 정보를 지정합니다.

DMA 전송을 시작하기 위해 NetDMA 인터페이스는 DMA 공급자 드라이버의 ProviderStartDma 함수의 DescriptorPhysicalAddress 매개 변수에 NET_DMA_DESCRIPTOR 구조체의 실제 주소를 제공합니다. DescriptorVirtualAddress 매개 변수에는 설명자의 가상 주소가 포함됩니다.

NET_DMA_DESCRIPTOR 구조체의 NextDescriptor 멤버는 설명자의 연결된 목록에 있는 다음 NET_DMA_DESCRIPTOR 구조체의 실제 주소를 포함합니다.

NetDMA 인터페이스는 DMA 공급자 드라이버의 ProviderAppendDma 함수를 호출하여 DMA 채널의 마지막 설명자 다음에 연결된 DMA 설명자 목록을 추가합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Server 2008에서 NetDMA 2.0 드라이버에 대해 지원됩니다. NextSourceAddress, NextDestinationAddress, DCAContext32, DCAContext16 및 DCAContext8 멤버가 추가되었습니다. Windows Server 2008에서 NetDMA 1.1 드라이버에 대해 지원됩니다. Windows Server 2008 및 Windows Vista에서 NetDMA 1.0 드라이버에 대해 지원됩니다.
머리글 netdma.h(Netdma.h 포함)

추가 정보

NET_DMA_CHANNEL_PARAMETERS

ProviderAppendDma

ProviderStartDma