summaryrefslogtreecommitdiff
path: root/sys/arch/mvme88k/dev
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch/mvme88k/dev')
-rw-r--r--sys/arch/mvme88k/dev/cl.c40
-rw-r--r--sys/arch/mvme88k/dev/clreg.h3
2 files changed, 26 insertions, 17 deletions
diff --git a/sys/arch/mvme88k/dev/cl.c b/sys/arch/mvme88k/dev/cl.c
index c464c66fd12..b99172ee97f 100644
--- a/sys/arch/mvme88k/dev/cl.c
+++ b/sys/arch/mvme88k/dev/cl.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cl.c,v 1.35 2004/01/02 23:37:17 miod Exp $ */
+/* $OpenBSD: cl.c,v 1.36 2004/01/05 20:08:01 miod Exp $ */
/*
* Copyright (c) 1995 Dale Rahn. All rights reserved.
@@ -99,7 +99,8 @@ struct cl_info {
#ifndef DO_MALLOC
/* four (4) buffers per port */
-char cl_dmabuf [CLCD_PORTS_PER_CHIP * CL_BUFSIZE * 4];
+char cl_dmabuf[CLCD_PORTS_PER_CHIP * CL_BUFSIZE * 4];
+char cl_dmabuf1[CLCD_PORTS_PER_CHIP * CL_BUFSIZE * 4];
#endif
struct clsoftc {
@@ -206,9 +207,10 @@ cltty(dev)
{
int unit, channel;
struct clsoftc *sc;
+
unit = CL_UNIT(dev);
if (unit >= cl_cd.cd_ndevs ||
- (sc = (struct clsoftc *) cl_cd.cd_devs[unit]) == NULL) {
+ (sc = (struct clsoftc *)cl_cd.cd_devs[unit]) == NULL) {
return (NULL);
}
channel = CL_CHANNEL(dev);
@@ -221,23 +223,25 @@ clprobe(parent, self, aux)
void *self;
void *aux;
{
- /* probing onboard 166/167/187 CL-cd2400
- * should be previously configured,
- * we can check the value before resetting the chip
- */
struct clreg *cl_reg;
struct confargs *ca = aux;
if (brdtyp == BRD_188)
- return 0;
-
- ca->ca_ipl = IPL_TTY;
- ca->ca_vaddr = ca->ca_paddr = (void *)CD2400_BASE_ADDR;
- cl_reg = (struct clreg *)ca->ca_vaddr;
+ return (0);
- if (badvaddr((vaddr_t)&cl_reg->cl_gfrcr,1))
- return 0;
- return 1;
+ /*
+ * We do not accept empty locators here...
+ */
+ if ((vaddr_t)ca->ca_paddr == CD2400_BASE_ADDR ||
+ ((vaddr_t)ca->ca_paddr == CD2400_SECONDARY_ADDR &&
+ brdtyp == BRD_8120)) {
+ ca->ca_ipl = IPL_TTY;
+ ca->ca_vaddr = ca->ca_paddr;
+
+ cl_reg = (struct clreg *)ca->ca_vaddr;
+ return (!badvaddr((vaddr_t)&cl_reg->cl_gfrcr, 1));
+ } else
+ return (0);
}
void
@@ -274,7 +278,11 @@ clattach(parent, self, aux)
#ifdef DO_MALLOC
sc->sc_cl[0].rx[0] = (void *)(dvma_malloc(16 * CL_BUFSIZE));
#else
- sc->sc_cl[0].rx[0] = (void *) (&cl_dmabuf);
+ /* XXX */
+ if ((vaddr_t)ca->ca_paddr == CD2400_BASE_ADDR)
+ sc->sc_cl[0].rx[0] = (void *)(&cl_dmabuf);
+ else
+ sc->sc_cl[0].rx[0] = (void *)(&cl_dmabuf1);
#endif
sc->sc_cl[0].rx[1] = (void *)(((int)sc->sc_cl[0].rx[0]) + CL_BUFSIZE);
sc->sc_cl[1].rx[0] = (void *)(((int)sc->sc_cl[0].rx[1]) + CL_BUFSIZE);
diff --git a/sys/arch/mvme88k/dev/clreg.h b/sys/arch/mvme88k/dev/clreg.h
index 93bd1566f0b..91f69b2be4b 100644
--- a/sys/arch/mvme88k/dev/clreg.h
+++ b/sys/arch/mvme88k/dev/clreg.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: clreg.h,v 1.4 2003/10/11 22:08:57 miod Exp $ */
+/* $OpenBSD: clreg.h,v 1.5 2004/01/05 20:08:01 miod Exp $ */
/* Copyright (c) 1998 Steve Murphree, Jr.
* Copyright (c) 1995 Dale Rahn. All rights reserved.
@@ -167,3 +167,4 @@ struct clreg {
* Cirrus chip base address on the mvme1x7 boards.
*/
#define CD2400_BASE_ADDR 0xfff45000
+#define CD2400_SECONDARY_ADDR 0xfff45200