Problems using ACC ACP5250 under 4.3-tahoe

Brian Ruptash bar at dptcdc.datapoint.com
Mon Apr 17 14:42:36 AEST 1989


In article <3104 at ci.sei.cmu.edu> pdb at sei.cmu.edu (Patrick Barron) writes:
>Has anyone successfully gotten ACC's ACP5250 driver working under
>4.3-tahoe?  ... the kernel panics when turning the ACP5250 board on ...
>... when the driver is trying to write to Unibus map registers ... the pointer
>it's using contains garbage, and it goes off and tries to poke at
>non-existent memory.

and in article <16626 at mimsy.UUCP> chris at mimsy.umd.edu (Chris Torek) replies:
> Between 4.3BSD and 4.3-tahoe, Mike fixed the Unibus code so that it
> understands having map registers at a different location from Unibus
> adapter registers (if any), and to catch bugs, set the `adapter'
> register address to 0xc0000000.  That one got caught.
> 
> The map registers are now at uhp->uh_mr, rather than
> &uhp->uh_uba->uba_map[0].
> 
> This does not affect well-behaved vaxif drivers, as they all go
> through vaxif/if_uba.c.  (The ACC drivers are not well-behaved.)

I encountered the same problem in using the CSNET XNI and ACP5250
drivers under 4.3-tahoe.  In an attempt to make them more "well
behaved" (it took much more than this, for lots of unrelated reasons,
but this answers your specific query...), I modified the XNI driver
as follows.

All the ACC-derived drivers (of which the CSNET XNI is one - change
the dda_'s to as_'s in this fix) have the same problem, including
the latest ACC beta version.

This should work under 4.3 as well, although I never tried it as
I had already moved to 4.3-tahoe at this point.

*** if_dda.c	Mon Mar  6 18:09:21 1989
--- if_dda.c.fix	Sun Apr 16 23:56:51 1989
***************
*** 1175,1181 ****
  	    return;
  	}
  	/* leave the UNIBUS mapping register */
! 	ds->dda_mapreg = (ds->dda_mapreg >> PGSHIFT) & 0x1ff;
  
  	ds->dda_sioq.sq_head = (struct hdx_chan *) 0;
  	ds->dda_sioq.sq_tail = (struct hdx_chan *) 0;
--- 1175,1181 ----
  	    return;
  	}
  	/* leave the UNIBUS mapping register */
! 	ds->dda_mapreg = UBAI_MR (ds->dda_mapreg);
  
  	ds->dda_sioq.sq_head = (struct hdx_chan *) 0;
  	ds->dda_sioq.sq_tail = (struct hdx_chan *) 0;
***************
*** 2404,2411 ****
  #endif  MULTINET
  #else	not VAXVMS
  	/* System page table entry for UNIX 4.2 BSD */
! 	pte = &Sysmap[btop ((int) hc->hc_addr & ~PG_V)];
! 	io = &uh->uh_uba->uba_map[ds->dda_mapreg];
  
  #endif VAXVMS
  
--- 2404,2411 ----
  #endif  MULTINET
  #else	not VAXVMS
  	/* System page table entry for UNIX 4.2 BSD */
! 	pte = kvtopte (hc->hc_addr);
! 	io = &uh->uh_mr[ds->dda_mapreg];
  
  #endif VAXVMS
  
-- 
Brian Ruptash                |  Internet: bar at datapoint.com
Principal Architect          |  UUCP:     {uunet, utzoo}!dptcdc!bar
Datapoint Corporation        |  Phone:    (416) 222-8005



More information about the Comp.unix.wizards mailing list