структура 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или назначенияAddress членов.
Примечание Если этот бит задан или очищается, клиент NetDMA должен всегда гарантировать, что дескриптор определяет допустимые параметры передачи.
|
Следующие битовые маски определяют оставшиеся биты в элементе ControlFlags:
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) |