Subject: Latest "si" driver (disconnect/reselect works!)
To: None <fair@clock.org>
From: Gordon W. Ross <gwr@mc.com>
List: port-sun3
Date: 11/21/1995 12:06:33
> Date: Tue, 21 Nov 1995 02:53:41 -0800
> From: "Erik E. Fair"  (Time Keeper) <fair@clock.org>
> 
> I attempted to set si_options = 7, and run that way. This didn't work for
> me with the pair of old SCSI-1 Micropolis drives on my test system; a
> number of things failed in odd ways, and when I tried to run a benchmark
> (the 10MB dd's from the raw devices), the system went catatonic (interrupts
> (ping & tty) answered, but no activity). I'm gonna back off and try again
> with si_options = 3.

I presume this is just a bug with cmd timeout handling, or possibly
some unwanted concurrency somewhere in the driver.  We'll nail it
eventually.  When the si driver stops, please do the following:

Break into DDB (tty: send "line break", kbd/display: L1-A)
db> call ncr5380_show_state
db> call ncr5380_show_trace

The "show_trace" will produce 1024 lines of output, so you 
probably want to skip that unless you use the tty console
and have the session logged with something like xterm.

> Two items:
> 
> 1. if the behavior is device dependent, perhaps whether the driver does
> "select/reselect" and other stuff should be in a per-unit flag. Of course,
> this complicates the driver behavior a lot...

Maybe, but it should not be necessary, especially if the cmd timeout
mechanism will (when fixed) resume the unit after reselect is missed.

> 2. being a hacker of the old school, I never did learn any of this symbolic
> debugging stuff, or gdb's twisted behaviors - adb is my tool of choice for
> poking through core dumps, and "printf" is my friend for real time
> debugging. So, given that there is no adb in NetBSD, how can one coerce gdb
> into writing either/both the executable (e.g. /netbsd) and/or the core file
> (e.g. /dev/kmem)? This would be a lot quicker than recompiling ncr_si.c.
> Alas, attempts to RTFM have not yet yielded this morsel of information.

Oh, I should have described how to do this:

Boot the kernel with a PROM command like this:
b sd() -ds

The boot program will stop once, after a message like:
Debug mode  - enter c to continue...

Do as it says, then you'll get another stop in DDB.
(Very early in kernel initialization.)  Do this:
db> w si_options 7
(or whatever value you feel brave enough to try 8^)

Finally, continue using:
db> cont

Gordon