diff options
Diffstat (limited to 'utils')
-rw-r--r-- | utils/imxtools/scsitools/scsitool.c | 66 |
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 | ||
347 | static 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 | |||
364 | static 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 | |||
347 | static const char *stmp_get_logical_media_type_string(uint32_t type) | 381 | static 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 | { |