projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add support for microvax 3000.
[unix-history]
/
usr
/
src
/
sys
/
vax
/
uba
/
dn.c
diff --git
a/usr/src/sys/vax/uba/dn.c
b/usr/src/sys/vax/uba/dn.c
index
d08bf20
..
268bc59
100644
(file)
--- a/
usr/src/sys/vax/uba/dn.c
+++ b/
usr/src/sys/vax/uba/dn.c
@@
-1,29
+1,36
@@
-/* dn.c 4.4 82/04/25 */
+/*
+ * Copyright (c) 1982, 1986 Regents of the University of California.
+ * All rights reserved. The Berkeley software License Agreement
+ * specifies the terms and conditions for redistribution.
+ *
+ * @(#)dn.c 7.1 (Berkeley) %G%
+ */
#include "dn.h"
#if NDN > 0
/*
* DN-11 ACU interface
*/
#include "dn.h"
#if NDN > 0
/*
* DN-11 ACU interface
*/
+#include "../machine/pte.h"
+
+#include "param.h"
+#include "systm.h"
+#include "dir.h"
+#include "user.h"
+#include "buf.h"
+#include "map.h"
+#include "conf.h"
+#include "uio.h"
-#include "../h/param.h"
-#include "../h/systm.h"
-#include "../h/dir.h"
-#include "../h/user.h"
-#include "../h/buf.h"
-#include "../h/map.h"
-#include "../h/pte.h"
-#include "../h/ubavar.h"
-#include "../h/conf.h"
-#include "../h/ioctl.h"
+#include "ubavar.h"
struct dndevice {
u_short dn_reg[4];
};
struct uba_device *dninfo[NDN];
struct dndevice {
u_short dn_reg[4];
};
struct uba_device *dninfo[NDN];
-int dnprobe(), dnattach();
-u_short dnstd[] = { 0175200 };
+int dnprobe(), dnattach()
, dnintr()
;
+u_short dnstd[] = { 0175200
, 0
};
struct uba_driver dndriver =
{ dnprobe, 0, dnattach, 0, dnstd, "dn", dninfo };
struct uba_driver dndriver =
{ dnprobe, 0, dnattach, 0, dnstd, "dn", dninfo };
@@
-56,22
+63,31
@@
dnprobe(reg)
register int br, cvec; /* value-result, must be r11, r10 */
register struct dndevice *dnaddr = (struct dndevice *)reg;
register int br, cvec; /* value-result, must be r11, r10 */
register struct dndevice *dnaddr = (struct dndevice *)reg;
+#ifdef lint
+ br = 0; cvec = 0; br = cvec; cvec = br;
+ dnintr(0);
+#endif
/*
* If there's at least one dialer out there it better be
/*
* If there's at least one dialer out there it better be
- *
at chassis 0.
+ * at chassis 0.
*/
dnaddr->dn_reg[0] = MENABLE|IENABLE|DONE;
DELAY(5);
dnaddr->dn_reg[0] = 0;
*/
dnaddr->dn_reg[0] = MENABLE|IENABLE|DONE;
DELAY(5);
dnaddr->dn_reg[0] = 0;
+ return (sizeof (struct dndevice));
}
}
+/*ARGSUSED*/
dnattach(ui)
struct uba_device *ui;
dnattach(ui)
struct uba_device *ui;
-{}
+{
+
+}
/*ARGSUSED*/
dnopen(dev, flag)
dev_t dev;
/*ARGSUSED*/
dnopen(dev, flag)
dev_t dev;
+ int flag;
{
register struct dndevice *dp;
register u_short unit, *dnreg;
{
register struct dndevice *dp;
register u_short unit, *dnreg;
@@
-79,23
+95,18
@@
dnopen(dev, flag)
register short dialer;
if ((unit = DNUNIT(dev)) >= NDN || (ui = dninfo[unit]) == 0 ||
register short dialer;
if ((unit = DNUNIT(dev)) >= NDN || (ui = dninfo[unit]) == 0 ||
- ui->ui_alive == 0) {
- u.u_error = ENXIO;
- return;
- }
+ ui->ui_alive == 0)
+ return (ENXIO);
dialer = DNREG(dev);
dp = (struct dndevice *)ui->ui_addr;
dialer = DNREG(dev);
dp = (struct dndevice *)ui->ui_addr;
- if (dp->dn_reg[dialer] & PWI) {
- u.u_error = ENXIO;
- return;
- }
+ if (dp->dn_reg[dialer] & PWI)
+ return (ENXIO);
dnreg = &(dp->dn_reg[dialer]);
dnreg = &(dp->dn_reg[dialer]);
- if (*dnreg&(DLO|CRQ)) {
- u.u_error = EBUSY;
- return;
- }
+ if (*dnreg&(DLO|CRQ))
+ return (EBUSY);
dp->dn_reg[0] |= MENABLE;
*dnreg = IENABLE|MENABLE|CRQ;
dp->dn_reg[0] |= MENABLE;
*dnreg = IENABLE|MENABLE|CRQ;
+ return (0);
}
/*ARGSUSED*/
}
/*ARGSUSED*/
@@
-108,25
+119,27
@@
dnclose(dev, flag)
dp->dn_reg[DNREG(dev)] = MENABLE;
}
dp->dn_reg[DNREG(dev)] = MENABLE;
}
-dnwrite(dev)
+dnwrite(dev
, uio
)
dev_t dev;
dev_t dev;
+ struct uio *uio;
{
register u_short *dnreg;
register int cc;
register struct dndevice *dp;
{
register u_short *dnreg;
register int cc;
register struct dndevice *dp;
- char buf[OBUFSIZ];
+ char
o
buf[OBUFSIZ];
register char *cp;
extern lbolt;
register char *cp;
extern lbolt;
+ int error;
dp = (struct dndevice *)dninfo[DNUNIT(dev)]->ui_addr;
dnreg = &(dp->dn_reg[DNREG(dev)]);
dp = (struct dndevice *)dninfo[DNUNIT(dev)]->ui_addr;
dnreg = &(dp->dn_reg[DNREG(dev)]);
- cc = MIN(u
.u_count
, OBUFSIZ);
- cp = buf;
-
iomove(cp, (unsigned)cc, B_WRITE
);
- if (
u.u_
error)
- return;
+ cc = MIN(u
io->uio_resid
, OBUFSIZ);
+ cp =
o
buf;
+
error = uiomove(cp, cc, UIO_WRITE, uio
);
+ if (error)
+ return
(error)
;
while ((*dnreg & (PWI|ACR|DSS)) == 0 && cc >= 0) {
while ((*dnreg & (PWI|ACR|DSS)) == 0 && cc >= 0) {
- spl4();
+
(void)
spl4();
if ((*dnreg & PND) == 0 || cc == 0)
sleep((caddr_t)dnreg, DNPRI);
else switch(*cp) {
if ((*dnreg & PND) == 0 || cc == 0)
sleep((caddr_t)dnreg, DNPRI);
else switch(*cp) {
@@
-169,7
+182,8
@@
dnwrite(dev)
spl0();
}
if (*dnreg & (PWI|ACR))
spl0();
}
if (*dnreg & (PWI|ACR))
- u.u_error = EIO;
+ return (EIO);
+ return (0);
}
dnintr(dev)
}
dnintr(dev)