summaryrefslogtreecommitdiff
path: root/utils/nwztools
diff options
context:
space:
mode:
Diffstat (limited to 'utils/nwztools')
-rw-r--r--utils/nwztools/scsitools/scsitool.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/utils/nwztools/scsitools/scsitool.c b/utils/nwztools/scsitools/scsitool.c
index 69e3ac8af1..9f241117af 100644
--- a/utils/nwztools/scsitools/scsitool.c
+++ b/utils/nwztools/scsitools/scsitool.c
@@ -595,6 +595,29 @@ int get_dev_info(int argc, char **argv)
595 return 0; 595 return 0;
596} 596}
597 597
598int do_fw_upgrade(int argc, char **argv)
599{
600 (void) argc;
601 (void )argv;
602 uint8_t cdb[12] = {0xfc, 0, 0x04, 'd', 'b', 'm', 'n', 0, 0x80, 0, 0, 0};
603
604 char *buffer = buffer_alloc(0x81);
605 int buffer_size = 0x80;
606 uint8_t sense[32];
607 int sense_size = 32;
608
609 int ret = do_scsi(cdb, 12, DO_READ, sense, &sense_size, buffer, &buffer_size);
610 if(ret < 0)
611 return ret;
612 ret = do_sense_analysis(ret, sense, sense_size);
613 if(ret)
614 return ret;
615 buffer[buffer_size] = 0;
616 cprintf_field("Result:", "\n");
617 print_hex(buffer, buffer_size);
618 return 0;
619}
620
598typedef int (*cmd_fn_t)(int argc, char **argv); 621typedef int (*cmd_fn_t)(int argc, char **argv);
599 622
600struct cmd_t 623struct cmd_t
@@ -611,6 +634,7 @@ struct cmd_t cmd_list[] =
611 { "get_dpcc_prop", "Get DPCC property", get_dpcc_prop }, 634 { "get_dpcc_prop", "Get DPCC property", get_dpcc_prop },
612 { "get_user_time", "Get user time", get_user_time }, 635 { "get_user_time", "Get user time", get_user_time },
613 { "get_dev_info", "Get device info", get_dev_info }, 636 { "get_dev_info", "Get device info", get_dev_info },
637 { "do_fw_upgrade", "Do a firmware upgrade", do_fw_upgrade },
614}; 638};
615 639
616#define NR_CMDS (sizeof(cmd_list) / sizeof(cmd_list[0])) 640#define NR_CMDS (sizeof(cmd_list) / sizeof(cmd_list[0]))