summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to 'utils')
-rw-r--r--utils/imxtools/scsitools/scsitool.c66
1 files changed, 64 insertions, 2 deletions
diff --git a/utils/imxtools/scsitools/scsitool.c b/utils/imxtools/scsitools/scsitool.c
index 8c124ee9f3..bb68fd882c 100644
--- a/utils/imxtools/scsitools/scsitool.c
+++ b/utils/imxtools/scsitools/scsitool.c
@@ -344,6 +344,40 @@ static int stmp_get_logical_drive_info(uint8_t drive, uint8_t info, void *data,
344 return do_sense_analysis(ret, sense, sense_size); 344 return do_sense_analysis(ret, sense, sense_size);
345} 345}
346 346
347static int stmp_get_device_info(uint8_t info, void *data, int *len)
348{
349 uint8_t cdb[16];
350 memset(cdb, 0, sizeof(cdb));
351 cdb[0] = SCSI_STMP_READ;
352 cdb[1] = SCSI_STMP_CMD_GET_DEVICE_INFO;
353 cdb[2] = info;
354
355 uint8_t sense[32];
356 int sense_size = sizeof(sense);
357
358 int ret = do_scsi(cdb, sizeof(cdb), DO_READ, sense, &sense_size, data, len);
359 if(ret < 0)
360 return ret;
361 return do_sense_analysis(ret, sense, sense_size);
362}
363
364static int stmp_get_serial_number(uint8_t info, void *data, int *len)
365{
366 uint8_t cdb[16];
367 memset(cdb, 0, sizeof(cdb));
368 cdb[0] = SCSI_STMP_READ;
369 cdb[1] = SCSI_STMP_CMD_GET_CHIP_SERIAL_NUMBER;
370 cdb[2] = info;
371
372 uint8_t sense[32];
373 int sense_size = sizeof(sense);
374
375 int ret = do_scsi(cdb, sizeof(cdb), DO_READ, sense, &sense_size, data, len);
376 if(ret < 0)
377 return ret;
378 return do_sense_analysis(ret, sense, sense_size);
379}
380
347static const char *stmp_get_logical_media_type_string(uint32_t type) 381static const char *stmp_get_logical_media_type_string(uint32_t type)
348{ 382{
349 switch(type) 383 switch(type)
@@ -417,10 +451,38 @@ static int do_work(void)
417 uint16_t u16; 451 uint16_t u16;
418 uint32_t u32; 452 uint32_t u32;
419 uint64_t u64; 453 uint64_t u64;
420 uint8_t buf[52]; 454 uint8_t buf[1024];
421 }u; 455 }u;
422 456
423 int len = 2; 457 cprintf(GREEN, " Device\n");
458 int len = 4;
459 ret = stmp_get_device_info(0, &u.u32, &len);
460 if(!ret && len == 4)
461 {
462 u.u32 = fix_endian32be(u.u32);
463 cprintf_field(" Info 0: ", "%lu", (unsigned long)u.u32);
464 }
465
466 len = 4;
467 ret = stmp_get_device_info(1, &u.u32, &len);
468 if(!ret && len == 4)
469 {
470 u.u32 = fix_endian32be(u.u32);
471 cprintf_field(" Info 1: ", "%lu", (unsigned long)u.u32);
472 }
473
474 len = 2;
475 ret = stmp_get_serial_number(0, &u.u16, &len);
476 if(!ret && len == 2)
477 {
478 u.u16 = fix_endian16be(u.u16);
479 len = MIN(u.u16, sizeof(u.buf));
480 ret = stmp_get_serial_number(1, u.buf, &len);
481 cprintf_field(" Serial Number:", " ");
482 print_hex(u.buf, len);
483 }
484
485 len = 2;
424 ret = stmp_get_logical_media_info(0, &u.u16, &len); 486 ret = stmp_get_logical_media_info(0, &u.u16, &len);
425 if(!ret && len == 2) 487 if(!ret && len == 2)
426 { 488 {