PERFORCE change 171292 for review
Rafal Jaworowski
raj at FreeBSD.org
Wed Dec 2 19:32:31 UTC 2009
http://p4web.freebsd.org/chv.cgi?CH=171292
Change 171292 by raj at raj_fdt on 2009/12/02 19:31:45
Extend the ofw I/F so that ofw_init() can return a value.
This will allow for better handling during initialization the
flattened device ofw I/F back-end.
Affected files ...
.. //depot/projects/fdt/sys/dev/ofw/ofw_if.m#2 edit
.. //depot/projects/fdt/sys/dev/ofw/ofw_standard.c#2 edit
.. //depot/projects/fdt/sys/dev/ofw/openfirm.c#2 edit
.. //depot/projects/fdt/sys/dev/ofw/openfirm.h#2 edit
.. //depot/projects/fdt/sys/powerpc/ofw/ofw_real.c#2 edit
Differences ...
==== //depot/projects/fdt/sys/dev/ofw/ofw_if.m#2 (text+ko) ====
@@ -43,7 +43,7 @@
* @param _cookie A handle to the client interface, generally the OF
* callback routine.
*/
-METHOD void init {
+METHOD int init {
ofw_t _ofw;
void *_cookie;
};
==== //depot/projects/fdt/sys/dev/ofw/ofw_standard.c#2 (text+ko) ====
@@ -70,7 +70,7 @@
#include "ofw_if.h"
-static void ofw_std_init(ofw_t ofw, void *openfirm);
+static int ofw_std_init(ofw_t ofw, void *openfirm);
static int ofw_std_test(ofw_t ofw, const char *name);
static int ofw_std_interpret(ofw_t ofw, const char *cmd, int nreturns,
unsigned long *returns);
@@ -150,11 +150,12 @@
/* Initializer */
-static void
+static int
ofw_std_init(ofw_t ofw, void *openfirm)
{
openfirmware = (int (*)(void *))openfirm;
+ return (0);
}
/*
==== //depot/projects/fdt/sys/dev/ofw/openfirm.c#2 (text+ko) ====
@@ -58,6 +58,8 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD: src/sys/dev/ofw/openfirm.c,v 1.25 2009/06/14 00:05:38 marius Exp $");
+#include "opt_platform.h"
+
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/malloc.h>
@@ -110,10 +112,10 @@
}
/* Initializer */
-void
+int
OF_init(void *cookie)
{
- phandle_t chosen;
+ int rv;
ofw_obj = &ofw_kernel_obj;
/*
@@ -123,12 +125,24 @@
kobj_class_compile_static(ofw_def_impl, &ofw_kernel_kops);
kobj_init((kobj_t)ofw_obj, ofw_def_impl);
- OFW_INIT(ofw_obj, cookie);
+ if (rv = OFW_INIT(ofw_obj, cookie))
+ return (rv);
+
+#ifndef FDT
+ /*
+ * XXX The #ifndef is a temporary workaround until we handle /chosen
+ * properly for the FDT blob.
+ */
+
+ phandle_t chosen;
if ((chosen = OF_finddevice("/chosen")) == -1)
OF_exit();
if (OF_getprop(chosen, "stdout", &stdout, sizeof(stdout)) == -1)
stdout = -1;
+#endif
+
+ return (rv);
}
void
@@ -228,7 +242,7 @@
}
/*
- * Resursively search the node and its parent for the given property, working
+ * Recursively search the node and its parent for the given property, working
* downward from the node to the device tree root. Returns the value of the
* first match.
*/
==== //depot/projects/fdt/sys/dev/ofw/openfirm.h#2 (text+ko) ====
@@ -83,7 +83,7 @@
*/
boolean_t OF_install(char *name, int prio);
-void OF_init(void *cookie);
+int OF_init(void *cookie);
/*
* Known Open Firmware interface names
==== //depot/projects/fdt/sys/powerpc/ofw/ofw_real.c#2 (text+ko) ====
@@ -76,7 +76,7 @@
#include <dev/ofw/ofwvar.h>
#include "ofw_if.h"
-static void ofw_real_init(ofw_t, void *openfirm);
+static int ofw_real_init(ofw_t, void *openfirm);
static int ofw_real_test(ofw_t, const char *name);
static phandle_t ofw_real_peer(ofw_t, phandle_t node);
static phandle_t ofw_real_child(ofw_t, phandle_t node);
@@ -256,13 +256,14 @@
/* Initialiser */
-static void
+static int
ofw_real_init(ofw_t ofw, void *openfirm)
{
openfirmware = (int (*)(void *))openfirm;
mtx_init(&of_bounce_mtx, "OF Bounce Page", MTX_DEF, 0);
of_bounce_virt = NULL;
+ return (0);
}
/*
More information about the p4-projects
mailing list