Skip to content

Commit cfc9f9b

Browse files
authored
Merge pull request #146 from igaw/add-ctrl-metadata-and-ns-metadata
types: Add Controller Metadata and Namespace Metadata
2 parents 765576d + f90724e commit cfc9f9b

2 files changed

Lines changed: 98 additions & 0 deletions

File tree

src/nvme/types.h

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3547,6 +3547,96 @@ enum nvme_apst_entry {
35473547
NVME_APST_ENTRY_ITPT_MASK = 0xffffff,
35483548
};
35493549

3550+
/**
3551+
* struct nvme_metadata_element_desc - Metadata Element Descriptor
3552+
* @type: Element Type (ET)
3553+
* @rev: Element Revision (ER)
3554+
* @len: Element Length (ELEN)
3555+
* @val: Element Value (EVAL), UTF-8 string
3556+
*/
3557+
struct nvme_metadata_element_desc {
3558+
__u8 type;
3559+
__u8 rev;
3560+
__u16 len;
3561+
__u8 val[0];
3562+
};
3563+
3564+
/**
3565+
* struct nvme_host_metadata - Host Metadata Data Structure
3566+
* @ndesc: Number of metadata element descriptors
3567+
* @descs: Metadata element descriptors
3568+
*/
3569+
struct nvme_host_metadata {
3570+
__u8 ndesc;
3571+
__u8 rsvd1;
3572+
union {
3573+
struct nvme_metadata_element_desc descs[0];
3574+
__u8 descs_buf[4094];
3575+
};
3576+
};
3577+
3578+
/**
3579+
* enum nvme_ctrl_metadata_type - Controller Metadata Element Types
3580+
* @NVME_CTRL_METADATA_OS_CTRL_NAME: Name of the controller in
3581+
* the operating system.
3582+
* @NVME_CTRL_METADATA_OS_DRIVER_NAME: Name of the driver in the
3583+
* operating system.
3584+
* @NVME_CTRL_METADATA_OS_DRIVER_VER: Version of the driver in
3585+
* the operating system.
3586+
* @NVME_CTRL_METADATA_PRE_BOOT_CTRL_NAME: Name of the controller in
3587+
* the pre-boot environment.
3588+
* @NVME_CTRL_METADATA_PRE_BOOT_DRIVER_NAME: Name of the driver in the
3589+
* pre-boot environment.
3590+
* @NVME_CTRL_METADATA_PRE_BOOT_DRIVER_VER: Version of the driver in the
3591+
* pre-boot environment.
3592+
* @NVME_CTRL_METADATA_SYS_PROC_MODEL: Model of the processor.
3593+
* @NVME_CTRL_METADATA_CHIPSET_DRV_NAME: Chipset driver name.
3594+
* @NVME_CTRL_METADATA_CHIPSET_DRV_VERSION: Chipsset driver version.
3595+
* @NVME_CTRL_METADATA_OS_NAME_AND_BUILD: Operating system name and build.
3596+
* @NVME_CTRL_METADATA_SYS_PROD_NAME: System product name.
3597+
* @NVME_CTRL_METADATA_FIRMWARE_VERSION: Host firmware (e.g UEFI) version.
3598+
* @NVME_CTRL_METADATA_OS_DRIVER_FILENAME: Operating system driver filename.
3599+
* @NVME_CTRL_METADATA_DISPLAY_DRV_NAME: Display driver name.
3600+
* @NVME_CTRL_METADATA_DISPLAY_DRV_VERSION: Display driver version.
3601+
* @NVME_CTRL_METADATA_HOST_DET_FAIL_REC: Failure record.
3602+
*/
3603+
enum nvme_ctrl_metadata_type {
3604+
NVME_CTRL_METADATA_OS_CTRL_NAME = 0x01,
3605+
NVME_CTRL_METADATA_OS_DRIVER_NAME = 0x02,
3606+
NVME_CTRL_METADATA_OS_DRIVER_VER = 0x03,
3607+
NVME_CTRL_METADATA_PRE_BOOT_CTRL_NAME = 0x04,
3608+
NVME_CTRL_METADATA_PRE_BOOT_DRIVER_NAME = 0x05,
3609+
NVME_CTRL_METADATA_PRE_BOOT_DRIVER_VER = 0x06,
3610+
NVME_CTRL_METADATA_SYS_PROC_MODEL = 0x07,
3611+
NVME_CTRL_METADATA_CHIPSET_DRV_NAME = 0x08,
3612+
NVME_CTRL_METADATA_CHIPSET_DRV_VERSION = 0x09,
3613+
NVME_CTRL_METADATA_OS_NAME_AND_BUILD = 0x0a,
3614+
NVME_CTRL_METADATA_SYS_PROD_NAME = 0x0b,
3615+
NVME_CTRL_METADATA_FIRMWARE_VERSION = 0x0c,
3616+
NVME_CTRL_METADATA_OS_DRIVER_FILENAME = 0x0d,
3617+
NVME_CTRL_METADATA_DISPLAY_DRV_NAME = 0x0e,
3618+
NVME_CTRL_METADATA_DISPLAY_DRV_VERSION = 0x0f,
3619+
NVME_CTRL_METADATA_HOST_DET_FAIL_REC = 0x10,
3620+
};
3621+
3622+
/**
3623+
* enum nvme_ns_metadata_type - Namespace Metadata Element Types
3624+
* @NVME_NS_METADATA_OS_NS_NAME: Name of the namespace in the the
3625+
* operating system
3626+
* @NVME_NS_METADATA_PRE_BOOT_NS_NAME: Name of the namespace in the pre-boot
3627+
* environment.
3628+
* @NVME_NS_METADATA_OS_NS_QUAL_1: First qualifier of the Operating System
3629+
* Namespace Name.
3630+
* @NVME_NS_METADATA_OS_NS_QUAL_2: Second qualifier of the Operating System
3631+
* Namespace Name.
3632+
*/
3633+
enum nvme_ns_metadata_type {
3634+
NVME_NS_METADATA_OS_NS_NAME = 0x01,
3635+
NVME_NS_METADATA_PRE_BOOT_NS_NAME = 0x02,
3636+
NVME_NS_METADATA_OS_NS_QUAL_1 = 0x03,
3637+
NVME_NS_METADATA_OS_NS_QUAL_2 = 0x04,
3638+
};
3639+
35503640
/**
35513641
* struct nvme_timestamp -
35523642
* timestamp:
@@ -5268,6 +5358,8 @@ enum nvme_cmd_get_log_lid {
52685358
* @NVME_FEAT_FID_ENDURANCE_EVT_CFG:
52695359
* @NVME_FEAT_FID_IOCS_PROFILE:
52705360
* @NVME_FEAT_FID_SPINUP_CONTROL:
5361+
* @NVME_FEAT_FID_CTRL_METADATA: Controller Metadata
5362+
* @NVME_FEAT_FID_NS_METADATA: Namespace Metadata
52715363
* @NVME_FEAT_FID_SW_PROGRESS:
52725364
* @NVME_FEAT_FID_HOST_ID:
52735365
* @NVME_FEAT_FID_RESV_MASK:
@@ -5301,6 +5393,8 @@ enum nvme_features_id {
53015393
NVME_FEAT_FID_ENDURANCE_EVT_CFG = 0x18,
53025394
NVME_FEAT_FID_IOCS_PROFILE = 0x19, /* XXX: Placeholder until assigned */
53035395
NVME_FEAT_FID_SPINUP_CONTROL = 0x1a,
5396+
NVME_FEAT_FID_CTRL_METADATA = 0x7e,
5397+
NVME_FEAT_FID_NS_METADATA = 0x7f,
53045398
NVME_FEAT_FID_SW_PROGRESS = 0x80,
53055399
NVME_FEAT_FID_HOST_ID = 0x81,
53065400
NVME_FEAT_FID_RESV_MASK = 0x82,

src/nvme/util.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,10 @@ int nvme_get_feature_length(int fid, __u32 cdw11, __u32 *len)
434434
case NVME_FEAT_FID_WRITE_PROTECT:
435435
*len = 0;
436436
break;
437+
case NVME_FEAT_FID_CTRL_METADATA:
438+
case NVME_FEAT_FID_NS_METADATA:
439+
*len = sizeof(struct nvme_host_metadata);
440+
break;
437441
default:
438442
errno = EINVAL;
439443
return -1;

0 commit comments

Comments
 (0)