summaryrefslogtreecommitdiff
path: root/sys/arch/sparc
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch/sparc')
-rw-r--r--sys/arch/sparc/conf/GENERIC6
-rw-r--r--sys/arch/sparc/conf/RAMDISK6
-rw-r--r--sys/arch/sparc/conf/SUN4C4
-rw-r--r--sys/arch/sparc/conf/SUN4M4
-rw-r--r--sys/arch/sparc/conf/files.sparc4
-rw-r--r--sys/arch/sparc/sparc/auxioreg.h16
-rw-r--r--sys/arch/sparc/sparc/auxreg.c101
7 files changed, 95 insertions, 46 deletions
diff --git a/sys/arch/sparc/conf/GENERIC b/sys/arch/sparc/conf/GENERIC
index bad6c5112ec..d56e7005322 100644
--- a/sys/arch/sparc/conf/GENERIC
+++ b/sys/arch/sparc/conf/GENERIC
@@ -1,4 +1,4 @@
-# $OpenBSD: GENERIC,v 1.82 2005/04/30 00:49:36 deraadt Exp $
+# $OpenBSD: GENERIC,v 1.83 2005/07/08 12:36:36 miod Exp $
#
# For further information on compiling OpenBSD kernels, see the config(8)
# man page.
@@ -52,8 +52,8 @@ audio* at audioamd?
audiocs0 at sbus0 # sun4m
audio* at audiocs?
-auxreg0 at mainbus0 # sun4c
-auxreg0 at obio0 # sun4m
+auxreg* at mainbus0 # sun4c
+auxreg* at obio0 # sun4m
# Power status and control register found on Sun4m systems
power0 at obio0
diff --git a/sys/arch/sparc/conf/RAMDISK b/sys/arch/sparc/conf/RAMDISK
index 8de8a6629e9..10667ced5b8 100644
--- a/sys/arch/sparc/conf/RAMDISK
+++ b/sys/arch/sparc/conf/RAMDISK
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISK,v 1.55 2005/05/01 07:54:42 david Exp $
+# $OpenBSD: RAMDISK,v 1.56 2005/07/08 12:36:36 miod Exp $
# $NetBSD: GENERIC,v 1.28.2.1 1996/07/02 23:55:22 jtc Exp $
# Machine architecture; required by config(8)
@@ -64,8 +64,8 @@ sbus0 at iommu0 # sun4m
#audioamd0 at sbus0 # sun4m
#audio* at audioamd?
-auxreg0 at mainbus0 # sun4c
-auxreg0 at obio0 # sun4m
+auxreg* at mainbus0 # sun4c
+auxreg* at obio0 # sun4m
# Power status and control register found on Sun4m systems
power0 at obio0
diff --git a/sys/arch/sparc/conf/SUN4C b/sys/arch/sparc/conf/SUN4C
index 09cb4bc94af..7989278104b 100644
--- a/sys/arch/sparc/conf/SUN4C
+++ b/sys/arch/sparc/conf/SUN4C
@@ -1,4 +1,4 @@
-# $OpenBSD: SUN4C,v 1.52 2005/05/01 07:54:42 david Exp $
+# $OpenBSD: SUN4C,v 1.53 2005/07/08 12:36:36 miod Exp $
# $NetBSD: GENERIC,v 1.48 1997/08/23 19:19:01 mjacob Exp $
# Machine architecture; required by config(8)
@@ -32,7 +32,7 @@ sbus0 at mainbus0 # sun4c
audioamd0 at mainbus0 # sun4c
audio* at audioamd?
-auxreg0 at mainbus0 # sun4c
+auxreg* at mainbus0 # sun4c
# Mostek clock found on 4/300, sun4c, and sun4m systems.
# The Mostek clock NVRAM is the "eeprom" on sun4/300 systems.
diff --git a/sys/arch/sparc/conf/SUN4M b/sys/arch/sparc/conf/SUN4M
index 3ffdd558103..f2d78ba7433 100644
--- a/sys/arch/sparc/conf/SUN4M
+++ b/sys/arch/sparc/conf/SUN4M
@@ -1,4 +1,4 @@
-# $OpenBSD: SUN4M,v 1.67 2005/05/01 07:54:42 david Exp $
+# $OpenBSD: SUN4M,v 1.68 2005/07/08 12:36:36 miod Exp $
# $NetBSD: GENERIC,v 1.28.2.1 1996/07/02 23:55:22 jtc Exp $
# Machine architecture; required by config(8)
@@ -40,7 +40,7 @@ audio* at audioamd?
audiocs0 at sbus0 # sun4m
audio* at audiocs?
-auxreg0 at obio0 # sun4m
+auxreg* at obio0 # sun4m
# Power status and control register found on Sun4m systems
power0 at obio0
diff --git a/sys/arch/sparc/conf/files.sparc b/sys/arch/sparc/conf/files.sparc
index 708250a6a7f..4b01ee5618d 100644
--- a/sys/arch/sparc/conf/files.sparc
+++ b/sys/arch/sparc/conf/files.sparc
@@ -1,4 +1,4 @@
-# $OpenBSD: files.sparc,v 1.67 2005/05/03 00:39:39 brad Exp $
+# $OpenBSD: files.sparc,v 1.68 2005/07/08 12:36:36 miod Exp $
# $NetBSD: files.sparc,v 1.44 1997/08/31 21:29:16 pk Exp $
# @(#)files.sparc 8.1 (Berkeley) 7/19/93
@@ -30,7 +30,7 @@ file arch/sparc/dev/obio.c (obio | vmel | vmes | vme) & !solbourne
device auxreg
attach auxreg at mainbus, obio
-file arch/sparc/sparc/auxreg.c auxreg needs-count
+file arch/sparc/sparc/auxreg.c auxreg needs-flag
device clock
attach clock at mainbus, obio
diff --git a/sys/arch/sparc/sparc/auxioreg.h b/sys/arch/sparc/sparc/auxioreg.h
index ad8223c325b..b79a0c76fcc 100644
--- a/sys/arch/sparc/sparc/auxioreg.h
+++ b/sys/arch/sparc/sparc/auxioreg.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: auxioreg.h,v 1.4 2003/06/02 23:27:55 millert Exp $ */
+/* $OpenBSD: auxioreg.h,v 1.5 2005/07/08 12:36:38 miod Exp $ */
/* $NetBSD: auxreg.h,v 1.7 1997/05/17 17:52:52 pk Exp $ */
/*
@@ -62,6 +62,18 @@
#define AUXIO4M_LED 0x01 /* front panel LED */
/*
+ * Tadpole Auxiliary I/O registers. Those control various power management
+ * features.
+ */
+
+#define AUXIO_MODEM 0x01 /* enable modem power */
+#define AUXIO_ISDN 0x04 /* enable ISDN power */
+#define AUXIO_MODEM_RESET 0x08 /* reset modem line (active low) */
+#define AUXIO_TFT 0x80 /* S3000 XT tft power */
+
+#define AUXIO2_SERIAL 0x01 /* enable serial ports power */
+
+/*
* We use a fixed virtual address for the register because we use it for
* timing short sections of code (via external hardware attached to the LED).
*/
@@ -119,8 +131,8 @@
)
#ifndef _LOCORE
-extern volatile u_char *auxio_reg; /* Copy of AUXIO_REG */
extern u_char auxio_regval;
unsigned int auxregbisc(int, int);
+unsigned int sb_auxregbisc(int, int, int);
#endif
diff --git a/sys/arch/sparc/sparc/auxreg.c b/sys/arch/sparc/sparc/auxreg.c
index b9f0cb5dafd..221d3b0c1a3 100644
--- a/sys/arch/sparc/sparc/auxreg.c
+++ b/sys/arch/sparc/sparc/auxreg.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: auxreg.c,v 1.12 2005/04/17 18:47:50 miod Exp $ */
+/* $OpenBSD: auxreg.c,v 1.13 2005/07/08 12:36:38 miod Exp $ */
/* $NetBSD: auxreg.c,v 1.21 1997/05/24 20:15:59 pk Exp $ */
/*
@@ -67,6 +67,12 @@ struct cfdriver auxreg_cd = {
volatile u_char *auxio_reg; /* Copy of AUXIO_REG */
u_char auxio_regval;
+
+#ifdef SUN4M /* Tadpole SPARCbook */
+volatile u_char *sb_auxio_reg;
+volatile u_char *sb_auxio2_reg;
+#endif
+
extern int sparc_led_blink; /* from machdep */
struct timeout sparc_led_to;
@@ -77,7 +83,7 @@ led_blink(zero)
int s;
/* Don't do anything if there's no auxreg, ok? */
- if (auxio_reg == 0)
+ if (auxio_reg == NULL)
return;
if (!sparc_led_blink) {
@@ -106,64 +112,75 @@ led_blink(zero)
/*
* The OPENPROM calls this "auxiliary-io".
+ * We also need to match the "auxio2" register on Tadpole SPARCbooks.
*/
static int
-auxregmatch(parent, cf, aux)
- struct device *parent;
- void *cf, *aux;
+auxregmatch(struct device *parent, void *cf, void *aux)
{
- register struct confargs *ca = aux;
+ struct confargs *ca = aux;
switch (cputyp) {
- case CPU_SUN4:
+ case CPU_SUN4:
+ default:
return (0);
- case CPU_SUN4C:
+ case CPU_SUN4C:
return (strcmp("auxiliary-io", ca->ca_ra.ra_name) == 0);
- case CPU_SUN4M:
- return (strcmp("auxio", ca->ca_ra.ra_name) == 0);
- default:
- panic("auxregmatch");
+ case CPU_SUN4M:
+ return (strcmp("auxio", ca->ca_ra.ra_name) == 0 ||
+ strcmp("auxio2", ca->ca_ra.ra_name) == 0);
}
}
/* ARGSUSED */
static void
-auxregattach(parent, self, aux)
- struct device *parent, *self;
- void *aux;
+auxregattach(struct device *parent, struct device *self, void *aux)
{
struct confargs *ca = aux;
struct romaux *ra = &ca->ca_ra;
-
- (void)mapdev(ra->ra_reg, AUXREG_VA, 0, sizeof(long));
- if (CPU_ISSUN4M) {
- auxio_reg = AUXIO4M_REG;
- auxio_regval = *AUXIO4M_REG | AUXIO4M_MB1;
- } else {
- auxio_reg = AUXIO4C_REG;
- auxio_regval = *AUXIO4C_REG | AUXIO4C_FEJ | AUXIO4C_MB1;
+#ifdef SUN4M
+ volatile u_char **regp;
+
+ if (CPU_ISSUN4M && strncmp("Tadpole", mainbus_model, 7) == 0) {
+ if (strcmp("auxio", ra->ra_name) == 0)
+ regp = &sb_auxio_reg;
+ else
+ regp = &sb_auxio2_reg;
+ if (*regp == NULL)
+ *regp = mapdev(ra->ra_reg, 0, 0, sizeof(char));
+ } else
+#endif
+ if (auxio_reg == NULL) {
+ (void)mapdev(ra->ra_reg, AUXREG_VA, 0, sizeof(long));
+ if (CPU_ISSUN4M) {
+ auxio_reg = AUXIO4M_REG;
+ auxio_regval = *AUXIO4M_REG | AUXIO4M_MB1;
+ } else {
+ auxio_reg = AUXIO4C_REG;
+ auxio_regval = *AUXIO4C_REG | AUXIO4C_FEJ | AUXIO4C_MB1;
+ }
+
+ timeout_set(&sparc_led_to, led_blink, NULL);
+ /* In case it's initialized to true... */
+ if (sparc_led_blink)
+ led_blink((caddr_t)0);
}
printf("\n");
-
- timeout_set(&sparc_led_to, led_blink, NULL);
- /* In case it's initialized to true... */
- if (sparc_led_blink)
- led_blink((caddr_t)0);
}
unsigned int
-auxregbisc(bis, bic)
- int bis, bic;
+auxregbisc(int bis, int bic)
{
- register int s;
+ int s;
- if (auxio_reg == 0)
+#ifdef DIAGNOSTIC
+ if (auxio_reg == NULL)
/*
* Not all machines have an `aux' register; devices that
* depend on it should not get configured if it's absent.
*/
panic("no aux register");
+#endif
s = splhigh();
auxio_regval = (auxio_regval | bis) & ~bic;
@@ -171,3 +188,23 @@ auxregbisc(bis, bic)
splx(s);
return (auxio_regval);
}
+
+#ifdef SUN4M
+unsigned int
+sb_auxregbisc(int isreg2, int bis, int bic)
+{
+ int s;
+ volatile u_char *auxreg;
+ u_char aux;
+
+ auxreg = isreg2 ? sb_auxio2_reg : sb_auxio_reg;
+ if (auxreg == NULL)
+ return (0);
+
+ s = splhigh();
+ aux = (*auxreg | bis) & ~bic;
+ *auxreg = aux;
+ splx(s);
+ return (aux);
+}
+#endif