Subject: Re: review of minor SCSIbus midlayer change, #1, possibly for 5.0
To: Matthew Jacob <mjacob@feral.com>
From: Jason R Thorpe <thorpej@zembu.com>
List: tech-kern
Date: 08/07/2000 16:55:05
On Mon, Aug 07, 2000 at 04:46:15PM -0700, Matthew Jacob wrote:

 > This allows both dynamic flag setting for 'acceleration' from userland as well
 > as from initial configuration for host adapters that support the ioctl
 > function.
 > 
 > Thoughts? Makes things cleaner, and is a start toward finer control.

Sure, this seems fine for now -- I have addressed this issue in the
thorpej_scsipi branch ... how I wish someone would pick up the ball
and roll with it.

 > Index: sys/scsiio.h
 > ===================================================================
 > RCS file: /cvsroot/syssrc/sys/sys/scsiio.h,v
 > retrieving revision 1.7
 > diff -u -r1.7 scsiio.h
 > --- scsiio.h	1998/10/10 03:18:51	1.7
 > +++ scsiio.h	2000/08/07 23:43:34
 > @@ -90,4 +90,15 @@
 >  
 >  #define	SCBUSIORESET	_IO('U', 1)	/* reset SCSI bus */
 >  
 > +/* enable/disable device properties */
 > +struct scbusaccel_args {
 > +	int	sa_target;	/* target to set property on */
 > +	int	sa_lun;		/* lun to set property on */
 > +	int	sa_flags;	/* flags to set or clear */
 > +};
 > +#define	SC_ACCEL_SYNC	0x01	/* enable sync mode */
 > +#define	SC_ACCEL_WIDE	0x02	/* enable wide transfers */
 > +#define	SC_ACCEL_TAGS	0x04	/* enable tagged queuing */
 > +#define	SCBUSACCEL	_IOW('U', 2, struct scbusaccel_args)
 > +
 >  #endif /* _SYS_SCSIIO_H_ */
 > Index: dev/scsipi/scsiconf.c
 > ===================================================================
 > RCS file: /cvsroot/syssrc/sys/dev/scsipi/scsiconf.c,v
 > retrieving revision 1.148
 > diff -u -r1.148 scsiconf.c
 > --- scsiconf.c	2000/08/03 12:36:08	1.148
 > +++ scsiconf.c	2000/08/07 23:43:35
 > @@ -817,7 +817,7 @@
 >  	default:
 >  		break;
 >  	}
 > -	if (checkdtype)
 > +	if (checkdtype) {
 >  		switch (inqbuf.device & SID_TYPE) {
 >  		case T_DIRECT:
 >  		case T_SEQUENTIAL:
 > @@ -841,6 +841,25 @@
 >  		case T_NODEVICE:
 >  			goto bad;
 >  		}
 > +		/*
 > +		 * At this point we can also tell the adapter that it
 > +		 * may negotiate things as appropriate.
 > +		 */
 > +		if (sc_link->adapter->scsipi_ioctl) {
 > +			struct scbusaccel_args s;
 > +			s.sa_target = target;
 > +			s.sa_lun = lun;
 > +			s.sa_flags = 0;
 > +			if ((sc_link->quirks & SDEV_NOTAG) == 0)
 > +				s.sa_flags |= SC_ACCEL_TAGS;
 > +			if ((sc_link->quirks & SDEV_NOSYNC) == 0)
 > +				s.sa_flags |= SC_ACCEL_SYNC;
 > +			if ((sc_link->quirks & SDEV_NOWIDE) == 0)
 > +				s.sa_flags |= SC_ACCEL_WIDE;
 > +			(void) (*sc_link->adapter->scsipi_ioctl)
 > +			    (sc_link, SCBUSACCEL, (caddr_t)&s, FWRITE, curproc);
 > +		}
 > +	}
 >  
 >  	if ((cf = config_search(scsibussubmatch, (struct device *)scsi,
 >  	    &sa)) != NULL) {
 > 
 > 

-- 
        -- Jason R. Thorpe <thorpej@zembu.com>