Subject: Re: WTF?! New SCSI in current sup broke all Amiga drivers?
To: Rob Healey <rhealey@aca.com>
From: Michael L. Hitch <osymh@gemini.oscs.montana.edu>
List: amiga-dev
Date: 01/02/1995 21:27:56
On Dec 31,  8:33pm, Rob Healey wrote:
> 	Has anybody been able to compile and get the low level Amiga SCSI
> 	drivers to work with the new high level -current SCSI interface code?

  I'm running a kernel right now compiled from the January 1 sources.
(No, not from unmodified sources :-).)

> 	I changed the define's in sbic.c and dropped out some now gone
> 	fields in structures in ahsc.c so they compile fine but when you
> 	try to boot the kernel it can't find a suitable root and it doesn't
> 	appear to even be trying to use the SCSI driver?!
> 
> 	Michel H., do you know what's up here?

  Since the adapter_info field was removed, each driver has to explicitly
set the "openings" entry when the scsi_link is set up.  Since that value
was set to 0, the upper level drivers never called the low level driver.

> 	Also, some of the flag #define changes in sbic.c looked dubious,
> 	SCSI_NOMASK to SCSI_POLL and SCSI_ERR_OK to SCSI_IGNORE_MEDIA_CHANGE.
> 	The second one looks REAL dubious but it is the same hex value in
> 	the same flags field...

  SCSI_IGNORE_MEDIA_CHANGE isn't the same as SCSI_ERR_OK.  I just removed
the test for SCSI_ERR_OK for now until I figure out if I need to do something
different.  [Chris Hopps did all the original work on getting the 33c93
driver (sbic.c) interfaced to the higher level SCSI drivers.  I haven't
looked real hard at it - just enough to copy it for the other SCSI low
level drivers.]

  Here are the Amiga SCSI driver changes that I currently have.  The only
one actually testing is the zssc.c/siop.c changes, but the rest should all
be equivalent.

diff -cr /usr/src/sys/arch/amiga/dev/afsc.c sys/arch/amiga/dev/afsc.c
*** /usr/src/sys/arch/amiga/dev/afsc.c	Wed Dec 28 04:21:14 1994
--- sys/arch/amiga/dev/afsc.c	Mon Jan  2 20:40:14 1995
***************
*** 59,66 ****
  	siop_minphys,
  	0,			/* no lun support */
  	0,			/* no lun support */
- 	siop_adinfo,
- 	"afsc",
  };
  
  struct scsi_device afsc_scsidev = {
--- 59,64 ----
***************
*** 68,75 ****
  	NULL,		/* do not have a start functio */
  	NULL,		/* have no async handler */
  	NULL,		/* Use default done routine */
- 	"afsc",
- 	0,
  };
  
  
--- 66,71 ----
***************
*** 123,131 ****
  	siopinitialize(sc);
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_targ = 7;
  	sc->sc_link.adapter = &afsc_scsiswitch;
  	sc->sc_link.device = &afsc_scsidev;
  	TAILQ_INIT(&sc->sc_xslist);
  
  	custom.intreq = INTF_PORTS;
--- 119,128 ----
  	siopinitialize(sc);
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_target = 7;
  	sc->sc_link.adapter = &afsc_scsiswitch;
  	sc->sc_link.device = &afsc_scsidev;
+ 	sc->sc_link.openings = 1;
  	TAILQ_INIT(&sc->sc_xslist);
  
  	custom.intreq = INTF_PORTS;
diff -cr /usr/src/sys/arch/amiga/dev/ahsc.c sys/arch/amiga/dev/ahsc.c
*** /usr/src/sys/arch/amiga/dev/ahsc.c	Wed Dec 28 04:21:14 1994
--- sys/arch/amiga/dev/ahsc.c	Mon Jan  2 20:40:14 1995
***************
*** 65,72 ****
  	sbic_minphys,
  	0,			/* no lun support */
  	0,			/* no lun support */
- 	sbic_adinfo,
- 	"ahsc",
  };
  
  struct scsi_device ahsc_scsidev = {
--- 65,70 ----
***************
*** 74,81 ****
  	NULL,		/* do not have a start functio */
  	NULL,		/* have no async handler */
  	NULL,		/* Use default done routine */
- 	"ahsc",
- 	0,
  };
  
  
--- 72,77 ----
***************
*** 142,150 ****
  	sbicreset(sc);
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_targ = 7;
  	sc->sc_link.adapter = &ahsc_scsiswitch;
  	sc->sc_link.device = &ahsc_scsidev;
  	TAILQ_INIT(&sc->sc_xslist);
  
  	custom.intreq = INTF_PORTS;
