summaryrefslogtreecommitdiff
path: root/sys/arch/mvme88k/dev/bugio.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch/mvme88k/dev/bugio.c')
-rw-r--r--sys/arch/mvme88k/dev/bugio.c51
1 files changed, 30 insertions, 21 deletions
diff --git a/sys/arch/mvme88k/dev/bugio.c b/sys/arch/mvme88k/dev/bugio.c
index 2b52892a7f8..3d00a93deca 100644
--- a/sys/arch/mvme88k/dev/bugio.c
+++ b/sys/arch/mvme88k/dev/bugio.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: bugio.c,v 1.14 2005/04/30 16:42:37 miod Exp $ */
+/* $OpenBSD: bugio.c,v 1.15 2005/10/13 19:43:43 miod Exp $ */
/* Copyright (c) 1998 Steve Murphree, Jr. */
#include <sys/param.h>
@@ -8,7 +8,7 @@
#include <machine/bugio.h>
#include <machine/prom.h>
-register_t ossr0, ossr1, ossr2, ossr3;
+register_t ossr0, ossr1, ossr2, ossr3; /* XXX ought to be per-cpu */
register_t bugsr3;
unsigned long bugvec[2], sysbugvec[2];
@@ -18,38 +18,33 @@ void sysbug_vector(void);
#define MVMEPROM_CALL(x) \
__asm__ __volatile__ ("or r9,r0," __STRING(x)); \
- __asm__ __volatile__ ("tb0 0,r0,496")
+ __asm__ __volatile__ ("tb0 0,r0,496" ::: \
+ "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", \
+ "r9", "r10", "r11", "r12", "r13")
void
bug_vector()
{
- unsigned long *vbr, psr;
-
- disable_interrupt(psr); /* paranoia */
+ unsigned long *vbr;
__asm__ __volatile__ ("ldcr %0, cr7" : "=r" (vbr));
vbr[2 * MVMEPROM_VECTOR + 0] = bugvec[0];
vbr[2 * MVMEPROM_VECTOR + 1] = bugvec[1];
-
- set_psr(psr);
}
void
sysbug_vector()
{
- unsigned long *vbr, psr;
-
- disable_interrupt(psr); /* paranoia */
+ unsigned long *vbr;
__asm__ __volatile__ ("ldcr %0, cr7" : "=r" (vbr));
vbr[2 * MVMEPROM_VECTOR + 0] = sysbugvec[0];
vbr[2 * MVMEPROM_VECTOR + 1] = sysbugvec[1];
-
- set_psr(psr);
}
#define BUGCTXT() \
{ \
+ disable_interrupt(psr); /* paranoia */ \
bug_vector(); \
__asm__ __volatile__ ("ldcr %0, cr17" : "=r" (ossr0)); \
__asm__ __volatile__ ("ldcr %0, cr18" : "=r" (ossr1)); \
@@ -61,20 +56,21 @@ sysbug_vector()
#define OSCTXT() \
{ \
- __asm__ __volatile__ ("ldcr %0, cr20" : "=r" (bugsr3):: \
- "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", \
- "r9", "r10", "r11", "r12", "r13"); \
+ __asm__ __volatile__ ("ldcr %0, cr20" : "=r" (bugsr3)); \
\
__asm__ __volatile__ ("stcr %0, cr17" :: "r"(ossr0)); \
__asm__ __volatile__ ("stcr %0, cr18" :: "r"(ossr1)); \
__asm__ __volatile__ ("stcr %0, cr19" :: "r"(ossr2)); \
__asm__ __volatile__ ("stcr %0, cr20" :: "r"(ossr3)); \
sysbug_vector(); \
+ set_psr(psr); \
}
static void
bugpcrlf(void)
{
+ u_int psr;
+
BUGCTXT();
MVMEPROM_CALL(MVMEPROM_OUTCRLF);
OSCTXT();
@@ -89,17 +85,20 @@ buginit()
char
buginchr(void)
{
+ u_int psr;
int ret;
+
BUGCTXT();
MVMEPROM_CALL(MVMEPROM_INCHR);
- __asm__ __volatile__ ("or %0,r0,r2" : "=r" (ret) : );
+ __asm__ __volatile__ ("or %0,r0,r2" : "=r" (ret));
OSCTXT();
- return ((char)ret & 0xFF);
+ return ((char)ret & 0xff);
}
void
bugoutchr(unsigned char c)
{
+ u_int psr;
unsigned char cc;
if ((cc = c) == '\n') {
@@ -117,11 +116,12 @@ bugoutchr(unsigned char c)
int
buginstat(void)
{
- register int ret;
+ u_int psr;
+ int ret;
BUGCTXT();
MVMEPROM_CALL(MVMEPROM_INSTAT);
- __asm__ __volatile__ ("or %0,r0,r2" : "=r" (ret) : );
+ __asm__ __volatile__ ("or %0,r0,r2" : "=r" (ret));
OSCTXT();
return (ret & 0x4 ? 0 : 1);
}
@@ -129,6 +129,8 @@ buginstat(void)
void
bugoutstr(char *s, char *se)
{
+ u_int psr;
+
BUGCTXT();
MVMEPROM_CALL(MVMEPROM_OUTSTR);
OSCTXT();
@@ -137,6 +139,8 @@ bugoutstr(char *s, char *se)
void
bugrtcrd(struct mvmeprom_time *rtc)
{
+ u_int psr;
+
BUGCTXT();
MVMEPROM_CALL(MVMEPROM_RTC_RD);
OSCTXT();
@@ -145,6 +149,8 @@ bugrtcrd(struct mvmeprom_time *rtc)
void
bugreturn(void)
{
+ u_int psr;
+
BUGCTXT();
MVMEPROM_CALL(MVMEPROM_EXIT);
OSCTXT();
@@ -153,11 +159,12 @@ bugreturn(void)
void
bugbrdid(struct mvmeprom_brdid *id)
{
+ u_int psr;
struct mvmeprom_brdid *ptr;
BUGCTXT();
MVMEPROM_CALL(MVMEPROM_GETBRDID);
- __asm__ __volatile__ ("or %0,r0,r2" : "=r" (ptr) : );
+ __asm__ __volatile__ ("or %0,r0,r2" : "=r" (ptr));
OSCTXT();
bcopy(ptr, id, sizeof(struct mvmeprom_brdid));
@@ -166,6 +173,8 @@ bugbrdid(struct mvmeprom_brdid *id)
void
bugdiskrd(struct mvmeprom_dskio *dio)
{
+ u_int psr;
+
BUGCTXT();
__asm__ __volatile__ ("or r2, r0, %0" : : "r" (dio));
MVMEPROM_CALL(MVMEPROM_DSKRD);