From owner-svn-src-all@FreeBSD.ORG Sat Sep 6 15:11:36 2014 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 2AC6BB0B; Sat, 6 Sep 2014 15:11:36 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id F07241139; Sat, 6 Sep 2014 15:11:35 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s86FBZP8050027; Sat, 6 Sep 2014 15:11:35 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id s86FBZAB050025; Sat, 6 Sep 2014 15:11:35 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201409061511.s86FBZAB050025@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Sat, 6 Sep 2014 15:11:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r271190 - head/sys/dev/ofw X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Sep 2014 15:11:36 -0000 Author: ian Date: Sat Sep 6 15:11:35 2014 New Revision: 271190 URL: http://svnweb.freebsd.org/changeset/base/271190 Log: Add OF_xref_from_node_strict() which returns -1 if there is no xref handle for the node. The default routine returns the untranslated handle, which is sometimes useful, but sometimes you really need to know there's no entry in the xref<->node<->device translation table. 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 Sat Sep 6 13:21:07 2014 (r271189) +++ head/sys/dev/ofw/openfirm.c Sat Sep 6 15:11:35 2014 (r271190) @@ -554,15 +554,15 @@ OF_node_from_xref(phandle_t xref) return (node); } -phandle_t -OF_xref_from_node(phandle_t node) +static phandle_t +xref_from_node(phandle_t node, phandle_t notfoundvalue) { struct xrefinfo *xi; phandle_t xref; if (xref_init_done) { if ((xi = xrefinfo_find(node, FIND_BY_NODE)) == NULL) - return (node); + return (notfoundvalue); return (xi->xref); } @@ -570,10 +570,24 @@ OF_xref_from_node(phandle_t node) -1 && OF_getencprop(node, "ibm,phandle", &xref, sizeof(xref)) == -1 && OF_getencprop(node, "linux,phandle", &xref, sizeof(xref)) == -1) - return (node); + return (notfoundvalue); return (xref); } +phandle_t +OF_xref_from_node(phandle_t node) +{ + + return (xref_from_node(node, node)); +} + +phandle_t +OF_xref_from_node_strict(phandle_t node) +{ + + return (xref_from_node(node, -1)); +} + device_t OF_device_from_xref(phandle_t xref) { Modified: head/sys/dev/ofw/openfirm.h ============================================================================== --- head/sys/dev/ofw/openfirm.h Sat Sep 6 13:21:07 2014 (r271189) +++ head/sys/dev/ofw/openfirm.h Sat Sep 6 15:11:35 2014 (r271190) @@ -128,10 +128,12 @@ ssize_t OF_package_to_path(phandle_t no * Some OF implementations (IBM, FDT) have a concept of effective phandles * used for device-tree cross-references. Given one of these, returns the * real phandle. If one can't be found (or running on OF implementations - * without this property), returns its input. + * without this property), OF_xref_from_node() returns its input, while the + * strict version returns -1. */ phandle_t OF_node_from_xref(phandle_t xref); phandle_t OF_xref_from_node(phandle_t node); +phandle_t OF_xref_from_node_strict(phandle_t node); /* * When properties contain references to other nodes using xref handles it is