--- 138,147 ----
  	sbicreset(sc);
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_target = 7;
  	sc->sc_link.adapter = &ahsc_scsiswitch;
  	sc->sc_link.device = &ahsc_scsidev;
+ 	sc->sc_link.openings = 1;
  	TAILQ_INIT(&sc->sc_xslist);
  
  	custom.intreq = INTF_PORTS;
diff -cr /usr/src/sys/arch/amiga/dev/atzsc.c sys/arch/amiga/dev/atzsc.c
*** /usr/src/sys/arch/amiga/dev/atzsc.c	Wed Dec 28 04:21:14 1994
--- sys/arch/amiga/dev/atzsc.c	Mon Jan  2 20:40:14 1995
***************
*** 65,72 ****
  	sbic_minphys,
  	0,			/* no lun support */
  	0,			/* no lun support */
- 	sbic_adinfo,
- 	"atzsc",
  };
  
  struct scsi_device atzsc_scsidev = {
--- 65,70 ----
***************
*** 74,81 ****
  	NULL,		/* do not have a start functio */
  	NULL,		/* have no async handler */
  	NULL,		/* Use default done routine */
- 	"atzsc",
- 	0,
  };
  
  
--- 72,77 ----
***************
*** 164,172 ****
  	sbicreset(sc);
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_targ = 7;
  	sc->sc_link.adapter = &atzsc_scsiswitch;
  	sc->sc_link.device = &atzsc_scsidev;
  	TAILQ_INIT(&sc->sc_xslist);
  
  	custom.intreq = INTF_PORTS;
--- 160,169 ----
  	sbicreset(sc);
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_target = 7;
  	sc->sc_link.adapter = &atzsc_scsiswitch;
  	sc->sc_link.device = &atzsc_scsidev;
+ 	sc->sc_link.openings = 1;
  	TAILQ_INIT(&sc->sc_xslist);
  
  	custom.intreq = INTF_PORTS;
diff -cr /usr/src/sys/arch/amiga/dev/gtsc.c sys/arch/amiga/dev/gtsc.c
*** /usr/src/sys/arch/amiga/dev/gtsc.c	Wed Dec 28 04:21:20 1994
--- sys/arch/amiga/dev/gtsc.c	Mon Jan  2 20:40:14 1995
***************
*** 66,73 ****
  	sbic_minphys,
  	0,			/* no lun support */
  	0,			/* no lun support */
- 	sbic_adinfo,
- 	"gtsc",
  };
  
  struct scsi_device gtsc_scsidev = {
--- 66,71 ----
***************
*** 75,82 ****
  	NULL,		/* have a queue served by this ??? */
  	NULL,		/* have no async handler ??? */
  	NULL,		/* Use default done routine */
- 	"gtsc",
- 	0,
  };
  
  int gtsc_maxdma = 0;	/* Maximum size per DMA transfer */
--- 73,78 ----
***************
*** 187,195 ****
  	sbicreset(sc);
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_targ = 7;
  	sc->sc_link.adapter = &gtsc_scsiswitch;
  	sc->sc_link.device = &gtsc_scsidev;
  	TAILQ_INIT(&sc->sc_xslist);
  
  	custom.intreq = INTF_PORTS;
--- 183,192 ----
  	sbicreset(sc);
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_target = 7;
  	sc->sc_link.adapter = &gtsc_scsiswitch;
  	sc->sc_link.device = &gtsc_scsidev;
+ 	sc->sc_link.openings = 1;
  	TAILQ_INIT(&sc->sc_xslist);
  
  	custom.intreq = INTF_PORTS;
diff -cr /usr/src/sys/arch/amiga/dev/idesc.c sys/arch/amiga/dev/idesc.c
*** /usr/src/sys/arch/amiga/dev/idesc.c	Wed Dec 28 04:21:23 1994
--- sys/arch/amiga/dev/idesc.c	Mon Jan  2 20:41:55 1995
***************
*** 231,237 ****
  };
  
  void ide_minphys __P((struct buf *bp));
- u_int ide_adinfo __P((void));
  int ide_scsicmd __P((struct scsi_xfer *));
  
  int idescprint __P((void *auxp, char *));
--- 231,236 ----
***************
*** 255,262 ****
  	ide_minphys,
  	0,			/* no lun support */
  	0,			/* no lun support */
