Q22 support for DH/DM emulators
Steven M. Schultz
sms at wlv.imsd.contel.com
Sun Aug 27 16:23:26 AEST 1989
Subject: Q22 support for Emulex CS02
Index: sys/dh.c,dmreg.h 2.10BSD
Description:
There were major problems with DH/DM-11 type devices on
the QBUS (Q22) 11/73 (presumably 11/53 also) systems.
Repeat-By:
Observation.
Fix:
Thanks to Paul Taylor (taylor at oswego.oswego.edu) for sending the
following patches to /sys/pdpuba/{dh.c,dmreg.h}:
*** dh.c.old Fri Aug 4 22:42:08 1989
--- dh.c Sat Aug 26 23:11:29 1989
***************
*** 3,9 ****
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*
! * @(#)dh.c 1.1 (2.10BSD Berkeley) 12/1/86
*/
/*
--- 3,9 ----
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*
! * @(#)dh.c 1.2 (2.10.1BSD Berkeley) 8/25/89
*/
/*
***************
*** 410,418 ****
--- 410,424 ----
#else
{
ubadr_t car;
+ #if defined(Q22)
+ struct dmdevice *dmaddr = (struct dmdevice *)dminfo[dh].ui_addr;
+ car = (ubadr_t)addr->dhcar;
+ car |= ((ubadr_t)(dmaddr->dmlst_h&077) << 16);
+ #else
car = (ubadr_t) addr->dhcar
| (ubadr_t)(addr->dhsilo & 0300) << 10;
+ #endif defined(Q22)
cntr = car - cpaddr(tp->t_outq.c_cf);
ndflush(&tp->t_outq, cntr);
}
***************
*** 495,503 ****
--- 501,517 ----
addr->dhcar = (u_short)cpaddr(tp->t_outq.c_cf);
#else
ubadr_t uba;
+ #if defined(Q22)
+ struct dmdevice *dmaddr = (struct dmdevice *)dminfo[dh].ui_addr;
+ #endif
uba = cpaddr(tp->t_outq.c_cf);
+ #if defined(Q22)
+ addr->un.dhcsrl = (unit&017) | DH_IE;
+ dmaddr->dmlst_h = hiint(uba) & 077;
+ #else
addr->un.dhcsrl = (unit&017) | DH_IE | ((hiint(uba)<<4)&060);
+ #endif defined(Q22)
addr->dhcar = loint(uba);
#endif
{ short word = 1 << unit;
*** dmreg.h.old Sat Jan 10 14:31:49 1987
--- dmreg.h Sat Aug 26 23:01:07 1989
***************
*** 11,18 ****
*/
struct dmdevice {
short dmcsr; /* control status register */
! short dmlstat; /* line status register */
! short dmpad1[2];
};
/* bits in dm csr */
--- 11,24 ----
*/
struct dmdevice {
short dmcsr; /* control status register */
! union { /* Q22:Need to access high byte independently */
! short dmlst_w;
! char dmlst_b[2];
! } cs02un;
! #define dmlstat cs02un.dmlst_w /* line status register */
! #define dmlst_l cs02un.dmlst_b[0] /* low byte */
! #define dmlst_h cs02un.dmlst_b[1] /* high byte */
! short dmpad1[2];
};
/* bits in dm csr */
More information about the Comp.bugs.2bsd
mailing list