diff options
Diffstat (limited to 'drivers/scsi/sym53c8xx_2')
-rw-r--r-- | drivers/scsi/sym53c8xx_2/sym_hipd.c | 65 |
1 files changed, 34 insertions, 31 deletions
diff --git a/drivers/scsi/sym53c8xx_2/sym_hipd.c b/drivers/scsi/sym53c8xx_2/sym_hipd.c index 1d01c24f5ae9..a671bdc07450 100644 --- a/drivers/scsi/sym53c8xx_2/sym_hipd.c +++ b/drivers/scsi/sym53c8xx_2/sym_hipd.c | |||
@@ -648,6 +648,37 @@ static void sym_save_initial_setting (struct sym_hcb *np) | |||
648 | } | 648 | } |
649 | 649 | ||
650 | /* | 650 | /* |
651 | * Set SCSI BUS mode. | ||
652 | * - LVD capable chips (895/895A/896/1010) report the current BUS mode | ||
653 | * through the STEST4 IO register. | ||
654 | * - For previous generation chips (825/825A/875), the user has to tell us | ||
655 | * how to check against HVD, since a 100% safe algorithm is not possible. | ||
656 | */ | ||
657 | static void sym_set_bus_mode(struct sym_hcb *np, struct sym_nvram *nvram) | ||
658 | { | ||
659 | if (np->scsi_mode) | ||
660 | return; | ||
661 | |||
662 | np->scsi_mode = SMODE_SE; | ||
663 | if (np->features & (FE_ULTRA2|FE_ULTRA3)) | ||
664 | np->scsi_mode = (np->sv_stest4 & SMODE); | ||
665 | else if (np->features & FE_DIFF) { | ||
666 | if (SYM_SETUP_SCSI_DIFF == 1) { | ||
667 | if (np->sv_scntl3) { | ||
668 | if (np->sv_stest2 & 0x20) | ||
669 | np->scsi_mode = SMODE_HVD; | ||
670 | } else if (nvram->type == SYM_SYMBIOS_NVRAM) { | ||
671 | if (!(INB(np, nc_gpreg) & 0x08)) | ||
672 | np->scsi_mode = SMODE_HVD; | ||
673 | } | ||
674 | } else if (SYM_SETUP_SCSI_DIFF == 2) | ||
675 | np->scsi_mode = SMODE_HVD; | ||
676 | } | ||
677 | if (np->scsi_mode == SMODE_HVD) | ||
678 | np->rv_stest2 |= 0x20; | ||
679 | } | ||
680 | |||
681 | /* | ||
651 | * Prepare io register values used by sym_start_up() | 682 | * Prepare io register values used by sym_start_up() |
652 | * according to selected and supported features. | 683 | * according to selected and supported features. |
653 | */ | 684 | */ |
@@ -657,10 +688,7 @@ static int sym_prepare_setting(struct Scsi_Host *shost, struct sym_hcb *np, stru | |||
657 | u32 period; | 688 | u32 period; |
658 | int i; | 689 | int i; |
659 | 690 | ||
660 | /* | 691 | np->maxwide = (np->features & FE_WIDE) ? 1 : 0; |
661 | * Wide ? | ||
662 | */ | ||
663 | np->maxwide = (np->features & FE_WIDE)? 1 : 0; | ||
664 | 692 | ||
665 | /* | 693 | /* |
666 | * Guess the frequency of the chip's clock. | 694 | * Guess the frequency of the chip's clock. |
@@ -841,6 +869,7 @@ static int sym_prepare_setting(struct Scsi_Host *shost, struct sym_hcb *np, stru | |||
841 | * Get parity checking, host ID and verbose mode from NVRAM | 869 | * Get parity checking, host ID and verbose mode from NVRAM |
842 | */ | 870 | */ |
843 | np->myaddr = 255; | 871 | np->myaddr = 255; |
872 | np->scsi_mode = 0; | ||
844 | sym_nvram_setup_host(shost, np, nvram); | 873 | sym_nvram_setup_host(shost, np, nvram); |
845 | 874 | ||
846 | /* | 875 | /* |
@@ -857,33 +886,7 @@ static int sym_prepare_setting(struct Scsi_Host *shost, struct sym_hcb *np, stru | |||
857 | */ | 886 | */ |
858 | sym_init_burst(np, burst_max); | 887 | sym_init_burst(np, burst_max); |
859 | 888 | ||
860 | /* | 889 | sym_set_bus_mode(np, nvram); |
861 | * Set SCSI BUS mode. | ||
862 | * - LVD capable chips (895/895A/896/1010) report the | ||
863 | * current BUS mode through the STEST4 IO register. | ||
864 | * - For previous generation chips (825/825A/875), | ||
865 | * user has to tell us how to check against HVD, | ||
866 | * since a 100% safe algorithm is not possible. | ||
867 | */ | ||
868 | np->scsi_mode = SMODE_SE; | ||
869 | if (np->features & (FE_ULTRA2|FE_ULTRA3)) | ||
870 | np->scsi_mode = (np->sv_stest4 & SMODE); | ||
871 | else if (np->features & FE_DIFF) { | ||
872 | if (SYM_SETUP_SCSI_DIFF == 1) { | ||
873 | if (np->sv_scntl3) { | ||
874 | if (np->sv_stest2 & 0x20) | ||
875 | np->scsi_mode = SMODE_HVD; | ||
876 | } | ||
877 | else if (nvram->type == SYM_SYMBIOS_NVRAM) { | ||
878 | if (!(INB(np, nc_gpreg) & 0x08)) | ||
879 | np->scsi_mode = SMODE_HVD; | ||
880 | } | ||
881 | } | ||
882 | else if (SYM_SETUP_SCSI_DIFF == 2) | ||
883 | np->scsi_mode = SMODE_HVD; | ||
884 | } | ||
885 | if (np->scsi_mode == SMODE_HVD) | ||
886 | np->rv_stest2 |= 0x20; | ||
887 | 890 | ||
888 | /* | 891 | /* |
889 | * Set LED support from SCRIPTS. | 892 | * Set LED support from SCRIPTS. |