структура NVME_CONTROLLER_REGISTERS (nvme.h)
Указывает карту регистра для контроллера.
Синтаксис
typedef struct {
NVME_CONTROLLER_CAPABILITIES CAP;
NVME_VERSION VS;
ULONG INTMS;
ULONG INTMC;
NVME_CONTROLLER_CONFIGURATION CC;
ULONG Reserved0;
NVME_CONTROLLER_STATUS CSTS;
NVME_NVM_SUBSYSTEM_RESET NSSR;
NVME_ADMIN_QUEUE_ATTRIBUTES AQA;
NVME_ADMIN_SUBMISSION_QUEUE_BASE_ADDRESS ASQ;
NVME_ADMIN_COMPLETION_QUEUE_BASE_ADDRESS ACQ;
NVME_CONTROLLER_MEMORY_BUFFER_LOCATION CMBLOC;
NVME_CONTROLLER_MEMORY_BUFFER_SIZE CMBSZ;
ULONG Reserved2[944];
ULONG Reserved3[64];
ULONG Doorbells[0];
} NVME_CONTROLLER_REGISTERS, *PNVME_CONTROLLER_REGISTERS;
Члены
CAP
Структура NVME_CONTROLLER_CAPABILITIES , указывающая основные возможности контроллера для размещения программного обеспечения.
Регистр CAP возможностей контроллера начинается с 00h.
VS
структура NVME_VERSION, указывающая основную и дополнительную версию спецификации NVM Express, которую поддерживает реализация контроллера. Допустимые версии спецификации: 1.0, 1.1 и 1.2.
Регистр версии VS начинается со смещения 08h.
INTMS
Указывает, маскируется ли вектор прерывания при создании прерывания или сообщает об ожидающем прерывании в структуре возможностей MSI.
Если значение записывается в бит в поле, соответствующий 1
вектор прерывания маскируется от создания прерывания или сообщения об ожидающем прерывании в структуре возможностей MSI. Запись в 0
бит не имеет никакого эффекта.
При чтении это поле возвращает текущее значение маски прерывания в контроллере (не значение этого регистра). Если бит имеет значение , соответствующий 1
вектор прерывания маскируется. Если бит имеет значение , соответствующий 0
вектор прерывания не маскируется.
Этот регистр используется для маскирования прерываний при использовании прерываний на основе пин-кода, msi одного сообщения или нескольких MSI сообщений. При использовании MSI-X для маскирования прерываний следует использовать таблицу маски прерываний, определенную как часть MSI-X. Программное обеспечение узла не должно обращаться к этому регистру, если оно настроено для MSI-X; Любой доступ, настроенный для MSI-X, не определен.
Регистр INTMS для маски прерывания начинается со смещением 0ch.
INTMC
Указывает, маскируется ли вектор прерывания.
Если значение 1
записывается в бит в поле, соответствующий вектор прерывания расмаскируется. Запись в 0
бит не имеет никакого эффекта.
При чтении это поле возвращает текущее значение маски прерывания в контроллере (не значение этого регистра). Если бит имеет значение , то соответствующий 1
вектор прерывания маскируется. Если бит имеет значение 0
, то соответствующий вектор прерывания не маскируется.
Этот регистр используется для распаку прерываний при использовании прерываний на основе пин-кода, msi одного сообщения или нескольких MSI сообщений. При использовании MSI-X для распаку прерываний следует использовать таблицу маски прерываний, определенную как часть MSI-X. Программное обеспечение узла не должно обращаться к этому регистру, если оно настроено для MSI-X; Любой доступ, настроенный для MSI-X, не определен.
Регистр INTMS для очистки маски прерывания начинается со смещением 10 ч.
CC
Структура NVME_CONTROLLER_CONFIGURATION , содержащая параметры конфигурации для чтения и записи для контроллера.
Программное обеспечение ведущего приложения должно задать допустимые значения в полях Механизм арбитража (AMS), Размер страницы памяти (MPS) и Набор команд (CSS) в NVME_CONTROLLER_CONFIGURATION допустимые значения, прежде чем включить контроллер, задав для поля Enable (EN) значение 1
.
Регистр CC конфигурации контроллера начинается со смещений 14 ч.
Reserved0
Смещение 18h зарезервировано.
Все зарезервированные регистры и все зарезервированные биты в регистрах доступны только для чтения и возвращаются 0h
при чтении, однако программное обеспечение не должно полагаться на 0h
возврат.
CSTS
Структура NVME_CONTROLLER_STATUS , указывающая состояние контроллера.
Регистр CSTS состояния контроллера начинается со смещения 1Ch.
NSSR
Структура NVME_NVM_SUBSYSTEM_RESET , которая предоставляет программное обеспечение узла с возможностью инициировать сброс подсистемы NVM.
Поддержка этого необязательного регистра определяется состоянием поля NVM Subsystem Reset Supported (NSSRS) в возможности контроллера. Если регистр не поддерживается, диапазон адресов, занятый регистром, резервируется.
(Необязательно) Регистр сброса подсистемы NVM начинается с смещением 20 ч.
AQA
Структура NVME_ADMIN_QUEUE_ATTRIBUTES, указывающая атрибуты очереди Администратор для очереди отправки Администратор и очереди завершения Администратор.
Регистр AQA атрибутов очереди Администратор начинается со смещением 24 ч.
ASQ
Структура NVME_ADMIN_SUBMISSION_QUEUE_BASE_ADDRESS, указывающая базовый адрес памяти очереди отправки Администратор.
Регистр базового адреса очереди отправки Администратор начинается с смещением 28 ч.
ACQ
Структура NVME_ADMIN_COMPLETION_QUEUE_BASE_ADDRESS, указывающая базовый адрес памяти очереди завершения Администратор.
Администратор регистр базового адреса очереди завершения начинается в 30 ч.
CMBLOC
Структура NVME_CONTROLLER_MEMORY_BUFFER_LOCATION , указывающая расположение буфера памяти контроллера.
Если значение CMBSZ равно 0
, этот регистр зарезервирован.
Регистр расположения буфера памяти контроллера (необязательно) начинается с смещения 38 ч.
CMBSZ
Структура NVME_CONTROLLER_MEMORY_BUFFER_SIZE , указывающая размер буфера памяти контроллера.
Если контроллер не поддерживает функцию буфера памяти контроллера, этот регистр очищается в 0h
.
Регистр размера буфера памяти контроллера (необязательно) начинается с смещения 3ch.
Reserved2[944]
Зарезервировано смещение 40h до EFFh.
Все зарезервированные регистры и все зарезервированные биты в регистрах доступны только для чтения и возвращаются 0h
при чтении, однако программное обеспечение не должно полагаться на 0h
возврат.
Reserved3[64]
Смещение F00h до FFFh зарезервировано для регистров, определенных для набора команд.
Все зарезервированные регистры и все зарезервированные биты в регистрах доступны только для чтения и возвращаются 0h
при чтении, однако программное обеспечение не должно полагаться на 0h
возврат.
Doorbells[0]
Указывает начало первого регистра Doorbell. Дверной звонок Администратор очереди отправки.
Комментарии
Регистры контроллеров находятся в регистрах нижнего базового адреса (MLBAR) регистра памяти или верхнего базового адреса регистра памяти (MUBAR) (PCI BAR0 и BAR1), которые сопоставляются с пространством памяти, поддерживающим доступ по порядку и переменную ширину доступа. Для многих архитектур компьютеров такое поведение приводит к указанию пространства памяти как некашируемого.
Узел не должен выдавать заблокированные доступы, а также должен обращаться к регистрам в собственной ширине или выровненных 32-разрядных доступах. Нарушение любого из этих требований к узлу приводит к неопределенному поведению.
Диапазон адресов для конкретного поставщика начинается после последнего дверного звонка, поддерживаемого контроллером, и продолжается до конца поддерживаемого диапазона BAR0/1. Начало диапазона адресов для конкретного поставщика начинается в том же расположении и не зависит от количества выделенных дверных колокольчиков.
Доступы, предназначенные для любой части двух или более регистров, не поддерживаются.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 10 |
Верхняя часть | nvme.h |