- 	ide_adinfo,
- 	"idesc",
  };
  
  struct scsi_device idesc_scsidev = {
--- 254,259 ----
***************
*** 264,271 ****
  	NULL,		/* do not have a start functio */
  	NULL,		/* have no async handler */
  	NULL,		/* Use default done routine */
- 	"idesc",
- 	0,
  };
  
  struct cfdriver idesccd = {
--- 261,266 ----
***************
*** 398,406 ****
  	printf ("\n");
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_targ = 7;
  	sc->sc_link.adapter = &idesc_scsiswitch;
  	sc->sc_link.device = &idesc_scsidev;
  	TAILQ_INIT(&sc->sc_xslist);
  
  	custom.intreq = INTF_PORTS;
--- 393,402 ----
  	printf ("\n");
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_target = 7;
  	sc->sc_link.adapter = &idesc_scsiswitch;
  	sc->sc_link.device = &idesc_scsidev;
+ 	sc->sc_link.openings = 1;
  	TAILQ_INIT(&sc->sc_xslist);
  
  	custom.intreq = INTF_PORTS;
***************
*** 438,455 ****
  }
  
  /*
-  * must be used
-  */
- u_int
- ide_adinfo()
- {
- 	/* 
- 	 * one request at a time please
- 	 */
- 	return(1);
- }
- 
- /*
   * used by specific ide controller
   *
   */
--- 434,439 ----
***************
*** 469,475 ****
  	if (flags & SCSI_DATA_UIO)
  		panic("ide: scsi data uio requested");
  	
! 	if (dev->sc_xs && flags & SCSI_NOMASK)
  		panic("ide_scsicmd: busy");
  
  	s = splbio();
--- 453,459 ----
  	if (flags & SCSI_DATA_UIO)
  		panic("ide: scsi data uio requested");
  	
! 	if (dev->sc_xs && flags & SCSI_POLL)
  		panic("ide_scsicmd: busy");
  
  	s = splbio();
***************
*** 494,500 ****
  	 */
  	ide_donextcmd(dev);
  
! 	if (flags & SCSI_NOMASK)
  		return(COMPLETE);
  	return(SUCCESSFULLY_QUEUED);
  }
--- 478,484 ----
  	 */
  	ide_donextcmd(dev);
  
! 	if (flags & SCSI_POLL)
  		return(COMPLETE);
  	return(SUCCESSFULLY_QUEUED);
  }
***************
*** 523,529 ****
  		ide_scsidone(dev, -1);
  		return;
  	}
! 	if (flags & SCSI_NOMASK || ide_no_int)
  		stat = ideicmd(dev, slp->target, xs->cmd, xs->cmdlen, 
  		    xs->data, xs->datalen/*, phase*/);
  	else if (idego(dev, xs) == 0)
--- 507,513 ----
  		ide_scsidone(dev, -1);
  		return;
  	}
! 	if (flags & SCSI_POLL || ide_no_int)
  		stat = ideicmd(dev, slp->target, xs->cmd, xs->cmdlen, 
  		    xs->data, xs->datalen/*, phase*/);
  	else if (idego(dev, xs) == 0)
***************
*** 553,559 ****
  	 */
  	xs->status = stat;
  
