estructura NVME_IDENTIFY_NAMESPACE_DATA (nvme.h)

Contiene valores que indican funcionalidades y configuraciones específicas de un espacio de nombres determinado.

Las funcionalidades y la configuración que son comunes a todos los espacios de nombres se encuentran en la estructura de datos NVME_IDENTIFY_NAMESPACE_DATA para el espacio de nombres con el identificador de espacio de nombres de 0xFFFFFFFF.

El archivo de encabezado nvme.h define la constante NVME_NAMESPACE_ALL con un valor de 0xFFFFFFFF.

Si el controlador admite La administración de espacios de nombres y el campo Identificador de espacio de nombres (NSID) de la estructura de NVME_COMMAND se establece en NVME_NAMESPACE_ALL, el controlador devuelve una estructura de datos NVME_IDENTIFY_NAMESPACE_DATA que especifica las funcionalidades comunes en todos los espacios de nombres.

Sintaxis

typedef struct {
  ULONGLONG                    NSZE;
  ULONGLONG                    NCAP;
  ULONGLONG                    NUSE;
  struct {
    UCHAR ThinProvisioning : 1;
    UCHAR NameSpaceAtomicWriteUnit : 1;
    UCHAR DeallocatedOrUnwrittenError : 1;
    UCHAR SkipReuseUI : 1;
    UCHAR NameSpaceIoOptimization : 1;
    UCHAR Reserved : 3;
  } NSFEAT;
  UCHAR                        NLBAF;
  struct {
    UCHAR LbaFormatIndex : 4;
    UCHAR MetadataInExtendedDataLBA : 1;
    UCHAR Reserved : 3;
  } FLBAS;
  struct {
    UCHAR MetadataInExtendedDataLBA : 1;
    UCHAR MetadataInSeparateBuffer : 1;
    UCHAR Reserved : 6;
  } MC;
  struct {
    UCHAR ProtectionInfoType1 : 1;
    UCHAR ProtectionInfoType2 : 1;
    UCHAR ProtectionInfoType3 : 1;
    UCHAR InfoAtBeginningOfMetadata : 1;
    UCHAR InfoAtEndOfMetadata : 1;
    UCHAR Reserved : 3;
  } DPC;
  struct {
    UCHAR ProtectionInfoTypeEnabled : 3;
    UCHAR InfoAtBeginningOfMetadata : 1;
    UCHAR Reserved : 4;
  } DPS;
  struct {
    UCHAR SharedNameSpace : 1;
    UCHAR Reserved : 7;
  } NMIC;
  NVM_RESERVATION_CAPABILITIES RESCAP;
  struct {
    UCHAR PercentageRemained : 7;
    UCHAR Supported : 1;
  } FPI;
  struct {
    UCHAR ReadBehavior : 3;
    UCHAR WriteZeroes : 1;
    UCHAR GuardFieldWithCRC : 1;
    UCHAR Reserved : 3;
  } DLFEAT;
  USHORT                       NAWUN;
  USHORT                       NAWUPF;
  USHORT                       NACWU;
  USHORT                       NABSN;
  USHORT                       NABO;
  USHORT                       NABSPF;
  USHORT                       NOIOB;
  UCHAR                        NVMCAP[16];
  USHORT                       NPWG;
  USHORT                       NPWA;
  USHORT                       NPDG;
  USHORT                       NPDA;
  USHORT                       NOWS;
  USHORT                       MSSRL;
  ULONG                        MCL;
  UCHAR                        MSRC;
  UCHAR                        Reserved2[11];
  ULONG                        ANAGRPID;
  UCHAR                        Reserved3[3];
  struct {
    UCHAR WriteProtected : 1;
    UCHAR Reserved : 7;
  } NSATTR;
  USHORT                       NVMSETID;
  USHORT                       ENDGID;
  UCHAR                        NGUID[16];
  UCHAR                        EUI64[8];
  NVME_LBA_FORMAT              LBAF[16];
  UCHAR                        Reserved4[192];
  UCHAR                        VS[3712];
} NVME_IDENTIFY_NAMESPACE_DATA, *PNVME_IDENTIFY_NAMESPACE_DATA;

Miembros

NSZE

Indica el tamaño total del espacio de nombres en bloques lógicos.

Un espacio de nombres de tamaño n consta de dirección de bloque lógico (LBA) 0 a través (n - 1)de . El número de bloques lógicos se basa en el tamaño LBA con formato. Este campo no está definido antes de que se dé formato al espacio de nombres.

NCAP

Indica el número máximo de bloques lógicos que se pueden asignar en el espacio de nombres en cualquier momento dado.

