Поделиться через


структура 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 и более поздних версий используют DCAContext32, DCAContext16и DCAContext8 членов объединения с TransferSize для поддержки прямого доступа к кэшу (DCA).

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 отправляет дескриптор изменения контекста в поставщики NetDMA, поддерживающие DCA, чтобы задать целевой процессор DCA целевых данных для всех передач DMA на канале NetDMA. Интерфейс NetDMA использует элемент DCAContext8 в дескрипторе изменений контекста, чтобы указать 8-разрядный расширенный программируемый идентификатор контроллера прерываний (APIC) целевого процессора для канала.

Поставщик NetDMA, поддерживающий DCA, должен поддерживать сходство DCA канала DMA с процессором, пока он не получил новый дескриптор изменения контекста.

Интерфейс NetDMA отправляет дескриптор изменения контекста один раз после выделения канала и снова, когда NetDMA обнаруживает, что поставщик DMA может потерять контекст оборудования (например, после приостановки и возобновления операции).

NET_DMA_DESTINATION_DCA_ENABLE
Если тип операции DMA является стандартной передачей DMA, подсистема DMA должна отправить указание DCA для конечных данных в целевой процессор DCA, назначенный каналу DMA.

Чтобы задать целевой процессор DCA канала DMA, интерфейс NetDMA ранее отправил дескриптор изменения контекста в этот канал.

NET_DMA_INTERRUPT_ON_COMPLETION
Модуль DMA должен создать прерывание для связанного канала DMA после обработки дескриптора DMA.

Когда этот бит очищается, подсистема DMA не создает прерывание.

NET_DMA_SOURCE_NO_SNOOP
Исходный адрес не должен быть отложен.

Если этот бит очищается, исходный адрес находится в последовательном пространстве памяти, и каждая строка кэша ЦП должна быть отложена. Клиент DMA должен убедиться, что для правильной операции DMA не требуется поиск кэша ЦП.

NET_DMA_DESTINATION_NO_SNOOP
Адрес назначения не должен быть отснючен.

Если этот бит очищается, адрес назначения находится в последовательном пространстве памяти, и каждая строка кэша ЦП должна быть отложена. Клиент DMA должен убедиться, что для правильной операции DMA не требуется поиск кэша ЦП.

NET_DMA_STATUS_UPDATE_ON_COMPLETION
Члены CompletionVirtualAddress и CompletionPhysicalAddress NET_DMA_CHANNEL_PARAMETERS структура ссылается на значение состояния завершения. Модуль DMA обновляет значение состояния завершения после завершения обработки этого дескриптора.

Значение состояния завершения — это 64-разрядная комбинация физического адреса последнего дескриптора DMA, обрабатываемого подсистемой DMA, и дополнительных сведений о состоянии.

При очистке этого бита подсистема DMA не использует CompletionVirtualAddress или CompletionPhysicalAddress.

NET_DMA_SERIALIZE_TRANSFER
Модуль DMA гарантирует, что все записи для этого дескриптора, включая данные и состояние завершения, завершаются до того, как он считывает данные для следующего дескриптора.

Когда этот бит очищается, подсистема DMA может начать обработку следующего дескриптора, прежде чем завершить обработку этого дескриптора.

NET_DMA_NULL_TRANSFER
Для этого дескриптора не требуется передача DMA. Подсистема DMA не требуется для проверки TransferSize, SourceAddressили DestinationAddress членов.

При очистке этого бита может потребоваться передача DMA или может быть нулевой длиной передачи. Подсистема DMA должна проверить TransferSize, SourceAddressили назначенияAddress членов.

Примечание Если этот бит задан или очищается, клиент NetDMA должен всегда гарантировать, что дескриптор определяет допустимые параметры передачи.
 
 

Следующие битовые маски определяют оставшиеся биты в элементе ControlFlags:

Ценность Значение
NET_DMA_OP_TYPE_MASK
Битовая маска, указывающая биты, зарезервированные для типа операции DMA. Интерфейс NetDMA задает эти биты равным нулю.
NET_DMA_RESERVED_MASK
Битовая маска, указывающая биты, зарезервированные для будущих приложений. Интерфейс NetDMA задает эти биты равным нулю.

SourceAddress

Физический адрес блока памяти, который является источником для передачи DMA.

DestinationAddress

Физический адрес блока памяти, который является назначением для передачи DMA.

NextDescriptor

Физический адрес следующей NET_DMA_DESCRIPTOR структуры в связанном списке дескрипторов. Если этот дескриптор является последним дескриптором в списке, NextDescriptorNULL.

Reserved1

Значение ULONG64, зарезервированное для подсистемы DMA или драйвера поставщика DMA для использования. Драйверы поставщиков NetDMA 2.0 и более поздних версий используют NextSourceAddress член объединения с Reserved1 для поддержки разрыва страницы источника и назначения.

NextSourceAddress

Физический адрес второй страницы исходного адреса, который используется в разрыве исходной страницы.

Reserved2

Значение ULONG64, зарезервированное для использования подсистемы DMA или драйвера поставщика DMA для использования. Драйверы поставщиков NetDMA 2.0 и более поздних версий используют NextDestinationAddress член объединения с Зарезервирован2 для поддержки разрыва исходной и целевой страницы.

NextDestinationAddress

Физический адрес второй страницы целевого адреса, который используется в разрыве целевой страницы.

UserContext1

Значение ULONG64, зарезервированное для используемого интерфейса NetDMA.

UserContext2

Значение ULONG64, зарезервированное для используемого интерфейса NetDMA.

Замечания

Структура NET_DMA_DESCRIPTOR указывает сведения о источнике, назначении и элементе управления для одной передачи DMA в связанном списке дескрипторов DMA.

Чтобы запустить передачу DMA, интерфейс NetDMA предоставляет физический адрес структуры NET_DMA_DESCRIPTOR в параметре DescriptorPhysicalAddress функции драйвера поставщика DMA ProviderStartDma. Параметр descriptorVirtualAddress содержит виртуальный адрес дескриптора.

Элемент NextDescriptor структуры NET_DMA_DESCRIPTOR содержит физический адрес следующей NET_DMA_DESCRIPTOR структуры в связанном списке дескрипторов.

Интерфейс NetDMA вызывает функцию драйвера поставщика DMA ProviderAppendDma, чтобы добавить связанный список дескрипторов DMA после последнего дескриптора в канале DMA.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Поддерживается для драйверов NetDMA 2.0 в Windows Server 2008. (Добавлены элементы NextSourceAddress, NextDestinationAddress, DCAContext32, DCAContext16 и DCAContext8.) Поддерживается для драйверов NetDMA 1.1 в Windows Server 2008. Поддерживается для драйверов NetDMA 1.0 в Windows Server 2008 и Windows Vista.
заголовка netdma.h (include Netdma.h)

См. также

NET_DMA_CHANNEL_PARAMETERS

providerAppendDma

ProviderStartDma