! 	if (stat == 0 || xs->flags & SCSI_ERR_OK)
  		xs->resid = 0;
  	else {
  		switch(stat) {
--- 537,543 ----
  	 */
  	xs->status = stat;
  
! 	if (stat == 0)
  		xs->resid = 0;
  	else {
  		switch(stat) {
***************
*** 607,613 ****
  
  	slp = xs->sc_link;
  	
! 	rqs.op_code = REQUEST_SENSE;
  	rqs.byte2 = slp->lun << 5;
  #ifdef not_yet
  	rqs.length = xs->req_sense_length ? xs->req_sense_length : 
--- 591,597 ----
  
  	slp = xs->sc_link;
  	
! 	rqs.opcode = REQUEST_SENSE;
  	rqs.byte2 = slp->lun << 5;
  #ifdef not_yet
  	rqs.length = xs->req_sense_length ? xs->req_sense_length : 
***************
*** 850,856 ****
  	struct scsi_inquiry_data *inqbuf;
  	struct {
  		struct scsi_mode_header header;
! 		struct blk_desc blk_desc;
  		union disk_pages pages;
  	} *mdsnbuf;
  
--- 834,840 ----
  	struct scsi_inquiry_data *inqbuf;
  	struct {
  		struct scsi_mode_header header;
! 		struct scsi_blk_desc blk_desc;
  		union disk_pages pages;
  	} *mdsnbuf;
  
diff -cr /usr/src/sys/arch/amiga/dev/ivsc.c sys/arch/amiga/dev/ivsc.c
*** /usr/src/sys/arch/amiga/dev/ivsc.c	Wed Dec 28 04:21:25 1994
--- sys/arch/amiga/dev/ivsc.c	Mon Jan  2 20:40:15 1995
***************
*** 65,72 ****
  	sci_minphys,
  	0,			/* no lun support */
  	0,			/* no lun support */
- 	sci_adinfo,
- 	"ivsc",
  };
  
  struct scsi_device ivsc_scsidev = {
--- 65,70 ----
***************
*** 74,81 ****
  	NULL,		/* do not have a start functio */
  	NULL,		/* have no async handler */
  	NULL,		/* Use default done routine */
- 	"ivsc",
- 	0,
  };
  
  #define QPRINTF
--- 72,77 ----
***************
*** 173,181 ****
  	scireset(sc);
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_targ = 7;
  	sc->sc_link.adapter = &ivsc_scsiswitch;
  	sc->sc_link.device = &ivsc_scsidev;
  	TAILQ_INIT(&sc->sc_xslist);
  
  	custom.intreq = INTF_PORTS;
--- 169,178 ----
  	scireset(sc);
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_target = 7;
  	sc->sc_link.adapter = &ivsc_scsiswitch;
  	sc->sc_link.device = &ivsc_scsidev;
+ 	sc->sc_link.openings = 1;
  	TAILQ_INIT(&sc->sc_xslist);
  
  	custom.intreq = INTF_PORTS;
diff -cr /usr/src/sys/arch/amiga/dev/mgnsc.c sys/arch/amiga/dev/mgnsc.c
*** /usr/src/sys/arch/amiga/dev/mgnsc.c	Wed Dec 28 04:21:26 1994
--- sys/arch/amiga/dev/mgnsc.c	Mon Jan  2 20:40:15 1995
***************
*** 58,65 ****
  	siop_minphys,
  	0,			/* no lun support */
  	0,			/* no lun support */
- 	siop_adinfo,
- 	"mgnsc",
  };
  
  struct scsi_device mgnsc_scsidev = {
--- 58,63 ----
***************
*** 67,74 ****
  	NULL,		/* do not have a start functio */
  	NULL,		/* have no async handler */
  	NULL,		/* Use default done routine */
- 	"mgnsc",
- 	0,
  };
  
  
--- 65,70 ----
***************
*** 120,128 ****
  	siopinitialize(sc);
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_targ = 7;
  	sc->sc_link.adapter = &mgnsc_scsiswitch;
  	sc->sc_link.device = &mgnsc_scsidev;
  	TAILQ_INIT(&sc->sc_xslist);
  
  	custom.intreq = INTF_PORTS;
--- 116,125 ----
  	siopinitialize(sc);
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_target = 7;
  	sc->sc_link.adapter = &mgnsc_scsiswitch;
  	sc->sc_link.device = &mgnsc_scsidev;
+ 	sc->sc_link.openings = 1;
  	TAILQ_INIT(&sc->sc_xslist);
  
  	custom.intreq = INTF_PORTS;
diff -cr /usr/src/sys/arch/amiga/dev/mlhsc.c sys/arch/amiga/dev/mlhsc.c
*** /usr/src/sys/arch/amiga/dev/mlhsc.c	Wed Dec 28 04:21:27 1994
--- sys/arch/amiga/dev/mlhsc.c	Mon Jan  2 20:40:15 1995
***************
*** 60,67 ****
  	sci_minphys,
  	0,			/* no lun support */
  	0,			/* no lun support */
- 	sci_adinfo,
- 	"mlhsc",
  };
  
  struct scsi_device mlhsc_scsidev = {
--- 60,65 ----
***************
*** 69,76 ****
  	NULL,		/* do not have a start functio */
  	NULL,		/* have no async handler */
  	NULL,		/* Use default done routine */
- 	"mlhsc",
- 	0,
  };
  
  #define QPRINTF
--- 67,72 ----
***************
*** 142,150 ****
  	scireset(sc);
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_targ = 7;
  	sc->sc_link.adapter = &mlhsc_scsiswitch;
  	sc->sc_link.device = &mlhsc_scsidev;
  	TAILQ_INIT(&sc->sc_xslist);
  
  	/*
--- 138,147 ----
  	scireset(sc);
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_target = 7;
  	sc->sc_link.adapter = &mlhsc_scsiswitch;
  	sc->sc_link.device = &mlhsc_scsidev;
+ 	sc->sc_link.openings = 1;
  	TAILQ_INIT(&sc->sc_xslist);
  
  	/*
diff -cr /usr/src/sys/arch/amiga/dev/otgsc.c sys/arch/amiga/dev/otgsc.c
*** /usr/src/sys/arch/amiga/dev/otgsc.c	Wed Dec 28 04:21:27 1994
--- sys/arch/amiga/dev/otgsc.c	Mon Jan  2 20:40:15 1995
***************
*** 60,67 ****
  	sci_minphys,
  	0,			/* no lun support */
  	0,			/* no lun support */
- 	sci_adinfo,
- 	"otgsc",
  };
  
  struct scsi_device otgsc_scsidev = {
--- 60,65 ----
***************
*** 69,76 ****
  	NULL,		/* do not have a start functio */
  	NULL,		/* have no async handler */
  	NULL,		/* Use default done routine */
- 	"otgsc",
- 	0,
  };
  
  #define QPRINTF
