Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 17 Feb 1995 15:13:43 -0800 (PST)
From:      julian@tfs.com (Julian Elischer)
To:        dufault@hda.com (Peter Dufault)
Cc:        freebsd-hackers@freefall.cdrom.com
Subject:   Re: SCSI and config(8): Done.
Message-ID:  <m0rfbrr-0003wTC@TFS.COM>
In-Reply-To: <199502171257.HAA21778@hda.com> from "Peter Dufault" at Feb 17, 95 07:57:44 am

next in thread | previous in thread | raw e-mail | index | archive | help
> 
> I've added support to configure the SCSI system using config(8).
> I'm going to wait for the "slice" code to settle before committing.

this looks good, and I was wondering how to get this information to the 
system.. There is the question however of:
if a device doesn't match what's there, how do we find out, and what do we do?
should we have a call in each driver that confirms that it can handle what it sees?
What do we do it it DOESN't match....
how can we force a device that reports itself as type B (eroneously) to be handled
by the driver for type C (I have devices that report as tape but should be type
processor)...



> 
> Here is what I did.
> 
> This config file entry:
> 
> > controller scbus0 at aha0
> > 
> > disk sd0 at scbus0 target 0 unit 0
> > disk sd1 at scbus0 target 1   
> > disk sd2 at scbus0 target 3
> > device cd? at scbus?
> > tape st0 at scbus0 target 6
> 
> Generates this in ioconf.c:
> 
> > #include "scsi/scsiconf.h"
> >  
> > struct scsi_ctlr_config scsi_cinit[] = {
> > /* driver   unit */
> > { "aha",  0 },
> > { 0, 0 }
> > };
> >  
> > struct scsi_device_config scsi_dinit[] = {
> > /*      type    unit  cunit   target   LUN    flags */
> > {     T_DIRECT,   0,    0,       0,     0,      0x0 },
> > {     T_DIRECT,   1,    0,       1,    -1,      0x0 },
> > {     T_DIRECT,   2,    0,       3,    -1,      0x0 },
> > {   T_READONLY, '?',  '?',      -1,    -1,      0x0 },
> > { T_SEQUENTIAL,   0,    0,       6,    -1,      0x0 },
> > { -1, 0, 0, 0, 0, 0 }
> > };
> 
> (cunit in scsi_dinit is the controller unit and is the index into
> the scsi_cinit table for that device)
> 
> The SCSI bus (scsi_cinit) table is passing in names instead of
> "isa_dev's", but I wanted to use the adapter name since I'm not
> sure how the PCI stuff wires in.
> 
> When you configure a SCSI controller it looks up its bus number by
> driver name and unit number.  When there is no match it uses the
> lowest unused bus number greater than the highest configured bus
> number.

for this to really work properly, we need to disable the autonumbering of
the adapters, so that if aha- dies, aha1 doesn't suddenly become aha0..

> 
> (I have to look at how the multiple SCSI bus adapters work -  I
> suppose both busses have the same driver and adapter unit number,
> so this current scheme may not work: I may need driver, unit and
> bus in the scsi_cinit table.)

controller scbus0 at ahx0 
controller scbus1 at ahx0

I guess Every layer in the hierarchy needs some sort of 'subunit'
field... in isa it's port-address,
in scsi it's target,
in adapters it's unit#, similar to wd0 and wd1
I guess it means adding a field to the structure..

We are slowely heading in the direction of NetBSD(& BSDI I think)
config, in which the softc structure is allocated by the
config routine, and every layer in the hierarchy
is defined the same way......


> 
> When you configure a device it looks through the dinit table for
> the unit to use.  Each type (T_DIRECT == "sd", etc) is handled
> independently and the same approach is used as for the busses: If
> there is an exact match then that is used, if there is no match
> you use the lowest unused unit number greater than the highest
> configured unit number.  Unknown LUNS (LUN == -1) are treated as
> LUN 0 for matching.
> 
> All information from the config file is stored in the structures
> so you can go backwards from the structures to the config if you
> want.
> 
> For current config files this approach degenerates into the current
> autocounting scheme.
> 
> For new config files this becomes "use assignments when provided,
> then autocount beginning after the highest assigned number".
yes....
now, what about devices that are turned off and probed later when turned on..?


> 
> Peter
> 
> -- 
> Peter Dufault               Real Time Machine Control and Simulation
> HD Associates, Inc.         Voice: 508 433 6936
> dufault@hda.com             Fax:   508 433 5267
> 




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?m0rfbrr-0003wTC>