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


структура 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 или DestinationAddress.

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

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

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

SourceAddress

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

DestinationAddress

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

NextDescriptor

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

Reserved1

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

NextSourceAddress

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

Reserved2

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

NextDestinationAddress

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

UserContext1

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

UserContext2

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

Комментарии

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

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

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

Интерфейс NetDMA вызывает функцию ProviderAppendDma драйвера поставщика DMA, чтобы добавить связанный список дескрипторов 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 (включая Netdma.h)

См. также раздел

NET_DMA_CHANNEL_PARAMETERS

ProviderAppendDma

ProviderStartDma