Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 25 Jan 2017 10:28:21 +0000 (UTC)
From:      Wojciech Macek <wma@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r312745 - head/sys/dev/ofw
Message-ID:  <201701251028.v0PASLcf047148@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: wma
Date: Wed Jan 25 10:28:21 2017
New Revision: 312745
URL: https://svnweb.freebsd.org/changeset/base/312745

Log:
  Expand OpenFirmware API with ofw_bus_node_status_okay
   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 <ka@semihalf.com>
  Obtained from:         Semihalf
  Sponsored by:          Stormshield
  Reviewed by:           zbb, meloun-miracle-cz
  Differential revision: https://reviews.freebsd.org/D9218

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

Modified: head/sys/dev/ofw/ofw_bus_subr.c
==============================================================================
--- head/sys/dev/ofw/ofw_bus_subr.c	Wed Jan 25 10:25:59 2017	(r312744)
+++ head/sys/dev/ofw/ofw_bus_subr.c	Wed Jan 25 10:28:21 2017	(r312745)
@@ -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)
@@ -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)

Modified: head/sys/dev/ofw/ofw_bus_subr.h
==============================================================================
--- head/sys/dev/ofw/ofw_bus_subr.h	Wed Jan 25 10:25:59 2017	(r312744)
+++ head/sys/dev/ofw/ofw_bus_subr.h	Wed Jan 25 10:28:21 2017	(r312745)
@@ -100,6 +100,7 @@ int ofw_bus_intr_by_rid(device_t, phandl
 /* 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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201701251028.v0PASLcf047148>