diff options
author | imp <imp@FreeBSD.org> | 2006-09-25 20:12:13 +0000 |
---|---|---|
committer | imp <imp@FreeBSD.org> | 2006-09-25 20:12:13 +0000 |
commit | 5d28f75c8db6529a2f7afa5744a39153bb64af54 (patch) | |
tree | b55df7313fd5308f9df413beba703d52a1290cb2 /share | |
parent | 68659a70ac404fb675a37380334b8b97159702d2 (diff) | |
download | FreeBSD-src-5d28f75c8db6529a2f7afa5744a39153bb64af54.zip FreeBSD-src-5d28f75c8db6529a2f7afa5744a39153bb64af54.tar.gz |
Document config_intrhook.
MFC After: 250 millifortnights
Diffstat (limited to 'share')
-rw-r--r-- | share/man/man9/Makefile | 3 | ||||
-rw-r--r-- | share/man/man9/config_intrhook.9 | 102 |
2 files changed, 105 insertions, 0 deletions
diff --git a/share/man/man9/Makefile b/share/man/man9/Makefile index c602ce5..a0941ba 100644 --- a/share/man/man9/Makefile +++ b/share/man/man9/Makefile @@ -38,6 +38,7 @@ MAN= accept_filter.9 \ byteorder.9 \ cd.9 \ condvar.9 \ + config_intrhook.9 \ contigmalloc.9 \ copy.9 \ critical_enter.9 \ @@ -498,6 +499,8 @@ MLINKS+=condvar.9 cv_broadcast.9 \ condvar.9 cv_wait.9 \ condvar.9 cv_wait_sig.9 \ condvar.9 cv_wmesg.9 +MLINKS+=config_intrhook.9 config_intrhook_disestablish.9 \ + config_intrhook.9 config_intrhook_establish.9 MLINKS+=contigmalloc.9 contigfree.9 MLINKS+=copy.9 copyin.9 \ copy.9 copyinstr.9 \ diff --git a/share/man/man9/config_intrhook.9 b/share/man/man9/config_intrhook.9 new file mode 100644 index 0000000..7f2b67f --- /dev/null +++ b/share/man/man9/config_intrhook.9 @@ -0,0 +1,102 @@ +.\" +.\" Copyright (C) 2006 M. Warner Losh <imp@freebsd.org>. 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(s), this list of conditions and the following disclaimer as +.\" the first lines of this file unmodified other than the possible +.\" addition of one or more copyright notices. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice(s), 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 COPYRIGHT HOLDER(S) ``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 COPYRIGHT HOLDER(S) 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$ +.\" +.Dd September 24, 2006 +.Dt CONFIG_INTRHOOK 9 +.Os +.Sh NAME +.Nm config_intrhook +.Nd schedules a function to be run after interrupts have been enabled, +but before root is mounted. +.Sh SYNOPSIS +.In sys/kernel.h +.Ft "int" +.Fn config_intrhook_establish "struct intr_config_hook *hook" +.Ft "void" +.Fn config_intrhook_disestablish "struct intr_config_hook *hook" +.Sh DESCRIPTION +The +.Fn config_intrhook_establish +function schedules a function to be run after interrupts have been +enabled, but before root is mounted. +If the system has already passed this point in its initialization, +the function is called immediately. +.Pp +The +.Fn config_intrhook_disestablish +function removes the entry from the hook queue. +.Pp +Before root is mounted, all the previously established hooks are +run. +The boot process is then stalled until all handlers remove their hook +from the hook queue with +.Fn config_intrhook_disestablish . +The boot process then proceeds to attempt to mount the root file +system. +Any driver that can potentially provide devices they wish to be +mounted as root must use either this hook, or probe all these devices +in the initial probe. +Since interrupts are disabled during the probe process, many drivers +need a method to probe for devices with interrupts enabled. +.Pp +The requests are made with the +.Vt "intr_config_hook" +structure. +This structure is defined as follows: +.Bd -literal +struct intr_config_hook { + TAILQ_ENTRY(intr_config_hook) ich_links;/* Private */ + void (*ich_func)(void *arg); /* function to call */ + void *ich_arg; /* Argument to call */ +}; +.Ed +.Pp +Storage for the +.Vt intr_config_hook +structure must be provided by the driver. +It must be stable from just before the hook is established until +after the hook is disestablished. +.Pp +Specifically, hooks are run at +.Fn SI_SUB_INT_CONFIG_HOOKS , +which is immeidately after the scheduler is started, +and just before the root file system device is discovered. +.Sh RETURN VALUES +Zero return values mean success. +Non-zero return values mean failure. +.Sh SEE ALSO +.Xr DEVICE_ATTACH 9 +.Sh HISTORY +These functions were introduced in +.Fx 3.0 +with the CAM subsystem, but are available for any driver to use. +.Sh AUTHORS +The functions were written by +.An Justin Gibbs Aq gibbs@freebsd.org . +This manual page was written by +.An M. Warner Losh Aq imp@freebsd.org . |