--- 67,72 ----
***************
*** 142,150 ****
  	scireset(sc);
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_targ = 7;
  	sc->sc_link.adapter = &otgsc_scsiswitch;
  	sc->sc_link.device = &otgsc_scsidev;
  	TAILQ_INIT(&sc->sc_xslist);
  
  	/*
--- 138,147 ----
  	scireset(sc);
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_target = 7;
  	sc->sc_link.adapter = &otgsc_scsiswitch;
  	sc->sc_link.device = &otgsc_scsidev;
+ 	sc->sc_link.openings = 1;
  	TAILQ_INIT(&sc->sc_xslist);
  
  	/*
diff -cr /usr/src/sys/arch/amiga/dev/sbic.c sys/arch/amiga/dev/sbic.c
*** /usr/src/sys/arch/amiga/dev/sbic.c	Wed Dec 28 04:21:28 1994
--- sys/arch/amiga/dev/sbic.c	Mon Jan  2 20:41:56 1995
***************
*** 138,155 ****
  }
  
  /*
-  * must be used
-  */
- u_int
- sbic_adinfo()
- {
- 	/* 
- 	 * one request at a time please
- 	 */
- 	return(1);
- }
- 
- /*
   * used by specific sbic controller
   *
   * it appears that the higher level code does nothing with LUN's
--- 138,143 ----
***************
*** 172,178 ****
  	if (flags & SCSI_DATA_UIO)
  		panic("sbic: scsi data uio requested");
  	
! 	if (dev->sc_xs && flags & SCSI_NOMASK)
  		panic("sbic_scsicmd: busy");
  
  	s = splbio();
--- 160,166 ----
  	if (flags & SCSI_DATA_UIO)
  		panic("sbic: scsi data uio requested");
  	
! 	if (dev->sc_xs && flags & SCSI_POLL)
  		panic("sbic_scsicmd: busy");
  
  	s = splbio();
***************
*** 197,203 ****
  	 */
  	sbic_donextcmd(dev);
  
! 	if (flags & SCSI_NOMASK)
  		return(COMPLETE);
  	return(SUCCESSFULLY_QUEUED);
  }
--- 185,191 ----
  	 */
  	sbic_donextcmd(dev);
  
! 	if (flags & SCSI_POLL)
  		return(COMPLETE);
  	return(SUCCESSFULLY_QUEUED);
  }
***************
*** 229,235 ****
  
  	dev->sc_stat[0] = -1;
  	xs->cmd->bytes[0] |= slp->lun << 5;
! 	if (phase == STATUS_PHASE || flags & SCSI_NOMASK ||
  	    sbicdmaok(dev, xs) == 0) 
  		stat = sbicicmd(dev, slp->target, slp->lun, xs->cmd,
  		    xs->cmdlen, xs->data, xs->datalen, phase);
--- 217,223 ----
  
  	dev->sc_stat[0] = -1;
  	xs->cmd->bytes[0] |= slp->lun << 5;
! 	if (phase == STATUS_PHASE || flags & SCSI_POLL ||
  	    sbicdmaok(dev, xs) == 0) 
  		stat = sbicicmd(dev, slp->target, slp->lun, xs->cmd,
  		    xs->cmdlen, xs->data, xs->datalen, phase);
***************
*** 260,266 ****
  	 */
  	xs->status = stat;
  
