структура 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 и 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):
Если не указано иное, описания применяются к при установке бита. | Значение |
---|---|
|
Поставщик NetDMA версии 2.0 или более поздней запускает копирование с физического адреса источника, указанного в элементе SourceAddress , и, когда он достигает конца первой страницы, он продолжает копирование с физического адреса, указанного в элементе NextSourceAddress . |
|
Поставщик NetDMA версии 2.0 или более поздней запускает копирование на физический адрес назначения, указанный в элементе DestinationAddress , и, когда он достигает конца первой страницы, он продолжает копирование на физический адрес, указанный в элементе NextDestinationAddress . |
|
Подсистема DMA должна определить дескриптор как дескриптор изменения контекста .
Интерфейс NetDMA отправляет дескриптор изменения контекста поставщикам NetDMA с поддержкой DCA, чтобы задать целевой процессор DCA целевых данных для всех передач DMA по каналу NetDMA. Интерфейс NetDMA использует член DCAContext8 в дескрипторе изменения контекста, чтобы указать 8-разрядный идентификатор расширенного программируемого контроллера прерываний (APIC) целевого процессора для канала. Поставщик NetDMA с поддержкой DCA должен поддерживать сходство DCA канала DMA с процессором до тех пор, пока он не получил новый дескриптор изменений контекста. Интерфейс NetDMA отправляет дескриптор изменения контекста один раз после выделения канала и снова, когда NetDMA обнаруживает, что поставщик DMA мог потерять контекст оборудования (например, после приостановки и возобновления операции). |
|
Если тип операции DMA является стандартной передачей DMA, подсистема DMA должна отправить указание DCA для целевых данных целевому процессору DCA, назначенному каналу DMA.
Чтобы задать целевой процессор DCA канала DMA, интерфейс NetDMA ранее отправил в этот канал дескриптор изменения контекста. |
|
Подсистема DMA должна создать прерывание для связанного канала DMA после обработки этого дескриптора DMA.
После очистки этого бита подсистема DMA не создает прерывание. |
|
Исходный адрес не следует подмечать.
При очистке этого бита исходный адрес находится в согласованном пространстве памяти, и необходимо подсленять каждую строку кэша ЦП. Клиент DMA должен убедиться, что для правильной операции DMA не требуется отслевание кэшей ЦП. |
|
Адрес назначения не следует подмечать.
После очистки этого бита целевой адрес находится в согласованном пространстве памяти, и необходимо подсленять каждую строку кэша ЦП. Клиент DMA должен убедиться, что для правильной операции DMA не требуется отслевание кэшей ЦП. |
|
Элементы CompletionVirtualAddress и CompletionPhysicalAddress в NET_DMA_CHANNEL_PARAMETERS структура ссылается на значение состояния завершения. Модуль DMA обновляет значение состояния завершения после завершения обработки этого дескриптора.
Значение состояния завершения представляет собой 64-битовое сочетание физического адреса последнего дескриптора DMA, обработанного подсистемой DMA, и дополнительных сведений о состоянии. После очистки этого бита подсистема DMA не использует CompletionVirtualAddress или CompletionPhysicalAddress. |
|
Подсистема DMA гарантирует, что все операции записи для этого дескриптора, включая данные и состояние завершения, будут завершены до того, как он считывает данные для следующего дескриптора.
После очистки этого бита подсистема DMA может начать обработку следующего дескриптора до завершения обработки этого дескриптора. |
|
Передача DMA не требуется для этого дескриптора. Подсистема DMA не требуется для проверка элементов TransferSize, SourceAddress или DestinationAddress.
При очистке этого бита может потребоваться передача DMA или передача по нулевой длине. Подсистема DMA должна проверка членов TransferSize, SourceAddress или DestinationAddress. Примечание Если этот бит задан или очищен, клиент NetDMA всегда должен убедиться, что дескриптор определяет допустимые параметры передачи.
|
Следующие битовые маски определяют оставшиеся биты в элементе ControlFlags :
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) |