El número de bloques lógicos se basa en el tamaño LBA con formato. Este campo no está definido antes de que se dé formato al espacio de nombres.

El campo NCAP se usa en el caso del aprovisionamiento fino e informa de un valor menor o igual que el tamaño del espacio de nombres (NSZE).

Los LBAs de repuesto no se notifican como parte de este campo. Un valor de 0h para Namespace Capacity (NCAP) indica que el identificador del espacio de nombres es un identificador de espacio de nombres inactivo. Se asigna un bloque lógico cuando se escribe con un comando Write o Write Uncorrectable. Un bloque lógico se puede desasignar mediante el comando Administración de conjuntos de datos .

NUSE

Indica el número actual de bloques lógicos asignados en el espacio de nombres.

El valor de este campo es menor o igual que el valor del campo Capacidad de espacio de nombres NCAP .

El número de bloques lógicos se basa en el tamaño LBA con formato. Cuando se usa el conjunto de comandos NVM: se asigna un bloque lógico cuando se escribe con un comando Write o Write Uncorrectable. Un bloque lógico se puede desasignar mediante el comando Administración de conjuntos de datos .

Un controlador puede notificar un valor NUSE igual a un valor NCAP en todo momento si el producto no está destinado a entornos de aprovisionamiento fino.

NSFEAT

Estructura de características de espacio de nombres (NSFEAT) que contiene campos que definen características del espacio de nombres.

NSFEAT.ThinProvisioning

El bit 0 de la estructura NSFEAT indica si el espacio de nombres admite el aprovisionamiento fino.

Cuando este valor se establece 1en , el espacio de nombres admite el aprovisionamiento fino. En concreto, la capacidad del espacio de nombres (NCAP) notificada puede ser menor que el tamaño del espacio de nombres (NSZE). Cuando se admite esta característica y se admite el comando Administración de conjuntos de datos, la desasignación de lbAs se reflejará en el campo Uso del espacio de nombres (NUSE).

Cuando este valor se borra en 0, indica que no se admite el aprovisionamiento fino y los campos NSZE y NCAP notifican el mismo valor.

NSFEAT.NameSpaceAtomicWriteUnit

El bit 1 de la estructura NSFEAT indica si los parámetros de límite atómicos del espacio de nombres se definen para este espacio de nombres.

Cuando este valor se establece 1en , los campos NAWUN, NAWUPF y NACWU se definen para este espacio de nombres y el host debe usarse para este espacio de nombres en lugar de los campos AWUN, AWUPF y ACWU en la estructura de datos identificar controlador.

Cuando este valor se borra en 0, el controlador no admite los campos NAWUN, NAWUPF y NACWU para este espacio de nombres. En este caso, el host debe usar los campos AWUN, AWUPF y ACWU definidos en la estructura de datos del controlador de identificación.

NSFEAT.DeallocatedOrUnwrittenError

El bit 2 de la estructura NSFEAT indica si el controlador admite el error de bloque lógico desasignado o no escrito para este espacio de nombres.

Cuando este valor se establece 1en , el controlador admite el error Desasignado o Bloque lógico no escrito (NVME_STATUS_NVM_DEALLOCATED_OR_UNWRITTEN_LOGICAL_BLOCK) para este espacio de nombres. Cuando este valor se borra en 0, el controlador no admite el error NVME_STATUS_NVM_DEALLOCATED_OR_UNWRITTEN_LOGICAL_BLOCK para este espacio de nombres.

NSFEAT.SkipReuseUI

El bit 3 de la estructura NFEAT es un valor para la característica Omitir reutilización de la interfaz de usuario.

NSFEAT.NameSpaceIoOptimization

NSFEAT.Reserved

Se reservan los bits 4:7 de la estructura DE LA NSFEAT .

NLBAF

Define el número de combinaciones de tamaño de datos LBA y tamaño de metadatos admitidos por el espacio de nombres.

Los formatos LBA se asignan en orden (a partir de 0) y se empaquetan secuencialmente. Este es un valor basado en 0. El número máximo de formatos LBA que se pueden indicar como admitidos es 16.

Los formatos LBA admitidos se indican en el campo LBAF (bytes 128 – 191 de esta estructura de datos). Los metadatos se pueden transferir como parte del LBA (creando un LBA extendido que es un tamaño LBA mayor que se expone a la aplicación) o se puede transferir como un búfer contiguo independiente de datos. Los metadatos no se pueden dividir entre el LBA y un búfer de metadatos independiente.

Se recomienda que el software y los controladores pasen a un tamaño LBA de 4 KB o mayor para la eficiencia ECC en el controlador. Si proporciona metadatos, se recomienda proporcionar al menos 8 bytes por bloque lógico para habilitar el uso con protección de datos de un extremo a otro.

