aic79xx: use BIOS settings
Subsystems (2)
PATCH 6/7 aic79xx: use BIOS settings
This patch fixes the aic79xx driver to properly respond to BIOS settings.
Signed-off-by Hannes Reinecke <[email protected]>
Signature · 4 lines
Dr. Hannes Reinecke [email protected] SuSE Linux Products GmbH S390 & zSeries Maxfeldstraße 5 +49 911 74053 688 90409 Nürnberg http://www.suse.de
[PATCH 06/07] aic79xx: use BIOS settings
This patch fixes the aic79xx driver to properly respond to BIOS settings.
Signed-off-by Hannes Reinecke <[email protected]>
---
drivers/scsi/aic7xxx/aic79xx_osm.c | 35 ++++++++++++++++++++++++++++------- 1 files changed, 28 insertions(+), 7 deletions(-)
c307cfff586012f91b62f6836c08b301748ea603
drivers/scsi/aic7xxx/aic79xx_osm.c +28 -7
@@ -481,6 +481,7 @@ ahd_linux_target_alloc(struct scsi_targe {struct ahd_softc *ahd = *((struct ahd_softc **)dev_to_shost (&starget->dev)->hostdata); +struct seeprom_config *sc = ahd->seep_config;unsigned long flags;struct scsi_target **ahd_targp =ahd_linux_target_in_softc (starget);struct ahd_linux_target *targ =scsi_transport_target_data (starget);
@@ -496,18 +497,38 @@ ahd_linux_target_alloc(struct scsi_targe *ahd_targp = starget;memset (targ,0 ,sizeof (*targ)); +if (sc) { +int flags = sc->device_flags[starget->id]; + + tinfo =ahd_fetch_transinfo (ahd,'A' , ahd->our_id, + starget->id, &tstate); + +if ((flags &CFPACKETIZED ) ==0 ) { +/* Do not negotiate packetized transfers */ +spi_rd_strm (starget) =0 ; +spi_pcomp_en (starget) =0 ; +spi_rti (starget) =0 ; +spi_wr_flow (starget) =0 ; +spi_hold_mcs (starget) =0 ; + }else { +if ((ahd->features &AHD_RTI ) ==0 ) +spi_rti (starget) =0 ; + } + +if ((flags &CFQAS ) ==0 ) +spi_qas (starget) =0 ; + +/* Transinfo values have been set to BIOS settings */ +spi_max_width (starget) = (flags &CFWIDEB ) ?1 :0 ; +spi_min_period (starget) = tinfo->user.period; +spi_max_offset (starget) = tinfo->user.offset; + } + tinfo =ahd_fetch_transinfo (ahd, channel, ahd->our_id, starget->id, &tstate);ahd_compile_devinfo (&devinfo, ahd->our_id, starget->id,CAM_LUN_WILDCARD , channel,ROLE_INITIATOR ); -spi_min_period (starget) =AHD_SYNCRATE_MAX ;/* We can do U320 */ -if ((ahd->bugs &AHD_PACED_NEGTABLE_BUG ) !=0 ) -spi_max_offset (starget) =MAX_OFFSET_PACED_BUG ; -else -spi_max_offset (starget) =MAX_OFFSET_PACED ; -spi_max_width (starget) = ahd->features &AHD_WIDE ; -ahd_set_syncrate (ahd, &devinfo,0 ,0 ,0 ,AHD_TRANS_GOAL ,/*paused*/ FALSE); ahd_set_width(ahd, &devinfo, MSG_EXT_WDTR_BUS_8_BIT,
Signature · 1 line
1.1.3