структура IO_RESOURCE_DESCRIPTOR (miniport.h)
Структура IO_RESOURCE_DESCRIPTOR описывает диапазон необработанных аппаратных ресурсов одного типа, которые могут использоваться устройством. Массив IO_RESOURCE_DESCRIPTOR структур содержится в каждой IO_RESOURCE_LIST структуре.
Синтаксис
typedef struct _IO_RESOURCE_DESCRIPTOR {
UCHAR Option;
UCHAR Type;
UCHAR ShareDisposition;
UCHAR Spare1;
USHORT Flags;
USHORT Spare2;
union {
struct {
ULONG Length;
ULONG Alignment;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Port;
struct {
ULONG Length;
ULONG Alignment;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Memory;
struct {
ULONG MinimumVector;
ULONG MaximumVector;
#if ...
IRQ_DEVICE_POLICY AffinityPolicy;
USHORT Group;
#else
IRQ_DEVICE_POLICY AffinityPolicy;
#endif
IRQ_PRIORITY PriorityPolicy;
KAFFINITY TargetedProcessors;
} Interrupt;
struct {
ULONG MinimumChannel;
ULONG MaximumChannel;
} Dma;
struct {
ULONG RequestLine;
ULONG Reserved;
ULONG Channel;
ULONG TransferWidth;
} DmaV3;
struct {
ULONG Length;
ULONG Alignment;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Generic;
struct {
ULONG Data[3];
} DevicePrivate;
struct {
ULONG Length;
ULONG MinBusNumber;
ULONG MaxBusNumber;
ULONG Reserved;
} BusNumber;
struct {
ULONG Priority;
ULONG Reserved1;
ULONG Reserved2;
} ConfigData;
struct {
ULONG Length40;
ULONG Alignment40;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Memory40;
struct {
ULONG Length48;
ULONG Alignment48;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Memory48;
struct {
ULONG Length64;
ULONG Alignment64;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Memory64;
struct {
UCHAR Class;
UCHAR Type;
UCHAR Reserved1;
UCHAR Reserved2;
ULONG IdLowPart;
ULONG IdHighPart;
} Connection;
} u;
} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;
Члены
Option
Указывает, является ли описание этого ресурса обязательным, предпочтительным или альтернативным. Необходимо использовать одно из следующих значений:
Значение | Значение |
---|---|
0 | Указанный диапазон ресурсов является обязательным, если не указаны альтернативные диапазоны. |
IO_RESOURCE_PREFERRED | Указанный диапазон ресурсов является предпочтительным по сравнению с любыми альтернативными диапазонами. |
IO_RESOURCE_ALTERNATIVE | Указанный диапазон ресурсов является альтернативой диапазону, предшествующему ему. Например, если одна IO_RESOURCE_DESCRIPTOR структура задает IRQ 5 с IO_RESOURCE_PREFERRED, а следующая структура задает IRQ 3 с IO_RESOURCE_ALTERNATIVE, диспетчер PnP назначает IRQ 3 устройству только в том случае, если IRQ 5 недоступен. (Для каждого ресурса можно указать несколько альтернативных вариантов. Можно задать как IO_RESOURCE_ALTERNATIVE, так и IO_RESOURCE_PREFERRED, указывая предпочтительный вариант.) |
IO_RESOURCE_DEFAULT | Не используется. |
Type
Идентифицирует тип ресурса. Список допустимых значений см. в элементе Type структуры CM_PARTIAL_RESOURCE_DESCRIPTOR .
ShareDisposition
Указывает, можно ли совместно использовать описанный ресурс. Список допустимых значений см. в разделе Элемент ShareDisposition структуры CM_PARTIAL_RESOURCE_DESCRIPTOR .
Spare1
Не используется.
Flags
Содержит битовые флаги, относящиеся к типу ресурса. В следующей таблице показаны флаги, допустимые при типе = CmResourceTypeInterrupt.
Значение | Значение |
---|---|
CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE | Строка IRQ активируется на уровне. (Эти IRQ обычно являются общими.) |
CM_RESOURCE_INTERRUPT_LATCHED | Строка IRQ активируется ребром. |
CM_RESOURCE_INTERRUPT_MESSAGE | Если этот флаг установлен, прерывание является прерыванием, сигналивным сообщением. В противном случае прерывание является прерыванием на основе строки. |
CM_RESOURCE_INTERRUPT_POLICY_INCLUDED | Если этот флаг установлен, член u.Interrupt включает данные, описывающие политику прерывания устройства. |
CM_RESOURCE_INTERRUPT_SECONDARY_INTERRUPT | Прерывание является вторичным. Дополнительные сведения о дополнительных прерываниях см. в разделе Прерывания GPIO. |
CM_RESOURCE_INTERRUPT_WAKE_HINT | Прерывание может вынудить операционную систему из состояния простоя с низким энергопотреблением или в спящем режиме системы. Дополнительные сведения о возможностях пробуждения см. в разделе Включение пробуждения устройства. |
Список допустимых флагов для других типов ресурсов см. в описании элемента Flags структуры CM_PARTIAL_RESOURCE_DESCRIPTOR .
Spare2
Не используется.
u
Определяет объединение u .
u.Port
Задает диапазон адресов портов ввода-вывода, используя следующие элементы.
Драйверы должны использовать RtlIoDecodeMemIoResource и RtlIoEncodeMemIoResource для чтения и обновления этого элемента, а не обновлять его напрямую.
u.Port.Length
Длина (в байтах) диапазона назначенных адресов портов ввода-вывода.
u.Port.Alignment
Выравнивание в байтах, которому должен соответствовать назначенный начальный адрес. Назначенный начальный адрес должен быть целым числом, кратным выравниванию.
u.Port.MinimumAddress
Минимальный адрес порта ввода-вывода относительно шины, который можно назначить устройству.
u.Port.MaximumAddress
Максимальный адрес порта ввода-вывода относительно шины, который можно назначить устройству.
u.Memory
Задает диапазон адресов памяти, используя следующие элементы:
Драйверы должны использовать RtlIoDecodeMemIoResource и RtlIoEncodeMemIoResource для чтения и обновления этого элемента, а не обновлять его напрямую.
u.Memory.Length
Длина (в байтах) диапазона назначаемых адресов памяти.
u.Memory.Alignment
Выравнивание в байтах, которому должен соответствовать назначенный начальный адрес. Назначенный начальный адрес должен быть целым числом, кратным выравниванию.
u.Memory.MinimumAddress
Минимальный адрес памяти относительно шины, который можно назначить устройству.
u.Memory.MaximumAddress
Максимальный адрес памяти относительно шины, который можно назначить устройству.
u.Interrupt
Задает диапазон векторов прерываний, используя следующие элементы:
u.Interrupt.MinimumVector
Минимальный относительный вектор шины, который можно назначить устройству.
u.Interrupt.MaximumVector
Максимальный относительный вектор шины, который может быть назначен устройству.
Если установлен бит флага CM_RESOURCE_INTERRUPT_MESSAGE , значения элементов MinimumVector и MaximumVector имеют особое значение. Дополнительные сведения см. в разделе Использование дескрипторов ресурсов прерывания.
u.Interrupt.AffinityPolicy
Задает значение IRQ_DEVICE_POLICY , указывающее, как система должна распределять прерывания устройства между процессорами.
Задает значение IRQ_DEVICE_POLICY , указывающее, как система должна распределять прерывания устройства между процессорами.
u.Interrupt.Group
Указывает номер группы процессоров. Группа является допустимым (но необязательным) членом u.Interrupt. Этот элемент существует только в том случае, если NT_PROCESSOR_GROUPS определен во время компиляции. Если член группы существует, то участники Group и TargetedProcessors вместе задают сходство групп, которое определяет набор процессоров, которые должны обрабатывать прерывания устройства. Чтобы указать сходство для определенной группы, задайте для параметра AffinityPolicy значение IrqPolicySpecifiedProcessors , а для параметра Group — соответствующий номер группы. Кроме того, targetedProcessors должны указывать целевые процессоры в группе. Если для Параметра AffinityPolicy задано значение, отличное от IrqPolicySpecifiedProcessors, задайте для параметра Group значение ALL_PROCESSOR_GROUPS, чтобы указать, что драйвер поддерживает группу (то есть предназначен для обработки сведений о группах процессоров). Драйвер не может указать целевые процессоры, если группа равна ALL_PROCESSOR_GROUPS; такие целевые спецификации игнорируются.
u.Interrupt.PriorityPolicy
Задает значение IRQ_PRIORITY , указывающее приоритет, с которым система должна отправлять прерывания устройства.
u.Interrupt.TargetedProcessors
Задает значение KAFFINITY , указывающее, какие процессоры должны обрабатывать прерывания устройства. Это значение используется только в том случае, если параметр AffinityPolicy имеет значение IrqPolicySpecifiedProcessors.
u.Dma
Задает параметр DMA, используя один из следующих элементов:
u.Dma.MinimumChannel
Минимальный канал DMA для шины, который можно назначить устройству.
u.Dma.MaximumChannel
Максимальный канал DMA относительно шины, который можно назначить устройству.
u.DmaV3
Задает параметры DMA для драйвера, использующего версию 3 структуры DMA_OPERATIONS .
Элемент u.DmaV3 доступен, начиная с Windows 8.
u.DmaV3.RequestLine
Номер строки запроса на системном контроллере DMA, выделенном для устройства.
u.DmaV3.Reserved
Не используется.
u.DmaV3.Channel
Номер канала DMA на системном контроллере DMA, выделенном для устройства.
u.DmaV3.TransferWidth
Указывает ширину (в битах) шины данных, которую системный контроллер DMA, выделенный устройству, использует для передачи данных на устройство или с устройства.
u.Generic
Не используется.
u.Generic.Length
Не используется.
u.Generic.Alignment
Не используется.
u.Generic.MinimumAddress
Не используется.
u.Generic.MaximumAddress
Не используется.
u.DevicePrivate
Зарезервировано для системного использования.
u.DevicePrivate.Data[3]
Зарезервировано для системного использования.
u.BusNumber
Задает номера шины, используя следующие элементы:
u.BusNumber.Length
Необходимое количество номеров автобусов.
u.BusNumber.MinBusNumber
Минимальный номер автобуса относительно шины, который можно назначить устройству.
u.BusNumber.MaxBusNumber
Максимальный номер автобуса относительно шины, который можно назначить устройству.
u.BusNumber.Reserved
Не используется.
u.ConfigData
Зарезервировано для системного использования.
u.ConfigData.Priority
Зарезервировано для системного использования.
u.ConfigData.Reserved1
Зарезервировано для системного использования.
u.ConfigData.Reserved2
Зарезервировано для системного использования.
u.Memory40
Задает диапазон адресов памяти с использованием следующих элементов.
Драйверы должны использовать RtlIoDecodeMemIoResource и RtlIoEncodeMemIoResource для чтения и обновления этого элемента, а не обновлять его напрямую.
u.Memory40.Length40
Высокие 32 бита 40-разрядной длины (в байтах) диапазона назначаемых адресов памяти. Нижние 8 битов обрабатываются как ноль.
u.Memory40.Alignment40
Высокое 32 бита 40-разрядного выравнивания (в байтах), которому должен соответствовать назначенный начальный адрес. Нижние 8 битов обрабатываются как ноль. Назначенный начальный адрес будет кратным выравниванию.
u.Memory40.MinimumAddress
Минимальный адрес памяти относительно шины, который можно назначить устройству.
u.Memory40.MaximumAddress
Максимальный адрес памяти относительно шины, который можно назначить устройству.
u.Memory48
Задает диапазон адресов памяти с использованием следующих элементов.
Драйверы должны использовать RtlIoDecodeMemIoResource и RtlIoEncodeMemIoResource для чтения и обновления этого элемента, а не обновлять его напрямую.
u.Memory48.Length48
Высокие 32 бита 48-разрядной длины (в байтах) диапазона назначаемых адресов памяти. Нижние 16 бит обрабатываются как ноль.
u.Memory48.Alignment48
Высокий 32 бит 48-разрядного выравнивания (в байтах), которому должен соответствовать назначенный начальный адрес. Нижние 16 бит обрабатываются как ноль. Назначенный начальный адрес будет кратным выравниванию.
u.Memory48.MinimumAddress
Минимальный адрес памяти относительно шины, который можно назначить устройству.
u.Memory48.MaximumAddress
Максимальный адрес памяти относительно шины, который можно назначить устройству.
u.Memory64
Задает диапазон адресов памяти с использованием следующих элементов.
Драйверы должны использовать RtlIoDecodeMemIoResource и RtlIoEncodeMemIoResource для чтения и обновления этого элемента, а не обновлять его напрямую.
u.Memory64.Length64
Высокие 32 бита 64-разрядной длины (в байтах) диапазона назначаемых адресов памяти. Нижние 32 бита обрабатываются как ноль.
u.Memory64.Alignment64
Высокий 32 бит 64-разрядного выравнивания в байтах, которому должен соответствовать назначенный начальный адрес. Нижние 32 бита обрабатываются как ноль. Назначенный начальный адрес будет кратным выравниванию.
u.Memory64.MinimumAddress
Минимальный адрес памяти относительно шины, который можно назначить устройству.
u.Memory64.MaximumAddress
Максимальный адрес памяти относительно шины, который можно назначить устройству.
u.Connection
Указывает подключение к последовательной шине или последовательному порту, а также к набору контактов ввода-вывода общего назначения (GPIO).
Элемент u.Connection доступен начиная с Windows 8.
Следующие члены описывают это подключение.
u.Connection.Class
Класс подключения. Для этого элемента задано одно из следующих значений:
Значение | Значение |
---|---|
CM_RESOURCE_CONNECTION_CLASS_GPIO | Получите доступ к устройству с помощью одного или нескольких контактов на контроллере GPIO. |
CM_RESOURCE_CONNECTION_CLASS_SERIAL | Доступ к устройству через последовательную шину или последовательный порт. |
u.Connection.Type
Тип подключения. Если Class = CM_RESOURCE_CONNECTION_CLASS_GPIO, параметр Type имеет следующее значение:
Значение | Значение |
---|---|
CM_RESOURCE_CONNECTION_TYPE_GPIO_IO | Доступ к устройству с помощью контактов GPIO, настроенных для ввода-вывода. |
Контакт GPIO, настроенный в качестве входных данных запроса прерывания, обращается как к обычному ресурсу прерывания (CmResourceTypeInterrupt).
Если Class = CM_RESOURCE_CONNECTION_CLASS_SERIAL, параметру Type присваивается одно из следующих значений:
Значение | Значение |
---|---|
CM_RESOURCE_CONNECTION_TYPE_SERIAL_I2C | Устройство подключено к шине I2C. |
CM_RESOURCE_CONNECTION_TYPE_SERIAL_SPI | Устройство подключено к шине SPI. |
CM_RESOURCE_CONNECTION_TYPE_SERIAL_UART | Устройство подключено к последовательному порту. |
u.Connection.Reserved1
Не используется.
u.Connection.Reserved2
Не используется.
u.Connection.IdLowPart
Нижние 32 бита 64-разрядного идентификатора подключения.
u.Connection.IdHighPart
Верхние 32 бита 64-разрядного идентификатора подключения.
Требования
Требование | Значение |
---|---|
Заголовок | miniport.h (включая Wdm.h, Ntddk.h, Ntifs.h, Miniport.h) |