diff options
author | Benno Rice <benno@FreeBSD.org> | 2001-06-16 07:17:56 +0000 |
---|---|---|
committer | Benno Rice <benno@FreeBSD.org> | 2001-06-16 07:17:56 +0000 |
commit | 707fed20044c6d277eb0dd3f70c5da83e10d1bea (patch) | |
tree | 466bd8a076de868d42f5b1eb841011dda851b9e9 /sys/dev/ofw/openfirm.c | |
parent | 20d42fa8ebd66b438891116b5b6ee5ca67eb24c6 (diff) | |
download | src-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.c | 47 |
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++; +} |