<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-size:small">On Sat, Jun 6, 2020 at 5:40 PM Christian Mauderer <<a href="mailto:oss@c-mauderer.de" target="_blank">oss@c-mauderer.de</a>> wrote:<br></div></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 04/06/2020 19:43, G S Niteesh Babu wrote:<br>
> The following files have been ported to RTEMS<br>
> 1) openfirm.h<br>
> 2) openfirm.c<br>
> 3) ofw_fdt.c<br>
> ---<br>
> cpukit/libfreebsd/dev/ofw/ofw_fdt.c | 117 ++++++++++++++++++++++++++-<br>
>Â cpukit/libfreebsd/dev/ofw/openfirm.c |Â 59 +++++++++++++-<br>
>Â cpukit/libfreebsd/dev/ofw/openfirm.h |Â 18 +++++<br>
>Â 3 files changed, 191 insertions(+), 3 deletions(-)<br>
> <br>
> diff --git a/cpukit/libfreebsd/dev/ofw/ofw_fdt.c b/cpukit/libfreebsd/dev/ofw/ofw_fdt.c<br>
> index e4f72e8142..5341440789 100644<br>
> --- a/cpukit/libfreebsd/dev/ofw/ofw_fdt.c<br>
> +++ b/cpukit/libfreebsd/dev/ofw/ofw_fdt.c<br>
> @@ -29,10 +29,13 @@<br>
>Â Â * SUCH DAMAGE.<br>
>Â Â */<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â #include <sys/cdefs.h><br>
>Â __FBSDID("$FreeBSD$");<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â #include <sys/param.h><br>
> +#ifndef __rtems__<br>
>Â #include <sys/kernel.h><br>
>Â #include <sys/malloc.h><br>
>Â #include <sys/systm.h><br>
> @@ -45,9 +48,18 @@ __FBSDID("$FreeBSD$");<br>
>Â #include <dev/ofw/ofwvar.h><br>
>Â #include <dev/ofw/openfirm.h><br>
>Â #include <dev/ofw/ofw_bus_subr.h><br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â #include "ofw_if.h"<br>
> -<br>
<br>
I'm not really happy about lines starting with "-" in the porting<br>
commits. I think we should apply the same rules like in libbsd: Only add<br>
stuff. Exception: The one at the end of the file is OK (where git tells<br>
you "\ No newline at end of file"). You can't really avoid that.<br></blockquote><div><br></div><div><div class="gmail_default" style="font-size:small">I fixed this.</div><br></div><div>Â </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
> +#ifdef __rtems__<br>
> +#include <rtems.h><br>
> +#include <rtems/sysinit.h><br>
> +#include <libfdt.h><br>
> +#include <assert.h><br>
> +#include "openfirm.h"<br>
> +#endif /* __rtems__ */<br>
> +<br>
> +#ifndef __rtems__<br>
>Â #ifdef DEBUG<br>
>Â #define debugf(fmt, args...) do { printf("%s(): ", __func__);Â Â Â Â \<br>
>Â Â Â printf(fmt,##args); } while (0)<br>
> @@ -63,6 +75,7 @@ __FBSDID("$FreeBSD$");<br>
>Â #define FDT_MARVELL<br>
>Â #endif<br>
>Â #endif<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â static int ofw_fdt_init(ofw_t, void *);<br>
>Â static phandle_t ofw_fdt_peer(ofw_t, phandle_t);<br>
> @@ -78,6 +91,7 @@ static ssize_t ofw_fdt_canon(ofw_t, const char *, char *, size_t);<br>
>Â static phandle_t ofw_fdt_finddevice(ofw_t, const char *);<br>
>Â static ssize_t ofw_fdt_instance_to_path(ofw_t, ihandle_t, char *, size_t);<br>
>Â static ssize_t ofw_fdt_package_to_path(ofw_t, phandle_t, char *, size_t);<br>
> +#ifndef __rtems__<br>
>Â static int ofw_fdt_interpret(ofw_t, const char *, int, cell_t *);<br>
>Â <br>
>Â static ofw_method_t ofw_fdt_methods[] = {<br>
> @@ -104,9 +118,11 @@ static ofw_def_t ofw_fdt = {<br>
>Â Â Â Â 0<br>
>Â };<br>
>Â OFW_DEF(ofw_fdt);<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â static void *fdtp = NULL;<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â static int<br>
>Â sysctl_handle_dtb(SYSCTL_HANDLER_ARGS)<br>
>Â {<br>
> @@ -127,6 +143,24 @@ sysctl_register_fdt_oid(void *arg)<br>
>Â Â Â Â Â Â sysctl_handle_dtb, "", "Device Tree Blob");<br>
>Â }<br>
>Â SYSINIT(dtb_oid, SI_SUB_KMEM, SI_ORDER_ANY, sysctl_register_fdt_oid, NULL);<br>
> +#else /* __rtems__ */<br>
> +const void* bsp_fdt_get(void);<br>
> +static void<br>
> +ofw_init(void)<br>
> +{<br>
> +Â Â Â int rv;<br>
> +Â Â Â const void *fdt;<br>
> +<br>
> +Â Â Â fdt = bsp_fdt_get();<br>
> +Â Â Â rv = ofw_fdt_init(NULL, fdt);<br>
> +Â Â Â assert(rv == 0);<br>
<br>
Is assert really the only error handling possible here? Asserts are<br>
allways a bit difficult because they stop the entire system. In which<br>
cases would it hit?</blockquote><div><br></div><div><div class="gmail_default" style="font-size:small">The assert is reached when the FDT is not valid. The check is done</div><div class="gmail_default" style="font-size:small">using fdt_check_header. Shutting the system would be the only way<br></div><div class="gmail_default" style="font-size:small">right?</div><div class="gmail_default" style="font-size:small">I agree to assert is not the right way to quit. Can we quit with</div><div class="gmail_default" style="font-size:small">a proper error code like BSP_FATAL_INVALID_FDT or do we have</div><div class="gmail_default" style="font-size:small">something like that already?</div></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="gmail_default" style="font-size:small"></span><br>
> +}<br>
> +RTEMS_SYSINIT_ITEM(<br>
> +Â Â Â ofw_init,<br>
> +Â Â Â RTEMS_SYSINIT_BSP_START,<br>
> +Â Â Â RTEMS_SYSINIT_ORDER_FIRST<br>
> +);<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â static int<br>
>Â ofw_fdt_init(ofw_t ofw, void *data)<br>
> @@ -297,7 +331,11 @@ ofw_fdt_getprop(ofw_t ofw, phandle_t package, const char *propname, void *buf,<br>
>Â Â Â Â if (prop == NULL)<br>
>Â Â Â Â Â Â Â Â return (-1);<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â Â Â Â bcopy(prop, buf, min(len, buflen));<br>
> +#else /* __rtems__ */<br>
> +Â Â Â memcpy(buf, prop, MIN(len, buflen));<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â Â Â Â return (len);<br>
>Â }<br>
> @@ -407,6 +445,7 @@ ofw_fdt_package_to_path(ofw_t ofw, phandle_t package, char *buf, size_t len)<br>
>Â Â Â Â return (-1);<br>
>Â }<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â #if defined(FDT_MARVELL)<br>
>Â static int<br>
>Â ofw_fdt_fixup(ofw_t ofw)<br>
> @@ -476,4 +515,78 @@ ofw_fdt_interpret(ofw_t ofw, const char *cmd, int nret, cell_t *retvals)<br>
>Â #else<br>
>Â Â Â Â return (0);<br>
>Â #endif<br>
> -}<br>
> \ No newline at end of file<br>
> +}<br>
> +#endif /* __rtems__ */<br>
> +<br>
> +#ifdef __rtems__<br>
> +int OFW_INIT(ofw_t ofw_obj, void *cookie)<br>
<br>
Again: Please use FreeBSD style. The return value should be on it's onw<br>
line during the definition (not during declaration).<br>
<br>
> +{<br>
<br>
There should be one empty line if you have no local variables (I'm not<br>
really consequent here too).<br>
<br>
> +Â Â Â return ofw_fdt_init(ofw_obj, cookie);<br>
<br>
And brackets around everything that is returned.<br></blockquote><div><br></div><div><div class="gmail_default" style="font-size:small">I fixed all.</div><br></div><div>Â <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
> +}<br>
> +<br>
> +phandle_t OFW_PEER(ofw_t ofw_obj, phandle_t node)<br>
> +{<br>
> +Â Â Â return ofw_fdt_peer(ofw_obj, node);<br>
> +}<br>
> +<br>
> +phandle_t OFW_CHILD(ofw_t ofw_obj, phandle_t node)<br>
> +{<br>
> +Â Â Â return ofw_fdt_child(ofw_obj, node);<br>
> +}<br>
> +<br>
> +phandle_t OFW_PARENT(ofw_t ofw_obj, phandle_t node)<br>
> +{<br>
> +Â Â Â return ofw_fdt_parent(ofw_obj, node);<br>
> +}<br>
> +<br>
> +phandle_t OFW_INSTANCE_TO_PACKAGE(ofw_t ofw_obj, ihandle_t instance)<br>
> +{<br>
> +Â Â Â return ofw_fdt_instance_to_package(ofw_obj, instance);<br>
> +}<br>
> +<br>
> +ssize_t OFW_GETPROPLEN(ofw_t ofw_obj, phandle_t package, const char *propname)<br>
> +{<br>
> +Â Â Â return ofw_fdt_getproplen(ofw_obj, package, propname);<br>
> +}<br>
> +<br>
> +ssize_t OFW_GETPROP(ofw_t ofw_obj, phandle_t package, const char *propname,<br>
> +Â Â void *buf, size_t buflen<br>
> +)<br>
> +{<br>
> +Â Â Â return ofw_fdt_getprop(ofw_obj, package, propname, buf, buflen);<br>
> +}<br>
> +<br>
> +int OFW_NEXTPROP(ofw_t ofw_obj, phandle_t package, const char *prev, char *buf,<br>
> +Â Â size_t size)<br>
> +{<br>
> +Â Â Â return ofw_fdt_nextprop(ofw_obj, package, prev, buf, size);<br>
> +}<br>
> +<br>
> +int OFW_SETPROP(ofw_t ofw_obj, phandle_t package, const char *propname,<br>
> +Â Â const void *buf, size_t len)<br>
> +{<br>
> +Â Â Â return ofw_fdt_setprop(ofw_obj, package, propname, buf, len);<br>
> +}<br>
> +<br>
> +ssize_t OFW_CANON(ofw_t ofw_obj, const char *device, char *buf, size_t len)<br>
> +{<br>
> +Â Â Â return ofw_fdt_canon(ofw_obj, device, buf, len);<br>
> +}<br>
> +<br>
> +phandle_t OFW_FINDDEVICE(ofw_t ofw_obj, const char *device)<br>
> +{<br>
> +Â Â Â return ofw_fdt_finddevice(ofw_obj, device);<br>
> +}<br>
> +<br>
> +ssize_t OFW_INSTANCE_TO_PATH(ofw_t ofw_obj, ihandle_t instance, char *buf,<br>
> +Â Â size_t len)<br>
> +{<br>
> +Â Â Â return ofw_fdt_instance_to_path(ofw_obj, instance, buf, len);<br>
> +}<br>
> +<br>
> +ssize_t OFW_PACKAGE_TO_PATH(ofw_t ofw_obj, phandle_t package, char *buf,<br>
> +Â Â size_t len)<br>
> +{<br>
> +Â Â Â return ofw_fdt_package_to_path(ofw_obj, package, buf, len);<br>
> +}<br>
> +#endif /* __rtems__ */<br>
> \ No newline at end of file<br>
> diff --git a/cpukit/libfreebsd/dev/ofw/openfirm.c b/cpukit/libfreebsd/dev/ofw/openfirm.c<br>
> index 50ebf2cf16..646c006e18 100644<br>
> --- a/cpukit/libfreebsd/dev/ofw/openfirm.c<br>
> +++ b/cpukit/libfreebsd/dev/ofw/openfirm.c<br>
> @@ -57,27 +57,39 @@<br>
>Â Â * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.<br>
>Â Â */<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â #include <sys/cdefs.h><br>
<br>
Don't we have a sys/cdefs.h? Or is that from libbsd in my installation?<br></blockquote><div><span class="gmail_default" style="font-size:small"></span></div><div><div class="gmail_default" style="font-size:small">It is not present in RTEMS but is present in newlib. What is this header</div><div class="gmail_default" style="font-size:small">used for? Do we really need it?</div></div><div><span class="gmail_default" style="font-size:small"><br></span></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
>Â __FBSDID("$FreeBSD$");<br>
>Â <br>
>Â #include "opt_platform.h"<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â #include <sys/param.h><br>
> +#ifndef __rtems__<br>
>Â #include <sys/kernel.h><br>
>Â #include <sys/lock.h><br>
>Â #include <sys/malloc.h><br>
>Â #include <sys/mutex.h><br>
>Â #include <sys/queue.h><br>
>Â #include <sys/systm.h><br>
> +#endif /* __rtems__ */<br>
>Â #include <sys/endian.h><br>
>Â <br>
> +#ifndef __rtems__<br>
>Â #include <machine/stdarg.h><br>
>Â <br>
>Â #include <dev/ofw/ofwvar.h><br>
>Â #include <dev/ofw/openfirm.h><br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â #include "ofw_if.h"<br>
> +#ifdef __rtems__<br>
> +#include <assert.h><br>
<br>
Why do you need assert.h here?<br></blockquote><div><br></div><div><div class="gmail_default" style="font-size:small">I missed it while cleaning.</div><br></div><div>Â </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
> +#include "openfirm.h"<br>
> +#include "../../rtems-freebsd-helper.h"<br>
> +#endif /* __rtems__ */<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â static void OF_putchar(int c, void *arg);<br>
>Â <br>
>Â MALLOC_DEFINE(M_OFWPROP, "openfirm", "Open Firmware properties");<br>
> @@ -85,7 +97,9 @@ MALLOC_DEFINE(M_OFWPROP, "openfirm", "Open Firmware properties");<br>
>Â static ihandle_t stdout;<br>
>Â <br>
> static ofw_def_t   *ofw_def_impl = NULL;<br>
> +#endif /* __rtems__ */<br>
> static ofw_t     ofw_obj;<br>
> +#ifndef __rtems__<br>
> static struct ofw_kobj    ofw_kernel_obj;<br>
> static struct kobj_ops    ofw_kernel_kops;<br>
>Â <br>
> @@ -224,14 +238,18 @@ OF_install(char *name, int prio)<br>
>Â <br>
>Â Â Â Â return (FALSE);<br>
>Â }<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â /* Initializer */<br>
>Â int<br>
>Â OF_init(void *cookie)<br>
>Â {<br>
> +#ifndef __rtems__<br>
>Â Â Â Â phandle_t chosen;<br>
> +#endif /* __rtems__ */<br>
>Â Â Â Â int rv;<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â Â Â Â if (ofw_def_impl == NULL)<br>
>Â Â Â Â Â Â Â Â return (-1);<br>
>Â <br>
> @@ -242,17 +260,21 @@ OF_init(void *cookie)<br>
>Â Â Â Â */<br>
>Â Â Â Â kobj_class_compile_static(ofw_def_impl, &ofw_kernel_kops);<br>
>Â Â Â Â kobj_init_static((kobj_t)ofw_obj, ofw_def_impl);<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â Â Â Â rv = OFW_INIT(ofw_obj, cookie);<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â Â Â Â if ((chosen = OF_finddevice("/chosen")) != -1)<br>
>Â Â Â Â Â Â Â Â if (OF_getencprop(chosen, "stdout", &stdout,<br>
>Â Â Â Â Â Â Â Â Â Â sizeof(stdout)) == -1)<br>
>Â Â Â Â Â Â Â Â Â Â Â Â stdout = -1;<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â Â Â Â return (rv);<br>
>Â }<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â static void<br>
>Â OF_putchar(int c, void *arg __unused)<br>
>Â {<br>
> @@ -314,6 +336,7 @@ OF_interpret(const char *cmd, int nreturns, ...)<br>
>Â <br>
>Â Â Â Â return (status);<br>
>Â }<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â /*<br>
>Â Â * Device tree functions<br>
> @@ -324,8 +347,10 @@ phandle_t<br>
>Â OF_peer(phandle_t node)<br>
>Â {<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â Â Â Â if (ofw_def_impl == NULL)<br>
>Â Â Â Â Â Â Â Â return (0);<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â Â Â Â return (OFW_PEER(ofw_obj, node));<br>
>Â }<br>
> @@ -335,8 +360,10 @@ phandle_t<br>
>Â OF_child(phandle_t node)<br>
>Â {<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â Â Â Â if (ofw_def_impl == NULL)<br>
>Â Â Â Â Â Â Â Â return (0);<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â Â Â Â return (OFW_CHILD(ofw_obj, node));<br>
>Â }<br>
> @@ -346,8 +373,10 @@ phandle_t<br>
>Â OF_parent(phandle_t node)<br>
>Â {<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â Â Â Â if (ofw_def_impl == NULL)<br>
>Â Â Â Â Â Â Â Â return (0);<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â Â Â Â return (OFW_PARENT(ofw_obj, node));<br>
>Â }<br>
> @@ -357,8 +386,10 @@ phandle_t<br>
>Â OF_instance_to_package(ihandle_t instance)<br>
>Â {<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â Â Â Â if (ofw_def_impl == NULL)<br>
>Â Â Â Â Â Â Â Â return (-1);<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â Â Â Â return (OFW_INSTANCE_TO_PACKAGE(ofw_obj, instance));<br>
>Â }<br>
> @@ -368,8 +399,10 @@ ssize_t<br>
>Â OF_getproplen(phandle_t package, const char *propname)<br>
>Â {<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â Â Â Â if (ofw_def_impl == NULL)<br>
>Â Â Â Â Â Â Â Â return (-1);<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â Â Â Â return (OFW_GETPROPLEN(ofw_obj, package, propname));<br>
>Â }<br>
> @@ -387,8 +420,10 @@ ssize_t<br>
>Â OF_getprop(phandle_t package, const char *propname, void *buf, size_t buflen)<br>
>Â {<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â Â Â Â if (ofw_def_impl == NULL)<br>
>Â Â Â Â Â Â Â Â return (-1);<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â Â Â Â return (OFW_GETPROP(ofw_obj, package, propname, buf, buflen));<br>
>Â }<br>
> @@ -532,8 +567,10 @@ int<br>
>Â OF_nextprop(phandle_t package, const char *previous, char *buf, size_t size)<br>
>Â {<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â Â Â Â if (ofw_def_impl == NULL)<br>
>Â Â Â Â Â Â Â Â return (-1);<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â Â Â Â return (OFW_NEXTPROP(ofw_obj, package, previous, buf, size));<br>
>Â }<br>
> @@ -543,8 +580,10 @@ int<br>
>Â OF_setprop(phandle_t package, const char *propname, const void *buf, size_t len)<br>
>Â {<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â Â Â Â if (ofw_def_impl == NULL)<br>
>Â Â Â Â Â Â Â Â return (-1);<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â Â Â Â return (OFW_SETPROP(ofw_obj, package, propname, buf,len));<br>
>Â }<br>
> @@ -554,8 +593,10 @@ ssize_t<br>
>Â OF_canon(const char *device, char *buf, size_t len)<br>
>Â {<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â Â Â Â if (ofw_def_impl == NULL)<br>
>Â Â Â Â Â Â Â Â return (-1);<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â Â Â Â return (OFW_CANON(ofw_obj, device, buf, len));<br>
>Â }<br>
> @@ -565,8 +606,10 @@ phandle_t<br>
>Â OF_finddevice(const char *device)<br>
>Â {<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â Â Â Â if (ofw_def_impl == NULL)<br>
>Â Â Â Â Â Â Â Â return (-1);<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â Â Â Â return (OFW_FINDDEVICE(ofw_obj, device));<br>
>Â }<br>
> @@ -576,8 +619,10 @@ ssize_t<br>
>Â OF_instance_to_path(ihandle_t instance, char *buf, size_t len)<br>
>Â {<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â Â Â Â if (ofw_def_impl == NULL)<br>
>Â Â Â Â Â Â Â Â return (-1);<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â Â Â Â return (OFW_INSTANCE_TO_PATH(ofw_obj, instance, buf, len));<br>
>Â }<br>
> @@ -587,8 +632,10 @@ ssize_t<br>
>Â OF_package_to_path(phandle_t package, char *buf, size_t len)<br>
>Â {<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â Â Â Â if (ofw_def_impl == NULL)<br>
>Â Â Â Â Â Â Â Â return (-1);<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â Â Â Â return (OFW_PACKAGE_TO_PATH(ofw_obj, package, buf, len));<br>
>Â }<br>
> @@ -626,14 +673,18 @@ OF_child_xref_phandle(phandle_t parent, phandle_t xref)<br>
>Â phandle_t<br>
>Â OF_node_from_xref(phandle_t xref)<br>
>Â {<br>
> +#ifndef __rtems__<br>
>Â Â Â Â struct xrefinfo *xi;<br>
> +#endif /* __rtems__ */<br>
>Â Â Â Â phandle_t node;<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â Â Â Â if (xref_init_done) {<br>
>Â Â Â Â Â Â Â Â if ((xi = xrefinfo_find(xref, FIND_BY_XREF)) == NULL)<br>
>Â Â Â Â Â Â Â Â Â Â Â Â return (xref);<br>
>Â Â Â Â Â Â Â Â return (xi->node);<br>
>Â Â Â Â }<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â Â Â Â if ((node = OF_child_xref_phandle(OF_peer(0), xref)) == -1)<br>
>Â Â Â Â Â Â Â Â return (xref);<br>
> @@ -643,14 +694,18 @@ OF_node_from_xref(phandle_t xref)<br>
>Â phandle_t<br>
>Â OF_xref_from_node(phandle_t node)<br>
>Â {<br>
> +#ifndef __rtems__<br>
>Â Â Â Â struct xrefinfo *xi;<br>
> +#endif /* __rtems__ */<br>
>Â Â Â Â phandle_t xref;<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â Â Â Â if (xref_init_done) {<br>
>Â Â Â Â Â Â Â Â if ((xi = xrefinfo_find(node, FIND_BY_NODE)) == NULL)<br>
>Â Â Â Â Â Â Â Â Â Â Â Â return (node);<br>
>Â Â Â Â Â Â Â Â return (xi->xref);<br>
>Â Â Â Â }<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â Â Â Â if (OF_getencprop(node, "phandle", &xref, sizeof(xref)) == -1 &&<br>
>Â Â Â Â Â Â OF_getencprop(node, "ibm,phandle", &xref, sizeof(xref)) == -1 &&<br>
> @@ -659,6 +714,7 @@ OF_xref_from_node(phandle_t node)<br>
>Â Â Â Â return (xref);<br>
>Â }<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â device_t<br>
>Â OF_device_from_xref(phandle_t xref)<br>
>Â {<br>
> @@ -845,4 +901,5 @@ OF_exit()<br>
>Â <br>
>Â Â Â Â for (;;)Â Â Â Â Â Â Â Â Â Â Â Â /* just in case */<br>
>Â Â Â Â Â Â Â Â ;<br>
> -}<br>
> \ No newline at end of file<br>
> +}<br>
> +#endif /* __rtems__ */<br>
> \ No newline at end of file<br>
> diff --git a/cpukit/libfreebsd/dev/ofw/openfirm.h b/cpukit/libfreebsd/dev/ofw/openfirm.h<br>
> index 74a7075367..00c0d4dd88 100644<br>
> --- a/cpukit/libfreebsd/dev/ofw/openfirm.h<br>
> +++ b/cpukit/libfreebsd/dev/ofw/openfirm.h<br>
> @@ -63,7 +63,13 @@<br>
>Â #define _DEV_OPENFIRM_H_<br>
>Â <br>
>Â #include <sys/types.h><br>
> +#ifndef __rtems__<br>
>Â #include <machine/_bus.h><br>
> +#else /* __rtems__ */<br>
> +#include <rtems.h><br>
> +#include <libfdt.h><br>
<br>
Maybe I missed it but for what do you need libfdt.h here?<br></blockquote><div><span class="gmail_default" style="font-size:small">Again, missed it while cleaning.</span>Â </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
> +#include "../../rtems-freebsd-helper.h"<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â /*<br>
>Â Â * Prototypes for Open Firmware Interface Routines<br>
> @@ -73,7 +79,12 @@ typedef uint32_t  ihandle_t;<br>
> typedef uint32_t   phandle_t;<br>
> typedef uint32_t   pcell_t;<br>
>Â <br>
> +#ifdef __rtems__<br>
> +typedef uint32_t   cell_t;<br>
> +#endif /* __rtems__ */<br>
> +<br>
>Â #ifdef _KERNEL<br>
> +#ifndef __rtems__<br>
>Â #include <sys/malloc.h><br>
>Â <br>
>Â #include <machine/ofw_machdep.h><br>
> @@ -86,8 +97,10 @@ MALLOC_DECLARE(M_OFWPROP);<br>
>Â Â */<br>
>Â <br>
> boolean_t  OF_install(char *name, int prio);<br>
> +#endif /* __rtems__*/<br>
> int     OF_init(void *cookie);<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â /*<br>
>Â Â * Known Open Firmware interface names<br>
>Â Â */<br>
> @@ -100,6 +113,7 @@ int        OF_init(void *cookie);<br>
>Â /* Generic functions */<br>
> int     OF_test(const char *name);<br>
> void     OF_printf(const char *fmt, ...);<br>
> +#endif /* __rtems__ */<br>
>Â <br>
>Â /* Device tree functions */<br>
> phandle_t  OF_peer(phandle_t node);<br>
> @@ -141,6 +155,7 @@ ssize_t      OF_package_to_path(phandle_t node, char *buf, size_t len);<br>
> phandle_t  OF_node_from_xref(phandle_t xref);<br>
> phandle_t  OF_xref_from_node(phandle_t node);<br>
>Â <br>
> +#ifndef __rtems__<br>
>Â /*<br>
>Â Â * When properties contain references to other nodes using xref handles it is<br>
>Â Â * often necessary to use interfaces provided by the driver for the referenced<br>
> @@ -158,9 +173,11 @@ void       OF_close(ihandle_t instance);<br>
> ssize_t       OF_read(ihandle_t instance, void *buf, size_t len);<br>
> ssize_t       OF_write(ihandle_t instance, const void *buf, size_t len);<br>
> int     OF_seek(ihandle_t instance, uint64_t where);<br>
> +#endif /* __rtems__ */<br>
>Â <br>
> phandle_t  OF_instance_to_package(ihandle_t instance);<br>
> ssize_t       OF_instance_to_path(ihandle_t instance, char *buf, size_t len);<br>
> +#ifndef __rtems__<br>
> int     OF_call_method(const char *method, ihandle_t instance,<br>
>Â Â Â Â Â Â Â Â Â Â int nargs, int nreturns, ...);<br>
>Â <br>
> @@ -183,5 +200,6 @@ int        OF_interpret(const char *cmd, int nreturns, ...);<br>
> int     OF_decode_addr(phandle_t dev, int regno, bus_space_tag_t *ptag,<br>
>Â Â Â Â Â Â Â Â Â Â bus_space_handle_t *phandle, bus_size_t *sz);<br>
>Â <br>
> +#endif /* __rtems__ */<br>
>Â #endif /* _KERNEL */<br>
>Â #endif /* _DEV_OPENFIRM_H_ */<br>
> \ No newline at end of file<br>
> <br>
</blockquote></div></div>