! 	if (stat == 0 || xs->flags & SCSI_ERR_OK)
  		xs->resid = 0;
  	else {
  		switch(stat) {
--- 248,254 ----
  	 */
  	xs->status = stat;
  
! 	if (stat == 0)
  		xs->resid = 0;
  	else {
  		switch(stat) {
***************
*** 314,320 ****
  
  	slp = xs->sc_link;
  	
! 	rqs.op_code = REQUEST_SENSE;
  	rqs.byte2 = slp->lun << 5;
  #ifdef not_yet
  	rqs.length = xs->req_sense_length ? xs->req_sense_length : 
--- 302,308 ----
  
  	slp = xs->sc_link;
  	
! 	rqs.opcode = REQUEST_SENSE;
  	rqs.byte2 = slp->lun << 5;
  #ifdef not_yet
  	rqs.length = xs->req_sense_length ? xs->req_sense_length : 
diff -cr /usr/src/sys/arch/amiga/dev/sbicvar.h sys/arch/amiga/dev/sbicvar.h
*** /usr/src/sys/arch/amiga/dev/sbicvar.h	Mon Nov 21 14:54:41 1994
--- sys/arch/amiga/dev/sbicvar.h	Mon Jan  2 20:42:33 1995
***************
*** 159,165 ****
  struct scsi_xfer;
  
  void sbic_minphys __P((struct buf *bp));
- u_int sbic_adinfo __P((void));
  int sbic_scsicmd __P((struct scsi_xfer *));
  
  #endif /* _SBICVAR_H_ */
--- 159,164 ----
diff -cr /usr/src/sys/arch/amiga/dev/sci.c sys/arch/amiga/dev/sci.c
*** /usr/src/sys/arch/amiga/dev/sci.c	Wed Dec 28 04:21:28 1994
--- sys/arch/amiga/dev/sci.c	Mon Jan  2 20:41:56 1995
***************
*** 106,123 ****
  }
  
  /*
-  * must be used
-  */
- u_int
- sci_adinfo()
- {
- 	/* 
- 	 * one request at a time please
- 	 */
- 	return(1);
- }
- 
- /*
   * used by specific sci controller
   *
   * it appears that the higher level code does nothing with LUN's
--- 106,111 ----
***************
*** 140,146 ****
  	if (flags & SCSI_DATA_UIO)
  		panic("sci: scsi data uio requested");
  	
! 	if (dev->sc_xs && flags & SCSI_NOMASK)
  		panic("sci_scsicmd: busy");
  
  	s = splbio();
--- 128,134 ----
  	if (flags & SCSI_DATA_UIO)
  		panic("sci: scsi data uio requested");
  	
! 	if (dev->sc_xs && flags & SCSI_POLL)
  		panic("sci_scsicmd: busy");
  
  	s = splbio();
***************
*** 165,171 ****
  	 */
  	sci_donextcmd(dev);
  
! 	if (flags & SCSI_NOMASK)
  		return(COMPLETE);
  	return(SUCCESSFULLY_QUEUED);
  }
--- 153,159 ----
  	 */
  	sci_donextcmd(dev);
  
! 	if (flags & SCSI_POLL)
  		return(COMPLETE);
  	return(SUCCESSFULLY_QUEUED);
  }
***************
*** 197,203 ****
  
  	dev->sc_stat[0] = -1;
  	xs->cmd->bytes[0] |= slp->lun << 5;
! 	if (phase == STATUS_PHASE || flags & SCSI_NOMASK) 
  		stat = sciicmd(dev, slp->target, xs->cmd, xs->cmdlen, 
  		    xs->data, xs->datalen, phase);
  	else if (scigo(dev, xs) == 0)
--- 185,191 ----
  
  	dev->sc_stat[0] = -1;
  	xs->cmd->bytes[0] |= slp->lun << 5;
! 	if (phase == STATUS_PHASE || flags & SCSI_POLL) 
  		stat = sciicmd(dev, slp->target, xs->cmd, xs->cmdlen, 
  		    xs->data, xs->datalen, phase);
  	else if (scigo(dev, xs) == 0)
***************
*** 227,233 ****
  	 */
  	xs->status = stat;
  
! 	if (stat == 0 || xs->flags & SCSI_ERR_OK)
  		xs->resid = 0;
  	else {
  		switch(stat) {
--- 215,221 ----
  	 */
  	xs->status = stat;
  
! 	if (stat == 0)
  		xs->resid = 0;
  	else {
  		switch(stat) {
***************
*** 281,287 ****
  
  	slp = xs->sc_link;
  	
! 	rqs.op_code = REQUEST_SENSE;
  	rqs.byte2 = slp->lun << 5;
  #ifdef not_yet
  	rqs.length = xs->req_sense_length ? xs->req_sense_length : 
--- 269,275 ----
  
  	slp = xs->sc_link;
  	
! 	rqs.opcode = REQUEST_SENSE;
  	rqs.byte2 = slp->lun << 5;
  #ifdef not_yet
  	rqs.length = xs->req_sense_length ? xs->req_sense_length : 
diff -cr /usr/src/sys/arch/amiga/dev/scivar.h sys/arch/amiga/dev/scivar.h
*** /usr/src/sys/arch/amiga/dev/scivar.h	Mon Nov 21 14:54:42 1994
--- sys/arch/amiga/dev/scivar.h	Mon Jan  2 20:42:33 1995
***************
*** 139,145 ****
  struct scsi_xfer;
  
  void sci_minphys __P((struct buf *bp));
- u_int sci_adinfo __P((void));
  int sci_scsicmd __P((struct scsi_xfer *));
  
  #endif /* _SCIVAR_H_ */
--- 139,144 ----
diff -cr /usr/src/sys/arch/amiga/dev/siop.c sys/arch/amiga/dev/siop.c
*** /usr/src/sys/arch/amiga/dev/siop.c	Wed Dec 28 04:21:30 1994
--- sys/arch/amiga/dev/siop.c	Mon Jan  2 20:41:56 1995
***************
*** 164,181 ****
  }
  
  /*
-  * must be used
-  */
- u_int
- siop_adinfo()
- {
- 	/* 
- 	 * one request at a time please
- 	 */
- 	return(1);
- }
- 
- /*
   * used by specific siop controller
   *
   */
--- 164,169 ----
***************
*** 195,201 ****
  	if (flags & SCSI_DATA_UIO)
  		panic("siop: scsi data uio requested");
  	
! 	if (dev->sc_xs && flags & SCSI_NOMASK)
  		panic("siop_scsicmd: busy");
  
  	s = splbio();
--- 183,189 ----
  	if (flags & SCSI_DATA_UIO)
  		panic("siop: scsi data uio requested");
  	
! 	if (dev->sc_xs && flags & SCSI_POLL)
  		panic("siop_scsicmd: busy");
  
  	s = splbio();
***************
*** 220,226 ****
  	 */
  	siop_donextcmd(dev);
  
! 	if (flags & SCSI_NOMASK)
  		return(COMPLETE);
  	return(SUCCESSFULLY_QUEUED);
  }
--- 208,214 ----
  	 */
  	siop_donextcmd(dev);
  
! 	if (flags & SCSI_POLL)
  		return(COMPLETE);
  	return(SUCCESSFULLY_QUEUED);
  }
***************
*** 260,266 ****
    printf ("active count %d\n", dev->sc_active);
  }
  #endif
! 	if (flags & SCSI_NOMASK || siop_no_dma) 
  		stat = siopicmd(dev, slp->target, slp->lun, xs->cmd,
  		    xs->cmdlen, xs->data, xs->datalen);
  	else if (siopgo(dev, xs) == 0)
--- 248,254 ----
    printf ("active count %d\n", dev->sc_active);
  }
  #endif
