Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 06 Sep 2014 08:25:55 -0700
From:      Nathan Whitehorn <nwhitehorn@freebsd.org>
To:        Ian Lepore <ian@freebsd.org>, src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r271190 - head/sys/dev/ofw
Message-ID:  <540B2783.9020808@freebsd.org>
In-Reply-To: <201409061511.s86FBZAB050025@svn.freebsd.org>
References:  <201409061511.s86FBZAB050025@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
What is this for? The way the specification works here explicitly 
requires this fallback.
-Nathan

On 09/06/14 08:11, Ian Lepore wrote:
> 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
>




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