@@ -10790,6 +10790,85 @@ static int get_ave_discovery_log(int argc, char **argv, struct command *cmd, str
10790
10790
return err ;
10791
10791
}
10792
10792
10793
+ static int get_pull_model_ddc_req (struct nvme_dev * dev ,
10794
+ bool rae , struct nvme_pull_model_ddc_req_log * * logp )
10795
+ {
10796
+ int err ;
10797
+ struct nvme_pull_model_ddc_req_log * log ;
10798
+ __u64 log_len = sizeof (* log );
10799
+ struct nvme_get_log_args args = {
10800
+ .args_size = sizeof (args ),
10801
+ .fd = dev_fd (dev ),
10802
+ .timeout = NVME_DEFAULT_IOCTL_TIMEOUT ,
10803
+ .lid = NVME_LOG_LID_PULL_MODEL_DDC_REQ ,
10804
+ .nsid = NVME_NSID_ALL ,
10805
+ .rae = rae ,
10806
+ };
10807
+
10808
+ log = nvme_alloc (log_len );
10809
+ if (!log )
10810
+ return - ENOMEM ;
10811
+
10812
+ err = nvme_cli_get_log_pull_model_ddc_req (dev , rae , log_len , log );
10813
+ if (err )
10814
+ goto err_free ;
10815
+
10816
+ log_len = le32_to_cpu (log -> tpdrpl );
10817
+ err = get_log_offset (dev , & args , & log_len , le32_to_cpu (log -> tpdrpl ) - log_len ,
10818
+ (void * * )& log );
10819
+ if (err )
10820
+ goto err_free ;
10821
+
10822
+ * logp = log ;
10823
+ return 0 ;
10824
+
10825
+ err_free :
10826
+ free (log );
10827
+ return err ;
10828
+ }
10829
+
10830
+ static int get_pull_model_ddc_req_log (int argc , char * * argv , struct command * cmd ,
10831
+ struct plugin * plugin )
10832
+ {
10833
+ const char * desc = "Retrieve Pull Model DDC Request Log, show it" ;
10834
+ nvme_print_flags_t flags ;
10835
+ int err ;
10836
+
10837
+ _cleanup_free_ struct nvme_pull_model_ddc_req_log * log = NULL ;
10838
+
10839
+ _cleanup_nvme_dev_ struct nvme_dev * dev = NULL ;
10840
+
10841
+ struct config {
10842
+ bool rae ;
10843
+ };
10844
+
10845
+ struct config cfg = {
10846
+ .rae = false,
10847
+ };
10848
+
10849
+ NVME_ARGS (opts , OPT_FLAG ("rae" , 'r' , & cfg .rae , rae ));
10850
+
10851
+ err = parse_and_open (& dev , argc , argv , desc , opts );
10852
+ if (err )
10853
+ return err ;
10854
+
10855
+ err = validate_output_format (nvme_cfg .output_format , & flags );
10856
+ if (err < 0 ) {
10857
+ nvme_show_error ("Invalid output format" );
10858
+ return err ;
10859
+ }
10860
+
10861
+ err = get_pull_model_ddc_req (dev , cfg .rae , & log );
10862
+ if (!err )
10863
+ nvme_show_pull_model_ddc_req_log (log , flags );
10864
+ else if (err > 0 )
10865
+ nvme_show_status (err );
10866
+ else
10867
+ nvme_show_perror ("pull model ddc req log" );
10868
+
10869
+ return err ;
10870
+ }
10871
+
10793
10872
void register_extension (struct plugin * plugin )
10794
10873
{
10795
10874
plugin -> parent = & nvme ;
0 commit comments