Author: nwhitehorn
Date: Tue Oct 22 20:57:24 2013
New Revision: 256932
URL: http://svnweb.freebsd.org/changeset/base/256932

Log:
  Add a new function (OF_getencprop()) that undoes the transformation applied
  by encode-int. Specifically, it takes a set of 32-bit cell values and
  changes them to host byte order. Most non-string instances of OF_getprop()
  should be using this function, which is a no-op on big-endian platforms.

Modified:
  head/sys/dev/ofw/openfirm.c
  head/sys/dev/ofw/openfirm.h

Modified: head/sys/dev/ofw/openfirm.c
==============================================================================
--- head/sys/dev/ofw/openfirm.c Tue Oct 22 20:50:41 2013        (r256931)
+++ head/sys/dev/ofw/openfirm.c Tue Oct 22 20:57:24 2013        (r256932)
@@ -64,6 +64,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/kernel.h>
 #include <sys/malloc.h>
 #include <sys/systm.h>
+#include <sys/endian.h>
 
 #include <machine/stdarg.h>
 
@@ -280,6 +281,21 @@ OF_getprop(phandle_t package, const char
        return (OFW_GETPROP(ofw_obj, package, propname, buf, buflen));
 }
 
+ssize_t
+OF_getencprop(phandle_t node, const char *propname, pcell_t *buf, size_t len)
+{
+       ssize_t retval;
+       int i;
+
+       KASSERT(len % 4 == 0, "Need a multiple of 4 bytes");
+
+       retval = OF_getprop(node, propname, buf, len);
+       for (i = 0; i < len/4; i++)
+               buf[i] = be32toh(buf[i]);
+
+       return (retval);
+}
+
 /*
  * 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

Modified: head/sys/dev/ofw/openfirm.h
==============================================================================
--- head/sys/dev/ofw/openfirm.h Tue Oct 22 20:50:41 2013        (r256931)
+++ head/sys/dev/ofw/openfirm.h Tue Oct 22 20:57:24 2013        (r256932)
@@ -105,6 +105,8 @@ phandle_t   OF_parent(phandle_t node);
 ssize_t                OF_getproplen(phandle_t node, const char *propname);
 ssize_t                OF_getprop(phandle_t node, const char *propname, void 
*buf,
                    size_t len);
+ssize_t                OF_getencprop(phandle_t node, const char *prop, pcell_t 
*buf,
+                   size_t len); /* Same as getprop, but maintains endianness */
 int            OF_hasprop(phandle_t node, const char *propname);
 ssize_t                OF_searchprop(phandle_t node, const char *propname, 
void *buf,
                    size_t len);
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to