@@ -228,6 +228,7 @@ enum nvme_cmd_dword_fields {
228228 NVME_LOG_CDW11_LSI_SHIFT = 16 ,
229229 NVME_LOG_CDW14_UUID_SHIFT = 0 ,
230230 NVME_LOG_CDW14_CSI_SHIFT = 24 ,
231+ NVME_LOG_CDW14_OT_SHIFT = 23 ,
231232 NVME_LOG_CDW10_LID_MASK = 0xff ,
232233 NVME_LOG_CDW10_LSP_MASK = 0xf ,
233234 NVME_LOG_CDW10_RAE_MASK = 0x1 ,
@@ -236,6 +237,7 @@ enum nvme_cmd_dword_fields {
236237 NVME_LOG_CDW11_LSI_MASK = 0xff ,
237238 NVME_LOG_CDW14_UUID_MASK = 0x7f ,
238239 NVME_LOG_CDW14_CSI_MASK = 0xff ,
240+ NVME_LOG_CDW14_OT_MASK = 0x1 ,
239241 NVME_IDENTIFY_CDW10_CNS_SHIFT = 0 ,
240242 NVME_IDENTIFY_CDW10_CNTID_SHIFT = 16 ,
241243 NVME_IDENTIFY_CDW11_NVMSETID_SHIFT = 0 ,
@@ -594,7 +596,7 @@ int nvme_nvm_identify_ctrl(int fd, struct nvme_id_ctrl_nvm *id)
594596
595597int nvme_get_log (int fd , enum nvme_cmd_get_log_lid lid , __u32 nsid , __u64 lpo ,
596598 __u8 lsp , __u16 lsi , bool rae , __u8 uuidx , enum nvme_csi csi ,
597- __u32 len , void * log , __u32 timeout , __u32 * result )
599+ bool ot , __u32 len , void * log , __u32 timeout , __u32 * result )
598600{
599601 __u32 numd = (len >> 2 ) - 1 ;
600602 __u16 numdu = numd >> 16 , numdl = numd & 0xffff ;
@@ -608,7 +610,8 @@ int nvme_get_log(int fd, enum nvme_cmd_get_log_lid lid, __u32 nsid, __u64 lpo,
608610 __u32 cdw12 = lpo & 0xffffffff ;
609611 __u32 cdw13 = lpo >> 32 ;
610612 __u32 cdw14 = NVME_SET (uuidx , LOG_CDW14_UUID ) |
611- NVME_SET (csi , LOG_CDW14_CSI );
613+ NVME_SET (csi , LOG_CDW14_CSI ) |
614+ NVME_SET (!!ot , LOG_CDW14_OT );
612615
613616 struct nvme_passthru_cmd cmd = {
614617 .opcode = nvme_admin_get_log_page ,
@@ -631,8 +634,8 @@ static int __nvme_get_log(int fd, enum nvme_cmd_get_log_lid lid, bool rae,
631634{
632635 return nvme_get_log (fd , lid , NVME_NSID_ALL , 0 , NVME_LOG_LSP_NONE ,
633636 NVME_LOG_LSI_NONE , rae , NVME_UUID_NONE ,
634- NVME_CSI_NVM , len , log , NVME_DEFAULT_IOCTL_TIMEOUT ,
635- NULL );
637+ NVME_CSI_NVM , false, len , log ,
638+ NVME_DEFAULT_IOCTL_TIMEOUT , NULL );
636639}
637640
638641int nvme_get_log_supported_log_pages (int fd , bool rae ,
@@ -656,8 +659,9 @@ int nvme_get_log_smart(int fd, __u32 nsid, bool rae, struct nvme_smart_log *log)
656659 BUILD_ASSERT (sizeof (struct nvme_smart_log ) == 512 );
657660 return nvme_get_log (fd , NVME_LOG_LID_SMART , nsid , 0 ,
658661 NVME_LOG_LSP_NONE , NVME_LOG_LSI_NONE , rae ,
659- NVME_UUID_NONE , NVME_CSI_NVM , sizeof (* log ), log ,
660- NVME_DEFAULT_IOCTL_TIMEOUT , NULL );
662+ NVME_UUID_NONE , NVME_CSI_NVM , false,
663+ sizeof (* log ), log , NVME_DEFAULT_IOCTL_TIMEOUT ,
664+ NULL );
661665}
662666
663667int nvme_get_log_fw_slot (int fd , bool rae , struct nvme_firmware_slot * log )
@@ -679,7 +683,7 @@ int nvme_get_log_cmd_effects(int fd, enum nvme_csi csi,
679683 BUILD_ASSERT (sizeof (struct nvme_cmd_effects_log ) == 4096 );
680684 return nvme_get_log (fd , NVME_LOG_LID_CMD_EFFECTS , NVME_NSID_ALL , 0 ,
681685 NVME_LOG_LSP_NONE , NVME_LOG_LSI_NONE ,
682- NVME_UUID_NONE , csi , false, sizeof (* log ),
686+ NVME_UUID_NONE , csi , false, false, sizeof (* log ),
683687 log , NVME_DEFAULT_IOCTL_TIMEOUT , NULL );
684688}
685689
@@ -700,25 +704,26 @@ int nvme_get_log_create_telemetry_host(int fd, struct nvme_telemetry_log *log)
700704 BUILD_ASSERT (sizeof (struct nvme_telemetry_log ) == 512 );
701705 return nvme_get_log (fd , NVME_LOG_LID_TELEMETRY_HOST , NVME_NSID_NONE , 0 ,
702706 NVME_LOG_TELEM_HOST_LSP_CREATE , NVME_LOG_LSI_NONE ,
703- false, NVME_UUID_NONE , NVME_CSI_NVM , sizeof (* log ),
704- log , NVME_DEFAULT_IOCTL_TIMEOUT , NULL );
707+ false, NVME_UUID_NONE , NVME_CSI_NVM , false,
708+ sizeof (* log ), log , NVME_DEFAULT_IOCTL_TIMEOUT ,
709+ NULL );
705710}
706711
707712int nvme_get_log_telemetry_host (int fd , __u64 offset , __u32 len , void * log )
708713{
709714 return nvme_get_log (fd , NVME_LOG_LID_TELEMETRY_HOST , NVME_NSID_NONE ,
710715 offset , NVME_LOG_TELEM_HOST_LSP_RETAIN ,
711716 NVME_LOG_LSI_NONE , false, NVME_UUID_NONE ,
712- NVME_CSI_NVM , len , log , NVME_DEFAULT_IOCTL_TIMEOUT ,
713- NULL );
717+ NVME_CSI_NVM , false, len , log ,
718+ NVME_DEFAULT_IOCTL_TIMEOUT , NULL );
714719}
715720
716721int nvme_get_log_telemetry_ctrl (int fd , bool rae , __u64 offset , __u32 len ,
717722 void * log )
718723{
719724 return nvme_get_log (fd , NVME_LOG_LID_TELEMETRY_CTRL , NVME_NSID_NONE ,
720725 offset , NVME_LOG_LSP_NONE , NVME_LOG_LSI_NONE , rae ,
721- NVME_UUID_NONE , NVME_CSI_NVM , len , log ,
726+ NVME_UUID_NONE , NVME_CSI_NVM , false, len , log ,
722727 NVME_DEFAULT_IOCTL_TIMEOUT , NULL );
723728}
724729
@@ -728,7 +733,7 @@ int nvme_get_log_endurance_group(int fd, __u16 endgid,
728733 BUILD_ASSERT (sizeof (struct nvme_endurance_group_log ) == 512 );
729734 return nvme_get_log (fd , NVME_LOG_LID_ENDURANCE_GROUP , NVME_NSID_NONE ,
730735 0 , NVME_LOG_LSP_NONE , endgid , false, NVME_UUID_NONE ,
731- NVME_CSI_NVM , sizeof (* log ), log ,
736+ NVME_CSI_NVM , false, sizeof (* log ), log ,
732737 NVME_DEFAULT_IOCTL_TIMEOUT , NULL );
733738}
734739
@@ -738,8 +743,9 @@ int nvme_get_log_predictable_lat_nvmset(int fd, __u16 nvmsetid,
738743 BUILD_ASSERT (sizeof (struct nvme_nvmset_predictable_lat_log ) == 512 );
739744 return nvme_get_log (fd , NVME_LOG_LID_PREDICTABLE_LAT_NVMSET ,
740745 NVME_NSID_NONE , 0 , NVME_LOG_LSP_NONE , nvmsetid ,
741- false, NVME_UUID_NONE , NVME_CSI_NVM , sizeof (* log ),
742- log , NVME_DEFAULT_IOCTL_TIMEOUT , NULL );
746+ false, NVME_UUID_NONE , NVME_CSI_NVM , false,
747+ sizeof (* log ),log , NVME_DEFAULT_IOCTL_TIMEOUT ,
748+ NULL );
743749}
744750
745751int nvme_get_log_predictable_lat_event (int fd , bool rae , __u32 offset ,
@@ -748,7 +754,7 @@ int nvme_get_log_predictable_lat_event(int fd, bool rae, __u32 offset,
748754 return nvme_get_log (fd , NVME_LOG_LID_PREDICTABLE_LAT_AGG ,
749755 NVME_NSID_NONE , offset , NVME_LOG_LSP_NONE ,
750756 NVME_LOG_LSI_NONE , rae , NVME_UUID_NONE ,
751- NVME_CSI_NVM , len , log ,
757+ NVME_CSI_NVM , false, len , log ,
752758 NVME_DEFAULT_IOCTL_TIMEOUT , NULL );
753759}
754760
@@ -757,8 +763,8 @@ int nvme_get_log_ana(int fd, enum nvme_log_ana_lsp lsp, bool rae, __u64 offset,
757763{
758764 return nvme_get_log (fd , NVME_LOG_LID_ANA , NVME_NSID_NONE , offset ,
759765 lsp , NVME_LOG_LSI_NONE , false, NVME_UUID_NONE ,
760- NVME_CSI_NVM , len , log , NVME_DEFAULT_IOCTL_TIMEOUT ,
761- NULL );
766+ NVME_CSI_NVM , false, len , log ,
767+ NVME_DEFAULT_IOCTL_TIMEOUT , NULL );
762768}
763769
764770int nvme_get_log_ana_groups (int fd , bool rae , __u32 len ,
@@ -773,7 +779,7 @@ int nvme_get_log_lba_status(int fd, bool rae, __u64 offset, __u32 len,
773779{
774780 return nvme_get_log (fd , NVME_LOG_LID_LBA_STATUS , NVME_NSID_NONE ,
775781 offset , NVME_LOG_LSP_NONE , NVME_LOG_LSI_NONE , rae ,
776- NVME_UUID_NONE , NVME_CSI_NVM , len , log ,
782+ NVME_UUID_NONE , NVME_CSI_NVM , false, len , log ,
777783 NVME_DEFAULT_IOCTL_TIMEOUT , NULL );
778784}
779785
@@ -783,8 +789,8 @@ int nvme_get_log_endurance_grp_evt(int fd, bool rae, __u32 offset, __u32 len,
783789 return nvme_get_log (fd , NVME_LOG_LID_ENDURANCE_GRP_EVT ,
784790 NVME_NSID_NONE , offset , NVME_LOG_LSP_NONE ,
785791 NVME_LOG_LSI_NONE , rae , NVME_UUID_NONE ,
786- NVME_CSI_NVM , len , log , NVME_DEFAULT_IOCTL_TIMEOUT ,
787- NULL );
792+ NVME_CSI_NVM , false, len , log ,
793+ NVME_DEFAULT_IOCTL_TIMEOUT , NULL );
788794}
789795
790796int nvme_get_log_fid_supported_effects (int fd , bool rae ,
@@ -794,7 +800,7 @@ int nvme_get_log_fid_supported_effects(int fd, bool rae,
794800 return nvme_get_log (fd , NVME_LOG_LID_FID_SUPPORTED_EFFECTS ,
795801 NVME_NSID_NONE , 0 , NVME_LOG_LSP_NONE ,
796802 NVME_LOG_LSI_NONE , rae , NVME_UUID_NONE ,
797- NVME_CSI_NVM , sizeof (* log ), log ,
803+ NVME_CSI_NVM , false, sizeof (* log ), log ,
798804 NVME_DEFAULT_IOCTL_TIMEOUT , NULL );
799805}
800806
@@ -805,7 +811,7 @@ int nvme_get_log_boot_partition(int fd, bool rae, __u8 lsp, __u32 len,
805811 return nvme_get_log (fd , NVME_LOG_LID_BOOT_PARTITION ,
806812 NVME_NSID_NONE , 0 , NVME_LOG_LSP_NONE ,
807813 NVME_LOG_LSI_NONE , rae , NVME_UUID_NONE ,
808- NVME_CSI_NVM , len , part ,
814+ NVME_CSI_NVM , false, len , part ,
809815 NVME_DEFAULT_IOCTL_TIMEOUT , NULL );
810816
811817}
@@ -814,7 +820,7 @@ int nvme_get_log_discovery(int fd, bool rae, __u32 offset, __u32 len, void *log)
814820{
815821 return nvme_get_log (fd , NVME_LOG_LID_DISCOVER , NVME_NSID_NONE , offset ,
816822 NVME_LOG_LSP_NONE , NVME_LOG_LSI_NONE , rae ,
817- NVME_UUID_NONE , NVME_CSI_NVM , len , log ,
823+ NVME_UUID_NONE , NVME_CSI_NVM , false, len , log ,
818824 NVME_DEFAULT_IOCTL_TIMEOUT , NULL );
819825}
820826
@@ -847,8 +853,9 @@ int nvme_get_log_zns_changed_zones(int fd, __u32 nsid, bool rae,
847853 BUILD_ASSERT (sizeof (struct nvme_zns_changed_zone_log ) == 4096 );
848854 return nvme_get_log (fd , NVME_LOG_LID_ZNS_CHANGED_ZONES , nsid , 0 ,
849855 NVME_LOG_LSP_NONE , NVME_LOG_LSI_NONE , rae ,
850- NVME_UUID_NONE , NVME_CSI_ZNS , sizeof (* log ), log ,
851- NVME_DEFAULT_IOCTL_TIMEOUT , NULL );
856+ NVME_UUID_NONE , NVME_CSI_ZNS , false,
857+ sizeof (* log ), log , NVME_DEFAULT_IOCTL_TIMEOUT ,
858+ NULL );
852859}
853860
854861int nvme_set_features (int fd , __u8 fid , __u32 nsid , __u32 cdw11 , __u32 cdw12 ,
0 commit comments