FLBAS

Estructura de tamaño LBA con formato (FLBAS) que contiene campos que indican la combinación de tamaño de datos LBA y tamaño de metadatos con la que se ha formateado el espacio de nombres.

FLBAS.LbaFormatIndex

Los bits 0:3 de la estructura FLBAS especifican uno de los 16 formatos LBA admitidos indicados en esta estructura de datos.

FLBAS.MetadataInExtendedDataLBA

El bit 4 de la estructura FLBAS indica si los metadatos se transfieren al final del LBA de datos, creando un LBA de datos extendidos.

Cuando este valor se establece 1en , los metadatos se transfieren al final del LBA de datos, creando un LBA de datos extendido. Cuando este valor se borra en 0, indica que todos los metadatos de un comando se transfieren como un búfer contiguo independiente de datos.

El bit 4 no es aplicable cuando no hay metadatos.

FLBAS.Reserved

Los bits 5:7 de la estructura FLBAS están reservados .

MC

Estructura de funcionalidades de metadatos (MC) que contiene campos que indican las funcionalidades de los metadatos.

MC.MetadataInExtendedDataLBA

El bit 0 de la estructura de MC indica si el espacio de nombres admite los metadatos que se transfieren como parte de un LBA de datos extendidos.

Cuando este valor se establece 1en , el espacio de nombres admite los metadatos que se transfieren como parte de un LBA de datos extendidos. Cuando este valor se borra en 0, indica que el espacio de nombres no admite los metadatos que se transfieren como parte de un LBA de datos extendidos.

MC.MetadataInSeparateBuffer

El bit 1 de la estructura de MC indica si el espacio de nombres admite los metadatos que se transfieren como parte de un búfer independiente.

Cuando este valor se establece 1en , el espacio de nombres admite los metadatos que se transfieren como parte de un búfer independiente especificado en el campo Puntero de metadatos (MPTR) de la estructura Command . Cuando este valor se borra en 0, el espacio de nombres no admite los metadatos que se transfieren como parte de un búfer independiente.

MC.Reserved

Los bits 7:2 de la estructura mc están reservados.

DPC

Estructura de funcionalidades de protección de datos (DPC) de un extremo a otro que contiene campos que indican las funcionalidades de la característica de protección de datos de un extremo a otro.

Se pueden establecer varios bits en este campo.

DPC.ProtectionInfoType1

El bit 0 de la estructura DPC indica si el espacio de nombres admite el tipo de información de protección 1.

Cuando este valor se establece 1en , el espacio de nombres admite el tipo de información de protección 1. Cuando este valor se borra en 0, el espacio de nombres no admite el tipo de información de protección 1.

DPC.ProtectionInfoType2

El bit 1 de la estructura DPC indica si el espacio de nombres admite el tipo de información de protección 2.

Cuando este valor se establece 1en , el espacio de nombres admite el tipo de información de protección 2. Cuando este valor se borra en 0, el espacio de nombres no admite el tipo de información de protección 2.

DPC.ProtectionInfoType3

El bit 2 de la estructura DPC indica si el espacio de nombres admite el tipo de información de protección 3.

Cuando este valor se establece 1en , el espacio de nombres admite el tipo de información de protección 3. Cuando este valor se borra en 0, el espacio de nombres no admite el tipo de información de protección 3.

DPC.InfoAtBeginningOfMetadata

El bit 3 de la estructura DPC indica si el espacio de nombres admite la información de protección transferida como los primeros ocho bytes de metadatos.

Cuando este valor se establece 1en , el espacio de nombres admite la información de protección transferida como los primeros ocho bytes de metadatos. Cuando este valor se borra en 0, el espacio de nombres no admite la información de protección transferida como los primeros ocho bytes de metadatos.

DPC.InfoAtEndOfMetadata

El bit 4 de la estructura DPC indica si el espacio de nombres admite la información de protección transferida como los últimos ocho bytes de metadatos.

Cuando este valor se establece 1en , el espacio de nombres admite la información de protección transferida como los últimos ocho bytes de metadatos. Cuando este valor se borra en 0, el espacio de nombres no admite la información de protección transferida como los últimos ocho bytes de metadatos.

DPC.Reserved

Los bits 7:5 de la estructura DPC están reservados.

DPS

Estructura de configuración de tipo de protección de datos (DPS) de un extremo a otro que contiene campos que indican la configuración de tipo para la característica de protección de datos de un extremo a otro.

NVME_PROTECTION_INFORMATION_TYPES

DPS.ProtectionInfoTypeEnabled

