aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2007-02-18 13:36:04 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2007-02-18 13:36:04 +0000
commit3bf0020a5fda9c7a5096a5e9c9526fff7a642737 (patch)
treef1c52b528ab6151afc587d93ee67e27f2654c893
parent131ae177a71c7f5d9de596d9a83c76bd08579380 (diff)
downloadbusybox-w32-3bf0020a5fda9c7a5096a5e9c9526fff7a642737.tar.gz
busybox-w32-3bf0020a5fda9c7a5096a5e9c9526fff7a642737.tar.bz2
busybox-w32-3bf0020a5fda9c7a5096a5e9c9526fff7a642737.zip
hdparm: style fixes, no code changes
-rw-r--r--miscutils/hdparm.c676
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
131static const char * const pkt_str[] = { 131static 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
243static const char *minor_str[MINOR_MAX+2] = { /* word 81 value: */ 243static 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
330static const char * const cmd_feat_str[] = { 330static 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
417static const char * const secu_str[] = { 417static 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
484static void print_ascii(uint16_t *p, uint8_t length); 484static void print_ascii(uint16_t *p, uint8_t length);
485 485
486static void xprint_ascii(uint16_t *val ,int i, const char *string, int n) 486static 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
497static uint8_t mode_loop(uint16_t mode_sup, uint16_t mode_sel, int cc, uint8_t *have_mode) 497static 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;
1092static unsigned long set_readonly, get_readonly, readonly; 1023static unsigned long set_readonly, get_readonly, readonly;
1093static unsigned long set_unmask, get_unmask, unmask; 1024static unsigned long set_unmask, get_unmask, unmask;
1094static unsigned long set_mult, get_mult, mult; 1025static unsigned long set_mult, get_mult, mult;
1095#ifdef CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA 1026#if ENABLE_FEATURE_HDPARM_HDIO_GETSET_DMA
1096static unsigned long set_dma, get_dma, dma; 1027static unsigned long set_dma, get_dma, dma;
1097#endif 1028#endif
1098static unsigned long set_dma_q, get_dma_q, dma_q; 1029static unsigned long set_dma_q, get_dma_q, dma_q;
@@ -1117,30 +1048,30 @@ static unsigned long set_sleepnow, get_sleepnow;
1117static unsigned long get_powermode; 1048static unsigned long get_powermode;
1118static unsigned long set_apmmode, get_apmmode, apmmode; 1049static 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
1121static int get_IDentity; 1052static int get_IDentity;
1122#endif 1053#endif
1123#ifdef CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF 1054#if ENABLE_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF
1124static unsigned long unregister_hwif; 1055static unsigned long unregister_hwif;
1125static unsigned long hwif; 1056static unsigned long hwif;
1126#endif 1057#endif
1127#ifdef CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF 1058#if ENABLE_FEATURE_HDPARM_HDIO_SCAN_HWIF
1128static unsigned long scan_hwif; 1059static unsigned long scan_hwif;
1129static unsigned long hwif_data; 1060static unsigned long hwif_data;
1130static unsigned long hwif_ctrl; 1061static unsigned long hwif_ctrl;
1131static unsigned long hwif_irq; 1062static unsigned long hwif_irq;
1132#endif 1063#endif
1133#ifdef CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF 1064#if ENABLE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF
1134static unsigned long set_busstate, get_busstate, busstate; 1065static unsigned long set_busstate, get_busstate, busstate;
1135#endif 1066#endif
1136static int reread_partn; 1067static int reread_partn;
1137 1068
1138#ifdef CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET 1069#if ENABLE_FEATURE_HDPARM_HDIO_DRIVE_RESET
1139static int perform_reset; 1070static 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
1142static unsigned long perform_tristate, tristate; 1073static 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
1157static const char * const cfg_str[] = 1088static 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
1166static void dump_identity(const struct hd_driveid *id) 1097static 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
1349static int do_blkgetsize (int fd, unsigned long long *blksize64) 1273static 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
1462static void bus_state_value(unsigned int value) 1387static 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
1504struct xfermode_entry { 1429struct xfermode_entry {
1505 int val; 1430 int val;
1506 const char *name; 1431 const char *name;
1507}; 1432};
1508 1433
1509static const struct xfermode_entry xfermode_table[] = { 1434static 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
1545static int translate_xfermode(char * name) 1470static 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
2022static int fromhex(unsigned char c) 1888static 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++));