diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-02-18 13:36:04 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-02-18 13:36:04 +0000 |
commit | 3bf0020a5fda9c7a5096a5e9c9526fff7a642737 (patch) | |
tree | f1c52b528ab6151afc587d93ee67e27f2654c893 | |
parent | 131ae177a71c7f5d9de596d9a83c76bd08579380 (diff) | |
download | busybox-w32-3bf0020a5fda9c7a5096a5e9c9526fff7a642737.tar.gz busybox-w32-3bf0020a5fda9c7a5096a5e9c9526fff7a642737.tar.bz2 busybox-w32-3bf0020a5fda9c7a5096a5e9c9526fff7a642737.zip |
hdparm: style fixes, no code changes
-rw-r--r-- | miscutils/hdparm.c | 676 |
1 files changed, 271 insertions, 405 deletions
diff --git a/miscutils/hdparm.c b/miscutils/hdparm.c index eafb07898..0138eed92 100644 --- a/miscutils/hdparm.c +++ b/miscutils/hdparm.c | |||
@@ -127,7 +127,7 @@ | |||
127 | 127 | ||
128 | #define CDROM 0x0005 | 128 | #define CDROM 0x0005 |
129 | 129 | ||
130 | #ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY | 130 | #if ENABLE_FEATURE_HDPARM_GET_IDENTITY |
131 | static const char * const pkt_str[] = { | 131 | static const char * const pkt_str[] = { |
132 | "Direct-access device", /* word 0, bits 12-8 = 00 */ | 132 | "Direct-access device", /* word 0, bits 12-8 = 00 */ |
133 | "Sequential-access device", /* word 0, bits 12-8 = 01 */ | 133 | "Sequential-access device", /* word 0, bits 12-8 = 01 */ |
@@ -239,7 +239,7 @@ static const char * const ata1_cfg_str[] = { /* word 0 in ATA-1 mode */ | |||
239 | 239 | ||
240 | /* word 81: minor version number */ | 240 | /* word 81: minor version number */ |
241 | #define MINOR_MAX 0x22 | 241 | #define MINOR_MAX 0x22 |
242 | #ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY | 242 | #if ENABLE_FEATURE_HDPARM_GET_IDENTITY |
243 | static const char *minor_str[MINOR_MAX+2] = { /* word 81 value: */ | 243 | static const char *minor_str[MINOR_MAX+2] = { /* word 81 value: */ |
244 | "Unspecified", /* 0x0000 */ | 244 | "Unspecified", /* 0x0000 */ |
245 | "ATA-1 X3T9.2 781D prior to rev.4", /* 0x0001 */ | 245 | "ATA-1 X3T9.2 781D prior to rev.4", /* 0x0001 */ |
@@ -326,7 +326,7 @@ static const char actual_ver[MINOR_MAX+2] = { | |||
326 | #define SUPPORT_48_BIT 0x0400 | 326 | #define SUPPORT_48_BIT 0x0400 |
327 | #define NUM_CMD_FEAT_STR 48 | 327 | #define NUM_CMD_FEAT_STR 48 |
328 | 328 | ||
329 | #ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY | 329 | #if ENABLE_FEATURE_HDPARM_GET_IDENTITY |
330 | static const char * const cmd_feat_str[] = { | 330 | static const char * const cmd_feat_str[] = { |
331 | "", /* word 82 bit 15: obsolete */ | 331 | "", /* word 82 bit 15: obsolete */ |
332 | "NOP cmd", /* word 82 bit 14 */ | 332 | "NOP cmd", /* word 82 bit 14 */ |
@@ -413,7 +413,7 @@ void identify_from_stdin(void); | |||
413 | #define SECU_ENABLED 0x0002 | 413 | #define SECU_ENABLED 0x0002 |
414 | #define SECU_LEVEL 0x0010 | 414 | #define SECU_LEVEL 0x0010 |
415 | #define NUM_SECU_STR 6 | 415 | #define NUM_SECU_STR 6 |
416 | #ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY | 416 | #if ENABLE_FEATURE_HDPARM_GET_IDENTITY |
417 | static const char * const secu_str[] = { | 417 | static const char * const secu_str[] = { |
418 | "supported", /* word 128, bit 0 */ | 418 | "supported", /* word 128, bit 0 */ |
419 | "enabled", /* word 128, bit 1 */ | 419 | "enabled", /* word 128, bit 1 */ |
@@ -480,7 +480,7 @@ static void bb_ioctl_on_off(int fd, int request, void *argp, const char *string, | |||
480 | } | 480 | } |
481 | } | 481 | } |
482 | 482 | ||
483 | #ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY | 483 | #if ENABLE_FEATURE_HDPARM_GET_IDENTITY |
484 | static void print_ascii(uint16_t *p, uint8_t length); | 484 | static void print_ascii(uint16_t *p, uint8_t length); |
485 | 485 | ||
486 | static void xprint_ascii(uint16_t *val ,int i, const char *string, int n) | 486 | static void xprint_ascii(uint16_t *val ,int i, const char *string, int n) |
@@ -493,26 +493,23 @@ static void xprint_ascii(uint16_t *val ,int i, const char *string, int n) | |||
493 | #endif | 493 | #endif |
494 | /* end of busybox specific stuff */ | 494 | /* end of busybox specific stuff */ |
495 | 495 | ||
496 | #ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY | 496 | #if ENABLE_FEATURE_HDPARM_GET_IDENTITY |
497 | static uint8_t mode_loop(uint16_t mode_sup, uint16_t mode_sel, int cc, uint8_t *have_mode) | 497 | static uint8_t mode_loop(uint16_t mode_sup, uint16_t mode_sel, int cc, uint8_t *have_mode) |
498 | { | 498 | { |
499 | uint16_t ii; | 499 | uint16_t ii; |
500 | uint8_t err_dma = 0; | 500 | uint8_t err_dma = 0; |
501 | 501 | ||
502 | for (ii = 0; ii <= MODE_MAX; ii++) | 502 | for (ii = 0; ii <= MODE_MAX; ii++) { |
503 | { | 503 | if (mode_sel & 0x0001) { |
504 | if (mode_sel & 0x0001) | ||
505 | { | ||
506 | printf("*%cdma%u ",cc,ii); | 504 | printf("*%cdma%u ",cc,ii); |
507 | if (*have_mode) | 505 | if (*have_mode) |
508 | err_dma = 1; | 506 | err_dma = 1; |
509 | *have_mode = 1; | 507 | *have_mode = 1; |
510 | } | 508 | } else if (mode_sup & 0x0001) |
511 | else if (mode_sup & 0x0001) | ||
512 | printf("%cdma%u ",cc,ii); | 509 | printf("%cdma%u ",cc,ii); |
513 | 510 | ||
514 | mode_sup >>=1; | 511 | mode_sup >>= 1; |
515 | mode_sel >>=1; | 512 | mode_sel >>= 1; |
516 | } | 513 | } |
517 | return err_dma; | 514 | return err_dma; |
518 | } | 515 | } |
@@ -522,13 +519,13 @@ static void print_ascii(uint16_t *p, uint8_t length) { | |||
522 | char cl; | 519 | char cl; |
523 | 520 | ||
524 | /* find first non-space & print it */ | 521 | /* find first non-space & print it */ |
525 | for (ii = 0; ii< length; ii++) | 522 | for (ii = 0; ii < length; ii++) { |
526 | { | 523 | if ((char)((*p)>>8) != ' ') |
527 | if (((char) 0x00ff&((*p)>>8)) != ' ') | ||
528 | break; | 524 | break; |
529 | if ((cl = (char) 0x00ff&(*p)) != ' ') | 525 | cl = (char)(*p); |
530 | { | 526 | if (cl != ' ') { |
531 | if (cl != '\0') printf("%c",cl); | 527 | if (cl != '\0') |
528 | printf("%c", cl); | ||
532 | p++; | 529 | p++; |
533 | ii++; | 530 | ii++; |
534 | break; | 531 | break; |
@@ -536,11 +533,10 @@ static void print_ascii(uint16_t *p, uint8_t length) { | |||
536 | p++; | 533 | p++; |
537 | } | 534 | } |
538 | /* print the rest */ | 535 | /* print the rest */ |
539 | for (; ii< length; ii++) | 536 | for (; ii< length; ii++) { |
540 | { | ||
541 | if (!(*p)) | 537 | if (!(*p)) |
542 | break; /* some older devices have NULLs */ | 538 | break; /* some older devices have NULLs */ |
543 | printf("%c%c",(char)0x00ff&((*p)>>8),(char)(*p)&0x00ff); | 539 | printf("%c%c", (char)((*p)>>8), (char)(*p)); |
544 | p++; | 540 | p++; |
545 | } | 541 | } |
546 | puts(""); | 542 | puts(""); |
@@ -565,31 +561,26 @@ static void identify(uint16_t *id_supplied) | |||
565 | if (BB_BIG_ENDIAN) { | 561 | if (BB_BIG_ENDIAN) { |
566 | swab(id_supplied, buf, sizeof(buf)); | 562 | swab(id_supplied, buf, sizeof(buf)); |
567 | val = buf; | 563 | val = buf; |
568 | } else val = id_supplied; | 564 | } else |
565 | val = id_supplied; | ||
569 | 566 | ||
570 | chksum &= 0xff; | 567 | chksum &= 0xff; |
571 | 568 | ||
572 | /* check if we recognise the device type */ | 569 | /* check if we recognise the device type */ |
573 | puts(""); | 570 | puts(""); |
574 | if (!(val[GEN_CONFIG] & NOT_ATA)) | 571 | if (!(val[GEN_CONFIG] & NOT_ATA)) { |
575 | { | ||
576 | dev = ATA_DEV; | 572 | dev = ATA_DEV; |
577 | printf("ATA device, with "); | 573 | printf("ATA device, with "); |
578 | } | 574 | } else if (val[GEN_CONFIG]==CFA_SUPPORT_VAL) { |
579 | else if (val[GEN_CONFIG]==CFA_SUPPORT_VAL) | ||
580 | { | ||
581 | dev = ATA_DEV; | 575 | dev = ATA_DEV; |
582 | like_std = 4; | 576 | like_std = 4; |
583 | printf("CompactFlash ATA device, with "); | 577 | printf("CompactFlash ATA device, with "); |
584 | } | 578 | } else if (!(val[GEN_CONFIG] & NOT_ATAPI)) { |
585 | else if (!(val[GEN_CONFIG] & NOT_ATAPI)) | ||
586 | { | ||
587 | dev = ATAPI_DEV; | 579 | dev = ATAPI_DEV; |
588 | eqpt = (val[GEN_CONFIG] & EQPT_TYPE) >> SHIFT_EQPT; | 580 | eqpt = (val[GEN_CONFIG] & EQPT_TYPE) >> SHIFT_EQPT; |
589 | printf("ATAPI %s, with ", pkt_str[eqpt]); | 581 | printf("ATAPI %s, with ", pkt_str[eqpt]); |
590 | like_std = 3; | 582 | like_std = 3; |
591 | } | 583 | } else |
592 | else | ||
593 | /*"Unknown device type:\n\tbits 15&14 of general configuration word 0 both set to 1.\n"*/ | 584 | /*"Unknown device type:\n\tbits 15&14 of general configuration word 0 both set to 1.\n"*/ |
594 | bb_error_msg_and_die("unknown device type"); | 585 | bb_error_msg_and_die("unknown device type"); |
595 | 586 | ||
@@ -601,9 +592,9 @@ static void identify(uint16_t *id_supplied) | |||
601 | * specific, it should be safe to check it now, even though we don't | 592 | * specific, it should be safe to check it now, even though we don't |
602 | * know yet what standard this device is using. | 593 | * know yet what standard this device is using. |
603 | */ | 594 | */ |
604 | if ((val[CONFIG]==STBY_NID_VAL) || (val[CONFIG]==STBY_ID_VAL) || | 595 | if ((val[CONFIG]==STBY_NID_VAL) || (val[CONFIG]==STBY_ID_VAL) |
605 | (val[CONFIG]==PWRD_NID_VAL) || (val[CONFIG]==PWRD_ID_VAL) ) | 596 | || (val[CONFIG]==PWRD_NID_VAL) || (val[CONFIG]==PWRD_ID_VAL) |
606 | { | 597 | ) { |
607 | like_std = 5; | 598 | like_std = 5; |
608 | if ((val[CONFIG]==STBY_NID_VAL) || (val[CONFIG]==STBY_ID_VAL)) | 599 | if ((val[CONFIG]==STBY_NID_VAL) || (val[CONFIG]==STBY_ID_VAL)) |
609 | printf("powers-up in standby; SET FEATURES subcmd spins-up.\n"); | 600 | printf("powers-up in standby; SET FEATURES subcmd spins-up.\n"); |
@@ -621,10 +612,8 @@ static void identify(uint16_t *id_supplied) | |||
621 | /* major & minor standards version number (Note: these words were not | 612 | /* major & minor standards version number (Note: these words were not |
622 | * defined until ATA-3 & the CDROM std uses different words.) */ | 613 | * defined until ATA-3 & the CDROM std uses different words.) */ |
623 | printf("Standards:"); | 614 | printf("Standards:"); |
624 | if (eqpt != CDROM) | 615 | if (eqpt != CDROM) { |
625 | { | 616 | if (val[MINOR] && (val[MINOR] <= MINOR_MAX)) { |
626 | if (val[MINOR] && (val[MINOR] <= MINOR_MAX)) | ||
627 | { | ||
628 | if (like_std < 3) like_std = 3; | 617 | if (like_std < 3) like_std = 3; |
629 | std = actual_ver[val[MINOR]]; | 618 | std = actual_ver[val[MINOR]]; |
630 | if (std) printf("\n\tUsed: %s ",minor_str[val[MINOR]]); | 619 | if (std) printf("\n\tUsed: %s ",minor_str[val[MINOR]]); |
@@ -633,18 +622,14 @@ static void identify(uint16_t *id_supplied) | |||
633 | /* looks like when they up-issue the std, they obsolete one; | 622 | /* looks like when they up-issue the std, they obsolete one; |
634 | * thus, only the newest 4 issues need be supported. (That's | 623 | * thus, only the newest 4 issues need be supported. (That's |
635 | * what "kk" and "min_std" are all about.) */ | 624 | * what "kk" and "min_std" are all about.) */ |
636 | if (val[MAJOR] && (val[MAJOR] !=NOVAL_1)) | 625 | if (val[MAJOR] && (val[MAJOR] != NOVAL_1)) { |
637 | { | ||
638 | printf("\n\tSupported: "); | 626 | printf("\n\tSupported: "); |
639 | jj = val[MAJOR] << 1; | 627 | jj = val[MAJOR] << 1; |
640 | kk = like_std >4 ? like_std-4: 0; | 628 | kk = like_std >4 ? like_std-4: 0; |
641 | for (ii = 14; (ii >0)&&(ii>kk); ii--) | 629 | for (ii = 14; (ii >0)&&(ii>kk); ii--) { |
642 | { | 630 | if (jj & 0x8000) { |
643 | if (jj & 0x8000) | ||
644 | { | ||
645 | printf("%u ", ii); | 631 | printf("%u ", ii); |
646 | if (like_std < ii) | 632 | if (like_std < ii) { |
647 | { | ||
648 | like_std = ii; | 633 | like_std = ii; |
649 | kk = like_std >4 ? like_std-4: 0; | 634 | kk = like_std >4 ? like_std-4: 0; |
650 | } | 635 | } |
@@ -664,62 +649,54 @@ static void identify(uint16_t *id_supplied) | |||
664 | ((((val[CMDS_SUPP_1] & VALID) == VALID_VAL) && | 649 | ((((val[CMDS_SUPP_1] & VALID) == VALID_VAL) && |
665 | (( val[CMDS_SUPP_1] & CMDS_W83) > 0x00ff)) || | 650 | (( val[CMDS_SUPP_1] & CMDS_W83) > 0x00ff)) || |
666 | ((( val[CMDS_SUPP_2] & VALID) == VALID_VAL) && | 651 | ((( val[CMDS_SUPP_2] & VALID) == VALID_VAL) && |
667 | ( val[CMDS_SUPP_2] & CMDS_W84) ) ) ) | 652 | ( val[CMDS_SUPP_2] & CMDS_W84) ) ) |
668 | { | 653 | ) { |
669 | like_std = 6; | 654 | like_std = 6; |
670 | } | 655 | } else if (((std == 4) || (!std && (like_std < 5))) && |
671 | else if (((std == 4) || (!std && (like_std < 5))) && | ||
672 | ((((val[INTEGRITY] & SIG) == SIG_VAL) && !chksum) || | 656 | ((((val[INTEGRITY] & SIG) == SIG_VAL) && !chksum) || |
673 | (( val[HWRST_RSLT] & VALID) == VALID_VAL) || | 657 | (( val[HWRST_RSLT] & VALID) == VALID_VAL) || |
674 | ((( val[CMDS_SUPP_1] & VALID) == VALID_VAL) && | 658 | ((( val[CMDS_SUPP_1] & VALID) == VALID_VAL) && |
675 | (( val[CMDS_SUPP_1] & CMDS_W83) > 0x001f)) ) ) | 659 | (( val[CMDS_SUPP_1] & CMDS_W83) > 0x001f)) ) ) |
676 | { | 660 | { |
677 | like_std = 5; | 661 | like_std = 5; |
678 | } | 662 | } else if (((std == 3) || (!std && (like_std < 4))) && |
679 | else if (((std == 3) || (!std && (like_std < 4))) && | ||
680 | ((((val[CMDS_SUPP_1] & VALID) == VALID_VAL) && | 663 | ((((val[CMDS_SUPP_1] & VALID) == VALID_VAL) && |
681 | ((( val[CMDS_SUPP_1] & CMDS_W83) > 0x0000) || | 664 | ((( val[CMDS_SUPP_1] & CMDS_W83) > 0x0000) || |
682 | (( val[CMDS_SUPP_0] & CMDS_W82) > 0x000f))) || | 665 | (( val[CMDS_SUPP_0] & CMDS_W82) > 0x000f))) || |
683 | (( val[CAPAB_1] & VALID) == VALID_VAL) || | 666 | (( val[CAPAB_1] & VALID) == VALID_VAL) || |
684 | (( val[WHATS_VALID] & OK_W88) && val[ULTRA_DMA]) || | 667 | (( val[WHATS_VALID] & OK_W88) && val[ULTRA_DMA]) || |
685 | (( val[RM_STAT] & RM_STAT_BITS) == RM_STAT_SUP) ) ) | 668 | (( val[RM_STAT] & RM_STAT_BITS) == RM_STAT_SUP) ) |
686 | { | 669 | ) { |
687 | like_std = 4; | 670 | like_std = 4; |
688 | } | 671 | } else if (((std == 2) || (!std && (like_std < 3))) |
689 | else if (((std == 2) || (!std && (like_std < 3))) && | 672 | && ((val[CMDS_SUPP_1] & VALID) == VALID_VAL) |
690 | ((val[CMDS_SUPP_1] & VALID) == VALID_VAL) ) | 673 | ) { |
691 | { | ||
692 | like_std = 3; | 674 | like_std = 3; |
693 | } | 675 | } else if (((std == 1) || (!std && (like_std < 2))) && |
694 | else if (((std == 1) || (!std && (like_std < 2))) && | ||
695 | ((val[CAPAB_0] & (IORDY_SUP | IORDY_OFF)) || | 676 | ((val[CAPAB_0] & (IORDY_SUP | IORDY_OFF)) || |
696 | (val[WHATS_VALID] & OK_W64_70)) ) | 677 | (val[WHATS_VALID] & OK_W64_70)) ) |
697 | { | 678 | { |
698 | like_std = 2; | 679 | like_std = 2; |
699 | } | 680 | } |
681 | |||
700 | if (!std) | 682 | if (!std) |
701 | printf("\n\tLikely used: %u\n",like_std); | 683 | printf("\n\tLikely used: %u\n", like_std); |
702 | else if (like_std > std) | 684 | else if (like_std > std) |
703 | printf("& some of %u\n",like_std); | 685 | printf("& some of %u\n", like_std); |
704 | else | 686 | else |
705 | puts(""); | 687 | puts(""); |
706 | } | 688 | } else { |
707 | else | ||
708 | { | ||
709 | /* TBD: do CDROM stuff more thoroughly. For now... */ | 689 | /* TBD: do CDROM stuff more thoroughly. For now... */ |
710 | kk = 0; | 690 | kk = 0; |
711 | if (val[CDR_MINOR] == 9) | 691 | if (val[CDR_MINOR] == 9) { |
712 | { | ||
713 | kk = 1; | 692 | kk = 1; |
714 | printf("\n\tUsed: ATAPI for CD-ROMs, SFF-8020i, r2.5"); | 693 | printf("\n\tUsed: ATAPI for CD-ROMs, SFF-8020i, r2.5"); |
715 | } | 694 | } |
716 | if (val[CDR_MAJOR] && (val[CDR_MAJOR] !=NOVAL_1)) | 695 | if (val[CDR_MAJOR] && (val[CDR_MAJOR] !=NOVAL_1)) { |
717 | { | ||
718 | kk = 1; | 696 | kk = 1; |
719 | printf("\n\tSupported: CD-ROM ATAPI"); | 697 | printf("\n\tSupported: CD-ROM ATAPI"); |
720 | jj = val[CDR_MAJOR] >> 1; | 698 | jj = val[CDR_MAJOR] >> 1; |
721 | for (ii = 1; ii <15; ii++) | 699 | for (ii = 1; ii < 15; ii++) { |
722 | { | ||
723 | if (jj & 0x0001) printf("-%u ", ii); | 700 | if (jj & 0x0001) printf("-%u ", ii); |
724 | jj >>= 1; | 701 | jj >>= 1; |
725 | } | 702 | } |
@@ -734,17 +711,14 @@ static void identify(uint16_t *id_supplied) | |||
734 | 711 | ||
735 | printf("Configuration:\n"); | 712 | printf("Configuration:\n"); |
736 | /* more info from the general configuration word */ | 713 | /* more info from the general configuration word */ |
737 | if ((eqpt != CDROM) && (like_std == 1)) | 714 | if ((eqpt != CDROM) && (like_std == 1)) { |
738 | { | ||
739 | jj = val[GEN_CONFIG] >> 1; | 715 | jj = val[GEN_CONFIG] >> 1; |
740 | for (ii = 1; ii < 15; ii++) | 716 | for (ii = 1; ii < 15; ii++) { |
741 | { | ||
742 | if (jj & 0x0001) printf("\t%s\n",ata1_cfg_str[ii]); | 717 | if (jj & 0x0001) printf("\t%s\n",ata1_cfg_str[ii]); |
743 | jj >>=1; | 718 | jj >>=1; |
744 | } | 719 | } |
745 | } | 720 | } |
746 | if (dev == ATAPI_DEV) | 721 | if (dev == ATAPI_DEV) { |
747 | { | ||
748 | if ((val[GEN_CONFIG] & DRQ_RESPONSE_TIME) == DRQ_3MS_VAL) | 722 | if ((val[GEN_CONFIG] & DRQ_RESPONSE_TIME) == DRQ_3MS_VAL) |
749 | strng = "3ms"; | 723 | strng = "3ms"; |
750 | else if ((val[GEN_CONFIG] & DRQ_RESPONSE_TIME) == DRQ_INTR_VAL) | 724 | else if ((val[GEN_CONFIG] & DRQ_RESPONSE_TIME) == DRQ_INTR_VAL) |
@@ -762,16 +736,13 @@ static void identify(uint16_t *id_supplied) | |||
762 | else | 736 | else |
763 | strng = "Unknown"; | 737 | strng = "Unknown"; |
764 | puts(strng); | 738 | puts(strng); |
765 | } | 739 | } else { |
766 | else | ||
767 | { | ||
768 | /* addressing...CHS? See section 6.2 of ATA specs 4 or 5 */ | 740 | /* addressing...CHS? See section 6.2 of ATA specs 4 or 5 */ |
769 | ll = (uint32_t)val[LBA_SECTS_MSB] << 16 | val[LBA_SECTS_LSB]; | 741 | ll = (uint32_t)val[LBA_SECTS_MSB] << 16 | val[LBA_SECTS_LSB]; |
770 | mm = 0; bbbig = 0; | 742 | mm = 0; bbbig = 0; |
771 | if ( (ll > 0x00FBFC10) && (!val[LCYLS])) | 743 | if ( (ll > 0x00FBFC10) && (!val[LCYLS])) |
772 | printf("\tCHS addressing not supported\n"); | 744 | printf("\tCHS addressing not supported\n"); |
773 | else | 745 | else { |
774 | { | ||
775 | jj = val[WHATS_VALID] & OK_W54_58; | 746 | jj = val[WHATS_VALID] & OK_W54_58; |
776 | printf("\tLogical\t\tmax\tcurrent\n\tcylinders\t%u\t%u\n\theads\t\t%u\t%u\n\tsectors/track\t%u\t%u\n\t--\n", | 747 | printf("\tLogical\t\tmax\tcurrent\n\tcylinders\t%u\t%u\n\theads\t\t%u\t%u\n\tsectors/track\t%u\t%u\n\t--\n", |
777 | val[LCYLS],jj?val[LCYLS_CUR]:0, val[LHEADS],jj?val[LHEADS_CUR]:0, val[LSECTS],jj?val[LSECTS_CUR]:0); | 748 | val[LCYLS],jj?val[LCYLS_CUR]:0, val[LHEADS],jj?val[LHEADS_CUR]:0, val[LSECTS],jj?val[LSECTS_CUR]:0); |
@@ -779,12 +750,10 @@ static void identify(uint16_t *id_supplied) | |||
779 | if ((min_std == 1) && (val[TRACK_BYTES] || val[SECT_BYTES])) | 750 | if ((min_std == 1) && (val[TRACK_BYTES] || val[SECT_BYTES])) |
780 | printf("\tbytes/track: %u\tbytes/sector: %u\n",val[TRACK_BYTES], val[SECT_BYTES]); | 751 | printf("\tbytes/track: %u\tbytes/sector: %u\n",val[TRACK_BYTES], val[SECT_BYTES]); |
781 | 752 | ||
782 | if (jj) | 753 | if (jj) { |
783 | { | ||
784 | mm = (uint32_t)val[CAPACITY_MSB] << 16 | val[CAPACITY_LSB]; | 754 | mm = (uint32_t)val[CAPACITY_MSB] << 16 | val[CAPACITY_LSB]; |
785 | if (like_std < 3) | 755 | if (like_std < 3) { |
786 | { | 756 | /* check Endian of capacity bytes */ |
787 | /* check Endian of capacity bytes */ | ||
788 | nn = val[LCYLS_CUR] * val[LHEADS_CUR] * val[LSECTS_CUR]; | 757 | nn = val[LCYLS_CUR] * val[LHEADS_CUR] * val[LSECTS_CUR]; |
789 | oo = (uint32_t)val[CAPACITY_LSB] << 16 | val[CAPACITY_MSB]; | 758 | oo = (uint32_t)val[CAPACITY_LSB] << 16 | val[CAPACITY_MSB]; |
790 | if (abs(mm - nn) > abs(oo - nn)) | 759 | if (abs(mm - nn) > abs(oo - nn)) |
@@ -795,9 +764,9 @@ static void identify(uint16_t *id_supplied) | |||
795 | } | 764 | } |
796 | /* LBA addressing */ | 765 | /* LBA addressing */ |
797 | printf("\tLBA user addressable sectors:%11u\n",ll); | 766 | printf("\tLBA user addressable sectors:%11u\n",ll); |
798 | if ( ((val[CMDS_SUPP_1] & VALID) == VALID_VAL) && | 767 | if (((val[CMDS_SUPP_1] & VALID) == VALID_VAL) |
799 | (val[CMDS_SUPP_1] & SUPPORT_48_BIT) ) | 768 | && (val[CMDS_SUPP_1] & SUPPORT_48_BIT) |
800 | { | 769 | ) { |
801 | bbbig = (uint64_t)val[LBA_64_MSB] << 48 | | 770 | bbbig = (uint64_t)val[LBA_64_MSB] << 48 | |
802 | (uint64_t)val[LBA_48_MSB] << 32 | | 771 | (uint64_t)val[LBA_48_MSB] << 32 | |
803 | (uint64_t)val[LBA_MID] << 16 | | 772 | (uint64_t)val[LBA_MID] << 16 | |
@@ -820,73 +789,61 @@ static void identify(uint16_t *id_supplied) | |||
820 | /* hw support of commands (capabilities) */ | 789 | /* hw support of commands (capabilities) */ |
821 | printf("Capabilities:\n\t"); | 790 | printf("Capabilities:\n\t"); |
822 | 791 | ||
823 | if (dev == ATAPI_DEV) | 792 | if (dev == ATAPI_DEV) { |
824 | { | ||
825 | if (eqpt != CDROM && (val[CAPAB_0] & CMD_Q_SUP)) printf("Cmd queuing, "); | 793 | if (eqpt != CDROM && (val[CAPAB_0] & CMD_Q_SUP)) printf("Cmd queuing, "); |
826 | if (val[CAPAB_0] & OVLP_SUP) printf("Cmd overlap, "); | 794 | if (val[CAPAB_0] & OVLP_SUP) printf("Cmd overlap, "); |
827 | } | 795 | } |
828 | if (val[CAPAB_0] & LBA_SUP) printf("LBA, "); | 796 | if (val[CAPAB_0] & LBA_SUP) printf("LBA, "); |
829 | 797 | ||
830 | if (like_std != 1) | 798 | if (like_std != 1) { |
831 | { | ||
832 | printf("IORDY%s(can%s be disabled)\n", | 799 | printf("IORDY%s(can%s be disabled)\n", |
833 | !(val[CAPAB_0] & IORDY_SUP) ? "(may be)" : "", | 800 | !(val[CAPAB_0] & IORDY_SUP) ? "(may be)" : "", |
834 | (val[CAPAB_0] & IORDY_OFF) ? "" :"not"); | 801 | (val[CAPAB_0] & IORDY_OFF) ? "" :"not"); |
835 | } | 802 | } else |
836 | else | ||
837 | printf("no IORDY\n"); | 803 | printf("no IORDY\n"); |
838 | 804 | ||
839 | if ((like_std == 1) && val[BUF_TYPE]) | 805 | if ((like_std == 1) && val[BUF_TYPE]) { |
840 | { | ||
841 | printf("\tBuffer type: %04x: %s%s\n", val[BUF_TYPE], | 806 | printf("\tBuffer type: %04x: %s%s\n", val[BUF_TYPE], |
842 | (val[BUF_TYPE] < 2) ? "single port, single-sector" : "dual port, multi-sector", | 807 | (val[BUF_TYPE] < 2) ? "single port, single-sector" : "dual port, multi-sector", |
843 | (val[BUF_TYPE] > 2) ? " with read caching ability" : ""); | 808 | (val[BUF_TYPE] > 2) ? " with read caching ability" : ""); |
844 | } | 809 | } |
845 | 810 | ||
846 | if ((min_std == 1) && (val[BUFFER__SIZE] && (val[BUFFER__SIZE] != NOVAL_1))) | 811 | if ((min_std == 1) && (val[BUFFER__SIZE] && (val[BUFFER__SIZE] != NOVAL_1))) { |
847 | { | ||
848 | printf("\tBuffer size: %.1fkB\n",(float)val[BUFFER__SIZE]/2); | 812 | printf("\tBuffer size: %.1fkB\n",(float)val[BUFFER__SIZE]/2); |
849 | } | 813 | } |
850 | if ((min_std < 4) && (val[RW_LONG])) | 814 | if ((min_std < 4) && (val[RW_LONG])) { |
851 | { | ||
852 | printf("\tbytes avail on r/w long: %u\n",val[RW_LONG]); | 815 | printf("\tbytes avail on r/w long: %u\n",val[RW_LONG]); |
853 | } | 816 | } |
854 | if ((eqpt != CDROM) && (like_std > 3)) | 817 | if ((eqpt != CDROM) && (like_std > 3)) { |
855 | { | ||
856 | printf("\tQueue depth: %u\n",(val[QUEUE_DEPTH] & DEPTH_BITS)+1); | 818 | printf("\tQueue depth: %u\n",(val[QUEUE_DEPTH] & DEPTH_BITS)+1); |
857 | } | 819 | } |
858 | 820 | ||
859 | if (dev == ATA_DEV) | 821 | if (dev == ATA_DEV) { |
860 | { | ||
861 | if (like_std == 1) | 822 | if (like_std == 1) |
862 | printf("\tCan%s perform double-word IO\n",(!val[DWORD_IO]) ?"not":""); | 823 | printf("\tCan%s perform double-word IO\n",(!val[DWORD_IO]) ?"not":""); |
863 | else | 824 | else { |
864 | { | ||
865 | printf("\tStandby timer values: spec'd by %s", (val[CAPAB_0] & STD_STBY) ? "Standard" : "Vendor"); | 825 | printf("\tStandby timer values: spec'd by %s", (val[CAPAB_0] & STD_STBY) ? "Standard" : "Vendor"); |
866 | if ((like_std > 3) && ((val[CAPAB_1] & VALID) == VALID_VAL)) | 826 | if ((like_std > 3) && ((val[CAPAB_1] & VALID) == VALID_VAL)) |
867 | printf(", %s device specific minimum\n",(val[CAPAB_1] & MIN_STANDBY_TIMER)?"with":"no"); | 827 | printf(", %s device specific minimum\n",(val[CAPAB_1] & MIN_STANDBY_TIMER)?"with":"no"); |
868 | else | 828 | else |
869 | puts(""); | 829 | puts(""); |
870 | } | 830 | } |
871 | printf("\tR/W multiple sector transfer: "); | 831 | printf("\tR/W multiple sector transfer: "); |
872 | if ((like_std < 3) && !(val[SECTOR_XFER_MAX] & SECTOR_XFER)) | 832 | if ((like_std < 3) && !(val[SECTOR_XFER_MAX] & SECTOR_XFER)) |
873 | printf("not supported\n"); | 833 | printf("not supported\n"); |
874 | else | 834 | else { |
875 | { | ||
876 | printf("Max = %u\tCurrent = ",val[SECTOR_XFER_MAX] & SECTOR_XFER); | 835 | printf("Max = %u\tCurrent = ",val[SECTOR_XFER_MAX] & SECTOR_XFER); |
877 | if (val[SECTOR_XFER_CUR] & MULTIPLE_SETTING_VALID) | 836 | if (val[SECTOR_XFER_CUR] & MULTIPLE_SETTING_VALID) |
878 | printf("%u\n", val[SECTOR_XFER_CUR] & SECTOR_XFER); | 837 | printf("%u\n", val[SECTOR_XFER_CUR] & SECTOR_XFER); |
879 | else | 838 | else |
880 | printf("?\n"); | 839 | printf("?\n"); |
881 | } | 840 | } |
882 | if ((like_std > 3) && (val[CMDS_SUPP_1] & 0x0008)) | 841 | if ((like_std > 3) && (val[CMDS_SUPP_1] & 0x0008)) { |
883 | { | ||
884 | /* We print out elsewhere whether the APM feature is enabled or | 842 | /* We print out elsewhere whether the APM feature is enabled or |
885 | not. If it's not enabled, let's not repeat the info; just print | 843 | not. If it's not enabled, let's not repeat the info; just print |
886 | nothing here. */ | 844 | nothing here. */ |
887 | printf("\tAdvancedPM level: "); | 845 | printf("\tAdvancedPM level: "); |
888 | if ( (val[ADV_PWR] & 0xFF00) == 0x4000 ) | 846 | if ((val[ADV_PWR] & 0xFF00) == 0x4000) { |
889 | { | ||
890 | uint8_t apm_level = val[ADV_PWR] & 0x00FF; | 847 | uint8_t apm_level = val[ADV_PWR] & 0x00FF; |
891 | printf("%u (0x%x)\n", apm_level, apm_level); | 848 | printf("%u (0x%x)\n", apm_level, apm_level); |
892 | } | 849 | } |
@@ -897,15 +854,12 @@ static void identify(uint16_t *id_supplied) | |||
897 | printf("\tRecommended acoustic management value: %u, current value: %u\n", | 854 | printf("\tRecommended acoustic management value: %u, current value: %u\n", |
898 | (val[ACOUSTIC] >> 8) & 0x00ff, val[ACOUSTIC] & 0x00ff); | 855 | (val[ACOUSTIC] >> 8) & 0x00ff, val[ACOUSTIC] & 0x00ff); |
899 | } | 856 | } |
900 | } | 857 | } else { |
901 | else | ||
902 | { | ||
903 | /* ATAPI */ | 858 | /* ATAPI */ |
904 | if (eqpt != CDROM && (val[CAPAB_0] & SWRST_REQ)) | 859 | if (eqpt != CDROM && (val[CAPAB_0] & SWRST_REQ)) |
905 | printf("\tATA sw reset required\n"); | 860 | printf("\tATA sw reset required\n"); |
906 | 861 | ||
907 | if (val[PKT_REL] || val[SVC_NBSY]) | 862 | if (val[PKT_REL] || val[SVC_NBSY]) { |
908 | { | ||
909 | printf("\tOverlap support:"); | 863 | printf("\tOverlap support:"); |
910 | if (val[PKT_REL]) printf(" %uus to release bus.",val[PKT_REL]); | 864 | if (val[PKT_REL]) printf(" %uus to release bus.",val[PKT_REL]); |
911 | if (val[SVC_NBSY]) printf(" %uus to clear BSY after SERVICE cmd.",val[SVC_NBSY]); | 865 | if (val[SVC_NBSY]) printf(" %uus to clear BSY after SERVICE cmd.",val[SVC_NBSY]); |
@@ -917,24 +871,20 @@ static void identify(uint16_t *id_supplied) | |||
917 | printf("\tDMA: "); | 871 | printf("\tDMA: "); |
918 | if (!(val[CAPAB_0] & DMA_SUP)) | 872 | if (!(val[CAPAB_0] & DMA_SUP)) |
919 | printf("not supported\n"); | 873 | printf("not supported\n"); |
920 | else | 874 | else { |
921 | { | ||
922 | if (val[DMA_MODE] && !val[SINGLE_DMA] && !val[MULTI_DMA]) | 875 | if (val[DMA_MODE] && !val[SINGLE_DMA] && !val[MULTI_DMA]) |
923 | printf(" sdma%u\n",(val[DMA_MODE] & MODE) >> 8); | 876 | printf(" sdma%u\n",(val[DMA_MODE] & MODE) >> 8); |
924 | if (val[SINGLE_DMA]) | 877 | if (val[SINGLE_DMA]) { |
925 | { | ||
926 | jj = val[SINGLE_DMA]; | 878 | jj = val[SINGLE_DMA]; |
927 | kk = val[SINGLE_DMA] >> 8; | 879 | kk = val[SINGLE_DMA] >> 8; |
928 | err_dma += mode_loop(jj,kk,'s',&have_mode); | 880 | err_dma += mode_loop(jj,kk,'s',&have_mode); |
929 | } | 881 | } |
930 | if (val[MULTI_DMA]) | 882 | if (val[MULTI_DMA]) { |
931 | { | ||
932 | jj = val[MULTI_DMA]; | 883 | jj = val[MULTI_DMA]; |
933 | kk = val[MULTI_DMA] >> 8; | 884 | kk = val[MULTI_DMA] >> 8; |
934 | err_dma += mode_loop(jj,kk,'m',&have_mode); | 885 | err_dma += mode_loop(jj,kk,'m',&have_mode); |
935 | } | 886 | } |
936 | if ((val[WHATS_VALID] & OK_W88) && val[ULTRA_DMA]) | 887 | if ((val[WHATS_VALID] & OK_W88) && val[ULTRA_DMA]) { |
937 | { | ||
938 | jj = val[ULTRA_DMA]; | 888 | jj = val[ULTRA_DMA]; |
939 | kk = val[ULTRA_DMA] >> 8; | 889 | kk = val[ULTRA_DMA] >> 8; |
940 | err_dma += mode_loop(jj,kk,'u',&have_mode); | 890 | err_dma += mode_loop(jj,kk,'u',&have_mode); |
@@ -945,9 +895,9 @@ static void identify(uint16_t *id_supplied) | |||
945 | if ((dev == ATAPI_DEV) && (eqpt != CDROM) && (val[CAPAB_0] & DMA_IL_SUP)) | 895 | if ((dev == ATAPI_DEV) && (eqpt != CDROM) && (val[CAPAB_0] & DMA_IL_SUP)) |
946 | printf("\t\tInterleaved DMA support\n"); | 896 | printf("\t\tInterleaved DMA support\n"); |
947 | 897 | ||
948 | if ((val[WHATS_VALID] & OK_W64_70) && | 898 | if ((val[WHATS_VALID] & OK_W64_70) |
949 | (val[DMA_TIME_MIN] || val[DMA_TIME_NORM])) | 899 | && (val[DMA_TIME_MIN] || val[DMA_TIME_NORM]) |
950 | { | 900 | ) { |
951 | printf("\t\tCycle time:"); | 901 | printf("\t\tCycle time:"); |
952 | if (val[DMA_TIME_MIN]) printf(" min=%uns",val[DMA_TIME_MIN]); | 902 | if (val[DMA_TIME_MIN]) printf(" min=%uns",val[DMA_TIME_MIN]); |
953 | if (val[DMA_TIME_NORM]) printf(" recommended=%uns",val[DMA_TIME_NORM]); | 903 | if (val[DMA_TIME_NORM]) printf(" recommended=%uns",val[DMA_TIME_NORM]); |
@@ -959,29 +909,22 @@ static void identify(uint16_t *id_supplied) | |||
959 | printf("\tPIO: "); | 909 | printf("\tPIO: "); |
960 | /* If a drive supports mode n (e.g. 3), it also supports all modes less | 910 | /* If a drive supports mode n (e.g. 3), it also supports all modes less |
961 | * than n (e.g. 3, 2, 1 and 0). Print all the modes. */ | 911 | * than n (e.g. 3, 2, 1 and 0). Print all the modes. */ |
962 | if ((val[WHATS_VALID] & OK_W64_70) && (val[ADV_PIO_MODES] & PIO_SUP)) | 912 | if ((val[WHATS_VALID] & OK_W64_70) && (val[ADV_PIO_MODES] & PIO_SUP)) { |
963 | { | ||
964 | jj = ((val[ADV_PIO_MODES] & PIO_SUP) << 3) | 0x0007; | 913 | jj = ((val[ADV_PIO_MODES] & PIO_SUP) << 3) | 0x0007; |
965 | for (ii = 0; ii <= PIO_MODE_MAX ; ii++) | 914 | for (ii = 0; ii <= PIO_MODE_MAX ; ii++) { |
966 | { | ||
967 | if (jj & 0x0001) printf("pio%d ",ii); | 915 | if (jj & 0x0001) printf("pio%d ",ii); |
968 | jj >>=1; | 916 | jj >>=1; |
969 | } | 917 | } |
970 | puts(""); | 918 | puts(""); |
971 | } | 919 | } else if (((min_std < 5) || (eqpt == CDROM)) && (val[PIO_MODE] & MODE)) { |
972 | else if (((min_std < 5) || (eqpt == CDROM)) && (val[PIO_MODE] & MODE) ) | ||
973 | { | ||
974 | for (ii = 0; ii <= val[PIO_MODE]>>8; ii++) | 920 | for (ii = 0; ii <= val[PIO_MODE]>>8; ii++) |
975 | printf("pio%d ",ii); | 921 | printf("pio%d ",ii); |
976 | puts(""); | 922 | puts(""); |
977 | } | 923 | } else |
978 | else | ||
979 | printf("unknown\n"); | 924 | printf("unknown\n"); |
980 | 925 | ||
981 | if (val[WHATS_VALID] & OK_W64_70) | 926 | if (val[WHATS_VALID] & OK_W64_70) { |
982 | { | 927 | if (val[PIO_NO_FLOW] || val[PIO_FLOW]) { |
983 | if (val[PIO_NO_FLOW] || val[PIO_FLOW]) | ||
984 | { | ||
985 | printf("\t\tCycle time:"); | 928 | printf("\t\tCycle time:"); |
986 | if (val[PIO_NO_FLOW]) printf(" no flow control=%uns", val[PIO_NO_FLOW]); | 929 | if (val[PIO_NO_FLOW]) printf(" no flow control=%uns", val[PIO_NO_FLOW]); |
987 | if (val[PIO_FLOW]) printf(" IORDY flow control=%uns", val[PIO_FLOW]); | 930 | if (val[PIO_FLOW]) printf(" IORDY flow control=%uns", val[PIO_FLOW]); |
@@ -989,25 +932,21 @@ static void identify(uint16_t *id_supplied) | |||
989 | } | 932 | } |
990 | } | 933 | } |
991 | 934 | ||
992 | if ((val[CMDS_SUPP_1] & VALID) == VALID_VAL) | 935 | if ((val[CMDS_SUPP_1] & VALID) == VALID_VAL) { |
993 | { | ||
994 | printf("Commands/features:\n\tEnabled\tSupported:\n"); | 936 | printf("Commands/features:\n\tEnabled\tSupported:\n"); |
995 | jj = val[CMDS_SUPP_0]; | 937 | jj = val[CMDS_SUPP_0]; |
996 | kk = val[CMDS_EN_0]; | 938 | kk = val[CMDS_EN_0]; |
997 | for (ii = 0; ii < NUM_CMD_FEAT_STR; ii++) | 939 | for (ii = 0; ii < NUM_CMD_FEAT_STR; ii++) { |
998 | { | 940 | if ((jj & 0x8000) && (*cmd_feat_str[ii] != '\0')) { |
999 | if ((jj & 0x8000) && (*cmd_feat_str[ii] != '\0')) | ||
1000 | { | ||
1001 | printf("\t%s\t%s\n", (kk & 0x8000) ? " *" : "", cmd_feat_str[ii]); | 941 | printf("\t%s\t%s\n", (kk & 0x8000) ? " *" : "", cmd_feat_str[ii]); |
1002 | } | 942 | } |
1003 | jj <<=1; kk<<=1; | 943 | jj <<= 1; |
1004 | if (ii%16 == 15) | 944 | kk <<= 1; |
1005 | { | 945 | if (ii % 16 == 15) { |
1006 | jj = val[CMDS_SUPP_0+1+(ii/16)]; | 946 | jj = val[CMDS_SUPP_0+1+(ii/16)]; |
1007 | kk = val[CMDS_EN_0+1+(ii/16)]; | 947 | kk = val[CMDS_EN_0+1+(ii/16)]; |
1008 | } | 948 | } |
1009 | if (ii == 31) | 949 | if (ii == 31) { |
1010 | { | ||
1011 | if ((val[CMDS_SUPP_2] & VALID) != VALID_VAL) | 950 | if ((val[CMDS_SUPP_2] & VALID) != VALID_VAL) |
1012 | ii +=16; | 951 | ii +=16; |
1013 | } | 952 | } |
@@ -1017,31 +956,26 @@ static void identify(uint16_t *id_supplied) | |||
1017 | if ((val[RM_STAT] & RM_STAT_BITS) == RM_STAT_SUP) | 956 | if ((val[RM_STAT] & RM_STAT_BITS) == RM_STAT_SUP) |
1018 | printf("\t%s supported\n", cmd_feat_str[27]); | 957 | printf("\t%s supported\n", cmd_feat_str[27]); |
1019 | 958 | ||
1020 | |||
1021 | /* security */ | 959 | /* security */ |
1022 | if ((eqpt != CDROM) && (like_std > 3) && | 960 | if ((eqpt != CDROM) && (like_std > 3) |
1023 | (val[SECU_STATUS] || val[ERASE_TIME] || val[ENH_ERASE_TIME])) | 961 | && (val[SECU_STATUS] || val[ERASE_TIME] || val[ENH_ERASE_TIME]) |
1024 | { | 962 | ) { |
1025 | printf("Security:\n"); | 963 | printf("Security:\n"); |
1026 | if (val[PSWD_CODE] && (val[PSWD_CODE] != NOVAL_1)) | 964 | if (val[PSWD_CODE] && (val[PSWD_CODE] != NOVAL_1)) |
1027 | printf("\tMaster password revision code = %u\n",val[PSWD_CODE]); | 965 | printf("\tMaster password revision code = %u\n",val[PSWD_CODE]); |
1028 | jj = val[SECU_STATUS]; | 966 | jj = val[SECU_STATUS]; |
1029 | if (jj) | 967 | if (jj) { |
1030 | { | 968 | for (ii = 0; ii < NUM_SECU_STR; ii++) { |
1031 | for (ii = 0; ii < NUM_SECU_STR; ii++) | ||
1032 | { | ||
1033 | printf("\t%s\t%s\n", (!(jj & 0x0001)) ? "not" : "", secu_str[ii]); | 969 | printf("\t%s\t%s\n", (!(jj & 0x0001)) ? "not" : "", secu_str[ii]); |
1034 | jj >>=1; | 970 | jj >>=1; |
1035 | } | 971 | } |
1036 | if (val[SECU_STATUS] & SECU_ENABLED) | 972 | if (val[SECU_STATUS] & SECU_ENABLED) { |
1037 | { | ||
1038 | printf("\tSecurity level %s\n", (val[SECU_STATUS] & SECU_LEVEL) ? "maximum" : "high"); | 973 | printf("\tSecurity level %s\n", (val[SECU_STATUS] & SECU_LEVEL) ? "maximum" : "high"); |
1039 | } | 974 | } |
1040 | } | 975 | } |
1041 | jj = val[ERASE_TIME] & ERASE_BITS; | 976 | jj = val[ERASE_TIME] & ERASE_BITS; |
1042 | kk = val[ENH_ERASE_TIME] & ERASE_BITS; | 977 | kk = val[ENH_ERASE_TIME] & ERASE_BITS; |
1043 | if (jj || kk) | 978 | if (jj || kk) { |
1044 | { | ||
1045 | printf("\t"); | 979 | printf("\t"); |
1046 | if (jj) printf("%umin for %sSECURITY ERASE UNIT. ", jj==ERASE_BITS ? 508 : jj<<1, ""); | 980 | if (jj) printf("%umin for %sSECURITY ERASE UNIT. ", jj==ERASE_BITS ? 508 : jj<<1, ""); |
1047 | if (kk) printf("%umin for %sSECURITY ERASE UNIT. ", kk==ERASE_BITS ? 508 : kk<<1, "ENHANCED "); | 981 | if (kk) printf("%umin for %sSECURITY ERASE UNIT. ", kk==ERASE_BITS ? 508 : kk<<1, "ENHANCED "); |
@@ -1051,8 +985,7 @@ static void identify(uint16_t *id_supplied) | |||
1051 | 985 | ||
1052 | /* reset result */ | 986 | /* reset result */ |
1053 | jj = val[HWRST_RSLT]; | 987 | jj = val[HWRST_RSLT]; |
1054 | if ((jj & VALID) == VALID_VAL) | 988 | if ((jj & VALID) == VALID_VAL) { |
1055 | { | ||
1056 | if (!(oo = (jj & RST0))) | 989 | if (!(oo = (jj & RST0))) |
1057 | jj >>= 8; | 990 | jj >>= 8; |
1058 | if ((jj & DEV_DET) == JUMPER_VAL) | 991 | if ((jj & DEV_DET) == JUMPER_VAL) |
@@ -1066,17 +999,15 @@ static void identify(uint16_t *id_supplied) | |||
1066 | } | 999 | } |
1067 | 1000 | ||
1068 | /* more stuff from std 5 */ | 1001 | /* more stuff from std 5 */ |
1069 | if ((like_std > 4) && (eqpt != CDROM)) | 1002 | if ((like_std > 4) && (eqpt != CDROM)) { |
1070 | { | 1003 | if (val[CFA_PWR_MODE] & VALID_W160) { |
1071 | if (val[CFA_PWR_MODE] & VALID_W160) | ||
1072 | { | ||
1073 | printf("CFA power mode 1:\n\t%s%s\n", (val[CFA_PWR_MODE] & PWR_MODE_OFF) ? "disabled" : "enabled", | 1004 | printf("CFA power mode 1:\n\t%s%s\n", (val[CFA_PWR_MODE] & PWR_MODE_OFF) ? "disabled" : "enabled", |
1074 | (val[CFA_PWR_MODE] & PWR_MODE_REQ) ? " and required by some commands" : ""); | 1005 | (val[CFA_PWR_MODE] & PWR_MODE_REQ) ? " and required by some commands" : ""); |
1075 | 1006 | ||
1076 | if (val[CFA_PWR_MODE] & MAX_AMPS) printf("\tMaximum current = %uma\n",val[CFA_PWR_MODE] & MAX_AMPS); | 1007 | if (val[CFA_PWR_MODE] & MAX_AMPS) |
1008 | printf("\tMaximum current = %uma\n",val[CFA_PWR_MODE] & MAX_AMPS); | ||
1077 | } | 1009 | } |
1078 | if ((val[INTEGRITY] & SIG) == SIG_VAL) | 1010 | if ((val[INTEGRITY] & SIG) == SIG_VAL) { |
1079 | { | ||
1080 | printf("Checksum: %scorrect\n", chksum ? "in" : ""); | 1011 | printf("Checksum: %scorrect\n", chksum ? "in" : ""); |
1081 | } | 1012 | } |
1082 | } | 1013 | } |
@@ -1092,7 +1023,7 @@ static unsigned long set_readahead, get_readahead, Xreadahead; | |||
1092 | static unsigned long set_readonly, get_readonly, readonly; | 1023 | static unsigned long set_readonly, get_readonly, readonly; |
1093 | static unsigned long set_unmask, get_unmask, unmask; | 1024 | static unsigned long set_unmask, get_unmask, unmask; |
1094 | static unsigned long set_mult, get_mult, mult; | 1025 | static unsigned long set_mult, get_mult, mult; |
1095 | #ifdef CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA | 1026 | #if ENABLE_FEATURE_HDPARM_HDIO_GETSET_DMA |
1096 | static unsigned long set_dma, get_dma, dma; | 1027 | static unsigned long set_dma, get_dma, dma; |
1097 | #endif | 1028 | #endif |
1098 | static unsigned long set_dma_q, get_dma_q, dma_q; | 1029 | static unsigned long set_dma_q, get_dma_q, dma_q; |
@@ -1117,30 +1048,30 @@ static unsigned long set_sleepnow, get_sleepnow; | |||
1117 | static unsigned long get_powermode; | 1048 | static unsigned long get_powermode; |
1118 | static unsigned long set_apmmode, get_apmmode, apmmode; | 1049 | static unsigned long set_apmmode, get_apmmode, apmmode; |
1119 | #endif | 1050 | #endif |
1120 | #ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY | 1051 | #if ENABLE_FEATURE_HDPARM_GET_IDENTITY |
1121 | static int get_IDentity; | 1052 | static int get_IDentity; |
1122 | #endif | 1053 | #endif |
1123 | #ifdef CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF | 1054 | #if ENABLE_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF |
1124 | static unsigned long unregister_hwif; | 1055 | static unsigned long unregister_hwif; |
1125 | static unsigned long hwif; | 1056 | static unsigned long hwif; |
1126 | #endif | 1057 | #endif |
1127 | #ifdef CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF | 1058 | #if ENABLE_FEATURE_HDPARM_HDIO_SCAN_HWIF |
1128 | static unsigned long scan_hwif; | 1059 | static unsigned long scan_hwif; |
1129 | static unsigned long hwif_data; | 1060 | static unsigned long hwif_data; |
1130 | static unsigned long hwif_ctrl; | 1061 | static unsigned long hwif_ctrl; |
1131 | static unsigned long hwif_irq; | 1062 | static unsigned long hwif_irq; |
1132 | #endif | 1063 | #endif |
1133 | #ifdef CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF | 1064 | #if ENABLE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF |
1134 | static unsigned long set_busstate, get_busstate, busstate; | 1065 | static unsigned long set_busstate, get_busstate, busstate; |
1135 | #endif | 1066 | #endif |
1136 | static int reread_partn; | 1067 | static int reread_partn; |
1137 | 1068 | ||
1138 | #ifdef CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET | 1069 | #if ENABLE_FEATURE_HDPARM_HDIO_DRIVE_RESET |
1139 | static int perform_reset; | 1070 | static int perform_reset; |
1140 | #endif /* CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET */ | 1071 | #endif /* FEATURE_HDPARM_HDIO_DRIVE_RESET */ |
1141 | #ifdef CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF | 1072 | #if ENABLE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF |
1142 | static unsigned long perform_tristate, tristate; | 1073 | static unsigned long perform_tristate, tristate; |
1143 | #endif /* CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF */ | 1074 | #endif /* FEATURE_HDPARM_HDIO_TRISTATE_HWIF */ |
1144 | 1075 | ||
1145 | // Historically, if there was no HDIO_OBSOLETE_IDENTITY, then | 1076 | // Historically, if there was no HDIO_OBSOLETE_IDENTITY, then |
1146 | // then the HDIO_GET_IDENTITY only returned 142 bytes. | 1077 | // then the HDIO_GET_IDENTITY only returned 142 bytes. |
@@ -1153,7 +1084,7 @@ static unsigned long perform_tristate, tristate; | |||
1153 | // On a really old system, it will not, and we will be confused. | 1084 | // On a really old system, it will not, and we will be confused. |
1154 | // Too bad, really. | 1085 | // Too bad, really. |
1155 | 1086 | ||
1156 | #ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY | 1087 | #if ENABLE_FEATURE_HDPARM_GET_IDENTITY |
1157 | static const char * const cfg_str[] = | 1088 | static const char * const cfg_str[] = |
1158 | { "", "HardSect", "SoftSect", "NotMFM", | 1089 | { "", "HardSect", "SoftSect", "NotMFM", |
1159 | "HdSw>15uSec", "SpinMotCtl", "Fixed", "Removeable", | 1090 | "HdSw>15uSec", "SpinMotCtl", "Fixed", "Removeable", |
@@ -1166,7 +1097,7 @@ static const char * const BuffType[] = {"Unknown", "1Sect", "DualPort", "DualPor | |||
1166 | static void dump_identity(const struct hd_driveid *id) | 1097 | static void dump_identity(const struct hd_driveid *id) |
1167 | { | 1098 | { |
1168 | int i; | 1099 | int i; |
1169 | const unsigned short int *id_regs= (const void*) id; | 1100 | const unsigned short int *id_regs = (const void*) id; |
1170 | 1101 | ||
1171 | printf("\n Model=%.40s, FwRev=%.8s, SerialNo=%.20s\n Config={", | 1102 | printf("\n Model=%.40s, FwRev=%.8s, SerialNo=%.20s\n Config={", |
1172 | id->model, id->fw_rev, id->serial_no); | 1103 | id->model, id->fw_rev, id->serial_no); |
@@ -1180,10 +1111,9 @@ static void dump_identity(const struct hd_driveid *id) | |||
1180 | id->sector_bytes, id->ecc_bytes, | 1111 | id->sector_bytes, id->ecc_bytes, |
1181 | id->buf_type, BuffType[(id->buf_type > 3) ? 0 : id->buf_type], | 1112 | id->buf_type, BuffType[(id->buf_type > 3) ? 0 : id->buf_type], |
1182 | id->buf_size/2, id->max_multsect); | 1113 | id->buf_size/2, id->max_multsect); |
1183 | if (id->max_multsect) | 1114 | if (id->max_multsect) { |
1184 | { | ||
1185 | printf(", MultSect="); | 1115 | printf(", MultSect="); |
1186 | if (!(id->multsect_valid&1)) | 1116 | if (!(id->multsect_valid & 1)) |
1187 | printf("?%u?", id->multsect); | 1117 | printf("?%u?", id->multsect); |
1188 | else if (id->multsect) | 1118 | else if (id->multsect) |
1189 | printf("%u", id->multsect); | 1119 | printf("%u", id->multsect); |
@@ -1192,44 +1122,40 @@ static void dump_identity(const struct hd_driveid *id) | |||
1192 | } | 1122 | } |
1193 | puts(""); | 1123 | puts(""); |
1194 | 1124 | ||
1195 | if (!(id->field_valid&1)) | 1125 | if (!(id->field_valid & 1)) |
1196 | printf(" (maybe):"); | 1126 | printf(" (maybe):"); |
1197 | 1127 | ||
1198 | printf(" CurCHS=%u/%u/%u, CurSects=%lu, LBA=%s",id->cur_cyls, id->cur_heads, | 1128 | printf(" CurCHS=%u/%u/%u, CurSects=%lu, LBA=%s",id->cur_cyls, id->cur_heads, |
1199 | id->cur_sectors, | 1129 | id->cur_sectors, |
1200 | (BB_BIG_ENDIAN) ? | 1130 | (BB_BIG_ENDIAN) ? |
1201 | (long unsigned int)(id->cur_capacity0 << 16) | id->cur_capacity1 : | 1131 | (long unsigned int)(id->cur_capacity0 << 16) | id->cur_capacity1 : |
1202 | (long unsigned int)(id->cur_capacity1 << 16) | id->cur_capacity0, | 1132 | (long unsigned int)(id->cur_capacity1 << 16) | id->cur_capacity0, |
1203 | ((id->capability&2) == 0) ? "no" : "yes"); | 1133 | ((id->capability&2) == 0) ? "no" : "yes"); |
1204 | 1134 | ||
1205 | if (id->capability&2) | 1135 | if (id->capability & 2) |
1206 | printf(", LBAsects=%u", id->lba_capacity); | 1136 | printf(", LBAsects=%u", id->lba_capacity); |
1207 | 1137 | ||
1208 | printf("\n IORDY=%s", (id->capability&8) ? (id->capability&4) ? "on/off" : "yes" : "no"); | 1138 | printf("\n IORDY=%s", (id->capability & 8) ? (id->capability & 4) ? "on/off" : "yes" : "no"); |
1209 | 1139 | ||
1210 | if (((id->capability&8) || (id->field_valid&2)) && id->field_valid&2) | 1140 | if (((id->capability & 8) || (id->field_valid & 2)) && (id->field_valid & 2)) |
1211 | printf(", tPIO={min:%u,w/IORDY:%u}", id->eide_pio, id->eide_pio_iordy); | 1141 | printf(", tPIO={min:%u,w/IORDY:%u}", id->eide_pio, id->eide_pio_iordy); |
1212 | 1142 | ||
1213 | if ((id->capability&1) && (id->field_valid&2)) | 1143 | if ((id->capability & 1) && (id->field_valid & 2)) |
1214 | printf(", tDMA={min:%u,rec:%u}", id->eide_dma_min, id->eide_dma_time); | 1144 | printf(", tDMA={min:%u,rec:%u}", id->eide_dma_min, id->eide_dma_time); |
1215 | 1145 | ||
1216 | printf("\n PIO modes: "); | 1146 | printf("\n PIO modes: "); |
1217 | if (id->tPIO <= 5) | 1147 | if (id->tPIO <= 5) { |
1218 | { | ||
1219 | printf("pio0 "); | 1148 | printf("pio0 "); |
1220 | if (id->tPIO >= 1) printf("pio1 "); | 1149 | if (id->tPIO >= 1) printf("pio1 "); |
1221 | if (id->tPIO >= 2) printf("pio2 "); | 1150 | if (id->tPIO >= 2) printf("pio2 "); |
1222 | } | 1151 | } |
1223 | if (id->field_valid&2) | 1152 | if (id->field_valid & 2) { |
1224 | { | ||
1225 | if (id->eide_pio_modes & 1) printf("pio3 "); | 1153 | if (id->eide_pio_modes & 1) printf("pio3 "); |
1226 | if (id->eide_pio_modes & 2) printf("pio4 "); | 1154 | if (id->eide_pio_modes & 2) printf("pio4 "); |
1227 | if (id->eide_pio_modes &~3) printf("pio? "); | 1155 | if (id->eide_pio_modes &~3) printf("pio? "); |
1228 | } | 1156 | } |
1229 | if (id->capability&1) | 1157 | if (id->capability & 1) { |
1230 | { | 1158 | if (id->dma_1word | id->dma_mword) { |
1231 | if (id->dma_1word | id->dma_mword) | ||
1232 | { | ||
1233 | printf("\n DMA modes: "); | 1159 | printf("\n DMA modes: "); |
1234 | if (id->dma_1word & 0x100) printf("*"); | 1160 | if (id->dma_1word & 0x100) printf("*"); |
1235 | if (id->dma_1word & 1) printf("sdma0 "); | 1161 | if (id->dma_1word & 1) printf("sdma0 "); |
@@ -1249,8 +1175,7 @@ static void dump_identity(const struct hd_driveid *id) | |||
1249 | if (id->dma_mword & 0xf8) printf("mdma? "); | 1175 | if (id->dma_mword & 0xf8) printf("mdma? "); |
1250 | } | 1176 | } |
1251 | } | 1177 | } |
1252 | if (((id->capability&8) || (id->field_valid&2)) && id->field_valid&4) | 1178 | if (((id->capability & 8) || (id->field_valid & 2)) && id->field_valid & 4) { |
1253 | { | ||
1254 | printf("\n UDMA modes: "); | 1179 | printf("\n UDMA modes: "); |
1255 | if (id->dma_ultra & 0x100) printf("*"); | 1180 | if (id->dma_ultra & 0x100) printf("*"); |
1256 | if (id->dma_ultra & 0x001) printf("udma0 "); | 1181 | if (id->dma_ultra & 0x001) printf("udma0 "); |
@@ -1259,11 +1184,9 @@ static void dump_identity(const struct hd_driveid *id) | |||
1259 | if (id->dma_ultra & 0x400) printf("*"); | 1184 | if (id->dma_ultra & 0x400) printf("*"); |
1260 | if (id->dma_ultra & 0x004) printf("udma2 "); | 1185 | if (id->dma_ultra & 0x004) printf("udma2 "); |
1261 | #ifdef __NEW_HD_DRIVE_ID | 1186 | #ifdef __NEW_HD_DRIVE_ID |
1262 | if (id->hw_config & 0x2000) | 1187 | if (id->hw_config & 0x2000) { |
1263 | { | ||
1264 | #else /* !__NEW_HD_DRIVE_ID */ | 1188 | #else /* !__NEW_HD_DRIVE_ID */ |
1265 | if (id->word93 & 0x2000) | 1189 | if (id->word93 & 0x2000) { |
1266 | { | ||
1267 | #endif /* __NEW_HD_DRIVE_ID */ | 1190 | #endif /* __NEW_HD_DRIVE_ID */ |
1268 | if (id->dma_ultra & 0x0800) printf("*"); | 1191 | if (id->dma_ultra & 0x0800) printf("*"); |
1269 | if (id->dma_ultra & 0x0008) printf("udma3 "); | 1192 | if (id->dma_ultra & 0x0008) printf("udma3 "); |
@@ -1278,20 +1201,20 @@ static void dump_identity(const struct hd_driveid *id) | |||
1278 | } | 1201 | } |
1279 | } | 1202 | } |
1280 | printf("\n AdvancedPM=%s",((id_regs[83]&8)==0)?"no":"yes"); | 1203 | printf("\n AdvancedPM=%s",((id_regs[83]&8)==0)?"no":"yes"); |
1281 | if (id_regs[83] & 8) | 1204 | if (id_regs[83] & 8) { |
1282 | { | 1205 | if (!(id_regs[86] & 8)) |
1283 | if (!(id_regs[86]&8)) | ||
1284 | printf(": disabled (255)"); | 1206 | printf(": disabled (255)"); |
1285 | else if ((id_regs[91]&0xFF00)!=0x4000) | 1207 | else if ((id_regs[91] & 0xFF00) != 0x4000) |
1286 | printf(": unknown setting"); | 1208 | printf(": unknown setting"); |
1287 | else | 1209 | else |
1288 | printf(": mode=0x%02X (%u)",id_regs[91]&0xFF,id_regs[91]&0xFF); | 1210 | printf(": mode=0x%02X (%u)",id_regs[91]&0xFF,id_regs[91]&0xFF); |
1289 | } | 1211 | } |
1290 | if (id_regs[82]&0x20) | 1212 | if (id_regs[82] & 0x20) |
1291 | printf(" WriteCache=%s",(id_regs[85]&0x20) ? "enabled" : "disabled"); | 1213 | printf(" WriteCache=%s",(id_regs[85]&0x20) ? "enabled" : "disabled"); |
1292 | #ifdef __NEW_HD_DRIVE_ID | 1214 | #ifdef __NEW_HD_DRIVE_ID |
1293 | if ((id->minor_rev_num && id->minor_rev_num <= 31) || (id->major_rev_num && id->minor_rev_num <= 31)) | 1215 | if ((id->minor_rev_num && id->minor_rev_num <= 31) |
1294 | { | 1216 | || (id->major_rev_num && id->minor_rev_num <= 31) |
1217 | ) { | ||
1295 | printf("\n Drive conforms to: %s: ", (id->minor_rev_num <= 31) ? minor_str[id->minor_rev_num] : "Unknown"); | 1218 | printf("\n Drive conforms to: %s: ", (id->minor_rev_num <= 31) ? minor_str[id->minor_rev_num] : "Unknown"); |
1296 | if (id->major_rev_num != 0x0000 && /* NOVAL_0 */ | 1219 | if (id->major_rev_num != 0x0000 && /* NOVAL_0 */ |
1297 | id->major_rev_num != 0xFFFF) { /* NOVAL_1 */ | 1220 | id->major_rev_num != 0xFFFF) { /* NOVAL_1 */ |
@@ -1328,7 +1251,8 @@ static int read_big_block(int fd, char *buf) | |||
1328 | { | 1251 | { |
1329 | int i; | 1252 | int i; |
1330 | 1253 | ||
1331 | if ((i = read(fd, buf, TIMING_BUF_BYTES)) != TIMING_BUF_BYTES) { | 1254 | i = read(fd, buf, TIMING_BUF_BYTES); |
1255 | if (i != TIMING_BUF_BYTES) { | ||
1332 | bb_error_msg("read(%d bytes) failed (rc=%d)", TIMING_BUF_BYTES, i); | 1256 | bb_error_msg("read(%d bytes) failed (rc=%d)", TIMING_BUF_BYTES, i); |
1333 | return 1; | 1257 | return 1; |
1334 | } | 1258 | } |
@@ -1348,8 +1272,8 @@ static void print_timing(int t, double e) | |||
1348 | 1272 | ||
1349 | static int do_blkgetsize (int fd, unsigned long long *blksize64) | 1273 | static int do_blkgetsize (int fd, unsigned long long *blksize64) |
1350 | { | 1274 | { |
1351 | int rc; | 1275 | int rc; |
1352 | unsigned int blksize32 = 0; | 1276 | unsigned blksize32 = 0; |
1353 | 1277 | ||
1354 | if (0 == ioctl(fd, BLKGETSIZE64, blksize64)) { // returns bytes | 1278 | if (0 == ioctl(fd, BLKGETSIZE64, blksize64)) { // returns bytes |
1355 | *blksize64 /= 512; | 1279 | *blksize64 /= 512; |
@@ -1389,8 +1313,9 @@ static void do_time(int flag, int fd) | |||
1389 | 1313 | ||
1390 | setitimer(ITIMER_REAL, &(struct itimerval){{1000,0},{1000,0}}, NULL); | 1314 | setitimer(ITIMER_REAL, &(struct itimerval){{1000,0},{1000,0}}, NULL); |
1391 | 1315 | ||
1392 | if (flag == 0) /* Time cache */ | 1316 | if (flag == 0) { |
1393 | { | 1317 | /* Time cache */ |
1318 | |||
1394 | if (seek_to_zero (fd)) return; | 1319 | if (seek_to_zero (fd)) return; |
1395 | if (read_big_block (fd, buf)) return; | 1320 | if (read_big_block (fd, buf)) return; |
1396 | printf(" Timing cached reads: "); | 1321 | printf(" Timing cached reads: "); |
@@ -1423,9 +1348,9 @@ static void do_time(int flag, int fd) | |||
1423 | print_timing(BUFCACHE_FACTOR * total_MB, elapsed); | 1348 | print_timing(BUFCACHE_FACTOR * total_MB, elapsed); |
1424 | flush_buffer_cache(fd); | 1349 | flush_buffer_cache(fd); |
1425 | sleep(1); | 1350 | sleep(1); |
1426 | } | 1351 | } else { |
1427 | else /* Time device */ | 1352 | /* Time device */ |
1428 | { | 1353 | |
1429 | printf(" Timing buffered disk reads: "); | 1354 | printf(" Timing buffered disk reads: "); |
1430 | fflush(stdout); | 1355 | fflush(stdout); |
1431 | /* | 1356 | /* |
@@ -1458,7 +1383,7 @@ static void on_off (unsigned int value) | |||
1458 | printf(value ? " (on)\n" : " (off)\n"); | 1383 | printf(value ? " (on)\n" : " (off)\n"); |
1459 | } | 1384 | } |
1460 | 1385 | ||
1461 | #ifdef CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF | 1386 | #if ENABLE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF |
1462 | static void bus_state_value(unsigned int value) | 1387 | static void bus_state_value(unsigned int value) |
1463 | { | 1388 | { |
1464 | if (value == BUSSTATE_ON) | 1389 | if (value == BUSSTATE_ON) |
@@ -1502,44 +1427,44 @@ static void interpret_standby(unsigned int standby) | |||
1502 | } | 1427 | } |
1503 | 1428 | ||
1504 | struct xfermode_entry { | 1429 | struct xfermode_entry { |
1505 | int val; | 1430 | int val; |
1506 | const char *name; | 1431 | const char *name; |
1507 | }; | 1432 | }; |
1508 | 1433 | ||
1509 | static const struct xfermode_entry xfermode_table[] = { | 1434 | static const struct xfermode_entry xfermode_table[] = { |
1510 | { 8, "pio0" }, | 1435 | { 8, "pio0" }, |
1511 | { 9, "pio1" }, | 1436 | { 9, "pio1" }, |
1512 | { 10, "pio2" }, | 1437 | { 10, "pio2" }, |
1513 | { 11, "pio3" }, | 1438 | { 11, "pio3" }, |
1514 | { 12, "pio4" }, | 1439 | { 12, "pio4" }, |
1515 | { 13, "pio5" }, | 1440 | { 13, "pio5" }, |
1516 | { 14, "pio6" }, | 1441 | { 14, "pio6" }, |
1517 | { 15, "pio7" }, | 1442 | { 15, "pio7" }, |
1518 | { 16, "sdma0" }, | 1443 | { 16, "sdma0" }, |
1519 | { 17, "sdma1" }, | 1444 | { 17, "sdma1" }, |
1520 | { 18, "sdma2" }, | 1445 | { 18, "sdma2" }, |
1521 | { 19, "sdma3" }, | 1446 | { 19, "sdma3" }, |
1522 | { 20, "sdma4" }, | 1447 | { 20, "sdma4" }, |
1523 | { 21, "sdma5" }, | 1448 | { 21, "sdma5" }, |
1524 | { 22, "sdma6" }, | 1449 | { 22, "sdma6" }, |
1525 | { 23, "sdma7" }, | 1450 | { 23, "sdma7" }, |
1526 | { 32, "mdma0" }, | 1451 | { 32, "mdma0" }, |
1527 | { 33, "mdma1" }, | 1452 | { 33, "mdma1" }, |
1528 | { 34, "mdma2" }, | 1453 | { 34, "mdma2" }, |
1529 | { 35, "mdma3" }, | 1454 | { 35, "mdma3" }, |
1530 | { 36, "mdma4" }, | 1455 | { 36, "mdma4" }, |
1531 | { 37, "mdma5" }, | 1456 | { 37, "mdma5" }, |
1532 | { 38, "mdma6" }, | 1457 | { 38, "mdma6" }, |
1533 | { 39, "mdma7" }, | 1458 | { 39, "mdma7" }, |
1534 | { 64, "udma0" }, | 1459 | { 64, "udma0" }, |
1535 | { 65, "udma1" }, | 1460 | { 65, "udma1" }, |
1536 | { 66, "udma2" }, | 1461 | { 66, "udma2" }, |
1537 | { 67, "udma3" }, | 1462 | { 67, "udma3" }, |
1538 | { 68, "udma4" }, | 1463 | { 68, "udma4" }, |
1539 | { 69, "udma5" }, | 1464 | { 69, "udma5" }, |
1540 | { 70, "udma6" }, | 1465 | { 70, "udma6" }, |
1541 | { 71, "udma7" }, | 1466 | { 71, "udma7" }, |
1542 | { 0, NULL } | 1467 | { 0, NULL } |
1543 | }; | 1468 | }; |
1544 | 1469 | ||
1545 | static int translate_xfermode(char * name) | 1470 | static int translate_xfermode(char * name) |
@@ -1548,9 +1473,7 @@ static int translate_xfermode(char * name) | |||
1548 | char *endptr; | 1473 | char *endptr; |
1549 | int val = -1; | 1474 | int val = -1; |
1550 | 1475 | ||
1551 | 1476 | for (tmp = xfermode_table; tmp->name != NULL; ++tmp) { | |
1552 | for (tmp = xfermode_table; tmp->name != NULL; ++tmp) | ||
1553 | { | ||
1554 | if (!strcmp(name, tmp->name)) | 1477 | if (!strcmp(name, tmp->name)) |
1555 | return tmp->val; | 1478 | return tmp->val; |
1556 | } | 1479 | } |
@@ -1604,21 +1527,18 @@ static void process_dev(char *devname) | |||
1604 | fd = xopen(devname, O_RDONLY|O_NONBLOCK); | 1527 | fd = xopen(devname, O_RDONLY|O_NONBLOCK); |
1605 | printf("\n%s:\n", devname); | 1528 | printf("\n%s:\n", devname); |
1606 | 1529 | ||
1607 | if (set_readahead) | 1530 | if (set_readahead) { |
1608 | { | ||
1609 | print_flag(get_readahead,"fs readahead", Xreadahead); | 1531 | print_flag(get_readahead,"fs readahead", Xreadahead); |
1610 | bb_ioctl(fd, BLKRASET,(int *)Xreadahead,"BLKRASET"); | 1532 | bb_ioctl(fd, BLKRASET,(int *)Xreadahead,"BLKRASET"); |
1611 | } | 1533 | } |
1612 | #ifdef CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF | 1534 | #if ENABLE_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF |
1613 | if (unregister_hwif) | 1535 | if (unregister_hwif) { |
1614 | { | ||
1615 | printf(" attempting to unregister hwif#%lu\n", hwif); | 1536 | printf(" attempting to unregister hwif#%lu\n", hwif); |
1616 | bb_ioctl(fd, HDIO_UNREGISTER_HWIF,(int *)(unsigned long)hwif,"HDIO_UNREGISTER_HWIF"); | 1537 | bb_ioctl(fd, HDIO_UNREGISTER_HWIF,(int *)(unsigned long)hwif,"HDIO_UNREGISTER_HWIF"); |
1617 | } | 1538 | } |
1618 | #endif | 1539 | #endif |
1619 | #ifdef CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF | 1540 | #if ENABLE_FEATURE_HDPARM_HDIO_SCAN_HWIF |
1620 | if (scan_hwif) | 1541 | if (scan_hwif) { |
1621 | { | ||
1622 | printf(" attempting to scan hwif (0x%lx, 0x%lx, %lu)\n", hwif_data, hwif_ctrl, hwif_irq); | 1542 | printf(" attempting to scan hwif (0x%lx, 0x%lx, %lu)\n", hwif_data, hwif_ctrl, hwif_irq); |
1623 | args[0] = hwif_data; | 1543 | args[0] = hwif_data; |
1624 | args[1] = hwif_ctrl; | 1544 | args[1] = hwif_ctrl; |
@@ -1628,10 +1548,8 @@ static void process_dev(char *devname) | |||
1628 | args[1] = 0; | 1548 | args[1] = 0; |
1629 | } | 1549 | } |
1630 | #endif | 1550 | #endif |
1631 | if (set_piomode) | 1551 | if (set_piomode) { |
1632 | { | 1552 | if (noisy_piomode) { |
1633 | if (noisy_piomode) | ||
1634 | { | ||
1635 | printf(" attempting to "); | 1553 | printf(" attempting to "); |
1636 | if (piomode == 255) | 1554 | if (piomode == 255) |
1637 | printf("auto-tune PIO mode\n"); | 1555 | printf("auto-tune PIO mode\n"); |
@@ -1644,13 +1562,11 @@ static void process_dev(char *devname) | |||
1644 | } | 1562 | } |
1645 | bb_ioctl(fd, HDIO_SET_PIO_MODE, (int *)(unsigned long)piomode, "HDIO_SET_PIO_MODE"); | 1563 | bb_ioctl(fd, HDIO_SET_PIO_MODE, (int *)(unsigned long)piomode, "HDIO_SET_PIO_MODE"); |
1646 | } | 1564 | } |
1647 | if (set_io32bit) | 1565 | if (set_io32bit) { |
1648 | { | ||
1649 | print_flag(get_io32bit,"32-bit IO_support flag", io32bit); | 1566 | print_flag(get_io32bit,"32-bit IO_support flag", io32bit); |
1650 | bb_ioctl(fd, HDIO_SET_32BIT, (int *)io32bit, "HDIO_SET_32BIT"); | 1567 | bb_ioctl(fd, HDIO_SET_32BIT, (int *)io32bit, "HDIO_SET_32BIT"); |
1651 | } | 1568 | } |
1652 | if (set_mult) | 1569 | if (set_mult) { |
1653 | { | ||
1654 | print_flag(get_mult, "multcount", mult); | 1570 | print_flag(get_mult, "multcount", mult); |
1655 | #ifdef HDIO_DRIVE_CMD | 1571 | #ifdef HDIO_DRIVE_CMD |
1656 | bb_ioctl(fd, HDIO_SET_MULTCOUNT, &mult, "HDIO_SET_MULTCOUNT"); | 1572 | bb_ioctl(fd, HDIO_SET_MULTCOUNT, &mult, "HDIO_SET_MULTCOUNT"); |
@@ -1658,70 +1574,59 @@ static void process_dev(char *devname) | |||
1658 | force_operation |= (!bb_ioctl(fd, HDIO_SET_MULTCOUNT, &mult, "HDIO_SET_MULTCOUNT")); | 1574 | force_operation |= (!bb_ioctl(fd, HDIO_SET_MULTCOUNT, &mult, "HDIO_SET_MULTCOUNT")); |
1659 | #endif | 1575 | #endif |
1660 | } | 1576 | } |
1661 | if (set_readonly) | 1577 | if (set_readonly) { |
1662 | { | ||
1663 | print_flag_on_off(get_readonly,"readonly", readonly); | 1578 | print_flag_on_off(get_readonly,"readonly", readonly); |
1664 | bb_ioctl(fd, BLKROSET, &readonly, "BLKROSET"); | 1579 | bb_ioctl(fd, BLKROSET, &readonly, "BLKROSET"); |
1665 | } | 1580 | } |
1666 | if (set_unmask) | 1581 | if (set_unmask) { |
1667 | { | ||
1668 | print_flag_on_off(get_unmask,"unmaskirq", unmask); | 1582 | print_flag_on_off(get_unmask,"unmaskirq", unmask); |
1669 | bb_ioctl(fd, HDIO_SET_UNMASKINTR, (int *)unmask, "HDIO_SET_UNMASKINTR"); | 1583 | bb_ioctl(fd, HDIO_SET_UNMASKINTR, (int *)unmask, "HDIO_SET_UNMASKINTR"); |
1670 | } | 1584 | } |
1671 | #ifdef CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA | 1585 | #if ENABLE_FEATURE_HDPARM_HDIO_GETSET_DMA |
1672 | if (set_dma) | 1586 | if (set_dma) { |
1673 | { | ||
1674 | print_flag_on_off(get_dma, "using_dma", dma); | 1587 | print_flag_on_off(get_dma, "using_dma", dma); |
1675 | bb_ioctl(fd, HDIO_SET_DMA, (int *)dma, "HDIO_SET_DMA"); | 1588 | bb_ioctl(fd, HDIO_SET_DMA, (int *)dma, "HDIO_SET_DMA"); |
1676 | } | 1589 | } |
1677 | #endif /* CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA */ | 1590 | #endif /* FEATURE_HDPARM_HDIO_GETSET_DMA */ |
1678 | if (set_dma_q) | 1591 | if (set_dma_q) { |
1679 | { | ||
1680 | print_flag_on_off(get_dma_q,"DMA queue_depth", dma_q); | 1592 | print_flag_on_off(get_dma_q,"DMA queue_depth", dma_q); |
1681 | bb_ioctl(fd, HDIO_SET_QDMA, (int *)dma_q, "HDIO_SET_QDMA"); | 1593 | bb_ioctl(fd, HDIO_SET_QDMA, (int *)dma_q, "HDIO_SET_QDMA"); |
1682 | } | 1594 | } |
1683 | if (set_nowerr) | 1595 | if (set_nowerr) { |
1684 | { | ||
1685 | print_flag_on_off(get_nowerr,"nowerr", nowerr); | 1596 | print_flag_on_off(get_nowerr,"nowerr", nowerr); |
1686 | bb_ioctl(fd, HDIO_SET_NOWERR, (int *)nowerr,"HDIO_SET_NOWERR"); | 1597 | bb_ioctl(fd, HDIO_SET_NOWERR, (int *)nowerr,"HDIO_SET_NOWERR"); |
1687 | } | 1598 | } |
1688 | if (set_keep) | 1599 | if (set_keep) { |
1689 | { | ||
1690 | print_flag_on_off(get_keep,"keep_settings", keep); | 1600 | print_flag_on_off(get_keep,"keep_settings", keep); |
1691 | bb_ioctl(fd, HDIO_SET_KEEPSETTINGS, (int *)keep,"HDIO_SET_KEEPSETTINGS"); | 1601 | bb_ioctl(fd, HDIO_SET_KEEPSETTINGS, (int *)keep,"HDIO_SET_KEEPSETTINGS"); |
1692 | } | 1602 | } |
1693 | #ifdef HDIO_DRIVE_CMD | 1603 | #ifdef HDIO_DRIVE_CMD |
1694 | if (set_doorlock) | 1604 | if (set_doorlock) { |
1695 | { | ||
1696 | args[0] = doorlock ? WIN_DOORLOCK : WIN_DOORUNLOCK; | 1605 | args[0] = doorlock ? WIN_DOORLOCK : WIN_DOORUNLOCK; |
1697 | args[2] = 0; | 1606 | args[2] = 0; |
1698 | print_flag_on_off(get_doorlock,"drive doorlock", doorlock); | 1607 | print_flag_on_off(get_doorlock,"drive doorlock", doorlock); |
1699 | bb_ioctl(fd, HDIO_DRIVE_CMD, &args,"HDIO_DRIVE_CMD(doorlock)"); | 1608 | bb_ioctl(fd, HDIO_DRIVE_CMD, &args,"HDIO_DRIVE_CMD(doorlock)"); |
1700 | args[0] = WIN_SETFEATURES; | 1609 | args[0] = WIN_SETFEATURES; |
1701 | } | 1610 | } |
1702 | if (set_dkeep) | 1611 | if (set_dkeep) { |
1703 | { | ||
1704 | /* lock/unlock the drive's "feature" settings */ | 1612 | /* lock/unlock the drive's "feature" settings */ |
1705 | print_flag_on_off(get_dkeep,"drive keep features", dkeep); | 1613 | print_flag_on_off(get_dkeep,"drive keep features", dkeep); |
1706 | args[2] = dkeep ? 0x66 : 0xcc; | 1614 | args[2] = dkeep ? 0x66 : 0xcc; |
1707 | bb_ioctl(fd, HDIO_DRIVE_CMD, &args,"HDIO_DRIVE_CMD(keepsettings)"); | 1615 | bb_ioctl(fd, HDIO_DRIVE_CMD, &args,"HDIO_DRIVE_CMD(keepsettings)"); |
1708 | } | 1616 | } |
1709 | if (set_defects) | 1617 | if (set_defects) { |
1710 | { | ||
1711 | args[2] = defects ? 0x04 : 0x84; | 1618 | args[2] = defects ? 0x04 : 0x84; |
1712 | print_flag(get_defects,"drive defect-mgmt", defects); | 1619 | print_flag(get_defects,"drive defect-mgmt", defects); |
1713 | bb_ioctl(fd, HDIO_DRIVE_CMD, &args,"HDIO_DRIVE_CMD(defectmgmt)"); | 1620 | bb_ioctl(fd, HDIO_DRIVE_CMD, &args,"HDIO_DRIVE_CMD(defectmgmt)"); |
1714 | } | 1621 | } |
1715 | if (set_prefetch) | 1622 | if (set_prefetch) { |
1716 | { | ||
1717 | args[1] = prefetch; | 1623 | args[1] = prefetch; |
1718 | args[2] = 0xab; | 1624 | args[2] = 0xab; |
1719 | print_flag(get_prefetch,"drive prefetch", prefetch); | 1625 | print_flag(get_prefetch,"drive prefetch", prefetch); |
1720 | bb_ioctl(fd, HDIO_DRIVE_CMD, &args, "HDIO_DRIVE_CMD(setprefetch)"); | 1626 | bb_ioctl(fd, HDIO_DRIVE_CMD, &args, "HDIO_DRIVE_CMD(setprefetch)"); |
1721 | args[1] = 0; | 1627 | args[1] = 0; |
1722 | } | 1628 | } |
1723 | if (set_xfermode) | 1629 | if (set_xfermode) { |
1724 | { | ||
1725 | args[1] = xfermode_requested; | 1630 | args[1] = xfermode_requested; |
1726 | args[2] = 3; | 1631 | args[2] = 3; |
1727 | if (get_xfermode) | 1632 | if (get_xfermode) |
@@ -1732,14 +1637,12 @@ static void process_dev(char *devname) | |||
1732 | bb_ioctl(fd, HDIO_DRIVE_CMD, &args,"HDIO_DRIVE_CMD(setxfermode)"); | 1637 | bb_ioctl(fd, HDIO_DRIVE_CMD, &args,"HDIO_DRIVE_CMD(setxfermode)"); |
1733 | args[1] = 0; | 1638 | args[1] = 0; |
1734 | } | 1639 | } |
1735 | if (set_lookahead) | 1640 | if (set_lookahead) { |
1736 | { | ||
1737 | args[2] = lookahead ? 0xaa : 0x55; | 1641 | args[2] = lookahead ? 0xaa : 0x55; |
1738 | print_flag_on_off(get_lookahead,"drive read-lookahead", lookahead); | 1642 | print_flag_on_off(get_lookahead,"drive read-lookahead", lookahead); |
1739 | bb_ioctl(fd, HDIO_DRIVE_CMD, &args, "HDIO_DRIVE_CMD(setreadahead)"); | 1643 | bb_ioctl(fd, HDIO_DRIVE_CMD, &args, "HDIO_DRIVE_CMD(setreadahead)"); |
1740 | } | 1644 | } |
1741 | if (set_apmmode) | 1645 | if (set_apmmode) { |
1742 | { | ||
1743 | args[2] = (apmmode == 255) ? 0x85 /* disable */ : 0x05 /* set */; /* feature register */ | 1646 | args[2] = (apmmode == 255) ? 0x85 /* disable */ : 0x05 /* set */; /* feature register */ |
1744 | args[1] = apmmode; /* sector count register 1-255 */ | 1647 | args[1] = apmmode; /* sector count register 1-255 */ |
1745 | if (get_apmmode) | 1648 | if (get_apmmode) |
@@ -1747,8 +1650,7 @@ static void process_dev(char *devname) | |||
1747 | bb_ioctl(fd, HDIO_DRIVE_CMD, &args,"HDIO_DRIVE_CMD"); | 1650 | bb_ioctl(fd, HDIO_DRIVE_CMD, &args,"HDIO_DRIVE_CMD"); |
1748 | args[1] = 0; | 1651 | args[1] = 0; |
1749 | } | 1652 | } |
1750 | if (set_wcache) | 1653 | if (set_wcache) { |
1751 | { | ||
1752 | #ifdef DO_FLUSHCACHE | 1654 | #ifdef DO_FLUSHCACHE |
1753 | #ifndef WIN_FLUSHCACHE | 1655 | #ifndef WIN_FLUSHCACHE |
1754 | #define WIN_FLUSHCACHE 0xe7 | 1656 | #define WIN_FLUSHCACHE 0xe7 |
@@ -1772,8 +1674,7 @@ static void process_dev(char *devname) | |||
1772 | is preserved, including args[2] */ | 1674 | is preserved, including args[2] */ |
1773 | args[2] = 0; | 1675 | args[2] = 0; |
1774 | 1676 | ||
1775 | if (set_standbynow) | 1677 | if (set_standbynow) { |
1776 | { | ||
1777 | #ifndef WIN_STANDBYNOW1 | 1678 | #ifndef WIN_STANDBYNOW1 |
1778 | #define WIN_STANDBYNOW1 0xE0 | 1679 | #define WIN_STANDBYNOW1 0xE0 |
1779 | #endif | 1680 | #endif |
@@ -1784,8 +1685,7 @@ static void process_dev(char *devname) | |||
1784 | args[0] = WIN_STANDBYNOW1; | 1685 | args[0] = WIN_STANDBYNOW1; |
1785 | bb_ioctl_alt(fd, HDIO_DRIVE_CMD, args, WIN_STANDBYNOW2, "HDIO_DRIVE_CMD(standby)"); | 1686 | bb_ioctl_alt(fd, HDIO_DRIVE_CMD, args, WIN_STANDBYNOW2, "HDIO_DRIVE_CMD(standby)"); |
1786 | } | 1687 | } |
1787 | if (set_sleepnow) | 1688 | if (set_sleepnow) { |
1788 | { | ||
1789 | #ifndef WIN_SLEEPNOW1 | 1689 | #ifndef WIN_SLEEPNOW1 |
1790 | #define WIN_SLEEPNOW1 0xE6 | 1690 | #define WIN_SLEEPNOW1 0xE6 |
1791 | #endif | 1691 | #endif |
@@ -1796,18 +1696,15 @@ static void process_dev(char *devname) | |||
1796 | args[0] = WIN_SLEEPNOW1; | 1696 | args[0] = WIN_SLEEPNOW1; |
1797 | bb_ioctl_alt(fd, HDIO_DRIVE_CMD, args, WIN_SLEEPNOW2, "HDIO_DRIVE_CMD(sleep)"); | 1697 | bb_ioctl_alt(fd, HDIO_DRIVE_CMD, args, WIN_SLEEPNOW2, "HDIO_DRIVE_CMD(sleep)"); |
1798 | } | 1698 | } |
1799 | if (set_seagate) | 1699 | if (set_seagate) { |
1800 | { | ||
1801 | args[0] = 0xfb; | 1700 | args[0] = 0xfb; |
1802 | if (get_seagate) printf(" disabling Seagate auto powersaving mode\n"); | 1701 | if (get_seagate) printf(" disabling Seagate auto powersaving mode\n"); |
1803 | bb_ioctl(fd, HDIO_DRIVE_CMD, &args, "HDIO_DRIVE_CMD(seagatepwrsave)"); | 1702 | bb_ioctl(fd, HDIO_DRIVE_CMD, &args, "HDIO_DRIVE_CMD(seagatepwrsave)"); |
1804 | } | 1703 | } |
1805 | if (set_standby) | 1704 | if (set_standby) { |
1806 | { | ||
1807 | args[0] = WIN_SETIDLE1; | 1705 | args[0] = WIN_SETIDLE1; |
1808 | args[1] = standby_requested; | 1706 | args[1] = standby_requested; |
1809 | if (get_standby) | 1707 | if (get_standby) { |
1810 | { | ||
1811 | print_flag(1,"standby", standby_requested); | 1708 | print_flag(1,"standby", standby_requested); |
1812 | interpret_standby(standby_requested); | 1709 | interpret_standby(standby_requested); |
1813 | } | 1710 | } |
@@ -1815,8 +1712,7 @@ static void process_dev(char *devname) | |||
1815 | args[1] = 0; | 1712 | args[1] = 0; |
1816 | } | 1713 | } |
1817 | #else /* HDIO_DRIVE_CMD */ | 1714 | #else /* HDIO_DRIVE_CMD */ |
1818 | if (force_operation) | 1715 | if (force_operation) { |
1819 | { | ||
1820 | char buf[512]; | 1716 | char buf[512]; |
1821 | flush_buffer_cache(fd); | 1717 | flush_buffer_cache(fd); |
1822 | if (-1 == read(fd, buf, sizeof(buf))) | 1718 | if (-1 == read(fd, buf, sizeof(buf))) |
@@ -1824,24 +1720,18 @@ static void process_dev(char *devname) | |||
1824 | } | 1720 | } |
1825 | #endif /* HDIO_DRIVE_CMD */ | 1721 | #endif /* HDIO_DRIVE_CMD */ |
1826 | 1722 | ||
1827 | if (get_mult || get_identity) | 1723 | if (get_mult || get_identity) { |
1828 | { | ||
1829 | multcount = -1; | 1724 | multcount = -1; |
1830 | if (ioctl(fd, HDIO_GET_MULTCOUNT, &multcount)) | 1725 | if (ioctl(fd, HDIO_GET_MULTCOUNT, &multcount)) { |
1831 | { | ||
1832 | if (get_mult) | 1726 | if (get_mult) |
1833 | bb_perror_msg("HDIO_GET_MULTCOUNT"); | 1727 | bb_perror_msg("HDIO_GET_MULTCOUNT"); |
1834 | } | 1728 | } else if (get_mult) { |
1835 | else if (get_mult) | ||
1836 | { | ||
1837 | printf(fmt, "multcount", multcount); | 1729 | printf(fmt, "multcount", multcount); |
1838 | on_off(multcount); | 1730 | on_off(multcount); |
1839 | } | 1731 | } |
1840 | } | 1732 | } |
1841 | if (get_io32bit) | 1733 | if (get_io32bit) { |
1842 | { | 1734 | if (!bb_ioctl(fd, HDIO_GET_32BIT, &parm, "HDIO_GET_32BIT")) { |
1843 | if (!bb_ioctl(fd, HDIO_GET_32BIT, &parm, "HDIO_GET_32BIT")) | ||
1844 | { | ||
1845 | printf(" IO_support\t=%3ld (", parm); | 1735 | printf(" IO_support\t=%3ld (", parm); |
1846 | if (parm == 0) | 1736 | if (parm == 0) |
1847 | printf("default 16-bit)\n"); | 1737 | printf("default 16-bit)\n"); |
@@ -1857,14 +1747,13 @@ static void process_dev(char *devname) | |||
1857 | printf("\?\?\?)\n"); | 1747 | printf("\?\?\?)\n"); |
1858 | } | 1748 | } |
1859 | } | 1749 | } |
1860 | if (get_unmask) | 1750 | if (get_unmask) { |
1861 | { | ||
1862 | bb_ioctl_on_off(fd, HDIO_GET_UNMASKINTR,(unsigned long *)parm, | 1751 | bb_ioctl_on_off(fd, HDIO_GET_UNMASKINTR,(unsigned long *)parm, |
1863 | "HDIO_GET_UNMASKINTR","unmaskirq"); | 1752 | "HDIO_GET_UNMASKINTR","unmaskirq"); |
1864 | } | 1753 | } |
1865 | 1754 | ||
1866 | 1755 | ||
1867 | #ifdef CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA | 1756 | #if ENABLE_FEATURE_HDPARM_HDIO_GETSET_DMA |
1868 | if (get_dma) { | 1757 | if (get_dma) { |
1869 | if (!bb_ioctl(fd, HDIO_GET_DMA, &parm, "HDIO_GET_DMA")) | 1758 | if (!bb_ioctl(fd, HDIO_GET_DMA, &parm, "HDIO_GET_DMA")) |
1870 | { | 1759 | { |
@@ -1876,36 +1765,29 @@ static void process_dev(char *devname) | |||
1876 | } | 1765 | } |
1877 | } | 1766 | } |
1878 | #endif | 1767 | #endif |
1879 | if (get_dma_q) | 1768 | if (get_dma_q) { |
1880 | { | ||
1881 | bb_ioctl_on_off (fd, HDIO_GET_QDMA,(unsigned long *)parm, | 1769 | bb_ioctl_on_off (fd, HDIO_GET_QDMA,(unsigned long *)parm, |
1882 | "HDIO_GET_QDMA","queue_depth"); | 1770 | "HDIO_GET_QDMA","queue_depth"); |
1883 | } | 1771 | } |
1884 | if (get_keep) | 1772 | if (get_keep) { |
1885 | { | ||
1886 | bb_ioctl_on_off (fd, HDIO_GET_KEEPSETTINGS,(unsigned long *)parm, | 1773 | bb_ioctl_on_off (fd, HDIO_GET_KEEPSETTINGS,(unsigned long *)parm, |
1887 | "HDIO_GET_KEEPSETTINGS","keepsettings"); | 1774 | "HDIO_GET_KEEPSETTINGS","keepsettings"); |
1888 | } | 1775 | } |
1889 | 1776 | ||
1890 | if (get_nowerr) | 1777 | if (get_nowerr) { |
1891 | { | ||
1892 | bb_ioctl_on_off (fd, HDIO_GET_NOWERR,(unsigned long *)&parm, | 1778 | bb_ioctl_on_off (fd, HDIO_GET_NOWERR,(unsigned long *)&parm, |
1893 | "HDIO_GET_NOWERR","nowerr"); | 1779 | "HDIO_GET_NOWERR","nowerr"); |
1894 | } | 1780 | } |
1895 | if (get_readonly) | 1781 | if (get_readonly) { |
1896 | { | ||
1897 | bb_ioctl_on_off(fd, BLKROGET,(unsigned long *)parm, | 1782 | bb_ioctl_on_off(fd, BLKROGET,(unsigned long *)parm, |
1898 | "BLKROGET","readonly"); | 1783 | "BLKROGET","readonly"); |
1899 | } | 1784 | } |
1900 | if (get_readahead) | 1785 | if (get_readahead) { |
1901 | { | ||
1902 | bb_ioctl_on_off (fd, BLKRAGET, (unsigned long *) parm, | 1786 | bb_ioctl_on_off (fd, BLKRAGET, (unsigned long *) parm, |
1903 | "BLKRAGET","readahead"); | 1787 | "BLKRAGET","readahead"); |
1904 | } | 1788 | } |
1905 | if (get_geom) | 1789 | if (get_geom) { |
1906 | { | 1790 | if (!bb_ioctl(fd, BLKGETSIZE, &parm, "BLKGETSIZE")) { |
1907 | if (!bb_ioctl(fd, BLKGETSIZE, &parm, "BLKGETSIZE")) | ||
1908 | { | ||
1909 | struct hd_geometry g; | 1791 | struct hd_geometry g; |
1910 | 1792 | ||
1911 | if (!bb_ioctl(fd, HDIO_GETGEO, &g, "HDIO_GETGEO")) | 1793 | if (!bb_ioctl(fd, HDIO_GETGEO, &g, "HDIO_GETGEO")) |
@@ -1914,8 +1796,7 @@ static void process_dev(char *devname) | |||
1914 | } | 1796 | } |
1915 | } | 1797 | } |
1916 | #ifdef HDIO_DRIVE_CMD | 1798 | #ifdef HDIO_DRIVE_CMD |
1917 | if (get_powermode) | 1799 | if (get_powermode) { |
1918 | { | ||
1919 | #ifndef WIN_CHECKPOWERMODE1 | 1800 | #ifndef WIN_CHECKPOWERMODE1 |
1920 | #define WIN_CHECKPOWERMODE1 0xE5 | 1801 | #define WIN_CHECKPOWERMODE1 0xE5 |
1921 | #endif | 1802 | #endif |
@@ -1925,58 +1806,48 @@ static void process_dev(char *devname) | |||
1925 | const char *state; | 1806 | const char *state; |
1926 | 1807 | ||
1927 | args[0] = WIN_CHECKPOWERMODE1; | 1808 | args[0] = WIN_CHECKPOWERMODE1; |
1928 | if (bb_ioctl_alt(fd, HDIO_DRIVE_CMD, args, WIN_CHECKPOWERMODE2, 0)) | 1809 | if (bb_ioctl_alt(fd, HDIO_DRIVE_CMD, args, WIN_CHECKPOWERMODE2, 0)) { |
1929 | { | ||
1930 | if (errno != EIO || args[0] != 0 || args[1] != 0) | 1810 | if (errno != EIO || args[0] != 0 || args[1] != 0) |
1931 | state = "Unknown"; | 1811 | state = "Unknown"; |
1932 | else | 1812 | else |
1933 | state = "sleeping"; | 1813 | state = "sleeping"; |
1934 | } | 1814 | } else |
1935 | else | ||
1936 | state = (args[2] == 255) ? "active/idle" : "standby"; | 1815 | state = (args[2] == 255) ? "active/idle" : "standby"; |
1937 | args[1] = args[2] = 0; | 1816 | args[1] = args[2] = 0; |
1938 | 1817 | ||
1939 | printf(" drive state is: %s\n", state); | 1818 | printf(" drive state is: %s\n", state); |
1940 | } | 1819 | } |
1941 | #endif | 1820 | #endif |
1942 | #ifdef CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET | 1821 | #if ENABLE_FEATURE_HDPARM_HDIO_DRIVE_RESET |
1943 | if (perform_reset) | 1822 | if (perform_reset) { |
1944 | { | ||
1945 | bb_ioctl(fd, HDIO_DRIVE_RESET, NULL, "HDIO_DRIVE_RESET"); | 1823 | bb_ioctl(fd, HDIO_DRIVE_RESET, NULL, "HDIO_DRIVE_RESET"); |
1946 | } | 1824 | } |
1947 | #endif /* CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET */ | 1825 | #endif /* FEATURE_HDPARM_HDIO_DRIVE_RESET */ |
1948 | #ifdef CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF | 1826 | #if ENABLE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF |
1949 | if (perform_tristate) | 1827 | if (perform_tristate) { |
1950 | { | ||
1951 | args[0] = 0; | 1828 | args[0] = 0; |
1952 | args[1] = tristate; | 1829 | args[1] = tristate; |
1953 | bb_ioctl(fd, HDIO_TRISTATE_HWIF, &args, "HDIO_TRISTATE_HWIF"); | 1830 | bb_ioctl(fd, HDIO_TRISTATE_HWIF, &args, "HDIO_TRISTATE_HWIF"); |
1954 | } | 1831 | } |
1955 | #endif /* CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF */ | 1832 | #endif /* FEATURE_HDPARM_HDIO_TRISTATE_HWIF */ |
1956 | #ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY | 1833 | #if ENABLE_FEATURE_HDPARM_GET_IDENTITY |
1957 | if (get_identity) | 1834 | if (get_identity) { |
1958 | { | ||
1959 | static struct hd_driveid id; | 1835 | static struct hd_driveid id; |
1960 | 1836 | ||
1961 | if (!ioctl(fd, HDIO_GET_IDENTITY, &id)) | 1837 | if (!ioctl(fd, HDIO_GET_IDENTITY, &id)) { |
1962 | { | 1838 | if (multcount != -1) { |
1963 | if (multcount != -1) | ||
1964 | { | ||
1965 | id.multsect = multcount; | 1839 | id.multsect = multcount; |
1966 | id.multsect_valid |= 1; | 1840 | id.multsect_valid |= 1; |
1967 | } | 1841 | } else |
1968 | else | ||
1969 | id.multsect_valid &= ~1; | 1842 | id.multsect_valid &= ~1; |
1970 | dump_identity(&id); | 1843 | dump_identity(&id); |
1971 | } | 1844 | } else if (errno == -ENOMSG) |
1972 | else if (errno == -ENOMSG) | ||
1973 | printf(" no identification info available\n"); | 1845 | printf(" no identification info available\n"); |
1974 | else | 1846 | else |
1975 | bb_perror_msg("HDIO_GET_IDENTITY"); | 1847 | bb_perror_msg("HDIO_GET_IDENTITY"); |
1976 | } | 1848 | } |
1977 | 1849 | ||
1978 | if (get_IDentity) | 1850 | if (get_IDentity) { |
1979 | { | ||
1980 | unsigned char args1[4+512]; /* = { ... } will eat 0.5k of rodata! */ | 1851 | unsigned char args1[4+512]; /* = { ... } will eat 0.5k of rodata! */ |
1981 | 1852 | ||
1982 | memset(args1, 0, sizeof(args1)); | 1853 | memset(args1, 0, sizeof(args1)); |
@@ -1986,20 +1857,16 @@ static void process_dev(char *devname) | |||
1986 | identify((void *)(args1 + 4)); | 1857 | identify((void *)(args1 + 4)); |
1987 | } | 1858 | } |
1988 | #endif | 1859 | #endif |
1989 | #ifdef CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF | 1860 | #if ENABLE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF |
1990 | if (set_busstate) | 1861 | if (set_busstate) { |
1991 | { | 1862 | if (get_busstate) { |
1992 | if (get_busstate) | ||
1993 | { | ||
1994 | print_flag(1, "bus state", busstate); | 1863 | print_flag(1, "bus state", busstate); |
1995 | bus_state_value(busstate); | 1864 | bus_state_value(busstate); |
1996 | } | 1865 | } |
1997 | bb_ioctl(fd, HDIO_SET_BUSSTATE, (int *)(unsigned long)busstate, "HDIO_SET_BUSSTATE"); | 1866 | bb_ioctl(fd, HDIO_SET_BUSSTATE, (int *)(unsigned long)busstate, "HDIO_SET_BUSSTATE"); |
1998 | } | 1867 | } |
1999 | if (get_busstate) | 1868 | if (get_busstate) { |
2000 | { | 1869 | if (!bb_ioctl(fd, HDIO_GET_BUSSTATE, &parm, "HDIO_GET_BUSSTATE")) { |
2001 | if (!bb_ioctl(fd, HDIO_GET_BUSSTATE, &parm, "HDIO_GET_BUSSTATE")) | ||
2002 | { | ||
2003 | printf(fmt, "bus state", parm); | 1870 | printf(fmt, "bus state", parm); |
2004 | bus_state_value(parm); | 1871 | bus_state_value(parm); |
2005 | } | 1872 | } |
@@ -2008,17 +1875,16 @@ static void process_dev(char *devname) | |||
2008 | if (reread_partn) | 1875 | if (reread_partn) |
2009 | bb_ioctl(fd, BLKRRPART, NULL, "BLKRRPART"); | 1876 | bb_ioctl(fd, BLKRRPART, NULL, "BLKRRPART"); |
2010 | 1877 | ||
2011 | |||
2012 | if (do_ctimings) | 1878 | if (do_ctimings) |
2013 | do_time(0,fd); /*time cache */ | 1879 | do_time(0, fd); /* time cache */ |
2014 | if (do_timings) | 1880 | if (do_timings) |
2015 | do_time(1,fd); /*time device */ | 1881 | do_time(1, fd); /* time device */ |
2016 | if (do_flush) | 1882 | if (do_flush) |
2017 | flush_buffer_cache(fd); | 1883 | flush_buffer_cache(fd); |
2018 | close(fd); | 1884 | close(fd); |
2019 | } | 1885 | } |
2020 | 1886 | ||
2021 | #ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY | 1887 | #if ENABLE_FEATURE_HDPARM_GET_IDENTITY |
2022 | static int fromhex(unsigned char c) | 1888 | static int fromhex(unsigned char c) |
2023 | { | 1889 | { |
2024 | if (isdigit(c)) | 1890 | if (isdigit(c)) |
@@ -2039,7 +1905,7 @@ static void identify_from_stdin(void) | |||
2039 | 1905 | ||
2040 | // Convert the newline-separated hex data into an identify block. | 1906 | // Convert the newline-separated hex data into an identify block. |
2041 | 1907 | ||
2042 | for (i = 0; i<256; i++) { | 1908 | for (i = 0; i < 256; i++) { |
2043 | int j; | 1909 | int j; |
2044 | for (j = 0; j < 4; j++) | 1910 | for (j = 0; j < 4; j++) |
2045 | sbuf[i] = (sbuf[i] << 4) + fromhex(*(b++)); | 1911 | sbuf[i] = (sbuf[i] << 4) + fromhex(*(b++)); |