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.
This commit is contained in:
parent
c40ecff1b2
commit
29fdf9ef00
@ -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 *propname, void *buf, size_t buflen)
|
||||
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
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user