Commit 8dcea39a authored by Ankit Kumar's avatar Ankit Kumar Committed by Tomasz Zawadzki
Browse files

include/nvme_spec.h: update cdata fields for controller capabilities and features



Add missing fields from identify controller data structure, for
controller capabilities and features
Update the identify examples file accordingly.
Ignore spdk_nvme_ctrlr_data ABI changes. Reserved fields
were changed, so this does not constitute an ABI/API breakage.

Signed-off-by: default avatarAnkit Kumar <ankit.kumar@samsung.com>
Change-Id: I12e622324bc1b0ebef95b854098bce133617051e
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12865


Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
parent ac5b53a5
Loading
Loading
Loading
Loading
+47 −2
Original line number Diff line number Diff line
@@ -1286,9 +1286,54 @@ print_controller(struct spdk_nvme_ctrlr *ctrlr, const struct spdk_nvme_transport
	       cdata->oaes.ns_attribute_notices ? "Supported" : "Not Supported");
	printf("  Firmware Activation Notices:         %s\n",
	       cdata->oaes.fw_activation_notices ? "Supported" : "Not Supported");

	printf("  ANA Change Notices:                  %s\n",
	       cdata->oaes.ana_change_notices ? "Supported" : "Not Supported");
	printf("  PLE Aggregate Log Change Notices:    %s\n",
	       cdata->oaes.pleal_change_notices ? "Supported" : "Not Supported");
	printf("  LBA Status Info Alert Notices:       %s\n",
	       cdata->oaes.lba_sia_notices ? "Supported" : "Not Supported");
	printf("  EGE Aggregate Log Change Notices:    %s\n",
	       cdata->oaes.egealp_change_notices ? "Supported" : "Not Supported");
	printf("  Normal NVM Subsystem Shutdown event: %s\n",
	       cdata->oaes.nnvm_sse ? "Supported" : "Not Supported");
	printf("  Zone Descriptor Change Notices:      %s\n",
	       cdata->oaes.zdes_change_notices ? "Supported" : "Not Supported");
	printf("  Discovery Log Change Notices:        %s\n",
	       cdata->oaes.discovery_log_change_notices ? "Supported" : "Not Supported");

	printf("Controller Attributes\n");
	printf("  128-bit Host Identifier:             %s\n",
	       cdata->ctratt.host_id_exhid_supported ? "Supported" : "Not Supported");
	printf("  Non-Operational Permissive Mode:     %s\n",
	       cdata->ctratt.non_operational_power_state_permissive_mode ? "Supported" : "Not Supported");
	printf("  NVM Sets:                            %s\n",
	       cdata->ctratt.nvm_sets ? "Supported" : "Not Supported");
	printf("  Read Recovery Levels:                %s\n",
	       cdata->ctratt.read_recovery_levels ? "Supported" : "Not Supported");
	printf("  Endurance Groups:                    %s\n",
	       cdata->ctratt.endurance_groups ? "Supported" : "Not Supported");
	printf("  Predictable Latency Mode:            %s\n",
	       cdata->ctratt.predictable_latency_mode ? "Supported" : "Not Supported");
	printf("  Traffic Based Keep ALive:            %s\n",
	       cdata->ctratt.tbkas ? "Supported" : "Not Supported");
	printf("  Namespace Granularity:               %s\n",
	       cdata->ctratt.namespace_granularity ? "Supported" : "Not Supported");
	printf("  SQ Associations:                     %s\n",
	       cdata->ctratt.sq_associations ? "Supported" : "Not Supported");
	printf("  UUID List:                           %s\n",
	       cdata->ctratt.uuid_list ? "Supported" : "Not Supported");
	printf("  Multi-Domain Subsystem:              %s\n",
	       cdata->ctratt.mds ? "Supported" : "Not Supported");
	printf("  Fixed Capacity Management:           %s\n",
	       cdata->ctratt.fixed_capacity_management ? "Supported" : "Not Supported");
	printf("  Variable Capacity Management:        %s\n",
	       cdata->ctratt.variable_capacity_management ? "Supported" : "Not Supported");
	printf("  Delete Endurance Group:              %s\n",
	       cdata->ctratt.delete_endurance_group ? "Supported" : "Not Supported");
	printf("  Delete NVM Set:                      %s\n",
	       cdata->ctratt.delete_nvm_set ? "Supported" : "Not Supported");
	printf("  Extended LBA Formats Supported:      %s\n",
	       cdata->ctratt.elbas ? "Supported" : "Not Supported");
	printf("\n");

	printf("Controller Memory Buffer Support\n");
+125 −26
Original line number Diff line number Diff line
@@ -1896,6 +1896,95 @@ struct spdk_nvme_cdata_fuses {
	uint16_t	reserved : 15;
};

struct spdk_nvme_cdata_oaes {
	uint32_t	reserved1 : 8;

	/* Supports sending Namespace Attribute Notices. */
	uint32_t	ns_attribute_notices : 1;

	/* Supports sending Firmware Activation Notices. */
	uint32_t	fw_activation_notices : 1;

	uint32_t	reserved2 : 1;

	/* Supports Asymmetric Namespace Access Change Notices. */
	uint32_t	ana_change_notices : 1;

	/* Supports Predictable Latency Event Aggregate Log Change Notices. */
	uint32_t	pleal_change_notices : 1;

	/* Supports LBA Status Information Alert Notices. */
	uint32_t	lba_sia_notices : 1;

