From owner-svn-src-head@FreeBSD.ORG Sat Aug 18 11:25:07 2012 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D12631065672; Sat, 18 Aug 2012 11:25:07 +0000 (UTC) (envelope-from hrs@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BBB0C8FC14; Sat, 18 Aug 2012 11:25:07 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7IBP7Yt017421; Sat, 18 Aug 2012 11:25:07 GMT (envelope-from hrs@svn.freebsd.org) Received: (from hrs@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7IBP78p017416; Sat, 18 Aug 2012 11:25:07 GMT (envelope-from hrs@svn.freebsd.org) Message-Id: <201208181125.q7IBP78p017416@svn.freebsd.org> From: Hiroki Sato Date: Sat, 18 Aug 2012 11:25:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r239366 - head/sys/dev/ofw X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Aug 2012 11:25:08 -0000 Author: hrs Date: Sat Aug 18 11:25:07 2012 New Revision: 239366 URL: http://svn.freebsd.org/changeset/base/239366 Log: - Add OF_hasprop() and ofw_bus_has_prop(). These can be used to check existence of the property. - Fix ofw_bus_is_compatible{,_strict}() to prevent substring match in the compatible string. Reviewed by: raj Modified: head/sys/dev/ofw/ofw_bus_subr.c head/sys/dev/ofw/ofw_bus_subr.h head/sys/dev/ofw/openfirm.c head/sys/dev/ofw/openfirm.h Modified: head/sys/dev/ofw/ofw_bus_subr.c ============================================================================== --- head/sys/dev/ofw/ofw_bus_subr.c Sat Aug 18 11:15:30 2012 (r239365) +++ head/sys/dev/ofw/ofw_bus_subr.c Sat Aug 18 11:25:07 2012 (r239366) @@ -167,7 +167,8 @@ ofw_bus_is_compatible(device_t dev, cons onelen = strlen(onecompat); while (len > 0) { - if (strncasecmp(compat, onecompat, onelen) == 0) + if (strlen(compat) == onelen && + strncasecmp(compat, onecompat, onelen) == 0) /* Found it. */ return (1); @@ -183,16 +184,30 @@ int ofw_bus_is_compatible_strict(device_t dev, const char *compatible) { const char *compat; + size_t len; if ((compat = ofw_bus_get_compat(dev)) == NULL) return (0); - if (strncasecmp(compat, compatible, strlen(compatible)) == 0) + len = strlen(compatible); + if (strlen(compat) == len && + strncasecmp(compat, compatible, len) == 0) return (1); return (0); } +int +ofw_bus_has_prop(device_t dev, const char *propname) +{ + phandle_t node; + + if ((node = ofw_bus_get_node(dev)) == -1) + return (0); + + return (OF_hasprop(node, propname)); +} + #ifndef FDT void ofw_bus_setup_iinfo(phandle_t node, struct ofw_bus_iinfo *ii, int intrsz) Modified: head/sys/dev/ofw/ofw_bus_subr.h ============================================================================== --- head/sys/dev/ofw/ofw_bus_subr.h Sat Aug 18 11:15:30 2012 (r239365) +++ head/sys/dev/ofw/ofw_bus_subr.h Sat Aug 18 11:25:07 2012 (r239366) @@ -74,4 +74,7 @@ void ofw_bus_find_iparent(phandle_t); int ofw_bus_is_compatible(device_t, const char *); int ofw_bus_is_compatible_strict(device_t, const char *); +/* Helper routine for checking existence of a prop */ +int ofw_bus_has_prop(device_t, const char *); + #endif /* !_DEV_OFW_OFW_BUS_SUBR_H_ */ Modified: head/sys/dev/ofw/openfirm.c ============================================================================== --- head/sys/dev/ofw/openfirm.c Sat Aug 18 11:15:30 2012 (r239365) +++ head/sys/dev/ofw/openfirm.c Sat Aug 18 11:25:07 2012 (r239366) @@ -261,6 +261,14 @@ OF_getproplen(phandle_t package, const c return (OFW_GETPROPLEN(ofw_obj, package, propname)); } +/* Check existence of a property of a package. */ +int +OF_hasprop(phandle_t package, const char *propname) +{ + + return (OF_getproplen(package, propname) >= 0 ? 1 : 0); +} + /* Get the value of a property of a package. */ ssize_t OF_getprop(phandle_t package, const char *propname, void *buf, size_t buflen) Modified: head/sys/dev/ofw/openfirm.h ============================================================================== --- head/sys/dev/ofw/openfirm.h Sat Aug 18 11:15:30 2012 (r239365) +++ head/sys/dev/ofw/openfirm.h Sat Aug 18 11:25:07 2012 (r239366) @@ -105,6 +105,7 @@ 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); +int OF_hasprop(phandle_t node, const char *propname); ssize_t OF_searchprop(phandle_t node, const char *propname, void *buf, size_t len); ssize_t OF_getprop_alloc(phandle_t node, const char *propname,