summaryrefslogtreecommitdiff
path: root/sys/arch/mvmeppc/include/powerpc.h
diff options
context:
space:
mode:
authorSteve Murphree <smurph@cvs.openbsd.org>2001-06-26 21:58:11 +0000
committerSteve Murphree <smurph@cvs.openbsd.org>2001-06-26 21:58:11 +0000
commit416f561c78b0eca90fdb484e72a96080b0825dca (patch)
treed310db0254b85229b90b9d90e79cabfbbcb6101a /sys/arch/mvmeppc/include/powerpc.h
parent77682e0d8d22531ed2952aaab30aae7c69483b3d (diff)
Initial import of mvmeppc.
Diffstat (limited to 'sys/arch/mvmeppc/include/powerpc.h')
-rw-r--r--sys/arch/mvmeppc/include/powerpc.h132
1 files changed, 132 insertions, 0 deletions
diff --git a/sys/arch/mvmeppc/include/powerpc.h b/sys/arch/mvmeppc/include/powerpc.h
new file mode 100644
index 00000000000..b79ed38d610
--- /dev/null
+++ b/sys/arch/mvmeppc/include/powerpc.h
@@ -0,0 +1,132 @@
+/* $OpenBSD: powerpc.h,v 1.1 2001/06/26 21:57:47 smurph Exp $ */
+/* $NetBSD: powerpc.h,v 1.1 1996/09/30 16:34:30 ws Exp $ */
+
+/*
+ * Copyright (C) 1996 Wolfgang Solfrank.
+ * Copyright (C) 1996 TooLs GmbH.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by TooLs GmbH.
+ * 4. The name of TooLs GmbH may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _MACHINE_POWERPC_H_
+#define _MACHINE_POWERPC_H_
+
+struct mem_region {
+ vm_offset_t start;
+ vm_size_t size;
+};
+
+void mem_regions __P((struct mem_region **, struct mem_region **));
+
+/*
+ * These two functions get used solely in boot() in machdep.c.
+ *
+ * Not sure whether boot itself should be implementation dependent instead. XXX
+ */
+typedef void (exit_f) __P((void)) /*__attribute__((__noreturn__))*/ ;
+typedef void (boot_f) __P((char *bootspec)) /* __attribute__((__noreturn__))*/ ;
+typedef void (vmon_f) __P((void));
+typedef unsigned char (nvram_rd_f) __P((unsigned long offset));
+typedef void (nvram_wr_f) __P((unsigned long offset, unsigned char val));
+typedef unsigned long (tps_f) __P((void));
+
+
+typedef void (mem_regions_f) __P((struct mem_region **memp,
+ struct mem_region **availp));
+
+typedef int (clock_read_f) __P((int *sec, int *min, int *hour, int *day,
+ int *mon, int *yr));
+typedef int (clock_write_f) __P((int sec, int min, int hour, int day,
+ int mon, int yr));
+typedef int (time_read_f) __P((u_long *sec));
+typedef int (time_write_f) __P((u_long sec));
+
+/* firmware interface.
+ * regardless of type of firmware used several items
+ * are need from firmware to boot up.
+ * these include:
+ * memory information
+ * vmsetup for firmware calls.
+ * default character print mechanism ???
+ * firmware exit (return)
+ * firmware boot (reset)
+ * vmon - tell firmware the bsd vm is active.
+ */
+
+struct firmware {
+ mem_regions_f *mem_regions;
+ exit_f *exit;
+ boot_f *boot;
+ vmon_f *vmon;
+ nvram_rd_f *nvram_rd;
+ nvram_wr_f *nvram_wr;
+ tps_f *tps;
+ clock_read_f *clock_read;
+ clock_write_f *clock_write;
+ time_read_f *time_read;
+ time_write_f *time_write;
+#ifdef FW_HAS_PUTC
+ boot_f *putc;
+#endif
+};
+extern struct firmware *fw;
+
+#define ppc_exit() if (fw->exit != NULL) (fw->exit)()
+#define ppc_boot(x) if (fw->boot != NULL) (fw->boot)(x)
+#define ppc_vmon() if (fw->vmon != NULL) (fw->vmon)()
+#define ppc_nvram_rd(a) ({unsigned char val; \
+ if (fw->nvram_rd !=NULL) \
+ val = (fw->nvram_rd)(a); \
+ else \
+ val = 0; \
+ val;})
+
+#define ppc_nvram_wr(a, v) if (fw->nvram_wr !=NULL) (fw->nvram_wr)(a, v)
+
+#define ppc_tps() ({unsigned long val; \
+ if (fw->tps != NULL) \
+ val = (fw->tps)(); \
+ else \
+ val = 0; \
+ val;})
+
+#define SPR_XER "1"
+#define SPR_LR "8"
+#define SPR_CTR "9"
+#define SPR_DSISR "18"
+#define SPR_DAR "19"
+#define SPR_DEC "22"
+#define SPR_SDR1 "25"
+#define SPR_SRR0 "26"
+#define SPR_SRR1 "27"
+
+#define ppc_get_spr(reg) ({u_int32_t val; \
+ __asm__ volatile("mfspr %0," reg : "=r"(val)); \
+ val;})
+#define ppc_set_spr(reg, val) ({ \
+ __asm__ volatile("mtspr " reg ",%0" :: "r"(val));})
+
+#endif /* _MACHINE_POWERPC_H_ */