Bits 2:0 de la estructura DPS es un valor de NVME_PROTECTION_INFORMATION_TYPES que indica si la información de protección está habilitada y el tipo de información de protección habilitada.

DPS.InfoAtBeginningOfMetadata

El bit 3 de la estructura de DPS indica si la información de protección, si está habilitada, se transfiere como los primeros ocho bytes de metadatos.

Cuando este valor se establece 1en , la información de protección, si está habilitada, se transfiere como los primeros ocho bytes de metadatos. Cuando este valor se borra en 0, la información de protección, si está habilitada, se transfiere como los últimos ocho bytes de metadatos.

DPS.Reserved

Se reservan los bits 7:4 de la estructura DPS .

NMIC

Una estructura de E/S multiruta de espacio de nombres y funcionalidades de uso compartido de espacios de nombres (NMIC) que contiene campos que especifican la E/S de múltiples rutas y las funcionalidades de uso compartido de espacios de nombres del espacio de nombres.

NMIC.SharedNameSpace

El bit 0 de la estructura NMIC indica si el espacio de nombres puede ser un espacio de nombres compartido.

Cuando este valor se establece 1en , el espacio de nombres puede ser accesible por dos o más controladores en el subsistema NVM. Cuando este valor se borra en 0, el espacio de nombres es un espacio de nombres privado y solo el controlador al que devolvió esta estructura de datos de espacio de nombres puede acceder a él.

NMIC.Reserved

Se reservan los bits 7:1 de la estructura NMIC .

RESCAP

Estructura de funcionalidades de reserva (RESCAP) que contiene campos que especifican las funcionalidades de reserva del espacio de nombres.

Un valor de 00h en este campo indica que este espacio de nombres no admite reservas.

FPI

Estructura indicador de progreso de formato (FPI) que contiene campos que indican el porcentaje del espacio de nombres al que se sigue formateado cuando una operación de formato está en curso.

FPI.PercentageRemained

Los bits 0:6 de la estructura FPI indican el porcentaje del espacio de nombres que debe tener formato. Por ejemplo, un valor de 25 indica que se ha formateado el 75 % del espacio de nombres y el 25 % sigue siendo formateado.

Un valor de 0 indica que el espacio de nombres tiene el formato especificado por los campos FLBAS y DPS de esta estructura de datos.

FPI.Supported

El bit 7 de la estructura FPI indica si el espacio de nombres admite el indicador de progreso de formato definido por el FPI. Campo PercentageRemained .

Cuando este valor se establece 1en , el espacio de nombres admite el indicador de progreso de formato definido por el FPI. Campo PercentageRemained . Cuando este valor se borra en 0, el espacio de nombres no admite el indicador de progreso de formato y el FPI. El campo PercentageRemained se borrará en 0h.

DLFEAT

DLFEAT.ReadBehavior

DLFEAT.WriteZeroes

DLFEAT.GuardFieldWithCRC

DLFEAT.Reserved

NAWUN

Indica el tamaño específico del espacio de nombres de la operación de escritura que se garantiza que se va a escribir de forma atómica en nvM durante el funcionamiento normal.

Un valor de indica que el tamaño de 0h este espacio de nombres es el mismo que el notificado en el campo AWUN de la estructura de datos Identificar controlador . Todos los demás valores especifican un tamaño en términos de bloques lógicos que usan la misma codificación que el campo AWUN .

NAWUPF

Indica el tamaño específico del espacio de nombres de la operación de escritura que se garantiza que se escribirá de forma atómica en el NVM durante una condición de error de alimentación o error.

Un valor de indica que el tamaño de 0h este espacio de nombres es el mismo que el notificado en el campo AWUPF de la estructura de datos Identificar controlador . Todos los demás valores especifican un tamaño en términos de bloques lógicos que usan la misma codificación que el campo AWUPF .

NACWU

Indica el tamaño específico del espacio de nombres de la operación de escritura que se garantiza que se escribirá de forma atómica en el NVM para un comando Compare y Write fusionado.

Un valor de indica que el tamaño de 0h este espacio de nombres es el mismo que el notificado en el campo ACWU de la estructura identificar datos del controlador . Todos los demás valores especifican un tamaño en términos de bloques lógicos que usan la misma codificación que el campo ACWU .

NABSN

Indica el tamaño de límite atómico para este espacio de nombres para el valor NAWUN .

Este campo se especifica en bloques lógicos. No se garantiza que las escrituras en este espacio de nombres crucen límites atómicos sean atómicas para nvM con respecto a otros comandos de lectura o escritura.

Un valor de 0h indica que no hay límites atómicos para las operaciones de escritura normales. Todos los demás valores especifican un tamaño en términos de bloques lógicos que usan la misma codificación que el campo AWUN .

