diff options
Diffstat (limited to 'utils/imxtools/scsitools/scsitool.c')
-rw-r--r-- | utils/imxtools/scsitools/scsitool.c | 214 |
1 files changed, 156 insertions, 58 deletions
diff --git a/utils/imxtools/scsitools/scsitool.c b/utils/imxtools/scsitools/scsitool.c index af06b7338c..d8d47f8b48 100644 --- a/utils/imxtools/scsitools/scsitool.c +++ b/utils/imxtools/scsitools/scsitool.c | |||
@@ -433,13 +433,64 @@ static const char *stmp_get_logical_drive_type_string(uint32_t type) | |||
433 | { | 433 | { |
434 | switch(type) | 434 | switch(type) |
435 | { | 435 | { |
436 | case SCSI_STMP_DRIVE_TYPE_USER: return "User"; | 436 | case SCSI_STMP_DRIVE_TYPE_DATA: return "Data"; |
437 | case SCSI_STMP_DRIVE_TYPE_SYSTEM: return "System"; | 437 | case SCSI_STMP_DRIVE_TYPE_SYSTEM: return "System"; |
438 | case SCSI_STMP_DRIVE_TYPE_DRM: return "DRM"; | 438 | case SCSI_STMP_DRIVE_TYPE_HIDDEN: return "Hidden"; |
439 | case SCSI_STMP_DRIVE_TYPE_UNKNOWN: return "Unknown"; | ||
439 | default: return "?"; | 440 | default: return "?"; |
440 | } | 441 | } |
441 | } | 442 | } |
442 | 443 | ||
444 | static const char *stmp_get_logical_drive_tag_string(uint8_t type) | ||
445 | { | ||
446 | switch(type) | ||
447 | { | ||
448 | case SCSI_STMP_DRIVE_TAG_STMPSYS_S: return "System"; | ||
449 | case SCSI_STMP_DRIVE_TAG_HOSTLINK_S: return "Hostlink"; | ||
450 | case SCSI_STMP_DRIVE_TAG_RESOURCE_BIN: return "Resource"; | ||
451 | case SCSI_STMP_DRIVE_TAG_EXTRA_S: return "Extra"; | ||
452 | case SCSI_STMP_DRIVE_TAG_RESOURCE1_BIN: return "Resource1"; | ||
453 | case SCSI_STMP_DRIVE_TAG_OTGHOST_S: return "OTG"; | ||
454 | case SCSI_STMP_DRIVE_TAG_HOSTRSC_BIN: return "Host Resource"; | ||
455 | case SCSI_STMP_DRIVE_TAG_DATA: return "Data"; | ||
456 | case SCSI_STMP_DRIVE_TAG_HIDDEN: return "Hidden"; | ||
457 | case SCSI_STMP_DRIVE_TAG_BOOTMANAGER_S: return "Boot"; | ||
458 | case SCSI_STMP_DRIVE_TAG_UPDATER_S: return "Updater"; | ||
459 | default: return "?"; | ||
460 | } | ||
461 | } | ||
462 | |||
463 | static const char *stmp_get_logical_media_state_string(uint8_t state) | ||
464 | { | ||
465 | switch(state) | ||
466 | { | ||
467 | case SCSI_STMP_MEDIA_STATE_UNKNOWN: return "Unknown"; | ||
468 | case SCSI_STMP_MEDIA_STATE_ERASED: return "Erased"; | ||
469 | case SCSI_STMP_MEDIA_STATE_ALLOCATED: return "Allocated"; | ||
470 | default: return "?"; | ||
471 | } | ||
472 | } | ||
473 | |||
474 | static const char *get_size_suffix(unsigned long long size) | ||
475 | { | ||
476 | int order = 0; | ||
477 | while(size >= 1024) | ||
478 | { | ||
479 | size /= 1024; | ||
480 | order++; | ||
481 | } | ||
482 | static const char *suffix[] = {"B", "KiB", "MiB", "GiB", "TiB"}; | ||
483 | return suffix[order]; | ||
484 | } | ||
485 | |||
486 | static float get_size_natural(unsigned long long size) | ||
487 | { | ||
488 | float res = size; | ||
489 | while(res >= 1024) | ||
490 | res /= 1024; | ||
491 | return res; | ||
492 | } | ||
493 | |||
443 | static int do_info(void) | 494 | static int do_info(void) |
444 | { | 495 | { |
445 | cprintf(BLUE, "Information\n"); | 496 | cprintf(BLUE, "Information\n"); |
@@ -457,7 +508,7 @@ static int do_info(void) | |||
457 | cprintf_field(" Vendor: ", "%s\n", vendor); | 508 | cprintf_field(" Vendor: ", "%s\n", vendor); |
458 | cprintf_field(" Product: ", "%s\n", product); | 509 | cprintf_field(" Product: ", "%s\n", product); |
459 | } | 510 | } |
460 | 511 | ||
461 | struct scsi_stmp_protocol_version_t ver; | 512 | struct scsi_stmp_protocol_version_t ver; |
462 | ret = stmp_get_protocol_version(&ver); | 513 | ret = stmp_get_protocol_version(&ver); |
463 | if(ret) | 514 | if(ret) |
@@ -505,11 +556,11 @@ static int do_info(void) | |||
505 | } | 556 | } |
506 | 557 | ||
507 | len = 2; | 558 | len = 2; |
508 | ret = stmp_get_logical_media_info(0, &u.u16, &len); | 559 | ret = stmp_get_logical_media_info(SCSI_STMP_MEDIA_INFO_NR_DRIVES, &u.u16, &len); |
509 | if(!ret && len == 2) | 560 | if(!ret && len == 2) |
510 | { | 561 | { |
511 | u.u16 = fix_endian16be(u.u16); | 562 | u.u16 = fix_endian16be(u.u16); |
512 | cprintf_field(" Logical Media Info (0): ", "%#x\n", u.u16); | 563 | cprintf_field(" Number of Drives: ", "%d\n", u.u16); |
513 | } | 564 | } |
514 | 565 | ||
515 | len = 4; | 566 | len = 4; |
@@ -522,43 +573,56 @@ static int do_info(void) | |||
522 | } | 573 | } |
523 | 574 | ||
524 | len = 1; | 575 | len = 1; |
525 | ret = stmp_get_logical_media_info(5, &u.u8, &len); | 576 | ret = stmp_get_logical_media_info(SCSI_STMP_MEDIA_INFO_IS_INITIALISED, &u.u8, &len); |
577 | if(!ret && len == 1) | ||
578 | cprintf_field(" Is Initialised: ", "%d\n", u.u8); | ||
579 | |||
580 | len = 1; | ||
581 | ret = stmp_get_logical_media_info(SCSI_STMP_MEDIA_INFO_STATE, &u.u8, &len); | ||
582 | if(!ret && len == 1) | ||
583 | cprintf_field(" State: ", "%s\n", stmp_get_logical_media_state_string(u.u8)); | ||
584 | |||
585 | len = 1; | ||
586 | ret = stmp_get_logical_media_info(SCSI_STMP_MEDIA_INFO_IS_WRITE_PROTECTED, &u.u8, &len); | ||
526 | if(!ret && len == 1) | 587 | if(!ret && len == 1) |
527 | cprintf_field(" Logical Media Info (5): ", "%#x\n", u.u8); | 588 | cprintf_field(" Is Write Protected: ", "%#x\n", u.u8); |
528 | 589 | ||
529 | len = 8; | 590 | len = 8; |
530 | ret = stmp_get_logical_media_info(1, &u.u64, &len); | 591 | ret = stmp_get_logical_media_info(SCSI_STMP_MEDIA_INFO_SIZE, &u.u64, &len); |
531 | if(!ret && len == 8) | 592 | if(!ret && len == 8) |
532 | { | 593 | { |
533 | u.u64 = fix_endian64be(u.u64); | 594 | u.u64 = fix_endian64be(u.u64); |
534 | cprintf_field(" Logical Media Info (1): ", "%#llx\n", (unsigned long long)u.u64); | 595 | cprintf_field(" Media Size: ", "%llu B (%.3f %s)\n", (unsigned long long)u.u64, |
596 | get_size_natural(u.u64), get_size_suffix(u.u64)); | ||
535 | } | 597 | } |
536 | 598 | ||
599 | int serial_number_size = 0; | ||
537 | len = 4; | 600 | len = 4; |
538 | ret = stmp_get_logical_media_info(7, &u.u32, &len); | 601 | ret = stmp_get_logical_media_info(SCSI_STMP_MEDIA_INFO_SERIAL_NUMBER_SIZE, &u.u32, &len); |
539 | if(!ret && len == 4) | 602 | if(!ret && len == 4) |
540 | { | 603 | { |
541 | u.u32 = fix_endian32be(u.u32); | 604 | u.u32 = fix_endian32be(u.u32); |
542 | cprintf_field(" Logical Media Info (7): ", "%#x\n", u.u32); | 605 | cprintf_field(" Serial Number Size: ", "%d\n", u.u32); |
606 | serial_number_size = u.u32; | ||
543 | } | 607 | } |
544 | 608 | ||
545 | len = 52; | 609 | len = serial_number_size; |
546 | ret = stmp_get_logical_media_info(8, &u.buf, &len); | 610 | ret = stmp_get_logical_media_info(SCSI_STMP_MEDIA_INFO_SERIAL_NUMBER, &u.buf, &len); |
547 | if(!ret && len != 0) | 611 | if(!ret && len != 0) |
548 | { | 612 | { |
549 | cprintf(GREEN, " Logical Media Info (8):"); | 613 | cprintf(GREEN, " Serial Number:"); |
550 | /* | ||
551 | for(int i = 0; i < len; i++) | ||
552 | cprintf(YELLOW, " %02x", u.buf[i]); | ||
553 | printf("\n"); | ||
554 | */ | ||
555 | print_hex(u.buf, len); | 614 | print_hex(u.buf, len); |
556 | } | 615 | } |
557 | 616 | ||
558 | len = 1; | 617 | len = 1; |
559 | ret = stmp_get_logical_media_info(9, &u.u8, &len); | 618 | ret = stmp_get_logical_media_info(SCSI_STMP_MEDIA_INFO_IS_SYSTEM_MEDIA, &u.u8, &len); |
560 | if(!ret && len == 1) | 619 | if(!ret && len == 1) |
561 | cprintf_field(" Logical Media Info (9): ", "%#x\n", u.u8); | 620 | cprintf_field(" Is System Media: ", "%d\n", u.u8); |
621 | |||
622 | len = 1; | ||
623 | ret = stmp_get_logical_media_info(SCSI_STMP_MEDIA_INFO_IS_MEDIA_PRESENT, &u.u8, &len); | ||
624 | if(!ret && len == 1) | ||
625 | cprintf_field(" Is Media Present: ", "%d\n", u.u8); | ||
562 | 626 | ||
563 | len = 4; | 627 | len = 4; |
564 | ret = stmp_get_logical_media_info(SCSI_STMP_MEDIA_INFO_VENDOR, &u.u32, &len); | 628 | ret = stmp_get_logical_media_info(SCSI_STMP_MEDIA_INFO_VENDOR, &u.u32, &len); |
@@ -592,6 +656,14 @@ static int do_info(void) | |||
592 | u.u32 = fix_endian32be(u.u32); | 656 | u.u32 = fix_endian32be(u.u32); |
593 | cprintf_field(" Logical Media Info (14): ", "%#x\n", u.u32); | 657 | cprintf_field(" Logical Media Info (14): ", "%#x\n", u.u32); |
594 | } | 658 | } |
659 | |||
660 | len = 4; | ||
661 | ret = stmp_get_logical_media_info(SCSI_STMP_MEDIA_INFO_ALLOC_UNIT_SIZE, &u.u32, &len); | ||
662 | if(!ret && len == 4) | ||
663 | { | ||
664 | u.u32 = fix_endian32be(u.u32); | ||
665 | cprintf_field(" Allocation Unit Size: ", "%d B\n", u.u32); | ||
666 | } | ||
595 | }while(0); | 667 | }while(0); |
596 | 668 | ||
597 | struct scsi_stmp_chip_major_rev_id_t chip_rev; | 669 | struct scsi_stmp_chip_major_rev_id_t chip_rev; |
@@ -622,9 +694,12 @@ static int do_info(void) | |||
622 | cprintf_field(" Logical Table: ", "%d entries\n", table.header.count); | 694 | cprintf_field(" Logical Table: ", "%d entries\n", table.header.count); |
623 | for(int i = 0; i < table.header.count; i++) | 695 | for(int i = 0; i < table.header.count; i++) |
624 | { | 696 | { |
625 | cprintf_field2(" Drive No: ", "%2x", table.entry[i].drive_no); | 697 | cprintf(BLUE, " Drive "); |
626 | cprintf_field2(" Type: ", "%2x", table.entry[i].type); | 698 | cprintf_field("No: ", "%2x", table.entry[i].drive_no); |
627 | cprintf_field2(" Tag: ", "%2x", table.entry[i].tag); | 699 | cprintf_field(" Type: ", "%#x ", table.entry[i].type); |
700 | cprintf(RED, "(%s)", stmp_get_logical_drive_type_string(table.entry[i].type)); | ||
701 | cprintf_field(" Tag: ", "%#x ", table.entry[i].tag); | ||
702 | cprintf(RED, "(%s)", stmp_get_logical_drive_tag_string(table.entry[i].tag)); | ||
628 | unsigned long long size = table.entry[i].size; | 703 | unsigned long long size = table.entry[i].size; |
629 | int order = 0; | 704 | int order = 0; |
630 | while(size >= 1024) | 705 | while(size >= 1024) |
@@ -633,7 +708,7 @@ static int do_info(void) | |||
633 | order++; | 708 | order++; |
634 | } | 709 | } |
635 | static const char *suffix[] = {"B", "KiB", "MiB", "GiB", "TiB"}; | 710 | static const char *suffix[] = {"B", "KiB", "MiB", "GiB", "TiB"}; |
636 | cprintf_field2(" Size: ", "%llu %s", size, suffix[order]); | 711 | cprintf_field(" Size: ", "%llu %s", size, suffix[order]); |
637 | cprintf(OFF, "\n"); | 712 | cprintf(OFF, "\n"); |
638 | } | 713 | } |
639 | 714 | ||
@@ -651,19 +726,21 @@ static int do_info(void) | |||
651 | cprintf_field(" Drive ", "%02x\n", drive); | 726 | cprintf_field(" Drive ", "%02x\n", drive); |
652 | 727 | ||
653 | int len = 4; | 728 | int len = 4; |
654 | ret = stmp_get_logical_drive_info(drive, SCSI_STMP_DRIVE_INFO_SECTOR, &u.u32, &len); | 729 | ret = stmp_get_logical_drive_info(drive, SCSI_STMP_DRIVE_INFO_SECTOR_SIZE, &u.u32, &len); |
655 | if(!ret && len == 4) | 730 | if(!ret && len == 4) |
656 | { | 731 | { |
657 | u.u32 = fix_endian32be(u.u32); | 732 | u.u32 = fix_endian32be(u.u32); |
658 | cprintf_field(" Sector Size: ", "%#x\n", u.u32); | 733 | cprintf_field(" Sector Size: ", "%lu B (%.3f %s)\n", (unsigned long)u.u32, |
734 | get_size_natural(u.u32), get_size_suffix(u.u32)); | ||
659 | } | 735 | } |
660 | 736 | ||
661 | len = 4; | 737 | len = 4; |
662 | ret = stmp_get_logical_drive_info(drive, 1, &u.u32, &len); | 738 | ret = stmp_get_logical_drive_info(drive, SCSI_STMP_DRIVe_INFO_ERASE_SIZE, &u.u32, &len); |
663 | if(!ret && len == 4) | 739 | if(!ret && len == 4) |
664 | { | 740 | { |
665 | u.u32 = fix_endian32be(u.u32); | 741 | u.u32 = fix_endian32be(u.u32); |
666 | cprintf_field(" Info 1: ", "%#x\n", u.u32); | 742 | cprintf_field(" Erase Size: ", "%lu B (%.3f %s)\n", (unsigned long)u.u32, |
743 | get_size_natural(u.u32), get_size_suffix(u.u32)); | ||
667 | } | 744 | } |
668 | 745 | ||
669 | len = 8; | 746 | len = 8; |
@@ -671,23 +748,25 @@ static int do_info(void) | |||
671 | if(!ret && len == 8) | 748 | if(!ret && len == 8) |
672 | { | 749 | { |
673 | u.u64 = fix_endian64be(u.u64); | 750 | u.u64 = fix_endian64be(u.u64); |
674 | cprintf_field(" Total Size: ", "%#llx\n", (unsigned long long)u.u64); | 751 | cprintf_field(" Total Size: ", "%llu B (%.3f %s)\n", |
752 | (unsigned long long)u.u64, get_size_natural(u.u32), | ||
753 | get_size_suffix(u.u32)); | ||
675 | } | 754 | } |
676 | 755 | ||
677 | len = 4; | 756 | len = 4; |
678 | ret = stmp_get_logical_drive_info(drive, 3, &u.u32, &len); | 757 | ret = stmp_get_logical_drive_info(drive, SCSI_STMP_DRIVE_INFO_SIZE_MEGA, &u.u32, &len); |
679 | if(!ret && len == 4) | 758 | if(!ret && len == 4) |
680 | { | 759 | { |
681 | u.u32 = fix_endian32be(u.u32); | 760 | u.u32 = fix_endian32be(u.u32); |
682 | cprintf_field(" Info 3: ", "%#x\n", u.u32); | 761 | cprintf_field(" Total Size (MB): ", "%lu MB\n", (unsigned long)u.u32); |
683 | } | 762 | } |
684 | 763 | ||
685 | len = 8; | 764 | len = 8; |
686 | ret = stmp_get_logical_drive_info(drive, SCSI_STMP_DRIVE_INFO_COUNT, &u.u64, &len); | 765 | ret = stmp_get_logical_drive_info(drive, SCSI_STMP_DRIVE_INFO_SECTOR_COUNT, &u.u64, &len); |
687 | if(!ret && len == 8) | 766 | if(!ret && len == 8) |
688 | { | 767 | { |
689 | u.u64 = fix_endian64be(u.u64); | 768 | u.u64 = fix_endian64be(u.u64); |
690 | cprintf_field(" Sector Count: ", "%#llx\n", (unsigned long long)u.u64); | 769 | cprintf_field(" Sector Count: ", "%llu\n", (unsigned long long)u.u64); |
691 | } | 770 | } |
692 | 771 | ||
693 | len = 4; | 772 | len = 4; |
@@ -700,55 +779,74 @@ static int do_info(void) | |||
700 | } | 779 | } |
701 | 780 | ||
702 | len = 1; | 781 | len = 1; |
703 | ret = stmp_get_logical_drive_info(drive, 6, &u.u8, &len); | 782 | ret = stmp_get_logical_drive_info(drive, SCSI_STMP_DRIVE_INFO_TAG, &u.u8, &len); |
704 | if(!ret && len == 1) | 783 | if(!ret && len == 1) |
705 | { | 784 | { |
706 | cprintf_field(" Info 6: ", "%#x\n", u.u8); | 785 | cprintf_field(" Tag: ", "%#x", u.u8); |
786 | cprintf(RED, " (%s)\n", stmp_get_logical_drive_tag_string(u.u8)); | ||
707 | } | 787 | } |
708 | 788 | ||
709 | len = 52; | 789 | len = 52; |
710 | ret = stmp_get_logical_drive_info(drive, 7, &u.buf, &len); | 790 | ret = stmp_get_logical_drive_info(drive, SCSI_STMP_DRIVE_INFO_COMPONENT_VERSION, &u.buf, &len); |
711 | if(!ret && len != 0) | 791 | if(!ret && len != 0) |
712 | { | 792 | { |
713 | cprintf(GREEN, " Info 7:"); | 793 | cprintf(GREEN, " Component Version:"); |
714 | for(int i = 0; i < len; i++) | 794 | print_hex(u.buf, len); |
715 | cprintf(YELLOW, " %02x", u.buf[i]); | ||
716 | printf("\n"); | ||
717 | } | 795 | } |
718 | 796 | ||
719 | len = 52; | 797 | len = 52; |
720 | ret = stmp_get_logical_drive_info(drive, 8, &u.buf, &len); | 798 | ret = stmp_get_logical_drive_info(drive, SCSI_STMP_DRIVE_INFO_PROJECT_VERSION, &u.buf, &len); |
721 | if(!ret && len != 0) | 799 | if(!ret && len != 0) |
722 | { | 800 | { |
723 | cprintf(GREEN, " Info 8:"); | 801 | cprintf(GREEN, " Project Version:"); |
724 | for(int i = 0; i < len; i++) | 802 | print_hex(u.buf, len); |
725 | cprintf(YELLOW, " %02x", u.buf[i]); | ||
726 | printf("\n"); | ||
727 | } | 803 | } |
728 | 804 | ||
729 | len = 1; | 805 | len = 1; |
730 | ret = stmp_get_logical_drive_info(drive, 9, &u.u8, &len); | 806 | ret = stmp_get_logical_drive_info(drive, SCSI_STMP_DRIVE_INFO_IS_WRITE_PROTETED, &u.u8, &len); |
731 | if(!ret && len == 1) | 807 | if(!ret && len == 1) |
732 | { | 808 | { |
733 | cprintf_field(" Info 9: ", "%#x\n", u.u8); | 809 | cprintf_field(" Is Writed Protected: ", "%d\n", u.u8); |
734 | } | 810 | } |
735 | 811 | ||
736 | len = 2; | 812 | len = 2; |
737 | ret = stmp_get_logical_drive_info(drive, 10, &u.u16, &len); | 813 | int serial_number_size = 0; |
814 | ret = stmp_get_logical_drive_info(drive, SCSI_STMP_DRIVE_INFO_SERIAL_NUMBER_SIZE, &u.u16, &len); | ||
738 | if(!ret && len == 2) | 815 | if(!ret && len == 2) |
739 | { | 816 | { |
740 | u.u16 = fix_endian16be(u.u16); | 817 | u.u16 = fix_endian16be(u.u16); |
741 | cprintf_field(" Info 10: ", "%#x\n", u.u16); | 818 | cprintf_field(" Serial Number Size: ", "%d\n", u.u16); |
819 | serial_number_size = u.u16; | ||
742 | } | 820 | } |
743 | 821 | ||
744 | len = 52; | 822 | len = serial_number_size; |
745 | ret = stmp_get_logical_drive_info(drive, 11, &u.buf, &len); | 823 | ret = stmp_get_logical_drive_info(drive, SCSI_STMP_DRIVE_INFO_SERIAL_NUMBER, &u.buf, &len); |
746 | if(!ret && len != 0) | 824 | if(!ret && len != 0) |
747 | { | 825 | { |
748 | cprintf(GREEN, " Info 11:"); | 826 | cprintf(GREEN, " Serial Number:"); |
749 | for(int i = 0; i < len; i++) | 827 | print_hex(u.buf, len); |
750 | cprintf(YELLOW, " %02x", u.buf[i]); | 828 | } |
751 | printf("\n"); | 829 | |
830 | len = 1; | ||
831 | ret = stmp_get_logical_drive_info(drive, SCSI_STMP_DRIVE_INFO_MEDIA_PRESENT, &u.u8, &len); | ||
832 | if(!ret && len == 1) | ||
833 | { | ||
834 | cprintf_field(" Is Media Present: ", "%d\n", u.u8); | ||
835 | } | ||
836 | |||
837 | len = 1; | ||
838 | ret = stmp_get_logical_drive_info(drive, SCSI_STMP_DRIVE_INFO_MEDIA_CHANGE, &u.u8, &len); | ||
839 | if(!ret && len == 1) | ||
840 | { | ||
841 | cprintf_field(" Media Change: ", "%d\n", u.u8); | ||
842 | } | ||
843 | |||
844 | len = 4; | ||
845 | ret = stmp_get_logical_drive_info(drive, SCSI_STMP_DRIVE_INFO_SECTOR_ALLOCATION, &u.u32, &len); | ||
846 | if(!ret && len == 4) | ||
847 | { | ||
848 | u.u32 = fix_endian32be(u.u32); | ||
849 | cprintf_field(" Sector Allocation: ", "%lu\n", (unsigned long)u.u32); | ||
752 | } | 850 | } |
753 | } | 851 | } |
754 | } | 852 | } |
@@ -796,7 +894,7 @@ void do_extract(const char *file) | |||
796 | } | 894 | } |
797 | int len = 4; | 895 | int len = 4; |
798 | uint32_t sector_size; | 896 | uint32_t sector_size; |
799 | ret = stmp_get_logical_drive_info(drive_no, SCSI_STMP_DRIVE_INFO_SECTOR, §or_size, &len); | 897 | ret = stmp_get_logical_drive_info(drive_no, SCSI_STMP_DRIVE_INFO_SECTOR_SIZE, §or_size, &len); |
800 | if(ret || len != 4) | 898 | if(ret || len != 4) |
801 | { | 899 | { |
802 | cprintf(GREY, "Cannot get sector size\n"); | 900 | cprintf(GREY, "Cannot get sector size\n"); |