Skip to content

Commit

Permalink
Expand OpenFirmware API with ofw_bus_node_status_okay
Browse files Browse the repository at this point in the history
 method

Method could be used before we can access device_t structure.
As per simple phandle_t handle we can access FDT to check
if specified node has been enabled.
It will be used in Marvell's common configuration code.

Submitted by:          Konrad Adamczyk <[email protected]>
Obtained from:         Semihalf
Sponsored by:          Stormshield
Reviewed by:           zbb, meloun-miracle-cz
Differential revision: https://reviews.freebsd.org/D9218
  • Loading branch information
Wojciech Macek authored and Wojciech Macek committed Jan 25, 2017
1 parent c0f1c1f commit e5e94d2
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
19 changes: 19 additions & 0 deletions sys/dev/ofw/ofw_bus_subr.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ __FBSDID("$FreeBSD$");
#include "ofw_bus_if.h"

#define OFW_COMPAT_LEN 255
#define OFW_STATUS_LEN 16

int
ofw_bus_gen_setup_devinfo(struct ofw_bus_devinfo *obd, phandle_t node)
Expand Down Expand Up @@ -179,6 +180,24 @@ ofw_bus_status_okay(device_t dev)
return (0);
}

int
ofw_bus_node_status_okay(phandle_t node)
{
char status[OFW_STATUS_LEN];
int len;

len = OF_getproplen(node, "status");
if (len <= 0)
return (1);

OF_getprop(node, "status", status, OFW_STATUS_LEN);
if ((len == 5 && (bcmp(status, "okay", len) == 0)) ||
(len == 3 && (bcmp(status, "ok", len))))
return (1);

return (0);
}

static int
ofw_bus_node_is_compatible_int(const char *compat, int len,
const char *onecompat)
Expand Down
1 change: 1 addition & 0 deletions sys/dev/ofw/ofw_bus_subr.h
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ int ofw_bus_intr_by_rid(device_t, phandle_t, int, phandle_t *, int *,
/* Helper to get device status property */
const char *ofw_bus_get_status(device_t dev);
int ofw_bus_status_okay(device_t dev);
int ofw_bus_node_status_okay(phandle_t node);

/* Helper to get node's interrupt parent */
phandle_t ofw_bus_find_iparent(phandle_t);
Expand Down

0 comments on commit e5e94d2

Please sign in to comment.