UDA driver query
    Chris Torek 
    chris at umcp-cs.UUCP
       
    Mon Mar 24 07:52:36 AEST 1986
    
    
  
In article <1986 at brl-smoke.ARPA> eichelbe at nadc.arpa writes:
>I have a VAX 11/780 under 4.1 BSD UNIX and [a] (UDA50/RA81) driver
>that compiles but for one error.  In the routine udprobe ... there
>is a reference to a variable uh_lastiv in the uba_hd structure. ...
>I don't find a uh_lastiv in the structure.
Ah, at last, I can show off my wizardly skills again! :-)  Actually,
I had the exact same thing happen when I installed a uda.c on a 4.1
system, long ago.
>(1) What is uh_lastiv supposed to do?
It is the `last interrupt vector' address, for devices with
programmable interrupt vectors.  These did not appear until well
after the 4.1 release, so only `late 4.1s' have the code.  The
variable is set to 0x200 (01000) in autoconf.c, and predecremented
by the appropriate amount by any driver needing a programmable
interrupt vector.
>(2) Can I (and how if I can) change udprobe to get rid of the uh_lastiv
>    reference safely?
If you have exactly one UDA50, no DMF32s, no DMZ32s, and so forth,
you can use
	br = 0x15;
	cvec = sc->sc_ivec = 0774;
but this creates a bug just waiting until the time is ripe to leap out
and strangle you.
>(3) If I can't get rid of the reference, how should I change the uba_hd
>    structure in /sys/h/ubavar.h so I too can use uh_lastiv ....
1) Add `uh_lastiv' to `struct uba_hd' in ubavar.h (at the end; that
   may be unnecessary, but is definitely safe).
2) In autoconf.c, find the routine named `unifind' or `UNIfind' or
   some variation thereof.  In there will be code resembling the
   following:
	if (numuba == 0)
		uhp->uh_vec = UNIvec;
	else
		uhp->uh_vec = (int(**)())calloc(512);
	for (i = 0; i < 128; i++)
		uhp->uh_vec[i] = scbentry(&catcher[i*2], SCB_ISTACK);
   After this, add:
	/*
	 * Set last free interrupt vector for devices with
	 * programmable interrupt vectors.  Use is to decrement
	 * this number and use result as interrupt vector.
	 */
	uhp->uh_lastiv = 0x200;
Unfortunately, that uda.c is fairly buggy.  If I had to run RA81s
on a 4.1 system, I would reconvert my new driver to 4.1 code.  But
if you must run that driver on a 780, use it on a Unibus all by
itself, or at least with nothing else that uses BDPs.
-- 
In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 1415)
UUCP:	seismo!umcp-cs!chris
CSNet:	chris at umcp-cs		ARPA:	chris at mimsy.umd.edu
    
    
More information about the Comp.unix.wizards
mailing list