@@ -10790,6 +10790,85 @@ static int get_ave_discovery_log(int argc, char **argv, struct command *cmd, str
1079010790 return err ;
1079110791}
1079210792
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+
1079310872void register_extension (struct plugin * plugin )
1079410873{
1079510874 plugin -> parent = & nvme ;
0 commit comments