NABO

Indica la dirección de bloque lógico (LBA) en este espacio de nombres donde comienza el primer límite atómico.

Si los campos NABSN y NABSPF se borran a 0h, el campo NABO se borra a 0h. El valor de NABO debe ser menor o igual que NABSN y NABSPF.

NABSPF

Indica el tamaño de límite atómico para este espacio de nombres específico del valor de Error de energía de unidad de escritura atómica del espacio de nombres.

Este campo se especifica en bloques lógicos. No se garantiza que las escrituras en este espacio de nombres crucen límites atómicos sean atómicas con respecto a otros comandos de lectura o escritura y no hay ninguna garantía de los datos devueltos en las lecturas posteriores de los bloques lógicos asociados.

Un valor de 0h indica que no hay límites atómicos para las condiciones de error o error de energía. Todos los demás valores especifican un tamaño en términos de bloques lógicos que usan la misma codificación que el campo AWUPF .

NOIOB

Indica el límite de E/S óptimo del espacio de nombres (NOIOB).

NVMCAP[16]

Indica el tamaño total del NVM asignado a este espacio de nombres.

El valor de este campo está en bytes. Este campo se admite si se admiten los comandos Administración de espacios de nombres y Datos adjuntos del espacio de nombres.

Nota: Este campo puede no corresponder al tamaño de bloque lógico multiplicado por el campo Tamaño del espacio de nombres (NSZE). Debido al aprovisionamiento fino u otros ajustes (por ejemplo, resistencia), este campo puede ser mayor o menor que el NSZE notificado.

NPWG

NPWA

NPDG

NPDA

NOWS

MSSRL

MCL

MSRC

Reserved2[11]

Campo reservado.

ANAGRPID

Reserved3[3]

Se reservan los bytes 192:383A.

NSATTR

NSATTR.WriteProtected

NSATTR.Reserved

NVMSETID

Indica el identificador de conjunto de NVM asociado (NVMSETID).

ENDGID

Indica el identificador de grupo de resistencia asociado (ENDGID).

NGUID[16]

Contiene un valor de 128 bits que es único globalmente y se asigna al espacio de nombres cuando se crea el espacio de nombres.

El campo Identificador único global del espacio de nombres (NGUID) permanece fijo durante toda la vida del espacio de nombres y se conserva en las operaciones de espacio de nombres y controlador (como el restablecimiento del controlador y el formato del espacio de nombres).

Este campo usa el formato de designador de 16 bytes basado en la UEI-64.

  • Los bytes 114:112 contienen el valor de company_id de 24 bits asignado por la autoridad de registro ieee.
  • Los bytes 119:115 contienen un identificador de extensión asignado por la organización correspondiente.
  • Los bytes 111:104 contienen el identificador de extensión específico del proveedor asignado por la organización correspondiente.

Consulte las directrices ieee EUI-64 para obtener más información. El controlador debe especificar un identificador de espacio de nombres único global en este campo o el campo EUI64 cuando se crea el espacio de nombres.

EUI64[8]

Contiene un identificador único extendido ieee de 64 bits (EUI-64) que es único globalmente y asignado al espacio de nombres cuando se crea el espacio de nombres.

El campo EUI64 permanece fijo a lo largo de la vida útil del espacio de nombres y se conserva en las operaciones de espacio de nombres y controlador (como el restablecimiento del controlador y el formato del espacio de nombres).

EuI-64 es una concatenación de un valor de company_id de 24 o 36 bits asignado por la autoridad de registro ieee y un identificador de extensión asignado por la organización correspondiente. Consulte las directrices ieee EUI-64 para obtener más información.

El controlador debe especificar un identificador de espacio de nombres único global en este campo o el campo NGUID cuando se crea el espacio de nombres. Si el controlador no puede asignar un identificador único global de 64 bits, este campo se borrará en 0h.

LBAF[16]

Contiene una matriz de 16 estructuras NVME_LBA_FORMAT . Cada estructura de la matriz especifica un formato LBA e indica que es compatible con el controlador.

La posición de base cero de una estructura de la matriz corresponde al nombre del formato LBA, de modo que el formato LBA 0 (LBAF0) está en la posición 0, el formato LBA 1 (LBAF1) está en la posición 1, y así sucesivamente, hasta el formato LBA 15 (LBAF15) en la posición 15.

Reserved4[192]

VS[3712]

Este intervalo de bytes (384:4095) se asigna para el uso específico del proveedor (VS).

Requisitos

Requisito Value
Cliente mínimo compatible Windows 10
Encabezado nvme.h