summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-05 11:06:51 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-05 11:06:51 +0000
commit46f46dcc0ad7d0cda2f41c1ccfa137d2413ff209 (patch)
tree156a2dcee1cbe550b5014eb6a0833a1cee6bda65
parentAdding debian version 1.8-3. (diff)
downloadlibnvme-46f46dcc0ad7d0cda2f41c1ccfa137d2413ff209.tar.xz
libnvme-46f46dcc0ad7d0cda2f41c1ccfa137d2413ff209.zip
Merging upstream version 1.9.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
-rw-r--r--.gitignore1
-rw-r--r--doc/api.rst.in1
-rw-r--r--doc/conf.py2
-rw-r--r--doc/config-schema.json16
-rw-r--r--doc/config-schema.json.in16
-rw-r--r--doc/man/nbft_control.22
-rw-r--r--doc/man/nbft_control_flags.22
-rw-r--r--doc/man/nbft_desc_type.22
-rw-r--r--doc/man/nbft_discovery.22
-rw-r--r--doc/man/nbft_discovery_flags.22
-rw-r--r--doc/man/nbft_header.22
-rw-r--r--doc/man/nbft_heap_obj.22
-rw-r--r--doc/man/nbft_hfi.22
-rw-r--r--doc/man/nbft_hfi_flags.22
-rw-r--r--doc/man/nbft_hfi_info_tcp.22
-rw-r--r--doc/man/nbft_hfi_info_tcp_flags.22
-rw-r--r--doc/man/nbft_host.22
-rw-r--r--doc/man/nbft_host_flags.22
-rw-r--r--doc/man/nbft_info.22
-rw-r--r--doc/man/nbft_info_discovery.22
-rw-r--r--doc/man/nbft_info_hfi.22
-rw-r--r--doc/man/nbft_info_hfi_info_tcp.22
-rw-r--r--doc/man/nbft_info_host.22
-rw-r--r--doc/man/nbft_info_nid_type.22
-rw-r--r--doc/man/nbft_info_primary_admin_host_flag.22
-rw-r--r--doc/man/nbft_info_security.22
-rw-r--r--doc/man/nbft_info_subsystem_ns.212
-rw-r--r--doc/man/nbft_security.22
-rw-r--r--doc/man/nbft_security_flags.22
-rw-r--r--doc/man/nbft_security_secret_type.22
-rw-r--r--doc/man/nbft_ssns.22
-rw-r--r--doc/man/nbft_ssns_ext_info.22
-rw-r--r--doc/man/nbft_ssns_ext_info_flags.22
-rw-r--r--doc/man/nbft_ssns_flags.22
-rw-r--r--doc/man/nbft_ssns_trflags.22
-rw-r--r--doc/man/nbft_trtype.22
-rw-r--r--doc/man/nvme_acq.212
-rw-r--r--doc/man/nvme_admin_opcode.22
-rw-r--r--doc/man/nvme_admin_passthru.22
-rw-r--r--doc/man/nvme_admin_passthru64.22
-rw-r--r--doc/man/nvme_ae_info_css_nvm.22
-rw-r--r--doc/man/nvme_ae_info_error.22
-rw-r--r--doc/man/nvme_ae_info_notice.22
-rw-r--r--doc/man/nvme_ae_info_smart.22
-rw-r--r--doc/man/nvme_ae_type.22
-rw-r--r--doc/man/nvme_aggregate_endurance_group_event.22
-rw-r--r--doc/man/nvme_aggregate_predictable_lat_event.22
-rw-r--r--doc/man/nvme_ana_group_desc.22
-rw-r--r--doc/man/nvme_ana_log.22
-rw-r--r--doc/man/nvme_ana_state.22
-rw-r--r--doc/man/nvme_apst_entry.22
-rw-r--r--doc/man/nvme_aqa.230
-rw-r--r--doc/man/nvme_asq.212
-rw-r--r--doc/man/nvme_boot_partition.22
-rw-r--r--doc/man/nvme_boot_partition_info.234
-rw-r--r--doc/man/nvme_bpinfo.266
-rw-r--r--doc/man/nvme_bpmbl.212
-rw-r--r--doc/man/nvme_bprsel.242
-rw-r--r--doc/man/nvme_cap.2252
-rw-r--r--doc/man/nvme_capacity_config_desc.22
-rw-r--r--doc/man/nvme_capacity_mgmt.22
-rw-r--r--doc/man/nvme_cc.2168
-rw-r--r--doc/man/nvme_change_ns_event.22
-rw-r--r--doc/man/nvme_channel_config_desc.22
-rw-r--r--doc/man/nvme_cmb_size.22
-rw-r--r--doc/man/nvme_cmbebs.266
-rw-r--r--doc/man/nvme_cmbloc.2102
-rw-r--r--doc/man/nvme_cmbmsc.236
-rw-r--r--doc/man/nvme_cmbsts.218
-rw-r--r--doc/man/nvme_cmbswtp.254
-rw-r--r--doc/man/nvme_cmbsz.2132
-rw-r--r--doc/man/nvme_cmd_effects.22
-rw-r--r--doc/man/nvme_cmd_effects_log.22
-rw-r--r--doc/man/nvme_cmd_format_mset.22
-rw-r--r--doc/man/nvme_cmd_format_pi.22
-rw-r--r--doc/man/nvme_cmd_format_pil.22
-rw-r--r--doc/man/nvme_cmd_format_ses.22
-rw-r--r--doc/man/nvme_cmd_get_log_lid.28
-rw-r--r--doc/man/nvme_cmd_get_log_telemetry_host_lsp.22
-rw-r--r--doc/man/nvme_cmic.266
-rw-r--r--doc/man/nvme_compare.22
-rw-r--r--doc/man/nvme_connect_err.22
-rw-r--r--doc/man/nvme_constants.22
-rw-r--r--doc/man/nvme_copy.22
-rw-r--r--doc/man/nvme_copy_range.22
-rw-r--r--doc/man/nvme_copy_range_f1.22
-rw-r--r--doc/man/nvme_copy_range_f2.22
-rw-r--r--doc/man/nvme_copy_range_f3.22
-rw-r--r--doc/man/nvme_copy_range_sopt.22
-rw-r--r--doc/man/nvme_create_ctrl.22
-rw-r--r--doc/man/nvme_create_root.22
-rw-r--r--doc/man/nvme_crto.230
-rw-r--r--doc/man/nvme_csi.22
-rw-r--r--doc/man/nvme_csts.2102
-rw-r--r--doc/man/nvme_ctrl_config_match.22
-rw-r--r--doc/man/nvme_ctrl_find.22
-rw-r--r--doc/man/nvme_ctrl_first_ns.22
-rw-r--r--doc/man/nvme_ctrl_first_path.22
-rw-r--r--doc/man/nvme_ctrl_for_each_ns.22
-rw-r--r--doc/man/nvme_ctrl_for_each_ns_safe.22
-rw-r--r--doc/man/nvme_ctrl_for_each_path.22
-rw-r--r--doc/man/nvme_ctrl_for_each_path_safe.22
-rw-r--r--doc/man/nvme_ctrl_get_address.22
-rw-r--r--doc/man/nvme_ctrl_get_config.22
-rw-r--r--doc/man/nvme_ctrl_get_dhchap_host_key.22
-rw-r--r--doc/man/nvme_ctrl_get_dhchap_key.22
-rw-r--r--doc/man/nvme_ctrl_get_fd.22
-rw-r--r--doc/man/nvme_ctrl_get_firmware.22
-rw-r--r--doc/man/nvme_ctrl_get_host_iface.22
-rw-r--r--doc/man/nvme_ctrl_get_host_traddr.22
-rw-r--r--doc/man/nvme_ctrl_get_model.22
-rw-r--r--doc/man/nvme_ctrl_get_name.22
-rw-r--r--doc/man/nvme_ctrl_get_numa_node.22
-rw-r--r--doc/man/nvme_ctrl_get_phy_slot.22
-rw-r--r--doc/man/nvme_ctrl_get_queue_count.22
-rw-r--r--doc/man/nvme_ctrl_get_serial.22
-rw-r--r--doc/man/nvme_ctrl_get_sqsize.22
-rw-r--r--doc/man/nvme_ctrl_get_src_addr.22
-rw-r--r--doc/man/nvme_ctrl_get_state.22
-rw-r--r--doc/man/nvme_ctrl_get_subsysnqn.22
-rw-r--r--doc/man/nvme_ctrl_get_subsystem.22
-rw-r--r--doc/man/nvme_ctrl_get_sysfs_dir.22
-rw-r--r--doc/man/nvme_ctrl_get_traddr.22
-rw-r--r--doc/man/nvme_ctrl_get_transport.22
-rw-r--r--doc/man/nvme_ctrl_get_trsvcid.22
-rw-r--r--doc/man/nvme_ctrl_identify.22
-rw-r--r--doc/man/nvme_ctrl_is_discovered.22
-rw-r--r--doc/man/nvme_ctrl_is_discovery_ctrl.22
-rw-r--r--doc/man/nvme_ctrl_is_persistent.22
-rw-r--r--doc/man/nvme_ctrl_is_unique_discovery_ctrl.22
-rw-r--r--doc/man/nvme_ctrl_list.22
-rw-r--r--doc/man/nvme_ctrl_metadata_type.22
-rw-r--r--doc/man/nvme_ctrl_next_ns.22
-rw-r--r--doc/man/nvme_ctrl_next_path.22
-rw-r--r--doc/man/nvme_ctrl_release_fd.22
-rw-r--r--doc/man/nvme_ctrl_reset.22
-rw-r--r--doc/man/nvme_ctrl_set_dhchap_host_key.22
-rw-r--r--doc/man/nvme_ctrl_set_dhchap_key.22
-rw-r--r--doc/man/nvme_ctrl_set_discovered.22
-rw-r--r--doc/man/nvme_ctrl_set_discovery_ctrl.22
-rw-r--r--doc/man/nvme_ctrl_set_persistent.22
-rw-r--r--doc/man/nvme_ctrl_set_unique_discovery_ctrl.22
-rw-r--r--doc/man/nvme_ctrls_filter.22
-rw-r--r--doc/man/nvme_data_tfr.22
-rw-r--r--doc/man/nvme_default_host.22
-rw-r--r--doc/man/nvme_describe_key_serial.22
-rw-r--r--doc/man/nvme_dev_self_test.22
-rw-r--r--doc/man/nvme_directive_dtype.22
-rw-r--r--doc/man/nvme_directive_receive_doper.22
-rw-r--r--doc/man/nvme_directive_recv.22
-rw-r--r--doc/man/nvme_directive_recv_identify_parameters.22
-rw-r--r--doc/man/nvme_directive_recv_stream_allocate.22
-rw-r--r--doc/man/nvme_directive_recv_stream_parameters.22
-rw-r--r--doc/man/nvme_directive_recv_stream_status.22
-rw-r--r--doc/man/nvme_directive_send.22
-rw-r--r--doc/man/nvme_directive_send_doper.22
-rw-r--r--doc/man/nvme_directive_send_id_endir.22
-rw-r--r--doc/man/nvme_directive_send_identify_endir.22
-rw-r--r--doc/man/nvme_directive_send_stream_release_identifier.22
-rw-r--r--doc/man/nvme_directive_send_stream_release_resource.22
-rw-r--r--doc/man/nvme_directive_types.22
-rw-r--r--doc/man/nvme_disconnect_ctrl.22
-rw-r--r--doc/man/nvme_dsm.22
-rw-r--r--doc/man/nvme_dsm_attributes.22
-rw-r--r--doc/man/nvme_dsm_range.22
-rw-r--r--doc/man/nvme_dst_stc.22
-rw-r--r--doc/man/nvme_dump_config.22
-rw-r--r--doc/man/nvme_dump_tree.22
-rw-r--r--doc/man/nvme_eg_critical_warning_flags.22
-rw-r--r--doc/man/nvme_eg_event_aggregate_log.22
-rw-r--r--doc/man/nvme_end_grp_chan_desc.22
-rw-r--r--doc/man/nvme_end_grp_config_desc.22
-rw-r--r--doc/man/nvme_endurance_group_log.22
-rw-r--r--doc/man/nvme_eom_lane_desc.22
-rw-r--r--doc/man/nvme_eom_optional_data.212
-rw-r--r--doc/man/nvme_eom_optional_data_present.248
-rw-r--r--doc/man/nvme_errno_to_string.22
-rw-r--r--doc/man/nvme_error_log_page.22
-rw-r--r--doc/man/nvme_export_tls_key.219
-rw-r--r--doc/man/nvme_fabrics_config.26
-rw-r--r--doc/man/nvme_fctype.22
-rw-r--r--doc/man/nvme_fdp_config_desc.22
-rw-r--r--doc/man/nvme_fdp_config_fdpa.22
-rw-r--r--doc/man/nvme_fdp_config_log.22
-rw-r--r--doc/man/nvme_fdp_event.22
-rw-r--r--doc/man/nvme_fdp_event_flags.22
-rw-r--r--doc/man/nvme_fdp_event_realloc.22
-rw-r--r--doc/man/nvme_fdp_event_realloc_flags.22
-rw-r--r--doc/man/nvme_fdp_event_type.22
-rw-r--r--doc/man/nvme_fdp_events_log.22
-rw-r--r--doc/man/nvme_fdp_reclaim_unit_handle_status.22
-rw-r--r--doc/man/nvme_fdp_reclaim_unit_handle_update.22
-rw-r--r--doc/man/nvme_fdp_ruh_desc.22
-rw-r--r--doc/man/nvme_fdp_ruh_status.22
-rw-r--r--doc/man/nvme_fdp_ruh_status_desc.22
-rw-r--r--doc/man/nvme_fdp_ruh_type.22
-rw-r--r--doc/man/nvme_fdp_ruha.22
-rw-r--r--doc/man/nvme_fdp_ruhu_desc.22
-rw-r--r--doc/man/nvme_fdp_ruhu_log.22
-rw-r--r--doc/man/nvme_fdp_stats_log.22
-rw-r--r--doc/man/nvme_fdp_supported_event_attributes.22
-rw-r--r--doc/man/nvme_fdp_supported_event_desc.22
-rw-r--r--doc/man/nvme_feat.22
-rw-r--r--doc/man/nvme_feat_auto_pst.22
-rw-r--r--doc/man/nvme_feat_fdp_events_cdw11.22
-rw-r--r--doc/man/nvme_feat_host_behavior.22
-rw-r--r--doc/man/nvme_feat_nswpcfg_state.22
-rw-r--r--doc/man/nvme_feat_plm_window_select.22
-rw-r--r--doc/man/nvme_feat_resv_notify_flags.22
-rw-r--r--doc/man/nvme_feat_tmpthresh_thsel.22
-rw-r--r--doc/man/nvme_features_async_event_config_flags.22
-rw-r--r--doc/man/nvme_features_id.22
-rw-r--r--doc/man/nvme_fid_supported_effects.22
-rw-r--r--doc/man/nvme_fid_supported_effects_log.22
-rw-r--r--doc/man/nvme_firmware_slot.22
-rw-r--r--doc/man/nvme_first_host.22
-rw-r--r--doc/man/nvme_first_subsystem.22
-rw-r--r--doc/man/nvme_flbas.242
-rw-r--r--doc/man/nvme_flush.22
-rw-r--r--doc/man/nvme_for_each_host.22
-rw-r--r--doc/man/nvme_for_each_host_safe.22
-rw-r--r--doc/man/nvme_for_each_subsystem.22
-rw-r--r--doc/man/nvme_for_each_subsystem_safe.22
-rw-r--r--doc/man/nvme_format_nvm.22
-rw-r--r--doc/man/nvme_format_nvm_compln_event.22
-rw-r--r--doc/man/nvme_format_nvm_start_event.22
-rw-r--r--doc/man/nvme_free_ctrl.22
-rw-r--r--doc/man/nvme_free_host.22
-rw-r--r--doc/man/nvme_free_ns.22
-rw-r--r--doc/man/nvme_free_subsystem.22
-rw-r--r--doc/man/nvme_free_tree.22
-rw-r--r--doc/man/nvme_fw_commit.22
-rw-r--r--doc/man/nvme_fw_commit_ca.22
-rw-r--r--doc/man/nvme_fw_commit_event.22
-rw-r--r--doc/man/nvme_fw_download.22
-rw-r--r--doc/man/nvme_fw_download_seq.22
-rw-r--r--doc/man/nvme_gen_dhchap_key.22
-rw-r--r--doc/man/nvme_generate_tls_key_identity.22
-rw-r--r--doc/man/nvme_get_ana_log_len.22
-rw-r--r--doc/man/nvme_get_attr.22
-rw-r--r--doc/man/nvme_get_ctrl_attr.22
-rw-r--r--doc/man/nvme_get_ctrl_telemetry.22
-rw-r--r--doc/man/nvme_get_directive_receive_length.22
-rw-r--r--doc/man/nvme_get_discovery_args.22
-rw-r--r--doc/man/nvme_get_feature_length.22
-rw-r--r--doc/man/nvme_get_feature_length2.22
-rw-r--r--doc/man/nvme_get_features.22
-rw-r--r--doc/man/nvme_get_features_arbitration.22
-rw-r--r--doc/man/nvme_get_features_async_event.22
-rw-r--r--doc/man/nvme_get_features_auto_pst.22
-rw-r--r--doc/man/nvme_get_features_data.22
-rw-r--r--doc/man/nvme_get_features_endurance_event_cfg.22
-rw-r--r--doc/man/nvme_get_features_err_recovery.22
-rw-r--r--doc/man/nvme_get_features_err_recovery2.22
-rw-r--r--doc/man/nvme_get_features_hctm.22
-rw-r--r--doc/man/nvme_get_features_host_behavior.22
-rw-r--r--doc/man/nvme_get_features_host_id.22
-rw-r--r--doc/man/nvme_get_features_host_mem_buf.22
-rw-r--r--doc/man/nvme_get_features_host_mem_buf2.22
-rw-r--r--doc/man/nvme_get_features_iocs_profile.22
-rw-r--r--doc/man/nvme_get_features_irq_coalesce.22
-rw-r--r--doc/man/nvme_get_features_irq_config.22
-rw-r--r--doc/man/nvme_get_features_kato.22
-rw-r--r--doc/man/nvme_get_features_lba_range.22
-rw-r--r--doc/man/nvme_get_features_lba_range2.22
-rw-r--r--doc/man/nvme_get_features_lba_sts_interval.22
-rw-r--r--doc/man/nvme_get_features_nopsc.22
-rw-r--r--doc/man/nvme_get_features_num_queues.22
-rw-r--r--doc/man/nvme_get_features_plm_config.22
-rw-r--r--doc/man/nvme_get_features_plm_window.22
-rw-r--r--doc/man/nvme_get_features_power_mgmt.22
-rw-r--r--doc/man/nvme_get_features_resv_mask.22
-rw-r--r--doc/man/nvme_get_features_resv_mask2.22
-rw-r--r--doc/man/nvme_get_features_resv_persist.22
-rw-r--r--doc/man/nvme_get_features_resv_persist2.22
-rw-r--r--doc/man/nvme_get_features_rrl.22
-rw-r--r--doc/man/nvme_get_features_sanitize.22
-rw-r--r--doc/man/nvme_get_features_sel.22
-rw-r--r--doc/man/nvme_get_features_simple.22
-rw-r--r--doc/man/nvme_get_features_sw_progress.22
-rw-r--r--doc/man/nvme_get_features_temp_thresh.22
-rw-r--r--doc/man/nvme_get_features_timestamp.22
-rw-r--r--doc/man/nvme_get_features_volatile_wc.22
-rw-r--r--doc/man/nvme_get_features_write_atomic.22
-rw-r--r--doc/man/nvme_get_features_write_protect.22
-rw-r--r--doc/man/nvme_get_host_telemetry.22
-rw-r--r--doc/man/nvme_get_lba_status.22
-rw-r--r--doc/man/nvme_get_lba_status_log.22
-rw-r--r--doc/man/nvme_get_log.22
-rw-r--r--doc/man/nvme_get_log_ana.22
-rw-r--r--doc/man/nvme_get_log_ana_groups.22
-rw-r--r--doc/man/nvme_get_log_boot_partition.22
-rw-r--r--doc/man/nvme_get_log_changed_ns_list.22
-rw-r--r--doc/man/nvme_get_log_cmd_effects.22
-rw-r--r--doc/man/nvme_get_log_create_telemetry_host.22
-rw-r--r--doc/man/nvme_get_log_device_self_test.22
-rw-r--r--doc/man/nvme_get_log_discovery.22
-rw-r--r--doc/man/nvme_get_log_endurance_group.22
-rw-r--r--doc/man/nvme_get_log_endurance_grp_evt.22
-rw-r--r--doc/man/nvme_get_log_error.22
-rw-r--r--doc/man/nvme_get_log_fdp_configurations.22
-rw-r--r--doc/man/nvme_get_log_fdp_events.22
-rw-r--r--doc/man/nvme_get_log_fdp_stats.22
-rw-r--r--doc/man/nvme_get_log_fid_supported_effects.22
-rw-r--r--doc/man/nvme_get_log_fw_slot.22
-rw-r--r--doc/man/nvme_get_log_lba_status.22
-rw-r--r--doc/man/nvme_get_log_media_unit_stat.22
-rw-r--r--doc/man/nvme_get_log_mi_cmd_supported_effects.22
-rw-r--r--doc/man/nvme_get_log_page.22
-rw-r--r--doc/man/nvme_get_log_persistent_event.22
-rw-r--r--doc/man/nvme_get_log_phy_rx_eom.22
-rw-r--r--doc/man/nvme_get_log_predictable_lat_event.22
-rw-r--r--doc/man/nvme_get_log_predictable_lat_nvmset.22
-rw-r--r--doc/man/nvme_get_log_reclaim_unit_handle_usage.22
-rw-r--r--doc/man/nvme_get_log_reservation.22
-rw-r--r--doc/man/nvme_get_log_sanitize.22
-rw-r--r--doc/man/nvme_get_log_smart.22
-rw-r--r--doc/man/nvme_get_log_support_cap_config_list.22
-rw-r--r--doc/man/nvme_get_log_supported_log_pages.22
-rw-r--r--doc/man/nvme_get_log_telemetry_ctrl.22
-rw-r--r--doc/man/nvme_get_log_telemetry_host.22
-rw-r--r--doc/man/nvme_get_log_zns_changed_zones.22
-rw-r--r--doc/man/nvme_get_logging_level.221
-rw-r--r--doc/man/nvme_get_logical_block_size.22
-rw-r--r--doc/man/nvme_get_new_host_telemetry.22
-rw-r--r--doc/man/nvme_get_ns_attr.22
-rw-r--r--doc/man/nvme_get_nsid.22
-rw-r--r--doc/man/nvme_get_path_attr.22
-rw-r--r--doc/man/nvme_get_property.22
-rw-r--r--doc/man/nvme_get_subsys_attr.22
-rw-r--r--doc/man/nvme_get_telemetry_log.22
-rw-r--r--doc/man/nvme_get_telemetry_max.22
-rw-r--r--doc/man/nvme_hmac_alg.22
-rw-r--r--doc/man/nvme_host_behavior_support.22
-rw-r--r--doc/man/nvme_host_get_dhchap_key.22
-rw-r--r--doc/man/nvme_host_get_hostid.22
-rw-r--r--doc/man/nvme_host_get_hostnqn.22
-rw-r--r--doc/man/nvme_host_get_hostsymname.22
-rw-r--r--doc/man/nvme_host_get_root.22
-rw-r--r--doc/man/nvme_host_is_pdc_enabled.22
-rw-r--r--doc/man/nvme_host_mem_buf_attrs.22
-rw-r--r--doc/man/nvme_host_metadata.22
-rw-r--r--doc/man/nvme_host_release_fds.22
-rw-r--r--doc/man/nvme_host_set_dhchap_key.22
-rw-r--r--doc/man/nvme_host_set_hostsymname.22
-rw-r--r--doc/man/nvme_host_set_pdc_enabled.22
-rw-r--r--doc/man/nvme_id_ctrl.22
-rw-r--r--doc/man/nvme_id_ctrl_anacap.22
-rw-r--r--doc/man/nvme_id_ctrl_apsta.22
-rw-r--r--doc/man/nvme_id_ctrl_avscc.22
-rw-r--r--doc/man/nvme_id_ctrl_cmic.22
-rw-r--r--doc/man/nvme_id_ctrl_cntrltype.22
-rw-r--r--doc/man/nvme_id_ctrl_cqes.22
-rw-r--r--doc/man/nvme_id_ctrl_ctratt.22
-rw-r--r--doc/man/nvme_id_ctrl_dctype.22
-rw-r--r--doc/man/nvme_id_ctrl_dsto.22
-rw-r--r--doc/man/nvme_id_ctrl_fcatt.22
-rw-r--r--doc/man/nvme_id_ctrl_fna.22
-rw-r--r--doc/man/nvme_id_ctrl_frmw.22
-rw-r--r--doc/man/nvme_id_ctrl_fuses.22
-rw-r--r--doc/man/nvme_id_ctrl_hctm.22
-rw-r--r--doc/man/nvme_id_ctrl_lpa.22
-rw-r--r--doc/man/nvme_id_ctrl_mec.22
-rw-r--r--doc/man/nvme_id_ctrl_nvm.22
-rw-r--r--doc/man/nvme_id_ctrl_nvmsr.22
-rw-r--r--doc/man/nvme_id_ctrl_nvscc.22
-rw-r--r--doc/man/nvme_id_ctrl_nwpc.22
-rw-r--r--doc/man/nvme_id_ctrl_oacs.22
-rw-r--r--doc/man/nvme_id_ctrl_oaes.22
-rw-r--r--doc/man/nvme_id_ctrl_ofcs.22
-rw-r--r--doc/man/nvme_id_ctrl_oncs.22
-rw-r--r--doc/man/nvme_id_ctrl_rpmbs.22
-rw-r--r--doc/man/nvme_id_ctrl_sanicap.22
-rw-r--r--doc/man/nvme_id_ctrl_sgls.22
-rw-r--r--doc/man/nvme_id_ctrl_sqes.22
-rw-r--r--doc/man/nvme_id_ctrl_vwc.22
-rw-r--r--doc/man/nvme_id_ctrl_vwci.22
-rw-r--r--doc/man/nvme_id_directives.22
-rw-r--r--doc/man/nvme_id_domain_attr.22
-rw-r--r--doc/man/nvme_id_domain_list.22
-rw-r--r--doc/man/nvme_id_endurance_group_list.22
-rw-r--r--doc/man/nvme_id_independent_id_ns.22
-rw-r--r--doc/man/nvme_id_iocs.22
-rw-r--r--doc/man/nvme_id_ns.22
-rw-r--r--doc/man/nvme_id_ns_attr.22
-rw-r--r--doc/man/nvme_id_ns_dlfeat.22
-rw-r--r--doc/man/nvme_id_ns_dpc.22
-rw-r--r--doc/man/nvme_id_ns_dps.22
-rw-r--r--doc/man/nvme_id_ns_flbas.22
-rw-r--r--doc/man/nvme_id_ns_granularity_desc.22
-rw-r--r--doc/man/nvme_id_ns_granularity_list.22
-rw-r--r--doc/man/nvme_id_ns_mc.22
-rw-r--r--doc/man/nvme_id_ns_nmic.22
-rw-r--r--doc/man/nvme_id_ns_rescap.22
-rw-r--r--doc/man/nvme_id_nsfeat.22
-rw-r--r--doc/man/nvme_id_nvmset_list.22
-rw-r--r--doc/man/nvme_id_psd.22
-rw-r--r--doc/man/nvme_id_uuid.22
-rw-r--r--doc/man/nvme_id_uuid_list.22
-rw-r--r--doc/man/nvme_id_uuid_list_entry.22
-rw-r--r--doc/man/nvme_identify.22
-rw-r--r--doc/man/nvme_identify_active_ns_list.22
-rw-r--r--doc/man/nvme_identify_active_ns_list_csi.22
-rw-r--r--doc/man/nvme_identify_allocated_ns.22
-rw-r--r--doc/man/nvme_identify_allocated_ns_list.22
-rw-r--r--doc/man/nvme_identify_allocated_ns_list_csi.22
-rw-r--r--doc/man/nvme_identify_cns.22
-rw-r--r--doc/man/nvme_identify_ctrl.22
-rw-r--r--doc/man/nvme_identify_ctrl_csi.22
-rw-r--r--doc/man/nvme_identify_ctrl_list.22
-rw-r--r--doc/man/nvme_identify_domain_list.22
-rw-r--r--doc/man/nvme_identify_endurance_group_list.22
-rw-r--r--doc/man/nvme_identify_independent_identify_ns.22
-rw-r--r--doc/man/nvme_identify_iocs.22
-rw-r--r--doc/man/nvme_identify_iocs_ns_csi_user_data_format.22
-rw-r--r--doc/man/nvme_identify_ns.22
-rw-r--r--doc/man/nvme_identify_ns_csi.22
-rw-r--r--doc/man/nvme_identify_ns_csi_user_data_format.22
-rw-r--r--doc/man/nvme_identify_ns_descs.22
-rw-r--r--doc/man/nvme_identify_ns_granularity.22
-rw-r--r--doc/man/nvme_identify_nsid_ctrl_list.22
-rw-r--r--doc/man/nvme_identify_nvmset_list.22
-rw-r--r--doc/man/nvme_identify_primary_ctrl.22
-rw-r--r--doc/man/nvme_identify_secondary_ctrl_list.22
-rw-r--r--doc/man/nvme_identify_uuid.22
-rw-r--r--doc/man/nvme_import_tls_key.221
-rw-r--r--doc/man/nvme_init_copy_range.22
-rw-r--r--doc/man/nvme_init_copy_range_f1.22
-rw-r--r--doc/man/nvme_init_copy_range_f2.22
-rw-r--r--doc/man/nvme_init_copy_range_f3.22
-rw-r--r--doc/man/nvme_init_ctrl.22
-rw-r--r--doc/man/nvme_init_ctrl_list.22
-rw-r--r--doc/man/nvme_init_dsm_range.22
-rw-r--r--doc/man/nvme_init_logging.22
-rw-r--r--doc/man/nvme_insert_tls_key.22
-rw-r--r--doc/man/nvme_insert_tls_key_versioned.22
-rw-r--r--doc/man/nvme_io.22
-rw-r--r--doc/man/nvme_io_control_flags.22
-rw-r--r--doc/man/nvme_io_dsm_flags.22
-rw-r--r--doc/man/nvme_io_mgmt_recv.22
-rw-r--r--doc/man/nvme_io_mgmt_recv_mo.22
-rw-r--r--doc/man/nvme_io_mgmt_send.22
-rw-r--r--doc/man/nvme_io_mgmt_send_mo.22
-rw-r--r--doc/man/nvme_io_opcode.22
-rw-r--r--doc/man/nvme_io_passthru.22
-rw-r--r--doc/man/nvme_io_passthru64.22
-rw-r--r--doc/man/nvme_is_64bit_reg.22
-rw-r--r--doc/man/nvme_lba_range_type.22
-rw-r--r--doc/man/nvme_lba_range_type_entry.22
-rw-r--r--doc/man/nvme_lba_rd.22
-rw-r--r--doc/man/nvme_lba_status.22
-rw-r--r--doc/man/nvme_lba_status_atype.22
-rw-r--r--doc/man/nvme_lba_status_desc.22
-rw-r--r--doc/man/nvme_lba_status_log.22
-rw-r--r--doc/man/nvme_lbaf.22
-rw-r--r--doc/man/nvme_lbaf_rp.22
-rw-r--r--doc/man/nvme_lbart.22
-rw-r--r--doc/man/nvme_lbas_ns_element.22
-rw-r--r--doc/man/nvme_lockdown.22
-rw-r--r--doc/man/nvme_log_ana_lsp.22
-rw-r--r--doc/man/nvme_log_phy_rx_eom_action.22
-rw-r--r--doc/man/nvme_log_phy_rx_eom_quality.22
-rw-r--r--doc/man/nvme_lookup_ctrl.22
-rw-r--r--doc/man/nvme_lookup_host.22
-rw-r--r--doc/man/nvme_lookup_key.22
-rw-r--r--doc/man/nvme_lookup_keyring.22
-rw-r--r--doc/man/nvme_lookup_subsystem.22
-rw-r--r--doc/man/nvme_media_unit_config_desc.22
-rw-r--r--doc/man/nvme_media_unit_stat_desc.22
-rw-r--r--doc/man/nvme_media_unit_stat_log.22
-rw-r--r--doc/man/nvme_metadata_element_desc.22
-rw-r--r--doc/man/nvme_mi_admin_admin_passthru.22
-rw-r--r--doc/man/nvme_mi_admin_format_nvm.22
-rw-r--r--doc/man/nvme_mi_admin_fw_commit.22
-rw-r--r--doc/man/nvme_mi_admin_fw_download.22
-rw-r--r--doc/man/nvme_mi_admin_get_features_data.22
-rw-r--r--doc/man/nvme_mi_admin_get_log.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_ana.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_ana_groups.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_boot_partition.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_changed_ns_list.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_cmd_effects.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_create_telemetry_host.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_device_self_test.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_discovery.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_endurance_group.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_endurance_grp_evt.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_error.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_fid_supported_effects.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_fw_slot.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_lba_status.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_media_unit_stat.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_mi_cmd_supported_effects.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_page.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_persistent_event.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_phy_rx_eom.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_predictable_lat_event.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_predictable_lat_nvmset.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_reservation.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_sanitize.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_simple.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_smart.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_support_cap_config_list.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_supported_log_pages.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_telemetry_ctrl.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_telemetry_host.22
-rw-r--r--doc/man/nvme_mi_admin_get_log_zns_changed_zones.22
-rw-r--r--doc/man/nvme_mi_admin_get_nsid_log.22
-rw-r--r--doc/man/nvme_mi_admin_identify.22
-rw-r--r--doc/man/nvme_mi_admin_identify_active_ns_list.22
-rw-r--r--doc/man/nvme_mi_admin_identify_allocated_ns.22
-rw-r--r--doc/man/nvme_mi_admin_identify_allocated_ns_list.22
-rw-r--r--doc/man/nvme_mi_admin_identify_cns_nsid.22
-rw-r--r--doc/man/nvme_mi_admin_identify_ctrl.22
-rw-r--r--doc/man/nvme_mi_admin_identify_ctrl_list.22
-rw-r--r--doc/man/nvme_mi_admin_identify_ns.22
-rw-r--r--doc/man/nvme_mi_admin_identify_ns_descs.22
-rw-r--r--doc/man/nvme_mi_admin_identify_nsid_ctrl_list.22
-rw-r--r--doc/man/nvme_mi_admin_identify_partial.22
-rw-r--r--doc/man/nvme_mi_admin_identify_primary_ctrl.22
-rw-r--r--doc/man/nvme_mi_admin_identify_secondary_ctrl_list.22
-rw-r--r--doc/man/nvme_mi_admin_ns_attach.22
-rw-r--r--doc/man/nvme_mi_admin_ns_attach_ctrls.22
-rw-r--r--doc/man/nvme_mi_admin_ns_detach_ctrls.22
-rw-r--r--doc/man/nvme_mi_admin_req_hdr.22
-rw-r--r--doc/man/nvme_mi_admin_resp_hdr.22
-rw-r--r--doc/man/nvme_mi_admin_sanitize_nvm.22
-rw-r--r--doc/man/nvme_mi_admin_security_recv.22
-rw-r--r--doc/man/nvme_mi_admin_security_send.22
-rw-r--r--doc/man/nvme_mi_admin_xfer.22
-rw-r--r--doc/man/nvme_mi_ccs.22
-rw-r--r--doc/man/nvme_mi_close.22
-rw-r--r--doc/man/nvme_mi_close_ctrl.22
-rw-r--r--doc/man/nvme_mi_cmd_supported_effects.22
-rw-r--r--doc/man/nvme_mi_cmd_supported_effects_log.22
-rw-r--r--doc/man/nvme_mi_config_id.22
-rw-r--r--doc/man/nvme_mi_config_smbus_freq.22
-rw-r--r--doc/man/nvme_mi_create_root.22
-rw-r--r--doc/man/nvme_mi_csts.22
-rw-r--r--doc/man/nvme_mi_ctrl_health_status.22
-rw-r--r--doc/man/nvme_mi_ctrl_id.22
-rw-r--r--doc/man/nvme_mi_cwarn.22
-rw-r--r--doc/man/nvme_mi_dtyp.22
-rw-r--r--doc/man/nvme_mi_elem.22
-rw-r--r--doc/man/nvme_mi_free_root.22
-rw-r--r--doc/man/nvme_mi_init_ctrl.22
-rw-r--r--doc/man/nvme_mi_message_type.22
-rw-r--r--doc/man/nvme_mi_mi_opcode.22
-rw-r--r--doc/man/nvme_mi_mi_read_mi_data_ctrl.22
-rw-r--r--doc/man/nvme_mi_mi_read_mi_data_ctrl_list.22
-rw-r--r--doc/man/nvme_mi_mi_read_mi_data_port.22
-rw-r--r--doc/man/nvme_mi_mi_read_mi_data_subsys.22
-rw-r--r--doc/man/nvme_mi_mi_req_hdr.22
-rw-r--r--doc/man/nvme_mi_mi_resp_hdr.22
-rw-r--r--doc/man/nvme_mi_mi_subsystem_health_status_poll.22
-rw-r--r--doc/man/nvme_mi_msg_hdr.22
-rw-r--r--doc/man/nvme_mi_msg_resp.22
-rw-r--r--doc/man/nvme_mi_nvm_ss_health_status.22
-rw-r--r--doc/man/nvme_mi_open_mctp.22
-rw-r--r--doc/man/nvme_mi_osc.22
-rw-r--r--doc/man/nvme_mi_port_pcie.22
-rw-r--r--doc/man/nvme_mi_port_smb.22
-rw-r--r--doc/man/nvme_mi_read_ctrl_info.22
-rw-r--r--doc/man/nvme_mi_read_nvm_ss_info.22
-rw-r--r--doc/man/nvme_mi_read_port_info.22
-rw-r--r--doc/man/nvme_mi_read_sc_list.22
-rw-r--r--doc/man/nvme_mi_resp_status.22
-rw-r--r--doc/man/nvme_mi_set_probe_enabled.22
-rw-r--r--doc/man/nvme_mi_status_to_string.22
-rw-r--r--doc/man/nvme_mi_vpd_hdr.22
-rw-r--r--doc/man/nvme_mi_vpd_mr_common.22
-rw-r--r--doc/man/nvme_mi_vpd_mra.22
-rw-r--r--doc/man/nvme_mi_vpd_ppmra.22
-rw-r--r--doc/man/nvme_mi_vpd_telem.22
-rw-r--r--doc/man/nvme_mi_vpd_tra.22
-rw-r--r--doc/man/nvme_namespace_attach_ctrls.22
-rw-r--r--doc/man/nvme_namespace_detach_ctrls.22
-rw-r--r--doc/man/nvme_namespace_filter.22
-rw-r--r--doc/man/nvme_namespace_first_path.22
-rw-r--r--doc/man/nvme_namespace_for_each_path.22
-rw-r--r--doc/man/nvme_namespace_for_each_path_safe.22
-rw-r--r--doc/man/nvme_namespace_next_path.22
-rw-r--r--doc/man/nvme_nbft_free.22
-rw-r--r--doc/man/nvme_nbft_read.22
-rw-r--r--doc/man/nvme_nd_ns_fpi.22
-rw-r--r--doc/man/nvme_next_host.22
-rw-r--r--doc/man/nvme_next_subsystem.22
-rw-r--r--doc/man/nvme_ns_attach.22
-rw-r--r--doc/man/nvme_ns_attach_ctrls.22
-rw-r--r--doc/man/nvme_ns_attach_sel.22
-rw-r--r--doc/man/nvme_ns_compare.22
-rw-r--r--doc/man/nvme_ns_detach_ctrls.22
-rw-r--r--doc/man/nvme_ns_flush.22
-rw-r--r--doc/man/nvme_ns_get_csi.22
-rw-r--r--doc/man/nvme_ns_get_ctrl.22
-rw-r--r--doc/man/nvme_ns_get_eui64.22
-rw-r--r--doc/man/nvme_ns_get_fd.22
-rw-r--r--doc/man/nvme_ns_get_firmware.22
-rw-r--r--doc/man/nvme_ns_get_generic_name.22
-rw-r--r--doc/man/nvme_ns_get_lba_count.22
-rw-r--r--doc/man/nvme_ns_get_lba_size.22
-rw-r--r--doc/man/nvme_ns_get_lba_util.22
-rw-r--r--doc/man/nvme_ns_get_meta_size.22
-rw-r--r--doc/man/nvme_ns_get_model.22
-rw-r--r--doc/man/nvme_ns_get_name.22
-rw-r--r--doc/man/nvme_ns_get_nguid.22
-rw-r--r--doc/man/nvme_ns_get_nsid.22
-rw-r--r--doc/man/nvme_ns_get_serial.22
-rw-r--r--doc/man/nvme_ns_get_subsystem.22
-rw-r--r--doc/man/nvme_ns_get_sysfs_dir.22
-rw-r--r--doc/man/nvme_ns_get_uuid.22
-rw-r--r--doc/man/nvme_ns_id_desc.22
-rw-r--r--doc/man/nvme_ns_id_desc_nidt.22
-rw-r--r--doc/man/nvme_ns_identify.22
-rw-r--r--doc/man/nvme_ns_identify_descs.22
-rw-r--r--doc/man/nvme_ns_list.22
-rw-r--r--doc/man/nvme_ns_metadata_type.22
-rw-r--r--doc/man/nvme_ns_mgmt.22
-rw-r--r--doc/man/nvme_ns_mgmt_create.22
-rw-r--r--doc/man/nvme_ns_mgmt_delete.22
-rw-r--r--doc/man/nvme_ns_mgmt_delete_timeout.223
-rw-r--r--doc/man/nvme_ns_mgmt_host_sw_specified.22
-rw-r--r--doc/man/nvme_ns_mgmt_sel.22
-rw-r--r--doc/man/nvme_ns_read.22
-rw-r--r--doc/man/nvme_ns_release_fd.22
-rw-r--r--doc/man/nvme_ns_rescan.22
-rw-r--r--doc/man/nvme_ns_verify.22
-rw-r--r--doc/man/nvme_ns_write.22
-rw-r--r--doc/man/nvme_ns_write_protect_cfg.22
-rw-r--r--doc/man/nvme_ns_write_uncorrectable.22
-rw-r--r--doc/man/nvme_ns_write_zeros.22
-rw-r--r--doc/man/nvme_nss_hw_err_event.22
-rw-r--r--doc/man/nvme_nvm_id_ns.22
-rw-r--r--doc/man/nvme_nvm_id_ns_elbaf.22
-rw-r--r--doc/man/nvme_nvm_identify_ctrl.22
-rw-r--r--doc/man/nvme_nvmeset_pl_status.22
-rw-r--r--doc/man/nvme_nvmset_attr.22
-rw-r--r--doc/man/nvme_nvmset_pl_events.22
-rw-r--r--doc/man/nvme_nvmset_predictable_lat_log.22
-rw-r--r--doc/man/nvme_open.22
-rw-r--r--doc/man/nvme_passthru_cmd.22
-rw-r--r--doc/man/nvme_passthru_cmd64.22
-rw-r--r--doc/man/nvme_path_get_ana_state.22
-rw-r--r--doc/man/nvme_path_get_ctrl.22
-rw-r--r--doc/man/nvme_path_get_name.22
-rw-r--r--doc/man/nvme_path_get_ns.22
-rw-r--r--doc/man/nvme_path_get_sysfs_dir.22
-rw-r--r--doc/man/nvme_paths_filter.22
-rw-r--r--doc/man/nvme_pel_ehai.234
-rw-r--r--doc/man/nvme_pel_ehai_pit.230
-rw-r--r--doc/man/nvme_pel_rci.262
-rw-r--r--doc/man/nvme_pel_rci_rcpit.224
-rw-r--r--doc/man/nvme_persistent_event_entry.22
-rw-r--r--doc/man/nvme_persistent_event_log.22
-rw-r--r--doc/man/nvme_persistent_event_types.22
-rw-r--r--doc/man/nvme_pevent_log_action.22
-rw-r--r--doc/man/nvme_phy_rx_eom_log.22
-rw-r--r--doc/man/nvme_phy_rx_eom_progress.22
-rw-r--r--doc/man/nvme_plm_config.22
-rw-r--r--doc/man/nvme_pmr_size.22
-rw-r--r--doc/man/nvme_pmr_throughput.22
-rw-r--r--doc/man/nvme_pmrcap.2114
-rw-r--r--doc/man/nvme_pmrctl.218
-rw-r--r--doc/man/nvme_pmrebs.266
-rw-r--r--doc/man/nvme_pmrmsc.224
-rw-r--r--doc/man/nvme_pmrsts.254
-rw-r--r--doc/man/nvme_pmrswtp.254
-rw-r--r--doc/man/nvme_power_on_reset_info_list.22
-rw-r--r--doc/man/nvme_primary_ctrl_cap.22
-rw-r--r--doc/man/nvme_psd_flags.22
-rw-r--r--doc/man/nvme_psd_power_scale.22
-rw-r--r--doc/man/nvme_psd_ps.22
-rw-r--r--doc/man/nvme_psd_workload.22
-rw-r--r--doc/man/nvme_read.22
-rw-r--r--doc/man/nvme_read_config.22
-rw-r--r--doc/man/nvme_read_key.223
-rw-r--r--doc/man/nvme_refresh_topology.22
-rw-r--r--doc/man/nvme_register_offsets.22
-rw-r--r--doc/man/nvme_registered_ctrl.22
-rw-r--r--doc/man/nvme_registered_ctrl_ext.22
-rw-r--r--doc/man/nvme_rescan_ctrl.22
-rw-r--r--doc/man/nvme_resv_acquire.22
-rw-r--r--doc/man/nvme_resv_cptpl.22
-rw-r--r--doc/man/nvme_resv_notification_log.22
-rw-r--r--doc/man/nvme_resv_notify_rnlpt.22
-rw-r--r--doc/man/nvme_resv_racqa.22
-rw-r--r--doc/man/nvme_resv_register.22
-rw-r--r--doc/man/nvme_resv_release.22
-rw-r--r--doc/man/nvme_resv_report.22
-rw-r--r--doc/man/nvme_resv_rrega.22
-rw-r--r--doc/man/nvme_resv_rrela.22
-rw-r--r--doc/man/nvme_resv_rtype.22
-rw-r--r--doc/man/nvme_resv_status.22
-rw-r--r--doc/man/nvme_sanitize_compln_event.22
-rw-r--r--doc/man/nvme_sanitize_log_page.22
-rw-r--r--doc/man/nvme_sanitize_nvm.22
-rw-r--r--doc/man/nvme_sanitize_sanact.22
-rw-r--r--doc/man/nvme_sanitize_sstat.22
-rw-r--r--doc/man/nvme_sanitize_start_event.22
-rw-r--r--doc/man/nvme_scan.22
-rw-r--r--doc/man/nvme_scan_ctrl.22
-rw-r--r--doc/man/nvme_scan_ctrl_namespace_paths.22
-rw-r--r--doc/man/nvme_scan_ctrl_namespaces.22
-rw-r--r--doc/man/nvme_scan_ctrls.22
-rw-r--r--doc/man/nvme_scan_namespace.22
-rw-r--r--doc/man/nvme_scan_subsystem_namespaces.22
-rw-r--r--doc/man/nvme_scan_subsystems.22
-rw-r--r--doc/man/nvme_scan_tls_keys.224
-rw-r--r--doc/man/nvme_scan_topology.22
-rw-r--r--doc/man/nvme_secondary_ctrl.22
-rw-r--r--doc/man/nvme_secondary_ctrl_list.22
-rw-r--r--doc/man/nvme_security_receive.22
-rw-r--r--doc/man/nvme_security_send.22
-rw-r--r--doc/man/nvme_self_test_log.22
-rw-r--r--doc/man/nvme_set_feat_event_layout.248
-rw-r--r--doc/man/nvme_set_feature_event.22
-rw-r--r--doc/man/nvme_set_features.22
-rw-r--r--doc/man/nvme_set_features_arbitration.22
-rw-r--r--doc/man/nvme_set_features_async_event.22
-rw-r--r--doc/man/nvme_set_features_auto_pst.22
-rw-r--r--doc/man/nvme_set_features_data.22
-rw-r--r--doc/man/nvme_set_features_endurance_evt_cfg.22
-rw-r--r--doc/man/nvme_set_features_err_recovery.22
-rw-r--r--doc/man/nvme_set_features_hctm.22
-rw-r--r--doc/man/nvme_set_features_host_behavior.22
-rw-r--r--doc/man/nvme_set_features_host_id.22
-rw-r--r--doc/man/nvme_set_features_iocs_profile.22
-rw-r--r--doc/man/nvme_set_features_irq_coalesce.22
-rw-r--r--doc/man/nvme_set_features_irq_config.22
-rw-r--r--doc/man/nvme_set_features_lba_range.22
-rw-r--r--doc/man/nvme_set_features_lba_sts_interval.22
-rw-r--r--doc/man/nvme_set_features_nopsc.22
-rw-r--r--doc/man/nvme_set_features_plm_config.22
-rw-r--r--doc/man/nvme_set_features_plm_window.22
-rw-r--r--doc/man/nvme_set_features_power_mgmt.22
-rw-r--r--doc/man/nvme_set_features_resv_mask.22
-rw-r--r--doc/man/nvme_set_features_resv_mask2.22
-rw-r--r--doc/man/nvme_set_features_resv_persist.22
-rw-r--r--doc/man/nvme_set_features_resv_persist2.22
-rw-r--r--doc/man/nvme_set_features_rrl.22
-rw-r--r--doc/man/nvme_set_features_sanitize.22
-rw-r--r--doc/man/nvme_set_features_simple.22
-rw-r--r--doc/man/nvme_set_features_sw_progress.22
-rw-r--r--doc/man/nvme_set_features_temp_thresh.22
-rw-r--r--doc/man/nvme_set_features_timestamp.22
-rw-r--r--doc/man/nvme_set_features_volatile_wc.22
-rw-r--r--doc/man/nvme_set_features_write_atomic.22
-rw-r--r--doc/man/nvme_set_features_write_protect.22
-rw-r--r--doc/man/nvme_set_features_write_protect2.22
-rw-r--r--doc/man/nvme_set_keyring.22
-rw-r--r--doc/man/nvme_set_property.22
-rw-r--r--doc/man/nvme_set_root.22
-rw-r--r--doc/man/nvme_smart_crit.22
-rw-r--r--doc/man/nvme_smart_egcw.22
-rw-r--r--doc/man/nvme_smart_log.22
-rw-r--r--doc/man/nvme_st_code.22
-rw-r--r--doc/man/nvme_st_curr_op.22
-rw-r--r--doc/man/nvme_st_result.22
-rw-r--r--doc/man/nvme_st_valid_diag_info.22
-rw-r--r--doc/man/nvme_status_code.22
-rw-r--r--doc/man/nvme_status_code_type.22
-rw-r--r--doc/man/nvme_status_equals.22
-rw-r--r--doc/man/nvme_status_field.22
-rw-r--r--doc/man/nvme_status_get_type.22
-rw-r--r--doc/man/nvme_status_get_value.22
-rw-r--r--doc/man/nvme_status_result.22
-rw-r--r--doc/man/nvme_status_to_errno.22
-rw-r--r--doc/man/nvme_status_to_string.22
-rw-r--r--doc/man/nvme_status_type.22
-rw-r--r--doc/man/nvme_streams_directive_params.22
-rw-r--r--doc/man/nvme_streams_directive_status.22
-rw-r--r--doc/man/nvme_submit_admin_passthru.22
-rw-r--r--doc/man/nvme_submit_admin_passthru64.22
-rw-r--r--doc/man/nvme_submit_io_passthru.22
-rw-r--r--doc/man/nvme_submit_io_passthru64.22
-rw-r--r--doc/man/nvme_subsys_filter.22
-rw-r--r--doc/man/nvme_subsys_type.22
-rw-r--r--doc/man/nvme_subsystem_first_ctrl.22
-rw-r--r--doc/man/nvme_subsystem_first_ns.22
-rw-r--r--doc/man/nvme_subsystem_for_each_ctrl.22
-rw-r--r--doc/man/nvme_subsystem_for_each_ctrl_safe.22
-rw-r--r--doc/man/nvme_subsystem_for_each_ns.22
-rw-r--r--doc/man/nvme_subsystem_for_each_ns_safe.22
-rw-r--r--doc/man/nvme_subsystem_get_application.22
-rw-r--r--doc/man/nvme_subsystem_get_host.22
-rw-r--r--doc/man/nvme_subsystem_get_iopolicy.22
-rw-r--r--doc/man/nvme_subsystem_get_name.22
-rw-r--r--doc/man/nvme_subsystem_get_nqn.22
-rw-r--r--doc/man/nvme_subsystem_get_sysfs_dir.22
-rw-r--r--doc/man/nvme_subsystem_get_type.22
-rw-r--r--doc/man/nvme_subsystem_lookup_namespace.22
-rw-r--r--doc/man/nvme_subsystem_next_ctrl.22
-rw-r--r--doc/man/nvme_subsystem_next_ns.22
-rw-r--r--doc/man/nvme_subsystem_release_fds.22
-rw-r--r--doc/man/nvme_subsystem_reset.22
-rw-r--r--doc/man/nvme_subsystem_set_application.22
-rw-r--r--doc/man/nvme_supported_cap_config_list_log.22
-rw-r--r--doc/man/nvme_supported_log_pages.22
-rw-r--r--doc/man/nvme_telemetry_da.22
-rw-r--r--doc/man/nvme_telemetry_log.22
-rw-r--r--doc/man/nvme_thermal_exc_event.22
-rw-r--r--doc/man/nvme_time_stamp_change_event.22
-rw-r--r--doc/man/nvme_timestamp.22
-rw-r--r--doc/man/nvme_unit.230
-rw-r--r--doc/man/nvme_unlink_ctrl.22
-rw-r--r--doc/man/nvme_update_config.22
-rw-r--r--doc/man/nvme_update_key.228
-rw-r--r--doc/man/nvme_uring_cmd.22
-rw-r--r--doc/man/nvme_verify.22
-rw-r--r--doc/man/nvme_version.22
-rw-r--r--doc/man/nvme_virt_mgmt_act.22
-rw-r--r--doc/man/nvme_virt_mgmt_rt.22
-rw-r--r--doc/man/nvme_virtual_mgmt.22
-rw-r--r--doc/man/nvme_vs.242
-rw-r--r--doc/man/nvme_write.22
-rw-r--r--doc/man/nvme_write_uncorrectable.22
-rw-r--r--doc/man/nvme_write_zeros.22
-rw-r--r--doc/man/nvme_zns_append.22
-rw-r--r--doc/man/nvme_zns_changed_zone_log.22
-rw-r--r--doc/man/nvme_zns_desc.22
-rw-r--r--doc/man/nvme_zns_id_ctrl.22
-rw-r--r--doc/man/nvme_zns_id_ns.22
-rw-r--r--doc/man/nvme_zns_identify_ctrl.22
-rw-r--r--doc/man/nvme_zns_identify_ns.22
-rw-r--r--doc/man/nvme_zns_lbafe.22
-rw-r--r--doc/man/nvme_zns_mgmt_recv.22
-rw-r--r--doc/man/nvme_zns_mgmt_send.22
-rw-r--r--doc/man/nvme_zns_recv_action.22
-rw-r--r--doc/man/nvme_zns_report_options.22
-rw-r--r--doc/man/nvme_zns_report_zones.22
-rw-r--r--doc/man/nvme_zns_send_action.22
-rw-r--r--doc/man/nvme_zns_za.22
-rw-r--r--doc/man/nvme_zns_zs.22
-rw-r--r--doc/man/nvme_zns_zt.22
-rw-r--r--doc/man/nvme_zone_report.22
-rw-r--r--doc/man/nvmf_add_ctrl.22
-rw-r--r--doc/man/nvmf_addr_family.22
-rw-r--r--doc/man/nvmf_adrfam_str.22
-rw-r--r--doc/man/nvmf_cms_str.22
-rw-r--r--doc/man/nvmf_connect_data.22
-rw-r--r--doc/man/nvmf_connect_disc_entry.22
-rw-r--r--doc/man/nvmf_default_config.22
-rw-r--r--doc/man/nvmf_dim_data.22
-rw-r--r--doc/man/nvmf_dim_entfmt.22
-rw-r--r--doc/man/nvmf_dim_etype.22
-rw-r--r--doc/man/nvmf_dim_tas.22
-rw-r--r--doc/man/nvmf_disc_eflags.22
-rw-r--r--doc/man/nvmf_disc_log_entry.22
-rw-r--r--doc/man/nvmf_discovery_log.22
-rw-r--r--doc/man/nvmf_eflags_str.22
-rw-r--r--doc/man/nvmf_exat_len.22
-rw-r--r--doc/man/nvmf_exattype.22
-rw-r--r--doc/man/nvmf_ext_attr.22
-rw-r--r--doc/man/nvmf_ext_die.22
-rw-r--r--doc/man/nvmf_get_discovery_log.22
-rw-r--r--doc/man/nvmf_get_discovery_wargs.22
-rw-r--r--doc/man/nvmf_hostid_from_file.22
-rw-r--r--doc/man/nvmf_hostnqn_from_file.22
-rw-r--r--doc/man/nvmf_hostnqn_generate.22
-rw-r--r--doc/man/nvmf_log_discovery_lid_support.22
-rw-r--r--doc/man/nvmf_log_discovery_lsp.22
-rw-r--r--doc/man/nvmf_prtype_str.22
-rw-r--r--doc/man/nvmf_qptype_str.22
-rw-r--r--doc/man/nvmf_rdma_cms.22
-rw-r--r--doc/man/nvmf_rdma_prtype.22
-rw-r--r--doc/man/nvmf_rdma_qptype.22
-rw-r--r--doc/man/nvmf_register_ctrl.22
-rw-r--r--doc/man/nvmf_sectype_str.22
-rw-r--r--doc/man/nvmf_subtype_str.22
-rw-r--r--doc/man/nvmf_tcp_sectype.22
-rw-r--r--doc/man/nvmf_treq.22
-rw-r--r--doc/man/nvmf_treq_str.22
-rw-r--r--doc/man/nvmf_trtype.22
-rw-r--r--doc/man/nvmf_trtype_str.22
-rw-r--r--doc/man/nvmf_update_config.22
-rw-r--r--doc/rst/fabrics.rst4
-rw-r--r--doc/rst/ioctl.rst52
-rw-r--r--doc/rst/linux.rst229
-rw-r--r--doc/rst/log.rst59
-rw-r--r--doc/rst/nbft.rst19
-rw-r--r--doc/rst/tree.rst14
-rw-r--r--doc/rst/types.rst1183
-rw-r--r--examples/mi-mctp.c4
-rw-r--r--meson.build4
-rw-r--r--src/libnvme.map13
-rw-r--r--src/meson.build4
-rw-r--r--src/nvme/crc32.c111
-rw-r--r--src/nvme/crc32.h9
-rw-r--r--src/nvme/fabrics.c39
-rw-r--r--src/nvme/fabrics.h4
-rw-r--r--src/nvme/filters.c62
-rw-r--r--src/nvme/ioctl.c185
-rw-r--r--src/nvme/ioctl.h156
-rw-r--r--src/nvme/json.c95
-rw-r--r--src/nvme/linux.c275
-rw-r--r--src/nvme/linux.h130
-rw-r--r--src/nvme/log.c25
-rw-r--r--src/nvme/log.h31
-rw-r--r--src/nvme/nbft.c6
-rw-r--r--src/nvme/nbft.h110
-rw-r--r--src/nvme/private.h15
-rw-r--r--src/nvme/sysfs.c86
-rw-r--r--src/nvme/tree.c71
-rw-r--r--src/nvme/tree.h8
-rw-r--r--src/nvme/types.h623
-rw-r--r--src/nvme/util.c16
-rw-r--r--src/nvme/util.h4
-rw-r--r--test/nbft/diffs/NBFT-Dell.PowerEdge.R660-fw1.5.5-mpath+discovery312
-rw-r--r--test/nbft/diffs/NBFT-Dell.PowerEdge.R660-fw1.5.5-single4
-rw-r--r--test/nbft/diffs/NBFT-Dell.PowerEdge.R7604
-rw-r--r--test/nbft/diffs/NBFT-auto-ipv62
-rw-r--r--test/nbft/diffs/NBFT-dhcp-ipv42
-rw-r--r--test/nbft/diffs/NBFT-dhcp-ipv62
-rw-r--r--test/nbft/diffs/NBFT-mpath+disc-ipv4+6_half141
-rw-r--r--test/nbft/diffs/NBFT-rhpoc2
-rw-r--r--test/nbft/diffs/NBFT-static-ipv42
-rw-r--r--test/nbft/diffs/NBFT-static-ipv4-discovery2
-rw-r--r--test/nbft/diffs/NBFT-static-ipv62
-rw-r--r--test/nbft/meson.build4
-rw-r--r--test/nbft/nbft-dump.c2
-rw-r--r--test/nbft/tables/NBFT-Dell.PowerEdge.R660-fw1.5.5-mpath+discoverybin0 -> 4147 bytes
-rw-r--r--test/nbft/tables/NBFT-mpath+disc-ipv4+6_halfbin0 -> 1922 bytes
-rw-r--r--test/register.c8
-rw-r--r--test/sysfs/meson.build45
-rwxr-xr-xtest/sysfs/setup.sh11
-rw-r--r--test/sysfs/sysfs-tree-diff.sh22
-rw-r--r--test/sysfs/sysfs.c77
-rw-r--r--test/test-util.c58
928 files changed, 6733 insertions, 1424 deletions
diff --git a/.gitignore b/.gitignore
index 89e032e..bfd45bd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,6 +12,7 @@ compile_commands.json
.build
.cache
+.vscode/
subprojects/*
!subprojects/*.wrap
diff --git a/doc/api.rst.in b/doc/api.rst.in
index 3478766..57188f6 100644
--- a/doc/api.rst.in
+++ b/doc/api.rst.in
@@ -16,3 +16,4 @@ functions.
.. include:: rst/filters.rst
.. include:: rst/util.rst
.. include:: rst/log.rst
+.. include:: rst/nbft.rst
diff --git a/doc/conf.py b/doc/conf.py
index b9d25e5..2c73f1c 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -12,7 +12,7 @@ copyright = '2020, Keith Busch'
author = 'Keith Busch <kbusch@kernel.org>'
master_doc = 'index'
-release = '1.8'
+release = '1.9'
# -- General configuration ---------------------------------------------------
diff --git a/doc/config-schema.json b/doc/config-schema.json
index 6d9e36a..cb0769f 100644
--- a/doc/config-schema.json
+++ b/doc/config-schema.json
@@ -98,6 +98,14 @@
"description": "Controller DH-HMAC-CHAP key",
"type": "string"
},
+ "keyring": {
+ "description": "Keyring for TLS key lookup",
+ "type": "string"
+ },
+ "tls_key": {
+ "description": "TLS key for the connection",
+ "type": "string"
+ },
"nr_io_queues": {
"description": "Number of I/O queues",
"type": "integer"
@@ -156,14 +164,6 @@
"type": "boolean",
"default": false
},
- "keyring": {
- "description": "Keyring for TLS key lookup",
- "type": "integer"
- },
- "tls_key": {
- "description": "TLS key for the connection",
- "type": "integer"
- },
"tls": {
"description": "Enable TLS encryption",
"type": "boolean",
diff --git a/doc/config-schema.json.in b/doc/config-schema.json.in
index 6d9e36a..cb0769f 100644
--- a/doc/config-schema.json.in
+++ b/doc/config-schema.json.in
@@ -98,6 +98,14 @@
"description": "Controller DH-HMAC-CHAP key",
"type": "string"
},
+ "keyring": {
+ "description": "Keyring for TLS key lookup",
+ "type": "string"
+ },
+ "tls_key": {
+ "description": "TLS key for the connection",
+ "type": "string"
+ },
"nr_io_queues": {
"description": "Number of I/O queues",
"type": "integer"
@@ -156,14 +164,6 @@
"type": "boolean",
"default": false
},
- "keyring": {
- "description": "Keyring for TLS key lookup",
- "type": "integer"
- },
- "tls_key": {
- "description": "TLS key for the connection",
- "type": "integer"
- },
"tls": {
"description": "Enable TLS encryption",
"type": "boolean",
diff --git a/doc/man/nbft_control.2 b/doc/man/nbft_control.2
index 6eee036..94005dd 100644
--- a/doc/man/nbft_control.2
+++ b/doc/man/nbft_control.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_control" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_control" "May 2024" "API Manual" LINUX
.SH NAME
struct nbft_control \- NBFT Table - Control Descriptor (Figure 8)
.SH SYNOPSIS
diff --git a/doc/man/nbft_control_flags.2 b/doc/man/nbft_control_flags.2
index e2343d2..c6e529c 100644
--- a/doc/man/nbft_control_flags.2
+++ b/doc/man/nbft_control_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_control_flags" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_control_flags" "May 2024" "API Manual" LINUX
.SH NAME
enum nbft_control_flags \- Control Descriptor Flags
.SH SYNOPSIS
diff --git a/doc/man/nbft_desc_type.2 b/doc/man/nbft_desc_type.2
index 890ab33..d7ec7b8 100644
--- a/doc/man/nbft_desc_type.2
+++ b/doc/man/nbft_desc_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_desc_type" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_desc_type" "May 2024" "API Manual" LINUX
.SH NAME
enum nbft_desc_type \- NBFT Elements - Descriptor Types (Figure 5)
.SH SYNOPSIS
diff --git a/doc/man/nbft_discovery.2 b/doc/man/nbft_discovery.2
index c3de0e9..7a3fe02 100644
--- a/doc/man/nbft_discovery.2
+++ b/doc/man/nbft_discovery.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_discovery" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_discovery" "May 2024" "API Manual" LINUX
.SH NAME
struct nbft_discovery \- Discovery Descriptor (Figure 24)
.SH SYNOPSIS
diff --git a/doc/man/nbft_discovery_flags.2 b/doc/man/nbft_discovery_flags.2
index 232490b..9a68153 100644
--- a/doc/man/nbft_discovery_flags.2
+++ b/doc/man/nbft_discovery_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_discovery_flags" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_discovery_flags" "May 2024" "API Manual" LINUX
.SH NAME
enum nbft_discovery_flags \- Discovery Descriptor Flags
.SH SYNOPSIS
diff --git a/doc/man/nbft_header.2 b/doc/man/nbft_header.2
index ff59e3d..b31289f 100644
--- a/doc/man/nbft_header.2
+++ b/doc/man/nbft_header.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_header" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_header" "May 2024" "API Manual" LINUX
.SH NAME
struct nbft_header \- NBFT Table - Header (Figure 8)
.SH SYNOPSIS
diff --git a/doc/man/nbft_heap_obj.2 b/doc/man/nbft_heap_obj.2
index a7c7fab..021168c 100644
--- a/doc/man/nbft_heap_obj.2
+++ b/doc/man/nbft_heap_obj.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_heap_obj" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_heap_obj" "May 2024" "API Manual" LINUX
.SH NAME
struct nbft_heap_obj \- NBFT Header Driver Signature
.SH SYNOPSIS
diff --git a/doc/man/nbft_hfi.2 b/doc/man/nbft_hfi.2
index 1caf368..6a3b6c8 100644
--- a/doc/man/nbft_hfi.2
+++ b/doc/man/nbft_hfi.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_hfi" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_hfi" "May 2024" "API Manual" LINUX
.SH NAME
struct nbft_hfi \- Host Fabric Interface (HFI) Descriptor (Figure 11)
.SH SYNOPSIS
diff --git a/doc/man/nbft_hfi_flags.2 b/doc/man/nbft_hfi_flags.2
index 558c767..1854283 100644
--- a/doc/man/nbft_hfi_flags.2
+++ b/doc/man/nbft_hfi_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_hfi_flags" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_hfi_flags" "May 2024" "API Manual" LINUX
.SH NAME
enum nbft_hfi_flags \- HFI Descriptor Flags
.SH SYNOPSIS
diff --git a/doc/man/nbft_hfi_info_tcp.2 b/doc/man/nbft_hfi_info_tcp.2
index 53436df..d082ff6 100644
--- a/doc/man/nbft_hfi_info_tcp.2
+++ b/doc/man/nbft_hfi_info_tcp.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_hfi_info_tcp" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_hfi_info_tcp" "May 2024" "API Manual" LINUX
.SH NAME
struct nbft_hfi_info_tcp \- HFI Transport Info Descriptor - NVMe/TCP (Figure 13)
.SH SYNOPSIS
diff --git a/doc/man/nbft_hfi_info_tcp_flags.2 b/doc/man/nbft_hfi_info_tcp_flags.2
index c8efaef..13bdcdb 100644
--- a/doc/man/nbft_hfi_info_tcp_flags.2
+++ b/doc/man/nbft_hfi_info_tcp_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_hfi_info_tcp_flags" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_hfi_info_tcp_flags" "May 2024" "API Manual" LINUX
.SH NAME
enum nbft_hfi_info_tcp_flags \- HFI Transport Flags
.SH SYNOPSIS
diff --git a/doc/man/nbft_host.2 b/doc/man/nbft_host.2
index 27c77bd..c7dfc57 100644
--- a/doc/man/nbft_host.2
+++ b/doc/man/nbft_host.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_host" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_host" "May 2024" "API Manual" LINUX
.SH NAME
struct nbft_host \- Host Descriptor (Figure 9)
.SH SYNOPSIS
diff --git a/doc/man/nbft_host_flags.2 b/doc/man/nbft_host_flags.2
index 1443059..ba613ac 100644
--- a/doc/man/nbft_host_flags.2
+++ b/doc/man/nbft_host_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_host_flags" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_host_flags" "May 2024" "API Manual" LINUX
.SH NAME
enum nbft_host_flags \- Host Flags
.SH SYNOPSIS
diff --git a/doc/man/nbft_info.2 b/doc/man/nbft_info.2
index 565b9cf..9d598ab 100644
--- a/doc/man/nbft_info.2
+++ b/doc/man/nbft_info.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_info" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_info" "May 2024" "API Manual" LINUX
.SH NAME
struct nbft_info \- The parsed NBFT table data.
.SH SYNOPSIS
diff --git a/doc/man/nbft_info_discovery.2 b/doc/man/nbft_info_discovery.2
index d4555e7..dfb0a70 100644
--- a/doc/man/nbft_info_discovery.2
+++ b/doc/man/nbft_info_discovery.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_info_discovery" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_info_discovery" "May 2024" "API Manual" LINUX
.SH NAME
struct nbft_info_discovery \- Discovery Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nbft_info_hfi.2 b/doc/man/nbft_info_hfi.2
index 7566e2b..435f665 100644
--- a/doc/man/nbft_info_hfi.2
+++ b/doc/man/nbft_info_hfi.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_info_hfi" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_info_hfi" "May 2024" "API Manual" LINUX
.SH NAME
struct nbft_info_hfi \- Host Fabric Interface (HFI) Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nbft_info_hfi_info_tcp.2 b/doc/man/nbft_info_hfi_info_tcp.2
index 52e3077..46deceb 100644
--- a/doc/man/nbft_info_hfi_info_tcp.2
+++ b/doc/man/nbft_info_hfi_info_tcp.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_info_hfi_info_tcp" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_info_hfi_info_tcp" "May 2024" "API Manual" LINUX
.SH NAME
struct nbft_info_hfi_info_tcp \- HFI Transport Info Descriptor - NVMe/TCP
.SH SYNOPSIS
diff --git a/doc/man/nbft_info_host.2 b/doc/man/nbft_info_host.2
index 4afc90b..c8f7738 100644
--- a/doc/man/nbft_info_host.2
+++ b/doc/man/nbft_info_host.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_info_host" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_info_host" "May 2024" "API Manual" LINUX
.SH NAME
struct nbft_info_host \- Host Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nbft_info_nid_type.2 b/doc/man/nbft_info_nid_type.2
index 74599ad..a730c47 100644
--- a/doc/man/nbft_info_nid_type.2
+++ b/doc/man/nbft_info_nid_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_info_nid_type" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_info_nid_type" "May 2024" "API Manual" LINUX
.SH NAME
enum nbft_info_nid_type \- Namespace Identifier Type (NIDT)
.SH SYNOPSIS
diff --git a/doc/man/nbft_info_primary_admin_host_flag.2 b/doc/man/nbft_info_primary_admin_host_flag.2
index a1c6db3..b49c9d8 100644
--- a/doc/man/nbft_info_primary_admin_host_flag.2
+++ b/doc/man/nbft_info_primary_admin_host_flag.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_info_primary_admin_host_flag" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_info_primary_admin_host_flag" "May 2024" "API Manual" LINUX
.SH NAME
enum nbft_info_primary_admin_host_flag \- Primary Administrative Host Descriptor Flags
.SH SYNOPSIS
diff --git a/doc/man/nbft_info_security.2 b/doc/man/nbft_info_security.2
index 915aeb7..2936634 100644
--- a/doc/man/nbft_info_security.2
+++ b/doc/man/nbft_info_security.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_info_security" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_info_security" "May 2024" "API Manual" LINUX
.SH NAME
struct nbft_info_security \- Security Profile Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nbft_info_subsystem_ns.2 b/doc/man/nbft_info_subsystem_ns.2
index ba11740..746afe7 100644
--- a/doc/man/nbft_info_subsystem_ns.2
+++ b/doc/man/nbft_info_subsystem_ns.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_info_subsystem_ns" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_info_subsystem_ns" "May 2024" "API Manual" LINUX
.SH NAME
struct nbft_info_subsystem_ns \- Subsystem Namespace (SSNS) info
.SH SYNOPSIS
@@ -40,6 +40,10 @@ struct nbft_info_subsystem_ns {
.br
.BI " char *dhcp_root_path_string;"
.br
+.BI " bool discovered;"
+.br
+.BI " bool unavailable;"
+.br
.BI "
};
.br
@@ -92,3 +96,9 @@ Descriptor) or 0 if not supported.
.IP "dhcp_root_path_string" 12
DHCP Root Path Override string (SSNS Extended
Information Descriptor).
+.IP "discovered" 12
+Indicates that this namespace was acquired
+through discovery.
+.IP "unavailable" 12
+Namespace is unavailable as indicated by
+the pre-OS driver.
diff --git a/doc/man/nbft_security.2 b/doc/man/nbft_security.2
index c8060b0..d29e07a 100644
--- a/doc/man/nbft_security.2
+++ b/doc/man/nbft_security.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_security" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_security" "May 2024" "API Manual" LINUX
.SH NAME
struct nbft_security \- Security Profile Descriptor (Figure 21)
.SH SYNOPSIS
diff --git a/doc/man/nbft_security_flags.2 b/doc/man/nbft_security_flags.2
index 8047a8b..cb9e4dc 100644
--- a/doc/man/nbft_security_flags.2
+++ b/doc/man/nbft_security_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_security_flags" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_security_flags" "May 2024" "API Manual" LINUX
.SH NAME
enum nbft_security_flags \- Security Profile Descriptor Flags (Figure 22)
.SH SYNOPSIS
diff --git a/doc/man/nbft_security_secret_type.2 b/doc/man/nbft_security_secret_type.2
index e7ecaaa..0c1b455 100644
--- a/doc/man/nbft_security_secret_type.2
+++ b/doc/man/nbft_security_secret_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_security_secret_type" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_security_secret_type" "May 2024" "API Manual" LINUX
.SH NAME
enum nbft_security_secret_type \- Security Profile Descriptor Secret Type
.SH SYNOPSIS
diff --git a/doc/man/nbft_ssns.2 b/doc/man/nbft_ssns.2
index f2982c7..30c7a81 100644
--- a/doc/man/nbft_ssns.2
+++ b/doc/man/nbft_ssns.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_ssns" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_ssns" "May 2024" "API Manual" LINUX
.SH NAME
struct nbft_ssns \- Subsystem Namespace (SSNS) Descriptor (Figure 15)
.SH SYNOPSIS
diff --git a/doc/man/nbft_ssns_ext_info.2 b/doc/man/nbft_ssns_ext_info.2
index 465f4d7..f070931 100644
--- a/doc/man/nbft_ssns_ext_info.2
+++ b/doc/man/nbft_ssns_ext_info.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nbft_ssns_ext_info" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nbft_ssns_ext_info" "May 2024" "API Manual" LINUX
.SH NAME
struct nbft_ssns_ext_info \- Subsystem and Namespace Extended Information Descriptor (Figure 19)
.SH SYNOPSIS
diff --git a/doc/man/nbft_ssns_ext_info_flags.2 b/doc/man/nbft_ssns_ext_info_flags.2
index 00932f4..7428a73 100644
--- a/doc/man/nbft_ssns_ext_info_flags.2
+++ b/doc/man/nbft_ssns_ext_info_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_ssns_ext_info_flags" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_ssns_ext_info_flags" "May 2024" "API Manual" LINUX
.SH NAME
enum nbft_ssns_ext_info_flags \- Subsystem and Namespace Extended Information Descriptor Flags
.SH SYNOPSIS
diff --git a/doc/man/nbft_ssns_flags.2 b/doc/man/nbft_ssns_flags.2
index b421e46..93a4bea 100644
--- a/doc/man/nbft_ssns_flags.2
+++ b/doc/man/nbft_ssns_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_ssns_flags" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_ssns_flags" "May 2024" "API Manual" LINUX
.SH NAME
enum nbft_ssns_flags \- Subsystem and Namespace Specific Flags Field (Figure 16)
.SH SYNOPSIS
diff --git a/doc/man/nbft_ssns_trflags.2 b/doc/man/nbft_ssns_trflags.2
index 2c177b8..3fed3fb 100644
--- a/doc/man/nbft_ssns_trflags.2
+++ b/doc/man/nbft_ssns_trflags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_ssns_trflags" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_ssns_trflags" "May 2024" "API Manual" LINUX
.SH NAME
enum nbft_ssns_trflags \- SSNS Transport Specific Flags Field (Figure 17)
.SH SYNOPSIS
diff --git a/doc/man/nbft_trtype.2 b/doc/man/nbft_trtype.2
index 8d3b7ea..50a8e07 100644
--- a/doc/man/nbft_trtype.2
+++ b/doc/man/nbft_trtype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nbft_trtype" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nbft_trtype" "May 2024" "API Manual" LINUX
.SH NAME
enum nbft_trtype \- NBFT Interface Transport Types (Figure 7)
.SH SYNOPSIS
diff --git a/doc/man/nvme_acq.2 b/doc/man/nvme_acq.2
new file mode 100644
index 0000000..c182177
--- /dev/null
+++ b/doc/man/nvme_acq.2
@@ -0,0 +1,12 @@
+.TH "libnvme" 9 "enum nvme_acq" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_acq \- This field indicates the admin completion queue base address
+.SH SYNOPSIS
+enum nvme_acq {
+.br
+.BI " NVME_ACQ_ACQB_SHIFT"
+
+};
+.SH Constants
+.IP "NVME_ACQ_ACQB_SHIFT" 12
+Shift amount to get the admin completion queue base
diff --git a/doc/man/nvme_admin_opcode.2 b/doc/man/nvme_admin_opcode.2
index 5ddc3be..20447d6 100644
--- a/doc/man/nvme_admin_opcode.2
+++ b/doc/man/nvme_admin_opcode.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_admin_opcode" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_admin_opcode" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_admin_opcode \- Known NVMe admin opcodes
.SH SYNOPSIS
diff --git a/doc/man/nvme_admin_passthru.2 b/doc/man/nvme_admin_passthru.2
index 817fd74..a8353aa 100644
--- a/doc/man/nvme_admin_passthru.2
+++ b/doc/man/nvme_admin_passthru.2
@@ -1,4 +1,4 @@
-.TH "nvme_admin_passthru" 9 "nvme_admin_passthru" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_admin_passthru" 9 "nvme_admin_passthru" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_admin_passthru \- Submit an nvme passthrough command
.SH SYNOPSIS
diff --git a/doc/man/nvme_admin_passthru64.2 b/doc/man/nvme_admin_passthru64.2
index f003d78..8b66887 100644
--- a/doc/man/nvme_admin_passthru64.2
+++ b/doc/man/nvme_admin_passthru64.2
@@ -1,4 +1,4 @@
-.TH "nvme_admin_passthru64" 9 "nvme_admin_passthru64" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_admin_passthru64" 9 "nvme_admin_passthru64" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_admin_passthru64 \- Submit a 64-bit nvme passthrough command
.SH SYNOPSIS
diff --git a/doc/man/nvme_ae_info_css_nvm.2 b/doc/man/nvme_ae_info_css_nvm.2
index 76f2ecf..25f4e7b 100644
--- a/doc/man/nvme_ae_info_css_nvm.2
+++ b/doc/man/nvme_ae_info_css_nvm.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ae_info_css_nvm" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ae_info_css_nvm" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_ae_info_css_nvm \- Asynchronous Event Information - I/O Command Specific Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_ae_info_error.2 b/doc/man/nvme_ae_info_error.2
index 57c40fa..e6fc0d8 100644
--- a/doc/man/nvme_ae_info_error.2
+++ b/doc/man/nvme_ae_info_error.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ae_info_error" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ae_info_error" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_ae_info_error \- Asynchronous Event Information - Error Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_ae_info_notice.2 b/doc/man/nvme_ae_info_notice.2
index e52cd26..ea369af 100644
--- a/doc/man/nvme_ae_info_notice.2
+++ b/doc/man/nvme_ae_info_notice.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ae_info_notice" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ae_info_notice" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_ae_info_notice \- Asynchronous Event Information - Notice
.SH SYNOPSIS
diff --git a/doc/man/nvme_ae_info_smart.2 b/doc/man/nvme_ae_info_smart.2
index c7c9b1f..9557fe5 100644
--- a/doc/man/nvme_ae_info_smart.2
+++ b/doc/man/nvme_ae_info_smart.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ae_info_smart" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ae_info_smart" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_ae_info_smart \- Asynchronous Event Information - SMART / Health Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_ae_type.2 b/doc/man/nvme_ae_type.2
index 23c5b23..e242054 100644
--- a/doc/man/nvme_ae_type.2
+++ b/doc/man/nvme_ae_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ae_type" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ae_type" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_ae_type \- Asynchronous Event Type
.SH SYNOPSIS
diff --git a/doc/man/nvme_aggregate_endurance_group_event.2 b/doc/man/nvme_aggregate_endurance_group_event.2
index 7400320..ebc374b 100644
--- a/doc/man/nvme_aggregate_endurance_group_event.2
+++ b/doc/man/nvme_aggregate_endurance_group_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_aggregate_endurance_group_event" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_aggregate_endurance_group_event" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_aggregate_endurance_group_event \- Endurance Group Event Aggregate
.SH SYNOPSIS
diff --git a/doc/man/nvme_aggregate_predictable_lat_event.2 b/doc/man/nvme_aggregate_predictable_lat_event.2
index 95174aa..e58657f 100644
--- a/doc/man/nvme_aggregate_predictable_lat_event.2
+++ b/doc/man/nvme_aggregate_predictable_lat_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_aggregate_predictable_lat_event" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_aggregate_predictable_lat_event" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_aggregate_predictable_lat_event \- Predictable Latency Event Aggregate Log Page
.SH SYNOPSIS
diff --git a/doc/man/nvme_ana_group_desc.2 b/doc/man/nvme_ana_group_desc.2
index d479fee..5b25005 100644
--- a/doc/man/nvme_ana_group_desc.2
+++ b/doc/man/nvme_ana_group_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_ana_group_desc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_ana_group_desc" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_ana_group_desc \- ANA Group Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_ana_log.2 b/doc/man/nvme_ana_log.2
index 4ceb9ac..f2e93f3 100644
--- a/doc/man/nvme_ana_log.2
+++ b/doc/man/nvme_ana_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_ana_log" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_ana_log" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_ana_log \- Asymmetric Namespace Access Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_ana_state.2 b/doc/man/nvme_ana_state.2
index c3c8909..a71ee79 100644
--- a/doc/man/nvme_ana_state.2
+++ b/doc/man/nvme_ana_state.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ana_state" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ana_state" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_ana_state \- ANA Group Descriptor - Asymmetric Namespace Access State
.SH SYNOPSIS
diff --git a/doc/man/nvme_apst_entry.2 b/doc/man/nvme_apst_entry.2
index 73485cd..233327c 100644
--- a/doc/man/nvme_apst_entry.2
+++ b/doc/man/nvme_apst_entry.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_apst_entry" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_apst_entry" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_apst_entry \- Autonomous Power State Transition
.SH SYNOPSIS
diff --git a/doc/man/nvme_aqa.2 b/doc/man/nvme_aqa.2
new file mode 100644
index 0000000..e03719c
--- /dev/null
+++ b/doc/man/nvme_aqa.2
@@ -0,0 +1,30 @@
+.TH "libnvme" 9 "enum nvme_aqa" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_aqa \- This field indicates the admin queue attributes
+.SH SYNOPSIS
+enum nvme_aqa {
+.br
+.BI " NVME_AQA_ASQS_SHIFT"
+,
+.br
+.br
+.BI " NVME_AQA_ACQS_SHIFT"
+,
+.br
+.br
+.BI " NVME_AQA_ASQS_MASK"
+,
+.br
+.br
+.BI " NVME_AQA_ACQS_MASK"
+
+};
+.SH Constants
+.IP "NVME_AQA_ASQS_SHIFT" 12
+Shift amount to get the admin submission queue size
+.IP "NVME_AQA_ACQS_SHIFT" 12
+Shift amount to get the admin completion queue size
+.IP "NVME_AQA_ASQS_MASK" 12
+Mask to get the admin submission queue size
+.IP "NVME_AQA_ACQS_MASK" 12
+Mask to get the admin completion queue size
diff --git a/doc/man/nvme_asq.2 b/doc/man/nvme_asq.2
new file mode 100644
index 0000000..5e5d188
--- /dev/null
+++ b/doc/man/nvme_asq.2
@@ -0,0 +1,12 @@
+.TH "libnvme" 9 "enum nvme_asq" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_asq \- This field indicates the admin submission queue base address
+.SH SYNOPSIS
+enum nvme_asq {
+.br
+.BI " NVME_ASQ_ASQB_SHIFT"
+
+};
+.SH Constants
+.IP "NVME_ASQ_ASQB_SHIFT" 12
+Shift amount to get the admin submission queue base
diff --git a/doc/man/nvme_boot_partition.2 b/doc/man/nvme_boot_partition.2
index 6187f5e..0b4b586 100644
--- a/doc/man/nvme_boot_partition.2
+++ b/doc/man/nvme_boot_partition.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_boot_partition" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_boot_partition" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_boot_partition \- Boot Partition Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_boot_partition_info.2 b/doc/man/nvme_boot_partition_info.2
new file mode 100644
index 0000000..84b11cd
--- /dev/null
+++ b/doc/man/nvme_boot_partition_info.2
@@ -0,0 +1,34 @@
+.TH "libnvme" 9 "enum nvme_boot_partition_info" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_boot_partition_info \- This field indicates the boot partition information
+.SH SYNOPSIS
+enum nvme_boot_partition_info {
+.br
+.BI " NVME_BOOT_PARTITION_INFO_BPSZ_SHIFT"
+,
+.br
+.br
+.BI " NVME_BOOT_PARTITION_INFO_ABPID_SHIFT"
+,
+.br
+.br
+.BI " NVME_BOOT_PARTITION_INFO_BPSZ_MASK"
+,
+.br
+.br
+.BI " NVME_BOOT_PARTITION_INFO_ABPID_MASK"
+
+};
+.SH Constants
+.IP "NVME_BOOT_PARTITION_INFO_BPSZ_SHIFT" 12
+Shift amount to get the boot partition size from
+the \fIstruct nvme_boot_partition\fP.bpinfo field.
+.IP "NVME_BOOT_PARTITION_INFO_ABPID_SHIFT" 12
+Shift amount to get the active boot partition ID
+from the \fIstruct nvme_boot_partition\fP.bpinfo field.
+.IP "NVME_BOOT_PARTITION_INFO_BPSZ_MASK" 12
+Mask to get the boot partition size from the
+\fIstruct nvme_boot_partition\fP.bpinfo field.
+.IP "NVME_BOOT_PARTITION_INFO_ABPID_MASK" 12
+Mask to get the active boot partition ID from the
+\fIstruct nvme_boot_partition\fP.bpinfo field.
diff --git a/doc/man/nvme_bpinfo.2 b/doc/man/nvme_bpinfo.2
new file mode 100644
index 0000000..be667c0
--- /dev/null
+++ b/doc/man/nvme_bpinfo.2
@@ -0,0 +1,66 @@
+.TH "libnvme" 9 "enum nvme_bpinfo" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_bpinfo \- This field indicates the boot partition information
+.SH SYNOPSIS
+enum nvme_bpinfo {
+.br
+.BI " NVME_BPINFO_BPSZ_SHIFT"
+,
+.br
+.br
+.BI " NVME_BPINFO_BRS_SHIFT"
+,
+.br
+.br
+.BI " NVME_BPINFO_ABPID_SHIFT"
+,
+.br
+.br
+.BI " NVME_BPINFO_BPSZ_MASK"
+,
+.br
+.br
+.BI " NVME_BPINFO_BRS_MASK"
+,
+.br
+.br
+.BI " NVME_BPINFO_ABPID_MASK"
+,
+.br
+.br
+.BI " NVME_BPINFO_BRS_NONE"
+,
+.br
+.br
+.BI " NVME_BPINFO_BRS_READ_IN_PROGRESS"
+,
+.br
+.br
+.BI " NVME_BPINFO_BRS_READ_SUCCESS"
+,
+.br
+.br
+.BI " NVME_BPINFO_BRS_READ_ERROR"
+
+};
+.SH Constants
+.IP "NVME_BPINFO_BPSZ_SHIFT" 12
+Shift amount to get the boot partition size
+.IP "NVME_BPINFO_BRS_SHIFT" 12
+Shift amount to get the boot read status
+.IP "NVME_BPINFO_ABPID_SHIFT" 12
+Shift amount to get the active boot partition ID
+.IP "NVME_BPINFO_BPSZ_MASK" 12
+Mask to get the boot partition size
+.IP "NVME_BPINFO_BRS_MASK" 12
+Mask to get the boot read status
+.IP "NVME_BPINFO_ABPID_MASK" 12
+Mask to get the active boot partition ID
+.IP "NVME_BPINFO_BRS_NONE" 12
+No boot partition read operation requested
+.IP "NVME_BPINFO_BRS_READ_IN_PROGRESS" 12
+Boot partition read in progress
+.IP "NVME_BPINFO_BRS_READ_SUCCESS" 12
+Boot partition read completed successfully
+.IP "NVME_BPINFO_BRS_READ_ERROR" 12
+Error completing boot partition read
diff --git a/doc/man/nvme_bpmbl.2 b/doc/man/nvme_bpmbl.2
new file mode 100644
index 0000000..1391c3f
--- /dev/null
+++ b/doc/man/nvme_bpmbl.2
@@ -0,0 +1,12 @@
+.TH "libnvme" 9 "enum nvme_bpmbl" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_bpmbl \- This field indicates the boot partition memory buffer location
+.SH SYNOPSIS
+enum nvme_bpmbl {
+.br
+.BI " NVME_BPMBL_BMBBA_SHIFT"
+
+};
+.SH Constants
+.IP "NVME_BPMBL_BMBBA_SHIFT" 12
+Shift amount to get the boot partition memory buffer base address
diff --git a/doc/man/nvme_bprsel.2 b/doc/man/nvme_bprsel.2
new file mode 100644
index 0000000..31d2512
--- /dev/null
+++ b/doc/man/nvme_bprsel.2
@@ -0,0 +1,42 @@
+.TH "libnvme" 9 "enum nvme_bprsel" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_bprsel \- This field indicates the boot partition read select
+.SH SYNOPSIS
+enum nvme_bprsel {
+.br
+.BI " NVME_BPRSEL_BPRSZ_SHIFT"
+,
+.br
+.br
+.BI " NVME_BPRSEL_BPROF_SHIFT"
+,
+.br
+.br
+.BI " NVME_BPRSEL_BPID_SHIFT"
+,
+.br
+.br
+.BI " NVME_BPRSEL_BPRSZ_MASK"
+,
+.br
+.br
+.BI " NVME_BPRSEL_BPROF_MASK"
+,
+.br
+.br
+.BI " NVME_BPRSEL_BPID_MASK"
+
+};
+.SH Constants
+.IP "NVME_BPRSEL_BPRSZ_SHIFT" 12
+Shift amount to get the boot partition read size
+.IP "NVME_BPRSEL_BPROF_SHIFT" 12
+Shift amount to get the boot partition read offset
+.IP "NVME_BPRSEL_BPID_SHIFT" 12
+Shift amount to get the boot partition identifier
+.IP "NVME_BPRSEL_BPRSZ_MASK" 12
+Mask to get the boot partition read size
+.IP "NVME_BPRSEL_BPROF_MASK" 12
+Mask to get the boot partition read offset
+.IP "NVME_BPRSEL_BPID_MASK" 12
+Mask to get the boot partition identifier
diff --git a/doc/man/nvme_cap.2 b/doc/man/nvme_cap.2
new file mode 100644
index 0000000..403901a
--- /dev/null
+++ b/doc/man/nvme_cap.2
@@ -0,0 +1,252 @@
+.TH "libnvme" 9 "enum nvme_cap" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_cap \- This field indicates the controller capabilities register
+.SH SYNOPSIS
+enum nvme_cap {
+.br
+.BI " NVME_CAP_MQES_SHIFT"
+,
+.br
+.br
+.BI " NVME_CAP_CQR_SHIFT"
+,
+.br
+.br
+.BI " NVME_CAP_AMS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CAP_TO_SHIFT"
+,
+.br
+.br
+.BI " NVME_CAP_DSTRD_SHIFT"
+,
+.br
+.br
+.BI " NVME_CAP_NSSRC_SHIFT"
+,
+.br
+.br
+.BI " NVME_CAP_CSS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CAP_BPS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CAP_CPS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CAP_MPSMIN_SHIFT"
+,
+.br
+.br
+.BI " NVME_CAP_MPSMAX_SHIFT"
+,
+.br
+.br
+.BI " NVME_CAP_PMRS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CAP_CMBS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CAP_NSSS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CAP_CRMS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CAP_MQES_MASK"
+,
+.br
+.br
+.BI " NVME_CAP_CQR_MASK"
+,
+.br
+.br
+.BI " NVME_CAP_AMS_MASK"
+,
+.br
+.br
+.BI " NVME_CAP_TO_MASK"
+,
+.br
+.br
+.BI " NVME_CAP_DSTRD_MASK"
+,
+.br
+.br
+.BI " NVME_CAP_NSSRC_MASK"
+,
+.br
+.br
+.BI " NVME_CAP_CSS_MASK"
+,
+.br
+.br
+.BI " NVME_CAP_BPS_MASK"
+,
+.br
+.br
+.BI " NVME_CAP_CPS_MASK"
+,
+.br
+.br
+.BI " NVME_CAP_MPSMIN_MASK"
+,
+.br
+.br
+.BI " NVME_CAP_MPSMAX_MASK"
+,
+.br
+.br
+.BI " NVME_CAP_PMRS_MASK"
+,
+.br
+.br
+.BI " NVME_CAP_CMBS_MASK"
+,
+.br
+.br
+.BI " NVME_CAP_NSSS_MASK"
+,
+.br
+.br
+.BI " NVME_CAP_CRMS_MASK"
+,
+.br
+.br
+.BI " NVME_CAP_AMS_WRR"
+,
+.br
+.br
+.BI " NVME_CAP_AMS_VS"
+,
+.br
+.br
+.BI " NVME_CAP_CSS_NVM"
+,
+.br
+.br
+.BI " NVME_CAP_CSS_CSI"
+,
+.br
+.br
+.BI " NVME_CAP_CSS_ADMIN"
+,
+.br
+.br
+.BI " NVME_CAP_CPS_NONE"
+,
+.br
+.br
+.BI " NVME_CAP_CPS_CTRL"
+,
+.br
+.br
+.BI " NVME_CAP_CPS_DOMAIN"
+,
+.br
+.br
+.BI " NVME_CAP_CPS_NVMS"
+,
+.br
+.br
+.BI " NVME_CAP_CRWMS"
+,
+.br
+.br
+.BI " NVME_CAP_CRIMS"
+
+};
+.SH Constants
+.IP "NVME_CAP_MQES_SHIFT" 12
+Shift amount to get the maximum queue entries supported
+.IP "NVME_CAP_CQR_SHIFT" 12
+Shift amount to get the contiguous queues required
+.IP "NVME_CAP_AMS_SHIFT" 12
+Shift amount to get the arbitration mechanism supported
+.IP "NVME_CAP_TO_SHIFT" 12
+Shift amount to get the timeout
+.IP "NVME_CAP_DSTRD_SHIFT" 12
+Shift amount to get the doorbell stride
+.IP "NVME_CAP_NSSRC_SHIFT" 12
+Shift amount to get the NVM subsystem reset supported
+.IP "NVME_CAP_CSS_SHIFT" 12
+Shift amount to get the command sets supported
+.IP "NVME_CAP_BPS_SHIFT" 12
+Shift amount to get the boot partition support
+.IP "NVME_CAP_CPS_SHIFT" 12
+Shift amount to get the controller power scope
+.IP "NVME_CAP_MPSMIN_SHIFT" 12
+Shift amount to get the memory page size minimum
+.IP "NVME_CAP_MPSMAX_SHIFT" 12
+Shift amount to get the memory page size maximum
+.IP "NVME_CAP_PMRS_SHIFT" 12
+Shift amount to get the persistent memory region supported
+.IP "NVME_CAP_CMBS_SHIFT" 12
+Shift amount to get the controller memory buffer supported
+.IP "NVME_CAP_NSSS_SHIFT" 12
+Shift amount to get the NVM subsystem shutdown supported
+.IP "NVME_CAP_CRMS_SHIFT" 12
+Shift amount to get the controller ready modes supported
+.IP "NVME_CAP_MQES_MASK" 12
+Mask to get the maximum queue entries supported
+.IP "NVME_CAP_CQR_MASK" 12
+Mask to get the contiguous queues required
+.IP "NVME_CAP_AMS_MASK" 12
+Mask to get the arbitration mechanism supported
+.IP "NVME_CAP_TO_MASK" 12
+Mask to get the timeout
+.IP "NVME_CAP_DSTRD_MASK" 12
+Mask to get the doorbell stride
+.IP "NVME_CAP_NSSRC_MASK" 12
+Mask to get the NVM subsystem reset supported
+.IP "NVME_CAP_CSS_MASK" 12
+Mask to get the command sets supported
+.IP "NVME_CAP_BPS_MASK" 12
+Mask to get the boot partition support
+.IP "NVME_CAP_CPS_MASK" 12
+Mask to get the controller power scope
+.IP "NVME_CAP_MPSMIN_MASK" 12
+Mask to get the memory page size minimum
+.IP "NVME_CAP_MPSMAX_MASK" 12
+Mask to get the memory page size maximum
+.IP "NVME_CAP_PMRS_MASK" 12
+Mask to get the persistent memory region supported
+.IP "NVME_CAP_CMBS_MASK" 12
+Mask to get the controller memory buffer supported
+.IP "NVME_CAP_NSSS_MASK" 12
+Mask to get the NVM subsystem shutdown supported
+.IP "NVME_CAP_CRMS_MASK" 12
+Mask to get the controller ready modes supported
+.IP "NVME_CAP_AMS_WRR" 12
+Weighted round robin with urgent priority class
+.IP "NVME_CAP_AMS_VS" 12
+Vendor specific
+.IP "NVME_CAP_CSS_NVM" 12
+NVM command set or a discovery controller
+.IP "NVME_CAP_CSS_CSI" 12
+Controller supports one or more I/O command sets
+.IP "NVME_CAP_CSS_ADMIN" 12
+No I/O command set is supported
+.IP "NVME_CAP_CPS_NONE" 12
+Not reported
+.IP "NVME_CAP_CPS_CTRL" 12
+Controller scope
+.IP "NVME_CAP_CPS_DOMAIN" 12
+Domain scope
+.IP "NVME_CAP_CPS_NVMS" 12
+NVM subsystem scope
+.IP "NVME_CAP_CRWMS" 12
+Controller ready with media support
+.IP "NVME_CAP_CRIMS" 12
+Controller ready independent of media support
diff --git a/doc/man/nvme_capacity_config_desc.2 b/doc/man/nvme_capacity_config_desc.2
index 0637575..303cbc9 100644
--- a/doc/man/nvme_capacity_config_desc.2
+++ b/doc/man/nvme_capacity_config_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_capacity_config_desc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_capacity_config_desc" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_capacity_config_desc \- Capacity Configuration structure definitions
.SH SYNOPSIS
diff --git a/doc/man/nvme_capacity_mgmt.2 b/doc/man/nvme_capacity_mgmt.2
index b9300d4..789533d 100644
--- a/doc/man/nvme_capacity_mgmt.2
+++ b/doc/man/nvme_capacity_mgmt.2
@@ -1,4 +1,4 @@
-.TH "nvme_capacity_mgmt" 9 "nvme_capacity_mgmt" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_capacity_mgmt" 9 "nvme_capacity_mgmt" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_capacity_mgmt \- Capacity management command
.SH SYNOPSIS
diff --git a/doc/man/nvme_cc.2 b/doc/man/nvme_cc.2
new file mode 100644
index 0000000..8c4a2dd
--- /dev/null
+++ b/doc/man/nvme_cc.2
@@ -0,0 +1,168 @@
+.TH "libnvme" 9 "enum nvme_cc" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_cc \- This field indicates the controller configuration
+.SH SYNOPSIS
+enum nvme_cc {
+.br
+.BI " NVME_CC_EN_SHIFT"
+,
+.br
+.br
+.BI " NVME_CC_CSS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CC_MPS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CC_AMS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CC_SHN_SHIFT"
+,
+.br
+.br
+.BI " NVME_CC_IOSQES_SHIFT"
+,
+.br
+.br
+.BI " NVME_CC_IOCQES_SHIFT"
+,
+.br
+.br
+.BI " NVME_CC_CRIME_SHIFT"
+,
+.br
+.br
+.BI " NVME_CC_EN_MASK"
+,
+.br
+.br
+.BI " NVME_CC_CSS_MASK"
+,
+.br
+.br
+.BI " NVME_CC_MPS_MASK"
+,
+.br
+.br
+.BI " NVME_CC_AMS_MASK"
+,
+.br
+.br
+.BI " NVME_CC_SHN_MASK"
+,
+.br
+.br
+.BI " NVME_CC_CRIME_MASK"
+,
+.br
+.br
+.BI " NVME_CC_IOSQES_MASK"
+,
+.br
+.br
+.BI " NVME_CC_IOCQES_MASK"
+,
+.br
+.br
+.BI " NVME_CC_CSS_NVM"
+,
+.br
+.br
+.BI " NVME_CC_CSS_CSI"
+,
+.br
+.br
+.BI " NVME_CC_CSS_ADMIN"
+,
+.br
+.br
+.BI " NVME_CC_AMS_RR"
+,
+.br
+.br
+.BI " NVME_CC_AMS_WRRU"
+,
+.br
+.br
+.BI " NVME_CC_AMS_VS"
+,
+.br
+.br
+.BI " NVME_CC_SHN_NONE"
+,
+.br
+.br
+.BI " NVME_CC_SHN_NORMAL"
+,
+.br
+.br
+.BI " NVME_CC_SHN_ABRUPT"
+,
+.br
+.br
+.BI " NVME_CC_CRWME"
+,
+.br
+.br
+.BI " NVME_CC_CRIME"
+
+};
+.SH Constants
+.IP "NVME_CC_EN_SHIFT" 12
+Shift amount to get the enable
+.IP "NVME_CC_CSS_SHIFT" 12
+Shift amount to get the I/O command set selected
+.IP "NVME_CC_MPS_SHIFT" 12
+Shift amount to get the memory page size
+.IP "NVME_CC_AMS_SHIFT" 12
+Shift amount to get the arbitration mechanism selected
+.IP "NVME_CC_SHN_SHIFT" 12
+Shift amount to get the shutdown notification
+.IP "NVME_CC_IOSQES_SHIFT" 12
+Shift amount to get the I/O submission queue entry size
+.IP "NVME_CC_IOCQES_SHIFT" 12
+Shift amount to get the I/O completion queue entry size
+.IP "NVME_CC_CRIME_SHIFT" 12
+Shift amount to get the controller ready independent of media enable
+.IP "NVME_CC_EN_MASK" 12
+Mask to get the enable
+.IP "NVME_CC_CSS_MASK" 12
+Mask to get the I/O command set selected
+.IP "NVME_CC_MPS_MASK" 12
+Mask to get the memory page size
+.IP "NVME_CC_AMS_MASK" 12
+Mask to get the arbitration mechanism selected
+.IP "NVME_CC_SHN_MASK" 12
+Mask to get the shutdown notification
+.IP "NVME_CC_CRIME_MASK" 12
+Mask to get the I/O submission queue entry size
+.IP "NVME_CC_IOSQES_MASK" 12
+Mask to get the I/O completion queue entry size
+.IP "NVME_CC_IOCQES_MASK" 12
+Mask to get the controller ready independent of media enable
+.IP "NVME_CC_CSS_NVM" 12
+NVM command set
+.IP "NVME_CC_CSS_CSI" 12
+All supported I/O command sets
+.IP "NVME_CC_CSS_ADMIN" 12
+Admin command set only
+.IP "NVME_CC_AMS_RR" 12
+Round robin
+.IP "NVME_CC_AMS_WRRU" 12
+Weighted round robin with urgent priority class
+.IP "NVME_CC_AMS_VS" 12
+Vendor specific
+.IP "NVME_CC_SHN_NONE" 12
+No notification; no effect
+.IP "NVME_CC_SHN_NORMAL" 12
+Normal shutdown notification
+.IP "NVME_CC_SHN_ABRUPT" 12
+Abrupt shutdown notification
+.IP "NVME_CC_CRWME" 12
+Controller ready with media enable
+.IP "NVME_CC_CRIME" 12
+Controller ready independent of media enable
diff --git a/doc/man/nvme_change_ns_event.2 b/doc/man/nvme_change_ns_event.2
index b0ca401..515b2de 100644
--- a/doc/man/nvme_change_ns_event.2
+++ b/doc/man/nvme_change_ns_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_change_ns_event" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_change_ns_event" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_change_ns_event \- Change Namespace Event Data
.SH SYNOPSIS
diff --git a/doc/man/nvme_channel_config_desc.2 b/doc/man/nvme_channel_config_desc.2
index e52dd76..1d81f4d 100644
--- a/doc/man/nvme_channel_config_desc.2
+++ b/doc/man/nvme_channel_config_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_channel_config_desc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_channel_config_desc" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_channel_config_desc \- Channel Configuration Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmb_size.2 b/doc/man/nvme_cmb_size.2
index 7de9c04..5d50190 100644
--- a/doc/man/nvme_cmb_size.2
+++ b/doc/man/nvme_cmb_size.2
@@ -1,4 +1,4 @@
-.TH "nvme_cmb_size" 9 "nvme_cmb_size" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_cmb_size" 9 "nvme_cmb_size" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_cmb_size \- Calculate size of the controller memory buffer
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmbebs.2 b/doc/man/nvme_cmbebs.2
new file mode 100644
index 0000000..58abb0b
--- /dev/null
+++ b/doc/man/nvme_cmbebs.2
@@ -0,0 +1,66 @@
+.TH "libnvme" 9 "enum nvme_cmbebs" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_cmbebs \- This field indicates the controller memory buffer elasticity buffer size
+.SH SYNOPSIS
+enum nvme_cmbebs {
+.br
+.BI " NVME_CMBEBS_CMBSZU_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBEBS_RBB_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBEBS_CMBWBZ_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBEBS_CMBSZU_MASK"
+,
+.br
+.br
+.BI " NVME_CMBEBS_RBB_MASK"
+,
+.br
+.br
+.BI " NVME_CMBEBS_CMBWBZ_MASK"
+,
+.br
+.br
+.BI " NVME_CMBEBS_CMBSZU_B"
+,
+.br
+.br
+.BI " NVME_CMBEBS_CMBSZU_1K"
+,
+.br
+.br
+.BI " NVME_CMBEBS_CMBSZU_1M"
+,
+.br
+.br
+.BI " NVME_CMBEBS_CMBSZU_1G"
+
+};
+.SH Constants
+.IP "NVME_CMBEBS_CMBSZU_SHIFT" 12
+Shift amount to get the CMB elasticity buffer size units
+.IP "NVME_CMBEBS_RBB_SHIFT" 12
+Shift amount to get the read bypass behavior
+.IP "NVME_CMBEBS_CMBWBZ_SHIFT" 12
+Shift amount to get the CMB elasiticity buffer size base
+.IP "NVME_CMBEBS_CMBSZU_MASK" 12
+Mask to get the CMB elasticity buffer size units
+.IP "NVME_CMBEBS_RBB_MASK" 12
+Mask to get the read bypass behavior
+.IP "NVME_CMBEBS_CMBWBZ_MASK" 12
+Mask to get the CMB elasiticity buffer size base
+.IP "NVME_CMBEBS_CMBSZU_B" 12
+Bytes granularity
+.IP "NVME_CMBEBS_CMBSZU_1K" 12
+1 KiB granularity
+.IP "NVME_CMBEBS_CMBSZU_1M" 12
+1 MiB granularity
+.IP "NVME_CMBEBS_CMBSZU_1G" 12
+1 GiB granularity
diff --git a/doc/man/nvme_cmbloc.2 b/doc/man/nvme_cmbloc.2
new file mode 100644
index 0000000..74e667e
--- /dev/null
+++ b/doc/man/nvme_cmbloc.2
@@ -0,0 +1,102 @@
+.TH "libnvme" 9 "enum nvme_cmbloc" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_cmbloc \- This field indicates the controller memory buffer location
+.SH SYNOPSIS
+enum nvme_cmbloc {
+.br
+.BI " NVME_CMBLOC_BIR_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBLOC_CQMMS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBLOC_CQPDS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBLOC_CDPLMS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBLOC_CDPCILS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBLOC_CDMMMS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBLOC_CQDA_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBLOC_OFST_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBLOC_BIR_MASK"
+,
+.br
+.br
+.BI " NVME_CMBLOC_CQMMS_MASK"
+,
+.br
+.br
+.BI " NVME_CMBLOC_CQPDS_MASK"
+,
+.br
+.br
+.BI " NVME_CMBLOC_CDPLMS_MASK"
+,
+.br
+.br
+.BI " NVME_CMBLOC_CDPCILS_MASK"
+,
+.br
+.br
+.BI " NVME_CMBLOC_CDMMMS_MASK"
+,
+.br
+.br
+.BI " NVME_CMBLOC_CQDA_MASK"
+,
+.br
+.br
+.BI " NVME_CMBLOC_OFST_MASK"
+
+};
+.SH Constants
+.IP "NVME_CMBLOC_BIR_SHIFT" 12
+Shift amount to get the base indicator register
+.IP "NVME_CMBLOC_CQMMS_SHIFT" 12
+Shift amount to get the CMB queue mixed memory support
+.IP "NVME_CMBLOC_CQPDS_SHIFT" 12
+Shift amount to get the CMB queue physically discontiguous support
+.IP "NVME_CMBLOC_CDPLMS_SHIFT" 12
+Shift amount to get the CMB data pointer mixed locations support
+.IP "NVME_CMBLOC_CDPCILS_SHIFT" 12
+Shift amount to get the CMB data pointer and command independent locations support
+.IP "NVME_CMBLOC_CDMMMS_SHIFT" 12
+Shift amount to get the CMB data metadata mixed memory support
+.IP "NVME_CMBLOC_CQDA_SHIFT" 12
+Shift amount to get the CMB queue dword alignment
+.IP "NVME_CMBLOC_OFST_SHIFT" 12
+Shift amount to get the offset
+.IP "NVME_CMBLOC_BIR_MASK" 12
+Mask to get the base indicator register
+.IP "NVME_CMBLOC_CQMMS_MASK" 12
+Mask to get the CMB queue mixed memory support
+.IP "NVME_CMBLOC_CQPDS_MASK" 12
+Mask to get the CMB queue physically discontiguous support
+.IP "NVME_CMBLOC_CDPLMS_MASK" 12
+Mask to get the CMB data pointer mixed locations support
+.IP "NVME_CMBLOC_CDPCILS_MASK" 12
+Mask to get the CMB data pointer and command independent locations support
+.IP "NVME_CMBLOC_CDMMMS_MASK" 12
+Mask to get the CMB data metadata mixed memory support
+.IP "NVME_CMBLOC_CQDA_MASK" 12
+Mask to get the CMB queue dword alignment
+.IP "NVME_CMBLOC_OFST_MASK" 12
+Mask to get the offset
diff --git a/doc/man/nvme_cmbmsc.2 b/doc/man/nvme_cmbmsc.2
new file mode 100644
index 0000000..8d55ed1
--- /dev/null
+++ b/doc/man/nvme_cmbmsc.2
@@ -0,0 +1,36 @@
+.TH "libnvme" 9 "enum nvme_cmbmsc" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_cmbmsc \- This field indicates the controller memory buffer memory space control
+.SH SYNOPSIS
+enum nvme_cmbmsc {
+.br
+.BI " NVME_CMBMSC_CRE_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBMSC_CMSE_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBMSC_CBA_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBMSC_CRE_MASK"
+,
+.br
+.br
+.BI " NVME_CMBMSC_CMSE_MASK"
+
+};
+.SH Constants
+.IP "NVME_CMBMSC_CRE_SHIFT" 12
+Shift amount to get the capabilities registers enabled
+.IP "NVME_CMBMSC_CMSE_SHIFT" 12
+Shift amount to get the controller memory space enable
+.IP "NVME_CMBMSC_CBA_SHIFT" 12
+Shift amount to get the controller base address
+.IP "NVME_CMBMSC_CRE_MASK" 12
+Mask to get the capabilities registers enabled
+.IP "NVME_CMBMSC_CMSE_MASK" 12
+Mask to get the controller memory space enable
diff --git a/doc/man/nvme_cmbsts.2 b/doc/man/nvme_cmbsts.2
new file mode 100644
index 0000000..1ea657a
--- /dev/null
+++ b/doc/man/nvme_cmbsts.2
@@ -0,0 +1,18 @@
+.TH "libnvme" 9 "enum nvme_cmbsts" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_cmbsts \- This field indicates the controller memory buffer status
+.SH SYNOPSIS
+enum nvme_cmbsts {
+.br
+.BI " NVME_CMBSTS_CBAI_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBSTS_CBAI_MASK"
+
+};
+.SH Constants
+.IP "NVME_CMBSTS_CBAI_SHIFT" 12
+Shift amount to get the controller base address invalid
+.IP "NVME_CMBSTS_CBAI_MASK" 12
+Mask to get the controller base address invalid
diff --git a/doc/man/nvme_cmbswtp.2 b/doc/man/nvme_cmbswtp.2
new file mode 100644
index 0000000..8e14bf6
--- /dev/null
+++ b/doc/man/nvme_cmbswtp.2
@@ -0,0 +1,54 @@
+.TH "libnvme" 9 "enum nvme_cmbswtp" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_cmbswtp \- This field indicates the controller memory buffer sustained write throughput
+.SH SYNOPSIS
+enum nvme_cmbswtp {
+.br
+.BI " NVME_CMBSWTP_CMBSWTU_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBSWTP_CMBSWTV_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBSWTP_CMBSWTU_MASK"
+,
+.br
+.br
+.BI " NVME_CMBSWTP_CMBSWTV_MASK"
+,
+.br
+.br
+.BI " NVME_CMBSWTP_CMBSWTU_B"
+,
+.br
+.br
+.BI " NVME_CMBSWTP_CMBSWTU_1K"
+,
+.br
+.br
+.BI " NVME_CMBSWTP_CMBSWTU_1M"
+,
+.br
+.br
+.BI " NVME_CMBSWTP_CMBSWTU_1G"
+
+};
+.SH Constants
+.IP "NVME_CMBSWTP_CMBSWTU_SHIFT" 12
+Shift amount to get the CMB sustained write throughput units
+.IP "NVME_CMBSWTP_CMBSWTV_SHIFT" 12
+Shift amount to get the CMB sustained write throughput
+.IP "NVME_CMBSWTP_CMBSWTU_MASK" 12
+Mask to get the CMB sustained write throughput units
+.IP "NVME_CMBSWTP_CMBSWTV_MASK" 12
+Mask to get the CMB sustained write throughput
+.IP "NVME_CMBSWTP_CMBSWTU_B" 12
+Bytes/second granularity
+.IP "NVME_CMBSWTP_CMBSWTU_1K" 12
+1 KiB/second granularity
+.IP "NVME_CMBSWTP_CMBSWTU_1M" 12
+1 MiB/second granularity
+.IP "NVME_CMBSWTP_CMBSWTU_1G" 12
+1 GiB/second granularity
diff --git a/doc/man/nvme_cmbsz.2 b/doc/man/nvme_cmbsz.2
new file mode 100644
index 0000000..7bd3ba2
--- /dev/null
+++ b/doc/man/nvme_cmbsz.2
@@ -0,0 +1,132 @@
+.TH "libnvme" 9 "enum nvme_cmbsz" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_cmbsz \- This field indicates the controller memory buffer size
+.SH SYNOPSIS
+enum nvme_cmbsz {
+.br
+.BI " NVME_CMBSZ_SQS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBSZ_CQS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBSZ_LISTS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBSZ_RDS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBSZ_WDS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBSZ_SZU_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBSZ_SZ_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMBSZ_SQS_MASK"
+,
+.br
+.br
+.BI " NVME_CMBSZ_CQS_MASK"
+,
+.br
+.br
+.BI " NVME_CMBSZ_LISTS_MASK"
+,
+.br
+.br
+.BI " NVME_CMBSZ_RDS_MASK"
+,
+.br
+.br
+.BI " NVME_CMBSZ_WDS_MASK"
+,
+.br
+.br
+.BI " NVME_CMBSZ_SZU_MASK"
+,
+.br
+.br
+.BI " NVME_CMBSZ_SZ_MASK"
+,
+.br
+.br
+.BI " NVME_CMBSZ_SZU_4K"
+,
+.br
+.br
+.BI " NVME_CMBSZ_SZU_64K"
+,
+.br
+.br
+.BI " NVME_CMBSZ_SZU_1M"
+,
+.br
+.br
+.BI " NVME_CMBSZ_SZU_16M"
+,
+.br
+.br
+.BI " NVME_CMBSZ_SZU_256M"
+,
+.br
+.br
+.BI " NVME_CMBSZ_SZU_4G"
+,
+.br
+.br
+.BI " NVME_CMBSZ_SZU_64G"
+
+};
+.SH Constants
+.IP "NVME_CMBSZ_SQS_SHIFT" 12
+Shift amount to get the submission queue support
+.IP "NVME_CMBSZ_CQS_SHIFT" 12
+Shift amount to get the completion queue support
+.IP "NVME_CMBSZ_LISTS_SHIFT" 12
+Shift amount to get the PLP SGL list support
+.IP "NVME_CMBSZ_RDS_SHIFT" 12
+Shift amount to get the read data support
+.IP "NVME_CMBSZ_WDS_SHIFT" 12
+Shift amount to get the write data support
+.IP "NVME_CMBSZ_SZU_SHIFT" 12
+Shift amount to get the size units
+.IP "NVME_CMBSZ_SZ_SHIFT" 12
+Shift amount to get the size
+.IP "NVME_CMBSZ_SQS_MASK" 12
+Mask to get the submission queue support
+.IP "NVME_CMBSZ_CQS_MASK" 12
+Mask to get the completion queue support
+.IP "NVME_CMBSZ_LISTS_MASK" 12
+Mask to get the PLP SGL list support
+.IP "NVME_CMBSZ_RDS_MASK" 12
+Mask to get the read data support
+.IP "NVME_CMBSZ_WDS_MASK" 12
+Mask to get the write data support
+.IP "NVME_CMBSZ_SZU_MASK" 12
+Mask to get the size units
+.IP "NVME_CMBSZ_SZ_MASK" 12
+Mask to get the size
+.IP "NVME_CMBSZ_SZU_4K" 12
+4 KiB
+.IP "NVME_CMBSZ_SZU_64K" 12
+64 KiB
+.IP "NVME_CMBSZ_SZU_1M" 12
+1 MiB
+.IP "NVME_CMBSZ_SZU_16M" 12
+16 MiB
+.IP "NVME_CMBSZ_SZU_256M" 12
+256 MiB
+.IP "NVME_CMBSZ_SZU_4G" 12
+4 GiB
+.IP "NVME_CMBSZ_SZU_64G" 12
+64 GiB
diff --git a/doc/man/nvme_cmd_effects.2 b/doc/man/nvme_cmd_effects.2
index 3e253fa..2245aeb 100644
--- a/doc/man/nvme_cmd_effects.2
+++ b/doc/man/nvme_cmd_effects.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cmd_effects" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cmd_effects" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_cmd_effects \- Commands Supported and Effects
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmd_effects_log.2 b/doc/man/nvme_cmd_effects_log.2
index 4f3a706..138a5e9 100644
--- a/doc/man/nvme_cmd_effects_log.2
+++ b/doc/man/nvme_cmd_effects_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_cmd_effects_log" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_cmd_effects_log" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_cmd_effects_log \- Commands Supported and Effects Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmd_format_mset.2 b/doc/man/nvme_cmd_format_mset.2
index 541bdc8..fab8c17 100644
--- a/doc/man/nvme_cmd_format_mset.2
+++ b/doc/man/nvme_cmd_format_mset.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cmd_format_mset" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cmd_format_mset" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_cmd_format_mset \- Format NVM - Metadata Settings
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmd_format_pi.2 b/doc/man/nvme_cmd_format_pi.2
index e5dec06..3cf9f44 100644
--- a/doc/man/nvme_cmd_format_pi.2
+++ b/doc/man/nvme_cmd_format_pi.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cmd_format_pi" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cmd_format_pi" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_cmd_format_pi \- Format NVM - Protection Information
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmd_format_pil.2 b/doc/man/nvme_cmd_format_pil.2
index 3fa74f7..bb898f1 100644
--- a/doc/man/nvme_cmd_format_pil.2
+++ b/doc/man/nvme_cmd_format_pil.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cmd_format_pil" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cmd_format_pil" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_cmd_format_pil \- Format NVM - Protection Information Location
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmd_format_ses.2 b/doc/man/nvme_cmd_format_ses.2
index 344f0fb..c99e2d9 100644
--- a/doc/man/nvme_cmd_format_ses.2
+++ b/doc/man/nvme_cmd_format_ses.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cmd_format_ses" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cmd_format_ses" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_cmd_format_ses \- Format NVM - Secure Erase Settings
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmd_get_log_lid.2 b/doc/man/nvme_cmd_get_log_lid.2
index f1e9ff0..0cfefb4 100644
--- a/doc/man/nvme_cmd_get_log_lid.2
+++ b/doc/man/nvme_cmd_get_log_lid.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cmd_get_log_lid" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cmd_get_log_lid" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_cmd_get_log_lid \- Get Log Page -Log Page Identifiers
.SH SYNOPSIS
@@ -84,6 +84,10 @@ enum nvme_cmd_get_log_lid {
,
.br
.br
+.BI " NVME_LOG_LID_CMD_AND_FEAT_LOCKDOWN"
+,
+.br
+.br
.BI " NVME_LOG_LID_BOOT_PARTITION"
,
.br
@@ -164,6 +168,8 @@ Supported Capacity Configuration Lis
Feature Identifiers Supported and Effects
.IP "NVME_LOG_LID_MI_CMD_SUPPORTED_EFFECTS" 12
NVMe-MI Commands Supported and Effects
+.IP "NVME_LOG_LID_CMD_AND_FEAT_LOCKDOWN" 12
+Command and Feature Lockdown
.IP "NVME_LOG_LID_BOOT_PARTITION" 12
Boot Partition
.IP "NVME_LOG_LID_PHY_RX_EOM" 12
diff --git a/doc/man/nvme_cmd_get_log_telemetry_host_lsp.2 b/doc/man/nvme_cmd_get_log_telemetry_host_lsp.2
index 7b82a0c..3252d13 100644
--- a/doc/man/nvme_cmd_get_log_telemetry_host_lsp.2
+++ b/doc/man/nvme_cmd_get_log_telemetry_host_lsp.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_cmd_get_log_telemetry_host_lsp" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_cmd_get_log_telemetry_host_lsp" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_cmd_get_log_telemetry_host_lsp \- Telemetry Host-Initiated log specific field
.SH SYNOPSIS
diff --git a/doc/man/nvme_cmic.2 b/doc/man/nvme_cmic.2
new file mode 100644
index 0000000..e1b4ced
--- /dev/null
+++ b/doc/man/nvme_cmic.2
@@ -0,0 +1,66 @@
+.TH "libnvme" 9 "enum nvme_cmic" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_cmic \- This field indicates the controller multi-path I/O and NS sharing capabilities
+.SH SYNOPSIS
+enum nvme_cmic {
+.br
+.BI " NVME_CMIC_MULTI_PORT_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMIC_MULTI_CTRL_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMIC_MULTI_SRIOV_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMIC_MULTI_ANA_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMIC_MULTI_RSVD_SHIFT"
+,
+.br
+.br
+.BI " NVME_CMIC_MULTI_PORT_MASK"
+,
+.br
+.br
+.BI " NVME_CMIC_MULTI_CTRL_MASK"
+,
+.br
+.br
+.BI " NVME_CMIC_MULTI_SRIOV_MASK"
+,
+.br
+.br
+.BI " NVME_CMIC_MULTI_ANA_MASK"
+,
+.br
+.br
+.BI " NVME_CMIC_MULTI_RSVD_MASK"
+
+};
+.SH Constants
+.IP "NVME_CMIC_MULTI_PORT_SHIFT" 12
+Shift amount to get the NVM subsystem port
+.IP "NVME_CMIC_MULTI_CTRL_SHIFT" 12
+Shift amount to get the controllers
+.IP "NVME_CMIC_MULTI_SRIOV_SHIFT" 12
+Shift amount to get the SR-IOV virtual function
+.IP "NVME_CMIC_MULTI_ANA_SHIFT" 12
+Shift amount to get the asymmetric namespace access reporting
+.IP "NVME_CMIC_MULTI_RSVD_SHIFT" 12
+Shift amount to get the reserved
+.IP "NVME_CMIC_MULTI_PORT_MASK" 12
+Mask to get the NVM subsystem port
+.IP "NVME_CMIC_MULTI_CTRL_MASK" 12
+Mask to get the controllers
+.IP "NVME_CMIC_MULTI_SRIOV_MASK" 12
+Mask to get the SR-IOV virtual function
+.IP "NVME_CMIC_MULTI_ANA_MASK" 12
+Mask to get the asymmetric namespace access reporting
+.IP "NVME_CMIC_MULTI_RSVD_MASK" 12
+Mask to get the reserved
diff --git a/doc/man/nvme_compare.2 b/doc/man/nvme_compare.2
index d3554f0..5710ae6 100644
--- a/doc/man/nvme_compare.2
+++ b/doc/man/nvme_compare.2
@@ -1,4 +1,4 @@
-.TH "nvme_compare" 9 "nvme_compare" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_compare" 9 "nvme_compare" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_compare \- Submit an nvme user compare command
.SH SYNOPSIS
diff --git a/doc/man/nvme_connect_err.2 b/doc/man/nvme_connect_err.2
index 50e04b2..bf29c7c 100644
--- a/doc/man/nvme_connect_err.2
+++ b/doc/man/nvme_connect_err.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_connect_err" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_connect_err" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_connect_err \- nvme connect error codes
.SH SYNOPSIS
diff --git a/doc/man/nvme_constants.2 b/doc/man/nvme_constants.2
index 167d6ae..3419612 100644
--- a/doc/man/nvme_constants.2
+++ b/doc/man/nvme_constants.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_constants" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_constants" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_constants \- A place to stash various constant nvme values
.SH SYNOPSIS
diff --git a/doc/man/nvme_copy.2 b/doc/man/nvme_copy.2
index 30e693c..85660f5 100644
--- a/doc/man/nvme_copy.2
+++ b/doc/man/nvme_copy.2
@@ -1,4 +1,4 @@
-.TH "nvme_copy" 9 "nvme_copy" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_copy" 9 "nvme_copy" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_copy \- Copy command
.SH SYNOPSIS
diff --git a/doc/man/nvme_copy_range.2 b/doc/man/nvme_copy_range.2
index 0733e70..0550005 100644
--- a/doc/man/nvme_copy_range.2
+++ b/doc/man/nvme_copy_range.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_copy_range" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_copy_range" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_copy_range \- Copy - Source Range Entries Descriptor Format
.SH SYNOPSIS
diff --git a/doc/man/nvme_copy_range_f1.2 b/doc/man/nvme_copy_range_f1.2
index 63920ba..23b953b 100644
--- a/doc/man/nvme_copy_range_f1.2
+++ b/doc/man/nvme_copy_range_f1.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_copy_range_f1" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_copy_range_f1" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_copy_range_f1 \- Copy - Source Range Entries Descriptor Format 1h
.SH SYNOPSIS
diff --git a/doc/man/nvme_copy_range_f2.2 b/doc/man/nvme_copy_range_f2.2
index a8530b5..d86c51b 100644
--- a/doc/man/nvme_copy_range_f2.2
+++ b/doc/man/nvme_copy_range_f2.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_copy_range_f2" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_copy_range_f2" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_copy_range_f2 \- Copy - Source Range Entries Descriptor Format 2h
.SH SYNOPSIS
diff --git a/doc/man/nvme_copy_range_f3.2 b/doc/man/nvme_copy_range_f3.2
index cb20072..8d2718f 100644
--- a/doc/man/nvme_copy_range_f3.2
+++ b/doc/man/nvme_copy_range_f3.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_copy_range_f3" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_copy_range_f3" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_copy_range_f3 \- Copy - Source Range Entries Descriptor Format 3h
.SH SYNOPSIS
diff --git a/doc/man/nvme_copy_range_sopt.2 b/doc/man/nvme_copy_range_sopt.2
index 5ec5c09..7467f1b 100644
--- a/doc/man/nvme_copy_range_sopt.2
+++ b/doc/man/nvme_copy_range_sopt.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_copy_range_sopt" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_copy_range_sopt" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_copy_range_sopt \- NVMe Copy Range Source Options
.SH SYNOPSIS
diff --git a/doc/man/nvme_create_ctrl.2 b/doc/man/nvme_create_ctrl.2
index 43cec53..faaa1ed 100644
--- a/doc/man/nvme_create_ctrl.2
+++ b/doc/man/nvme_create_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_create_ctrl" 9 "nvme_create_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_create_ctrl" 9 "nvme_create_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_create_ctrl \- Allocate an unconnected NVMe controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_create_root.2 b/doc/man/nvme_create_root.2
index ae60098..92f15bd 100644
--- a/doc/man/nvme_create_root.2
+++ b/doc/man/nvme_create_root.2
@@ -1,4 +1,4 @@
-.TH "nvme_create_root" 9 "nvme_create_root" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_create_root" 9 "nvme_create_root" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_create_root \- Initialize root object
.SH SYNOPSIS
diff --git a/doc/man/nvme_crto.2 b/doc/man/nvme_crto.2
new file mode 100644
index 0000000..dd47dd0
--- /dev/null
+++ b/doc/man/nvme_crto.2
@@ -0,0 +1,30 @@
+.TH "libnvme" 9 "enum nvme_crto" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_crto \- This field indicates the controller ready timeouts
+.SH SYNOPSIS
+enum nvme_crto {
+.br
+.BI " NVME_CRTO_CRWMT_SHIFT"
+,
+.br
+.br
+.BI " NVME_CRTO_CRIMT_SHIFT"
+,
+.br
+.br
+.BI " NVME_CRTO_CRWMT_MASK"
+,
+.br
+.br
+.BI " NVME_CRTO_CRIMT_MASK"
+
+};
+.SH Constants
+.IP "NVME_CRTO_CRWMT_SHIFT" 12
+Shift amount to get the controller ready with media timeout
+.IP "NVME_CRTO_CRIMT_SHIFT" 12
+Shift amount to get the controller ready independent of media timeout
+.IP "NVME_CRTO_CRWMT_MASK" 12
+Mask to get the controller ready with media timeout
+.IP "NVME_CRTO_CRIMT_MASK" 12
+Mask to get the controller ready independent of media timeout
diff --git a/doc/man/nvme_csi.2 b/doc/man/nvme_csi.2
index b826bef..28047d0 100644
--- a/doc/man/nvme_csi.2
+++ b/doc/man/nvme_csi.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_csi" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_csi" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_csi \- Defined command set indicators
.SH SYNOPSIS
diff --git a/doc/man/nvme_csts.2 b/doc/man/nvme_csts.2
new file mode 100644
index 0000000..a36d313
--- /dev/null
+++ b/doc/man/nvme_csts.2
@@ -0,0 +1,102 @@
+.TH "libnvme" 9 "enum nvme_csts" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_csts \- This field indicates the controller status register
+.SH SYNOPSIS
+enum nvme_csts {
+.br
+.BI " NVME_CSTS_RDY_SHIFT"
+,
+.br
+.br
+.BI " NVME_CSTS_CFS_SHIFT"
+,
+.br
+.br
+.BI " NVME_CSTS_SHST_SHIFT"
+,
+.br
+.br
+.BI " NVME_CSTS_NSSRO_SHIFT"
+,
+.br
+.br
+.BI " NVME_CSTS_PP_SHIFT"
+,
+.br
+.br
+.BI " NVME_CSTS_ST_SHIFT"
+,
+.br
+.br
+.BI " NVME_CSTS_RDY_MASK"
+,
+.br
+.br
+.BI " NVME_CSTS_CFS_MASK"
+,
+.br
+.br
+.BI " NVME_CSTS_SHST_MASK"
+,
+.br
+.br
+.BI " NVME_CSTS_NSSRO_MASK"
+,
+.br
+.br
+.BI " NVME_CSTS_PP_MASK"
+,
+.br
+.br
+.BI " NVME_CSTS_ST_MASK"
+,
+.br
+.br
+.BI " NVME_CSTS_SHST_NORMAL"
+,
+.br
+.br
+.BI " NVME_CSTS_SHST_OCCUR"
+,
+.br
+.br
+.BI " NVME_CSTS_SHST_CMPLT"
+,
+.br
+.br
+.BI " NVME_CSTS_SHN_MASK"
+
+};
+.SH Constants
+.IP "NVME_CSTS_RDY_SHIFT" 12
+Shift amount to get the ready
+.IP "NVME_CSTS_CFS_SHIFT" 12
+Shift amount to get the controller fatal status
+.IP "NVME_CSTS_SHST_SHIFT" 12
+Shift amount to get the shutdown status
+.IP "NVME_CSTS_NSSRO_SHIFT" 12
+Shift amount to get the NVM subsystem reset occurred
+.IP "NVME_CSTS_PP_SHIFT" 12
+Shift amount to get the processing paused
+.IP "NVME_CSTS_ST_SHIFT" 12
+Shift amount to get the shutdown type
+.IP "NVME_CSTS_RDY_MASK" 12
+Mask to get the ready
+.IP "NVME_CSTS_CFS_MASK" 12
+Mask to get the controller fatal status
+.IP "NVME_CSTS_SHST_MASK" 12
+Mask to get the shutdown status
+.IP "NVME_CSTS_NSSRO_MASK" 12
+Mask to get the NVM subsystem reset occurred
+.IP "NVME_CSTS_PP_MASK" 12
+Mask to get the processing paused
+.IP "NVME_CSTS_ST_MASK" 12
+Mask to get the shutdown type
+.IP "NVME_CSTS_SHST_NORMAL" 12
+Normal operation
+.IP "NVME_CSTS_SHST_OCCUR" 12
+Shutdown processing occurring
+.IP "NVME_CSTS_SHST_CMPLT" 12
+Shutdown processing complete
+.IP "NVME_CSTS_SHN_MASK" 12
+Deprecated mask to get the shutdown status
diff --git a/doc/man/nvme_ctrl_config_match.2 b/doc/man/nvme_ctrl_config_match.2
index 44a8a11..b3d3ae6 100644
--- a/doc/man/nvme_ctrl_config_match.2
+++ b/doc/man/nvme_ctrl_config_match.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_config_match" 9 "nvme_ctrl_config_match" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_config_match" 9 "nvme_ctrl_config_match" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_config_match \- Check if ctrl @c matches config params
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_find.2 b/doc/man/nvme_ctrl_find.2
index cb2cf61..e58c204 100644
--- a/doc/man/nvme_ctrl_find.2
+++ b/doc/man/nvme_ctrl_find.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_find" 9 "nvme_ctrl_find" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_find" 9 "nvme_ctrl_find" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_find \- Locate an existing controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_first_ns.2 b/doc/man/nvme_ctrl_first_ns.2
index f9e174a..b43ae6c 100644
--- a/doc/man/nvme_ctrl_first_ns.2
+++ b/doc/man/nvme_ctrl_first_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_first_ns" 9 "nvme_ctrl_first_ns" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_first_ns" 9 "nvme_ctrl_first_ns" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_first_ns \- Start namespace iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_first_path.2 b/doc/man/nvme_ctrl_first_path.2
index 2c682cd..7663358 100644
--- a/doc/man/nvme_ctrl_first_path.2
+++ b/doc/man/nvme_ctrl_first_path.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_first_path" 9 "nvme_ctrl_first_path" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_first_path" 9 "nvme_ctrl_first_path" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_first_path \- Start path iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_for_each_ns.2 b/doc/man/nvme_ctrl_for_each_ns.2
index 71fdd5f..6f879a8 100644
--- a/doc/man/nvme_ctrl_for_each_ns.2
+++ b/doc/man/nvme_ctrl_for_each_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_for_each_ns" 9 "nvme_ctrl_for_each_ns" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_for_each_ns" 9 "nvme_ctrl_for_each_ns" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_for_each_ns \- Traverse namespaces
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_for_each_ns_safe.2 b/doc/man/nvme_ctrl_for_each_ns_safe.2
index 78c9c03..d01faa4 100644
--- a/doc/man/nvme_ctrl_for_each_ns_safe.2
+++ b/doc/man/nvme_ctrl_for_each_ns_safe.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_for_each_ns_safe" 9 "nvme_ctrl_for_each_ns_safe" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_for_each_ns_safe" 9 "nvme_ctrl_for_each_ns_safe" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_for_each_ns_safe \- Traverse namespaces
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_for_each_path.2 b/doc/man/nvme_ctrl_for_each_path.2
index aa192c2..4705b9b 100644
--- a/doc/man/nvme_ctrl_for_each_path.2
+++ b/doc/man/nvme_ctrl_for_each_path.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_for_each_path" 9 "nvme_ctrl_for_each_path" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_for_each_path" 9 "nvme_ctrl_for_each_path" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_for_each_path \- Traverse paths
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_for_each_path_safe.2 b/doc/man/nvme_ctrl_for_each_path_safe.2
index c8dfc29..93203c4 100644
--- a/doc/man/nvme_ctrl_for_each_path_safe.2
+++ b/doc/man/nvme_ctrl_for_each_path_safe.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_for_each_path_safe" 9 "nvme_ctrl_for_each_path_safe" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_for_each_path_safe" 9 "nvme_ctrl_for_each_path_safe" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_for_each_path_safe \- Traverse paths
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_address.2 b/doc/man/nvme_ctrl_get_address.2
index 6d15499..7633a74 100644
--- a/doc/man/nvme_ctrl_get_address.2
+++ b/doc/man/nvme_ctrl_get_address.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_address" 9 "nvme_ctrl_get_address" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_address" 9 "nvme_ctrl_get_address" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_address \- Address string of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_config.2 b/doc/man/nvme_ctrl_get_config.2
index 3cbc9e4..fa0a0dd 100644
--- a/doc/man/nvme_ctrl_get_config.2
+++ b/doc/man/nvme_ctrl_get_config.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_config" 9 "nvme_ctrl_get_config" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_config" 9 "nvme_ctrl_get_config" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_config \- Fabrics configuration of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_dhchap_host_key.2 b/doc/man/nvme_ctrl_get_dhchap_host_key.2
index 65e7e40..2bd285b 100644
--- a/doc/man/nvme_ctrl_get_dhchap_host_key.2
+++ b/doc/man/nvme_ctrl_get_dhchap_host_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_dhchap_host_key" 9 "nvme_ctrl_get_dhchap_host_key" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_dhchap_host_key" 9 "nvme_ctrl_get_dhchap_host_key" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_dhchap_host_key \- Return host key
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_dhchap_key.2 b/doc/man/nvme_ctrl_get_dhchap_key.2
index 8fb206a..f41320a 100644
--- a/doc/man/nvme_ctrl_get_dhchap_key.2
+++ b/doc/man/nvme_ctrl_get_dhchap_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_dhchap_key" 9 "nvme_ctrl_get_dhchap_key" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_dhchap_key" 9 "nvme_ctrl_get_dhchap_key" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_dhchap_key \- Return controller key
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_fd.2 b/doc/man/nvme_ctrl_get_fd.2
index e8da7f4..7175260 100644
--- a/doc/man/nvme_ctrl_get_fd.2
+++ b/doc/man/nvme_ctrl_get_fd.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_fd" 9 "nvme_ctrl_get_fd" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_fd" 9 "nvme_ctrl_get_fd" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_fd \- Get associated file descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_firmware.2 b/doc/man/nvme_ctrl_get_firmware.2
index f30586f..d57c6bc 100644
--- a/doc/man/nvme_ctrl_get_firmware.2
+++ b/doc/man/nvme_ctrl_get_firmware.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_firmware" 9 "nvme_ctrl_get_firmware" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_firmware" 9 "nvme_ctrl_get_firmware" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_firmware \- Firmware string of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_host_iface.2 b/doc/man/nvme_ctrl_get_host_iface.2
index 79737f5..c87e1de 100644
--- a/doc/man/nvme_ctrl_get_host_iface.2
+++ b/doc/man/nvme_ctrl_get_host_iface.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_host_iface" 9 "nvme_ctrl_get_host_iface" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_host_iface" 9 "nvme_ctrl_get_host_iface" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_host_iface \- Host interface name of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_host_traddr.2 b/doc/man/nvme_ctrl_get_host_traddr.2
index 0e6d097..bb96788 100644
--- a/doc/man/nvme_ctrl_get_host_traddr.2
+++ b/doc/man/nvme_ctrl_get_host_traddr.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_host_traddr" 9 "nvme_ctrl_get_host_traddr" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_host_traddr" 9 "nvme_ctrl_get_host_traddr" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_host_traddr \- Host transport address of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_model.2 b/doc/man/nvme_ctrl_get_model.2
index 70a1d3f..ca7fc91 100644
--- a/doc/man/nvme_ctrl_get_model.2
+++ b/doc/man/nvme_ctrl_get_model.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_model" 9 "nvme_ctrl_get_model" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_model" 9 "nvme_ctrl_get_model" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_model \- Model of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_name.2 b/doc/man/nvme_ctrl_get_name.2
index 44f1da3..3d1e60b 100644
--- a/doc/man/nvme_ctrl_get_name.2
+++ b/doc/man/nvme_ctrl_get_name.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_name" 9 "nvme_ctrl_get_name" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_name" 9 "nvme_ctrl_get_name" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_name \- sysfs name of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_numa_node.2 b/doc/man/nvme_ctrl_get_numa_node.2
index 33411aa..6b19d0c 100644
--- a/doc/man/nvme_ctrl_get_numa_node.2
+++ b/doc/man/nvme_ctrl_get_numa_node.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_numa_node" 9 "nvme_ctrl_get_numa_node" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_numa_node" 9 "nvme_ctrl_get_numa_node" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_numa_node \- NUMA node of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_phy_slot.2 b/doc/man/nvme_ctrl_get_phy_slot.2
index c4f777f..3a61d85 100644
--- a/doc/man/nvme_ctrl_get_phy_slot.2
+++ b/doc/man/nvme_ctrl_get_phy_slot.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_phy_slot" 9 "nvme_ctrl_get_phy_slot" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_phy_slot" 9 "nvme_ctrl_get_phy_slot" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_phy_slot \- PCI physical slot number of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_queue_count.2 b/doc/man/nvme_ctrl_get_queue_count.2
index 4bf4b1a..e7542ee 100644
--- a/doc/man/nvme_ctrl_get_queue_count.2
+++ b/doc/man/nvme_ctrl_get_queue_count.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_queue_count" 9 "nvme_ctrl_get_queue_count" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_queue_count" 9 "nvme_ctrl_get_queue_count" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_queue_count \- Queue count of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_serial.2 b/doc/man/nvme_ctrl_get_serial.2
index f7cf63a..661aaaf 100644
--- a/doc/man/nvme_ctrl_get_serial.2
+++ b/doc/man/nvme_ctrl_get_serial.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_serial" 9 "nvme_ctrl_get_serial" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_serial" 9 "nvme_ctrl_get_serial" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_serial \- Serial number of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_sqsize.2 b/doc/man/nvme_ctrl_get_sqsize.2
index 319b978..a54c7c9 100644
--- a/doc/man/nvme_ctrl_get_sqsize.2
+++ b/doc/man/nvme_ctrl_get_sqsize.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_sqsize" 9 "nvme_ctrl_get_sqsize" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_sqsize" 9 "nvme_ctrl_get_sqsize" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_sqsize \- SQ size of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_src_addr.2 b/doc/man/nvme_ctrl_get_src_addr.2
index effafa4..934be60 100644
--- a/doc/man/nvme_ctrl_get_src_addr.2
+++ b/doc/man/nvme_ctrl_get_src_addr.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_src_addr" 9 "nvme_ctrl_get_src_addr" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_src_addr" 9 "nvme_ctrl_get_src_addr" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_src_addr \- Extract src_addr from the c->address string
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_state.2 b/doc/man/nvme_ctrl_get_state.2
index 2beae14..12ce62c 100644
--- a/doc/man/nvme_ctrl_get_state.2
+++ b/doc/man/nvme_ctrl_get_state.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_state" 9 "nvme_ctrl_get_state" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_state" 9 "nvme_ctrl_get_state" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_state \- Running state of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_subsysnqn.2 b/doc/man/nvme_ctrl_get_subsysnqn.2
index ebc3ff8..cb95d53 100644
--- a/doc/man/nvme_ctrl_get_subsysnqn.2
+++ b/doc/man/nvme_ctrl_get_subsysnqn.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_subsysnqn" 9 "nvme_ctrl_get_subsysnqn" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_subsysnqn" 9 "nvme_ctrl_get_subsysnqn" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_subsysnqn \- Subsystem NQN of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_subsystem.2 b/doc/man/nvme_ctrl_get_subsystem.2
index 06308cd..b6163e6 100644
--- a/doc/man/nvme_ctrl_get_subsystem.2
+++ b/doc/man/nvme_ctrl_get_subsystem.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_subsystem" 9 "nvme_ctrl_get_subsystem" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_subsystem" 9 "nvme_ctrl_get_subsystem" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_subsystem \- Parent subsystem of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_sysfs_dir.2 b/doc/man/nvme_ctrl_get_sysfs_dir.2
index 902a3fb..d0263ca 100644
--- a/doc/man/nvme_ctrl_get_sysfs_dir.2
+++ b/doc/man/nvme_ctrl_get_sysfs_dir.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_sysfs_dir" 9 "nvme_ctrl_get_sysfs_dir" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_sysfs_dir" 9 "nvme_ctrl_get_sysfs_dir" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_sysfs_dir \- sysfs directory of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_traddr.2 b/doc/man/nvme_ctrl_get_traddr.2
index bfaa4b7..f829a38 100644
--- a/doc/man/nvme_ctrl_get_traddr.2
+++ b/doc/man/nvme_ctrl_get_traddr.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_traddr" 9 "nvme_ctrl_get_traddr" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_traddr" 9 "nvme_ctrl_get_traddr" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_traddr \- Transport address of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_transport.2 b/doc/man/nvme_ctrl_get_transport.2
index d267a73..42ca5b0 100644
--- a/doc/man/nvme_ctrl_get_transport.2
+++ b/doc/man/nvme_ctrl_get_transport.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_transport" 9 "nvme_ctrl_get_transport" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_transport" 9 "nvme_ctrl_get_transport" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_transport \- Transport type of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_get_trsvcid.2 b/doc/man/nvme_ctrl_get_trsvcid.2
index 42672b6..bc027fe 100644
--- a/doc/man/nvme_ctrl_get_trsvcid.2
+++ b/doc/man/nvme_ctrl_get_trsvcid.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_get_trsvcid" 9 "nvme_ctrl_get_trsvcid" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_get_trsvcid" 9 "nvme_ctrl_get_trsvcid" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_get_trsvcid \- Transport service identifier of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_identify.2 b/doc/man/nvme_ctrl_identify.2
index c4ff85b..fae8e8e 100644
--- a/doc/man/nvme_ctrl_identify.2
+++ b/doc/man/nvme_ctrl_identify.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_identify" 9 "nvme_ctrl_identify" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_identify" 9 "nvme_ctrl_identify" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_identify \- Issues an 'identify controller' command
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_is_discovered.2 b/doc/man/nvme_ctrl_is_discovered.2
index 28361a7..ee72a8c 100644
--- a/doc/man/nvme_ctrl_is_discovered.2
+++ b/doc/man/nvme_ctrl_is_discovered.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_is_discovered" 9 "nvme_ctrl_is_discovered" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_is_discovered" 9 "nvme_ctrl_is_discovered" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_is_discovered \- Returns the value of the 'discovered' flag
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_is_discovery_ctrl.2 b/doc/man/nvme_ctrl_is_discovery_ctrl.2
index cb62dca..31dd7ae 100644
--- a/doc/man/nvme_ctrl_is_discovery_ctrl.2
+++ b/doc/man/nvme_ctrl_is_discovery_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_is_discovery_ctrl" 9 "nvme_ctrl_is_discovery_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_is_discovery_ctrl" 9 "nvme_ctrl_is_discovery_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_is_discovery_ctrl \- Check the 'discovery_ctrl' flag
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_is_persistent.2 b/doc/man/nvme_ctrl_is_persistent.2
index 05a9c35..5cabdb5 100644
--- a/doc/man/nvme_ctrl_is_persistent.2
+++ b/doc/man/nvme_ctrl_is_persistent.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_is_persistent" 9 "nvme_ctrl_is_persistent" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_is_persistent" 9 "nvme_ctrl_is_persistent" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_is_persistent \- Returns the value of the 'persistent' flag
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_is_unique_discovery_ctrl.2 b/doc/man/nvme_ctrl_is_unique_discovery_ctrl.2
index 3540959..2352c45 100644
--- a/doc/man/nvme_ctrl_is_unique_discovery_ctrl.2
+++ b/doc/man/nvme_ctrl_is_unique_discovery_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_is_unique_discovery_ctrl" 9 "nvme_ctrl_is_unique_discovery_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_is_unique_discovery_ctrl" 9 "nvme_ctrl_is_unique_discovery_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_is_unique_discovery_ctrl \- Check the 'unique_discovery_ctrl' flag
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_list.2 b/doc/man/nvme_ctrl_list.2
index 40c0531..f849b17 100644
--- a/doc/man/nvme_ctrl_list.2
+++ b/doc/man/nvme_ctrl_list.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_ctrl_list" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_ctrl_list" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_ctrl_list \- Controller List
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_metadata_type.2 b/doc/man/nvme_ctrl_metadata_type.2
index e81fb4c..cff9205 100644
--- a/doc/man/nvme_ctrl_metadata_type.2
+++ b/doc/man/nvme_ctrl_metadata_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ctrl_metadata_type" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ctrl_metadata_type" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_ctrl_metadata_type \- Controller Metadata Element Types
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_next_ns.2 b/doc/man/nvme_ctrl_next_ns.2
index 635350e..62de4b8 100644
--- a/doc/man/nvme_ctrl_next_ns.2
+++ b/doc/man/nvme_ctrl_next_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_next_ns" 9 "nvme_ctrl_next_ns" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_next_ns" 9 "nvme_ctrl_next_ns" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_next_ns \- Next namespace iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_next_path.2 b/doc/man/nvme_ctrl_next_path.2
index 90743ac..70c3c38 100644
--- a/doc/man/nvme_ctrl_next_path.2
+++ b/doc/man/nvme_ctrl_next_path.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_next_path" 9 "nvme_ctrl_next_path" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_next_path" 9 "nvme_ctrl_next_path" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_next_path \- Next path iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_release_fd.2 b/doc/man/nvme_ctrl_release_fd.2
index 1b44359..35da588 100644
--- a/doc/man/nvme_ctrl_release_fd.2
+++ b/doc/man/nvme_ctrl_release_fd.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_release_fd" 9 "nvme_ctrl_release_fd" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_release_fd" 9 "nvme_ctrl_release_fd" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_release_fd \- Close fd and clear fd from controller object
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_reset.2 b/doc/man/nvme_ctrl_reset.2
index 134b312..a519d23 100644
--- a/doc/man/nvme_ctrl_reset.2
+++ b/doc/man/nvme_ctrl_reset.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_reset" 9 "nvme_ctrl_reset" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_reset" 9 "nvme_ctrl_reset" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_reset \- Initiate a controller reset
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_set_dhchap_host_key.2 b/doc/man/nvme_ctrl_set_dhchap_host_key.2
index abc46ba..834c50f 100644
--- a/doc/man/nvme_ctrl_set_dhchap_host_key.2
+++ b/doc/man/nvme_ctrl_set_dhchap_host_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_set_dhchap_host_key" 9 "nvme_ctrl_set_dhchap_host_key" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_set_dhchap_host_key" 9 "nvme_ctrl_set_dhchap_host_key" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_set_dhchap_host_key \- Set host key
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_set_dhchap_key.2 b/doc/man/nvme_ctrl_set_dhchap_key.2
index 85a58c8..b040020 100644
--- a/doc/man/nvme_ctrl_set_dhchap_key.2
+++ b/doc/man/nvme_ctrl_set_dhchap_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_set_dhchap_key" 9 "nvme_ctrl_set_dhchap_key" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_set_dhchap_key" 9 "nvme_ctrl_set_dhchap_key" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_set_dhchap_key \- Set controller key
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_set_discovered.2 b/doc/man/nvme_ctrl_set_discovered.2
index 10f1355..b3dada2 100644
--- a/doc/man/nvme_ctrl_set_discovered.2
+++ b/doc/man/nvme_ctrl_set_discovered.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_set_discovered" 9 "nvme_ctrl_set_discovered" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_set_discovered" 9 "nvme_ctrl_set_discovered" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_set_discovered \- Set the 'discovered' flag
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_set_discovery_ctrl.2 b/doc/man/nvme_ctrl_set_discovery_ctrl.2
index 509e76f..5cd91a8 100644
--- a/doc/man/nvme_ctrl_set_discovery_ctrl.2
+++ b/doc/man/nvme_ctrl_set_discovery_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_set_discovery_ctrl" 9 "nvme_ctrl_set_discovery_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_set_discovery_ctrl" 9 "nvme_ctrl_set_discovery_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_set_discovery_ctrl \- Set the 'discovery_ctrl' flag
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_set_persistent.2 b/doc/man/nvme_ctrl_set_persistent.2
index 456c7cc..557e610 100644
--- a/doc/man/nvme_ctrl_set_persistent.2
+++ b/doc/man/nvme_ctrl_set_persistent.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_set_persistent" 9 "nvme_ctrl_set_persistent" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_set_persistent" 9 "nvme_ctrl_set_persistent" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_set_persistent \- Set the 'persistent' flag
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrl_set_unique_discovery_ctrl.2 b/doc/man/nvme_ctrl_set_unique_discovery_ctrl.2
index e0cca59..3103d3e 100644
--- a/doc/man/nvme_ctrl_set_unique_discovery_ctrl.2
+++ b/doc/man/nvme_ctrl_set_unique_discovery_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrl_set_unique_discovery_ctrl" 9 "nvme_ctrl_set_unique_discovery_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrl_set_unique_discovery_ctrl" 9 "nvme_ctrl_set_unique_discovery_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrl_set_unique_discovery_ctrl \- Set the 'unique_discovery_ctrl' flag
.SH SYNOPSIS
diff --git a/doc/man/nvme_ctrls_filter.2 b/doc/man/nvme_ctrls_filter.2
index 1227c5c..76838b0 100644
--- a/doc/man/nvme_ctrls_filter.2
+++ b/doc/man/nvme_ctrls_filter.2
@@ -1,4 +1,4 @@
-.TH "nvme_ctrls_filter" 9 "nvme_ctrls_filter" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ctrls_filter" 9 "nvme_ctrls_filter" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ctrls_filter \- Filter for controllers
.SH SYNOPSIS
diff --git a/doc/man/nvme_data_tfr.2 b/doc/man/nvme_data_tfr.2
index 107ed58..375ff62 100644
--- a/doc/man/nvme_data_tfr.2
+++ b/doc/man/nvme_data_tfr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_data_tfr" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_data_tfr" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_data_tfr \- Data transfer direction of the command
.SH SYNOPSIS
diff --git a/doc/man/nvme_default_host.2 b/doc/man/nvme_default_host.2
index 6b78c17..693f337 100644
--- a/doc/man/nvme_default_host.2
+++ b/doc/man/nvme_default_host.2
@@ -1,4 +1,4 @@
-.TH "nvme_default_host" 9 "nvme_default_host" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_default_host" 9 "nvme_default_host" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_default_host \- Initializes the default host
.SH SYNOPSIS
diff --git a/doc/man/nvme_describe_key_serial.2 b/doc/man/nvme_describe_key_serial.2
index 6cd0e08..d17366b 100644
--- a/doc/man/nvme_describe_key_serial.2
+++ b/doc/man/nvme_describe_key_serial.2
@@ -1,4 +1,4 @@
-.TH "nvme_describe_key_serial" 9 "nvme_describe_key_serial" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_describe_key_serial" 9 "nvme_describe_key_serial" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_describe_key_serial \- Return key description
.SH SYNOPSIS
diff --git a/doc/man/nvme_dev_self_test.2 b/doc/man/nvme_dev_self_test.2
index 76627ec..4123627 100644
--- a/doc/man/nvme_dev_self_test.2
+++ b/doc/man/nvme_dev_self_test.2
@@ -1,4 +1,4 @@
-.TH "nvme_dev_self_test" 9 "nvme_dev_self_test" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_dev_self_test" 9 "nvme_dev_self_test" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_dev_self_test \- Start or abort a self test
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_dtype.2 b/doc/man/nvme_directive_dtype.2
index b4d1abd..5e35792 100644
--- a/doc/man/nvme_directive_dtype.2
+++ b/doc/man/nvme_directive_dtype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_directive_dtype" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_directive_dtype" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_directive_dtype \- Directive Types
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_receive_doper.2 b/doc/man/nvme_directive_receive_doper.2
index 2c87145..c19c784 100644
--- a/doc/man/nvme_directive_receive_doper.2
+++ b/doc/man/nvme_directive_receive_doper.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_directive_receive_doper" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_directive_receive_doper" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_directive_receive_doper \- Directive Receive Directive Operation
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_recv.2 b/doc/man/nvme_directive_recv.2
index fdbbe1a..a03d860 100644
--- a/doc/man/nvme_directive_recv.2
+++ b/doc/man/nvme_directive_recv.2
@@ -1,4 +1,4 @@
-.TH "nvme_directive_recv" 9 "nvme_directive_recv" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_directive_recv" 9 "nvme_directive_recv" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_directive_recv \- Receive directive specific data
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_recv_identify_parameters.2 b/doc/man/nvme_directive_recv_identify_parameters.2
index e8cad1a..c80f474 100644
--- a/doc/man/nvme_directive_recv_identify_parameters.2
+++ b/doc/man/nvme_directive_recv_identify_parameters.2
@@ -1,4 +1,4 @@
-.TH "nvme_directive_recv_identify_parameters" 9 "nvme_directive_recv_identify_parameters" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_directive_recv_identify_parameters" 9 "nvme_directive_recv_identify_parameters" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_directive_recv_identify_parameters \- Directive receive identifier parameters
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_recv_stream_allocate.2 b/doc/man/nvme_directive_recv_stream_allocate.2
index 9a33428..e7b987a 100644
--- a/doc/man/nvme_directive_recv_stream_allocate.2
+++ b/doc/man/nvme_directive_recv_stream_allocate.2
@@ -1,4 +1,4 @@
-.TH "nvme_directive_recv_stream_allocate" 9 "nvme_directive_recv_stream_allocate" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_directive_recv_stream_allocate" 9 "nvme_directive_recv_stream_allocate" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_directive_recv_stream_allocate \- Directive receive stream allocate
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_recv_stream_parameters.2 b/doc/man/nvme_directive_recv_stream_parameters.2
index 4a05dba..60811f9 100644
--- a/doc/man/nvme_directive_recv_stream_parameters.2
+++ b/doc/man/nvme_directive_recv_stream_parameters.2
@@ -1,4 +1,4 @@
-.TH "nvme_directive_recv_stream_parameters" 9 "nvme_directive_recv_stream_parameters" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_directive_recv_stream_parameters" 9 "nvme_directive_recv_stream_parameters" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_directive_recv_stream_parameters \- Directive receive stream parameters
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_recv_stream_status.2 b/doc/man/nvme_directive_recv_stream_status.2
index ae290d3..77e4800 100644
--- a/doc/man/nvme_directive_recv_stream_status.2
+++ b/doc/man/nvme_directive_recv_stream_status.2
@@ -1,4 +1,4 @@
-.TH "nvme_directive_recv_stream_status" 9 "nvme_directive_recv_stream_status" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_directive_recv_stream_status" 9 "nvme_directive_recv_stream_status" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_directive_recv_stream_status \- Directive receive stream status
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_send.2 b/doc/man/nvme_directive_send.2
index a4e441b..4e09029 100644
--- a/doc/man/nvme_directive_send.2
+++ b/doc/man/nvme_directive_send.2
@@ -1,4 +1,4 @@
-.TH "nvme_directive_send" 9 "nvme_directive_send" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_directive_send" 9 "nvme_directive_send" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_directive_send \- Send directive command
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_send_doper.2 b/doc/man/nvme_directive_send_doper.2
index 82d47ad..3986bb4 100644
--- a/doc/man/nvme_directive_send_doper.2
+++ b/doc/man/nvme_directive_send_doper.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_directive_send_doper" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_directive_send_doper" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_directive_send_doper \- Directive Send Directive Operation
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_send_id_endir.2 b/doc/man/nvme_directive_send_id_endir.2
index 9b0efa6..8632333 100644
--- a/doc/man/nvme_directive_send_id_endir.2
+++ b/doc/man/nvme_directive_send_id_endir.2
@@ -1,4 +1,4 @@
-.TH "nvme_directive_send_id_endir" 9 "nvme_directive_send_id_endir" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_directive_send_id_endir" 9 "nvme_directive_send_id_endir" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_directive_send_id_endir \- Directive Send Enable Directive
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_send_identify_endir.2 b/doc/man/nvme_directive_send_identify_endir.2
index 12c301b..fab7e2a 100644
--- a/doc/man/nvme_directive_send_identify_endir.2
+++ b/doc/man/nvme_directive_send_identify_endir.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_directive_send_identify_endir" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_directive_send_identify_endir" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_directive_send_identify_endir \- Enable Directive
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_send_stream_release_identifier.2 b/doc/man/nvme_directive_send_stream_release_identifier.2
index d541f5a..ccb075d 100644
--- a/doc/man/nvme_directive_send_stream_release_identifier.2
+++ b/doc/man/nvme_directive_send_stream_release_identifier.2
@@ -1,4 +1,4 @@
-.TH "nvme_directive_send_stream_release_identifier" 9 "nvme_directive_send_stream_release_identifier" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_directive_send_stream_release_identifier" 9 "nvme_directive_send_stream_release_identifier" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_directive_send_stream_release_identifier \- Directive Send Stream release
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_send_stream_release_resource.2 b/doc/man/nvme_directive_send_stream_release_resource.2
index edac8b5..ac1febc 100644
--- a/doc/man/nvme_directive_send_stream_release_resource.2
+++ b/doc/man/nvme_directive_send_stream_release_resource.2
@@ -1,4 +1,4 @@
-.TH "nvme_directive_send_stream_release_resource" 9 "nvme_directive_send_stream_release_resource" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_directive_send_stream_release_resource" 9 "nvme_directive_send_stream_release_resource" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_directive_send_stream_release_resource \- Directive Send Stream release resources
.SH SYNOPSIS
diff --git a/doc/man/nvme_directive_types.2 b/doc/man/nvme_directive_types.2
index 91a64ea..cad1dff 100644
--- a/doc/man/nvme_directive_types.2
+++ b/doc/man/nvme_directive_types.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_directive_types" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_directive_types" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_directive_types \- Directives Supported or Enabled
.SH SYNOPSIS
diff --git a/doc/man/nvme_disconnect_ctrl.2 b/doc/man/nvme_disconnect_ctrl.2
index 8fa1021..8c9d34e 100644
--- a/doc/man/nvme_disconnect_ctrl.2
+++ b/doc/man/nvme_disconnect_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_disconnect_ctrl" 9 "nvme_disconnect_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_disconnect_ctrl" 9 "nvme_disconnect_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_disconnect_ctrl \- Disconnect a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_dsm.2 b/doc/man/nvme_dsm.2
index 8ec5991..3dfb43e 100644
--- a/doc/man/nvme_dsm.2
+++ b/doc/man/nvme_dsm.2
@@ -1,4 +1,4 @@
-.TH "nvme_dsm" 9 "nvme_dsm" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_dsm" 9 "nvme_dsm" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_dsm \- Send an nvme data set management command
.SH SYNOPSIS
diff --git a/doc/man/nvme_dsm_attributes.2 b/doc/man/nvme_dsm_attributes.2
index 93ab648..591ace6 100644
--- a/doc/man/nvme_dsm_attributes.2
+++ b/doc/man/nvme_dsm_attributes.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_dsm_attributes" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_dsm_attributes" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_dsm_attributes \- Dataset Management attributes
.SH SYNOPSIS
diff --git a/doc/man/nvme_dsm_range.2 b/doc/man/nvme_dsm_range.2
index ee9acc4..7037cbb 100644
--- a/doc/man/nvme_dsm_range.2
+++ b/doc/man/nvme_dsm_range.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_dsm_range" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_dsm_range" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_dsm_range \- Dataset Management - Range Definition
.SH SYNOPSIS
diff --git a/doc/man/nvme_dst_stc.2 b/doc/man/nvme_dst_stc.2
index 320e068..97ec627 100644
--- a/doc/man/nvme_dst_stc.2
+++ b/doc/man/nvme_dst_stc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_dst_stc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_dst_stc" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_dst_stc \- Action taken by the Device Self-test command
.SH SYNOPSIS
diff --git a/doc/man/nvme_dump_config.2 b/doc/man/nvme_dump_config.2
index 3eef2de..46f9dc0 100644
--- a/doc/man/nvme_dump_config.2
+++ b/doc/man/nvme_dump_config.2
@@ -1,4 +1,4 @@
-.TH "nvme_dump_config" 9 "nvme_dump_config" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_dump_config" 9 "nvme_dump_config" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_dump_config \- Print the JSON configuration
.SH SYNOPSIS
diff --git a/doc/man/nvme_dump_tree.2 b/doc/man/nvme_dump_tree.2
index c157925..fb7b343 100644
--- a/doc/man/nvme_dump_tree.2
+++ b/doc/man/nvme_dump_tree.2
@@ -1,4 +1,4 @@
-.TH "nvme_dump_tree" 9 "nvme_dump_tree" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_dump_tree" 9 "nvme_dump_tree" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_dump_tree \- Dump internal object tree
.SH SYNOPSIS
diff --git a/doc/man/nvme_eg_critical_warning_flags.2 b/doc/man/nvme_eg_critical_warning_flags.2
index c6e79e3..7104f8f 100644
--- a/doc/man/nvme_eg_critical_warning_flags.2
+++ b/doc/man/nvme_eg_critical_warning_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_eg_critical_warning_flags" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_eg_critical_warning_flags" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_eg_critical_warning_flags \- Endurance Group Information Log - Critical Warning
.SH SYNOPSIS
diff --git a/doc/man/nvme_eg_event_aggregate_log.2 b/doc/man/nvme_eg_event_aggregate_log.2
index dba6c49..b16c832 100644
--- a/doc/man/nvme_eg_event_aggregate_log.2
+++ b/doc/man/nvme_eg_event_aggregate_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_eg_event_aggregate_log" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_eg_event_aggregate_log" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_eg_event_aggregate_log \- Endurance Group Event Aggregate
.SH SYNOPSIS
diff --git a/doc/man/nvme_end_grp_chan_desc.2 b/doc/man/nvme_end_grp_chan_desc.2
index 9a862f2..5b3a6ff 100644
--- a/doc/man/nvme_end_grp_chan_desc.2
+++ b/doc/man/nvme_end_grp_chan_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_end_grp_chan_desc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_end_grp_chan_desc" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_end_grp_chan_desc \- Endurance Group Channel Configuration Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_end_grp_config_desc.2 b/doc/man/nvme_end_grp_config_desc.2
index bcbd669..26bfd9b 100644
--- a/doc/man/nvme_end_grp_config_desc.2
+++ b/doc/man/nvme_end_grp_config_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_end_grp_config_desc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_end_grp_config_desc" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_end_grp_config_desc \- Endurance Group Configuration Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_endurance_group_log.2 b/doc/man/nvme_endurance_group_log.2
index 74b759e..6d58674 100644
--- a/doc/man/nvme_endurance_group_log.2
+++ b/doc/man/nvme_endurance_group_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_endurance_group_log" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_endurance_group_log" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_endurance_group_log \- Endurance Group Information Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_eom_lane_desc.2 b/doc/man/nvme_eom_lane_desc.2
index eaa51c9..8efa7a5 100644
--- a/doc/man/nvme_eom_lane_desc.2
+++ b/doc/man/nvme_eom_lane_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_eom_lane_desc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_eom_lane_desc" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_eom_lane_desc \- EOM Lane Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_eom_optional_data.2 b/doc/man/nvme_eom_optional_data.2
index 3ba3484..411159e 100644
--- a/doc/man/nvme_eom_optional_data.2
+++ b/doc/man/nvme_eom_optional_data.2
@@ -1,18 +1,18 @@
-.TH "libnvme" 9 "enum nvme_eom_optional_data" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_eom_optional_data" "May 2024" "API Manual" LINUX
.SH NAME
-enum nvme_eom_optional_data \- EOM Optional Data Present Fields
+enum nvme_eom_optional_data \- EOM Optional Data Present Fields (Deprecated)
.SH SYNOPSIS
enum nvme_eom_optional_data {
.br
-.BI " NVME_EOM_EYE_DATA_PRESENT"
+.BI " NVME_EOM_PRINTABLE_EYE_PRESENT"
,
.br
.br
-.BI " NVME_EOM_PRINTABLE_EYE_PRESENT"
+.BI " NVME_EOM_EYE_DATA_PRESENT"
};
.SH Constants
-.IP "NVME_EOM_EYE_DATA_PRESENT" 12
-Eye Data Present
.IP "NVME_EOM_PRINTABLE_EYE_PRESENT" 12
Printable Eye Present
+.IP "NVME_EOM_EYE_DATA_PRESENT" 12
+Eye Data Present
diff --git a/doc/man/nvme_eom_optional_data_present.2 b/doc/man/nvme_eom_optional_data_present.2
new file mode 100644
index 0000000..f351c17
--- /dev/null
+++ b/doc/man/nvme_eom_optional_data_present.2
@@ -0,0 +1,48 @@
+.TH "libnvme" 9 "enum nvme_eom_optional_data_present" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_eom_optional_data_present \- EOM Optional Data Present Fields
+.SH SYNOPSIS
+enum nvme_eom_optional_data_present {
+.br
+.BI " NVME_EOM_ODP_PEFP_SHIFT"
+,
+.br
+.br
+.BI " NVME_EOM_ODP_EDFP_SHIFT"
+,
+.br
+.br
+.BI " NVME_EOM_ODP_RSVD_SHIFT"
+,
+.br
+.br
+.BI " NVME_EOM_ODP_PEFP_MASK"
+,
+.br
+.br
+.BI " NVME_EOM_ODP_EDFP_MASK"
+,
+.br
+.br
+.BI " NVME_EOM_ODP_RSVD_MASK"
+
+};
+.SH Constants
+.IP "NVME_EOM_ODP_PEFP_SHIFT" 12
+Shift amount to get the printable eye field present
+from the \fIstruct nvme_phy_rx_eom_log\fP.odp field.
+.IP "NVME_EOM_ODP_EDFP_SHIFT" 12
+Shift amount to get the eye data field present
+from the \fIstruct nvme_phy_rx_eom_log\fP.odp field.
+.IP "NVME_EOM_ODP_RSVD_SHIFT" 12
+Shift amount to get the reserved optional data present
+from the \fIstruct nvme_phy_rx_eom_log\fP.odp field.
+.IP "NVME_EOM_ODP_PEFP_MASK" 12
+Mask to get the printable eye field present
+from the \fIstruct nvme_phy_rx_eom_log\fP.odp field.
+.IP "NVME_EOM_ODP_EDFP_MASK" 12
+Mask to get the eye data field present
+from the \fIstruct nvme_phy_rx_eom_log\fP.odp field.
+.IP "NVME_EOM_ODP_RSVD_MASK" 12
+Mask to get the reserved data present
+from the \fIstruct nvme_phy_rx_eom_log\fP.odp field.
diff --git a/doc/man/nvme_errno_to_string.2 b/doc/man/nvme_errno_to_string.2
index 0c39e0f..1493b53 100644
--- a/doc/man/nvme_errno_to_string.2
+++ b/doc/man/nvme_errno_to_string.2
@@ -1,4 +1,4 @@
-.TH "nvme_errno_to_string" 9 "nvme_errno_to_string" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_errno_to_string" 9 "nvme_errno_to_string" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_errno_to_string \- Returns string describing nvme connect failures
.SH SYNOPSIS
diff --git a/doc/man/nvme_error_log_page.2 b/doc/man/nvme_error_log_page.2
index e930329..7d703de 100644
--- a/doc/man/nvme_error_log_page.2
+++ b/doc/man/nvme_error_log_page.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_error_log_page" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_error_log_page" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_error_log_page \- Error Information Log Entry (Log Identifier 01h)
.SH SYNOPSIS
diff --git a/doc/man/nvme_export_tls_key.2 b/doc/man/nvme_export_tls_key.2
new file mode 100644
index 0000000..1cc5961
--- /dev/null
+++ b/doc/man/nvme_export_tls_key.2
@@ -0,0 +1,19 @@
+.TH "nvme_export_tls_key" 9 "nvme_export_tls_key" "May 2024" "libnvme API manual" LINUX
+.SH NAME
+nvme_export_tls_key \- Export a TLS key
+.SH SYNOPSIS
+.B "char *" nvme_export_tls_key
+.BI "(const unsigned char *key_data " ","
+.BI "int key_len " ");"
+.SH ARGUMENTS
+.IP "key_data" 12
+Raw data of the key
+.IP "key_len" 12
+Length of \fIkey_data\fP
+.SH "DESCRIPTION"
+Returns \fIkey_data\fP in the PSK Interchange format as defined in section
+3.6.1.5 of the NVMe TCP Transport specification.
+.SH "RETURN"
+The string containing the TLS identity or NULL with errno set
+on error. It is the responsibility of the caller to free the returned
+string.
diff --git a/doc/man/nvme_fabrics_config.2 b/doc/man/nvme_fabrics_config.2
index 1a110d4..b5e65d8 100644
--- a/doc/man/nvme_fabrics_config.2
+++ b/doc/man/nvme_fabrics_config.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fabrics_config" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fabrics_config" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_fabrics_config \- Defines all linux nvme fabrics initiator options
.SH SYNOPSIS
@@ -26,9 +26,9 @@ struct nvme_fabrics_config {
.br
.BI " int tos;"
.br
-.BI " int keyring;"
+.BI " long keyring;"
.br
-.BI " int tls_key;"
+.BI " long tls_key;"
.br
.BI " bool duplicate_connect;"
.br
diff --git a/doc/man/nvme_fctype.2 b/doc/man/nvme_fctype.2
index 00dbb70..e1c1bf4 100644
--- a/doc/man/nvme_fctype.2
+++ b/doc/man/nvme_fctype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_fctype" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_fctype" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_fctype \- Fabrics Command Types
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_config_desc.2 b/doc/man/nvme_fdp_config_desc.2
index e80c814..bc137d1 100644
--- a/doc/man/nvme_fdp_config_desc.2
+++ b/doc/man/nvme_fdp_config_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_config_desc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_config_desc" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_config_desc \- FDP Configuration Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_config_fdpa.2 b/doc/man/nvme_fdp_config_fdpa.2
index f0662bf..11132d7 100644
--- a/doc/man/nvme_fdp_config_fdpa.2
+++ b/doc/man/nvme_fdp_config_fdpa.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_fdp_config_fdpa" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_fdp_config_fdpa" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_fdp_config_fdpa \- FDP Attributes
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_config_log.2 b/doc/man/nvme_fdp_config_log.2
index c7fb7eb..de1c6de 100644
--- a/doc/man/nvme_fdp_config_log.2
+++ b/doc/man/nvme_fdp_config_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_config_log" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_config_log" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_config_log \- FDP Configurations Log Page
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_event.2 b/doc/man/nvme_fdp_event.2
index d6dfa05..a1749bc 100644
--- a/doc/man/nvme_fdp_event.2
+++ b/doc/man/nvme_fdp_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_event" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_event" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_event \- FDP Event
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_event_flags.2 b/doc/man/nvme_fdp_event_flags.2
index 2da0442..377cad8 100644
--- a/doc/man/nvme_fdp_event_flags.2
+++ b/doc/man/nvme_fdp_event_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_fdp_event_flags" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_fdp_event_flags" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_fdp_event_flags \- FDP Event Flags
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_event_realloc.2 b/doc/man/nvme_fdp_event_realloc.2
index 15856d3..35d5b9e 100644
--- a/doc/man/nvme_fdp_event_realloc.2
+++ b/doc/man/nvme_fdp_event_realloc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_event_realloc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_event_realloc" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_event_realloc \- Media Reallocated Event Type Specific Information
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_event_realloc_flags.2 b/doc/man/nvme_fdp_event_realloc_flags.2
index a47245a..7b5fbb2 100644
--- a/doc/man/nvme_fdp_event_realloc_flags.2
+++ b/doc/man/nvme_fdp_event_realloc_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_fdp_event_realloc_flags" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_fdp_event_realloc_flags" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_fdp_event_realloc_flags \- Media Reallocated Event Type Specific Flags
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_event_type.2 b/doc/man/nvme_fdp_event_type.2
index b726436..bb2ebe1 100644
--- a/doc/man/nvme_fdp_event_type.2
+++ b/doc/man/nvme_fdp_event_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_fdp_event_type" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_fdp_event_type" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_fdp_event_type \- FDP Event Types
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_events_log.2 b/doc/man/nvme_fdp_events_log.2
index a02b169..b50632e 100644
--- a/doc/man/nvme_fdp_events_log.2
+++ b/doc/man/nvme_fdp_events_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_events_log" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_events_log" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_events_log \- FDP Events Log Page
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_reclaim_unit_handle_status.2 b/doc/man/nvme_fdp_reclaim_unit_handle_status.2
index aceccfc..ef5259d 100644
--- a/doc/man/nvme_fdp_reclaim_unit_handle_status.2
+++ b/doc/man/nvme_fdp_reclaim_unit_handle_status.2
@@ -1,4 +1,4 @@
-.TH "nvme_fdp_reclaim_unit_handle_status" 9 "nvme_fdp_reclaim_unit_handle_status" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_fdp_reclaim_unit_handle_status" 9 "nvme_fdp_reclaim_unit_handle_status" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_fdp_reclaim_unit_handle_status \- Get reclaim unit handle status
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_reclaim_unit_handle_update.2 b/doc/man/nvme_fdp_reclaim_unit_handle_update.2
index c5e5e0d..40cf67b 100644
--- a/doc/man/nvme_fdp_reclaim_unit_handle_update.2
+++ b/doc/man/nvme_fdp_reclaim_unit_handle_update.2
@@ -1,4 +1,4 @@
-.TH "nvme_fdp_reclaim_unit_handle_update" 9 "nvme_fdp_reclaim_unit_handle_update" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_fdp_reclaim_unit_handle_update" 9 "nvme_fdp_reclaim_unit_handle_update" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_fdp_reclaim_unit_handle_update \- Update a list of reclaim unit handles
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_ruh_desc.2 b/doc/man/nvme_fdp_ruh_desc.2
index 638d1ad..2beb49d 100644
--- a/doc/man/nvme_fdp_ruh_desc.2
+++ b/doc/man/nvme_fdp_ruh_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_ruh_desc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_ruh_desc" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_ruh_desc \- Reclaim Unit Handle Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_ruh_status.2 b/doc/man/nvme_fdp_ruh_status.2
index fde919c..8b6be4e 100644
--- a/doc/man/nvme_fdp_ruh_status.2
+++ b/doc/man/nvme_fdp_ruh_status.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_ruh_status" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_ruh_status" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_ruh_status \- Reclaim Unit Handle Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_ruh_status_desc.2 b/doc/man/nvme_fdp_ruh_status_desc.2
index e5f8595..71da150 100644
--- a/doc/man/nvme_fdp_ruh_status_desc.2
+++ b/doc/man/nvme_fdp_ruh_status_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_ruh_status_desc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_ruh_status_desc" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_ruh_status_desc \- Reclaim Unit Handle Status Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_ruh_type.2 b/doc/man/nvme_fdp_ruh_type.2
index 6ba003a..16a8873 100644
--- a/doc/man/nvme_fdp_ruh_type.2
+++ b/doc/man/nvme_fdp_ruh_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_fdp_ruh_type" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_fdp_ruh_type" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_fdp_ruh_type \- Reclaim Unit Handle Type
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_ruha.2 b/doc/man/nvme_fdp_ruha.2
index dd1afa1..91c8ce2 100644
--- a/doc/man/nvme_fdp_ruha.2
+++ b/doc/man/nvme_fdp_ruha.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_fdp_ruha" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_fdp_ruha" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_fdp_ruha \- Reclaim Unit Handle Attributes
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_ruhu_desc.2 b/doc/man/nvme_fdp_ruhu_desc.2
index 0ed80c8..d173466 100644
--- a/doc/man/nvme_fdp_ruhu_desc.2
+++ b/doc/man/nvme_fdp_ruhu_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_ruhu_desc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_ruhu_desc" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_ruhu_desc \- Reclaim Unit Handle Usage Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_ruhu_log.2 b/doc/man/nvme_fdp_ruhu_log.2
index c11b4ff..ff74042 100644
--- a/doc/man/nvme_fdp_ruhu_log.2
+++ b/doc/man/nvme_fdp_ruhu_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_ruhu_log" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_ruhu_log" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_ruhu_log \- Reclaim Unit Handle Usage Log Page
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_stats_log.2 b/doc/man/nvme_fdp_stats_log.2
index 0a724bd..dc6d34b 100644
--- a/doc/man/nvme_fdp_stats_log.2
+++ b/doc/man/nvme_fdp_stats_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_stats_log" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_stats_log" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_stats_log \- FDP Statistics Log Page
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_supported_event_attributes.2 b/doc/man/nvme_fdp_supported_event_attributes.2
index 4ce8032..06936a5 100644
--- a/doc/man/nvme_fdp_supported_event_attributes.2
+++ b/doc/man/nvme_fdp_supported_event_attributes.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_fdp_supported_event_attributes" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_fdp_supported_event_attributes" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_fdp_supported_event_attributes \- Supported FDP Event Attributes
.SH SYNOPSIS
diff --git a/doc/man/nvme_fdp_supported_event_desc.2 b/doc/man/nvme_fdp_supported_event_desc.2
index e58a403..fc82a61 100644
--- a/doc/man/nvme_fdp_supported_event_desc.2
+++ b/doc/man/nvme_fdp_supported_event_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fdp_supported_event_desc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fdp_supported_event_desc" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_fdp_supported_event_desc \- Supported FDP Event Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_feat.2 b/doc/man/nvme_feat.2
index bc81227..855f093 100644
--- a/doc/man/nvme_feat.2
+++ b/doc/man/nvme_feat.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_feat" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_feat" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_feat \- Features Access Shifts/Masks values
.SH SYNOPSIS
diff --git a/doc/man/nvme_feat_auto_pst.2 b/doc/man/nvme_feat_auto_pst.2
index 8d1ce60..386569a 100644
--- a/doc/man/nvme_feat_auto_pst.2
+++ b/doc/man/nvme_feat_auto_pst.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_feat_auto_pst" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_feat_auto_pst" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_feat_auto_pst \- Autonomous Power State Transition
.SH SYNOPSIS
diff --git a/doc/man/nvme_feat_fdp_events_cdw11.2 b/doc/man/nvme_feat_fdp_events_cdw11.2
index db9da67..949435a 100644
--- a/doc/man/nvme_feat_fdp_events_cdw11.2
+++ b/doc/man/nvme_feat_fdp_events_cdw11.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_feat_fdp_events_cdw11" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_feat_fdp_events_cdw11" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_feat_fdp_events_cdw11 \- FDP Events Feature Command Dword 11
.SH SYNOPSIS
diff --git a/doc/man/nvme_feat_host_behavior.2 b/doc/man/nvme_feat_host_behavior.2
index 5c7dd1d..553e248 100644
--- a/doc/man/nvme_feat_host_behavior.2
+++ b/doc/man/nvme_feat_host_behavior.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_feat_host_behavior" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_feat_host_behavior" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_feat_host_behavior \- Host Behavior Support - Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_feat_nswpcfg_state.2 b/doc/man/nvme_feat_nswpcfg_state.2
index 9a7f350..a8a735c 100644
--- a/doc/man/nvme_feat_nswpcfg_state.2
+++ b/doc/man/nvme_feat_nswpcfg_state.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_feat_nswpcfg_state" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_feat_nswpcfg_state" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_feat_nswpcfg_state \- Write Protection - Write Protection State
.SH SYNOPSIS
diff --git a/doc/man/nvme_feat_plm_window_select.2 b/doc/man/nvme_feat_plm_window_select.2
index 0d9ee19..e16d1b4 100644
--- a/doc/man/nvme_feat_plm_window_select.2
+++ b/doc/man/nvme_feat_plm_window_select.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_feat_plm_window_select" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_feat_plm_window_select" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_feat_plm_window_select \- Predictable Latency Per NVM Set Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_feat_resv_notify_flags.2 b/doc/man/nvme_feat_resv_notify_flags.2
index d25acbe..07977a7 100644
--- a/doc/man/nvme_feat_resv_notify_flags.2
+++ b/doc/man/nvme_feat_resv_notify_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_feat_resv_notify_flags" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_feat_resv_notify_flags" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_feat_resv_notify_flags \- Reservation Notification Configuration
.SH SYNOPSIS
diff --git a/doc/man/nvme_feat_tmpthresh_thsel.2 b/doc/man/nvme_feat_tmpthresh_thsel.2
index 0eccb43..f8964b4 100644
--- a/doc/man/nvme_feat_tmpthresh_thsel.2
+++ b/doc/man/nvme_feat_tmpthresh_thsel.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_feat_tmpthresh_thsel" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_feat_tmpthresh_thsel" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_feat_tmpthresh_thsel \- Temperature Threshold - Threshold Type Select
.SH SYNOPSIS
diff --git a/doc/man/nvme_features_async_event_config_flags.2 b/doc/man/nvme_features_async_event_config_flags.2
index 83693a4..1ec9526 100644
--- a/doc/man/nvme_features_async_event_config_flags.2
+++ b/doc/man/nvme_features_async_event_config_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_features_async_event_config_flags" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_features_async_event_config_flags" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_features_async_event_config_flags \- Asynchronous Event Configuration configuration flags
.SH SYNOPSIS
diff --git a/doc/man/nvme_features_id.2 b/doc/man/nvme_features_id.2
index ad24bfb..f4a569d 100644
--- a/doc/man/nvme_features_id.2
+++ b/doc/man/nvme_features_id.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_features_id" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_features_id" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_features_id \- Features - Feature Identifiers
.SH SYNOPSIS
diff --git a/doc/man/nvme_fid_supported_effects.2 b/doc/man/nvme_fid_supported_effects.2
index 512c36e..2616ea3 100644
--- a/doc/man/nvme_fid_supported_effects.2
+++ b/doc/man/nvme_fid_supported_effects.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_fid_supported_effects" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_fid_supported_effects" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_fid_supported_effects \- FID Supported and Effects Data Structure definitions
.SH SYNOPSIS
diff --git a/doc/man/nvme_fid_supported_effects_log.2 b/doc/man/nvme_fid_supported_effects_log.2
index 8358f6c..24f9b9f 100644
--- a/doc/man/nvme_fid_supported_effects_log.2
+++ b/doc/man/nvme_fid_supported_effects_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fid_supported_effects_log" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fid_supported_effects_log" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_fid_supported_effects_log \- Feature Identifiers Supported and Effects
.SH SYNOPSIS
diff --git a/doc/man/nvme_firmware_slot.2 b/doc/man/nvme_firmware_slot.2
index 2fb1f7d..4a2c4ae 100644
--- a/doc/man/nvme_firmware_slot.2
+++ b/doc/man/nvme_firmware_slot.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_firmware_slot" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_firmware_slot" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_firmware_slot \- Firmware Slot Information Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_first_host.2 b/doc/man/nvme_first_host.2
index ee2a5dd..bf3179a 100644
--- a/doc/man/nvme_first_host.2
+++ b/doc/man/nvme_first_host.2
@@ -1,4 +1,4 @@
-.TH "nvme_first_host" 9 "nvme_first_host" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_first_host" 9 "nvme_first_host" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_first_host \- Start host iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_first_subsystem.2 b/doc/man/nvme_first_subsystem.2
index 58559bc..8d2c93e 100644
--- a/doc/man/nvme_first_subsystem.2
+++ b/doc/man/nvme_first_subsystem.2
@@ -1,4 +1,4 @@
-.TH "nvme_first_subsystem" 9 "nvme_first_subsystem" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_first_subsystem" 9 "nvme_first_subsystem" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_first_subsystem \- Start subsystem iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_flbas.2 b/doc/man/nvme_flbas.2
new file mode 100644
index 0000000..588cb50
--- /dev/null
+++ b/doc/man/nvme_flbas.2
@@ -0,0 +1,42 @@
+.TH "libnvme" 9 "enum nvme_flbas" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_flbas \- This field indicates the formatted LBA size
+.SH SYNOPSIS
+enum nvme_flbas {
+.br
+.BI " NVME_FLBAS_LOWER_SHIFT"
+,
+.br
+.br
+.BI " NVME_FLBAS_META_EXT_SHIFT"
+,
+.br
+.br
+.BI " NVME_FLBAS_HIGHER_SHIFT"
+,
+.br
+.br
+.BI " NVME_FLBAS_LOWER_MASK"
+,
+.br
+.br
+.BI " NVME_FLBAS_META_EXT_MASK"
+,
+.br
+.br
+.BI " NVME_FLBAS_HIGHER_MASK"
+
+};
+.SH Constants
+.IP "NVME_FLBAS_LOWER_SHIFT" 12
+Shift amount to get the format index least significant 4 bits
+.IP "NVME_FLBAS_META_EXT_SHIFT" 12
+Shift amount to get the metadata transferred
+.IP "NVME_FLBAS_HIGHER_SHIFT" 12
+Shift amount to get the format index most significant 2 bits
+.IP "NVME_FLBAS_LOWER_MASK" 12
+Mask to get the format index least significant 4 bits
+.IP "NVME_FLBAS_META_EXT_MASK" 12
+Mask to get the metadata transferred
+.IP "NVME_FLBAS_HIGHER_MASK" 12
+Mask to get the format index most significant 2 bits
diff --git a/doc/man/nvme_flush.2 b/doc/man/nvme_flush.2
index 4c79401..eaa1590 100644
--- a/doc/man/nvme_flush.2
+++ b/doc/man/nvme_flush.2
@@ -1,4 +1,4 @@
-.TH "nvme_flush" 9 "nvme_flush" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_flush" 9 "nvme_flush" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_flush \- Send an nvme flush command
.SH SYNOPSIS
diff --git a/doc/man/nvme_for_each_host.2 b/doc/man/nvme_for_each_host.2
index 4e6d50f..8077030 100644
--- a/doc/man/nvme_for_each_host.2
+++ b/doc/man/nvme_for_each_host.2
@@ -1,4 +1,4 @@
-.TH "nvme_for_each_host" 9 "nvme_for_each_host" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_for_each_host" 9 "nvme_for_each_host" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_for_each_host \- Traverse host list
.SH SYNOPSIS
diff --git a/doc/man/nvme_for_each_host_safe.2 b/doc/man/nvme_for_each_host_safe.2
index 45f8250..6aabd74 100644
--- a/doc/man/nvme_for_each_host_safe.2
+++ b/doc/man/nvme_for_each_host_safe.2
@@ -1,4 +1,4 @@
-.TH "nvme_for_each_host_safe" 9 "nvme_for_each_host_safe" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_for_each_host_safe" 9 "nvme_for_each_host_safe" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_for_each_host_safe \- Traverse host list
.SH SYNOPSIS
diff --git a/doc/man/nvme_for_each_subsystem.2 b/doc/man/nvme_for_each_subsystem.2
index 9b14dd8..f6e794d 100644
--- a/doc/man/nvme_for_each_subsystem.2
+++ b/doc/man/nvme_for_each_subsystem.2
@@ -1,4 +1,4 @@
-.TH "nvme_for_each_subsystem" 9 "nvme_for_each_subsystem" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_for_each_subsystem" 9 "nvme_for_each_subsystem" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_for_each_subsystem \- Traverse subsystems
.SH SYNOPSIS
diff --git a/doc/man/nvme_for_each_subsystem_safe.2 b/doc/man/nvme_for_each_subsystem_safe.2
index d2101f0..7528e3c 100644
--- a/doc/man/nvme_for_each_subsystem_safe.2
+++ b/doc/man/nvme_for_each_subsystem_safe.2
@@ -1,4 +1,4 @@
-.TH "nvme_for_each_subsystem_safe" 9 "nvme_for_each_subsystem_safe" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_for_each_subsystem_safe" 9 "nvme_for_each_subsystem_safe" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_for_each_subsystem_safe \- Traverse subsystems
.SH SYNOPSIS
diff --git a/doc/man/nvme_format_nvm.2 b/doc/man/nvme_format_nvm.2
index c8615ad..d942278 100644
--- a/doc/man/nvme_format_nvm.2
+++ b/doc/man/nvme_format_nvm.2
@@ -1,4 +1,4 @@
-.TH "nvme_format_nvm" 9 "nvme_format_nvm" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_format_nvm" 9 "nvme_format_nvm" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_format_nvm \- Format nvme namespace(s)
.SH SYNOPSIS
diff --git a/doc/man/nvme_format_nvm_compln_event.2 b/doc/man/nvme_format_nvm_compln_event.2
index 261f6d0..f198a19 100644
--- a/doc/man/nvme_format_nvm_compln_event.2
+++ b/doc/man/nvme_format_nvm_compln_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_format_nvm_compln_event" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_format_nvm_compln_event" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_format_nvm_compln_event \- Format NVM Completion Event Data
.SH SYNOPSIS
diff --git a/doc/man/nvme_format_nvm_start_event.2 b/doc/man/nvme_format_nvm_start_event.2
index 8329ffa..2fa0d9e 100644
--- a/doc/man/nvme_format_nvm_start_event.2
+++ b/doc/man/nvme_format_nvm_start_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_format_nvm_start_event" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_format_nvm_start_event" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_format_nvm_start_event \- Format NVM Start Event Data
.SH SYNOPSIS
diff --git a/doc/man/nvme_free_ctrl.2 b/doc/man/nvme_free_ctrl.2
index f26c491..92301fd 100644
--- a/doc/man/nvme_free_ctrl.2
+++ b/doc/man/nvme_free_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_free_ctrl" 9 "nvme_free_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_free_ctrl" 9 "nvme_free_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_free_ctrl \- Free controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_free_host.2 b/doc/man/nvme_free_host.2
index 8617c5a..7bc8c4f 100644
--- a/doc/man/nvme_free_host.2
+++ b/doc/man/nvme_free_host.2
@@ -1,4 +1,4 @@
-.TH "nvme_free_host" 9 "nvme_free_host" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_free_host" 9 "nvme_free_host" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_free_host \- Free nvme_host_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_free_ns.2 b/doc/man/nvme_free_ns.2
index 0befce4..6e87924 100644
--- a/doc/man/nvme_free_ns.2
+++ b/doc/man/nvme_free_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_free_ns" 9 "nvme_free_ns" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_free_ns" 9 "nvme_free_ns" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_free_ns \- Free a namespace object
.SH SYNOPSIS
diff --git a/doc/man/nvme_free_subsystem.2 b/doc/man/nvme_free_subsystem.2
index 2d7718a..2311486 100644
--- a/doc/man/nvme_free_subsystem.2
+++ b/doc/man/nvme_free_subsystem.2
@@ -1,4 +1,4 @@
-.TH "nvme_free_subsystem" 9 "nvme_free_subsystem" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_free_subsystem" 9 "nvme_free_subsystem" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_free_subsystem \- Free a subsystem
.SH SYNOPSIS
diff --git a/doc/man/nvme_free_tree.2 b/doc/man/nvme_free_tree.2
index 61cf386..fa9a707 100644
--- a/doc/man/nvme_free_tree.2
+++ b/doc/man/nvme_free_tree.2
@@ -1,4 +1,4 @@
-.TH "nvme_free_tree" 9 "nvme_free_tree" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_free_tree" 9 "nvme_free_tree" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_free_tree \- Free root object
.SH SYNOPSIS
diff --git a/doc/man/nvme_fw_commit.2 b/doc/man/nvme_fw_commit.2
index eae82dc..8091b89 100644
--- a/doc/man/nvme_fw_commit.2
+++ b/doc/man/nvme_fw_commit.2
@@ -1,4 +1,4 @@
-.TH "nvme_fw_commit" 9 "nvme_fw_commit" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_fw_commit" 9 "nvme_fw_commit" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_fw_commit \- Commit firmware using the specified action
.SH SYNOPSIS
diff --git a/doc/man/nvme_fw_commit_ca.2 b/doc/man/nvme_fw_commit_ca.2
index d3cb31d..3f8a7bd 100644
--- a/doc/man/nvme_fw_commit_ca.2
+++ b/doc/man/nvme_fw_commit_ca.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_fw_commit_ca" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_fw_commit_ca" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_fw_commit_ca \- Firmware Commit - Commit Action
.SH SYNOPSIS
diff --git a/doc/man/nvme_fw_commit_event.2 b/doc/man/nvme_fw_commit_event.2
index 2a688c2..45b5f14 100644
--- a/doc/man/nvme_fw_commit_event.2
+++ b/doc/man/nvme_fw_commit_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_fw_commit_event" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_fw_commit_event" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_fw_commit_event \- Firmware Commit Event Data
.SH SYNOPSIS
diff --git a/doc/man/nvme_fw_download.2 b/doc/man/nvme_fw_download.2
index c054797..b588e84 100644
--- a/doc/man/nvme_fw_download.2
+++ b/doc/man/nvme_fw_download.2
@@ -1,4 +1,4 @@
-.TH "nvme_fw_download" 9 "nvme_fw_download" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_fw_download" 9 "nvme_fw_download" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_fw_download \- Download part or all of a firmware image to the controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_fw_download_seq.2 b/doc/man/nvme_fw_download_seq.2
index 217f2ca..c6a3f6b 100644
--- a/doc/man/nvme_fw_download_seq.2
+++ b/doc/man/nvme_fw_download_seq.2
@@ -1,4 +1,4 @@
-.TH "nvme_fw_download_seq" 9 "nvme_fw_download_seq" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_fw_download_seq" 9 "nvme_fw_download_seq" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_fw_download_seq \- Firmware download sequence
.SH SYNOPSIS
diff --git a/doc/man/nvme_gen_dhchap_key.2 b/doc/man/nvme_gen_dhchap_key.2
index 5215896..51c8e9c 100644
--- a/doc/man/nvme_gen_dhchap_key.2
+++ b/doc/man/nvme_gen_dhchap_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_gen_dhchap_key" 9 "nvme_gen_dhchap_key" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_gen_dhchap_key" 9 "nvme_gen_dhchap_key" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_gen_dhchap_key \- DH-HMAC-CHAP key generation
.SH SYNOPSIS
diff --git a/doc/man/nvme_generate_tls_key_identity.2 b/doc/man/nvme_generate_tls_key_identity.2
index 84b5174..928626b 100644
--- a/doc/man/nvme_generate_tls_key_identity.2
+++ b/doc/man/nvme_generate_tls_key_identity.2
@@ -1,4 +1,4 @@
-.TH "nvme_generate_tls_key_identity" 9 "nvme_generate_tls_key_identity" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_generate_tls_key_identity" 9 "nvme_generate_tls_key_identity" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_generate_tls_key_identity \- Generate the TLS key identity
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_ana_log_len.2 b/doc/man/nvme_get_ana_log_len.2
index 0c17419..d63b937 100644
--- a/doc/man/nvme_get_ana_log_len.2
+++ b/doc/man/nvme_get_ana_log_len.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_ana_log_len" 9 "nvme_get_ana_log_len" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_ana_log_len" 9 "nvme_get_ana_log_len" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_ana_log_len \- Retrieve size of the current ANA log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_attr.2 b/doc/man/nvme_get_attr.2
index f580ea2..c3eeb9a 100644
--- a/doc/man/nvme_get_attr.2
+++ b/doc/man/nvme_get_attr.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_attr" 9 "nvme_get_attr" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_attr" 9 "nvme_get_attr" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_attr \- Read sysfs attribute
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_ctrl_attr.2 b/doc/man/nvme_get_ctrl_attr.2
index 4f4a9ba..b78715d 100644
--- a/doc/man/nvme_get_ctrl_attr.2
+++ b/doc/man/nvme_get_ctrl_attr.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_ctrl_attr" 9 "nvme_get_ctrl_attr" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_ctrl_attr" 9 "nvme_get_ctrl_attr" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_ctrl_attr \- Read controller sysfs attribute
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_ctrl_telemetry.2 b/doc/man/nvme_get_ctrl_telemetry.2
index c27bf1c..482482d 100644
--- a/doc/man/nvme_get_ctrl_telemetry.2
+++ b/doc/man/nvme_get_ctrl_telemetry.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_ctrl_telemetry" 9 "nvme_get_ctrl_telemetry" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_ctrl_telemetry" 9 "nvme_get_ctrl_telemetry" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_ctrl_telemetry \- Get controller telemetry log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_directive_receive_length.2 b/doc/man/nvme_get_directive_receive_length.2
index 70e2f93..6e1f169 100644
--- a/doc/man/nvme_get_directive_receive_length.2
+++ b/doc/man/nvme_get_directive_receive_length.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_directive_receive_length" 9 "nvme_get_directive_receive_length" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_directive_receive_length" 9 "nvme_get_directive_receive_length" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_directive_receive_length \- Get directive receive length
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_discovery_args.2 b/doc/man/nvme_get_discovery_args.2
index 25ae70e..95bcbcb 100644
--- a/doc/man/nvme_get_discovery_args.2
+++ b/doc/man/nvme_get_discovery_args.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_get_discovery_args" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_get_discovery_args" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_get_discovery_args \- Arguments for nvmf_get_discovery_wargs()
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_feature_length.2 b/doc/man/nvme_get_feature_length.2
index d321a49..5d02ad4 100644
--- a/doc/man/nvme_get_feature_length.2
+++ b/doc/man/nvme_get_feature_length.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_feature_length" 9 "nvme_get_feature_length" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_feature_length" 9 "nvme_get_feature_length" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_feature_length \- Retreive the command payload length for a specific feature identifier
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_feature_length2.2 b/doc/man/nvme_get_feature_length2.2
index 6498350..9357ad8 100644
--- a/doc/man/nvme_get_feature_length2.2
+++ b/doc/man/nvme_get_feature_length2.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_feature_length2" 9 "nvme_get_feature_length2" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_feature_length2" 9 "nvme_get_feature_length2" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_feature_length2 \- Retreive the command payload length for a specific feature identifier
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features.2 b/doc/man/nvme_get_features.2
index a8c86cf..a417388 100644
--- a/doc/man/nvme_get_features.2
+++ b/doc/man/nvme_get_features.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features" 9 "nvme_get_features" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features" 9 "nvme_get_features" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features \- Retrieve a feature attribute
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_arbitration.2 b/doc/man/nvme_get_features_arbitration.2
index 1a01c9c..7ebbb2f 100644
--- a/doc/man/nvme_get_features_arbitration.2
+++ b/doc/man/nvme_get_features_arbitration.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_arbitration" 9 "nvme_get_features_arbitration" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_arbitration" 9 "nvme_get_features_arbitration" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_arbitration \- Get arbitration feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_async_event.2 b/doc/man/nvme_get_features_async_event.2
index fa2a6c6..9aaabc7 100644
--- a/doc/man/nvme_get_features_async_event.2
+++ b/doc/man/nvme_get_features_async_event.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_async_event" 9 "nvme_get_features_async_event" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_async_event" 9 "nvme_get_features_async_event" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_async_event \- Get asynchronous event feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_auto_pst.2 b/doc/man/nvme_get_features_auto_pst.2
index 59a41bc..ae18f36 100644
--- a/doc/man/nvme_get_features_auto_pst.2
+++ b/doc/man/nvme_get_features_auto_pst.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_auto_pst" 9 "nvme_get_features_auto_pst" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_auto_pst" 9 "nvme_get_features_auto_pst" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_auto_pst \- Get autonomous power state feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_data.2 b/doc/man/nvme_get_features_data.2
index 823b0f9..e026c12 100644
--- a/doc/man/nvme_get_features_data.2
+++ b/doc/man/nvme_get_features_data.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_data" 9 "nvme_get_features_data" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_data" 9 "nvme_get_features_data" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_data \- Helper function for @nvme_get_features()
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_endurance_event_cfg.2 b/doc/man/nvme_get_features_endurance_event_cfg.2
index cabe355..00f816b 100644
--- a/doc/man/nvme_get_features_endurance_event_cfg.2
+++ b/doc/man/nvme_get_features_endurance_event_cfg.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_endurance_event_cfg" 9 "nvme_get_features_endurance_event_cfg" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_endurance_event_cfg" 9 "nvme_get_features_endurance_event_cfg" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_endurance_event_cfg \- Get endurance event config feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_err_recovery.2 b/doc/man/nvme_get_features_err_recovery.2
index f8e14eb..5c17851 100644
--- a/doc/man/nvme_get_features_err_recovery.2
+++ b/doc/man/nvme_get_features_err_recovery.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_err_recovery" 9 "nvme_get_features_err_recovery" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_err_recovery" 9 "nvme_get_features_err_recovery" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_err_recovery \- Get error recovery feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_err_recovery2.2 b/doc/man/nvme_get_features_err_recovery2.2
index e79833f..a5852d0 100644
--- a/doc/man/nvme_get_features_err_recovery2.2
+++ b/doc/man/nvme_get_features_err_recovery2.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_err_recovery2" 9 "nvme_get_features_err_recovery2" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_err_recovery2" 9 "nvme_get_features_err_recovery2" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_err_recovery2 \- Get error recovery feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_hctm.2 b/doc/man/nvme_get_features_hctm.2
index ce7b9c1..fb9ffdf 100644
--- a/doc/man/nvme_get_features_hctm.2
+++ b/doc/man/nvme_get_features_hctm.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_hctm" 9 "nvme_get_features_hctm" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_hctm" 9 "nvme_get_features_hctm" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_hctm \- Get thermal management feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_host_behavior.2 b/doc/man/nvme_get_features_host_behavior.2
index 48d333b..6cf3ece 100644
--- a/doc/man/nvme_get_features_host_behavior.2
+++ b/doc/man/nvme_get_features_host_behavior.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_host_behavior" 9 "nvme_get_features_host_behavior" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_host_behavior" 9 "nvme_get_features_host_behavior" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_host_behavior \- Get host behavior feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_host_id.2 b/doc/man/nvme_get_features_host_id.2
index 2f2011a..d9ba9a6 100644
--- a/doc/man/nvme_get_features_host_id.2
+++ b/doc/man/nvme_get_features_host_id.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_host_id" 9 "nvme_get_features_host_id" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_host_id" 9 "nvme_get_features_host_id" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_host_id \- Get host id feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_host_mem_buf.2 b/doc/man/nvme_get_features_host_mem_buf.2
index e31e862..1e6d636 100644
--- a/doc/man/nvme_get_features_host_mem_buf.2
+++ b/doc/man/nvme_get_features_host_mem_buf.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_host_mem_buf" 9 "nvme_get_features_host_mem_buf" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_host_mem_buf" 9 "nvme_get_features_host_mem_buf" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_host_mem_buf \- Get host memory buffer feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_host_mem_buf2.2 b/doc/man/nvme_get_features_host_mem_buf2.2
index 6740a8c..44ffb0b 100644
--- a/doc/man/nvme_get_features_host_mem_buf2.2
+++ b/doc/man/nvme_get_features_host_mem_buf2.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_host_mem_buf2" 9 "nvme_get_features_host_mem_buf2" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_host_mem_buf2" 9 "nvme_get_features_host_mem_buf2" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_host_mem_buf2 \- Get host memory buffer feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_iocs_profile.2 b/doc/man/nvme_get_features_iocs_profile.2
index eb448eb..833193e 100644
--- a/doc/man/nvme_get_features_iocs_profile.2
+++ b/doc/man/nvme_get_features_iocs_profile.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_iocs_profile" 9 "nvme_get_features_iocs_profile" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_iocs_profile" 9 "nvme_get_features_iocs_profile" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_iocs_profile \- Get IOCS profile feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_irq_coalesce.2 b/doc/man/nvme_get_features_irq_coalesce.2
index 31f03fa..ff97992 100644
--- a/doc/man/nvme_get_features_irq_coalesce.2
+++ b/doc/man/nvme_get_features_irq_coalesce.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_irq_coalesce" 9 "nvme_get_features_irq_coalesce" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_irq_coalesce" 9 "nvme_get_features_irq_coalesce" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_irq_coalesce \- Get IRQ coalesce feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_irq_config.2 b/doc/man/nvme_get_features_irq_config.2
index 2a7967c..4ec8b8b 100644
--- a/doc/man/nvme_get_features_irq_config.2
+++ b/doc/man/nvme_get_features_irq_config.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_irq_config" 9 "nvme_get_features_irq_config" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_irq_config" 9 "nvme_get_features_irq_config" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_irq_config \- Get IRQ config feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_kato.2 b/doc/man/nvme_get_features_kato.2
index fed7ea7..1c61edf 100644
--- a/doc/man/nvme_get_features_kato.2
+++ b/doc/man/nvme_get_features_kato.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_kato" 9 "nvme_get_features_kato" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_kato" 9 "nvme_get_features_kato" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_kato \- Get keep alive timeout feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_lba_range.2 b/doc/man/nvme_get_features_lba_range.2
index 05686d3..1d84e62 100644
--- a/doc/man/nvme_get_features_lba_range.2
+++ b/doc/man/nvme_get_features_lba_range.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_lba_range" 9 "nvme_get_features_lba_range" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_lba_range" 9 "nvme_get_features_lba_range" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_lba_range \- Get LBA range feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_lba_range2.2 b/doc/man/nvme_get_features_lba_range2.2
index fc6fdfd..6408a10 100644
--- a/doc/man/nvme_get_features_lba_range2.2
+++ b/doc/man/nvme_get_features_lba_range2.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_lba_range2" 9 "nvme_get_features_lba_range2" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_lba_range2" 9 "nvme_get_features_lba_range2" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_lba_range2 \- Get LBA range feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_lba_sts_interval.2 b/doc/man/nvme_get_features_lba_sts_interval.2
index 0338c16..3c3b9dc 100644
--- a/doc/man/nvme_get_features_lba_sts_interval.2
+++ b/doc/man/nvme_get_features_lba_sts_interval.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_lba_sts_interval" 9 "nvme_get_features_lba_sts_interval" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_lba_sts_interval" 9 "nvme_get_features_lba_sts_interval" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_lba_sts_interval \- Get LBA status information feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_nopsc.2 b/doc/man/nvme_get_features_nopsc.2
index ce6d00c..e3aa014 100644
--- a/doc/man/nvme_get_features_nopsc.2
+++ b/doc/man/nvme_get_features_nopsc.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_nopsc" 9 "nvme_get_features_nopsc" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_nopsc" 9 "nvme_get_features_nopsc" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_nopsc \- Get non-operational power state feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_num_queues.2 b/doc/man/nvme_get_features_num_queues.2
index ad433b4..310bac5 100644
--- a/doc/man/nvme_get_features_num_queues.2
+++ b/doc/man/nvme_get_features_num_queues.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_num_queues" 9 "nvme_get_features_num_queues" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_num_queues" 9 "nvme_get_features_num_queues" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_num_queues \- Get number of queues feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_plm_config.2 b/doc/man/nvme_get_features_plm_config.2
index 3683d04..45a7b16 100644
--- a/doc/man/nvme_get_features_plm_config.2
+++ b/doc/man/nvme_get_features_plm_config.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_plm_config" 9 "nvme_get_features_plm_config" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_plm_config" 9 "nvme_get_features_plm_config" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_plm_config \- Get predictable latency feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_plm_window.2 b/doc/man/nvme_get_features_plm_window.2
index 0771662..5a4ffe1 100644
--- a/doc/man/nvme_get_features_plm_window.2
+++ b/doc/man/nvme_get_features_plm_window.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_plm_window" 9 "nvme_get_features_plm_window" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_plm_window" 9 "nvme_get_features_plm_window" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_plm_window \- Get window select feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_power_mgmt.2 b/doc/man/nvme_get_features_power_mgmt.2
index 295c55b..5f36237 100644
--- a/doc/man/nvme_get_features_power_mgmt.2
+++ b/doc/man/nvme_get_features_power_mgmt.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_power_mgmt" 9 "nvme_get_features_power_mgmt" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_power_mgmt" 9 "nvme_get_features_power_mgmt" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_power_mgmt \- Get power management feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_resv_mask.2 b/doc/man/nvme_get_features_resv_mask.2
index fe25a84..287dcd8 100644
--- a/doc/man/nvme_get_features_resv_mask.2
+++ b/doc/man/nvme_get_features_resv_mask.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_resv_mask" 9 "nvme_get_features_resv_mask" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_resv_mask" 9 "nvme_get_features_resv_mask" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_resv_mask \- Get reservation mask feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_resv_mask2.2 b/doc/man/nvme_get_features_resv_mask2.2
index 271efee..13e00ee 100644
--- a/doc/man/nvme_get_features_resv_mask2.2
+++ b/doc/man/nvme_get_features_resv_mask2.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_resv_mask2" 9 "nvme_get_features_resv_mask2" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_resv_mask2" 9 "nvme_get_features_resv_mask2" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_resv_mask2 \- Get reservation mask feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_resv_persist.2 b/doc/man/nvme_get_features_resv_persist.2
index db4f208..ec70e75 100644
--- a/doc/man/nvme_get_features_resv_persist.2
+++ b/doc/man/nvme_get_features_resv_persist.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_resv_persist" 9 "nvme_get_features_resv_persist" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_resv_persist" 9 "nvme_get_features_resv_persist" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_resv_persist \- Get reservation persist feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_resv_persist2.2 b/doc/man/nvme_get_features_resv_persist2.2
index fb46e77..6ad7bae 100644
--- a/doc/man/nvme_get_features_resv_persist2.2
+++ b/doc/man/nvme_get_features_resv_persist2.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_resv_persist2" 9 "nvme_get_features_resv_persist2" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_resv_persist2" 9 "nvme_get_features_resv_persist2" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_resv_persist2 \- Get reservation persist feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_rrl.2 b/doc/man/nvme_get_features_rrl.2
index 672ea0b..61721b5 100644
--- a/doc/man/nvme_get_features_rrl.2
+++ b/doc/man/nvme_get_features_rrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_rrl" 9 "nvme_get_features_rrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_rrl" 9 "nvme_get_features_rrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_rrl \- Get read recovery level feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_sanitize.2 b/doc/man/nvme_get_features_sanitize.2
index 7db9cec..9a3bebe 100644
--- a/doc/man/nvme_get_features_sanitize.2
+++ b/doc/man/nvme_get_features_sanitize.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_sanitize" 9 "nvme_get_features_sanitize" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_sanitize" 9 "nvme_get_features_sanitize" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_sanitize \- Get sanitize feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_sel.2 b/doc/man/nvme_get_features_sel.2
index 84e3853..7919533 100644
--- a/doc/man/nvme_get_features_sel.2
+++ b/doc/man/nvme_get_features_sel.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_get_features_sel" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_get_features_sel" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_get_features_sel \- Get Features - Select
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_simple.2 b/doc/man/nvme_get_features_simple.2
index f3701dc..88d79b9 100644
--- a/doc/man/nvme_get_features_simple.2
+++ b/doc/man/nvme_get_features_simple.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_simple" 9 "nvme_get_features_simple" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_simple" 9 "nvme_get_features_simple" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_simple \- Helper function for @nvme_get_features()
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_sw_progress.2 b/doc/man/nvme_get_features_sw_progress.2
index d10df48..7e5e00a 100644
--- a/doc/man/nvme_get_features_sw_progress.2
+++ b/doc/man/nvme_get_features_sw_progress.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_sw_progress" 9 "nvme_get_features_sw_progress" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_sw_progress" 9 "nvme_get_features_sw_progress" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_sw_progress \- Get software progress feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_temp_thresh.2 b/doc/man/nvme_get_features_temp_thresh.2
index 96a95fe..7056ce1 100644
--- a/doc/man/nvme_get_features_temp_thresh.2
+++ b/doc/man/nvme_get_features_temp_thresh.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_temp_thresh" 9 "nvme_get_features_temp_thresh" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_temp_thresh" 9 "nvme_get_features_temp_thresh" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_temp_thresh \- Get temperature threshold feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_timestamp.2 b/doc/man/nvme_get_features_timestamp.2
index b376c48..4e1b866 100644
--- a/doc/man/nvme_get_features_timestamp.2
+++ b/doc/man/nvme_get_features_timestamp.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_timestamp" 9 "nvme_get_features_timestamp" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_timestamp" 9 "nvme_get_features_timestamp" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_timestamp \- Get timestamp feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_volatile_wc.2 b/doc/man/nvme_get_features_volatile_wc.2
index 478c5a3..e3101d0 100644
--- a/doc/man/nvme_get_features_volatile_wc.2
+++ b/doc/man/nvme_get_features_volatile_wc.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_volatile_wc" 9 "nvme_get_features_volatile_wc" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_volatile_wc" 9 "nvme_get_features_volatile_wc" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_volatile_wc \- Get volatile write cache feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_write_atomic.2 b/doc/man/nvme_get_features_write_atomic.2
index 48b2d62..2b27921 100644
--- a/doc/man/nvme_get_features_write_atomic.2
+++ b/doc/man/nvme_get_features_write_atomic.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_write_atomic" 9 "nvme_get_features_write_atomic" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_write_atomic" 9 "nvme_get_features_write_atomic" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_write_atomic \- Get write atomic feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_features_write_protect.2 b/doc/man/nvme_get_features_write_protect.2
index e0200f2..17d6bb5 100644
--- a/doc/man/nvme_get_features_write_protect.2
+++ b/doc/man/nvme_get_features_write_protect.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_features_write_protect" 9 "nvme_get_features_write_protect" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_features_write_protect" 9 "nvme_get_features_write_protect" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_features_write_protect \- Get write protect feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_host_telemetry.2 b/doc/man/nvme_get_host_telemetry.2
index b60f685..81f5a27 100644
--- a/doc/man/nvme_get_host_telemetry.2
+++ b/doc/man/nvme_get_host_telemetry.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_host_telemetry" 9 "nvme_get_host_telemetry" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_host_telemetry" 9 "nvme_get_host_telemetry" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_host_telemetry \- Get host telemetry log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_lba_status.2 b/doc/man/nvme_get_lba_status.2
index c1d39a9..8b6be5f 100644
--- a/doc/man/nvme_get_lba_status.2
+++ b/doc/man/nvme_get_lba_status.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_lba_status" 9 "nvme_get_lba_status" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_lba_status" 9 "nvme_get_lba_status" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_lba_status \- Retrieve information on possibly unrecoverable LBAs
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_lba_status_log.2 b/doc/man/nvme_get_lba_status_log.2
index 73a3287..bef70d1 100644
--- a/doc/man/nvme_get_lba_status_log.2
+++ b/doc/man/nvme_get_lba_status_log.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_lba_status_log" 9 "nvme_get_lba_status_log" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_lba_status_log" 9 "nvme_get_lba_status_log" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_lba_status_log \- Retrieve the LBA Status log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log.2 b/doc/man/nvme_get_log.2
index b64b7d6..f227a5a 100644
--- a/doc/man/nvme_get_log.2
+++ b/doc/man/nvme_get_log.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log" 9 "nvme_get_log" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log" 9 "nvme_get_log" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log \- NVMe Admin Get Log command
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_ana.2 b/doc/man/nvme_get_log_ana.2
index 8dcf428..f0b252b 100644
--- a/doc/man/nvme_get_log_ana.2
+++ b/doc/man/nvme_get_log_ana.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_ana" 9 "nvme_get_log_ana" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_ana" 9 "nvme_get_log_ana" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_ana \- Retrieve Asymmetric Namespace Access log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_ana_groups.2 b/doc/man/nvme_get_log_ana_groups.2
index 22c7787..5b957a1 100644
--- a/doc/man/nvme_get_log_ana_groups.2
+++ b/doc/man/nvme_get_log_ana_groups.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_ana_groups" 9 "nvme_get_log_ana_groups" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_ana_groups" 9 "nvme_get_log_ana_groups" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_ana_groups \- Retrieve Asymmetric Namespace Access groups only log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_boot_partition.2 b/doc/man/nvme_get_log_boot_partition.2
index e4c5d18..5f6530f 100644
--- a/doc/man/nvme_get_log_boot_partition.2
+++ b/doc/man/nvme_get_log_boot_partition.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_boot_partition" 9 "nvme_get_log_boot_partition" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_boot_partition" 9 "nvme_get_log_boot_partition" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_boot_partition \- Retrieve Boot Partition
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_changed_ns_list.2 b/doc/man/nvme_get_log_changed_ns_list.2
index 055d26d..1a92b54 100644
--- a/doc/man/nvme_get_log_changed_ns_list.2
+++ b/doc/man/nvme_get_log_changed_ns_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_changed_ns_list" 9 "nvme_get_log_changed_ns_list" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_changed_ns_list" 9 "nvme_get_log_changed_ns_list" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_changed_ns_list \- Retrieve namespace changed list
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_cmd_effects.2 b/doc/man/nvme_get_log_cmd_effects.2
index 8fbc4f6..7311bcc 100644
--- a/doc/man/nvme_get_log_cmd_effects.2
+++ b/doc/man/nvme_get_log_cmd_effects.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_cmd_effects" 9 "nvme_get_log_cmd_effects" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_cmd_effects" 9 "nvme_get_log_cmd_effects" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_cmd_effects \- Retrieve nvme command effects log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_create_telemetry_host.2 b/doc/man/nvme_get_log_create_telemetry_host.2
index 145de37..d8ab234 100644
--- a/doc/man/nvme_get_log_create_telemetry_host.2
+++ b/doc/man/nvme_get_log_create_telemetry_host.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_create_telemetry_host" 9 "nvme_get_log_create_telemetry_host" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_create_telemetry_host" 9 "nvme_get_log_create_telemetry_host" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_create_telemetry_host \- Create host telemetry log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_device_self_test.2 b/doc/man/nvme_get_log_device_self_test.2
index 7c6dc37..b6d43aa 100644
--- a/doc/man/nvme_get_log_device_self_test.2
+++ b/doc/man/nvme_get_log_device_self_test.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_device_self_test" 9 "nvme_get_log_device_self_test" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_device_self_test" 9 "nvme_get_log_device_self_test" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_device_self_test \- Retrieve the device self test log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_discovery.2 b/doc/man/nvme_get_log_discovery.2
index b5c31aa..ae2a511 100644
--- a/doc/man/nvme_get_log_discovery.2
+++ b/doc/man/nvme_get_log_discovery.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_discovery" 9 "nvme_get_log_discovery" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_discovery" 9 "nvme_get_log_discovery" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_discovery \- Retrieve Discovery log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_endurance_group.2 b/doc/man/nvme_get_log_endurance_group.2
index d1e3074..9e6cc21 100644
--- a/doc/man/nvme_get_log_endurance_group.2
+++ b/doc/man/nvme_get_log_endurance_group.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_endurance_group" 9 "nvme_get_log_endurance_group" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_endurance_group" 9 "nvme_get_log_endurance_group" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_endurance_group \- Get Endurance Group log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_endurance_grp_evt.2 b/doc/man/nvme_get_log_endurance_grp_evt.2
index 67c1dd1..c9a07ce 100644
--- a/doc/man/nvme_get_log_endurance_grp_evt.2
+++ b/doc/man/nvme_get_log_endurance_grp_evt.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_endurance_grp_evt" 9 "nvme_get_log_endurance_grp_evt" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_endurance_grp_evt" 9 "nvme_get_log_endurance_grp_evt" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_endurance_grp_evt \- Retrieve Rotational Media Information
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_error.2 b/doc/man/nvme_get_log_error.2
index abd32df..4d30ce6 100644
--- a/doc/man/nvme_get_log_error.2
+++ b/doc/man/nvme_get_log_error.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_error" 9 "nvme_get_log_error" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_error" 9 "nvme_get_log_error" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_error \- Retrieve nvme error log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_fdp_configurations.2 b/doc/man/nvme_get_log_fdp_configurations.2
index 0b14306..5968243 100644
--- a/doc/man/nvme_get_log_fdp_configurations.2
+++ b/doc/man/nvme_get_log_fdp_configurations.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_fdp_configurations" 9 "nvme_get_log_fdp_configurations" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_fdp_configurations" 9 "nvme_get_log_fdp_configurations" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_fdp_configurations \- Get list of Flexible Data Placement configurations
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_fdp_events.2 b/doc/man/nvme_get_log_fdp_events.2
index 1d7834d..87b239a 100644
--- a/doc/man/nvme_get_log_fdp_events.2
+++ b/doc/man/nvme_get_log_fdp_events.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_fdp_events" 9 "nvme_get_log_fdp_events" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_fdp_events" 9 "nvme_get_log_fdp_events" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_fdp_events \- Get Flexible Data Placement events
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_fdp_stats.2 b/doc/man/nvme_get_log_fdp_stats.2
index 7dd19da..c57a193 100644
--- a/doc/man/nvme_get_log_fdp_stats.2
+++ b/doc/man/nvme_get_log_fdp_stats.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_fdp_stats" 9 "nvme_get_log_fdp_stats" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_fdp_stats" 9 "nvme_get_log_fdp_stats" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_fdp_stats \- Get Flexible Data Placement statistics
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_fid_supported_effects.2 b/doc/man/nvme_get_log_fid_supported_effects.2
index 300ffff..f9ecf4f 100644
--- a/doc/man/nvme_get_log_fid_supported_effects.2
+++ b/doc/man/nvme_get_log_fid_supported_effects.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_fid_supported_effects" 9 "nvme_get_log_fid_supported_effects" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_fid_supported_effects" 9 "nvme_get_log_fid_supported_effects" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_fid_supported_effects \- Retrieve Feature Identifiers Supported and Effects
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_fw_slot.2 b/doc/man/nvme_get_log_fw_slot.2
index 3e88526..2570dc9 100644
--- a/doc/man/nvme_get_log_fw_slot.2
+++ b/doc/man/nvme_get_log_fw_slot.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_fw_slot" 9 "nvme_get_log_fw_slot" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_fw_slot" 9 "nvme_get_log_fw_slot" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_fw_slot \- Retrieves the controller firmware log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_lba_status.2 b/doc/man/nvme_get_log_lba_status.2
index 32660c6..bf62e8e 100644
--- a/doc/man/nvme_get_log_lba_status.2
+++ b/doc/man/nvme_get_log_lba_status.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_lba_status" 9 "nvme_get_log_lba_status" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_lba_status" 9 "nvme_get_log_lba_status" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_lba_status \- Retrieve LBA Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_media_unit_stat.2 b/doc/man/nvme_get_log_media_unit_stat.2
index 4c87a68..f166926 100644
--- a/doc/man/nvme_get_log_media_unit_stat.2
+++ b/doc/man/nvme_get_log_media_unit_stat.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_media_unit_stat" 9 "nvme_get_log_media_unit_stat" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_media_unit_stat" 9 "nvme_get_log_media_unit_stat" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_media_unit_stat \- Retrieve Media Unit Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_mi_cmd_supported_effects.2 b/doc/man/nvme_get_log_mi_cmd_supported_effects.2
index 384d9df..82b74e5 100644
--- a/doc/man/nvme_get_log_mi_cmd_supported_effects.2
+++ b/doc/man/nvme_get_log_mi_cmd_supported_effects.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_mi_cmd_supported_effects" 9 "nvme_get_log_mi_cmd_supported_effects" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_mi_cmd_supported_effects" 9 "nvme_get_log_mi_cmd_supported_effects" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_mi_cmd_supported_effects \- displays the MI Commands Supported by the controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_page.2 b/doc/man/nvme_get_log_page.2
index e3b16a0..ed047aa 100644
--- a/doc/man/nvme_get_log_page.2
+++ b/doc/man/nvme_get_log_page.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_page" 9 "nvme_get_log_page" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_page" 9 "nvme_get_log_page" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_page \- Get log page data
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_persistent_event.2 b/doc/man/nvme_get_log_persistent_event.2
index 4045b53..5813e8f 100644
--- a/doc/man/nvme_get_log_persistent_event.2
+++ b/doc/man/nvme_get_log_persistent_event.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_persistent_event" 9 "nvme_get_log_persistent_event" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_persistent_event" 9 "nvme_get_log_persistent_event" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_persistent_event \- Retrieve Persistent Event Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_phy_rx_eom.2 b/doc/man/nvme_get_log_phy_rx_eom.2
index 845953a..53638f3 100644
--- a/doc/man/nvme_get_log_phy_rx_eom.2
+++ b/doc/man/nvme_get_log_phy_rx_eom.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_phy_rx_eom" 9 "nvme_get_log_phy_rx_eom" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_phy_rx_eom" 9 "nvme_get_log_phy_rx_eom" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_phy_rx_eom \- Retrieve Physical Interface Receiver Eye Opening Measurement Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_predictable_lat_event.2 b/doc/man/nvme_get_log_predictable_lat_event.2
index e75dc27..aa137e9 100644
--- a/doc/man/nvme_get_log_predictable_lat_event.2
+++ b/doc/man/nvme_get_log_predictable_lat_event.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_predictable_lat_event" 9 "nvme_get_log_predictable_lat_event" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_predictable_lat_event" 9 "nvme_get_log_predictable_lat_event" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_predictable_lat_event \- Retrieve Predictable Latency Event Aggregate Log Page
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_predictable_lat_nvmset.2 b/doc/man/nvme_get_log_predictable_lat_nvmset.2
index 8ec698e..a430378 100644
--- a/doc/man/nvme_get_log_predictable_lat_nvmset.2
+++ b/doc/man/nvme_get_log_predictable_lat_nvmset.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_predictable_lat_nvmset" 9 "nvme_get_log_predictable_lat_nvmset" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_predictable_lat_nvmset" 9 "nvme_get_log_predictable_lat_nvmset" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_predictable_lat_nvmset \- Predictable Latency Per NVM Set
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_reclaim_unit_handle_usage.2 b/doc/man/nvme_get_log_reclaim_unit_handle_usage.2
index 1d5f274..655bd58 100644
--- a/doc/man/nvme_get_log_reclaim_unit_handle_usage.2
+++ b/doc/man/nvme_get_log_reclaim_unit_handle_usage.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_reclaim_unit_handle_usage" 9 "nvme_get_log_reclaim_unit_handle_usage" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_reclaim_unit_handle_usage" 9 "nvme_get_log_reclaim_unit_handle_usage" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_reclaim_unit_handle_usage \- Get reclaim unit handle usage
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_reservation.2 b/doc/man/nvme_get_log_reservation.2
index 85eeccc..5967bc9 100644
--- a/doc/man/nvme_get_log_reservation.2
+++ b/doc/man/nvme_get_log_reservation.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_reservation" 9 "nvme_get_log_reservation" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_reservation" 9 "nvme_get_log_reservation" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_reservation \- Retrieve Reservation Notification
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_sanitize.2 b/doc/man/nvme_get_log_sanitize.2
index 261bf1b..a0ed114 100644
--- a/doc/man/nvme_get_log_sanitize.2
+++ b/doc/man/nvme_get_log_sanitize.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_sanitize" 9 "nvme_get_log_sanitize" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_sanitize" 9 "nvme_get_log_sanitize" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_sanitize \- Retrieve Sanitize Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_smart.2 b/doc/man/nvme_get_log_smart.2
index 578db37..c530c33 100644
--- a/doc/man/nvme_get_log_smart.2
+++ b/doc/man/nvme_get_log_smart.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_smart" 9 "nvme_get_log_smart" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_smart" 9 "nvme_get_log_smart" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_smart \- Retrieve nvme smart log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_support_cap_config_list.2 b/doc/man/nvme_get_log_support_cap_config_list.2
index 662e004..8f16c23 100644
--- a/doc/man/nvme_get_log_support_cap_config_list.2
+++ b/doc/man/nvme_get_log_support_cap_config_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_support_cap_config_list" 9 "nvme_get_log_support_cap_config_list" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_support_cap_config_list" 9 "nvme_get_log_support_cap_config_list" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_support_cap_config_list \- Retrieve Supported Capacity Configuration List
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_supported_log_pages.2 b/doc/man/nvme_get_log_supported_log_pages.2
index 4e2fdb6..4a05749 100644
--- a/doc/man/nvme_get_log_supported_log_pages.2
+++ b/doc/man/nvme_get_log_supported_log_pages.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_supported_log_pages" 9 "nvme_get_log_supported_log_pages" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_supported_log_pages" 9 "nvme_get_log_supported_log_pages" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_supported_log_pages \- Retrieve nmve supported log pages
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_telemetry_ctrl.2 b/doc/man/nvme_get_log_telemetry_ctrl.2
index 466ec9a..5b7dff7 100644
--- a/doc/man/nvme_get_log_telemetry_ctrl.2
+++ b/doc/man/nvme_get_log_telemetry_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_telemetry_ctrl" 9 "nvme_get_log_telemetry_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_telemetry_ctrl" 9 "nvme_get_log_telemetry_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_telemetry_ctrl \- Get Telemetry Controller-Initiated log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_telemetry_host.2 b/doc/man/nvme_get_log_telemetry_host.2
index 8b49a17..6b95b6c 100644
--- a/doc/man/nvme_get_log_telemetry_host.2
+++ b/doc/man/nvme_get_log_telemetry_host.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_telemetry_host" 9 "nvme_get_log_telemetry_host" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_telemetry_host" 9 "nvme_get_log_telemetry_host" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_telemetry_host \- Get Telemetry Host-Initiated log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_log_zns_changed_zones.2 b/doc/man/nvme_get_log_zns_changed_zones.2
index f98b6a4..95118d9 100644
--- a/doc/man/nvme_get_log_zns_changed_zones.2
+++ b/doc/man/nvme_get_log_zns_changed_zones.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_log_zns_changed_zones" 9 "nvme_get_log_zns_changed_zones" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_log_zns_changed_zones" 9 "nvme_get_log_zns_changed_zones" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_log_zns_changed_zones \- Retrieve list of zones that have changed
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_logging_level.2 b/doc/man/nvme_get_logging_level.2
new file mode 100644
index 0000000..b2866af
--- /dev/null
+++ b/doc/man/nvme_get_logging_level.2
@@ -0,0 +1,21 @@
+.TH "nvme_get_logging_level" 9 "nvme_get_logging_level" "May 2024" "libnvme API manual" LINUX
+.SH NAME
+nvme_get_logging_level \- Get current logging level
+.SH SYNOPSIS
+.B "int" nvme_get_logging_level
+.BI "(nvme_root_t r " ","
+.BI "bool *log_pid " ","
+.BI "bool *log_tstamp " ");"
+.SH ARGUMENTS
+.IP "r" 12
+nvme_root_t context
+.IP "log_pid" 12
+Pointer to store a current value of logging of
+the PID flag at (optional).
+.IP "log_tstamp" 12
+Pointer to store a current value of logging of
+the timestamp flag at (optional).
+.SH "DESCRIPTION"
+Retrieves current values of logging variables.
+.SH "RETURN"
+current log level value or DEFAULT_LOGLEVEL if not initialized.
diff --git a/doc/man/nvme_get_logical_block_size.2 b/doc/man/nvme_get_logical_block_size.2
index 05992a5..9738aed 100644
--- a/doc/man/nvme_get_logical_block_size.2
+++ b/doc/man/nvme_get_logical_block_size.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_logical_block_size" 9 "nvme_get_logical_block_size" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_logical_block_size" 9 "nvme_get_logical_block_size" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_logical_block_size \- Retrieve block size
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_new_host_telemetry.2 b/doc/man/nvme_get_new_host_telemetry.2
index e608b58..d7f6c74 100644
--- a/doc/man/nvme_get_new_host_telemetry.2
+++ b/doc/man/nvme_get_new_host_telemetry.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_new_host_telemetry" 9 "nvme_get_new_host_telemetry" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_new_host_telemetry" 9 "nvme_get_new_host_telemetry" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_new_host_telemetry \- Get new host telemetry log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_ns_attr.2 b/doc/man/nvme_get_ns_attr.2
index 64a55ea..ebea7d6 100644
--- a/doc/man/nvme_get_ns_attr.2
+++ b/doc/man/nvme_get_ns_attr.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_ns_attr" 9 "nvme_get_ns_attr" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_ns_attr" 9 "nvme_get_ns_attr" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_ns_attr \- Read namespace sysfs attribute
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_nsid.2 b/doc/man/nvme_get_nsid.2
index 8b74dfe..4e1922b 100644
--- a/doc/man/nvme_get_nsid.2
+++ b/doc/man/nvme_get_nsid.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_nsid" 9 "nvme_get_nsid" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_nsid" 9 "nvme_get_nsid" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_nsid \- Retrieve the NSID from a namespace file descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_path_attr.2 b/doc/man/nvme_get_path_attr.2
index 0ca6ba9..f5bdb3d 100644
--- a/doc/man/nvme_get_path_attr.2
+++ b/doc/man/nvme_get_path_attr.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_path_attr" 9 "nvme_get_path_attr" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_path_attr" 9 "nvme_get_path_attr" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_path_attr \- Read path sysfs attribute
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_property.2 b/doc/man/nvme_get_property.2
index 9683673..49bdf63 100644
--- a/doc/man/nvme_get_property.2
+++ b/doc/man/nvme_get_property.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_property" 9 "nvme_get_property" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_property" 9 "nvme_get_property" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_property \- Get a controller property
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_subsys_attr.2 b/doc/man/nvme_get_subsys_attr.2
index 592eb93..b9b2031 100644
--- a/doc/man/nvme_get_subsys_attr.2
+++ b/doc/man/nvme_get_subsys_attr.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_subsys_attr" 9 "nvme_get_subsys_attr" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_subsys_attr" 9 "nvme_get_subsys_attr" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_subsys_attr \- Read subsystem sysfs attribute
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_telemetry_log.2 b/doc/man/nvme_get_telemetry_log.2
index 4351c55..1ecf5e3 100644
--- a/doc/man/nvme_get_telemetry_log.2
+++ b/doc/man/nvme_get_telemetry_log.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_telemetry_log" 9 "nvme_get_telemetry_log" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_telemetry_log" 9 "nvme_get_telemetry_log" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_telemetry_log \- Get specified telemetry log
.SH SYNOPSIS
diff --git a/doc/man/nvme_get_telemetry_max.2 b/doc/man/nvme_get_telemetry_max.2
index d2b61cf..c742cf3 100644
--- a/doc/man/nvme_get_telemetry_max.2
+++ b/doc/man/nvme_get_telemetry_max.2
@@ -1,4 +1,4 @@
-.TH "nvme_get_telemetry_max" 9 "nvme_get_telemetry_max" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_get_telemetry_max" 9 "nvme_get_telemetry_max" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_get_telemetry_max \- Get telemetry limits
.SH SYNOPSIS
diff --git a/doc/man/nvme_hmac_alg.2 b/doc/man/nvme_hmac_alg.2
index af8f783..57a4fe9 100644
--- a/doc/man/nvme_hmac_alg.2
+++ b/doc/man/nvme_hmac_alg.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_hmac_alg" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_hmac_alg" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_hmac_alg \- HMAC algorithm
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_behavior_support.2 b/doc/man/nvme_host_behavior_support.2
index f13a90c..4b3aad8 100644
--- a/doc/man/nvme_host_behavior_support.2
+++ b/doc/man/nvme_host_behavior_support.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_host_behavior_support" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_host_behavior_support" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_host_behavior_support \- Enable Advanced Command
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_get_dhchap_key.2 b/doc/man/nvme_host_get_dhchap_key.2
index 59ec840..804c747 100644
--- a/doc/man/nvme_host_get_dhchap_key.2
+++ b/doc/man/nvme_host_get_dhchap_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_host_get_dhchap_key" 9 "nvme_host_get_dhchap_key" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_host_get_dhchap_key" 9 "nvme_host_get_dhchap_key" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_host_get_dhchap_key \- Return host key
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_get_hostid.2 b/doc/man/nvme_host_get_hostid.2
index 94d3e72..39123e7 100644
--- a/doc/man/nvme_host_get_hostid.2
+++ b/doc/man/nvme_host_get_hostid.2
@@ -1,4 +1,4 @@
-.TH "nvme_host_get_hostid" 9 "nvme_host_get_hostid" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_host_get_hostid" 9 "nvme_host_get_hostid" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_host_get_hostid \- Host ID of an nvme_host_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_get_hostnqn.2 b/doc/man/nvme_host_get_hostnqn.2
index 5b51b79..93dfabb 100644
--- a/doc/man/nvme_host_get_hostnqn.2
+++ b/doc/man/nvme_host_get_hostnqn.2
@@ -1,4 +1,4 @@
-.TH "nvme_host_get_hostnqn" 9 "nvme_host_get_hostnqn" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_host_get_hostnqn" 9 "nvme_host_get_hostnqn" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_host_get_hostnqn \- Host NQN of an nvme_host_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_get_hostsymname.2 b/doc/man/nvme_host_get_hostsymname.2
index 39c8d3d..5bbe258 100644
--- a/doc/man/nvme_host_get_hostsymname.2
+++ b/doc/man/nvme_host_get_hostsymname.2
@@ -1,4 +1,4 @@
-.TH "nvme_host_get_hostsymname" 9 "nvme_host_get_hostsymname" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_host_get_hostsymname" 9 "nvme_host_get_hostsymname" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_host_get_hostsymname \- Get the host's symbolic name
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_get_root.2 b/doc/man/nvme_host_get_root.2
index fb929d6..6b8b453 100644
--- a/doc/man/nvme_host_get_root.2
+++ b/doc/man/nvme_host_get_root.2
@@ -1,4 +1,4 @@
-.TH "nvme_host_get_root" 9 "nvme_host_get_root" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_host_get_root" 9 "nvme_host_get_root" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_host_get_root \- Returns nvme_root_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_is_pdc_enabled.2 b/doc/man/nvme_host_is_pdc_enabled.2
index 406dca4..795710b 100644
--- a/doc/man/nvme_host_is_pdc_enabled.2
+++ b/doc/man/nvme_host_is_pdc_enabled.2
@@ -1,4 +1,4 @@
-.TH "nvme_host_is_pdc_enabled" 9 "nvme_host_is_pdc_enabled" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_host_is_pdc_enabled" 9 "nvme_host_is_pdc_enabled" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_host_is_pdc_enabled \- Is Persistenct Discovery Controller enabled
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_mem_buf_attrs.2 b/doc/man/nvme_host_mem_buf_attrs.2
index b4a99f4..580ec67 100644
--- a/doc/man/nvme_host_mem_buf_attrs.2
+++ b/doc/man/nvme_host_mem_buf_attrs.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_host_mem_buf_attrs" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_host_mem_buf_attrs" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_host_mem_buf_attrs \- Host Memory Buffer - Attributes Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_metadata.2 b/doc/man/nvme_host_metadata.2
index 662811a..75725a2 100644
--- a/doc/man/nvme_host_metadata.2
+++ b/doc/man/nvme_host_metadata.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_host_metadata" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_host_metadata" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_host_metadata \- Host Metadata Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_release_fds.2 b/doc/man/nvme_host_release_fds.2
index 02772a9..b32acf7 100644
--- a/doc/man/nvme_host_release_fds.2
+++ b/doc/man/nvme_host_release_fds.2
@@ -1,4 +1,4 @@
-.TH "nvme_host_release_fds" 9 "nvme_host_release_fds" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_host_release_fds" 9 "nvme_host_release_fds" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_host_release_fds \- Close all opened file descriptors under host
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_set_dhchap_key.2 b/doc/man/nvme_host_set_dhchap_key.2
index f6e3018..ea8d129 100644
--- a/doc/man/nvme_host_set_dhchap_key.2
+++ b/doc/man/nvme_host_set_dhchap_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_host_set_dhchap_key" 9 "nvme_host_set_dhchap_key" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_host_set_dhchap_key" 9 "nvme_host_set_dhchap_key" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_host_set_dhchap_key \- set host key
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_set_hostsymname.2 b/doc/man/nvme_host_set_hostsymname.2
index 4fb979e..a58fd13 100644
--- a/doc/man/nvme_host_set_hostsymname.2
+++ b/doc/man/nvme_host_set_hostsymname.2
@@ -1,4 +1,4 @@
-.TH "nvme_host_set_hostsymname" 9 "nvme_host_set_hostsymname" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_host_set_hostsymname" 9 "nvme_host_set_hostsymname" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_host_set_hostsymname \- Set the host's symbolic name
.SH SYNOPSIS
diff --git a/doc/man/nvme_host_set_pdc_enabled.2 b/doc/man/nvme_host_set_pdc_enabled.2
index 43fce53..b431ebc 100644
--- a/doc/man/nvme_host_set_pdc_enabled.2
+++ b/doc/man/nvme_host_set_pdc_enabled.2
@@ -1,4 +1,4 @@
-.TH "nvme_host_set_pdc_enabled" 9 "nvme_host_set_pdc_enabled" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_host_set_pdc_enabled" 9 "nvme_host_set_pdc_enabled" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_host_set_pdc_enabled \- Set Persistent Discovery Controller flag
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl.2 b/doc/man/nvme_id_ctrl.2
index c627f87..84c714f 100644
--- a/doc/man/nvme_id_ctrl.2
+++ b/doc/man/nvme_id_ctrl.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_ctrl" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_ctrl" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_ctrl \- Identify Controller data structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_anacap.2 b/doc/man/nvme_id_ctrl_anacap.2
index df17a10..b57f472 100644
--- a/doc/man/nvme_id_ctrl_anacap.2
+++ b/doc/man/nvme_id_ctrl_anacap.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_anacap" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_anacap" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_anacap \- This field indicates the capabilities associated with Asymmetric Namespace Access Reporting.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_apsta.2 b/doc/man/nvme_id_ctrl_apsta.2
index e322d97..2f740ac 100644
--- a/doc/man/nvme_id_ctrl_apsta.2
+++ b/doc/man/nvme_id_ctrl_apsta.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_apsta" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_apsta" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_apsta \- Flags indicating the attributes of the autonomous power state transition feature.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_avscc.2 b/doc/man/nvme_id_ctrl_avscc.2
index a7a1e34..1135345 100644
--- a/doc/man/nvme_id_ctrl_avscc.2
+++ b/doc/man/nvme_id_ctrl_avscc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_avscc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_avscc" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_avscc \- Flags indicating the configuration settings for Admin Vendor Specific command handling.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_cmic.2 b/doc/man/nvme_id_ctrl_cmic.2
index 2c5e43d..67aef3f 100644
--- a/doc/man/nvme_id_ctrl_cmic.2
+++ b/doc/man/nvme_id_ctrl_cmic.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_cmic" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_cmic" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_cmic \- Controller Multipath IO and Namespace Sharing Capabilities of the controller and NVM subsystem.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_cntrltype.2 b/doc/man/nvme_id_ctrl_cntrltype.2
index 5d21b8d..496d43c 100644
--- a/doc/man/nvme_id_ctrl_cntrltype.2
+++ b/doc/man/nvme_id_ctrl_cntrltype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_cntrltype" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_cntrltype" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_cntrltype \- Controller types
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_cqes.2 b/doc/man/nvme_id_ctrl_cqes.2
index 5d7faaf..f8a8696 100644
--- a/doc/man/nvme_id_ctrl_cqes.2
+++ b/doc/man/nvme_id_ctrl_cqes.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_cqes" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_cqes" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_cqes \- Defines the required and maximum Completion Queue entry size when using the NVM Command Set.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_ctratt.2 b/doc/man/nvme_id_ctrl_ctratt.2
index c03bba6..7426858 100644
--- a/doc/man/nvme_id_ctrl_ctratt.2
+++ b/doc/man/nvme_id_ctrl_ctratt.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_ctratt" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_ctratt" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_ctratt \- Controller attributes
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_dctype.2 b/doc/man/nvme_id_ctrl_dctype.2
index 747aee1..889699e 100644
--- a/doc/man/nvme_id_ctrl_dctype.2
+++ b/doc/man/nvme_id_ctrl_dctype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_dctype" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_dctype" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_dctype \- Discovery Controller types
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_dsto.2 b/doc/man/nvme_id_ctrl_dsto.2
index 4c759a1..167807e 100644
--- a/doc/man/nvme_id_ctrl_dsto.2
+++ b/doc/man/nvme_id_ctrl_dsto.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_dsto" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_dsto" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_dsto \- Flags indicating the optional Device Self-test command or operation behaviors supported by the controller or NVM subsystem.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_fcatt.2 b/doc/man/nvme_id_ctrl_fcatt.2
index 3fa95da..1c21556 100644
--- a/doc/man/nvme_id_ctrl_fcatt.2
+++ b/doc/man/nvme_id_ctrl_fcatt.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_fcatt" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_fcatt" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_fcatt \- This field indicates attributes of the controller that are specific to NVMe over Fabrics.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_fna.2 b/doc/man/nvme_id_ctrl_fna.2
index 1220a11..ab34884 100644
--- a/doc/man/nvme_id_ctrl_fna.2
+++ b/doc/man/nvme_id_ctrl_fna.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_fna" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_fna" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_fna \- This field indicates attributes for the Format NVM command.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_frmw.2 b/doc/man/nvme_id_ctrl_frmw.2
index 4f9029c..ebd1e5f 100644
--- a/doc/man/nvme_id_ctrl_frmw.2
+++ b/doc/man/nvme_id_ctrl_frmw.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_frmw" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_frmw" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_frmw \- Flags and values indicates capabilities regarding firmware updates from &struct nvme_id_ctrl.frmw.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_fuses.2 b/doc/man/nvme_id_ctrl_fuses.2
index c32976d..426124a 100644
--- a/doc/man/nvme_id_ctrl_fuses.2
+++ b/doc/man/nvme_id_ctrl_fuses.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_fuses" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_fuses" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_fuses \- This field indicates the fused operations that the controller supports.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_hctm.2 b/doc/man/nvme_id_ctrl_hctm.2
index 5d05ed3..52aa23d 100644
--- a/doc/man/nvme_id_ctrl_hctm.2
+++ b/doc/man/nvme_id_ctrl_hctm.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_hctm" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_hctm" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_hctm \- Flags indicate the attributes of the host controlled thermal management feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_lpa.2 b/doc/man/nvme_id_ctrl_lpa.2
index f32680d..95007e7 100644
--- a/doc/man/nvme_id_ctrl_lpa.2
+++ b/doc/man/nvme_id_ctrl_lpa.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_lpa" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_lpa" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_lpa \- Flags indicating optional attributes for log pages that are accessed via the Get Log Page command.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_mec.2 b/doc/man/nvme_id_ctrl_mec.2
index 9fa960c..fda83ac 100644
--- a/doc/man/nvme_id_ctrl_mec.2
+++ b/doc/man/nvme_id_ctrl_mec.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_mec" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_mec" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_mec \- Flags indicating the capabilities of the Management Endpoint in the Controller, &struct nvme_id_ctrl.mec.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_nvm.2 b/doc/man/nvme_id_ctrl_nvm.2
index c4ebbf4..d93e2b5 100644
--- a/doc/man/nvme_id_ctrl_nvm.2
+++ b/doc/man/nvme_id_ctrl_nvm.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_ctrl_nvm" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_ctrl_nvm" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_ctrl_nvm \- I/O Command Set Specific Identify Controller data structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_nvmsr.2 b/doc/man/nvme_id_ctrl_nvmsr.2
index 64e6f3e..091c298 100644
--- a/doc/man/nvme_id_ctrl_nvmsr.2
+++ b/doc/man/nvme_id_ctrl_nvmsr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_nvmsr" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_nvmsr" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_nvmsr \- This field reports information associated with the NVM Subsystem, see &struct nvme_id_ctrl.nvmsr.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_nvscc.2 b/doc/man/nvme_id_ctrl_nvscc.2
index 975554f..b013705 100644
--- a/doc/man/nvme_id_ctrl_nvscc.2
+++ b/doc/man/nvme_id_ctrl_nvscc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_nvscc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_nvscc" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_nvscc \- This field indicates the configuration settings for NVM Vendor Specific command handling.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_nwpc.2 b/doc/man/nvme_id_ctrl_nwpc.2
index 0479ea4..aed654f 100644
--- a/doc/man/nvme_id_ctrl_nwpc.2
+++ b/doc/man/nvme_id_ctrl_nwpc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_nwpc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_nwpc" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_nwpc \- This field indicates the optional namespace write protection capabilities supported by the controller.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_oacs.2 b/doc/man/nvme_id_ctrl_oacs.2
index 762f93a..37b5faa 100644
--- a/doc/man/nvme_id_ctrl_oacs.2
+++ b/doc/man/nvme_id_ctrl_oacs.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_oacs" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_oacs" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_oacs \- Flags indicating the optional Admin commands and features supported by the controller, see &struct nvme_id_ctrl.oacs.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_oaes.2 b/doc/man/nvme_id_ctrl_oaes.2
index 6395687..59708e1 100644
--- a/doc/man/nvme_id_ctrl_oaes.2
+++ b/doc/man/nvme_id_ctrl_oaes.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_oaes" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_oaes" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_oaes \- Optional Asynchronous Events Supported
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_ofcs.2 b/doc/man/nvme_id_ctrl_ofcs.2
index 2e5a52c..8f6e96f 100644
--- a/doc/man/nvme_id_ctrl_ofcs.2
+++ b/doc/man/nvme_id_ctrl_ofcs.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_ofcs" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_ofcs" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_ofcs \- Indicate whether the controller supports optional fabric commands.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_oncs.2 b/doc/man/nvme_id_ctrl_oncs.2
index 0045929..6e4f6e9 100644
--- a/doc/man/nvme_id_ctrl_oncs.2
+++ b/doc/man/nvme_id_ctrl_oncs.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_oncs" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_oncs" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_oncs \- This field indicates the optional NVM commands and features supported by the controller.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_rpmbs.2 b/doc/man/nvme_id_ctrl_rpmbs.2
index bd11228..260fb5f 100644
--- a/doc/man/nvme_id_ctrl_rpmbs.2
+++ b/doc/man/nvme_id_ctrl_rpmbs.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_rpmbs" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_rpmbs" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_rpmbs \- This field indicates if the controller supports one or more Replay Protected Memory Blocks, from &struct nvme_id_ctrl.rpmbs.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_sanicap.2 b/doc/man/nvme_id_ctrl_sanicap.2
index a6af345..3afb3e7 100644
--- a/doc/man/nvme_id_ctrl_sanicap.2
+++ b/doc/man/nvme_id_ctrl_sanicap.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_sanicap" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_sanicap" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_sanicap \- Indicates attributes for sanitize operations.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_sgls.2 b/doc/man/nvme_id_ctrl_sgls.2
index 92b074d..0dbab7e 100644
--- a/doc/man/nvme_id_ctrl_sgls.2
+++ b/doc/man/nvme_id_ctrl_sgls.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_sgls" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_sgls" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_sgls \- This field indicates if SGLs are supported for the NVM Command Set and the particular SGL types supported.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_sqes.2 b/doc/man/nvme_id_ctrl_sqes.2
index bd48447..d9aaaf9 100644
--- a/doc/man/nvme_id_ctrl_sqes.2
+++ b/doc/man/nvme_id_ctrl_sqes.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_sqes" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_sqes" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_sqes \- Defines the required and maximum Submission Queue entry size when using the NVM Command Set.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_vwc.2 b/doc/man/nvme_id_ctrl_vwc.2
index 89fd427..5b9dd83 100644
--- a/doc/man/nvme_id_ctrl_vwc.2
+++ b/doc/man/nvme_id_ctrl_vwc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_vwc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_vwc" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_vwc \- Volatile write cache
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ctrl_vwci.2 b/doc/man/nvme_id_ctrl_vwci.2
index db81959..a05f8f1 100644
--- a/doc/man/nvme_id_ctrl_vwci.2
+++ b/doc/man/nvme_id_ctrl_vwci.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ctrl_vwci" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ctrl_vwci" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ctrl_vwci \- This field indicates information about remaining number of times that VPD contents are able to be updated using the VPD Write command, see &struct nvme_id_ctrl.vwci.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_directives.2 b/doc/man/nvme_id_directives.2
index 9350a49..bf0b4b1 100644
--- a/doc/man/nvme_id_directives.2
+++ b/doc/man/nvme_id_directives.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_directives" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_directives" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_directives \- Identify Directive - Return Parameters Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_domain_attr.2 b/doc/man/nvme_id_domain_attr.2
index 76f56fe..c9811fb 100644
--- a/doc/man/nvme_id_domain_attr.2
+++ b/doc/man/nvme_id_domain_attr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_domain_attr" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_domain_attr" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_domain_attr \- Domain Attributes Entry
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_domain_list.2 b/doc/man/nvme_id_domain_list.2
index 1bf634e..cdfd345 100644
--- a/doc/man/nvme_id_domain_list.2
+++ b/doc/man/nvme_id_domain_list.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_domain_list" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_domain_list" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_domain_list \- Domain List
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_endurance_group_list.2 b/doc/man/nvme_id_endurance_group_list.2
index 0d63953..4b24e4c 100644
--- a/doc/man/nvme_id_endurance_group_list.2
+++ b/doc/man/nvme_id_endurance_group_list.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_endurance_group_list" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_endurance_group_list" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_endurance_group_list \- Endurance Group List
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_independent_id_ns.2 b/doc/man/nvme_id_independent_id_ns.2
index d5995f9..d7f5e1b 100644
--- a/doc/man/nvme_id_independent_id_ns.2
+++ b/doc/man/nvme_id_independent_id_ns.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_independent_id_ns" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_independent_id_ns" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_independent_id_ns \- Identify - I/O Command Set Independent Identify Namespace Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_iocs.2 b/doc/man/nvme_id_iocs.2
index a9a91aa..b0a9982 100644
--- a/doc/man/nvme_id_iocs.2
+++ b/doc/man/nvme_id_iocs.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_iocs" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_iocs" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_iocs \- NVMe Identify IO Command Set data structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ns.2 b/doc/man/nvme_id_ns.2
index 689f722..20dab14 100644
--- a/doc/man/nvme_id_ns.2
+++ b/doc/man/nvme_id_ns.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_ns" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_ns" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_ns \- Identify Namespace data structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ns_attr.2 b/doc/man/nvme_id_ns_attr.2
index 15bd317..5aa916a 100644
--- a/doc/man/nvme_id_ns_attr.2
+++ b/doc/man/nvme_id_ns_attr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ns_attr" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ns_attr" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ns_attr \- Specifies attributes of the namespace.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ns_dlfeat.2 b/doc/man/nvme_id_ns_dlfeat.2
index 248c7ac..dde5d8e 100644
--- a/doc/man/nvme_id_ns_dlfeat.2
+++ b/doc/man/nvme_id_ns_dlfeat.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ns_dlfeat" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ns_dlfeat" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ns_dlfeat \- This field indicates information about features that affect deallocating logical blocks for this namespace.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ns_dpc.2 b/doc/man/nvme_id_ns_dpc.2
index 6186d66..160dcdb 100644
--- a/doc/man/nvme_id_ns_dpc.2
+++ b/doc/man/nvme_id_ns_dpc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ns_dpc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ns_dpc" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ns_dpc \- This field indicates the capabilities for the end-to-end data protection feature.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ns_dps.2 b/doc/man/nvme_id_ns_dps.2
index 1f61b8e..1bd1de3 100644
--- a/doc/man/nvme_id_ns_dps.2
+++ b/doc/man/nvme_id_ns_dps.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ns_dps" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ns_dps" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ns_dps \- This field indicates the Type settings for the end-to-end data protection feature.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ns_flbas.2 b/doc/man/nvme_id_ns_flbas.2
index 68be9cf..95acfe4 100644
--- a/doc/man/nvme_id_ns_flbas.2
+++ b/doc/man/nvme_id_ns_flbas.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ns_flbas" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ns_flbas" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ns_flbas \- This field indicates the LBA data size & metadata size combination that the namespace has been formatted with
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ns_granularity_desc.2 b/doc/man/nvme_id_ns_granularity_desc.2
index 669d26c..66bd48a 100644
--- a/doc/man/nvme_id_ns_granularity_desc.2
+++ b/doc/man/nvme_id_ns_granularity_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_ns_granularity_desc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_ns_granularity_desc" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_ns_granularity_desc \- Namespace Granularity Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ns_granularity_list.2 b/doc/man/nvme_id_ns_granularity_list.2
index d501d56..9e568e8 100644
--- a/doc/man/nvme_id_ns_granularity_list.2
+++ b/doc/man/nvme_id_ns_granularity_list.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_ns_granularity_list" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_ns_granularity_list" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_ns_granularity_list \- Namespace Granularity List
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ns_mc.2 b/doc/man/nvme_id_ns_mc.2
index c7ccb04..e5d7598 100644
--- a/doc/man/nvme_id_ns_mc.2
+++ b/doc/man/nvme_id_ns_mc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ns_mc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ns_mc" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ns_mc \- This field indicates the capabilities for metadata.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ns_nmic.2 b/doc/man/nvme_id_ns_nmic.2
index faee303..70edb95 100644
--- a/doc/man/nvme_id_ns_nmic.2
+++ b/doc/man/nvme_id_ns_nmic.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ns_nmic" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ns_nmic" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ns_nmic \- This field specifies multi-path I/O and namespace sharing capabilities of the namespace.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_ns_rescap.2 b/doc/man/nvme_id_ns_rescap.2
index 301882f..9114253 100644
--- a/doc/man/nvme_id_ns_rescap.2
+++ b/doc/man/nvme_id_ns_rescap.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_ns_rescap" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_ns_rescap" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_ns_rescap \- This field indicates the reservation capabilities of the namespace.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_nsfeat.2 b/doc/man/nvme_id_nsfeat.2
index fb78c04..670bbe2 100644
--- a/doc/man/nvme_id_nsfeat.2
+++ b/doc/man/nvme_id_nsfeat.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_nsfeat" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_nsfeat" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_nsfeat \- This field defines features of the namespace.
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_nvmset_list.2 b/doc/man/nvme_id_nvmset_list.2
index 6b53ed5..a046227 100644
--- a/doc/man/nvme_id_nvmset_list.2
+++ b/doc/man/nvme_id_nvmset_list.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_nvmset_list" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_nvmset_list" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_nvmset_list \- NVM set list
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_psd.2 b/doc/man/nvme_id_psd.2
index 2a377ff..4579a3e 100644
--- a/doc/man/nvme_id_psd.2
+++ b/doc/man/nvme_id_psd.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_psd" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_psd" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_psd \- Power Management data structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_uuid.2 b/doc/man/nvme_id_uuid.2
index 2be553d..348d0d2 100644
--- a/doc/man/nvme_id_uuid.2
+++ b/doc/man/nvme_id_uuid.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_id_uuid" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_id_uuid" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_id_uuid \- Identifier Association
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_uuid_list.2 b/doc/man/nvme_id_uuid_list.2
index f3630f4..b56e152 100644
--- a/doc/man/nvme_id_uuid_list.2
+++ b/doc/man/nvme_id_uuid_list.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_uuid_list" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_uuid_list" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_uuid_list \- UUID list
.SH SYNOPSIS
diff --git a/doc/man/nvme_id_uuid_list_entry.2 b/doc/man/nvme_id_uuid_list_entry.2
index db887c4..dae5dc3 100644
--- a/doc/man/nvme_id_uuid_list_entry.2
+++ b/doc/man/nvme_id_uuid_list_entry.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_id_uuid_list_entry" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_id_uuid_list_entry" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_id_uuid_list_entry \- UUID List Entry
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify.2 b/doc/man/nvme_identify.2
index 332826a..406b13f 100644
--- a/doc/man/nvme_identify.2
+++ b/doc/man/nvme_identify.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify" 9 "nvme_identify" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify" 9 "nvme_identify" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify \- Send the NVMe Identify command
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_active_ns_list.2 b/doc/man/nvme_identify_active_ns_list.2
index a47d827..8a1a022 100644
--- a/doc/man/nvme_identify_active_ns_list.2
+++ b/doc/man/nvme_identify_active_ns_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_active_ns_list" 9 "nvme_identify_active_ns_list" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_active_ns_list" 9 "nvme_identify_active_ns_list" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_active_ns_list \- Retrieves active namespaces id list
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_active_ns_list_csi.2 b/doc/man/nvme_identify_active_ns_list_csi.2
index 1330390..b9a1cb2 100644
--- a/doc/man/nvme_identify_active_ns_list_csi.2
+++ b/doc/man/nvme_identify_active_ns_list_csi.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_active_ns_list_csi" 9 "nvme_identify_active_ns_list_csi" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_active_ns_list_csi" 9 "nvme_identify_active_ns_list_csi" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_active_ns_list_csi \- Active namespace ID list associated with a specified I/O command set
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_allocated_ns.2 b/doc/man/nvme_identify_allocated_ns.2
index 6b3e2b2..7a2d485 100644
--- a/doc/man/nvme_identify_allocated_ns.2
+++ b/doc/man/nvme_identify_allocated_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_allocated_ns" 9 "nvme_identify_allocated_ns" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_allocated_ns" 9 "nvme_identify_allocated_ns" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_allocated_ns \- Same as nvme_identify_ns, but only for allocated namespaces
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_allocated_ns_list.2 b/doc/man/nvme_identify_allocated_ns_list.2
index eb295cb..9b40f7c 100644
--- a/doc/man/nvme_identify_allocated_ns_list.2
+++ b/doc/man/nvme_identify_allocated_ns_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_allocated_ns_list" 9 "nvme_identify_allocated_ns_list" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_allocated_ns_list" 9 "nvme_identify_allocated_ns_list" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_allocated_ns_list \- Retrieves allocated namespace id list
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_allocated_ns_list_csi.2 b/doc/man/nvme_identify_allocated_ns_list_csi.2
index 07f9820..7443ee9 100644
--- a/doc/man/nvme_identify_allocated_ns_list_csi.2
+++ b/doc/man/nvme_identify_allocated_ns_list_csi.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_allocated_ns_list_csi" 9 "nvme_identify_allocated_ns_list_csi" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_allocated_ns_list_csi" 9 "nvme_identify_allocated_ns_list_csi" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_allocated_ns_list_csi \- Allocated namespace ID list associated with a specified I/O command set
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_cns.2 b/doc/man/nvme_identify_cns.2
index 7fc4dab..126e63e 100644
--- a/doc/man/nvme_identify_cns.2
+++ b/doc/man/nvme_identify_cns.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_identify_cns" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_identify_cns" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_identify_cns \- Identify - CNS Values
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_ctrl.2 b/doc/man/nvme_identify_ctrl.2
index a935da9..f19e023 100644
--- a/doc/man/nvme_identify_ctrl.2
+++ b/doc/man/nvme_identify_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_ctrl" 9 "nvme_identify_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_ctrl" 9 "nvme_identify_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_ctrl \- Retrieves nvme identify controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_ctrl_csi.2 b/doc/man/nvme_identify_ctrl_csi.2
index f0e8bd4..30c866e 100644
--- a/doc/man/nvme_identify_ctrl_csi.2
+++ b/doc/man/nvme_identify_ctrl_csi.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_ctrl_csi" 9 "nvme_identify_ctrl_csi" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_ctrl_csi" 9 "nvme_identify_ctrl_csi" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_ctrl_csi \- I/O command set specific Identify Controller data
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_ctrl_list.2 b/doc/man/nvme_identify_ctrl_list.2
index 60cf67d..346be0c 100644
--- a/doc/man/nvme_identify_ctrl_list.2
+++ b/doc/man/nvme_identify_ctrl_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_ctrl_list" 9 "nvme_identify_ctrl_list" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_ctrl_list" 9 "nvme_identify_ctrl_list" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_ctrl_list \- Retrieves identify controller list
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_domain_list.2 b/doc/man/nvme_identify_domain_list.2
index c5e729b..705b152 100644
--- a/doc/man/nvme_identify_domain_list.2
+++ b/doc/man/nvme_identify_domain_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_domain_list" 9 "nvme_identify_domain_list" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_domain_list" 9 "nvme_identify_domain_list" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_domain_list \- Domain list data
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_endurance_group_list.2 b/doc/man/nvme_identify_endurance_group_list.2
index 7e0f9b2..c0a36a4 100644
--- a/doc/man/nvme_identify_endurance_group_list.2
+++ b/doc/man/nvme_identify_endurance_group_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_endurance_group_list" 9 "nvme_identify_endurance_group_list" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_endurance_group_list" 9 "nvme_identify_endurance_group_list" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_endurance_group_list \- Endurance group list data
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_independent_identify_ns.2 b/doc/man/nvme_identify_independent_identify_ns.2
index 53269f3..7b20b46 100644
--- a/doc/man/nvme_identify_independent_identify_ns.2
+++ b/doc/man/nvme_identify_independent_identify_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_independent_identify_ns" 9 "nvme_identify_independent_identify_ns" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_independent_identify_ns" 9 "nvme_identify_independent_identify_ns" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_independent_identify_ns \- I/O command set independent Identify namespace data
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_iocs.2 b/doc/man/nvme_identify_iocs.2
index ac4c8a6..ac469d5 100644
--- a/doc/man/nvme_identify_iocs.2
+++ b/doc/man/nvme_identify_iocs.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_iocs" 9 "nvme_identify_iocs" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_iocs" 9 "nvme_identify_iocs" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_iocs \- I/O command set data structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_iocs_ns_csi_user_data_format.2 b/doc/man/nvme_identify_iocs_ns_csi_user_data_format.2
index c1fe93c..8808429 100644
--- a/doc/man/nvme_identify_iocs_ns_csi_user_data_format.2
+++ b/doc/man/nvme_identify_iocs_ns_csi_user_data_format.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_iocs_ns_csi_user_data_format" 9 "nvme_identify_iocs_ns_csi_user_data_format" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_iocs_ns_csi_user_data_format" 9 "nvme_identify_iocs_ns_csi_user_data_format" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_iocs_ns_csi_user_data_format \- Identify I/O command set namespace data structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_ns.2 b/doc/man/nvme_identify_ns.2
index 7f49f72..8877a09 100644
--- a/doc/man/nvme_identify_ns.2
+++ b/doc/man/nvme_identify_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_ns" 9 "nvme_identify_ns" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_ns" 9 "nvme_identify_ns" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_ns \- Retrieves nvme identify namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_ns_csi.2 b/doc/man/nvme_identify_ns_csi.2
index 572cab3..54d7d39 100644
--- a/doc/man/nvme_identify_ns_csi.2
+++ b/doc/man/nvme_identify_ns_csi.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_ns_csi" 9 "nvme_identify_ns_csi" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_ns_csi" 9 "nvme_identify_ns_csi" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_ns_csi \- I/O command set specific identify namespace data
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_ns_csi_user_data_format.2 b/doc/man/nvme_identify_ns_csi_user_data_format.2
index 3adaebb..4a4f636 100644
--- a/doc/man/nvme_identify_ns_csi_user_data_format.2
+++ b/doc/man/nvme_identify_ns_csi_user_data_format.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_ns_csi_user_data_format" 9 "nvme_identify_ns_csi_user_data_format" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_ns_csi_user_data_format" 9 "nvme_identify_ns_csi_user_data_format" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_ns_csi_user_data_format \- Identify namespace user data format
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_ns_descs.2 b/doc/man/nvme_identify_ns_descs.2
index ff8ea83..b0722af 100644
--- a/doc/man/nvme_identify_ns_descs.2
+++ b/doc/man/nvme_identify_ns_descs.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_ns_descs" 9 "nvme_identify_ns_descs" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_ns_descs" 9 "nvme_identify_ns_descs" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_ns_descs \- Retrieves namespace descriptor list
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_ns_granularity.2 b/doc/man/nvme_identify_ns_granularity.2
index ad351b0..10389bc 100644
--- a/doc/man/nvme_identify_ns_granularity.2
+++ b/doc/man/nvme_identify_ns_granularity.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_ns_granularity" 9 "nvme_identify_ns_granularity" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_ns_granularity" 9 "nvme_identify_ns_granularity" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_ns_granularity \- Retrieves namespace granularity identification
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_nsid_ctrl_list.2 b/doc/man/nvme_identify_nsid_ctrl_list.2
index 9667f9c..4075a8d 100644
--- a/doc/man/nvme_identify_nsid_ctrl_list.2
+++ b/doc/man/nvme_identify_nsid_ctrl_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_nsid_ctrl_list" 9 "nvme_identify_nsid_ctrl_list" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_nsid_ctrl_list" 9 "nvme_identify_nsid_ctrl_list" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_nsid_ctrl_list \- Retrieves controller list attached to an nsid
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_nvmset_list.2 b/doc/man/nvme_identify_nvmset_list.2
index 7ae5f3c..958bfe9 100644
--- a/doc/man/nvme_identify_nvmset_list.2
+++ b/doc/man/nvme_identify_nvmset_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_nvmset_list" 9 "nvme_identify_nvmset_list" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_nvmset_list" 9 "nvme_identify_nvmset_list" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_nvmset_list \- Retrieves NVM Set List
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_primary_ctrl.2 b/doc/man/nvme_identify_primary_ctrl.2
index a3010cc..66b7f93 100644
--- a/doc/man/nvme_identify_primary_ctrl.2
+++ b/doc/man/nvme_identify_primary_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_primary_ctrl" 9 "nvme_identify_primary_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_primary_ctrl" 9 "nvme_identify_primary_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_primary_ctrl \- Retrieve NVMe Primary Controller identification
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_secondary_ctrl_list.2 b/doc/man/nvme_identify_secondary_ctrl_list.2
index c35f474..3fed99e 100644
--- a/doc/man/nvme_identify_secondary_ctrl_list.2
+++ b/doc/man/nvme_identify_secondary_ctrl_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_secondary_ctrl_list" 9 "nvme_identify_secondary_ctrl_list" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_secondary_ctrl_list" 9 "nvme_identify_secondary_ctrl_list" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_secondary_ctrl_list \- Retrieves secondary controller list
.SH SYNOPSIS
diff --git a/doc/man/nvme_identify_uuid.2 b/doc/man/nvme_identify_uuid.2
index 2bcad5b..a7fcb3e 100644
--- a/doc/man/nvme_identify_uuid.2
+++ b/doc/man/nvme_identify_uuid.2
@@ -1,4 +1,4 @@
-.TH "nvme_identify_uuid" 9 "nvme_identify_uuid" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_identify_uuid" 9 "nvme_identify_uuid" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_identify_uuid \- Retrieves device's UUIDs
.SH SYNOPSIS
diff --git a/doc/man/nvme_import_tls_key.2 b/doc/man/nvme_import_tls_key.2
new file mode 100644
index 0000000..4b3a4cc
--- /dev/null
+++ b/doc/man/nvme_import_tls_key.2
@@ -0,0 +1,21 @@
+.TH "nvme_import_tls_key" 9 "nvme_import_tls_key" "May 2024" "libnvme API manual" LINUX
+.SH NAME
+nvme_import_tls_key \- Import a TLS key
+.SH SYNOPSIS
+.B "unsigned char *" nvme_import_tls_key
+.BI "(const char *encoded_key " ","
+.BI "int *key_len " ","
+.BI "unsigned int *hmac " ");"
+.SH ARGUMENTS
+.IP "encoded_key" 12
+TLS key in PSK interchange format
+.IP "key_len" 12
+Length of the resulting key data
+.IP "hmac" 12
+HMAC algorithm
+.SH "DESCRIPTION"
+Imports \fIkey_data\fP in the PSK Interchange format as defined in section
+3.6.1.5 of the NVMe TCP Transport specification.
+.SH "RETURN"
+The raw data of the PSK or NULL with errno set on error. It is
+the responsibility of the caller to free the returned string.
diff --git a/doc/man/nvme_init_copy_range.2 b/doc/man/nvme_init_copy_range.2
index 36e3dfb..8b77024 100644
--- a/doc/man/nvme_init_copy_range.2
+++ b/doc/man/nvme_init_copy_range.2
@@ -1,4 +1,4 @@
-.TH "nvme_init_copy_range" 9 "nvme_init_copy_range" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_init_copy_range" 9 "nvme_init_copy_range" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_init_copy_range \- Constructs a copy range structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_init_copy_range_f1.2 b/doc/man/nvme_init_copy_range_f1.2
index 54423e8..6030ff9 100644
--- a/doc/man/nvme_init_copy_range_f1.2
+++ b/doc/man/nvme_init_copy_range_f1.2
@@ -1,4 +1,4 @@
-.TH "nvme_init_copy_range_f1" 9 "nvme_init_copy_range_f1" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_init_copy_range_f1" 9 "nvme_init_copy_range_f1" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_init_copy_range_f1 \- Constructs a copy range f1 structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_init_copy_range_f2.2 b/doc/man/nvme_init_copy_range_f2.2
index 8c0a469..68e4365 100644
--- a/doc/man/nvme_init_copy_range_f2.2
+++ b/doc/man/nvme_init_copy_range_f2.2
@@ -1,4 +1,4 @@
-.TH "nvme_init_copy_range_f2" 9 "nvme_init_copy_range_f2" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_init_copy_range_f2" 9 "nvme_init_copy_range_f2" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_init_copy_range_f2 \- Constructs a copy range f2 structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_init_copy_range_f3.2 b/doc/man/nvme_init_copy_range_f3.2
index 398f474..dd73096 100644
--- a/doc/man/nvme_init_copy_range_f3.2
+++ b/doc/man/nvme_init_copy_range_f3.2
@@ -1,4 +1,4 @@
-.TH "nvme_init_copy_range_f3" 9 "nvme_init_copy_range_f3" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_init_copy_range_f3" 9 "nvme_init_copy_range_f3" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_init_copy_range_f3 \- Constructs a copy range f3 structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_init_ctrl.2 b/doc/man/nvme_init_ctrl.2
index 4b3e34a..899c7b5 100644
--- a/doc/man/nvme_init_ctrl.2
+++ b/doc/man/nvme_init_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_init_ctrl" 9 "nvme_init_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_init_ctrl" 9 "nvme_init_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_init_ctrl \- Initialize nvme_ctrl_t object for an existing controller.
.SH SYNOPSIS
diff --git a/doc/man/nvme_init_ctrl_list.2 b/doc/man/nvme_init_ctrl_list.2
index 92fadd0..8c20fd6 100644
--- a/doc/man/nvme_init_ctrl_list.2
+++ b/doc/man/nvme_init_ctrl_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_init_ctrl_list" 9 "nvme_init_ctrl_list" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_init_ctrl_list" 9 "nvme_init_ctrl_list" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_init_ctrl_list \- Initialize an nvme_ctrl_list structure from an array.
.SH SYNOPSIS
diff --git a/doc/man/nvme_init_dsm_range.2 b/doc/man/nvme_init_dsm_range.2
index 9ca2dc0..a27c355 100644
--- a/doc/man/nvme_init_dsm_range.2
+++ b/doc/man/nvme_init_dsm_range.2
@@ -1,4 +1,4 @@
-.TH "nvme_init_dsm_range" 9 "nvme_init_dsm_range" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_init_dsm_range" 9 "nvme_init_dsm_range" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_init_dsm_range \- Constructs a data set range structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_init_logging.2 b/doc/man/nvme_init_logging.2
index e20c965..84005a9 100644
--- a/doc/man/nvme_init_logging.2
+++ b/doc/man/nvme_init_logging.2
@@ -1,4 +1,4 @@
-.TH "nvme_init_logging" 9 "nvme_init_logging" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_init_logging" 9 "nvme_init_logging" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_init_logging \- Initialize logging
.SH SYNOPSIS
diff --git a/doc/man/nvme_insert_tls_key.2 b/doc/man/nvme_insert_tls_key.2
index 7d9b3bf..1a4ae7c 100644
--- a/doc/man/nvme_insert_tls_key.2
+++ b/doc/man/nvme_insert_tls_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_insert_tls_key" 9 "nvme_insert_tls_key" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_insert_tls_key" 9 "nvme_insert_tls_key" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_insert_tls_key \- Derive and insert TLS key
.SH SYNOPSIS
diff --git a/doc/man/nvme_insert_tls_key_versioned.2 b/doc/man/nvme_insert_tls_key_versioned.2
index 4381914..d02ea10 100644
--- a/doc/man/nvme_insert_tls_key_versioned.2
+++ b/doc/man/nvme_insert_tls_key_versioned.2
@@ -1,4 +1,4 @@
-.TH "nvme_insert_tls_key_versioned" 9 "nvme_insert_tls_key_versioned" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_insert_tls_key_versioned" 9 "nvme_insert_tls_key_versioned" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_insert_tls_key_versioned \- Derive and insert TLS key
.SH SYNOPSIS
diff --git a/doc/man/nvme_io.2 b/doc/man/nvme_io.2
index 3af5d96..1d8c7f4 100644
--- a/doc/man/nvme_io.2
+++ b/doc/man/nvme_io.2
@@ -1,4 +1,4 @@
-.TH "nvme_io" 9 "nvme_io" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_io" 9 "nvme_io" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_io \- Submit an nvme user I/O command
.SH SYNOPSIS
diff --git a/doc/man/nvme_io_control_flags.2 b/doc/man/nvme_io_control_flags.2
index 98129ca..afc2c01 100644
--- a/doc/man/nvme_io_control_flags.2
+++ b/doc/man/nvme_io_control_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_io_control_flags" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_io_control_flags" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_io_control_flags \- I/O control flags
.SH SYNOPSIS
diff --git a/doc/man/nvme_io_dsm_flags.2 b/doc/man/nvme_io_dsm_flags.2
index 811f9c0..ffd0cda 100644
--- a/doc/man/nvme_io_dsm_flags.2
+++ b/doc/man/nvme_io_dsm_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_io_dsm_flags" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_io_dsm_flags" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_io_dsm_flags \- Dataset Management flags
.SH SYNOPSIS
diff --git a/doc/man/nvme_io_mgmt_recv.2 b/doc/man/nvme_io_mgmt_recv.2
index 83bdaa2..0ae660b 100644
--- a/doc/man/nvme_io_mgmt_recv.2
+++ b/doc/man/nvme_io_mgmt_recv.2
@@ -1,4 +1,4 @@
-.TH "nvme_io_mgmt_recv" 9 "nvme_io_mgmt_recv" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_io_mgmt_recv" 9 "nvme_io_mgmt_recv" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_io_mgmt_recv \- I/O Management Receive command
.SH SYNOPSIS
diff --git a/doc/man/nvme_io_mgmt_recv_mo.2 b/doc/man/nvme_io_mgmt_recv_mo.2
index b38dc0b..914f7c6 100644
--- a/doc/man/nvme_io_mgmt_recv_mo.2
+++ b/doc/man/nvme_io_mgmt_recv_mo.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_io_mgmt_recv_mo" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_io_mgmt_recv_mo" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_io_mgmt_recv_mo \- I/O Management Receive - Management Operation
.SH SYNOPSIS
diff --git a/doc/man/nvme_io_mgmt_send.2 b/doc/man/nvme_io_mgmt_send.2
index 43f2c7f..492f2fe 100644
--- a/doc/man/nvme_io_mgmt_send.2
+++ b/doc/man/nvme_io_mgmt_send.2
@@ -1,4 +1,4 @@
-.TH "nvme_io_mgmt_send" 9 "nvme_io_mgmt_send" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_io_mgmt_send" 9 "nvme_io_mgmt_send" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_io_mgmt_send \- I/O Management Send command
.SH SYNOPSIS
diff --git a/doc/man/nvme_io_mgmt_send_mo.2 b/doc/man/nvme_io_mgmt_send_mo.2
index 0cb8504..47722e4 100644
--- a/doc/man/nvme_io_mgmt_send_mo.2
+++ b/doc/man/nvme_io_mgmt_send_mo.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_io_mgmt_send_mo" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_io_mgmt_send_mo" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_io_mgmt_send_mo \- I/O Management Send - Management Operation
.SH SYNOPSIS
diff --git a/doc/man/nvme_io_opcode.2 b/doc/man/nvme_io_opcode.2
index 409edfa..f077961 100644
--- a/doc/man/nvme_io_opcode.2
+++ b/doc/man/nvme_io_opcode.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_io_opcode" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_io_opcode" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_io_opcode \- Opcodes for I/O Commands
.SH SYNOPSIS
diff --git a/doc/man/nvme_io_passthru.2 b/doc/man/nvme_io_passthru.2
index 8e2d54d..b96d533 100644
--- a/doc/man/nvme_io_passthru.2
+++ b/doc/man/nvme_io_passthru.2
@@ -1,4 +1,4 @@
-.TH "nvme_io_passthru" 9 "nvme_io_passthru" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_io_passthru" 9 "nvme_io_passthru" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_io_passthru \- Submit an nvme io passthrough command
.SH SYNOPSIS
diff --git a/doc/man/nvme_io_passthru64.2 b/doc/man/nvme_io_passthru64.2
index de03474..0de2082 100644
--- a/doc/man/nvme_io_passthru64.2
+++ b/doc/man/nvme_io_passthru64.2
@@ -1,4 +1,4 @@
-.TH "nvme_io_passthru64" 9 "nvme_io_passthru64" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_io_passthru64" 9 "nvme_io_passthru64" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_io_passthru64 \- Submit an nvme io passthrough command
.SH SYNOPSIS
diff --git a/doc/man/nvme_is_64bit_reg.2 b/doc/man/nvme_is_64bit_reg.2
index ecebc87..b93733c 100644
--- a/doc/man/nvme_is_64bit_reg.2
+++ b/doc/man/nvme_is_64bit_reg.2
@@ -1,4 +1,4 @@
-.TH "nvme_is_64bit_reg" 9 "nvme_is_64bit_reg" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_is_64bit_reg" 9 "nvme_is_64bit_reg" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_is_64bit_reg \- Checks if offset of the controller register is a know 64bit value.
.SH SYNOPSIS
diff --git a/doc/man/nvme_lba_range_type.2 b/doc/man/nvme_lba_range_type.2
index b6f934b..6d3dae8 100644
--- a/doc/man/nvme_lba_range_type.2
+++ b/doc/man/nvme_lba_range_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_lba_range_type" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_lba_range_type" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_lba_range_type \- LBA Range Type
.SH SYNOPSIS
diff --git a/doc/man/nvme_lba_range_type_entry.2 b/doc/man/nvme_lba_range_type_entry.2
index 25ad9d8..d6154b2 100644
--- a/doc/man/nvme_lba_range_type_entry.2
+++ b/doc/man/nvme_lba_range_type_entry.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_lba_range_type_entry" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_lba_range_type_entry" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_lba_range_type_entry \- LBA Range Type - Data Structure Entry
.SH SYNOPSIS
diff --git a/doc/man/nvme_lba_rd.2 b/doc/man/nvme_lba_rd.2
index 77a8d4d..f2cde4b 100644
--- a/doc/man/nvme_lba_rd.2
+++ b/doc/man/nvme_lba_rd.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_lba_rd" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_lba_rd" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_lba_rd \- LBA Range Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_lba_status.2 b/doc/man/nvme_lba_status.2
index 7fb6a55..498d1fc 100644
--- a/doc/man/nvme_lba_status.2
+++ b/doc/man/nvme_lba_status.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_lba_status" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_lba_status" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_lba_status \- LBA Status Descriptor List
.SH SYNOPSIS
diff --git a/doc/man/nvme_lba_status_atype.2 b/doc/man/nvme_lba_status_atype.2
index 66ae259..d2454ad 100644
--- a/doc/man/nvme_lba_status_atype.2
+++ b/doc/man/nvme_lba_status_atype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_lba_status_atype" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_lba_status_atype" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_lba_status_atype \- Potentially Unrecoverable LBAs
.SH SYNOPSIS
diff --git a/doc/man/nvme_lba_status_desc.2 b/doc/man/nvme_lba_status_desc.2
index deb31d7..639eba3 100644
--- a/doc/man/nvme_lba_status_desc.2
+++ b/doc/man/nvme_lba_status_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_lba_status_desc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_lba_status_desc" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_lba_status_desc \- LBA Status Descriptor Entry
.SH SYNOPSIS
diff --git a/doc/man/nvme_lba_status_log.2 b/doc/man/nvme_lba_status_log.2
index 92a4ea7..8f7fc61 100644
--- a/doc/man/nvme_lba_status_log.2
+++ b/doc/man/nvme_lba_status_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_lba_status_log" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_lba_status_log" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_lba_status_log \- LBA Status Information Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_lbaf.2 b/doc/man/nvme_lbaf.2
index 2b699b5..936780d 100644
--- a/doc/man/nvme_lbaf.2
+++ b/doc/man/nvme_lbaf.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_lbaf" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_lbaf" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_lbaf \- LBA Format Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_lbaf_rp.2 b/doc/man/nvme_lbaf_rp.2
index d6511d8..8f9b0aa 100644
--- a/doc/man/nvme_lbaf_rp.2
+++ b/doc/man/nvme_lbaf_rp.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_lbaf_rp" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_lbaf_rp" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_lbaf_rp \- This field indicates the relative performance of the LBA format indicated relative to other LBA formats supported by the controller.
.SH SYNOPSIS
diff --git a/doc/man/nvme_lbart.2 b/doc/man/nvme_lbart.2
index b8319d0..507e5b5 100644
--- a/doc/man/nvme_lbart.2
+++ b/doc/man/nvme_lbart.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_lbart" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_lbart" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_lbart \- LBA Range Type - Data Structure Entry
.SH SYNOPSIS
diff --git a/doc/man/nvme_lbas_ns_element.2 b/doc/man/nvme_lbas_ns_element.2
index abaf8bf..869d064 100644
--- a/doc/man/nvme_lbas_ns_element.2
+++ b/doc/man/nvme_lbas_ns_element.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_lbas_ns_element" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_lbas_ns_element" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_lbas_ns_element \- LBA Status Log Namespace Element
.SH SYNOPSIS
diff --git a/doc/man/nvme_lockdown.2 b/doc/man/nvme_lockdown.2
index a71f6dc..0d00d8f 100644
--- a/doc/man/nvme_lockdown.2
+++ b/doc/man/nvme_lockdown.2
@@ -1,4 +1,4 @@
-.TH "nvme_lockdown" 9 "nvme_lockdown" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_lockdown" 9 "nvme_lockdown" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_lockdown \- Issue lockdown command
.SH SYNOPSIS
diff --git a/doc/man/nvme_log_ana_lsp.2 b/doc/man/nvme_log_ana_lsp.2
index 618e156..80e399b 100644
--- a/doc/man/nvme_log_ana_lsp.2
+++ b/doc/man/nvme_log_ana_lsp.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_log_ana_lsp" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_log_ana_lsp" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_log_ana_lsp \- Asymmetric Namespace Access - Return Groups Only
.SH SYNOPSIS
diff --git a/doc/man/nvme_log_phy_rx_eom_action.2 b/doc/man/nvme_log_phy_rx_eom_action.2
index b0f3ae1..6868049 100644
--- a/doc/man/nvme_log_phy_rx_eom_action.2
+++ b/doc/man/nvme_log_phy_rx_eom_action.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_log_phy_rx_eom_action" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_log_phy_rx_eom_action" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_log_phy_rx_eom_action \- Physical Interface Receiver Eye Opening Measurement Action
.SH SYNOPSIS
diff --git a/doc/man/nvme_log_phy_rx_eom_quality.2 b/doc/man/nvme_log_phy_rx_eom_quality.2
index c0e0ff3..f520d44 100644
--- a/doc/man/nvme_log_phy_rx_eom_quality.2
+++ b/doc/man/nvme_log_phy_rx_eom_quality.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_log_phy_rx_eom_quality" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_log_phy_rx_eom_quality" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_log_phy_rx_eom_quality \- Physical Interface Receiver Eye Opening Measurement Quality
.SH SYNOPSIS
diff --git a/doc/man/nvme_lookup_ctrl.2 b/doc/man/nvme_lookup_ctrl.2
index d68e4da..d72c43c 100644
--- a/doc/man/nvme_lookup_ctrl.2
+++ b/doc/man/nvme_lookup_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_lookup_ctrl" 9 "nvme_lookup_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_lookup_ctrl" 9 "nvme_lookup_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_lookup_ctrl \- Lookup nvme_ctrl_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_lookup_host.2 b/doc/man/nvme_lookup_host.2
index 13644b0..80b2cc4 100644
--- a/doc/man/nvme_lookup_host.2
+++ b/doc/man/nvme_lookup_host.2
@@ -1,4 +1,4 @@
-.TH "nvme_lookup_host" 9 "nvme_lookup_host" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_lookup_host" 9 "nvme_lookup_host" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_lookup_host \- Lookup nvme_host_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_lookup_key.2 b/doc/man/nvme_lookup_key.2
index 745ba37..00c218a 100644
--- a/doc/man/nvme_lookup_key.2
+++ b/doc/man/nvme_lookup_key.2
@@ -1,4 +1,4 @@
-.TH "nvme_lookup_key" 9 "nvme_lookup_key" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_lookup_key" 9 "nvme_lookup_key" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_lookup_key \- Lookup key serial number
.SH SYNOPSIS
diff --git a/doc/man/nvme_lookup_keyring.2 b/doc/man/nvme_lookup_keyring.2
index 591a6d7..42b8b02 100644
--- a/doc/man/nvme_lookup_keyring.2
+++ b/doc/man/nvme_lookup_keyring.2
@@ -1,4 +1,4 @@
-.TH "nvme_lookup_keyring" 9 "nvme_lookup_keyring" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_lookup_keyring" 9 "nvme_lookup_keyring" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_lookup_keyring \- Lookup keyring serial number
.SH SYNOPSIS
diff --git a/doc/man/nvme_lookup_subsystem.2 b/doc/man/nvme_lookup_subsystem.2
index ef376f9..a0db1e0 100644
--- a/doc/man/nvme_lookup_subsystem.2
+++ b/doc/man/nvme_lookup_subsystem.2
@@ -1,4 +1,4 @@
-.TH "nvme_lookup_subsystem" 9 "nvme_lookup_subsystem" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_lookup_subsystem" 9 "nvme_lookup_subsystem" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_lookup_subsystem \- Lookup nvme_subsystem_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_media_unit_config_desc.2 b/doc/man/nvme_media_unit_config_desc.2
index 319aac1..f610f20 100644
--- a/doc/man/nvme_media_unit_config_desc.2
+++ b/doc/man/nvme_media_unit_config_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_media_unit_config_desc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_media_unit_config_desc" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_media_unit_config_desc \- Media Unit Configuration Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_media_unit_stat_desc.2 b/doc/man/nvme_media_unit_stat_desc.2
index 7e85fbf..3b23386 100644
--- a/doc/man/nvme_media_unit_stat_desc.2
+++ b/doc/man/nvme_media_unit_stat_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_media_unit_stat_desc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_media_unit_stat_desc" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_media_unit_stat_desc \- Media Unit Status Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_media_unit_stat_log.2 b/doc/man/nvme_media_unit_stat_log.2
index c231923..c5ecadf 100644
--- a/doc/man/nvme_media_unit_stat_log.2
+++ b/doc/man/nvme_media_unit_stat_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_media_unit_stat_log" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_media_unit_stat_log" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_media_unit_stat_log \- Media Unit Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_metadata_element_desc.2 b/doc/man/nvme_metadata_element_desc.2
index 461524c..3088b94 100644
--- a/doc/man/nvme_metadata_element_desc.2
+++ b/doc/man/nvme_metadata_element_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_metadata_element_desc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_metadata_element_desc" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_metadata_element_desc \- Metadata Element Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_admin_passthru.2 b/doc/man/nvme_mi_admin_admin_passthru.2
index 1b84014..e6a7d1f 100644
--- a/doc/man/nvme_mi_admin_admin_passthru.2
+++ b/doc/man/nvme_mi_admin_admin_passthru.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_admin_passthru" 9 "nvme_mi_admin_admin_passthru" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_admin_passthru" 9 "nvme_mi_admin_admin_passthru" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_admin_passthru \- Submit an nvme admin passthrough command
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_format_nvm.2 b/doc/man/nvme_mi_admin_format_nvm.2
index 12041e6..cb0f7c9 100644
--- a/doc/man/nvme_mi_admin_format_nvm.2
+++ b/doc/man/nvme_mi_admin_format_nvm.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_format_nvm" 9 "nvme_mi_admin_format_nvm" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_format_nvm" 9 "nvme_mi_admin_format_nvm" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_format_nvm \- Format NVMe namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_fw_commit.2 b/doc/man/nvme_mi_admin_fw_commit.2
index 2d13667..6b6c466 100644
--- a/doc/man/nvme_mi_admin_fw_commit.2
+++ b/doc/man/nvme_mi_admin_fw_commit.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_fw_commit" 9 "nvme_mi_admin_fw_commit" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_fw_commit" 9 "nvme_mi_admin_fw_commit" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_fw_commit \- Commit firmware using the specified action
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_fw_download.2 b/doc/man/nvme_mi_admin_fw_download.2
index e73d41d..e1b6f44 100644
--- a/doc/man/nvme_mi_admin_fw_download.2
+++ b/doc/man/nvme_mi_admin_fw_download.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_fw_download" 9 "nvme_mi_admin_fw_download" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_fw_download" 9 "nvme_mi_admin_fw_download" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_fw_download \- Download part or all of a firmware image to the controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_features_data.2 b/doc/man/nvme_mi_admin_get_features_data.2
index fdde194..b65df13 100644
--- a/doc/man/nvme_mi_admin_get_features_data.2
+++ b/doc/man/nvme_mi_admin_get_features_data.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_features_data" 9 "nvme_mi_admin_get_features_data" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_features_data" 9 "nvme_mi_admin_get_features_data" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_features_data \- Helper function for &nvme_mi_admin_get_features()
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log.2 b/doc/man/nvme_mi_admin_get_log.2
index 68c3af8..c48c611 100644
--- a/doc/man/nvme_mi_admin_get_log.2
+++ b/doc/man/nvme_mi_admin_get_log.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log" 9 "nvme_mi_admin_get_log" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log" 9 "nvme_mi_admin_get_log" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log \- Retrieve log page data from controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_ana.2 b/doc/man/nvme_mi_admin_get_log_ana.2
index 5b7402f..f381cc9 100644
--- a/doc/man/nvme_mi_admin_get_log_ana.2
+++ b/doc/man/nvme_mi_admin_get_log_ana.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_ana" 9 "nvme_mi_admin_get_log_ana" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_ana" 9 "nvme_mi_admin_get_log_ana" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_ana \- Retrieve Asymmetric Namespace Access log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_ana_groups.2 b/doc/man/nvme_mi_admin_get_log_ana_groups.2
index 92dd182..18f4f39 100644
--- a/doc/man/nvme_mi_admin_get_log_ana_groups.2
+++ b/doc/man/nvme_mi_admin_get_log_ana_groups.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_ana_groups" 9 "nvme_mi_admin_get_log_ana_groups" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_ana_groups" 9 "nvme_mi_admin_get_log_ana_groups" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_ana_groups \- Retrieve Asymmetric Namespace Access groups only log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_boot_partition.2 b/doc/man/nvme_mi_admin_get_log_boot_partition.2
index f952cc4..42fec36 100644
--- a/doc/man/nvme_mi_admin_get_log_boot_partition.2
+++ b/doc/man/nvme_mi_admin_get_log_boot_partition.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_boot_partition" 9 "nvme_mi_admin_get_log_boot_partition" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_boot_partition" 9 "nvme_mi_admin_get_log_boot_partition" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_boot_partition \- Retrieve Boot Partition
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_changed_ns_list.2 b/doc/man/nvme_mi_admin_get_log_changed_ns_list.2
index 6663d45..9c51db3 100644
--- a/doc/man/nvme_mi_admin_get_log_changed_ns_list.2
+++ b/doc/man/nvme_mi_admin_get_log_changed_ns_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_changed_ns_list" 9 "nvme_mi_admin_get_log_changed_ns_list" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_changed_ns_list" 9 "nvme_mi_admin_get_log_changed_ns_list" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_changed_ns_list \- Retrieve namespace changed list
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_cmd_effects.2 b/doc/man/nvme_mi_admin_get_log_cmd_effects.2
index 3f00c88..283e6e7 100644
--- a/doc/man/nvme_mi_admin_get_log_cmd_effects.2
+++ b/doc/man/nvme_mi_admin_get_log_cmd_effects.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_cmd_effects" 9 "nvme_mi_admin_get_log_cmd_effects" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_cmd_effects" 9 "nvme_mi_admin_get_log_cmd_effects" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_cmd_effects \- Retrieve nvme command effects log
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_create_telemetry_host.2 b/doc/man/nvme_mi_admin_get_log_create_telemetry_host.2
index 659910e..6635ef3 100644
--- a/doc/man/nvme_mi_admin_get_log_create_telemetry_host.2
+++ b/doc/man/nvme_mi_admin_get_log_create_telemetry_host.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_create_telemetry_host" 9 "nvme_mi_admin_get_log_create_telemetry_host" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_create_telemetry_host" 9 "nvme_mi_admin_get_log_create_telemetry_host" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_create_telemetry_host \- Create host telemetry log
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_device_self_test.2 b/doc/man/nvme_mi_admin_get_log_device_self_test.2
index 682b625..62f6a73 100644
--- a/doc/man/nvme_mi_admin_get_log_device_self_test.2
+++ b/doc/man/nvme_mi_admin_get_log_device_self_test.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_device_self_test" 9 "nvme_mi_admin_get_log_device_self_test" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_device_self_test" 9 "nvme_mi_admin_get_log_device_self_test" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_device_self_test \- Retrieve the device self test log
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_discovery.2 b/doc/man/nvme_mi_admin_get_log_discovery.2
index bb10fb6..a1ee846 100644
--- a/doc/man/nvme_mi_admin_get_log_discovery.2
+++ b/doc/man/nvme_mi_admin_get_log_discovery.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_discovery" 9 "nvme_mi_admin_get_log_discovery" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_discovery" 9 "nvme_mi_admin_get_log_discovery" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_discovery \- Retrieve Discovery log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_endurance_group.2 b/doc/man/nvme_mi_admin_get_log_endurance_group.2
index 60d0988..b48cf74 100644
--- a/doc/man/nvme_mi_admin_get_log_endurance_group.2
+++ b/doc/man/nvme_mi_admin_get_log_endurance_group.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_endurance_group" 9 "nvme_mi_admin_get_log_endurance_group" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_endurance_group" 9 "nvme_mi_admin_get_log_endurance_group" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_endurance_group \- Get Endurance Group log
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_endurance_grp_evt.2 b/doc/man/nvme_mi_admin_get_log_endurance_grp_evt.2
index d9d5edc..14a0a97 100644
--- a/doc/man/nvme_mi_admin_get_log_endurance_grp_evt.2
+++ b/doc/man/nvme_mi_admin_get_log_endurance_grp_evt.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_endurance_grp_evt" 9 "nvme_mi_admin_get_log_endurance_grp_evt" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_endurance_grp_evt" 9 "nvme_mi_admin_get_log_endurance_grp_evt" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_endurance_grp_evt \- Retrieve Rotational Media Information
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_error.2 b/doc/man/nvme_mi_admin_get_log_error.2
index 2f41599..a08dc9a 100644
--- a/doc/man/nvme_mi_admin_get_log_error.2
+++ b/doc/man/nvme_mi_admin_get_log_error.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_error" 9 "nvme_mi_admin_get_log_error" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_error" 9 "nvme_mi_admin_get_log_error" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_error \- Retrieve nvme error log
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_fid_supported_effects.2 b/doc/man/nvme_mi_admin_get_log_fid_supported_effects.2
index a04e839..aca967c 100644
--- a/doc/man/nvme_mi_admin_get_log_fid_supported_effects.2
+++ b/doc/man/nvme_mi_admin_get_log_fid_supported_effects.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_fid_supported_effects" 9 "nvme_mi_admin_get_log_fid_supported_effects" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_fid_supported_effects" 9 "nvme_mi_admin_get_log_fid_supported_effects" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_fid_supported_effects \- Retrieve Feature Identifiers Supported and Effects
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_fw_slot.2 b/doc/man/nvme_mi_admin_get_log_fw_slot.2
index d6710a2..e83459a 100644
--- a/doc/man/nvme_mi_admin_get_log_fw_slot.2
+++ b/doc/man/nvme_mi_admin_get_log_fw_slot.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_fw_slot" 9 "nvme_mi_admin_get_log_fw_slot" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_fw_slot" 9 "nvme_mi_admin_get_log_fw_slot" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_fw_slot \- Retrieves the controller firmware log
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_lba_status.2 b/doc/man/nvme_mi_admin_get_log_lba_status.2
index 862e63a..54d793a 100644
--- a/doc/man/nvme_mi_admin_get_log_lba_status.2
+++ b/doc/man/nvme_mi_admin_get_log_lba_status.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_lba_status" 9 "nvme_mi_admin_get_log_lba_status" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_lba_status" 9 "nvme_mi_admin_get_log_lba_status" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_lba_status \- Retrieve LBA Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_media_unit_stat.2 b/doc/man/nvme_mi_admin_get_log_media_unit_stat.2
index ef225fd..6bcd2de 100644
--- a/doc/man/nvme_mi_admin_get_log_media_unit_stat.2
+++ b/doc/man/nvme_mi_admin_get_log_media_unit_stat.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_media_unit_stat" 9 "nvme_mi_admin_get_log_media_unit_stat" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_media_unit_stat" 9 "nvme_mi_admin_get_log_media_unit_stat" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_media_unit_stat \- Retrieve Media Unit Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_mi_cmd_supported_effects.2 b/doc/man/nvme_mi_admin_get_log_mi_cmd_supported_effects.2
index 15dfd48..8b080d9 100644
--- a/doc/man/nvme_mi_admin_get_log_mi_cmd_supported_effects.2
+++ b/doc/man/nvme_mi_admin_get_log_mi_cmd_supported_effects.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_mi_cmd_supported_effects" 9 "nvme_mi_admin_get_log_mi_cmd_supported_effects" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_mi_cmd_supported_effects" 9 "nvme_mi_admin_get_log_mi_cmd_supported_effects" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_mi_cmd_supported_effects \- displays the MI Commands Supported by the controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_page.2 b/doc/man/nvme_mi_admin_get_log_page.2
index f016429..f6511cc 100644
--- a/doc/man/nvme_mi_admin_get_log_page.2
+++ b/doc/man/nvme_mi_admin_get_log_page.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_page" 9 "nvme_mi_admin_get_log_page" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_page" 9 "nvme_mi_admin_get_log_page" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_page \- Retrieve log page data from controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_persistent_event.2 b/doc/man/nvme_mi_admin_get_log_persistent_event.2
index fcdc3f4..fe16d8a 100644
--- a/doc/man/nvme_mi_admin_get_log_persistent_event.2
+++ b/doc/man/nvme_mi_admin_get_log_persistent_event.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_persistent_event" 9 "nvme_mi_admin_get_log_persistent_event" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_persistent_event" 9 "nvme_mi_admin_get_log_persistent_event" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_persistent_event \- Retrieve Persistent Event Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_phy_rx_eom.2 b/doc/man/nvme_mi_admin_get_log_phy_rx_eom.2
index 87917a6..c2d984b 100644
--- a/doc/man/nvme_mi_admin_get_log_phy_rx_eom.2
+++ b/doc/man/nvme_mi_admin_get_log_phy_rx_eom.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_phy_rx_eom" 9 "nvme_mi_admin_get_log_phy_rx_eom" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_phy_rx_eom" 9 "nvme_mi_admin_get_log_phy_rx_eom" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_phy_rx_eom \- Retrieve Physical Interface Receiver Eye Opening Measurement Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_predictable_lat_event.2 b/doc/man/nvme_mi_admin_get_log_predictable_lat_event.2
index 20cf516..f5d1921 100644
--- a/doc/man/nvme_mi_admin_get_log_predictable_lat_event.2
+++ b/doc/man/nvme_mi_admin_get_log_predictable_lat_event.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_predictable_lat_event" 9 "nvme_mi_admin_get_log_predictable_lat_event" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_predictable_lat_event" 9 "nvme_mi_admin_get_log_predictable_lat_event" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_predictable_lat_event \- Retrieve Predictable Latency Event Aggregate Log Page
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_predictable_lat_nvmset.2 b/doc/man/nvme_mi_admin_get_log_predictable_lat_nvmset.2
index 756613b..f8b3fa5 100644
--- a/doc/man/nvme_mi_admin_get_log_predictable_lat_nvmset.2
+++ b/doc/man/nvme_mi_admin_get_log_predictable_lat_nvmset.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_predictable_lat_nvmset" 9 "nvme_mi_admin_get_log_predictable_lat_nvmset" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_predictable_lat_nvmset" 9 "nvme_mi_admin_get_log_predictable_lat_nvmset" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_predictable_lat_nvmset \- Predictable Latency Per NVM Set
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_reservation.2 b/doc/man/nvme_mi_admin_get_log_reservation.2
index 239d425..855e974 100644
--- a/doc/man/nvme_mi_admin_get_log_reservation.2
+++ b/doc/man/nvme_mi_admin_get_log_reservation.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_reservation" 9 "nvme_mi_admin_get_log_reservation" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_reservation" 9 "nvme_mi_admin_get_log_reservation" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_reservation \- Retrieve Reservation Notification
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_sanitize.2 b/doc/man/nvme_mi_admin_get_log_sanitize.2
index 4994b42..c21867c 100644
--- a/doc/man/nvme_mi_admin_get_log_sanitize.2
+++ b/doc/man/nvme_mi_admin_get_log_sanitize.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_sanitize" 9 "nvme_mi_admin_get_log_sanitize" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_sanitize" 9 "nvme_mi_admin_get_log_sanitize" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_sanitize \- Retrieve Sanitize Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_simple.2 b/doc/man/nvme_mi_admin_get_log_simple.2
index 337e32a..451154e 100644
--- a/doc/man/nvme_mi_admin_get_log_simple.2
+++ b/doc/man/nvme_mi_admin_get_log_simple.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_simple" 9 "nvme_mi_admin_get_log_simple" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_simple" 9 "nvme_mi_admin_get_log_simple" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_simple \- Helper for Get Log Page functions with no NSID or RAE requirements
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_smart.2 b/doc/man/nvme_mi_admin_get_log_smart.2
index 3807875..55eeca4 100644
--- a/doc/man/nvme_mi_admin_get_log_smart.2
+++ b/doc/man/nvme_mi_admin_get_log_smart.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_smart" 9 "nvme_mi_admin_get_log_smart" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_smart" 9 "nvme_mi_admin_get_log_smart" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_smart \- Retrieve nvme smart log
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_support_cap_config_list.2 b/doc/man/nvme_mi_admin_get_log_support_cap_config_list.2
index 43956c8..a20a1ce 100644
--- a/doc/man/nvme_mi_admin_get_log_support_cap_config_list.2
+++ b/doc/man/nvme_mi_admin_get_log_support_cap_config_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_support_cap_config_list" 9 "nvme_mi_admin_get_log_support_cap_config_list" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_support_cap_config_list" 9 "nvme_mi_admin_get_log_support_cap_config_list" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_support_cap_config_list \- Retrieve Supported Capacity Configuration List
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_supported_log_pages.2 b/doc/man/nvme_mi_admin_get_log_supported_log_pages.2
index 49df890..c90d9fc 100644
--- a/doc/man/nvme_mi_admin_get_log_supported_log_pages.2
+++ b/doc/man/nvme_mi_admin_get_log_supported_log_pages.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_supported_log_pages" 9 "nvme_mi_admin_get_log_supported_log_pages" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_supported_log_pages" 9 "nvme_mi_admin_get_log_supported_log_pages" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_supported_log_pages \- Retrieve nmve supported log pages
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_telemetry_ctrl.2 b/doc/man/nvme_mi_admin_get_log_telemetry_ctrl.2
index e2e10f1..9f78de5 100644
--- a/doc/man/nvme_mi_admin_get_log_telemetry_ctrl.2
+++ b/doc/man/nvme_mi_admin_get_log_telemetry_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_telemetry_ctrl" 9 "nvme_mi_admin_get_log_telemetry_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_telemetry_ctrl" 9 "nvme_mi_admin_get_log_telemetry_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_telemetry_ctrl \- Get Telemetry Controller-Initiated log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_telemetry_host.2 b/doc/man/nvme_mi_admin_get_log_telemetry_host.2
index 92d83fe..da5163c 100644
--- a/doc/man/nvme_mi_admin_get_log_telemetry_host.2
+++ b/doc/man/nvme_mi_admin_get_log_telemetry_host.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_telemetry_host" 9 "nvme_mi_admin_get_log_telemetry_host" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_telemetry_host" 9 "nvme_mi_admin_get_log_telemetry_host" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_telemetry_host \- Get Telemetry Host-Initiated log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_log_zns_changed_zones.2 b/doc/man/nvme_mi_admin_get_log_zns_changed_zones.2
index 7e10c44..81682ca 100644
--- a/doc/man/nvme_mi_admin_get_log_zns_changed_zones.2
+++ b/doc/man/nvme_mi_admin_get_log_zns_changed_zones.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_log_zns_changed_zones" 9 "nvme_mi_admin_get_log_zns_changed_zones" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_log_zns_changed_zones" 9 "nvme_mi_admin_get_log_zns_changed_zones" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_log_zns_changed_zones \- Retrieve list of zones that have changed
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_get_nsid_log.2 b/doc/man/nvme_mi_admin_get_nsid_log.2
index 7408a50..c5f3511 100644
--- a/doc/man/nvme_mi_admin_get_nsid_log.2
+++ b/doc/man/nvme_mi_admin_get_nsid_log.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_get_nsid_log" 9 "nvme_mi_admin_get_nsid_log" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_get_nsid_log" 9 "nvme_mi_admin_get_nsid_log" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_get_nsid_log \- Helper for Get Log Page functions
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify.2 b/doc/man/nvme_mi_admin_identify.2
index 3af75ee..72efaed 100644
--- a/doc/man/nvme_mi_admin_identify.2
+++ b/doc/man/nvme_mi_admin_identify.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify" 9 "nvme_mi_admin_identify" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify" 9 "nvme_mi_admin_identify" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify \- Perform an Admin identify command.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_active_ns_list.2 b/doc/man/nvme_mi_admin_identify_active_ns_list.2
index eabc99c..075de1c 100644
--- a/doc/man/nvme_mi_admin_identify_active_ns_list.2
+++ b/doc/man/nvme_mi_admin_identify_active_ns_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_active_ns_list" 9 "nvme_mi_admin_identify_active_ns_list" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_active_ns_list" 9 "nvme_mi_admin_identify_active_ns_list" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_active_ns_list \- Perform an Admin identify for an active namespace list
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_allocated_ns.2 b/doc/man/nvme_mi_admin_identify_allocated_ns.2
index 2e5dd91..3ae1492 100644
--- a/doc/man/nvme_mi_admin_identify_allocated_ns.2
+++ b/doc/man/nvme_mi_admin_identify_allocated_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_allocated_ns" 9 "nvme_mi_admin_identify_allocated_ns" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_allocated_ns" 9 "nvme_mi_admin_identify_allocated_ns" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_allocated_ns \- Perform an Admin identify command for an allocated namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_allocated_ns_list.2 b/doc/man/nvme_mi_admin_identify_allocated_ns_list.2
index b847d6e..1c82a2b 100644
--- a/doc/man/nvme_mi_admin_identify_allocated_ns_list.2
+++ b/doc/man/nvme_mi_admin_identify_allocated_ns_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_allocated_ns_list" 9 "nvme_mi_admin_identify_allocated_ns_list" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_allocated_ns_list" 9 "nvme_mi_admin_identify_allocated_ns_list" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_allocated_ns_list \- Perform an Admin identify for an allocated namespace list
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_cns_nsid.2 b/doc/man/nvme_mi_admin_identify_cns_nsid.2
index d6cc88a..03829e4 100644
--- a/doc/man/nvme_mi_admin_identify_cns_nsid.2
+++ b/doc/man/nvme_mi_admin_identify_cns_nsid.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_cns_nsid" 9 "nvme_mi_admin_identify_cns_nsid" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_cns_nsid" 9 "nvme_mi_admin_identify_cns_nsid" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_cns_nsid \- Perform an Admin identify command using specific CNS/NSID parameters.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_ctrl.2 b/doc/man/nvme_mi_admin_identify_ctrl.2
index 3fe3f01..67fbe4b 100644
--- a/doc/man/nvme_mi_admin_identify_ctrl.2
+++ b/doc/man/nvme_mi_admin_identify_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_ctrl" 9 "nvme_mi_admin_identify_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_ctrl" 9 "nvme_mi_admin_identify_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_ctrl \- Perform an Admin identify for a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_ctrl_list.2 b/doc/man/nvme_mi_admin_identify_ctrl_list.2
index 04379b4..e6a71a9 100644
--- a/doc/man/nvme_mi_admin_identify_ctrl_list.2
+++ b/doc/man/nvme_mi_admin_identify_ctrl_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_ctrl_list" 9 "nvme_mi_admin_identify_ctrl_list" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_ctrl_list" 9 "nvme_mi_admin_identify_ctrl_list" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_ctrl_list \- Perform an Admin identify for a controller list.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_ns.2 b/doc/man/nvme_mi_admin_identify_ns.2
index 1aee01e..37a4f05 100644
--- a/doc/man/nvme_mi_admin_identify_ns.2
+++ b/doc/man/nvme_mi_admin_identify_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_ns" 9 "nvme_mi_admin_identify_ns" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_ns" 9 "nvme_mi_admin_identify_ns" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_ns \- Perform an Admin identify command for a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_ns_descs.2 b/doc/man/nvme_mi_admin_identify_ns_descs.2
index 3788ef0..c662ec2 100644
--- a/doc/man/nvme_mi_admin_identify_ns_descs.2
+++ b/doc/man/nvme_mi_admin_identify_ns_descs.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_ns_descs" 9 "nvme_mi_admin_identify_ns_descs" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_ns_descs" 9 "nvme_mi_admin_identify_ns_descs" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_ns_descs \- Perform an Admin identify Namespace Identification Descriptor list command for a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_nsid_ctrl_list.2 b/doc/man/nvme_mi_admin_identify_nsid_ctrl_list.2
index e10dfbe..661bd39 100644
--- a/doc/man/nvme_mi_admin_identify_nsid_ctrl_list.2
+++ b/doc/man/nvme_mi_admin_identify_nsid_ctrl_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_nsid_ctrl_list" 9 "nvme_mi_admin_identify_nsid_ctrl_list" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_nsid_ctrl_list" 9 "nvme_mi_admin_identify_nsid_ctrl_list" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_nsid_ctrl_list \- Perform an Admin identify for a controller list with specific namespace ID
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_partial.2 b/doc/man/nvme_mi_admin_identify_partial.2
index bddc694..eec683d 100644
--- a/doc/man/nvme_mi_admin_identify_partial.2
+++ b/doc/man/nvme_mi_admin_identify_partial.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_partial" 9 "nvme_mi_admin_identify_partial" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_partial" 9 "nvme_mi_admin_identify_partial" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_partial \- Perform an Admin identify command, and retrieve partial response data.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_primary_ctrl.2 b/doc/man/nvme_mi_admin_identify_primary_ctrl.2
index f595e14..177aed8 100644
--- a/doc/man/nvme_mi_admin_identify_primary_ctrl.2
+++ b/doc/man/nvme_mi_admin_identify_primary_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_primary_ctrl" 9 "nvme_mi_admin_identify_primary_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_primary_ctrl" 9 "nvme_mi_admin_identify_primary_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_primary_ctrl \- Perform an Admin identify for primary controller capabilities data structure.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_identify_secondary_ctrl_list.2 b/doc/man/nvme_mi_admin_identify_secondary_ctrl_list.2
index 21c76e7..76ecb24 100644
--- a/doc/man/nvme_mi_admin_identify_secondary_ctrl_list.2
+++ b/doc/man/nvme_mi_admin_identify_secondary_ctrl_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_identify_secondary_ctrl_list" 9 "nvme_mi_admin_identify_secondary_ctrl_list" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_identify_secondary_ctrl_list" 9 "nvme_mi_admin_identify_secondary_ctrl_list" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_identify_secondary_ctrl_list \- Perform an Admin identify for a secondary controller list.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_ns_attach.2 b/doc/man/nvme_mi_admin_ns_attach.2
index 80164f3..e2d1449 100644
--- a/doc/man/nvme_mi_admin_ns_attach.2
+++ b/doc/man/nvme_mi_admin_ns_attach.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_ns_attach" 9 "nvme_mi_admin_ns_attach" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_ns_attach" 9 "nvme_mi_admin_ns_attach" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_ns_attach \- Attach or detach namespace to controller(s)
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_ns_attach_ctrls.2 b/doc/man/nvme_mi_admin_ns_attach_ctrls.2
index f41dfdb..dcd6dd5 100644
--- a/doc/man/nvme_mi_admin_ns_attach_ctrls.2
+++ b/doc/man/nvme_mi_admin_ns_attach_ctrls.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_ns_attach_ctrls" 9 "nvme_mi_admin_ns_attach_ctrls" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_ns_attach_ctrls" 9 "nvme_mi_admin_ns_attach_ctrls" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_ns_attach_ctrls \- Attach namespace to controllers
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_ns_detach_ctrls.2 b/doc/man/nvme_mi_admin_ns_detach_ctrls.2
index 6965810..d6a3dba 100644
--- a/doc/man/nvme_mi_admin_ns_detach_ctrls.2
+++ b/doc/man/nvme_mi_admin_ns_detach_ctrls.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_ns_detach_ctrls" 9 "nvme_mi_admin_ns_detach_ctrls" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_ns_detach_ctrls" 9 "nvme_mi_admin_ns_detach_ctrls" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_ns_detach_ctrls \- Detach namespace from controllers
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_req_hdr.2 b/doc/man/nvme_mi_admin_req_hdr.2
index 95aac5f..703cfd1 100644
--- a/doc/man/nvme_mi_admin_req_hdr.2
+++ b/doc/man/nvme_mi_admin_req_hdr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_admin_req_hdr" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_admin_req_hdr" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_admin_req_hdr \- Admin command request header.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_resp_hdr.2 b/doc/man/nvme_mi_admin_resp_hdr.2
index c26cbd9..add43ed 100644
--- a/doc/man/nvme_mi_admin_resp_hdr.2
+++ b/doc/man/nvme_mi_admin_resp_hdr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_admin_resp_hdr" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_admin_resp_hdr" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_admin_resp_hdr \- Admin command response header.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_sanitize_nvm.2 b/doc/man/nvme_mi_admin_sanitize_nvm.2
index 2902275..7afa301 100644
--- a/doc/man/nvme_mi_admin_sanitize_nvm.2
+++ b/doc/man/nvme_mi_admin_sanitize_nvm.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_sanitize_nvm" 9 "nvme_mi_admin_sanitize_nvm" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_sanitize_nvm" 9 "nvme_mi_admin_sanitize_nvm" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_sanitize_nvm \- Start a subsystem Sanitize operation
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_security_recv.2 b/doc/man/nvme_mi_admin_security_recv.2
index 804d40c..7c1e707 100644
--- a/doc/man/nvme_mi_admin_security_recv.2
+++ b/doc/man/nvme_mi_admin_security_recv.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_security_recv" 9 "nvme_mi_admin_security_recv" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_security_recv" 9 "nvme_mi_admin_security_recv" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_security_recv \- Perform a Security Receive command on a controller.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_security_send.2 b/doc/man/nvme_mi_admin_security_send.2
index 61da5f3..b9ac0de 100644
--- a/doc/man/nvme_mi_admin_security_send.2
+++ b/doc/man/nvme_mi_admin_security_send.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_security_send" 9 "nvme_mi_admin_security_send" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_security_send" 9 "nvme_mi_admin_security_send" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_security_send \- Perform a Security Send command on a controller.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_admin_xfer.2 b/doc/man/nvme_mi_admin_xfer.2
index a76189c..6027146 100644
--- a/doc/man/nvme_mi_admin_xfer.2
+++ b/doc/man/nvme_mi_admin_xfer.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_admin_xfer" 9 "nvme_mi_admin_xfer" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_admin_xfer" 9 "nvme_mi_admin_xfer" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_admin_xfer \- Raw admin transfer interface.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_ccs.2 b/doc/man/nvme_mi_ccs.2
index 565b96d..08dd5b7 100644
--- a/doc/man/nvme_mi_ccs.2
+++ b/doc/man/nvme_mi_ccs.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_mi_ccs" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_mi_ccs" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_mi_ccs \- Get State Control Primitive Success Response Fields - Control Primitive Specific Response
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_close.2 b/doc/man/nvme_mi_close.2
index d380e4d..d316820 100644
--- a/doc/man/nvme_mi_close.2
+++ b/doc/man/nvme_mi_close.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_close" 9 "nvme_mi_close" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_close" 9 "nvme_mi_close" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_close \- Close an endpoint connection and release resources, including controller objects.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_close_ctrl.2 b/doc/man/nvme_mi_close_ctrl.2
index 605a6af..0f206d4 100644
--- a/doc/man/nvme_mi_close_ctrl.2
+++ b/doc/man/nvme_mi_close_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_close_ctrl" 9 "nvme_mi_close_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_close_ctrl" 9 "nvme_mi_close_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_close_ctrl \- free a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_cmd_supported_effects.2 b/doc/man/nvme_mi_cmd_supported_effects.2
index 502bff6..0f2ab63 100644
--- a/doc/man/nvme_mi_cmd_supported_effects.2
+++ b/doc/man/nvme_mi_cmd_supported_effects.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_mi_cmd_supported_effects" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_mi_cmd_supported_effects" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_mi_cmd_supported_effects \- MI Command Supported and Effects Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_cmd_supported_effects_log.2 b/doc/man/nvme_mi_cmd_supported_effects_log.2
index df5678c..627ec16 100644
--- a/doc/man/nvme_mi_cmd_supported_effects_log.2
+++ b/doc/man/nvme_mi_cmd_supported_effects_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_cmd_supported_effects_log" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_cmd_supported_effects_log" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_cmd_supported_effects_log \- NVMe-MI Commands Supported and Effects Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_config_id.2 b/doc/man/nvme_mi_config_id.2
index fa1512f..d2ff40e 100644
--- a/doc/man/nvme_mi_config_id.2
+++ b/doc/man/nvme_mi_config_id.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_mi_config_id" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_mi_config_id" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_mi_config_id \- NVMe-MI Configuration identifier.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_config_smbus_freq.2 b/doc/man/nvme_mi_config_smbus_freq.2
index c6cab1e..17344bd 100644
--- a/doc/man/nvme_mi_config_smbus_freq.2
+++ b/doc/man/nvme_mi_config_smbus_freq.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_mi_config_smbus_freq" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_mi_config_smbus_freq" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_mi_config_smbus_freq \- SMBus/I2C frequency values
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_create_root.2 b/doc/man/nvme_mi_create_root.2
index e11912b..55cf7c6 100644
--- a/doc/man/nvme_mi_create_root.2
+++ b/doc/man/nvme_mi_create_root.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_create_root" 9 "nvme_mi_create_root" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_create_root" 9 "nvme_mi_create_root" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_create_root \- Create top-level MI (root) handle.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_csts.2 b/doc/man/nvme_mi_csts.2
index 5eb19a1..ec8a849 100644
--- a/doc/man/nvme_mi_csts.2
+++ b/doc/man/nvme_mi_csts.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_mi_csts" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_mi_csts" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_mi_csts \- Controller Health Data Structure (CHDS) - Controller Status (CSTS)
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_ctrl_health_status.2 b/doc/man/nvme_mi_ctrl_health_status.2
index 4483462..98aca50 100644
--- a/doc/man/nvme_mi_ctrl_health_status.2
+++ b/doc/man/nvme_mi_ctrl_health_status.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_ctrl_health_status" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_ctrl_health_status" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_ctrl_health_status \- Controller Health Data Structure (CHDS)
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_ctrl_id.2 b/doc/man/nvme_mi_ctrl_id.2
index c07633f..7c64d54 100644
--- a/doc/man/nvme_mi_ctrl_id.2
+++ b/doc/man/nvme_mi_ctrl_id.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_ctrl_id" 9 "nvme_mi_ctrl_id" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_ctrl_id" 9 "nvme_mi_ctrl_id" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_ctrl_id \- get the ID of a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_cwarn.2 b/doc/man/nvme_mi_cwarn.2
index fac6e60..fbc6fc2 100644
--- a/doc/man/nvme_mi_cwarn.2
+++ b/doc/man/nvme_mi_cwarn.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_mi_cwarn" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_mi_cwarn" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_mi_cwarn \- Controller Health Data Structure (CHDS) - Critical Warning (CWARN)
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_dtyp.2 b/doc/man/nvme_mi_dtyp.2
index 88e7fab..2a3266e 100644
--- a/doc/man/nvme_mi_dtyp.2
+++ b/doc/man/nvme_mi_dtyp.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_mi_dtyp" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_mi_dtyp" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_mi_dtyp \- Data Structure Type field.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_elem.2 b/doc/man/nvme_mi_elem.2
index 20ed699..9d72fba 100644
--- a/doc/man/nvme_mi_elem.2
+++ b/doc/man/nvme_mi_elem.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_mi_elem" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_mi_elem" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_mi_elem \- Element Descriptor Types
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_free_root.2 b/doc/man/nvme_mi_free_root.2
index b8ab29f..75ab84c 100644
--- a/doc/man/nvme_mi_free_root.2
+++ b/doc/man/nvme_mi_free_root.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_free_root" 9 "nvme_mi_free_root" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_free_root" 9 "nvme_mi_free_root" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_free_root \- Free root object.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_init_ctrl.2 b/doc/man/nvme_mi_init_ctrl.2
index a0f6d44..d4d5f87 100644
--- a/doc/man/nvme_mi_init_ctrl.2
+++ b/doc/man/nvme_mi_init_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_init_ctrl" 9 "nvme_mi_init_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_init_ctrl" 9 "nvme_mi_init_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_init_ctrl \- initialise a NVMe controller.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_message_type.2 b/doc/man/nvme_mi_message_type.2
index ba3249f..ca369b0 100644
--- a/doc/man/nvme_mi_message_type.2
+++ b/doc/man/nvme_mi_message_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_mi_message_type" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_mi_message_type" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_mi_message_type \- NVMe-MI message type field.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_mi_opcode.2 b/doc/man/nvme_mi_mi_opcode.2
index c884079..ed19f78 100644
--- a/doc/man/nvme_mi_mi_opcode.2
+++ b/doc/man/nvme_mi_mi_opcode.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_mi_mi_opcode" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_mi_mi_opcode" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_mi_mi_opcode \- Operation code for supported NVMe-MI commands.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_mi_read_mi_data_ctrl.2 b/doc/man/nvme_mi_mi_read_mi_data_ctrl.2
index 36ee870..cf09de7 100644
--- a/doc/man/nvme_mi_mi_read_mi_data_ctrl.2
+++ b/doc/man/nvme_mi_mi_read_mi_data_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_mi_read_mi_data_ctrl" 9 "nvme_mi_mi_read_mi_data_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_mi_read_mi_data_ctrl" 9 "nvme_mi_mi_read_mi_data_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_mi_read_mi_data_ctrl \- Perform a Read MI Data Structure command, retrieving controller information
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_mi_read_mi_data_ctrl_list.2 b/doc/man/nvme_mi_mi_read_mi_data_ctrl_list.2
index 265ded1..f5e931c 100644
--- a/doc/man/nvme_mi_mi_read_mi_data_ctrl_list.2
+++ b/doc/man/nvme_mi_mi_read_mi_data_ctrl_list.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_mi_read_mi_data_ctrl_list" 9 "nvme_mi_mi_read_mi_data_ctrl_list" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_mi_read_mi_data_ctrl_list" 9 "nvme_mi_mi_read_mi_data_ctrl_list" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_mi_read_mi_data_ctrl_list \- Perform a Read MI Data Structure command, retrieving the list of attached controllers.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_mi_read_mi_data_port.2 b/doc/man/nvme_mi_mi_read_mi_data_port.2
index 775b3d8..215ef31 100644
--- a/doc/man/nvme_mi_mi_read_mi_data_port.2
+++ b/doc/man/nvme_mi_mi_read_mi_data_port.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_mi_read_mi_data_port" 9 "nvme_mi_mi_read_mi_data_port" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_mi_read_mi_data_port" 9 "nvme_mi_mi_read_mi_data_port" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_mi_read_mi_data_port \- Perform a Read MI Data Structure command, retrieving port data.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_mi_read_mi_data_subsys.2 b/doc/man/nvme_mi_mi_read_mi_data_subsys.2
index b8a7ad2..9c76974 100644
--- a/doc/man/nvme_mi_mi_read_mi_data_subsys.2
+++ b/doc/man/nvme_mi_mi_read_mi_data_subsys.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_mi_read_mi_data_subsys" 9 "nvme_mi_mi_read_mi_data_subsys" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_mi_read_mi_data_subsys" 9 "nvme_mi_mi_read_mi_data_subsys" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_mi_read_mi_data_subsys \- Perform a Read MI Data Structure command, retrieving subsystem data.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_mi_req_hdr.2 b/doc/man/nvme_mi_mi_req_hdr.2
index fa49be1..08385b8 100644
--- a/doc/man/nvme_mi_mi_req_hdr.2
+++ b/doc/man/nvme_mi_mi_req_hdr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_mi_req_hdr" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_mi_req_hdr" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_mi_req_hdr \- MI request message header.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_mi_resp_hdr.2 b/doc/man/nvme_mi_mi_resp_hdr.2
index 974ec3c..cf27de1 100644
--- a/doc/man/nvme_mi_mi_resp_hdr.2
+++ b/doc/man/nvme_mi_mi_resp_hdr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_mi_resp_hdr" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_mi_resp_hdr" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_mi_resp_hdr \- MI response message header.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_mi_subsystem_health_status_poll.2 b/doc/man/nvme_mi_mi_subsystem_health_status_poll.2
index f2e2d6d..462aee3 100644
--- a/doc/man/nvme_mi_mi_subsystem_health_status_poll.2
+++ b/doc/man/nvme_mi_mi_subsystem_health_status_poll.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_mi_subsystem_health_status_poll" 9 "nvme_mi_mi_subsystem_health_status_poll" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_mi_subsystem_health_status_poll" 9 "nvme_mi_mi_subsystem_health_status_poll" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_mi_subsystem_health_status_poll \- Read the Subsystem Health Data Structure from the NVM subsystem
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_msg_hdr.2 b/doc/man/nvme_mi_msg_hdr.2
index e8f70e6..b25f953 100644
--- a/doc/man/nvme_mi_msg_hdr.2
+++ b/doc/man/nvme_mi_msg_hdr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_msg_hdr" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_msg_hdr" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_msg_hdr \- General MI message header.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_msg_resp.2 b/doc/man/nvme_mi_msg_resp.2
index 32baa77..21cfa82 100644
--- a/doc/man/nvme_mi_msg_resp.2
+++ b/doc/man/nvme_mi_msg_resp.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_msg_resp" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_msg_resp" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_msg_resp \- Generic response type.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_nvm_ss_health_status.2 b/doc/man/nvme_mi_nvm_ss_health_status.2
index b10ea76..440d1fa 100644
--- a/doc/man/nvme_mi_nvm_ss_health_status.2
+++ b/doc/man/nvme_mi_nvm_ss_health_status.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_nvm_ss_health_status" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_nvm_ss_health_status" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_nvm_ss_health_status \- Subsystem Management Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_open_mctp.2 b/doc/man/nvme_mi_open_mctp.2
index 2f99512..50ffc96 100644
--- a/doc/man/nvme_mi_open_mctp.2
+++ b/doc/man/nvme_mi_open_mctp.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_open_mctp" 9 "nvme_mi_open_mctp" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_open_mctp" 9 "nvme_mi_open_mctp" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_open_mctp \- Create an endpoint using a MCTP connection.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_osc.2 b/doc/man/nvme_mi_osc.2
index 8d47c5d..7545f04 100644
--- a/doc/man/nvme_mi_osc.2
+++ b/doc/man/nvme_mi_osc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_osc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_osc" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_osc \- Optionally Supported Command Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_port_pcie.2 b/doc/man/nvme_mi_port_pcie.2
index e99e772..c7d61a6 100644
--- a/doc/man/nvme_mi_port_pcie.2
+++ b/doc/man/nvme_mi_port_pcie.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_port_pcie" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_port_pcie" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_port_pcie \- PCIe Port Specific Data
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_port_smb.2 b/doc/man/nvme_mi_port_smb.2
index 95e2238..bc4ff5a 100644
--- a/doc/man/nvme_mi_port_smb.2
+++ b/doc/man/nvme_mi_port_smb.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_port_smb" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_port_smb" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_port_smb \- SMBus Port Specific Data
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_read_ctrl_info.2 b/doc/man/nvme_mi_read_ctrl_info.2
index c340978..98695e5 100644
--- a/doc/man/nvme_mi_read_ctrl_info.2
+++ b/doc/man/nvme_mi_read_ctrl_info.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_read_ctrl_info" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_read_ctrl_info" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_read_ctrl_info \- Controller Information Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_read_nvm_ss_info.2 b/doc/man/nvme_mi_read_nvm_ss_info.2
index 9f1d40a..b49abe5 100644
--- a/doc/man/nvme_mi_read_nvm_ss_info.2
+++ b/doc/man/nvme_mi_read_nvm_ss_info.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_read_nvm_ss_info" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_read_nvm_ss_info" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_read_nvm_ss_info \- NVM Subsystem Information Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_read_port_info.2 b/doc/man/nvme_mi_read_port_info.2
index 6e21e75..0f195c8 100644
--- a/doc/man/nvme_mi_read_port_info.2
+++ b/doc/man/nvme_mi_read_port_info.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_read_port_info" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_read_port_info" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_read_port_info \- Port Information Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_read_sc_list.2 b/doc/man/nvme_mi_read_sc_list.2
index 3d84219..616abe3 100644
--- a/doc/man/nvme_mi_read_sc_list.2
+++ b/doc/man/nvme_mi_read_sc_list.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_read_sc_list" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_read_sc_list" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_read_sc_list \- Management Endpoint Buffer Supported Command List Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_resp_status.2 b/doc/man/nvme_mi_resp_status.2
index 73a1e9c..7ef2ad0 100644
--- a/doc/man/nvme_mi_resp_status.2
+++ b/doc/man/nvme_mi_resp_status.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_mi_resp_status" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_mi_resp_status" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_mi_resp_status \- values for the response status field
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_set_probe_enabled.2 b/doc/man/nvme_mi_set_probe_enabled.2
index bc40f19..3940f27 100644
--- a/doc/man/nvme_mi_set_probe_enabled.2
+++ b/doc/man/nvme_mi_set_probe_enabled.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_set_probe_enabled" 9 "nvme_mi_set_probe_enabled" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_set_probe_enabled" 9 "nvme_mi_set_probe_enabled" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_set_probe_enabled \- enable/disable the probe for new endpoints
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_status_to_string.2 b/doc/man/nvme_mi_status_to_string.2
index bb4ba45..57364fb 100644
--- a/doc/man/nvme_mi_status_to_string.2
+++ b/doc/man/nvme_mi_status_to_string.2
@@ -1,4 +1,4 @@
-.TH "nvme_mi_status_to_string" 9 "nvme_mi_status_to_string" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_mi_status_to_string" 9 "nvme_mi_status_to_string" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_mi_status_to_string \- return a string representation of the MI status.
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_vpd_hdr.2 b/doc/man/nvme_mi_vpd_hdr.2
index ff51fe1..3cc517e 100644
--- a/doc/man/nvme_mi_vpd_hdr.2
+++ b/doc/man/nvme_mi_vpd_hdr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_vpd_hdr" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_vpd_hdr" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_vpd_hdr \- Vital Product Data Common Header
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_vpd_mr_common.2 b/doc/man/nvme_mi_vpd_mr_common.2
index 47ff9a4..f1afba6 100644
--- a/doc/man/nvme_mi_vpd_mr_common.2
+++ b/doc/man/nvme_mi_vpd_mr_common.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_vpd_mr_common" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_vpd_mr_common" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_vpd_mr_common \- NVMe MultiRecord Area
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_vpd_mra.2 b/doc/man/nvme_mi_vpd_mra.2
index 190a1d0..805c0ca 100644
--- a/doc/man/nvme_mi_vpd_mra.2
+++ b/doc/man/nvme_mi_vpd_mra.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_vpd_mra" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_vpd_mra" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_vpd_mra \- NVMe MultiRecord Area
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_vpd_ppmra.2 b/doc/man/nvme_mi_vpd_ppmra.2
index 9085fba..7a2c246 100644
--- a/doc/man/nvme_mi_vpd_ppmra.2
+++ b/doc/man/nvme_mi_vpd_ppmra.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_vpd_ppmra" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_vpd_ppmra" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_vpd_ppmra \- NVMe PCIe Port MultiRecord Area
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_vpd_telem.2 b/doc/man/nvme_mi_vpd_telem.2
index d282e3c..ef1be75 100644
--- a/doc/man/nvme_mi_vpd_telem.2
+++ b/doc/man/nvme_mi_vpd_telem.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_vpd_telem" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_vpd_telem" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_vpd_telem \- Vital Product Data Element Descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_mi_vpd_tra.2 b/doc/man/nvme_mi_vpd_tra.2
index 73aec0f..f304aee 100644
--- a/doc/man/nvme_mi_vpd_tra.2
+++ b/doc/man/nvme_mi_vpd_tra.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_mi_vpd_tra" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_mi_vpd_tra" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_mi_vpd_tra \- Vital Product Data Topology MultiRecord
.SH SYNOPSIS
diff --git a/doc/man/nvme_namespace_attach_ctrls.2 b/doc/man/nvme_namespace_attach_ctrls.2
index 4093c9b..e81a9e3 100644
--- a/doc/man/nvme_namespace_attach_ctrls.2
+++ b/doc/man/nvme_namespace_attach_ctrls.2
@@ -1,4 +1,4 @@
-.TH "nvme_namespace_attach_ctrls" 9 "nvme_namespace_attach_ctrls" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_namespace_attach_ctrls" 9 "nvme_namespace_attach_ctrls" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_namespace_attach_ctrls \- Attach namespace to controller(s)
.SH SYNOPSIS
diff --git a/doc/man/nvme_namespace_detach_ctrls.2 b/doc/man/nvme_namespace_detach_ctrls.2
index 59e15dd..bb7ff40 100644
--- a/doc/man/nvme_namespace_detach_ctrls.2
+++ b/doc/man/nvme_namespace_detach_ctrls.2
@@ -1,4 +1,4 @@
-.TH "nvme_namespace_detach_ctrls" 9 "nvme_namespace_detach_ctrls" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_namespace_detach_ctrls" 9 "nvme_namespace_detach_ctrls" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_namespace_detach_ctrls \- Detach namespace from controller(s)
.SH SYNOPSIS
diff --git a/doc/man/nvme_namespace_filter.2 b/doc/man/nvme_namespace_filter.2
index 09156bf..3d61055 100644
--- a/doc/man/nvme_namespace_filter.2
+++ b/doc/man/nvme_namespace_filter.2
@@ -1,4 +1,4 @@
-.TH "nvme_namespace_filter" 9 "nvme_namespace_filter" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_namespace_filter" 9 "nvme_namespace_filter" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_namespace_filter \- Filter for namespaces
.SH SYNOPSIS
diff --git a/doc/man/nvme_namespace_first_path.2 b/doc/man/nvme_namespace_first_path.2
index 3df6ead..5beb6a0 100644
--- a/doc/man/nvme_namespace_first_path.2
+++ b/doc/man/nvme_namespace_first_path.2
@@ -1,4 +1,4 @@
-.TH "nvme_namespace_first_path" 9 "nvme_namespace_first_path" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_namespace_first_path" 9 "nvme_namespace_first_path" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_namespace_first_path \- Start path iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_namespace_for_each_path.2 b/doc/man/nvme_namespace_for_each_path.2
index d181d07..ba8b099 100644
--- a/doc/man/nvme_namespace_for_each_path.2
+++ b/doc/man/nvme_namespace_for_each_path.2
@@ -1,4 +1,4 @@
-.TH "nvme_namespace_for_each_path" 9 "nvme_namespace_for_each_path" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_namespace_for_each_path" 9 "nvme_namespace_for_each_path" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_namespace_for_each_path \- Traverse paths
.SH SYNOPSIS
diff --git a/doc/man/nvme_namespace_for_each_path_safe.2 b/doc/man/nvme_namespace_for_each_path_safe.2
index 2186042..f6f1bc7 100644
--- a/doc/man/nvme_namespace_for_each_path_safe.2
+++ b/doc/man/nvme_namespace_for_each_path_safe.2
@@ -1,4 +1,4 @@
-.TH "nvme_namespace_for_each_path_safe" 9 "nvme_namespace_for_each_path_safe" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_namespace_for_each_path_safe" 9 "nvme_namespace_for_each_path_safe" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_namespace_for_each_path_safe \- Traverse paths
.SH SYNOPSIS
diff --git a/doc/man/nvme_namespace_next_path.2 b/doc/man/nvme_namespace_next_path.2
index 56a9ad6..7dbc7d9 100644
--- a/doc/man/nvme_namespace_next_path.2
+++ b/doc/man/nvme_namespace_next_path.2
@@ -1,4 +1,4 @@
-.TH "nvme_namespace_next_path" 9 "nvme_namespace_next_path" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_namespace_next_path" 9 "nvme_namespace_next_path" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_namespace_next_path \- Next path iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_nbft_free.2 b/doc/man/nvme_nbft_free.2
index b4a3c0e..ee1c7b8 100644
--- a/doc/man/nvme_nbft_free.2
+++ b/doc/man/nvme_nbft_free.2
@@ -1,4 +1,4 @@
-.TH "nvme_nbft_free" 9 "nvme_nbft_free" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_nbft_free" 9 "nvme_nbft_free" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_nbft_free \- Free the struct nbft_info and its contents
.SH SYNOPSIS
diff --git a/doc/man/nvme_nbft_read.2 b/doc/man/nvme_nbft_read.2
index ac97752..c40ec16 100644
--- a/doc/man/nvme_nbft_read.2
+++ b/doc/man/nvme_nbft_read.2
@@ -1,4 +1,4 @@
-.TH "nvme_nbft_read" 9 "nvme_nbft_read" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_nbft_read" 9 "nvme_nbft_read" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_nbft_read \- Read and parse contents of an ACPI NBFT table
.SH SYNOPSIS
diff --git a/doc/man/nvme_nd_ns_fpi.2 b/doc/man/nvme_nd_ns_fpi.2
index 38ba32f..a81df35 100644
--- a/doc/man/nvme_nd_ns_fpi.2
+++ b/doc/man/nvme_nd_ns_fpi.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_nd_ns_fpi" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_nd_ns_fpi" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_nd_ns_fpi \- If a format operation is in progress, this field indicates the percentage of the namespace that remains to be formatted.
.SH SYNOPSIS
diff --git a/doc/man/nvme_next_host.2 b/doc/man/nvme_next_host.2
index fe6457b..b2b4b90 100644
--- a/doc/man/nvme_next_host.2
+++ b/doc/man/nvme_next_host.2
@@ -1,4 +1,4 @@
-.TH "nvme_next_host" 9 "nvme_next_host" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_next_host" 9 "nvme_next_host" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_next_host \- Next host iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_next_subsystem.2 b/doc/man/nvme_next_subsystem.2
index 1529bdb..8d858b7 100644
--- a/doc/man/nvme_next_subsystem.2
+++ b/doc/man/nvme_next_subsystem.2
@@ -1,4 +1,4 @@
-.TH "nvme_next_subsystem" 9 "nvme_next_subsystem" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_next_subsystem" 9 "nvme_next_subsystem" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_next_subsystem \- Next subsystem iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_attach.2 b/doc/man/nvme_ns_attach.2
index cea24a4..2e85a87 100644
--- a/doc/man/nvme_ns_attach.2
+++ b/doc/man/nvme_ns_attach.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_attach" 9 "nvme_ns_attach" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_attach" 9 "nvme_ns_attach" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_attach \- Attach or detach namespace to controller(s)
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_attach_ctrls.2 b/doc/man/nvme_ns_attach_ctrls.2
index e3abef5..68f94a8 100644
--- a/doc/man/nvme_ns_attach_ctrls.2
+++ b/doc/man/nvme_ns_attach_ctrls.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_attach_ctrls" 9 "nvme_ns_attach_ctrls" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_attach_ctrls" 9 "nvme_ns_attach_ctrls" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_attach_ctrls \- Attach namespace to controllers
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_attach_sel.2 b/doc/man/nvme_ns_attach_sel.2
index d1f3e67..f9a7377 100644
--- a/doc/man/nvme_ns_attach_sel.2
+++ b/doc/man/nvme_ns_attach_sel.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ns_attach_sel" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ns_attach_sel" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_ns_attach_sel \- Namespace Attachment - Select
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_compare.2 b/doc/man/nvme_ns_compare.2
index 37700cb..a5863ac 100644
--- a/doc/man/nvme_ns_compare.2
+++ b/doc/man/nvme_ns_compare.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_compare" 9 "nvme_ns_compare" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_compare" 9 "nvme_ns_compare" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_compare \- Compare data on a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_detach_ctrls.2 b/doc/man/nvme_ns_detach_ctrls.2
index 062e89c..9f3fc14 100644
--- a/doc/man/nvme_ns_detach_ctrls.2
+++ b/doc/man/nvme_ns_detach_ctrls.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_detach_ctrls" 9 "nvme_ns_detach_ctrls" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_detach_ctrls" 9 "nvme_ns_detach_ctrls" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_detach_ctrls \- Detach namespace from controllers
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_flush.2 b/doc/man/nvme_ns_flush.2
index dd9a0b8..67425cc 100644
--- a/doc/man/nvme_ns_flush.2
+++ b/doc/man/nvme_ns_flush.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_flush" 9 "nvme_ns_flush" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_flush" 9 "nvme_ns_flush" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_flush \- Flush data to a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_csi.2 b/doc/man/nvme_ns_get_csi.2
index 61ab0c9..5b90123 100644
--- a/doc/man/nvme_ns_get_csi.2
+++ b/doc/man/nvme_ns_get_csi.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_csi" 9 "nvme_ns_get_csi" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_csi" 9 "nvme_ns_get_csi" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_csi \- Command set identifier of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_ctrl.2 b/doc/man/nvme_ns_get_ctrl.2
index 2c3be94..20aa557 100644
--- a/doc/man/nvme_ns_get_ctrl.2
+++ b/doc/man/nvme_ns_get_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_ctrl" 9 "nvme_ns_get_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_ctrl" 9 "nvme_ns_get_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_ctrl \- &nvme_ctrl_t of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_eui64.2 b/doc/man/nvme_ns_get_eui64.2
index 2f8a8b9..ba7397e 100644
--- a/doc/man/nvme_ns_get_eui64.2
+++ b/doc/man/nvme_ns_get_eui64.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_eui64" 9 "nvme_ns_get_eui64" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_eui64" 9 "nvme_ns_get_eui64" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_eui64 \- 64-bit eui of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_fd.2 b/doc/man/nvme_ns_get_fd.2
index fee2816..197af43 100644
--- a/doc/man/nvme_ns_get_fd.2
+++ b/doc/man/nvme_ns_get_fd.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_fd" 9 "nvme_ns_get_fd" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_fd" 9 "nvme_ns_get_fd" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_fd \- Get associated file descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_firmware.2 b/doc/man/nvme_ns_get_firmware.2
index 2e314cc..4ba2a4b 100644
--- a/doc/man/nvme_ns_get_firmware.2
+++ b/doc/man/nvme_ns_get_firmware.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_firmware" 9 "nvme_ns_get_firmware" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_firmware" 9 "nvme_ns_get_firmware" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_firmware \- Firmware string of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_generic_name.2 b/doc/man/nvme_ns_get_generic_name.2
index f076891..5668933 100644
--- a/doc/man/nvme_ns_get_generic_name.2
+++ b/doc/man/nvme_ns_get_generic_name.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_generic_name" 9 "nvme_ns_get_generic_name" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_generic_name" 9 "nvme_ns_get_generic_name" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_generic_name \- Returns name of generic namespace chardev.
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_lba_count.2 b/doc/man/nvme_ns_get_lba_count.2
index dcc03c4..27f2d34 100644
--- a/doc/man/nvme_ns_get_lba_count.2
+++ b/doc/man/nvme_ns_get_lba_count.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_lba_count" 9 "nvme_ns_get_lba_count" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_lba_count" 9 "nvme_ns_get_lba_count" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_lba_count \- LBA count of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_lba_size.2 b/doc/man/nvme_ns_get_lba_size.2
index d6e6fcb..80d4f88 100644
--- a/doc/man/nvme_ns_get_lba_size.2
+++ b/doc/man/nvme_ns_get_lba_size.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_lba_size" 9 "nvme_ns_get_lba_size" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_lba_size" 9 "nvme_ns_get_lba_size" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_lba_size \- LBA size of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_lba_util.2 b/doc/man/nvme_ns_get_lba_util.2
index c34b4c6..f65e249 100644
--- a/doc/man/nvme_ns_get_lba_util.2
+++ b/doc/man/nvme_ns_get_lba_util.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_lba_util" 9 "nvme_ns_get_lba_util" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_lba_util" 9 "nvme_ns_get_lba_util" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_lba_util \- LBA utilization of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_meta_size.2 b/doc/man/nvme_ns_get_meta_size.2
index 0d15ef2..0fa0c67 100644
--- a/doc/man/nvme_ns_get_meta_size.2
+++ b/doc/man/nvme_ns_get_meta_size.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_meta_size" 9 "nvme_ns_get_meta_size" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_meta_size" 9 "nvme_ns_get_meta_size" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_meta_size \- Metadata size of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_model.2 b/doc/man/nvme_ns_get_model.2
index 2cc4f89..7cc22da 100644
--- a/doc/man/nvme_ns_get_model.2
+++ b/doc/man/nvme_ns_get_model.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_model" 9 "nvme_ns_get_model" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_model" 9 "nvme_ns_get_model" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_model \- Model of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_name.2 b/doc/man/nvme_ns_get_name.2
index 809aa5a..7729766 100644
--- a/doc/man/nvme_ns_get_name.2
+++ b/doc/man/nvme_ns_get_name.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_name" 9 "nvme_ns_get_name" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_name" 9 "nvme_ns_get_name" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_name \- sysfs name of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_nguid.2 b/doc/man/nvme_ns_get_nguid.2
index 4e8d956..92309d2 100644
--- a/doc/man/nvme_ns_get_nguid.2
+++ b/doc/man/nvme_ns_get_nguid.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_nguid" 9 "nvme_ns_get_nguid" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_nguid" 9 "nvme_ns_get_nguid" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_nguid \- 128-bit nguid of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_nsid.2 b/doc/man/nvme_ns_get_nsid.2
index 8ed328c..b4b913d 100644
--- a/doc/man/nvme_ns_get_nsid.2
+++ b/doc/man/nvme_ns_get_nsid.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_nsid" 9 "nvme_ns_get_nsid" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_nsid" 9 "nvme_ns_get_nsid" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_nsid \- NSID of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_serial.2 b/doc/man/nvme_ns_get_serial.2
index 21b802b..e89797d 100644
--- a/doc/man/nvme_ns_get_serial.2
+++ b/doc/man/nvme_ns_get_serial.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_serial" 9 "nvme_ns_get_serial" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_serial" 9 "nvme_ns_get_serial" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_serial \- Serial number of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_subsystem.2 b/doc/man/nvme_ns_get_subsystem.2
index 6b86f15..12ad11c 100644
--- a/doc/man/nvme_ns_get_subsystem.2
+++ b/doc/man/nvme_ns_get_subsystem.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_subsystem" 9 "nvme_ns_get_subsystem" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_subsystem" 9 "nvme_ns_get_subsystem" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_subsystem \- &nvme_subsystem_t of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_sysfs_dir.2 b/doc/man/nvme_ns_get_sysfs_dir.2
index 870b8d7..b48702b 100644
--- a/doc/man/nvme_ns_get_sysfs_dir.2
+++ b/doc/man/nvme_ns_get_sysfs_dir.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_sysfs_dir" 9 "nvme_ns_get_sysfs_dir" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_sysfs_dir" 9 "nvme_ns_get_sysfs_dir" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_sysfs_dir \- sysfs directory of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_get_uuid.2 b/doc/man/nvme_ns_get_uuid.2
index 265d5f1..b4d4f62 100644
--- a/doc/man/nvme_ns_get_uuid.2
+++ b/doc/man/nvme_ns_get_uuid.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_get_uuid" 9 "nvme_ns_get_uuid" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_get_uuid" 9 "nvme_ns_get_uuid" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_get_uuid \- UUID of a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_id_desc.2 b/doc/man/nvme_ns_id_desc.2
index 685765e..db9e5a2 100644
--- a/doc/man/nvme_ns_id_desc.2
+++ b/doc/man/nvme_ns_id_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_ns_id_desc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_ns_id_desc" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_ns_id_desc \- Namespace identifier type descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_id_desc_nidt.2 b/doc/man/nvme_ns_id_desc_nidt.2
index 82d116a..da7607a 100644
--- a/doc/man/nvme_ns_id_desc_nidt.2
+++ b/doc/man/nvme_ns_id_desc_nidt.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ns_id_desc_nidt" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ns_id_desc_nidt" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_ns_id_desc_nidt \- Known namespace identifier types
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_identify.2 b/doc/man/nvme_ns_identify.2
index d3fce45..ed8f754 100644
--- a/doc/man/nvme_ns_identify.2
+++ b/doc/man/nvme_ns_identify.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_identify" 9 "nvme_ns_identify" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_identify" 9 "nvme_ns_identify" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_identify \- Issue an 'identify namespace' command
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_identify_descs.2 b/doc/man/nvme_ns_identify_descs.2
index fb9ad37..796f8d0 100644
--- a/doc/man/nvme_ns_identify_descs.2
+++ b/doc/man/nvme_ns_identify_descs.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_identify_descs" 9 "nvme_ns_identify_descs" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_identify_descs" 9 "nvme_ns_identify_descs" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_identify_descs \- Issue an 'identify descriptors' command
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_list.2 b/doc/man/nvme_ns_list.2
index 7c71ee3..3914acd 100644
--- a/doc/man/nvme_ns_list.2
+++ b/doc/man/nvme_ns_list.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_ns_list" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_ns_list" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_ns_list \- Namespace List
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_metadata_type.2 b/doc/man/nvme_ns_metadata_type.2
index e50a6da..e6fa70a 100644
--- a/doc/man/nvme_ns_metadata_type.2
+++ b/doc/man/nvme_ns_metadata_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ns_metadata_type" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ns_metadata_type" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_ns_metadata_type \- Namespace Metadata Element Types
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_mgmt.2 b/doc/man/nvme_ns_mgmt.2
index 7b40ec3..9523c54 100644
--- a/doc/man/nvme_ns_mgmt.2
+++ b/doc/man/nvme_ns_mgmt.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_mgmt" 9 "nvme_ns_mgmt" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_mgmt" 9 "nvme_ns_mgmt" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_mgmt \- Issue a Namespace management command
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_mgmt_create.2 b/doc/man/nvme_ns_mgmt_create.2
index 11a842d..a94102e 100644
--- a/doc/man/nvme_ns_mgmt_create.2
+++ b/doc/man/nvme_ns_mgmt_create.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_mgmt_create" 9 "nvme_ns_mgmt_create" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_mgmt_create" 9 "nvme_ns_mgmt_create" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_mgmt_create \- Create a non attached namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_mgmt_delete.2 b/doc/man/nvme_ns_mgmt_delete.2
index 97985ab..a467a3d 100644
--- a/doc/man/nvme_ns_mgmt_delete.2
+++ b/doc/man/nvme_ns_mgmt_delete.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_mgmt_delete" 9 "nvme_ns_mgmt_delete" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_mgmt_delete" 9 "nvme_ns_mgmt_delete" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_mgmt_delete \- Delete a non attached namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_mgmt_delete_timeout.2 b/doc/man/nvme_ns_mgmt_delete_timeout.2
new file mode 100644
index 0000000..49a61b7
--- /dev/null
+++ b/doc/man/nvme_ns_mgmt_delete_timeout.2
@@ -0,0 +1,23 @@
+.TH "nvme_ns_mgmt_delete_timeout" 9 "nvme_ns_mgmt_delete_timeout" "May 2024" "libnvme API manual" LINUX
+.SH NAME
+nvme_ns_mgmt_delete_timeout \- Delete a non attached namespace with timeout
+.SH SYNOPSIS
+.B "int" nvme_ns_mgmt_delete_timeout
+.BI "(int fd " ","
+.BI "__u32 nsid " ","
+.BI "__u32 timeout " ");"
+.SH ARGUMENTS
+.IP "fd" 12
+File descriptor of nvme device
+.IP "nsid" 12
+Namespace identifier to delete
+.IP "timeout" 12
+Override the default timeout to this value in milliseconds;
+set to 0 to use the system default.
+.SH "DESCRIPTION"
+It is recommended that a namespace being deleted is not attached to any
+controller. Use the \fBnvme_ns_detach_ctrls\fP first if the namespace is still
+attached.
+.SH "RETURN"
+The nvme command status if a response was received (see
+\fIenum nvme_status_field\fP) or -1 with errno set otherwise.
diff --git a/doc/man/nvme_ns_mgmt_host_sw_specified.2 b/doc/man/nvme_ns_mgmt_host_sw_specified.2
index 86f5164..9de961e 100644
--- a/doc/man/nvme_ns_mgmt_host_sw_specified.2
+++ b/doc/man/nvme_ns_mgmt_host_sw_specified.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_ns_mgmt_host_sw_specified" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_ns_mgmt_host_sw_specified" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_ns_mgmt_host_sw_specified \- Namespace management Host Software Specified Fields.
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_mgmt_sel.2 b/doc/man/nvme_ns_mgmt_sel.2
index 1fd519c..16817f2 100644
--- a/doc/man/nvme_ns_mgmt_sel.2
+++ b/doc/man/nvme_ns_mgmt_sel.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ns_mgmt_sel" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ns_mgmt_sel" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_ns_mgmt_sel \- Namespace Management - Select
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_read.2 b/doc/man/nvme_ns_read.2
index 7f2164c..c4c703b 100644
--- a/doc/man/nvme_ns_read.2
+++ b/doc/man/nvme_ns_read.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_read" 9 "nvme_ns_read" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_read" 9 "nvme_ns_read" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_read \- Read from a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_release_fd.2 b/doc/man/nvme_ns_release_fd.2
index 9cd406d..cc09887 100644
--- a/doc/man/nvme_ns_release_fd.2
+++ b/doc/man/nvme_ns_release_fd.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_release_fd" 9 "nvme_ns_release_fd" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_release_fd" 9 "nvme_ns_release_fd" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_release_fd \- Close fd and clear fd from ns object
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_rescan.2 b/doc/man/nvme_ns_rescan.2
index bd05c54..473394a 100644
--- a/doc/man/nvme_ns_rescan.2
+++ b/doc/man/nvme_ns_rescan.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_rescan" 9 "nvme_ns_rescan" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_rescan" 9 "nvme_ns_rescan" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_rescan \- Initiate a controller rescan
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_verify.2 b/doc/man/nvme_ns_verify.2
index 665b1c3..6b0ea14 100644
--- a/doc/man/nvme_ns_verify.2
+++ b/doc/man/nvme_ns_verify.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_verify" 9 "nvme_ns_verify" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_verify" 9 "nvme_ns_verify" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_verify \- Verify data on a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_write.2 b/doc/man/nvme_ns_write.2
index 02275ed..6c833d6 100644
--- a/doc/man/nvme_ns_write.2
+++ b/doc/man/nvme_ns_write.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_write" 9 "nvme_ns_write" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_write" 9 "nvme_ns_write" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_write \- Write to a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_write_protect_cfg.2 b/doc/man/nvme_ns_write_protect_cfg.2
index 074a38e..4e97c31 100644
--- a/doc/man/nvme_ns_write_protect_cfg.2
+++ b/doc/man/nvme_ns_write_protect_cfg.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_ns_write_protect_cfg" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_ns_write_protect_cfg" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_ns_write_protect_cfg \- Write Protection - Write Protection State
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_write_uncorrectable.2 b/doc/man/nvme_ns_write_uncorrectable.2
index 5c16ed1..c620e84 100644
--- a/doc/man/nvme_ns_write_uncorrectable.2
+++ b/doc/man/nvme_ns_write_uncorrectable.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_write_uncorrectable" 9 "nvme_ns_write_uncorrectable" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_write_uncorrectable" 9 "nvme_ns_write_uncorrectable" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_write_uncorrectable \- Issus a 'write uncorrectable' command
.SH SYNOPSIS
diff --git a/doc/man/nvme_ns_write_zeros.2 b/doc/man/nvme_ns_write_zeros.2
index 21fa7ec..0b25b86 100644
--- a/doc/man/nvme_ns_write_zeros.2
+++ b/doc/man/nvme_ns_write_zeros.2
@@ -1,4 +1,4 @@
-.TH "nvme_ns_write_zeros" 9 "nvme_ns_write_zeros" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_ns_write_zeros" 9 "nvme_ns_write_zeros" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_ns_write_zeros \- Write zeros to a namespace
.SH SYNOPSIS
diff --git a/doc/man/nvme_nss_hw_err_event.2 b/doc/man/nvme_nss_hw_err_event.2
index 3d387ca..c36ca6b 100644
--- a/doc/man/nvme_nss_hw_err_event.2
+++ b/doc/man/nvme_nss_hw_err_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_nss_hw_err_event" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_nss_hw_err_event" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_nss_hw_err_event \- NVM Subsystem Hardware Error Event
.SH SYNOPSIS
diff --git a/doc/man/nvme_nvm_id_ns.2 b/doc/man/nvme_nvm_id_ns.2
index c970512..91b42a9 100644
--- a/doc/man/nvme_nvm_id_ns.2
+++ b/doc/man/nvme_nvm_id_ns.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_nvm_id_ns" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_nvm_id_ns" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_nvm_id_ns \- NVME Command Set I/O Command Set Specific Identify Namespace Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_nvm_id_ns_elbaf.2 b/doc/man/nvme_nvm_id_ns_elbaf.2
index a43a996..4569aca 100644
--- a/doc/man/nvme_nvm_id_ns_elbaf.2
+++ b/doc/man/nvme_nvm_id_ns_elbaf.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_nvm_id_ns_elbaf" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_nvm_id_ns_elbaf" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_nvm_id_ns_elbaf \- This field indicates the extended LBA format
.SH SYNOPSIS
diff --git a/doc/man/nvme_nvm_identify_ctrl.2 b/doc/man/nvme_nvm_identify_ctrl.2
index dfca1be..1b24cbd 100644
--- a/doc/man/nvme_nvm_identify_ctrl.2
+++ b/doc/man/nvme_nvm_identify_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_nvm_identify_ctrl" 9 "nvme_nvm_identify_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_nvm_identify_ctrl" 9 "nvme_nvm_identify_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_nvm_identify_ctrl \- Identify controller data
.SH SYNOPSIS
diff --git a/doc/man/nvme_nvmeset_pl_status.2 b/doc/man/nvme_nvmeset_pl_status.2
index c6d99bf..31b5e85 100644
--- a/doc/man/nvme_nvmeset_pl_status.2
+++ b/doc/man/nvme_nvmeset_pl_status.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_nvmeset_pl_status" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_nvmeset_pl_status" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_nvmeset_pl_status \- Predictable Latency Per NVM Set Log - Status
.SH SYNOPSIS
diff --git a/doc/man/nvme_nvmset_attr.2 b/doc/man/nvme_nvmset_attr.2
index f0af656..d654f9e 100644
--- a/doc/man/nvme_nvmset_attr.2
+++ b/doc/man/nvme_nvmset_attr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_nvmset_attr" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_nvmset_attr" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_nvmset_attr \- NVM Set Attributes Entry
.SH SYNOPSIS
diff --git a/doc/man/nvme_nvmset_pl_events.2 b/doc/man/nvme_nvmset_pl_events.2
index feb1f1f..5742483 100644
--- a/doc/man/nvme_nvmset_pl_events.2
+++ b/doc/man/nvme_nvmset_pl_events.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_nvmset_pl_events" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_nvmset_pl_events" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_nvmset_pl_events \- Predictable Latency Per NVM Set Log - Event Type
.SH SYNOPSIS
diff --git a/doc/man/nvme_nvmset_predictable_lat_log.2 b/doc/man/nvme_nvmset_predictable_lat_log.2
index fc05409..7dc9120 100644
--- a/doc/man/nvme_nvmset_predictable_lat_log.2
+++ b/doc/man/nvme_nvmset_predictable_lat_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_nvmset_predictable_lat_log" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_nvmset_predictable_lat_log" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_nvmset_predictable_lat_log \- Predictable Latency Mode - Deterministic Threshold Configuration Data
.SH SYNOPSIS
diff --git a/doc/man/nvme_open.2 b/doc/man/nvme_open.2
index 56f266f..55703ba 100644
--- a/doc/man/nvme_open.2
+++ b/doc/man/nvme_open.2
@@ -1,4 +1,4 @@
-.TH "nvme_open" 9 "nvme_open" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_open" 9 "nvme_open" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_open \- Open an nvme controller or namespace device
.SH SYNOPSIS
diff --git a/doc/man/nvme_passthru_cmd.2 b/doc/man/nvme_passthru_cmd.2
index 565bd5f..38149bd 100644
--- a/doc/man/nvme_passthru_cmd.2
+++ b/doc/man/nvme_passthru_cmd.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_passthru_cmd" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_passthru_cmd" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_passthru_cmd \- nvme passthrough command structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_passthru_cmd64.2 b/doc/man/nvme_passthru_cmd64.2
index 8d8ba84..0a89318 100644
--- a/doc/man/nvme_passthru_cmd64.2
+++ b/doc/man/nvme_passthru_cmd64.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_passthru_cmd64" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_passthru_cmd64" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_passthru_cmd64 \- 64-bit nvme passthrough command structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_path_get_ana_state.2 b/doc/man/nvme_path_get_ana_state.2
index 1ff2cc2..ceec0db 100644
--- a/doc/man/nvme_path_get_ana_state.2
+++ b/doc/man/nvme_path_get_ana_state.2
@@ -1,4 +1,4 @@
-.TH "nvme_path_get_ana_state" 9 "nvme_path_get_ana_state" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_path_get_ana_state" 9 "nvme_path_get_ana_state" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_path_get_ana_state \- ANA state of an nvme_path_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_path_get_ctrl.2 b/doc/man/nvme_path_get_ctrl.2
index 4b4bb78..ab5fa8d 100644
--- a/doc/man/nvme_path_get_ctrl.2
+++ b/doc/man/nvme_path_get_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_path_get_ctrl" 9 "nvme_path_get_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_path_get_ctrl" 9 "nvme_path_get_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_path_get_ctrl \- Parent controller of an nvme_path_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_path_get_name.2 b/doc/man/nvme_path_get_name.2
index e335a98..48cad51 100644
--- a/doc/man/nvme_path_get_name.2
+++ b/doc/man/nvme_path_get_name.2
@@ -1,4 +1,4 @@
-.TH "nvme_path_get_name" 9 "nvme_path_get_name" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_path_get_name" 9 "nvme_path_get_name" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_path_get_name \- sysfs name of an &nvme_path_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_path_get_ns.2 b/doc/man/nvme_path_get_ns.2
index 318162b..5105840 100644
--- a/doc/man/nvme_path_get_ns.2
+++ b/doc/man/nvme_path_get_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_path_get_ns" 9 "nvme_path_get_ns" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_path_get_ns" 9 "nvme_path_get_ns" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_path_get_ns \- Parent namespace of an nvme_path_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_path_get_sysfs_dir.2 b/doc/man/nvme_path_get_sysfs_dir.2
index b7a3f07..c910437 100644
--- a/doc/man/nvme_path_get_sysfs_dir.2
+++ b/doc/man/nvme_path_get_sysfs_dir.2
@@ -1,4 +1,4 @@
-.TH "nvme_path_get_sysfs_dir" 9 "nvme_path_get_sysfs_dir" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_path_get_sysfs_dir" 9 "nvme_path_get_sysfs_dir" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_path_get_sysfs_dir \- sysfs directory of an nvme_path_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_paths_filter.2 b/doc/man/nvme_paths_filter.2
index 2b862da..3cba004 100644
--- a/doc/man/nvme_paths_filter.2
+++ b/doc/man/nvme_paths_filter.2
@@ -1,4 +1,4 @@
-.TH "nvme_paths_filter" 9 "nvme_paths_filter" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_paths_filter" 9 "nvme_paths_filter" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_paths_filter \- Filter for paths
.SH SYNOPSIS
diff --git a/doc/man/nvme_pel_ehai.2 b/doc/man/nvme_pel_ehai.2
new file mode 100644
index 0000000..ff865c1
--- /dev/null
+++ b/doc/man/nvme_pel_ehai.2
@@ -0,0 +1,34 @@
+.TH "libnvme" 9 "enum nvme_pel_ehai" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_pel_ehai \- This field indicates the persistent event header additional information
+.SH SYNOPSIS
+enum nvme_pel_ehai {
+.br
+.BI " NVME_PEL_EHAI_PIT_SHIFT"
+,
+.br
+.br
+.BI " NVME_PEL_EHAI_RSVD_SHIFT"
+,
+.br
+.br
+.BI " NVME_PEL_EHAI_PIT_MASK"
+,
+.br
+.br
+.BI " NVME_PEL_EHAI_RSVD_MASK"
+
+};
+.SH Constants
+.IP "NVME_PEL_EHAI_PIT_SHIFT" 12
+Shift amount to get the reporting context port identifier
+from the \fIstruct nvme_persistent_event_log\fP.rci field.
+.IP "NVME_PEL_EHAI_RSVD_SHIFT" 12
+Shift amount to get the reserved reporting context
+from the \fIstruct nvme_persistent_event_log\fP.rci field.
+.IP "NVME_PEL_EHAI_PIT_MASK" 12
+Mask to get the reporting context port identifier from
+the \fIstruct nvme_st_result\fP.dsts field.
+.IP "NVME_PEL_EHAI_RSVD_MASK" 12
+Mask to get the reserved reporting context from
+the \fIstruct nvme_st_result\fP.dsts field.
diff --git a/doc/man/nvme_pel_ehai_pit.2 b/doc/man/nvme_pel_ehai_pit.2
new file mode 100644
index 0000000..1078754
--- /dev/null
+++ b/doc/man/nvme_pel_ehai_pit.2
@@ -0,0 +1,30 @@
+.TH "libnvme" 9 "enum nvme_pel_ehai_pit" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_pel_ehai_pit \- Persistent Event Header Additional Information - Port Identifier Type
+.SH SYNOPSIS
+enum nvme_pel_ehai_pit {
+.br
+.BI " NVME_PEL_EHAI_PIT_NOT_REPORTED"
+,
+.br
+.br
+.BI " NVME_PEL_EHAI_PIT_NSS_PORT"
+,
+.br
+.br
+.BI " NVME_PEL_EHAI_PIT_NMI_PORT"
+,
+.br
+.br
+.BI " NVME_PEL_EHAI_PIT_NOT_ASSOCIATED"
+
+};
+.SH Constants
+.IP "NVME_PEL_EHAI_PIT_NOT_REPORTED" 12
+PIT not reported and PELPID does not apply
+.IP "NVME_PEL_EHAI_PIT_NSS_PORT" 12
+NVM subsystem port
+.IP "NVME_PEL_EHAI_PIT_NMI_PORT" 12
+NVMe-MI port
+.IP "NVME_PEL_EHAI_PIT_NOT_ASSOCIATED" 12
+Event not associated with any port and PELPID does not apply
diff --git a/doc/man/nvme_pel_rci.2 b/doc/man/nvme_pel_rci.2
new file mode 100644
index 0000000..82c1af0
--- /dev/null
+++ b/doc/man/nvme_pel_rci.2
@@ -0,0 +1,62 @@
+.TH "libnvme" 9 "enum nvme_pel_rci" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_pel_rci \- This field indicates the persistent event log reporting context
+.SH SYNOPSIS
+enum nvme_pel_rci {
+.br
+.BI " NVME_PEL_RCI_RCPID_SHIFT"
+,
+.br
+.br
+.BI " NVME_PEL_RCI_RCPIT_SHIFT"
+,
+.br
+.br
+.BI " NVME_PEL_RCI_RCE_SHIFT"
+,
+.br
+.br
+.BI " NVME_PEL_RCI_RSVD_SHIFT"
+,
+.br
+.br
+.BI " NVME_PEL_RCI_RCPID_MASK"
+,
+.br
+.br
+.BI " NVME_PEL_RCI_RCPIT_MASK"
+,
+.br
+.br
+.BI " NVME_PEL_RCI_RCE_MASK"
+,
+.br
+.br
+.BI " NVME_PEL_RCI_RSVD_MASK"
+
+};
+.SH Constants
+.IP "NVME_PEL_RCI_RCPID_SHIFT" 12
+Shift amount to get the reporting context port identifier
+from the \fIstruct nvme_persistent_event_log\fP.rci field.
+.IP "NVME_PEL_RCI_RCPIT_SHIFT" 12
+Shift amount to get the reporting context port identifier
+type from the \fIstruct nvme_persistent_event_log\fP.rci field.
+.IP "NVME_PEL_RCI_RCE_SHIFT" 12
+Shift amount to get the reporting context exists
+from the \fIstruct nvme_persistent_event_log\fP.rci field.
+.IP "NVME_PEL_RCI_RSVD_SHIFT" 12
+Shift amount to get the reserved reporting context
+from the \fIstruct nvme_persistent_event_log\fP.rci field.
+.IP "NVME_PEL_RCI_RCPID_MASK" 12
+Mask to get the reporting context port identifier from
+the \fIstruct nvme_persistent_event_log\fP.rci field.
+.IP "NVME_PEL_RCI_RCPIT_MASK" 12
+Mask to get the reporting context port identifier type from
+the \fIstruct nvme_persistent_event_log\fP.rci field.
+.IP "NVME_PEL_RCI_RCE_MASK" 12
+Mask to get the reporting context exists from
+the \fIstruct nvme_persistent_event_log\fP.rci field.
+.IP "NVME_PEL_RCI_RSVD_MASK" 12
+Mask to get the reserved reporting context from
+the \fIstruct nvme_persistent_event_log\fP.rci field.
diff --git a/doc/man/nvme_pel_rci_rcpit.2 b/doc/man/nvme_pel_rci_rcpit.2
new file mode 100644
index 0000000..b4c9bf6
--- /dev/null
+++ b/doc/man/nvme_pel_rci_rcpit.2
@@ -0,0 +1,24 @@
+.TH "libnvme" 9 "enum nvme_pel_rci_rcpit" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_pel_rci_rcpit \- Persistent Event Log Reporting Context - Port Identifier Type
+.SH SYNOPSIS
+enum nvme_pel_rci_rcpit {
+.br
+.BI " NVME_PEL_RCI_RCPIT_NOT_EXIST"
+,
+.br
+.br
+.BI " NVME_PEL_RCI_RCPIT_EST_PORT"
+,
+.br
+.br
+.BI " NVME_PEL_RCI_RCPIT_EST_ME"
+
+};
+.SH Constants
+.IP "NVME_PEL_RCI_RCPIT_NOT_EXIST" 12
+Does not already exist
+.IP "NVME_PEL_RCI_RCPIT_EST_PORT" 12
+Established by an NVM subsystem port
+.IP "NVME_PEL_RCI_RCPIT_EST_ME" 12
+Established by a Management Endpoint
diff --git a/doc/man/nvme_persistent_event_entry.2 b/doc/man/nvme_persistent_event_entry.2
index 8a47c92..01e4287 100644
--- a/doc/man/nvme_persistent_event_entry.2
+++ b/doc/man/nvme_persistent_event_entry.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_persistent_event_entry" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_persistent_event_entry" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_persistent_event_entry \- Persistent Event
.SH SYNOPSIS
diff --git a/doc/man/nvme_persistent_event_log.2 b/doc/man/nvme_persistent_event_log.2
index a8dc951..1b439ea 100644
--- a/doc/man/nvme_persistent_event_log.2
+++ b/doc/man/nvme_persistent_event_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_persistent_event_log" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_persistent_event_log" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_persistent_event_log \- Persistent Event Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_persistent_event_types.2 b/doc/man/nvme_persistent_event_types.2
index ea6b6d2..87df22e 100644
--- a/doc/man/nvme_persistent_event_types.2
+++ b/doc/man/nvme_persistent_event_types.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_persistent_event_types" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_persistent_event_types" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_persistent_event_types \- Persistent event log events
.SH SYNOPSIS
diff --git a/doc/man/nvme_pevent_log_action.2 b/doc/man/nvme_pevent_log_action.2
index 2e09053..7a03c4f 100644
--- a/doc/man/nvme_pevent_log_action.2
+++ b/doc/man/nvme_pevent_log_action.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_pevent_log_action" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_pevent_log_action" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_pevent_log_action \- Persistent Event Log - Action
.SH SYNOPSIS
diff --git a/doc/man/nvme_phy_rx_eom_log.2 b/doc/man/nvme_phy_rx_eom_log.2
index a90bac2..145bea6 100644
--- a/doc/man/nvme_phy_rx_eom_log.2
+++ b/doc/man/nvme_phy_rx_eom_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_phy_rx_eom_log" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_phy_rx_eom_log" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_phy_rx_eom_log \- Physical Interface Receiver Eye Opening Measurement Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_phy_rx_eom_progress.2 b/doc/man/nvme_phy_rx_eom_progress.2
index 6fcc680..9676521 100644
--- a/doc/man/nvme_phy_rx_eom_progress.2
+++ b/doc/man/nvme_phy_rx_eom_progress.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_phy_rx_eom_progress" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_phy_rx_eom_progress" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_phy_rx_eom_progress \- EOM In Progress Values
.SH SYNOPSIS
diff --git a/doc/man/nvme_plm_config.2 b/doc/man/nvme_plm_config.2
index ec3f1a8..8df20f4 100644
--- a/doc/man/nvme_plm_config.2
+++ b/doc/man/nvme_plm_config.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_plm_config" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_plm_config" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_plm_config \- Predictable Latency Mode - Deterministic Threshold Configuration Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_pmr_size.2 b/doc/man/nvme_pmr_size.2
index 8ca8b55..fa362e2 100644
--- a/doc/man/nvme_pmr_size.2
+++ b/doc/man/nvme_pmr_size.2
@@ -1,4 +1,4 @@
-.TH "nvme_pmr_size" 9 "nvme_pmr_size" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_pmr_size" 9 "nvme_pmr_size" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_pmr_size \- Calculate size of persistent memory region elasticity buffer
.SH SYNOPSIS
diff --git a/doc/man/nvme_pmr_throughput.2 b/doc/man/nvme_pmr_throughput.2
index 115c54c..fefe9ec 100644
--- a/doc/man/nvme_pmr_throughput.2
+++ b/doc/man/nvme_pmr_throughput.2
@@ -1,4 +1,4 @@
-.TH "nvme_pmr_throughput" 9 "nvme_pmr_throughput" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_pmr_throughput" 9 "nvme_pmr_throughput" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_pmr_throughput \- Calculate throughput of persistent memory buffer
.SH SYNOPSIS
diff --git a/doc/man/nvme_pmrcap.2 b/doc/man/nvme_pmrcap.2
new file mode 100644
index 0000000..4217328
--- /dev/null
+++ b/doc/man/nvme_pmrcap.2
@@ -0,0 +1,114 @@
+.TH "libnvme" 9 "enum nvme_pmrcap" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_pmrcap \- This field indicates the persistent memory region capabilities
+.SH SYNOPSIS
+enum nvme_pmrcap {
+.br
+.BI " NVME_PMRCAP_RDS_SHIFT"
+,
+.br
+.br
+.BI " NVME_PMRCAP_WDS_SHIFT"
+,
+.br
+.br
+.BI " NVME_PMRCAP_BIR_SHIFT"
+,
+.br
+.br
+.BI " NVME_PMRCAP_PMRTU_SHIFT"
+,
+.br
+.br
+.BI " NVME_PMRCAP_PMRWBM_SHIFT"
+,
+.br
+.br
+.BI " NVME_PMRCAP_PMRTO_SHIFT"
+,
+.br
+.br
+.BI " NVME_PMRCAP_CMSS_SHIFT"
+,
+.br
+.br
+.BI " NVME_PMRCAP_PMRWMB_SHIFT"
+,
+.br
+.br
+.BI " NVME_PMRCAP_RDS_MASK"
+,
+.br
+.br
+.BI " NVME_PMRCAP_WDS_MASK"
+,
+.br
+.br
+.BI " NVME_PMRCAP_BIR_MASK"
+,
+.br
+.br
+.BI " NVME_PMRCAP_PMRTU_MASK"
+,
+.br
+.br
+.BI " NVME_PMRCAP_PMRWBM_MASK"
+,
+.br
+.br
+.BI " NVME_PMRCAP_PMRTO_MASK"
+,
+.br
+.br
+.BI " NVME_PMRCAP_CMSS_MASK"
+,
+.br
+.br
+.BI " NVME_PMRCAP_PMRWMB_MASK"
+,
+.br
+.br
+.BI " NVME_PMRCAP_PMRTU_500MS"
+,
+.br
+.br
+.BI " NVME_PMRCAP_PMRTU_60S"
+
+};
+.SH Constants
+.IP "NVME_PMRCAP_RDS_SHIFT" 12
+Shift amount to get the read data support
+.IP "NVME_PMRCAP_WDS_SHIFT" 12
+Shift amount to get the write data support
+.IP "NVME_PMRCAP_BIR_SHIFT" 12
+Shift amount to get the base indicator register
+.IP "NVME_PMRCAP_PMRTU_SHIFT" 12
+Shift amount to get the persistent memory region time units
+.IP "NVME_PMRCAP_PMRWBM_SHIFT" 12
+Shift amount to get the persistent memory region write barrier mechanisms
+.IP "NVME_PMRCAP_PMRTO_SHIFT" 12
+Shift amount to get the persistent memory region timeout
+.IP "NVME_PMRCAP_CMSS_SHIFT" 12
+Shift amount to get the controller memory space supported
+.IP "NVME_PMRCAP_PMRWMB_SHIFT" 12
+Deprecated shift amount to get the persistent memory region write barrier mechanisms
+.IP "NVME_PMRCAP_RDS_MASK" 12
+Mask to get the read data support
+.IP "NVME_PMRCAP_WDS_MASK" 12
+Mask to get the write data support
+.IP "NVME_PMRCAP_BIR_MASK" 12
+Mask to get the base indicator register
+.IP "NVME_PMRCAP_PMRTU_MASK" 12
+Mask to get the persistent memory region time units
+.IP "NVME_PMRCAP_PMRWBM_MASK" 12
+Mask to get the persistent memory region write barrier mechanisms
+.IP "NVME_PMRCAP_PMRTO_MASK" 12
+Mask to get the persistent memory region timeout
+.IP "NVME_PMRCAP_CMSS_MASK" 12
+Mask to get the controller memory space supported
+.IP "NVME_PMRCAP_PMRWMB_MASK" 12
+Deprecated mask to get the persistent memory region write barrier mechanisms
+.IP "NVME_PMRCAP_PMRTU_500MS" 12
+500 milliseconds
+.IP "NVME_PMRCAP_PMRTU_60S" 12
+minutes
diff --git a/doc/man/nvme_pmrctl.2 b/doc/man/nvme_pmrctl.2
new file mode 100644
index 0000000..e568a6d
--- /dev/null
+++ b/doc/man/nvme_pmrctl.2
@@ -0,0 +1,18 @@
+.TH "libnvme" 9 "enum nvme_pmrctl" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_pmrctl \- This field indicates the persistent memory region control
+.SH SYNOPSIS
+enum nvme_pmrctl {
+.br
+.BI " NVME_PMRCTL_EN_SHIFT"
+,
+.br
+.br
+.BI " NVME_PMRCTL_EN_MASK"
+
+};
+.SH Constants
+.IP "NVME_PMRCTL_EN_SHIFT" 12
+Shift amount to get the enable
+.IP "NVME_PMRCTL_EN_MASK" 12
+Mask to get the enable
diff --git a/doc/man/nvme_pmrebs.2 b/doc/man/nvme_pmrebs.2
new file mode 100644
index 0000000..a69a246
--- /dev/null
+++ b/doc/man/nvme_pmrebs.2
@@ -0,0 +1,66 @@
+.TH "libnvme" 9 "enum nvme_pmrebs" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_pmrebs \- This field indicates the persistent memory region elasticity buffer size
+.SH SYNOPSIS
+enum nvme_pmrebs {
+.br
+.BI " NVME_PMREBS_PMRSZU_SHIFT"
+,
+.br
+.br
+.BI " NVME_PMREBS_RBB_SHIFT"
+,
+.br
+.br
+.BI " NVME_PMREBS_PMRWBZ_SHIFT"
+,
+.br
+.br
+.BI " NVME_PMREBS_PMRSZU_MASK"
+,
+.br
+.br
+.BI " NVME_PMREBS_RBB_MASK"
+,
+.br
+.br
+.BI " NVME_PMREBS_PMRWBZ_MASK"
+,
+.br
+.br
+.BI " NVME_PMREBS_PMRSZU_B"
+,
+.br
+.br
+.BI " NVME_PMREBS_PMRSZU_1K"
+,
+.br
+.br
+.BI " NVME_PMREBS_PMRSZU_1M"
+,
+.br
+.br
+.BI " NVME_PMREBS_PMRSZU_1G"
+
+};
+.SH Constants
+.IP "NVME_PMREBS_PMRSZU_SHIFT" 12
+Shift amount to get the PMR elasticity buffer size units
+.IP "NVME_PMREBS_RBB_SHIFT" 12
+Shift amount to get the read bypass behavior
+.IP "NVME_PMREBS_PMRWBZ_SHIFT" 12
+Shift amount to get the PMR elasticity buffer size base
+.IP "NVME_PMREBS_PMRSZU_MASK" 12
+Mask to get the PMR elasticity buffer size units
+.IP "NVME_PMREBS_RBB_MASK" 12
+Mask to get the read bypass behavior
+.IP "NVME_PMREBS_PMRWBZ_MASK" 12
+Mask to get the PMR elasticity buffer size base
+.IP "NVME_PMREBS_PMRSZU_B" 12
+Bytes
+.IP "NVME_PMREBS_PMRSZU_1K" 12
+1 KiB
+.IP "NVME_PMREBS_PMRSZU_1M" 12
+1 MiB
+.IP "NVME_PMREBS_PMRSZU_1G" 12
+1 GiB
diff --git a/doc/man/nvme_pmrmsc.2 b/doc/man/nvme_pmrmsc.2
new file mode 100644
index 0000000..cdd68a3
--- /dev/null
+++ b/doc/man/nvme_pmrmsc.2
@@ -0,0 +1,24 @@
+.TH "libnvme" 9 "enum nvme_pmrmsc" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_pmrmsc \- This field indicates the persistent memory region memory space control
+.SH SYNOPSIS
+enum nvme_pmrmsc {
+.br
+.BI " NVME_PMRMSC_CMSE_SHIFT"
+,
+.br
+.br
+.BI " NVME_PMRMSC_CBA_SHIFT"
+,
+.br
+.br
+.BI " NVME_PMRMSC_CMSE_MASK"
+
+};
+.SH Constants
+.IP "NVME_PMRMSC_CMSE_SHIFT" 12
+Shift amount to get the controller memory space enable
+.IP "NVME_PMRMSC_CBA_SHIFT" 12
+Shift amount to get the controller base address
+.IP "NVME_PMRMSC_CMSE_MASK" 12
+Mask to get the controller memory space enable
diff --git a/doc/man/nvme_pmrsts.2 b/doc/man/nvme_pmrsts.2
new file mode 100644
index 0000000..d198368
--- /dev/null
+++ b/doc/man/nvme_pmrsts.2
@@ -0,0 +1,54 @@
+.TH "libnvme" 9 "enum nvme_pmrsts" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_pmrsts \- This field indicates the persistent memory region status
+.SH SYNOPSIS
+enum nvme_pmrsts {
+.br
+.BI " NVME_PMRSTS_ERR_SHIFT"
+,
+.br
+.br
+.BI " NVME_PMRSTS_NRDY_SHIFT"
+,
+.br
+.br
+.BI " NVME_PMRSTS_HSTS_SHIFT"
+,
+.br
+.br
+.BI " NVME_PMRSTS_CBAI_SHIFT"
+,
+.br
+.br
+.BI " NVME_PMRSTS_ERR_MASK"
+,
+.br
+.br
+.BI " NVME_PMRSTS_NRDY_MASK"
+,
+.br
+.br
+.BI " NVME_PMRSTS_HSTS_MASK"
+,
+.br
+.br
+.BI " NVME_PMRSTS_CBAI_MASK"
+
+};
+.SH Constants
+.IP "NVME_PMRSTS_ERR_SHIFT" 12
+Shift amount to get the error
+.IP "NVME_PMRSTS_NRDY_SHIFT" 12
+Shift amount to get the not ready
+.IP "NVME_PMRSTS_HSTS_SHIFT" 12
+Shift amount to get the health status
+.IP "NVME_PMRSTS_CBAI_SHIFT" 12
+Shift amount to get the controller base address invalid
+.IP "NVME_PMRSTS_ERR_MASK" 12
+Mask to get the error
+.IP "NVME_PMRSTS_NRDY_MASK" 12
+Mask to get the not ready
+.IP "NVME_PMRSTS_HSTS_MASK" 12
+Mask to get the health status
+.IP "NVME_PMRSTS_CBAI_MASK" 12
+Mask to get the controller base address invalid
diff --git a/doc/man/nvme_pmrswtp.2 b/doc/man/nvme_pmrswtp.2
new file mode 100644
index 0000000..c6490fc
--- /dev/null
+++ b/doc/man/nvme_pmrswtp.2
@@ -0,0 +1,54 @@
+.TH "libnvme" 9 "enum nvme_pmrswtp" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_pmrswtp \- This field indicates the persistent memory region sustained write throughput
+.SH SYNOPSIS
+enum nvme_pmrswtp {
+.br
+.BI " NVME_PMRSWTP_PMRSWTU_SHIFT"
+,
+.br
+.br
+.BI " NVME_PMRSWTP_PMRSWTV_SHIFT"
+,
+.br
+.br
+.BI " NVME_PMRSWTP_PMRSWTU_MASK"
+,
+.br
+.br
+.BI " NVME_PMRSWTP_PMRSWTV_MASK"
+,
+.br
+.br
+.BI " NVME_PMRSWTP_PMRSWTU_BPS"
+,
+.br
+.br
+.BI " NVME_PMRSWTP_PMRSWTU_KBPS"
+,
+.br
+.br
+.BI " NVME_PMRSWTP_PMRSWTU_MBPS"
+,
+.br
+.br
+.BI " NVME_PMRSWTP_PMRSWTU_GBPS"
+
+};
+.SH Constants
+.IP "NVME_PMRSWTP_PMRSWTU_SHIFT" 12
+Shift amount to get the PMR sustained write throughput units
+.IP "NVME_PMRSWTP_PMRSWTV_SHIFT" 12
+Shift amount to get the PMR sustained write throughput
+.IP "NVME_PMRSWTP_PMRSWTU_MASK" 12
+Mask to get the PMR sustained write throughput units
+.IP "NVME_PMRSWTP_PMRSWTV_MASK" 12
+Mask to get the PMR sustained write throughput
+.IP "NVME_PMRSWTP_PMRSWTU_BPS" 12
+Bytes per second
+.IP "NVME_PMRSWTP_PMRSWTU_KBPS" 12
+1 KiB / s
+.IP "NVME_PMRSWTP_PMRSWTU_MBPS" 12
+1 MiB / s
+.IP "NVME_PMRSWTP_PMRSWTU_GBPS" 12
+1 GiB / s
diff --git a/doc/man/nvme_power_on_reset_info_list.2 b/doc/man/nvme_power_on_reset_info_list.2
index 89797e7..9e52480 100644
--- a/doc/man/nvme_power_on_reset_info_list.2
+++ b/doc/man/nvme_power_on_reset_info_list.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_power_on_reset_info_list" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_power_on_reset_info_list" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_power_on_reset_info_list \- Controller Reset Information
.SH SYNOPSIS
diff --git a/doc/man/nvme_primary_ctrl_cap.2 b/doc/man/nvme_primary_ctrl_cap.2
index b1bd3eb..ea04194 100644
--- a/doc/man/nvme_primary_ctrl_cap.2
+++ b/doc/man/nvme_primary_ctrl_cap.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_primary_ctrl_cap" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_primary_ctrl_cap" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_primary_ctrl_cap \- Identify - Controller Capabilities Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_psd_flags.2 b/doc/man/nvme_psd_flags.2
index 6f2fec9..e021bac 100644
--- a/doc/man/nvme_psd_flags.2
+++ b/doc/man/nvme_psd_flags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_psd_flags" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_psd_flags" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_psd_flags \- Possible flag values in nvme power state descriptor
.SH SYNOPSIS
diff --git a/doc/man/nvme_psd_power_scale.2 b/doc/man/nvme_psd_power_scale.2
index 216728f..696f131 100644
--- a/doc/man/nvme_psd_power_scale.2
+++ b/doc/man/nvme_psd_power_scale.2
@@ -1,4 +1,4 @@
-.TH "nvme_psd_power_scale" 9 "nvme_psd_power_scale" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_psd_power_scale" 9 "nvme_psd_power_scale" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_psd_power_scale \- power scale occupies the upper 3 bits
.SH SYNOPSIS
diff --git a/doc/man/nvme_psd_ps.2 b/doc/man/nvme_psd_ps.2
index 1e80665..b52dc26 100644
--- a/doc/man/nvme_psd_ps.2
+++ b/doc/man/nvme_psd_ps.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_psd_ps" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_psd_ps" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_psd_ps \- Known values for &struct nvme_psd %ips and %aps. Use with nvme_psd_power_scale() to extract the power scale field to match this enum.
.SH SYNOPSIS
diff --git a/doc/man/nvme_psd_workload.2 b/doc/man/nvme_psd_workload.2
index 214667e..4028e7a 100644
--- a/doc/man/nvme_psd_workload.2
+++ b/doc/man/nvme_psd_workload.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_psd_workload" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_psd_workload" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_psd_workload \- Specifies a workload hint in the Power Management Feature (see &struct nvme_psd.apw) to inform the NVM subsystem or indicate the conditions for the active power level.
.SH SYNOPSIS
diff --git a/doc/man/nvme_read.2 b/doc/man/nvme_read.2
index 28415c7..a917fd0 100644
--- a/doc/man/nvme_read.2
+++ b/doc/man/nvme_read.2
@@ -1,4 +1,4 @@
-.TH "nvme_read" 9 "nvme_read" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_read" 9 "nvme_read" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_read \- Submit an nvme user read command
.SH SYNOPSIS
diff --git a/doc/man/nvme_read_config.2 b/doc/man/nvme_read_config.2
index 2647839..ad4f6c9 100644
--- a/doc/man/nvme_read_config.2
+++ b/doc/man/nvme_read_config.2
@@ -1,4 +1,4 @@
-.TH "nvme_read_config" 9 "nvme_read_config" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_read_config" 9 "nvme_read_config" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_read_config \- Read NVMe JSON configuration file
.SH SYNOPSIS
diff --git a/doc/man/nvme_read_key.2 b/doc/man/nvme_read_key.2
new file mode 100644
index 0000000..4556a7d
--- /dev/null
+++ b/doc/man/nvme_read_key.2
@@ -0,0 +1,23 @@
+.TH "nvme_read_key" 9 "nvme_read_key" "May 2024" "libnvme API manual" LINUX
+.SH NAME
+nvme_read_key \- Read key raw data
+.SH SYNOPSIS
+.B "unsigned char *" nvme_read_key
+.BI "(long keyring_id " ","
+.BI "long key_id " ","
+.BI "int *len " ");"
+.SH ARGUMENTS
+.IP "keyring_id" 12
+Id of the keyring holding key_id
+.IP "key_id" 12
+Key id
+.IP "len" 12
+Length of the returned data
+.SH "DESCRIPTION"
+Links the keyring specified by \fIkeyring_id\fP into the session
+keyring and reads the payload of the key specified by \fIkey_id\fP.
+\fIlen\fP holds the size of the returned buffer.
+If \fIkeyring\fP is 0 the default keyring '.nvme' is used.
+.SH "RETURN"
+Pointer to the payload on success,
+or NULL with errno set otherwise.
diff --git a/doc/man/nvme_refresh_topology.2 b/doc/man/nvme_refresh_topology.2
index 465a824..0248607 100644
--- a/doc/man/nvme_refresh_topology.2
+++ b/doc/man/nvme_refresh_topology.2
@@ -1,4 +1,4 @@
-.TH "nvme_refresh_topology" 9 "nvme_refresh_topology" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_refresh_topology" 9 "nvme_refresh_topology" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_refresh_topology \- Refresh nvme_root_t object contents
.SH SYNOPSIS
diff --git a/doc/man/nvme_register_offsets.2 b/doc/man/nvme_register_offsets.2
index 692443b..414bd0b 100644
--- a/doc/man/nvme_register_offsets.2
+++ b/doc/man/nvme_register_offsets.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_register_offsets" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_register_offsets" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_register_offsets \- controller registers for all transports. This is the layout of BAR0/1 for PCIe, and properties for fabrics.
.SH SYNOPSIS
diff --git a/doc/man/nvme_registered_ctrl.2 b/doc/man/nvme_registered_ctrl.2
index ea8a9fd..9596d93 100644
--- a/doc/man/nvme_registered_ctrl.2
+++ b/doc/man/nvme_registered_ctrl.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_registered_ctrl" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_registered_ctrl" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_registered_ctrl \- Registered Controller Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_registered_ctrl_ext.2 b/doc/man/nvme_registered_ctrl_ext.2
index e48dc7b..ac8d4c9 100644
--- a/doc/man/nvme_registered_ctrl_ext.2
+++ b/doc/man/nvme_registered_ctrl_ext.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_registered_ctrl_ext" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_registered_ctrl_ext" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_registered_ctrl_ext \- Registered Controller Extended Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_rescan_ctrl.2 b/doc/man/nvme_rescan_ctrl.2
index 0466205..b97e047 100644
--- a/doc/man/nvme_rescan_ctrl.2
+++ b/doc/man/nvme_rescan_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_rescan_ctrl" 9 "nvme_rescan_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_rescan_ctrl" 9 "nvme_rescan_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_rescan_ctrl \- Rescan an existing controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_acquire.2 b/doc/man/nvme_resv_acquire.2
index 310b645..048ef31 100644
--- a/doc/man/nvme_resv_acquire.2
+++ b/doc/man/nvme_resv_acquire.2
@@ -1,4 +1,4 @@
-.TH "nvme_resv_acquire" 9 "nvme_resv_acquire" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_resv_acquire" 9 "nvme_resv_acquire" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_resv_acquire \- Send an nvme reservation acquire
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_cptpl.2 b/doc/man/nvme_resv_cptpl.2
index 074e5f7..738d666 100644
--- a/doc/man/nvme_resv_cptpl.2
+++ b/doc/man/nvme_resv_cptpl.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_resv_cptpl" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_resv_cptpl" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_resv_cptpl \- Reservation Register - Change Persist Through Power Loss State
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_notification_log.2 b/doc/man/nvme_resv_notification_log.2
index 5da53e1..c8e38c4 100644
--- a/doc/man/nvme_resv_notification_log.2
+++ b/doc/man/nvme_resv_notification_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_resv_notification_log" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_resv_notification_log" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_resv_notification_log \- Reservation Notification Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_notify_rnlpt.2 b/doc/man/nvme_resv_notify_rnlpt.2
index 817578e..0d1399e 100644
--- a/doc/man/nvme_resv_notify_rnlpt.2
+++ b/doc/man/nvme_resv_notify_rnlpt.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_resv_notify_rnlpt" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_resv_notify_rnlpt" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_resv_notify_rnlpt \- Reservation Notification Log - Reservation Notification Log Page Type
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_racqa.2 b/doc/man/nvme_resv_racqa.2
index f813c56..c2b0c1c 100644
--- a/doc/man/nvme_resv_racqa.2
+++ b/doc/man/nvme_resv_racqa.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_resv_racqa" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_resv_racqa" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_resv_racqa \- Reservation Acquire - Reservation Acquire Action
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_register.2 b/doc/man/nvme_resv_register.2
index 8c7a397..785a06e 100644
--- a/doc/man/nvme_resv_register.2
+++ b/doc/man/nvme_resv_register.2
@@ -1,4 +1,4 @@
-.TH "nvme_resv_register" 9 "nvme_resv_register" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_resv_register" 9 "nvme_resv_register" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_resv_register \- Send an nvme reservation register
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_release.2 b/doc/man/nvme_resv_release.2
index ba48b42..aa77ef7 100644
--- a/doc/man/nvme_resv_release.2
+++ b/doc/man/nvme_resv_release.2
@@ -1,4 +1,4 @@
-.TH "nvme_resv_release" 9 "nvme_resv_release" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_resv_release" 9 "nvme_resv_release" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_resv_release \- Send an nvme reservation release
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_report.2 b/doc/man/nvme_resv_report.2
index 8a0de97..1e8afbf 100644
--- a/doc/man/nvme_resv_report.2
+++ b/doc/man/nvme_resv_report.2
@@ -1,4 +1,4 @@
-.TH "nvme_resv_report" 9 "nvme_resv_report" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_resv_report" 9 "nvme_resv_report" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_resv_report \- Send an nvme reservation report
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_rrega.2 b/doc/man/nvme_resv_rrega.2
index aae8270..c11993b 100644
--- a/doc/man/nvme_resv_rrega.2
+++ b/doc/man/nvme_resv_rrega.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_resv_rrega" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_resv_rrega" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_resv_rrega \- Reservation Register - Reservation Register Action
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_rrela.2 b/doc/man/nvme_resv_rrela.2
index 3a0dbb3..6e515e7 100644
--- a/doc/man/nvme_resv_rrela.2
+++ b/doc/man/nvme_resv_rrela.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_resv_rrela" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_resv_rrela" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_resv_rrela \- Reservation Release - Reservation Release Action
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_rtype.2 b/doc/man/nvme_resv_rtype.2
index 1407583..2781699 100644
--- a/doc/man/nvme_resv_rtype.2
+++ b/doc/man/nvme_resv_rtype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_resv_rtype" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_resv_rtype" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_resv_rtype \- Reservation Type Encoding
.SH SYNOPSIS
diff --git a/doc/man/nvme_resv_status.2 b/doc/man/nvme_resv_status.2
index 1d02777..7f549cd 100644
--- a/doc/man/nvme_resv_status.2
+++ b/doc/man/nvme_resv_status.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_resv_status" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_resv_status" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_resv_status \- Reservation Status Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_sanitize_compln_event.2 b/doc/man/nvme_sanitize_compln_event.2
index b192923..857ce30 100644
--- a/doc/man/nvme_sanitize_compln_event.2
+++ b/doc/man/nvme_sanitize_compln_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_sanitize_compln_event" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_sanitize_compln_event" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_sanitize_compln_event \- Sanitize Completion Event Data
.SH SYNOPSIS
diff --git a/doc/man/nvme_sanitize_log_page.2 b/doc/man/nvme_sanitize_log_page.2
index ee300b2..1284659 100644
--- a/doc/man/nvme_sanitize_log_page.2
+++ b/doc/man/nvme_sanitize_log_page.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_sanitize_log_page" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_sanitize_log_page" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_sanitize_log_page \- Sanitize Status (Log Identifier 81h)
.SH SYNOPSIS
diff --git a/doc/man/nvme_sanitize_nvm.2 b/doc/man/nvme_sanitize_nvm.2
index 05f59a1..e4c796b 100644
--- a/doc/man/nvme_sanitize_nvm.2
+++ b/doc/man/nvme_sanitize_nvm.2
@@ -1,4 +1,4 @@
-.TH "nvme_sanitize_nvm" 9 "nvme_sanitize_nvm" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_sanitize_nvm" 9 "nvme_sanitize_nvm" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_sanitize_nvm \- Start a sanitize operation
.SH SYNOPSIS
diff --git a/doc/man/nvme_sanitize_sanact.2 b/doc/man/nvme_sanitize_sanact.2
index dc9b4c0..58f677d 100644
--- a/doc/man/nvme_sanitize_sanact.2
+++ b/doc/man/nvme_sanitize_sanact.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_sanitize_sanact" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_sanitize_sanact" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_sanitize_sanact \- Sanitize Action
.SH SYNOPSIS
diff --git a/doc/man/nvme_sanitize_sstat.2 b/doc/man/nvme_sanitize_sstat.2
index f337b63..84f3942 100644
--- a/doc/man/nvme_sanitize_sstat.2
+++ b/doc/man/nvme_sanitize_sstat.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_sanitize_sstat" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_sanitize_sstat" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_sanitize_sstat \- Sanitize Status (SSTAT)
.SH SYNOPSIS
diff --git a/doc/man/nvme_sanitize_start_event.2 b/doc/man/nvme_sanitize_start_event.2
index f58da81..8b29a87 100644
--- a/doc/man/nvme_sanitize_start_event.2
+++ b/doc/man/nvme_sanitize_start_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_sanitize_start_event" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_sanitize_start_event" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_sanitize_start_event \- Sanitize Start Event Data
.SH SYNOPSIS
diff --git a/doc/man/nvme_scan.2 b/doc/man/nvme_scan.2
index 702aa24..84bad0b 100644
--- a/doc/man/nvme_scan.2
+++ b/doc/man/nvme_scan.2
@@ -1,4 +1,4 @@
-.TH "nvme_scan" 9 "nvme_scan" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_scan" 9 "nvme_scan" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_scan \- Scan NVMe topology
.SH SYNOPSIS
diff --git a/doc/man/nvme_scan_ctrl.2 b/doc/man/nvme_scan_ctrl.2
index 4b58e11..8fb1431 100644
--- a/doc/man/nvme_scan_ctrl.2
+++ b/doc/man/nvme_scan_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_scan_ctrl" 9 "nvme_scan_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_scan_ctrl" 9 "nvme_scan_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_scan_ctrl \- Scan on a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_scan_ctrl_namespace_paths.2 b/doc/man/nvme_scan_ctrl_namespace_paths.2
index be53a33..e31039e 100644
--- a/doc/man/nvme_scan_ctrl_namespace_paths.2
+++ b/doc/man/nvme_scan_ctrl_namespace_paths.2
@@ -1,4 +1,4 @@
-.TH "nvme_scan_ctrl_namespace_paths" 9 "nvme_scan_ctrl_namespace_paths" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_scan_ctrl_namespace_paths" 9 "nvme_scan_ctrl_namespace_paths" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_scan_ctrl_namespace_paths \- Scan for namespace paths in a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_scan_ctrl_namespaces.2 b/doc/man/nvme_scan_ctrl_namespaces.2
index 51bf044..a94bfba 100644
--- a/doc/man/nvme_scan_ctrl_namespaces.2
+++ b/doc/man/nvme_scan_ctrl_namespaces.2
@@ -1,4 +1,4 @@
-.TH "nvme_scan_ctrl_namespaces" 9 "nvme_scan_ctrl_namespaces" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_scan_ctrl_namespaces" 9 "nvme_scan_ctrl_namespaces" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_scan_ctrl_namespaces \- Scan for namespaces in a controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_scan_ctrls.2 b/doc/man/nvme_scan_ctrls.2
index a4bc643..b2ab313 100644
--- a/doc/man/nvme_scan_ctrls.2
+++ b/doc/man/nvme_scan_ctrls.2
@@ -1,4 +1,4 @@
-.TH "nvme_scan_ctrls" 9 "nvme_scan_ctrls" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_scan_ctrls" 9 "nvme_scan_ctrls" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_scan_ctrls \- Scan for controllers
.SH SYNOPSIS
diff --git a/doc/man/nvme_scan_namespace.2 b/doc/man/nvme_scan_namespace.2
index 0f38493..e1dc27e 100644
--- a/doc/man/nvme_scan_namespace.2
+++ b/doc/man/nvme_scan_namespace.2
@@ -1,4 +1,4 @@
-.TH "nvme_scan_namespace" 9 "nvme_scan_namespace" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_scan_namespace" 9 "nvme_scan_namespace" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_scan_namespace \- scan namespace based on sysfs name
.SH SYNOPSIS
diff --git a/doc/man/nvme_scan_subsystem_namespaces.2 b/doc/man/nvme_scan_subsystem_namespaces.2
index 26d0432..7b52825 100644
--- a/doc/man/nvme_scan_subsystem_namespaces.2
+++ b/doc/man/nvme_scan_subsystem_namespaces.2
@@ -1,4 +1,4 @@
-.TH "nvme_scan_subsystem_namespaces" 9 "nvme_scan_subsystem_namespaces" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_scan_subsystem_namespaces" 9 "nvme_scan_subsystem_namespaces" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_scan_subsystem_namespaces \- Scan for namespaces in a subsystem
.SH SYNOPSIS
diff --git a/doc/man/nvme_scan_subsystems.2 b/doc/man/nvme_scan_subsystems.2
index f35a05c..edb8ce9 100644
--- a/doc/man/nvme_scan_subsystems.2
+++ b/doc/man/nvme_scan_subsystems.2
@@ -1,4 +1,4 @@
-.TH "nvme_scan_subsystems" 9 "nvme_scan_subsystems" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_scan_subsystems" 9 "nvme_scan_subsystems" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_scan_subsystems \- Scan for subsystems
.SH SYNOPSIS
diff --git a/doc/man/nvme_scan_tls_keys.2 b/doc/man/nvme_scan_tls_keys.2
new file mode 100644
index 0000000..663a359
--- /dev/null
+++ b/doc/man/nvme_scan_tls_keys.2
@@ -0,0 +1,24 @@
+.TH "nvme_scan_tls_keys" 9 "nvme_scan_tls_keys" "May 2024" "libnvme API manual" LINUX
+.SH NAME
+nvme_scan_tls_keys \- Iterate over TLS keys in a keyring
+.SH SYNOPSIS
+.B "int" nvme_scan_tls_keys
+.BI "(const char *keyring " ","
+.BI "nvme_scan_tls_keys_cb_t cb " ","
+.BI "void *data " ");"
+.SH ARGUMENTS
+.IP "keyring" 12
+Keyring holding TLS keys
+.IP "cb" 12
+Callback function
+.IP "data" 12
+Pointer for data to be passed to \fIcb\fP
+.SH "DESCRIPTION"
+Iterates \fIkeyring\fP and call \fIcb\fP for each TLS key. When \fIkeyring\fP is NULL
+the default '.nvme' keyring is used.
+A TLS key must be of type 'psk' and the description must be of the
+form 'NVMe<0|1><R|G>0<1|2> <identity>', otherwise it will be skipped
+during iteration.
+.SH "RETURN"
+Number of keys for which \fIcb\fP was called, or -1 with errno set
+on error.
diff --git a/doc/man/nvme_scan_topology.2 b/doc/man/nvme_scan_topology.2
index d9b9d8d..280c0f7 100644
--- a/doc/man/nvme_scan_topology.2
+++ b/doc/man/nvme_scan_topology.2
@@ -1,4 +1,4 @@
-.TH "nvme_scan_topology" 9 "nvme_scan_topology" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_scan_topology" 9 "nvme_scan_topology" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_scan_topology \- Scan NVMe topology and apply filter
.SH SYNOPSIS
diff --git a/doc/man/nvme_secondary_ctrl.2 b/doc/man/nvme_secondary_ctrl.2
index 7bdd9da..e2ee749 100644
--- a/doc/man/nvme_secondary_ctrl.2
+++ b/doc/man/nvme_secondary_ctrl.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_secondary_ctrl" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_secondary_ctrl" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_secondary_ctrl \- Secondary Controller Entry
.SH SYNOPSIS
diff --git a/doc/man/nvme_secondary_ctrl_list.2 b/doc/man/nvme_secondary_ctrl_list.2
index 41a5c18..64536b8 100644
--- a/doc/man/nvme_secondary_ctrl_list.2
+++ b/doc/man/nvme_secondary_ctrl_list.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_secondary_ctrl_list" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_secondary_ctrl_list" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_secondary_ctrl_list \- Secondary Controller List
.SH SYNOPSIS
diff --git a/doc/man/nvme_security_receive.2 b/doc/man/nvme_security_receive.2
index 0aa7439..a25cb1a 100644
--- a/doc/man/nvme_security_receive.2
+++ b/doc/man/nvme_security_receive.2
@@ -1,4 +1,4 @@
-.TH "nvme_security_receive" 9 "nvme_security_receive" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_security_receive" 9 "nvme_security_receive" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_security_receive \- Security Receive command
.SH SYNOPSIS
diff --git a/doc/man/nvme_security_send.2 b/doc/man/nvme_security_send.2
index 80586d9..0eb4da2 100644
--- a/doc/man/nvme_security_send.2
+++ b/doc/man/nvme_security_send.2
@@ -1,4 +1,4 @@
-.TH "nvme_security_send" 9 "nvme_security_send" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_security_send" 9 "nvme_security_send" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_security_send \- Security Send command
.SH SYNOPSIS
diff --git a/doc/man/nvme_self_test_log.2 b/doc/man/nvme_self_test_log.2
index 91a3987..cf6dacf 100644
--- a/doc/man/nvme_self_test_log.2
+++ b/doc/man/nvme_self_test_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_self_test_log" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_self_test_log" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_self_test_log \- Device Self-test (Log Identifier 06h)
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_feat_event_layout.2 b/doc/man/nvme_set_feat_event_layout.2
new file mode 100644
index 0000000..1a7dc8d
--- /dev/null
+++ b/doc/man/nvme_set_feat_event_layout.2
@@ -0,0 +1,48 @@
+.TH "libnvme" 9 "enum nvme_set_feat_event_layout" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_set_feat_event_layout \- This field indicates the set feature event layout
+.SH SYNOPSIS
+enum nvme_set_feat_event_layout {
+.br
+.BI " NVME_SET_FEAT_EVENT_DW_COUNT_SHIFT"
+,
+.br
+.br
+.BI " NVME_SET_FEAT_EVENT_CC_DW0_SHIFT"
+,
+.br
+.br
+.BI " NVME_SET_FEAT_EVENT_MB_COUNT_SHIFT"
+,
+.br
+.br
+.BI " NVME_SET_FEAT_EVENT_DW_COUNT_MASK"
+,
+.br
+.br
+.BI " NVME_SET_FEAT_EVENT_CC_DW0_MASK"
+,
+.br
+.br
+.BI " NVME_SET_FEAT_EVENT_MB_COUNT_MASK"
+
+};
+.SH Constants
+.IP "NVME_SET_FEAT_EVENT_DW_COUNT_SHIFT" 12
+Shift amount to get the Dword count from the
+\fIstruct nvme_set_feature_event\fP.layout field.
+.IP "NVME_SET_FEAT_EVENT_CC_DW0_SHIFT" 12
+Shift amount to get the logged command completion Dword 0
+from the \fIstruct nvme_set_feature_event\fP.layout field.
+.IP "NVME_SET_FEAT_EVENT_MB_COUNT_SHIFT" 12
+Shift amount to get the memory buffer count from
+the \fIstruct nvme_set_feature_event\fP.layout field.
+.IP "NVME_SET_FEAT_EVENT_DW_COUNT_MASK" 12
+Mask to get the Dword count from the \fIstruct
+nvme_set_feature_event\fP.layout field.
+.IP "NVME_SET_FEAT_EVENT_CC_DW0_MASK" 12
+Mask to get the logged command completion Dword 0 from
+the \fIstruct nvme_set_feature_event\fP.layout field.
+.IP "NVME_SET_FEAT_EVENT_MB_COUNT_MASK" 12
+Mask to get the memory buffer count from the \fIstruct
+nvme_set_feature_event\fP.layout field.
diff --git a/doc/man/nvme_set_feature_event.2 b/doc/man/nvme_set_feature_event.2
index a9d4879..e7a5cb6 100644
--- a/doc/man/nvme_set_feature_event.2
+++ b/doc/man/nvme_set_feature_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_set_feature_event" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_set_feature_event" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_set_feature_event \- Set Feature Event Data
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features.2 b/doc/man/nvme_set_features.2
index 82fa8bd..1950b8b 100644
--- a/doc/man/nvme_set_features.2
+++ b/doc/man/nvme_set_features.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features" 9 "nvme_set_features" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features" 9 "nvme_set_features" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features \- Set a feature attribute
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_arbitration.2 b/doc/man/nvme_set_features_arbitration.2
index 7e0fb94..1deb5f5 100644
--- a/doc/man/nvme_set_features_arbitration.2
+++ b/doc/man/nvme_set_features_arbitration.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_arbitration" 9 "nvme_set_features_arbitration" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_arbitration" 9 "nvme_set_features_arbitration" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_arbitration \- Set arbitration features
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_async_event.2 b/doc/man/nvme_set_features_async_event.2
index 7067093..a112e96 100644
--- a/doc/man/nvme_set_features_async_event.2
+++ b/doc/man/nvme_set_features_async_event.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_async_event" 9 "nvme_set_features_async_event" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_async_event" 9 "nvme_set_features_async_event" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_async_event \- Set asynchronous event feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_auto_pst.2 b/doc/man/nvme_set_features_auto_pst.2
index 4cdd746..423cd49 100644
--- a/doc/man/nvme_set_features_auto_pst.2
+++ b/doc/man/nvme_set_features_auto_pst.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_auto_pst" 9 "nvme_set_features_auto_pst" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_auto_pst" 9 "nvme_set_features_auto_pst" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_auto_pst \- Set autonomous power state feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_data.2 b/doc/man/nvme_set_features_data.2
index a2182b9..9a1327a 100644
--- a/doc/man/nvme_set_features_data.2
+++ b/doc/man/nvme_set_features_data.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_data" 9 "nvme_set_features_data" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_data" 9 "nvme_set_features_data" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_data \- Helper function for @nvme_set_features()
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_endurance_evt_cfg.2 b/doc/man/nvme_set_features_endurance_evt_cfg.2
index 615acca..f114c06 100644
--- a/doc/man/nvme_set_features_endurance_evt_cfg.2
+++ b/doc/man/nvme_set_features_endurance_evt_cfg.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_endurance_evt_cfg" 9 "nvme_set_features_endurance_evt_cfg" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_endurance_evt_cfg" 9 "nvme_set_features_endurance_evt_cfg" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_endurance_evt_cfg \- Set endurance event config feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_err_recovery.2 b/doc/man/nvme_set_features_err_recovery.2
index 11128d7..0c0483c 100644
--- a/doc/man/nvme_set_features_err_recovery.2
+++ b/doc/man/nvme_set_features_err_recovery.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_err_recovery" 9 "nvme_set_features_err_recovery" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_err_recovery" 9 "nvme_set_features_err_recovery" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_err_recovery \- Set error recovery feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_hctm.2 b/doc/man/nvme_set_features_hctm.2
index 024b379..23b0728 100644
--- a/doc/man/nvme_set_features_hctm.2
+++ b/doc/man/nvme_set_features_hctm.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_hctm" 9 "nvme_set_features_hctm" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_hctm" 9 "nvme_set_features_hctm" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_hctm \- Set thermal management feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_host_behavior.2 b/doc/man/nvme_set_features_host_behavior.2
index d8e40d6..59fbad6 100644
--- a/doc/man/nvme_set_features_host_behavior.2
+++ b/doc/man/nvme_set_features_host_behavior.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_host_behavior" 9 "nvme_set_features_host_behavior" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_host_behavior" 9 "nvme_set_features_host_behavior" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_host_behavior \- Set host behavior feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_host_id.2 b/doc/man/nvme_set_features_host_id.2
index 12cb403..cbe3838 100644
--- a/doc/man/nvme_set_features_host_id.2
+++ b/doc/man/nvme_set_features_host_id.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_host_id" 9 "nvme_set_features_host_id" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_host_id" 9 "nvme_set_features_host_id" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_host_id \- Set enable extended host identifiers feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_iocs_profile.2 b/doc/man/nvme_set_features_iocs_profile.2
index 5e193e6..bbb02c4 100644
--- a/doc/man/nvme_set_features_iocs_profile.2
+++ b/doc/man/nvme_set_features_iocs_profile.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_iocs_profile" 9 "nvme_set_features_iocs_profile" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_iocs_profile" 9 "nvme_set_features_iocs_profile" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_iocs_profile \- Set I/O command set profile feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_irq_coalesce.2 b/doc/man/nvme_set_features_irq_coalesce.2
index 2f07011..85091f1 100644
--- a/doc/man/nvme_set_features_irq_coalesce.2
+++ b/doc/man/nvme_set_features_irq_coalesce.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_irq_coalesce" 9 "nvme_set_features_irq_coalesce" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_irq_coalesce" 9 "nvme_set_features_irq_coalesce" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_irq_coalesce \- Set IRQ coalesce feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_irq_config.2 b/doc/man/nvme_set_features_irq_config.2
index 1e3ebeb..8af082a 100644
--- a/doc/man/nvme_set_features_irq_config.2
+++ b/doc/man/nvme_set_features_irq_config.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_irq_config" 9 "nvme_set_features_irq_config" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_irq_config" 9 "nvme_set_features_irq_config" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_irq_config \- Set IRQ config feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_lba_range.2 b/doc/man/nvme_set_features_lba_range.2
index e55d81f..2dbd9ff 100644
--- a/doc/man/nvme_set_features_lba_range.2
+++ b/doc/man/nvme_set_features_lba_range.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_lba_range" 9 "nvme_set_features_lba_range" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_lba_range" 9 "nvme_set_features_lba_range" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_lba_range \- Set LBA range feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_lba_sts_interval.2 b/doc/man/nvme_set_features_lba_sts_interval.2
index 6ffdc8b..4e40820 100644
--- a/doc/man/nvme_set_features_lba_sts_interval.2
+++ b/doc/man/nvme_set_features_lba_sts_interval.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_lba_sts_interval" 9 "nvme_set_features_lba_sts_interval" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_lba_sts_interval" 9 "nvme_set_features_lba_sts_interval" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_lba_sts_interval \- Set LBA status information feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_nopsc.2 b/doc/man/nvme_set_features_nopsc.2
index 867cfba..512322a 100644
--- a/doc/man/nvme_set_features_nopsc.2
+++ b/doc/man/nvme_set_features_nopsc.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_nopsc" 9 "nvme_set_features_nopsc" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_nopsc" 9 "nvme_set_features_nopsc" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_nopsc \- Set non-operational power state feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_plm_config.2 b/doc/man/nvme_set_features_plm_config.2
index ef92ca5..20bab5d 100644
--- a/doc/man/nvme_set_features_plm_config.2
+++ b/doc/man/nvme_set_features_plm_config.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_plm_config" 9 "nvme_set_features_plm_config" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_plm_config" 9 "nvme_set_features_plm_config" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_plm_config \- Set predictable latency feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_plm_window.2 b/doc/man/nvme_set_features_plm_window.2
index 40678a9..67233a3 100644
--- a/doc/man/nvme_set_features_plm_window.2
+++ b/doc/man/nvme_set_features_plm_window.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_plm_window" 9 "nvme_set_features_plm_window" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_plm_window" 9 "nvme_set_features_plm_window" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_plm_window \- Set window select feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_power_mgmt.2 b/doc/man/nvme_set_features_power_mgmt.2
index 531c41c..4697910 100644
--- a/doc/man/nvme_set_features_power_mgmt.2
+++ b/doc/man/nvme_set_features_power_mgmt.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_power_mgmt" 9 "nvme_set_features_power_mgmt" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_power_mgmt" 9 "nvme_set_features_power_mgmt" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_power_mgmt \- Set power management feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_resv_mask.2 b/doc/man/nvme_set_features_resv_mask.2
index cf129fe..b57b4f3 100644
--- a/doc/man/nvme_set_features_resv_mask.2
+++ b/doc/man/nvme_set_features_resv_mask.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_resv_mask" 9 "nvme_set_features_resv_mask" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_resv_mask" 9 "nvme_set_features_resv_mask" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_resv_mask \- Set reservation notification mask feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_resv_mask2.2 b/doc/man/nvme_set_features_resv_mask2.2
index 454b8c8..cbafd03 100644
--- a/doc/man/nvme_set_features_resv_mask2.2
+++ b/doc/man/nvme_set_features_resv_mask2.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_resv_mask2" 9 "nvme_set_features_resv_mask2" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_resv_mask2" 9 "nvme_set_features_resv_mask2" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_resv_mask2 \- Set reservation notification mask feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_resv_persist.2 b/doc/man/nvme_set_features_resv_persist.2
index 534b664..d14b397 100644
--- a/doc/man/nvme_set_features_resv_persist.2
+++ b/doc/man/nvme_set_features_resv_persist.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_resv_persist" 9 "nvme_set_features_resv_persist" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_resv_persist" 9 "nvme_set_features_resv_persist" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_resv_persist \- Set persist through power loss feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_resv_persist2.2 b/doc/man/nvme_set_features_resv_persist2.2
index 70eed52..bd2c40c 100644
--- a/doc/man/nvme_set_features_resv_persist2.2
+++ b/doc/man/nvme_set_features_resv_persist2.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_resv_persist2" 9 "nvme_set_features_resv_persist2" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_resv_persist2" 9 "nvme_set_features_resv_persist2" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_resv_persist2 \- Set persist through power loss feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_rrl.2 b/doc/man/nvme_set_features_rrl.2
index c1b13d1..48da4ba 100644
--- a/doc/man/nvme_set_features_rrl.2
+++ b/doc/man/nvme_set_features_rrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_rrl" 9 "nvme_set_features_rrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_rrl" 9 "nvme_set_features_rrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_rrl \- Set read recovery level feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_sanitize.2 b/doc/man/nvme_set_features_sanitize.2
index 3cb9493..0bf44e5 100644
--- a/doc/man/nvme_set_features_sanitize.2
+++ b/doc/man/nvme_set_features_sanitize.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_sanitize" 9 "nvme_set_features_sanitize" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_sanitize" 9 "nvme_set_features_sanitize" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_sanitize \- Set sanitize feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_simple.2 b/doc/man/nvme_set_features_simple.2
index dfc2a4e..9729e9d 100644
--- a/doc/man/nvme_set_features_simple.2
+++ b/doc/man/nvme_set_features_simple.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_simple" 9 "nvme_set_features_simple" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_simple" 9 "nvme_set_features_simple" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_simple \- Helper function for @nvme_set_features()
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_sw_progress.2 b/doc/man/nvme_set_features_sw_progress.2
index 0d8a02d..9eeed48 100644
--- a/doc/man/nvme_set_features_sw_progress.2
+++ b/doc/man/nvme_set_features_sw_progress.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_sw_progress" 9 "nvme_set_features_sw_progress" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_sw_progress" 9 "nvme_set_features_sw_progress" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_sw_progress \- Set pre-boot software load count feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_temp_thresh.2 b/doc/man/nvme_set_features_temp_thresh.2
index cf435e3..1b6c576 100644
--- a/doc/man/nvme_set_features_temp_thresh.2
+++ b/doc/man/nvme_set_features_temp_thresh.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_temp_thresh" 9 "nvme_set_features_temp_thresh" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_temp_thresh" 9 "nvme_set_features_temp_thresh" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_temp_thresh \- Set temperature threshold feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_timestamp.2 b/doc/man/nvme_set_features_timestamp.2
index 9268ba8..3347e28 100644
--- a/doc/man/nvme_set_features_timestamp.2
+++ b/doc/man/nvme_set_features_timestamp.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_timestamp" 9 "nvme_set_features_timestamp" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_timestamp" 9 "nvme_set_features_timestamp" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_timestamp \- Set timestamp feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_volatile_wc.2 b/doc/man/nvme_set_features_volatile_wc.2
index 777a1a1..365814a 100644
--- a/doc/man/nvme_set_features_volatile_wc.2
+++ b/doc/man/nvme_set_features_volatile_wc.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_volatile_wc" 9 "nvme_set_features_volatile_wc" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_volatile_wc" 9 "nvme_set_features_volatile_wc" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_volatile_wc \- Set volatile write cache feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_write_atomic.2 b/doc/man/nvme_set_features_write_atomic.2
index fe0848f..99c12f2 100644
--- a/doc/man/nvme_set_features_write_atomic.2
+++ b/doc/man/nvme_set_features_write_atomic.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_write_atomic" 9 "nvme_set_features_write_atomic" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_write_atomic" 9 "nvme_set_features_write_atomic" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_write_atomic \- Set write atomic feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_write_protect.2 b/doc/man/nvme_set_features_write_protect.2
index d8e7d61..7b92799 100644
--- a/doc/man/nvme_set_features_write_protect.2
+++ b/doc/man/nvme_set_features_write_protect.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_write_protect" 9 "nvme_set_features_write_protect" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_write_protect" 9 "nvme_set_features_write_protect" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_write_protect \- Set write protect feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_features_write_protect2.2 b/doc/man/nvme_set_features_write_protect2.2
index 5591cd3..3c184f9 100644
--- a/doc/man/nvme_set_features_write_protect2.2
+++ b/doc/man/nvme_set_features_write_protect2.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_features_write_protect2" 9 "nvme_set_features_write_protect2" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_features_write_protect2" 9 "nvme_set_features_write_protect2" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_features_write_protect2 \- Set write protect feature
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_keyring.2 b/doc/man/nvme_set_keyring.2
index 81a08ad..6719428 100644
--- a/doc/man/nvme_set_keyring.2
+++ b/doc/man/nvme_set_keyring.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_keyring" 9 "nvme_set_keyring" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_keyring" 9 "nvme_set_keyring" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_keyring \- Link keyring for lookup
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_property.2 b/doc/man/nvme_set_property.2
index 1ef7c5a..5d21327 100644
--- a/doc/man/nvme_set_property.2
+++ b/doc/man/nvme_set_property.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_property" 9 "nvme_set_property" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_property" 9 "nvme_set_property" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_property \- Set controller property
.SH SYNOPSIS
diff --git a/doc/man/nvme_set_root.2 b/doc/man/nvme_set_root.2
index 8f90e50..7c02696 100644
--- a/doc/man/nvme_set_root.2
+++ b/doc/man/nvme_set_root.2
@@ -1,4 +1,4 @@
-.TH "nvme_set_root" 9 "nvme_set_root" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_set_root" 9 "nvme_set_root" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_set_root \- Set nvme_root_t context
.SH SYNOPSIS
diff --git a/doc/man/nvme_smart_crit.2 b/doc/man/nvme_smart_crit.2
index 828124f..76c2d79 100644
--- a/doc/man/nvme_smart_crit.2
+++ b/doc/man/nvme_smart_crit.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_smart_crit" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_smart_crit" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_smart_crit \- Critical Warning
.SH SYNOPSIS
diff --git a/doc/man/nvme_smart_egcw.2 b/doc/man/nvme_smart_egcw.2
index 28d2205..7ea0f13 100644
--- a/doc/man/nvme_smart_egcw.2
+++ b/doc/man/nvme_smart_egcw.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_smart_egcw" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_smart_egcw" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_smart_egcw \- Endurance Group Critical Warning Summary
.SH SYNOPSIS
diff --git a/doc/man/nvme_smart_log.2 b/doc/man/nvme_smart_log.2
index ffeb798..c70dc78 100644
--- a/doc/man/nvme_smart_log.2
+++ b/doc/man/nvme_smart_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_smart_log" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_smart_log" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_smart_log \- SMART / Health Information Log (Log Identifier 02h)
.SH SYNOPSIS
diff --git a/doc/man/nvme_st_code.2 b/doc/man/nvme_st_code.2
index 913a09a..9d8523e 100644
--- a/doc/man/nvme_st_code.2
+++ b/doc/man/nvme_st_code.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_st_code" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_st_code" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_st_code \- Self-test Code value
.SH SYNOPSIS
diff --git a/doc/man/nvme_st_curr_op.2 b/doc/man/nvme_st_curr_op.2
index d09ef83..fd2bb40 100644
--- a/doc/man/nvme_st_curr_op.2
+++ b/doc/man/nvme_st_curr_op.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_st_curr_op" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_st_curr_op" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_st_curr_op \- Current Device Self-Test Operation
.SH SYNOPSIS
diff --git a/doc/man/nvme_st_result.2 b/doc/man/nvme_st_result.2
index f773b7e..8b8032f 100644
--- a/doc/man/nvme_st_result.2
+++ b/doc/man/nvme_st_result.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_st_result" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_st_result" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_st_result \- Self-test Result
.SH SYNOPSIS
diff --git a/doc/man/nvme_st_valid_diag_info.2 b/doc/man/nvme_st_valid_diag_info.2
index 9d963a8..df2d7fd 100644
--- a/doc/man/nvme_st_valid_diag_info.2
+++ b/doc/man/nvme_st_valid_diag_info.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_st_valid_diag_info" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_st_valid_diag_info" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_st_valid_diag_info \- Valid Diagnostic Information
.SH SYNOPSIS
diff --git a/doc/man/nvme_status_code.2 b/doc/man/nvme_status_code.2
index 502bda8..955a50c 100644
--- a/doc/man/nvme_status_code.2
+++ b/doc/man/nvme_status_code.2
@@ -1,4 +1,4 @@
-.TH "nvme_status_code" 9 "nvme_status_code" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_status_code" 9 "nvme_status_code" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_status_code \- Returns the NVMe Status Code
.SH SYNOPSIS
diff --git a/doc/man/nvme_status_code_type.2 b/doc/man/nvme_status_code_type.2
index e4e0e34..29a9d85 100644
--- a/doc/man/nvme_status_code_type.2
+++ b/doc/man/nvme_status_code_type.2
@@ -1,4 +1,4 @@
-.TH "nvme_status_code_type" 9 "nvme_status_code_type" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_status_code_type" 9 "nvme_status_code_type" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_status_code_type \- Returns the NVMe Status Code Type
.SH SYNOPSIS
diff --git a/doc/man/nvme_status_equals.2 b/doc/man/nvme_status_equals.2
index 88eb928..a12221f 100644
--- a/doc/man/nvme_status_equals.2
+++ b/doc/man/nvme_status_equals.2
@@ -1,4 +1,4 @@
-.TH "nvme_status_equals" 9 "nvme_status_equals" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_status_equals" 9 "nvme_status_equals" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_status_equals \- helper to check a status against a type and value
.SH SYNOPSIS
diff --git a/doc/man/nvme_status_field.2 b/doc/man/nvme_status_field.2
index 2ef64fe..4ada898 100644
--- a/doc/man/nvme_status_field.2
+++ b/doc/man/nvme_status_field.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_status_field" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_status_field" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_status_field \- Defines all parts of the nvme status field: status code, status code type, and additional flags.
.SH SYNOPSIS
diff --git a/doc/man/nvme_status_get_type.2 b/doc/man/nvme_status_get_type.2
index d5fe855..d73b4e6 100644
--- a/doc/man/nvme_status_get_type.2
+++ b/doc/man/nvme_status_get_type.2
@@ -1,4 +1,4 @@
-.TH "nvme_status_get_type" 9 "nvme_status_get_type" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_status_get_type" 9 "nvme_status_get_type" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_status_get_type \- extract the type from a nvme_* return value
.SH SYNOPSIS
diff --git a/doc/man/nvme_status_get_value.2 b/doc/man/nvme_status_get_value.2
index a44340a..a50d103 100644
--- a/doc/man/nvme_status_get_value.2
+++ b/doc/man/nvme_status_get_value.2
@@ -1,4 +1,4 @@
-.TH "nvme_status_get_value" 9 "nvme_status_get_value" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_status_get_value" 9 "nvme_status_get_value" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_status_get_value \- extract the status value from a nvme_* return value
.SH SYNOPSIS
diff --git a/doc/man/nvme_status_result.2 b/doc/man/nvme_status_result.2
index 6358dee..42a9d77 100644
--- a/doc/man/nvme_status_result.2
+++ b/doc/man/nvme_status_result.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_status_result" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_status_result" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_status_result \- Result of the device self-test operation
.SH SYNOPSIS
diff --git a/doc/man/nvme_status_to_errno.2 b/doc/man/nvme_status_to_errno.2
index aea4aec..2384b17 100644
--- a/doc/man/nvme_status_to_errno.2
+++ b/doc/man/nvme_status_to_errno.2
@@ -1,4 +1,4 @@
-.TH "nvme_status_to_errno" 9 "nvme_status_to_errno" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_status_to_errno" 9 "nvme_status_to_errno" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_status_to_errno \- Converts nvme return status to errno
.SH SYNOPSIS
diff --git a/doc/man/nvme_status_to_string.2 b/doc/man/nvme_status_to_string.2
index da37833..36f1347 100644
--- a/doc/man/nvme_status_to_string.2
+++ b/doc/man/nvme_status_to_string.2
@@ -1,4 +1,4 @@
-.TH "nvme_status_to_string" 9 "nvme_status_to_string" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_status_to_string" 9 "nvme_status_to_string" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_status_to_string \- Returns string describing nvme return status.
.SH SYNOPSIS
diff --git a/doc/man/nvme_status_type.2 b/doc/man/nvme_status_type.2
index 238cf6e..1bfd967 100644
--- a/doc/man/nvme_status_type.2
+++ b/doc/man/nvme_status_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_status_type" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_status_type" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_status_type \- type encoding for NVMe return values, when represented as an int.
.SH SYNOPSIS
diff --git a/doc/man/nvme_streams_directive_params.2 b/doc/man/nvme_streams_directive_params.2
index 1df2958..59bca43 100644
--- a/doc/man/nvme_streams_directive_params.2
+++ b/doc/man/nvme_streams_directive_params.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_streams_directive_params" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_streams_directive_params" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_streams_directive_params \- Streams Directive - Return Parameters Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_streams_directive_status.2 b/doc/man/nvme_streams_directive_status.2
index 2955ac3..c326223 100644
--- a/doc/man/nvme_streams_directive_status.2
+++ b/doc/man/nvme_streams_directive_status.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_streams_directive_status" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_streams_directive_status" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_streams_directive_status \- Streams Directive - Get Status Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_submit_admin_passthru.2 b/doc/man/nvme_submit_admin_passthru.2
index 3171798..20a531b 100644
--- a/doc/man/nvme_submit_admin_passthru.2
+++ b/doc/man/nvme_submit_admin_passthru.2
@@ -1,4 +1,4 @@
-.TH "nvme_submit_admin_passthru" 9 "nvme_submit_admin_passthru" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_submit_admin_passthru" 9 "nvme_submit_admin_passthru" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_submit_admin_passthru \- Submit an nvme passthrough admin command
.SH SYNOPSIS
diff --git a/doc/man/nvme_submit_admin_passthru64.2 b/doc/man/nvme_submit_admin_passthru64.2
index 9815df5..f0271f1 100644
--- a/doc/man/nvme_submit_admin_passthru64.2
+++ b/doc/man/nvme_submit_admin_passthru64.2
@@ -1,4 +1,4 @@
-.TH "nvme_submit_admin_passthru64" 9 "nvme_submit_admin_passthru64" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_submit_admin_passthru64" 9 "nvme_submit_admin_passthru64" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_submit_admin_passthru64 \- Submit a 64-bit nvme passthrough admin command
.SH SYNOPSIS
diff --git a/doc/man/nvme_submit_io_passthru.2 b/doc/man/nvme_submit_io_passthru.2
index ccae5e4..3bfb454 100644
--- a/doc/man/nvme_submit_io_passthru.2
+++ b/doc/man/nvme_submit_io_passthru.2
@@ -1,4 +1,4 @@
-.TH "nvme_submit_io_passthru" 9 "nvme_submit_io_passthru" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_submit_io_passthru" 9 "nvme_submit_io_passthru" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_submit_io_passthru \- Submit an nvme passthrough command
.SH SYNOPSIS
diff --git a/doc/man/nvme_submit_io_passthru64.2 b/doc/man/nvme_submit_io_passthru64.2
index 914764a..f4b2200 100644
--- a/doc/man/nvme_submit_io_passthru64.2
+++ b/doc/man/nvme_submit_io_passthru64.2
@@ -1,4 +1,4 @@
-.TH "nvme_submit_io_passthru64" 9 "nvme_submit_io_passthru64" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_submit_io_passthru64" 9 "nvme_submit_io_passthru64" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_submit_io_passthru64 \- Submit a 64-bit nvme passthrough command
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsys_filter.2 b/doc/man/nvme_subsys_filter.2
index 5447271..54a7bb7 100644
--- a/doc/man/nvme_subsys_filter.2
+++ b/doc/man/nvme_subsys_filter.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsys_filter" 9 "nvme_subsys_filter" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_subsys_filter" 9 "nvme_subsys_filter" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsys_filter \- Filter for subsystems
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsys_type.2 b/doc/man/nvme_subsys_type.2
index 4217159..0aea148 100644
--- a/doc/man/nvme_subsys_type.2
+++ b/doc/man/nvme_subsys_type.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_subsys_type" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_subsys_type" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_subsys_type \- Type of the NVM subsystem.
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_first_ctrl.2 b/doc/man/nvme_subsystem_first_ctrl.2
index 9cb1518..a2b4254 100644
--- a/doc/man/nvme_subsystem_first_ctrl.2
+++ b/doc/man/nvme_subsystem_first_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_first_ctrl" 9 "nvme_subsystem_first_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_first_ctrl" 9 "nvme_subsystem_first_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_first_ctrl \- First ctrl iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_first_ns.2 b/doc/man/nvme_subsystem_first_ns.2
index bdf2473..4c17f53 100644
--- a/doc/man/nvme_subsystem_first_ns.2
+++ b/doc/man/nvme_subsystem_first_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_first_ns" 9 "nvme_subsystem_first_ns" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_first_ns" 9 "nvme_subsystem_first_ns" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_first_ns \- Start namespace iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_for_each_ctrl.2 b/doc/man/nvme_subsystem_for_each_ctrl.2
index e0d29b9..3593a8d 100644
--- a/doc/man/nvme_subsystem_for_each_ctrl.2
+++ b/doc/man/nvme_subsystem_for_each_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_for_each_ctrl" 9 "nvme_subsystem_for_each_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_for_each_ctrl" 9 "nvme_subsystem_for_each_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_for_each_ctrl \- Traverse controllers
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_for_each_ctrl_safe.2 b/doc/man/nvme_subsystem_for_each_ctrl_safe.2
index 06bbf6a..8d880f0 100644
--- a/doc/man/nvme_subsystem_for_each_ctrl_safe.2
+++ b/doc/man/nvme_subsystem_for_each_ctrl_safe.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_for_each_ctrl_safe" 9 "nvme_subsystem_for_each_ctrl_safe" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_for_each_ctrl_safe" 9 "nvme_subsystem_for_each_ctrl_safe" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_for_each_ctrl_safe \- Traverse controllers
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_for_each_ns.2 b/doc/man/nvme_subsystem_for_each_ns.2
index 06d9517..18c3d62 100644
--- a/doc/man/nvme_subsystem_for_each_ns.2
+++ b/doc/man/nvme_subsystem_for_each_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_for_each_ns" 9 "nvme_subsystem_for_each_ns" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_for_each_ns" 9 "nvme_subsystem_for_each_ns" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_for_each_ns \- Traverse namespaces
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_for_each_ns_safe.2 b/doc/man/nvme_subsystem_for_each_ns_safe.2
index d8abb7f..3e221c2 100644
--- a/doc/man/nvme_subsystem_for_each_ns_safe.2
+++ b/doc/man/nvme_subsystem_for_each_ns_safe.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_for_each_ns_safe" 9 "nvme_subsystem_for_each_ns_safe" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_for_each_ns_safe" 9 "nvme_subsystem_for_each_ns_safe" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_for_each_ns_safe \- Traverse namespaces
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_get_application.2 b/doc/man/nvme_subsystem_get_application.2
index c5d2ce5..0c406f7 100644
--- a/doc/man/nvme_subsystem_get_application.2
+++ b/doc/man/nvme_subsystem_get_application.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_get_application" 9 "nvme_subsystem_get_application" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_get_application" 9 "nvme_subsystem_get_application" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_get_application \- Return the application string
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_get_host.2 b/doc/man/nvme_subsystem_get_host.2
index 8c91f9e..358f390 100644
--- a/doc/man/nvme_subsystem_get_host.2
+++ b/doc/man/nvme_subsystem_get_host.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_get_host" 9 "nvme_subsystem_get_host" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_get_host" 9 "nvme_subsystem_get_host" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_get_host \- Returns nvme_host_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_get_iopolicy.2 b/doc/man/nvme_subsystem_get_iopolicy.2
index 83a38a5..691a638 100644
--- a/doc/man/nvme_subsystem_get_iopolicy.2
+++ b/doc/man/nvme_subsystem_get_iopolicy.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_get_iopolicy" 9 "nvme_subsystem_get_iopolicy" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_get_iopolicy" 9 "nvme_subsystem_get_iopolicy" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_get_iopolicy \- Return the IO policy of subsytem
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_get_name.2 b/doc/man/nvme_subsystem_get_name.2
index 77cd881..62c09ca 100644
--- a/doc/man/nvme_subsystem_get_name.2
+++ b/doc/man/nvme_subsystem_get_name.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_get_name" 9 "nvme_subsystem_get_name" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_get_name" 9 "nvme_subsystem_get_name" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_get_name \- sysfs name of an nvme_subsystem_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_get_nqn.2 b/doc/man/nvme_subsystem_get_nqn.2
index 2c8aad9..9f28032 100644
--- a/doc/man/nvme_subsystem_get_nqn.2
+++ b/doc/man/nvme_subsystem_get_nqn.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_get_nqn" 9 "nvme_subsystem_get_nqn" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_get_nqn" 9 "nvme_subsystem_get_nqn" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_get_nqn \- Retrieve NQN from subsystem
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_get_sysfs_dir.2 b/doc/man/nvme_subsystem_get_sysfs_dir.2
index 85451f8..796bf30 100644
--- a/doc/man/nvme_subsystem_get_sysfs_dir.2
+++ b/doc/man/nvme_subsystem_get_sysfs_dir.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_get_sysfs_dir" 9 "nvme_subsystem_get_sysfs_dir" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_get_sysfs_dir" 9 "nvme_subsystem_get_sysfs_dir" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_get_sysfs_dir \- sysfs directory of an nvme_subsystem_t object
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_get_type.2 b/doc/man/nvme_subsystem_get_type.2
index 06458c3..5aaaed8 100644
--- a/doc/man/nvme_subsystem_get_type.2
+++ b/doc/man/nvme_subsystem_get_type.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_get_type" 9 "nvme_subsystem_get_type" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_get_type" 9 "nvme_subsystem_get_type" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_get_type \- Returns the type of a subsystem
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_lookup_namespace.2 b/doc/man/nvme_subsystem_lookup_namespace.2
index 5506aa8..a72bddb 100644
--- a/doc/man/nvme_subsystem_lookup_namespace.2
+++ b/doc/man/nvme_subsystem_lookup_namespace.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_lookup_namespace" 9 "nvme_subsystem_lookup_namespace" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_lookup_namespace" 9 "nvme_subsystem_lookup_namespace" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_lookup_namespace \- lookup namespace by NSID
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_next_ctrl.2 b/doc/man/nvme_subsystem_next_ctrl.2
index 0bc5fcd..e099192 100644
--- a/doc/man/nvme_subsystem_next_ctrl.2
+++ b/doc/man/nvme_subsystem_next_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_next_ctrl" 9 "nvme_subsystem_next_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_next_ctrl" 9 "nvme_subsystem_next_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_next_ctrl \- Next ctrl iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_next_ns.2 b/doc/man/nvme_subsystem_next_ns.2
index 0e13407..566c4eb 100644
--- a/doc/man/nvme_subsystem_next_ns.2
+++ b/doc/man/nvme_subsystem_next_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_next_ns" 9 "nvme_subsystem_next_ns" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_next_ns" 9 "nvme_subsystem_next_ns" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_next_ns \- Next namespace iterator
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_release_fds.2 b/doc/man/nvme_subsystem_release_fds.2
index 1dd034e..dd86e9b 100644
--- a/doc/man/nvme_subsystem_release_fds.2
+++ b/doc/man/nvme_subsystem_release_fds.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_release_fds" 9 "nvme_subsystem_release_fds" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_release_fds" 9 "nvme_subsystem_release_fds" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_release_fds \- Close all opened fds under subsystem
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_reset.2 b/doc/man/nvme_subsystem_reset.2
index 6ed7dec..6e5e6a9 100644
--- a/doc/man/nvme_subsystem_reset.2
+++ b/doc/man/nvme_subsystem_reset.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_reset" 9 "nvme_subsystem_reset" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_reset" 9 "nvme_subsystem_reset" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_reset \- Initiate a subsystem reset
.SH SYNOPSIS
diff --git a/doc/man/nvme_subsystem_set_application.2 b/doc/man/nvme_subsystem_set_application.2
index 49d4273..3e4c471 100644
--- a/doc/man/nvme_subsystem_set_application.2
+++ b/doc/man/nvme_subsystem_set_application.2
@@ -1,4 +1,4 @@
-.TH "nvme_subsystem_set_application" 9 "nvme_subsystem_set_application" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_subsystem_set_application" 9 "nvme_subsystem_set_application" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_subsystem_set_application \- Set the application string
.SH SYNOPSIS
diff --git a/doc/man/nvme_supported_cap_config_list_log.2 b/doc/man/nvme_supported_cap_config_list_log.2
index b5abeaf..3f447d8 100644
--- a/doc/man/nvme_supported_cap_config_list_log.2
+++ b/doc/man/nvme_supported_cap_config_list_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_supported_cap_config_list_log" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_supported_cap_config_list_log" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_supported_cap_config_list_log \- Supported Capacity Configuration list log page
.SH SYNOPSIS
diff --git a/doc/man/nvme_supported_log_pages.2 b/doc/man/nvme_supported_log_pages.2
index 4252e4d..36a3906 100644
--- a/doc/man/nvme_supported_log_pages.2
+++ b/doc/man/nvme_supported_log_pages.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_supported_log_pages" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_supported_log_pages" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_supported_log_pages \- Supported Log Pages - Log
.SH SYNOPSIS
diff --git a/doc/man/nvme_telemetry_da.2 b/doc/man/nvme_telemetry_da.2
index c5b4af9..1bb1758 100644
--- a/doc/man/nvme_telemetry_da.2
+++ b/doc/man/nvme_telemetry_da.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_telemetry_da" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_telemetry_da" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_telemetry_da \- Telemetry Log Data Area
.SH SYNOPSIS
diff --git a/doc/man/nvme_telemetry_log.2 b/doc/man/nvme_telemetry_log.2
index d859465..7a265f5 100644
--- a/doc/man/nvme_telemetry_log.2
+++ b/doc/man/nvme_telemetry_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_telemetry_log" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_telemetry_log" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_telemetry_log \- Retrieve internal data specific to the manufacturer.
.SH SYNOPSIS
diff --git a/doc/man/nvme_thermal_exc_event.2 b/doc/man/nvme_thermal_exc_event.2
index 34a28ce..38c586b 100644
--- a/doc/man/nvme_thermal_exc_event.2
+++ b/doc/man/nvme_thermal_exc_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_thermal_exc_event" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_thermal_exc_event" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_thermal_exc_event \- Thermal Excursion Event Data
.SH SYNOPSIS
diff --git a/doc/man/nvme_time_stamp_change_event.2 b/doc/man/nvme_time_stamp_change_event.2
index ddc48c8..53cbb03 100644
--- a/doc/man/nvme_time_stamp_change_event.2
+++ b/doc/man/nvme_time_stamp_change_event.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_time_stamp_change_event" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_time_stamp_change_event" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_time_stamp_change_event \- Timestamp Change Event
.SH SYNOPSIS
diff --git a/doc/man/nvme_timestamp.2 b/doc/man/nvme_timestamp.2
index 9012a8c..ce02412 100644
--- a/doc/man/nvme_timestamp.2
+++ b/doc/man/nvme_timestamp.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_timestamp" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_timestamp" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_timestamp \- Timestamp - Data Structure for Get Features
.SH SYNOPSIS
diff --git a/doc/man/nvme_unit.2 b/doc/man/nvme_unit.2
new file mode 100644
index 0000000..eea04a7
--- /dev/null
+++ b/doc/man/nvme_unit.2
@@ -0,0 +1,30 @@
+.TH "libnvme" 9 "enum nvme_unit" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_unit \- Defined buffer size and write throughput granularity units
+.SH SYNOPSIS
+enum nvme_unit {
+.br
+.BI " NVME_UNIT_B"
+,
+.br
+.br
+.BI " NVME_UNIT_1K"
+,
+.br
+.br
+.BI " NVME_UNIT_1M"
+,
+.br
+.br
+.BI " NVME_UNIT_1G"
+
+};
+.SH Constants
+.IP "NVME_UNIT_B" 12
+Bytes or Bytes/second
+.IP "NVME_UNIT_1K" 12
+1 KiB or 1 KiB/second
+.IP "NVME_UNIT_1M" 12
+1 MiB or 1 MiB/second
+.IP "NVME_UNIT_1G" 12
+1 GiB or 1 GiB/second
diff --git a/doc/man/nvme_unlink_ctrl.2 b/doc/man/nvme_unlink_ctrl.2
index c0eb8a1..f70bb20 100644
--- a/doc/man/nvme_unlink_ctrl.2
+++ b/doc/man/nvme_unlink_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_unlink_ctrl" 9 "nvme_unlink_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_unlink_ctrl" 9 "nvme_unlink_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_unlink_ctrl \- Unlink controller
.SH SYNOPSIS
diff --git a/doc/man/nvme_update_config.2 b/doc/man/nvme_update_config.2
index c73b018..448a8c9 100644
--- a/doc/man/nvme_update_config.2
+++ b/doc/man/nvme_update_config.2
@@ -1,4 +1,4 @@
-.TH "nvme_update_config" 9 "nvme_update_config" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_update_config" 9 "nvme_update_config" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_update_config \- Update JSON configuration
.SH SYNOPSIS
diff --git a/doc/man/nvme_update_key.2 b/doc/man/nvme_update_key.2
new file mode 100644
index 0000000..96ff15c
--- /dev/null
+++ b/doc/man/nvme_update_key.2
@@ -0,0 +1,28 @@
+.TH "nvme_update_key" 9 "nvme_update_key" "May 2024" "libnvme API manual" LINUX
+.SH NAME
+nvme_update_key \- Update key raw data
+.SH SYNOPSIS
+.B "long" nvme_update_key
+.BI "(long keyring_id " ","
+.BI "const char *key_type " ","
+.BI "const char *identity " ","
+.BI "unsigned char *key_data " ","
+.BI "int key_len " ");"
+.SH ARGUMENTS
+.IP "keyring_id" 12
+Id of the keyring holding key_id
+.IP "key_type" 12
+Type of the key to insert
+.IP "identity" 12
+Key identity string
+.IP "key_data" 12
+Raw data of the key
+.IP "key_len" 12
+Length of \fIkey_data\fP
+.SH "DESCRIPTION"
+Links the keyring specified by \fIkeyring_id\fP into the session
+keyring and updates the key reference by \fIidentity\fP with \fIkey_data\fP.
+The old key with identity \fIidentity\fP will be revoked to make it
+inaccessible.
+.SH "RETURN"
+Key id of the new key or 0 with errno set otherwise.
diff --git a/doc/man/nvme_uring_cmd.2 b/doc/man/nvme_uring_cmd.2
index df8eb6a..b5f55cb 100644
--- a/doc/man/nvme_uring_cmd.2
+++ b/doc/man/nvme_uring_cmd.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_uring_cmd" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_uring_cmd" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_uring_cmd \- nvme uring command structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_verify.2 b/doc/man/nvme_verify.2
index d71380e..cdc9e12 100644
--- a/doc/man/nvme_verify.2
+++ b/doc/man/nvme_verify.2
@@ -1,4 +1,4 @@
-.TH "nvme_verify" 9 "nvme_verify" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_verify" 9 "nvme_verify" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_verify \- Send an nvme verify command
.SH SYNOPSIS
diff --git a/doc/man/nvme_version.2 b/doc/man/nvme_version.2
index d30d233..dd403df 100644
--- a/doc/man/nvme_version.2
+++ b/doc/man/nvme_version.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_version" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_version" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_version \- Selector for version to be returned by @nvme_get_version
.SH SYNOPSIS
diff --git a/doc/man/nvme_virt_mgmt_act.2 b/doc/man/nvme_virt_mgmt_act.2
index 02794df..2a15fd9 100644
--- a/doc/man/nvme_virt_mgmt_act.2
+++ b/doc/man/nvme_virt_mgmt_act.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_virt_mgmt_act" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_virt_mgmt_act" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_virt_mgmt_act \- Virtualization Management - Action
.SH SYNOPSIS
diff --git a/doc/man/nvme_virt_mgmt_rt.2 b/doc/man/nvme_virt_mgmt_rt.2
index e106c13..1ad8308 100644
--- a/doc/man/nvme_virt_mgmt_rt.2
+++ b/doc/man/nvme_virt_mgmt_rt.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_virt_mgmt_rt" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_virt_mgmt_rt" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_virt_mgmt_rt \- Virtualization Management - Resource Type
.SH SYNOPSIS
diff --git a/doc/man/nvme_virtual_mgmt.2 b/doc/man/nvme_virtual_mgmt.2
index 1a3ae31..ca7d4ee 100644
--- a/doc/man/nvme_virtual_mgmt.2
+++ b/doc/man/nvme_virtual_mgmt.2
@@ -1,4 +1,4 @@
-.TH "nvme_virtual_mgmt" 9 "nvme_virtual_mgmt" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_virtual_mgmt" 9 "nvme_virtual_mgmt" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_virtual_mgmt \- Virtualization resource management
.SH SYNOPSIS
diff --git a/doc/man/nvme_vs.2 b/doc/man/nvme_vs.2
new file mode 100644
index 0000000..c1e221f
--- /dev/null
+++ b/doc/man/nvme_vs.2
@@ -0,0 +1,42 @@
+.TH "libnvme" 9 "enum nvme_vs" "May 2024" "API Manual" LINUX
+.SH NAME
+enum nvme_vs \- This field indicates the version
+.SH SYNOPSIS
+enum nvme_vs {
+.br
+.BI " NVME_VS_TER_SHIFT"
+,
+.br
+.br
+.BI " NVME_VS_MNR_SHIFT"
+,
+.br
+.br
+.BI " NVME_VS_MJR_SHIFT"
+,
+.br
+.br
+.BI " NVME_VS_TER_MASK"
+,
+.br
+.br
+.BI " NVME_VS_MNR_MASK"
+,
+.br
+.br
+.BI " NVME_VS_MJR_MASK"
+
+};
+.SH Constants
+.IP "NVME_VS_TER_SHIFT" 12
+Shift amount to get the tertiary version
+.IP "NVME_VS_MNR_SHIFT" 12
+Shift amount to get the minor version
+.IP "NVME_VS_MJR_SHIFT" 12
+Shift amount to get the major version
+.IP "NVME_VS_TER_MASK" 12
+Mask to get the tertiary version
+.IP "NVME_VS_MNR_MASK" 12
+Mask to get the minor version
+.IP "NVME_VS_MJR_MASK" 12
+Mask to get the major version
diff --git a/doc/man/nvme_write.2 b/doc/man/nvme_write.2
index b670227..00f727d 100644
--- a/doc/man/nvme_write.2
+++ b/doc/man/nvme_write.2
@@ -1,4 +1,4 @@
-.TH "nvme_write" 9 "nvme_write" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_write" 9 "nvme_write" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_write \- Submit an nvme user write command
.SH SYNOPSIS
diff --git a/doc/man/nvme_write_uncorrectable.2 b/doc/man/nvme_write_uncorrectable.2
index 6e365e6..0ea67a1 100644
--- a/doc/man/nvme_write_uncorrectable.2
+++ b/doc/man/nvme_write_uncorrectable.2
@@ -1,4 +1,4 @@
-.TH "nvme_write_uncorrectable" 9 "nvme_write_uncorrectable" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_write_uncorrectable" 9 "nvme_write_uncorrectable" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_write_uncorrectable \- Submit an nvme write uncorrectable command
.SH SYNOPSIS
diff --git a/doc/man/nvme_write_zeros.2 b/doc/man/nvme_write_zeros.2
index ce4353b..bb07e54 100644
--- a/doc/man/nvme_write_zeros.2
+++ b/doc/man/nvme_write_zeros.2
@@ -1,4 +1,4 @@
-.TH "nvme_write_zeros" 9 "nvme_write_zeros" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_write_zeros" 9 "nvme_write_zeros" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_write_zeros \- Submit an nvme write zeroes command
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_append.2 b/doc/man/nvme_zns_append.2
index 22562f9..16032de 100644
--- a/doc/man/nvme_zns_append.2
+++ b/doc/man/nvme_zns_append.2
@@ -1,4 +1,4 @@
-.TH "nvme_zns_append" 9 "nvme_zns_append" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_zns_append" 9 "nvme_zns_append" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_zns_append \- Append data to a zone
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_changed_zone_log.2 b/doc/man/nvme_zns_changed_zone_log.2
index b350a71..0f92e84 100644
--- a/doc/man/nvme_zns_changed_zone_log.2
+++ b/doc/man/nvme_zns_changed_zone_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_zns_changed_zone_log" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_zns_changed_zone_log" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_zns_changed_zone_log \- ZNS Changed Zone List log
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_desc.2 b/doc/man/nvme_zns_desc.2
index d298a06..16c1422 100644
--- a/doc/man/nvme_zns_desc.2
+++ b/doc/man/nvme_zns_desc.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_zns_desc" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_zns_desc" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_zns_desc \- Zone Descriptor Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_id_ctrl.2 b/doc/man/nvme_zns_id_ctrl.2
index 62b0951..0972b25 100644
--- a/doc/man/nvme_zns_id_ctrl.2
+++ b/doc/man/nvme_zns_id_ctrl.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_zns_id_ctrl" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_zns_id_ctrl" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_zns_id_ctrl \- I/O Command Set Specific Identify Controller Data Structure for the Zoned Namespace Command Set
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_id_ns.2 b/doc/man/nvme_zns_id_ns.2
index a482232..123e22b 100644
--- a/doc/man/nvme_zns_id_ns.2
+++ b/doc/man/nvme_zns_id_ns.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_zns_id_ns" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_zns_id_ns" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_zns_id_ns \- Zoned Namespace Command Set Specific Identify Namespace Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_identify_ctrl.2 b/doc/man/nvme_zns_identify_ctrl.2
index 0658853..393fb10 100644
--- a/doc/man/nvme_zns_identify_ctrl.2
+++ b/doc/man/nvme_zns_identify_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvme_zns_identify_ctrl" 9 "nvme_zns_identify_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_zns_identify_ctrl" 9 "nvme_zns_identify_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_zns_identify_ctrl \- ZNS identify controller data
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_identify_ns.2 b/doc/man/nvme_zns_identify_ns.2
index 22fe900..efc0018 100644
--- a/doc/man/nvme_zns_identify_ns.2
+++ b/doc/man/nvme_zns_identify_ns.2
@@ -1,4 +1,4 @@
-.TH "nvme_zns_identify_ns" 9 "nvme_zns_identify_ns" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_zns_identify_ns" 9 "nvme_zns_identify_ns" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_zns_identify_ns \- ZNS identify namespace data
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_lbafe.2 b/doc/man/nvme_zns_lbafe.2
index 46585d5..5a6ad65 100644
--- a/doc/man/nvme_zns_lbafe.2
+++ b/doc/man/nvme_zns_lbafe.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_zns_lbafe" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_zns_lbafe" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_zns_lbafe \- LBA Format Extension Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_mgmt_recv.2 b/doc/man/nvme_zns_mgmt_recv.2
index 5d3ed0e..425bc48 100644
--- a/doc/man/nvme_zns_mgmt_recv.2
+++ b/doc/man/nvme_zns_mgmt_recv.2
@@ -1,4 +1,4 @@
-.TH "nvme_zns_mgmt_recv" 9 "nvme_zns_mgmt_recv" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_zns_mgmt_recv" 9 "nvme_zns_mgmt_recv" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_zns_mgmt_recv \- ZNS management receive command
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_mgmt_send.2 b/doc/man/nvme_zns_mgmt_send.2
index 8e4dafa..4aa8c15 100644
--- a/doc/man/nvme_zns_mgmt_send.2
+++ b/doc/man/nvme_zns_mgmt_send.2
@@ -1,4 +1,4 @@
-.TH "nvme_zns_mgmt_send" 9 "nvme_zns_mgmt_send" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_zns_mgmt_send" 9 "nvme_zns_mgmt_send" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_zns_mgmt_send \- ZNS management send command
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_recv_action.2 b/doc/man/nvme_zns_recv_action.2
index fffa027..fad5733 100644
--- a/doc/man/nvme_zns_recv_action.2
+++ b/doc/man/nvme_zns_recv_action.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_zns_recv_action" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_zns_recv_action" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_zns_recv_action \- Zone Management Receive - Zone Receive Action Specific Features
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_report_options.2 b/doc/man/nvme_zns_report_options.2
index f5ba222..38bf3a8 100644
--- a/doc/man/nvme_zns_report_options.2
+++ b/doc/man/nvme_zns_report_options.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_zns_report_options" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_zns_report_options" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_zns_report_options \- Zone Management Receive - Zone Receive Action Specific Field
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_report_zones.2 b/doc/man/nvme_zns_report_zones.2
index 767839f..eeb8327 100644
--- a/doc/man/nvme_zns_report_zones.2
+++ b/doc/man/nvme_zns_report_zones.2
@@ -1,4 +1,4 @@
-.TH "nvme_zns_report_zones" 9 "nvme_zns_report_zones" "February 2024" "libnvme API manual" LINUX
+.TH "nvme_zns_report_zones" 9 "nvme_zns_report_zones" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvme_zns_report_zones \- Return the list of zones
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_send_action.2 b/doc/man/nvme_zns_send_action.2
index c349307..82ef76b 100644
--- a/doc/man/nvme_zns_send_action.2
+++ b/doc/man/nvme_zns_send_action.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_zns_send_action" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_zns_send_action" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_zns_send_action \- Zone Management Send - Zone Send Action
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_za.2 b/doc/man/nvme_zns_za.2
index 5f5e25a..7e58140 100644
--- a/doc/man/nvme_zns_za.2
+++ b/doc/man/nvme_zns_za.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_zns_za" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_zns_za" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_zns_za \- Zone Descriptor Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_zs.2 b/doc/man/nvme_zns_zs.2
index 3945750..94dfb20 100644
--- a/doc/man/nvme_zns_zs.2
+++ b/doc/man/nvme_zns_zs.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_zns_zs" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_zns_zs" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_zns_zs \- Zone Descriptor Data Structure - Zone State
.SH SYNOPSIS
diff --git a/doc/man/nvme_zns_zt.2 b/doc/man/nvme_zns_zt.2
index 3c78b70..42e9025 100644
--- a/doc/man/nvme_zns_zt.2
+++ b/doc/man/nvme_zns_zt.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvme_zns_zt" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvme_zns_zt" "May 2024" "API Manual" LINUX
.SH NAME
enum nvme_zns_zt \- Zone Descriptor Data Structure - Zone Type
.SH SYNOPSIS
diff --git a/doc/man/nvme_zone_report.2 b/doc/man/nvme_zone_report.2
index 5f8bf18..e6398af 100644
--- a/doc/man/nvme_zone_report.2
+++ b/doc/man/nvme_zone_report.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvme_zone_report" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvme_zone_report" "May 2024" "API Manual" LINUX
.SH NAME
struct nvme_zone_report \- Report Zones Data Structure
.SH SYNOPSIS
diff --git a/doc/man/nvmf_add_ctrl.2 b/doc/man/nvmf_add_ctrl.2
index 6f9d672..5178605 100644
--- a/doc/man/nvmf_add_ctrl.2
+++ b/doc/man/nvmf_add_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvmf_add_ctrl" 9 "nvmf_add_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvmf_add_ctrl" 9 "nvmf_add_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_add_ctrl \- Connect a controller and update topology
.SH SYNOPSIS
diff --git a/doc/man/nvmf_addr_family.2 b/doc/man/nvmf_addr_family.2
index 0531b0c..2f92f49 100644
--- a/doc/man/nvmf_addr_family.2
+++ b/doc/man/nvmf_addr_family.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_addr_family" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_addr_family" "May 2024" "API Manual" LINUX
.SH NAME
enum nvmf_addr_family \- Address Family codes for Discovery Log Page entry ADRFAM field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_adrfam_str.2 b/doc/man/nvmf_adrfam_str.2
index c0535e4..b051ecf 100644
--- a/doc/man/nvmf_adrfam_str.2
+++ b/doc/man/nvmf_adrfam_str.2
@@ -1,4 +1,4 @@
-.TH "nvmf_adrfam_str" 9 "nvmf_adrfam_str" "February 2024" "libnvme API manual" LINUX
+.TH "nvmf_adrfam_str" 9 "nvmf_adrfam_str" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_adrfam_str \- Decode ADRFAM field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_cms_str.2 b/doc/man/nvmf_cms_str.2
index fbae107..31f5410 100644
--- a/doc/man/nvmf_cms_str.2
+++ b/doc/man/nvmf_cms_str.2
@@ -1,4 +1,4 @@
-.TH "nvmf_cms_str" 9 "nvmf_cms_str" "February 2024" "libnvme API manual" LINUX
+.TH "nvmf_cms_str" 9 "nvmf_cms_str" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_cms_str \- Decode RDMA connection management service field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_connect_data.2 b/doc/man/nvmf_connect_data.2
index 8fb600a..7dead3b 100644
--- a/doc/man/nvmf_connect_data.2
+++ b/doc/man/nvmf_connect_data.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvmf_connect_data" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvmf_connect_data" "May 2024" "API Manual" LINUX
.SH NAME
struct nvmf_connect_data \- Data payload for the 'connect' command
.SH SYNOPSIS
diff --git a/doc/man/nvmf_connect_disc_entry.2 b/doc/man/nvmf_connect_disc_entry.2
index 0d767cc..917c3d8 100644
--- a/doc/man/nvmf_connect_disc_entry.2
+++ b/doc/man/nvmf_connect_disc_entry.2
@@ -1,4 +1,4 @@
-.TH "nvmf_connect_disc_entry" 9 "nvmf_connect_disc_entry" "February 2024" "libnvme API manual" LINUX
+.TH "nvmf_connect_disc_entry" 9 "nvmf_connect_disc_entry" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_connect_disc_entry \- Connect controller based on the discovery log page entry
.SH SYNOPSIS
diff --git a/doc/man/nvmf_default_config.2 b/doc/man/nvmf_default_config.2
index 7523ad2..bcbfd1f 100644
--- a/doc/man/nvmf_default_config.2
+++ b/doc/man/nvmf_default_config.2
@@ -1,4 +1,4 @@
-.TH "nvmf_default_config" 9 "nvmf_default_config" "February 2024" "libnvme API manual" LINUX
+.TH "nvmf_default_config" 9 "nvmf_default_config" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_default_config \- Default values for fabrics configuration
.SH SYNOPSIS
diff --git a/doc/man/nvmf_dim_data.2 b/doc/man/nvmf_dim_data.2
index 1fc72a3..8537794 100644
--- a/doc/man/nvmf_dim_data.2
+++ b/doc/man/nvmf_dim_data.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvmf_dim_data" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvmf_dim_data" "May 2024" "API Manual" LINUX
.SH NAME
struct nvmf_dim_data \- Discovery Information Management (DIM) - Data
.SH SYNOPSIS
diff --git a/doc/man/nvmf_dim_entfmt.2 b/doc/man/nvmf_dim_entfmt.2
index 08f2c2b..d5a6ed8 100644
--- a/doc/man/nvmf_dim_entfmt.2
+++ b/doc/man/nvmf_dim_entfmt.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_dim_entfmt" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_dim_entfmt" "May 2024" "API Manual" LINUX
.SH NAME
enum nvmf_dim_entfmt \- Discovery Information Management Entry Format
.SH SYNOPSIS
diff --git a/doc/man/nvmf_dim_etype.2 b/doc/man/nvmf_dim_etype.2
index 6b246e8..f26a4ee 100644
--- a/doc/man/nvmf_dim_etype.2
+++ b/doc/man/nvmf_dim_etype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_dim_etype" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_dim_etype" "May 2024" "API Manual" LINUX
.SH NAME
enum nvmf_dim_etype \- Discovery Information Management Entity Type
.SH SYNOPSIS
diff --git a/doc/man/nvmf_dim_tas.2 b/doc/man/nvmf_dim_tas.2
index e77e97d..b955da7 100644
--- a/doc/man/nvmf_dim_tas.2
+++ b/doc/man/nvmf_dim_tas.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_dim_tas" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_dim_tas" "May 2024" "API Manual" LINUX
.SH NAME
enum nvmf_dim_tas \- Discovery Information Management Task
.SH SYNOPSIS
diff --git a/doc/man/nvmf_disc_eflags.2 b/doc/man/nvmf_disc_eflags.2
index 1c7608d..de22768 100644
--- a/doc/man/nvmf_disc_eflags.2
+++ b/doc/man/nvmf_disc_eflags.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_disc_eflags" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_disc_eflags" "May 2024" "API Manual" LINUX
.SH NAME
enum nvmf_disc_eflags \- Discovery Log Page entry flags.
.SH SYNOPSIS
diff --git a/doc/man/nvmf_disc_log_entry.2 b/doc/man/nvmf_disc_log_entry.2
index f61c2f5..14d1b0d 100644
--- a/doc/man/nvmf_disc_log_entry.2
+++ b/doc/man/nvmf_disc_log_entry.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvmf_disc_log_entry" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvmf_disc_log_entry" "May 2024" "API Manual" LINUX
.SH NAME
struct nvmf_disc_log_entry \- Discovery Log Page entry
.SH SYNOPSIS
diff --git a/doc/man/nvmf_discovery_log.2 b/doc/man/nvmf_discovery_log.2
index 4ad3412..e333dc7 100644
--- a/doc/man/nvmf_discovery_log.2
+++ b/doc/man/nvmf_discovery_log.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvmf_discovery_log" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvmf_discovery_log" "May 2024" "API Manual" LINUX
.SH NAME
struct nvmf_discovery_log \- Discovery Log Page (Log Identifier 70h)
.SH SYNOPSIS
diff --git a/doc/man/nvmf_eflags_str.2 b/doc/man/nvmf_eflags_str.2
index b98e848..70848cc 100644
--- a/doc/man/nvmf_eflags_str.2
+++ b/doc/man/nvmf_eflags_str.2
@@ -1,4 +1,4 @@
-.TH "nvmf_eflags_str" 9 "nvmf_eflags_str" "February 2024" "libnvme API manual" LINUX
+.TH "nvmf_eflags_str" 9 "nvmf_eflags_str" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_eflags_str \- Decode EFLAGS field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_exat_len.2 b/doc/man/nvmf_exat_len.2
index 0fe3f5a..4902a9e 100644
--- a/doc/man/nvmf_exat_len.2
+++ b/doc/man/nvmf_exat_len.2
@@ -1,4 +1,4 @@
-.TH "nvmf_exat_len" 9 "nvmf_exat_len" "February 2024" "libnvme API manual" LINUX
+.TH "nvmf_exat_len" 9 "nvmf_exat_len" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_exat_len \- Return length rounded up by 4
.SH SYNOPSIS
diff --git a/doc/man/nvmf_exattype.2 b/doc/man/nvmf_exattype.2
index 93e2e8e..fd44507 100644
--- a/doc/man/nvmf_exattype.2
+++ b/doc/man/nvmf_exattype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_exattype" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_exattype" "May 2024" "API Manual" LINUX
.SH NAME
enum nvmf_exattype \- Extended Attribute Type
.SH SYNOPSIS
diff --git a/doc/man/nvmf_ext_attr.2 b/doc/man/nvmf_ext_attr.2
index 539f0f5..a6a6d54 100644
--- a/doc/man/nvmf_ext_attr.2
+++ b/doc/man/nvmf_ext_attr.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvmf_ext_attr" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvmf_ext_attr" "May 2024" "API Manual" LINUX
.SH NAME
struct nvmf_ext_attr \- Extended Attribute (EXAT)
.SH SYNOPSIS
diff --git a/doc/man/nvmf_ext_die.2 b/doc/man/nvmf_ext_die.2
index e66a1e2..488b08f 100644
--- a/doc/man/nvmf_ext_die.2
+++ b/doc/man/nvmf_ext_die.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "struct nvmf_ext_die" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "struct nvmf_ext_die" "May 2024" "API Manual" LINUX
.SH NAME
struct nvmf_ext_die \- Extended Discovery Information Entry (DIE)
.SH SYNOPSIS
diff --git a/doc/man/nvmf_get_discovery_log.2 b/doc/man/nvmf_get_discovery_log.2
index 1b6df15..7463834 100644
--- a/doc/man/nvmf_get_discovery_log.2
+++ b/doc/man/nvmf_get_discovery_log.2
@@ -1,4 +1,4 @@
-.TH "nvmf_get_discovery_log" 9 "nvmf_get_discovery_log" "February 2024" "libnvme API manual" LINUX
+.TH "nvmf_get_discovery_log" 9 "nvmf_get_discovery_log" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_get_discovery_log \- Return the discovery log page
.SH SYNOPSIS
diff --git a/doc/man/nvmf_get_discovery_wargs.2 b/doc/man/nvmf_get_discovery_wargs.2
index 8a3e232..960ba2b 100644
--- a/doc/man/nvmf_get_discovery_wargs.2
+++ b/doc/man/nvmf_get_discovery_wargs.2
@@ -1,4 +1,4 @@
-.TH "nvmf_get_discovery_wargs" 9 "nvmf_get_discovery_wargs" "February 2024" "libnvme API manual" LINUX
+.TH "nvmf_get_discovery_wargs" 9 "nvmf_get_discovery_wargs" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_get_discovery_wargs \- Get the discovery log page with args
.SH SYNOPSIS
diff --git a/doc/man/nvmf_hostid_from_file.2 b/doc/man/nvmf_hostid_from_file.2
index d05cec0..fa0d20e 100644
--- a/doc/man/nvmf_hostid_from_file.2
+++ b/doc/man/nvmf_hostid_from_file.2
@@ -1,4 +1,4 @@
-.TH "nvmf_hostid_from_file" 9 "nvmf_hostid_from_file" "February 2024" "libnvme API manual" LINUX
+.TH "nvmf_hostid_from_file" 9 "nvmf_hostid_from_file" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_hostid_from_file \- Reads the host identifier from the config default location
.SH SYNOPSIS
diff --git a/doc/man/nvmf_hostnqn_from_file.2 b/doc/man/nvmf_hostnqn_from_file.2
index 5423f7c..a0e76d6 100644
--- a/doc/man/nvmf_hostnqn_from_file.2
+++ b/doc/man/nvmf_hostnqn_from_file.2
@@ -1,4 +1,4 @@
-.TH "nvmf_hostnqn_from_file" 9 "nvmf_hostnqn_from_file" "February 2024" "libnvme API manual" LINUX
+.TH "nvmf_hostnqn_from_file" 9 "nvmf_hostnqn_from_file" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_hostnqn_from_file \- Reads the host nvm qualified name from the config default location
.SH SYNOPSIS
diff --git a/doc/man/nvmf_hostnqn_generate.2 b/doc/man/nvmf_hostnqn_generate.2
index a1ee41a..868fc97 100644
--- a/doc/man/nvmf_hostnqn_generate.2
+++ b/doc/man/nvmf_hostnqn_generate.2
@@ -1,4 +1,4 @@
-.TH "nvmf_hostnqn_generate" 9 "nvmf_hostnqn_generate" "February 2024" "libnvme API manual" LINUX
+.TH "nvmf_hostnqn_generate" 9 "nvmf_hostnqn_generate" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_hostnqn_generate \- Generate a machine specific host nqn
.SH SYNOPSIS
diff --git a/doc/man/nvmf_log_discovery_lid_support.2 b/doc/man/nvmf_log_discovery_lid_support.2
index 1d3beca..4ff541d 100644
--- a/doc/man/nvmf_log_discovery_lid_support.2
+++ b/doc/man/nvmf_log_discovery_lid_support.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_log_discovery_lid_support" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_log_discovery_lid_support" "May 2024" "API Manual" LINUX
.SH NAME
enum nvmf_log_discovery_lid_support \- Discovery log specific support
.SH SYNOPSIS
diff --git a/doc/man/nvmf_log_discovery_lsp.2 b/doc/man/nvmf_log_discovery_lsp.2
index a50eff3..3313ad4 100644
--- a/doc/man/nvmf_log_discovery_lsp.2
+++ b/doc/man/nvmf_log_discovery_lsp.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_log_discovery_lsp" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_log_discovery_lsp" "May 2024" "API Manual" LINUX
.SH NAME
enum nvmf_log_discovery_lsp \- Discovery log specific field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_prtype_str.2 b/doc/man/nvmf_prtype_str.2
index 4a356de..f7f6475 100644
--- a/doc/man/nvmf_prtype_str.2
+++ b/doc/man/nvmf_prtype_str.2
@@ -1,4 +1,4 @@
-.TH "nvmf_prtype_str" 9 "nvmf_prtype_str" "February 2024" "libnvme API manual" LINUX
+.TH "nvmf_prtype_str" 9 "nvmf_prtype_str" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_prtype_str \- Decode RDMA Provider type field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_qptype_str.2 b/doc/man/nvmf_qptype_str.2
index 8409b40..8440f6d 100644
--- a/doc/man/nvmf_qptype_str.2
+++ b/doc/man/nvmf_qptype_str.2
@@ -1,4 +1,4 @@
-.TH "nvmf_qptype_str" 9 "nvmf_qptype_str" "February 2024" "libnvme API manual" LINUX
+.TH "nvmf_qptype_str" 9 "nvmf_qptype_str" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_qptype_str \- Decode RDMA QP Service type field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_rdma_cms.2 b/doc/man/nvmf_rdma_cms.2
index 18e9aaf..501d1d9 100644
--- a/doc/man/nvmf_rdma_cms.2
+++ b/doc/man/nvmf_rdma_cms.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_rdma_cms" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_rdma_cms" "May 2024" "API Manual" LINUX
.SH NAME
enum nvmf_rdma_cms \- RDMA Connection Management Service Type codes for Discovery Log Page entry TSAS RDMA_CMS field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_rdma_prtype.2 b/doc/man/nvmf_rdma_prtype.2
index d09edad..c7b0207 100644
--- a/doc/man/nvmf_rdma_prtype.2
+++ b/doc/man/nvmf_rdma_prtype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_rdma_prtype" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_rdma_prtype" "May 2024" "API Manual" LINUX
.SH NAME
enum nvmf_rdma_prtype \- RDMA Provider Type codes for Discovery Log Page entry TSAS RDMA_PRTYPE field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_rdma_qptype.2 b/doc/man/nvmf_rdma_qptype.2
index d6d6fc4..20af094 100644
--- a/doc/man/nvmf_rdma_qptype.2
+++ b/doc/man/nvmf_rdma_qptype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_rdma_qptype" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_rdma_qptype" "May 2024" "API Manual" LINUX
.SH NAME
enum nvmf_rdma_qptype \- RDMA QP Service Type codes for Discovery Log Page entry TSAS RDMA_QPTYPE field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_register_ctrl.2 b/doc/man/nvmf_register_ctrl.2
index 7ef04b1..3adbf57 100644
--- a/doc/man/nvmf_register_ctrl.2
+++ b/doc/man/nvmf_register_ctrl.2
@@ -1,4 +1,4 @@
-.TH "nvmf_register_ctrl" 9 "nvmf_register_ctrl" "February 2024" "libnvme API manual" LINUX
+.TH "nvmf_register_ctrl" 9 "nvmf_register_ctrl" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_register_ctrl \- Perform registration task with a DC
.SH SYNOPSIS
diff --git a/doc/man/nvmf_sectype_str.2 b/doc/man/nvmf_sectype_str.2
index 5d2bca1..498ce42 100644
--- a/doc/man/nvmf_sectype_str.2
+++ b/doc/man/nvmf_sectype_str.2
@@ -1,4 +1,4 @@
-.TH "nvmf_sectype_str" 9 "nvmf_sectype_str" "February 2024" "libnvme API manual" LINUX
+.TH "nvmf_sectype_str" 9 "nvmf_sectype_str" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_sectype_str \- Decode SECTYPE field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_subtype_str.2 b/doc/man/nvmf_subtype_str.2
index c5f8271..f0ef62a 100644
--- a/doc/man/nvmf_subtype_str.2
+++ b/doc/man/nvmf_subtype_str.2
@@ -1,4 +1,4 @@
-.TH "nvmf_subtype_str" 9 "nvmf_subtype_str" "February 2024" "libnvme API manual" LINUX
+.TH "nvmf_subtype_str" 9 "nvmf_subtype_str" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_subtype_str \- Decode SUBTYPE field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_tcp_sectype.2 b/doc/man/nvmf_tcp_sectype.2
index d25de9d..bcd3c6b 100644
--- a/doc/man/nvmf_tcp_sectype.2
+++ b/doc/man/nvmf_tcp_sectype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_tcp_sectype" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_tcp_sectype" "May 2024" "API Manual" LINUX
.SH NAME
enum nvmf_tcp_sectype \- Transport Specific Address Subtype Definition for NVMe/TCP Transport
.SH SYNOPSIS
diff --git a/doc/man/nvmf_treq.2 b/doc/man/nvmf_treq.2
index 12af12d..2930542 100644
--- a/doc/man/nvmf_treq.2
+++ b/doc/man/nvmf_treq.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_treq" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_treq" "May 2024" "API Manual" LINUX
.SH NAME
enum nvmf_treq \- Transport Requirements codes for Discovery Log Page entry TREQ field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_treq_str.2 b/doc/man/nvmf_treq_str.2
index 2c65a53..e0a376d 100644
--- a/doc/man/nvmf_treq_str.2
+++ b/doc/man/nvmf_treq_str.2
@@ -1,4 +1,4 @@
-.TH "nvmf_treq_str" 9 "nvmf_treq_str" "February 2024" "libnvme API manual" LINUX
+.TH "nvmf_treq_str" 9 "nvmf_treq_str" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_treq_str \- Decode TREQ field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_trtype.2 b/doc/man/nvmf_trtype.2
index 98b6ac5..ea07c3c 100644
--- a/doc/man/nvmf_trtype.2
+++ b/doc/man/nvmf_trtype.2
@@ -1,4 +1,4 @@
-.TH "libnvme" 9 "enum nvmf_trtype" "February 2024" "API Manual" LINUX
+.TH "libnvme" 9 "enum nvmf_trtype" "May 2024" "API Manual" LINUX
.SH NAME
enum nvmf_trtype \- Transport Type codes for Discovery Log Page entry TRTYPE field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_trtype_str.2 b/doc/man/nvmf_trtype_str.2
index 98fd0a0..2c5aa6d 100644
--- a/doc/man/nvmf_trtype_str.2
+++ b/doc/man/nvmf_trtype_str.2
@@ -1,4 +1,4 @@
-.TH "nvmf_trtype_str" 9 "nvmf_trtype_str" "February 2024" "libnvme API manual" LINUX
+.TH "nvmf_trtype_str" 9 "nvmf_trtype_str" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_trtype_str \- Decode TRTYPE field
.SH SYNOPSIS
diff --git a/doc/man/nvmf_update_config.2 b/doc/man/nvmf_update_config.2
index 243b40e..dc3399f 100644
--- a/doc/man/nvmf_update_config.2
+++ b/doc/man/nvmf_update_config.2
@@ -1,4 +1,4 @@
-.TH "nvmf_update_config" 9 "nvmf_update_config" "February 2024" "libnvme API manual" LINUX
+.TH "nvmf_update_config" 9 "nvmf_update_config" "May 2024" "libnvme API manual" LINUX
.SH NAME
nvmf_update_config \- Update fabrics configuration values
.SH SYNOPSIS
diff --git a/doc/rst/fabrics.rst b/doc/rst/fabrics.rst
index 74d04e5..141c486 100644
--- a/doc/rst/fabrics.rst
+++ b/doc/rst/fabrics.rst
@@ -27,8 +27,8 @@ Fabrics-specific definitions.
int nr_write_queues;
int nr_poll_queues;
int tos;
- int keyring;
- int tls_key;
+ long keyring;
+ long tls_key;
bool duplicate_connect;
bool disable_sqflow;
bool hdr_digest;
diff --git a/doc/rst/ioctl.rst b/doc/rst/ioctl.rst
index 4d8af34..7b2003d 100644
--- a/doc/rst/ioctl.rst
+++ b/doc/rst/ioctl.rst
@@ -4218,6 +4218,34 @@ The nvme command status if a response was received (see
:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
+.. c:function:: int nvme_ns_mgmt_delete_timeout (int fd, __u32 nsid, __u32 timeout)
+
+ Delete a non attached namespace with timeout
+
+**Parameters**
+
+``int fd``
+ File descriptor of nvme device
+
+``__u32 nsid``
+ Namespace identifier to delete
+
+``__u32 timeout``
+ Override the default timeout to this value in milliseconds;
+ set to 0 to use the system default.
+
+**Description**
+
+It is recommended that a namespace being deleted is not attached to any
+controller. Use the nvme_ns_detach_ctrls() first if the namespace is still
+attached.
+
+**Return**
+
+The nvme command status if a response was received (see
+:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
+
+
.. c:function:: int nvme_ns_mgmt_delete (int fd, __u32 nsid)
Delete a non attached namespace
@@ -5201,27 +5229,3 @@ The nvme command status if a response was received (see
:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-.. c:function:: void nvme_set_debug (bool debug)
-
- Set NVMe command debugging output
-
-**Parameters**
-
-``bool debug``
- true to enable or false to disable
-
-
-.. c:function:: bool nvme_get_debug (void)
-
- Get NVMe command debugging output
-
-**Parameters**
-
-``void``
- no arguments
-
-**Return**
-
-false if disabled or true if enabled.
-
-
diff --git a/doc/rst/linux.rst b/doc/rst/linux.rst
index 819ee68..cf49851 100644
--- a/doc/rst/linux.rst
+++ b/doc/rst/linux.rst
@@ -463,6 +463,127 @@ its keys are available for further key lookups.
with errno set.
+.. c:function:: unsigned char * nvme_read_key (long keyring_id, long key_id, int *len)
+
+ Read key raw data
+
+**Parameters**
+
+``long keyring_id``
+ Id of the keyring holding ``key_id``
+
+``long key_id``
+ Key id
+
+``int *len``
+ Length of the returned data
+
+**Description**
+
+Links the keyring specified by **keyring_id** into the session
+keyring and reads the payload of the key specified by **key_id**.
+**len** holds the size of the returned buffer.
+If **keyring** is 0 the default keyring '.nvme' is used.
+
+**Return**
+
+Pointer to the payload on success,
+or NULL with errno set otherwise.
+
+
+.. c:function:: long nvme_update_key (long keyring_id, const char *key_type, const char *identity, unsigned char *key_data, int key_len)
+
+ Update key raw data
+
+**Parameters**
+
+``long keyring_id``
+ Id of the keyring holding ``key_id``
+
+``const char *key_type``
+ Type of the key to insert
+
+``const char *identity``
+ Key identity string
+
+``unsigned char *key_data``
+ Raw data of the key
+
+``int key_len``
+ Length of **key_data**
+
+**Description**
+
+Links the keyring specified by **keyring_id** into the session
+keyring and updates the key reference by **identity** with **key_data**.
+The old key with identity **identity** will be revoked to make it
+inaccessible.
+
+**Return**
+
+Key id of the new key or 0 with errno set otherwise.
+
+
+.. c:macro:: nvme_scan_tls_keys_cb_t
+
+ **Typedef**: Callback for iterating TLS keys
+
+
+**Syntax**
+
+ ``void nvme_scan_tls_keys_cb_t (long keyring, long key, char *desc, int desc_len, void *data)``
+
+**Parameters**
+
+``long keyring``
+ Keyring which has been iterated
+
+``long key``
+ Key for which the callback has been invoked
+
+``char *desc``
+ Description of the key
+
+``int desc_len``
+ Length of **desc**
+
+``void *data``
+ Pointer for caller data
+
+**Description**
+
+Called for each TLS PSK in the keyring.
+
+
+.. c:function:: int nvme_scan_tls_keys (const char *keyring, nvme_scan_tls_keys_cb_t cb, void *data)
+
+ Iterate over TLS keys in a keyring
+
+**Parameters**
+
+``const char *keyring``
+ Keyring holding TLS keys
+
+``nvme_scan_tls_keys_cb_t cb``
+ Callback function
+
+``void *data``
+ Pointer for data to be passed to **cb**
+
+**Description**
+
+Iterates **keyring** and call **cb** for each TLS key. When **keyring** is NULL
+the default '.nvme' keyring is used.
+A TLS key must be of type 'psk' and the description must be of the
+form 'NVMe<0|1><R|G>0<1|2> <identity>', otherwise it will be skipped
+during iteration.
+
+**Return**
+
+Number of keys for which **cb** was called, or -1 with errno set
+on error.
+
+
.. c:function:: long nvme_insert_tls_key (const char *keyring, const char *key_type, const char *hostnqn, const char *subsysnqn, int hmac, unsigned char *configured_key, int key_len)
Derive and insert TLS key
@@ -578,3 +699,111 @@ The string containing the TLS identity. It is the responsibility
of the caller to free the returned string.
+.. c:function:: char * nvme_export_tls_key (const unsigned char *key_data, int key_len)
+
+ Export a TLS key
+
+**Parameters**
+
+``const unsigned char *key_data``
+ Raw data of the key
+
+``int key_len``
+ Length of **key_data**
+
+**Description**
+
+Returns **key_data** in the PSK Interchange format as defined in section
+3.6.1.5 of the NVMe TCP Transport specification.
+
+**Return**
+
+The string containing the TLS identity or NULL with errno set
+on error. It is the responsibility of the caller to free the returned
+string.
+
+
+.. c:function:: unsigned char * nvme_import_tls_key (const char *encoded_key, int *key_len, unsigned int *hmac)
+
+ Import a TLS key
+
+**Parameters**
+
+``const char *encoded_key``
+ TLS key in PSK interchange format
+
+``int *key_len``
+ Length of the resulting key data
+
+``unsigned int *hmac``
+ HMAC algorithm
+
+**Description**
+
+Imports **key_data** in the PSK Interchange format as defined in section
+3.6.1.5 of the NVMe TCP Transport specification.
+
+**Return**
+
+The raw data of the PSK or NULL with errno set on error. It is
+the responsibility of the caller to free the returned string.
+
+
+.. c:function:: int nvme_submit_passthru (int fd, unsigned long ioctl_cmd, struct nvme_passthru_cmd *cmd, __u32 *result)
+
+ Low level ioctl wrapper for passthru commands
+
+**Parameters**
+
+``int fd``
+ File descriptor of the nvme device
+
+``unsigned long ioctl_cmd``
+ IOCTL command id
+
+``struct nvme_passthru_cmd *cmd``
+ Passhtru command
+
+``__u32 *result``
+ Optional field to return the result
+
+**Description**
+
+This is a low level library function which should not be used directly. It is
+exposed as weak symbol so that the user application is able to provide their own
+implementation of this function with additional debugging or logging code.
+
+**Return**
+
+The value from the ioctl system call (see ioctl documentation)
+
+
+.. c:function:: int nvme_submit_passthru64 (int fd, unsigned long ioctl_cmd, struct nvme_passthru_cmd64 *cmd, __u64 *result)
+
+ Low level ioctl wrapper for passthru commands
+
+**Parameters**
+
+``int fd``
+ File descriptor of the nvme device
+
+``unsigned long ioctl_cmd``
+ IOCTL command id
+
+``struct nvme_passthru_cmd64 *cmd``
+ Passhtru command
+
+``__u64 *result``
+ Optional field to return the result
+
+**Description**
+
+This is a low level library function which should not be used directly. It is
+exposed as weak symbol so that the user application is able to provide their own
+implementation of this function with additional debugging or logging code.
+
+**Return**
+
+The value from the ioctl system call (see ioctl documentation)
+
+
diff --git a/doc/rst/log.rst b/doc/rst/log.rst
index 67911a5..edbb330 100644
--- a/doc/rst/log.rst
+++ b/doc/rst/log.rst
@@ -28,6 +28,32 @@ logging functions
Sets the default logging variables for the library.
+.. c:function:: int nvme_get_logging_level (nvme_root_t r, bool *log_pid, bool *log_tstamp)
+
+ Get current logging level
+
+**Parameters**
+
+``nvme_root_t r``
+ nvme_root_t context
+
+``bool *log_pid``
+ Pointer to store a current value of logging of
+ the PID flag at (optional).
+
+``bool *log_tstamp``
+ Pointer to store a current value of logging of
+ the timestamp flag at (optional).
+
+**Description**
+
+Retrieves current values of logging variables.
+
+**Return**
+
+current log level value or DEFAULT_LOGLEVEL if not initialized.
+
+
.. c:function:: void nvme_set_root (nvme_root_t r)
Set nvme_root_t context
@@ -47,3 +73,36 @@ the latest created root object. Note the first **nvme_free_tree** call will rese
the global root object.
+.. c:function:: void nvme_set_debug (bool debug)
+
+ Set NVMe command debugging output
+
+**Parameters**
+
+``bool debug``
+ true to enable or false to disable
+
+**Description**
+
+Don't use it, it's debricated.
+
+
+.. c:function:: bool nvme_get_debug (void)
+
+ Get NVMe command debugging output
+
+**Parameters**
+
+``void``
+ no arguments
+
+**Description**
+
+
+Don't use it, it's debricated.
+
+**Return**
+
+false if disabled or true if enabled.
+
+
diff --git a/doc/rst/nbft.rst b/doc/rst/nbft.rst
index 93a3642..2a7b72f 100644
--- a/doc/rst/nbft.rst
+++ b/doc/rst/nbft.rst
@@ -1,3 +1,12 @@
+.. _nbft.h:
+
+**nbft.h**
+
+
+NVM Express Boot Specification, Revision 1.0
+
+Note: this API is currently unstable, subject to further additions.
+
.. c:enum:: nbft_desc_type
@@ -1716,6 +1725,8 @@
int controller_id;
int asqsz;
char *dhcp_root_path_string;
+ bool discovered;
+ bool unavailable;
};
**Members**
@@ -1785,6 +1796,14 @@
DHCP Root Path Override string (SSNS Extended
Information Descriptor).
+``discovered``
+ Indicates that this namespace was acquired
+ through discovery.
+
+``unavailable``
+ Namespace is unavailable as indicated by
+ the pre-OS driver.
+
diff --git a/doc/rst/tree.rst b/doc/rst/tree.rst
index b73ffae..6f79703 100644
--- a/doc/rst/tree.rst
+++ b/doc/rst/tree.rst
@@ -1729,6 +1729,20 @@ Host interface name of **c** (if present)
DH-HMAC-CHAP host key or NULL if not set
+.. c:function:: const char * nvme_ctrl_get_cntlid (nvme_ctrl_t c)
+
+ Controller id
+
+**Parameters**
+
+``nvme_ctrl_t c``
+ Controller to be checked
+
+**Return**
+
+Controller id of **c**
+
+
.. c:function:: void nvme_ctrl_set_dhchap_host_key (nvme_ctrl_t c, const char *key)
Set host key
diff --git a/doc/rst/types.rst b/doc/rst/types.rst
index 2aecd14..1d6ad5a 100644
--- a/doc/rst/types.rst
+++ b/doc/rst/types.rst
@@ -296,6 +296,486 @@ Location) register is not supported by fabrics, but it can be checked here.
true if given offset is 64bit register, otherwise it returns false.
+
+
+.. c:enum:: nvme_cap
+
+ This field indicates the controller capabilities register
+
+**Constants**
+
+``NVME_CAP_MQES_SHIFT``
+ Shift amount to get the maximum queue entries supported
+
+``NVME_CAP_CQR_SHIFT``
+ Shift amount to get the contiguous queues required
+
+``NVME_CAP_AMS_SHIFT``
+ Shift amount to get the arbitration mechanism supported
+
+``NVME_CAP_TO_SHIFT``
+ Shift amount to get the timeout
+
+``NVME_CAP_DSTRD_SHIFT``
+ Shift amount to get the doorbell stride
+
+``NVME_CAP_NSSRC_SHIFT``
+ Shift amount to get the NVM subsystem reset supported
+
+``NVME_CAP_CSS_SHIFT``
+ Shift amount to get the command sets supported
+
+``NVME_CAP_BPS_SHIFT``
+ Shift amount to get the boot partition support
+
+``NVME_CAP_CPS_SHIFT``
+ Shift amount to get the controller power scope
+
+``NVME_CAP_MPSMIN_SHIFT``
+ Shift amount to get the memory page size minimum
+
+``NVME_CAP_MPSMAX_SHIFT``
+ Shift amount to get the memory page size maximum
+
+``NVME_CAP_PMRS_SHIFT``
+ Shift amount to get the persistent memory region supported
+
+``NVME_CAP_CMBS_SHIFT``
+ Shift amount to get the controller memory buffer supported
+
+``NVME_CAP_NSSS_SHIFT``
+ Shift amount to get the NVM subsystem shutdown supported
+
+``NVME_CAP_CRMS_SHIFT``
+ Shift amount to get the controller ready modes supported
+
+``NVME_CAP_MQES_MASK``
+ Mask to get the maximum queue entries supported
+
+``NVME_CAP_CQR_MASK``
+ Mask to get the contiguous queues required
+
+``NVME_CAP_AMS_MASK``
+ Mask to get the arbitration mechanism supported
+
+``NVME_CAP_TO_MASK``
+ Mask to get the timeout
+
+``NVME_CAP_DSTRD_MASK``
+ Mask to get the doorbell stride
+
+``NVME_CAP_NSSRC_MASK``
+ Mask to get the NVM subsystem reset supported
+
+``NVME_CAP_CSS_MASK``
+ Mask to get the command sets supported
+
+``NVME_CAP_BPS_MASK``
+ Mask to get the boot partition support
+
+``NVME_CAP_CPS_MASK``
+ Mask to get the controller power scope
+
+``NVME_CAP_MPSMIN_MASK``
+ Mask to get the memory page size minimum
+
+``NVME_CAP_MPSMAX_MASK``
+ Mask to get the memory page size maximum
+
+``NVME_CAP_PMRS_MASK``
+ Mask to get the persistent memory region supported
+
+``NVME_CAP_CMBS_MASK``
+ Mask to get the controller memory buffer supported
+
+``NVME_CAP_NSSS_MASK``
+ Mask to get the NVM subsystem shutdown supported
+
+``NVME_CAP_CRMS_MASK``
+ Mask to get the controller ready modes supported
+
+``NVME_CAP_AMS_WRR``
+ Weighted round robin with urgent priority class
+
+``NVME_CAP_AMS_VS``
+ Vendor specific
+
+``NVME_CAP_CSS_NVM``
+ NVM command set or a discovery controller
+
+``NVME_CAP_CSS_CSI``
+ Controller supports one or more I/O command sets
+
+``NVME_CAP_CSS_ADMIN``
+ No I/O command set is supported
+
+``NVME_CAP_CPS_NONE``
+ Not reported
+
+``NVME_CAP_CPS_CTRL``
+ Controller scope
+
+``NVME_CAP_CPS_DOMAIN``
+ Domain scope
+
+``NVME_CAP_CPS_NVMS``
+ NVM subsystem scope
+
+``NVME_CAP_CRWMS``
+ Controller ready with media support
+
+``NVME_CAP_CRIMS``
+ Controller ready independent of media support
+
+
+
+
+.. c:enum:: nvme_vs
+
+ This field indicates the version
+
+**Constants**
+
+``NVME_VS_TER_SHIFT``
+ Shift amount to get the tertiary version
+
+``NVME_VS_MNR_SHIFT``
+ Shift amount to get the minor version
+
+``NVME_VS_MJR_SHIFT``
+ Shift amount to get the major version
+
+``NVME_VS_TER_MASK``
+ Mask to get the tertiary version
+
+``NVME_VS_MNR_MASK``
+ Mask to get the minor version
+
+``NVME_VS_MJR_MASK``
+ Mask to get the major version
+
+
+
+
+.. c:enum:: nvme_cc
+
+ This field indicates the controller configuration
+
+**Constants**
+
+``NVME_CC_EN_SHIFT``
+ Shift amount to get the enable
+
+``NVME_CC_CSS_SHIFT``
+ Shift amount to get the I/O command set selected
+
+``NVME_CC_MPS_SHIFT``
+ Shift amount to get the memory page size
+
+``NVME_CC_AMS_SHIFT``
+ Shift amount to get the arbitration mechanism selected
+
+``NVME_CC_SHN_SHIFT``
+ Shift amount to get the shutdown notification
+
+``NVME_CC_IOSQES_SHIFT``
+ Shift amount to get the I/O submission queue entry size
+
+``NVME_CC_IOCQES_SHIFT``
+ Shift amount to get the I/O completion queue entry size
+
+``NVME_CC_CRIME_SHIFT``
+ Shift amount to get the controller ready independent of media enable
+
+``NVME_CC_EN_MASK``
+ Mask to get the enable
+
+``NVME_CC_CSS_MASK``
+ Mask to get the I/O command set selected
+
+``NVME_CC_MPS_MASK``
+ Mask to get the memory page size
+
+``NVME_CC_AMS_MASK``
+ Mask to get the arbitration mechanism selected
+
+``NVME_CC_SHN_MASK``
+ Mask to get the shutdown notification
+
+``NVME_CC_CRIME_MASK``
+ Mask to get the I/O submission queue entry size
+
+``NVME_CC_IOSQES_MASK``
+ Mask to get the I/O completion queue entry size
+
+``NVME_CC_IOCQES_MASK``
+ Mask to get the controller ready independent of media enable
+
+``NVME_CC_CSS_NVM``
+ NVM command set
+
+``NVME_CC_CSS_CSI``
+ All supported I/O command sets
+
+``NVME_CC_CSS_ADMIN``
+ Admin command set only
+
+``NVME_CC_AMS_RR``
+ Round robin
+
+``NVME_CC_AMS_WRRU``
+ Weighted round robin with urgent priority class
+
+``NVME_CC_AMS_VS``
+ Vendor specific
+
+``NVME_CC_SHN_NONE``
+ No notification; no effect
+
+``NVME_CC_SHN_NORMAL``
+ Normal shutdown notification
+
+``NVME_CC_SHN_ABRUPT``
+ Abrupt shutdown notification
+
+``NVME_CC_CRWME``
+ Controller ready with media enable
+
+``NVME_CC_CRIME``
+ Controller ready independent of media enable
+
+
+
+
+.. c:enum:: nvme_csts
+
+ This field indicates the controller status register
+
+**Constants**
+
+``NVME_CSTS_RDY_SHIFT``
+ Shift amount to get the ready
+
+``NVME_CSTS_CFS_SHIFT``
+ Shift amount to get the controller fatal status
+
+``NVME_CSTS_SHST_SHIFT``
+ Shift amount to get the shutdown status
+
+``NVME_CSTS_NSSRO_SHIFT``
+ Shift amount to get the NVM subsystem reset occurred
+
+``NVME_CSTS_PP_SHIFT``
+ Shift amount to get the processing paused
+
+``NVME_CSTS_ST_SHIFT``
+ Shift amount to get the shutdown type
+
+``NVME_CSTS_RDY_MASK``
+ Mask to get the ready
+
+``NVME_CSTS_CFS_MASK``
+ Mask to get the controller fatal status
+
+``NVME_CSTS_SHST_MASK``
+ Mask to get the shutdown status
+
+``NVME_CSTS_NSSRO_MASK``
+ Mask to get the NVM subsystem reset occurred
+
+``NVME_CSTS_PP_MASK``
+ Mask to get the processing paused
+
+``NVME_CSTS_ST_MASK``
+ Mask to get the shutdown type
+
+``NVME_CSTS_SHST_NORMAL``
+ Normal operation
+
+``NVME_CSTS_SHST_OCCUR``
+ Shutdown processing occurring
+
+``NVME_CSTS_SHST_CMPLT``
+ Shutdown processing complete
+
+``NVME_CSTS_SHN_MASK``
+ Deprecated mask to get the shutdown status
+
+
+
+
+.. c:enum:: nvme_aqa
+
+ This field indicates the admin queue attributes
+
+**Constants**
+
+``NVME_AQA_ASQS_SHIFT``
+ Shift amount to get the admin submission queue size
+
+``NVME_AQA_ACQS_SHIFT``
+ Shift amount to get the admin completion queue size
+
+``NVME_AQA_ASQS_MASK``
+ Mask to get the admin submission queue size
+
+``NVME_AQA_ACQS_MASK``
+ Mask to get the admin completion queue size
+
+
+
+
+.. c:enum:: nvme_asq
+
+ This field indicates the admin submission queue base address
+
+**Constants**
+
+``NVME_ASQ_ASQB_SHIFT``
+ Shift amount to get the admin submission queue base
+
+
+
+
+.. c:enum:: nvme_acq
+
+ This field indicates the admin completion queue base address
+
+**Constants**
+
+``NVME_ACQ_ACQB_SHIFT``
+ Shift amount to get the admin completion queue base
+
+
+
+
+.. c:enum:: nvme_cmbloc
+
+ This field indicates the controller memory buffer location
+
+**Constants**
+
+``NVME_CMBLOC_BIR_SHIFT``
+ Shift amount to get the base indicator register
+
+``NVME_CMBLOC_CQMMS_SHIFT``
+ Shift amount to get the CMB queue mixed memory support
+
+``NVME_CMBLOC_CQPDS_SHIFT``
+ Shift amount to get the CMB queue physically discontiguous support
+
+``NVME_CMBLOC_CDPLMS_SHIFT``
+ Shift amount to get the CMB data pointer mixed locations support
+
+``NVME_CMBLOC_CDPCILS_SHIFT``
+ Shift amount to get the CMB data pointer and command independent locations support
+
+``NVME_CMBLOC_CDMMMS_SHIFT``
+ Shift amount to get the CMB data metadata mixed memory support
+
+``NVME_CMBLOC_CQDA_SHIFT``
+ Shift amount to get the CMB queue dword alignment
+
+``NVME_CMBLOC_OFST_SHIFT``
+ Shift amount to get the offset
+
+``NVME_CMBLOC_BIR_MASK``
+ Mask to get the base indicator register
+
+``NVME_CMBLOC_CQMMS_MASK``
+ Mask to get the CMB queue mixed memory support
+
+``NVME_CMBLOC_CQPDS_MASK``
+ Mask to get the CMB queue physically discontiguous support
+
+``NVME_CMBLOC_CDPLMS_MASK``
+ Mask to get the CMB data pointer mixed locations support
+
+``NVME_CMBLOC_CDPCILS_MASK``
+ Mask to get the CMB data pointer and command independent locations support
+
+``NVME_CMBLOC_CDMMMS_MASK``
+ Mask to get the CMB data metadata mixed memory support
+
+``NVME_CMBLOC_CQDA_MASK``
+ Mask to get the CMB queue dword alignment
+
+``NVME_CMBLOC_OFST_MASK``
+ Mask to get the offset
+
+
+
+
+.. c:enum:: nvme_cmbsz
+
+ This field indicates the controller memory buffer size
+
+**Constants**
+
+``NVME_CMBSZ_SQS_SHIFT``
+ Shift amount to get the submission queue support
+
+``NVME_CMBSZ_CQS_SHIFT``
+ Shift amount to get the completion queue support
+
+``NVME_CMBSZ_LISTS_SHIFT``
+ Shift amount to get the PLP SGL list support
+
+``NVME_CMBSZ_RDS_SHIFT``
+ Shift amount to get the read data support
+
+``NVME_CMBSZ_WDS_SHIFT``
+ Shift amount to get the write data support
+
+``NVME_CMBSZ_SZU_SHIFT``
+ Shift amount to get the size units
+
+``NVME_CMBSZ_SZ_SHIFT``
+ Shift amount to get the size
+
+``NVME_CMBSZ_SQS_MASK``
+ Mask to get the submission queue support
+
+``NVME_CMBSZ_CQS_MASK``
+ Mask to get the completion queue support
+
+``NVME_CMBSZ_LISTS_MASK``
+ Mask to get the PLP SGL list support
+
+``NVME_CMBSZ_RDS_MASK``
+ Mask to get the read data support
+
+``NVME_CMBSZ_WDS_MASK``
+ Mask to get the write data support
+
+``NVME_CMBSZ_SZU_MASK``
+ Mask to get the size units
+
+``NVME_CMBSZ_SZ_MASK``
+ Mask to get the size
+
+``NVME_CMBSZ_SZU_4K``
+ 4 KiB
+
+``NVME_CMBSZ_SZU_64K``
+ 64 KiB
+
+``NVME_CMBSZ_SZU_1M``
+ 1 MiB
+
+``NVME_CMBSZ_SZU_16M``
+ 16 MiB
+
+``NVME_CMBSZ_SZU_256M``
+ 256 MiB
+
+``NVME_CMBSZ_SZU_4G``
+ 4 GiB
+
+``NVME_CMBSZ_SZU_64G``
+ 64 GiB
+
+
.. c:function:: __u64 nvme_cmb_size (__u32 cmbsz)
Calculate size of the controller memory buffer
@@ -310,6 +790,387 @@ true if given offset is 64bit register, otherwise it returns false.
size of controller memory buffer in bytes
+
+
+.. c:enum:: nvme_bpinfo
+
+ This field indicates the boot partition information
+
+**Constants**
+
+``NVME_BPINFO_BPSZ_SHIFT``
+ Shift amount to get the boot partition size
+
+``NVME_BPINFO_BRS_SHIFT``
+ Shift amount to get the boot read status
+
+``NVME_BPINFO_ABPID_SHIFT``
+ Shift amount to get the active boot partition ID
+
+``NVME_BPINFO_BPSZ_MASK``
+ Mask to get the boot partition size
+
+``NVME_BPINFO_BRS_MASK``
+ Mask to get the boot read status
+
+``NVME_BPINFO_ABPID_MASK``
+ Mask to get the active boot partition ID
+
+``NVME_BPINFO_BRS_NONE``
+ No boot partition read operation requested
+
+``NVME_BPINFO_BRS_READ_IN_PROGRESS``
+ Boot partition read in progress
+
+``NVME_BPINFO_BRS_READ_SUCCESS``
+ Boot partition read completed successfully
+
+``NVME_BPINFO_BRS_READ_ERROR``
+ Error completing boot partition read
+
+
+
+
+.. c:enum:: nvme_bprsel
+
+ This field indicates the boot partition read select
+
+**Constants**
+
+``NVME_BPRSEL_BPRSZ_SHIFT``
+ Shift amount to get the boot partition read size
+
+``NVME_BPRSEL_BPROF_SHIFT``
+ Shift amount to get the boot partition read offset
+
+``NVME_BPRSEL_BPID_SHIFT``
+ Shift amount to get the boot partition identifier
+
+``NVME_BPRSEL_BPRSZ_MASK``
+ Mask to get the boot partition read size
+
+``NVME_BPRSEL_BPROF_MASK``
+ Mask to get the boot partition read offset
+
+``NVME_BPRSEL_BPID_MASK``
+ Mask to get the boot partition identifier
+
+
+
+
+.. c:enum:: nvme_bpmbl
+
+ This field indicates the boot partition memory buffer location
+
+**Constants**
+
+``NVME_BPMBL_BMBBA_SHIFT``
+ Shift amount to get the boot partition memory buffer base address
+
+
+
+
+.. c:enum:: nvme_cmbmsc
+
+ This field indicates the controller memory buffer memory space control
+
+**Constants**
+
+``NVME_CMBMSC_CRE_SHIFT``
+ Shift amount to get the capabilities registers enabled
+
+``NVME_CMBMSC_CMSE_SHIFT``
+ Shift amount to get the controller memory space enable
+
+``NVME_CMBMSC_CBA_SHIFT``
+ Shift amount to get the controller base address
+
+``NVME_CMBMSC_CRE_MASK``
+ Mask to get the capabilities registers enabled
+
+``NVME_CMBMSC_CMSE_MASK``
+ Mask to get the controller memory space enable
+
+
+
+
+.. c:enum:: nvme_cmbsts
+
+ This field indicates the controller memory buffer status
+
+**Constants**
+
+``NVME_CMBSTS_CBAI_SHIFT``
+ Shift amount to get the controller base address invalid
+
+``NVME_CMBSTS_CBAI_MASK``
+ Mask to get the controller base address invalid
+
+
+
+
+.. c:enum:: nvme_unit
+
+ Defined buffer size and write throughput granularity units
+
+**Constants**
+
+``NVME_UNIT_B``
+ Bytes or Bytes/second
+
+``NVME_UNIT_1K``
+ 1 KiB or 1 KiB/second
+
+``NVME_UNIT_1M``
+ 1 MiB or 1 MiB/second
+
+``NVME_UNIT_1G``
+ 1 GiB or 1 GiB/second
+
+
+
+
+.. c:enum:: nvme_cmbebs
+
+ This field indicates the controller memory buffer elasticity buffer size
+
+**Constants**
+
+``NVME_CMBEBS_CMBSZU_SHIFT``
+ Shift amount to get the CMB elasticity buffer size units
+
+``NVME_CMBEBS_RBB_SHIFT``
+ Shift amount to get the read bypass behavior
+
+``NVME_CMBEBS_CMBWBZ_SHIFT``
+ Shift amount to get the CMB elasiticity buffer size base
+
+``NVME_CMBEBS_CMBSZU_MASK``
+ Mask to get the CMB elasticity buffer size units
+
+``NVME_CMBEBS_RBB_MASK``
+ Mask to get the read bypass behavior
+
+``NVME_CMBEBS_CMBWBZ_MASK``
+ Mask to get the CMB elasiticity buffer size base
+
+``NVME_CMBEBS_CMBSZU_B``
+ Bytes granularity
+
+``NVME_CMBEBS_CMBSZU_1K``
+ 1 KiB granularity
+
+``NVME_CMBEBS_CMBSZU_1M``
+ 1 MiB granularity
+
+``NVME_CMBEBS_CMBSZU_1G``
+ 1 GiB granularity
+
+
+
+
+.. c:enum:: nvme_cmbswtp
+
+ This field indicates the controller memory buffer sustained write throughput
+
+**Constants**
+
+``NVME_CMBSWTP_CMBSWTU_SHIFT``
+ Shift amount to get the CMB sustained write throughput units
+
+``NVME_CMBSWTP_CMBSWTV_SHIFT``
+ Shift amount to get the CMB sustained write throughput
+
+``NVME_CMBSWTP_CMBSWTU_MASK``
+ Mask to get the CMB sustained write throughput units
+
+``NVME_CMBSWTP_CMBSWTV_MASK``
+ Mask to get the CMB sustained write throughput
+
+``NVME_CMBSWTP_CMBSWTU_B``
+ Bytes/second granularity
+
+``NVME_CMBSWTP_CMBSWTU_1K``
+ 1 KiB/second granularity
+
+``NVME_CMBSWTP_CMBSWTU_1M``
+ 1 MiB/second granularity
+
+``NVME_CMBSWTP_CMBSWTU_1G``
+ 1 GiB/second granularity
+
+
+
+
+.. c:enum:: nvme_crto
+
+ This field indicates the controller ready timeouts
+
+**Constants**
+
+``NVME_CRTO_CRWMT_SHIFT``
+ Shift amount to get the controller ready with media timeout
+
+``NVME_CRTO_CRIMT_SHIFT``
+ Shift amount to get the controller ready independent of media timeout
+
+``NVME_CRTO_CRWMT_MASK``
+ Mask to get the controller ready with media timeout
+
+``NVME_CRTO_CRIMT_MASK``
+ Mask to get the controller ready independent of media timeout
+
+
+
+
+.. c:enum:: nvme_pmrcap
+
+ This field indicates the persistent memory region capabilities
+
+**Constants**
+
+``NVME_PMRCAP_RDS_SHIFT``
+ Shift amount to get the read data support
+
+``NVME_PMRCAP_WDS_SHIFT``
+ Shift amount to get the write data support
+
+``NVME_PMRCAP_BIR_SHIFT``
+ Shift amount to get the base indicator register
+
+``NVME_PMRCAP_PMRTU_SHIFT``
+ Shift amount to get the persistent memory region time units
+
+``NVME_PMRCAP_PMRWBM_SHIFT``
+ Shift amount to get the persistent memory region write barrier mechanisms
+
+``NVME_PMRCAP_PMRTO_SHIFT``
+ Shift amount to get the persistent memory region timeout
+
+``NVME_PMRCAP_CMSS_SHIFT``
+ Shift amount to get the controller memory space supported
+
+``NVME_PMRCAP_PMRWMB_SHIFT``
+ Deprecated shift amount to get the persistent memory region write barrier mechanisms
+
+``NVME_PMRCAP_RDS_MASK``
+ Mask to get the read data support
+
+``NVME_PMRCAP_WDS_MASK``
+ Mask to get the write data support
+
+``NVME_PMRCAP_BIR_MASK``
+ Mask to get the base indicator register
+
+``NVME_PMRCAP_PMRTU_MASK``
+ Mask to get the persistent memory region time units
+
+``NVME_PMRCAP_PMRWBM_MASK``
+ Mask to get the persistent memory region write barrier mechanisms
+
+``NVME_PMRCAP_PMRTO_MASK``
+ Mask to get the persistent memory region timeout
+
+``NVME_PMRCAP_CMSS_MASK``
+ Mask to get the controller memory space supported
+
+``NVME_PMRCAP_PMRWMB_MASK``
+ Deprecated mask to get the persistent memory region write barrier mechanisms
+
+``NVME_PMRCAP_PMRTU_500MS``
+ 500 milliseconds
+
+``NVME_PMRCAP_PMRTU_60S``
+ minutes
+
+
+
+
+.. c:enum:: nvme_pmrctl
+
+ This field indicates the persistent memory region control
+
+**Constants**
+
+``NVME_PMRCTL_EN_SHIFT``
+ Shift amount to get the enable
+
+``NVME_PMRCTL_EN_MASK``
+ Mask to get the enable
+
+
+
+
+.. c:enum:: nvme_pmrsts
+
+ This field indicates the persistent memory region status
+
+**Constants**
+
+``NVME_PMRSTS_ERR_SHIFT``
+ Shift amount to get the error
+
+``NVME_PMRSTS_NRDY_SHIFT``
+ Shift amount to get the not ready
+
+``NVME_PMRSTS_HSTS_SHIFT``
+ Shift amount to get the health status
+
+``NVME_PMRSTS_CBAI_SHIFT``
+ Shift amount to get the controller base address invalid
+
+``NVME_PMRSTS_ERR_MASK``
+ Mask to get the error
+
+``NVME_PMRSTS_NRDY_MASK``
+ Mask to get the not ready
+
+``NVME_PMRSTS_HSTS_MASK``
+ Mask to get the health status
+
+``NVME_PMRSTS_CBAI_MASK``
+ Mask to get the controller base address invalid
+
+
+
+
+.. c:enum:: nvme_pmrebs
+
+ This field indicates the persistent memory region elasticity buffer size
+
+**Constants**
+
+``NVME_PMREBS_PMRSZU_SHIFT``
+ Shift amount to get the PMR elasticity buffer size units
+
+``NVME_PMREBS_RBB_SHIFT``
+ Shift amount to get the read bypass behavior
+
+``NVME_PMREBS_PMRWBZ_SHIFT``
+ Shift amount to get the PMR elasticity buffer size base
+
+``NVME_PMREBS_PMRSZU_MASK``
+ Mask to get the PMR elasticity buffer size units
+
+``NVME_PMREBS_RBB_MASK``
+ Mask to get the read bypass behavior
+
+``NVME_PMREBS_PMRWBZ_MASK``
+ Mask to get the PMR elasticity buffer size base
+
+``NVME_PMREBS_PMRSZU_B``
+ Bytes
+
+``NVME_PMREBS_PMRSZU_1K``
+ 1 KiB
+
+``NVME_PMREBS_PMRSZU_1M``
+ 1 MiB
+
+``NVME_PMREBS_PMRSZU_1G``
+ 1 GiB
+
+
.. c:function:: __u64 nvme_pmr_size (__u32 pmrebs)
Calculate size of persistent memory region elasticity buffer
@@ -324,6 +1185,39 @@ size of controller memory buffer in bytes
size of controller persistent memory buffer in bytes
+
+
+.. c:enum:: nvme_pmrswtp
+
+ This field indicates the persistent memory region sustained write throughput
+
+**Constants**
+
+``NVME_PMRSWTP_PMRSWTU_SHIFT``
+ Shift amount to get the PMR sustained write throughput units
+
+``NVME_PMRSWTP_PMRSWTV_SHIFT``
+ Shift amount to get the PMR sustained write throughput
+
+``NVME_PMRSWTP_PMRSWTU_MASK``
+ Mask to get the PMR sustained write throughput units
+
+``NVME_PMRSWTP_PMRSWTV_MASK``
+ Mask to get the PMR sustained write throughput
+
+``NVME_PMRSWTP_PMRSWTU_BPS``
+ Bytes per second
+
+``NVME_PMRSWTP_PMRSWTU_KBPS``
+ 1 KiB / s
+
+``NVME_PMRSWTP_PMRSWTU_MBPS``
+ 1 MiB / s
+
+``NVME_PMRSWTP_PMRSWTU_GBPS``
+ 1 GiB / s
+
+
.. c:function:: __u64 nvme_pmr_throughput (__u32 pmrswtp)
Calculate throughput of persistent memory buffer
@@ -340,6 +1234,51 @@ throughput of controller persistent memory buffer in bytes/second
+.. c:enum:: nvme_pmrmsc
+
+ This field indicates the persistent memory region memory space control
+
+**Constants**
+
+``NVME_PMRMSC_CMSE_SHIFT``
+ Shift amount to get the controller memory space enable
+
+``NVME_PMRMSC_CBA_SHIFT``
+ Shift amount to get the controller base address
+
+``NVME_PMRMSC_CMSE_MASK``
+ Mask to get the controller memory space enable
+
+
+
+
+.. c:enum:: nvme_flbas
+
+ This field indicates the formatted LBA size
+
+**Constants**
+
+``NVME_FLBAS_LOWER_SHIFT``
+ Shift amount to get the format index least significant 4 bits
+
+``NVME_FLBAS_META_EXT_SHIFT``
+ Shift amount to get the metadata transferred
+
+``NVME_FLBAS_HIGHER_SHIFT``
+ Shift amount to get the format index most significant 2 bits
+
+``NVME_FLBAS_LOWER_MASK``
+ Mask to get the format index least significant 4 bits
+
+``NVME_FLBAS_META_EXT_MASK``
+ Mask to get the metadata transferred
+
+``NVME_FLBAS_HIGHER_MASK``
+ Mask to get the format index most significant 2 bits
+
+
+
+
.. c:enum:: nvme_psd_flags
Possible flag values in nvme power state descriptor
@@ -1042,6 +1981,45 @@ power scale value
+.. c:enum:: nvme_cmic
+
+ This field indicates the controller multi-path I/O and NS sharing capabilities
+
+**Constants**
+
+``NVME_CMIC_MULTI_PORT_SHIFT``
+ Shift amount to get the NVM subsystem port
+
+``NVME_CMIC_MULTI_CTRL_SHIFT``
+ Shift amount to get the controllers
+
+``NVME_CMIC_MULTI_SRIOV_SHIFT``
+ Shift amount to get the SR-IOV virtual function
+
+``NVME_CMIC_MULTI_ANA_SHIFT``
+ Shift amount to get the asymmetric namespace access reporting
+
+``NVME_CMIC_MULTI_RSVD_SHIFT``
+ Shift amount to get the reserved
+
+``NVME_CMIC_MULTI_PORT_MASK``
+ Mask to get the NVM subsystem port
+
+``NVME_CMIC_MULTI_CTRL_MASK``
+ Mask to get the controllers
+
+``NVME_CMIC_MULTI_SRIOV_MASK``
+ Mask to get the SR-IOV virtual function
+
+``NVME_CMIC_MULTI_ANA_MASK``
+ Mask to get the asymmetric namespace access reporting
+
+``NVME_CMIC_MULTI_RSVD_MASK``
+ Mask to get the reserved
+
+
+
+
.. c:enum:: nvme_id_ctrl_cmic
Controller Multipath IO and Namespace Sharing Capabilities of the controller and NVM subsystem.
@@ -4682,6 +5660,65 @@ bytes, in size. This log captures the controller’s internal state.
+.. c:enum:: nvme_pel_rci
+
+ This field indicates the persistent event log reporting context
+
+**Constants**
+
+``NVME_PEL_RCI_RCPID_SHIFT``
+ Shift amount to get the reporting context port identifier
+ from the :c:type:`struct nvme_persistent_event_log <nvme_persistent_event_log>`.rci field.
+
+``NVME_PEL_RCI_RCPIT_SHIFT``
+ Shift amount to get the reporting context port identifier
+ type from the :c:type:`struct nvme_persistent_event_log <nvme_persistent_event_log>`.rci field.
+
+``NVME_PEL_RCI_RCE_SHIFT``
+ Shift amount to get the reporting context exists
+ from the :c:type:`struct nvme_persistent_event_log <nvme_persistent_event_log>`.rci field.
+
+``NVME_PEL_RCI_RSVD_SHIFT``
+ Shift amount to get the reserved reporting context
+ from the :c:type:`struct nvme_persistent_event_log <nvme_persistent_event_log>`.rci field.
+
+``NVME_PEL_RCI_RCPID_MASK``
+ Mask to get the reporting context port identifier from
+ the :c:type:`struct nvme_persistent_event_log <nvme_persistent_event_log>`.rci field.
+
+``NVME_PEL_RCI_RCPIT_MASK``
+ Mask to get the reporting context port identifier type from
+ the :c:type:`struct nvme_persistent_event_log <nvme_persistent_event_log>`.rci field.
+
+``NVME_PEL_RCI_RCE_MASK``
+ Mask to get the reporting context exists from
+ the :c:type:`struct nvme_persistent_event_log <nvme_persistent_event_log>`.rci field.
+
+``NVME_PEL_RCI_RSVD_MASK``
+ Mask to get the reserved reporting context from
+ the :c:type:`struct nvme_persistent_event_log <nvme_persistent_event_log>`.rci field.
+
+
+
+
+.. c:enum:: nvme_pel_rci_rcpit
+
+ Persistent Event Log Reporting Context - Port Identifier Type
+
+**Constants**
+
+``NVME_PEL_RCI_RCPIT_NOT_EXIST``
+ Does not already exist
+
+``NVME_PEL_RCI_RCPIT_EST_PORT``
+ Established by an NVM subsystem port
+
+``NVME_PEL_RCI_RCPIT_EST_ME``
+ Established by a Management Endpoint
+
+
+
+
.. c:struct:: nvme_persistent_event_entry
Persistent Event
@@ -4787,6 +5824,52 @@ bytes, in size. This log captures the controller’s internal state.
+.. c:enum:: nvme_pel_ehai
+
+ This field indicates the persistent event header additional information
+
+**Constants**
+
+``NVME_PEL_EHAI_PIT_SHIFT``
+ Shift amount to get the reporting context port identifier
+ from the :c:type:`struct nvme_persistent_event_log <nvme_persistent_event_log>`.rci field.
+
+``NVME_PEL_EHAI_RSVD_SHIFT``
+ Shift amount to get the reserved reporting context
+ from the :c:type:`struct nvme_persistent_event_log <nvme_persistent_event_log>`.rci field.
+
+``NVME_PEL_EHAI_PIT_MASK``
+ Mask to get the reporting context port identifier from
+ the :c:type:`struct nvme_st_result <nvme_st_result>`.dsts field.
+
+``NVME_PEL_EHAI_RSVD_MASK``
+ Mask to get the reserved reporting context from
+ the :c:type:`struct nvme_st_result <nvme_st_result>`.dsts field.
+
+
+
+
+.. c:enum:: nvme_pel_ehai_pit
+
+ Persistent Event Header Additional Information - Port Identifier Type
+
+**Constants**
+
+``NVME_PEL_EHAI_PIT_NOT_REPORTED``
+ PIT not reported and PELPID does not apply
+
+``NVME_PEL_EHAI_PIT_NSS_PORT``
+ NVM subsystem port
+
+``NVME_PEL_EHAI_PIT_NMI_PORT``
+ NVMe-MI port
+
+``NVME_PEL_EHAI_PIT_NOT_ASSOCIATED``
+ Event not associated with any port and PELPID does not apply
+
+
+
+
.. c:struct:: nvme_fw_commit_event
Firmware Commit Event Data
@@ -5186,6 +6269,39 @@ bytes, in size. This log captures the controller’s internal state.
+.. c:enum:: nvme_set_feat_event_layout
+
+ This field indicates the set feature event layout
+
+**Constants**
+
+``NVME_SET_FEAT_EVENT_DW_COUNT_SHIFT``
+ Shift amount to get the Dword count from the
+ :c:type:`struct nvme_set_feature_event <nvme_set_feature_event>`.layout field.
+
+``NVME_SET_FEAT_EVENT_CC_DW0_SHIFT``
+ Shift amount to get the logged command completion Dword 0
+ from the :c:type:`struct nvme_set_feature_event <nvme_set_feature_event>`.layout field.
+
+``NVME_SET_FEAT_EVENT_MB_COUNT_SHIFT``
+ Shift amount to get the memory buffer count from
+ the :c:type:`struct nvme_set_feature_event <nvme_set_feature_event>`.layout field.
+
+``NVME_SET_FEAT_EVENT_DW_COUNT_MASK``
+ Mask to get the Dword count from the :c:type:`struct
+ nvme_set_feature_event <nvme_set_feature_event>`.layout field.
+
+``NVME_SET_FEAT_EVENT_CC_DW0_MASK``
+ Mask to get the logged command completion Dword 0 from
+ the :c:type:`struct nvme_set_feature_event <nvme_set_feature_event>`.layout field.
+
+``NVME_SET_FEAT_EVENT_MB_COUNT_MASK``
+ Mask to get the memory buffer count from the :c:type:`struct
+ nvme_set_feature_event <nvme_set_feature_event>`.layout field.
+
+
+
+
.. c:struct:: nvme_thermal_exc_event
Thermal Excursion Event Data
@@ -5542,6 +6658,31 @@ bytes, in size. This log captures the controller’s internal state.
+.. c:enum:: nvme_boot_partition_info
+
+ This field indicates the boot partition information
+
+**Constants**
+
+``NVME_BOOT_PARTITION_INFO_BPSZ_SHIFT``
+ Shift amount to get the boot partition size from
+ the :c:type:`struct nvme_boot_partition <nvme_boot_partition>`.bpinfo field.
+
+``NVME_BOOT_PARTITION_INFO_ABPID_SHIFT``
+ Shift amount to get the active boot partition ID
+ from the :c:type:`struct nvme_boot_partition <nvme_boot_partition>`.bpinfo field.
+
+``NVME_BOOT_PARTITION_INFO_BPSZ_MASK``
+ Mask to get the boot partition size from the
+ :c:type:`struct nvme_boot_partition <nvme_boot_partition>`.bpinfo field.
+
+``NVME_BOOT_PARTITION_INFO_ABPID_MASK``
+ Mask to get the active boot partition ID from the
+ :c:type:`struct nvme_boot_partition <nvme_boot_partition>`.bpinfo field.
+
+
+
+
.. c:struct:: nvme_eom_lane_desc
EOM Lane Descriptor
@@ -5716,18 +6857,51 @@ bytes, in size. This log captures the controller’s internal state.
-.. c:enum:: nvme_eom_optional_data
+.. c:enum:: nvme_eom_optional_data_present
EOM Optional Data Present Fields
**Constants**
-``NVME_EOM_EYE_DATA_PRESENT``
- Eye Data Present
+``NVME_EOM_ODP_PEFP_SHIFT``
+ Shift amount to get the printable eye field present
+ from the :c:type:`struct nvme_phy_rx_eom_log <nvme_phy_rx_eom_log>`.odp field.
+
+``NVME_EOM_ODP_EDFP_SHIFT``
+ Shift amount to get the eye data field present
+ from the :c:type:`struct nvme_phy_rx_eom_log <nvme_phy_rx_eom_log>`.odp field.
+
+``NVME_EOM_ODP_RSVD_SHIFT``
+ Shift amount to get the reserved optional data present
+ from the :c:type:`struct nvme_phy_rx_eom_log <nvme_phy_rx_eom_log>`.odp field.
+
+``NVME_EOM_ODP_PEFP_MASK``
+ Mask to get the printable eye field present
+ from the :c:type:`struct nvme_phy_rx_eom_log <nvme_phy_rx_eom_log>`.odp field.
+
+``NVME_EOM_ODP_EDFP_MASK``
+ Mask to get the eye data field present
+ from the :c:type:`struct nvme_phy_rx_eom_log <nvme_phy_rx_eom_log>`.odp field.
+
+``NVME_EOM_ODP_RSVD_MASK``
+ Mask to get the reserved data present
+ from the :c:type:`struct nvme_phy_rx_eom_log <nvme_phy_rx_eom_log>`.odp field.
+
+
+
+
+.. c:enum:: nvme_eom_optional_data
+
+ EOM Optional Data Present Fields (Deprecated)
+
+**Constants**
``NVME_EOM_PRINTABLE_EYE_PRESENT``
Printable Eye Present
+``NVME_EOM_EYE_DATA_PRESENT``
+ Eye Data Present
+
@@ -10914,6 +12088,9 @@ true if **status** is of the specified type and value
``NVME_LOG_LID_MI_CMD_SUPPORTED_EFFECTS``
NVMe-MI Commands Supported and Effects
+``NVME_LOG_LID_CMD_AND_FEAT_LOCKDOWN``
+ Command and Feature Lockdown
+
``NVME_LOG_LID_BOOT_PARTITION``
Boot Partition
diff --git a/examples/mi-mctp.c b/examples/mi-mctp.c
index e0b7644..75437c0 100644
--- a/examples/mi-mctp.c
+++ b/examples/mi-mctp.c
@@ -677,8 +677,8 @@ int main(int argc, char **argv)
nvme_root_t root;
nvme_mi_ep_t ep;
bool dbus = false, usage = true;
- uint8_t eid;
- int rc = 0, net;
+ uint8_t eid = 0;
+ int rc = 0, net = 0;
if (argc >= 2 && strcmp(argv[1], "dbus") == 0) {
usage = false;
diff --git a/meson.build b/meson.build
index 5d48278..f589423 100644
--- a/meson.build
+++ b/meson.build
@@ -8,12 +8,12 @@
project(
'libnvme', ['c'],
meson_version: '>= 0.50.0',
- version: '1.8',
+ version: '1.9',
license: 'LGPL-2.1-or-later',
default_options: [
'c_std=gnu99',
'warning_level=1',
- 'buildtype=debug',
+ 'buildtype=debugoptimized',
'prefix=/usr/local',
'sysconfdir=etc',
'wrap_mode=nofallback'
diff --git a/src/libnvme.map b/src/libnvme.map
index c8163cb..8710c41 100644
--- a/src/libnvme.map
+++ b/src/libnvme.map
@@ -1,4 +1,17 @@
# SPDX-License-Identifier: LGPL-2.1-or-later
+LIBNVME_1.9 {
+ global:
+ nvme_export_tls_key;
+ nvme_get_logging_level;
+ nvme_import_tls_key;
+ nvme_read_key;
+ nvme_scan_tls_keys;
+ nvme_submit_passthru;
+ nvme_submit_passthru64;
+ nvme_update_key;
+ nvme_ctrl_get_cntlid;
+};
+
LIBNVME_1_8 {
global:
nvme_uuid_find;
diff --git a/src/meson.build b/src/meson.build
index 811f0f8..001c3b9 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -12,9 +12,11 @@ sources = [
'nvme/ioctl.c',
'nvme/linux.c',
'nvme/log.c',
+ 'nvme/sysfs.c',
'nvme/tree.c',
'nvme/util.c',
- 'nvme/base64.c'
+ 'nvme/base64.c',
+ 'nvme/crc32.c'
]
mi_sources = [
diff --git a/src/nvme/crc32.c b/src/nvme/crc32.c
new file mode 100644
index 0000000..e726c9f
--- /dev/null
+++ b/src/nvme/crc32.c
@@ -0,0 +1,111 @@
+/*
+ * COPYRIGHT (C) 1986 Gary S. Brown. You may use this program, or
+ * code or tables extracted from it, as desired without restriction.
+ */
+
+/*
+ * First, the polynomial itself and its table of feedback terms. The
+ * polynomial is
+ * X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0
+ *
+ * Note that we take it "backwards" and put the highest-order term in
+ * the lowest-order bit. The X^32 term is "implied"; the LSB is the
+ * X^31 term, etc. The X^0 term (usually shown as "+1") results in
+ * the MSB being 1
+ *
+ * Note that the usual hardware shift register implementation, which
+ * is what we're using (we're merely optimizing it by doing eight-bit
+ * chunks at a time) shifts bits into the lowest-order term. In our
+ * implementation, that means shifting towards the right. Why do we
+ * do it this way? Because the calculated CRC must be transmitted in
+ * order from highest-order term to lowest-order term. UARTs transmit
+ * characters in order from LSB to MSB. By storing the CRC this way
+ * we hand it to the UART in the order low-byte to high-byte; the UART
+ * sends each low-bit to hight-bit; and the result is transmission bit
+ * by bit from highest- to lowest-order term without requiring any bit
+ * shuffling on our part. Reception works similarly
+ *
+ * The feedback terms table consists of 256, 32-bit entries. Notes
+ *
+ * The table can be generated at runtime if desired; code to do so
+ * is shown later. It might not be obvious, but the feedback
+ * terms simply represent the results of eight shift/xor opera
+ * tions for all combinations of data and CRC register values
+ *
+ * The values must be right-shifted by eight bits by the "updcrc
+ * logic; the shift must be unsigned (bring in zeroes). On some
+ * hardware you could probably optimize the shift in assembler by
+ * using byte-swap instructions
+ * polynomial $edb88320
+ *
+ *
+ * CRC32 code derived from work by Gary S. Brown.
+ */
+
+/* https://web.mit.edu/freebsd/head/sys/libkern/crc32.c */
+
+#include "crc32.h"
+
+const uint32_t crc32_tab[] = {
+ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
+ 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
+ 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
+ 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
+ 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
+ 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
+ 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
+ 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
+ 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
+ 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+ 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
+ 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
+ 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
+ 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
+ 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+ 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
+ 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
+ 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
+ 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
+ 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+ 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
+ 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
+ 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
+ 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
+ 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+ 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
+ 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
+ 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
+ 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
+ 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+ 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
+ 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
+ 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
+ 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
+ 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+ 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
+ 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
+ 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
+ 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
+ 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+ 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
+ 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
+ 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
+};
+
+/*
+ * A function that calculates the CRC-32 based on the table above is
+ * given below for documentation purposes. An equivalent implementation
+ * of this function that's actually used in the kernel can be found
+ * in sys/libkern.h, where it can be inlined.
+ */
+
+uint32_t
+crc32(uint32_t crc, const void *buf, size_t size)
+{
+ const uint8_t *p = buf;
+
+ crc = ~crc;
+ while (size--)
+ crc = crc32_tab[(crc ^ *p++) & 0xFF] ^ (crc >> 8);
+ return ~crc;
+}
diff --git a/src/nvme/crc32.h b/src/nvme/crc32.h
new file mode 100644
index 0000000..2bdc8fb
--- /dev/null
+++ b/src/nvme/crc32.h
@@ -0,0 +1,9 @@
+#ifndef crc32_H
+#define crc32_H
+
+#include <stdint.h>
+#include <stddef.h>
+
+uint32_t crc32(uint32_t crc, const void *buf, size_t len);
+
+#endif
diff --git a/src/nvme/fabrics.c b/src/nvme/fabrics.c
index 1f50229..6738e9d 100644
--- a/src/nvme/fabrics.c
+++ b/src/nvme/fabrics.c
@@ -1186,29 +1186,12 @@ struct nvmf_discovery_log *nvmf_get_discovery_wargs(struct nvme_get_discovery_ar
return log;
}
-#define PATH_UUID_IBM "/proc/device-tree/ibm,partition-uuid"
-
-static char *uuid_ibm_filename(void)
-{
- char *basepath = getenv("LIBNVME_SYSFS_PATH");
- char *str;
-
- if (!basepath)
- return strdup(PATH_UUID_IBM);
-
- if (!asprintf(&str, "%s" PATH_UUID_IBM, basepath))
- return NULL;
-
- return str;
-}
-
static int uuid_from_device_tree(char *system_uuid)
{
- _cleanup_free_ char *filename = uuid_ibm_filename();
_cleanup_fd_ int f = -1;
ssize_t len;
- f = open(filename, O_RDONLY);
+ f = open(nvme_uuid_ibm_filename(), O_RDONLY);
if (f < 0)
return -ENXIO;
@@ -1220,22 +1203,6 @@ static int uuid_from_device_tree(char *system_uuid)
return strlen(system_uuid) ? 0 : -ENXIO;
}
-#define PATH_DMI_ENTRIES "/sys/firmware/dmi/entries"
-
-static char *dmi_entries_dir(void)
-{
- char *basepath = getenv("LIBNVME_SYSFS_PATH");
- char *str;
-
- if (!basepath)
- return strdup(PATH_DMI_ENTRIES);
-
- if (!asprintf(&str, "%s" PATH_DMI_ENTRIES, basepath))
- return NULL;
-
- return str;
-}
-
/*
* See System Management BIOS (SMBIOS) Reference Specification
* https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.2.0.pdf
@@ -1264,7 +1231,7 @@ static bool is_dmi_uuid_valid(const char *buf, size_t len)
static int uuid_from_dmi_entries(char *system_uuid)
{
_cleanup_dir_ DIR *d = NULL;
- _cleanup_free_ char *entries_dir = dmi_entries_dir();
+ const char *entries_dir = nvme_dmi_entries_dir();
int f;
struct dirent *de;
char buf[512] = {0};
@@ -1297,6 +1264,8 @@ static int uuid_from_dmi_entries(char *system_uuid)
continue;
len = read(f, buf, 512);
close(f);
+ if (len <= 0)
+ continue;
if (!is_dmi_uuid_valid(buf, len))
continue;
diff --git a/src/nvme/fabrics.h b/src/nvme/fabrics.h
index a2504de..4ebeb35 100644
--- a/src/nvme/fabrics.h
+++ b/src/nvme/fabrics.h
@@ -56,8 +56,8 @@ struct nvme_fabrics_config {
int nr_write_queues;
int nr_poll_queues;
int tos;
- int keyring;
- int tls_key;
+ long keyring;
+ long tls_key;
bool duplicate_connect;
bool disable_sqflow;
diff --git a/src/nvme/filters.c b/src/nvme/filters.c
index 312b8f6..ceaba68 100644
--- a/src/nvme/filters.c
+++ b/src/nvme/filters.c
@@ -6,68 +6,12 @@
* Authors: Keith Busch <keith.busch@wdc.com>
* Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
*/
-#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <dirent.h>
-#include <libgen.h>
-
-#include <sys/param.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include <unistd.h>
#include "filters.h"
-#include "types.h"
-#include "util.h"
-#include "cleanup.h"
-
-#define PATH_SYSFS_NVME "/sys/class/nvme"
-#define PATH_SYSFS_NVME_SUBSYSTEM "/sys/class/nvme-subsystem"
-#define PATH_SYSFS_BLOCK "/sys/block"
-
-char *nvme_ctrl_sysfs_dir(void)
-{
- char *basepath = getenv("LIBNVME_SYSFS_PATH");
- char *str;
-
- if (!basepath)
- return strdup(PATH_SYSFS_NVME);
-
- if (!asprintf(&str, "%s" PATH_SYSFS_NVME, basepath))
- return NULL;
-
- return str;
-}
-
-char *nvme_ns_sysfs_dir(void)
-{
- char *basepath = getenv("LIBNVME_SYSFS_PATH");
- char *str;
-
- if (!basepath)
- return strdup(PATH_SYSFS_BLOCK);
-
- if (!asprintf(&str, "%s" PATH_SYSFS_BLOCK, basepath))
- return NULL;
-
- return str;
-}
-
-char *nvme_subsys_sysfs_dir(void)
-{
- char *basepath = getenv("LIBNVME_SYSFS_PATH");
- char *str;
-
- if (!basepath)
- return strdup(PATH_SYSFS_NVME_SUBSYSTEM);
-
- if (!asprintf(&str, "%s" PATH_SYSFS_NVME_SUBSYSTEM, basepath))
- return NULL;
-
- return str;
-}
+#include "private.h"
int nvme_namespace_filter(const struct dirent *d)
{
@@ -132,7 +76,7 @@ int nvme_subsys_filter(const struct dirent *d)
int nvme_scan_subsystems(struct dirent ***subsys)
{
- _cleanup_free_ char *dir = nvme_subsys_sysfs_dir();
+ const char *dir = nvme_subsys_sysfs_dir();
return scandir(dir, subsys, nvme_subsys_filter, alphasort);
}
@@ -145,7 +89,7 @@ int nvme_scan_subsystem_namespaces(nvme_subsystem_t s, struct dirent ***ns)
int nvme_scan_ctrls(struct dirent ***ctrls)
{
- _cleanup_free_ char *dir = nvme_ctrl_sysfs_dir();
+ const char *dir = nvme_ctrl_sysfs_dir();
return scandir(dir, ctrls, nvme_ctrls_filter, alphasort);
}
diff --git a/src/nvme/ioctl.c b/src/nvme/ioctl.c
index 9090b7e..ce5a911 100644
--- a/src/nvme/ioctl.c
+++ b/src/nvme/ioctl.c
@@ -24,8 +24,7 @@
#include "ioctl.h"
#include "util.h"
-
-static bool nvme_debug;
+#include "log.h"
static int nvme_verify_chr(int fd)
{
@@ -79,9 +78,10 @@ int nvme_get_nsid(int fd, __u32 *nsid)
return -1 * (errno != 0);
}
-static int nvme_submit_passthru64(int fd, unsigned long ioctl_cmd,
- struct nvme_passthru_cmd64 *cmd,
- __u64 *result)
+__attribute__((weak))
+int nvme_submit_passthru64(int fd, unsigned long ioctl_cmd,
+ struct nvme_passthru_cmd64 *cmd,
+ __u64 *result)
{
int err = ioctl(fd, ioctl_cmd, cmd);
@@ -90,62 +90,14 @@ static int nvme_submit_passthru64(int fd, unsigned long ioctl_cmd,
return err;
}
-static void nvme_show_command(struct nvme_passthru_cmd *cmd, int err, struct timeval start,
- struct timeval end)
-{
- printf("opcode : %02x\n", cmd->opcode);
- printf("flags : %02x\n", cmd->flags);
- printf("rsvd1 : %04x\n", cmd->rsvd1);
- printf("nsid : %08x\n", cmd->nsid);
- printf("cdw2 : %08x\n", cmd->cdw2);
- printf("cdw3 : %08x\n", cmd->cdw3);
- printf("data_len : %08x\n", cmd->data_len);
- printf("metadata_len : %08x\n", cmd->metadata_len);
- printf("addr : %"PRIx64"\n", (uint64_t)(uintptr_t)cmd->addr);
- printf("metadata : %"PRIx64"\n", (uint64_t)(uintptr_t)cmd->metadata);
- printf("cdw10 : %08x\n", cmd->cdw10);
- printf("cdw11 : %08x\n", cmd->cdw11);
- printf("cdw12 : %08x\n", cmd->cdw12);
- printf("cdw13 : %08x\n", cmd->cdw13);
- printf("cdw14 : %08x\n", cmd->cdw14);
- printf("cdw15 : %08x\n", cmd->cdw15);
- printf("timeout_ms : %08x\n", cmd->timeout_ms);
- printf("result : %08x\n", cmd->result);
- printf("err : %d\n", err);
- printf("latency : %lu us\n",
- (end.tv_sec - start.tv_sec) * 1000000 + (end.tv_usec - start.tv_usec));
-}
-
-void nvme_set_debug(bool debug)
-{
- nvme_debug = debug;
-}
-
-bool nvme_get_debug(void)
-{
- return nvme_debug;
-}
-
-static int nvme_submit_passthru(int fd, unsigned long ioctl_cmd,
- struct nvme_passthru_cmd *cmd, __u32 *result)
+__attribute__((weak))
+int nvme_submit_passthru(int fd, unsigned long ioctl_cmd,
+ struct nvme_passthru_cmd *cmd, __u32 *result)
{
- struct timeval start;
- struct timeval end;
- int err;
-
- if (nvme_get_debug())
- gettimeofday(&start, NULL);
-
- err = ioctl(fd, ioctl_cmd, cmd);
-
- if (nvme_get_debug()) {
- gettimeofday(&end, NULL);
- nvme_show_command(cmd, err, start, end);
- }
+ int err = ioctl(fd, ioctl_cmd, cmd);
if (err >= 0 && result)
*result = cmd->result;
-
return err;
}
@@ -246,125 +198,6 @@ int nvme_admin_passthru(int fd, __u8 opcode, __u8 flags, __u16 rsvd,
metadata, timeout_ms, result);
}
-enum nvme_cmd_dword_fields {
- NVME_DEVICE_SELF_TEST_CDW10_STC_SHIFT = 0,
- NVME_DEVICE_SELF_TEST_CDW10_STC_MASK = 0xf,
- NVME_DIRECTIVE_CDW11_DOPER_SHIFT = 0,
- NVME_DIRECTIVE_CDW11_DTYPE_SHIFT = 8,
- NVME_DIRECTIVE_CDW11_DPSEC_SHIFT = 16,
- NVME_DIRECTIVE_CDW11_DOPER_MASK = 0xff,
- NVME_DIRECTIVE_CDW11_DTYPE_MASK = 0xff,
- NVME_DIRECTIVE_CDW11_DPSEC_MASK = 0xffff,
- NVME_DIRECTIVE_SEND_IDENTIFY_CDW12_ENDIR_SHIFT = 0,
- NVME_DIRECTIVE_SEND_IDENTIFY_CDW12_DTYPE_SHIFT = 1,
- NVME_DIRECTIVE_SEND_IDENTIFY_CDW12_ENDIR_MASK = 0x1,
- NVME_DIRECTIVE_SEND_IDENTIFY_CDW12_DTYPE_MASK = 0x1,
- NVME_FW_COMMIT_CDW10_FS_SHIFT = 0,
- NVME_FW_COMMIT_CDW10_CA_SHIFT = 3,
- NVME_FW_COMMIT_CDW10_BPID_SHIFT = 31,
- NVME_FW_COMMIT_CDW10_FS_MASK = 0x7,
- NVME_FW_COMMIT_CDW10_CA_MASK = 0x7,
- NVME_FW_COMMIT_CDW10_BPID_MASK = 0x1,
- NVME_GET_FEATURES_CDW10_SEL_SHIFT = 8,
- NVME_GET_FEATURES_CDW10_SEL_MASK = 0x7,
- NVME_SET_FEATURES_CDW10_SAVE_SHIFT = 31,
- NVME_SET_FEATURES_CDW10_SAVE_MASK = 0x1,
- NVME_FEATURES_CDW10_FID_SHIFT = 0,
- NVME_FEATURES_CDW14_UUID_SHIFT = 0,
- NVME_FEATURES_CDW10_FID_MASK = 0xff,
- NVME_FEATURES_CDW14_UUID_MASK = 0x7f,
- NVME_LOG_CDW10_LID_SHIFT = 0,
- NVME_LOG_CDW10_LSP_SHIFT = 8,
- NVME_LOG_CDW10_RAE_SHIFT = 15,
- NVME_LOG_CDW10_NUMDL_SHIFT = 16,
- NVME_LOG_CDW11_NUMDU_SHIFT = 0,
- NVME_LOG_CDW11_LSI_SHIFT = 16,
- NVME_LOG_CDW14_UUID_SHIFT = 0,
- NVME_LOG_CDW14_CSI_SHIFT = 24,
- NVME_LOG_CDW14_OT_SHIFT = 23,
- NVME_LOG_CDW10_LID_MASK = 0xff,
- NVME_LOG_CDW10_LSP_MASK = 0x7f,
- NVME_LOG_CDW10_RAE_MASK = 0x1,
- NVME_LOG_CDW10_NUMDL_MASK = 0xffff,
- NVME_LOG_CDW11_NUMDU_MASK = 0xffff,
- NVME_LOG_CDW11_LSI_MASK = 0xffff,
- NVME_LOG_CDW14_UUID_MASK = 0x7f,
- NVME_LOG_CDW14_CSI_MASK = 0xff,
- NVME_LOG_CDW14_OT_MASK = 0x1,
- NVME_IDENTIFY_CDW10_CNS_SHIFT = 0,
- NVME_IDENTIFY_CDW10_CNTID_SHIFT = 16,
- NVME_IDENTIFY_CDW11_CNSSPECID_SHIFT = 0,
- NVME_IDENTIFY_CDW14_UUID_SHIFT = 0,
- NVME_IDENTIFY_CDW11_CSI_SHIFT = 24,
- NVME_IDENTIFY_CDW10_CNS_MASK = 0xff,
- NVME_IDENTIFY_CDW10_CNTID_MASK = 0xffff,
- NVME_IDENTIFY_CDW11_CNSSPECID_MASK = 0xffff,
- NVME_IDENTIFY_CDW14_UUID_MASK = 0x7f,
- NVME_IDENTIFY_CDW11_CSI_MASK = 0xff,
- NVME_NAMESPACE_ATTACH_CDW10_SEL_SHIFT = 0,
- NVME_NAMESPACE_ATTACH_CDW10_SEL_MASK = 0xf,
- NVME_NAMESPACE_MGMT_CDW10_SEL_SHIFT = 0,
- NVME_NAMESPACE_MGMT_CDW10_SEL_MASK = 0xf,
- NVME_NAMESPACE_MGMT_CDW11_CSI_SHIFT = 24,
- NVME_NAMESPACE_MGMT_CDW11_CSI_MASK = 0xff,
- NVME_VIRT_MGMT_CDW10_ACT_SHIFT = 0,
- NVME_VIRT_MGMT_CDW10_RT_SHIFT = 8,
- NVME_VIRT_MGMT_CDW10_CNTLID_SHIFT = 16,
- NVME_VIRT_MGMT_CDW11_NR_SHIFT = 0,
- NVME_VIRT_MGMT_CDW10_ACT_MASK = 0xf,
- NVME_VIRT_MGMT_CDW10_RT_MASK = 0x7,
- NVME_VIRT_MGMT_CDW10_CNTLID_MASK = 0xffff,
- NVME_VIRT_MGMT_CDW11_NR_MASK = 0xffff,
- NVME_FORMAT_CDW10_LBAF_SHIFT = 0,
- NVME_FORMAT_CDW10_MSET_SHIFT = 4,
- NVME_FORMAT_CDW10_PI_SHIFT = 5,
- NVME_FORMAT_CDW10_PIL_SHIFT = 8,
- NVME_FORMAT_CDW10_SES_SHIFT = 9,
- NVME_FORMAT_CDW10_LBAFU_SHIFT = 12,
- NVME_FORMAT_CDW10_LBAF_MASK = 0xf,
- NVME_FORMAT_CDW10_MSET_MASK = 0x1,
- NVME_FORMAT_CDW10_PI_MASK = 0x7,
- NVME_FORMAT_CDW10_PIL_MASK = 0x1,
- NVME_FORMAT_CDW10_SES_MASK = 0x7,
- NVME_FORMAT_CDW10_LBAFU_MASK = 0x3,
- NVME_SANITIZE_CDW10_SANACT_SHIFT = 0,
- NVME_SANITIZE_CDW10_AUSE_SHIFT = 3,
- NVME_SANITIZE_CDW10_OWPASS_SHIFT = 4,
- NVME_SANITIZE_CDW10_OIPBP_SHIFT = 8,
- NVME_SANITIZE_CDW10_NODAS_SHIFT = 9,
- NVME_SANITIZE_CDW10_SANACT_MASK = 0x7,
- NVME_SANITIZE_CDW10_AUSE_MASK = 0x1,
- NVME_SANITIZE_CDW10_OWPASS_MASK = 0xf,
- NVME_SANITIZE_CDW10_OIPBP_MASK = 0x1,
- NVME_SANITIZE_CDW10_NODAS_MASK = 0x1,
- NVME_SECURITY_NSSF_SHIFT = 0,
- NVME_SECURITY_SPSP0_SHIFT = 8,
- NVME_SECURITY_SPSP1_SHIFT = 16,
- NVME_SECURITY_SECP_SHIFT = 24,
- NVME_SECURITY_NSSF_MASK = 0xff,
- NVME_SECURITY_SPSP0_MASK = 0xff,
- NVME_SECURITY_SPSP1_MASK = 0xff,
- NVME_SECURITY_SECP_MASK = 0xffff,
- NVME_GET_LBA_STATUS_CDW13_RL_SHIFT = 0,
- NVME_GET_LBA_STATUS_CDW13_ATYPE_SHIFT = 24,
- NVME_GET_LBA_STATUS_CDW13_RL_MASK = 0xffff,
- NVME_GET_LBA_STATUS_CDW13_ATYPE_MASK = 0xff,
- NVME_ZNS_MGMT_SEND_ZSASO_SHIFT = 9,
- NVME_ZNS_MGMT_SEND_ZSASO_MASK = 0x1,
- NVME_ZNS_MGMT_SEND_SEL_SHIFT = 8,
- NVME_ZNS_MGMT_SEND_SEL_MASK = 0x1,
- NVME_ZNS_MGMT_SEND_ZSA_SHIFT = 0,
- NVME_ZNS_MGMT_SEND_ZSA_MASK = 0xff,
- NVME_ZNS_MGMT_RECV_ZRA_SHIFT = 0,
- NVME_ZNS_MGMT_RECV_ZRA_MASK = 0xff,
- NVME_ZNS_MGMT_RECV_ZRASF_SHIFT = 8,
- NVME_ZNS_MGMT_RECV_ZRASF_MASK = 0xff,
- NVME_ZNS_MGMT_RECV_ZRAS_FEAT_SHIFT = 16,
- NVME_ZNS_MGMT_RECV_ZRAS_FEAT_MASK = 0x1,
- NVME_DIM_TAS_SHIFT = 0,
- NVME_DIM_TAS_MASK = 0xF,
-};
-
enum features {
NVME_FEATURES_ARBITRATION_BURST_SHIFT = 0,
NVME_FEATURES_ARBITRATION_LPW_SHIFT = 8,
diff --git a/src/nvme/ioctl.h b/src/nvme/ioctl.h
index 4a0698f..be4c1b7 100644
--- a/src/nvme/ioctl.h
+++ b/src/nvme/ioctl.h
@@ -199,6 +199,125 @@ struct nvme_uring_cmd {
t + p; \
})
+enum nvme_cmd_dword_fields {
+ NVME_DEVICE_SELF_TEST_CDW10_STC_SHIFT = 0,
+ NVME_DEVICE_SELF_TEST_CDW10_STC_MASK = 0xf,
+ NVME_DIRECTIVE_CDW11_DOPER_SHIFT = 0,
+ NVME_DIRECTIVE_CDW11_DTYPE_SHIFT = 8,
+ NVME_DIRECTIVE_CDW11_DPSEC_SHIFT = 16,
+ NVME_DIRECTIVE_CDW11_DOPER_MASK = 0xff,
+ NVME_DIRECTIVE_CDW11_DTYPE_MASK = 0xff,
+ NVME_DIRECTIVE_CDW11_DPSEC_MASK = 0xffff,
+ NVME_DIRECTIVE_SEND_IDENTIFY_CDW12_ENDIR_SHIFT = 0,
+ NVME_DIRECTIVE_SEND_IDENTIFY_CDW12_DTYPE_SHIFT = 1,
+ NVME_DIRECTIVE_SEND_IDENTIFY_CDW12_ENDIR_MASK = 0x1,
+ NVME_DIRECTIVE_SEND_IDENTIFY_CDW12_DTYPE_MASK = 0x1,
+ NVME_FW_COMMIT_CDW10_FS_SHIFT = 0,
+ NVME_FW_COMMIT_CDW10_CA_SHIFT = 3,
+ NVME_FW_COMMIT_CDW10_BPID_SHIFT = 31,
+ NVME_FW_COMMIT_CDW10_FS_MASK = 0x7,
+ NVME_FW_COMMIT_CDW10_CA_MASK = 0x7,
+ NVME_FW_COMMIT_CDW10_BPID_MASK = 0x1,
+ NVME_GET_FEATURES_CDW10_SEL_SHIFT = 8,
+ NVME_GET_FEATURES_CDW10_SEL_MASK = 0x7,
+ NVME_SET_FEATURES_CDW10_SAVE_SHIFT = 31,
+ NVME_SET_FEATURES_CDW10_SAVE_MASK = 0x1,
+ NVME_FEATURES_CDW10_FID_SHIFT = 0,
+ NVME_FEATURES_CDW14_UUID_SHIFT = 0,
+ NVME_FEATURES_CDW10_FID_MASK = 0xff,
+ NVME_FEATURES_CDW14_UUID_MASK = 0x7f,
+ NVME_LOG_CDW10_LID_SHIFT = 0,
+ NVME_LOG_CDW10_LSP_SHIFT = 8,
+ NVME_LOG_CDW10_RAE_SHIFT = 15,
+ NVME_LOG_CDW10_NUMDL_SHIFT = 16,
+ NVME_LOG_CDW11_NUMDU_SHIFT = 0,
+ NVME_LOG_CDW11_LSI_SHIFT = 16,
+ NVME_LOG_CDW14_UUID_SHIFT = 0,
+ NVME_LOG_CDW14_CSI_SHIFT = 24,
+ NVME_LOG_CDW14_OT_SHIFT = 23,
+ NVME_LOG_CDW10_LID_MASK = 0xff,
+ NVME_LOG_CDW10_LSP_MASK = 0x7f,
+ NVME_LOG_CDW10_RAE_MASK = 0x1,
+ NVME_LOG_CDW10_NUMDL_MASK = 0xffff,
+ NVME_LOG_CDW11_NUMDU_MASK = 0xffff,
+ NVME_LOG_CDW11_LSI_MASK = 0xffff,
+ NVME_LOG_CDW14_UUID_MASK = 0x7f,
+ NVME_LOG_CDW14_CSI_MASK = 0xff,
+ NVME_LOG_CDW14_OT_MASK = 0x1,
+ NVME_IDENTIFY_CDW10_CNS_SHIFT = 0,
+ NVME_IDENTIFY_CDW10_CNTID_SHIFT = 16,
+ NVME_IDENTIFY_CDW11_CNSSPECID_SHIFT = 0,
+ NVME_IDENTIFY_CDW14_UUID_SHIFT = 0,
+ NVME_IDENTIFY_CDW11_CSI_SHIFT = 24,
+ NVME_IDENTIFY_CDW10_CNS_MASK = 0xff,
+ NVME_IDENTIFY_CDW10_CNTID_MASK = 0xffff,
+ NVME_IDENTIFY_CDW11_CNSSPECID_MASK = 0xffff,
+ NVME_IDENTIFY_CDW14_UUID_MASK = 0x7f,
+ NVME_IDENTIFY_CDW11_CSI_MASK = 0xff,
+ NVME_NAMESPACE_ATTACH_CDW10_SEL_SHIFT = 0,
+ NVME_NAMESPACE_ATTACH_CDW10_SEL_MASK = 0xf,
+ NVME_NAMESPACE_MGMT_CDW10_SEL_SHIFT = 0,
+ NVME_NAMESPACE_MGMT_CDW10_SEL_MASK = 0xf,
+ NVME_NAMESPACE_MGMT_CDW11_CSI_SHIFT = 24,
+ NVME_NAMESPACE_MGMT_CDW11_CSI_MASK = 0xff,
+ NVME_VIRT_MGMT_CDW10_ACT_SHIFT = 0,
+ NVME_VIRT_MGMT_CDW10_RT_SHIFT = 8,
+ NVME_VIRT_MGMT_CDW10_CNTLID_SHIFT = 16,
+ NVME_VIRT_MGMT_CDW11_NR_SHIFT = 0,
+ NVME_VIRT_MGMT_CDW10_ACT_MASK = 0xf,
+ NVME_VIRT_MGMT_CDW10_RT_MASK = 0x7,
+ NVME_VIRT_MGMT_CDW10_CNTLID_MASK = 0xffff,
+ NVME_VIRT_MGMT_CDW11_NR_MASK = 0xffff,
+ NVME_FORMAT_CDW10_LBAF_SHIFT = 0,
+ NVME_FORMAT_CDW10_MSET_SHIFT = 4,
+ NVME_FORMAT_CDW10_PI_SHIFT = 5,
+ NVME_FORMAT_CDW10_PIL_SHIFT = 8,
+ NVME_FORMAT_CDW10_SES_SHIFT = 9,
+ NVME_FORMAT_CDW10_LBAFU_SHIFT = 12,
+ NVME_FORMAT_CDW10_LBAF_MASK = 0xf,
+ NVME_FORMAT_CDW10_MSET_MASK = 0x1,
+ NVME_FORMAT_CDW10_PI_MASK = 0x7,
+ NVME_FORMAT_CDW10_PIL_MASK = 0x1,
+ NVME_FORMAT_CDW10_SES_MASK = 0x7,
+ NVME_FORMAT_CDW10_LBAFU_MASK = 0x3,
+ NVME_SANITIZE_CDW10_SANACT_SHIFT = 0,
+ NVME_SANITIZE_CDW10_AUSE_SHIFT = 3,
+ NVME_SANITIZE_CDW10_OWPASS_SHIFT = 4,
+ NVME_SANITIZE_CDW10_OIPBP_SHIFT = 8,
+ NVME_SANITIZE_CDW10_NODAS_SHIFT = 9,
+ NVME_SANITIZE_CDW10_SANACT_MASK = 0x7,
+ NVME_SANITIZE_CDW10_AUSE_MASK = 0x1,
+ NVME_SANITIZE_CDW10_OWPASS_MASK = 0xf,
+ NVME_SANITIZE_CDW10_OIPBP_MASK = 0x1,
+ NVME_SANITIZE_CDW10_NODAS_MASK = 0x1,
+ NVME_SECURITY_NSSF_SHIFT = 0,
+ NVME_SECURITY_SPSP0_SHIFT = 8,
+ NVME_SECURITY_SPSP1_SHIFT = 16,
+ NVME_SECURITY_SECP_SHIFT = 24,
+ NVME_SECURITY_NSSF_MASK = 0xff,
+ NVME_SECURITY_SPSP0_MASK = 0xff,
+ NVME_SECURITY_SPSP1_MASK = 0xff,
+ NVME_SECURITY_SECP_MASK = 0xffff,
+ NVME_GET_LBA_STATUS_CDW13_RL_SHIFT = 0,
+ NVME_GET_LBA_STATUS_CDW13_ATYPE_SHIFT = 24,
+ NVME_GET_LBA_STATUS_CDW13_RL_MASK = 0xffff,
+ NVME_GET_LBA_STATUS_CDW13_ATYPE_MASK = 0xff,
+ NVME_ZNS_MGMT_SEND_ZSASO_SHIFT = 9,
+ NVME_ZNS_MGMT_SEND_ZSASO_MASK = 0x1,
+ NVME_ZNS_MGMT_SEND_SEL_SHIFT = 8,
+ NVME_ZNS_MGMT_SEND_SEL_MASK = 0x1,
+ NVME_ZNS_MGMT_SEND_ZSA_SHIFT = 0,
+ NVME_ZNS_MGMT_SEND_ZSA_MASK = 0xff,
+ NVME_ZNS_MGMT_RECV_ZRA_SHIFT = 0,
+ NVME_ZNS_MGMT_RECV_ZRA_MASK = 0xff,
+ NVME_ZNS_MGMT_RECV_ZRASF_SHIFT = 8,
+ NVME_ZNS_MGMT_RECV_ZRASF_MASK = 0xff,
+ NVME_ZNS_MGMT_RECV_ZRAS_FEAT_SHIFT = 16,
+ NVME_ZNS_MGMT_RECV_ZRAS_FEAT_MASK = 0x1,
+ NVME_DIM_TAS_SHIFT = 0,
+ NVME_DIM_TAS_MASK = 0xF,
+};
+
/**
* nvme_submit_admin_passthru64() - Submit a 64-bit nvme passthrough admin
* command
@@ -3233,9 +3352,11 @@ static inline int nvme_ns_mgmt_create(int fd, struct nvme_id_ns *ns,
}
/**
- * nvme_ns_mgmt_delete() - Delete a non attached namespace
+ * nvme_ns_mgmt_delete_timeout() - Delete a non attached namespace with timeout
* @fd: File descriptor of nvme device
* @nsid: Namespace identifier to delete
+ * @timeout: Override the default timeout to this value in milliseconds;
+ * set to 0 to use the system default.
*
* It is recommended that a namespace being deleted is not attached to any
* controller. Use the nvme_ns_detach_ctrls() first if the namespace is still
@@ -3244,14 +3365,14 @@ static inline int nvme_ns_mgmt_create(int fd, struct nvme_id_ns *ns,
* Return: The nvme command status if a response was received (see
* &enum nvme_status_field) or -1 with errno set otherwise.
*/
-static inline int nvme_ns_mgmt_delete(int fd, __u32 nsid)
+static inline int nvme_ns_mgmt_delete_timeout(int fd, __u32 nsid, __u32 timeout)
{
struct nvme_ns_mgmt_args args = {
.result = NULL,
.ns = NULL,
.args_size = sizeof(args),
.fd = fd,
- .timeout = 0,
+ .timeout = timeout,
.nsid = nsid,
.sel = NVME_NS_MGMT_SEL_DELETE,
.csi = 0,
@@ -3264,6 +3385,23 @@ static inline int nvme_ns_mgmt_delete(int fd, __u32 nsid)
}
/**
+ * nvme_ns_mgmt_delete() - Delete a non attached namespace
+ * @fd: File descriptor of nvme device
+ * @nsid: Namespace identifier to delete
+ *
+ * It is recommended that a namespace being deleted is not attached to any
+ * controller. Use the nvme_ns_detach_ctrls() first if the namespace is still
+ * attached.
+ *
+ * Return: The nvme command status if a response was received (see
+ * &enum nvme_status_field) or -1 with errno set otherwise.
+ */
+static inline int nvme_ns_mgmt_delete(int fd, __u32 nsid)
+{
+ return nvme_ns_mgmt_delete_timeout(fd, nsid, 0);
+}
+
+/**
* nvme_ns_attach() - Attach or detach namespace to controller(s)
* @args: &struct nvme_ns_attach_args Argument structure
*
@@ -4047,16 +4185,4 @@ int nvme_zns_append(struct nvme_zns_append_args *args);
*/
int nvme_dim_send(struct nvme_dim_args *args);
-/**
- * nvme_set_debug - Set NVMe command debugging output
- * @debug: true to enable or false to disable
- */
-void nvme_set_debug(bool debug);
-
-/**
- * nvme_get_debug - Get NVMe command debugging output
- *
- * Return: false if disabled or true if enabled.
- */
-bool nvme_get_debug(void);
#endif /* _LIBNVME_IOCTL_H */
diff --git a/src/nvme/json.c b/src/nvme/json.c
index b49498a..a02bd2d 100644
--- a/src/nvme/json.c
+++ b/src/nvme/json.c
@@ -25,10 +25,62 @@
#define JSON_UPDATE_BOOL_OPTION(c, k, a, o) \
if (!strcmp(# a, k ) && !c->a) c->a = json_object_get_boolean(o);
+static void json_import_nvme_tls_key(nvme_ctrl_t c, const char *keyring_str,
+ const char *encoded_key)
+{
+ struct nvme_fabrics_config *cfg = nvme_ctrl_get_config(c);
+ const char *hostnqn = nvme_host_get_hostnqn(c->s->h);
+ const char *subsysnqn = nvme_ctrl_get_subsysnqn(c);
+ int key_len;
+ unsigned int hmac;
+ long key_id;
+ _cleanup_free_ unsigned char *key_data = NULL;
+
+ if (!hostnqn || !subsysnqn) {
+ nvme_msg(NULL, LOG_ERR, "Invalid NQNs (%s, %s)\n",
+ hostnqn, subsysnqn);
+ return;
+ }
+ key_data = nvme_import_tls_key(encoded_key, &key_len, &hmac);
+ if (!key_data) {
+ nvme_msg(NULL, LOG_ERR, "Failed to decode TLS Key '%s'\n",
+ encoded_key);
+ return;
+ }
+ key_id = nvme_insert_tls_key_versioned(keyring_str, "psk",
+ hostnqn, subsysnqn,
+ 0, hmac, key_data, key_len);
+ if (key_id <= 0)
+ nvme_msg(NULL, LOG_ERR, "Failed to insert TLS KEY, error %d\n",
+ errno);
+ else {
+ cfg->tls_key = key_id;
+ cfg->tls = true;
+ }
+}
+
+static void json_export_nvme_tls_key(long keyring_id, long tls_key,
+ struct json_object *obj)
+{
+ int key_len;
+ _cleanup_free_ unsigned char *key_data = NULL;
+
+ key_data = nvme_read_key(keyring_id, tls_key, &key_len);
+ if (key_data) {
+ _cleanup_free_ char *tls_str = NULL;
+
+ tls_str = nvme_export_tls_key(key_data, key_len);
+ if (tls_str)
+ json_object_object_add(obj, "tls_key",
+ json_object_new_string(tls_str));
+ }
+}
+
static void json_update_attributes(nvme_ctrl_t c,
struct json_object *ctrl_obj)
{
struct nvme_fabrics_config *cfg = nvme_ctrl_get_config(c);
+ const char *keyring_str = NULL, *encoded_key = NULL;
json_object_object_foreach(ctrl_obj, key_str, val_obj) {
JSON_UPDATE_INT_OPTION(cfg, key_str,
@@ -75,21 +127,24 @@ static void json_update_attributes(nvme_ctrl_t c,
if (!strcmp("keyring", key_str) && cfg->keyring == 0) {
long keyring;
- keyring = nvme_lookup_keyring(json_object_get_string(val_obj));
+ keyring_str = json_object_get_string(val_obj);
+ keyring = nvme_lookup_keyring(keyring_str);
if (keyring) {
cfg->keyring = keyring;
nvme_set_keyring(cfg->keyring);
}
}
- if (!strcmp("tls_key", key_str) && cfg->tls_key == 0) {
- long key;
-
- key = nvme_lookup_key("psk",
- json_object_get_string(val_obj));
- if (key)
- cfg->tls_key = key;
- }
+ if (!strcmp("tls_key", key_str) && cfg->tls_key == 0)
+ encoded_key = json_object_get_string(val_obj);
}
+
+ /*
+ * We might need the keyring information from the above loop,
+ * so we can only import the TLS key once all entries are
+ * processed.
+ */
+ if (encoded_key)
+ json_import_nvme_tls_key(c, keyring_str, encoded_key);
}
static void json_parse_port(nvme_subsystem_t s, struct json_object *port_obj)
@@ -346,15 +401,11 @@ static void json_update_port(struct json_object *ctrl_array, nvme_ctrl_t c)
json_object_new_string(desc));
}
}
- if (cfg->tls_key) {
- _cleanup_free_ char *desc =
- nvme_describe_key_serial(cfg->tls_key);
-
- if (desc) {
- json_object_object_add(port_obj, "tls_key",
- json_object_new_string(desc));
- }
- }
+ /*
+ * Store the TLS key in PSK interchange format
+ */
+ if (cfg->tls_key)
+ json_export_nvme_tls_key(cfg->keyring, cfg->tls_key, port_obj);
json_object_array_add(ctrl_array, port_obj);
}
@@ -503,7 +554,13 @@ static void json_dump_ctrl(struct json_object *ctrl_array, nvme_ctrl_t c)
JSON_BOOL_OPTION(cfg, ctrl_obj, disable_sqflow);
JSON_BOOL_OPTION(cfg, ctrl_obj, hdr_digest);
JSON_BOOL_OPTION(cfg, ctrl_obj, data_digest);
- JSON_BOOL_OPTION(cfg, ctrl_obj, tls);
+ if (!strcmp(transport, "tcp")) {
+ JSON_BOOL_OPTION(cfg, ctrl_obj, tls);
+
+ if (cfg->tls_key)
+ json_export_nvme_tls_key(cfg->keyring, cfg->tls_key,
+ ctrl_obj);
+ }
JSON_BOOL_OPTION(cfg, ctrl_obj, concat);
if (nvme_ctrl_is_persistent(c))
json_object_object_add(ctrl_obj, "persistent",
diff --git a/src/nvme/linux.c b/src/nvme/linux.c
index e29d9e7..25196fd 100644
--- a/src/nvme/linux.c
+++ b/src/nvme/linux.c
@@ -31,6 +31,8 @@
#ifdef CONFIG_KEYUTILS
#include <keyutils.h>
+
+#define NVME_TLS_DEFAULT_KEYRING ".nvme"
#endif
#include <ccan/endian/endian.h>
@@ -41,6 +43,7 @@
#include "log.h"
#include "private.h"
#include "base64.h"
+#include "crc32.h"
static int __nvme_open(const char *name)
{
@@ -183,7 +186,7 @@ int nvme_get_telemetry_log(int fd, bool create, bool ctrl, bool rae, size_t max_
*size = 0;
- log = malloc(xfer);
+ log = __nvme_alloc(xfer);
if (!log) {
errno = ENOMEM;
return -1;
@@ -236,7 +239,7 @@ int nvme_get_telemetry_log(int fd, bool create, bool ctrl, bool rae, size_t max_
}
*size = (dalb + 1) * xfer;
- tmp = realloc(log, *size);
+ tmp = __nvme_realloc(log, *size);
if (!tmp) {
errno = ENOMEM;
return -1;
@@ -1158,6 +1161,8 @@ long nvme_lookup_keyring(const char *keyring)
{
key_serial_t keyring_id;
+ if (!keyring)
+ keyring = NVME_TLS_DEFAULT_KEYRING;
keyring_id = find_key_by_type_and_desc("keyring", keyring, 0);
if (keyring_id < 0)
return 0;
@@ -1187,12 +1192,119 @@ int nvme_set_keyring(long key_id)
{
long err;
+ if (key_id == 0) {
+ key_id = nvme_lookup_keyring(NULL);
+ if (key_id == 0) {
+ errno = ENOKEY;
+ return -1;
+ }
+ }
+
err = keyctl_link(key_id, KEY_SPEC_SESSION_KEYRING);
if (err < 0)
return -1;
return 0;
}
+unsigned char *nvme_read_key(long keyring_id, long key_id, int *len)
+{
+ void *buffer;
+ int ret;
+
+ ret = nvme_set_keyring(keyring_id);
+ if (ret < 0) {
+ errno = -ret;
+ return NULL;
+ }
+ ret = keyctl_read_alloc(key_id, &buffer);
+ if (ret < 0) {
+ errno = -ret;
+ buffer = NULL;
+ } else
+ *len = ret;
+
+ return buffer;
+}
+
+long nvme_update_key(long keyring_id, const char *key_type,
+ const char *identity, unsigned char *key_data,
+ int key_len)
+{
+ long key;
+
+ key = keyctl_search(keyring_id, key_type, identity, 0);
+ if (key > 0) {
+ if (keyctl_revoke(key) < 0)
+ return 0;
+ }
+ key = add_key(key_type, identity,
+ key_data, key_len, keyring_id);
+ if (key < 0)
+ key = 0;
+ return key;
+}
+
+struct __scan_keys_data {
+ nvme_scan_tls_keys_cb_t cb;
+ key_serial_t keyring;
+ void *data;
+};
+
+int __scan_keys_cb(key_serial_t parent, key_serial_t key,
+ char *desc, int desc_len, void *data)
+{
+ struct __scan_keys_data *d = data;
+ int ver, hmac, uid, gid, perm;
+ char type, *ptr;
+
+ if (desc_len < 6)
+ return 0;
+ if (sscanf(desc, "psk;%d;%d;%08x;NVMe%01d%c%02d %*s",
+ &uid, &gid, &perm, &ver, &type, &hmac) != 6)
+ return 0;
+ /* skip key type */
+ ptr = strchr(desc, ';');
+ if (!ptr)
+ return 0;
+ /* skip key uid */
+ ptr = strchr(ptr + 1, ';');
+ if (!ptr)
+ return 0;
+ /* skip key gid */
+ ptr = strchr(ptr + 1, ';');
+ if (!ptr)
+ return 0;
+ /* skip key permissions */
+ ptr = strchr(ptr + 1, ';');
+ if (!ptr)
+ return 0;
+ /* Only use the key description for the callback */
+ (d->cb)(d->keyring, key, ptr + 1, strlen(ptr) - 1, d->data);
+ return 1;
+}
+
+int nvme_scan_tls_keys(const char *keyring, nvme_scan_tls_keys_cb_t cb,
+ void *data)
+{
+ struct __scan_keys_data d;
+ key_serial_t keyring_id = nvme_lookup_keyring(keyring);
+ int ret;
+
+ if (!keyring_id) {
+ errno = EINVAL;
+ return -1;
+ }
+ ret = nvme_set_keyring(keyring_id);
+ if (ret < 0)
+ return ret;
+
+ d.keyring = keyring_id;
+ d.cb = cb;
+ d.data = data;
+ ret = recursive_key_scan(keyring_id, __scan_keys_cb, &d);
+ return ret;
+}
+
long nvme_insert_tls_key_versioned(const char *keyring, const char *key_type,
const char *hostnqn, const char *subsysnqn,
int version, int hmac,
@@ -1202,21 +1314,28 @@ long nvme_insert_tls_key_versioned(const char *keyring, const char *key_type,
_cleanup_free_ char *identity = NULL;
size_t identity_len;
_cleanup_free_ unsigned char *psk = NULL;
- int ret = -1;
+ int ret;
keyring_id = nvme_lookup_keyring(keyring);
- if (keyring_id == 0)
- return -1;
+ if (keyring_id == 0) {
+ errno = ENOKEY;
+ return 0;
+ }
+
+ ret = nvme_set_keyring(keyring_id);
+ if (ret < 0)
+ return 0;
identity_len = nvme_identity_len(hmac, version, hostnqn, subsysnqn);
if (identity_len < 0)
- return -1;
+ return 0;
identity = malloc(identity_len);
if (!identity) {
errno = ENOMEM;
- return -1;
+ return 0;
}
+ memset(identity, 0, identity_len);
psk = malloc(key_len);
if (!psk) {
@@ -1226,19 +1345,13 @@ long nvme_insert_tls_key_versioned(const char *keyring, const char *key_type,
memset(psk, 0, key_len);
ret = derive_nvme_keys(hostnqn, subsysnqn, identity, version, hmac,
configured_key, psk, key_len);
- if (ret != key_len)
+ if (ret != key_len) {
+ errno = ENOKEY;
return 0;
-
- key = keyctl_search(keyring_id, key_type, identity, 0);
- if (key > 0) {
- if (keyctl_update(key, psk, key_len) < 0)
- key = 0;
- } else {
- key = add_key(key_type, identity,
- psk, key_len, keyring_id);
- if (key < 0)
- key = 0;
}
+
+ key = nvme_update_key(keyring_id, key_type, identity,
+ psk, key_len);
return key;
}
@@ -1275,6 +1388,27 @@ int nvme_set_keyring(long key_id)
return -1;
}
+unsigned char *nvme_read_key(long keyring_id, long key_id, int *len)
+{
+ errno = ENOTSUP;
+ return NULL;
+}
+
+long nvme_update_key(long keyring_id, const char *key_type,
+ const char *identity, unsigned char *key_data,
+ int key_len)
+{
+ errno = ENOTSUP;
+ return 0;
+}
+
+int nvme_scan_tls_keys(const char *keyring, nvme_scan_tls_keys_cb_t cb,
+ void *data)
+{
+ errno = ENOTSUP;
+ return -1;
+}
+
long nvme_insert_tls_key_versioned(const char *keyring, const char *key_type,
const char *hostnqn, const char *subsysnqn,
int version, int hmac,
@@ -1295,3 +1429,108 @@ long nvme_insert_tls_key(const char *keyring, const char *key_type,
hostnqn, subsysnqn, 0, hmac,
configured_key, key_len);
}
+
+char *nvme_export_tls_key(const unsigned char *key_data, int key_len)
+{
+ unsigned char raw_secret[52];
+ char *encoded_key;
+ unsigned int raw_len, encoded_len, len;
+ unsigned long crc = crc32(0L, NULL, 0);
+
+ if (key_len == 32) {
+ raw_len = 32;
+ } else if (key_len == 48) {
+ raw_len = 48;
+ } else {
+ errno = EINVAL;
+ return NULL;
+ }
+
+ memcpy(raw_secret, key_data, raw_len);
+ crc = crc32(crc, raw_secret, raw_len);
+ raw_secret[raw_len++] = crc & 0xff;
+ raw_secret[raw_len++] = (crc >> 8) & 0xff;
+ raw_secret[raw_len++] = (crc >> 16) & 0xff;
+ raw_secret[raw_len++] = (crc >> 24) & 0xff;
+
+ encoded_len = (raw_len * 2) + 20;
+ encoded_key = malloc(encoded_len);
+ if (!encoded_key) {
+ errno = ENOMEM;
+ return NULL;
+ }
+ memset(encoded_key, 0, encoded_len);
+ len = sprintf(encoded_key, "NVMeTLSkey-1:%02x:",
+ key_len == 32 ? 1 : 2);
+ len += base64_encode(raw_secret, raw_len, encoded_key + len);
+ encoded_key[len++] = ':';
+ encoded_key[len++] = '\0';
+
+ return encoded_key;
+}
+
+unsigned char *nvme_import_tls_key(const char *encoded_key, int *key_len,
+ unsigned int *hmac)
+{
+ unsigned char decoded_key[128], *key_data;
+ unsigned int crc = crc32(0L, NULL, 0);
+ unsigned int key_crc;
+ int err, decoded_len;
+
+ if (sscanf(encoded_key, "NVMeTLSkey-1:%02x:*s", &err) != 1) {
+ errno = EINVAL;
+ return NULL;
+ }
+ switch (err) {
+ case 1:
+ if (strlen(encoded_key) != 65) {
+ errno = EINVAL;
+ return NULL;
+ }
+ break;
+ case 2:
+ if (strlen(encoded_key) != 89) {
+ errno = EINVAL;
+ return NULL;
+ }
+ break;
+ default:
+ errno = EINVAL;
+ return NULL;
+ }
+
+ *hmac = err;
+ err = base64_decode(encoded_key + 16, strlen(encoded_key) - 17,
+ decoded_key);
+ if (err < 0) {
+ errno = ENOKEY;
+ return NULL;
+ }
+ decoded_len = err;
+ decoded_len -= 4;
+ if (decoded_len != 32 && decoded_len != 48) {
+ errno = ENOKEY;
+ return NULL;
+ }
+ crc = crc32(crc, decoded_key, decoded_len);
+ key_crc = ((u_int32_t)decoded_key[decoded_len]) |
+ ((u_int32_t)decoded_key[decoded_len + 1] << 8) |
+ ((u_int32_t)decoded_key[decoded_len + 2] << 16) |
+ ((u_int32_t)decoded_key[decoded_len + 3] << 24);
+ if (key_crc != crc) {
+ nvme_msg(NULL, LOG_ERR, "CRC mismatch (key %08x, crc %08x)",
+ key_crc, crc);
+ errno = ENOKEY;
+ return NULL;
+ }
+
+ key_data = malloc(decoded_len);
+ if (!key_data) {
+ errno = ENOMEM;
+ return NULL;
+ }
+ memcpy(key_data, decoded_key, decoded_len);
+
+ *key_len = decoded_len;
+ return key_data;
+}
diff --git a/src/nvme/linux.h b/src/nvme/linux.h
index 11ee76e..bd74262 100644
--- a/src/nvme/linux.h
+++ b/src/nvme/linux.h
@@ -274,6 +274,72 @@ long nvme_lookup_key(const char *type, const char *identity);
int nvme_set_keyring(long keyring_id);
/**
+ * nvme_read_key() - Read key raw data
+ * @keyring_id: Id of the keyring holding %key_id
+ * @key_id: Key id
+ * @len: Length of the returned data
+ *
+ * Links the keyring specified by @keyring_id into the session
+ * keyring and reads the payload of the key specified by @key_id.
+ * @len holds the size of the returned buffer.
+ * If @keyring is 0 the default keyring '.nvme' is used.
+ *
+ * Return: Pointer to the payload on success,
+ * or NULL with errno set otherwise.
+ */
+unsigned char *nvme_read_key(long keyring_id, long key_id, int *len);
+
+/**
+ * nvme_update_key() - Update key raw data
+ * @keyring_id: Id of the keyring holding %key_id
+ * @key_type: Type of the key to insert
+ * @identity: Key identity string
+ * @key_data: Raw data of the key
+ * @key_len: Length of @key_data
+ *
+ * Links the keyring specified by @keyring_id into the session
+ * keyring and updates the key reference by @identity with @key_data.
+ * The old key with identity @identity will be revoked to make it
+ * inaccessible.
+ *
+ * Return: Key id of the new key or 0 with errno set otherwise.
+ */
+long nvme_update_key(long keyring_id, const char *key_type,
+ const char *identity, unsigned char *key_data,
+ int key_len);
+
+/**
+ * typedef nvme_scan_tls_keys_cb_t - Callback for iterating TLS keys
+ * @keyring: Keyring which has been iterated
+ * @key: Key for which the callback has been invoked
+ * @desc: Description of the key
+ * @desc_len: Length of @desc
+ * @data: Pointer for caller data
+ *
+ * Called for each TLS PSK in the keyring.
+ */
+typedef void (*nvme_scan_tls_keys_cb_t)(long keyring, long key,
+ char *desc, int desc_len, void *data);
+
+/**
+ * nvme_scan_tls_keys() - Iterate over TLS keys in a keyring
+ * @keyring: Keyring holding TLS keys
+ * @cb: Callback function
+ * @data: Pointer for data to be passed to @cb
+ *
+ * Iterates @keyring and call @cb for each TLS key. When @keyring is NULL
+ * the default '.nvme' keyring is used.
+ * A TLS key must be of type 'psk' and the description must be of the
+ * form 'NVMe<0|1><R|G>0<1|2> <identity>', otherwise it will be skipped
+ * during iteration.
+ *
+ * Return: Number of keys for which @cb was called, or -1 with errno set
+ * on error.
+ */
+int nvme_scan_tls_keys(const char *keyring, nvme_scan_tls_keys_cb_t cb,
+ void *data);
+
+/**
* nvme_insert_tls_key() - Derive and insert TLS key
* @keyring: Keyring to use
* @key_type: Type of the resulting key
@@ -335,4 +401,68 @@ char *nvme_generate_tls_key_identity(const char *hostnqn, const char *subsysnqn,
int version, int hmac,
unsigned char *configured_key, int key_len);
+/**
+ * nvme_export_tls_key() - Export a TLS key
+ * @key_data: Raw data of the key
+ * @key_len: Length of @key_data
+ *
+ * Returns @key_data in the PSK Interchange format as defined in section
+ * 3.6.1.5 of the NVMe TCP Transport specification.
+ *
+ * Return: The string containing the TLS identity or NULL with errno set
+ * on error. It is the responsibility of the caller to free the returned
+ * string.
+ */
+char *nvme_export_tls_key(const unsigned char *key_data, int key_len);
+
+/**
+ * nvme_import_tls_key() - Import a TLS key
+ * @encoded_key: TLS key in PSK interchange format
+ * @key_len: Length of the resulting key data
+ * @hmac: HMAC algorithm
+ *
+ * Imports @key_data in the PSK Interchange format as defined in section
+ * 3.6.1.5 of the NVMe TCP Transport specification.
+ *
+ * Return: The raw data of the PSK or NULL with errno set on error. It is
+ * the responsibility of the caller to free the returned string.
+ */
+unsigned char *nvme_import_tls_key(const char *encoded_key, int *key_len,
+ unsigned int *hmac);
+
+/**
+ * nvme_submit_passthru - Low level ioctl wrapper for passthru commands
+ * @fd: File descriptor of the nvme device
+ * @ioctl_cmd: IOCTL command id
+ * @cmd: Passhtru command
+ * @result: Optional field to return the result
+ *
+ * This is a low level library function which should not be used directly. It is
+ * exposed as weak symbol so that the user application is able to provide their own
+ * implementation of this function with additional debugging or logging code.
+ *
+ * Return: The value from the ioctl system call (see ioctl documentation)
+ */
+__attribute__((weak))
+int nvme_submit_passthru(int fd, unsigned long ioctl_cmd,
+ struct nvme_passthru_cmd *cmd, __u32 *result);
+
+/**
+ * nvme_submit_passthru64 - Low level ioctl wrapper for passthru commands
+ * @fd: File descriptor of the nvme device
+ * @ioctl_cmd: IOCTL command id
+ * @cmd: Passhtru command
+ * @result: Optional field to return the result
+ *
+ * This is a low level library function which should not be used directly. It is
+ * exposed as weak symbol so that the user application is able to provide their own
+ * implementation of this function with additional debugging or logging code.
+ *
+ * Return: The value from the ioctl system call (see ioctl documentation)
+ */
+__attribute__((weak))
+int nvme_submit_passthru64(int fd, unsigned long ioctl_cmd,
+ struct nvme_passthru_cmd64 *cmd,
+ __u64 *result);
+
#endif /* _LIBNVME_LINUX_H */
diff --git a/src/nvme/log.c b/src/nvme/log.c
index 2ffca3e..c98d213 100644
--- a/src/nvme/log.c
+++ b/src/nvme/log.c
@@ -58,6 +58,8 @@ __nvme_msg(nvme_root_t r, int lvl,
if (r && lvl > r->log_level)
return;
+ if (!r && lvl > DEFAULT_LOGLEVEL)
+ return;
if (r && r->log_timestamp) {
struct timespec now;
@@ -99,7 +101,30 @@ void nvme_init_logging(nvme_root_t r, int lvl, bool log_pid, bool log_tstamp)
r->log_timestamp = log_tstamp;
}
+int nvme_get_logging_level(nvme_root_t r, bool *log_pid, bool *log_tstamp)
+{
+ if (!r)
+ r = root;
+ if (!r)
+ return DEFAULT_LOGLEVEL;
+ if (log_pid)
+ *log_pid = r->log_pid;
+ if (log_tstamp)
+ *log_tstamp = r->log_timestamp;
+ return r->log_level;
+}
+
void nvme_set_root(nvme_root_t r)
{
root = r;
}
+
+void nvme_set_debug(bool debug)
+{
+ root->log_level = debug ? LOG_DEBUG : DEFAULT_LOGLEVEL;
+}
+
+bool nvme_get_debug(void)
+{
+ return root->log_level == LOG_DEBUG;
+}
diff --git a/src/nvme/log.h b/src/nvme/log.h
index 7c345f6..cd243ea 100644
--- a/src/nvme/log.h
+++ b/src/nvme/log.h
@@ -36,6 +36,20 @@
void nvme_init_logging(nvme_root_t r, int lvl, bool log_pid, bool log_tstamp);
/**
+ * nvme_get_logging_level() - Get current logging level
+ * @r: nvme_root_t context
+ * @log_pid: Pointer to store a current value of logging of
+ * the PID flag at (optional).
+ * @log_tstamp: Pointer to store a current value of logging of
+ * the timestamp flag at (optional).
+ *
+ * Retrieves current values of logging variables.
+ *
+ * Return: current log level value or DEFAULT_LOGLEVEL if not initialized.
+ */
+int nvme_get_logging_level(nvme_root_t r, bool *log_pid, bool *log_tstamp);
+
+/**
* nvme_set_root() - Set nvme_root_t context
* @r: nvme_root_t context
*
@@ -48,4 +62,21 @@ void nvme_init_logging(nvme_root_t r, int lvl, bool log_pid, bool log_tstamp);
*/
void nvme_set_root(nvme_root_t r);
+/**
+ * nvme_set_debug - Set NVMe command debugging output
+ * @debug: true to enable or false to disable
+ *
+ * Don't use it, it's debricated.
+ */
+void nvme_set_debug(bool debug);
+
+/**
+ * nvme_get_debug - Get NVMe command debugging output
+ *
+ * Don't use it, it's debricated.
+ *
+ * Return: false if disabled or true if enabled.
+ */
+bool nvme_get_debug(void);
+
#endif /* _LOG_H */
diff --git a/src/nvme/nbft.c b/src/nvme/nbft.c
index f2ffc21..b7d0dc8 100644
--- a/src/nvme/nbft.c
+++ b/src/nvme/nbft.c
@@ -246,6 +246,12 @@ static int read_ssns(struct nbft_info *nbft,
ssns->nid_type = raw_ssns->nidt;
ssns->nid = raw_ssns->nid;
+ /* flags */
+ ssns->unavailable = !!(le16_to_cpu(raw_ssns->flags) &
+ NBFT_SSNS_UNAVAIL_NAMESPACE_UNAVAIL);
+ ssns->discovered = !!(le16_to_cpu(raw_ssns->flags) &
+ NBFT_SSNS_DISCOVERED_NAMESPACE);
+
/* security profile */
if (raw_ssns->security_desc_index) {
ssns->security = security_from_index(nbft, raw_ssns->security_desc_index);
diff --git a/src/nvme/nbft.h b/src/nvme/nbft.h
index 6012e16..a9eaf6f 100644
--- a/src/nvme/nbft.h
+++ b/src/nvme/nbft.h
@@ -12,6 +12,14 @@
#include <sys/types.h>
#include "util.h"
+/**
+ * DOC: nbft.h
+ *
+ * NVM Express Boot Specification, Revision 1.0
+ *
+ * Note: this API is currently unstable, subject to further additions.
+ */
+
/*
* ACPI NBFT table structures (TP8012 Boot Specification rev. 1.0)
*/
@@ -994,17 +1002,17 @@ enum nbft_discovery_flags {
/**
* enum nbft_info_primary_admin_host_flag - Primary Administrative Host Descriptor Flags
* @NBFT_INFO_PRIMARY_ADMIN_HOST_FLAG_NOT_INDICATED: Not Indicated by Driver: The driver
- * that created this NBFT provided no
- * administrative priority hint for
- * this NBFT.
+ * that created this NBFT provided no
+ * administrative priority hint for
+ * this NBFT.
* @NBFT_INFO_PRIMARY_ADMIN_HOST_FLAG_UNSELECTED: Unselected: The driver that created
- * this NBFT explicitly indicated that
- * this NBFT should not be prioritized
- * over any other NBFT.
+ * this NBFT explicitly indicated that
+ * this NBFT should not be prioritized
+ * over any other NBFT.
* @NBFT_INFO_PRIMARY_ADMIN_HOST_FLAG_SELECTED: Selected: The driver that created
- * this NBFT explicitly indicated that
- * this NBFT should be prioritized over
- * any other NBFT.
+ * this NBFT explicitly indicated that
+ * this NBFT should be prioritized over
+ * any other NBFT.
* @NBFT_INFO_PRIMARY_ADMIN_HOST_FLAG_RESERVED: Reserved.
*/
enum nbft_info_primary_admin_host_flag {
@@ -1019,13 +1027,13 @@ enum nbft_info_primary_admin_host_flag {
* @id: Host ID (raw UUID, length = 16 bytes).
* @nqn: Host NQN.
* @host_id_configured: HostID Configured Flag: value of True indicates that @id
- * contains administratively-configured value, or driver
- * default value if False.
+ * contains administratively-configured value, or driver
+ * default value if False.
* @host_nqn_configured: Host NQN Configured Flag: value of True indicates that
- * @nqn contains administratively-configured value,
- * or driver default value if False.
+ * @nqn contains administratively-configured value,
+ * or driver default value if False.
* @primary: Primary Administrative Host Descriptor, see
- * &enum nbft_info_primary_admin_host_flag.
+ * &enum nbft_info_primary_admin_host_flag.
*/
struct nbft_info_host {
unsigned char *id;
@@ -1039,34 +1047,34 @@ struct nbft_info_host {
* struct nbft_info_hfi_info_tcp - HFI Transport Info Descriptor - NVMe/TCP
* @pci_sbdf: PCI Express Routing ID for the HFI Transport Function.
* @mac_addr: MAC Address: The MAC address of this HFI,
- * in EUI-48TM format.
+ * in EUI-48TM format.
* @vlan: The VLAN identifier if the VLAN is associated with
- * this HFI, as defined in IEEE 802.1q-2018 or zeroes
- * if no VLAN is associated with this HFI.
+ * this HFI, as defined in IEEE 802.1q-2018 or zeroes
+ * if no VLAN is associated with this HFI.
* @ip_origin: The source of Ethernet L3 configuration information
- * used by the driver or 0 if not used.
+ * used by the driver or 0 if not used.
* @ipaddr: The IPv4 or IPv6 address of this HFI.
* @subnet_mask_prefix: The IPv4 or IPv6 subnet mask in CIDR routing prefix
- * notation.
+ * notation.
* @gateway_ipaddr: The IPv4 or IPv6 address of the IP gateway for this
- * HFI or zeroes if no IP gateway is specified.
+ * HFI or zeroes if no IP gateway is specified.
* @route_metric: The cost value for the route indicated by this HFI.
* @primary_dns_ipaddr: The IPv4 or IPv6 address of the Primary DNS server
- * for this HFI.
+ * for this HFI.
* @secondary_dns_ipaddr: The IPv4 or IPv6 address of the Secondary DNS server
- * for this HFI.
+ * for this HFI.
* @dhcp_server_ipaddr: The IPv4 or IPv6 address of the DHCP server used
- * to assign this HFI address.
+ * to assign this HFI address.
* @host_name: The Host Name string.
* @this_hfi_is_default_route: If True, then the BIOS utilized this interface
- * described by HFI to be the default route with highest
- * priority. If False, then routes are local to their
- * own scope.
+ * described by HFI to be the default route with highest
+ * priority. If False, then routes are local to their
+ * own scope.
* @dhcp_override: If True, then HFI information was populated
- * by consuming the DHCP on this interface. If False,
- * then the HFI information was set administratively
- * by a configuration interface to the driver and
- * pre-OS envrionment.
+ * by consuming the DHCP on this interface. If False,
+ * then the HFI information was set administratively
+ * by a configuration interface to the driver and
+ * pre-OS envrionment.
*/
struct nbft_info_hfi_info_tcp {
__u32 pci_sbdf;
@@ -1088,7 +1096,7 @@ struct nbft_info_hfi_info_tcp {
/**
* struct nbft_info_hfi - Host Fabric Interface (HFI) Descriptor
* @index: HFI Descriptor Index: indicates the number of this HFI Descriptor
- * in the Host Fabric Interface Descriptor List.
+ * in the Host Fabric Interface Descriptor List.
* @transport: Transport Type string (e.g. 'tcp').
* @tcp_info: The HFI Transport Info Descriptor, see &struct nbft_info_hfi_info_tcp.
*/
@@ -1101,12 +1109,12 @@ struct nbft_info_hfi {
/**
* struct nbft_info_discovery - Discovery Descriptor
* @index: The number of this Discovery Descriptor in the Discovery
- * Descriptor List.
+ * Descriptor List.
* @security: The Security Profile Descriptor, see &struct nbft_info_security.
* @hfi: The HFI Descriptor associated with this Discovery Descriptor.
- * See &struct nbft_info_hfi.
+ * See &struct nbft_info_hfi.
* @uri: A URI which indicates an NVMe Discovery controller associated
- * with this Discovery Descriptor.
+ * with this Discovery Descriptor.
* @nqn: An NVMe Discovery controller NQN.
*/
struct nbft_info_discovery {
@@ -1120,7 +1128,7 @@ struct nbft_info_discovery {
/**
* struct nbft_info_security - Security Profile Descriptor
* @index: The number of this Security Profile Descriptor in the Security
- * Profile Descriptor List.
+ * Profile Descriptor List.
*/
struct nbft_info_security {
int index;
@@ -1143,35 +1151,39 @@ enum nbft_info_nid_type {
/**
* struct nbft_info_subsystem_ns - Subsystem Namespace (SSNS) info
- * @index: SSNS Descriptor Index in the descriptor list.
+ * @index: SSNS Descriptor Index in the descriptor list.
* @discovery: Primary Discovery Controller associated with
- * this SSNS Descriptor.
+ * this SSNS Descriptor.
* @security: Security Profile Descriptor associated with
- * this namespace.
+ * this namespace.
* @num_hfis: Number of HFIs.
* @hfis: List of HFIs associated with this namespace.
- * Includes the primary HFI at the first position
- * and all secondary HFIs. This array is null-terminated.
+ * Includes the primary HFI at the first position
+ * and all secondary HFIs. This array is null-terminated.
* @transport: Transport Type string (e.g. 'tcp').
* @traddr: Subsystem Transport Address.
* @trsvcid: Subsystem Transport Service Identifier.
* @subsys_port_id: The Subsystem Port ID.
* @nsid: The Namespace ID of this descriptor or when @nid
- * should be used instead.
+ * should be used instead.
* @nid_type: Namespace Identifier Type, see &enum nbft_info_nid_type.
* @nid: The Namespace Identifier value.
* @subsys_nqn: Subsystem and Namespace NQN.
* @pdu_header_digest_required: PDU Header Digest (HDGST) Flag: the use of NVM Header
- * Digest Enabled is required.
- * @data_digest_required: Data Digest (DDGST) Flag: the use of NVM Data Digest
- * Enabled is required.
+ * Digest Enabled is required.
+ * @data_digest_required: Data Digest (DDGST) Flag: the use of NVM Data Digest
+ * Enabled is required.
* @controller_id: Controller ID (SSNS Extended Information Descriptor):
- * The controller ID associated with the Admin Queue
- * or 0 if not supported.
+ * The controller ID associated with the Admin Queue
+ * or 0 if not supported.
* @asqsz: Admin Submission Queue Size (SSNS Extended Information
- * Descriptor) or 0 if not supported.
+ * Descriptor) or 0 if not supported.
* @dhcp_root_path_string: DHCP Root Path Override string (SSNS Extended
- * Information Descriptor).
+ * Information Descriptor).
+ * @discovered: Indicates that this namespace was acquired
+ * through discovery.
+ * @unavailable: Namespace is unavailable as indicated by
+ * the pre-OS driver.
*/
struct nbft_info_subsystem_ns {
int index;
@@ -1192,6 +1204,8 @@ struct nbft_info_subsystem_ns {
int controller_id;
int asqsz;
char *dhcp_root_path_string;
+ bool discovered;
+ bool unavailable;
};
/**
diff --git a/src/nvme/private.h b/src/nvme/private.h
index 3505802..dec3d85 100644
--- a/src/nvme/private.h
+++ b/src/nvme/private.h
@@ -17,9 +17,12 @@
#include "mi.h"
-char *nvme_ctrl_sysfs_dir(void);
-char *nvme_subsys_sysfs_dir(void);
-char *nvme_ns_sysfs_dir(void);
+const char *nvme_subsys_sysfs_dir(void);
+const char *nvme_ctrl_sysfs_dir(void);
+const char *nvme_ns_sysfs_dir(void);
+const char *nvme_slots_sysfs_dir(void);
+const char *nvme_uuid_ibm_filename(void);
+const char *nvme_dmi_entries_dir(void);
struct nvme_path {
struct list_node entry;
@@ -83,6 +86,7 @@ struct nvme_ctrl {
char *dhchap_key;
char *dhchap_ctrl_key;
char *cntrltype;
+ char *cntlid;
char *dctype;
char *phy_slot;
bool discovery_ctrl;
@@ -185,6 +189,8 @@ nvme_ctrl_t __nvme_lookup_ctrl(nvme_subsystem_t s, const char *transport,
void *__nvme_alloc(size_t len);
+void *__nvme_realloc(void *p, size_t len);
+
#if (LOG_FUNCNAME == 1)
#define __nvme_log_func __func__
#else
@@ -286,4 +292,7 @@ struct __mi_mctp_socket_ops {
};
void __nvme_mi_mctp_set_ops(const struct __mi_mctp_socket_ops *newops);
+#define SECTOR_SIZE 512
+#define SECTOR_SHIFT 9
+
#endif /* _LIBNVME_PRIVATE_H */
diff --git a/src/nvme/sysfs.c b/src/nvme/sysfs.c
new file mode 100644
index 0000000..ea4f0e2
--- /dev/null
+++ b/src/nvme/sysfs.c
@@ -0,0 +1,86 @@
+// SPDX-License-Identifier: LGPL-2.1-or-later
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "private.h"
+
+#define PATH_UUID_IBM "/proc/device-tree/ibm,partition-uuid"
+#define PATH_SYSFS_BLOCK "/sys/block"
+#define PATH_SYSFS_SLOTS "/sys/bus/pci/slots"
+#define PATH_SYSFS_NVME_SUBSYSTEM "/sys/class/nvme-subsystem"
+#define PATH_SYSFS_NVME "/sys/class/nvme"
+#define PATH_DMI_ENTRIES "/sys/firmware/dmi/entries"
+
+static const char *make_sysfs_dir(const char *path)
+{
+ char *basepath = getenv("LIBNVME_SYSFS_PATH");
+ char *str;
+
+ if (!basepath)
+ return path;
+
+ if (asprintf(&str, "%s%s", basepath, path) < 0)
+ return NULL;
+
+ return str;
+}
+
+const char *nvme_subsys_sysfs_dir(void)
+{
+ static const char *str;
+
+ if (str)
+ return str;
+
+ return str = make_sysfs_dir(PATH_SYSFS_NVME_SUBSYSTEM);
+}
+
+const char *nvme_ctrl_sysfs_dir(void)
+{
+ static const char *str;
+
+ if (str)
+ return str;
+
+ return str = make_sysfs_dir(PATH_SYSFS_NVME);
+}
+
+const char *nvme_ns_sysfs_dir(void)
+{
+ static const char *str;
+
+ if (str)
+ return str;
+
+ return str = make_sysfs_dir(PATH_SYSFS_BLOCK);
+}
+
+const char *nvme_slots_sysfs_dir(void)
+{
+ static const char *str;
+
+ if (str)
+ return str;
+
+ return str = make_sysfs_dir(PATH_SYSFS_SLOTS);
+}
+
+const char *nvme_uuid_ibm_filename(void)
+{
+ static const char *str;
+
+ if (str)
+ return str;
+
+ return str = make_sysfs_dir(PATH_UUID_IBM);
+}
+
+const char *nvme_dmi_entries_dir(void)
+{
+ static const char *str;
+
+ if (str)
+ return str;
+
+ return str = make_sysfs_dir(PATH_DMI_ENTRIES);
+}
diff --git a/src/nvme/tree.c b/src/nvme/tree.c
index 344f8bc..eb9486d 100644
--- a/src/nvme/tree.c
+++ b/src/nvme/tree.c
@@ -61,22 +61,6 @@ struct candidate_args {
};
typedef bool (*ctrl_match_t)(struct nvme_ctrl *c, struct candidate_args *candidate);
-#define PATH_SYSFS_SLOTS "/sys/bus/pci/slots"
-
-static char *nvme_slots_sysfs_dir(void)
-{
- char *basepath = getenv("LIBNVME_SYSFS_PATH");
- char *str;
-
- if (!basepath)
- return strdup(PATH_SYSFS_SLOTS);
-
- if (!asprintf(&str, "%s" PATH_SYSFS_SLOTS, basepath))
- return NULL;
-
- return str;
-}
-
static struct nvme_host *default_host;
static void __nvme_free_host(nvme_host_t h);
@@ -672,10 +656,9 @@ static int nvme_subsystem_scan_namespaces(nvme_root_t r, nvme_subsystem_t s,
static int nvme_init_subsystem(nvme_subsystem_t s, const char *name)
{
- _cleanup_free_ char *subsys_dir = nvme_subsys_sysfs_dir();
char *path;
- if (asprintf(&path, "%s/%s", subsys_dir, name) < 0)
+ if (asprintf(&path, "%s/%s", nvme_subsys_sysfs_dir(), name) < 0)
return -1;
s->model = nvme_get_attr(path, "model");
@@ -716,12 +699,11 @@ static int nvme_scan_subsystem(struct nvme_root *r, const char *name,
{
struct nvme_subsystem *s = NULL, *_s;
_cleanup_free_ char *path = NULL, *subsysnqn = NULL;
- _cleanup_free_ char *subsys_dir = nvme_subsys_sysfs_dir();
nvme_host_t h = NULL;
int ret;
nvme_msg(r, LOG_DEBUG, "scan subsystem %s\n", name);
- ret = asprintf(&path, "%s/%s", subsys_dir, name);
+ ret = asprintf(&path, "%s/%s", nvme_subsys_sysfs_dir(), name);
if (ret < 0)
return ret;
@@ -1026,6 +1008,11 @@ const char *nvme_ctrl_get_dhchap_host_key(nvme_ctrl_t c)
return c->dhchap_key;
}
+const char *nvme_ctrl_get_cntlid(nvme_ctrl_t c)
+{
+ return c->cntlid;
+}
+
void nvme_ctrl_set_dhchap_host_key(nvme_ctrl_t c, const char *key)
{
if (c->dhchap_key) {
@@ -1135,6 +1122,7 @@ void nvme_deconfigure_ctrl(nvme_ctrl_t c)
FREE_CTRL_ATTR(c->address);
FREE_CTRL_ATTR(c->dctype);
FREE_CTRL_ATTR(c->cntrltype);
+ FREE_CTRL_ATTR(c->cntlid);
FREE_CTRL_ATTR(c->phy_slot);
}
@@ -1703,7 +1691,7 @@ static int nvme_ctrl_scan_namespaces(nvme_root_t r, struct nvme_ctrl *c)
static char *nvme_ctrl_lookup_subsystem_name(nvme_root_t r,
const char *ctrl_name)
{
- _cleanup_free_ char *subsys_dir = nvme_subsys_sysfs_dir();
+ const char *subsys_dir = nvme_subsys_sysfs_dir();
_cleanup_dirents_ struct dirents subsys = {};
int i;
@@ -1730,7 +1718,7 @@ static char *nvme_ctrl_lookup_subsystem_name(nvme_root_t r,
static char *nvme_ctrl_lookup_phy_slot(nvme_root_t r, const char *address)
{
- _cleanup_free_ char *slots_sysfs_dir = nvme_slots_sysfs_dir();
+ const char *slots_sysfs_dir = nvme_slots_sysfs_dir();
_cleanup_free_ char *target_addr = NULL;
_cleanup_dir_ DIR *slots_dir = NULL;
int ret;
@@ -1747,7 +1735,7 @@ static char *nvme_ctrl_lookup_phy_slot(nvme_root_t r, const char *address)
}
target_addr = strndup(address, 10);
- while (!(entry = readdir(slots_dir))) {
+ while ((entry = readdir(slots_dir))) {
if (entry->d_type == DT_DIR &&
strncmp(entry->d_name, ".", 1) != 0 &&
strncmp(entry->d_name, "..", 2) != 0) {
@@ -1772,7 +1760,7 @@ static int nvme_configure_ctrl(nvme_root_t r, nvme_ctrl_t c, const char *path,
const char *name)
{
DIR *d;
- char *host_key;
+ char *host_key, *tls_psk;
d = opendir(path);
if (!d) {
@@ -1807,7 +1795,18 @@ static int nvme_configure_ctrl(nvme_root_t r, nvme_ctrl_t c, const char *path,
free(c->dhchap_ctrl_key);
c->dhchap_ctrl_key = NULL;
}
+ tls_psk = nvme_get_ctrl_attr(c, "tls_key");
+ if (tls_psk) {
+ char *endptr;
+ long key_id = strtol(tls_psk, &endptr, 16);
+
+ if (endptr != tls_psk) {
+ c->cfg.tls_key = key_id;
+ c->cfg.tls = true;
+ }
+ }
c->cntrltype = nvme_get_ctrl_attr(c, "cntrltype");
+ c->cntlid = nvme_get_ctrl_attr(c, "cntlid");
c->dctype = nvme_get_ctrl_attr(c, "dctype");
c->phy_slot = nvme_ctrl_lookup_phy_slot(r, c->address);
@@ -1817,7 +1816,6 @@ static int nvme_configure_ctrl(nvme_root_t r, nvme_ctrl_t c, const char *path,
int nvme_init_ctrl(nvme_host_t h, nvme_ctrl_t c, int instance)
{
- _cleanup_free_ char *ctrl_dir = nvme_ctrl_sysfs_dir();
_cleanup_free_ char *subsys_name = NULL;
_cleanup_free_ char *name = NULL;
nvme_subsystem_t s;
@@ -1829,7 +1827,7 @@ int nvme_init_ctrl(nvme_host_t h, nvme_ctrl_t c, int instance)
errno = ENOMEM;
return -1;
}
- ret = asprintf(&path, "%s/nvme%d", ctrl_dir, instance);
+ ret = asprintf(&path, "%s/%s", nvme_ctrl_sysfs_dir(), name);
if (ret < 0) {
errno = ENOMEM;
return ret;
@@ -1872,7 +1870,7 @@ static nvme_ctrl_t nvme_ctrl_alloc(nvme_root_t r, nvme_subsystem_t s,
{
nvme_ctrl_t c, p;
_cleanup_free_ char *addr = NULL, *address = NULL;
- char *a, *e;
+ char *a = NULL, *e = NULL;
_cleanup_free_ char *transport = NULL;
char *traddr = NULL, *trsvcid = NULL;
char *host_traddr = NULL, *host_iface = NULL;
@@ -1973,11 +1971,10 @@ nvme_ctrl_t nvme_scan_ctrl(nvme_root_t r, const char *name)
_cleanup_free_ char *path = NULL;
_cleanup_free_ char *hostnqn = NULL, *hostid = NULL;
_cleanup_free_ char *subsysnqn = NULL, *subsysname = NULL;
- _cleanup_free_ char *ctrl_dir = nvme_ctrl_sysfs_dir();
int ret;
nvme_msg(r, LOG_DEBUG, "scan controller %s\n", name);
- ret = asprintf(&path, "%s/%s", ctrl_dir, name);
+ ret = asprintf(&path, "%s/%s", nvme_ctrl_sysfs_dir(), name);
if (ret < 0) {
errno = ENOMEM;
return NULL;
@@ -2452,12 +2449,13 @@ static int nvme_ns_init(const char *path, struct nvme_ns *ns)
{
_cleanup_free_ char *attr = NULL;
struct stat sb;
+ uint64_t size;
int ret;
struct sysfs_attr_table base[] = {
{ &ns->nsid, nvme_strtou32, true, "nsid" },
- { &ns->lba_count, nvme_strtou64, true, "size" },
- { &ns->lba_size, nvme_strtou64, true, "queue/logical_block_size" },
+ { &size, nvme_strtou64, true, "size" },
+ { &ns->lba_size, nvme_strtou32, true, "queue/logical_block_size" },
{ ns->eui64, nvme_strtoeuid, false, "eui" },
{ ns->nguid, nvme_strtouuid, false, "nguid" },
{ ns->uuid, nvme_strtouuid, false, "uuid" }
@@ -2468,6 +2466,11 @@ static int nvme_ns_init(const char *path, struct nvme_ns *ns)
return ret;
ns->lba_shift = GETSHIFT(ns->lba_size);
+ /*
+ * size is in 512 bytes units and lba_count is in lba_size which are not
+ * necessarily the same.
+ */
+ ns->lba_count = size >> (ns->lba_shift - SECTOR_SHIFT);
if (asprintf(&attr, "%s/csi", path) < 0)
return -errno;
@@ -2485,7 +2488,7 @@ static int nvme_ns_init(const char *path, struct nvme_ns *ns)
if (ret)
return ret;
} else {
- struct nvme_id_ns *id;
+ _cleanup_free_ struct nvme_id_ns *id = NULL;
uint8_t flbas;
id = __nvme_alloc(sizeof(*ns));
@@ -2605,9 +2608,7 @@ static struct nvme_ns *__nvme_scan_namespace(const char *sysfs_dir, const char *
nvme_ns_t nvme_scan_namespace(const char *name)
{
- _cleanup_free_ char *ns_dir = nvme_ns_sysfs_dir();
-
- return __nvme_scan_namespace(ns_dir, name);
+ return __nvme_scan_namespace(nvme_ns_sysfs_dir(), name);
}
static int nvme_ctrl_scan_namespace(nvme_root_t r, struct nvme_ctrl *c,
diff --git a/src/nvme/tree.h b/src/nvme/tree.h
index a30e8eb..5e82579 100644
--- a/src/nvme/tree.h
+++ b/src/nvme/tree.h
@@ -1026,6 +1026,14 @@ const char *nvme_ctrl_get_host_iface(nvme_ctrl_t c);
const char *nvme_ctrl_get_dhchap_host_key(nvme_ctrl_t c);
/**
+ * nvme_ctrl_get_cntlid() - Controller id
+ * @c: Controller to be checked
+ *
+ * Return : Controller id of @c
+ */
+const char *nvme_ctrl_get_cntlid(nvme_ctrl_t c);
+
+/**
* nvme_ctrl_set_dhchap_host_key() - Set host key
* @c: Host for which the key should be set
* @key: DH-HMAC-CHAP Key to set or NULL to clear existing key
diff --git a/src/nvme/types.h b/src/nvme/types.h
index fe79b6e..26e5e25 100644
--- a/src/nvme/types.h
+++ b/src/nvme/types.h
@@ -230,6 +230,50 @@ static inline bool nvme_is_64bit_reg(__u32 offset)
}
}
+/**
+ * enum nvme_cap - This field indicates the controller capabilities register
+ * @NVME_CAP_MQES_SHIFT: Shift amount to get the maximum queue entries supported
+ * @NVME_CAP_CQR_SHIFT: Shift amount to get the contiguous queues required
+ * @NVME_CAP_AMS_SHIFT: Shift amount to get the arbitration mechanism supported
+ * @NVME_CAP_TO_SHIFT: Shift amount to get the timeout
+ * @NVME_CAP_DSTRD_SHIFT: Shift amount to get the doorbell stride
+ * @NVME_CAP_NSSRC_SHIFT: Shift amount to get the NVM subsystem reset supported
+ * @NVME_CAP_CSS_SHIFT: Shift amount to get the command sets supported
+ * @NVME_CAP_BPS_SHIFT: Shift amount to get the boot partition support
+ * @NVME_CAP_CPS_SHIFT: Shift amount to get the controller power scope
+ * @NVME_CAP_MPSMIN_SHIFT: Shift amount to get the memory page size minimum
+ * @NVME_CAP_MPSMAX_SHIFT: Shift amount to get the memory page size maximum
+ * @NVME_CAP_PMRS_SHIFT: Shift amount to get the persistent memory region supported
+ * @NVME_CAP_CMBS_SHIFT: Shift amount to get the controller memory buffer supported
+ * @NVME_CAP_NSSS_SHIFT: Shift amount to get the NVM subsystem shutdown supported
+ * @NVME_CAP_CRMS_SHIFT: Shift amount to get the controller ready modes supported
+ * @NVME_CAP_MQES_MASK: Mask to get the maximum queue entries supported
+ * @NVME_CAP_CQR_MASK: Mask to get the contiguous queues required
+ * @NVME_CAP_AMS_MASK: Mask to get the arbitration mechanism supported
+ * @NVME_CAP_TO_MASK: Mask to get the timeout
+ * @NVME_CAP_DSTRD_MASK: Mask to get the doorbell stride
+ * @NVME_CAP_NSSRC_MASK: Mask to get the NVM subsystem reset supported
+ * @NVME_CAP_CSS_MASK: Mask to get the command sets supported
+ * @NVME_CAP_BPS_MASK: Mask to get the boot partition support
+ * @NVME_CAP_CPS_MASK: Mask to get the controller power scope
+ * @NVME_CAP_MPSMIN_MASK: Mask to get the memory page size minimum
+ * @NVME_CAP_MPSMAX_MASK: Mask to get the memory page size maximum
+ * @NVME_CAP_PMRS_MASK: Mask to get the persistent memory region supported
+ * @NVME_CAP_CMBS_MASK: Mask to get the controller memory buffer supported
+ * @NVME_CAP_NSSS_MASK: Mask to get the NVM subsystem shutdown supported
+ * @NVME_CAP_CRMS_MASK: Mask to get the controller ready modes supported
+ * @NVME_CAP_AMS_WRR: Weighted round robin with urgent priority class
+ * @NVME_CAP_AMS_VS: Vendor specific
+ * @NVME_CAP_CSS_NVM: NVM command set or a discovery controller
+ * @NVME_CAP_CSS_CSI: Controller supports one or more I/O command sets
+ * @NVME_CAP_CSS_ADMIN: No I/O command set is supported
+ * @NVME_CAP_CPS_NONE: Not reported
+ * @NVME_CAP_CPS_CTRL: Controller scope
+ * @NVME_CAP_CPS_DOMAIN: Domain scope
+ * @NVME_CAP_CPS_NVMS: NVM subsystem scope
+ * @NVME_CAP_CRWMS: Controller ready with media support
+ * @NVME_CAP_CRIMS: Controller ready independent of media support
+ */
enum nvme_cap {
NVME_CAP_MQES_SHIFT = 0,
NVME_CAP_CQR_SHIFT = 16,
@@ -239,10 +283,12 @@ enum nvme_cap {
NVME_CAP_NSSRC_SHIFT = 36,
NVME_CAP_CSS_SHIFT = 37,
NVME_CAP_BPS_SHIFT = 45,
+ NVME_CAP_CPS_SHIFT = 46,
NVME_CAP_MPSMIN_SHIFT = 48,
NVME_CAP_MPSMAX_SHIFT = 52,
NVME_CAP_PMRS_SHIFT = 56,
NVME_CAP_CMBS_SHIFT = 57,
+ NVME_CAP_NSSS_SHIFT = 58,
NVME_CAP_CRMS_SHIFT = 59,
NVME_CAP_MQES_MASK = 0xffff,
NVME_CAP_CQR_MASK = 0x1,
@@ -252,16 +298,22 @@ enum nvme_cap {
NVME_CAP_NSSRC_MASK = 0x1,
NVME_CAP_CSS_MASK = 0xff,
NVME_CAP_BPS_MASK = 0x1,
+ NVME_CAP_CPS_MASK = 0x3,
NVME_CAP_MPSMIN_MASK = 0xf,
NVME_CAP_MPSMAX_MASK = 0xf,
NVME_CAP_PMRS_MASK = 0x1,
NVME_CAP_CMBS_MASK = 0x1,
+ NVME_CAP_NSSS_MASK = 0x1,
NVME_CAP_CRMS_MASK = 0x3,
NVME_CAP_AMS_WRR = 1 << 0,
NVME_CAP_AMS_VS = 1 << 1,
NVME_CAP_CSS_NVM = 1 << 0,
NVME_CAP_CSS_CSI = 1 << 6,
NVME_CAP_CSS_ADMIN = 1 << 7,
+ NVME_CAP_CPS_NONE = 0,
+ NVME_CAP_CPS_CTRL = 1,
+ NVME_CAP_CPS_DOMAIN = 2,
+ NVME_CAP_CPS_NVMS = 3,
NVME_CAP_CRWMS = 1 << 0,
NVME_CAP_CRIMS = 1 << 1,
};
@@ -274,12 +326,23 @@ enum nvme_cap {
#define NVME_CAP_NSSRC(cap) NVME_GET(cap, CAP_NSSRC)
#define NVME_CAP_CSS(cap) NVME_GET(cap, CAP_CSS)
#define NVME_CAP_BPS(cap) NVME_GET(cap, CAP_BPS)
+#define NVME_CAP_CPS(cap) NVME_GET(cap, CAP_CPS)
#define NVME_CAP_MPSMIN(cap) NVME_GET(cap, CAP_MPSMIN)
#define NVME_CAP_MPSMAX(cap) NVME_GET(cap, CAP_MPSMAX)
#define NVME_CAP_PMRS(cap) NVME_GET(cap, CAP_PMRS)
#define NVME_CAP_CMBS(cap) NVME_GET(cap, CAP_CMBS)
+#define NVME_CAP_NSSS(cap) NVME_GET(cap, CAP_NSSS)
#define NVME_CAP_CRMS(cap) NVME_GET(cap, CAP_CRMS)
+/**
+ * enum nvme_vs - This field indicates the version
+ * @NVME_VS_TER_SHIFT: Shift amount to get the tertiary version
+ * @NVME_VS_MNR_SHIFT: Shift amount to get the minor version
+ * @NVME_VS_MJR_SHIFT: Shift amount to get the major version
+ * @NVME_VS_TER_MASK: Mask to get the tertiary version
+ * @NVME_VS_MNR_MASK: Mask to get the minor version
+ * @NVME_VS_MJR_MASK: Mask to get the major version
+ */
enum nvme_vs {
NVME_VS_TER_SHIFT = 0,
NVME_VS_MNR_SHIFT = 8,
@@ -297,6 +360,36 @@ enum nvme_vs {
#define NVME_MINOR(ver) NVME_VS_MNR(ver)
#define NVME_TERTIARY(ver) NVME_VS_TER(ver)
+/**
+ * enum nvme_cc - This field indicates the controller configuration
+ * @NVME_CC_EN_SHIFT: Shift amount to get the enable
+ * @NVME_CC_CSS_SHIFT: Shift amount to get the I/O command set selected
+ * @NVME_CC_MPS_SHIFT: Shift amount to get the memory page size
+ * @NVME_CC_AMS_SHIFT: Shift amount to get the arbitration mechanism selected
+ * @NVME_CC_SHN_SHIFT: Shift amount to get the shutdown notification
+ * @NVME_CC_IOSQES_SHIFT: Shift amount to get the I/O submission queue entry size
+ * @NVME_CC_IOCQES_SHIFT: Shift amount to get the I/O completion queue entry size
+ * @NVME_CC_CRIME_SHIFT: Shift amount to get the controller ready independent of media enable
+ * @NVME_CC_EN_MASK: Mask to get the enable
+ * @NVME_CC_CSS_MASK: Mask to get the I/O command set selected
+ * @NVME_CC_MPS_MASK: Mask to get the memory page size
+ * @NVME_CC_AMS_MASK: Mask to get the arbitration mechanism selected
+ * @NVME_CC_SHN_MASK: Mask to get the shutdown notification
+ * @NVME_CC_CRIME_MASK: Mask to get the I/O submission queue entry size
+ * @NVME_CC_IOSQES_MASK: Mask to get the I/O completion queue entry size
+ * @NVME_CC_IOCQES_MASK: Mask to get the controller ready independent of media enable
+ * @NVME_CC_CSS_NVM: NVM command set
+ * @NVME_CC_CSS_CSI: All supported I/O command sets
+ * @NVME_CC_CSS_ADMIN: Admin command set only
+ * @NVME_CC_AMS_RR: Round robin
+ * @NVME_CC_AMS_WRRU: Weighted round robin with urgent priority class
+ * @NVME_CC_AMS_VS: Vendor specific
+ * @NVME_CC_SHN_NONE: No notification; no effect
+ * @NVME_CC_SHN_NORMAL: Normal shutdown notification
+ * @NVME_CC_SHN_ABRUPT: Abrupt shutdown notification
+ * @NVME_CC_CRWME: Controller ready with media enable
+ * @NVME_CC_CRIME: Controller ready independent of media enable
+ */
enum nvme_cc {
NVME_CC_EN_SHIFT = 0,
NVME_CC_CSS_SHIFT = 4,
@@ -336,21 +429,42 @@ enum nvme_cc {
#define NVME_CC_IOCQES(cc) NVME_GET(cc, CC_IOCQES)
#define NVME_CC_CRIME(cc) NVME_GET(cc, CC_CRIME)
+/**
+ * enum nvme_csts - This field indicates the controller status register
+ * @NVME_CSTS_RDY_SHIFT: Shift amount to get the ready
+ * @NVME_CSTS_CFS_SHIFT: Shift amount to get the controller fatal status
+ * @NVME_CSTS_SHST_SHIFT: Shift amount to get the shutdown status
+ * @NVME_CSTS_NSSRO_SHIFT: Shift amount to get the NVM subsystem reset occurred
+ * @NVME_CSTS_PP_SHIFT: Shift amount to get the processing paused
+ * @NVME_CSTS_ST_SHIFT: Shift amount to get the shutdown type
+ * @NVME_CSTS_RDY_MASK: Mask to get the ready
+ * @NVME_CSTS_CFS_MASK: Mask to get the controller fatal status
+ * @NVME_CSTS_SHST_MASK: Mask to get the shutdown status
+ * @NVME_CSTS_NSSRO_MASK: Mask to get the NVM subsystem reset occurred
+ * @NVME_CSTS_PP_MASK: Mask to get the processing paused
+ * @NVME_CSTS_ST_MASK: Mask to get the shutdown type
+ * @NVME_CSTS_SHST_NORMAL: Normal operation
+ * @NVME_CSTS_SHST_OCCUR: Shutdown processing occurring
+ * @NVME_CSTS_SHST_CMPLT: Shutdown processing complete
+ * @NVME_CSTS_SHN_MASK: Deprecated mask to get the shutdown status
+ */
enum nvme_csts {
NVME_CSTS_RDY_SHIFT = 0,
NVME_CSTS_CFS_SHIFT = 1,
NVME_CSTS_SHST_SHIFT = 2,
NVME_CSTS_NSSRO_SHIFT = 4,
NVME_CSTS_PP_SHIFT = 5,
+ NVME_CSTS_ST_SHIFT = 6,
NVME_CSTS_RDY_MASK = 0x1,
NVME_CSTS_CFS_MASK = 0x1,
- NVME_CSTS_SHN_MASK = 0x3,
+ NVME_CSTS_SHST_MASK = 0x3,
NVME_CSTS_NSSRO_MASK = 0x1,
NVME_CSTS_PP_MASK = 0x1,
+ NVME_CSTS_ST_MASK = 0x1,
NVME_CSTS_SHST_NORMAL = 0,
NVME_CSTS_SHST_OCCUR = 1,
NVME_CSTS_SHST_CMPLT = 2,
- NVME_CSTS_SHST_MASK = 3,
+ NVME_CSTS_SHN_MASK = NVME_CSTS_SHST_MASK, /* Deprecated */
};
#define NVME_CSTS_RDY(csts) NVME_GET(csts, CSTS_RDY)
@@ -358,7 +472,15 @@ enum nvme_csts {
#define NVME_CSTS_SHST(csts) NVME_GET(csts, CSTS_SHST)
#define NVME_CSTS_NSSRO(csts) NVME_GET(csts, CSTS_NSSRO)
#define NVME_CSTS_PP(csts) NVME_GET(csts, CSTS_PP)
+#define NVME_CSTS_ST(csts) NVME_GET(csts, CSTS_ST)
+/**
+ * enum nvme_aqa - This field indicates the admin queue attributes
+ * @NVME_AQA_ASQS_SHIFT: Shift amount to get the admin submission queue size
+ * @NVME_AQA_ACQS_SHIFT: Shift amount to get the admin completion queue size
+ * @NVME_AQA_ASQS_MASK: Mask to get the admin submission queue size
+ * @NVME_AQA_ACQS_MASK: Mask to get the admin completion queue size
+ */
enum nvme_aqa {
NVME_AQA_ASQS_SHIFT = 0,
NVME_AQA_ACQS_SHIFT = 16,
@@ -369,6 +491,47 @@ enum nvme_aqa {
#define NVME_AQA_ASQS(aqa) NVME_GET(aqa, AQA_ASQS)
#define NVME_AQA_ACQS(aqa) NVME_GET(aqa, AQA_ACQS)
+/**
+ * enum nvme_asq - This field indicates the admin submission queue base address
+ * @NVME_ASQ_ASQB_SHIFT: Shift amount to get the admin submission queue base
+ */
+enum nvme_asq {
+ NVME_ASQ_ASQB_SHIFT = 12,
+};
+static const __u64 NVME_ASQ_ASQB_MASK = 0xfffffffffffffull;
+
+#define NVME_ASQ_ASQB(asq) NVME_GET(asq, ASQ_ASQB)
+
+/**
+ * enum nvme_acq - This field indicates the admin completion queue base address
+ * @NVME_ACQ_ACQB_SHIFT: Shift amount to get the admin completion queue base
+ */
+enum nvme_acq {
+ NVME_ACQ_ACQB_SHIFT = 12,
+};
+static const __u64 NVME_ACQ_ACQB_MASK = 0xfffffffffffffull;
+
+#define NVME_ACQ_ACQB(acq) NVME_GET(acq, ACQ_ACQB)
+
+/**
+ * enum nvme_cmbloc - This field indicates the controller memory buffer location
+ * @NVME_CMBLOC_BIR_SHIFT: Shift amount to get the base indicator register
+ * @NVME_CMBLOC_CQMMS_SHIFT: Shift amount to get the CMB queue mixed memory support
+ * @NVME_CMBLOC_CQPDS_SHIFT: Shift amount to get the CMB queue physically discontiguous support
+ * @NVME_CMBLOC_CDPLMS_SHIFT: Shift amount to get the CMB data pointer mixed locations support
+ * @NVME_CMBLOC_CDPCILS_SHIFT: Shift amount to get the CMB data pointer and command independent locations support
+ * @NVME_CMBLOC_CDMMMS_SHIFT: Shift amount to get the CMB data metadata mixed memory support
+ * @NVME_CMBLOC_CQDA_SHIFT: Shift amount to get the CMB queue dword alignment
+ * @NVME_CMBLOC_OFST_SHIFT: Shift amount to get the offset
+ * @NVME_CMBLOC_BIR_MASK: Mask to get the base indicator register
+ * @NVME_CMBLOC_CQMMS_MASK: Mask to get the CMB queue mixed memory support
+ * @NVME_CMBLOC_CQPDS_MASK: Mask to get the CMB queue physically discontiguous support
+ * @NVME_CMBLOC_CDPLMS_MASK: Mask to get the CMB data pointer mixed locations support
+ * @NVME_CMBLOC_CDPCILS_MASK: Mask to get the CMB data pointer and command independent locations support
+ * @NVME_CMBLOC_CDMMMS_MASK: Mask to get the CMB data metadata mixed memory support
+ * @NVME_CMBLOC_CQDA_MASK: Mask to get the CMB queue dword alignment
+ * @NVME_CMBLOC_OFST_MASK: Mask to get the offset
+ */
enum nvme_cmbloc {
NVME_CMBLOC_BIR_SHIFT = 0,
NVME_CMBLOC_CQMMS_SHIFT = 3,
@@ -397,6 +560,30 @@ enum nvme_cmbloc {
#define NVME_CMBLOC_CQDA(cmbloc) NVME_GET(cmbloc, CMBLOC_CQDA)
#define NVME_CMBLOC_OFST(cmbloc) NVME_GET(cmbloc, CMBLOC_OFST)
+/**
+ * enum nvme_cmbsz - This field indicates the controller memory buffer size
+ * @NVME_CMBSZ_SQS_SHIFT: Shift amount to get the submission queue support
+ * @NVME_CMBSZ_CQS_SHIFT: Shift amount to get the completion queue support
+ * @NVME_CMBSZ_LISTS_SHIFT: Shift amount to get the PLP SGL list support
+ * @NVME_CMBSZ_RDS_SHIFT: Shift amount to get the read data support
+ * @NVME_CMBSZ_WDS_SHIFT: Shift amount to get the write data support
+ * @NVME_CMBSZ_SZU_SHIFT: Shift amount to get the size units
+ * @NVME_CMBSZ_SZ_SHIFT: Shift amount to get the size
+ * @NVME_CMBSZ_SQS_MASK: Mask to get the submission queue support
+ * @NVME_CMBSZ_CQS_MASK: Mask to get the completion queue support
+ * @NVME_CMBSZ_LISTS_MASK: Mask to get the PLP SGL list support
+ * @NVME_CMBSZ_RDS_MASK: Mask to get the read data support
+ * @NVME_CMBSZ_WDS_MASK: Mask to get the write data support
+ * @NVME_CMBSZ_SZU_MASK: Mask to get the size units
+ * @NVME_CMBSZ_SZ_MASK: Mask to get the size
+ * @NVME_CMBSZ_SZU_4K: 4 KiB
+ * @NVME_CMBSZ_SZU_64K: 64 KiB
+ * @NVME_CMBSZ_SZU_1M: 1 MiB
+ * @NVME_CMBSZ_SZU_16M: 16 MiB
+ * @NVME_CMBSZ_SZU_256M: 256 MiB
+ * @NVME_CMBSZ_SZU_4G: 4 GiB
+ * @NVME_CMBSZ_SZU_64G: 64 GiB
+ */
enum nvme_cmbsz {
NVME_CMBSZ_SQS_SHIFT = 0,
NVME_CMBSZ_CQS_SHIFT = 1,
@@ -441,6 +628,19 @@ static inline __u64 nvme_cmb_size(__u32 cmbsz)
(1ULL << (12 + 4 * NVME_CMBSZ_SZU(cmbsz)));
}
+/**
+ * enum nvme_bpinfo - This field indicates the boot partition information
+ * @NVME_BPINFO_BPSZ_SHIFT: Shift amount to get the boot partition size
+ * @NVME_BPINFO_BRS_SHIFT: Shift amount to get the boot read status
+ * @NVME_BPINFO_ABPID_SHIFT: Shift amount to get the active boot partition ID
+ * @NVME_BPINFO_BPSZ_MASK: Mask to get the boot partition size
+ * @NVME_BPINFO_BRS_MASK: Mask to get the boot read status
+ * @NVME_BPINFO_ABPID_MASK: Mask to get the active boot partition ID
+ * @NVME_BPINFO_BRS_NONE: No boot partition read operation requested
+ * @NVME_BPINFO_BRS_READ_IN_PROGRESS: Boot partition read in progress
+ * @NVME_BPINFO_BRS_READ_SUCCESS: Boot partition read completed successfully
+ * @NVME_BPINFO_BRS_READ_ERROR: Error completing boot partition read
+ */
enum nvme_bpinfo {
NVME_BPINFO_BPSZ_SHIFT = 0,
NVME_BPINFO_BRS_SHIFT = 24,
@@ -458,12 +658,21 @@ enum nvme_bpinfo {
#define NVME_BPINFO_BRS(bpinfo) NVME_GET(bpinfo, BPINFO_BRS)
#define NVME_BPINFO_ABPID(bpinfo) NVME_GET(bpinfo, BPINFO_ABPID)
+/**
+ * enum nvme_bprsel - This field indicates the boot partition read select
+ * @NVME_BPRSEL_BPRSZ_SHIFT: Shift amount to get the boot partition read size
+ * @NVME_BPRSEL_BPROF_SHIFT: Shift amount to get the boot partition read offset
+ * @NVME_BPRSEL_BPID_SHIFT: Shift amount to get the boot partition identifier
+ * @NVME_BPRSEL_BPRSZ_MASK: Mask to get the boot partition read size
+ * @NVME_BPRSEL_BPROF_MASK: Mask to get the boot partition read offset
+ * @NVME_BPRSEL_BPID_MASK: Mask to get the boot partition identifier
+ */
enum nvme_bprsel {
NVME_BPRSEL_BPRSZ_SHIFT = 0,
NVME_BPRSEL_BPROF_SHIFT = 10,
NVME_BPRSEL_BPID_SHIFT = 31,
NVME_BPRSEL_BPRSZ_MASK = 0x3ff,
- NVME_BPRSEL_BPROF_MASK = 0xfff,
+ NVME_BPRSEL_BPROF_MASK = 0xfffff,
NVME_BPRSEL_BPID_MASK = 0x1,
};
@@ -471,6 +680,25 @@ enum nvme_bprsel {
#define NVME_BPRSEL_BPROF(bprsel) NVME_GET(bprsel, BPRSEL_BPROF)
#define NVME_BPRSEL_BPID(bprsel) NVME_GET(bprsel, BPRSEL_BPID)
+/**
+ * enum nvme_bpmbl - This field indicates the boot partition memory buffer location
+ * @NVME_BPMBL_BMBBA_SHIFT: Shift amount to get the boot partition memory buffer base address
+ */
+enum nvme_bpmbl {
+ NVME_BPMBL_BMBBA_SHIFT = 12,
+};
+static const __u64 NVME_BPMBL_BMBBA_MASK = 0xfffffffffffffull;
+
+#define NVME_BPMBL_BMBBA(bpmbl) NVME_GET(bpmbl, BPMBL_BMBBA)
+
+/**
+ * enum nvme_cmbmsc - This field indicates the controller memory buffer memory space control
+ * @NVME_CMBMSC_CRE_SHIFT: Shift amount to get the capabilities registers enabled
+ * @NVME_CMBMSC_CMSE_SHIFT: Shift amount to get the controller memory space enable
+ * @NVME_CMBMSC_CBA_SHIFT: Shift amount to get the controller base address
+ * @NVME_CMBMSC_CRE_MASK: Mask to get the capabilities registers enabled
+ * @NVME_CMBMSC_CMSE_MASK: Mask to get the controller memory space enable
+ */
enum nvme_cmbmsc {
NVME_CMBMSC_CRE_SHIFT = 0,
NVME_CMBMSC_CMSE_SHIFT = 1,
@@ -484,6 +712,11 @@ static const __u64 NVME_CMBMSC_CBA_MASK = 0xfffffffffffffull;
#define NVME_CMBMSC_CMSE(cmbmsc) NVME_GET(cmbmsc, CMBMSC_CMSE)
#define NVME_CMBMSC_CBA(cmbmsc) NVME_GET(cmbmsc, CMBMSC_CBA)
+/**
+ * enum nvme_cmbsts - This field indicates the controller memory buffer status
+ * @NVME_CMBSTS_CBAI_SHIFT: Shift amount to get the controller base address invalid
+ * @NVME_CMBSTS_CBAI_MASK: Mask to get the controller base address invalid
+ */
enum nvme_cmbsts {
NVME_CMBSTS_CBAI_SHIFT = 0,
NVME_CMBSTS_CBAI_MASK = 0x1,
@@ -491,31 +724,130 @@ enum nvme_cmbsts {
#define NVME_CMBSTS_CBAI(cmbsts) NVME_GET(cmbsts, CMBSTS_CBAI)
+/**
+ * enum nvme_unit - Defined buffer size and write throughput granularity units
+ * @NVME_UNIT_B: Bytes or Bytes/second
+ * @NVME_UNIT_1K: 1 KiB or 1 KiB/second
+ * @NVME_UNIT_1M: 1 MiB or 1 MiB/second
+ * @NVME_UNIT_1G: 1 GiB or 1 GiB/second
+ */
+enum nvme_unit {
+ NVME_UNIT_B = 0,
+ NVME_UNIT_1K = 1,
+ NVME_UNIT_1M = 2,
+ NVME_UNIT_1G = 3,
+};
+
+/**
+ * enum nvme_cmbebs - This field indicates the controller memory buffer elasticity buffer size
+ * @NVME_CMBEBS_CMBSZU_SHIFT: Shift amount to get the CMB elasticity buffer size units
+ * @NVME_CMBEBS_RBB_SHIFT: Shift amount to get the read bypass behavior
+ * @NVME_CMBEBS_CMBWBZ_SHIFT: Shift amount to get the CMB elasiticity buffer size base
+ * @NVME_CMBEBS_CMBSZU_MASK: Mask to get the CMB elasticity buffer size units
+ * @NVME_CMBEBS_RBB_MASK: Mask to get the read bypass behavior
+ * @NVME_CMBEBS_CMBWBZ_MASK: Mask to get the CMB elasiticity buffer size base
+ * @NVME_CMBEBS_CMBSZU_B: Bytes granularity
+ * @NVME_CMBEBS_CMBSZU_1K: 1 KiB granularity
+ * @NVME_CMBEBS_CMBSZU_1M: 1 MiB granularity
+ * @NVME_CMBEBS_CMBSZU_1G: 1 GiB granularity
+ */
+enum nvme_cmbebs {
+ NVME_CMBEBS_CMBSZU_SHIFT = 0,
+ NVME_CMBEBS_RBB_SHIFT = 4,
+ NVME_CMBEBS_CMBWBZ_SHIFT = 8,
+ NVME_CMBEBS_CMBSZU_MASK = 0xf,
+ NVME_CMBEBS_RBB_MASK = 0x1,
+ NVME_CMBEBS_CMBWBZ_MASK = 0xffffff,
+ NVME_CMBEBS_CMBSZU_B = NVME_UNIT_B,
+ NVME_CMBEBS_CMBSZU_1K = NVME_UNIT_1K,
+ NVME_CMBEBS_CMBSZU_1M = NVME_UNIT_1M,
+ NVME_CMBEBS_CMBSZU_1G = NVME_UNIT_1G,
+};
+
+#define NVME_CMBEBS_CMBSZU(cmbebs) NVME_GET(cmbebs, CMBEBS_CMBSZU)
+#define NVME_CMBEBS_RBB(cmbebs) NVME_GET(cmbebs, CMBEBS_RBB)
+#define NVME_CMBEBS_CMBWBZ(cmbebs) NVME_GET(cmbebs, CMBEBS_CMBWBZ)
+
+/**
+ * enum nvme_cmbswtp - This field indicates the controller memory buffer sustained write throughput
+ * @NVME_CMBSWTP_CMBSWTU_SHIFT: Shift amount to get the CMB sustained write throughput units
+ * @NVME_CMBSWTP_CMBSWTV_SHIFT: Shift amount to get the CMB sustained write throughput
+ * @NVME_CMBSWTP_CMBSWTU_MASK: Mask to get the CMB sustained write throughput units
+ * @NVME_CMBSWTP_CMBSWTV_MASK: Mask to get the CMB sustained write throughput
+ * @NVME_CMBSWTP_CMBSWTU_B: Bytes/second granularity
+ * @NVME_CMBSWTP_CMBSWTU_1K: 1 KiB/second granularity
+ * @NVME_CMBSWTP_CMBSWTU_1M: 1 MiB/second granularity
+ * @NVME_CMBSWTP_CMBSWTU_1G: 1 GiB/second granularity
+ */
+enum nvme_cmbswtp {
+ NVME_CMBSWTP_CMBSWTU_SHIFT = 0,
+ NVME_CMBSWTP_CMBSWTV_SHIFT = 8,
+ NVME_CMBSWTP_CMBSWTU_MASK = 0xf,
+ NVME_CMBSWTP_CMBSWTV_MASK = 0xffffff,
+ NVME_CMBSWTP_CMBSWTU_B = NVME_UNIT_B,
+ NVME_CMBSWTP_CMBSWTU_1K = NVME_UNIT_1K,
+ NVME_CMBSWTP_CMBSWTU_1M = NVME_UNIT_1M,
+ NVME_CMBSWTP_CMBSWTU_1G = NVME_UNIT_1G,
+};
+
+#define NVME_CMBSWTP_CMBSWTU(cmbswtp) NVME_GET(cmbswtp, CMBSWTP_CMBSWTU)
+#define NVME_CMBSWTP_CMBSWTV(cmbswtp) NVME_GET(cmbswtp, CMBSWTP_CMBSWTV)
+
+/**
+ * enum nvme_crto - This field indicates the controller ready timeouts
+ * @NVME_CRTO_CRWMT_SHIFT: Shift amount to get the controller ready with media timeout
+ * @NVME_CRTO_CRIMT_SHIFT: Shift amount to get the controller ready independent of media timeout
+ * @NVME_CRTO_CRWMT_MASK: Mask to get the controller ready with media timeout
+ * @NVME_CRTO_CRIMT_MASK: Mask to get the controller ready independent of media timeout
+ */
enum nvme_crto {
- NVME_CRTO_CRIMT_SHIFT = 16,
- NVME_CRTO_CRIMT_MASK = 0xffff0000,
NVME_CRTO_CRWMT_SHIFT = 0,
- NVME_CRTO_CRWMT_MASK = 0x0000ffff,
+ NVME_CRTO_CRIMT_SHIFT = 16,
+ NVME_CRTO_CRWMT_MASK = 0xffff,
+ NVME_CRTO_CRIMT_MASK = 0xffff,
};
#define NVME_CRTO_CRIMT(crto) NVME_GET(crto, CRTO_CRIMT)
#define NVME_CRTO_CRWMT(crto) NVME_GET(crto, CRTO_CRWMT)
+/**
+ * enum nvme_pmrcap - This field indicates the persistent memory region capabilities
+ * @NVME_PMRCAP_RDS_SHIFT: Shift amount to get the read data support
+ * @NVME_PMRCAP_WDS_SHIFT: Shift amount to get the write data support
+ * @NVME_PMRCAP_BIR_SHIFT: Shift amount to get the base indicator register
+ * @NVME_PMRCAP_PMRTU_SHIFT: Shift amount to get the persistent memory region time units
+ * @NVME_PMRCAP_PMRWBM_SHIFT: Shift amount to get the persistent memory region write barrier mechanisms
+ * @NVME_PMRCAP_PMRTO_SHIFT: Shift amount to get the persistent memory region timeout
+ * @NVME_PMRCAP_CMSS_SHIFT: Shift amount to get the controller memory space supported
+ * @NVME_PMRCAP_PMRWMB_SHIFT: Deprecated shift amount to get the persistent memory region write barrier mechanisms
+ * @NVME_PMRCAP_RDS_MASK: Mask to get the read data support
+ * @NVME_PMRCAP_WDS_MASK: Mask to get the write data support
+ * @NVME_PMRCAP_BIR_MASK: Mask to get the base indicator register
+ * @NVME_PMRCAP_PMRTU_MASK: Mask to get the persistent memory region time units
+ * @NVME_PMRCAP_PMRWBM_MASK: Mask to get the persistent memory region write barrier mechanisms
+ * @NVME_PMRCAP_PMRTO_MASK: Mask to get the persistent memory region timeout
+ * @NVME_PMRCAP_CMSS_MASK: Mask to get the controller memory space supported
+ * @NVME_PMRCAP_PMRWMB_MASK: Deprecated mask to get the persistent memory region write barrier mechanisms
+ * @NVME_PMRCAP_PMRTU_500MS: 500 milliseconds
+ * @NVME_PMRCAP_PMRTU_60S: minutes
+ */
enum nvme_pmrcap {
NVME_PMRCAP_RDS_SHIFT = 3,
NVME_PMRCAP_WDS_SHIFT = 4,
NVME_PMRCAP_BIR_SHIFT = 5,
NVME_PMRCAP_PMRTU_SHIFT = 8,
- NVME_PMRCAP_PMRWMB_SHIFT = 10,
+ NVME_PMRCAP_PMRWBM_SHIFT = 10,
NVME_PMRCAP_PMRTO_SHIFT = 16,
NVME_PMRCAP_CMSS_SHIFT = 24,
+ NVME_PMRCAP_PMRWMB_SHIFT = NVME_PMRCAP_PMRWBM_SHIFT, /* Deprecated */
NVME_PMRCAP_RDS_MASK = 0x1,
NVME_PMRCAP_WDS_MASK = 0x1,
NVME_PMRCAP_BIR_MASK = 0x7,
NVME_PMRCAP_PMRTU_MASK = 0x3,
- NVME_PMRCAP_PMRWMB_MASK = 0xf,
+ NVME_PMRCAP_PMRWBM_MASK = 0xf,
NVME_PMRCAP_PMRTO_MASK = 0xff,
NVME_PMRCAP_CMSS_MASK = 0x1,
+ NVME_PMRCAP_PMRWMB_MASK = NVME_PMRCAP_PMRWBM_MASK, /* Deprecated */
NVME_PMRCAP_PMRTU_500MS = 0,
NVME_PMRCAP_PMRTU_60S = 1,
};
@@ -524,10 +856,16 @@ enum nvme_pmrcap {
#define NVME_PMRCAP_WDS(pmrcap) NVME_GET(pmrcap, PMRCAP_WDS)
#define NVME_PMRCAP_BIR(pmrcap) NVME_GET(pmrcap, PMRCAP_BIR)
#define NVME_PMRCAP_PMRTU(pmrcap) NVME_GET(pmrcap, PMRCAP_PMRTU)
-#define NVME_PMRCAP_PMRWMB(pmrcap) NVME_GET(pmrcap, PMRCAP_PMRWMB)
+#define NVME_PMRCAP_PMRWBM(pmrcap) NVME_GET(pmrcap, PMRCAP_PMRWBM)
#define NVME_PMRCAP_PMRTO(pmrcap) NVME_GET(pmrcap, PMRCAP_PMRTO)
#define NVME_PMRCAP_CMSS(pmrcap) NVME_GET(pmrcap, PMRCAP_CMSS)
+#define NVME_PMRCAP_PMRWMB(pmrcap) NVME_GET(pmrcap, PMRCAP_PMRWMB) /* Deprecated */
+/**
+ * enum nvme_pmrctl - This field indicates the persistent memory region control
+ * @NVME_PMRCTL_EN_SHIFT: Shift amount to get the enable
+ * @NVME_PMRCTL_EN_MASK: Mask to get the enable
+ */
enum nvme_pmrctl {
NVME_PMRCTL_EN_SHIFT = 0,
NVME_PMRCTL_EN_MASK = 0x1,
@@ -535,6 +873,17 @@ enum nvme_pmrctl {
#define NVME_PMRCTL_EN(pmrctl) NVME_GET(pmrctl, PMRCTL_EN)
+/**
+ * enum nvme_pmrsts - This field indicates the persistent memory region status
+ * @NVME_PMRSTS_ERR_SHIFT: Shift amount to get the error
+ * @NVME_PMRSTS_NRDY_SHIFT: Shift amount to get the not ready
+ * @NVME_PMRSTS_HSTS_SHIFT: Shift amount to get the health status
+ * @NVME_PMRSTS_CBAI_SHIFT: Shift amount to get the controller base address invalid
+ * @NVME_PMRSTS_ERR_MASK: Mask to get the error
+ * @NVME_PMRSTS_NRDY_MASK: Mask to get the not ready
+ * @NVME_PMRSTS_HSTS_MASK: Mask to get the health status
+ * @NVME_PMRSTS_CBAI_MASK: Mask to get the controller base address invalid
+ */
enum nvme_pmrsts {
NVME_PMRSTS_ERR_SHIFT = 0,
NVME_PMRSTS_NRDY_SHIFT = 8,
@@ -551,6 +900,19 @@ enum nvme_pmrsts {
#define NVME_PMRSTS_HSTS(pmrsts) NVME_GET(pmrsts, PMRSTS_HSTS)
#define NVME_PMRSTS_CBAI(pmrsts) NVME_GET(pmrsts, PMRSTS_CBAI)
+/**
+ * enum nvme_pmrebs - This field indicates the persistent memory region elasticity buffer size
+ * @NVME_PMREBS_PMRSZU_SHIFT: Shift amount to get the PMR elasticity buffer size units
+ * @NVME_PMREBS_RBB_SHIFT: Shift amount to get the read bypass behavior
+ * @NVME_PMREBS_PMRWBZ_SHIFT: Shift amount to get the PMR elasticity buffer size base
+ * @NVME_PMREBS_PMRSZU_MASK: Mask to get the PMR elasticity buffer size units
+ * @NVME_PMREBS_RBB_MASK: Mask to get the read bypass behavior
+ * @NVME_PMREBS_PMRWBZ_MASK: Mask to get the PMR elasticity buffer size base
+ * @NVME_PMREBS_PMRSZU_B: Bytes
+ * @NVME_PMREBS_PMRSZU_1K: 1 KiB
+ * @NVME_PMREBS_PMRSZU_1M: 1 MiB
+ * @NVME_PMREBS_PMRSZU_1G: 1 GiB
+ */
enum nvme_pmrebs {
NVME_PMREBS_PMRSZU_SHIFT = 0,
NVME_PMREBS_RBB_SHIFT = 4,
@@ -558,10 +920,10 @@ enum nvme_pmrebs {
NVME_PMREBS_PMRSZU_MASK = 0xf,
NVME_PMREBS_RBB_MASK = 0x1,
NVME_PMREBS_PMRWBZ_MASK = 0xffffff,
- NVME_PMREBS_PMRSZU_B = 0,
- NVME_PMREBS_PMRSZU_1K = 1,
- NVME_PMREBS_PMRSZU_1M = 2,
- NVME_PMREBS_PMRSZU_1G = 3,
+ NVME_PMREBS_PMRSZU_B = NVME_UNIT_B,
+ NVME_PMREBS_PMRSZU_1K = NVME_UNIT_1K,
+ NVME_PMREBS_PMRSZU_1M = NVME_UNIT_1M,
+ NVME_PMREBS_PMRSZU_1G = NVME_UNIT_1G,
};
#define NVME_PMREBS_PMRSZU(pmrebs) NVME_GET(pmrebs, PMREBS_PMRSZU)
@@ -581,15 +943,26 @@ static inline __u64 nvme_pmr_size(__u32 pmrebs)
(1ULL << (10 * NVME_PMREBS_PMRSZU(pmrebs)));
}
+/**
+ * enum nvme_pmrswtp - This field indicates the persistent memory region sustained write throughput
+ * @NVME_PMRSWTP_PMRSWTU_SHIFT: Shift amount to get the PMR sustained write throughput units
+ * @NVME_PMRSWTP_PMRSWTV_SHIFT: Shift amount to get the PMR sustained write throughput
+ * @NVME_PMRSWTP_PMRSWTU_MASK: Mask to get the PMR sustained write throughput units
+ * @NVME_PMRSWTP_PMRSWTV_MASK: Mask to get the PMR sustained write throughput
+ * @NVME_PMRSWTP_PMRSWTU_BPS: Bytes per second
+ * @NVME_PMRSWTP_PMRSWTU_KBPS: 1 KiB / s
+ * @NVME_PMRSWTP_PMRSWTU_MBPS: 1 MiB / s
+ * @NVME_PMRSWTP_PMRSWTU_GBPS: 1 GiB / s
+ */
enum nvme_pmrswtp {
NVME_PMRSWTP_PMRSWTU_SHIFT = 0,
NVME_PMRSWTP_PMRSWTV_SHIFT = 8,
NVME_PMRSWTP_PMRSWTU_MASK = 0xf,
NVME_PMRSWTP_PMRSWTV_MASK = 0xffffff,
- NVME_PMRSWTP_PMRSWTU_BPS = 0,
- NVME_PMRSWTP_PMRSWTU_KBPS = 1,
- NVME_PMRSWTP_PMRSWTU_MBPS = 2,
- NVME_PMRSWTP_PMRSWTU_GBPS = 3,
+ NVME_PMRSWTP_PMRSWTU_BPS = NVME_UNIT_B,
+ NVME_PMRSWTP_PMRSWTU_KBPS = NVME_UNIT_1K,
+ NVME_PMRSWTP_PMRSWTU_MBPS = NVME_UNIT_1M,
+ NVME_PMRSWTP_PMRSWTU_GBPS = NVME_UNIT_1G,
};
#define NVME_PMRSWTP_PMRSWTU(pmrswtp) NVME_GET(pmrswtp, PMRSWTP_PMRSWTU)
@@ -607,6 +980,12 @@ static inline __u64 nvme_pmr_throughput(__u32 pmrswtp)
(1ULL << (10 * NVME_PMRSWTP_PMRSWTU(pmrswtp)));
}
+/**
+ * enum nvme_pmrmsc - This field indicates the persistent memory region memory space control
+ * @NVME_PMRMSC_CMSE_SHIFT: Shift amount to get the controller memory space enable
+ * @NVME_PMRMSC_CBA_SHIFT: Shift amount to get the controller base address
+ * @NVME_PMRMSC_CMSE_MASK: Mask to get the controller memory space enable
+ */
enum nvme_pmrmsc {
NVME_PMRMSC_CMSE_SHIFT = 1,
NVME_PMRMSC_CBA_SHIFT = 12,
@@ -617,6 +996,15 @@ static const __u64 NVME_PMRMSC_CBA_MASK = 0xfffffffffffffull;
#define NVME_PMRMSC_CMSE(pmrmsc) NVME_GET(pmrmsc, PMRMSC_CMSE)
#define NVME_PMRMSC_CBA(pmrmsc) NVME_GET(pmrmsc, PMRMSC_CBA)
+/**
+ * enum nvme_flbas - This field indicates the formatted LBA size
+ * @NVME_FLBAS_LOWER_SHIFT: Shift amount to get the format index least significant 4 bits
+ * @NVME_FLBAS_META_EXT_SHIFT: Shift amount to get the metadata transferred
+ * @NVME_FLBAS_HIGHER_SHIFT: Shift amount to get the format index most significant 2 bits
+ * @NVME_FLBAS_LOWER_MASK: Mask to get the format index least significant 4 bits
+ * @NVME_FLBAS_META_EXT_MASK: Mask to get the metadata transferred
+ * @NVME_FLBAS_HIGHER_MASK: Mask to get the format index most significant 2 bits
+ */
enum nvme_flbas {
NVME_FLBAS_LOWER_SHIFT = 0,
NVME_FLBAS_META_EXT_SHIFT = 4,
@@ -1077,6 +1465,38 @@ struct nvme_id_ctrl {
};
/**
+ * enum nvme_cmic - This field indicates the controller multi-path I/O and NS sharing capabilities
+ * @NVME_CMIC_MULTI_PORT_SHIFT: Shift amount to get the NVM subsystem port
+ * @NVME_CMIC_MULTI_CTRL_SHIFT: Shift amount to get the controllers
+ * @NVME_CMIC_MULTI_SRIOV_SHIFT: Shift amount to get the SR-IOV virtual function
+ * @NVME_CMIC_MULTI_ANA_SHIFT: Shift amount to get the asymmetric namespace access reporting
+ * @NVME_CMIC_MULTI_RSVD_SHIFT: Shift amount to get the reserved
+ * @NVME_CMIC_MULTI_PORT_MASK: Mask to get the NVM subsystem port
+ * @NVME_CMIC_MULTI_CTRL_MASK: Mask to get the controllers
+ * @NVME_CMIC_MULTI_SRIOV_MASK: Mask to get the SR-IOV virtual function
+ * @NVME_CMIC_MULTI_ANA_MASK: Mask to get the asymmetric namespace access reporting
+ * @NVME_CMIC_MULTI_RSVD_MASK: Mask to get the reserved
+ */
+enum nvme_cmic {
+ NVME_CMIC_MULTI_PORT_SHIFT = 0,
+ NVME_CMIC_MULTI_CTRL_SHIFT = 1,
+ NVME_CMIC_MULTI_SRIOV_SHIFT = 2,
+ NVME_CMIC_MULTI_ANA_SHIFT = 3,
+ NVME_CMIC_MULTI_RSVD_SHIFT = 4,
+ NVME_CMIC_MULTI_PORT_MASK = 0x1,
+ NVME_CMIC_MULTI_CTRL_MASK = 0x1,
+ NVME_CMIC_MULTI_SRIOV_MASK = 0x1,
+ NVME_CMIC_MULTI_ANA_MASK = 0x1,
+ NVME_CMIC_MULTI_RSVD_MASK = 0xf,
+};
+
+#define NVME_CMIC_MULTI_PORT(cmic) NVME_GET(cmic, CMIC_MULTI_PORT)
+#define NVME_CMIC_MULTI_CTRL(cmic) NVME_GET(cmic, CMIC_MULTI_CTRL)
+#define NVME_CMIC_MULTI_SRIOV(cmic) NVME_GET(cmic, CMIC_MULTI_SRIOV)
+#define NVME_CMIC_MULTI_ANA(cmic) NVME_GET(cmic, CMIC_MULTI_ANA)
+#define NVME_CMIC_MULTI_RSVD(cmic) NVME_GET(cmic, CMIC_MULTI_RSVD)
+
+/**
* enum nvme_id_ctrl_cmic - Controller Multipath IO and Namespace Sharing
* Capabilities of the controller and NVM subsystem.
* @NVME_CTRL_CMIC_MULTI_PORT: If set, then the NVM subsystem may contain
@@ -3340,6 +3760,53 @@ struct nvme_persistent_event_log {
} __attribute__((packed));
/**
+ * enum nvme_pel_rci - This field indicates the persistent event log reporting context
+ * @NVME_PEL_RCI_RCPID_SHIFT: Shift amount to get the reporting context port identifier
+ * from the &struct nvme_persistent_event_log.rci field.
+ * @NVME_PEL_RCI_RCPIT_SHIFT: Shift amount to get the reporting context port identifier
+ * type from the &struct nvme_persistent_event_log.rci field.
+ * @NVME_PEL_RCI_RCE_SHIFT: Shift amount to get the reporting context exists
+ * from the &struct nvme_persistent_event_log.rci field.
+ * @NVME_PEL_RCI_RSVD_SHIFT: Shift amount to get the reserved reporting context
+ * from the &struct nvme_persistent_event_log.rci field.
+ * @NVME_PEL_RCI_RCPID_MASK: Mask to get the reporting context port identifier from
+ * the &struct nvme_persistent_event_log.rci field.
+ * @NVME_PEL_RCI_RCPIT_MASK: Mask to get the reporting context port identifier type from
+ * the &struct nvme_persistent_event_log.rci field.
+ * @NVME_PEL_RCI_RCE_MASK: Mask to get the reporting context exists from
+ * the &struct nvme_persistent_event_log.rci field.
+ * @NVME_PEL_RCI_RSVD_MASK: Mask to get the reserved reporting context from
+ * the &struct nvme_persistent_event_log.rci field.
+ */
+enum nvme_pel_rci {
+ NVME_PEL_RCI_RCPID_SHIFT = 0,
+ NVME_PEL_RCI_RCPIT_SHIFT = 16,
+ NVME_PEL_RCI_RCE_SHIFT = 18,
+ NVME_PEL_RCI_RSVD_SHIFT = 19,
+ NVME_PEL_RCI_RCPID_MASK = 0xffff,
+ NVME_PEL_RCI_RCPIT_MASK = 0x3,
+ NVME_PEL_RCI_RCE_MASK = 0x1,
+ NVME_PEL_RCI_RSVD_MASK = 0x1fff,
+};
+
+#define NVME_PEL_RCI_RCPID(rci) NVME_GET(rci, PEL_RCI_RCPID)
+#define NVME_PEL_RCI_RCPIT(rci) NVME_GET(rci, PEL_RCI_RCPIT)
+#define NVME_PEL_RCI_RCE(rci) NVME_GET(rci, PEL_RCI_RCE)
+#define NVME_PEL_RCI_RSVD(rci) NVME_GET(rci, PEL_RCI_RSVD)
+
+/**
+ * enum nvme_pel_rci_rcpit - Persistent Event Log Reporting Context - Port Identifier Type
+ * @NVME_PEL_RCI_RCPIT_NOT_EXIST: Does not already exist
+ * @NVME_PEL_RCI_RCPIT_EST_PORT: Established by an NVM subsystem port
+ * @NVME_PEL_RCI_RCPIT_EST_ME: Established by a Management Endpoint
+ */
+enum nvme_pel_rci_rcpit {
+ NVME_PEL_RCI_RCPIT_NOT_EXIST = 0,
+ NVME_PEL_RCI_RCPIT_EST_PORT = 1,
+ NVME_PEL_RCI_RCPIT_EST_ME = 2,
+};
+
+/**
* struct nvme_persistent_event_entry - Persistent Event
* @etype: Event Type
* @etype_rev: Event Type Revision
@@ -3398,6 +3865,41 @@ enum nvme_persistent_event_types {
};
/**
+ * enum nvme_pel_ehai - This field indicates the persistent event header additional information
+ * @NVME_PEL_EHAI_PIT_SHIFT: Shift amount to get the reporting context port identifier
+ * from the &struct nvme_persistent_event_log.rci field.
+ * @NVME_PEL_EHAI_RSVD_SHIFT: Shift amount to get the reserved reporting context
+ * from the &struct nvme_persistent_event_log.rci field.
+ * @NVME_PEL_EHAI_PIT_MASK: Mask to get the reporting context port identifier from
+ * the &struct nvme_st_result.dsts field.
+ * @NVME_PEL_EHAI_RSVD_MASK: Mask to get the reserved reporting context from
+ * the &struct nvme_st_result.dsts field.
+ */
+enum nvme_pel_ehai {
+ NVME_PEL_EHAI_PIT_SHIFT = 0,
+ NVME_PEL_EHAI_RSVD_SHIFT = 2,
+ NVME_PEL_EHAI_PIT_MASK = 0x3,
+ NVME_PEL_EHAI_RSVD_MASK = 0x3f,
+};
+
+#define NVME_PEL_EHAI_PIT(ehai) NVME_GET(ehai, PEL_EHAI_PIT)
+#define NVME_PEL_EHAI_RSVD(ehai) NVME_GET(ehai, PEL_EHAI_RSVD)
+
+/**
+ * enum nvme_pel_ehai_pit - Persistent Event Header Additional Information - Port Identifier Type
+ * @NVME_PEL_EHAI_PIT_NOT_REPORTED: PIT not reported and PELPID does not apply
+ * @NVME_PEL_EHAI_PIT_NSS_PORT: NVM subsystem port
+ * @NVME_PEL_EHAI_PIT_NMI_PORT: NVMe-MI port
+ * @NVME_PEL_EHAI_PIT_NOT_ASSOCIATED: Event not associated with any port and PELPID does not apply
+ */
+enum nvme_pel_ehai_pit {
+ NVME_PEL_EHAI_PIT_NOT_REPORTED = 0,
+ NVME_PEL_EHAI_PIT_NSS_PORT = 1,
+ NVME_PEL_EHAI_PIT_NMI_PORT = 2,
+ NVME_PEL_EHAI_PIT_NOT_ASSOCIATED = 3,
+};
+
+/**
* struct nvme_fw_commit_event - Firmware Commit Event Data
* @old_fw_rev: Old Firmware Revision
* @new_fw_rev: New Firmware Revision
@@ -3570,6 +4072,34 @@ struct nvme_set_feature_event {
};
/**
+ * enum nvme_set_feat_event_layout - This field indicates the set feature event layout
+ * @NVME_SET_FEAT_EVENT_DW_COUNT_SHIFT: Shift amount to get the Dword count from the
+ * &struct nvme_set_feature_event.layout field.
+ * @NVME_SET_FEAT_EVENT_CC_DW0_SHIFT: Shift amount to get the logged command completion Dword 0
+ * from the &struct nvme_set_feature_event.layout field.
+ * @NVME_SET_FEAT_EVENT_MB_COUNT_SHIFT: Shift amount to get the memory buffer count from
+ * the &struct nvme_set_feature_event.layout field.
+ * @NVME_SET_FEAT_EVENT_DW_COUNT_MASK: Mask to get the Dword count from the &struct
+ * nvme_set_feature_event.layout field.
+ * @NVME_SET_FEAT_EVENT_CC_DW0_MASK: Mask to get the logged command completion Dword 0 from
+ * the &struct nvme_set_feature_event.layout field.
+ * @NVME_SET_FEAT_EVENT_MB_COUNT_MASK: Mask to get the memory buffer count from the &struct
+ * nvme_set_feature_event.layout field.
+ */
+enum nvme_set_feat_event_layout {
+ NVME_SET_FEAT_EVENT_DW_COUNT_SHIFT = 0,
+ NVME_SET_FEAT_EVENT_CC_DW0_SHIFT = 3,
+ NVME_SET_FEAT_EVENT_MB_COUNT_SHIFT = 16,
+ NVME_SET_FEAT_EVENT_DW_COUNT_MASK = 0x7,
+ NVME_SET_FEAT_EVENT_CC_DW0_MASK = 0x1,
+ NVME_SET_FEAT_EVENT_MB_COUNT_MASK = 0xffff,
+};
+
+#define NVME_SET_FEAT_EVENT_DW_COUNT(layout) NVME_GET(layout, SET_FEAT_EVENT_DW_COUNT)
+#define NVME_SET_FEAT_EVENT_CC_DW0(layout) NVME_GET(layout, SET_FEAT_EVENT_CC_DW0)
+#define NVME_SET_FEAT_EVENT_MB_COUNT(layout) NVME_GET(layout, SET_FEAT_EVENT_MB_COUNT)
+
+/**
* struct nvme_thermal_exc_event - Thermal Excursion Event Data
* @over_temp: Over Temperature
* @threshold: temperature threshold
@@ -3749,6 +4279,27 @@ struct nvme_boot_partition {
};
/**
+ * enum nvme_boot_partition_info - This field indicates the boot partition information
+ * @NVME_BOOT_PARTITION_INFO_BPSZ_SHIFT: Shift amount to get the boot partition size from
+ * the &struct nvme_boot_partition.bpinfo field.
+ * @NVME_BOOT_PARTITION_INFO_ABPID_SHIFT: Shift amount to get the active boot partition ID
+ * from the &struct nvme_boot_partition.bpinfo field.
+ * @NVME_BOOT_PARTITION_INFO_BPSZ_MASK: Mask to get the boot partition size from the
+ * &struct nvme_boot_partition.bpinfo field.
+ * @NVME_BOOT_PARTITION_INFO_ABPID_MASK: Mask to get the active boot partition ID from the
+ * &struct nvme_boot_partition.bpinfo field.
+ */
+enum nvme_boot_partition_info {
+ NVME_BOOT_PARTITION_INFO_BPSZ_SHIFT = 0,
+ NVME_BOOT_PARTITION_INFO_ABPID_SHIFT = 31,
+ NVME_BOOT_PARTITION_INFO_BPSZ_MASK = 0x7fff,
+ NVME_BOOT_PARTITION_INFO_ABPID_MASK = 0x1,
+};
+
+#define NVME_BOOT_PARTITION_INFO_BPSZ(bpinfo) NVME_GET(bpinfo, BOOT_PARTITION_INFO_BPSZ)
+#define NVME_BOOT_PARTITION_INFO_ABPID(bpinfo) NVME_GET(bpinfo, BOOT_PARTITION_INFO_ABPID)
+
+/**
* struct nvme_eom_lane_desc - EOM Lane Descriptor
* @rsvd0: Reserved
* @mstatus: Measurement Status
@@ -3831,13 +4382,41 @@ struct nvme_phy_rx_eom_log {
};
/**
- * enum nvme_eom_optional_data - EOM Optional Data Present Fields
- * @NVME_EOM_EYE_DATA_PRESENT: Eye Data Present
+ * enum nvme_eom_optional_data_present - EOM Optional Data Present Fields
+ * @NVME_EOM_ODP_PEFP_SHIFT: Shift amount to get the printable eye field present
+ * from the &struct nvme_phy_rx_eom_log.odp field.
+ * @NVME_EOM_ODP_EDFP_SHIFT: Shift amount to get the eye data field present
+ * from the &struct nvme_phy_rx_eom_log.odp field.
+ * @NVME_EOM_ODP_RSVD_SHIFT: Shift amount to get the reserved optional data present
+ * from the &struct nvme_phy_rx_eom_log.odp field.
+ * @NVME_EOM_ODP_PEFP_MASK: Mask to get the printable eye field present
+ * from the &struct nvme_phy_rx_eom_log.odp field.
+ * @NVME_EOM_ODP_EDFP_MASK: Mask to get the eye data field present
+ * from the &struct nvme_phy_rx_eom_log.odp field.
+ * @NVME_EOM_ODP_RSVD_MASK: Mask to get the reserved data present
+ * from the &struct nvme_phy_rx_eom_log.odp field.
+ */
+enum nvme_eom_optional_data_present {
+ NVME_EOM_ODP_PEFP_SHIFT = 0,
+ NVME_EOM_ODP_EDFP_SHIFT = 1,
+ NVME_EOM_ODP_RSVD_SHIFT = 2,
+ NVME_EOM_ODP_PEFP_MASK = 0x1,
+ NVME_EOM_ODP_EDFP_MASK = 0x1,
+ NVME_EOM_ODP_RSVD_MASK = 0x3f,
+};
+
+#define NVME_EOM_ODP_PEFP(odp) NVME_GET(odp, EOM_ODP_PEFP)
+#define NVME_EOM_ODP_EDFP(odp) NVME_GET(odp, EOM_ODP_EDFP)
+#define NVME_EOM_ODP_RSVD(odp) NVME_GET(odp, EOM_ODP_RSVD)
+
+/**
+ * enum nvme_eom_optional_data - EOM Optional Data Present Fields (Deprecated)
* @NVME_EOM_PRINTABLE_EYE_PRESENT: Printable Eye Present
+ * @NVME_EOM_EYE_DATA_PRESENT: Eye Data Present
*/
enum nvme_eom_optional_data {
- NVME_EOM_EYE_DATA_PRESENT = 1,
- NVME_EOM_PRINTABLE_EYE_PRESENT = 1 << 1,
+ NVME_EOM_PRINTABLE_EYE_PRESENT = NVME_EOM_ODP_PEFP_MASK << NVME_EOM_ODP_PEFP_SHIFT,
+ NVME_EOM_EYE_DATA_PRESENT = NVME_EOM_ODP_EDFP_MASK << NVME_EOM_ODP_EDFP_SHIFT,
};
/**
@@ -6917,6 +7496,7 @@ enum nvme_identify_cns {
* @NVME_LOG_LID_SUPPORTED_CAP_CONFIG_LIST: Supported Capacity Configuration Lis
* @NVME_LOG_LID_FID_SUPPORTED_EFFECTS: Feature Identifiers Supported and Effects
* @NVME_LOG_LID_MI_CMD_SUPPORTED_EFFECTS: NVMe-MI Commands Supported and Effects
+ * @NVME_LOG_LID_CMD_AND_FEAT_LOCKDOWN: Command and Feature Lockdown
* @NVME_LOG_LID_BOOT_PARTITION: Boot Partition
* @NVME_LOG_LID_PHY_RX_EOM: Physical Interface Receiver Eye Opening Measurement
* @NVME_LOG_LID_FDP_CONFIGS: FDP Configurations
@@ -6949,6 +7529,7 @@ enum nvme_cmd_get_log_lid {
NVME_LOG_LID_SUPPORTED_CAP_CONFIG_LIST = 0x11,
NVME_LOG_LID_FID_SUPPORTED_EFFECTS = 0x12,
NVME_LOG_LID_MI_CMD_SUPPORTED_EFFECTS = 0x13,
+ NVME_LOG_LID_CMD_AND_FEAT_LOCKDOWN = 0x14,
NVME_LOG_LID_BOOT_PARTITION = 0x15,
NVME_LOG_LID_PHY_RX_EOM = 0x19,
NVME_LOG_LID_FDP_CONFIGS = 0x20,
diff --git a/src/nvme/util.c b/src/nvme/util.c
index f091da7..7404509 100644
--- a/src/nvme/util.c
+++ b/src/nvme/util.c
@@ -12,6 +12,7 @@
#include <stdbool.h>
#include <string.h>
#include <errno.h>
+#include <malloc.h>
#include <sys/stat.h>
#include <fcntl.h>
@@ -619,6 +620,7 @@ static const char * const libnvme_status[] = {
[ENVME_CONNECT_OPNOTSUPP] = "not supported",
[ENVME_CONNECT_CONNREFUSED] = "connection refused",
[ENVME_CONNECT_ADDRNOTAVAIL] = "cannot assign requested address",
+ [ENVME_CONNECT_IGNORED] = "connection ignored",
};
const char *nvme_errno_to_string(int status)
@@ -1135,3 +1137,17 @@ void *__nvme_alloc(size_t len)
memset(p, 0, _len);
return p;
}
+
+void *__nvme_realloc(void *p, size_t len)
+{
+ size_t old_len = malloc_usable_size(p);
+
+ void *result = __nvme_alloc(len);
+
+ if (p) {
+ memcpy(result, p, min(old_len, len));
+ free(p);
+ }
+
+ return result;
+}
diff --git a/src/nvme/util.h b/src/nvme/util.h
index 517c696..71fea9f 100644
--- a/src/nvme/util.h
+++ b/src/nvme/util.h
@@ -483,7 +483,7 @@ static inline void nvme_feature_decode_namespace_write_protect(__u32 value,
static inline void nvme_id_ns_flbas_to_lbaf_inuse(__u8 flbas, __u8 *lbaf_inuse)
{
- *lbaf_inuse = ((NVME_FLBAS_HIGHER(flbas) >> 1) |
+ *lbaf_inuse = ((NVME_FLBAS_HIGHER(flbas) << 4) |
NVME_FLBAS_LOWER(flbas));
}
@@ -558,6 +558,8 @@ char *kv_keymatch(const char *kv, const char *key);
*/
char *startswith(const char *s, const char *prefix);
+#define min(x, y) ((x) > (y) ? (y) : (x))
+
#define __round_mask(val, mult) ((__typeof__(val))((mult)-1))
/**
diff --git a/test/nbft/diffs/NBFT-Dell.PowerEdge.R660-fw1.5.5-mpath+discovery b/test/nbft/diffs/NBFT-Dell.PowerEdge.R660-fw1.5.5-mpath+discovery
new file mode 100644
index 0000000..7d44d92
--- /dev/null
+++ b/test/nbft/diffs/NBFT-Dell.PowerEdge.R660-fw1.5.5-mpath+discovery
@@ -0,0 +1,312 @@
+raw_nbft_size=4147
+host.id=44454c4c44010448030b8c04f445833
+host.nqn=nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0044-4410-8030-b8c04f445833
+host.host_id_configured=1
+host.host_nqn_configured=1
+host.primary=0
+hfi_list[0]->index=1
+hfi_list[0]->transport=tcp
+hfi_list[0]->tcp_info.pci_sbdf=27136
+hfi_list[0]->tcp_info.mac_addr=062bcbeb70
+hfi_list[0]->tcp_info.vlan=0
+hfi_list[0]->tcp_info.ip_origin=95
+hfi_list[0]->tcp_info.ipaddr=172.18.240.1
+hfi_list[0]->tcp_info.subnet_mask_prefix=24
+hfi_list[0]->tcp_info.gateway_ipaddr=0.0.0.0
+hfi_list[0]->tcp_info.route_metric=500
+hfi_list[0]->tcp_info.primary_dns_ipaddr=0.0.0.0
+hfi_list[0]->tcp_info.secondary_dns_ipaddr=0.0.0.0
+hfi_list[0]->tcp_info.dhcp_server_ipaddr=
+hfi_list[0]->tcp_info.host_name=(null)
+hfi_list[0]->tcp_info.this_hfi_is_default_route=1
+hfi_list[0]->tcp_info.dhcp_override=0
+hfi_list[1]->index=2
+hfi_list[1]->transport=tcp
+hfi_list[1]->tcp_info.pci_sbdf=27137
+hfi_list[1]->tcp_info.mac_addr=062bcbeb71
+hfi_list[1]->tcp_info.vlan=0
+hfi_list[1]->tcp_info.ip_origin=95
+hfi_list[1]->tcp_info.ipaddr=172.18.230.2
+hfi_list[1]->tcp_info.subnet_mask_prefix=24
+hfi_list[1]->tcp_info.gateway_ipaddr=0.0.0.0
+hfi_list[1]->tcp_info.route_metric=500
+hfi_list[1]->tcp_info.primary_dns_ipaddr=0.0.0.0
+hfi_list[1]->tcp_info.secondary_dns_ipaddr=0.0.0.0
+hfi_list[1]->tcp_info.dhcp_server_ipaddr=
+hfi_list[1]->tcp_info.host_name=(null)
+hfi_list[1]->tcp_info.this_hfi_is_default_route=1
+hfi_list[1]->tcp_info.dhcp_override=0
+discovery_list[0]->index=1
+discovery_list[0]->hfi->index=1
+discovery_list[0]->uri=nvme+tcp://172.18.240.70:8009/
+discovery_list[0]->nqn=nqn.2014-08.org.nvmexpress.discovery
+discovery_list[1]->index=2
+discovery_list[1]->hfi->index=2
+discovery_list[1]->uri=nvme+tcp://172.18.230.70:8009/
+discovery_list[1]->nqn=nqn.2014-08.org.nvmexpress.discovery
+subsystem_ns_list[0]->index=1
+subsystem_ns_list[0]->discovery->index=1
+subsystem_ns_list[0]->num_hfis=1
+subsystem_ns_list[0]->hfis[0]->index=1
+subsystem_ns_list[0]->transport=tcp
+subsystem_ns_list[0]->traddr=172.18.240.60
+subsystem_ns_list[0]->trsvcid=4420
+subsystem_ns_list[0]->subsys_port_id=0
+subsystem_ns_list[0]->nsid=270
+subsystem_ns_list[0]->nid_type=2
+subsystem_ns_list[0]->nid=5380b42fc0c5de718ccf9680be3ca7
+subsystem_ns_list[0]->subsys_nqn=nqn.1988-11.com.dell:powerstore:00:88b402df2d762AA7AF94
+subsystem_ns_list[0]->pdu_header_digest_required=0
+subsystem_ns_list[0]->data_digest_required=0
+subsystem_ns_list[0]->controller_id=4186
+subsystem_ns_list[0]->asqsz=0
+subsystem_ns_list[0]->dhcp_root_path_string=(null)
+subsystem_ns_list[0]->discovered=1
+subsystem_ns_list[0]->unavailable=0
+subsystem_ns_list[1]->index=2
+subsystem_ns_list[1]->discovery->index=1
+subsystem_ns_list[1]->num_hfis=1
+subsystem_ns_list[1]->hfis[0]->index=1
+subsystem_ns_list[1]->transport=tcp
+subsystem_ns_list[1]->traddr=172.18.240.60
+subsystem_ns_list[1]->trsvcid=4420
+subsystem_ns_list[1]->subsys_port_id=0
+subsystem_ns_list[1]->nsid=1671
+subsystem_ns_list[1]->nid_type=2
+subsystem_ns_list[1]->nid=f4c66fce74afdb8ccf96807eaeae
+subsystem_ns_list[1]->subsys_nqn=nqn.1988-11.com.dell:powerstore:00:88b402df2d762AA7AF94
+subsystem_ns_list[1]->pdu_header_digest_required=0
+subsystem_ns_list[1]->data_digest_required=0
+subsystem_ns_list[1]->controller_id=4186
+subsystem_ns_list[1]->asqsz=0
+subsystem_ns_list[1]->dhcp_root_path_string=(null)
+subsystem_ns_list[1]->discovered=1
+subsystem_ns_list[1]->unavailable=0
+subsystem_ns_list[2]->index=3
+subsystem_ns_list[2]->discovery->index=1
+subsystem_ns_list[2]->num_hfis=1
+subsystem_ns_list[2]->hfis[0]->index=1
+subsystem_ns_list[2]->transport=tcp
+subsystem_ns_list[2]->traddr=172.18.240.61
+subsystem_ns_list[2]->trsvcid=4420
+subsystem_ns_list[2]->subsys_port_id=0
+subsystem_ns_list[2]->nsid=270
+subsystem_ns_list[2]->nid_type=2
+subsystem_ns_list[2]->nid=5380b42fc0c5de718ccf9680be3ca7
+subsystem_ns_list[2]->subsys_nqn=nqn.1988-11.com.dell:powerstore:00:88b402df2d762AA7AF94
+subsystem_ns_list[2]->pdu_header_digest_required=0
+subsystem_ns_list[2]->data_digest_required=0
+subsystem_ns_list[2]->controller_id=52
+subsystem_ns_list[2]->asqsz=0
+subsystem_ns_list[2]->dhcp_root_path_string=(null)
+subsystem_ns_list[2]->discovered=1
+subsystem_ns_list[2]->unavailable=0
+subsystem_ns_list[3]->index=4
+subsystem_ns_list[3]->discovery->index=1
+subsystem_ns_list[3]->num_hfis=1
+subsystem_ns_list[3]->hfis[0]->index=1
+subsystem_ns_list[3]->transport=tcp
+subsystem_ns_list[3]->traddr=172.18.240.61
+subsystem_ns_list[3]->trsvcid=4420
+subsystem_ns_list[3]->subsys_port_id=0
+subsystem_ns_list[3]->nsid=1671
+subsystem_ns_list[3]->nid_type=2
+subsystem_ns_list[3]->nid=f4c66fce74afdb8ccf96807eaeae
+subsystem_ns_list[3]->subsys_nqn=nqn.1988-11.com.dell:powerstore:00:88b402df2d762AA7AF94
+subsystem_ns_list[3]->pdu_header_digest_required=0
+subsystem_ns_list[3]->data_digest_required=0
+subsystem_ns_list[3]->controller_id=52
+subsystem_ns_list[3]->asqsz=0
+subsystem_ns_list[3]->dhcp_root_path_string=(null)
+subsystem_ns_list[3]->discovered=1
+subsystem_ns_list[3]->unavailable=0
+subsystem_ns_list[4]->index=5
+subsystem_ns_list[4]->discovery->index=1
+subsystem_ns_list[4]->num_hfis=1
+subsystem_ns_list[4]->hfis[0]->index=1
+subsystem_ns_list[4]->transport=tcp
+subsystem_ns_list[4]->traddr=172.18.240.51
+subsystem_ns_list[4]->trsvcid=4420
+subsystem_ns_list[4]->subsys_port_id=0
+subsystem_ns_list[4]->nsid=1
+subsystem_ns_list[4]->nid_type=3
+subsystem_ns_list[4]->nid=6be5e52f7fa24d57805b8cdce240e4c
+subsystem_ns_list[4]->subsys_nqn=nqn.1992-08.com.netapp:sn.643ecb551e6b11eda647d039ea98949f:subsystem.dellr660
+subsystem_ns_list[4]->pdu_header_digest_required=0
+subsystem_ns_list[4]->data_digest_required=0
+subsystem_ns_list[4]->controller_id=6209
+subsystem_ns_list[4]->asqsz=0
+subsystem_ns_list[4]->dhcp_root_path_string=(null)
+subsystem_ns_list[4]->discovered=1
+subsystem_ns_list[4]->unavailable=0
+subsystem_ns_list[5]->index=6
+subsystem_ns_list[5]->discovery->index=1
+subsystem_ns_list[5]->num_hfis=1
+subsystem_ns_list[5]->hfis[0]->index=1
+subsystem_ns_list[5]->transport=tcp
+subsystem_ns_list[5]->traddr=172.18.240.50
+subsystem_ns_list[5]->trsvcid=4420
+subsystem_ns_list[5]->subsys_port_id=0
+subsystem_ns_list[5]->nsid=1
+subsystem_ns_list[5]->nid_type=3
+subsystem_ns_list[5]->nid=6be5e52f7fa24d57805b8cdce240e4c
+subsystem_ns_list[5]->subsys_nqn=nqn.1992-08.com.netapp:sn.643ecb551e6b11eda647d039ea98949f:subsystem.dellr660
+subsystem_ns_list[5]->pdu_header_digest_required=0
+subsystem_ns_list[5]->data_digest_required=0
+subsystem_ns_list[5]->controller_id=6208
+subsystem_ns_list[5]->asqsz=0
+subsystem_ns_list[5]->dhcp_root_path_string=(null)
+subsystem_ns_list[5]->discovered=1
+subsystem_ns_list[5]->unavailable=0
+subsystem_ns_list[6]->index=7
+subsystem_ns_list[6]->discovery->index=1
+subsystem_ns_list[6]->num_hfis=1
+subsystem_ns_list[6]->hfis[0]->index=1
+subsystem_ns_list[6]->transport=tcp
+subsystem_ns_list[6]->traddr=172.18.230.51
+subsystem_ns_list[6]->trsvcid=4420
+subsystem_ns_list[6]->subsys_port_id=0
+subsystem_ns_list[6]->nsid=0
+subsystem_ns_list[6]->nid_type=0
+subsystem_ns_list[6]->nid=0000000000000000
+subsystem_ns_list[6]->subsys_nqn=nqn.1992-08.com.netapp:sn.643ecb551e6b11eda647d039ea98949f:subsystem.dellr660
+subsystem_ns_list[6]->pdu_header_digest_required=0
+subsystem_ns_list[6]->data_digest_required=0
+subsystem_ns_list[6]->controller_id=6208
+subsystem_ns_list[6]->asqsz=0
+subsystem_ns_list[6]->dhcp_root_path_string=(null)
+subsystem_ns_list[6]->discovered=1
+subsystem_ns_list[6]->unavailable=1
+subsystem_ns_list[7]->index=8
+subsystem_ns_list[7]->discovery->index=1
+subsystem_ns_list[7]->num_hfis=1
+subsystem_ns_list[7]->hfis[0]->index=1
+subsystem_ns_list[7]->transport=tcp
+subsystem_ns_list[7]->traddr=172.18.230.50
+subsystem_ns_list[7]->trsvcid=4420
+subsystem_ns_list[7]->subsys_port_id=0
+subsystem_ns_list[7]->nsid=0
+subsystem_ns_list[7]->nid_type=0
+subsystem_ns_list[7]->nid=0000000000000000
+subsystem_ns_list[7]->subsys_nqn=nqn.1992-08.com.netapp:sn.643ecb551e6b11eda647d039ea98949f:subsystem.dellr660
+subsystem_ns_list[7]->pdu_header_digest_required=0
+subsystem_ns_list[7]->data_digest_required=0
+subsystem_ns_list[7]->controller_id=6208
+subsystem_ns_list[7]->asqsz=0
+subsystem_ns_list[7]->dhcp_root_path_string=(null)
+subsystem_ns_list[7]->discovered=1
+subsystem_ns_list[7]->unavailable=1
+subsystem_ns_list[8]->index=9
+subsystem_ns_list[8]->discovery->index=2
+subsystem_ns_list[8]->num_hfis=1
+subsystem_ns_list[8]->hfis[0]->index=2
+subsystem_ns_list[8]->transport=tcp
+subsystem_ns_list[8]->traddr=172.18.230.61
+subsystem_ns_list[8]->trsvcid=4420
+subsystem_ns_list[8]->subsys_port_id=0
+subsystem_ns_list[8]->nsid=270
+subsystem_ns_list[8]->nid_type=2
+subsystem_ns_list[8]->nid=5380b42fc0c5de718ccf9680be3ca7
+subsystem_ns_list[8]->subsys_nqn=nqn.1988-11.com.dell:powerstore:00:88b402df2d762AA7AF94
+subsystem_ns_list[8]->pdu_header_digest_required=0
+subsystem_ns_list[8]->data_digest_required=0
+subsystem_ns_list[8]->controller_id=51
+subsystem_ns_list[8]->asqsz=0
+subsystem_ns_list[8]->dhcp_root_path_string=(null)
+subsystem_ns_list[8]->discovered=1
+subsystem_ns_list[8]->unavailable=0
+subsystem_ns_list[9]->index=10
+subsystem_ns_list[9]->discovery->index=2
+subsystem_ns_list[9]->num_hfis=1
+subsystem_ns_list[9]->hfis[0]->index=2
+subsystem_ns_list[9]->transport=tcp
+subsystem_ns_list[9]->traddr=172.18.230.61
+subsystem_ns_list[9]->trsvcid=4420
+subsystem_ns_list[9]->subsys_port_id=0
+subsystem_ns_list[9]->nsid=1671
+subsystem_ns_list[9]->nid_type=2
+subsystem_ns_list[9]->nid=f4c66fce74afdb8ccf96807eaeae
+subsystem_ns_list[9]->subsys_nqn=nqn.1988-11.com.dell:powerstore:00:88b402df2d762AA7AF94
+subsystem_ns_list[9]->pdu_header_digest_required=0
+subsystem_ns_list[9]->data_digest_required=0
+subsystem_ns_list[9]->controller_id=51
+subsystem_ns_list[9]->asqsz=0
+subsystem_ns_list[9]->dhcp_root_path_string=(null)
+subsystem_ns_list[9]->discovered=1
+subsystem_ns_list[9]->unavailable=0
+subsystem_ns_list[10]->index=11
+subsystem_ns_list[10]->discovery->index=2
+subsystem_ns_list[10]->num_hfis=1
+subsystem_ns_list[10]->hfis[0]->index=2
+subsystem_ns_list[10]->transport=tcp
+subsystem_ns_list[10]->traddr=172.18.230.60
+subsystem_ns_list[10]->trsvcid=4420
+subsystem_ns_list[10]->subsys_port_id=0
+subsystem_ns_list[10]->nsid=270
+subsystem_ns_list[10]->nid_type=2
+subsystem_ns_list[10]->nid=5380b42fc0c5de718ccf9680be3ca7
+subsystem_ns_list[10]->subsys_nqn=nqn.1988-11.com.dell:powerstore:00:88b402df2d762AA7AF94
+subsystem_ns_list[10]->pdu_header_digest_required=0
+subsystem_ns_list[10]->data_digest_required=0
+subsystem_ns_list[10]->controller_id=4185
+subsystem_ns_list[10]->asqsz=0
+subsystem_ns_list[10]->dhcp_root_path_string=(null)
+subsystem_ns_list[10]->discovered=1
+subsystem_ns_list[10]->unavailable=0
+subsystem_ns_list[11]->index=12
+subsystem_ns_list[11]->discovery->index=2
+subsystem_ns_list[11]->num_hfis=1
+subsystem_ns_list[11]->hfis[0]->index=2
+subsystem_ns_list[11]->transport=tcp
+subsystem_ns_list[11]->traddr=172.18.230.60
+subsystem_ns_list[11]->trsvcid=4420
+subsystem_ns_list[11]->subsys_port_id=0
+subsystem_ns_list[11]->nsid=1671
+subsystem_ns_list[11]->nid_type=2
+subsystem_ns_list[11]->nid=f4c66fce74afdb8ccf96807eaeae
+subsystem_ns_list[11]->subsys_nqn=nqn.1988-11.com.dell:powerstore:00:88b402df2d762AA7AF94
+subsystem_ns_list[11]->pdu_header_digest_required=0
+subsystem_ns_list[11]->data_digest_required=0
+subsystem_ns_list[11]->controller_id=4185
+subsystem_ns_list[11]->asqsz=0
+subsystem_ns_list[11]->dhcp_root_path_string=(null)
+subsystem_ns_list[11]->discovered=1
+subsystem_ns_list[11]->unavailable=0
+subsystem_ns_list[12]->index=13
+subsystem_ns_list[12]->discovery->index=2
+subsystem_ns_list[12]->num_hfis=1
+subsystem_ns_list[12]->hfis[0]->index=2
+subsystem_ns_list[12]->transport=tcp
+subsystem_ns_list[12]->traddr=172.18.230.51
+subsystem_ns_list[12]->trsvcid=4420
+subsystem_ns_list[12]->subsys_port_id=0
+subsystem_ns_list[12]->nsid=1
+subsystem_ns_list[12]->nid_type=3
+subsystem_ns_list[12]->nid=6be5e52f7fa24d57805b8cdce240e4c
+subsystem_ns_list[12]->subsys_nqn=nqn.1992-08.com.netapp:sn.643ecb551e6b11eda647d039ea98949f:subsystem.dellr660
+subsystem_ns_list[12]->pdu_header_digest_required=0
+subsystem_ns_list[12]->data_digest_required=0
+subsystem_ns_list[12]->controller_id=6273
+subsystem_ns_list[12]->asqsz=0
+subsystem_ns_list[12]->dhcp_root_path_string=(null)
+subsystem_ns_list[12]->discovered=1
+subsystem_ns_list[12]->unavailable=0
+subsystem_ns_list[13]->index=14
+subsystem_ns_list[13]->discovery->index=2
+subsystem_ns_list[13]->num_hfis=1
+subsystem_ns_list[13]->hfis[0]->index=2
+subsystem_ns_list[13]->transport=tcp
+subsystem_ns_list[13]->traddr=172.18.230.50
+subsystem_ns_list[13]->trsvcid=4420
+subsystem_ns_list[13]->subsys_port_id=0
+subsystem_ns_list[13]->nsid=1
+subsystem_ns_list[13]->nid_type=3
+subsystem_ns_list[13]->nid=6be5e52f7fa24d57805b8cdce240e4c
+subsystem_ns_list[13]->subsys_nqn=nqn.1992-08.com.netapp:sn.643ecb551e6b11eda647d039ea98949f:subsystem.dellr660
+subsystem_ns_list[13]->pdu_header_digest_required=0
+subsystem_ns_list[13]->data_digest_required=0
+subsystem_ns_list[13]->controller_id=6272
+subsystem_ns_list[13]->asqsz=0
+subsystem_ns_list[13]->dhcp_root_path_string=(null)
+subsystem_ns_list[13]->discovered=1
+subsystem_ns_list[13]->unavailable=0
diff --git a/test/nbft/diffs/NBFT-Dell.PowerEdge.R660-fw1.5.5-single b/test/nbft/diffs/NBFT-Dell.PowerEdge.R660-fw1.5.5-single
index 72a34de..17631fb 100644
--- a/test/nbft/diffs/NBFT-Dell.PowerEdge.R660-fw1.5.5-single
+++ b/test/nbft/diffs/NBFT-Dell.PowerEdge.R660-fw1.5.5-single
@@ -36,6 +36,8 @@ subsystem_ns_list[0]->data_digest_required=0
subsystem_ns_list[0]->controller_id=4105
subsystem_ns_list[0]->asqsz=0
subsystem_ns_list[0]->dhcp_root_path_string=(null)
+subsystem_ns_list[0]->discovered=0
+subsystem_ns_list[0]->unavailable=0
subsystem_ns_list[1]->index=2
subsystem_ns_list[1]->num_hfis=1
subsystem_ns_list[1]->hfis[0]->index=1
@@ -52,3 +54,5 @@ subsystem_ns_list[1]->data_digest_required=0
subsystem_ns_list[1]->controller_id=4105
subsystem_ns_list[1]->asqsz=0
subsystem_ns_list[1]->dhcp_root_path_string=(null)
+subsystem_ns_list[1]->discovered=0
+subsystem_ns_list[1]->unavailable=0
diff --git a/test/nbft/diffs/NBFT-Dell.PowerEdge.R760 b/test/nbft/diffs/NBFT-Dell.PowerEdge.R760
index d7fab3f..5bb854c 100644
--- a/test/nbft/diffs/NBFT-Dell.PowerEdge.R760
+++ b/test/nbft/diffs/NBFT-Dell.PowerEdge.R760
@@ -41,6 +41,8 @@ subsystem_ns_list[0]->data_digest_required=0
subsystem_ns_list[0]->controller_id=5
subsystem_ns_list[0]->asqsz=0
subsystem_ns_list[0]->dhcp_root_path_string=(null)
+subsystem_ns_list[0]->discovered=1
+subsystem_ns_list[0]->unavailable=0
subsystem_ns_list[1]->index=2
subsystem_ns_list[1]->discovery->index=1
subsystem_ns_list[1]->num_hfis=1
@@ -58,3 +60,5 @@ subsystem_ns_list[1]->data_digest_required=0
subsystem_ns_list[1]->controller_id=4166
subsystem_ns_list[1]->asqsz=0
subsystem_ns_list[1]->dhcp_root_path_string=(null)
+subsystem_ns_list[1]->discovered=1
+subsystem_ns_list[1]->unavailable=0
diff --git a/test/nbft/diffs/NBFT-auto-ipv6 b/test/nbft/diffs/NBFT-auto-ipv6
index 83ee643..4e19830 100644
--- a/test/nbft/diffs/NBFT-auto-ipv6
+++ b/test/nbft/diffs/NBFT-auto-ipv6
@@ -36,3 +36,5 @@ subsystem_ns_list[0]->data_digest_required=0
subsystem_ns_list[0]->controller_id=1
subsystem_ns_list[0]->asqsz=0
subsystem_ns_list[0]->dhcp_root_path_string=(null)
+subsystem_ns_list[0]->discovered=0
+subsystem_ns_list[0]->unavailable=0
diff --git a/test/nbft/diffs/NBFT-dhcp-ipv4 b/test/nbft/diffs/NBFT-dhcp-ipv4
index 067079d..4c9c61c 100644
--- a/test/nbft/diffs/NBFT-dhcp-ipv4
+++ b/test/nbft/diffs/NBFT-dhcp-ipv4
@@ -41,3 +41,5 @@ subsystem_ns_list[0]->data_digest_required=0
subsystem_ns_list[0]->controller_id=7
subsystem_ns_list[0]->asqsz=0
subsystem_ns_list[0]->dhcp_root_path_string=(null)
+subsystem_ns_list[0]->discovered=1
+subsystem_ns_list[0]->unavailable=0
diff --git a/test/nbft/diffs/NBFT-dhcp-ipv6 b/test/nbft/diffs/NBFT-dhcp-ipv6
index 11c974f..27c54fd 100644
--- a/test/nbft/diffs/NBFT-dhcp-ipv6
+++ b/test/nbft/diffs/NBFT-dhcp-ipv6
@@ -36,3 +36,5 @@ subsystem_ns_list[0]->data_digest_required=0
subsystem_ns_list[0]->controller_id=34
subsystem_ns_list[0]->asqsz=0
subsystem_ns_list[0]->dhcp_root_path_string=(null)
+subsystem_ns_list[0]->discovered=0
+subsystem_ns_list[0]->unavailable=0
diff --git a/test/nbft/diffs/NBFT-mpath+disc-ipv4+6_half b/test/nbft/diffs/NBFT-mpath+disc-ipv4+6_half
new file mode 100644
index 0000000..1e1d678
--- /dev/null
+++ b/test/nbft/diffs/NBFT-mpath+disc-ipv4+6_half
@@ -0,0 +1,141 @@
+raw_nbft_size=1922
+host.id=12345678abcdabcdabcd123456789012
+host.nqn=nqn.2014-08.org.nvmexpress:uuid:12345678-abcd-abcd-abcd-123456789012
+host.host_id_configured=1
+host.host_nqn_configured=1
+host.primary=0
+hfi_list[0]->index=1
+hfi_list[0]->transport=tcp
+hfi_list[0]->tcp_info.pci_sbdf=24
+hfi_list[0]->tcp_info.mac_addr=5254072c5ae
+hfi_list[0]->tcp_info.vlan=0
+hfi_list[0]->tcp_info.ip_origin=1
+hfi_list[0]->tcp_info.ipaddr=192.168.122.158
+hfi_list[0]->tcp_info.subnet_mask_prefix=24
+hfi_list[0]->tcp_info.gateway_ipaddr=0.0.0.0
+hfi_list[0]->tcp_info.route_metric=0
+hfi_list[0]->tcp_info.primary_dns_ipaddr=0.0.0.0
+hfi_list[0]->tcp_info.secondary_dns_ipaddr=0.0.0.0
+hfi_list[0]->tcp_info.dhcp_server_ipaddr=
+hfi_list[0]->tcp_info.host_name=(null)
+hfi_list[0]->tcp_info.this_hfi_is_default_route=1
+hfi_list[0]->tcp_info.dhcp_override=0
+hfi_list[1]->index=2
+hfi_list[1]->transport=tcp
+hfi_list[1]->tcp_info.pci_sbdf=32
+hfi_list[1]->tcp_info.mac_addr=5254072c5af
+hfi_list[1]->tcp_info.vlan=0
+hfi_list[1]->tcp_info.ip_origin=1
+hfi_list[1]->tcp_info.ipaddr=4321::bbbb:2
+hfi_list[1]->tcp_info.subnet_mask_prefix=0
+hfi_list[1]->tcp_info.gateway_ipaddr=::
+hfi_list[1]->tcp_info.route_metric=0
+hfi_list[1]->tcp_info.primary_dns_ipaddr=::
+hfi_list[1]->tcp_info.secondary_dns_ipaddr=::
+hfi_list[1]->tcp_info.dhcp_server_ipaddr=
+hfi_list[1]->tcp_info.host_name=(null)
+hfi_list[1]->tcp_info.this_hfi_is_default_route=1
+hfi_list[1]->tcp_info.dhcp_override=0
+discovery_list[0]->index=1
+discovery_list[0]->hfi->index=1
+discovery_list[0]->uri=nvme+tcp://192.168.122.1:4420/
+discovery_list[0]->nqn=nqn.2014-08.org.nvmexpress.discovery
+discovery_list[1]->index=2
+discovery_list[1]->hfi->index=2
+discovery_list[1]->uri=nvme+tcp://[4321::BBBB:1]:4420/
+discovery_list[1]->nqn=nqn.2014-08.org.nvmexpress.discovery
+subsystem_ns_list[0]->index=1
+subsystem_ns_list[0]->discovery->index=1
+subsystem_ns_list[0]->num_hfis=1
+subsystem_ns_list[0]->hfis[0]->index=1
+subsystem_ns_list[0]->transport=tcp
+subsystem_ns_list[0]->traddr=192.168.122.1
+subsystem_ns_list[0]->trsvcid=4420
+subsystem_ns_list[0]->subsys_port_id=0
+subsystem_ns_list[0]->nsid=123
+subsystem_ns_list[0]->nid_type=3
+subsystem_ns_list[0]->nid=d592cdf3ffffffff84123fcf7d99df27
+subsystem_ns_list[0]->subsys_nqn=nqn.2014-08.org.nvmexpress.boot.poc:test-target
+subsystem_ns_list[0]->pdu_header_digest_required=0
+subsystem_ns_list[0]->data_digest_required=0
+subsystem_ns_list[0]->controller_id=0
+subsystem_ns_list[0]->asqsz=0
+subsystem_ns_list[0]->dhcp_root_path_string=(null)
+subsystem_ns_list[0]->discovered=1
+subsystem_ns_list[0]->unavailable=0
+subsystem_ns_list[1]->index=2
+subsystem_ns_list[1]->discovery->index=1
+subsystem_ns_list[1]->num_hfis=1
+subsystem_ns_list[1]->hfis[0]->index=1
+subsystem_ns_list[1]->transport=tcp
+subsystem_ns_list[1]->traddr=192.168.122.1
+subsystem_ns_list[1]->trsvcid=4420
+subsystem_ns_list[1]->subsys_port_id=0
+subsystem_ns_list[1]->nsid=201
+subsystem_ns_list[1]->nid_type=3
+subsystem_ns_list[1]->nid=9b9e1b6ea02c427fbdeb2a0be9cb945
+subsystem_ns_list[1]->subsys_nqn=nqn.2014-08.org.nvmexpress.boot.poc:test-target
+subsystem_ns_list[1]->pdu_header_digest_required=0
+subsystem_ns_list[1]->data_digest_required=0
+subsystem_ns_list[1]->controller_id=0
+subsystem_ns_list[1]->asqsz=0
+subsystem_ns_list[1]->dhcp_root_path_string=(null)
+subsystem_ns_list[1]->discovered=1
+subsystem_ns_list[1]->unavailable=0
+subsystem_ns_list[2]->index=3
+subsystem_ns_list[2]->discovery->index=1
+subsystem_ns_list[2]->num_hfis=1
+subsystem_ns_list[2]->hfis[0]->index=1
+subsystem_ns_list[2]->transport=tcp
+subsystem_ns_list[2]->traddr=192.168.122.1
+subsystem_ns_list[2]->trsvcid=4420
+subsystem_ns_list[2]->subsys_port_id=0
+subsystem_ns_list[2]->nsid=202
+subsystem_ns_list[2]->nid_type=3
+subsystem_ns_list[2]->nid=5353d4e551a40f492a563231b833c5
+subsystem_ns_list[2]->subsys_nqn=nqn.2014-08.org.nvmexpress.boot.poc:test-target
+subsystem_ns_list[2]->pdu_header_digest_required=0
+subsystem_ns_list[2]->data_digest_required=0
+subsystem_ns_list[2]->controller_id=0
+subsystem_ns_list[2]->asqsz=0
+subsystem_ns_list[2]->dhcp_root_path_string=(null)
+subsystem_ns_list[2]->discovered=1
+subsystem_ns_list[2]->unavailable=0
+subsystem_ns_list[3]->index=4
+subsystem_ns_list[3]->discovery->index=1
+subsystem_ns_list[3]->num_hfis=1
+subsystem_ns_list[3]->hfis[0]->index=1
+subsystem_ns_list[3]->transport=tcp
+subsystem_ns_list[3]->traddr=192.168.122.1
+subsystem_ns_list[3]->trsvcid=4420
+subsystem_ns_list[3]->subsys_port_id=0
+subsystem_ns_list[3]->nsid=203
+subsystem_ns_list[3]->nid_type=3
+subsystem_ns_list[3]->nid=fb13e6ffac2940c0a988cb1c17d39f4b
+subsystem_ns_list[3]->subsys_nqn=nqn.2014-08.org.nvmexpress.boot.poc:test-target
+subsystem_ns_list[3]->pdu_header_digest_required=0
+subsystem_ns_list[3]->data_digest_required=0
+subsystem_ns_list[3]->controller_id=0
+subsystem_ns_list[3]->asqsz=0
+subsystem_ns_list[3]->dhcp_root_path_string=(null)
+subsystem_ns_list[3]->discovered=1
+subsystem_ns_list[3]->unavailable=0
+subsystem_ns_list[4]->index=5
+subsystem_ns_list[4]->discovery->index=2
+subsystem_ns_list[4]->num_hfis=1
+subsystem_ns_list[4]->hfis[0]->index=2
+subsystem_ns_list[4]->transport=tcp
+subsystem_ns_list[4]->traddr=4321::bbbb:1
+subsystem_ns_list[4]->trsvcid=4420
+subsystem_ns_list[4]->subsys_port_id=0
+subsystem_ns_list[4]->nsid=0
+subsystem_ns_list[4]->nid_type=0
+subsystem_ns_list[4]->nid=0000000000000000
+subsystem_ns_list[4]->subsys_nqn=nqn.2014-08.org.nvmexpress.discovery
+subsystem_ns_list[4]->pdu_header_digest_required=0
+subsystem_ns_list[4]->data_digest_required=0
+subsystem_ns_list[4]->controller_id=0
+subsystem_ns_list[4]->asqsz=0
+subsystem_ns_list[4]->dhcp_root_path_string=(null)
+subsystem_ns_list[4]->discovered=1
+subsystem_ns_list[4]->unavailable=1
diff --git a/test/nbft/diffs/NBFT-rhpoc b/test/nbft/diffs/NBFT-rhpoc
index d849b6e..027ea40 100644
--- a/test/nbft/diffs/NBFT-rhpoc
+++ b/test/nbft/diffs/NBFT-rhpoc
@@ -36,3 +36,5 @@ subsystem_ns_list[0]->data_digest_required=0
subsystem_ns_list[0]->controller_id=12
subsystem_ns_list[0]->asqsz=0
subsystem_ns_list[0]->dhcp_root_path_string=(null)
+subsystem_ns_list[0]->discovered=0
+subsystem_ns_list[0]->unavailable=0
diff --git a/test/nbft/diffs/NBFT-static-ipv4 b/test/nbft/diffs/NBFT-static-ipv4
index a6f3859..697d0e5 100644
--- a/test/nbft/diffs/NBFT-static-ipv4
+++ b/test/nbft/diffs/NBFT-static-ipv4
@@ -36,3 +36,5 @@ subsystem_ns_list[0]->data_digest_required=0
subsystem_ns_list[0]->controller_id=38
subsystem_ns_list[0]->asqsz=0
subsystem_ns_list[0]->dhcp_root_path_string=(null)
+subsystem_ns_list[0]->discovered=0
+subsystem_ns_list[0]->unavailable=0
diff --git a/test/nbft/diffs/NBFT-static-ipv4-discovery b/test/nbft/diffs/NBFT-static-ipv4-discovery
index 5bf0e46..22473a0 100644
--- a/test/nbft/diffs/NBFT-static-ipv4-discovery
+++ b/test/nbft/diffs/NBFT-static-ipv4-discovery
@@ -41,3 +41,5 @@ subsystem_ns_list[0]->data_digest_required=0
subsystem_ns_list[0]->controller_id=13
subsystem_ns_list[0]->asqsz=0
subsystem_ns_list[0]->dhcp_root_path_string=(null)
+subsystem_ns_list[0]->discovered=1
+subsystem_ns_list[0]->unavailable=0
diff --git a/test/nbft/diffs/NBFT-static-ipv6 b/test/nbft/diffs/NBFT-static-ipv6
index c6ad844..12554f5 100644
--- a/test/nbft/diffs/NBFT-static-ipv6
+++ b/test/nbft/diffs/NBFT-static-ipv6
@@ -36,3 +36,5 @@ subsystem_ns_list[0]->data_digest_required=0
subsystem_ns_list[0]->controller_id=9
subsystem_ns_list[0]->asqsz=0
subsystem_ns_list[0]->dhcp_root_path_string=(null)
+subsystem_ns_list[0]->discovered=0
+subsystem_ns_list[0]->unavailable=0
diff --git a/test/nbft/meson.build b/test/nbft/meson.build
index 919bf83..7882df6 100644
--- a/test/nbft/meson.build
+++ b/test/nbft/meson.build
@@ -19,7 +19,9 @@ tables = [
'NBFT-static-ipv4-discovery',
'NBFT-static-ipv6',
'NBFT-Dell.PowerEdge.R760',
- 'NBFT-Dell.PowerEdge.R660-fw1.5.5-single'
+ 'NBFT-Dell.PowerEdge.R660-fw1.5.5-single',
+ 'NBFT-Dell.PowerEdge.R660-fw1.5.5-mpath+discovery',
+ 'NBFT-mpath+disc-ipv4+6_half'
]
tables_bad = [
diff --git a/test/nbft/nbft-dump.c b/test/nbft/nbft-dump.c
index 3ff5efa..5fb2f2e 100644
--- a/test/nbft/nbft-dump.c
+++ b/test/nbft/nbft-dump.c
@@ -96,6 +96,8 @@ static void print_nbft(struct nbft_info *table)
printf("subsystem_ns_list[%u]->controller_id=%d\n", i, (*ssns)->controller_id);
printf("subsystem_ns_list[%u]->asqsz=%d\n", i, (*ssns)->asqsz);
printf("subsystem_ns_list[%u]->dhcp_root_path_string=%s\n", i, (*ssns)->dhcp_root_path_string);
+ printf("subsystem_ns_list[%u]->discovered=%d\n", i, (*ssns)->discovered);
+ printf("subsystem_ns_list[%u]->unavailable=%d\n", i, (*ssns)->unavailable);
}
}
diff --git a/test/nbft/tables/NBFT-Dell.PowerEdge.R660-fw1.5.5-mpath+discovery b/test/nbft/tables/NBFT-Dell.PowerEdge.R660-fw1.5.5-mpath+discovery
new file mode 100644
index 0000000..0fbb35c
--- /dev/null
+++ b/test/nbft/tables/NBFT-Dell.PowerEdge.R660-fw1.5.5-mpath+discovery
Binary files differ
diff --git a/test/nbft/tables/NBFT-mpath+disc-ipv4+6_half b/test/nbft/tables/NBFT-mpath+disc-ipv4+6_half
new file mode 100644
index 0000000..13333b1
--- /dev/null
+++ b/test/nbft/tables/NBFT-mpath+disc-ipv4+6_half
Binary files differ
diff --git a/test/register.c b/test/register.c
index 8a41628..1fb692b 100644
--- a/test/register.c
+++ b/test/register.c
@@ -79,10 +79,13 @@ void nvme_print_registers(void *regs)
printf(" %-8s : %llx\n", "NSSRC", NVME_CAP_NSSRC(cap));
printf(" %-8s : %llx\n", "CSS", NVME_CAP_CSS(cap));
printf(" %-8s : %llx\n", "BPS", NVME_CAP_BPS(cap));
+ printf(" %-8s : %llx\n", "CPS", NVME_CAP_CPS(cap));
printf(" %-8s : %llx\n", "MPSMIN", NVME_CAP_MPSMIN(cap));
printf(" %-8s : %llx\n", "MPSMAX", NVME_CAP_MPSMAX(cap));
- printf(" %-8s : %llx\n", "CMBS", NVME_CAP_CMBS(cap));
printf(" %-8s : %llx\n", "PMRS", NVME_CAP_PMRS(cap));
+ printf(" %-8s : %llx\n", "CMBS", NVME_CAP_CMBS(cap));
+ printf(" %-8s : %llx\n", "NSSS", NVME_CAP_NSSS(cap));
+ printf(" %-8s : %llx\n", "CRMS", NVME_CAP_CRMS(cap));
printf("%-10s : %x\n", "VS", vs);
printf(" %-8s : %x\n", "MJR", NVME_VS_TER(vs));
@@ -107,6 +110,7 @@ void nvme_print_registers(void *regs)
printf(" %-8s : %x\n", "SHST", NVME_CSTS_SHST(csts));
printf(" %-8s : %x\n", "NSSRO", NVME_CSTS_NSSRO(csts));
printf(" %-8s : %x\n", "PP", NVME_CSTS_PP(csts));
+ printf(" %-8s : %x\n", "ST", NVME_CSTS_ST(csts));
printf("%-10s : %x\n", "NSSR", nssr);
@@ -162,7 +166,7 @@ void nvme_print_registers(void *regs)
printf(" %-8s : %x\n", "WDS", NVME_PMRCAP_WDS(pmrcap));
printf(" %-8s : %x\n", "BIR", NVME_PMRCAP_BIR(pmrcap));
printf(" %-8s : %x\n", "PMRTU", NVME_PMRCAP_PMRTU(pmrcap));
- printf(" %-8s : %x\n", "PMRWMB", NVME_PMRCAP_PMRWMB(pmrcap));
+ printf(" %-8s : %x\n", "PMRWBM", NVME_PMRCAP_PMRWBM(pmrcap));
printf(" %-8s : %x\n", "PMRTO", NVME_PMRCAP_PMRTO(pmrcap));
printf(" %-8s : %x\n", "CMSS", NVME_PMRCAP_CMSS(pmrcap));
diff --git a/test/sysfs/meson.build b/test/sysfs/meson.build
index c004fc0..119fa97 100644
--- a/test/sysfs/meson.build
+++ b/test/sysfs/meson.build
@@ -5,25 +5,32 @@
#
# Authors: Daniel Wagner <dwagner@suse.de>
+diff = find_program('diff', required : false)
+if diff.found()
+ sysfs_tree_print = executable(
+ 'sysfs-tree-print',
+ ['sysfs.c'],
+ dependencies: libnvme_dep,
+ include_directories: [incdir],
+ )
-sysfs = executable(
- 'test-sysfs',
- ['sysfs.c'],
- dependencies: libnvme_dep,
- include_directories: [incdir, internal_incdir]
-)
+ sysfs_files= [
+ 'nvme-sysfs-tw-carbon-6.8.0-rc1+'
+ ]
-sysfs_files= [
- 'nvme-sysfs-tw-carbon-6.8.0-rc1+'
-]
+ sysfs_tree_diff = find_program('sysfs-tree-diff.sh')
-setup = find_program('setup.sh')
-
-foreach t_file : sysfs_files
- r = run_command(setup, files('data'/t_file + '.tar.xz'), meson.current_build_dir(), check: true)
- i = r.stdout().strip()
- e0 = 'LIBNVME_SYSFS_PATH=' + i
- e1 = 'LIBNVME_HOSTNQN=nqn.2014-08.org.nvmexpress:uuid:ce4fee3e-c02c-11ee-8442-830d068a36c6'
- e2 = 'LIBNVME_HOSTID=ce4fee3e-c02c-11ee-8442-830d068a36c6'
- test('sysfs', sysfs, args : [ i, t_file + '.out', files('data'/t_file + '.out') ], env : [ e0, e1, e2 ])
-endforeach
+ foreach t_file : sysfs_files
+ test(
+ 'sysfs',
+ sysfs_tree_diff,
+ args : [
+ meson.current_build_dir(),
+ sysfs_tree_print.full_path(),
+ files('data'/t_file + '.tar.xz'),
+ files('data'/t_file + '.out'),
+ ],
+ depends : sysfs_tree_print,
+ )
+ endforeach
+endif
diff --git a/test/sysfs/setup.sh b/test/sysfs/setup.sh
deleted file mode 100755
index 3437d4e..0000000
--- a/test/sysfs/setup.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env bash
-# SPDX-License-Identifier: LGPL-2.1-or-later
-
-TARFILE=$1
-BASEDIR=$2
-TESTDIR="$BASEDIR/$(basename -s .tar.xz ${TARFILE})"
-
-mkdir -p "${TESTDIR}"
-tar -x -f "${TARFILE}" -C "${TESTDIR}" || exit 1
-
-echo "${TESTDIR}"
diff --git a/test/sysfs/sysfs-tree-diff.sh b/test/sysfs/sysfs-tree-diff.sh
new file mode 100644
index 0000000..dfe3cb3
--- /dev/null
+++ b/test/sysfs/sysfs-tree-diff.sh
@@ -0,0 +1,22 @@
+#!/bin/bash -e
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+BUILD_DIR=$1
+SYSFS_TREE_PRINT=$2
+INPUT=$3
+EXPECTED_OUTPUT=$4
+
+TEST_NAME="$(basename -s .tar.xz $INPUT)"
+TEST_DIR="$BUILD_DIR/$TEST_NAME"
+ACTUAL_OUTPUT="$TEST_DIR.out"
+
+rm -rf "$TEST_DIR"
+mkdir "$TEST_DIR"
+tar -x -f "$INPUT" -C "$TEST_DIR"
+
+LIBNVME_SYSFS_PATH="$TEST_DIR" \
+LIBNVME_HOSTNQN=nqn.2014-08.org.nvmexpress:uuid:ce4fee3e-c02c-11ee-8442-830d068a36c6 \
+LIBNVME_HOSTID=ce4fee3e-c02c-11ee-8442-830d068a36c6 \
+"$SYSFS_TREE_PRINT" > "$ACTUAL_OUTPUT"
+
+diff -u "$EXPECTED_OUTPUT" "$ACTUAL_OUTPUT"
diff --git a/test/sysfs/sysfs.c b/test/sysfs/sysfs.c
index c2df178..06d0035 100644
--- a/test/sysfs/sysfs.c
+++ b/test/sysfs/sysfs.c
@@ -4,86 +4,21 @@
* Copyright (c) 2024 Daniel Wagner, SUSE LLC
*/
-#include "nvme/tree.h"
#include <assert.h>
-#include <errno.h>
-#include <string.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <arpa/inet.h>
-
-#include <ccan/array_size/array_size.h>
#include <libnvme.h>
-#include <nvme/private.h>
-static bool test_sysfs(const char *path, const char *filename)
+int main(int argc, char *argv[])
{
- FILE *f;
nvme_root_t r;
- int err;
-
- f = fopen(filename, "w");
- if (!f)
- return false;
- r = nvme_create_root(f, LOG_ERR);
+ r = nvme_create_root(stdout, LOG_ERR);
assert(r);
- err = nvme_scan_topology(r, NULL, NULL);
- if (!err)
- nvme_dump_tree(r);
- fprintf(f, "\n");
-
- nvme_free_tree(r);
- fclose(f);
-
- return err == 0;
-}
-
-static bool compare_content(const char *filename1, const char *filename2)
-{
- FILE *f1, *f2;
- char c1, c2;
- bool pass = false;
-
- f1 = fopen(filename1, "r");
- if (!f1)
- return false;
+ assert(nvme_scan_topology(r, NULL, NULL) == 0);
- f2 = fopen(filename2, "r");
- if (!f2) {
- fclose(f1);
- return false;
- }
+ assert(nvme_dump_tree(r) == 0);
+ printf("\n");
- do {
- c1 = getc(f1);
- c2 = getc(f2);
- if (c1 != c2)
- goto out;
- } while (c1 != EOF || c2 != EOF);
-
- if (c1 == c2)
- pass = true;
-out:
- fclose(f1);
- fclose(f2);
-
- return pass;
-}
-
-int main(int argc, char *argv[])
-{
- bool pass = true;
-
- if (argc < 4) {
- fprintf(stderr, "usage: test-sysfs SYSFS_DIR OUTPUT_FILE COMPARE_FILE\n");
- return EXIT_FAILURE;
- }
-
- pass &= test_sysfs(argv[1], argv[2]);
- pass &= compare_content(argv[2], argv[3]);
-
- exit(pass ? EXIT_SUCCESS : EXIT_FAILURE);
+ nvme_free_tree(r);
}
diff --git a/test/test-util.c b/test/test-util.c
index 88a3f42..6bee89b 100644
--- a/test/test-util.c
+++ b/test/test-util.c
@@ -89,6 +89,58 @@ static bool test_ipaddrs_eq() {
return test_success;
}
+static bool test_nvme_id_ns_flbas_to_lbaf_inuse() {
+ const __u8 flbas[] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
+ };
+ const __u8 inuse[] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
+ };
+ __u8 test_in_use;
+ bool result, test_success = true;
+
+ for (int i = 0; i < sizeof(flbas); i++) {
+ nvme_id_ns_flbas_to_lbaf_inuse(flbas[i], &test_in_use);
+ result = (test_in_use == inuse[i] ? true : false);
+ printf("flbas = 0x%02x, inuse = 0x%02x (expect = 0x%02x) %s\n",
+ flbas[i], test_in_use, inuse[i],
+ result ? "[PASS]" : "[FAIL]");
+ if (!result)
+ test_success = false;
+ }
+ return test_success;
+}
+
int main(int argc, char *argv[]) {
int exit_val = EXIT_SUCCESS;
bool pass;
@@ -117,5 +169,11 @@ int main(int argc, char *argv[]) {
if (!pass)
exit_val = EXIT_FAILURE;
+ printf("\n------------------------------------------------------------------------------\n");
+ pass = test_nvme_id_ns_flbas_to_lbaf_inuse();
+ printf("nvme_id_ns_flbas_to_lbaf_inuse() %s\n", pass ? "[PASS]" : "[FAIL]");
+ if (!pass)
+ exit_val = EXIT_FAILURE;
+
exit(exit_val);
}