! 	if (flags & SCSI_POLL || siop_no_dma) 
  		stat = siopicmd(dev, slp->target, slp->lun, xs->cmd,
  		    xs->cmdlen, xs->data, xs->datalen);
  	else if (siopgo(dev, xs) == 0)
***************
*** 290,296 ****
  	 */
  	xs->status = stat;
  
! 	if (stat == 0 || xs->flags & SCSI_ERR_OK)
  		xs->resid = 0;
  	else {
  		switch(stat) {
--- 278,284 ----
  	 */
  	xs->status = stat;
  
! 	if (stat == 0)
  		xs->resid = 0;
  	else {
  		switch(stat) {
***************
*** 357,363 ****
  
  	slp = xs->sc_link;
  	
! 	rqs.op_code = REQUEST_SENSE;
  	rqs.byte2 = slp->lun << 5;
  #ifdef not_yet
  	rqs.length = xs->req_sense_length ? xs->req_sense_length : 
--- 345,351 ----
  
  	slp = xs->sc_link;
  	
! 	rqs.opcode = REQUEST_SENSE;
  	rqs.byte2 = slp->lun << 5;
  #ifdef not_yet
  	rqs.length = xs->req_sense_length ? xs->req_sense_length : 
diff -cr /usr/src/sys/arch/amiga/dev/siopvar.h sys/arch/amiga/dev/siopvar.h
*** /usr/src/sys/arch/amiga/dev/siopvar.h	Wed Dec 28 04:21:31 1994
--- sys/arch/amiga/dev/siopvar.h	Mon Jan  2 20:42:33 1995
***************
*** 148,154 ****
  #define	STS_EXT		0x80	/* Extended status valid */
  
  void siop_minphys __P((struct buf *bp));
- u_int siop_adinfo __P((void));
  int siop_scsicmd __P((struct scsi_xfer *));
  
  #endif /* _SIOPVAR_H */
--- 148,153 ----
diff -cr /usr/src/sys/arch/amiga/dev/wesc.c sys/arch/amiga/dev/wesc.c
*** /usr/src/sys/arch/amiga/dev/wesc.c	Wed Dec 28 04:21:32 1994
--- sys/arch/amiga/dev/wesc.c	Mon Jan  2 20:40:15 1995
***************
*** 58,65 ****
  	siop_minphys,
  	0,			/* no lun support */
  	0,			/* no lun support */
- 	siop_adinfo,
- 	"wesc",
  };
  
  struct scsi_device wesc_scsidev = {
--- 58,63 ----
***************
*** 67,74 ****
  	NULL,		/* do not have a start functio */
  	NULL,		/* have no async handler */
  	NULL,		/* Use default done routine */
- 	"wesc",
- 	0,
  };
  
  
--- 65,70 ----
***************
*** 121,129 ****
  	siopinitialize(sc);
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_targ = 7;
  	sc->sc_link.adapter = &wesc_scsiswitch;
  	sc->sc_link.device = &wesc_scsidev;
  	TAILQ_INIT(&sc->sc_xslist);
  
  	custom.intreq = INTF_PORTS;
--- 117,126 ----
  	siopinitialize(sc);
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_target = 7;
  	sc->sc_link.adapter = &wesc_scsiswitch;
  	sc->sc_link.device = &wesc_scsidev;
+ 	sc->sc_link.openings = 1;
  	TAILQ_INIT(&sc->sc_xslist);
  
  	custom.intreq = INTF_PORTS;
diff -cr /usr/src/sys/arch/amiga/dev/wstsc.c sys/arch/amiga/dev/wstsc.c
*** /usr/src/sys/arch/amiga/dev/wstsc.c	Wed Dec 28 04:21:33 1994
--- sys/arch/amiga/dev/wstsc.c	Mon Jan  2 20:40:15 1995
***************
*** 64,71 ****
  	sci_minphys,
  	0,			/* no lun support */
  	0,			/* no lun support */
- 	sci_adinfo,
- 	"wstsc",
  };
  
  struct scsi_device wstsc_scsidev = {
--- 64,69 ----
***************
*** 73,80 ****
  	NULL,		/* do not have a start functio */
  	NULL,		/* have no async handler */
  	NULL,		/* Use default done routine */
- 	"wstsc",
- 	0,
  };
  
  #define QPRINTF
--- 71,76 ----
***************
*** 159,167 ****
  	scireset(sc);
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_targ = 7;
  	sc->sc_link.adapter = &wstsc_scsiswitch;
  	sc->sc_link.device = &wstsc_scsidev;
  	TAILQ_INIT(&sc->sc_xslist);
  
  	/*
--- 155,164 ----
  	scireset(sc);
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_target = 7;
  	sc->sc_link.adapter = &wstsc_scsiswitch;
  	sc->sc_link.device = &wstsc_scsidev;
+ 	sc->sc_link.openings = 1;
  	TAILQ_INIT(&sc->sc_xslist);
  
  	/*
diff -cr /usr/src/sys/arch/amiga/dev/zssc.c sys/arch/amiga/dev/zssc.c
*** /usr/src/sys/arch/amiga/dev/zssc.c	Wed Dec 28 04:21:35 1994
--- sys/arch/amiga/dev/zssc.c	Mon Jan  2 20:35:50 1995
***************
*** 59,66 ****
  	siop_minphys,
  	0,			/* no lun support */
  	0,			/* no lun support */
- 	siop_adinfo,
- 	"zssc",
  };
  
  struct scsi_device zssc_scsidev = {
--- 59,64 ----
***************
*** 68,75 ****
  	NULL,		/* do not have a start functio */
  	NULL,		/* have no async handler */
  	NULL,		/* Use default done routine */
- 	"zssc",
- 	0,
  };
  
  
--- 66,71 ----
***************
*** 123,131 ****
  	siopinitialize(sc);
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_targ = 7;
  	sc->sc_link.adapter = &zssc_scsiswitch;
  	sc->sc_link.device = &zssc_scsidev;
  	TAILQ_INIT(&sc->sc_xslist);
  
  #if 1
--- 119,128 ----
  	siopinitialize(sc);
  
  	sc->sc_link.adapter_softc = sc;
! 	sc->sc_link.adapter_target = 7;
  	sc->sc_link.adapter = &zssc_scsiswitch;
  	sc->sc_link.device = &zssc_scsidev;
+ 	sc->sc_link.openings = 1;
  	TAILQ_INIT(&sc->sc_xslist);
  
  #if 1
  
Michael

-- 
Michael L. Hitch			INTERNET:  osymh@montana.edu
Computer Consultant
Office of Systems and Computing Services
Montana State University	Bozeman, MT	USA