NET_DMA_DESCRIPTOR 구조체(netdma.h)
통사론
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 이상 공급자 드라이버는 DCAContext32, DCAContext16및 TransferSize 공용 구조체의 DCAContext8 멤버를DCA(Direct Cache Access)지원합니다.
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 연산과 결합됨).
달리 명시되지 않는 한 비트가 설정된 경우에 설명이 적용됩니다. | 의미 |
---|---|
|
NetDMA 버전 2.0 이상 공급자는 SourceAddress 멤버에 지정된 원본 실제 주소에서 복사본을 시작하고 첫 번째 페이지의 끝에 도달하면 NextSourceAddress 멤버에 지정된 실제 주소에서 복사본을 계속합니다. |
|
NetDMA 버전 2.0 이상 공급자는 DestinationAddress 멤버에 지정된 대상 실제 주소로 복사를 시작하고 첫 번째 페이지의 끝에 도달하면 NextDestinationAddress 멤버에 지정된 실제 주소로 복사를 계속합니다. |
|
DMA 엔진은 설명자를 컨텍스트 변경 설명자로 식별해야 합니다.
NetDMA 인터페이스는 NetDMA 채널에서 모든 DMA 전송에 대한 대상 데이터의 DCA 대상 프로세서를 설정하기 위해 DCA 지원 NetDMA 공급자에게 컨텍스트 변경 설명자를 제출합니다. NetDMA 인터페이스는 컨텍스트 변경 설명자의 DCAContext8 멤버를 사용하여 채널에 대한 대상 프로세서의 8비트 APIC(고급 프로그래밍 인터럽트 컨트롤러) 식별자를 지정합니다. DCA 지원 NetDMA 공급자는 새 컨텍스트 변경 설명자를 받지 못한 경우 DMA 채널의 DCA 선호도를 프로세서와 함께 유지해야 합니다. NetDMA 인터페이스는 채널이 할당된 후 한 번 컨텍스트 변경 설명자를 제출하고, NetDMA가 DMA 공급자가 하드웨어 컨텍스트를 분실했을 수 있음을 감지하면(예: 일시 중단 및 다시 시작 작업 후) 컨텍스트 변경 설명자를 제출합니다. |
|
DMA 작업 유형이 표준 DMA 전송인 경우 DMA 엔진은 대상 데이터에 대한 DCA 힌트를 DMA 채널에 할당된 DCA 대상 프로세서로 보내야 합니다.
DMA 채널의 DCA 대상 프로세서를 설정하기 위해 NetDMA 인터페이스는 이전에 해당 채널에 컨텍스트 변경 설명자를 제출했습니다. |
|
DMA 엔진은 이 DMA 설명자를 처리한 후 연결된 DMA 채널에 대한 인터럽트를 생성해야 합니다.
이 비트가 지워지면 DMA 엔진이 인터럽트를 생성하지 않습니다. |
|
원본 주소는 스누핑하면 안 됩니다.
이 비트가 지워지면 원본 주소가 일관된 메모리 공간에 있으며 각 CPU 캐시 줄을 스누핑해야 합니다. DMA 클라이언트는 적절한 DMA 작업에 CPU 캐시를 스누핑할 필요가 없는지 확인해야 합니다. |
|
대상 주소는 스누핑하면 안 됩니다.
이 비트가 지워지면 대상 주소가 일관된 메모리 공간에 있으며 각 CPU 캐시 줄을 스누핑해야 합니다. DMA 클라이언트는 적절한 DMA 작업에 CPU 캐시를 스누핑할 필요가 없는지 확인해야 합니다. |
|
CompletionVirtualAddress 및 CompletionPhysicalAddress 멤버
NET_DMA_CHANNEL_PARAMETERS 구조체는 완료 상태 값을 참조합니다. DMA 엔진은 이 설명자의 처리를 완료할 때 완료 상태 값을 업데이트합니다.
완료 상태 값은 DMA 엔진이 처리한 최신 DMA 설명자의 실제 주소와 추가 상태 정보의 64비트 전체 조합입니다. 이 비트가 지워지면 DMA 엔진은 CompletionVirtualAddress 또는 CompletionPhysicalAddress사용하지 않습니다. |
|
DMA 엔진은 다음 설명자에 대한 데이터를 읽기 전에 데이터 및 완료 상태를 포함하여 이 설명자에 대한 모든 쓰기가 완료되도록 보장합니다.
이 비트가 지워지면 DMA 엔진은 이 설명자의 처리를 완료하기 전에 다음 설명자 처리를 시작할 수 있습니다. |
|
이 설명자에는 DMA 전송이 필요하지 않습니다. DMA 엔진은 TransferSize, SourceAddress또는 destinationAddress 멤버를 필요가 없습니다.
이 비트가 지워지면 DMA 전송이 필요하거나 길이가 0인 전송일 수 있습니다. DMA 엔진은 TransferSize, SourceAddress또는 DestinationAddress 멤버를 확인해야 합니다.
참고 이 비트가 설정되거나 지워지면 NetDMA 클라이언트는 항상 설명자가 유효한 전송 매개 변수를 정의해야 합니다.
|
다음 비트 마스크는 ControlFlags 멤버의 나머지 비트를 식별합니다.
값 | 의미 |
---|---|
|
DMA 작업 형식에 예약된 비트를 지정하는 비트 마스크입니다. NetDMA 인터페이스는 이러한 비트를 0으로 설정합니다. |
|
이후 애플리케이션용으로 예약된 비트를 지정하는 비트 마스크입니다. NetDMA 인터페이스는 이러한 비트를 0으로 설정합니다. |
SourceAddress
DMA 전송의 원본인 메모리 블록의 실제 주소입니다.
DestinationAddress
DMA 전송 대상인 메모리 블록의 실제 주소입니다.
NextDescriptor
설명자의 연결된 목록에 있는 다음 NET_DMA_DESCRIPTOR 구조체의 실제 주소입니다. 이 설명자가 목록의 마지막 설명자인 경우 NextDescriptor NULL .
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 포함) |