Module Name: src Committed By: pooka Date: Sun Jan 31 15:10:12 UTC 2010
Modified Files: src/sys/conf: files src/sys/kern: subr_autoconf.c Added Files: src/sys/kern: subr_device.c Log Message: Device accessors are only marginally related to autoconf, so put them into subr_device.c instead of having them in subr_autoconf.c. Since none of the copyrights in subr_autoconf.c really match the history of device accessors, I took the liberty of slapping (c) 2006 TNF onto subr_device.c. To generate a diff of this commit: cvs rdiff -u -r1.973 -r1.974 src/sys/conf/files cvs rdiff -u -r1.199 -r1.200 src/sys/kern/subr_autoconf.c cvs rdiff -u -r0 -r1.2 src/sys/kern/subr_device.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/conf/files diff -u src/sys/conf/files:1.973 src/sys/conf/files:1.974 --- src/sys/conf/files:1.973 Sun Jan 31 01:38:48 2010 +++ src/sys/conf/files Sun Jan 31 15:10:11 2010 @@ -1,4 +1,4 @@ -# $NetBSD: files,v 1.973 2010/01/31 01:38:48 pooka Exp $ +# $NetBSD: files,v 1.974 2010/01/31 15:10:11 pooka Exp $ # @(#)files.newconf 7.5 (Berkeley) 5/10/93 version 20090313 @@ -1479,6 +1479,7 @@ file kern/subr_callback.c file kern/subr_copy.c file kern/subr_debug.c debug +file kern/subr_device.c file kern/subr_devsw.c file kern/subr_disk.c file kern/subr_disk_open.c Index: src/sys/kern/subr_autoconf.c diff -u src/sys/kern/subr_autoconf.c:1.199 src/sys/kern/subr_autoconf.c:1.200 --- src/sys/kern/subr_autoconf.c:1.199 Tue Jan 19 21:54:53 2010 +++ src/sys/kern/subr_autoconf.c Sun Jan 31 15:10:12 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: subr_autoconf.c,v 1.199 2010/01/19 21:54:53 dyoung Exp $ */ +/* $NetBSD: subr_autoconf.c,v 1.200 2010/01/31 15:10:12 pooka Exp $ */ /* * Copyright (c) 1996, 2000 Christopher G. Demetriou @@ -77,7 +77,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: subr_autoconf.c,v 1.199 2010/01/19 21:54:53 dyoung Exp $"); +__KERNEL_RCSID(0, "$NetBSD: subr_autoconf.c,v 1.200 2010/01/31 15:10:12 pooka Exp $"); #ifdef _KERNEL_OPT #include "opt_ddb.h" @@ -1938,150 +1938,6 @@ } /* - * Accessor functions for the device_t type. - */ -devclass_t -device_class(device_t dev) -{ - - return dev->dv_class; -} - -cfdata_t -device_cfdata(device_t dev) -{ - - return dev->dv_cfdata; -} - -cfdriver_t -device_cfdriver(device_t dev) -{ - - return dev->dv_cfdriver; -} - -cfattach_t -device_cfattach(device_t dev) -{ - - return dev->dv_cfattach; -} - -int -device_unit(device_t dev) -{ - - return dev->dv_unit; -} - -const char * -device_xname(device_t dev) -{ - - return dev->dv_xname; -} - -device_t -device_parent(device_t dev) -{ - - return dev->dv_parent; -} - -bool -device_activation(device_t dev, devact_level_t level) -{ - int active_flags; - - active_flags = DVF_ACTIVE; - switch (level) { - case DEVACT_LEVEL_FULL: - active_flags |= DVF_CLASS_SUSPENDED; - /*FALLTHROUGH*/ - case DEVACT_LEVEL_DRIVER: - active_flags |= DVF_DRIVER_SUSPENDED; - /*FALLTHROUGH*/ - case DEVACT_LEVEL_BUS: - active_flags |= DVF_BUS_SUSPENDED; - break; - } - - return (dev->dv_flags & active_flags) == DVF_ACTIVE; -} - -bool -device_is_active(device_t dev) -{ - int active_flags; - - active_flags = DVF_ACTIVE; - active_flags |= DVF_CLASS_SUSPENDED; - active_flags |= DVF_DRIVER_SUSPENDED; - active_flags |= DVF_BUS_SUSPENDED; - - return (dev->dv_flags & active_flags) == DVF_ACTIVE; -} - -bool -device_is_enabled(device_t dev) -{ - return (dev->dv_flags & DVF_ACTIVE) == DVF_ACTIVE; -} - -bool -device_has_power(device_t dev) -{ - int active_flags; - - active_flags = DVF_ACTIVE | DVF_BUS_SUSPENDED; - - return (dev->dv_flags & active_flags) == DVF_ACTIVE; -} - -int -device_locator(device_t dev, u_int locnum) -{ - - KASSERT(dev->dv_locators != NULL); - return dev->dv_locators[locnum]; -} - -void * -device_private(device_t dev) -{ - - /* - * The reason why device_private(NULL) is allowed is to simplify the - * work of a lot of userspace request handlers (i.e., c/bdev - * handlers) which grab cfdriver_t->cd_units[n]. - * It avoids having them test for it to be NULL and only then calling - * device_private. - */ - return dev == NULL ? NULL : dev->dv_private; -} - -prop_dictionary_t -device_properties(device_t dev) -{ - - return dev->dv_properties; -} - -/* - * device_is_a: - * - * Returns true if the device is an instance of the specified - * driver. - */ -bool -device_is_a(device_t dev, const char *dname) -{ - - return strcmp(dev->dv_cfdriver->cd_name, dname) == 0; -} - -/* * device_find_by_xname: * * Returns the device of the given name or NULL if it doesn't exist. Added files: Index: src/sys/kern/subr_device.c diff -u /dev/null src/sys/kern/subr_device.c:1.2 --- /dev/null Sun Jan 31 15:10:12 2010 +++ src/sys/kern/subr_device.c Sun Jan 31 15:10:12 2010 @@ -0,0 +1,178 @@ +/* $NetBSD: subr_device.c,v 1.2 2010/01/31 15:10:12 pooka Exp $ */ + +/* + * Copyright (c) 2006 The NetBSD Foundation, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__KERNEL_RCSID(0, "$NetBSD: subr_device.c,v 1.2 2010/01/31 15:10:12 pooka Exp $"); + +#include <sys/param.h> +#include <sys/device.h> +#include <sys/systm.h> + +/* + * Accessor functions for the device_t type. + */ +devclass_t +device_class(device_t dev) +{ + + return dev->dv_class; +} + +cfdata_t +device_cfdata(device_t dev) +{ + + return dev->dv_cfdata; +} + +cfdriver_t +device_cfdriver(device_t dev) +{ + + return dev->dv_cfdriver; +} + +cfattach_t +device_cfattach(device_t dev) +{ + + return dev->dv_cfattach; +} + +int +device_unit(device_t dev) +{ + + return dev->dv_unit; +} + +const char * +device_xname(device_t dev) +{ + + return dev->dv_xname; +} + +device_t +device_parent(device_t dev) +{ + + return dev->dv_parent; +} + +bool +device_activation(device_t dev, devact_level_t level) +{ + int active_flags; + + active_flags = DVF_ACTIVE; + switch (level) { + case DEVACT_LEVEL_FULL: + active_flags |= DVF_CLASS_SUSPENDED; + /*FALLTHROUGH*/ + case DEVACT_LEVEL_DRIVER: + active_flags |= DVF_DRIVER_SUSPENDED; + /*FALLTHROUGH*/ + case DEVACT_LEVEL_BUS: + active_flags |= DVF_BUS_SUSPENDED; + break; + } + + return (dev->dv_flags & active_flags) == DVF_ACTIVE; +} + +bool +device_is_active(device_t dev) +{ + int active_flags; + + active_flags = DVF_ACTIVE; + active_flags |= DVF_CLASS_SUSPENDED; + active_flags |= DVF_DRIVER_SUSPENDED; + active_flags |= DVF_BUS_SUSPENDED; + + return (dev->dv_flags & active_flags) == DVF_ACTIVE; +} + +bool +device_is_enabled(device_t dev) +{ + return (dev->dv_flags & DVF_ACTIVE) == DVF_ACTIVE; +} + +bool +device_has_power(device_t dev) +{ + int active_flags; + + active_flags = DVF_ACTIVE | DVF_BUS_SUSPENDED; + + return (dev->dv_flags & active_flags) == DVF_ACTIVE; +} + +int +device_locator(device_t dev, u_int locnum) +{ + + KASSERT(dev->dv_locators != NULL); + return dev->dv_locators[locnum]; +} + +void * +device_private(device_t dev) +{ + + /* + * The reason why device_private(NULL) is allowed is to simplify the + * work of a lot of userspace request handlers (i.e., c/bdev + * handlers) which grab cfdriver_t->cd_units[n]. + * It avoids having them test for it to be NULL and only then calling + * device_private. + */ + return dev == NULL ? NULL : dev->dv_private; +} + +prop_dictionary_t +device_properties(device_t dev) +{ + + return dev->dv_properties; +} + +/* + * device_is_a: + * + * Returns true if the device is an instance of the specified + * driver. + */ +bool +device_is_a(device_t dev, const char *dname) +{ + + return strcmp(dev->dv_cfdriver->cd_name, dname) == 0; +}