структура 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