Subject: Re: quick patch for LUNs on SCSI-I devices
To: Justin T. Gibbs <gibbs@freefall.freebsd.org>
From: Jason Thorpe <thorpej@nas.nasa.gov>
List: tech-kern
Date: 09/02/1996 13:44:37
On Mon, 02 Sep 1996 12:41:12 -0700 
 "Justin T. Gibbs" <gibbs@freefall.freebsd.org> wrote:

 > >No ... In the case where the device is "ancient", (i.e. version & 
 > >SID_ANSII == 0), LUNs are not checked, or in the case where a NOLUNS 
 > >quirk exists for the device.  In the case of ancient devices that _do_ 
 > >have working LUN support (i.e. the Emulex MD21), we have a FORECELUNS quirk.
 > 
 > Exactly.  So, the behavior now is to send the lun information to SCSI II
 > devices until we know that they are in fact SCSI II devices.  Hopefully
 > this doesn't break any SCSI II devices.
 > 
 > >Note that in the current model, the LUN won't get set on the first try of 
 > >the device, which will be LUN 0 ... unless the user explicitly 
 > >confgigured a device at lun 1 or something ...
 > 
 > It will get set, it will just be 0.

...which is just like the current "isn't set" behavior.  Yes, it's a 
side-effect, and it's Captical-I Icky, but... So is the entire way 
targets and luns are currently handled :-)  It's not clear that one can 
actually solve this _correctly_ without properly layering the target/lun 
code.

Yes, it deserves a big:

	/*
	 * XXX YOW!  THIS IS REALLY GROSS!
	 */

:-)

 > Hmm.  I wonder how SCSI->SCSI and SCSI->ESDI bridges will handle setting
 > the LUN in the CDB.  Hopefully it gets striped before getting sent to the
 > final device. 

Err, I have a sun3 with an MD21 SCSI->ESDI bridge at home ... When I get 
a chance, I'll try it out... I don't expect any problems ... I believe 
SunOS stashes the LUN in the cdb.

 > You still need to have the adapter export its maxtarget and maxlun
 > information in its attach args to the scsibus.  SCSI-III allows up
 > to 64bits for the target ID, LUN, and tag identifier with each
 > specific bus implmentation defining its own upper bounds <= 64.
 > In the code on my machine, this information is stored in the
 > adapter_link:

Why is an "adapter link" necessary?

Thusfar, my approach is to have a "scsi_attach_args" (under NetBSD, 
adapters export the "scsi" attribute, and scsibus's attach to that 
attribute, hence the name).  The scsi_attach_args will describe the 
properties of the controller; maxtarget, maxlun, openings, adapter scsi 
id, etc.  The scsi_attach_args don't need to provide a pointer to the 
adapter softc; when the scsibus is attached, it gets a pointer to the 
parent device, which is adapter, by definition.  Whatever info is 
provided by the scsi_attach_args will be stored in the scsibus_softc 
(which is where it belongs).

The same sort of thing will happen with the `tg' ... the whole notion of 
scsi_link will be gone forever (YAY!).  Well, this is not _strictly_ 
true; there is information which is more or less common to all scsi 
devices ... I was thinking of handling that in a way similar to how 
chipset drivers are handled ... i.e. a "scsidev_softc" which contains the 
struct device and the common info ... I have to put a little more thought 
into that part...

In any case all of the SCSI device state info will then he handled by the 
autoconfig system, and the data structures won't be so horribly overloaded.

 -- save the ancient forests - http://www.bayarea.net/~thorpej/forest/ -- 
Jason R. Thorpe                                       thorpej@nas.nasa.gov
NASA Ames Research Center                               Home: 408.866.1912
NAS: M/S 258-6                                          Work: 415.604.0935
Moffett Field, CA 94035                                Pager: 415.428.6939