summaryrefslogtreecommitdiffstats
path: root/sys/kern/device_if.m
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/device_if.m')
-rw-r--r--sys/kern/device_if.m127
1 files changed, 127 insertions, 0 deletions
diff --git a/sys/kern/device_if.m b/sys/kern/device_if.m
new file mode 100644
index 0000000..005eb38
--- /dev/null
+++ b/sys/kern/device_if.m
@@ -0,0 +1,127 @@
+#
+# Copyright (c) 1998 Doug Rabson
+# 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 AUTHOR 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 AUTHOR 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.
+#
+# $FreeBSD$
+#
+
+#include <sys/bus.h>
+
+INTERFACE device;
+
+#
+# Default implementations of some methods.
+#
+CODE {
+ static int null_shutdown(device_t dev)
+ {
+ return 0;
+ }
+
+ static int null_suspend(device_t dev)
+ {
+ return 0;
+ }
+
+ static int null_resume(device_t dev)
+ {
+ return 0;
+ }
+};
+
+#
+# Probe to see if the device is present. Return 0 if the device exists,
+# ENXIO if it cannot be found. If some other error happens during the
+# probe (such as a memory allocation failure), an appropriate error code
+# should be returned. For cases where more than one driver matches a
+# device, a priority value can be returned. In this case, success codes
+# are values less than or equal to zero with the highest value representing
+# the best match. Failure codes are represented by positive values and
+# the regular unix error codes should be used for the purpose.
+
+# If a driver returns a success code which is less than zero, it must
+# not assume that it will be the same driver which is attached to the
+# device. In particular, it must not assume that any values stored in
+# the softc structure will be available for its attach method and any
+# resources allocated during probe must be released and re-allocated
+# if the attach method is called. If a success code of zero is
+# returned, the driver can assume that it will be the one attached.
+#
+# Devices which implement busses should use this method to probe for
+# the existence of devices attached to the bus and add them as
+# children. If this is combined with the use of bus_generic_attach,
+# the child devices will be automatically probed and attached.
+#
+METHOD int probe {
+ device_t dev;
+};
+
+#
+# Called by a parent bus to add new devices to the bus.
+#
+STATICMETHOD void identify {
+ driver_t *driver;
+ device_t parent;
+};
+
+#
+# Attach a device to the system. The probe method will have been
+# called and will have indicated that the device exists. This routine
+# should initialise the hardware and allocate other system resources
+# (such as devfs entries). Returns 0 on success.
+#
+METHOD int attach {
+ device_t dev;
+};
+
+#
+# Detach a device. This can be called if the user is replacing the
+# driver software or if a device is about to be physically removed
+# from the system (e.g. for pccard devices). Returns 0 on success.
+#
+METHOD int detach {
+ device_t dev;
+};
+
+#
+# This is called during system shutdown to allow the driver to put the
+# hardware into a consistent state for rebooting the computer.
+#
+METHOD int shutdown {
+ device_t dev;
+} DEFAULT null_shutdown;
+
+#
+# This is called by the power-management subsystem when a suspend has been
+# requested by the user or by some automatic mechanism. This gives
+# drivers a chance to veto the suspend or save their configuration before
+# power is removed.
+#
+METHOD int suspend {
+ device_t dev;
+} DEFAULT null_suspend;
+
+METHOD int resume {
+ device_t dev;
+} DEFAULT null_resume;
OpenPOWER on IntegriCloud