summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/arch/pmax/include/tc_machdep.h84
-rw-r--r--sys/arch/pmax/tc/if_le.c48
-rw-r--r--sys/arch/pmax/tc/tc.h57
3 files changed, 109 insertions, 80 deletions
diff --git a/sys/arch/pmax/include/tc_machdep.h b/sys/arch/pmax/include/tc_machdep.h
new file mode 100644
index 00000000000..7768aebd269
--- /dev/null
+++ b/sys/arch/pmax/include/tc_machdep.h
@@ -0,0 +1,84 @@
+/* $NetBSD: tc_machdep.h,v 1.1 1995/12/28 08:42:17 jonathan Exp $ */
+
+/*
+ * Copyright (c) 1994, 1995 Carnegie-Mellon University.
+ * All rights reserved.
+ *
+ * Author: Jonathan Stone, Chris G. Demetriou
+ *
+ * Permission to use, copy, modify and distribute this software and
+ * its documentation is hereby granted, provided that both the copyright
+ * notice and this permission notice appear in all copies of the
+ * software, derivative works or modified versions, and any portions
+ * thereof, and that both notices appear in supporting documentation.
+ *
+ * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
+ * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
+ * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
+ *
+ * Carnegie Mellon requests users of this software to return to
+ *
+ * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
+ * School of Computer Science
+ * Carnegie Mellon University
+ * Pittsburgh PA 15213-3890
+ *
+ * any improvements or extensions that they make and grant Carnegie the
+ * rights to redistribute these changes.
+ */
+
+/*
+ * Machine-specific definitions for TurboChannel support.
+ *
+ * This file must typedef the following types:
+ *
+ * tc_addr_t TurboChannel bus address
+ * tc_offset_t TurboChannel bus address difference (offset)
+ *
+ * This file must prototype or define the following functions
+ * or macros (one or more of which may be no-ops):
+ *
+ * tc_mb() read/write memory barrier (any CPU<->memory
+ * reads/writes before must complete before any
+ * CPU<->memory reads/writes after).
+ * tc_wmb() write memory barrier (any CPU<->memory writes
+ * before must complete before any CPU<->memory
+ * writes after).
+ * tc_syncbus() sync TC bus; make sure CPU writes are
+ * propagated across the TurboChannel bus.
+ * tc_badaddr() return non-zero if the given address is invalid.
+ * TC_DENSE_TO_SPARSE()
+ * convert the given physical address in
+ * TurboChannel dense space to the corresponding
+ * address in TurboChannel sparse space.
+ * TC_PHYS_TO_UNCACHED()
+ * convert the given system memory physical address
+ * to the physical address of the corresponding
+ * region that is not cached.
+ */
+
+#ifndef __MACHINE_TC_MACHDEP_H__
+#define __MACHINE_TC_MACHDEP_H__
+
+typedef int32_t tc_addr_t;
+typedef int32_t tc_offset_t;
+
+#define tc_mb() wbflush()
+#define tc_wmb() wbflush()
+
+/*
+ * XXX how to do this on a DECstation ?
+ */
+#define tc_syncbus() wbflush();
+
+#define tc_badaddr(tcaddr) \
+ badaddr((void *)(tcaddr), sizeof (u_int32_t))
+
+
+#define TC_DENSE_TO_SPARSE(addr) \
+ (addr)
+
+#define TC_PHYS_TO_UNCACHED(addr) \
+ (addr)
+
+#endif /* __MACHINE_TC_MACHDEP_H__*/
diff --git a/sys/arch/pmax/tc/if_le.c b/sys/arch/pmax/tc/if_le.c
index c0fbf21090c..31390a02b18 100644
--- a/sys/arch/pmax/tc/if_le.c
+++ b/sys/arch/pmax/tc/if_le.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_le.c,v 1.5 1995/12/22 12:52:09 jonathan Exp $ */
+/* $NetBSD: if_le.c,v 1.7 1995/12/28 08:42:15 jonathan Exp $ */
/*-
* Copyright (c) 1995 Charles M. Hannum. All rights reserved.
@@ -57,41 +57,26 @@
#include <machine/autoconf.h>
+#include <dev/tc/tcvar.h>
+#include <dev/tc/ioasicvar.h>
+#include <dev/tc/if_levar.h>
+
#ifdef pmax
-typedef u_int32_t word_t;
#define wbflush() MachEmptyWriteBuffer()
/* These should be in a header file, but where? */
-int pmax_boardtype; /* Mother board type */
-/*extern u_long le_iomem;*/
extern u_long asic_base;
-
-/* does this machine have an ASIC? */
-#define SYSTEM_HAS_ASIC() \
- (pmax_boardtype == DS_MAXINE || pmax_boardtype == DS_3MIN || \
- pmax_boardtype == DS_3MAXPLUS)
+extern struct cfdriver mainbuscd; /* XXX really 3100/5100 b'board */
#include <pmax/pmax/kn01.h>
#include <machine/machConst.h>
-#include <pmax/pmax/pmaxtype.h>
-#include <pmax/tc/tc.h>
#include <pmax/pmax/asic.h>
-#include <pmax/tc/if_levar.h>
-#else /* Alpha */
-
-typedef u_int64 word_t;
-#define SYSTEM_HAS_ASIC() \
- (hwrpb->rpb_type == ST_DEC_3000_300 || hwrpb->rpb_type == ST_DEC_3000_500)
+#else /* Alpha */
#include <machine/rpb.h>
-#include <alpha/tc/tc.h>
-#include <alpha/tc/asic.h>
-#include <alpha/tc/if_levar.h>
-
#endif /* Alpha */
-
#include <dev/ic/am7990reg.h>
#define LE_NEED_BUF_CONTIG
#define LE_NEED_BUF_GAP2
@@ -193,10 +178,10 @@ leattach(parent, self, aux)
u_char *cp; /* pointer to MAC address */
int i;
- if (sc->sc_dev.dv_unit == 0 && SYSTEM_HAS_ASIC()) {
- /* It's on the system ASIC */
+ if (parent->dv_cfdata->cf_driver == &ioasiccd) {
+ /* It's on the system IOCTL ASIC */
volatile u_int *ldp;
- word_t dma_mask;
+ tc_addr_t dma_mask;
sc->sc_r1 = (struct lereg1 *)
MACH_PHYS_TO_UNCACHED(BUS_CVTADDR(ca));
@@ -216,11 +201,11 @@ leattach(parent, self, aux)
* And enable Lance dma through the asic.
*/
ldp = (volatile u_int *) (ASIC_REG_LANCE_DMAPTR(asic_base));
- dma_mask = ((word_t)le_iomem << 3);
+ dma_mask = ((tc_addr_t)le_iomem << 3);
#ifdef alpha
/* Set upper 64 bits of DMA mask */
- dma_mask = (dma_mask & ~(word_t)0x1f) |
- (((word_t)le_iomem >> 29) & 0x1f);
+ dma_mask = (dma_mask & ~(tc_addr_t)0x1f) |
+ (((tc_addr_t)le_iomem >> 29) & 0x1f);
#endif /*alpha*/
*ldp = dma_mask;
*(volatile u_int *)ASIC_REG_CSR(asic_base) |=
@@ -228,7 +213,7 @@ leattach(parent, self, aux)
wbflush();
}
#ifdef pmax
- else if (sc->sc_dev.dv_unit == 0 && (pmax_boardtype == DS_PMAX)) {
+ else if (parent->dv_cfdata->cf_driver == &mainbuscd) {
/* It's on the baseboard, attached directly to mainbus. */
sc->sc_r1 = (struct lereg1 *)BUS_CVTADDR(ca);
@@ -242,7 +227,8 @@ leattach(parent, self, aux)
sc->sc_zerobuf = zerobuf_gap2;
}
#endif
- else {
+ else
+ if (parent->dv_cfdata->cf_driver == &tccd) {
/* It's on the turbochannel proper, or on KN02 baseboard. */
sc->sc_r1 = (struct lereg1 *)
(BUS_CVTADDR(ca) + LE_OFFSET_LANCE);
@@ -275,7 +261,7 @@ leattach(parent, self, aux)
BUS_INTR_ESTABLISH(ca, leintr, sc);
- if (SYSTEM_HAS_ASIC()) {
+ if (parent->dv_cfdata->cf_driver == &ioasiccd) {
/* XXX YEECH!!! */
*(volatile u_int *)ASIC_REG_IMSK(asic_base) |= ASIC_INTR_LANCE;
wbflush();
diff --git a/sys/arch/pmax/tc/tc.h b/sys/arch/pmax/tc/tc.h
index 5e65c408af5..793bd8dc26c 100644
--- a/sys/arch/pmax/tc/tc.h
+++ b/sys/arch/pmax/tc/tc.h
@@ -1,4 +1,4 @@
-/* $NetBSD: tc.h,v 1.1 1995/08/07 07:07:50 jonathan Exp $ */
+/* $NetBSD: tc.h,v 1.2 1995/12/28 08:42:16 jonathan Exp $ */
/*
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
@@ -31,58 +31,17 @@
* TurboChannel-specific functions and structures.
*/
-/*
- * A junk address to read from, to make sure writes are complete. See
- * System Programmer's Manual, section 9.3 (p. 9-4), and sacrifice a
- * chicken.
- */
-#define MAGIC_READ do { \
- extern u_int32_t no_optimize; \
- no_optimize = *(u_int32_t *)phystok0seg(0x00000001f0080220); \
-} while (0);
-
-#define TC_SPACE_IND 0xffffffffe0000003
-#define TC_SPACE_DENSE 0x0000000000000000
-#define TC_SPACE_DENSE_OFFSET 0x0000000007fffffc
-#define TC_SPACE_SPARSE 0x0000000010000000
-#define TC_SPACE_SPARSE_OFFSET 0x000000000ffffff8
-
-#define TC_DENSE_TO_SPARSE(addr) \
- ((void *) \
- (((u_int64_t)addr & TC_SPACE_IND) | \
- TC_SPACE_SPARSE | \
- (((u_int64_t)addr & TC_SPACE_DENSE_OFFSET) << 1)))
-
-#define TC_SPARSE_TO_DENSE(addr) \
- ((void *) \
- (((u_int64_t)addr & TC_SPACE_IND) | \
- TC_SPACE_DENSE | \
- (((u_int64_t)addr & TC_SPACE_SPARSE_OFFSET) >> 1)))
-
-
-#define TC_ROM_LLEN 8
-#define TC_ROM_SLEN 4
-#define TC_ROM_TEST_SIZE 16
-
#define TC_SLOT_ROM 0x000003e0
#define TC_SLOT_PROTOROM 0x003c03e0
-typedef struct tc_padchar {
- u_int8_t v;
- u_int8_t pad[3];
-} tc_padchar_t;
+#include <machine/tc_machdep.h>
+#include <dev/tc/tcreg.h>
-struct tc_rommap {
- tc_padchar_t tcr_width;
- tc_padchar_t tcr_stride;
- tc_padchar_t tcr_rsize;
- tc_padchar_t tcr_ssize;
- u_int8_t tcr_test[TC_ROM_TEST_SIZE];
- tc_padchar_t tcr_rev[TC_ROM_LLEN];
- tc_padchar_t tcr_vendname[TC_ROM_LLEN];
- tc_padchar_t tcr_modname[TC_ROM_LLEN];
- tc_padchar_t tcr_firmtype[TC_ROM_SLEN];
-};
+
+/*
+ * Obsolete (pre-NetBSD/1.1-style) tc bus descriptor
+ * and device-attach arguments.
+ */
/* The contents of a cfdata->cf_loc for a TurboChannel device */
struct tc_cfloc {