	/* Supports Endurance Group Event Aggregate Log Page Change Notices. */
	uint32_t	egealp_change_notices : 1;

	/* Supports Normal NVM Subsystem Shutdown event. */
	uint32_t	nnvm_sse : 1;

	uint32_t	reserved3 : 11;

	/* Supports Zone Descriptor Change Notices (refer to the ZNS Command Set specification) */
	uint32_t	zdes_change_notices : 1;

	uint32_t	reserved4 : 3;

	/* Supports Discovery log change notices (refer to the NVMe over Fabrics specification) */
	uint32_t	discovery_log_change_notices : 1;
};

struct spdk_nvme_cdata_ctratt {
	/* Supports 128-bit host identifier */
	uint32_t	host_id_exhid_supported: 1;

	/* Supports non-operational power state permissive mode */
	uint32_t	non_operational_power_state_permissive_mode: 1;

	/* Supports NVM sets */
	uint32_t	nvm_sets: 1;

	/* Supports read recovery levels */
	uint32_t	read_recovery_levels: 1;

	/* Supports endurance groups */
	uint32_t	endurance_groups: 1;

	/* Supports predictable latency mode */
	uint32_t	predictable_latency_mode: 1;

	/* Supports traffic based keep alive */
	uint32_t	tbkas: 1;

	/* Supports reporting of namespace granularity */
	uint32_t	namespace_granularity: 1;

	/* Supports SQ associations */
	uint32_t	sq_associations: 1;

	/* Supports reporting of UUID list */
	uint32_t	uuid_list: 1;

	/* NVM subsystem supports multiple domains */
	uint32_t	mds: 1;

	/* Supports fixed capacity management */
	uint32_t	fixed_capacity_management: 1;

	/* Supports variable capacity management */
	uint32_t	variable_capacity_management: 1;

	/* Supports delete endurance group operation */
	uint32_t	delete_endurance_group: 1;

	/* Supports delete NVM set */
	uint32_t	delete_nvm_set: 1;

	/* Supports I/O command set specific extended PI formats */
	uint32_t	elbas: 1;

	uint32_t	reserved: 16;
};

struct __attribute__((packed)) spdk_nvme_ctrlr_data {
	/* bytes 0-255: controller capabilities and features */

@@ -1945,47 +2034,57 @@ struct __attribute__((packed)) spdk_nvme_ctrlr_data {
	uint32_t		rtd3e;

	/** optional asynchronous events supported */
	struct {
		uint32_t	reserved1 : 8;
	struct spdk_nvme_cdata_oaes oaes;

		/** Supports sending Namespace Attribute Notices. */
		uint32_t	ns_attribute_notices : 1;
	/** controller attributes */
	struct spdk_nvme_cdata_ctratt ctratt;

		/** Supports sending Firmware Activation Notices. */
		uint32_t	fw_activation_notices : 1;
	/** Read Recovery Levels Supported */
	uint16_t		rrls;

		uint32_t	reserved2 : 1;
	uint8_t			reserved_102[9];

		/** Supports Asymmetric Namespace Access Change Notices. */
		uint32_t	ana_change_notices : 1;
	/** Controller Type */
	uint8_t			cntrltype;

		uint32_t	reserved3 : 19;
	/** FRU globally unique identifier */
	uint8_t			fguid[16];

		/** Supports Discovery log change notices (refer to the NVMe over Fabrics specification) */
		uint32_t	discovery_log_change_notices : 1;
	/** Command Retry Delay Time 1, 2 and 3 */
	uint16_t		crdt[3];

	} oaes;
	uint8_t			reserved_134[119];

	/** controller attributes */
	/** NVM Subsystem Report */
	struct {
		/** Supports 128-bit host identifier */
		uint32_t	host_id_exhid_supported: 1;
		/* NVM Subsystem part of NVMe storage device */
		uint8_t		nvmesd : 1;

		/** Supports non-operational power state permissive mode */
		uint32_t	non_operational_power_state_permissive_mode: 1;
		/* NVM Subsystem part of NVMe enclosure */
		uint8_t		nvmee : 1;

		uint32_t	reserved: 30;
	} ctratt;
		uint8_t		nvmsr_rsvd : 6;
	} nvmsr;

	uint8_t			reserved_100[12];
	/** VPD Write Cycle Information */
	struct {
		/* VPD write cycles remaining */
		uint8_t		vwcr : 7;

	/** FRU globally unique identifier */
	uint8_t			fguid[16];
		/* VPD write cycles remaining valid */
		uint8_t		vwcrv : 1;
	} vwci;

	/** Command Retry Delay Time 1, 2 and 3 */
	uint16_t		crdt[3];
	/** Management Endpoint Capabilities */
	struct {
		/* SMBus/I2C Port management endpoint */
		uint8_t		smbusme : 1;

		/* PCIe port management endpoint */
		uint8_t		pcieme : 1;

	uint8_t			reserved_122[122];
		uint8_t		mec_rsvd : 6;
	} mec;

	/* bytes 256-511: admin command set attributes */

+2 −0
Original line number Diff line number Diff line
@@ -51,6 +51,8 @@ function confirm_abi_deps() {
	cat << EOF > ${suppression_file}
[suppress_type]
	name = spdk_nvme_power_state
[suppress_type]
	name = spdk_nvme_ctrlr_data
EOF

	for object in "$libdir"/libspdk_*.so; do