컨트롤러에 대한 레지스터 맵을 지정합니다.
통사론
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 레지스터를 컨트롤러 기능은 Offset 00h에서 시작됩니다.
VS
컨트롤러 구현에서 지원하는 NVM Express 사양의 주 버전과 부 버전을 나타내는 NVME_VERSION 구조체입니다. 사양의 유효한 버전은 1.0, 1.1 및 1.2입니다.
버전 VS 레지스터는 Offset 08h에서 시작됩니다.
INTMS
인터럽트 벡터가 인터럽트를 생성하거나 MSI 기능 구조에서 보류 중인 인터럽트를 보고하지 못하도록 마스킹되는지 여부를 나타냅니다.
1 값이 필드의 비트에 기록되면 해당 인터럽트 벡터가 인터럽트를 생성하거나 MSI 기능 구조에서 보류 중인 인터럽트를 보고하지 못하도록 마스킹됩니다. 비트에 0 작성하는 것은 효과가 없습니다.
읽을 때 이 필드는 컨트롤러 내에서 현재 인터럽트 마스크 값을 반환합니다(이 레지스터의 값이 아님). 비트에 1값이 있으면 해당 인터럽트 벡터가 마스킹됩니다. 비트에 0값이 있으면 해당 인터럽트 벡터가 마스킹되지 않습니다.
이 레지스터는 핀 기반 인터럽트, 단일 메시지 MSI 또는 여러 메시지 MSI를 사용할 때 인터럽트 마스크에 사용됩니다. MSI-X를 사용하는 경우 MSI-X 일부로 정의된 인터럽트 마스크 테이블을 사용하여 인터럽트를 마스킹해야 합니다. 호스트 소프트웨어는 MSI-X용으로 구성된 경우 이 레지스터에 액세스해서는 안 됩니다. MSI-X 대해 구성된 경우의 모든 액세스는 정의되지 않습니다.
인터럽트 마스크 집합 INTMS 레지스터는 Offset 0Ch에서 시작됩니다.
INTMC
인터럽트 벡터가 마스킹되는지 여부를 나타냅니다.
1 값이 필드의 비트에 기록되면 해당 인터럽트 벡터의 마스크가 해제됩니다. 비트에 0 작성하는 것은 효과가 없습니다.
읽을 때 이 필드는 컨트롤러 내에서 현재 인터럽트 마스크 값을 반환합니다(이 레지스터의 값이 아님). 비트에 1값이 있는 경우 해당 인터럽트 벡터가 마스킹되고 비트에 0값이 있는 경우 해당 인터럽트 벡터가 마스킹되지 않습니다.
이 레지스터는 핀 기반 인터럽트, 단일 메시지 MSI 또는 여러 메시지 MSI를 사용할 때 인터럽트 마스크를 해제하는 데 사용됩니다. MSI-X를 사용하는 경우 MSI-X 일부로 정의된 인터럽트 마스크 테이블을 사용하여 인터럽트 마스크를 해제해야 합니다. 호스트 소프트웨어는 MSI-X용으로 구성된 경우 이 레지스터에 액세스해서는 안 됩니다. MSI-X 대해 구성된 경우의 모든 액세스는 정의되지 않습니다.
인터럽트 마스크 지우기 INTMS 레지스터는 Offset 10h에서 시작됩니다.
CC
컨트롤러에 대한 읽기/쓰기 구성 설정을 포함하는 NVME_CONTROLLER_CONFIGURATION 구조체입니다.
호스트 소프트웨어는 사용(EN) 필드를 설정하여 컨트롤러를 사용하도록 설정하기 전에 NVME_CONTROLLER_CONFIGURATION 중재 메커니즘(AMS), 메모리 페이지 크기(MPS) 및 명령 집합(1) 필드를 유효한 값으로 설정해야 합니다.
컨트롤러 구성 CC 레지스터는 Offset 14h에서 시작됩니다.
Reserved0
오프셋 18h는 예약되어 있습니다.
모든 예약 레지스터 및 레지스터 내의 모든 예약된 비트는 읽기 전용이며 읽을 때 0h 반환되지만 소프트웨어는 반환되는 0h 의존해서는 안 됩니다.
CSTS
컨트롤러 상태를 나타내는 NVME_CONTROLLER_STATUS 구조체입니다.
컨트롤러 상태 CSTS 레지스터는 Offset 1Ch에서 시작됩니다.
NSSR
호스트 소프트웨어에 NVM 하위 시스템 재설정을 시작하는 기능을 제공하는 NVME_NVM_SUBSYSTEM_RESET 구조체입니다.
이 선택적 레지스터에 대한 지원은 컨트롤러 기능NVM 하위 시스템 재설정 지원(NSSRS) 필드의 상태로 표시됩니다. 레지스터가 지원되지 않으면 레지스터가 차지하는 주소 범위가 예약됩니다.
(선택 사항) NVM 하위 시스템 재설정 레지스터는 Offset 20h에서 시작됩니다.
AQA
관리자 제출 큐 및 관리자 완료 큐에 대한 관리 큐 특성을 지정하는 NVME_ADMIN_QUEUE_ATTRIBUTES 구조체입니다.
AQA 레지스터에 관리 큐 특성은 Offset 24h에서 시작됩니다.
ASQ
관리자 제출 큐의 기본 메모리 주소를 지정하는 NVME_ADMIN_SUBMISSION_QUEUE_BASE_ADDRESS 구조체입니다.
관리자 제출 큐 기본 주소 레지스터는 Offset 28h에서 시작됩니다.
ACQ
관리 완료 큐의 기본 메모리 주소를 지정하는 NVME_ADMIN_COMPLETION_QUEUE_BASE_ADDRESS 구조체입니다.
관리자 완료 큐 기본 주소 레지스터는 Offset 30h에서 시작됩니다.
CMBLOC
컨트롤러 메모리 버퍼의 위치를 지정하는 NVME_CONTROLLER_MEMORY_BUFFER_LOCATION 구조체입니다.
CMBSZ 값이 0경우 이 레지스터는 예약됩니다.
(선택 사항) 컨트롤러 메모리 버퍼 위치 레지스터는 오프셋 38h에서 시작됩니다.
CMBSZ
컨트롤러 메모리 버퍼의 크기를 지정하는 NVME_CONTROLLER_MEMORY_BUFFER_SIZE 구조체입니다.
컨트롤러가 컨트롤러 메모리 버퍼 기능을 지원하지 않는 경우 이 레지스터는 0h지워집니다.
(선택 사항) 컨트롤러 메모리 버퍼 크기 레지스터는 오프셋 3Ch에서 시작됩니다.
Reserved2[944]
오프셋 40h에서 EFFh로 예약됩니다.
모든 예약 레지스터 및 레지스터 내의 모든 예약된 비트는 읽기 전용이며 읽을 때 0h 반환되지만 소프트웨어는 반환되는 0h 의존해서는 안 됩니다.
Reserved3[64]
오프셋 F00h에서 FFFh로의 오프셋은 명령 집합 특정 레지스터용으로 예약되어 있습니다.
모든 예약 레지스터 및 레지스터 내의 모든 예약된 비트는 읽기 전용이며 읽을 때 0h 반환되지만 소프트웨어는 반환되는 0h 의존해서는 안 됩니다.
Doorbells[0]
첫 번째 초인종 레지스터의 시작을 지정합니다. 관리자 제출 큐 Tail Doorbell.
발언
컨트롤러 레지스터는 순서 내 액세스 및 가변 액세스 너비를 지원하는 메모리 공간에 매핑되는 메모리 레지스터(MLBAR)/MUBAR(메모리 레지스터 상한 기준 주소) 레지스터(PCI BAR0 및 BAR1)에 있습니다. 많은 컴퓨터 아키텍처에서 메모리 공간을 복구할 수 없는 것으로 지정하면 이 동작이 생성됩니다.
호스트는 잠긴 액세스를 발급해서는 안 되며 네이티브 너비 또는 정렬된 32비트 액세스에서 레지스터에 액세스해야 합니다. 이러한 호스트 요구 사항 중 하나를 위반하면 정의되지 않은 동작이 발생합니다.
공급업체별 주소 범위는 컨트롤러에서 지원하는 마지막 초인종 이후에 시작되며 BAR0/1 지원 범위의 끝까지 계속됩니다. 공급업체별 주소 범위의 시작은 동일한 위치에서 시작되며 할당된 초인종 수에 종속되지 않습니다.
둘 이상의 레지스터 부분을 대상으로 하는 액세스는 지원되지 않습니다.
요구 사항
| 요구 | 값 |
|---|---|
| 지원되는 최소 클라이언트 | Windows 10 |
| 헤더 | nvme.h |