aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/ofw/openfirm.c
diff options
context:
space:
mode:
authorBenno Rice <benno@FreeBSD.org>2001-06-16 07:17:56 +0000
committerBenno Rice <benno@FreeBSD.org>2001-06-16 07:17:56 +0000
commit707fed20044c6d277eb0dd3f70c5da83e10d1bea (patch)
tree466bd8a076de868d42f5b1eb841011dda851b9e9 /sys/dev/ofw/openfirm.c
parent20d42fa8ebd66b438891116b5b6ee5ca67eb24c6 (diff)
downloadsrc-707fed20044c6d277eb0dd3f70c5da83e10d1bea.tar.gz
src-707fed20044c6d277eb0dd3f70c5da83e10d1bea.zip
OpenFirmware kernel support, as used by the PowerPC and hopefully other
ports later on. This includes the basic MI interface routines as well as a console driver. The MD code is kept in the MD directories. Reviewed by: obrien
Notes
Notes: svn path=/head/; revision=78346
Diffstat (limited to 'sys/dev/ofw/openfirm.c')
-rw-r--r--sys/dev/ofw/openfirm.c47
1 files changed, 41 insertions, 6 deletions
diff --git a/sys/dev/ofw/openfirm.c b/sys/dev/ofw/openfirm.c
index 365358e9163c..6607d8d71ee9 100644
--- a/sys/dev/ofw/openfirm.c
+++ b/sys/dev/ofw/openfirm.c
@@ -57,22 +57,43 @@
* $FreeBSD$
*/
-#include <machine/stdarg.h>
+#include <sys/systm.h>
-#include <stand.h>
+#include <machine/stdarg.h>
-#include "openfirm.h"
+#include <dev/ofw/openfirm.h>
-static int (*openfirmware)(void *);
static ihandle_t stdin;
static ihandle_t stdout;
+char *OF_buf;
+
+void ofbcopy(const void *, void *, size_t);
+
/* Initialiaser */
void
OF_init(int (*openfirm)(void *))
{
- openfirmware = openfirm;
+ phandle_t chosen;
+
+ set_openfirm_callback(openfirm);
+ if ((chosen = OF_finddevice("/chosen")) == -1)
+ OF_exit();
+ OF_getprop(chosen, "stdin", &stdin, sizeof(stdin));
+ OF_getprop(chosen, "stdout", &stdout, sizeof(stdout));
+}
+
+void
+OF_printf(const char *fmt, ...)
+{
+ va_list va;
+ char buf[1024];
+
+ va_start(va, fmt);
+ vsprintf(buf, fmt, va);
+ OF_write(stdout, buf, strlen(buf));
+ va_end(va);
}
/*
@@ -734,7 +755,8 @@ OF_chain(void *virt, u_int size, void (*entry)(), void *arg, u_int len)
}
#else
void
-OF_chain(void *virt, u_int size, void (*entry)(), void *arg, u_int len)
+OF_chain(void *virt, u_int size,
+ void (*entry)(void *, u_int, void *, void *, u_int), void *arg, u_int len)
{
/*
* This is a REALLY dirty hack till the firmware gets this going
@@ -745,3 +767,16 @@ OF_chain(void *virt, u_int size, void (*entry)(), void *arg, u_int len)
entry(0, 0, openfirmware, arg, len);
}
#endif
+
+void
+ofbcopy(const void *src, void *dst, size_t len)
+{
+ const char *sp = src;
+ char *dp = dst;
+
+ if (src == dst)
+ return;
+
+ while (len-- > 0)
+ *dp++ = *sp++;
+}