diff options
| author | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-25 19:59:05 -0400 |
|---|---|---|
| committer | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-25 19:59:05 -0400 |
| commit | 1f19f33e45791ea59aed048796fc68672c6723a5 (patch) | |
| tree | 54625fba89e91d1c2177801ec635e8528bba937f /static/freebsd/man9 | |
| parent | ac5e55f5f2af5b92794c2aded46c6bae85b5f5ed (diff) | |
docs: Removed Precompiled HTML
Diffstat (limited to 'static/freebsd/man9')
471 files changed, 0 insertions, 76362 deletions
diff --git a/static/freebsd/man9/BUF_ISLOCKED.9 4.html b/static/freebsd/man9/BUF_ISLOCKED.9 4.html deleted file mode 100644 index d2ed0b6a..00000000 --- a/static/freebsd/man9/BUF_ISLOCKED.9 4.html +++ /dev/null @@ -1,68 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUF_ISLOCKED(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUF_ISLOCKED(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUF_ISLOCKED</code> — - <span class="Nd">returns the state of the lock linked to the - buffer</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/uio.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bio.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/buf.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">BUF_ISLOCKED</code>(<var class="Fa" style="white-space: nowrap;">struct - buf *bp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#BUF_ISLOCKED"><code class="Fn" id="BUF_ISLOCKED">BUF_ISLOCKED</code></a>() - function returns the status of the lock linked to the buffer in relation to - curthread.</p> -<p class="Pp">It can return:</p> -<dl class="Bl-tag"> - <dt id="LK_EXCLUSIVE"><a class="permalink" href="#LK_EXCLUSIVE"><code class="Dv">LK_EXCLUSIVE</code></a></dt> - <dd>An exclusive lock is held by curthread.</dd> - <dt id="LK_EXCLOTHER"><a class="permalink" href="#LK_EXCLOTHER"><code class="Dv">LK_EXCLOTHER</code></a></dt> - <dd>An exclusive lock is held by someone other than curthread.</dd> - <dt id="LK_SHARED"><a class="permalink" href="#LK_SHARED"><code class="Dv">LK_SHARED</code></a></dt> - <dd>A shared lock is held.</dd> - <dt id="0"><a class="permalink" href="#0"><code class="Li">0</code></a></dt> - <dd>The lock is not held by anyone.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">buf(9)</a>, <a class="Xr">BUF_LOCK(9)</a>, - <a class="Xr">BUF_UNLOCK(9)</a>, <a class="Xr">lockmgr(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Attilio - Rao</span> - <<a class="Mt" href="mailto:attilio@FreeBSD.org">attilio@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 26, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/BUF_LOCK.9 4.html b/static/freebsd/man9/BUF_LOCK.9 4.html deleted file mode 100644 index 6876648a..00000000 --- a/static/freebsd/man9/BUF_LOCK.9 4.html +++ /dev/null @@ -1,71 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUF_LOCK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUF_LOCK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUF_LOCK</code> — <span class="Nd">locks a - buffer</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/uio.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bio.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/buf.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">BUF_LOCK</code>(<var class="Fa" style="white-space: nowrap;">struct - buf *bp</var>, <var class="Fa" style="white-space: nowrap;">int - locktype</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#BUF_LOCK"><code class="Fn" id="BUF_LOCK">BUF_LOCK</code></a>() - function locks the given buffer. If the lock is already held this call will - block until it can acquire the lock unless <code class="Dv">LK_NOWAIT</code> - is set.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">bp</var></dt> - <dd>The buffer to lock.</dd> - <dt><var class="Fa">locktype</var></dt> - <dd>Flags controlling the type of lock. See <a class="Xr">lockmgr(9)</a> for - details.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">A value of 0 is returned upon success. See - <a class="Xr">lockmgr(9)</a> for information on non-zero return values.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">buf(9)</a>, <a class="Xr">BUF_TIMELOCK(9)</a>, - <a class="Xr">BUF_UNLOCK(9)</a>, <a class="Xr">lockmgr(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 9, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/BUF_LOCKFREE.9 4.html b/static/freebsd/man9/BUF_LOCKFREE.9 4.html deleted file mode 100644 index 5d55fe83..00000000 --- a/static/freebsd/man9/BUF_LOCKFREE.9 4.html +++ /dev/null @@ -1,61 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUF_LOCKFREE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUF_LOCKFREE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUF_LOCKFREE</code> — - <span class="Nd">destroys a buffer's lock</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/uio.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bio.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/buf.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">BUF_LOCKFREE</code>(<var class="Fa" style="white-space: nowrap;">struct - buf *bp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#BUF_LOCKFREE"><code class="Fn" id="BUF_LOCKFREE">BUF_LOCKFREE</code></a>() - macro destroys the buffer lock. The lock must not be held when this macro is - called or a panic will result.</p> -<p class="Pp">Its argument is:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">bp</var></dt> - <dd>The buffer whose lock is to be destroyed.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">buf(9)</a>, <a class="Xr">BUF_LOCK(9)</a>, - <a class="Xr">BUF_TIMELOCK(9)</a>, <a class="Xr">BUF_UNLOCK(9)</a>, - <a class="Xr">lockdestroy(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 9, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/BUF_LOCKINIT.9 4.html b/static/freebsd/man9/BUF_LOCKINIT.9 4.html deleted file mode 100644 index 1365919a..00000000 --- a/static/freebsd/man9/BUF_LOCKINIT.9 4.html +++ /dev/null @@ -1,60 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUF_LOCKINIT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUF_LOCKINIT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUF_LOCKINIT</code> — - <span class="Nd">initializes a buffer lock</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/uio.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bio.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/buf.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">BUF_LOCKINIT</code>(<var class="Fa" style="white-space: nowrap;">struct - buf *bp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#BUF_LOCKINIT"><code class="Fn" id="BUF_LOCKINIT">BUF_LOCKINIT</code></a>() - macro initializes a buffer lock.</p> -<p class="Pp">Its argument is:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">bp</var></dt> - <dd>The buffer whose lock it to be initialized.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">buf(9)</a>, <a class="Xr">BUF_LOCK(9)</a>, - <a class="Xr">BUF_TIMELOCK(9)</a>, <a class="Xr">BUF_UNLOCK(9)</a>, - <a class="Xr">lockinit(9)</a>, <a class="Xr">lockmgr(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 6, 2005</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/BUF_RECURSED.9 4.html b/static/freebsd/man9/BUF_RECURSED.9 4.html deleted file mode 100644 index 753ddf80..00000000 --- a/static/freebsd/man9/BUF_RECURSED.9 4.html +++ /dev/null @@ -1,63 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUF_RECURSED(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUF_RECURSED(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUF_RECURSED</code> — - <span class="Nd">checks if the lock linked to the buffer is - recursed</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/uio.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bio.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/buf.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">BUF_RECURSED</code>(<var class="Fa" style="white-space: nowrap;">struct - buf *bp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#BUF_RECURSED"><code class="Fn" id="BUF_RECURSED">BUF_RECURSED</code></a>() - function checks if the lock linked to the given buffer is recursed and - returns 1 if the condition is true, 0 otherwise.</p> -<p class="Pp">Its argument is:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">bp</var></dt> - <dd>The buffer linked to the lock. See <a class="Xr">lockmgr_recursed(9)</a> - for details.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">buf(9)</a>, <a class="Xr">BUF_LOCK(9)</a>, - <a class="Xr">BUF_UNLOCK(9)</a>, <a class="Xr">lockmgr(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Attilio - Rao</span> - <<a class="Mt" href="mailto:attilio@FreeBSD.org">attilio@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 22, 2008</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/BUF_TIMELOCK.9 4.html b/static/freebsd/man9/BUF_TIMELOCK.9 4.html deleted file mode 100644 index 24b3f3a9..00000000 --- a/static/freebsd/man9/BUF_TIMELOCK.9 4.html +++ /dev/null @@ -1,80 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUF_TIMELOCK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUF_TIMELOCK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUF_TIMELOCK</code> — - <span class="Nd">locks a buffer</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/uio.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bio.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/buf.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">BUF_TIMELOCK</code>(<var class="Fa" style="white-space: nowrap;">struct - buf *bp</var>, <var class="Fa" style="white-space: nowrap;">int - locktype</var>, <var class="Fa" style="white-space: nowrap;">char - *wmesg</var>, <var class="Fa" style="white-space: nowrap;">int catch</var>, - <var class="Fa" style="white-space: nowrap;">int timo</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#BUF_TIMELOCK"><code class="Fn" id="BUF_TIMELOCK">BUF_TIMELOCK</code></a>() - function locks the given buffer, and limits the amount of time it will sleep - to <var class="Fa">timo</var> and OR's <var class="Fa">catch</var> into the - sleep's priority. <var class="Fa">wmesg</var> is the wmesg used in the - sleep.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">bp</var></dt> - <dd>The buffer to lock.</dd> - <dt><var class="Fa">locktype</var></dt> - <dd>Flags controlling the type of lock. See <a class="Xr">lockmgr(9)</a> for - details.</dd> - <dt><var class="Fa">wmesg</var></dt> - <dd>The wmesg used in any sleeps while acquiring the lock.</dd> - <dt><var class="Fa">catch</var></dt> - <dd>Priority OR'd into the sleep's priority.</dd> - <dt><var class="Fa">timo</var></dt> - <dd>The timeout for any sleeps encountered during the lock.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">A value of 0 is returned on success. See - <a class="Xr">lockmgr(9)</a> for details on non-zero return values.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">buf(9)</a>, <a class="Xr">BUF_LOCK(9)</a>, - <a class="Xr">BUF_UNLOCK(9)</a>, <a class="Xr">lockmgr(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 9, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/BUF_UNLOCK.9 4.html b/static/freebsd/man9/BUF_UNLOCK.9 4.html deleted file mode 100644 index 370d0fbe..00000000 --- a/static/freebsd/man9/BUF_UNLOCK.9 4.html +++ /dev/null @@ -1,62 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUF_UNLOCK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUF_UNLOCK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUF_UNLOCK</code> — - <span class="Nd">unlocks a locked buffer</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/uio.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bio.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/buf.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">BUF_UNLOCK</code>(<var class="Fa" style="white-space: nowrap;">struct - buf *bp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#BUF_UNLOCK"><code class="Fn" id="BUF_UNLOCK">BUF_UNLOCK</code></a>() - function unlocks a buffer that was previously locked with - <a class="permalink" href="#BUF_LOCK"><code class="Fn" id="BUF_LOCK">BUF_LOCK</code></a>() - or - <a class="permalink" href="#BUF_TIMELOCK"><code class="Fn" id="BUF_TIMELOCK">BUF_TIMELOCK</code></a>().</p> -<p class="Pp">Its argument is:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">bp</var></dt> - <dd>The buffer to unlock. The buffer must already be locked.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">buf(9)</a>, <a class="Xr">BUF_LOCK(9)</a>, - <a class="Xr">BUF_TIMELOCK(9)</a>, <a class="Xr">lockmgr(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 9, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/BUS_ADD_CHILD.9 3.html b/static/freebsd/man9/BUS_ADD_CHILD.9 3.html deleted file mode 100644 index c64b8b05..00000000 --- a/static/freebsd/man9/BUS_ADD_CHILD.9 3.html +++ /dev/null @@ -1,77 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_ADD_CHILD(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_ADD_CHILD(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUS_ADD_CHILD</code> — - <span class="Nd">add a device node to the tree with a given - priority</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">device_t</var> - <br/> - <code class="Fn">BUS_ADD_CHILD</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">int order</var>, - <var class="Fa" style="white-space: nowrap;">const char *name</var>, - <var class="Fa" style="white-space: nowrap;">int unit</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#BUS_ADD_CHILD"><code class="Fn" id="BUS_ADD_CHILD">BUS_ADD_CHILD</code></a>() - method is used by the driver identify routine to add devices to the tree. It - can also be used to add children to buses that implement this routine in - other contexts, although the behavior is bus specific. Please see - <a class="Xr">device_add_child(9)</a> for more details. The interface is the - same as <a class="Xr">device_add_child(9)</a> however, the bus' - <code class="Fn">BUS_ADD_CHILD</code>() is called.</p> -<p class="Pp" id="BUS_ADD_CHILD~2">Buses implementing - <a class="permalink" href="#BUS_ADD_CHILD~2"><code class="Fn">BUS_ADD_CHILD</code></a>() - should insert the device into the tree using - <a class="Xr">device_add_child(9)</a> before adding things such as their own - ivars and resource lists to the device. - <code class="Fn">BUS_ADD_CHILD</code>() is not called by - <a class="Xr">device_add_child(9)</a>. - <code class="Fn">BUS_ADD_CHILD</code>() instead calls - <a class="Xr">device_add_child(9)</a>.</p> -<p class="Pp" id="BUS_ADD_CHILD~3">A panic will result when called for a bus - that does not implement - <a class="permalink" href="#BUS_ADD_CHILD~3"><code class="Fn">BUS_ADD_CHILD</code></a>(). - Some buses require a special bus-specific routine to be called instead of - <code class="Fn">BUS_ADD_CHILD</code>().</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">BUS_ADD_CHILD</code>() method returns - <var class="Vt">device_t</var> added to the tree, or - <code class="Dv">NULL</code> to indicate failure.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a>, - <a class="Xr">device_add_child(9)</a>, <a class="Xr">driver(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">M. Warner - Losh</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 8, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/BUS_BIND_INTR.9 3.html b/static/freebsd/man9/BUS_BIND_INTR.9 3.html deleted file mode 100644 index f22ffda2..00000000 --- a/static/freebsd/man9/BUS_BIND_INTR.9 3.html +++ /dev/null @@ -1,85 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_BIND_INTR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_BIND_INTR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUS_BIND_INTR</code>, - <code class="Nm">bus_bind_intr</code> — <span class="Nd">bind an - interrupt resource to a specific CPU</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">BUS_BIND_INTR</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">device_t child</var>, <var class="Fa">struct resource - *irq</var>, <var class="Fa">int cpu</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_bind_intr</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">struct resource - *irq</var>, <var class="Fa" style="white-space: nowrap;">int cpu</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#BUS_BIND_INTR"><code class="Fn" id="BUS_BIND_INTR">BUS_BIND_INTR</code></a>() - method allows an interrupt resource to be pinned to a specific CPU. The - interrupt resource must have an interrupt handler attached via - <a class="Xr">BUS_SETUP_INTR(9)</a>. The <var class="Fa">cpu</var> parameter - corresponds to the ID of a valid CPU in the system. Binding an interrupt - restricts the <a class="Xr">cpuset(2)</a> of any associated interrupt - threads to only include the specified CPU. It may also direct the low-level - interrupt handling of the interrupt to the specified CPU as well, but this - behavior is platform-dependent. If the value <code class="Dv">NOCPU</code> - is used for <var class="Fa">cpu</var>, then the interrupt will be - “unbound” which restores any associated interrupt threads back - to the default cpuset.</p> -<p class="Pp">Non-sleepable locks such as mutexes should not be held across - calls to these functions.</p> -<p class="Pp" id="bus_bind_intr">The - <a class="permalink" href="#bus_bind_intr"><code class="Fn">bus_bind_intr</code></a>() - function is a simple wrapper around - <code class="Fn">BUS_BIND_INTR</code>().</p> -<p class="Pp" id="BUS_BIND_INTR~2">Note that currently there is no attempt made - to arbitrate between multiple bind requests for the same interrupt from - either the same device or multiple devices. There is also no arbitration - between interrupt binding requests submitted by userland via - <a class="Xr">cpuset(2)</a> and - <a class="permalink" href="#BUS_BIND_INTR~2"><code class="Fn">BUS_BIND_INTR</code></a>(). - The most recent binding request is the one that will be in effect.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an appropriate error is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">cpuset(2)</a>, <a class="Xr">BUS_SETUP_INTR(9)</a>, - <a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Fn">BUS_BIND_INTR</code>() method and - <code class="Fn">bus_bind_intr</code>() functions first appeared in - <span class="Ux">FreeBSD 7.2</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 14, 2009</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/BUS_CHILD_DELETED.9 4.html b/static/freebsd/man9/BUS_CHILD_DELETED.9 4.html deleted file mode 100644 index 25f74dfd..00000000 --- a/static/freebsd/man9/BUS_CHILD_DELETED.9 4.html +++ /dev/null @@ -1,52 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_CHILD_DELETED(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_CHILD_DELETED(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUS_CHILD_DELETED</code> — - <span class="Nd">notify a bus device that a child is being - deleted</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">BUS_CHILD_DELETED</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">device_t - child</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#BUS_CHILD_DELETED"><code class="Fn" id="BUS_CHILD_DELETED">BUS_CHILD_DELETED</code></a>() - method is invoked by the new-bus framework when a device is deleted. A bus - driver can provide an implementation of this method to release bus-specific - resources associated with a device such as instance variables.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">BUS_ADD_CHILD(9)</a>, - <a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Fn">BUS_CHILD_DELETED</code>() method first - appeared in <span class="Ux">FreeBSD 10.0</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 21, 2012</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/BUS_CHILD_DETACHED.9 4.html b/static/freebsd/man9/BUS_CHILD_DETACHED.9 4.html deleted file mode 100644 index 411252ab..00000000 --- a/static/freebsd/man9/BUS_CHILD_DETACHED.9 4.html +++ /dev/null @@ -1,48 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_CHILD_DETACHED(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_CHILD_DETACHED(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUS_CHILD_DETACHED</code> — - <span class="Nd">notify a bus device that a child was detached</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">BUS_CHILD_DETACHED</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">device_t - child</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#BUS_CHILD_DETACHED"><code class="Fn" id="BUS_CHILD_DETACHED">BUS_CHILD_DETACHED</code></a>() - method is invoked by the new-bus framework after a device is detached or if - a driver's attach routine (see <a class="Xr">DEVICE_ATTACH(9)</a>) fails. A - bus driver can provide an implementation of this method to reclaim any - resources allocated on behalf of the child or to cleanup state not properly - released by a <a class="Xr">DEVICE_DETACH(9)</a> method.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a>, - <a class="Xr">DEVICE_DETACH(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 9, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/BUS_CHILD_LOCATION.9 4.html b/static/freebsd/man9/BUS_CHILD_LOCATION.9 4.html deleted file mode 100644 index 64f10140..00000000 --- a/static/freebsd/man9/BUS_CHILD_LOCATION.9 4.html +++ /dev/null @@ -1,59 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_CHILD_LOCATION(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_CHILD_LOCATION(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUS_CHILD_LOCATION</code> — - <span class="Nd">obtain the location of a child on the bus.</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/sbuf.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">BUS_CHILD_LOCATION</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">device_t - child</var>, <var class="Fa" style="white-space: nowrap;">struct sbuf - *sb</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#BUS_CHILD_LOCATION"><code class="Fn" id="BUS_CHILD_LOCATION">BUS_CHILD_LOCATION</code></a>() - method returns the location of the <code class="Dv">child</code> device. - This location is a series of key=value pairs. The string must be formatted - as a space-separated list of key=value pairs. Names may only contain - alphanumeric characters, underscores ('_') and hyphens ('-'). Values can - contain any non-whitespace characters. Values containing whitespace can be - quoted with double quotes ('"'). Double quotes and backslashes in - quoted values can be escaped with backslashes ('´).</p> -<p class="Pp">The location is defined as a series of characteristics of the - <code class="Dv">child</code> device that can be used to locate that device - independent of what drivers are attached. Typically, these are slot numbers, - bus addresses, or some topology formation. Where possible, buses are - encouraged to provide locations that are stable from boot to boot and when - other devices are added or removed. A location is not dependent on the kind - of device at that location.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">bus(9)</a>, <a class="Xr">device(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 22, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/BUS_CHILD_PNPINFO.9 3.html b/static/freebsd/man9/BUS_CHILD_PNPINFO.9 3.html deleted file mode 100644 index 1826608f..00000000 --- a/static/freebsd/man9/BUS_CHILD_PNPINFO.9 3.html +++ /dev/null @@ -1,64 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_CHILD_PNPINFO(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_CHILD_PNPINFO(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUS_CHILD_PNPINFO</code> — - <span class="Nd">obtain the plug and play information from a - device</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/sbuf.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">BUS_CHILD_PNPINFO</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">device_t - child</var>, <var class="Fa" style="white-space: nowrap;">struct sbuf - *sb</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#BUS_CHILD_LOCATION"><code class="Fn" id="BUS_CHILD_LOCATION">BUS_CHILD_LOCATION</code></a>() - method returns the identifying information about the - <code class="Dv">child</code> device. This information is called the plug - and play (pnp) details by some buses. This information is a series of - key=value pairs. The string must be formatted as a space-separated list of - key=value pairs. Names may only contain alphanumeric characters, underscores - ('_') and hyphens ('-'). Values can contain any non-whitespace characters. - Values containing whitespace can be quoted with double quotes ('"'). - Double quotes and backslashes in quoted values can be escaped with - backslashes ('´).</p> -<p class="Pp">The pnpinfo is defined as a series of characteristics of the - <code class="Dv">child</code> device that are independent of which drivers - are attached, but are used to allow drivers to claim a device. Typically, - plug and play information encodes who made the device, what the model number - is, and some generic details about the device. By convention, only the - generic information about the device that's used by drivers on that bus to - decide on accepting the device is reported. Other configuration information - (such as the cache burst size) needed for the operation of the device, but - that doesn't distinguish it broadly from other devices is not reported.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">bus(9)</a>, <a class="Xr">device(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 22, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/BUS_CONFIG_INTR.9 3.html b/static/freebsd/man9/BUS_CONFIG_INTR.9 3.html deleted file mode 100644 index c14f7f36..00000000 --- a/static/freebsd/man9/BUS_CONFIG_INTR.9 3.html +++ /dev/null @@ -1,103 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_CONFIG_INTR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_CONFIG_INTR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUS_CONFIG_INTR</code>, - <code class="Nm">bus_config_intr</code> — <span class="Nd">configure - interrupt polarity and trigger mode</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">BUS_CONFIG_INTR</code>(<var class="Fa">device_t bus</var>, - <var class="Fa">device_t dev</var>, <var class="Fa">int irq</var>, - <var class="Fa">enum intr_trigger trig</var>, <var class="Fa">enum - intr_polarity pol</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_config_intr</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">int irq</var>, <var class="Fa">enum intr_trigger trig</var>, - <var class="Fa">enum intr_polarity pol</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#BUS_CONFIG_INTR"><code class="Fn" id="BUS_CONFIG_INTR">BUS_CONFIG_INTR</code></a>() - method allows bus or device drivers to provide interrupt polarity and - trigger mode to parent buses. This typically bubbles all the way up to the - root bus (e.g. nexus) where the necessary actions are taken to actually - program the hardware. Since the <code class="Fn">BUS_CONFIG_INTR</code>() - method takes an interrupt number, it is assumed but not necessarily required - that it is called prior to <a class="Xr">BUS_SETUP_INTR(9)</a>.</p> -<p class="Pp" id="bus_config_intr">The - <a class="permalink" href="#bus_config_intr"><code class="Fn">bus_config_intr</code></a>() - function is a simple wrapper around - <code class="Fn">BUS_CONFIG_INTR</code>().</p> -<p class="Pp">The <var class="Fa">trig</var> argument can be one of:</p> -<dl class="Bl-tag"> - <dt id="INTR_TRIGGER_CONFORM"><a class="permalink" href="#INTR_TRIGGER_CONFORM"><code class="Dv">INTR_TRIGGER_CONFORM</code></a></dt> - <dd>The interrupt trigger mode is standard for the bus to which the device is - attached.</dd> - <dt id="INTR_TRIGGER_EDGE"><a class="permalink" href="#INTR_TRIGGER_EDGE"><code class="Dv">INTR_TRIGGER_EDGE</code></a></dt> - <dd>The interrupt is edge triggered. This means that the interrupt is raised - by the rising edge of the signal on the interrupt line. The signal - typically reverts to the original state so as to cause a spike.</dd> - <dt id="INTR_TRIGGER_LEVEL"><a class="permalink" href="#INTR_TRIGGER_LEVEL"><code class="Dv">INTR_TRIGGER_LEVEL</code></a></dt> - <dd>The interrupt is level triggered. This means that the interrupt is raised - when the signal on the interrupt line transitions and remains unchanged - after that until the interrupt has been serviced, after which the signal - transitions back.</dd> -</dl> -<p class="Pp">The <var class="Fa">pol</var> argument can be any one of:</p> -<dl class="Bl-tag"> - <dt id="INTR_POLARITY_CONFORM"><a class="permalink" href="#INTR_POLARITY_CONFORM"><code class="Dv">INTR_POLARITY_CONFORM</code></a></dt> - <dd>The interrupt polarity is standard for the bus to which the device is - attached.</dd> - <dt id="INTR_POLARITY_HIGH"><a class="permalink" href="#INTR_POLARITY_HIGH"><code class="Dv">INTR_POLARITY_HIGH</code></a></dt> - <dd>The interrupt is activated by a high voltage on the interrupt line.</dd> - <dt id="INTR_POLARITY_LOW"><a class="permalink" href="#INTR_POLARITY_LOW"><code class="Dv">INTR_POLARITY_LOW</code></a></dt> - <dd>The interrupt is activated by a low voltage on the interrupt line.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an appropriate error is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">BUS_SETUP_INTR(9)</a>, - <a class="Xr">BUS_TEARDOWN_INTR(9)</a>, <a class="Xr">device(9)</a>, - <a class="Xr">driver(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Fn">BUS_CONFIG_INTR</code>() method first - appeared in <span class="Ux">FreeBSD 5.2</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Marcel - Moolenaar</span> - <<a class="Mt" href="mailto:marcel@xcllnt.net">marcel@xcllnt.net</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 16, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/BUS_DESCRIBE_INTR.9 3.html b/static/freebsd/man9/BUS_DESCRIBE_INTR.9 3.html deleted file mode 100644 index c5a7e073..00000000 --- a/static/freebsd/man9/BUS_DESCRIBE_INTR.9 3.html +++ /dev/null @@ -1,91 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_DESCRIBE_INTR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_DESCRIBE_INTR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUS_DESCRIBE_INTR</code>, - <code class="Nm">bus_describe_intr</code> — - <span class="Nd">associate a description with an active interrupt - handler</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">BUS_DESCRIBE_INTR</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">device_t child</var>, <var class="Fa">struct resource - *irq</var>, <var class="Fa">void *cookie</var>, <var class="Fa">const char - *descr</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_describe_intr</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">struct resource *irq</var>, <var class="Fa">void - *cookie</var>, <var class="Fa">const char *fmt</var>, - <var class="Fa">...</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#BUS_DESCRIBE_INTR"><code class="Fn" id="BUS_DESCRIBE_INTR">BUS_DESCRIBE_INTR</code></a>() - method associates a description with an active interrupt handler. The - <var class="Fa">cookie</var> parameter must be the value returned by a - successful call to <a class="Xr">BUS_SETUP_INTR(9)</a> for the interrupt - <var class="Fa">irq</var>.</p> -<p class="Pp" id="bus_describe_intr">The - <a class="permalink" href="#bus_describe_intr"><code class="Fn">bus_describe_intr</code></a>() - function is a simple wrapper around - <code class="Fn">BUS_DESCRIBE_INTR</code>(). As a convenience, - <code class="Fn">bus_describe_intr</code>() allows the caller to use - <a class="Xr">printf(9)</a> style formatting to build the description string - using <var class="Fa">fmt</var>.</p> -<p class="Pp">When an interrupt handler is established by - <a class="Xr">BUS_SETUP_INTR(9)</a>, the handler is named after the device - the handler is established for. This name is then used in various places - such as interrupt statistics displayed by <a class="Xr">systat(1)</a> and - <a class="Xr">vmstat(8)</a>. For devices that use a single interrupt, the - device name is sufficiently unique to identify the interrupt handler. - However, for devices that use multiple interrupts it can be useful to - distinguish the interrupt handlers. When a description is set for an active - interrupt handler, a colon followed by the description is appended to the - device name to form the interrupt handler name.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an appropriate error is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">systat(1)</a>, <a class="Xr">vmstat(8)</a>, - <a class="Xr">BUS_SETUP_INTR(9)</a>, <a class="Xr">device(9)</a>, - <a class="Xr">printf(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Fn">BUS_DESCRIBE_INTR</code>() method and - <code class="Fn">bus_describe_intr</code>() functions first appeared in - <span class="Ux">FreeBSD 8.1</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">It is not currently possible to remove a description from an - active interrupt handler.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 9, 2015</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/BUS_GET_CPUS.9 3.html b/static/freebsd/man9/BUS_GET_CPUS.9 3.html deleted file mode 100644 index 26bb28ba..00000000 --- a/static/freebsd/man9/BUS_GET_CPUS.9 3.html +++ /dev/null @@ -1,88 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_GET_CPUS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_GET_CPUS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUS_GET_CPUS</code>, - <code class="Nm">bus_get_cpus</code> — <span class="Nd">request a set - of device-specific CPUs</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/cpuset.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">BUS_GET_CPUS</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">device_t child</var>, <var class="Fa">enum cpu_sets - op</var>, <var class="Fa">size_t setsize</var>, <var class="Fa">cpuset_t - *cpuset</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_get_cpus</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">enum cpu_sets op</var>, <var class="Fa">size_t - setsize</var>, <var class="Fa">cpuset_t *cpuset</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#BUS_GET_CPUS"><code class="Fn" id="BUS_GET_CPUS">BUS_GET_CPUS</code></a>() - method queries the parent bus device for a set of device-specific CPUs. The - <var class="Fa">op</var> argument specifies which set of CPUs to retrieve. - If successful, the requested set of CPUs are returned in - <var class="Fa">cpuset</var>. The <var class="Fa">setsize</var> argument - specifies the size in bytes of the set passed in - <var class="Fa">cpuset</var>.</p> -<p class="Pp" id="BUS_GET_CPUS~2"><a class="permalink" href="#BUS_GET_CPUS~2"><code class="Fn">BUS_GET_CPUS</code></a>() - supports querying different types of CPU sets via the <var class="Fa">op - argument.</var> Not all set types are supported for every device. If a set - type is not supported, <code class="Fn">BUS_GET_CPUS</code>() fails with - <code class="Er">EINVAL</code>. These set types are supported:</p> -<dl class="Bl-tag"> - <dt id="LOCAL_CPUS"><a class="permalink" href="#LOCAL_CPUS"><code class="Dv">LOCAL_CPUS</code></a></dt> - <dd>The set of CPUs that are local to the device. If a device is closer to a - specific memory domain in a non-uniform memory architecture system (NUMA), - this will return the set of CPUs in that memory domain.</dd> - <dt id="INTR_CPUS"><a class="permalink" href="#INTR_CPUS"><code class="Dv">INTR_CPUS</code></a></dt> - <dd>The preferred set of CPUs that this device should use for device - interrupts. This set type must be supported by all bus drivers.</dd> -</dl> -<p class="Pp" id="bus_get_cpus">The - <a class="permalink" href="#bus_get_cpus"><code class="Fn">bus_get_cpus</code></a>() - function is a simple wrapper around - <code class="Fn">BUS_GET_CPUS</code>().</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an appropriate error is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">cpuset(2)</a>, <a class="Xr">BUS_BIND_INTR(9)</a>, - <a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Fn">BUS_GET_CPUS</code>() method and - <code class="Fn">bus_get_cpus</code>() function first appeared in - <span class="Ux">FreeBSD 11.0</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 1, 2016</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/BUS_GET_PROPERTY.9 4.html b/static/freebsd/man9/BUS_GET_PROPERTY.9 4.html deleted file mode 100644 index 0186b0c3..00000000 --- a/static/freebsd/man9/BUS_GET_PROPERTY.9 4.html +++ /dev/null @@ -1,74 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_GET_PROPERTY(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_GET_PROPERTY(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUS_GET_PROPERTY</code> — - <span class="Nd">get child's specific property</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">ssize_t</var> - <br/> - <code class="Fn">BUS_GET_PROPERTY</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">device_t - child</var>, <var class="Fa" style="white-space: nowrap;">const char - *propname</var>, <var class="Fa" style="white-space: nowrap;">void - *propvalue</var>, <var class="Fa" style="white-space: nowrap;">size_t - size</var>, - <var class="Fa" style="white-space: nowrap;">device_property_type_t - type</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#BUS_GET_PROPERTY"><code class="Fn" id="BUS_GET_PROPERTY">BUS_GET_PROPERTY</code></a>() - method is called from driver code which wants to access a child's specific - data stored on the bus. A property has a name and an associated value. - Implementation shall copy to <var class="Fa">propvalue</var> at most - <var class="Fa">size</var> bytes.</p> -<p class="Pp" id="BUS_GET_PROPERTY~2"><a class="permalink" href="#BUS_GET_PROPERTY~2"><code class="Fn">BUS_GET_PROPERTY</code></a>() - supports different property types specified via the - <var class="Fa">type</var> argument. The <var class="Fa">size</var> is - guaranteed to be a multiple of the underlying property type. If a type is - not supported, <code class="Fn">BUS_GET_PROPERTY</code>() shall return - -1.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1> -<p class="Pp">If <var class="Fa">propvalue</var> is NULL or - <var class="Fa">size</var> is zero, the implementation shall return only the - size of the property.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The property size if successful, otherwise -1.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a>, - <a class="Xr">device_get_property(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bartlomiej - Grzesik</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 18, 2022</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/BUS_HINTED_CHILD.9 4.html b/static/freebsd/man9/BUS_HINTED_CHILD.9 4.html deleted file mode 100644 index 14ab7284..00000000 --- a/static/freebsd/man9/BUS_HINTED_CHILD.9 4.html +++ /dev/null @@ -1,57 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_HINTED_CHILD(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_HINTED_CHILD(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUS_HINTED_CHILD</code> — - <span class="Nd">notify a bus device about a potential child device - identified by hints</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">BUS_HINTED_CHILD</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">const char - *dname</var>, <var class="Fa" style="white-space: nowrap;">int - dunit</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#BUS_HINTED_CHILD"><code class="Fn" id="BUS_HINTED_CHILD">BUS_HINTED_CHILD</code></a>() - method is invoked by the <a class="Xr">bus_enumerate_hinted_children(9)</a> - function for each set of named hints whose “at” hint matches - the bus device <var class="Fa">dev</var>. Typically, this method should - determine if the set of hints for the given device name and unit - sufficiently describe a new device. If so, a new device should be added via - <a class="Xr">BUS_ADD_CHILD(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">BUS_ADD_CHILD(9)</a>, - <a class="Xr">bus_enumerate_hinted_children(9)</a>, - <a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Fn">BUS_HINTED_CHILD</code>() method first - appeared in <span class="Ux">FreeBSD 6.2</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 5, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/BUS_NEW_PASS.9 4.html b/static/freebsd/man9/BUS_NEW_PASS.9 4.html deleted file mode 100644 index 9868eff6..00000000 --- a/static/freebsd/man9/BUS_NEW_PASS.9 4.html +++ /dev/null @@ -1,50 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_NEW_PASS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_NEW_PASS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUS_NEW_PASS</code> — - <span class="Nd">notify a bus that the pass level has been - changed</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">BUS_NEW_PASS</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#BUS_NEW_PASS"><code class="Fn" id="BUS_NEW_PASS">BUS_NEW_PASS</code></a>() - method is called on each bus device to rescan the device tree when the pass - level has been changed. This method is responsible for invoking - <code class="Nm">BUS_NEW_PASS</code> on child bus devices to propagate the - rescan to child devices. It is also responsible for reprobing any unattached - child devices and allowing drivers for the current pass to identify new - children. A default implementation is provided by - <a class="Xr">bus_generic_new_pass(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">bus_generic_new_pass(9)</a>, - <a class="Xr">bus_set_pass(9)</a>, <a class="Xr">device(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 8, 2009</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/BUS_PRINT_CHILD.9 4.html b/static/freebsd/man9/BUS_PRINT_CHILD.9 4.html deleted file mode 100644 index f7c10d60..00000000 --- a/static/freebsd/man9/BUS_PRINT_CHILD.9 4.html +++ /dev/null @@ -1,58 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_PRINT_CHILD(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_PRINT_CHILD(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUS_PRINT_CHILD</code> — - <span class="Nd">print information about a device</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">BUS_PRINT_CHILD</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">device_t - child</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#BUS_PRINT_CHILD"><code class="Fn" id="BUS_PRINT_CHILD">BUS_PRINT_CHILD</code></a>() - method is called from system code which prints out a description of a - device. It should describe the attachment that the child has with the - parent. For instance the TurboLaser bus prints which node the device is - attached to. Please see <a class="Xr">bus_generic_print_child(9)</a> for - more information regarding the proper formatting of the messages printed by - <code class="Fn">BUS_PRINT_CHILD</code>().</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The number of characters output.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 6, 2005</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/BUS_READ_IVAR.9 4.html b/static/freebsd/man9/BUS_READ_IVAR.9 4.html deleted file mode 100644 index 85910507..00000000 --- a/static/freebsd/man9/BUS_READ_IVAR.9 4.html +++ /dev/null @@ -1,67 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_READ_IVAR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_READ_IVAR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUS_READ_IVAR</code>, - <code class="Nm">BUS_WRITE_IVAR</code> — <span class="Nd">manipulate - bus-specific device instance variables</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">BUS_READ_IVAR</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">device_t - child</var>, <var class="Fa" style="white-space: nowrap;">int index</var>, - <var class="Fa" style="white-space: nowrap;">uintptr_t *result</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">BUS_WRITE_IVAR</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">device_t - child</var>, <var class="Fa" style="white-space: nowrap;">int index</var>, - <var class="Fa" style="white-space: nowrap;">uintptr_t value</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These two methods manage a bus specific set of instance variables - of a child device. The intention is that each different type of bus defines - a set of appropriate instance variables (such as ports and irqs for ISA bus - etc.)</p> -<p class="Pp">This information could be given to the child device as a struct - but that makes it hard for a bus to add or remove variables without forcing - an edit and recompile for all drivers which may not be possible for vendor - supplied binary drivers.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an appropriate error is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 16, 1998</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/BUS_RESCAN.9 4.html b/static/freebsd/man9/BUS_RESCAN.9 4.html deleted file mode 100644 index 473357cb..00000000 --- a/static/freebsd/man9/BUS_RESCAN.9 4.html +++ /dev/null @@ -1,48 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_RESCAN(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_RESCAN(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUS_RESCAN</code> — - <span class="Nd">rescan a bus checking for devices that have been added or - removed</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">BUS_RESCAN</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#BUS_RESCAN"><code class="Fn" id="BUS_RESCAN">BUS_RESCAN</code></a>() - method is called to request a rescan of the child devices on a bus device. - The method should add any devices that have been added since the previous - scan and remove devices that have been removed. This method is not required - to re-examine existing devices to determine if their properties have - changed. This method is also not required to propagate the rescan request to - child devices.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 27, 2016</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/BUS_SETUP_INTR.9 3.html b/static/freebsd/man9/BUS_SETUP_INTR.9 3.html deleted file mode 100644 index f22418fb..00000000 --- a/static/freebsd/man9/BUS_SETUP_INTR.9 3.html +++ /dev/null @@ -1,169 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_SETUP_INTR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_SETUP_INTR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">BUS_SETUP_INTR</code>, - <code class="Nm">bus_setup_intr</code>, - <code class="Nm">BUS_TEARDOWN_INTR</code>, - <code class="Nm">bus_teardown_intr</code> — <span class="Nd">create, - attach and teardown an interrupt handler</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">BUS_SETUP_INTR</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">device_t child</var>, <var class="Fa">struct resource - *irq</var>, <var class="Fa">int flags</var>, <var class="Fa">driver_filter_t - *filter</var>, <var class="Fa">driver_intr_t *ithread</var>, - <var class="Fa">void *arg</var>, <var class="Fa">void **cookiep</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_setup_intr</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">struct resource *r</var>, <var class="Fa">int flags</var>, - <var class="Fa">driver_filter_t filter</var>, <var class="Fa">driver_intr_t - ithread</var>, <var class="Fa">void *arg</var>, <var class="Fa">void - **cookiep</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">BUS_TEARDOWN_INTR</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">device_t child</var>, <var class="Fa">struct resource - *irq</var>, <var class="Fa">void *cookiep</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_teardown_intr</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">struct resource - *r</var>, <var class="Fa" style="white-space: nowrap;">void - *cookiep</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#BUS_SETUP_INTR"><code class="Fn" id="BUS_SETUP_INTR">BUS_SETUP_INTR</code></a>() - method will create and attach an interrupt handler to an interrupt - previously allocated by the resource manager's - <a class="Xr">BUS_ALLOC_RESOURCE(9)</a> method. The - <var class="Fa">flags</var> are found in - <code class="In"><<a class="In">sys/bus.h</a>></code>, and give the - broad category of interrupt. The <var class="Fa">flags</var> also tell the - interrupt handlers about certain device driver characteristics. - <code class="Dv">INTR_EXCL</code> marks the handler as being an exclusive - handler for this interrupt. <code class="Dv">INTR_MPSAFE</code> tells the - scheduler that the interrupt handler is well behaved in a preemptive - environment (``SMP safe''), and does not need to be protected by the ``Giant - Lock'' mutex. <code class="Dv">INTR_ENTROPY</code> marks the interrupt as - being a good source of entropy - this may be used by the entropy device - <span class="Pa">/dev/random</span>.</p> -<p class="Pp">To define a time-critical handler that will not execute any - potentially blocking operation, use the <var class="Fa">filter</var> - argument. See the <a class="Sx" href="#Filter_Routines">Filter Routines</a> - section below for information on writing a filter. Otherwise, use the - <var class="Fa">ithread</var> argument. The defined handler will be called - with the value <var class="Fa">arg</var> as its only argument. See the - <a class="Sx" href="#ithread_Routines">ithread Routines</a> section below - for more information on writing an interrupt handler.</p> -<p class="Pp" id="BUS_SETUP_INTR~2">The <var class="Fa">cookiep</var> argument - is a pointer to a <var class="Vt">void *</var> that - <a class="permalink" href="#BUS_SETUP_INTR~2"><code class="Fn">BUS_SETUP_INTR</code></a>() - will write a cookie for the parent bus' use to if it is successful in - establishing an interrupt. Driver writers may assume that this cookie will - be non-zero. The nexus driver will write 0 on failure to - <var class="Fa">cookiep</var>.</p> -<p class="Pp" id="BUS_TEARDOWN_INTR">The interrupt handler will be detached by - <a class="permalink" href="#BUS_TEARDOWN_INTR"><code class="Fn">BUS_TEARDOWN_INTR</code></a>(). - The cookie needs to be passed to <code class="Fn">BUS_TEARDOWN_INTR</code>() - in order to tear down the correct interrupt handler. Once - <code class="Fn">BUS_TEARDOWN_INTR</code>() returns, it is guaranteed that - the interrupt function is not active and will no longer be called.</p> -<p class="Pp">Mutexes are not allowed to be held across calls to these - functions.</p> -<section class="Ss"> -<h2 class="Ss" id="Filter_Routines"><a class="permalink" href="#Filter_Routines">Filter - Routines</a></h2> -<p class="Pp">A filter runs in primary interrupt context. In this context, - normal mutexes cannot be used. Only the spin lock version of these can be - used (specified by passing <code class="Dv">MTX_SPIN</code> to - <a class="permalink" href="#mtx_init"><code class="Fn" id="mtx_init">mtx_init</code></a>() - when initializing the mutex). <a class="Xr">wakeup(9)</a> and similar - routines can be called. Atomic operations from - <span class="Pa">machine/atomic</span> may be used. Reads and writes to - hardware through <a class="Xr">bus_space(9)</a> may be used. PCI - configuration registers may be read and written. All other kernel interfaces - cannot be used.</p> -<p class="Pp">In this restricted environment, care must be taken to account for - all races. A careful analysis of races should be done as well. It is - generally cheaper to take an extra interrupt, for example, than to protect - variables with spinlocks. Read, modify, write cycles of hardware registers - need to be carefully analyzed if other threads are accessing the same - registers.</p> -<p class="Pp">Generally, a filter routine will use one of two strategies. The - first strategy is to simply mask the interrupt in hardware and allow the - <code class="Dv">ithread</code> routine to read the state from the hardware - and then reenable interrupts. The <code class="Dv">ithread</code> also - acknowledges the interrupt before re-enabling the interrupt source in - hardware. Most PCI hardware can mask its interrupt source.</p> -<p class="Pp">The second common approach is to use a filter with multiple - <a class="Xr">taskqueue(9)</a> tasks. In this case, the filter acknowledges - the interrupts and queues the work to the appropriate taskqueue. Where one - has to multiplex different kinds of interrupt sources, like a network card's - transmit and receive paths, this can reduce lock contention and increase - performance.</p> -<p class="Pp">You should not <a class="Xr">malloc(9)</a> from inside a filter. - You may not call anything that uses a normal mutex. Witness may complain - about these.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="ithread_Routines"><a class="permalink" href="#ithread_Routines">ithread - Routines</a></h2> -<p class="Pp">You can do whatever you want in an ithread routine, except sleep. - Care must be taken not to sleep in an ithread. In addition, one should - minimize lock contention in an ithread routine because contested locks - ripple over to all other ithread routines on that interrupt.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Sleeping"><a class="permalink" href="#Sleeping">Sleeping</a></h2> -<p class="Pp">Sleeping is voluntarily giving up control of your thread. All the - sleep routine found in <a class="Xr">msleep(9)</a> sleep. Waiting for a - condition variable described in <a class="Xr">condvar(9)</a> is sleeping. - Calling any function that does any of these things is sleeping.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an appropriate error is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">random(4)</a>, <a class="Xr">device(9)</a>, - <a class="Xr">driver(9)</a>, <a class="Xr">locking(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Jeroen Ruigrok - van der Werven</span> - <<a class="Mt" href="mailto:asmodai@FreeBSD.org">asmodai@FreeBSD.org</a>> - based on the manual pages for <code class="Fn">BUS_CREATE_INTR</code>() and - <code class="Fn">BUS_CONNECT_INTR</code>() written by <span class="An">Doug - Rabson</span> - <<a class="Mt" href="mailto:dfr@FreeBSD.org">dfr@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 3, 2010</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/CTASSERT.9 4.html b/static/freebsd/man9/CTASSERT.9 4.html deleted file mode 100644 index 36b11f67..00000000 --- a/static/freebsd/man9/CTASSERT.9 4.html +++ /dev/null @@ -1,65 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">CTASSERT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">CTASSERT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">CTASSERT</code> — <span class="Nd">compile - time assertion macro</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code></p> -<p class="Pp"><code class="Fn">CTASSERT</code>(<var class="Fa" style="white-space: nowrap;">expression</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#CTASSERT"><code class="Fn" id="CTASSERT">CTASSERT</code></a>() - macro is deprecated and the C11 standard - <a class="permalink" href="#_Static_assert"><code class="Fn" id="_Static_assert">_Static_assert</code></a>() - should be used instead. The header <var class="Fa">sys/cdefs.h</var> should - be included to provide compatibility for pre-C11 compilers.</p> -<p class="Pp" id="CTASSERT~2">The - <a class="permalink" href="#CTASSERT~2"><code class="Fn">CTASSERT</code></a>() - macro evaluates <var class="Fa">expression</var> at compile time and causes - a compiler error if it is false.</p> -<p class="Pp" id="CTASSERT~3">The - <a class="permalink" href="#CTASSERT~3"><code class="Fn">CTASSERT</code></a>() - macro is useful for asserting the size or alignment of important data - structures and variables during compilation, which would otherwise cause the - code to fail at run time.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">Assert that the size of the <var class="Vt">uuid</var> structure - is 16 bytes.</p> -<p class="Pp"></p> -<div class="Bd Bd-indent"><code class="Li">CTASSERT(sizeof(struct uuid) == - 16);</code></div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">KASSERT(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Hiten M. - Pandya</span> - <<a class="Mt" href="mailto:hmp@FreeBSD.org">hmp@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 1, 2015</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/DB_COMMAND.9 3.html b/static/freebsd/man9/DB_COMMAND.9 3.html deleted file mode 100644 index d4dcfa7d..00000000 --- a/static/freebsd/man9/DB_COMMAND.9 3.html +++ /dev/null @@ -1,180 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DB_COMMAND(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DB_COMMAND(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">DB_COMMAND</code>, - <code class="Nm">DB_COMMAND_FLAGS</code>, - <code class="Nm">DB_SHOW_COMMAND</code>, - <code class="Nm">DB_SHOW_COMMAND_FLAGS</code>, - <code class="Nm">DB_SHOW_ALL_COMMAND</code>, - <code class="Nm">DB_TABLE_COMMAND</code>, - <code class="Nm">DB_TABLE_COMMAND_FLAGS</code>, - <code class="Nm">DB_ALIAS</code>, <code class="Nm">DB_ALIAS_FLAGS</code>, - <code class="Nm">DB_SHOW_ALIAS</code>, - <code class="Nm">DB_SHOW_ALIAS_FLAGS</code>, - <code class="Nm">DB_SHOW_ALL_ALIAS</code>, - <code class="Nm">DB_TABLE_ALIAS</code>, - <code class="Nm">DB_TABLE_ALIAS_FLAGS</code> - <code class="Nm">DB_DECLARE_TABLE</code>, - <code class="Nm">DB_DEFINE_TABLE</code>, — <span class="Nd">Extends - the ddb command set</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">ddb/ddb.h</a>></code></p> -<p class="Pp"><code class="Fn">DB_COMMAND</code>(<var class="Fa" style="white-space: nowrap;">command_name</var>, - <var class="Fa" style="white-space: nowrap;">command_function</var>);</p> -<p class="Pp"><code class="Fn">DB_COMMAND_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">command_name</var>, - <var class="Fa" style="white-space: nowrap;">command_function</var>, - <var class="Fa" style="white-space: nowrap;">flags</var>);</p> -<p class="Pp"><code class="Fn">DB_SHOW_COMMAND</code>(<var class="Fa" style="white-space: nowrap;">command_name</var>, - <var class="Fa" style="white-space: nowrap;">command_function</var>);</p> -<p class="Pp"><code class="Fn">DB_SHOW_COMMAND_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">command_name</var>, - <var class="Fa" style="white-space: nowrap;">command_function</var>, - <var class="Fa" style="white-space: nowrap;">flags</var>);</p> -<p class="Pp"><code class="Fn">DB_SHOW_ALL_COMMAND</code>(<var class="Fa" style="white-space: nowrap;">command_name</var>, - <var class="Fa" style="white-space: nowrap;">command_function</var>);</p> -<p class="Pp"><code class="Fn">DB_TABLE_COMMAND</code>(<var class="Fa" style="white-space: nowrap;">table</var>, - <var class="Fa" style="white-space: nowrap;">command_name</var>, - <var class="Fa" style="white-space: nowrap;">command_function</var>);</p> -<p class="Pp"><code class="Fn">DB_TABLE_COMMAND_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">table</var>, - <var class="Fa" style="white-space: nowrap;">command_name</var>, - <var class="Fa" style="white-space: nowrap;">command_function</var>, - <var class="Fa" style="white-space: nowrap;">flags</var>);</p> -<p class="Pp"><code class="Fn">DB_ALIAS</code>(<var class="Fa" style="white-space: nowrap;">alias_name</var>, - <var class="Fa" style="white-space: nowrap;">command_function</var>);</p> -<p class="Pp"><code class="Fn">DB_ALIAS_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">alias_name</var>, - <var class="Fa" style="white-space: nowrap;">command_function</var>, - <var class="Fa" style="white-space: nowrap;">flags</var>);</p> -<p class="Pp"><code class="Fn">DB_SHOW_ALIAS</code>(<var class="Fa" style="white-space: nowrap;">alias_name</var>, - <var class="Fa" style="white-space: nowrap;">command_function</var>);</p> -<p class="Pp"><code class="Fn">DB_SHOW_ALIAS_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">alias_name</var>, - <var class="Fa" style="white-space: nowrap;">command_function</var>, - <var class="Fa" style="white-space: nowrap;">flags</var>);</p> -<p class="Pp"><code class="Fn">DB_SHOW_ALL_ALIAS</code>(<var class="Fa" style="white-space: nowrap;">alias_name</var>, - <var class="Fa" style="white-space: nowrap;">command_function</var>);</p> -<p class="Pp"><code class="Fn">DB_TABLE_ALIAS</code>(<var class="Fa" style="white-space: nowrap;">table</var>, - <var class="Fa" style="white-space: nowrap;">alias_name</var>, - <var class="Fa" style="white-space: nowrap;">command_function</var>);</p> -<p class="Pp"><code class="Fn">DB_TABLE_ALIAS_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">table</var>, - <var class="Fa" style="white-space: nowrap;">alias_name</var>, - <var class="Fa" style="white-space: nowrap;">command_function</var>, - <var class="Fa" style="white-space: nowrap;">flags</var>);</p> -<p class="Pp"><code class="Fn">DB_DEFINE_TABLE</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">table</var>);</p> -<p class="Pp"><code class="Fn">DB_DECLARE_TABLE</code>(<var class="Fa" style="white-space: nowrap;">table</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#DB_COMMAND"><code class="Fn" id="DB_COMMAND">DB_COMMAND</code></a>() - macro adds <var class="Fa">command_name</var> to the list of top-level - commands. Invoking <var class="Fa">command_name</var> from ddb will call - <var class="Fa">command_function</var>.</p> -<p class="Pp" id="DB_SHOW_COMMAND">The - <a class="permalink" href="#DB_SHOW_COMMAND"><code class="Fn">DB_SHOW_COMMAND</code></a>() - and - <a class="permalink" href="#DB_SHOW_ALL_COMMAND"><code class="Fn" id="DB_SHOW_ALL_COMMAND">DB_SHOW_ALL_COMMAND</code></a>() - macros are roughly equivalent to <code class="Fn">DB_COMMAND</code>() but in - these cases, <var class="Fa">command_name</var> is a sub-command of the ddb - <b class="Sy">show</b> command and <b class="Sy">show all</b> command, - respectively.</p> -<p class="Pp" id="DB_TABLE_COMMAND">The - <a class="permalink" href="#DB_TABLE_COMMAND"><code class="Fn">DB_TABLE_COMMAND</code></a>() - macro is also similar to <code class="Fn">DB_COMMAND</code>() but adds the - new command as a sub-command of the ddb command - <var class="Fa">table</var>.</p> -<p class="Pp" id="DB_ALIAS">The - <a class="permalink" href="#DB_ALIAS"><code class="Fn">DB_ALIAS</code></a>(), - <a class="permalink" href="#DB_SHOW_ALIAS"><code class="Fn" id="DB_SHOW_ALIAS">DB_SHOW_ALIAS</code></a>(), - <a class="permalink" href="#DB_SHOW_ALL_ALIAS"><code class="Fn" id="DB_SHOW_ALL_ALIAS">DB_SHOW_ALL_ALIAS</code></a>(), - and - <a class="permalink" href="#DB_TABLE_ALIAS"><code class="Fn" id="DB_TABLE_ALIAS">DB_TABLE_ALIAS</code></a>() - macros register the existing <var class="Fa">command_function</var> under - the alternative command name <var class="Fa">alias_name</var>.</p> -<p class="Pp">The _FLAGS variants of these commands allow the programmer to - specify a value for the <var class="Fa">flag</var> field of the command - structure. The possible flag values are defined alongside - <var class="Ft">struct db_command</var> in - <code class="In"><<a class="In">ddb/ddb.h</a>></code>.</p> -<p class="Pp">The general command syntax: - <code class="Cm">command</code>[<code class="Li">/</code><var class="Ar">modifier</var>] - <var class="Ar">address</var>[,<var class="Ar">count</var>], translates into - the following parameters for <var class="Fa">command_function</var>:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt><var class="Fa">addr</var></dt> - <dd>The address passed to the command as an argument.</dd> - <dt><var class="Fa">have_addr</var></dt> - <dd>A boolean value that is true if the addr field is valid.</dd> - <dt><var class="Fa">count</var></dt> - <dd>The number of quad words starting at offset <var class="Fa">addr</var> - that the command must process.</dd> - <dt id="examine"><var class="Fa">modif</var></dt> - <dd>A pointer to the string of modifiers. That is, a series of symbols used to - pass some options to the command. For example, the - <a class="permalink" href="#examine"><b class="Sy">examine</b></a> command - will display words in decimal form if it is passed the modifier - "d".</dd> -</dl> -</div> -<p class="Pp" id="DB_DEFINE_TABLE">The - <a class="permalink" href="#DB_DEFINE_TABLE"><code class="Fn">DB_DEFINE_TABLE</code></a>() - macro adds a new command <var class="Fa">name</var> as a sub-command of the - existing command table <var class="Fa">parent</var>. The new command defines - a table named <var class="Fa">table</var> which contains sub-commands. New - commands and aliases can be added to this table by passing - <var class="Fa">table</var> as the first argument to one of the DB_TABLE_ - macros.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">In your module, the command is declared as:</p> -<div class="Bd Pp Li"> -<pre>DB_COMMAND(mycmd, my_cmd_func) -{ - if (have_addr) - db_printf("Calling my command with address %p\n", addr); -}</pre> -</div> -<p class="Pp">An alias for this command is declared as:</p> -<div class="Bd Pp Li"> -<pre>DB_ALIAS(mycmd2, my_cmd_func);</pre> -</div> -<p class="Pp">Then, when in ddb:</p> -<div class="Bd Pp Li"> -<pre></pre> -<div class="Bf Sy"> -db> mycmd 0x1000 -Calling my command with address 0x1000 -db> mycmd2 0x2500 -Calling my command with address 0x2500 -db></div> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ddb(4)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Guillaume - Ballet</span> - <<a class="Mt" href="mailto:gballet@gmail.com">gballet@gmail.com</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 5, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/DECLARE_GEOM_CLASS.9 3.html b/static/freebsd/man9/DECLARE_GEOM_CLASS.9 3.html deleted file mode 100644 index f78cd7bd..00000000 --- a/static/freebsd/man9/DECLARE_GEOM_CLASS.9 3.html +++ /dev/null @@ -1,167 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DECLARE_GEOM_CLASS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DECLARE_GEOM_CLASS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">DECLARE_GEOM_CLASS</code> — - <span class="Nd">GEOM class declaration macro</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">geom/geom.h</a>></code></p> -<p class="Pp"><code class="Fn">DECLARE_GEOM_CLASS</code>(<var class="Fa" style="white-space: nowrap;">class</var>, - <var class="Fa" style="white-space: nowrap;">mod_name</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#DECLARE_GEOM_CLASS"><code class="Fn" id="DECLARE_GEOM_CLASS">DECLARE_GEOM_CLASS</code></a>() - macro registers a GEOM class in GEOM. A GEOM class itself implements one - particular kind of transformation. Typical examples are: MBR disk partition, - <span class="Ux">BSD</span> disklabel and RAID5 classes. - <code class="Fn">DECLARE_GEOM_CLASS</code>() can be used both for compiled - in and loaded as <a class="Xr">kld(4)</a> modules GEOM classes and it is the - only official way for class registration.</p> -<p class="Pp" id="DECLARE_GEOM_CLASS~2">The arguments to - <a class="permalink" href="#DECLARE_GEOM_CLASS~2"><code class="Fn">DECLARE_GEOM_CLASS</code></a>() - are:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt><var class="Fa">class</var></dt> - <dd>The <var class="Vt">g_class</var> structure which describes a GEOM - class.</dd> - <dt><var class="Fa">mod_name</var></dt> - <dd>A kernel module name (not a class name!).</dd> -</dl> -</div> -<p class="Pp">Structure <var class="Vt">g_class</var> contains data describing - the class. They are:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt><var class="Vt">const char *</var> <var class="Va">name</var></dt> - <dd>Class name.</dd> - <dt><var class="Vt">g_taste_t *</var> <var class="Va">taste</var></dt> - <dd>Pointer to function used for taste event handling. If it is - non-<code class="Dv">NULL</code> it is called in three situations: - <p class="Pp"></p> - <ul class="Bl-dash Bl-compact"> - <li>On class activation, all existing providers are offered for - tasting.</li> - <li>When new provider is created it is offered for tasting.</li> - <li>After last write access to a provider is closed it is offered for - retasting (on first write open event “spoil” was - sent).</li> - </ul> - </dd> - <dt><var class="Vt">g_config_t *</var> <var class="Va">config</var></dt> - <dd>This field is not used anymore, its functionality was replaced by the - <var class="Va">ctlreq</var> field.</dd> - <dt><var class="Vt">g_ctl_req_t *</var> <var class="Va">ctlreq</var></dt> - <dd>Pointer to function used for handling events from userland - applications.</dd> - <dt><var class="Vt">g_init_t *</var> <var class="Va">init</var></dt> - <dd>Pointer to function which is called right after class registration.</dd> - <dt><var class="Vt">g_fini_t *</var> <var class="Va">fini</var></dt> - <dd>Pointer to function which is called right before class - deregistration.</dd> - <dt><var class="Vt">g_ctl_destroy_geom_t *</var> - <var class="Va">destroy_geom</var></dt> - <dd>Pointer to a function which is called for every geom on class unload. If - this field is not set, the class can not be unloaded.</dd> -</dl> -</div> -<p class="Pp">Only a <var class="Fa">name</var> field is required; the rest are - optional.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RESTRICTIONS/CONDITIONS"><a class="permalink" href="#RESTRICTIONS/CONDITIONS">RESTRICTIONS/CONDITIONS</a></h1> -<p class="Pp">The fields of <var class="Vt">g_class</var> should always be - initialized using C99-style field naming (see the initialization of - <var class="Va">example_class</var> below).</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">Example class declaration.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>static struct g_geom * -g_example_taste(struct g_class *mp, struct g_provider *pp, - int flags __unused) -{ - g_topology_assert(); - - [...] -} - -static void -g_example_ctlreq(struct gctl_req *req, struct g_class *cp, - char const *verb) -{ - - [...] -} - -static int -g_example_destroy_geom(struct gctl_req *req, struct g_class *cp, - struct g_geom *gp) -{ - - g_topology_assert(); - - [...] -} - -static void -g_example_init(struct g_class *mp) -{ - - [...] -} - -static void -g_example_fini(struct g_class *mp) -{ - - [...] -} - -struct g_class example_class = { - .name = "EXAMPLE", - .taste = g_example_taste, - .ctlreq = g_example_ctlreq, - .init = g_example_init, - .fini = g_example_fini, - .destroy_geom = g_example_destroy_geom -}; - -DECLARE_GEOM_CLASS(example_class, g_example);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">geom(4)</a>, <a class="Xr">g_attach(9)</a>, - <a class="Xr">g_bio(9)</a>, <a class="Xr">g_consumer(9)</a>, - <a class="Xr">g_data(9)</a>, <a class="Xr">g_event(9)</a>, - <a class="Xr">g_geom(9)</a>, <a class="Xr">g_provider(9)</a>, - <a class="Xr">g_provider_by_name(9)</a>, - <a class="Xr">g_wither_geom(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Pawel Jakub - Dawidek</span> - <<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 13, 2007</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/DECLARE_MODULE.9 3.html b/static/freebsd/man9/DECLARE_MODULE.9 3.html deleted file mode 100644 index f0cd620a..00000000 --- a/static/freebsd/man9/DECLARE_MODULE.9 3.html +++ /dev/null @@ -1,105 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DECLARE_MODULE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DECLARE_MODULE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">DECLARE_MODULE</code> — - <span class="Nd">kernel module declaration macro</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/kernel.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/module.h</a>></code></p> -<p class="Pp"><code class="Fn">DECLARE_MODULE</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">moduledata_t data</var>, - <var class="Fa" style="white-space: nowrap;">sub</var>, - <var class="Fa" style="white-space: nowrap;">order</var>);</p> -<p class="Pp"><code class="Fn">DECLARE_MODULE_TIED</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">moduledata_t data</var>, - <var class="Fa" style="white-space: nowrap;">sub</var>, - <var class="Fa" style="white-space: nowrap;">order</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#DECLARE_MODULE"><code class="Fn" id="DECLARE_MODULE">DECLARE_MODULE</code></a>() - macro declares a generic kernel module. It is used to register the module - with the system, using the <code class="Fn">SYSINIT</code>() macro. - <code class="Fn">DECLARE_MODULE</code>() is usually used within other - macros, such as <a class="Xr">DRIVER_MODULE(9)</a>, - <a class="Xr">DEV_MODULE(9)</a> and <a class="Xr">SYSCALL_MODULE(9)</a>. Of - course, it can also be called directly, for example in order to implement - dynamic sysctls.</p> -<p class="Pp" id="DECLARE_MODULE_TIED">A module declared with - <a class="permalink" href="#DECLARE_MODULE_TIED"><code class="Fn">DECLARE_MODULE_TIED</code></a>() - will load only if the running kernel version (as specified by - <code class="Dv">__FreeBSD_version</code>) is identical to that on which it - was built. This declaration should be used by modules which depend on - interfaces beyond the stable kernel KBI (such as ABI emulators or - hypervisors that rely on internal kernel structures). - <code class="Fn">DECLARE_MODULE</code>() will behave like - <code class="Fn">DECLARE_MODULE_TIED</code>() when compiled with modules - built with the kernel. This allows locks and other synchronization - primitives to be inlined safely.</p> -<p class="Pp">The arguments are:</p> -<dl class="Bl-tag"> - <dt id="SYSINIT"><var class="Fa">name</var></dt> - <dd>The module name, which will be used in the - <a class="permalink" href="#SYSINIT"><code class="Fn">SYSINIT</code></a>() - call to identify the module.</dd> - <dt><var class="Fa">data</var></dt> - <dd>A <var class="Vt">moduledata_t</var> structure, which contains two main - items, the official name of the module name, which will be used in the - <var class="Vt">module_t</var> structure and a pointer to the event - handler function of type <var class="Vt">modeventhand_t</var>.</dd> - <dt><var class="Fa">sub</var></dt> - <dd>An argument directed to the <code class="Fn">SYSINIT</code>() macro. Valid - values for this are contained in the <var class="Vt">sysinit_sub_id</var> - enumeration (see - <code class="In"><<a class="In">sys/kernel.h</a>></code>) and - specify the type of system startup interfaces. The - <a class="Xr">DRIVER_MODULE(9)</a> macro uses a value of - <code class="Dv">SI_SUB_DRIVERS</code> here for example, since these - modules contain a driver for a device. For kernel modules that are loaded - at runtime, a value of <code class="Dv">SI_SUB_EXEC</code> is common.</dd> - <dt><var class="Fa">order</var></dt> - <dd>An argument for <code class="Fn">SYSINIT</code>(). It represents the KLDs - order of initialization within the subsystem. Valid values are defined in - the <var class="Vt">sysinit_elem_order</var> enumeration - (<code class="In"><<a class="In">sys/kernel.h</a>></code>).</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">DEV_MODULE(9)</a>, - <a class="Xr">DRIVER_MODULE(9)</a>, <a class="Xr">module(9)</a>, - <a class="Xr">SYSCALL_MODULE(9)</a></p> -<p class="Pp"><span class="Pa">/usr/include/sys/kernel.h</span>, - <span class="Pa">/usr/share/examples/kld</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Alexander - Langer</span> - <<a class="Mt" href="mailto:alex@FreeBSD.org">alex@FreeBSD.org</a>>, - inspired by the KLD Facility Programming Tutorial by <span class="An">Andrew - Reiter</span> - <<a class="Mt" href="mailto:arr@watson.org">arr@watson.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 13, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/DEFINE_IFUNC.9 3.html b/static/freebsd/man9/DEFINE_IFUNC.9 3.html deleted file mode 100644 index d7bc4b82..00000000 --- a/static/freebsd/man9/DEFINE_IFUNC.9 3.html +++ /dev/null @@ -1,118 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEFINE_IFUNC(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEFINE_IFUNC(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">DEFINE_IFUNC</code> — - <span class="Nd">define a kernel function with an implementation selected at - run-time</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">machine/ifunc.h</a>></code></p> -<p class="Pp"><code class="Fn">DEFINE_IFUNC</code>(<var class="Fa" style="white-space: nowrap;">qual</var>, - <var class="Fa" style="white-space: nowrap;">ret_type</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">args</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">ifuncs are a linker feature which allows the programmer to define - functions whose implementation is selected at boot-time or module load-time. - The <code class="Nm">DEFINE_IFUNC</code> macro can be used to define an - ifunc. The selection is performed by a resolver function, which returns a - pointer to the selected function. ifunc resolvers are invoked very early - during the machine-dependent initialization routine, or at load time for - dynamically loaded modules. Resolution must occur before the first call to - an ifunc. ifunc resolution is performed after CPU features are enumerated - and after the kernel's environment is initialized. The typical use-case for - an ifunc is a routine whose behavior depends on optional CPU features. For - example, newer generations of a given CPU architecture may provide an - instruction to optimize a common operation. To avoid the overhead of testing - for the CPU feature each time the operation is performed, an ifunc can be - used to provide two implementations for the operation: one targeting - platforms with the extra instruction, and one for older platforms.</p> -<p class="Pp">Because <code class="Nm">DEFINE_IFUNC</code> is a macro that - defines a dynamically typed function, its usage looks somewhat unusual. The - <var class="Ar">qual</var> parameter is a list of zero or more C function - qualifiers to be applied to the ifunc. This parameter is typically empty or - the <code class="Dv">static</code> qualifier. <var class="Ar">ret_type</var> - is the return type of the ifunc. <var class="Ar">name</var> is the name of - the ifunc. <var class="Ar">args</var> is a parenthesized, comma-separated - list of the parameter types of the function, as they would appear in a C - function declaration.</p> -<p class="Pp">The <code class="Nm">DEFINE_IFUNC</code> usage must be followed by - the resolver function body. The resolver must return a function with return - type <var class="Ar">ret_type</var> and parameter types - <var class="Ar">args</var>. The resolver function is defined with the - ‘<code class="Li">resolver</code>’ gcc-style function - attribute, causing the corresponding <a class="Xr">elf(5)</a> function - symbol to be of type <code class="Dv">STT_GNU_IFUNC</code> instead of - <code class="Dv">STT_FUNC</code>. The kernel linker invokes the resolver to - process relocations targeting ifunc calls and PLT entries referencing such - symbols.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">ifunc resolvers are executed early during boot, before most kernel - facilities are available. They are effectively limited to checking CPU - feature flags and tunables.</p> -<div class="Bd Pp Li"> -<pre>static size_t -fast_strlen(const char *s __unused) -{ - size_t len; - - /* Fast, but may not be correct in all cases. */ - __asm("movq $42,%0\n" : "=r" (len)); - return (len); -} - -static size_t -slow_strlen(const char *s) -{ - const char *t; - - for (t = s; *t != '\0'; t++); - return (t - s); -} - -DEFINE_IFUNC(, size_t, strlen, (const char *)) -{ - int enabled; - - enabled = 1; - TUNABLE_INT_FETCH("debug.use_fast_strlen", &enabled); - if (enabled && (cpu_features & CPUID_FAST_STRLEN) != 0) - return (fast_strlen); - else - return (slow_strlen); -}</pre> -</div> -<p class="Pp">This defines a <code class="Fn">strlen</code>() function with an - optimized implementation for CPUs that advertise support.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">elf(5)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1> -<p class="Pp">ifuncs require both toolchain support, to emit function symbols of - type <code class="Dv">STT_GNU_IFUNC</code>, and kernel linker support, to - invoke ifunc resolvers during boot or during module load.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 10, 2026</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/DELAY.9 4.html b/static/freebsd/man9/DELAY.9 4.html deleted file mode 100644 index 5f6c8921..00000000 --- a/static/freebsd/man9/DELAY.9 4.html +++ /dev/null @@ -1,46 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DELAY(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DELAY(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">DELAY</code> — <span class="Nd">busy loop - for an interval</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">DELAY</code>(<var class="Fa" style="white-space: nowrap;">int - delay</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Delay for <var class="Fa">delay</var> microseconds (1/1000000th of - a second).</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pause(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Alfred - Perlstein</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 20, 2013</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/DEVICE_ATTACH.9 4.html b/static/freebsd/man9/DEVICE_ATTACH.9 4.html deleted file mode 100644 index 15d2fba7..00000000 --- a/static/freebsd/man9/DEVICE_ATTACH.9 4.html +++ /dev/null @@ -1,64 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_ATTACH(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_ATTACH(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">DEVICE_ATTACH</code> — - <span class="Nd">attach a device</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">DEVICE_ATTACH</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Attach a device to the system after the - <a class="permalink" href="#DEVICE_PROBE"><code class="Fn" id="DEVICE_PROBE">DEVICE_PROBE</code></a>() - method has been called and has indicated that the device exists. The - <a class="permalink" href="#DEVICE_ATTACH"><code class="Fn" id="DEVICE_ATTACH">DEVICE_ATTACH</code></a>() - method should initialize the hardware and allocate other system resources - (such as <a class="Xr">devfs(4)</a> entries).</p> -<p class="Pp">Devices which implement buses 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 <a class="Xr">bus_attach_children(9)</a> - the child devices will be automatically probed and attached.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an appropriate error is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devfs(4)</a>, - <a class="Xr">bus_attach_children(9)</a>, <a class="Xr">device(9)</a>, - <a class="Xr">DEVICE_DETACH(9)</a>, <a class="Xr">DEVICE_IDENTIFY(9)</a>, - <a class="Xr">DEVICE_PROBE(9)</a>, <a class="Xr">DEVICE_SHUTDOWN(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span> - <<a class="Mt" href="mailto:dfr@FreeBSD.org">dfr@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 5, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/DEVICE_DETACH.9 4.html b/static/freebsd/man9/DEVICE_DETACH.9 4.html deleted file mode 100644 index 8dd091af..00000000 --- a/static/freebsd/man9/DEVICE_DETACH.9 4.html +++ /dev/null @@ -1,58 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_DETACH(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_DETACH(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">DEVICE_DETACH</code> — - <span class="Nd">detach a device</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">DEVICE_DETACH</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">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.</p> -<p class="Pp">The method should deallocate any system resources allocated during - the <a class="Xr">DEVICE_ATTACH(9)</a> method and reset the hardware to a - sane state (i.e., disable interrupts etc.)</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an appropriate error is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">DEVICE_ATTACH(9)</a>, - <a class="Xr">DEVICE_IDENTIFY(9)</a>, <a class="Xr">DEVICE_PROBE(9)</a>, - <a class="Xr">DEVICE_SHUTDOWN(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 16, 1998</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/DEVICE_IDENTIFY.9 3.html b/static/freebsd/man9/DEVICE_IDENTIFY.9 3.html deleted file mode 100644 index 5134840f..00000000 --- a/static/freebsd/man9/DEVICE_IDENTIFY.9 3.html +++ /dev/null @@ -1,86 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_IDENTIFY(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_IDENTIFY(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">DEVICE_IDENTIFY</code> — - <span class="Nd">identify new child devices and register them</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">DEVICE_IDENTIFY</code>(<var class="Fa" style="white-space: nowrap;">driver_t - *driver</var>, <var class="Fa" style="white-space: nowrap;">device_t - parent</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The identify method of a device driver is used to add devices that - cannot be enumerated by the standard method on a bus device. Devices can be - enumerated in various ways including accessing non-ambiguous device - registers and parsing firmware tables. Software-only pseudo devices are also - often enumerated via identify methods.</p> -<p class="Pp">For each newly identified device, a new device instance should be - created by invoking the <a class="Xr">BUS_ADD_CHILD(9)</a> method. If the - identify method is able to discover other properties about the new device, - those should also be set. For example, device resources should be added to - the device by calling <a class="Xr">bus_set_resource(9)</a> for each - resource.</p> -<p class="Pp">An identify method might be invoked multiple times. If a device - driver is unloaded and loaded, the identify method will be called a second - time after being reloaded. As a result, the identify method should avoid - duplicate devices. Devices added by identify methods typically use a fixed - device name in which case <a class="Xr">device_find_child(9)</a> can be used - to detect existing devices.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">The following pseudo-code shows an example of a function that - probes for a piece of hardware and registers it and its resource (an I/O - port) with the parent bus device.</p> -<div class="Bd Pp Li"> -<pre>void -foo_identify(driver_t *driver, device_t parent) -{ - device_t child; - - retrieve_device_information; - if (devices matches one of your supported devices && - device_find_child(parent, "foo", DEVICE_UNIT_ANY) == NULL) { - child = BUS_ADD_CHILD(parent, 0, "foo", DEVICE_UNIT_ANY); - bus_set_resource(child, SYS_RES_IOPORT, 0, FOO_IOADDR, 1); - } -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">BUS_ADD_CHILD(9)</a>, - <a class="Xr">bus_identify_children(9)</a>, - <a class="Xr">bus_set_resource(9)</a>, <a class="Xr">device(9)</a>, - <a class="Xr">device_find_child(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Alexander - Langer</span> - <<a class="Mt" href="mailto:alex@FreeBSD.org">alex@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 5, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/DEVICE_PROBE.9 3.html b/static/freebsd/man9/DEVICE_PROBE.9 3.html deleted file mode 100644 index 2c5243ce..00000000 --- a/static/freebsd/man9/DEVICE_PROBE.9 3.html +++ /dev/null @@ -1,115 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_PROBE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_PROBE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">DEVICE_PROBE</code> — - <span class="Nd">probe for device existence</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">DEVICE_PROBE</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#DEVICE_PROBE"><code class="Fn" id="DEVICE_PROBE">DEVICE_PROBE</code></a>() - method should probe to see if the device is present. It should return 0 if - the device exists, <code class="Er">ENXIO</code> 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 <span class="Ux">UNIX</span> error codes should be - used for the purpose.</p> -<p class="Pp">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. In addition it is an absolute requirement that the probe - routine have no side effects whatsoever. The probe routine may be called - more than once before the attach routine is called.</p> -<p class="Pp">If a success code of zero is returned, the driver can assume that - it will be the one attached, but must not hold any resources when the probe - routine returns. A driver may assume that the softc is preserved when it - returns a success code of zero.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">A value equal to or less than zero indicates success, greater than - zero indicates an error (errno). For values equal to or less than zero: zero - indicates highest priority, no further probing is done; for a value less - than zero, the lower the value the lower the priority, e.g. -100 indicates a - lower priority than -50.</p> -<p class="Pp">The following values are used by convention to indicate different - strengths of matching in a probe routine. Except as noted, these are just - suggested values, and there's nothing magical about them.</p> -<dl class="Bl-tag"> - <dt>BUS_PROBE_SPECIFIC</dt> - <dd>The device that cannot be reprobed, and that no possible other driver may - exist (typically legacy drivers who don't follow all the rules, or special - needs drivers).</dd> - <dt>BUS_PROBE_VENDOR</dt> - <dd>The device is supported by a vendor driver. This is for source or binary - drivers that are not yet integrated into the - <span class="Ux">FreeBSD</span> tree. Its use in the base OS is - prohibited.</dd> - <dt>BUS_PROBE_DEFAULT</dt> - <dd>The device is a normal device matching some plug and play ID. This is the - normal return value for drivers to use. It is intended that nearly all of - the drivers in the tree should return this value.</dd> - <dt>BUS_PROBE_LOW_PRIORITY</dt> - <dd>The driver is a legacy driver, or an otherwise less desirable driver for a - given plug and play ID. The driver has special requirements like when - there are two drivers that support overlapping series of hardware devices. - In this case the one that supports the older part of the line would return - this value, while the one that supports the newer ones would return - BUS_PROBE_DEFAULT.</dd> - <dt>BUS_PROBE_GENERIC</dt> - <dd>The driver matches the type of device generally. This allows drivers to - match all serial ports generally, with specialized drivers matching - particular types of serial ports that need special treatment for some - reason.</dd> - <dt>BUS_PROBE_HOOVER</dt> - <dd>The driver matches all unclaimed devices on a bus. The - <a class="Xr">ugen(4)</a> device is one example.</dd> - <dt>BUS_PROBE_NOWILDCARD</dt> - <dd>The driver expects its parent to tell it which children to manage and no - probing is really done. The device only matches if its parent bus - specifically said to use this driver.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">DEVICE_ATTACH(9)</a>, - <a class="Xr">DEVICE_DETACH(9)</a>, <a class="Xr">DEVICE_IDENTIFY(9)</a>, - <a class="Xr">DEVICE_SHUTDOWN(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 8, 2012</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/DEVICE_SHUTDOWN.9 4.html b/static/freebsd/man9/DEVICE_SHUTDOWN.9 4.html deleted file mode 100644 index d63b94b0..00000000 --- a/static/freebsd/man9/DEVICE_SHUTDOWN.9 4.html +++ /dev/null @@ -1,55 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_SHUTDOWN(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_SHUTDOWN(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">DEVICE_SHUTDOWN</code> — - <span class="Nd">called during system shutdown</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">DEVICE_SHUTDOWN</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#DEVICE_SHUTDOWN"><code class="Fn" id="DEVICE_SHUTDOWN">DEVICE_SHUTDOWN</code></a>() - method is called during system shutdown to allow the driver to put the - hardware into a consistent state for rebooting the computer.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an error is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">DEVICE_ATTACH(9)</a>, - <a class="Xr">DEVICE_DETACH(9)</a>, <a class="Xr">DEVICE_IDENTIFY(9)</a>, - <a class="Xr">DEVICE_PROBE(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 6, 2005</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/DEV_MODULE.9 4.html b/static/freebsd/man9/DEV_MODULE.9 4.html deleted file mode 100644 index 5acd33df..00000000 --- a/static/freebsd/man9/DEV_MODULE.9 4.html +++ /dev/null @@ -1,99 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEV_MODULE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEV_MODULE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">DEV_MODULE</code> — - <span class="Nd">device driver module declaration macro</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/kernel.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/module.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/conf.h</a>></code></p> -<p class="Pp"><code class="Fn">DEV_MODULE</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">modeventhand_t evh</var>, - <var class="Fa" style="white-space: nowrap;">void *arg</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#DEV_MODULE"><code class="Fn" id="DEV_MODULE">DEV_MODULE</code></a>() - macro declares a device driver kernel module. It fills in a - <var class="Vt">moduledata_t</var> structure and then calls - <a class="permalink" href="#DECLARE_MODULE"><code class="Fn" id="DECLARE_MODULE">DECLARE_MODULE</code></a>() - with the correct args, where <var class="Fa">name</var> is the name of the - module and <var class="Fa">evh</var> (with its argument - <var class="Fa">arg</var>) is the event handler for the module (refer to - <a class="Xr">DECLARE_MODULE(9)</a> for more information). The event handler - is supposed to create the device with - <a class="permalink" href="#make_dev"><code class="Fn" id="make_dev">make_dev</code></a>() - on load and to destroy it when it is unloaded using - <a class="permalink" href="#destroy_dev"><code class="Fn" id="destroy_dev">destroy_dev</code></a>().</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<div class="Bd Li"> -<pre>#include <sys/module.h> -#include <sys/conf.h> - -static struct cdevsw foo_devsw = { ... }; - -static struct cdev *sdev; - -static int -foo_load(module_t mod, int cmd, void *arg) -{ - int err = 0; - - switch (cmd) { - case MOD_LOAD: - sdev = make_dev(&foo_devsw, 0, UID_ROOT, GID_WHEEL, 0600, "foo"); - break; /* Success*/ - - case MOD_UNLOAD: - case MOD_SHUTDOWN: - destroy_dev(sdev); - break; /* Success*/ - - default: - err = EINVAL; - break; - } - - return(err); -} - -DEV_MODULE(foo, foo_load, NULL);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">DECLARE_MODULE(9)</a>, - <a class="Xr">destroy_dev(9)</a>, <a class="Xr">make_dev(9)</a>, - <a class="Xr">module(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Alexander - Langer</span> - <<a class="Mt" href="mailto:alex@FreeBSD.org">alex@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 19, 2012</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/DRIVER_MODULE.9 3.html b/static/freebsd/man9/DRIVER_MODULE.9 3.html deleted file mode 100644 index c58d4846..00000000 --- a/static/freebsd/man9/DRIVER_MODULE.9 3.html +++ /dev/null @@ -1,139 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DRIVER_MODULE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DRIVER_MODULE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">DRIVER_MODULE</code>, - <code class="Nm">DRIVER_MODULE_ORDERED</code>, - <code class="Nm">EARLY_DRIVER_MODULE</code>, - <code class="Nm">EARLY_DRIVER_MODULE_ORDERED</code> — - <span class="Nd">kernel driver declaration macro</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/kernel.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/module.h</a>></code></p> -<p class="Pp"><code class="Fn">DRIVER_MODULE</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">busname</var>, - <var class="Fa" style="white-space: nowrap;">driver_t driver</var>, - <var class="Fa" style="white-space: nowrap;">modeventhand_t evh</var>, - <var class="Fa" style="white-space: nowrap;">void *arg</var>);</p> -<p class="Pp"><code class="Fn">DRIVER_MODULE_ORDERED</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">busname</var>, - <var class="Fa" style="white-space: nowrap;">driver_t driver</var>, - <var class="Fa" style="white-space: nowrap;">modeventhand_t evh</var>, - <var class="Fa" style="white-space: nowrap;">void *arg</var>, - <var class="Fa" style="white-space: nowrap;">int order</var>);</p> -<p class="Pp"><code class="Fn">EARLY_DRIVER_MODULE</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">busname</var>, - <var class="Fa" style="white-space: nowrap;">driver_t driver</var>, - <var class="Fa" style="white-space: nowrap;">modeventhand_t evh</var>, - <var class="Fa" style="white-space: nowrap;">void *arg</var>, - <var class="Fa" style="white-space: nowrap;">int pass</var>);</p> -<p class="Pp"><code class="Fn">EARLY_DRIVER_MODULE_ORDERED</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">busname</var>, - <var class="Fa" style="white-space: nowrap;">driver_t driver</var>, - <var class="Fa" style="white-space: nowrap;">modeventhand_t evh</var>, - <var class="Fa" style="white-space: nowrap;">void *arg</var>, - <var class="Fa" style="white-space: nowrap;">enum sysinit_elem_order - order</var>, <var class="Fa" style="white-space: nowrap;">int - pass</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#DRIVER_MODULE"><code class="Fn" id="DRIVER_MODULE">DRIVER_MODULE</code></a>() - macro declares a kernel driver. <code class="Fn">DRIVER_MODULE</code>() - expands to the real driver declaration, where the phrase - <var class="Fa">name</var> is used as the naming prefix for the driver and - its functions. Note that it is supplied as plain text, and not a - <code class="Li">char</code> or <code class="Li">char *</code>.</p> -<p class="Pp"><var class="Fa">busname</var> is the parent bus of the driver - (PCI, ISA, PPBUS and others), e.g. - ‘<code class="Li">pci</code>’, - ‘<code class="Li">isa</code>’, or - ‘<code class="Li">ppbus</code>’.</p> -<p class="Pp" id="DRIVER_MODULE~2">The identifier used in - <a class="permalink" href="#DRIVER_MODULE~2"><code class="Fn">DRIVER_MODULE</code></a>() - can be different from the driver name. Also, the same driver identifier can - exist on different buses, which is a pretty clean way of making front ends - for different cards using the same driver on the same or different buses. - For example, the following is allowed:</p> -<p class="Pp" id="DRIVER_MODULE~3"><a class="permalink" href="#DRIVER_MODULE~3"><code class="Fn">DRIVER_MODULE</code></a>(<var class="Fa">foo</var>, - <var class="Fa">isa</var>, <var class="Fa">foo_driver</var>, - <var class="Fa">NULL</var>, <var class="Fa">NULL</var>);</p> -<p class="Pp" id="DRIVER_MODULE~4"><a class="permalink" href="#DRIVER_MODULE~4"><code class="Fn">DRIVER_MODULE</code></a>(<var class="Fa">foo</var>, - <var class="Fa">pci</var>, <var class="Fa">foo_driver</var>, - <var class="Fa">NULL</var>, <var class="Fa">NULL</var>);</p> -<p class="Pp" id="DRIVER_MODULE~5"><var class="Fa">driver</var> is the driver of - type <code class="Li">driver_t</code>, which contains the information about - the driver and is therefore one of the two most important parts of the call - to - <a class="permalink" href="#DRIVER_MODULE~5"><code class="Fn">DRIVER_MODULE</code></a>().</p> -<p class="Pp">The <var class="Fa">evh</var> argument is the event handler which - is called when the driver (or module) is loaded or unloaded (see - <a class="Xr">module(9)</a>).</p> -<p class="Pp">The <var class="Fa">arg</var> is unused at this time and should be - a <code class="Dv">NULL</code> pointer.</p> -<p class="Pp" id="DRIVER_MODULE_ORDERED">The - <a class="permalink" href="#DRIVER_MODULE_ORDERED"><code class="Fn">DRIVER_MODULE_ORDERED</code></a>() - macro allows a driver to be registered in a specific order. This can be - useful if a single kernel module contains multiple drivers that are - inter-dependent. The <var class="Fa">order</var> argument should be one of - the <a class="Xr">SYSINIT(9)</a> initialization ordering constants - (<code class="Dv">SI_ORDER_*</code>). The default order for a driver module - is <code class="Dv">SI_ORDER_MIDDLE</code>. Typically a module will specify - an order of <code class="Dv">SI_ORDER_ANY</code> for a single driver to - ensure it is registered last.</p> -<p class="Pp" id="EARLY_DRIVER_MODULE">The - <a class="permalink" href="#EARLY_DRIVER_MODULE"><code class="Fn">EARLY_DRIVER_MODULE</code></a>() - macro allows a driver to be registered for a specific pass level. The boot - time probe and attach process makes multiple passes over the device tree. - Certain critical drivers that provide basic services needed by other devices - are attached during earlier passes. Most drivers are attached in a final - general pass. A driver that attaches during an early pass must register for - a specific pass level (BUS_PASS_*) via the <var class="Fa">pass</var> - argument. Once a driver is registered it is available to attach to devices - for all subsequent passes.</p> -<p class="Pp" id="EARLY_DRIVER_MODULE_ORDERED">The - <a class="permalink" href="#EARLY_DRIVER_MODULE_ORDERED"><code class="Fn">EARLY_DRIVER_MODULE_ORDERED</code></a>() - macro allows a driver to be registered both in a specific order and for a - specific pass level.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a>, - <a class="Xr">module(9)</a>, <a class="Xr">MODULE_PNP_INFO(9)</a>, - <a class="Xr">SYSINIT(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">Prior to <span class="Ux">FreeBSD 14.0</span>, these macros - accepted an additional <var class="Vt">devclass_t</var> argument after - <var class="Fa">driver</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Alexander - Langer</span> - <<a class="Mt" href="mailto:alex@FreeBSD.org">alex@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 19, 2022</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/EVENTHANDLER.9 3.html b/static/freebsd/man9/EVENTHANDLER.9 3.html deleted file mode 100644 index c63fa5bf..00000000 --- a/static/freebsd/man9/EVENTHANDLER.9 3.html +++ /dev/null @@ -1,231 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">EVENTHANDLER(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">EVENTHANDLER(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">EVENTHANDLER</code> — - <span class="Nd">kernel event handling functions</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/eventhandler.h</a>></code></p> -<p class="Pp"><code class="Fn">EVENTHANDLER_DECLARE</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">type</var>);</p> -<p class="Pp"><code class="Fn">EVENTHANDLER_DEFINE</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">arg</var>, - <var class="Fa" style="white-space: nowrap;">priority</var>);</p> -<p class="Pp"><code class="Fn">EVENTHANDLER_INVOKE</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">eventhandler_tag</var> - <br/> - <code class="Fn">EVENTHANDLER_REGISTER</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">arg</var>, - <var class="Fa" style="white-space: nowrap;">priority</var>);</p> -<p class="Pp"><code class="Fn">EVENTHANDLER_DEREGISTER</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">tag</var>);</p> -<p class="Pp"><code class="Fn">EVENTHANDLER_DEREGISTER_NOWAIT</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">tag</var>);</p> -<p class="Pp"><code class="Fn">EVENTHANDLER_LIST_DECLARE</code>(<var class="Fa" style="white-space: nowrap;">name</var>);</p> -<p class="Pp"><code class="Fn">EVENTHANDLER_LIST_DEFINE</code>(<var class="Fa" style="white-space: nowrap;">name</var>);</p> -<p class="Pp"><code class="Fn">EVENTHANDLER_DIRECT_INVOKE</code>(<var class="Fa" style="white-space: nowrap;">name</var>);</p> -<p class="Pp"><var class="Ft">eventhandler_tag</var> - <br/> - <code class="Fn">eventhandler_register</code>(<var class="Fa">struct - eventhandler_list *list</var>, <var class="Fa">const char *name</var>, - <var class="Fa">void *func</var>, <var class="Fa">void *arg</var>, - <var class="Fa">int priority</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">eventhandler_deregister</code>(<var class="Fa">struct - eventhandler_list *list</var>, <var class="Fa">eventhandler_tag - tag</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">eventhandler_deregister_nowait</code>(<var class="Fa">struct - eventhandler_list *list</var>, <var class="Fa">eventhandler_tag - tag</var>);</p> -<p class="Pp"><var class="Ft">struct eventhandler_list *</var> - <br/> - <code class="Fn">eventhandler_find_list</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">eventhandler_prune_list</code>(<var class="Fa" style="white-space: nowrap;">struct - eventhandler_list *list</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">EVENTHANDLER</code> mechanism provides a way - for kernel subsystems to register interest in kernel events and have their - callback functions invoked when these events occur.</p> -<p class="Pp">Callback functions are invoked in order of priority. The relative - priority of each callback among other callbacks associated with an event is - given by argument <var class="Fa">priority</var>, which is an integer - ranging from <code class="Dv">EVENTHANDLER_PRI_FIRST</code> (highest - priority), to <code class="Dv">EVENTHANDLER_PRI_LAST</code> (lowest - priority). The symbol <code class="Dv">EVENTHANDLER_PRI_ANY</code> may be - used if the handler does not have a specific priority associated with - it.</p> -<p class="Pp" id="EVENTHANDLER_LIST_DEFINE">The normal way to use this subsystem - is via the macro interface. For events that are high frequency it is - suggested that you additionally use - <a class="permalink" href="#EVENTHANDLER_LIST_DEFINE"><code class="Fn">EVENTHANDLER_LIST_DEFINE</code></a>() - so that the event handlers can be invoked directly using - <a class="permalink" href="#EVENTHANDLER_DIRECT_INVOKE"><code class="Fn" id="EVENTHANDLER_DIRECT_INVOKE">EVENTHANDLER_DIRECT_INVOKE</code></a>() - (see below). This saves the invoker from having to do a locked traversal of - a global list of event handler lists.</p> -<dl class="Bl-tag"> - <dt id="EVENTHANDLER_DECLARE"><a class="permalink" href="#EVENTHANDLER_DECLARE"><code class="Fn">EVENTHANDLER_DECLARE</code></a>()</dt> - <dd>This macro declares an event handler named by argument - <var class="Fa">name</var> with callback functions of type - <var class="Fa">type</var>.</dd> - <dt id="EVENTHANDLER_DEFINE"><a class="permalink" href="#EVENTHANDLER_DEFINE"><code class="Fn">EVENTHANDLER_DEFINE</code></a>()</dt> - <dd>This macro uses <a class="Xr">SYSINIT(9)</a> to register a callback - function <var class="Fa">func</var> with event handler - <var class="Fa">name</var>. When invoked, function - <var class="Fa">func</var> will be invoked with argument - <var class="Fa">arg</var> as its first parameter along with any additional - parameters passed in via macro - <a class="permalink" href="#EVENTHANDLER_INVOKE"><code class="Fn" id="EVENTHANDLER_INVOKE">EVENTHANDLER_INVOKE</code></a>() - (see below).</dd> - <dt id="EVENTHANDLER_REGISTER"><a class="permalink" href="#EVENTHANDLER_REGISTER"><code class="Fn">EVENTHANDLER_REGISTER</code></a>()</dt> - <dd>This macro registers a callback function <var class="Fa">func</var> with - event handler <var class="Fa">name</var>. When invoked, function - <var class="Fa">func</var> will be invoked with argument - <var class="Fa">arg</var> as its first parameter along with any additional - parameters passed in via macro - <code class="Fn">EVENTHANDLER_INVOKE</code>() (see below). - <code class="Fn">EVENTHANDLER_REGISTER</code>() returns a cookie of type - <var class="Vt">eventhandler_tag</var>.</dd> - <dt id="EVENTHANDLER_DEREGISTER"><a class="permalink" href="#EVENTHANDLER_DEREGISTER"><code class="Fn">EVENTHANDLER_DEREGISTER</code></a>()</dt> - <dd>This macro removes a previously registered callback associated with tag - <var class="Fa">tag</var> from the event handler named by argument - <var class="Fa">name</var>. It waits until no threads are running handlers - for this event before returning, making it safe to unload a module - immediately upon return from this function.</dd> - <dt id="EVENTHANDLER_DEREGISTER_NOWAIT"><a class="permalink" href="#EVENTHANDLER_DEREGISTER_NOWAIT"><code class="Fn">EVENTHANDLER_DEREGISTER_NOWAIT</code></a>()</dt> - <dd>This macro removes a previously registered callback associated with tag - <var class="Fa">tag</var> from the event handler named by argument - <var class="Fa">name</var>. Upon return, one or more threads could still - be running the removed function(s), but no new calls will be made. To - remove a handler function from within that function, use this version of - deregister, to avoid a deadlock.</dd> - <dt><code class="Fn">EVENTHANDLER_INVOKE</code>()</dt> - <dd>This macro is used to invoke all the callbacks associated with event - handler <var class="Fa">name</var>. This macro is a variadic one. - Additional arguments to the macro after the <var class="Fa">name</var> - parameter are passed as the second and subsequent arguments to each - registered callback function.</dd> - <dt><code class="Fn">EVENTHANDLER_LIST_DEFINE</code>()</dt> - <dd>This macro defines a reference to an event handler list named by argument - <var class="Fa">name</var>. It uses <a class="Xr">SYSINIT(9)</a> to - initialize the reference and the eventhandler list.</dd> - <dt id="EVENTHANDLER_LIST_DECLARE"><a class="permalink" href="#EVENTHANDLER_LIST_DECLARE"><code class="Fn">EVENTHANDLER_LIST_DECLARE</code></a>()</dt> - <dd>This macro declares an event handler list named by argument - <var class="Fa">name</var>. This is only needed for users of - <code class="Fn">EVENTHANDLER_DIRECT_INVOKE</code>() which are not in the - same compilation unit of that list's definition.</dd> - <dt><code class="Fn">EVENTHANDLER_DIRECT_INVOKE</code>()</dt> - <dd>This macro invokes the event handlers registered for the list named by - argument <var class="Fa">name</var>. This macro can only be used if the - list was defined with <code class="Fn">EVENTHANDLER_LIST_DEFINE</code>(). - The macro is variadic with the same semantics as - <code class="Fn">EVENTHANDLER_INVOKE</code>().</dd> -</dl> -<p class="Pp">The macros are implemented using the following functions:</p> -<dl class="Bl-tag"> - <dt id="eventhandler_register"><a class="permalink" href="#eventhandler_register"><code class="Fn">eventhandler_register</code></a>()</dt> - <dd>The <code class="Fn">eventhandler_register</code>() function is used to - register a callback with a given event. The arguments expected by this - function are: - <dl class="Bl-tag"> - <dt><var class="Fa">list</var></dt> - <dd>A pointer to an existing event handler list, or - <code class="Dv">NULL</code>. If <var class="Fa">list</var> is - <code class="Dv">NULL</code>, the event handler list corresponding to - argument <var class="Fa">name</var> is used.</dd> - <dt><var class="Fa">name</var></dt> - <dd>The name of the event handler list.</dd> - <dt><var class="Fa">func</var></dt> - <dd>A pointer to a callback function. Argument <var class="Fa">arg</var> - is passed to the callback function <var class="Fa">func</var> as its - first argument when it is invoked.</dd> - <dt><var class="Fa">priority</var></dt> - <dd>The relative priority of this callback among all the callbacks - registered for this event. Valid values are those in the range - <code class="Dv">EVENTHANDLER_PRI_FIRST</code> to - <code class="Dv">EVENTHANDLER_PRI_LAST</code>.</dd> - </dl> - <p class="Pp" id="eventhandler_register~2">The - <a class="permalink" href="#eventhandler_register~2"><code class="Fn">eventhandler_register</code></a>() - function returns a <var class="Fa">tag</var> that can later be used with - <a class="permalink" href="#eventhandler_deregister"><code class="Fn" id="eventhandler_deregister">eventhandler_deregister</code></a>() - to remove the particular callback function.</p> - </dd> - <dt><code class="Fn">eventhandler_deregister</code>()</dt> - <dd>The <code class="Fn">eventhandler_deregister</code>() function removes the - callback associated with tag <var class="Fa">tag</var> from the event - handler list pointed to by <var class="Fa">list</var>. If - <var class="Fa">tag</var> is <var class="Va">NULL</var>, all callback - functions for the event are removed. This function will not return until - all threads have exited from the removed handler callback function(s). - This function is not safe to call from inside an event handler - callback.</dd> - <dt id="eventhandler_deregister_nowait"><a class="permalink" href="#eventhandler_deregister_nowait"><code class="Fn">eventhandler_deregister_nowait</code></a>()</dt> - <dd>The <code class="Fn">eventhandler_deregister</code>() function removes the - callback associated with tag <var class="Fa">tag</var> from the event - handler list pointed to by <var class="Fa">list</var>. This function is - safe to call from inside an event handler callback.</dd> - <dt id="eventhandler_find_list"><a class="permalink" href="#eventhandler_find_list"><code class="Fn">eventhandler_find_list</code></a>()</dt> - <dd>The <code class="Fn">eventhandler_find_list</code>() function returns a - pointer to event handler list structure corresponding to event - <var class="Fa">name</var>.</dd> - <dt id="eventhandler_prune_list"><a class="permalink" href="#eventhandler_prune_list"><code class="Fn">eventhandler_prune_list</code></a>()</dt> - <dd>The <code class="Fn">eventhandler_prune_list</code>() function removes all - deregistered callbacks from the event list - <var class="Fa">list</var>.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The macro <code class="Fn">EVENTHANDLER_REGISTER</code>() and - function <code class="Fn">eventhandler_register</code>() return a cookie of - type <var class="Vt">eventhandler_tag</var>, which may be used in a - subsequent call to <code class="Fn">EVENTHANDLER_DEREGISTER</code>() or - <code class="Fn">eventhandler_deregister</code>().</p> -<p class="Pp">The <code class="Fn">eventhandler_find_list</code>() function - returns a pointer to an event handler list corresponding to parameter - <var class="Fa">name</var>, or <code class="Dv">NULL</code> if no such list - was found.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">EVENTHANDLER</code> facility first appeared - in <span class="Ux">FreeBSD 4.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Joseph - Koshy</span> - <<a class="Mt" href="mailto:jkoshy@FreeBSD.org">jkoshy@FreeBSD.org</a>> - and - <br/> - <span class="An">Matt Joras</span> - <<a class="Mt" href="mailto:mjoras@FreeBSD.org">mjoras@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 31, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/KASSERT.9 3.html b/static/freebsd/man9/KASSERT.9 3.html deleted file mode 100644 index 8b96b200..00000000 --- a/static/freebsd/man9/KASSERT.9 3.html +++ /dev/null @@ -1,161 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">KASSERT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">KASSERT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">KASSERT</code> — <span class="Nd">kernel - expression verification macros</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="Cd">options INVARIANTS</code></p> -<p class="Pp"> - <br/> - <code class="In">#include <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code></p> -<p class="Pp"><code class="Fn">KASSERT</code>(<var class="Fa" style="white-space: nowrap;">expression</var>, - <var class="Fa" style="white-space: nowrap;">msg</var>);</p> -<p class="Pp"><code class="Fn">MPASS</code>(<var class="Fa" style="white-space: nowrap;">expression</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Assertions are widely used within the - <span class="Ux">FreeBSD</span> kernel to verify programmatic assumptions. - For violations of run-time assumptions and invariants, it is desirable to - fail as soon and as loudly as possible. Assertions are optional code; for - non-recoverable error conditions an explicit call to - <a class="Xr">panic(9)</a> is usually preferred.</p> -<p class="Pp" id="KASSERT">The - <a class="permalink" href="#KASSERT"><code class="Fn">KASSERT</code></a>() - macro tests the given boolean <var class="Fa">expression</var>. If - <var class="Fa">expression</var> evaluates to <code class="Dv">false</code>, - and the kernel is compiled with <code class="Cd">options INVARIANTS</code>, - the <a class="Xr">panic(9)</a> function is called. This terminates the - running system at the point of the error, possibly dropping into the kernel - debugger or initiating a kernel core dump. The second argument, - <var class="Fa">msg</var>, is a <a class="Xr">printf(9)</a> format string - and its arguments, enclosed in parentheses. The formatted string will become - the panic string.</p> -<p class="Pp">In a kernel that is built without <code class="Cd">options - INVARIANTS</code>, the assertion macros are defined to be no-ops. This - eliminates the runtime overhead of widespread assertions from release builds - of the kernel. Therefore, checks which can be performed in a constant amount - of time can be added as assertions without concern about their performance - impact. More expensive checks, such as those that output to console, or - verify the integrity of a chain of objects are generally best hidden behind - the <code class="Cd">DIAGNOSTIC</code> kernel option.</p> -<p class="Pp" id="MPASS">The - <a class="permalink" href="#MPASS"><code class="Fn">MPASS</code></a>() macro - (read as: "must-pass") is a convenience wrapper around - <code class="Fn">KASSERT</code>() that automatically generates a simple - assertion message including file and line information.</p> -<section class="Ss"> -<h2 class="Ss" id="Assertion_Guidelines"><a class="permalink" href="#Assertion_Guidelines">Assertion - Guidelines</a></h2> -<p class="Pp">When adding new assertions, keep in mind their primary purpose: to - aid in identifying and debugging of complex error conditions.</p> -<p class="Pp">The panic messages resulting from assertion failures should be - useful without the resulting kernel dump; the message may be included in a - bug report, and should contain the relevant information needed to discern - how the assertion was violated. This is especially important when the error - condition is difficult or impossible for the developer to reproduce - locally.</p> -<p class="Pp">Therefore, assertions should adhere to the following - guidelines:</p> -<ol class="Bl-enum"> - <li>Whenever possible, the value of a runtime variable checked by an assertion - condition should appear in its message.</li> - <li>Unrelated conditions must appear in separate assertions.</li> - <li>Multiple related conditions should be distinguishable (e.g. by value), or - split into separate assertions.</li> - <li>When in doubt, print more information, not less.</li> -</ol> -<p class="Pp">Combined, this gives greater clarity into the exact cause of an - assertion panic; see <a class="Sx" href="#EXAMPLES">EXAMPLES</a> below.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">A hypothetical <var class="Vt">struct foo</var> object must not - have its 'active' flag set when calling - <code class="Fn">foo_dealloc</code>():</p> -<div class="Bd Pp Bd-indent Li"> -<pre>void -foo_dealloc(struct foo *fp) -{ - - KASSERT((fp->foo_flags & FOO_ACTIVE) == 0, - ("%s: fp %p is still active, flags=%x", __func__, fp, - fp->foo_flags)); - ... -}</pre> -</div> -<p class="Pp">This assertion provides the full flag set for the object, as well - as the memory pointer, which may be used by a debugger to examine the object - in detail (for example with a 'show foo' command in - <a class="Xr">ddb(4)</a>).</p> -<p class="Pp">The assertion</p> -<div class="Bd Pp Bd-indent Li"> -<pre>MPASS(td == curthread);</pre> -</div> -<p class="Pp">located on line 87 of a file named foo.c would generate the - following panic message:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>panic: Assertion td == curthread failed at foo.c:87</pre> -</div> -<p class="Pp">This is a simple condition, and the message provides enough - information to investigate the failure.</p> -<p class="Pp">The assertion</p> -<div class="Bd Pp Bd-indent Li"> -<pre>MPASS(td == curthread && (sz >= SIZE_MIN && sz <= SIZE_MAX));</pre> -</div> -<p class="Pp" id="NOT">is - <a class="permalink" href="#NOT"><i class="Em">NOT</i></a> useful enough. - The message doesn't indicate which part of the assertion was violated, nor - does it report the value of <code class="Dv">sz</code>, which may be - critical to understanding - <a class="permalink" href="#why"><i class="Em" id="why">why</i></a> the - assertion failed.</p> -<p class="Pp">According to the guidelines above, this would be correctly - expressed as:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>MPASS(td == curthread); -KASSERT(sz >= SIZE_MIN && sz <= SIZE_MAX, - ("invalid size argument: %u", sz));</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">MPASS</code> macro first appeared in - <span class="Ux">BSD/OS</span> and was imported into - <span class="Ux">FreeBSD 5.0</span>. The name originates as an acronym of - "multi-processor assert", but has evolved to mean "must - pass", or "must-pass assert".</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">panic(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Jonathan M. - Bresler</span> - <<a class="Mt" href="mailto:jmb@FreeBSD.org">jmb@FreeBSD.org</a>> and - <br/> - <span class="An">Mitchell Horne</span> - <<a class="Mt" href="mailto:mhorne@FreeBSD.org">mhorne@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 19, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/LOCK_PROFILING.9 3.html b/static/freebsd/man9/LOCK_PROFILING.9 3.html deleted file mode 100644 index 996a990b..00000000 --- a/static/freebsd/man9/LOCK_PROFILING.9 3.html +++ /dev/null @@ -1,150 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">LOCK_PROFILING(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">LOCK_PROFILING(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">LOCK_PROFILING</code> — - <span class="Nd">kernel lock profiling support</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="Cd">options LOCK_PROFILING</code></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Dv">LOCK_PROFILING</code> kernel option adds - support for measuring and reporting lock use and contention statistics. - These statistics are collated by “acquisition point”. - Acquisition points are distinct places in the kernel source code (identified - by source file name and line number) where a lock is acquired.</p> -<p class="Pp">For each acquisition point, the following statistics are - accumulated:</p> -<ul class="Bl-bullet"> - <li>The longest time the lock was ever continuously held after being acquired - at this point.</li> - <li>The total time the lock was held after being acquired at this point.</li> - <li>The total time that threads have spent waiting to acquire the lock.</li> - <li>The total number of non-recursive acquisitions.</li> - <li>The total number of times the lock was already held by another thread when - this point was reached, requiring a spin or a sleep.</li> - <li>The total number of times another thread tried to acquire the lock while - it was held after having been acquired at this point.</li> -</ul> -<p class="Pp">In addition, the average hold time and average wait time are - derived from the total hold time and total wait time respectively and the - number of acquisitions.</p> -<p class="Pp">The <code class="Dv">LOCK_PROFILING</code> kernel option also adds - the following <a class="Xr">sysctl(8)</a> variables to control and monitor - the profiling code:</p> -<dl class="Bl-tag"> - <dt id="debug.lock.prof.enable"><var class="Va">debug.lock.prof.enable</var></dt> - <dd>Enable or disable the lock profiling code. This defaults to 0 (off).</dd> - <dt id="debug.lock.prof.reset"><var class="Va">debug.lock.prof.reset</var></dt> - <dd>Reset the current lock profiling buffers.</dd> - <dt id="debug.lock.prof.stats"><var class="Va">debug.lock.prof.stats</var></dt> - <dd>The actual profiling statistics in plain text. The columns are as follows, - from left to right: - <dl class="Bl-tag"> - <dt id="max"><var class="Va">max</var></dt> - <dd>The longest continuous hold time in microseconds.</dd> - <dt id="wait_max"><var class="Va">wait_max</var></dt> - <dd>The longest continuous wait time in microseconds.</dd> - <dt id="total"><var class="Va">total</var></dt> - <dd>The total (accumulated) hold time in microseconds.</dd> - <dt id="wait_total"><var class="Va">wait_total</var></dt> - <dd>The total (accumulated) wait time in microseconds.</dd> - <dt id="count"><var class="Va">count</var></dt> - <dd>The total number of acquisitions.</dd> - <dt id="avg"><var class="Va">avg</var></dt> - <dd>The average hold time in microseconds, derived from the total hold - time and the number of acquisitions.</dd> - <dt id="wait_avg"><var class="Va">wait_avg</var></dt> - <dd>The average wait time in microseconds, derived from the total wait - time and the number of acquisitions.</dd> - <dt id="cnt_hold"><var class="Va">cnt_hold</var></dt> - <dd>The number of times the lock was held and another thread attempted to - acquire the lock.</dd> - <dt id="cnt_lock"><var class="Va">cnt_lock</var></dt> - <dd>The number of times the lock was already held when this point was - reached.</dd> - <dt id="name"><var class="Va">name</var></dt> - <dd>The name of the acquisition point, derived from the source file name - and line number, followed by the name of the lock in parentheses.</dd> - </dl> - </dd> - <dt id="debug.lock.prof.rejected"><var class="Va">debug.lock.prof.rejected</var></dt> - <dd>The number of acquisition points that were ignored after the table filled - up.</dd> - <dt id="debug.lock.prof.skipspin"><var class="Va">debug.lock.prof.skipspin</var></dt> - <dd>Disable or enable the lock profiling code for the spin locks. This - defaults to 0 (do profiling for the spin locks).</dd> - <dt id="debug.lock.prof.skipcount"><var class="Va">debug.lock.prof.skipcount</var></dt> - <dd>Do sampling approximately every N lock acquisitions.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">sysctl(8)</a>, <a class="Xr">mutex(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">Mutex profiling support appeared in <span class="Ux">FreeBSD - 5.0</span>. Generalized lock profiling support appeared in - <span class="Ux">FreeBSD 7.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">MUTEX_PROFILING</code> code was written by - <span class="An">Eivind Eklund</span> - <<a class="Mt" href="mailto:eivind@FreeBSD.org">eivind@FreeBSD.org</a>>, - <span class="An">Dag-Erling Smørgrav</span> - <<a class="Mt" href="mailto:des@FreeBSD.org">des@FreeBSD.org</a>> and - <span class="An">Robert Watson</span> - <<a class="Mt" href="mailto:rwatson@FreeBSD.org">rwatson@FreeBSD.org</a>>. - The <code class="Nm">LOCK_PROFILING</code> code was written by - <span class="An">Kip Macy</span> - <<a class="Mt" href="mailto:kmacy@FreeBSD.org">kmacy@FreeBSD.org</a>>. - This manual page was written by <span class="An">Dag-Erling - Smørgrav</span> - <<a class="Mt" href="mailto:des@FreeBSD.org">des@FreeBSD.org</a>>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1> -<p class="Pp">The <code class="Dv">LOCK_PROFILING</code> option increases the - size of <var class="Vt">struct lock_object</var>, so a kernel built with - that option will not work with modules built without it.</p> -<p class="Pp">The <code class="Dv">LOCK_PROFILING</code> option also prevents - inlining of the mutex code, which can result in a fairly severe performance - penalty. This is, however, not always the case. - <code class="Dv">LOCK_PROFILING</code> can introduce a substantial - performance overhead that is easily monitorable using other profiling tools, - so combining profiling tools with <code class="Dv">LOCK_PROFILING</code> is - not recommended.</p> -<p class="Pp">Measurements are made and stored in nanoseconds using - <a class="Xr">nanotime(9)</a>, (on architectures without a synchronized TSC) - but are presented in microseconds. This should still be sufficient for the - locks one would be most interested in profiling (those that are held long - and/or acquired often).</p> -<p class="Pp"><code class="Dv">LOCK_PROFILING</code> should generally not be - used in combination with other debugging options, as the results may be - strongly affected by interactions between the features. In particular, - <code class="Dv">LOCK_PROFILING</code> will report higher than normal - <a class="Xr">uma(9)</a> lock contention when run with - <code class="Dv">INVARIANTS</code> due to extra locking that occurs when - <code class="Dv">INVARIANTS</code> is present; likewise, using it in - combination with <code class="Dv">WITNESS</code> will lead to much higher - lock hold times and contention in profiling output.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 7, 2012</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/MODULE_DEPEND.9 4.html b/static/freebsd/man9/MODULE_DEPEND.9 4.html deleted file mode 100644 index d6ada94a..00000000 --- a/static/freebsd/man9/MODULE_DEPEND.9 4.html +++ /dev/null @@ -1,74 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">MODULE_DEPEND(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">MODULE_DEPEND(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">MODULE_DEPEND</code> — - <span class="Nd">set kernel module dependencies</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/module.h</a>></code></p> -<p class="Pp"><code class="Fn">MODULE_DEPEND</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">moddepend</var>, - <var class="Fa" style="white-space: nowrap;">int minversion</var>, - <var class="Fa" style="white-space: nowrap;">int prefversion</var>, - <var class="Fa" style="white-space: nowrap;">int maxversion</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#MODULE_DEPEND"><code class="Fn" id="MODULE_DEPEND">MODULE_DEPEND</code></a>() - macro sets a dependency on another kernel module with name - <var class="Fa">moddepend</var>, which has registered its version with - <a class="permalink" href="#MODULE_VERSION"><code class="Fn" id="MODULE_VERSION">MODULE_VERSION</code></a>().</p> -<p class="Pp" id="MODULE_DEPEND~2">The - <a class="permalink" href="#MODULE_DEPEND~2"><code class="Fn">MODULE_DEPEND</code></a>() - macro provides hints to the kernel <a class="Xr">loader(8)</a> and to the - kernel linker to ensure that the named dependency is loaded prior to the - existing module. It does not change or dictate the order in which modules - are initialized at runtime.</p> -<p class="Pp">Three versions must be specified for - <var class="Fa">moddepend</var>:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">minversion</var></dt> - <dd>The minimum version on which the current module can depend.</dd> - <dt><var class="Fa">maxversion</var></dt> - <dd>The maximum version on which the current module can depend.</dd> - <dt><var class="Fa">prefversion</var></dt> - <dd>The preferred version on which the current module can depend.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<div class="Bd Li"> -<pre>MODULE_DEPEND(foo, bar, 1, 3, 4);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">DECLARE_MODULE(9)</a>, <a class="Xr">module(9)</a>, - <a class="Xr">MODULE_VERSION(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Alexander - Langer</span> - <<a class="Mt" href="mailto:alex@FreeBSD.org">alex@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 11, 2005</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/MODULE_PNP_INFO.9 4.html b/static/freebsd/man9/MODULE_PNP_INFO.9 4.html deleted file mode 100644 index c8adacb0..00000000 --- a/static/freebsd/man9/MODULE_PNP_INFO.9 4.html +++ /dev/null @@ -1,177 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">MODULE_PNP_INFO(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">MODULE_PNP_INFO(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">MODULE_PNP_INFO</code> — - <span class="Nd">register plug and play information for device - matching</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/module.h</a>></code></p> -<p class="Pp"><code class="Fn">MODULE_PNP_INFO</code>(<var class="Fa">const char - *descriptor_string</var>, <var class="Fa">bus</var>, - <var class="Fa">module</var>, <var class="Fa">void *table</var>, - <var class="Fa">size_t num_entries</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#MODULE_PNP_INFO"><code class="Fn" id="MODULE_PNP_INFO">MODULE_PNP_INFO</code></a>() - macro registers a <var class="Fa">table</var> of device-identifying data for - use by <a class="Xr">devmatch(8)</a>. Since it is built off module marking - macros, it must follow a <a class="Xr">DRIVER_MODULE(9)</a> line.</p> -<p class="Pp">The macro takes a <var class="Fa">descriptor_string</var> that - describes the memory layout of table entries. The string is a series of - members separated by semi-colons. Members are identified by a type and a - name. They are encoded in the descriptor string by concatenating the type - with a colon, followed by the name. (The special type - <var class="Vt">W32</var> represents two members. The first name is encoded - like any other type. The second name is encoded by appending a forward slash - and the second name after the first.)</p> -<p class="Pp">Types are one of the following:</p> -<dl class="Bl-tag"> - <dt>“<var class="Vt">U8</var>”</dt> - <dd><var class="Vt">uint8_t</var> element.</dd> - <dt>“<var class="Vt">V8</var>”</dt> - <dd>Same as <var class="Vt">U8</var>, except that the sentinel value 0xFF - matches any.</dd> - <dt>“<var class="Vt">G16</var>”</dt> - <dd><var class="Vt">uint16_t</var> element; any value greater than or equal - matches.</dd> - <dt>“<var class="Vt">L16</var>”</dt> - <dd><var class="Vt">uint16_t</var> element; any value less than or equal - matches.</dd> - <dt>“<var class="Vt">M16</var>”</dt> - <dd><var class="Vt">uint16_t</var> element; mask of which of the following - fields to use.</dd> - <dt>“<var class="Vt">U16</var>”</dt> - <dd><var class="Vt">uint16_t</var> element.</dd> - <dt>“<var class="Vt">V16</var>”</dt> - <dd>Same as <var class="Vt">U16</var>, except that the sentinel value 0xFFFF - matches any.</dd> - <dt>“<var class="Vt">U32</var>”</dt> - <dd><var class="Vt">uint32_t</var> element.</dd> - <dt>“<var class="Vt">V32</var>”</dt> - <dd>Same as <var class="Vt">U32</var>, except that the sentinel value - 0xFFFFFFFF matches any.</dd> - <dt>“<var class="Vt">W32</var>”</dt> - <dd>Two <var class="Vt">uint16_t</var> values; the first named member is in - the least significant word and the second named member is in the most - significant word.</dd> - <dt>“<var class="Vt">Z</var>”</dt> - <dd>A pointer to a string to match exactly.</dd> - <dt>“<var class="Vt">D</var>”</dt> - <dd>A pointer to a human readable description for the device.</dd> - <dt>“<var class="Vt">P</var>”</dt> - <dd>A pointer that should be ignored.</dd> - <dt>“<var class="Vt">E</var>”</dt> - <dd>EISA PNP Identifier.</dd> - <dt>“<var class="Vt">T</var>”</dt> - <dd>PNP info that is true for the whole table. The driver code checks for - these condition pragmatically before using this table to match devices. - This item must come last in the list.</dd> -</dl> -<p class="Pp">The pseudo-name “#” is reserved for fields that - should be ignored. Any member that does not match the parent device's - pnpinfo output must be ignored.</p> -<p class="Pp">The <var class="Fa">bus</var> parameter is an unquoted word naming - the parent bus of the driver. For example, “pci”.</p> -<p class="Pp">The <var class="Fa">module</var> parameter is also an unquoted - word. It must be unique to the driver. Usually the driver's name is - used.</p> -<p class="Pp">The <var class="Fa">table</var> parameter points to the device - matching data with entries matching the - <var class="Fa">descriptor_string</var>.</p> -<p class="Pp">The <var class="Fa">num_entries</var> parameter is the number of - entries in the table, i.e., - ‘<code class="Li">nitems(table)</code>’. Note that only valid - entries should be included. If the table contains trailing zero or bogus - values, they should not be included in - <var class="Fa">num_entries</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<dl class="Bl-tag"> - <dt id="Example"><a class="permalink" href="#Example"><b class="Sy">Example - 1:</b></a> <span class="No">Using W32 for vendor/device pair</span></dt> - <dd> - <p class="Pp">The following example shows usage of <var class="Vt">W32</var> - type when vendor/device values are combined into single - <var class="Vt">uint32_t</var> value:</p> - <div class="Bd Pp Li"> - <pre>#include <sys/param.h> -#include <sys/module.h> - -static struct my_pciids { - uint32_t devid; - const char *desc; -} my_ids[] = { - { 0x12345678, "Foo bar" }, - { 0x9abcdef0, "Baz fizz" }, -}; - -MODULE_PNP_INFO("W32:vendor/device;D:#", pci, my_driver, my_ids, - nitems(my_ids));</pre> - </div> - </dd> - <dt id="Example~2"><a class="permalink" href="#Example~2"><b class="Sy">Example - 2:</b></a> <span class="No">Using T for common vendor value</span></dt> - <dd> - <p class="Pp">The following example shows usage of <var class="Vt">T</var> - type when all entries in the table have the same vendor value:</p> - <div class="Bd Pp Li"> - <pre>#include <sys/param.h> -#include <sys/module.h> - -static struct my_pciids { - uint16_t device; - const char *desc; -} my_ids[] = { - { 0x9abc, "Foo bar" }, - { 0xdef0, "Baz fizz" }, -}; - -MODULE_PNP_INFO("U16:device;D:#;T:vendor=0x1234", pci, my_driver, - my_ids, nitems(my_ids));</pre> - </div> - </dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">The <code class="Nm">MODULE_PNP_INFO</code> macro must follow - <code class="Dv">DRIVER_MODULE</code> invocations due to limitations in the - <code class="Dv">linker.hints</code> file format.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devmatch(8)</a>, <a class="Xr">DRIVER_MODULE(9)</a>, - <a class="Xr">module(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The macro <code class="Nm">MODULE_PNP_INFO</code> appeared in - <span class="Ux">FreeBSD 11.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The PNP framework and <a class="Xr">devmatch(8)</a> utility were - written by <span class="An">Warner Losh</span> - <<a class="Mt" href="mailto:imp@FreeBSD.org">imp@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 23, 2019</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/MODULE_VERSION.9 4.html b/static/freebsd/man9/MODULE_VERSION.9 4.html deleted file mode 100644 index 83840d42..00000000 --- a/static/freebsd/man9/MODULE_VERSION.9 4.html +++ /dev/null @@ -1,55 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">MODULE_VERSION(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">MODULE_VERSION(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">MODULE_VERSION</code> — - <span class="Nd">set kernel module version</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/module.h</a>></code></p> -<p class="Pp"><code class="Fn">MODULE_VERSION</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">int version</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#MODULE_VERSION"><code class="Fn" id="MODULE_VERSION">MODULE_VERSION</code></a>() - macro sets the version of the module called <var class="Fa">name</var>. - Other kernel modules can then depend on this module (see - <a class="Xr">MODULE_DEPEND(9)</a>).</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<div class="Bd Li"> -<pre>MODULE_VERSION(foo, 1);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">DECLARE_MODULE(9)</a>, <a class="Xr">module(9)</a>, - <a class="Xr">MODULE_DEPEND(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Alexander - Langer</span> - <<a class="Mt" href="mailto:alex@FreeBSD.org">alex@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 11, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/OF_child.9 4.html b/static/freebsd/man9/OF_child.9 4.html deleted file mode 100644 index 931a95f6..00000000 --- a/static/freebsd/man9/OF_child.9 4.html +++ /dev/null @@ -1,76 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">OF_CHILD(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">OF_CHILD(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">OF_child</code>, - <code class="Nm">OF_parent</code>, <code class="Nm">OF_peer</code> — - <span class="Nd">navigate device tree</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">dev/ofw/ofw_bus.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">dev/ofw/ofw_bus_subr.h</a>></code></p> -<p class="Pp"><var class="Ft">phandle_t</var> - <br/> - <code class="Fn">OF_child</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>);</p> -<p class="Pp"><var class="Ft">phandle_t</var> - <br/> - <code class="Fn">OF_parent</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>);</p> -<p class="Pp"><var class="Ft">phandle_t</var> - <br/> - <code class="Fn">OF_peer</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><a class="permalink" href="#OF_child"><code class="Fn" id="OF_child">OF_child</code></a>() - returns the phandle value of the first child of the - <var class="Fa">node</var>. Zero is returned if there are no child - nodes.</p> -<p class="Pp" id="OF_parent"><a class="permalink" href="#OF_parent"><code class="Fn">OF_parent</code></a>() - returns the phandle for the parent of the <var class="Fa">node</var>. Zero - is returned if <var class="Fa">node</var> is the root node.</p> -<p class="Pp" id="OF_peer"><a class="permalink" href="#OF_peer"><code class="Fn">OF_peer</code></a>() - returns the phandle value of the next sibling of the - <var class="Fa">node</var>. Zero is returned if there is no sibling - node.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<div class="Bd Li"> -<pre>phandle_t node, child; - ... -for (child = OF_child(node); child != 0; child = OF_peer(child) { - ... -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">OF_finddevice(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Oleksandr - Tymoshenko</span> - <<a class="Mt" href="mailto:gonzo@FreeBSD.org">gonzo@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 9, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/OF_device_from_xref.9 3.html b/static/freebsd/man9/OF_device_from_xref.9 3.html deleted file mode 100644 index b6a0ec64..00000000 --- a/static/freebsd/man9/OF_device_from_xref.9 3.html +++ /dev/null @@ -1,101 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">OF_DEVICE_FROM_XREF(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">OF_DEVICE_FROM_XREF(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">OF_device_from_xref</code>, - <code class="Nm">OF_xref_from_device</code>, - <code class="Nm">OF_device_register_xref</code> - <code class="Nm">OF_device_unregister_xref</code> — - <span class="Nd">manage mappings between xrefs and devices</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">dev/ofw/ofw_bus.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">dev/ofw/ofw_bus_subr.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">OF_device_register_xref</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - xref</var>, <var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">OF_device_unregister_xref</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - xref</var>, <var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">device_t</var> - <br/> - <code class="Fn">OF_device_from_xref</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - xref</var>);</p> -<p class="Pp"><var class="Ft">phandle_t</var> - <br/> - <code class="Fn">OF_xref_from_device</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">When a device tree node references another node, the driver may - need to get a device_t instance associated with the referenced node. For - instance, an Ethernet driver accessing a PHY device. To make this possible, - the kernel maintains a table that maps effective handles to device_t - instances.</p> -<p class="Pp" id="OF_device_register_xref"><a class="permalink" href="#OF_device_register_xref"><code class="Fn">OF_device_register_xref</code></a>() - adds a map entry from the effective phandle <var class="Fa">xref</var> to - device <var class="Fa">dev</var>. If a mapping entry for - <var class="Fa">xref</var> already exists, it is replaced with the new one. - The function always returns 0.</p> -<p class="Pp" id="OF_device_unregister_xref"><a class="permalink" href="#OF_device_unregister_xref"><code class="Fn">OF_device_unregister_xref</code></a>() - removes a map entry from the effective phandle <var class="Fa">xref</var> to - device <var class="Fa">dev</var>. If a mapping entry for - <var class="Fa">xref</var> does not exists, it silently returns.</p> -<p class="Pp" id="OF_device_from_xref"><a class="permalink" href="#OF_device_from_xref"><code class="Fn">OF_device_from_xref</code></a>() - returns a device_t instance associated with the effective phandle - <var class="Fa">xref</var>. If no such mapping exists, the function returns - NULL.</p> -<p class="Pp" id="OF_xref_from_device"><a class="permalink" href="#OF_xref_from_device"><code class="Fn">OF_xref_from_device</code></a>() - returns the effective phandle associated with the device - <var class="Fa">dev</var>. If no such mapping exists, the function returns - 0.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<div class="Bd Li"> -<pre> static int - acmephy_attach(device_t dev) - { - phandle_t node; - - /* PHY node is referenced from eth device, register it */ - node = ofw_bus_get_node(dev); - OF_device_register_xref(OF_xref_from_node(node), dev); - - return (0); - }</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">OF_node_to_xref(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Oleksandr - Tymoshenko</span> - <<a class="Mt" href="mailto:gonzo@FreeBSD.org">gonzo@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 3, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/OF_finddevice.9 4.html b/static/freebsd/man9/OF_finddevice.9 4.html deleted file mode 100644 index 7bc1d29a..00000000 --- a/static/freebsd/man9/OF_finddevice.9 4.html +++ /dev/null @@ -1,73 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">OF_FINDDEVICE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">OF_FINDDEVICE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">OF_finddevice</code> — - <span class="Nd">find node in device tree</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">dev/ofw/ofw_bus.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">dev/ofw/ofw_bus_subr.h</a>></code></p> -<p class="Pp"><var class="Ft">phandle_t</var> - <br/> - <code class="Fn">OF_finddevice</code>(<var class="Fa" style="white-space: nowrap;">const - char *path</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><a class="permalink" href="#OF_finddevice"><code class="Fn" id="OF_finddevice">OF_finddevice</code></a>() - returns the phandle for the node specified by the - <var class="Fa">path</var>. Returns -1 if the path cannot be found in the - tree.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<div class="Bd Li"> -<pre> phandle_t root, i2c; - - root = OF_finddevice("/"); - i2c = OF_finddevice("/soc/axi/i2c@a0e0000"); - if (i2c != -1) { - ... - }</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">OF_child(9)</a>, <a class="Xr">OF_parent(9)</a>, - <a class="Xr">OF_peer(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Oleksandr - Tymoshenko</span> - <<a class="Mt" href="mailto:gonzo@FreeBSD.org">gonzo@FreeBSD.org</a>>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CAVEATS"><a class="permalink" href="#CAVEATS">CAVEATS</a></h1> -<p class="Pp">The return value should only be checked with equality operators - (equal to, not equal to) and not relational comparison (less than, greater - than ). There is a discrepancy between IEEE 1275 standard and - <span class="Ux">FreeBSD</span>'s internal representation of a phandle: IEEE - 1275 requires the return value of this function to be -1 if the path is not - found. But phandle_t is an unsigned type, so it cannot be relationally - compared with -1 or 0, this comparison is always true or always false.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 9, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/OF_getprop.9 4.html b/static/freebsd/man9/OF_getprop.9 4.html deleted file mode 100644 index 666a3bce..00000000 --- a/static/freebsd/man9/OF_getprop.9 4.html +++ /dev/null @@ -1,293 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">OF_GETPROP(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">OF_GETPROP(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">OF_getprop</code>, - <code class="Nm">OF_getproplen</code>, - <code class="Nm">OF_getencprop</code>, <code class="Nm">OF_hasprop</code>, - <code class="Nm">OF_searchprop</code>, - <code class="Nm">OF_searchencprop</code>, - <code class="Nm">OF_getprop_alloc</code>, - <code class="Nm">OF_getencprop_alloc</code>, - <code class="Nm">OF_getprop_alloc_multi</code>, - <code class="Nm">OF_getencprop_alloc_multi</code>, - <code class="Nm">OF_prop_free</code>, <code class="Nm">OF_nextprop</code>, - <code class="Nm">OF_setprop</code> — <span class="Nd">access - properties of device tree node</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">dev/ofw/ofw_bus.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">dev/ofw/ofw_bus_subr.h</a>></code></p> -<p class="Pp"><var class="Ft">ssize_t</var> - <br/> - <code class="Fn">OF_getproplen</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>, <var class="Fa" style="white-space: nowrap;">const char - *propname</var>);</p> -<p class="Pp"><var class="Ft">ssize_t</var> - <br/> - <code class="Fn">OF_getprop</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>, <var class="Fa" style="white-space: nowrap;">const char - *propname</var>, <var class="Fa" style="white-space: nowrap;">void - *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>);</p> -<p class="Pp"><var class="Ft">ssize_t</var> - <br/> - <code class="Fn">OF_getencprop</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>, <var class="Fa" style="white-space: nowrap;">const char - *prop</var>, <var class="Fa" style="white-space: nowrap;">pcell_t - *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">OF_hasprop</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>, <var class="Fa" style="white-space: nowrap;">const char - *propname</var>);</p> -<p class="Pp"><var class="Ft">ssize_t</var> - <br/> - <code class="Fn">OF_searchprop</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>, <var class="Fa" style="white-space: nowrap;">const char - *propname</var>, <var class="Fa" style="white-space: nowrap;">void - *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>);</p> -<p class="Pp"><var class="Ft">ssize_t</var> - <br/> - <code class="Fn">OF_searchencprop</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>, <var class="Fa" style="white-space: nowrap;">const char - *propname</var>, <var class="Fa" style="white-space: nowrap;">pcell_t - *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>);</p> -<p class="Pp"><var class="Ft">ssize_t</var> - <br/> - <code class="Fn">OF_getprop_alloc</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>, <var class="Fa" style="white-space: nowrap;">const char - *propname</var>, <var class="Fa" style="white-space: nowrap;">void - **buf</var>);</p> -<p class="Pp"><var class="Ft">ssize_t</var> - <br/> - <code class="Fn">OF_getencprop_alloc</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>, <var class="Fa" style="white-space: nowrap;">const char - *propname</var>, <var class="Fa" style="white-space: nowrap;">pcell_t - **buf</var>);</p> -<p class="Pp"><var class="Ft">ssize_t</var> - <br/> - <code class="Fn">OF_getprop_alloc_multi</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>, <var class="Fa" style="white-space: nowrap;">const char - *propname</var>, <var class="Fa" style="white-space: nowrap;">int - elsz</var>, <var class="Fa" style="white-space: nowrap;">void - **buf</var>);</p> -<p class="Pp"><var class="Ft">ssize_t</var> - <br/> - <code class="Fn">OF_getencprop_alloc_multi</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>, <var class="Fa" style="white-space: nowrap;">const char - *propname</var>, <var class="Fa" style="white-space: nowrap;">int - elsz</var>, <var class="Fa" style="white-space: nowrap;">pcell_t - **buf</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">OF_prop_free</code>(<var class="Fa" style="white-space: nowrap;">void - *buf</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">OF_nextprop</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>, <var class="Fa" style="white-space: nowrap;">const char - *propname</var>, <var class="Fa" style="white-space: nowrap;">char - *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">OF_setprop</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>, <var class="Fa" style="white-space: nowrap;">const char - *propname</var>, <var class="Fa" style="white-space: nowrap;">const void - *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Device nodes can have associated properties. Properties consist of - a name and a value. A name is a human-readable string from 1 to 31 - characters long. A value is an array of zero or more bytes that encode - certain information. The meaning of that bytes depends on how drivers - interpret them. Properties can encode byte arrays, text strings, unsigned - 32-bit values or any combination of these types.</p> -<p class="Pp">Property with a zero-length value usually represents boolean - information. If the property is present, it signifies true, otherwise - false.</p> -<p class="Pp">A byte array is encoded as a sequence of bytes and represents - values like MAC addresses.</p> -<p class="Pp">A text string is a sequence of n printable characters. It is - encoded as a byte array of length n + 1 bytes with characters represented as - bytes plus a terminating null character.</p> -<p class="Pp">Unsigned 32-bit values, also sometimes called cells, are encoded - as a sequence of 4 bytes in big-endian order.</p> -<p class="Pp" id="OF_getproplen"><a class="permalink" href="#OF_getproplen"><code class="Fn">OF_getproplen</code></a>() - returns either the length of the value associated with the property - <var class="Fa">propname</var> in the node identified by - <var class="Fa">node</var>, or 0 if the property exists but has no - associated value. If <var class="Fa">propname</var> does not exist, -1 is - returned.</p> -<p class="Pp" id="OF_getprop"><a class="permalink" href="#OF_getprop"><code class="Fn">OF_getprop</code></a>() - copies a maximum of <var class="Fa">len</var> bytes from the value - associated with the property <var class="Fa">propname</var> of the device - node <var class="Fa">node</var> into the memory specified by - <var class="Fa">buf</var>. Returns the actual size of the value or -1 if the - property does not exist.</p> -<p class="Pp" id="OF_getencprop"><a class="permalink" href="#OF_getencprop"><code class="Fn">OF_getencprop</code></a>() - copies a maximum of <var class="Fa">len</var> bytes into memory specified by - <var class="Fa">buf</var>, then converts cell values from big-endian to host - byte order. Returns the actual size of the value in bytes, or -1 if the - property does not exist. <var class="Fa">len</var> must be a multiple of - 4.</p> -<p class="Pp" id="OF_hasprop"><a class="permalink" href="#OF_hasprop"><code class="Fn">OF_hasprop</code></a>() - returns <code class="Dv">true</code> if the device node - <var class="Fa">node</var> has a property specified by - <var class="Fa">propname</var>, and <code class="Dv">false</code> if the - property does not exist.</p> -<p class="Pp" id="OF_searchprop"><a class="permalink" href="#OF_searchprop"><code class="Fn">OF_searchprop</code></a>() - recursively looks for the property specified by - <var class="Fa">propname</var> starting with the device node - <var class="Fa">node</var> followed by the parent node and up to the root - node. If the property is found, the function copies a maximum of - <var class="Fa">len</var> bytes of the value associated with the property - into the memory specified by <var class="Fa">buf</var>. Returns the actual - size in bytes of the value, or -1 if the property does not exist.</p> -<p class="Pp" id="OF_searchencprop"><a class="permalink" href="#OF_searchencprop"><code class="Fn">OF_searchencprop</code></a>() - recursively looks for the property specified by - <var class="Fa">propname</var> starting with the device node - <var class="Fa">node</var> followed by the parent node and up to the root - node. If the property is found, the function copies a maximum of - <var class="Fa">len</var> bytes of the value associated with the property - into the memory specified by <var class="Fa">buf</var>, then converts cell - values from big-endian to host byte order. Returns the actual size in bytes - of the value, or -1 if the property does not exist.</p> -<p class="Pp" id="OF_getprop_alloc"><a class="permalink" href="#OF_getprop_alloc"><code class="Fn">OF_getprop_alloc</code></a>() - allocates memory large enough to hold the value associated with the property - <var class="Fa">propname</var> of the device node <var class="Fa">node</var> - and copies the value into the newly allocated memory region. Returns the - actual size of the value and stores the address of the allocated memory in - <var class="Fa">*buf</var>. If the property has a zero-sized value - <var class="Fa">*buf</var> is set NULL. Returns -1 if the property does not - exist or memory allocation failed. Allocated memory should be released when - no longer required by calling <code class="Fn">OF_prop_free</code>(). The - function might sleep when allocating memory.</p> -<p class="Pp" id="OF_getencprop_alloc"><a class="permalink" href="#OF_getencprop_alloc"><code class="Fn">OF_getencprop_alloc</code></a>() - allocates enough memory to hold the value associated with the property - <var class="Fa">propname</var> of the device node - <var class="Fa">node</var>, copies the value into the newly allocated memory - region, and then converts cell values from big-endian to host byte order. - The actual size of the value is returned and the address of allocated memory - is stored in <var class="Fa">*buf</var>. If the property has zero-length - value, <var class="Fa">*buf</var> is set to NULL. Returns -1 if the property - does not exist or memory allocation failed or the size of the value is not - divisible by a cell size (4 bytes). Allocated memory should be released when - no longer required by calling <code class="Fn">OF_prop_free</code>(). The - function might sleep when allocating memory.</p> -<p class="Pp" id="OF_getprop_alloc_multi"><a class="permalink" href="#OF_getprop_alloc_multi"><code class="Fn">OF_getprop_alloc_multi</code></a>() - allocates memory large enough to hold the value associated with the property - <var class="Fa">propname</var> of the device node <var class="Fa">node</var> - and copies the value into the newly allocated memory region. The value is - expected to be an array of zero or more elements <var class="Fa">elsz</var> - bytes long. Returns the number of elements in the value and stores the - address of the allocated memory in <var class="Fa">*buf</var>. If the - property has a zero-sized value <var class="Fa">*buf</var> is set NULL. - Returns -1 if the property does not exist or memory allocation failed or the - size of the value is not divisible by <var class="Fa">elsz</var>. Allocated - memory should be released when no longer required by calling - <code class="Fn">OF_prop_free</code>(). The function might sleep when - allocating memory.</p> -<p class="Pp" id="OF_getencprop_alloc_multi"><a class="permalink" href="#OF_getencprop_alloc_multi"><code class="Fn">OF_getencprop_alloc_multi</code></a>() - allocates memory large enough to hold the value associated with the property - <var class="Fa">propname</var> of the device node <var class="Fa">node</var> - and copies the value into the newly allocated memory region, and then - converts cell values from big-endian to host byte order. The value is - expected to be an array of zero or more elements <var class="Fa">elsz</var> - bytes long. Returns the number of elements in the value and stores the - address of the allocated memory in <var class="Fa">*buf</var>. If the - property has a zero-sized value <var class="Fa">*buf</var> is set NULL. - Returns -1 if the property does not exist or memory allocation failed or the - size of the value is not divisible by <var class="Fa">elsz</var>. Allocated - memory should be released when no longer required by calling - <code class="Fn">OF_prop_free</code>(). The function might sleep when - allocating memory.</p> -<p class="Pp" id="OF_prop_free"><a class="permalink" href="#OF_prop_free"><code class="Fn">OF_prop_free</code></a>() - releases memory at <var class="Fa">buf</var> that was allocated by - <code class="Fn">OF_getprop_alloc</code>(), - <code class="Fn">OF_getencprop_alloc</code>(), - <code class="Fn">OF_getprop_alloc_multi</code>(), - <code class="Fn">OF_getencprop_alloc_multi</code>().</p> -<p class="Pp" id="OF_nextprop"><a class="permalink" href="#OF_nextprop"><code class="Fn">OF_nextprop</code></a>() - copies a maximum of <var class="Fa">size</var> bytes of the name of the - property following the <var class="Fa">propname</var> property into - <var class="Fa">buf</var>. If <var class="Fa">propname</var> is NULL, the - function copies the name of the first property of the device node - <var class="Fa">node</var>. <code class="Fn">OF_nextprop</code>() returns -1 - if <var class="Fa">propname</var> is invalid or there is an internal error, - 0 if there are no more properties after <var class="Fa">propname</var>, or 1 - otherwise.</p> -<p class="Pp" id="OF_setprop"><a class="permalink" href="#OF_setprop"><code class="Fn">OF_setprop</code></a>() - sets the value of the property <var class="Fa">propname</var> in the device - node <var class="Fa">node</var> to the value beginning at the address - specified by <var class="Fa">buf</var> and running for - <var class="Fa">len</var> bytes. If the property does not exist, the - function tries to create it. <code class="Fn">OF_setprop</code>() returns - the actual size of the new value, or -1 if the property value cannot be - changed or the new property cannot be created.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<div class="Bd Li"> -<pre> phandle_t node; - phandle_t hdmixref, hdminode; - device_t hdmi; - uint8_t mac[6]; - char *model; - - /* - * Get a byte array property - */ - if (OF_getprop(node, "eth,hwaddr", mac, sizeof(mac)) != sizeof(mac)) - return; - - /* - * Get internal node reference and device associated with it - */ - if (OF_getencprop(node, "hdmi", &hdmixref) <= 0) - return; - hdmi = OF_device_from_xref(hdmixref); - - /* - * Get string value of model property of HDMI framer node - */ - hdminode = OF_node_from_xref(hdmixref); - if (OF_getprop_alloc(hdminode, "model", (void **)&model) <= 0) - return;</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">OF_device_from_xref(9)</a>, - <a class="Xr">OF_node_from_xref(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Oleksandr - Tymoshenko</span> - <<a class="Mt" href="mailto:gonzo@FreeBSD.org">gonzo@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 16, 2026</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/OF_node_from_xref.9 3.html b/static/freebsd/man9/OF_node_from_xref.9 3.html deleted file mode 100644 index 853a528e..00000000 --- a/static/freebsd/man9/OF_node_from_xref.9 3.html +++ /dev/null @@ -1,94 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">OF_NODE_FROM_XREF(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">OF_NODE_FROM_XREF(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">OF_node_from_xref</code>, - <code class="Nm">OF_xref_from_node</code> — <span class="Nd">convert - between kernel phandle and effective phandle</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">dev/ofw/ofw_bus.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">dev/ofw/ofw_bus_subr.h</a>></code></p> -<p class="Pp"><var class="Ft">phandle_t</var> - <br/> - <code class="Fn">OF_node_from_xref</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - xref</var>);</p> -<p class="Pp"><var class="Ft">phandle_t</var> - <br/> - <code class="Fn">OF_xref_from_node</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Some OpenFirmware implementations (FDT, IBM) have a concept of - effective phandle or xrefs. They are used to cross-reference device tree - nodes. For instance, a framebuffer controller may refer to a GPIO controller - and pin that controls the backlight. In this example, the GPIO node would - have a cell (32-bit integer) property with a reserved name like - "phandle" or "linux,phandle" whose value uniquely - identifies the node. The actual name depends on the implementation. The - framebuffer node would have a property with the name described by device - bindings (device-specific set of properties). It can be a cell property or a - combined property with one part of it being a cell. The value of the - framebuffer node's property would be the same as the value of the GPIO - "phandle" property so it can be said that the framebuffer node - refers to the GPIO node. The kernel uses internal logic to assign unique - identifiers to the device tree nodes, and these values do not match the - values of "phandle" properties. - <a class="permalink" href="#OF_node_from_xref"><code class="Fn" id="OF_node_from_xref">OF_node_from_xref</code></a>() - and <code class="Fn">OF_xref_from_node</code>() are used to perform - conversion between these two kinds of node identifiers.</p> -<p class="Pp" id="OF_node_from_xref~2"><a class="permalink" href="#OF_node_from_xref~2"><code class="Fn">OF_node_from_xref</code></a>() - returns the kernel phandle for the effective phandle - <var class="Fa">xref</var>. If one cannot be found or the OpenFirmware - implementation does not support effective phandles, the function returns the - input value.</p> -<p class="Pp" id="OF_xref_from_node"><a class="permalink" href="#OF_xref_from_node"><code class="Fn">OF_xref_from_node</code></a>() - returns the effective phandle for the kernel phandle - <var class="Fa">node</var>. If one cannot be found or the OpenFirmware - implementation does not support effective phandles, the function returns the - input value.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<div class="Bd Li"> -<pre> phandle_t panelnode, panelxref; - char *model; - - if (OF_getencprop(node, "lcd-panel", &panelxref) <= 0) - return; - - panelnode = OF_node_from_xref(panelxref); - if (OF_getprop_alloc(hdminode, "model", (void **)&model) <= 0) - return;</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">OF_device_from_xref(9)</a>, - <a class="Xr">OF_device_register_xref(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Oleksandr - Tymoshenko</span> - <<a class="Mt" href="mailto:gonzo@FreeBSD.org">gonzo@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 9, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/OF_package_to_path.9 4.html b/static/freebsd/man9/OF_package_to_path.9 4.html deleted file mode 100644 index b4f4f900..00000000 --- a/static/freebsd/man9/OF_package_to_path.9 4.html +++ /dev/null @@ -1,52 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">OF_PACKAGE_TO_PATH(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">OF_PACKAGE_TO_PATH(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">OF_package_to_path</code> — - <span class="Nd">get fully qualified path to a device tree node</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">dev/ofw/ofw_bus.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">dev/ofw/ofw_bus_subr.h</a>></code></p> -<p class="Pp"><var class="Ft">ssize_t</var> - <br/> - <code class="Fn">OF_package_to_path</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>, <var class="Fa" style="white-space: nowrap;">char *buf</var>, - <var class="Fa" style="white-space: nowrap;">size_t len</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><a class="permalink" href="#OF_package_to_path"><code class="Fn" id="OF_package_to_path">OF_package_to_path</code></a>() - copies at most <var class="Fa">len</var> bytes of the fully qualified path - to the device tree node <var class="Fa">node</var> into the memory specified - by <var class="Fa">buf</var>. The function returns the number of bytes - copied or -1 in case of the error.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">OF_finddevice(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Oleksandr - Tymoshenko</span> - <<a class="Mt" href="mailto:gonzo@FreeBSD.org">gonzo@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 9, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/PCI_IOV_ADD_VF.9 3.html b/static/freebsd/man9/PCI_IOV_ADD_VF.9 3.html deleted file mode 100644 index b12d73ed..00000000 --- a/static/freebsd/man9/PCI_IOV_ADD_VF.9 3.html +++ /dev/null @@ -1,98 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PCI_IOV_ADD_VF(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PCI_IOV_ADD_VF(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">PCI_IOV_ADD_VF</code> — - <span class="Nd">inform a PF driver that a VF is being created</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/bus.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/stdarg.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/nv.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">dev/pci/pci_iov.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">PCI_IOV_ADD_VF</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">uint16_t - vfnum</var>, <var class="Fa" style="white-space: nowrap;">const nvlist_t - *vf_config</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#PCI_IOV_ADD_VF"><code class="Fn" id="PCI_IOV_ADD_VF">PCI_IOV_ADD_VF</code></a>() - method is called by the PCI Single-Root I/O Virtualization (SR-IOV) - infrastructure when it is initializing a new Virtual Function (VF) as a - child of the given Physical Function (PF) device. This method will not be - called until a successful call to <a class="Xr">PCI_IOV_INIT(9)</a> has been - made. It is not guaranteed that this method will be called following a - successful call to <a class="Xr">PCI_IOV_INIT(9)</a>. If the infrastructure - encounters a failure to allocate resources following the call to - <a class="Xr">PCI_IOV_INIT(9)</a>, the VF creation will be aborted and - <a class="Xr">PCI_IOV_UNINIT(9)</a> will be called immediately without any - preceding calls to <code class="Nm">PCI_IOV_ADD_VF</code>.</p> -<p class="Pp">The index of the VF being initialized is passed in the - <var class="Fa">vfnum</var> argument. VFs are always numbered sequentially - starting at 0.</p> -<p class="Pp">If the driver requested device-specific configuration parameters - via a VF schema in its call to <a class="Xr">pci_iov_attach(9)</a>, those - parameters will be contained in the <span class="Pa">vf_config</span> - argument. All configuration parameters that were either set as required - parameters or that had a default value set in the VF schema are guaranteed - to be present in <var class="Fa">vf_config</var>. Configuration parameters - that were neither set as required nor were given a default value are - optional and may or may not be present in <var class="Fa">vf_config</var>. - <var class="Fa">vf_config</var> will not contain any configuration - parameters that were not specified in the VF schema. All configuration - parameters will have the correct type and will be in the range of valid - values specified in the schema.</p> -<p class="Pp" id="PCI_IOV_ADD_VF~2">Note that it is possible for the user to set - different configuration values on different VF devices that are children of - the same PF. The PF driver must not cache configuration parameters passed in - previous calls to - <a class="permalink" href="#PCI_IOV_ADD_VF~2"><code class="Fn">PCI_IOV_ADD_VF</code></a>() - for other VFs and apply those parameters to the current VF.</p> -<p class="Pp">This function will not be called twice for the same - <var class="Fa">vf_num</var> on the same PF device without - <a class="Xr">PCI_IOV_UNINIT(9)</a> and <a class="Xr">PCI_IOV_INIT(9)</a> - first being called, in that order.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">This method returns 0 on success, otherwise an appropriate error - is returned. If this method returns an error then the current VF device will - be destroyed but the rest of the VF devices will be created and SR-IOV will - be enabled on the PF.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">nv(9)</a>, <a class="Xr">pci(9)</a>, - <a class="Xr">PCI_IOV_INIT(9)</a>, <a class="Xr">pci_iov_schema(9)</a>, - <a class="Xr">PCI_IOV_UNINIT(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Ryan Stone</span> - <<a class="Mt" href="mailto:rstone@FreeBSD.org">rstone@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 28, 2015</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/PCI_IOV_INIT.9 4.html b/static/freebsd/man9/PCI_IOV_INIT.9 4.html deleted file mode 100644 index 843fb125..00000000 --- a/static/freebsd/man9/PCI_IOV_INIT.9 4.html +++ /dev/null @@ -1,82 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PCI_IOV_INIT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PCI_IOV_INIT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">PCI_IOV_INIT</code> — - <span class="Nd">enable SR-IOV on a PF device</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/bus.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/stdarg.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/nv.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">dev/pci/pci_iov.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">PCI_IOV_INIT</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">uint16_t - num_vfs</var>, <var class="Fa" style="white-space: nowrap;">const nvlist_t - *pf_config</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#PCI_IOV_INIT"><code class="Fn" id="PCI_IOV_INIT">PCI_IOV_INIT</code></a>() - method is called by the PCI Single-Root I/O Virtualization (SR-IOV) - infrastructure when the user requests that SR-IOV be enabled on a Physical - Function (PF). The number of Virtual Functions (VFs) that will be created is - passed to this method in the <var class="Fa">num_vfs</var> argument.</p> -<p class="Pp">If the driver requested device-specific PF configuration - parameters via a PF schema in its call to - <a class="Xr">pci_iov_attach(9)</a>, those parameters will be available in - the <var class="Fa">pf_config</var> argument. All configuration parameters - that were either set as required parameters or that had a default value set - in the PF schema are guaranteed to be present in - <var class="Fa">pf_config</var>. Configuration parameters that were neither - set as required nor were given a default value are optional and may or may - not be present in <var class="Fa">pf_config</var>. - <var class="Fa">pf_config</var> will not contain any configuration - parameters that were not specified in the PF schema. All configuration - parameters will have the correct type and are in the range of valid values - specified in the schema.</p> -<p class="Pp">If this method returns successfully, then this method will not be - called again on the same device until after a call to - <a class="Xr">PCI_IOV_UNINIT(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Returns 0 on success, otherwise an appropriate error is returned. - If this method returns an error then the SR-IOV configuration will be - aborted and no VFs will be created.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">nv(9)</a>, <a class="Xr">pci(9)</a>, - <a class="Xr">PCI_IOV_ADD_VF(9)</a>, <a class="Xr">pci_iov_schema(9)</a>, - <a class="Xr">PCI_IOV_UNINIT(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Ryan Stone</span> - <<a class="Mt" href="mailto:rstone@FreeBSD.org">rstone@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 28, 2015</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/PCI_IOV_UNINIT.9 4.html b/static/freebsd/man9/PCI_IOV_UNINIT.9 4.html deleted file mode 100644 index fbbfea09..00000000 --- a/static/freebsd/man9/PCI_IOV_UNINIT.9 4.html +++ /dev/null @@ -1,58 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PCI_IOV_UNINIT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PCI_IOV_UNINIT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">PCI_IOV_UNINIT</code> — - <span class="Nd">disable SR-IOV on a PF device</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/bus.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">dev/pci/pci_iov.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">PCI_IOV_UNINIT</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#PCI_IOV_UNINIT"><code class="Fn" id="PCI_IOV_UNINIT">PCI_IOV_UNINIT</code></a>() - method is called by the PCI Single-Root I/O Virtualization (SR-IOV) - infrastructure when the user requests that SR-IOV be disabled on a Physical - Function (PF). When this method is called, the PF driver must release any - SR-IOV-related resources that it has allocated and disable any - device-specific SR-IOV configuration in the device.</p> -<p class="Pp">This method will only be called following a successful call to - <a class="Xr">PCI_IOV_INIT(9)</a>. It is not guaranteed that - <a class="Xr">PCI_IOV_ADD_VF(9)</a> will have been called for any Virtual - Function (VF) after the call to <a class="Xr">PCI_IOV_INIT(9)</a> and before - the call to <code class="Nm">PCI_IOV_UNINIT</code>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pci(9)</a>, <a class="Xr">PCI_IOV_ADD_VF(9)</a>, - <a class="Xr">PCI_IOV_INIT(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Ryan Stone</span> - <<a class="Mt" href="mailto:rstone@FreeBSD.org">rstone@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 28, 2015</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/PHOLD.9 4.html b/static/freebsd/man9/PHOLD.9 4.html deleted file mode 100644 index 1a3a6496..00000000 --- a/static/freebsd/man9/PHOLD.9 4.html +++ /dev/null @@ -1,64 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PHOLD(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PHOLD(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">PHOLD</code> — <span class="Nd">hold a - process</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/proc.h</a>></code></p> -<p class="Pp"><code class="Fn">PHOLD</code>(<var class="Fa" style="white-space: nowrap;">struct - proc *p</var>);</p> -<p class="Pp"><code class="Fn">_PHOLD</code>(<var class="Fa" style="white-space: nowrap;">struct - proc *p</var>);</p> -<p class="Pp"><code class="Fn">PRELE</code>(<var class="Fa" style="white-space: nowrap;">struct - proc *p</var>);</p> -<p class="Pp"><code class="Fn">_PRELE</code>(<var class="Fa" style="white-space: nowrap;">struct - proc *p</var>);</p> -<p class="Pp"><code class="Fn">PROC_ASSERT_HELD</code>(<var class="Fa" style="white-space: nowrap;">struct - proc *p</var>);</p> -<p class="Pp"><code class="Fn">PROC_ASSERT_NOT_HELD</code>(<var class="Fa" style="white-space: nowrap;">struct - proc *p</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#PHOLD"><code class="Fn" id="PHOLD">PHOLD</code></a>() - macro increments the hold count of a process, and the - <a class="permalink" href="#PRELE"><code class="Fn" id="PRELE">PRELE</code></a>() - macro decrements the hold count of a process.</p> -<p class="Pp">If a process with a non-zero hold count attempts to exit, it will - sleep until its hold count has reached zero before the kernel begins - releasing resources associated with the process. Once a process has started - exiting, it is invalid to increase its hold count. Thus, callers must not - attempt to hold a process that has the <code class="Dv">P_WEXIT</code> flag - set. The VM daemon will not swap out the kernel stack of a thread belonging - to a process with a non-zero hold count.</p> -<p class="Pp" id="_PHOLD">The - <a class="permalink" href="#_PHOLD"><code class="Fn">_PHOLD</code></a>() and - <a class="permalink" href="#_PRELE"><code class="Fn" id="_PRELE">_PRELE</code></a>() - macros are identical to <code class="Fn">PHOLD</code>() and - <code class="Fn">PRELE</code>(), except that they must be called with the - process lock held.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Mark - Johnston</span> - <<a class="Mt" href="mailto:markj@FreeBSD.org">markj@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 7, 2015</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/SDT.9 4.html b/static/freebsd/man9/SDT.9 4.html deleted file mode 100644 index 0136d64e..00000000 --- a/static/freebsd/man9/SDT.9 4.html +++ /dev/null @@ -1,460 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SDT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SDT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">SDT</code> — <span class="Nd">a DTrace - framework for adding statically-defined tracing probes</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/queue.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/sdt.h</a>></code></p> -<p class="Pp"><code class="Fn">SDT_PROVIDER_DECLARE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROVIDER_DEFINE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE_DECLARE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE0</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE1</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">arg0</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE2</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">arg0</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE3</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">arg0</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>, - <var class="Fa" style="white-space: nowrap;">arg2</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE4</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">arg0</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>, - <var class="Fa" style="white-space: nowrap;">arg2</var>, - <var class="Fa" style="white-space: nowrap;">arg3</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE5</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">arg0</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>, - <var class="Fa" style="white-space: nowrap;">arg2</var>, - <var class="Fa" style="white-space: nowrap;">arg3</var>, - <var class="Fa" style="white-space: nowrap;">arg4</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE6</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">arg0</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>, - <var class="Fa" style="white-space: nowrap;">arg2</var>, - <var class="Fa" style="white-space: nowrap;">arg3</var>, - <var class="Fa" style="white-space: nowrap;">arg4</var>, - <var class="Fa" style="white-space: nowrap;">arg5</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE7</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">arg0</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>, - <var class="Fa" style="white-space: nowrap;">arg2</var>, - <var class="Fa" style="white-space: nowrap;">arg3</var>, - <var class="Fa" style="white-space: nowrap;">arg4</var>, - <var class="Fa" style="white-space: nowrap;">arg5</var>, - <var class="Fa" style="white-space: nowrap;">arg6</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE0_XLATE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE1_XLATE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">arg0</var>, - <var class="Fa" style="white-space: nowrap;">xarg0</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE2_XLATE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">arg0</var>, - <var class="Fa" style="white-space: nowrap;">xarg0</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>, - <var class="Fa" style="white-space: nowrap;">xarg1</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE3_XLATE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">arg0</var>, - <var class="Fa" style="white-space: nowrap;">xarg0</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>, - <var class="Fa" style="white-space: nowrap;">xarg1</var>, - <var class="Fa" style="white-space: nowrap;">arg2</var>, - <var class="Fa" style="white-space: nowrap;">xarg2</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE4_XLATE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">arg0</var>, - <var class="Fa" style="white-space: nowrap;">xarg0</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>, - <var class="Fa" style="white-space: nowrap;">xarg1</var>, - <var class="Fa" style="white-space: nowrap;">arg2</var>, - <var class="Fa" style="white-space: nowrap;">xarg2</var>, - <var class="Fa" style="white-space: nowrap;">arg3</var>, - <var class="Fa" style="white-space: nowrap;">xarg3</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE5_XLATE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">arg0</var>, - <var class="Fa" style="white-space: nowrap;">xarg0</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>, - <var class="Fa" style="white-space: nowrap;">xarg1</var>, - <var class="Fa" style="white-space: nowrap;">arg2</var>, - <var class="Fa" style="white-space: nowrap;">xarg2</var>, - <var class="Fa" style="white-space: nowrap;">arg3</var>, - <var class="Fa" style="white-space: nowrap;">xarg3</var>, - <var class="Fa" style="white-space: nowrap;">arg4</var>, - <var class="Fa" style="white-space: nowrap;">xarg4</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE6_XLATE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">arg0</var>, - <var class="Fa" style="white-space: nowrap;">xarg0</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>, - <var class="Fa" style="white-space: nowrap;">xarg1</var>, - <var class="Fa" style="white-space: nowrap;">arg2</var>, - <var class="Fa" style="white-space: nowrap;">xarg2</var>, - <var class="Fa" style="white-space: nowrap;">arg3</var>, - <var class="Fa" style="white-space: nowrap;">xarg3</var>, - <var class="Fa" style="white-space: nowrap;">arg4</var>, - <var class="Fa" style="white-space: nowrap;">xarg4</var>, - <var class="Fa" style="white-space: nowrap;">arg5</var>, - <var class="Fa" style="white-space: nowrap;">xarg5</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE_DEFINE7_XLATE</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">arg0</var>, - <var class="Fa" style="white-space: nowrap;">xarg0</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>, - <var class="Fa" style="white-space: nowrap;">xarg1</var>, - <var class="Fa" style="white-space: nowrap;">arg2</var>, - <var class="Fa" style="white-space: nowrap;">xarg2</var>, - <var class="Fa" style="white-space: nowrap;">arg3</var>, - <var class="Fa" style="white-space: nowrap;">xarg3</var>, - <var class="Fa" style="white-space: nowrap;">arg4</var>, - <var class="Fa" style="white-space: nowrap;">xarg4</var>, - <var class="Fa" style="white-space: nowrap;">arg5</var>, - <var class="Fa" style="white-space: nowrap;">xarg5</var>, - <var class="Fa" style="white-space: nowrap;">arg6</var>, - <var class="Fa" style="white-space: nowrap;">xarg6</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE0</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE1</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">arg0</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE2</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">arg0</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE3</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">arg0</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>, - <var class="Fa" style="white-space: nowrap;">arg2</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE4</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">arg0</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>, - <var class="Fa" style="white-space: nowrap;">arg2</var>, - <var class="Fa" style="white-space: nowrap;">arg3</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE5</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">arg0</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>, - <var class="Fa" style="white-space: nowrap;">arg2</var>, - <var class="Fa" style="white-space: nowrap;">arg3</var>, - <var class="Fa" style="white-space: nowrap;">arg4</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE6</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">arg0</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>, - <var class="Fa" style="white-space: nowrap;">arg2</var>, - <var class="Fa" style="white-space: nowrap;">arg3</var>, - <var class="Fa" style="white-space: nowrap;">arg4</var>, - <var class="Fa" style="white-space: nowrap;">arg5</var>);</p> -<p class="Pp"><code class="Fn">SDT_PROBE7</code>(<var class="Fa" style="white-space: nowrap;">prov</var>, - <var class="Fa" style="white-space: nowrap;">mod</var>, - <var class="Fa" style="white-space: nowrap;">func</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">arg0</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>, - <var class="Fa" style="white-space: nowrap;">arg2</var>, - <var class="Fa" style="white-space: nowrap;">arg3</var>, - <var class="Fa" style="white-space: nowrap;">arg4</var>, - <var class="Fa" style="white-space: nowrap;">arg5</var>, - <var class="Fa" style="white-space: nowrap;">arg6</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">SDT</code> macros allow programmers to define - static trace points in kernel code. These trace points are used by the - <code class="Nm">SDT</code> framework to create DTrace probes, allowing the - code to be instrumented using <a class="Xr">dtrace(1)</a>. By default, - <code class="Nm">SDT</code> trace points are disabled and have no effect on - the surrounding code. When a DTrace probe corresponding to a given trace - point is enabled, threads that execute the trace point will call a handler - and cause the probe to fire. Moreover, trace points can take arguments, - making it possible to pass data to the DTrace framework when an enabled - probe fires.</p> -<p class="Pp">Multiple trace points may correspond to a single DTrace probe, - allowing programmers to create DTrace probes that correspond to logical - system events rather than tying probes to specific code execution paths. For - instance, a DTrace probe corresponding to the arrival of an IP packet into - the network stack may be defined using two <code class="Nm">SDT</code> trace - points: one for IPv4 packets and one for IPv6 packets.</p> -<p class="Pp">In addition to defining DTrace probes, the - <code class="Nm">SDT</code> macros allow programmers to define new DTrace - providers, making it possible to namespace logically-related probes. An - example is FreeBSD's sctp provider, which contains - <code class="Nm">SDT</code> probes for FreeBSD's <a class="Xr">sctp(4)</a> - implementation.</p> -<p class="Pp" id="SDT_PROVIDER_DECLARE">The - <a class="permalink" href="#SDT_PROVIDER_DECLARE"><code class="Fn">SDT_PROVIDER_DECLARE</code></a>() - and - <a class="permalink" href="#SDT_PROVIDER_DEFINE"><code class="Fn" id="SDT_PROVIDER_DEFINE">SDT_PROVIDER_DEFINE</code></a>() - macros are used respectively to declare and define a DTrace provider named - <var class="Ar">prov</var> with the <code class="Nm">SDT</code> framework. A - provider need only be defined once; however, the provider must be declared - before defining any <code class="Nm">SDT</code> probes belonging to that - provider.</p> -<p class="Pp" id="SDT_PROBE_DECLARE">Similarly, the - <a class="permalink" href="#SDT_PROBE_DECLARE"><code class="Fn">SDT_PROBE_DECLARE</code></a>() - and <code class="Fn">SDT_PROBE_DEFINE*</code>() macros are used to declare - and define DTrace probes using the <code class="Nm">SDT</code> framework. - Once a probe has been defined, trace points for that probe may be added to - kernel code. DTrace probe identifiers consist of a provider, module, - function and name, all of which may be specified in the - <code class="Nm">SDT</code> probe definition. Note that probes should not - specify a module name: the module name of a probe is used to determine - whether or not it should be destroyed when a kernel module is unloaded. See - the <a class="Sx" href="#BUGS">BUGS</a> section. Note in particular that - probes must not be defined across multiple kernel modules.</p> -<p class="Pp" id="SDT_*">If ‘<code class="Li">-</code>’ character - (dash) is wanted in a probe name, then it should be represented as - ‘<code class="Li">__</code>’ (double underscore) in the probe - <var class="Ar">name</var> parameter passed to various - <a class="permalink" href="#SDT_*"><code class="Fn">SDT_*</code></a>() - macros, because of technical reasons (a dash is not valid in C - identifiers).</p> -<p class="Pp" id="SDT_PROBE_DEFINE*">The - <a class="permalink" href="#SDT_PROBE_DEFINE*"><code class="Fn">SDT_PROBE_DEFINE*</code></a>() - macros also allow programmers to declare the types of the arguments that are - passed to probes. This is optional; if the argument types are omitted - (through use of the - <a class="permalink" href="#SDT_PROBE_DEFINE"><code class="Fn" id="SDT_PROBE_DEFINE">SDT_PROBE_DEFINE</code></a>() - macro), users wishing to make use of the arguments will have to manually - cast them to the correct types in their D scripts. It is strongly - recommended that probe definitions include a declaration of their argument - types.</p> -<p class="Pp" id="SDT_PROBE_DEFINE*_XLATE">The - <a class="permalink" href="#SDT_PROBE_DEFINE*_XLATE"><code class="Fn">SDT_PROBE_DEFINE*_XLATE</code></a>() - macros are used for probes whose argument types are to be dynamically - translated to the types specified by the corresponding - <var class="Ar">xarg</var> arguments. This is mainly useful when porting - probe definitions from other operating systems. As seen by - <a class="Xr">dtrace(1)</a>, the arguments of a probe defined using these - macros will have types which match the <var class="Ar">xarg</var> types in - the probe definition. However, the arguments passed in at the trace point - will have types matching the native argument types in the probe definition, - and thus the native type is dynamically translated to the translated type. - So long as an appropriate translator is defined in - <span class="Pa">/usr/lib/dtrace</span>, scripts making use of the probe - need not concern themselves with the underlying type of a given - <code class="Nm">SDT</code> probe argument.</p> -<p class="Pp" id="SDT_PROBE*">The - <a class="permalink" href="#SDT_PROBE*"><code class="Fn">SDT_PROBE*</code></a>() - macros are used to create <code class="Nm">SDT</code> trace points. They are - meant to be added to executable code and can be used to instrument the code - in which they are called.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="PROVIDERS"><a class="permalink" href="#PROVIDERS">PROVIDERS</a></h1> -<p class="Pp">A number of kernel DTrace providers are available. In general, - these providers define stable interfaces and should be treated as such: - existing D scripts may be broken if a probe is renamed or its arguments are - modified. However, it is often useful to define ad-hoc - <code class="Nm">SDT</code> probes for debugging a subsystem or driver. - Similarly, a developer may wish to provide a group of - <code class="Nm">SDT</code> probes without committing to their future - stability. Such probes should be added to the - ‘<code class="Li">sdt</code>’ provider instead of defining a - new provider.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">The DTrace providers available on the current system can be listed - with</p> -<div class="Bd Pp Bd-indent Li"> -<pre>dtrace -l | sed 1d | awk '{print $2}' | sort -u</pre> -</div> -<p class="Pp">A detailed list of the probes offered by a given provider can be - obtained by specifying the provider using the <code class="Fl">-P</code> - flag. For example, to view the probes and argument types for the - ‘<code class="Li">sched</code>’ provider, run</p> -<div class="Bd Pp Bd-indent Li"> -<pre>dtrace -lv -P sched</pre> -</div> -<p class="Pp">The following probe definition will create a DTrace probe called - ‘<code class="Li">icmp:::receive-unreachable</code>’, which - would hypothetically be triggered when the kernel receives an ICMP packet of - type Destination Unreachable:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>SDT_PROVIDER_DECLARE(icmp); - -SDT_PROBE_DEFINE1(icmp, , , receive__unreachable, - "struct icmp *"); - -</pre> -</div> -This particular probe would take a single argument: a pointer to the struct - containing the ICMP header for the packet. Note that the module name of this - probe is not specified. -<p class="Pp">Consider a DTrace probe which fires when the network stack - receives an IP packet. Such a probe would be defined by multiple - tracepoints:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>SDT_PROBE_DEFINE3(ip, , , receive, "struct ifnet *", - "struct ip *", "struct ip6_hdr *"); - -int -ip_input(struct mbuf *m) -{ - struct ip *ip; - ... - ip = mtod(m, struct ip *); - SDT_PROBE3(ip, , , receive, m->m_pkthdr.rcvif, ip, NULL); - ... -} - -int -ip6_input(struct mbuf *m) -{ - struct ip6_hdr *ip6; - ... - ip6 = mtod(m, struct ip6_hdr *); - SDT_PROBE3(ip, , , receive, m->m_pkthdr.rcvif, NULL, ip6); - ... -} - -</pre> -</div> -In particular, the probe should fire when the kernel receives either an IPv4 - packet or an IPv6 packet. -<p class="Pp">Consider the ICMP probe discussed above. We note that its second - argument is of type <var class="Ar">struct icmp</var>, which is a type - defined in the FreeBSD kernel to represent the ICMP header of an ICMP - packet, defined in RFC 792. Linux has a corresponding type, - <var class="Ar">struct icmphdr</var>, for the same purpose, but its field - names differ from FreeBSD's <var class="Ar">struct icmp</var>. Similarly, - illumos defines the <var class="Ar">icmph_t</var> type, again with different - field names. Even with the - ‘<code class="Li">icmp:::pkt-receive</code>’ probes defined in - all three operating systems, one would still have to write OS-specific - scripts to extract a given field out of the ICMP header argument. - Dynamically-translated types solve this problem: one can define an - OS-independent <a class="Xr">c(7)</a> struct to represent an ICMP header, - say <var class="Ar">struct icmp_hdr_dt</var>, and define translators from - each of the three OS-specific types to <var class="Ar">struct - icmp_hdr_dt</var>, all in the <a class="Xr">dtrace(1)</a> library path. Then - the FreeBSD probe above can be defined with:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>SDT_PROBE_DEFINE1_XLATE(ip, , , receive, "struct icmp *", - "struct icmp_hdr_dt *");</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">dtrace(1)</a>, <a class="Xr">dtrace_io(4)</a>, - <a class="Xr">dtrace_ip(4)</a>, <a class="Xr">dtrace_proc(4)</a>, - <a class="Xr">dtrace_sched(4)</a>, <a class="Xr">dtrace_tcp(4)</a>, - <a class="Xr">dtrace_udp(4)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">DTrace and the <code class="Nm">SDT</code> framework were - originally ported to FreeBSD from Solaris by <span class="An">John - Birrell</span> - <<a class="Mt" href="mailto:jb@FreeBSD.org">jb@FreeBSD.org</a>>. This - manual page was written by <span class="An">Mark Johnston</span> - <<a class="Mt" href="mailto:markj@FreeBSD.org">markj@FreeBSD.org</a>>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">The <code class="Nm">SDT</code> macros allow the module and - function names of a probe to be specified as part of a probe definition. The - DTrace framework uses the module name of probes to determine which probes - should be destroyed when a kernel module is unloaded, so the module name of - a probe should match the name of the module in which its defined. - <code class="Nm">SDT</code> will set the module name properly if it is left - unspecified in the probe definition; see the - <a class="Sx" href="#EXAMPLES">EXAMPLES</a> section.</p> -<p class="Pp">One of the goals of the original <code class="Nm">SDT</code> - implementation (and by extension, of FreeBSD's port) is that inactive - <code class="Nm">SDT</code> probes should have no performance impact. This - is unfortunately not the case; <code class="Nm">SDT</code> trace points will - add a small but non-zero amount of latency to the code in which they are - defined. A more sophisticated implementation of the probes will help - alleviate this problem.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 18, 2015</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/SYSCALL_MODULE.9 4.html b/static/freebsd/man9/SYSCALL_MODULE.9 4.html deleted file mode 100644 index 5bdef86e..00000000 --- a/static/freebsd/man9/SYSCALL_MODULE.9 4.html +++ /dev/null @@ -1,89 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SYSCALL_MODULE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SYSCALL_MODULE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">SYSCALL_MODULE</code> — - <span class="Nd">syscall kernel module declaration macro</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/kernel.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/proc.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/module.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/sysent.h</a>></code></p> -<p class="Pp"><code class="Fn">SYSCALL_MODULE</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">int *offset</var>, - <var class="Fa" style="white-space: nowrap;">struct sysent - *new_sysent</var>, - <var class="Fa" style="white-space: nowrap;">modeventhand_t evh</var>, - <var class="Fa" style="white-space: nowrap;">void *arg</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#SYSCALL_MODULE"><code class="Fn" id="SYSCALL_MODULE">SYSCALL_MODULE</code></a>() - macro declares a new syscall. <code class="Fn">SYSCALL_MODULE</code>() - expands into a kernel module declaration with name - ‘<code class="Li">sys/<var class="Fa">name</var></code>’.</p> -<p class="Pp">The rest of the arguments expected by this macro are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">offset</var></dt> - <dd>A pointer to an <var class="Vt">int</var> which saves the offset in - <var class="Vt">struct sysent</var> where the syscall is allocated. If the - location pointed to by <var class="Fa">offset</var> holds a non 0 number - it will be used if possible. If it holds 0 then one will be assigned.</dd> - <dt><var class="Fa">new_sysent</var></dt> - <dd>is a pointer to a structure that specifies the function implementing the - syscall and the number of arguments this function needs (see - <code class="In"><<a class="In">sys/sysent.h</a>></code>).</dd> - <dt><var class="Fa">evh</var></dt> - <dd>A pointer to the kernel module event handler function with the argument - <var class="Fa">arg</var>. Please refer to <a class="Xr">module(9)</a> for - more information.</dd> - <dt><var class="Fa">arg</var></dt> - <dd>The argument passed to the callback functions of the - <var class="Fa">evh</var> event handler when it is called.</dd> -</dl> -<p class="Pp" id="SYSCALL_MODULE_HELPER">The syscall number assigned to the - module can be retrieved using the <a class="Xr">modstat(2)</a> and - <a class="Xr">modfind(2)</a> system calls. The MACRO - <a class="permalink" href="#SYSCALL_MODULE_HELPER"><code class="Fn">SYSCALL_MODULE_HELPER</code></a>() - includes <code class="Fn">SYSCALL_MODULE</code>() and much of its - boilerplate code.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">A minimal example for a syscall module can be found in - <span class="Pa">/usr/share/examples/kld/syscall/module/syscall.c</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">module(9)</a></p> -<p class="Pp"><span class="Pa">/usr/share/examples/kld/syscall/module/syscall.c</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Alexander - Langer</span> - <<a class="Mt" href="mailto:alex@FreeBSD.org">alex@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 15, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/SYSINIT.9 3.html b/static/freebsd/man9/SYSINIT.9 3.html deleted file mode 100644 index 11f20b24..00000000 --- a/static/freebsd/man9/SYSINIT.9 3.html +++ /dev/null @@ -1,138 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SYSINIT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SYSINIT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">SYSINIT</code>, <code class="Nm">SYSUNINIT</code> - — <span class="Nd">a framework for dynamic kernel - initialization</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/kernel.h</a>></code></p> -<p class="Pp"><code class="Fn">SYSINIT</code>(<var class="Fa" style="white-space: nowrap;">uniquifier</var>, - <var class="Fa" style="white-space: nowrap;">enum sysinit_sub_id - subsystem</var>, <var class="Fa" style="white-space: nowrap;">enum - sysinit_elem_order order</var>, - <var class="Fa" style="white-space: nowrap;">sysinit_cfunc_t func</var>, - <var class="Fa" style="white-space: nowrap;">const void *ident</var>);</p> -<p class="Pp"><code class="Fn">SYSUNINIT</code>(<var class="Fa" style="white-space: nowrap;">uniquifier</var>, - <var class="Fa" style="white-space: nowrap;">enum sysinit_sub_id - subsystem</var>, <var class="Fa" style="white-space: nowrap;">enum - sysinit_elem_order order</var>, - <var class="Fa" style="white-space: nowrap;">sysinit_cfunc_t func</var>, - <var class="Fa" style="white-space: nowrap;">const void *ident</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><code class="Nm">SYSINIT</code> is a mechanism for scheduling the - execution of initialization and teardown routines. This is similar to init - and fini routines with the addition of explicit ordering metadata. It allows - runtime ordering of subsystem initialization in the kernel as well as kernel - modules (KLDs).</p> -<p class="Pp" id="SYSINIT">The - <a class="permalink" href="#SYSINIT"><code class="Fn">SYSINIT</code></a>() - macro creates a <var class="Vt">struct sysinit</var> and stores it in a - startup linker set. The <var class="Vt">struct sysinit</var> type as well as - the subsystem identifier constants (<code class="Dv">SI_SUB_*</code>) and - initialization ordering constants (<code class="Dv">SI_ORDER_*</code>) are - defined in - <code class="In"><<a class="In">sys/kernel.h</a>></code>:</p> -<div class="Bd Pp Li"> -<pre>struct sysinit { - enum sysinit_sub_id subsystem; /* subsystem identifier*/ - enum sysinit_elem_order order; /* init order within subsystem*/ - SLIST_ENTRY(sysinit) next; /* singly-linked list */ - sysinit_cfunc_t func; /* function */ - const void *udata; /* multiplexer/argument */ -};</pre> -</div> -<p class="Pp" id="SYSINIT~2">The - <a class="permalink" href="#SYSINIT~2"><code class="Fn">SYSINIT</code></a>() - macro takes a <var class="Fa">uniquifier</var> argument to identify the - particular function dispatch data, the <var class="Fa">subsystem</var> type - of startup interface, the subsystem element <var class="Fa">order</var> of - initialization within the subsystem, the <var class="Fa">func</var> function - to call, and the data specified in <var class="Fa">ident</var> argument to - pass the function.</p> -<p class="Pp" id="SYSUNINIT">The - <a class="permalink" href="#SYSUNINIT"><code class="Fn">SYSUNINIT</code></a>() - macro behaves similarly to the <code class="Fn">SYSINIT</code>() macro - except that it adds the data to a shutdown linker set.</p> -<p class="Pp">The startup linker set for the kernel is scanned during boot to - build a sorted list of initialization routines. The initialization routines - are then executed in the sorted order. The <var class="Fa">subsystem</var> - is used as the primary key and is sorted in ascending order. The - <var class="Fa">order</var> is used as the secondary key and is sorted in - ascending order. The relative order of two routines that have the same - <var class="Fa">subsystem</var> and <var class="Fa">order</var> is - undefined.</p> -<p class="Pp">The startup linker sets for modules that are loaded together with - the kernel by the boot loader are scanned during the - <code class="Dv">SI_SUB_KLD</code> subsystem initialization. These modules' - initialization routines are sorted and merged into the kernel's list of - startup routines and are executed during boot along with the kernel's - initialization routines. Note that this has the effect that any - initialization routines in a kernel module that are scheduled earlier than - <code class="Dv">SI_SUB_KLD</code> are not executed until after - <code class="Dv">SI_SUB_KLD</code> during boot.</p> -<p class="Pp">The startup linker set for a kernel module loaded at runtime via - <a class="Xr">kldload(2)</a> is scanned, sorted, and executed when the - module is loaded.</p> -<p class="Pp" id="not">The shutdown linker set for a kernel module is scanned, - sorted, and executed when a kernel module is unloaded. The teardown routines - are sorted in the reverse order of the initialization routines. The teardown - routines of the kernel and any loaded modules are - <a class="permalink" href="#not"><b class="Sy">not</b></a> executed during - shutdown.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">This example shows the SYSINIT which displays the copyright notice - during boot:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>static void -print_caddr_t(void *data) -{ - printf("%s", (char *)data); -} -SYSINIT(announce, SI_SUB_COPYRIGHT, SI_ORDER_FIRST, print_caddr_t, - copyright);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">kld(4)</a>, <a class="Xr">DECLARE_MODULE(9)</a>, - <a class="Xr">DEV_MODULE(9)</a>, <a class="Xr">DRIVER_MODULE(9)</a>, - <a class="Xr">MTX_SYSINIT(9)</a>, <a class="Xr">SYSCALL_MODULE(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">SYSINIT</code> framework first appeared in - <span class="Ux">FreeBSD 2.2</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">SYSINIT</code> framework was written by - <span class="An">Terrence Lambert</span> - <<a class="Mt" href="mailto:terry@FreeBSD.org">terry@FreeBSD.org</a>>.</p> -<p class="Pp">This manual page was written by <span class="An">Hiten - Pandya</span> - <<a class="Mt" href="mailto:hmp@FreeBSD.org">hmp@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 1, 2010</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VFS.9 4.html b/static/freebsd/man9/VFS.9 4.html deleted file mode 100644 index 34e22d39..00000000 --- a/static/freebsd/man9/VFS.9 4.html +++ /dev/null @@ -1,45 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VFS</code> — <span class="Nd">kernel - interface to file systems</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Calls used to set or query file systems for settings or - information.</p> -<p class="Pp">File systems that do not implement a VFS operation should use the - appropriate <var class="Fa">vfs_std</var> function from - <span class="Pa">src/sys/kern/vfs_default.c</span> rather than implementing - empty functions or casting to <var class="Fa">eopnotsupp</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">dtrace_vfs(4)</a>, - <a class="Xr">VFS_CHECKEXP(9)</a>, <a class="Xr">VFS_FHTOVP(9)</a>, - <a class="Xr">VFS_MOUNT(9)</a>, <a class="Xr">VFS_QUOTACTL(9)</a>, - <a class="Xr">VFS_SET(9)</a>, <a class="Xr">VFS_STATFS(9)</a>, - <a class="Xr">VFS_SYNC(9)</a>, <a class="Xr">VFS_UNMOUNT(9)</a>, - <a class="Xr">VFS_VGET(9)</a>, <a class="Xr">vnode(9)</a>, - <a class="Xr">VOP_VPTOFH(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 3, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VFS_CHECKEXP.9 4.html b/static/freebsd/man9/VFS_CHECKEXP.9 4.html deleted file mode 100644 index 7c2e87d1..00000000 --- a/static/freebsd/man9/VFS_CHECKEXP.9 4.html +++ /dev/null @@ -1,88 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFS_CHECKEXP(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFS_CHECKEXP(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VFS_CHECKEXP</code> — - <span class="Nd">check if a file system is exported to a client</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mount.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VFS_CHECKEXP</code>(<var class="Fa">struct mount *mp</var>, - <var class="Fa">struct sockaddr *nam</var>, <var class="Fa">uint64_t - *exflagsp</var>, <var class="Fa">struct ucred **credanonp</var>, - <var class="Fa">int *numsecflavor</var>, <var class="Fa">int - *secflavors</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#VFS_CHECKEXP"><code class="Fn" id="VFS_CHECKEXP">VFS_CHECKEXP</code></a>() - macro is used by the NFS server to check if a mount point is exported to a - client.</p> -<p class="Pp">The arguments it expects are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">mp</var></dt> - <dd>The mount point to be checked.</dd> - <dt><var class="Fa">nam</var></dt> - <dd>An mbuf containing the network address of the client.</dd> - <dt><var class="Fa">exflagsp</var></dt> - <dd>Return parameter for the export flags for this client.</dd> - <dt><var class="Fa">credanonp</var></dt> - <dd>Return parameter for the anonymous credentials for this client.</dd> - <dt><var class="Fa">numsecflavors</var></dt> - <dd>Return value for the number of security flavors for this client.</dd> - <dt><var class="Fa">secflavors</var></dt> - <dd>Must be an array of size MAXSECFLAVORS, in which the security flavors for - this client are returned.</dd> -</dl> -<p class="Pp" id="VFS_CHECKEXP~2">The - <a class="permalink" href="#VFS_CHECKEXP~2"><code class="Fn">VFS_CHECKEXP</code></a>() - macro should be called on a file system's mount structure to determine if it - is exported to a client whose address is contained in - <var class="Fa">nam</var>.</p> -<p class="Pp">It is called in the NFS server once a vnode for a file handle has - been acquired, in order to determine what access the client is allowed on - the file system the vnode resides in. For NFSv4, it is also called whenever - the lookup operation crosses a server file system mount point, to update the - access information.</p> -<p class="Pp">The operation is file system specific, but is normally handled by - the default ``vfs_stdcheckexp''.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The export flags, anonymous credentials and security flavors - specific to the client will be returned in <var class="Fa">*exflagsp</var>, - <var class="Fa">*credanonp</var>, <var class="Fa">*numsecflavors</var> and - <var class="Fa">*secflavors</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">VFS(9)</a>, <a class="Xr">VFS_FHTOVP(9)</a>, - <a class="Xr">vnode(9)</a>, <a class="Xr">VOP_VPTOFH(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Alfred - Perlstein</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 17, 2020</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VFS_FHTOVP.9 3.html b/static/freebsd/man9/VFS_FHTOVP.9 3.html deleted file mode 100644 index bfa3ef89..00000000 --- a/static/freebsd/man9/VFS_FHTOVP.9 3.html +++ /dev/null @@ -1,81 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFS_FHTOVP(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFS_FHTOVP(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VFS_FHTOVP</code> — <span class="Nd">turn - an NFS filehandle into a vnode</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mount.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VFS_FHTOVP</code>(<var class="Fa" style="white-space: nowrap;">struct - mount *mp</var>, <var class="Fa" style="white-space: nowrap;">struct fid - *fhp</var>, <var class="Fa" style="white-space: nowrap;">int flags</var>, - <var class="Fa" style="white-space: nowrap;">struct vnode **vpp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#VFS_FHTOVP"><code class="Fn" id="VFS_FHTOVP">VFS_FHTOVP</code></a>() - macro is used by the NFS server to turn an NFS filehandle into a vnode.</p> -<p class="Pp">The arguments it expects are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">mp</var></dt> - <dd>The file system.</dd> - <dt><var class="Fa">fhp</var></dt> - <dd>The filehandle to convert.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>Additional locking flags to pass through to <a class="Xr">vget(9)</a>. - File systems are allowed to ignore <var class="Ar">flags</var> and use - <code class="Dv">LK_EXCLUSIVE</code> instead.</dd> - <dt><var class="Fa">vpp</var></dt> - <dd>Return parameter for the new locked vnode.</dd> -</dl> -<p class="Pp">The contents of the filehandle are defined by the file system and - are not examined by any other part of the system. It should contain enough - information to uniquely identify a file within the file system as well as - noticing when a file has been removed and the file system resources have - been reused for a new file. For instance, UFS file system stores the inode - number and inode generation counter in its filehandle.</p> -<p class="Pp" id="VFS_FHTOVP~2">A call to - <a class="permalink" href="#VFS_FHTOVP~2"><code class="Fn">VFS_FHTOVP</code></a>() - should generally be preceded by a call to <a class="Xr">VFS_CHECKEXP(9)</a> - to check if the file is accessible to the client.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The locked vnode for the file will be returned in - <var class="Fa">*vpp</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">VFS(9)</a>, <a class="Xr">VFS_CHECKEXP(9)</a>, - <a class="Xr">vnode(9)</a>, <a class="Xr">VOP_VPTOFH(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 19, 2019</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VFS_MOUNT.9 4.html b/static/freebsd/man9/VFS_MOUNT.9 4.html deleted file mode 100644 index 4c126b11..00000000 --- a/static/freebsd/man9/VFS_MOUNT.9 4.html +++ /dev/null @@ -1,70 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFS_MOUNT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFS_MOUNT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VFS_MOUNT</code> — <span class="Nd">mount - a file system</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mount.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VFS_MOUNT</code>(<var class="Fa" style="white-space: nowrap;">struct - mount *mp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#VFS_MOUNT"><code class="Fn" id="VFS_MOUNT">VFS_MOUNT</code></a>() - macro mounts a file system into the system's namespace or updates the - attributes of an already mounted file system.</p> -<p class="Pp">The arguments it expects are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">mp</var></dt> - <dd>Structure representing the file system.</dd> -</dl> -<p class="Pp" id="VFS_MOUNT~2">The - <a class="permalink" href="#VFS_MOUNT~2"><code class="Fn">VFS_MOUNT</code></a>() - macro is called both to mount new file systems and to change the attributes - of an existing file system. If the <code class="Dv">MNT_UPDATE</code> flag - is set in <var class="Fa">mp->mnt_flag</var> then the file system should - update its internal state from the value of - <var class="Fa">mp->mnt_flag</var>. This can be used, for instance, to - convert a read-only file system to read-write. It is also used by - <a class="Xr">mountd(8)</a> to update the NFS export information for the - file system.</p> -<p class="Pp">If the <code class="Dv">MNT_UPDATE</code> flag is not specified, - then this is a newly mounted file system. The file system code should - allocate and initialize any private data needed to represent the file system - (it can use the <var class="Fa">mp->mnt_data</var> field to store this - information).</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">VFS(9)</a>, <a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 23, 2009</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VFS_QUOTACTL.9 4.html b/static/freebsd/man9/VFS_QUOTACTL.9 4.html deleted file mode 100644 index cc166046..00000000 --- a/static/freebsd/man9/VFS_QUOTACTL.9 4.html +++ /dev/null @@ -1,64 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFS_QUOTACTL(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFS_QUOTACTL(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VFS_QUOTACTL</code> — - <span class="Nd">manipulate file system quotas</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mount.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VFS_QUOTACTL</code>(<var class="Fa" style="white-space: nowrap;">struct - mount *mp</var>, <var class="Fa" style="white-space: nowrap;">int - cmds</var>, <var class="Fa" style="white-space: nowrap;">uid_t uid</var>, - <var class="Fa" style="white-space: nowrap;">void *arg</var>, - <var class="Fa" style="white-space: nowrap;">bool *mp_busy</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Implement file system quotas.</p> -<p class="Pp" id="VFS_QUOTACTL">The <var class="Fa">mp_busy</var> argument is an - input/output parameter. - <a class="permalink" href="#VFS_QUOTACTL"><code class="Fn">VFS_QUOTACTL</code></a>() - must be called with <var class="Fa">mp</var> marked busy through - <a class="Xr">vfs_busy(9)</a> and <var class="Fa">*mp_busy</var> set to - true. The filesystem implementation of - <code class="Fn">VFS_QUOTACTL</code>() may then unbusy - <var class="Fa">mp</var> using <a class="Xr">vfs_unbusy(9)</a> prior to - performing quota file I/O. In this case the implementation must set - <var class="Fa">*mp_busy</var> to false to indicate that the caller must not - unbusy <var class="Fa">mp</var> upon completion of - <code class="Fn">VFS_QUOTACTL</code>().</p> -<p class="Pp">See <a class="Xr">quotactl(2)</a> for a description of the - remaining arguments.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">quotactl(2)</a>, <a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 29, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VFS_ROOT.9 4.html b/static/freebsd/man9/VFS_ROOT.9 4.html deleted file mode 100644 index a9abbf84..00000000 --- a/static/freebsd/man9/VFS_ROOT.9 4.html +++ /dev/null @@ -1,62 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFS_ROOT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFS_ROOT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VFS_ROOT</code> — <span class="Nd">return - the root vnode of a file system</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mount.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VFS_ROOT</code>(<var class="Fa" style="white-space: nowrap;">struct - mount *mp</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>, <var class="Fa" style="white-space: nowrap;">struct vnode - **vpp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Return a locked vnode for the root directory of the file - system.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">mp</var></dt> - <dd>The file system.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>The lock type. Could be <code class="Dv">LK_EXCLUSIVE</code> or - <code class="Dv">LK_SHARED</code>. File system is free to ignore the - <var class="Fa">flags</var> argument and instead acquire an exclusive - lock.</dd> - <dt><var class="Fa">vpp</var></dt> - <dd>Return parameter for the root vnode.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">VFS(9)</a>, <a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 23, 2009</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VFS_SET.9 4.html b/static/freebsd/man9/VFS_SET.9 4.html deleted file mode 100644 index 99b6181c..00000000 --- a/static/freebsd/man9/VFS_SET.9 4.html +++ /dev/null @@ -1,103 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFS_SET(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFS_SET(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VFS_SET</code> — <span class="Nd">set up - loadable file system <var class="Vt">vfsconf</var></span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/kernel.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/module.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mount.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">VFS_SET</code>(<var class="Fa" style="white-space: nowrap;">struct - vfsops *vfsops</var>, - <var class="Fa" style="white-space: nowrap;">fsname</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><a class="permalink" href="#VFS_SET"><code class="Fn" id="VFS_SET">VFS_SET</code></a>() - creates a <var class="Vt">vfsconf</var> structure for the loadable module - with the given <var class="Fa">vfsops</var>, <var class="Fa">fsname</var> - and <var class="Fa">flags</var>, and declares it by calling - <a class="Xr">DECLARE_MODULE(9)</a> using - <a class="permalink" href="#vfs_modevent"><code class="Fn" id="vfs_modevent">vfs_modevent</code></a>() - as the event handler.</p> -<p class="Pp">Possible values for the <var class="Fa">flags</var> argument - are:</p> -<dl class="Bl-hang"> - <dt id="VFCF_STATIC"><a class="permalink" href="#VFCF_STATIC"><code class="Dv">VFCF_STATIC</code></a></dt> - <dd>File system should be statically available in the kernel.</dd> - <dt id="VFCF_NETWORK"><a class="permalink" href="#VFCF_NETWORK"><code class="Dv">VFCF_NETWORK</code></a></dt> - <dd>Network exportable file system.</dd> - <dt id="VFCF_READONLY"><a class="permalink" href="#VFCF_READONLY"><code class="Dv">VFCF_READONLY</code></a></dt> - <dd>Does not support write operations.</dd> - <dt id="VFCF_SYNTHETIC"><a class="permalink" href="#VFCF_SYNTHETIC"><code class="Dv">VFCF_SYNTHETIC</code></a></dt> - <dd>Pseudo file system, data does not represent on-disk files.</dd> - <dt id="VFCF_LOOPBACK"><a class="permalink" href="#VFCF_LOOPBACK"><code class="Dv">VFCF_LOOPBACK</code></a></dt> - <dd>Loopback file system layer.</dd> - <dt id="VFCF_UNICODE"><a class="permalink" href="#VFCF_UNICODE"><code class="Dv">VFCF_UNICODE</code></a></dt> - <dd>File names are stored as Unicode.</dd> - <dt id="VFCF_JAIL"><a class="permalink" href="#VFCF_JAIL"><code class="Dv">VFCF_JAIL</code></a></dt> - <dd>Can be mounted from within a jail if <var class="Va">allow.mount</var> and - <var class="Va">allow.mount.<fsname></var> jail parameters are - set.</dd> - <dt id="VFCF_DELEGADMIN"><a class="permalink" href="#VFCF_DELEGADMIN"><code class="Dv">VFCF_DELEGADMIN</code></a></dt> - <dd>Supports delegated administration if <var class="Va">vfs.usermount</var> - sysctl is set to <code class="Dv">1</code>.</dd> - <dt id="VFCF_SBDRY"><a class="permalink" href="#VFCF_SBDRY"><code class="Dv">VFCF_SBDRY</code></a></dt> - <dd>When in VFS method, the thread suspension is deferred to the user boundary - upon arrival of stop action.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="PSEUDOCODE"><a class="permalink" href="#PSEUDOCODE">PSEUDOCODE</a></h1> -<div class="Bd Li"> -<pre>/* - * Fill in the fields for which we have special methods. - * The others are initially null. This tells vfs to change them to - * pointers to vfs_std* functions during file system registration. - */ -static struct vfsops myfs_vfsops = { - .vfs_mount = myfs_mount, - .vfs_root = myfs_root, - .vfs_statfs = myfs_statfs, - .vfs_unmount = myfs_unmount, -}; - -VFS_SET(myfs_vfsops, myfs, 0);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">jail(2)</a>, <a class="Xr">jail(8)</a>, - <a class="Xr">DECLARE_MODULE(9)</a>, <a class="Xr">vfs_modevent(9)</a>, - <a class="Xr">vfsconf(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 16, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VFS_STATFS.9 4.html b/static/freebsd/man9/VFS_STATFS.9 4.html deleted file mode 100644 index b83ae5fd..00000000 --- a/static/freebsd/man9/VFS_STATFS.9 4.html +++ /dev/null @@ -1,105 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFS_STATFS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFS_STATFS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VFS_STATFS</code> — - <span class="Nd">return file system status</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mount.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VFS_STATFS</code>(<var class="Fa" style="white-space: nowrap;">struct - mount *mp</var>, <var class="Fa" style="white-space: nowrap;">struct statfs - *sbp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#VFS_STATFS"><code class="Fn" id="VFS_STATFS">VFS_STATFS</code></a>() - macro returns various pieces of information about the file system, including - recommended I/O sizes, free space, free inodes, etc.</p> -<p class="Pp">The arguments it expects are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">mp</var></dt> - <dd>The file system.</dd> - <dt><var class="Fa">sbp</var></dt> - <dd>A <var class="Vt">statfs</var> structure, as defined by - <code class="In"><<a class="In">sys/mount.h</a>></code>, into which - information is placed about the file system.</dd> -</dl> -<p class="Pp">The fields of <var class="Vt">struct statfs</var> related to the - file system are as follows:</p> -<dl class="Bl-tag"> - <dt id="f_type"><var class="Va">f_type</var></dt> - <dd>Type of file system.</dd> - <dt id="f_flags"><var class="Va">f_flags</var></dt> - <dd>A copy of mount exported flags.</dd> - <dt id="f_bsize"><var class="Va">f_bsize</var></dt> - <dd>Fragment size.</dd> - <dt id="f_iosize"><var class="Va">f_iosize</var></dt> - <dd>Optimal transfer block size.</dd> - <dt id="f_blocks"><var class="Va">f_blocks</var></dt> - <dd>The total number of data blocks in the file system.</dd> - <dt id="f_bfree"><var class="Va">f_bfree</var></dt> - <dd>The number of free blocks in the file system.</dd> - <dt id="f_bavail"><var class="Va">f_bavail</var></dt> - <dd>The number of free blocks available to non-superuser processes.</dd> - <dt id="f_files"><var class="Va">f_files</var></dt> - <dd>The total number of file nodes in the file system.</dd> - <dt id="f_ffree"><var class="Va">f_ffree</var></dt> - <dd>The number of free nodes available to non-superuser processes.</dd> - <dt id="f_syncwrites"><var class="Va">f_syncwrites</var></dt> - <dd>The number of synchronous writes since the file system was mounted.</dd> - <dt id="f_asyncwrites"><var class="Va">f_asyncwrites</var></dt> - <dd>The number of asynchronous writes since the file system was mounted.</dd> - <dt id="f_syncreads"><var class="Va">f_syncreads</var></dt> - <dd>The number of synchronous reads since the file system was mounted.</dd> - <dt id="f_asyncreads"><var class="Va">f_asyncreads</var></dt> - <dd>The number of asynchronous reads since the file system was mounted.</dd> - <dt id="f_namemax"><var class="Va">f_namemax</var></dt> - <dd>The maximum file name length for this file system.</dd> - <dt id="f_owner"><var class="Va">f_owner</var></dt> - <dd>The user ID of the user that mounted the file system.</dd> - <dt id="f_fsid"><var class="Va">f_fsid</var></dt> - <dd>Unique file system ID.</dd> - <dt id="f_fstypename"><var class="Va">f_fstypename</var></dt> - <dd>The file system type name; a string of at most - <code class="Dv">MFSNAMELEN</code> bytes.</dd> - <dt id="f_mntfromname"><var class="Va">f_mntfromname</var></dt> - <dd>The device name the file system was mounted from; a string of at most - <code class="Dv">MNAMELEN</code> bytes.</dd> - <dt id="f_mntonname"><var class="Va">f_mntonname</var></dt> - <dd>The name of the directory on which the file system is mounted; a string of - at most <code class="Dv">MNAMELEN</code> bytes.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">VFS(9)</a>, <a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 23, 2009</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VFS_SYNC.9 4.html b/static/freebsd/man9/VFS_SYNC.9 4.html deleted file mode 100644 index 7d0c105d..00000000 --- a/static/freebsd/man9/VFS_SYNC.9 4.html +++ /dev/null @@ -1,74 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFS_SYNC(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFS_SYNC(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VFS_SYNC</code> — <span class="Nd">flush - unwritten data</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mount.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VFS_SYNC</code>(<var class="Fa" style="white-space: nowrap;">struct - mount *mp</var>, <var class="Fa" style="white-space: nowrap;">int - waitfor</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#VFS_SYNC"><code class="Fn" id="VFS_SYNC">VFS_SYNC</code></a>() - macro writes out all unwritten data in the file system mounted as - <var class="Fa">mp</var>.</p> -<p class="Pp">The arguments it expects are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">mp</var></dt> - <dd>The file system.</dd> - <dt><var class="Fa">waitfor</var></dt> - <dd>Whether the function should wait for I/O to complete. Possible values are: - <dl class="Bl-tag"> - <dt id="MNT_WAIT"><a class="permalink" href="#MNT_WAIT"><code class="Dv">MNT_WAIT</code></a></dt> - <dd>synchronously wait for I/O to complete</dd> - <dt id="MNT_NOWAIT"><a class="permalink" href="#MNT_NOWAIT"><code class="Dv">MNT_NOWAIT</code></a></dt> - <dd>start all I/O, but do not wait for it</dd> - <dt id="MNT_LAZY"><a class="permalink" href="#MNT_LAZY"><code class="Dv">MNT_LAZY</code></a></dt> - <dd>push data not written by file system syncer</dd> - </dl> - </dd> -</dl> -<p class="Pp" id="VFS_SYNC~2">The - <a class="permalink" href="#VFS_SYNC~2"><code class="Fn">VFS_SYNC</code></a>() - macro calls the <var class="Va">vfs_sync</var> method of the file system, - which normally calls <a class="Xr">VOP_FSYNC(9)</a> for all the vnodes in - the file system.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">fsync(2)</a>, <a class="Xr">sync(2)</a>, - <a class="Xr">VFS(9)</a>, <a class="Xr">vnode(9)</a>, - <a class="Xr">VOP_FSYNC(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 23, 2009</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VFS_UNMOUNT.9 4.html b/static/freebsd/man9/VFS_UNMOUNT.9 4.html deleted file mode 100644 index da37399b..00000000 --- a/static/freebsd/man9/VFS_UNMOUNT.9 4.html +++ /dev/null @@ -1,67 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFS_UNMOUNT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFS_UNMOUNT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VFS_UNMOUNT</code> — - <span class="Nd">unmount a file system</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mount.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VFS_UNMOUNT</code>(<var class="Fa" style="white-space: nowrap;">struct - mount *mp</var>, <var class="Fa" style="white-space: nowrap;">int - mntflags</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#VFS_UNMOUNT"><code class="Fn" id="VFS_UNMOUNT">VFS_UNMOUNT</code></a>() - macro unmounts a file system.</p> -<p class="Pp">The arguments it expects are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">mp</var></dt> - <dd>The file system.</dd> - <dt id="VFS_UNMOUNT~2"><var class="Fa">mntflags</var></dt> - <dd>Bit-mask of flags for the unmount operation. The flags currently supported - by - <a class="permalink" href="#VFS_UNMOUNT~2"><code class="Fn">VFS_UNMOUNT</code></a>() - are: - <dl class="Bl-tag"> - <dt id="MNT_FORCE"><a class="permalink" href="#MNT_FORCE"><code class="Dv">MNT_FORCE</code></a></dt> - <dd>Open files are forcibly closed before the file system is - unmounted.</dd> - </dl> - </dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vflush(9)</a>, <a class="Xr">VFS(9)</a>, - <a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 23, 2009</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VFS_VGET.9 4.html b/static/freebsd/man9/VFS_VGET.9 4.html deleted file mode 100644 index 6126a50a..00000000 --- a/static/freebsd/man9/VFS_VGET.9 4.html +++ /dev/null @@ -1,74 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFS_VGET(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFS_VGET(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VFS_VGET</code> — <span class="Nd">convert - an inode number to a vnode</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mount.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VFS_VGET</code>(<var class="Fa" style="white-space: nowrap;">struct - mount *mp</var>, <var class="Fa" style="white-space: nowrap;">ino_t - ino</var>, <var class="Fa" style="white-space: nowrap;">int flags</var>, - <var class="Fa" style="white-space: nowrap;">struct vnode **vpp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#VFS_VGET"><code class="Fn" id="VFS_VGET">VFS_VGET</code></a>() - looks up or creates a vnode from a (mount, inode#) tuple.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">mp</var></dt> - <dd>The mount point.</dd> - <dt><var class="Fa">ino</var></dt> - <dd>The inode representing the file. This is a unique number assigned by the - file system when vnodes are first created.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>Additional locking flags to pass through to - <a class="Xr">vget(9)</a>.</dd> - <dt><var class="Fa">vpp</var></dt> - <dd>Return parameter for the vnode.</dd> -</dl> -<p class="Pp">This is an optional file system entry-point for file systems - mainly intended for NFS server use, but many file systems use it internally - in <a class="Xr">VOP_LOOKUP(9)</a> and similar.</p> -<p class="Pp">If the file system does not support this call, then it should - return <code class="Er">EOPNOTSUPP</code>.</p> -<p class="Pp" id="ffs_vget">Please see - <a class="permalink" href="#ffs_vget"><code class="Fn">ffs_vget</code></a>() - in <span class="Pa">sys/ufs/ffs/ffs_vfsops.c</span> for the canonical - example.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">VFS(9)</a>, <a class="Xr">vget(9)</a>, - <a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 7, 2005</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VNET.9 4.html b/static/freebsd/man9/VNET.9 4.html deleted file mode 100644 index 2b131ae6..00000000 --- a/static/freebsd/man9/VNET.9 4.html +++ /dev/null @@ -1,353 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VNET(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VNET(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VNET</code> — <span class="Nd">network - subsystem virtualization infrastructure</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="Cd">options VIMAGE</code> - <br/> - <code class="Cd">options VNET_DEBUG</code></p> -<p class="Pp"> - <br/> - <code class="In">#include <<a class="In">net/vnet.h</a>></code></p> -<section class="Ss"> -<h2 class="Ss" id="Constants_and_Global_Variables"><a class="permalink" href="#Constants_and_Global_Variables">Constants - and Global Variables</a></h2> -<p class="Pp"><code class="Dv">VNET_SETNAME</code> - <code class="Dv">VNET_SYMPREFIX</code> - <br/> - <var class="Vt">extern struct vnet *vnet0;</var></p> -</section> -<section class="Ss"> -<h2 class="Ss">Variable Declaration</h2> -<p class="Pp"><code class="Fn">VNET</code>(<var class="Fa">name</var>);</p> -<p class="Pp"><code class="Fn">VNET_NAME</code>(<var class="Fa">name</var>);</p> -<p class="Pp"><code class="Fn">VNET_DECLARE</code>(<var class="Fa">type</var>, - <var class="Fa">name</var>);</p> -<p class="Pp"><code class="Fn">VNET_DEFINE</code>(<var class="Fa">type</var>, - <var class="Fa">name</var>);</p> -<p class="Pp"><code class="Fn">VNET_DEFINE_STATIC</code>(<var class="Fa">type</var>, - <var class="Fa">name</var>);</p> -<div class="Bd Pp Li"> -<pre>#define V_name VNET(name)</pre> -</div> -</section> -<section class="Ss"> -<h2 class="Ss">Virtual Instance Selection</h2> -<p class="Pp"><code class="Fn">CRED_TO_VNET</code>(<var class="Fa">struct ucred - *</var>);</p> -<p class="Pp"><code class="Fn">TD_TO_VNET</code>(<var class="Fa">struct thread - *</var>);</p> -<p class="Pp"><code class="Fn">P_TO_VNET</code>(<var class="Fa">struct proc - *</var>);</p> -<p class="Pp"><code class="Fn">IS_DEFAULT_VNET</code>(<var class="Fa">struct - vnet *</var>);</p> -<p class="Pp"><code class="Fn">VNET_ASSERT</code>(<var class="Fa">exp</var>, - <var class="Fa">msg</var>);</p> -<p class="Pp"><code class="Fn">CURVNET_SET</code>(<var class="Fa">struct vnet - *</var>);</p> -<p class="Pp"><code class="Fn">CURVNET_SET_QUIET</code>(<var class="Fa">struct - vnet *</var>);</p> -<p class="Pp"><code class="Fn">CURVNET_RESTORE</code>();</p> -<p class="Pp"><code class="Fn">VNET_ITERATOR_DECL</code>(<var class="Fa">struct - vnet *</var>);</p> -<p class="Pp"><code class="Fn">VNET_FOREACH</code>(<var class="Fa">struct vnet - *</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Locking"><a class="permalink" href="#Locking">Locking</a></h2> -<p class="Pp"><code class="Fn">VNET_LIST_RLOCK</code>();</p> -<p class="Pp"><code class="Fn">VNET_LIST_RUNLOCK</code>();</p> -<p class="Pp"><code class="Fn">VNET_LIST_RLOCK_NOSLEEP</code>();</p> -<p class="Pp"><code class="Fn">VNET_LIST_RUNLOCK_NOSLEEP</code>();</p> -</section> -<section class="Ss"> -<h2 class="Ss">Startup and Teardown Functions</h2> -<p class="Pp"><var class="Ft">struct vnet *</var> - <br/> - <code class="Fn">vnet_alloc</code>(<var class="Fa">void</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vnet_destroy</code>(<var class="Fa">struct vnet *</var>);</p> -<p class="Pp"><code class="Fn">VNET_SYSINIT</code>(<var class="Fa">ident</var>, - <var class="Fa">enum sysinit_sub_id subsystem</var>, <var class="Fa">enum - sysinit_elem_order order</var>, <var class="Fa">sysinit_cfunc_t func</var>, - <var class="Fa">const void *arg</var>);</p> -<p class="Pp"><code class="Fn">VNET_SYSUNINIT</code>(<var class="Fa">ident</var>, - <var class="Fa">enum sysinit_sub_id subsystem</var>, <var class="Fa">enum - sysinit_elem_order order</var>, <var class="Fa">sysinit_cfunc_t func</var>, - <var class="Fa">const void *arg</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Eventhandlers"><a class="permalink" href="#Eventhandlers">Eventhandlers</a></h2> -<p class="Pp"><code class="Fn">VNET_GLOBAL_EVENTHANDLER_REGISTER</code>(<var class="Fa">const - char *name</var>, <var class="Fa">void *func</var>, <var class="Fa">void - *arg</var>, <var class="Fa">int priority</var>);</p> -<p class="Pp"><code class="Fn">VNET_GLOBAL_EVENTHANDLER_REGISTER_TAG</code>(<var class="Fa">eventhandler_tag - tag</var>, <var class="Fa">const char *name</var>, <var class="Fa">void - *func</var>, <var class="Fa">void *arg</var>, <var class="Fa">int - priority</var>);</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><code class="Nm">VNET</code> is the name of a technique to - virtualize the network stack. The basic idea is to change global resources - most notably variables into per network stack resources and have functions, - sysctls, eventhandlers, etc. access and handle them in the context of the - correct instance. Each (virtual) network stack is attached to a - <i class="Em">prison</i>, with <var class="Vt">vnet0</var> being the - unrestricted default network stack of the base system.</p> -<p class="Pp">The global defines for <code class="Dv">VNET_SETNAME</code> and - <code class="Dv">VNET_SYMPREFIX</code> are shared with - <a class="Xr">kvm(3)</a> to access internals for debugging reasons.</p> -<section class="Ss"> -<h2 class="Ss">Variable Declaration</h2> -<p class="Pp">Variables are virtualized by using the - <a class="permalink" href="#VNET_DEFINE"><code class="Fn" id="VNET_DEFINE">VNET_DEFINE</code></a>() - macro rather than writing them out as - <a class="permalink" href="#type"><i class="Em" id="type">type name</i></a>. - One can still use static initialization, e.g.,</p> -<p class="Pp"></p> -<div class="Bd Bd-indent"><code class="Li"><code class="Li">VNET_DEFINE(int, - foo) = 1;</code></code></div> -<p class="Pp" id="VNET_DEFINE_STATIC">Variables declared with the static keyword - can use the - <a class="permalink" href="#VNET_DEFINE_STATIC"><code class="Fn">VNET_DEFINE_STATIC</code></a>() - macro, e.g.,</p> -<p class="Pp"></p> -<div class="Bd - Bd-indent"><code class="Li"><code class="Li">VNET_DEFINE_STATIC(SLIST_HEAD(, - bar), bars);</code></code></div> -<p class="Pp" id="VNET_SYSINIT">Static initialization is not possible when the - virtualized variable would need to be referenced, e.g., with - “TAILQ_HEAD_INITIALIZER()”. In that case a - <a class="permalink" href="#VNET_SYSINIT"><code class="Fn">VNET_SYSINIT</code></a>() - based initialization function must be used.</p> -<p class="Pp" id="VNET_DECLARE">External variables have to be declared using the - <a class="permalink" href="#VNET_DECLARE"><code class="Fn">VNET_DECLARE</code></a>() - macro. In either case the convention is to define another macro, that is - then used throughout the implementation to access that variable. The - variable name is usually prefixed by - <a class="permalink" href="#V_"><i class="Em" id="V_">V_</i></a> to express - that it is virtualized. The - <a class="permalink" href="#VNET"><code class="Fn" id="VNET">VNET</code></a>() - macro will then translate accesses to that variable to the copy of the - currently selected instance (see the - <a class="Sx" href="#Virtual_instance_selection">Virtual instance - selection</a> section):</p> -<p class="Pp"></p> -<div class="Bd - Bd-indent"><code class="Li"><code class="Li">#define V_name VNET(name)</code></code></div> -<p class="Pp"><i class="Em">NOTE:</i> Do not confuse this with the convention - used by <a class="Xr">VFS(9)</a>.</p> -<p class="Pp" id="VNET_NAME">The - <a class="permalink" href="#VNET_NAME"><code class="Fn">VNET_NAME</code></a>() - macro returns the offset within the memory region of the virtual network - stack instance.</p> -</section> -<section class="Ss"> -<h2 class="Ss">Virtual Instance Selection</h2> -<p class="Pp">There are three different places where the current virtual network - stack pointer is stored and can be taken from:</p> -<ol class="Bl-enum Bd-indent"> - <li>a <i class="Em">prison</i>: - <div class="Bd Bd-indent"><code class="Li">(struct prison - *)->pr_vnet</code></div> - <p class="Pp">For convenience the following macros are provided:</p> - <div class="Bd Bd-indent Li"> - <pre><a class="permalink" href="#CRED_TO_VNET"><code class="Fn" id="CRED_TO_VNET">CRED_TO_VNET</code></a>(<var class="Fa">struct ucred *</var>) -<a class="permalink" href="#TD_TO_VNET"><code class="Fn" id="TD_TO_VNET">TD_TO_VNET</code></a>(<var class="Fa">struct thread *</var>) -<a class="permalink" href="#P_TO_VNET"><code class="Fn" id="P_TO_VNET">P_TO_VNET</code></a>(<var class="Fa">struct proc *</var>)</pre> - </div> - </li> - <li id="socket">a - <a class="permalink" href="#socket"><i class="Em">socket</i></a>: - <div class="Bd Bd-indent"><code class="Li">(struct socket - *)->so_vnet</code></div> - </li> - <li id="interface">an - <a class="permalink" href="#interface"><i class="Em">interface</i></a>: - <div class="Bd Bd-indent"><code class="Li">(struct ifnet - *)->if_vnet</code></div> - </li> -</ol> -<p class="Pp">In addition the currently active instance is cached in - “curthread->td_vnet” which is usually only accessed through - the <code class="Dv">curvnet</code> macro.</p> -<p class="Pp" id="CURVNET_SET">To set the correct context of the current virtual - network instance, use the - <a class="permalink" href="#CURVNET_SET"><code class="Fn">CURVNET_SET</code></a>() - or - <a class="permalink" href="#CURVNET_SET_QUIET"><code class="Fn" id="CURVNET_SET_QUIET">CURVNET_SET_QUIET</code></a>() - macros. The <code class="Fn">CURVNET_SET_QUIET</code>() version will not - record vnet recursions in case the kernel was compiled with - <code class="Cd">options VNET_DEBUG</code> and should thus only be used in - well known cases, where recursion is unavoidable. Both macros will save the - previous state on the stack and it must be restored with the - <code class="Fn">CURVNET_RESTORE</code>() macro.</p> -<p class="Pp" id="CURVNET_SET~2"><i class="Em">NOTE:</i> As the previous state - is saved on the stack, you cannot have multiple - <a class="permalink" href="#CURVNET_SET~2"><code class="Fn">CURVNET_SET</code></a>() - calls in the same block.</p> -<p class="Pp" id="CURVNET_RESTORE"><i class="Em">NOTE:</i> As the previous state - is saved on the stack, a - <a class="permalink" href="#CURVNET_RESTORE"><code class="Fn">CURVNET_RESTORE</code></a>() - call has to be in the same block as the - <code class="Fn">CURVNET_SET</code>() call or in a subblock with the same - idea of the saved instances as the outer block.</p> -<p class="Pp" id="not"><i class="Em">NOTE:</i> As each macro is a set of - operations and, as previously explained, cannot be put into its own block - when defined, one cannot conditionally set the current vnet context. The - following will <a class="permalink" href="#not"><i class="Em">not</i></a> - work:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>if (condition) - CURVNET_SET(vnet);</pre> -</div> -<p class="Pp">nor would this work:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>if (condition) { - CURVNET_SET(vnet); -} -CURVNET_RESTORE();</pre> -</div> -<p class="Pp" id="VNET_ITERATOR_DECL">Sometimes one needs to loop over all - virtual instances, for example to update virtual from global state, to run a - function from a <a class="Xr">callout(9)</a> for each instance, etc. For - those cases the - <a class="permalink" href="#VNET_ITERATOR_DECL"><code class="Fn">VNET_ITERATOR_DECL</code></a>() - and - <a class="permalink" href="#VNET_FOREACH"><code class="Fn" id="VNET_FOREACH">VNET_FOREACH</code></a>() - macros are provided. The former macro defines the variable that iterates - over the loop, and the latter loops over all of the virtual network stack - instances. See <a class="Sx" href="#Locking">Locking</a> for how to savely - traverse the list of all virtual instances.</p> -<p class="Pp" id="IS_DEFAULT_VNET">The - <a class="permalink" href="#IS_DEFAULT_VNET"><code class="Fn">IS_DEFAULT_VNET</code></a>() - macro provides a safe way to check whether the currently active instance is - the unrestricted default network stack of the base system - (<var class="Vt">vnet0</var>).</p> -<p class="Pp" id="VNET_ASSERT">The - <a class="permalink" href="#VNET_ASSERT"><code class="Fn">VNET_ASSERT</code></a>() - macro provides a way to conditionally add assertions that are only active - with <code class="Cd">options VIMAGE</code> compiled in and either - <code class="Cd">options VNET_DEBUG</code> or <code class="Cd">options - INVARIANTS</code> enabled as well. It uses the same semantics as - <a class="Xr">KASSERT(9)</a>.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Locking~2"><a class="permalink" href="#Locking~2">Locking</a></h2> -<p class="Pp">For public access to the list of virtual network stack instances - e.g., by the - <a class="permalink" href="#VNET_FOREACH~2"><code class="Fn" id="VNET_FOREACH~2">VNET_FOREACH</code></a>() - macro, read locks are provided. Macros are used to abstract from the actual - type of the locks. If a caller may sleep while traversing the list, it must - use the - <a class="permalink" href="#VNET_LIST_RLOCK"><code class="Fn" id="VNET_LIST_RLOCK">VNET_LIST_RLOCK</code></a>() - and - <a class="permalink" href="#VNET_LIST_RUNLOCK"><code class="Fn" id="VNET_LIST_RUNLOCK">VNET_LIST_RUNLOCK</code></a>() - macros. Otherwise, the caller can use - <a class="permalink" href="#VNET_LIST_RLOCK_NOSLEEP"><code class="Fn" id="VNET_LIST_RLOCK_NOSLEEP">VNET_LIST_RLOCK_NOSLEEP</code></a>() - and - <a class="permalink" href="#VNET_LIST_RUNLOCK_NOSLEEP"><code class="Fn" id="VNET_LIST_RUNLOCK_NOSLEEP">VNET_LIST_RUNLOCK_NOSLEEP</code></a>().</p> -</section> -<section class="Ss"> -<h2 class="Ss">Startup and Teardown Functions</h2> -<p class="Pp">To start or tear down a virtual network stack instance the - internal functions - <a class="permalink" href="#vnet_alloc"><code class="Fn" id="vnet_alloc">vnet_alloc</code></a>() - and - <a class="permalink" href="#vnet_destroy"><code class="Fn" id="vnet_destroy">vnet_destroy</code></a>() - are provided and called from the jail framework. They run the publicly - provided methods to handle network stack startup and teardown.</p> -<p class="Pp" id="VNET_SYSINIT~2">For public control, the system startup - interface has been enhanced to not only handle a system boot but to also - handle a virtual network stack startup and teardown. To the base system the - <a class="permalink" href="#VNET_SYSINIT~2"><code class="Fn">VNET_SYSINIT</code></a>() - and - <a class="permalink" href="#VNET_SYSUNINIT"><code class="Fn" id="VNET_SYSUNINIT">VNET_SYSUNINIT</code></a>() - macros look exactly as if there were no virtual network stack. In fact, if - <code class="Cd">options VIMAGE</code> is not compiled in they are compiled - to the standard - <a class="permalink" href="#SYSINIT"><code class="Fn" id="SYSINIT">SYSINIT</code></a>() - macros. In addition to that they are run for each virtual network stack when - starting or, in reverse order, when shutting down.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Eventhandlers~2"><a class="permalink" href="#Eventhandlers~2">Eventhandlers</a></h2> -<p class="Pp">Eventhandlers can be handled in two ways:</p> -<p class="Pp"></p> -<ol class="Bl-enum Bd-indent Bl-compact"> - <li id="tags">save the - <a class="permalink" href="#tags"><i class="Em">tags</i></a> returned in - each virtual instance and properly free the eventhandlers on teardown - using those, or</li> - <li>use one eventhandler that will iterate over all virtual network stack - instances.</li> -</ol> -<p class="Pp" id="VNET_GLOBAL_EVENTHANDLER_REGISTER">For the first case one can - just use the normal <a class="Xr">EVENTHANDLER(9)</a> functions, while for - the second case the - <a class="permalink" href="#VNET_GLOBAL_EVENTHANDLER_REGISTER"><code class="Fn">VNET_GLOBAL_EVENTHANDLER_REGISTER</code></a>() - and - <a class="permalink" href="#VNET_GLOBAL_EVENTHANDLER_REGISTER_TAG"><code class="Fn" id="VNET_GLOBAL_EVENTHANDLER_REGISTER_TAG">VNET_GLOBAL_EVENTHANDLER_REGISTER_TAG</code></a>() - macros are provided. These differ in that - <code class="Fn">VNET_GLOBAL_EVENTHANDLER_REGISTER_TAG</code>() takes an - extra first argument that will carry the <var class="Fa">tag</var> upon - return. Eventhandlers registered with either of these will not run - <var class="Fa">func</var> directly but <var class="Fa">func</var> will be - called from an internal iterator function for each vnet. Both macros can - only be used for eventhandlers that do not take additional arguments, as the - variadic arguments from an <a class="Xr">EVENTHANDLER_INVOKE(9)</a> call - will be ignored.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Sysctl_Handling"><a class="permalink" href="#Sysctl_Handling">Sysctl - Handling</a></h2> -<p class="Pp">A <a class="Xr">sysctl(9)</a> can be virtualized by adding the - <code class="Dv">CTLFLAG_VNET</code> control flag to the ctlflags bitmask of - the macros.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">jail(2)</a>, <a class="Xr">kvm(3)</a>, - <a class="Xr">EVENTHANDLER(9)</a>, <a class="Xr">KASSERT(9)</a>, - <a class="Xr">sysctl(9)</a></p> -<p class="Pp">Marko Zec, Implementing a Clonable Network Stack in the FreeBSD - Kernel, USENIX ATC'03, June 2003, Boston</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The virtual network stack implementation first appeared in - <span class="Ux">FreeBSD 8.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">VNET</code> framework was designed and - implemented at the University of Zagreb by <span class="An">Marko Zec</span> - under sponsorship of the FreeBSD Foundation and NLnet Foundation, and later - extended and refined by <span class="An">Bjoern A. Zeeb</span> (also under - FreeBSD Foundation sponsorship), and <span class="An">Robert - Watson</span>.</p> -<p class="Pp">This manual page was written by <span class="An">Bjoern A. Zeeb, - CK Software GmbH,</span> under sponsorship from the FreeBSD Foundation.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 19, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_ACCESS.9 4.html b/static/freebsd/man9/VOP_ACCESS.9 4.html deleted file mode 100644 index 482b0ce6..00000000 --- a/static/freebsd/man9/VOP_ACCESS.9 4.html +++ /dev/null @@ -1,102 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_ACCESS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_ACCESS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_ACCESS</code>, - <code class="Nm">VOP_ACCESSX</code> — <span class="Nd">check access - permissions of a file or Unix domain socket</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_ACCESS</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">accmode_t - accmode</var>, <var class="Fa" style="white-space: nowrap;">struct ucred - *cred</var>, <var class="Fa" style="white-space: nowrap;">struct thread - *td</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_ACCESSX</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">accmode_t - accmode</var>, <var class="Fa" style="white-space: nowrap;">struct ucred - *cred</var>, <var class="Fa" style="white-space: nowrap;">struct thread - *td</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This entry point checks the access permissions of the file against - the given credentials.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the file to check.</dd> - <dt><var class="Fa">accmode</var></dt> - <dd>The type of access required.</dd> - <dt><var class="Fa">cred</var></dt> - <dd>The user credentials to check.</dd> - <dt><var class="Fa">td</var></dt> - <dd>The thread which is checking.</dd> -</dl> -<p class="Pp" id="VOP_ACCESS">The <var class="Fa">accmode</var> is a mask which - can contain flags described in <sys/vnode.h>, e.g. - <code class="Dv">VREAD</code>, <code class="Dv">VWRITE</code> or - <code class="Dv">VEXEC</code>. For - <a class="permalink" href="#VOP_ACCESS"><code class="Fn">VOP_ACCESS</code></a>(), - the only flags that may be set in <var class="Fa">accmode</var> are - <code class="Dv">VEXEC</code>, <code class="Dv">VWRITE</code>, - <code class="Dv">VREAD</code>, <code class="Dv">VADMIN</code> and - <code class="Dv">VAPPEND</code>. To check for other flags, one has to use - <a class="permalink" href="#VOP_ACCESSX"><code class="Fn" id="VOP_ACCESSX">VOP_ACCESSX</code></a>() - instead.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The vnode will be locked on entry and should remain locked on - return.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If the file is accessible in the specified way, then zero is - returned, otherwise an appropriate error code is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt> - <dd>An attempt was made to change an immutable file.</dd> - <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt> - <dd>The permission bits the file mode or the ACL do not permit the requested - access.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vaccess(9)</a>, - <a class="Xr">vaccess_acl_nfs4(9)</a>, - <a class="Xr">vaccess_acl_posix1e(9)</a>, <a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 18, 2009</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_ACLCHECK.9 4.html b/static/freebsd/man9/VOP_ACLCHECK.9 4.html deleted file mode 100644 index e13f70f6..00000000 --- a/static/freebsd/man9/VOP_ACLCHECK.9 4.html +++ /dev/null @@ -1,100 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_ACLCHECK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_ACLCHECK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_ACLCHECK</code> — - <span class="Nd">check an access control list for a vnode</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/acl.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_ACLCHECK</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">acl_type_t - type</var>, <var class="Fa" style="white-space: nowrap;">struct acl - *aclp</var>, <var class="Fa" style="white-space: nowrap;">struct ucred - *cred</var>, <var class="Fa" style="white-space: nowrap;">struct thread - *td</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This vnode call may be used to determine the validity of a - particular access control list (ACL) for a particular file or directory.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the file or directory.</dd> - <dt><var class="Fa">type</var></dt> - <dd>The type of ACL to check.</dd> - <dt><var class="Fa">aclp</var></dt> - <dd>A pointer to an ACL structure from which to retrieve the ACL data.</dd> - <dt><var class="Fa">cred</var></dt> - <dd>The user credentials to use in authorizing the request.</dd> - <dt><var class="Fa">td</var></dt> - <dd>The thread checking the ACL.</dd> -</dl> -<p class="Pp">The <var class="Fa">cred</var> pointer may be NULL to indicate - that access control checks are not to be performed, if possible. This cred - setting might be used to allow the kernel to authorize ACL verification that - the active process might not be permitted to do.</p> -<p class="Pp">The vnode ACL interface defines the syntax, and not semantics, of - file and directory ACL interfaces. More information about ACL management in - kernel may be found in <a class="Xr">acl(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">No locks are required to call this vnode method, and any locks - held on entry will be held on exit.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If the <var class="Fa">aclp</var> pointer points to a valid ACL of - type <var class="Fa">type</var> for the object <var class="Fa">vp</var>, - then zero is returned. Otherwise, an appropriate error code is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt> - <dd>The ACL type passed is invalid for this vnode, or the ACL data is - invalid.</dd> - <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt> - <dd>The file or directory ACL does not permit access.</dd> - <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt> - <dd>Sufficient memory is not available to fulfill the request.</dd> - <dt id="EOPNOTSUPP">[<a class="permalink" href="#EOPNOTSUPP"><code class="Er">EOPNOTSUPP</code></a>]</dt> - <dd>The file system does not support - <code class="Fn">VOP_ACLCHECK</code>().</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">acl(9)</a>, <a class="Xr">vnode(9)</a>, - <a class="Xr">VOP_GETACL(9)</a>, <a class="Xr">VOP_SETACL(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Robert - Watson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 23, 1999</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_ADVISE.9 4.html b/static/freebsd/man9/VOP_ADVISE.9 4.html deleted file mode 100644 index bed12675..00000000 --- a/static/freebsd/man9/VOP_ADVISE.9 4.html +++ /dev/null @@ -1,87 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_ADVISE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_ADVISE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_ADVISE</code> — <span class="Nd">apply - advice about use of file data</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_ADVISE</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">off_t - start</var>, <var class="Fa" style="white-space: nowrap;">off_t end</var>, - <var class="Fa" style="white-space: nowrap;">int advice</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This call applies advice for a range of a file's data. It is used - to implement the <a class="Xr">posix_fadvise(2)</a> system call.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the file.</dd> - <dt><var class="Fa">start</var></dt> - <dd>The start of the range of file data.</dd> - <dt><var class="Fa">end</var></dt> - <dd>The end of the range of file data. A value of - <code class="Dv">OFF_MAX</code> indicates that the advice is to be applied - up to the end of the file.</dd> - <dt><var class="Fa">advice</var></dt> - <dd>The type of operation to apply to the file data. Possible values are: - <dl class="Bl-tag"> - <dt id="POSIX_FADV_WILLNEED"><a class="permalink" href="#POSIX_FADV_WILLNEED"><code class="Dv">POSIX_FADV_WILLNEED</code></a></dt> - <dd>Initiate an asynchronous read of the file data if it is not already - resident.</dd> - <dt id="POSIX_FADV_DONTNEED"><a class="permalink" href="#POSIX_FADV_DONTNEED"><code class="Dv">POSIX_FADV_DONTNEED</code></a></dt> - <dd>Decrease the in-memory priority of clean file data or discard clean - file data.</dd> - </dl> - </dd> -</dl> -<p class="Pp">If the <var class="Fa">start</var> and <var class="Fa">end</var> - offsets are both zero, then the operation should be applied to the entire - file. Note that this call is advisory only and may perform the requested - operation on a subset of the requested range (including not performing it at - all) and still return success.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The file should be unlocked on entry.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned if the call is successful, otherwise an - appropriate error code is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt> - <dd>An invalid value was given for <var class="Fa">advice</var>.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 26, 2015</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_ADVLOCK.9 4.html b/static/freebsd/man9/VOP_ADVLOCK.9 4.html deleted file mode 100644 index 92329ee3..00000000 --- a/static/freebsd/man9/VOP_ADVLOCK.9 4.html +++ /dev/null @@ -1,89 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_ADVLOCK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_ADVLOCK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_ADVLOCK</code> — - <span class="Nd">advisory record locking</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/fcntl.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/lockf.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_ADVLOCK</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">caddr_t - id</var>, <var class="Fa" style="white-space: nowrap;">int op</var>, - <var class="Fa" style="white-space: nowrap;">struct flock *fl</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode being manipulated.</dd> - <dt><var class="Fa">id</var></dt> - <dd>The id token which is changing the lock.</dd> - <dt><var class="Fa">op</var></dt> - <dd>The operation to perform (see <a class="Xr">fcntl(2)</a>).</dd> - <dt><var class="Fa">fl</var></dt> - <dd>Description of the lock.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>One or more of the following: - <p class="Pp"></p> - <div class="Bd-indent"> - <dl class="Bl-tag Bl-compact"> - <dt id="F_WAIT"><a class="permalink" href="#F_WAIT"><code class="Dv">F_WAIT</code></a></dt> - <dd>Wait until lock is granted.</dd> - <dt id="F_FLOCK"><a class="permalink" href="#F_FLOCK"><code class="Dv">F_FLOCK</code></a></dt> - <dd>Use <a class="Xr">flock(2)</a> semantics for lock.</dd> - <dt id="F_POSIX"><a class="permalink" href="#F_POSIX"><code class="Dv">F_POSIX</code></a></dt> - <dd>Use POSIX semantics for lock.</dd> - <dt id="F_REMOTE"><a class="permalink" href="#F_REMOTE"><code class="Dv">F_REMOTE</code></a></dt> - <dd>Lock owner is remote NFS client.</dd> - <dt id="F_NOINTR"><a class="permalink" href="#F_NOINTR"><code class="Dv">F_NOINTR</code></a></dt> - <dd>Mask signals while waiting for the lock.</dd> - </dl> - </div> - </dd> -</dl> -<p class="Pp" id="lf_advlock">This entry point manipulates advisory record locks - on the file. Most file systems delegate the work for this call to - <a class="permalink" href="#lf_advlock"><code class="Fn">lf_advlock</code></a>().</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an error is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">fcntl(2)</a>, <a class="Xr">flock(2)</a>, - <a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 10, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_ALLOCATE.9 4.html b/static/freebsd/man9/VOP_ALLOCATE.9 4.html deleted file mode 100644 index ce6e0bd8..00000000 --- a/static/freebsd/man9/VOP_ALLOCATE.9 4.html +++ /dev/null @@ -1,86 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_ALLOCATE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_ALLOCATE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_ALLOCATE</code> — - <span class="Nd">allocate storage for a file</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_ALLOCATE</code>(<var class="Fa">struct vnode *vp</var>, - <var class="Fa">off_t *offset</var>, <var class="Fa">off_t *len</var>, - <var class="Fa">int ioflag</var>, <var class="Fa">struct ucred - *cred</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This call allocates storage for a range of offsets in a file. It - is used to implement the <a class="Xr">posix_fallocate(2)</a> system - call.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the file.</dd> - <dt><var class="Fa">offset</var></dt> - <dd>The start of the range to allocate storage for in the file.</dd> - <dt><var class="Fa">len</var></dt> - <dd>The length of the range to allocate storage for in the file.</dd> - <dt><var class="Fa">ioflag</var></dt> - <dd>Directives and hints to be given to the file system.</dd> - <dt><var class="Fa">cred</var></dt> - <dd>The credentials of the caller.</dd> -</dl> -<p class="Pp">The <var class="Fa">offset</var> and <var class="Fa">len</var> - arguments are updated to reflect the portion of the range that still needs - to be allocated on return. A partial allocation is considered a successful - operation. The file's contents are not changed.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The file should be exclusively locked on entry and will still be - locked on exit.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned if the call is successful, otherwise an - appropriate error code is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="EFBIG">[<a class="permalink" href="#EFBIG"><code class="Er">EFBIG</code></a>]</dt> - <dd>An attempt was made to write a file that exceeds the process's file size - limit or the maximum file size.</dd> - <dt id="ENOSPC">[<a class="permalink" href="#ENOSPC"><code class="Er">ENOSPC</code></a>]</dt> - <dd>The file system is full.</dd> - <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt> - <dd>An append-only flag is set on the file, but the caller is attempting to - write before the current end of file.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a>, <a class="Xr">VOP_READ(9)</a>, - <a class="Xr">VOP_WRITE(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 8, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_ATTRIB.9 4.html b/static/freebsd/man9/VOP_ATTRIB.9 4.html deleted file mode 100644 index 9c813f1c..00000000 --- a/static/freebsd/man9/VOP_ATTRIB.9 4.html +++ /dev/null @@ -1,139 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_ATTRIB(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_ATTRIB(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_GETATTR</code>, - <code class="Nm">VOP_SETATTR</code> — <span class="Nd">get and set - attributes on a file or directory</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_GETATTR</code>(<var class="Fa">struct</var>, - <var class="Fa">vnode</var>, <var class="Fa">*vp</var>, - <var class="Fa">flags</var>, <var class="Fa">struct</var>, - <var class="Fa">vattr</var>, <var class="Fa">*vap</var>, - <var class="Fa">struct</var>, <var class="Fa">ucred</var>, - <var class="Fa">*cred</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_SETATTR</code>(<var class="Fa">struct</var>, - <var class="Fa">vnode</var>, <var class="Fa">*vp</var>, - <var class="Fa">struct</var>, <var class="Fa">vattr</var>, - <var class="Fa">*vap</var>, <var class="Fa">struct</var>, - <var class="Fa">ucred</var>, <var class="Fa">*cred</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_STAT</code>(<var class="Fa">struct</var>, - <var class="Fa">vnode</var>, <var class="Fa">*vp</var>, - <var class="Fa">struct</var>, <var class="Fa">stat</var>, - <var class="Fa">*sb</var>, <var class="Fa">flags</var>, - <var class="Fa">struct</var>, <var class="Fa">ucred</var>, - <var class="Fa">*active_cred</var>, <var class="Fa">struct</var>, - <var class="Fa">ucred</var>, <var class="Fa">*file_cred</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These entry points manipulate various attributes of a file or - directory, including file permissions, owner, group, size, access time and - modification time.</p> -<p class="Pp" id="VOP_STAT"><a class="permalink" href="#VOP_STAT"><code class="Fn">VOP_STAT</code></a>() - returns data in a format suitable for the <a class="Xr">stat(2)</a> system - call and by default is implemented as a wrapper around - <code class="Fn">VOP_GETATTR</code>(). Filesystems may want to implement - their own variant for performance reasons.</p> -<p class="Pp" id="VOP_GETATTR">For - <a class="permalink" href="#VOP_GETATTR"><code class="Fn">VOP_GETATTR</code></a>() - and <code class="Fn">VOP_SETATTR</code>() the arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the file.</dd> - <dt><var class="Fa">vap</var></dt> - <dd>The attributes of the file.</dd> - <dt><var class="Fa">cred</var></dt> - <dd>The user credentials of the calling thread.</dd> -</dl> -<p class="Pp" id="VOP_STAT~2">For - <a class="permalink" href="#VOP_STAT~2"><code class="Fn">VOP_STAT</code></a>() - the arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the file.</dd> - <dt><var class="Fa">sb</var></dt> - <dd>The attributes of the file.</dd> - <dt><var class="Fa">active_cred</var></dt> - <dd>The user credentials of the calling thread.</dd> - <dt><var class="Fa">file_cred</var></dt> - <dd>The credentials installed on the file description pointing to the vnode or - NOCRED.</dd> -</dl> -<p class="Pp" id="VOP_SETATTR">Attributes which are not being modified by - <a class="permalink" href="#VOP_SETATTR"><code class="Fn">VOP_SETATTR</code></a>() - should be set to the value <code class="Dv">VNOVAL</code>; - <a class="permalink" href="#VATTR_NULL"><code class="Fn" id="VATTR_NULL">VATTR_NULL</code></a>() - may be used to clear all the values, and should generally be used to reset - the contents of <var class="Fa">*vap</var> prior to setting specific - values.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">Both <code class="Fn">VOP_GETATTR</code>() and - <code class="Fn">VOP_STAT</code>() expect the vnode to be locked on entry - and will leave the vnode locked on return. The lock type can be either - shared or exclusive.</p> -<p class="Pp" id="VOP_SETATTR~2"><a class="permalink" href="#VOP_SETATTR~2"><code class="Fn">VOP_SETATTR</code></a>() - expects the vnode to be locked on entry and will leave the vnode locked on - return. The lock type must be exclusive.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp"><code class="Fn">VOP_GETATTR</code>() returns 0 if it was able to - retrieve the attribute data via <var class="Fa">*vap</var>, otherwise an - appropriate error is returned. <code class="Fn">VOP_SETATTR</code>() returns - zero if the attributes were changed successfully, otherwise an appropriate - error is returned. <code class="Fn">VOP_STAT</code>() returns 0 if it was - able to retrieve the attribute data <var class="Fa">*sb</var>, otherwise an - appropriate error is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt> - <dd>The file is immutable.</dd> - <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt> - <dd>The caller does not have permission to modify the file or directory - attributes.</dd> - <dt id="EROFS">[<a class="permalink" href="#EROFS"><code class="Er">EROFS</code></a>]</dt> - <dd>The file system is read-only.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">VFS(9)</a>, <a class="Xr">vnode(9)</a>, - <a class="Xr">VOP_ACCESS(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 2, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_BMAP.9 4.html b/static/freebsd/man9/VOP_BMAP.9 4.html deleted file mode 100644 index f1d7f50e..00000000 --- a/static/freebsd/man9/VOP_BMAP.9 4.html +++ /dev/null @@ -1,90 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_BMAP(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_BMAP(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_BMAP</code> — <span class="Nd">Logical - to physical block number conversion</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_BMAP</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">daddr_t - bn</var>, <var class="Fa" style="white-space: nowrap;">struct bufobj - **bop</var>, <var class="Fa" style="white-space: nowrap;">daddr_t - *bnp</var>, <var class="Fa" style="white-space: nowrap;">int *runp</var>, - <var class="Fa" style="white-space: nowrap;">int *runb</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This vnode call is used to lookup the physical block number of the - file system's underlying device where a given logical block of a file is - stored. Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the file.</dd> - <dt><var class="Fa">bn</var></dt> - <dd>Logical block number within the file identified by - <var class="Fa">vp</var>.</dd> - <dt><var class="Fa">bop</var></dt> - <dd>Return storage for the buffer object associated with the file system's - underlying device.</dd> - <dt><var class="Fa">bnp</var></dt> - <dd>Return storage for the physical block number.</dd> - <dt><var class="Fa">runp</var></dt> - <dd>Return storage for the number of succeeding logical blocks that may be - efficiently read at the same time as the requested block. This will - usually be the number of logical blocks whose physical blocks are - contiguously allocated. However a file system is free to define - "efficient" as it sees fit.</dd> - <dt><var class="Fa">runb</var></dt> - <dd>Like <var class="Fa">runp</var> but for preceding rather than succeeding - blocks.</dd> -</dl> -<p class="Pp">Any of the return arguments may be <code class="Dv">NULL</code> to - indicate that the caller does not care about that information.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The vnode will be locked on entry and should remain locked on - return.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an error code is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">A <code class="Fn">bmap</code>() function first appeared in - <span class="Ux">4.2BSD</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Alan - Somers</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 19, 2019</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_BWRITE.9 4.html b/static/freebsd/man9/VOP_BWRITE.9 4.html deleted file mode 100644 index da1fb6dd..00000000 --- a/static/freebsd/man9/VOP_BWRITE.9 4.html +++ /dev/null @@ -1,57 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_BWRITE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_BWRITE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_BWRITE</code> — <span class="Nd">write - a file system buffer</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_BWRITE</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct buf - *bp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the file being written to.</dd> - <dt><var class="Fa">bp</var></dt> - <dd>The buffer to be written.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an error is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 24, 1996</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_COPY_FILE_RANGE.9 3.html b/static/freebsd/man9/VOP_COPY_FILE_RANGE.9 3.html deleted file mode 100644 index 8daf6239..00000000 --- a/static/freebsd/man9/VOP_COPY_FILE_RANGE.9 3.html +++ /dev/null @@ -1,115 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_COPY_FILE_RANGE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_COPY_FILE_RANGE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_COPY_FILE_RANGE</code> — - <span class="Nd">copy a byte range within a file or from one file to another - in a single file system or between multiple file systems</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_COPY_FILE_RANGE</code>(<var class="Fa">struct vnode - *invp</var>, <var class="Fa">off_t *inoff</var>, <var class="Fa">struct - vnode *outvp</var>, <var class="Fa">off_t *outoff</var>, - <var class="Fa">size_t *len</var>, <var class="Fa">unsigned int flags</var>, - <var class="Fa">struct ucred *incred</var>, <var class="Fa">struct ucred - *outcred</var>, <var class="Fa">struct thread *fsize_td</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This entry point copies a byte range from one regular file to - another or within one file in a single file system. - <var class="Fa">invp</var> and <var class="Fa">outvp</var> can refer to the - same file. For this case, the byte ranges defined by - <var class="Fa">*inoff</var>, <var class="Fa">*outoff and</var> - <var class="Fa">*len</var> will not overlap.</p> -<p class="Pp">The arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">invp</var></dt> - <dd>The vnode of the input file.</dd> - <dt><var class="Fa">inoff</var></dt> - <dd>A pointer to the file offset for the input file.</dd> - <dt><var class="Fa">outvp</var></dt> - <dd>The vnode of the output file.</dd> - <dt><var class="Fa">outoff</var></dt> - <dd>A pointer to the file offset for the output file.</dd> - <dt><var class="Fa">len</var></dt> - <dd>A pointer to the byte count for the copy.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>Flags, should be set to 0 for now.</dd> - <dt><var class="Fa">incred</var></dt> - <dd>The credentials used to read <var class="Fa">invp</var>.</dd> - <dt><var class="Fa">outcred</var></dt> - <dd>The credentials used to write <var class="Fa">outvp</var>.</dd> - <dt><var class="Fa">fsize_td</var></dt> - <dd>The thread pointer to be passed to vn_rlimit_fsize(). This will be - <code class="Dv">NULL</code> for a server thread without limits, such as - for the NFS server or <code class="Dv">curthread</code> otherwise.</dd> -</dl> -<p class="Pp">On entry and on return, the <var class="Fa">inoff</var> and - <var class="Fa">outoff</var> arguments point to the locations of the file - offsets. These file offsets should be updated by the number of bytes copied. - The <var class="Fa">len</var> argument points to the location that stores - the number of bytes to be copied. Upon a successful return - <var class="Fa">len</var> will be updated to the number of bytes actually - copied. Normally, this will be the number of bytes requested to be copied, - however a copy of fewer bytes than requested is permitted. This does not - necessarily indicate that the copy reached EOF on the input file. However, - if the value pointed to by the <var class="Fa">len</var> argument is zero - upon a successful return, it indicates that the offset pointed to by - <var class="Fa">inoff</var> is at or beyond EOF on the input file.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The vnode are unlocked on entry and must be unlocked on return. - The byte ranges for both <var class="Fa">invp</var> and - <var class="Fa">outvp</var> should be range locked when this call is - done.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an error code is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="EFBIG">[<a class="permalink" href="#EFBIG"><code class="Er">EFBIG</code></a>]</dt> - <dd>If the copy exceeds the process's file size limit or the maximum file size - for the file system <var class="Fa">invp</var> and - <var class="Fa">outvp</var> reside on.</dd> - <dt id="EINTR">[<a class="permalink" href="#EINTR"><code class="Er">EINTR</code></a>]</dt> - <dd>A signal interrupted the VOP call before it could be completed.</dd> - <dt id="EIO">[<a class="permalink" href="#EIO"><code class="Er">EIO</code></a>]</dt> - <dd>An I/O error occurred while reading/writing the files.</dd> - <dt id="EINTEGRITY">[<a class="permalink" href="#EINTEGRITY"><code class="Er">EINTEGRITY</code></a>]</dt> - <dd>Corrupted data was detected while reading/writing the files.</dd> - <dt id="ENOSPC">[<a class="permalink" href="#ENOSPC"><code class="Er">ENOSPC</code></a>]</dt> - <dd>The file system is full.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vn_rdwr(9)</a>, <a class="Xr">vnode(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 30, 2020</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_CREATE.9 4.html b/static/freebsd/man9/VOP_CREATE.9 4.html deleted file mode 100644 index c1f24343..00000000 --- a/static/freebsd/man9/VOP_CREATE.9 4.html +++ /dev/null @@ -1,118 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_CREATE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_CREATE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_CREATE</code>, - <code class="Nm">VOP_MKNOD</code>, <code class="Nm">VOP_MKDIR</code>, - <code class="Nm">VOP_SYMLINK</code> — <span class="Nd">create a file, - socket, fifo, device, directory or symlink</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/namei.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_CREATE</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode - **vpp</var>, <var class="Fa" style="white-space: nowrap;">struct - componentname *cnp</var>, - <var class="Fa" style="white-space: nowrap;">struct vattr *vap</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_MKNOD</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode - **vpp</var>, <var class="Fa" style="white-space: nowrap;">struct - componentname *cnp</var>, - <var class="Fa" style="white-space: nowrap;">struct vattr *vap</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_MKDIR</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode - **vpp</var>, <var class="Fa" style="white-space: nowrap;">struct - componentname *cnp</var>, - <var class="Fa" style="white-space: nowrap;">struct vattr *vap</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_SYMLINK</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode - **vpp</var>, <var class="Fa" style="white-space: nowrap;">struct - componentname *cnp</var>, - <var class="Fa" style="white-space: nowrap;">struct vattr *vap</var>, - <var class="Fa" style="white-space: nowrap;">const char *target</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These entry points create a new file, socket, fifo, device, - directory or symlink in a given directory.</p> -<p class="Pp">The arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">dvp</var></dt> - <dd>The locked vnode of the directory.</dd> - <dt><var class="Fa">vpp</var></dt> - <dd>The address of a variable where the resulting locked vnode should be - stored.</dd> - <dt><var class="Fa">cnp</var></dt> - <dd>The pathname component created.</dd> - <dt><var class="Fa">vap</var></dt> - <dd>The attributes that the new object should be created with.</dd> - <dt><var class="Fa">target</var></dt> - <dd>The pathname of the target of the symlink.</dd> -</dl> -<p class="Pp">These entry points are called after - <a class="Xr">VOP_LOOKUP(9)</a> when an object is being created.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The directory, <var class="Fa">dvp</var> will be locked on entry - and must remain locked on return. If the call is successful, the new object - will be returned locked.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If successful, the vnode for the new object is placed in - <var class="Fa">*vpp</var> and zero is returned. Otherwise, an appropriate - error is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="ENOSPC">[<a class="permalink" href="#ENOSPC"><code class="Er">ENOSPC</code></a>]</dt> - <dd>The file system is full.</dd> - <dt id="EDQUOT">[<a class="permalink" href="#EDQUOT"><code class="Er">EDQUOT</code></a>]</dt> - <dd>The user's file system space or inode quota would be exceeded.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a>, <a class="Xr">VOP_LOOKUP(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The function <code class="Nm">VOP_CREATE</code> appeared in - <span class="Ux">4.3BSD</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 2, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_DEALLOCATE.9 4.html b/static/freebsd/man9/VOP_DEALLOCATE.9 4.html deleted file mode 100644 index e4a4b73a..00000000 --- a/static/freebsd/man9/VOP_DEALLOCATE.9 4.html +++ /dev/null @@ -1,99 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_DEALLOCATE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_DEALLOCATE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_DEALLOCATE</code> — - <span class="Nd">zero and/or deallocate storage from a file</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_DEALLOCATE</code>(<var class="Fa">struct vnode *vp</var>, - <var class="Fa">off_t *offset</var>, <var class="Fa">off_t *len</var>, - <var class="Fa">int flags</var>, <var class="Fa">int ioflag</var>, - <var class="Fa">struct ucred *cred</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This VOP call zeroes/deallocates storage for an offset range in a - file. It is used to implement the <a class="Xr">fspacectl(2)</a> system - call.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the file.</dd> - <dt><var class="Fa">offset</var></dt> - <dd>The start of the range to deallocate storage in the file.</dd> - <dt><var class="Fa">len</var></dt> - <dd>The length of the range to deallocate storage in the file.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>The flags of this call. This should be set to 0 for now.</dd> - <dt><var class="Fa">ioflag</var></dt> - <dd>Directives and hints to be given to the file system.</dd> - <dt><var class="Fa">cred</var></dt> - <dd>The credentials of the caller.</dd> -</dl> -<p class="Pp"><var class="Fa">*offset</var> and <var class="Fa">*len</var> are - updated to reflect the portion of the range that still needs to be - zeroed/deallocated on return. Partial result is considered a successful - operation. For a non-partial successful completion, - <var class="Fa">*len</var> is updated to be the value 0, and - <var class="Fa">*offset</var> is incremented by the number of bytes zeroed - before the end-of-file.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The vnode should be locked on entry and will still be locked on - exit.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned if the call is successful, otherwise an - appropriate error code is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt> - <dd>Invalid <var class="Fa">offset</var>, <var class="Fa">len</var> or - <var class="Fa">flags</var> parameters are passed into this VOP call.</dd> - <dt id="ENODEV">[<a class="permalink" href="#ENODEV"><code class="Er">ENODEV</code></a>]</dt> - <dd>The vnode type is not supported by this VOP call.</dd> - <dt id="ENOSPC">[<a class="permalink" href="#ENOSPC"><code class="Er">ENOSPC</code></a>]</dt> - <dd>The file system is full.</dd> - <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt> - <dd>An append-only flag is set on the file, but the caller is attempting to - zero before the current end of file.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp"><code class="Nm">VOP_DEALLOCATE</code> and this manual page was - written by <span class="An">Ka Ho Ng</span> - <<a class="Mt" href="mailto:khng@FreeBSD.org">khng@FreeBSD.org</a>> - under sponsorship from the FreeBSD Foundation.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 25, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_FSYNC.9 4.html b/static/freebsd/man9/VOP_FSYNC.9 4.html deleted file mode 100644 index ae6e846b..00000000 --- a/static/freebsd/man9/VOP_FSYNC.9 4.html +++ /dev/null @@ -1,105 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_FSYNC(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_FSYNC(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_FDATASYNC</code>, - <code class="Nm">VOP_FSYNC</code> — <span class="Nd">flush file - system buffers for a file</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_FDATASYNC</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct thread - *td</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_FSYNC</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int - waitfor</var>, <var class="Fa" style="white-space: nowrap;">struct thread - *td</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><a class="permalink" href="#VOP_FSYNC"><code class="Fn" id="VOP_FSYNC">VOP_FSYNC</code></a>() - ensures that a file can be recovered to its current state following a crash. - That typically requires flushing the file's dirty buffers, its inode, and - possibly other filesystem metadata to persistent media. - <code class="Fn">VOP_FSYNC</code>() is used to implement the - <a class="Xr">sync(2)</a> and <a class="Xr">fsync(2)</a> system calls.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the file.</dd> - <dt><var class="Fa">waitfor</var></dt> - <dd>Whether the function should wait for I/O to complete. Possible values are: - <dl class="Bl-tag"> - <dt id="MNT_WAIT"><a class="permalink" href="#MNT_WAIT"><code class="Dv">MNT_WAIT</code></a></dt> - <dd>Synchronously wait for I/O to complete.</dd> - <dt id="MNT_NOWAIT"><a class="permalink" href="#MNT_NOWAIT"><code class="Dv">MNT_NOWAIT</code></a></dt> - <dd>Start all I/O, but do not wait for it.</dd> - <dt id="MNT_LAZY"><a class="permalink" href="#MNT_LAZY"><code class="Dv">MNT_LAZY</code></a></dt> - <dd>Push data not written by file system syncer.</dd> - </dl> - </dd> - <dt><var class="Fa">td</var></dt> - <dd>The calling thread.</dd> -</dl> -<p class="Pp" id="VOP_FDATASYNC"><a class="permalink" href="#VOP_FDATASYNC"><code class="Fn">VOP_FDATASYNC</code></a>() - is similar, but it does not require that all of the file's metadata be - flushed. It only requires that the file's data be recoverable after a crash. - That implies that the data itself must be flushed to disk, as well as some - metadata such as the file's size but not necessarily its attributes. - <code class="Fn">VOP_FDATASYNC</code>() should always wait for I/O to - complete, as if called with <code class="Dv">MNT_WAIT</code>. - <code class="Fn">VOP_FDATASYNC</code>() is used to implement - <a class="Xr">fdatasync(2)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The vnode should be exclusively locked on entry, and stays locked - on return.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned if the call is successful, otherwise an - appropriate error code is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="ENOSPC">[<a class="permalink" href="#ENOSPC"><code class="Er">ENOSPC</code></a>]</dt> - <dd>The file system is full.</dd> - <dt id="EDQUOT">[<a class="permalink" href="#EDQUOT"><code class="Er">EDQUOT</code></a>]</dt> - <dd>Quota exceeded.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 22, 2019</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_GETACL.9 4.html b/static/freebsd/man9/VOP_GETACL.9 4.html deleted file mode 100644 index 0174986a..00000000 --- a/static/freebsd/man9/VOP_GETACL.9 4.html +++ /dev/null @@ -1,100 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_GETACL(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_GETACL(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_GETACL</code> — - <span class="Nd">retrieve access control list for a vnode</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/acl.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_GETACL</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">acl_type_t - type</var>, <var class="Fa" style="white-space: nowrap;">struct acl - *aclp</var>, <var class="Fa" style="white-space: nowrap;">struct ucred - *cred</var>, <var class="Fa" style="white-space: nowrap;">struct thread - *td</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This vnode call may be used to retrieve the access control list - (ACL) from a file or directory.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the file or directory.</dd> - <dt><var class="Fa">type</var></dt> - <dd>The type of ACL to retrieve.</dd> - <dt><var class="Fa">aclp</var></dt> - <dd>A pointer to an ACL structure to receive the ACL data.</dd> - <dt><var class="Fa">cred</var></dt> - <dd>The user credentials to use in authorizing the request.</dd> - <dt><var class="Fa">td</var></dt> - <dd>The thread requesting the ACL.</dd> -</dl> -<p class="Pp">The <var class="Fa">cred</var> pointer may be - <code class="Dv">NULL</code> to indicate that access control checks are not - to be performed, if possible. This cred setting might be used to allow the - kernel to authorize ACL retrieval that the active process might not be - permitted to do.</p> -<p class="Pp">The vnode ACL interface defines the syntax, and not semantics, of - file and directory ACL interfaces. More information about ACL management in - kernel may be found in <a class="Xr">acl(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The vnode will be locked on entry and should remain locked on - return.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If the <var class="Fa">aclp</var> pointer will point to a valid - ACL, then zero is returned. Otherwise, an appropriate error code is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt> - <dd>The ACL type passed is invalid for this vnode.</dd> - <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt> - <dd>The caller does not have the appropriate privilege.</dd> - <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt> - <dd>Sufficient memory is not available to fulfill the request.</dd> - <dt id="EOPNOTSUPP">[<a class="permalink" href="#EOPNOTSUPP"><code class="Er">EOPNOTSUPP</code></a>]</dt> - <dd>The file system does not support - <code class="Fn">VOP_GETACL</code>().</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">acl(9)</a>, <a class="Xr">vnode(9)</a>, - <a class="Xr">VOP_ACLCHECK(9)</a>, <a class="Xr">VOP_SETACL(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Robert - Watson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 23, 1999</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_GETEXTATTR.9 4.html b/static/freebsd/man9/VOP_GETEXTATTR.9 4.html deleted file mode 100644 index 0598c752..00000000 --- a/static/freebsd/man9/VOP_GETEXTATTR.9 4.html +++ /dev/null @@ -1,119 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_GETEXTATTR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_GETEXTATTR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_GETEXTATTR</code> — - <span class="Nd">retrieve named extended attribute from a vnode</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/extattr.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_GETEXTATTR</code>(<var class="Fa">struct vnode *vp</var>, - <var class="Fa">int attrnamespace</var>, <var class="Fa">const char - *name</var>, <var class="Fa">struct uio *uio</var>, <var class="Fa">size_t - *size</var>, <var class="Fa">struct ucred *cred</var>, - <var class="Fa">struct thread *td</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This vnode call may be used to retrieve a specific named extended - attribute from a file or directory.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the file or directory.</dd> - <dt><var class="Fa">attrnamespace</var></dt> - <dd>Integer constant indicating which extended attribute namespace the - attribute name is present in.</dd> - <dt><var class="Fa">name</var></dt> - <dd>Pointer to a null-terminated character string containing the attribute - name.</dd> - <dt><var class="Fa">uio</var></dt> - <dd>The location of the data to be read.</dd> - <dt><var class="Fa">size</var></dt> - <dd>If not <code class="Dv">NULL</code>, on return it will contain the number - of bytes required to read all of the attribute data. In most cases - <var class="Fa">uio</var> will be <code class="Dv">NULL</code> when - <var class="Fa">size</var> is not, and vice versa.</dd> - <dt><var class="Fa">cred</var></dt> - <dd>The user credentials to use in authorizing the request.</dd> - <dt><var class="Fa">td</var></dt> - <dd>The thread requesting the extended attribute.</dd> -</dl> -<p class="Pp">The <var class="Fa">cred</var> pointer may be - <code class="Dv">NULL</code> to indicate that access control checks are not - to be performed, if possible. This <var class="Fa">cred</var> setting might - be used to allow the kernel to authorize extended attribute retrieval that - the active process might not be permitted to do.</p> -<p class="Pp">Extended attribute semantics may vary by file system implementing - the call. More information on extended attributes may be found in - <a class="Xr">extattr(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The vnode will be locked on entry and should remain locked on - return.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">On success, zero will be returned, and the uio structure will be - updated to reflect data read. Otherwise, an appropriate error code is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="ENOATTR">[<a class="permalink" href="#ENOATTR"><code class="Er">ENOATTR</code></a>]</dt> - <dd>The requested attribute was not defined for this vnode.</dd> - <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt> - <dd>The caller does not have the appropriate privilege.</dd> - <dt id="ENXIO">[<a class="permalink" href="#ENXIO"><code class="Er">ENXIO</code></a>]</dt> - <dd>The request was not valid in this file system for the specified vnode and - attribute name.</dd> - <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt> - <dd>Sufficient memory is not available to fulfill the request.</dd> - <dt id="EFAULT">[<a class="permalink" href="#EFAULT"><code class="Er">EFAULT</code></a>]</dt> - <dd>The uio structure refers to an invalid userspace address.</dd> - <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt> - <dd>The <var class="Fa">name</var>, <var class="Fa">namespace</var>, or - <var class="Fa">uio</var> argument is invalid.</dd> - <dt id="EOPNOTSUPP">[<a class="permalink" href="#EOPNOTSUPP"><code class="Er">EOPNOTSUPP</code></a>]</dt> - <dd>The file system does not support - <code class="Fn">VOP_GETEXTATTR</code>().</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">extattr(9)</a>, <a class="Xr">vnode(9)</a>, - <a class="Xr">VOP_LISTEXTATTR(9)</a>, - <a class="Xr">VOP_SETEXTATTR(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">By passing in the empty string as the attribute name, some file - systems will return a list of defined names on the target vnode for the - requested namespace. This is a bad API, and will be replaced by an explicit - VOP.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 23, 1999</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_GETPAGES.9 3.html b/static/freebsd/man9/VOP_GETPAGES.9 3.html deleted file mode 100644 index 80204db4..00000000 --- a/static/freebsd/man9/VOP_GETPAGES.9 3.html +++ /dev/null @@ -1,160 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_GETPAGES(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_GETPAGES(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_GETPAGES</code>, - <code class="Nm">VOP_PUTPAGES</code> — <span class="Nd">read or write - VM pages from a file</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_GETPAGES</code>(<var class="Fa">struct vnode *vp</var>, - <var class="Fa">vm_page_t *ma</var>, <var class="Fa">int count</var>, - <var class="Fa">int *rbehind</var>, <var class="Fa">int *rahead</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_PUTPAGES</code>(<var class="Fa">struct vnode *vp</var>, - <var class="Fa">vm_page_t *ma</var>, <var class="Fa">int bytecount</var>, - <var class="Fa">int flags</var>, <var class="Fa">int *rtvals</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#VOP_GETPAGES"><code class="Fn" id="VOP_GETPAGES">VOP_GETPAGES</code></a>() - method is called to read in pages of virtual memory which are backed by - ordinary files. If other adjacent pages are backed by adjacent regions of - the same file, <code class="Fn">VOP_GETPAGES</code>() is requested to read - those pages as well, although it is not required to do so. The - <code class="Fn">VOP_PUTPAGES</code>() method does the converse; that is to - say, it writes out adjacent dirty pages of virtual memory.</p> -<p class="Pp">On entry, the vnode lock is held but neither the page queue nor VM - object locks are held. Both methods return in the same state on both success - and error returns.</p> -<p class="Pp">The arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The file to access.</dd> - <dt><var class="Fa">ma</var></dt> - <dd>Pointer to the first element of an array of pages representing a - contiguous region of the file to be read or written.</dd> - <dt><var class="Fa">count</var></dt> - <dd>The length of the <var class="Fa">ma</var> array.</dd> - <dt><var class="Fa">bytecount</var></dt> - <dd>The number of bytes that should be written from the pages of the - array.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>A bitfield of flags affecting the function operation. If - <code class="Dv">VM_PAGER_PUT_SYNC</code> is set, the write should be - synchronous; control must not be returned to the caller until after the - write is finished. If <code class="Dv">VM_PAGER_PUT_INVAL</code> is set, - the pages are to be invalidated after being written. If - <code class="Dv">VM_PAGER_PUT_NOREUSE</code> is set, the I/O performed - should set the IO_NOREUSE flag, to indicate to the filesystem that pages - should be marked for fast reuse if needed. This could occur via a call to - <a class="Xr">vm_page_deactivate_noreuse(9)</a>, which puts such pages - onto the head of the inactive queue. If - <code class="Dv">VM_PAGER_CLUSTER_OK</code> is set, writes may be delayed, - so that related writes can be coalesced for efficiency, e.g., using the - clustering mechanism of the buffer cache.</dd> - <dt id="VOP_PUTPAGES"><var class="Fa">rtvals</var></dt> - <dd>An array of VM system result codes indicating the status of each page - written by - <a class="permalink" href="#VOP_PUTPAGES"><code class="Fn">VOP_PUTPAGES</code></a>().</dd> - <dt><var class="Fa">rbehind</var></dt> - <dd>Optional pointer to integer specifying number of pages to be read behind, - if possible. If the filesystem supports that feature, number of actually - read pages is reported back, otherwise zero is returned.</dd> - <dt><var class="Fa">rahead</var></dt> - <dd>Optional pointer to integer specifying number of pages to be read ahead, - if possible. If the filesystem supports that feature, number of actually - read pages is reported back, otherwise zero is returned.</dd> -</dl> -<p class="Pp" id="VOP_PUTPAGES~2">The status of the - <a class="permalink" href="#VOP_PUTPAGES~2"><code class="Fn">VOP_PUTPAGES</code></a>() - method is returned on a page-by-page basis in the array - <var class="Fa">rtvals[]</var>. The possible status values are as - follows:</p> -<dl class="Bl-tag"> - <dt id="VM_PAGER_OK"><a class="permalink" href="#VM_PAGER_OK"><code class="Dv">VM_PAGER_OK</code></a></dt> - <dd>The page was successfully written. The implementation must call - <a class="Xr">vm_page_undirty(9)</a> to mark the page as clean.</dd> - <dt id="VM_PAGER_PEND"><a class="permalink" href="#VM_PAGER_PEND"><code class="Dv">VM_PAGER_PEND</code></a></dt> - <dd>The page was scheduled to be written asynchronously. When the write - completes, the completion callback should call - <a class="Xr">vm_object_pip_wakeup(9)</a> and - <a class="Xr">vm_page_sunbusy(9)</a> to clear the busy flag and awaken any - other threads waiting for this page, in addition to calling - <a class="Xr">vm_page_undirty(9)</a>.</dd> - <dt id="VM_PAGER_BAD"><a class="permalink" href="#VM_PAGER_BAD"><code class="Dv">VM_PAGER_BAD</code></a></dt> - <dd>The page was entirely beyond the end of the backing file. This condition - should not be possible if the vnode's file system is correctly - implemented.</dd> - <dt id="VM_PAGER_ERROR"><a class="permalink" href="#VM_PAGER_ERROR"><code class="Dv">VM_PAGER_ERROR</code></a></dt> - <dd>The page could not be written because of an error on the underlying - storage medium or protocol.</dd> - <dt id="VM_PAGER_FAIL"><a class="permalink" href="#VM_PAGER_FAIL"><code class="Dv">VM_PAGER_FAIL</code></a></dt> - <dd>Treated identically to <code class="Dv">VM_PAGER_ERROR</code>.</dd> - <dt id="VM_PAGER_AGAIN"><a class="permalink" href="#VM_PAGER_AGAIN"><code class="Dv">VM_PAGER_AGAIN</code></a></dt> - <dd>The page was not handled by this request.</dd> -</dl> -<p class="Pp" id="VOP_GETPAGES~2">The - <a class="permalink" href="#VOP_GETPAGES~2"><code class="Fn">VOP_GETPAGES</code></a>() - method must populate and validate all requested pages in order to return - success. It is expected to release any pages in <var class="Fa">ma</var> - that it does not successfully handle, by calling - <a class="Xr">vm_page_free(9)</a>. When it succeeds, - <code class="Fn">VOP_GETPAGES</code>() must set the valid bits - appropriately. Upon entry to <code class="Fn">VOP_GETPAGES</code>(), all - pages in <var class="Fa">ma</var> are busied exclusively. Upon successful - return, the pages must all be busied exclusively as well, but pages may be - unbusied during processing. The filesystem is responsible for activating - paged-out pages, but this does not necessarily need to be done within - <code class="Fn">VOP_GETPAGES</code>() depending on the architecture of the - particular filesystem.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If it successfully reads all pages in <var class="Fa">ma</var>, - <code class="Fn">VOP_GETPAGES</code>() returns - <code class="Dv">VM_PAGER_OK</code>; otherwise, it returns - <code class="Dv">VM_PAGER_ERROR</code>. By convention, the return value of - <code class="Fn">VOP_PUTPAGES</code>() is - <var class="Fa">rtvals[0]</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vm_object_pip_wakeup(9)</a>, - <a class="Xr">vm_page_free(9)</a>, <a class="Xr">vm_page_sunbusy(9)</a>, - <a class="Xr">vm_page_undirty(9)</a>, <a class="Xr">vm_page_xunbusy(9)</a>, - <a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span> and then substantially rewritten by - <br/> - <span class="An">Garrett Wollman</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 29, 2019</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_INACTIVE.9 4.html b/static/freebsd/man9/VOP_INACTIVE.9 4.html deleted file mode 100644 index 033ea412..00000000 --- a/static/freebsd/man9/VOP_INACTIVE.9 4.html +++ /dev/null @@ -1,74 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_INACTIVE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_INACTIVE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_INACTIVE</code>, - <code class="Nm">VOP_RECLAIM</code> — <span class="Nd">reclaim file - system resources for a vnode</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_INACTIVE</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct thread - *td</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_RECLAIM</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct thread - *td</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode being reclaimed.</dd> -</dl> -<p class="Pp" id="VOP_INACTIVE"><a class="permalink" href="#VOP_INACTIVE"><code class="Fn">VOP_INACTIVE</code></a>() - is usually called when the kernel is no longer using the vnode. However, - there is no guarantee that it will be called at all, for example if the last - reference was dropped while the vnode lock could not be upgraded to - exclusive without sleeping. This may be because the reference count reaches - zero or it may be that the file system is being forcibly unmounted while - there are open files. It can be used to reclaim space on the last close of - an ‘open but deleted’ file.</p> -<p class="Pp" id="VOP_RECLAIM"><a class="permalink" href="#VOP_RECLAIM"><code class="Fn">VOP_RECLAIM</code></a>() - is called when a vnode is being reused for a different file system. Any file - system specific resources associated with the vnode should be freed.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">For both <code class="Fn">VOP_INACTIVE</code>() and - <code class="Fn">VOP_RECLAIM</code>(), the <var class="Fa">vp</var> will be - exclusively locked on entry, and must be left exclusively locked on - return.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 15, 2019</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_INOTIFY.9 4.html b/static/freebsd/man9/VOP_INOTIFY.9 4.html deleted file mode 100644 index a7923e74..00000000 --- a/static/freebsd/man9/VOP_INOTIFY.9 4.html +++ /dev/null @@ -1,78 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_INOTIFY(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_INOTIFY(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_INOTIFY</code> — - <span class="Nd">vnode inotify interface</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_INOTIFY</code>(<var class="Fa">struct</var>, - <var class="Fa">vnode</var>, <var class="Fa">*vp</var>, - <var class="Fa">struct</var>, <var class="Fa">vnode</var>, - <var class="Fa">*dvp</var>, <var class="Fa">struct</var>, - <var class="Fa">componentname</var>, <var class="Fa">*cnp</var>, - <var class="Fa">int</var>, <var class="Fa">event</var>, - <var class="Fa">uint32_t</var>, <var class="Fa">cookie</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_INOTIFY_ADD_WATCH</code>(<var class="Fa">struct</var>, - <var class="Fa">vnode</var>, <var class="Fa">*vp</var>, - <var class="Fa">struct</var>, <var class="Fa">inotify_softc</var>, - <var class="Fa">*sc</var>, <var class="Fa">uint32_t</var>, - <var class="Fa">mask</var>, <var class="Fa">uint32_t</var>, - <var class="Fa">*wdp</var>, <var class="Fa">struct</var>, - <var class="Fa">thread</var>, <var class="Fa">*td</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#VOP_INOTIFY"><code class="Fn" id="VOP_INOTIFY">VOP_INOTIFY</code></a>() - operation notifies the <a class="Xr">inotify(2)</a> subsystem of a file - system event on a vnode. The <var class="Fa">dvp</var> and - <var class="Fa">cnp</var> arguments are optional and are only used to obtain - a file name for the event. If they are omitted, the inotify subsystem will - use the file name cache to find a name for the vnode, but this is more - expensive.</p> -<p class="Pp" id="VOP_INOTIFY_ADD_WATCH">The - <a class="permalink" href="#VOP_INOTIFY_ADD_WATCH"><code class="Fn">VOP_INOTIFY_ADD_WATCH</code></a>() - operation is for internal use by the inotify subsystem to add a watch to a - vnode.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The <code class="Fn">VOP_INOTIFY</code>() operation does not - assume any particular vnode lock state. The - <code class="Fn">VOP_INOTIFY_ADD_WATCH</code>() operation should be called - with the vnode locked.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an error code is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">inotify(2)</a>, <a class="Xr">vnode(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 27, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_IOCTL.9 4.html b/static/freebsd/man9/VOP_IOCTL.9 4.html deleted file mode 100644 index 9af742c8..00000000 --- a/static/freebsd/man9/VOP_IOCTL.9 4.html +++ /dev/null @@ -1,77 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_IOCTL(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_IOCTL(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_IOCTL</code> — <span class="Nd">device - specific control</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_IOCTL</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">u_long - command</var>, <var class="Fa" style="white-space: nowrap;">caddr_t - data</var>, <var class="Fa" style="white-space: nowrap;">int fflag</var>, - <var class="Fa" style="white-space: nowrap;">struct ucred *cred</var>, - <var class="Fa" style="white-space: nowrap;">struct thread *td</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Manipulate a file in device dependent ways.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the file (normally representing a device).</dd> - <dt><var class="Fa">command</var></dt> - <dd>The device specific operation to perform.</dd> - <dt><var class="Fa">data</var></dt> - <dd>Extra data for the specified operation.</dd> - <dt><var class="Fa">fflag</var></dt> - <dd>Some flags ???</dd> - <dt><var class="Fa">cred</var></dt> - <dd>The caller's credentials.</dd> - <dt><var class="Fa">td</var></dt> - <dd>The calling thread.</dd> -</dl> -<p class="Pp">Most file systems do not implement this entry point.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The file should not be locked on entry.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If successful, zero is returned, otherwise an appropriate error - code.</p> -<p class="Pp">If the ioctl is not recognized or not handled, - <code class="Er">ENOTTY</code> should be returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 24, 1996</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_LINK.9 4.html b/static/freebsd/man9/VOP_LINK.9 4.html deleted file mode 100644 index ed5ee46b..00000000 --- a/static/freebsd/man9/VOP_LINK.9 4.html +++ /dev/null @@ -1,83 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_LINK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_LINK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_LINK</code> — <span class="Nd">create - a new name for a file</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_LINK</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode - *vp</var>, <var class="Fa" style="white-space: nowrap;">struct componentname - *cnp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This links a new name in the specified directory to an existing - file.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">dvp</var></dt> - <dd>The vnode of the directory.</dd> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the file to be linked.</dd> - <dt><var class="Fa">cnp</var></dt> - <dd>Pathname information about the file.</dd> -</dl> -<p class="Pp">The pathname info should <i class="Em">not</i> be released on exit - because it is done by the caller. The directory and file vnodes should - <i class="Em">not</i> be released on exit.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp"><a class="permalink" href="#VOP_LINK"><code class="Fn" id="VOP_LINK">VOP_LINK</code></a>() - expects the directory and file vnodes to be locked on entry and will leave - the vnodes locked on return.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned if the file was linked successfully, otherwise an - error is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="EMLINK">[<a class="permalink" href="#EMLINK"><code class="Er">EMLINK</code></a>]</dt> - <dd>The file has too many links.</dd> - <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt> - <dd>The file is immutable.</dd> - <dt id="EXDEV">[<a class="permalink" href="#EXDEV"><code class="Er">EXDEV</code></a>]</dt> - <dd>A hard link is not possible between different file systems.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vn_lock(9)</a>, <a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was originally written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 24, 1996</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_LISTEXTATTR.9 4.html b/static/freebsd/man9/VOP_LISTEXTATTR.9 4.html deleted file mode 100644 index 9f6bf786..00000000 --- a/static/freebsd/man9/VOP_LISTEXTATTR.9 4.html +++ /dev/null @@ -1,111 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_LISTEXTATTR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_LISTEXTATTR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_LISTEXTATTR</code> — - <span class="Nd">retrieve a list of named extended attributes from a - vnode</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/extattr.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_LISTEXTATTR</code>(<var class="Fa">struct vnode - *vp</var>, <var class="Fa">int attrnamespace</var>, <var class="Fa">struct - uio *uio</var>, <var class="Fa">size_t *size</var>, <var class="Fa">struct - ucred *cred</var>, <var class="Fa">struct thread *td</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This vnode call may be used to retrieve a list of named extended - attributes from a specified namespace on a file or directory.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the file or directory.</dd> - <dt><var class="Fa">attrnamespace</var></dt> - <dd>Integer constant indicating which extended attribute namespace the - attribute name is present in.</dd> - <dt><var class="Fa">uio</var></dt> - <dd>The location of the data to be read. The resulting data will be a list of - attribute names. Each list entry consists of a single byte containing the - length of the attribute name, followed by the attribute name. The - attribute name is not terminated by ASCII - <code class="Dv">NUL</code>.</dd> - <dt><var class="Fa">size</var></dt> - <dd>If not <code class="Dv">NULL</code>, on return it will contain the number - of bytes required to read the list. In most cases - <var class="Fa">uio</var> will be <code class="Dv">NULL</code> when - <var class="Fa">size</var> is not, and vice versa.</dd> - <dt><var class="Fa">cred</var></dt> - <dd>The user credentials to use in authorizing the request.</dd> - <dt><var class="Fa">td</var></dt> - <dd>The thread requesting the extended attribute.</dd> -</dl> -<p class="Pp">The <var class="Fa">cred</var> pointer may be - <code class="Dv">NULL</code> to indicate that access control checks are not - to be performed, if possible. This <var class="Fa">cred</var> setting might - be used to allow the kernel to authorize extended attribute retrieval that - the active process might not be permitted to do.</p> -<p class="Pp">Extended attribute semantics may vary by file system implementing - the call. More information on extended attributes may be found in - <a class="Xr">extattr(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The vnode will be locked on entry and should remain locked on - return.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">On success, zero will be returned, and the - <var class="Fa">uio</var> structure will be updated to reflect the list - read. Otherwise, an appropriate error code is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt> - <dd>The caller does not have the appropriate privilege.</dd> - <dt id="ENXIO">[<a class="permalink" href="#ENXIO"><code class="Er">ENXIO</code></a>]</dt> - <dd>The request was not valid in this file system for the specified vnode and - attribute name.</dd> - <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt> - <dd>Sufficient memory is not available to fulfill the request.</dd> - <dt id="EFAULT">[<a class="permalink" href="#EFAULT"><code class="Er">EFAULT</code></a>]</dt> - <dd>The <var class="Fa">uio</var> structure refers to an invalid userspace - address.</dd> - <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt> - <dd>The <var class="Fa">namespace</var> or <var class="Fa">uio</var> argument - is invalid.</dd> - <dt id="EOPNOTSUPP">[<a class="permalink" href="#EOPNOTSUPP"><code class="Er">EOPNOTSUPP</code></a>]</dt> - <dd>The file system does not support - <code class="Fn">VOP_LISTEXTATTR</code>().</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">extattr(9)</a>, <a class="Xr">vnode(9)</a>, - <a class="Xr">VOP_GETEXTATTR(9)</a>, <a class="Xr">VOP_SETEXTATTR(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 19, 2005</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_LOCK.9 4.html b/static/freebsd/man9/VOP_LOCK.9 4.html deleted file mode 100644 index 1045d3fb..00000000 --- a/static/freebsd/man9/VOP_LOCK.9 4.html +++ /dev/null @@ -1,128 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_LOCK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_LOCK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_LOCK</code>, - <code class="Nm">VOP_UNLOCK</code>, <code class="Nm">VOP_ISLOCKED</code>, - <code class="Nm">vn_lock</code> — <span class="Nd">serialize access - to a vnode</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/lock.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_LOCK</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_UNLOCK</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_ISLOCKED</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vn_lock</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These calls are used to serialize access to the file system, such - as to prevent two writes to the same file from happening at the same - time.</p> -<p class="Pp">The arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode being locked or unlocked.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>One of the lock request types: - <p class="Pp"></p> - <div class="Bd-indent"> - <dl class="Bl-tag Bl-compact"> - <dt id="LK_SHARED"><a class="permalink" href="#LK_SHARED"><code class="Dv">LK_SHARED</code></a></dt> - <dd>Shared lock.</dd> - <dt id="LK_EXCLUSIVE"><a class="permalink" href="#LK_EXCLUSIVE"><code class="Dv">LK_EXCLUSIVE</code></a></dt> - <dd>Exclusive lock.</dd> - <dt id="LK_UPGRADE"><a class="permalink" href="#LK_UPGRADE"><code class="Dv">LK_UPGRADE</code></a></dt> - <dd>Shared-to-exclusive upgrade.</dd> - <dt id="LK_DOWNGRADE"><a class="permalink" href="#LK_DOWNGRADE"><code class="Dv">LK_DOWNGRADE</code></a></dt> - <dd>Exclusive-to-shared downgrade.</dd> - <dt id="LK_RELEASE"><a class="permalink" href="#LK_RELEASE"><code class="Dv">LK_RELEASE</code></a></dt> - <dd>Release any type of lock.</dd> - <dt id="LK_DRAIN"><a class="permalink" href="#LK_DRAIN"><code class="Dv">LK_DRAIN</code></a></dt> - <dd>Wait for all lock activity to end.</dd> - </dl> - </div> - <p class="Pp">The lock type may be <i class="Em">or</i>'ed with these lock - flags:</p> - <p class="Pp"></p> - <div class="Bd-indent"> - <dl class="Bl-tag Bl-compact"> - <dt id="LK_NOWAIT"><a class="permalink" href="#LK_NOWAIT"><code class="Dv">LK_NOWAIT</code></a></dt> - <dd>Do not sleep to wait for lock.</dd> - <dt id="LK_SLEEPFAIL"><a class="permalink" href="#LK_SLEEPFAIL"><code class="Dv">LK_SLEEPFAIL</code></a></dt> - <dd>Sleep, then return failure.</dd> - <dt id="LK_CANRECURSE"><a class="permalink" href="#LK_CANRECURSE"><code class="Dv">LK_CANRECURSE</code></a></dt> - <dd>Allow recursive exclusive lock.</dd> - <dt id="LK_NOWITNESS"><a class="permalink" href="#LK_NOWITNESS"><code class="Dv">LK_NOWITNESS</code></a></dt> - <dd>Instruct <a class="Xr">witness(4)</a> to ignore this instance.</dd> - </dl> - </div> - <p class="Pp">The lock type may be <i class="Em">or</i>'ed with these - control flags:</p> - <p class="Pp"></p> - <div class="Bd-indent"> - <dl class="Bl-tag Bl-compact"> - <dt id="LK_INTERLOCK"><a class="permalink" href="#LK_INTERLOCK"><code class="Dv">LK_INTERLOCK</code></a></dt> - <dd>Specify when the caller already has a simple lock - (<a class="permalink" href="#VOP_LOCK"><code class="Fn" id="VOP_LOCK">VOP_LOCK</code></a>() - will unlock the simple lock after getting the lock).</dd> - <dt id="LK_RETRY"><a class="permalink" href="#LK_RETRY"><code class="Dv">LK_RETRY</code></a></dt> - <dd>Retry until locked.</dd> - </dl> - </div> - <p class="Pp" id="vn_lock">Kernel code should use - <a class="permalink" href="#vn_lock"><code class="Fn">vn_lock</code></a>() - to lock a vnode rather than calling <code class="Fn">VOP_LOCK</code>() - directly. <code class="Fn">vn_lock</code>() also does not want a thread - specified as argument but it assumes curthread to be used.</p> - </dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an error is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 23, 2022</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_LOOKUP.9 4.html b/static/freebsd/man9/VOP_LOOKUP.9 4.html deleted file mode 100644 index 2bc6165b..00000000 --- a/static/freebsd/man9/VOP_LOOKUP.9 4.html +++ /dev/null @@ -1,148 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_LOOKUP(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_LOOKUP(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_LOOKUP</code> — - <span class="Nd">lookup a component of a pathname</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/namei.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_LOOKUP</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode - **vpp</var>, <var class="Fa" style="white-space: nowrap;">struct - componentname *cnp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This entry point looks up a single pathname component in a given - directory.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">dvp</var></dt> - <dd>The locked vnode of the directory to search.</dd> - <dt><var class="Fa">vpp</var></dt> - <dd>The address of a variable where the resulting locked vnode should be - stored.</dd> - <dt><var class="Fa">cnp</var></dt> - <dd>The pathname component to be searched for. It is a pointer to a - componentname structure defined as follows: - <div class="Bd Pp Li"> - <pre>struct componentname { - /* - * Arguments to lookup. - */ - u_long cn_nameiop; /* namei operation */ - u_long cn_flags; /* flags to namei */ - struct thread *cn_thread; /* thread requesting lookup */ - struct ucred *cn_cred; /* credentials */ - int cn_lkflags; /* Lock flags LK_EXCLUSIVE or LK_SHARED */ - /* - * Shared between lookup and commit routines. - */ - char *cn_pnbuf; /* pathname buffer */ - char *cn_nameptr; /* pointer to looked up name */ - long cn_namelen; /* length of looked up component */ -};</pre> - </div> - </dd> -</dl> -<p class="Pp">Convert a component of a pathname into a pointer to a locked - vnode. This is a very central and rather complicated routine. If the file - system is not maintained in a strict tree hierarchy, this can result in a - deadlock situation.</p> -<p class="Pp">The <var class="Fa">cnp->cn_nameiop</var> argument is - <code class="Dv">LOOKUP</code>, <code class="Dv">CREATE</code>, - <code class="Dv">RENAME</code>, or <code class="Dv">DELETE</code> depending - on the intended use of the object. When <code class="Dv">CREATE</code>, - <code class="Dv">RENAME</code>, or <code class="Dv">DELETE</code> is - specified, information usable in creating, renaming, or deleting a directory - entry may be calculated.</p> -<p class="Pp">Overall outline of VOP_LOOKUP:</p> -<div class="Bd Pp Bd-indent">Check accessibility of directory. Look for name in - cache, if found, then return name. Search for name in directory, goto to found - or notfound as appropriate.</div> -<p class="Pp">notfound:</p> -<div class="Bd Pp Bd-indent">If creating or renaming and at end of pathname, - return <code class="Er">EJUSTRETURN</code>, leaving info on available slots - else return <code class="Er">ENOENT</code>.</div> -<p class="Pp">found:</p> -<div class="Bd Pp Bd-indent">If at end of path and deleting, return information - to allow delete. If at end of path and renaming, lock target inode and return - info to allow rename. If not at end, add name to cache; if at end and neither - creating nor deleting, add name to cache.</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The directory <var class="Fa">dvp</var> should be locked on entry - and exit, regardless of error condition. If an entry is found in the - directory, it will be returned locked.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned with <var class="Fa">*vpp</var> set to the locked - vnode of the file if the component is found. If the component being searched - for is ".", then the vnode just has an extra reference added to it - with <a class="Xr">vref(9)</a>. The caller must take care to release the - locks appropriately in this case.</p> -<p class="Pp">If the component is not found and the operation is - <code class="Dv">CREATE</code> or <code class="Dv">RENAME</code>, the flag - <code class="Dv">ISLASTCN</code> is specified and the operation would - succeed, the special return value <code class="Er">EJUSTRETURN</code> is - returned. Otherwise, an appropriate error code is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="ENOTDIR">[<a class="permalink" href="#ENOTDIR"><code class="Er">ENOTDIR</code></a>]</dt> - <dd>The vnode <var class="Fa">dvp</var> does not represent a directory.</dd> - <dt id="ENOENT">[<a class="permalink" href="#ENOENT"><code class="Er">ENOENT</code></a>]</dt> - <dd>The component <var class="Fa">dvp</var> was not found in this - directory.</dd> - <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt> - <dd>Access for the specified operation is denied.</dd> - <dt id="EJUSTRETURN">[<a class="permalink" href="#EJUSTRETURN"><code class="Er">EJUSTRETURN</code></a>]</dt> - <dd>A <code class="Dv">CREATE</code> or <code class="Dv">RENAME</code> - operation would be successful.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a>, <a class="Xr">VOP_ACCESS(9)</a>, - <a class="Xr">VOP_CREATE(9)</a>, <a class="Xr">VOP_MKDIR(9)</a>, - <a class="Xr">VOP_MKNOD(9)</a>, <a class="Xr">VOP_RENAME(9)</a>, - <a class="Xr">VOP_SYMLINK(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The function <code class="Nm">VOP_LOOKUP</code> appeared in - <span class="Ux">4.3BSD</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>, with some text from comments in - <span class="Pa">ufs_lookup.c</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 8, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_OPENCLOSE.9 4.html b/static/freebsd/man9/VOP_OPENCLOSE.9 4.html deleted file mode 100644 index 14b421c1..00000000 --- a/static/freebsd/man9/VOP_OPENCLOSE.9 4.html +++ /dev/null @@ -1,108 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_OPEN(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_OPEN(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_OPEN</code>, - <code class="Nm">VOP_CLOSE</code> — <span class="Nd">open or close a - file</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_OPEN</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int - mode</var>, <var class="Fa" style="white-space: nowrap;">struct ucred - *cred</var>, <var class="Fa" style="white-space: nowrap;">struct thread - *td</var>, <var class="Fa" style="white-space: nowrap;">struct file - *fp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_CLOSE</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int - mode</var>, <var class="Fa" style="white-space: nowrap;">struct ucred - *cred</var>, <var class="Fa" style="white-space: nowrap;">struct thread - *td</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#VOP_OPEN"><code class="Fn" id="VOP_OPEN">VOP_OPEN</code></a>() - entry point is called before a file is accessed by a process and the - <code class="Fn">VOP_CLOSE</code>() entry point is called after a file is - finished with by the process.</p> -<p class="Pp">The arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the file.</dd> - <dt><var class="Fa">mode</var></dt> - <dd>The access mode required by the calling process.</dd> - <dt><var class="Fa">cred</var></dt> - <dd>The caller's credentials.</dd> - <dt><var class="Fa">td</var></dt> - <dd>The thread which is accessing the file.</dd> - <dt><var class="Fa">fp</var></dt> - <dd>The file being opened.</dd> -</dl> -<p class="Pp" id="VOP_OPEN~2">Pointer to the file <var class="Fa">fp</var> is - useful for file systems which require such information, e.g., - <a class="Xr">fdescfs(5)</a>. Use - ‘<code class="Li">NULL</code>’ as <var class="Fa">fp</var> - argument to - <a class="permalink" href="#VOP_OPEN~2"><code class="Fn">VOP_OPEN</code></a>() - for in-kernel opens.</p> -<p class="Pp">The access mode is a set of flags, including - <code class="Dv">FREAD</code>, <code class="Dv">FWRITE</code>, - <code class="Dv">O_NONBLOCK</code>, <code class="Dv">O_APPEND</code>.</p> -<p class="Pp" id="VOP_CLOSE">The thread <var class="Fa">td</var> passed to - <a class="permalink" href="#VOP_CLOSE"><code class="Fn">VOP_CLOSE</code></a>() - may be ‘<code class="Li">NULL</code>’ if the last reference to - the open file is released from a kernel context, e.g., the destruction of a - socket buffer containing the file reference in a - <code class="Dv">SCM_RIGHTS</code> message.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp"><code class="Fn">VOP_OPEN</code>() expects - <var class="Fa">vp</var> to be locked on entry and will leave it locked on - return.</p> -<p class="Pp" id="VOP_CLOSE~2"><a class="permalink" href="#VOP_CLOSE~2"><code class="Fn">VOP_CLOSE</code></a>() - expects at least a reference to be associated with the vnode and does not - care whether the vnode is locked or not. The lock and reference state is - left unchanged on return. Note that <var class="Fa">vn_close</var> expects - an unlocked, referenced vnode and will dereference the vnode prior to - returning.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an error code is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a>, <a class="Xr">VOP_LOOKUP(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 17, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_PATHCONF.9 4.html b/static/freebsd/man9/VOP_PATHCONF.9 4.html deleted file mode 100644 index 7b56f1fb..00000000 --- a/static/freebsd/man9/VOP_PATHCONF.9 4.html +++ /dev/null @@ -1,88 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_PATHCONF(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_PATHCONF(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_PATHCONF</code> — - <span class="Nd">return POSIX pathconf information</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/unistd.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_PATHCONF</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int - name</var>, <var class="Fa" style="white-space: nowrap;">long - *retval</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode to get information about.</dd> - <dt><var class="Fa">name</var></dt> - <dd>The type of information to return.</dd> - <dt><var class="Fa">retval</var></dt> - <dd>The place to return the information.</dd> -</dl> -<p class="Pp">The value of <var class="Fa">name</var> specifies what should be - returned:</p> -<dl class="Bl-tag"> - <dt id="_PC_LINK_MAX"><a class="permalink" href="#_PC_LINK_MAX"><code class="Dv">_PC_LINK_MAX</code></a></dt> - <dd>The maximum number of links to a file.</dd> - <dt id="_PC_NAME_MAX"><a class="permalink" href="#_PC_NAME_MAX"><code class="Dv">_PC_NAME_MAX</code></a></dt> - <dd>The maximum number of bytes in a file name.</dd> - <dt id="_PC_PATH_MAX"><a class="permalink" href="#_PC_PATH_MAX"><code class="Dv">_PC_PATH_MAX</code></a></dt> - <dd>The maximum number of bytes in a pathname.</dd> - <dt id="_PC_PIPE_BUF"><a class="permalink" href="#_PC_PIPE_BUF"><code class="Dv">_PC_PIPE_BUF</code></a></dt> - <dd>The maximum number of bytes which will be written atomically to a - pipe.</dd> - <dt id="_PC_CHOWN_RESTRICTED"><a class="permalink" href="#_PC_CHOWN_RESTRICTED"><code class="Dv">_PC_CHOWN_RESTRICTED</code></a></dt> - <dd>Return 1 if appropriate privileges are required for the - <a class="Xr">chown(2)</a> system call, otherwise 0.</dd> - <dt id="_PC_NO_TRUNC"><a class="permalink" href="#_PC_NO_TRUNC"><code class="Dv">_PC_NO_TRUNC</code></a></dt> - <dd>Return 1 if file names longer than <code class="Dv">KERN_NAME_MAX</code> - are truncated.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The vnode will be locked on entry and should remain locked on - return.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If <var class="Fa">name</var> is recognized, - <var class="Fa">*retval</var> is set to the specified value and zero is - returned, otherwise <code class="Er">EINVAL</code> is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pathconf(2)</a>, <a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 31, 2020</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_PRINT.9 4.html b/static/freebsd/man9/VOP_PRINT.9 4.html deleted file mode 100644 index 5e66657d..00000000 --- a/static/freebsd/man9/VOP_PRINT.9 4.html +++ /dev/null @@ -1,54 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_PRINT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_PRINT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_PRINT</code> — <span class="Nd">print - debugging information</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_PRINT</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode to print.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an error is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 24, 1996</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_RDWR.9 4.html b/static/freebsd/man9/VOP_RDWR.9 4.html deleted file mode 100644 index 9010053b..00000000 --- a/static/freebsd/man9/VOP_RDWR.9 4.html +++ /dev/null @@ -1,112 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_RDWR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_RDWR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_READ</code>, - <code class="Nm">VOP_WRITE</code> — <span class="Nd">read or write a - file</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/uio.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_READ</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct uio - *uio</var>, <var class="Fa" style="white-space: nowrap;">int ioflag</var>, - <var class="Fa" style="white-space: nowrap;">struct ucred *cred</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_WRITE</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct uio - *uio</var>, <var class="Fa" style="white-space: nowrap;">int ioflag</var>, - <var class="Fa" style="white-space: nowrap;">struct ucred *cred</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These entry points read or write the contents of a file.</p> -<p class="Pp">The arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the file.</dd> - <dt><var class="Fa">uio</var></dt> - <dd>The location of the data to be read or written.</dd> - <dt><var class="Fa">ioflag</var></dt> - <dd>Various flags.</dd> - <dt><var class="Fa">cnp</var></dt> - <dd>The credentials of the caller.</dd> -</dl> -<p class="Pp">The <var class="Fa">ioflag</var> argument is used to give - directives and hints to the file system. When attempting a read, the high 16 - bits are used to provide a read-ahead hint (in units of file system blocks) - that the file system should attempt. The low 16 bits are a bit mask which - can contain the following flags:</p> -<dl class="Bl-tag"> - <dt id="IO_UNIT"><a class="permalink" href="#IO_UNIT"><code class="Dv">IO_UNIT</code></a></dt> - <dd>Do I/O as atomic unit.</dd> - <dt id="IO_APPEND"><a class="permalink" href="#IO_APPEND"><code class="Dv">IO_APPEND</code></a></dt> - <dd>Append write to end.</dd> - <dt id="IO_SYNC"><a class="permalink" href="#IO_SYNC"><code class="Dv">IO_SYNC</code></a></dt> - <dd>Do I/O synchronously.</dd> - <dt id="IO_NODELOCKED"><a class="permalink" href="#IO_NODELOCKED"><code class="Dv">IO_NODELOCKED</code></a></dt> - <dd>Underlying node already locked.</dd> - <dt id="IO_NDELAY"><a class="permalink" href="#IO_NDELAY"><code class="Dv">IO_NDELAY</code></a></dt> - <dd><a class="permalink" href="#FNDELAY"><code class="Dv" id="FNDELAY">FNDELAY</code></a> - flag set in file table.</dd> - <dt id="IO_VMIO"><a class="permalink" href="#IO_VMIO"><code class="Dv">IO_VMIO</code></a></dt> - <dd>Data already in VMIO space.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The file should be locked on entry and will still be locked on - exit. Rangelock covering the whole i/o range should be owned around the - call.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an error code is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="EFBIG">[<a class="permalink" href="#EFBIG"><code class="Er">EFBIG</code></a>]</dt> - <dd>An attempt was made to write a file that exceeds the process's file size - limit or the maximum file size.</dd> - <dt id="ENOSPC">[<a class="permalink" href="#ENOSPC"><code class="Er">ENOSPC</code></a>]</dt> - <dd>The file system is full.</dd> - <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt> - <dd>An append-only flag is set on the file, but the caller is attempting to - write before the current end of file.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">uiomove(9)</a>, <a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 24, 1996</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_READDIR.9 4.html b/static/freebsd/man9/VOP_READDIR.9 4.html deleted file mode 100644 index 705579f4..00000000 --- a/static/freebsd/man9/VOP_READDIR.9 4.html +++ /dev/null @@ -1,109 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_READDIR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_READDIR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_READDIR</code> — <span class="Nd">read - contents of a directory</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/dirent.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_READDIR</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct uio - *uio</var>, <var class="Fa" style="white-space: nowrap;">struct ucred - *cred</var>, <var class="Fa" style="white-space: nowrap;">int - *eofflag</var>, <var class="Fa" style="white-space: nowrap;">int - *ncookies</var>, <var class="Fa" style="white-space: nowrap;">uint64_t - **cookies</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Read directory entries.</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the directory.</dd> - <dt><var class="Fa">uio</var></dt> - <dd>Where to read the directory contents.</dd> - <dt><var class="Fa">cred</var></dt> - <dd>The caller's credentials.</dd> - <dt><var class="Fa">eofflag</var></dt> - <dd>Return end of file status (<code class="Dv">NULL</code> if not - wanted).</dd> - <dt><var class="Fa">ncookies</var></dt> - <dd>Number of directory cookies generated for NFS - (<code class="Dv">NULL</code> if not wanted).</dd> - <dt><var class="Fa">cookies</var></dt> - <dd>Directory seek cookies generated for NFS (<code class="Dv">NULL</code> if - not wanted).</dd> -</dl> -The directory contents are read into <var class="Vt">struct dirent</var> - structures. If the on-disc data structures differ from this then they should - be translated. -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The directory should be locked on entry and will still be locked - on exit.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an error code is - returned.</p> -<p class="Pp">If this is called from the NFS server, the extra arguments - <var class="Fa">eofflag</var>, <var class="Fa">ncookies</var> and - <var class="Fa">cookies</var> are given. The value of - <var class="Fa">*eofflag</var> should be set to TRUE if the end of the - directory is reached while reading. The directory seek cookies are returned - to the NFS client and may be used later to restart a directory read part way - through the directory. There should be one cookie returned per directory - entry. The value of the cookie should be the offset within the directory - where the on-disc version of the appropriate directory entry starts. Memory - for the cookies should be allocated using:</p> -<div class="Bd Pp Li"> -<pre> ...; - *ncookies = number of entries read; - *cookies = malloc(*ncookies * sizeof(**cookies), M_TEMP, M_WAITOK);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt> - <dd>An attempt was made to read from an illegal offset in the directory.</dd> - <dt id="EIO">[<a class="permalink" href="#EIO"><code class="Er">EIO</code></a>]</dt> - <dd>A read error occurred while reading the directory.</dd> - <dt id="EINTEGRITY">[<a class="permalink" href="#EINTEGRITY"><code class="Er">EINTEGRITY</code></a>]</dt> - <dd>Corrupted data was detected while reading the directory.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 13, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_READLINK.9 4.html b/static/freebsd/man9/VOP_READLINK.9 4.html deleted file mode 100644 index 7d1fe2ac..00000000 --- a/static/freebsd/man9/VOP_READLINK.9 4.html +++ /dev/null @@ -1,78 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_READLINK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_READLINK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_READLINK</code> — - <span class="Nd">read the target of a symbolic link</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/uio.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_READLINK</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct uio - *uio</var>, <var class="Fa" style="white-space: nowrap;">struct ucred - *cred</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This reads the target pathname of a symbolic link</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the symlink.</dd> - <dt><var class="Fa">uio</var></dt> - <dd>The location of the data to be read or written.</dd> - <dt><var class="Fa">cred</var></dt> - <dd>The credentials of the caller.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The vnode should be locked on entry and will still be locked on - exit.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an error code is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="EIO">[<a class="permalink" href="#EIO"><code class="Er">EIO</code></a>]</dt> - <dd>A read error occurred while reading the contents of the symlink.</dd> - <dt id="EINTEGRITY">[<a class="permalink" href="#EINTEGRITY"><code class="Er">EINTEGRITY</code></a>]</dt> - <dd>Corrupted data was detected while reading the contents of the - symlink.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">uiomove(9)</a>, <a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 30, 2020</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_READ_PGCACHE.9 4.html b/static/freebsd/man9/VOP_READ_PGCACHE.9 4.html deleted file mode 100644 index 75a1e3d4..00000000 --- a/static/freebsd/man9/VOP_READ_PGCACHE.9 4.html +++ /dev/null @@ -1,98 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_READ_PGCACHE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_READ_PGCACHE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_READ_PGCACHE</code> — - <span class="Nd">read a file, fast</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/uio.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_READ_PGCACHE</code>(<var class="Fa">struct vnode - *vp</var>, <var class="Fa">struct uio *uio</var>, <var class="Fa">int - ioflag</var>, <var class="Fa">struct ucred *cred</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This entry point reads the contents of a file. The intent is to - provide the data from caches, which do not require expensive operations or - any disk IO. For instance, if filesystem uses normal VM page cache and - maintains <code class="Dv">v_object</code> lifetime, it can use - <a class="Xr">vn_read_from_obj(9)</a> helper to return data from the - resident <code class="Dv">vp->v_object</code> pages.</p> -<p class="Pp">The filesystem indicates support for the - <code class="Nm">VOP_READ_PGCACHE</code> on specific vnode by setting the - <code class="Dv">VIRF_PGREAD</code> flag in - <code class="Dv">vp->v_irflag</code>.</p> -<p class="Pp">The function does not need to satisfy the whole request; it also - might choose to not provide any data. In these cases, the - <var class="Fa">uio</var> must be advanced by the amount of read data, - <code class="Nm">VOP_READ_PGCACHE</code> should return - <code class="Er">EJUSTRETURN</code>, and VFS would handle the rest of the - read operation using the <a class="Xr">VOP_READ(9)</a>.</p> -<p class="Pp">The VFS layer does the same deadlock avoidance for accessing - userspace pages from <code class="Nm">VOP_READ_PGCACHE</code> as for - <a class="Xr">VOP_READ(9)</a>.</p> -<p class="Pp">Vnode is not locked on the call entry and should not be locked on - return. For a filesystem that requires vnode lock to return any data, it - does not make sense to implement <code class="Nm">VOP_READ_PGCACHE</code> - (and set <code class="Dv">VIRF_PGREAD</code> flag) since VFS arranges the - call to <a class="Xr">VOP_READ(9)</a> as needed.</p> -<p class="Pp">The arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the file.</dd> - <dt><var class="Fa">uio</var></dt> - <dd>The location of the data to be read.</dd> - <dt><var class="Fa">ioflag</var></dt> - <dd>Various flags, see <a class="Xr">VOP_READ(9)</a> for the list.</dd> - <dt><var class="Fa">cred</var></dt> - <dd>The credentials of the caller.</dd> -</dl> -<p class="Pp"><code class="Nm">VOP_READ_PGCACHE</code> does not handle non-zero - <var class="Fa">ioflag</var> argument.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The file should be referenced on entry on entry and will still be - referenced on exit. Rangelock covering the whole read range should be owned - around the call.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, when the whole request is satisfied, - and no more data cannot be provided for it by any means. If more data can be - returned, but <code class="Nm">VOP_READ_PGCACHE</code> was unable to provide - it, <code class="Er">EJUSTRETURN</code> must be returned. The - <code class="Dv">uio</code> records should be updated according to the - partial operation done.</p> -<p class="Pp">Otherwise an error code is returned, same as from - <a class="Xr">VOP_READ(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">uiomove(9)</a>, <a class="Xr">vnode(9)</a>, - <a class="Xr">VOP_READ(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 28, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_REALLOCBLKS.9 4.html b/static/freebsd/man9/VOP_REALLOCBLKS.9 4.html deleted file mode 100644 index 0cedb9d5..00000000 --- a/static/freebsd/man9/VOP_REALLOCBLKS.9 4.html +++ /dev/null @@ -1,58 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_REALLOCBLKS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_REALLOCBLKS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_REALLOCBLKS</code> — - <span class="Nd">rearrange blocks in a file to be contiguous</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_REALLOCBLKS</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct - cluster_save *buflist</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The file to manipulate.</dd> - <dt><var class="Fa">buflist</var></dt> - <dd>A list of buffers to rearrange.</dd> -</dl> -<p class="Pp">This seems to be part of a work in progress.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an error is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">buf(9)</a>, <a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 24, 1996</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_REMOVE.9 4.html b/static/freebsd/man9/VOP_REMOVE.9 4.html deleted file mode 100644 index 2ed9ccb2..00000000 --- a/static/freebsd/man9/VOP_REMOVE.9 4.html +++ /dev/null @@ -1,83 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_REMOVE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_REMOVE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_REMOVE</code>, - <code class="Nm">VOP_RMDIR</code> — <span class="Nd">remove a file or - directory</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_REMOVE</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode - *vp</var>, <var class="Fa" style="white-space: nowrap;">struct componentname - *cnp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_RMDIR</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *dvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode - *vp</var>, <var class="Fa" style="white-space: nowrap;">struct componentname - *cnp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These entry points remove files and directories respectively.</p> -<p class="Pp">The arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">dvp</var></dt> - <dd>The vnode of the directory.</dd> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the file to be removed.</dd> - <dt><var class="Fa">cnp</var></dt> - <dd>Pathname information about the file.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">Both <var class="Fa">dvp</var> and <var class="Fa">vp</var> should - be locked on entry and remain locked on return.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an error code is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt> - <dd>The file is immutable.</dd> - <dt id="ENOTEMPTY">[<a class="permalink" href="#ENOTEMPTY"><code class="Er">ENOTEMPTY</code></a>]</dt> - <dd>An attempt was made to remove a directory which is not empty.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a>, <a class="Xr">VOP_LOOKUP(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 24, 1996</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_RENAME.9 4.html b/static/freebsd/man9/VOP_RENAME.9 4.html deleted file mode 100644 index aa517908..00000000 --- a/static/freebsd/man9/VOP_RENAME.9 4.html +++ /dev/null @@ -1,93 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_RENAME(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_RENAME(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_RENAME</code> — - <span class="Nd">rename a file</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_RENAME</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *fdvp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode - *fvp</var>, <var class="Fa" style="white-space: nowrap;">struct - componentname *fcnp</var>, - <var class="Fa" style="white-space: nowrap;">struct vnode *tdvp</var>, - <var class="Fa" style="white-space: nowrap;">struct vnode *tvp</var>, - <var class="Fa" style="white-space: nowrap;">struct componentname - *tcnp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This renames a file and possibly changes its parent directory. If - the destination object exists, it will be removed first.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">fdvp</var></dt> - <dd>The vnode of the old parent directory.</dd> - <dt><var class="Fa">fvp</var></dt> - <dd>The vnode of the file to be renamed.</dd> - <dt><var class="Fa">fcnp</var></dt> - <dd>Pathname information about the file's current name.</dd> - <dt><var class="Fa">tdvp</var></dt> - <dd>The vnode of the new parent directory.</dd> - <dt><var class="Fa">tvp</var></dt> - <dd>The vnode of the target file (if it exists).</dd> - <dt><var class="Fa">tcnp</var></dt> - <dd>Pathname information about the file's new name.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The source directory and file are unlocked but are expected to - have their ref count bumped on entry. The VOP routine is expected to - <a class="Xr">vrele(9)</a> both prior to returning.</p> -<p class="Pp">The destination directory and file are locked as well as having - their ref count bumped. The VOP routine is expected to - <a class="Xr">vput(9)</a> both prior to returning.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt> - <dd>The file is immutable.</dd> - <dt id="EXDEV">[<a class="permalink" href="#EXDEV"><code class="Er">EXDEV</code></a>]</dt> - <dd>It is not possible to rename a file between different file systems.</dd> - <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt> - <dd>An attempt was made to rename <span class="Pa">.</span> or - <span class="Pa">..</span>, or to perform an operation which would break - the directory tree structure.</dd> - <dt id="ENOTDIR">[<a class="permalink" href="#ENOTDIR"><code class="Er">ENOTDIR</code></a>]</dt> - <dd>An attempt was made to rename a directory to a file or vice versa.</dd> - <dt id="ENOTEMPTY">[<a class="permalink" href="#ENOTEMPTY"><code class="Er">ENOTEMPTY</code></a>]</dt> - <dd>An attempt was made to remove a directory which is not empty.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 24, 1996</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_REVOKE.9 4.html b/static/freebsd/man9/VOP_REVOKE.9 4.html deleted file mode 100644 index 5044f9af..00000000 --- a/static/freebsd/man9/VOP_REVOKE.9 4.html +++ /dev/null @@ -1,58 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_REVOKE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_REVOKE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_REVOKE</code> — - <span class="Nd">revoke access to a device and its aliases</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_REVOKE</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><a class="permalink" href="#VOP_REVOKE"><code class="Fn" id="VOP_REVOKE">VOP_REVOKE</code></a>() - will administratively revoke access to the device specified by - <var class="Fa">vp</var>, as well as any aliases created via - <a class="Xr">make_dev_alias(9)</a>. Further file operations on any of these - devices by processes which have them open will nominally fail. The - <var class="Fa">flags</var> must be set to <code class="Dv">REVOKEALL</code> - to signify that all access will be revoked; any other value is invalid.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The <var class="Fa">vp</var> must be exclusively locked on entry, - and will remain locked upon return.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">make_dev_alias(9)</a>, - <a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Brian Fundakowski - Feldman</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 20, 2019</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_SETACL.9 4.html b/static/freebsd/man9/VOP_SETACL.9 4.html deleted file mode 100644 index 48255ca0..00000000 --- a/static/freebsd/man9/VOP_SETACL.9 4.html +++ /dev/null @@ -1,107 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_SETACL(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_SETACL(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_SETACL</code> — <span class="Nd">set - the access control list for a vnode</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/acl.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_SETACL</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">acl_type_t - type</var>, <var class="Fa" style="white-space: nowrap;">struct acl - *aclp</var>, <var class="Fa" style="white-space: nowrap;">struct ucred - *cred</var>, <var class="Fa" style="white-space: nowrap;">struct thread - *td</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This vnode call may be used to set the access control list (ACL) - for a file or directory.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the file or directory.</dd> - <dt><var class="Fa">type</var></dt> - <dd>The type of ACL to set.</dd> - <dt><var class="Fa">aclp</var></dt> - <dd>A pointer to an ACL structure from which to retrieve the ACL data.</dd> - <dt><var class="Fa">cred</var></dt> - <dd>The user credentials to use in authorizing the request.</dd> - <dt><var class="Fa">td</var></dt> - <dd>The thread setting the ACL.</dd> -</dl> -<p class="Pp">The <var class="Fa">aclp</var> pointer may be - <code class="Dv">NULL</code> to indicate that the specified ACL should be - deleted.</p> -<p class="Pp">The <var class="Fa">cred</var> pointer may be - <code class="Dv">NULL</code> to indicate that access control checks are not - to be performed, if possible. This cred setting might be used to allow the - kernel to authorize ACL changes that the active process might not be - permitted to make.</p> -<p class="Pp">The vnode ACL interface defines the syntax, and not semantics, of - file and directory ACL interfaces. More information about ACL management in - kernel may be found in <a class="Xr">acl(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The vnode will be locked on entry and should remain locked on - return.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If the ACL is successfully set, then zero is returned. Otherwise, - an appropriate error code is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt> - <dd>The ACL type passed is invalid for this vnode, or the ACL data is - invalid.</dd> - <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt> - <dd>The caller does not have the appropriate privilege.</dd> - <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt> - <dd>Sufficient memory is not available to fulfill the request.</dd> - <dt id="EOPNOTSUPP">[<a class="permalink" href="#EOPNOTSUPP"><code class="Er">EOPNOTSUPP</code></a>]</dt> - <dd>The file system does not support - <code class="Fn">VOP_SETACL</code>().</dd> - <dt id="ENOSPC">[<a class="permalink" href="#ENOSPC"><code class="Er">ENOSPC</code></a>]</dt> - <dd>The file system is out of space.</dd> - <dt id="EROFS">[<a class="permalink" href="#EROFS"><code class="Er">EROFS</code></a>]</dt> - <dd>The file system is read-only.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">acl(9)</a>, <a class="Xr">vnode(9)</a>, - <a class="Xr">VOP_ACLCHECK(9)</a>, <a class="Xr">VOP_GETACL(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Robert - Watson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 23, 1999</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_SETEXTATTR.9 4.html b/static/freebsd/man9/VOP_SETEXTATTR.9 4.html deleted file mode 100644 index db8e3b4a..00000000 --- a/static/freebsd/man9/VOP_SETEXTATTR.9 4.html +++ /dev/null @@ -1,121 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_SETEXTATTR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_SETEXTATTR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_SETEXTATTR</code> — - <span class="Nd">set named extended attribute for a vnode</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/extattr.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_SETEXTATTR</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int - attrnamespace</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">struct uio - *uio</var>, <var class="Fa" style="white-space: nowrap;">struct ucred - *cred</var>, <var class="Fa" style="white-space: nowrap;">struct thread - *td</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This vnode call may be used to set specific named extended - attribute for a file or directory.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the file or directory.</dd> - <dt><var class="Fa">attrnamespace</var></dt> - <dd>Integer constant indicating which extended attribute namespace the - attribute name is present in.</dd> - <dt><var class="Fa">name</var></dt> - <dd>Pointer to a null-terminated character string containing the attribute - name.</dd> - <dt><var class="Fa">uio</var></dt> - <dd>The location of the data to be read or written.</dd> - <dt><var class="Fa">cred</var></dt> - <dd>The user credentials to use in authorizing the request.</dd> - <dt><var class="Fa">td</var></dt> - <dd>The thread setting the extended attribute.</dd> -</dl> -<p class="Pp">The uio structure is used in a manner similar to the argument of - the same name in <a class="Xr">VOP_WRITE(9)</a>. However, as extended - attributes provide a strict "name=value" semantic, non-zero - offsets will be rejected.</p> -<p class="Pp">The <var class="Fa">uio</var> pointer may be - <code class="Dv">NULL</code> to indicate that the specified extended - attribute should be deleted.</p> -<p class="Pp">The <var class="Fa">cred</var> pointer may be - <code class="Dv">NULL</code> to indicate that access control checks are not - to be performed, if possible. This <var class="Fa">cred</var> setting might - be used to allow the kernel to authorize extended attribute changes that the - active process might not be permitted to make.</p> -<p class="Pp">Extended attribute semantics may vary by file system implementing - the call. More information on extended attributes may be found in - <a class="Xr">extattr(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The vnode will be locked on entry and should remain locked on - return.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If the extended attribute is successfully set, then zero is - returned. Otherwise, an appropriate error code is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt> - <dd>The caller does not have the appropriate privilege.</dd> - <dt id="ENXIO">[<a class="permalink" href="#ENXIO"><code class="Er">ENXIO</code></a>]</dt> - <dd>The request was not valid in this file system for the specified vnode and - attribute name.</dd> - <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt> - <dd>Insufficient memory available to fulfill the request.</dd> - <dt id="EFAULT">[<a class="permalink" href="#EFAULT"><code class="Er">EFAULT</code></a>]</dt> - <dd>The uio structure refers to an invalid userspace address.</dd> - <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt> - <dd>The name, namespace, or uio argument is invalid.</dd> - <dt id="EOPNOTSUPP">[<a class="permalink" href="#EOPNOTSUPP"><code class="Er">EOPNOTSUPP</code></a>]</dt> - <dd>The file system does not support - <code class="Fn">VOP_SETEXTATTR</code>().</dd> - <dt id="ENOSPC">[<a class="permalink" href="#ENOSPC"><code class="Er">ENOSPC</code></a>]</dt> - <dd>The file system is out of space.</dd> - <dt id="EROFS">[<a class="permalink" href="#EROFS"><code class="Er">EROFS</code></a>]</dt> - <dd>The file system is read-only.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">extattr(9)</a>, <a class="Xr">vnode(9)</a>, - <a class="Xr">VOP_GETEXTATTR(9)</a>, - <a class="Xr">VOP_LISTEXTATTR(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Robert - Watson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 23, 1999</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_SETLABEL.9 3.html b/static/freebsd/man9/VOP_SETLABEL.9 3.html deleted file mode 100644 index 83f28b88..00000000 --- a/static/freebsd/man9/VOP_SETLABEL.9 3.html +++ /dev/null @@ -1,127 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_SETLABEL(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_SETLABEL(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_SETLABEL</code> — - <span class="Nd">persistently store an updated MAC label on a - vnode</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code> - <br/> - <code class="In">#include <<a class="In">security/mac.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_SETLABEL</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">label - *label</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This vnode call is made by <a class="Xr">mac(9)</a> file - relabeling operation has been authorized, and the filesystem must now be - updated.</p> -<section class="Ss"> -<h2 class="Ss" id="Single-Label_vs._Multi-Label_Filesystems"><a class="permalink" href="#Single-Label_vs._Multi-Label_Filesystems">Single-Label - vs. Multi-Label Filesystems</a></h2> -<p class="Pp">Filesystems that do not implement per-file labels -- known as - single-label filesystems -- can simply leave the <a class="Xr">vnode(9)</a> - operation undefined. These filesystems must not set the - <code class="Dv">MNT_MULTLABEL</code> flag in their <var class="Vt">struct - mount</var>.</p> -<p class="Pp">Filesystems that do implement per-vnode label storage -- known as - multi-label filesystems -- will set the - <code class="Dv">MNT_MULTILABEL</code> flag in their <var class="Vt">struct - mount</var>. The UFS filesystem uses a superblock flag to persisently - configure whether a specific filesystem implements a label for each - <a class="Xr">vnode(9)</a>, and then keys various behaviors on whether that - flag is set.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Extended_Attributes"><a class="permalink" href="#Extended_Attributes">Extended - Attributes</a></h2> -<p class="Pp">If the filesystem implements extended attributes, then the MAC - Framework's - <a class="permalink" href="#vop_stdsetlabel_ea"><code class="Fn" id="vop_stdsetlabel_ea">vop_stdsetlabel_ea</code></a>() - function can be used, and maps operations into a series of - <a class="Xr">VOP_OPENEXTATTR(9)</a>, <a class="Xr">VOP_WRITEEXTATTR(9)</a>, - and <a class="Xr">VOP_CLOSEEXTATTR(9)</a>.</p> -<p class="Pp" id="mac_vnode_create_extattr">Filesystems will also need to call - <a class="permalink" href="#mac_vnode_create_extattr"><code class="Fn">mac_vnode_create_extattr</code></a>() - when a new filesystem object is created, so that suitable extended - attributes can be written out, and - <a class="permalink" href="#mac_vnode_associate_extattr"><code class="Fn" id="mac_vnode_associate_extattr">mac_vnode_associate_extattr</code></a>() - when a <a class="Xr">vnode(9)</a> is associated with a filesystem object for - the first time. These utility functions use - <a class="Xr">VOP_OPENEXTATTR(9)</a>, <a class="Xr">VOP_READEXTATTR(9)</a>, - <a class="Xr">VOP_WRITEEXTATTR(9)</a>, and - <a class="Xr">VOP_CLOSEEXTATTR(9)</a> as required.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Locking_and_Crash_Safety"><a class="permalink" href="#Locking_and_Crash_Safety">Locking - and Crash Safety</a></h2> -<p class="Pp">In all cases, it is important that exclusive - <a class="Xr">vnode(9)</a> locks be held to prevent concurrent access when a - MAC label may not yet be initialized. It is also important that operations - are ordered so that a system crash does not leave a file improperly labeled. - For example, the extended attribute for a newly created file must be written - to disk before the file is linked by its parent directory, so that there is - no opportunity for a crash to lead to an unlabeled file.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The vnode will be locked on entry and should remain locked on - return.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If the MAC label is successfully set, then zero is returned. - Otherwise, an appropriate error code is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="EOPNOTSUPP">[<a class="permalink" href="#EOPNOTSUPP"><code class="Er">EOPNOTSUPP</code></a>]</dt> - <dd>The file system does not support - <code class="Fn">VOP_SETLABEL</code>().</dd> - <dt id="ENOSPC">[<a class="permalink" href="#ENOSPC"><code class="Er">ENOSPC</code></a>]</dt> - <dd>The file system is out of space.</dd> - <dt id="EROFS">[<a class="permalink" href="#EROFS"><code class="Er">EROFS</code></a>]</dt> - <dd>The file system is read-only.</dd> -</dl> -<p class="Pp">Depending on the underlying implementation of - <code class="Fn">VOP_SETLABEL</code>(), other errors may also be - possible.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">mac(9)</a>, <a class="Xr">mount(9)</a>, - <a class="Xr">vnode(9)</a>, <a class="Xr">VOP_CLOSEEXTATTR(9)</a>, - <a class="Xr">VOP_OPENEXTATTR(9)</a>, <a class="Xr">VOP_READEXTATTR(9)</a>, - <a class="Xr">VOP_WRITEXTATTR(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Robert - Watson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 27, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_STRATEGY.9 4.html b/static/freebsd/man9/VOP_STRATEGY.9 4.html deleted file mode 100644 index 9e3042e1..00000000 --- a/static/freebsd/man9/VOP_STRATEGY.9 4.html +++ /dev/null @@ -1,67 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_STRATEGY(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_STRATEGY(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_STRATEGY</code> — - <span class="Nd">read or write a file system buffer</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/buf.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_STRATEGY</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct buf - *bp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode that the buffer is for.</dd> - <dt><var class="Fa">bp</var></dt> - <dd>The buffer to be read or written.</dd> -</dl> -<p class="Pp">This call either reads or writes data from a file, depending on - the value of <var class="Fa">bp->b_iocmd</var>.</p> -<p class="Pp">The call may block.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Always zero. Errors should be signalled by setting the - <code class="Dv">BIO_ERROR</code> bit in - <var class="Fa">bp->b_ioflags</var> and setting - <var class="Fa">bp->b_error</var> to the appropriate - <var class="Va">errno</var> value.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">errno(2)</a>, <a class="Xr">buf(9)</a>, - <a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 30, 2022</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_VPTOCNP.9 4.html b/static/freebsd/man9/VOP_VPTOCNP.9 4.html deleted file mode 100644 index b67e5d3b..00000000 --- a/static/freebsd/man9/VOP_VPTOCNP.9 4.html +++ /dev/null @@ -1,97 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_VPTOCNP(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_VPTOCNP(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_VPTOCNP</code> — - <span class="Nd">translate a vnode to its component name</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/ucred.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_VPTOCNP</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct vnode - **dvp</var>, <var class="Fa" style="white-space: nowrap;">struct ucred - *cred</var>, <var class="Fa" style="white-space: nowrap;">char *buf</var>, - <var class="Fa" style="white-space: nowrap;">int *buflen</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This translates a vnode into its component name, and writes that - name to the head of the buffer specified by <var class="Fa">buf</var>.</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode to translate.</dd> - <dt><var class="Fa">dvp</var></dt> - <dd>The vnode of the parent directory of <var class="Fa">vp</var>.</dd> - <dt><var class="Fa">cred</var></dt> - <dd>The caller credentials.</dd> - <dt><var class="Fa">buf</var></dt> - <dd>The buffer into which to prepend the component name.</dd> - <dt><var class="Fa">buflen</var></dt> - <dd>The remaining size of the buffer.</dd> -</dl> -<p class="Pp">The default implementation of <code class="Nm">VOP_VPTOCNP</code> - scans through <var class="Fa">vp</var>'s parent directory looking for a - dirent with a matching file number. If <var class="Fa">vp</var> is not a - directory, then <code class="Nm">VOP_VPTOCNP</code> returns ENOENT.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The vnode should be locked on entry and will still be locked on - exit. The parent directory vnode will be unlocked on a successful exit. - However, it will have its use count incremented.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an error code is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt> - <dd>The buffer was not large enough to hold the vnode's component name.</dd> - <dt id="ENOENT">[<a class="permalink" href="#ENOENT"><code class="Er">ENOENT</code></a>]</dt> - <dd>The vnode was not found on the file system.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a>, <a class="Xr">VOP_LOOKUP(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1> -<p class="Pp">This interface is a work in progress.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The function <code class="Nm">VOP_VPTOCNP</code> appeared in - <span class="Ux">FreeBSD 8.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Joe Marcus - Clarke</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 8, 2015</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/VOP_VPTOFH.9 4.html b/static/freebsd/man9/VOP_VPTOFH.9 4.html deleted file mode 100644 index 64e45583..00000000 --- a/static/freebsd/man9/VOP_VPTOFH.9 4.html +++ /dev/null @@ -1,56 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VOP_VPTOFH(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VOP_VPTOFH(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">VOP_VPTOFH</code> — <span class="Nd">turn - a vnode into an NFS filehandle</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">VOP_VPTOFH</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct fid - *fhp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This is used by the NFS server to create an opaque filehandle - which uniquely identifies the file and which can be used by an NFS client to - access the file in the future.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode to make a filehandle for.</dd> - <dt><var class="Fa">fhp</var></dt> - <dd>Return parameter for the filehandle.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">VFS(9)</a>, <a class="Xr">VFS_FHTOVP(9)</a>, - <a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 16, 2007</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/accept_filter.9 3.html b/static/freebsd/man9/accept_filter.9 3.html deleted file mode 100644 index cdfee16f..00000000 --- a/static/freebsd/man9/accept_filter.9 3.html +++ /dev/null @@ -1,129 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">ACCEPT_FILTER(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">ACCEPT_FILTER(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">accept_filter</code>, - <code class="Nm">accept_filt_add</code>, - <code class="Nm">accept_filt_del</code>, - <code class="Nm">accept_filt_generic_mod_event</code>, - <code class="Nm">accept_filt_get</code> — <span class="Nd">filter - incoming connections</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/module.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/socket.h</a>></code></p> -<p class="Pp"><code class="Fd">#define ACCEPT_FILTER_MOD</code></p> -<p class="Pp"><code class="In">#include - <<a class="In">sys/socketvar.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">accept_filt_add</code>(<var class="Fa" style="white-space: nowrap;">struct - accept_filter *filt</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">accept_filt_del</code>(<var class="Fa" style="white-space: nowrap;">char - *name</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">accept_filt_generic_mod_event</code>(<var class="Fa" style="white-space: nowrap;">module_t - mod</var>, <var class="Fa" style="white-space: nowrap;">int event</var>, - <var class="Fa" style="white-space: nowrap;">void *data</var>);</p> -<p class="Pp"><var class="Ft">struct accept_filter *</var> - <br/> - <code class="Fn">accept_filt_get</code>(<var class="Fa" style="white-space: nowrap;">char - *name</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Accept filters allow an application to request that the kernel - pre-process incoming connections. An accept filter is requested via the - <a class="Xr">setsockopt(2)</a> system call, passing in an - <var class="Fa">optname</var> of - <code class="Dv">SO_ACCEPTFILTER</code>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">A module that wants to be an accept filter must provide a - <var class="Vt">struct accept_filter</var> to the system:</p> -<div class="Bd Pp Li"> -<pre>struct accept_filter { - char accf_name[16]; - void (*accf_callback)(struct socket *so, void *arg, int waitflag); - void * (*accf_create)(struct socket *so, char *arg); - void (*accf_destroy)(struct socket *so); - SLIST_ENTRY(accept_filter) accf_next; /* next on the list */ -};</pre> -</div> -<p class="Pp">The module should register it with the function - <code class="Fn">accept_filt_add</code>(), passing a pointer to a - <var class="Vt">struct accept_filter</var>, allocated with - <a class="Xr">malloc(9)</a>.</p> -<p class="Pp">The fields of <var class="Vt">struct accept_filter</var> are as - follows:</p> -<dl class="Bl-tag"> - <dt id="accf_name"><var class="Va">accf_name</var></dt> - <dd>Name of the filter; this is how it will be accessed from userland.</dd> - <dt id="accf_callback"><var class="Va">accf_callback</var></dt> - <dd>The callback that the kernel will do once the connection is established. - It is the same as a socket upcall and will be called when the connection - is established and whenever new data arrives on the socket, unless the - callback modifies the socket's flags.</dd> - <dt id="accf_create"><var class="Va">accf_create</var></dt> - <dd>Called whenever a <a class="Xr">setsockopt(2)</a> installs the filter onto - a listening socket.</dd> - <dt id="accf_destroy"><var class="Va">accf_destroy</var></dt> - <dd>Called whenever the user removes the accept filter on the socket.</dd> -</dl> -<p class="Pp">The <code class="Fn">accept_filt_del</code>() function passed the - same string used in <var class="Va">accept_filter.accf_name</var> during - registration with <code class="Fn">accept_filt_add</code>(), the kernel will - then disallow and further userland use of the filter.</p> -<p class="Pp">The <code class="Fn">accept_filt_get</code>() function is used - internally to locate which accept filter to use via the - <a class="Xr">setsockopt(2)</a> system call.</p> -<p class="Pp">The <code class="Fn">accept_filt_generic_mod_event</code>() - function provides a simple way to avoid duplication of code for accept - filters which do not use the argument field to load and unload themselves. - This function can be used in the <var class="Vt">moduledata_t</var> struct - for the <a class="Xr">DECLARE_MODULE(9)</a> macro.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">setsockopt(2)</a>, <a class="Xr">accf_data(9)</a>, - <a class="Xr">accf_dns(9)</a>, <a class="Xr">accf_http(9)</a>, - <a class="Xr">malloc(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The accept filter mechanism was introduced in - <span class="Ux">FreeBSD 4.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Alfred - Perlstein</span>, <span class="An">Sheldon Hearn</span> and - <span class="An">Jeroen Ruigrok van der Werven</span>.</p> -<p class="Pp">The accept filter concept was pioneered by <span class="An">David - Filo</span> at Yahoo! and refined to be a loadable module system by - <span class="An">Alfred Perlstein</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 25, 2000</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/accf_data.9 4.html b/static/freebsd/man9/accf_data.9 4.html deleted file mode 100644 index 00b1ce1d..00000000 --- a/static/freebsd/man9/accf_data.9 4.html +++ /dev/null @@ -1,73 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">ACCF_DATA(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">ACCF_DATA(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">accf_data</code> — <span class="Nd">buffer - incoming connections until data arrives</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="Cd">options INET</code> - <br/> - <code class="Cd">options ACCEPT_FILTER_DATA</code></p> -<p class="Pp">In <a class="Xr">rc.conf(5)</a>: - <br/> - <code class="Cd">kld_list="accf_data"</code></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This is a filter to be placed on a socket that will be using - <a class="permalink" href="#accept"><code class="Fn" id="accept">accept</code></a>() - to receive incoming connections.</p> -<p class="Pp" id="accept~2">It prevents the application from receiving the - connected descriptor via - <a class="permalink" href="#accept~2"><code class="Fn">accept</code></a>() - until data arrives on the connection.</p> -<p class="Pp">The <var class="Fa">ACCEPT_FILTER_DATA</var> kernel option is also - a module that can be enabled at runtime via <a class="Xr">kldload(8)</a> if - the INET option has been compiled into the kernel.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">Assuming ACCEPT_FILTER_DATA has been included in the kernel config - file or the <code class="Nm">accf_data</code> module has been loaded, this - will enable the data accept filter on the socket - <var class="Fa">sok</var>.</p> -<div class="Bd Pp Bd-indent Li"> -<pre> struct accept_filter_arg afa; - - bzero(&afa, sizeof(afa)); - strcpy(afa.af_name, "dataready"); - setsockopt(sok, SOL_SOCKET, SO_ACCEPTFILTER, &afa, sizeof(afa));</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">setsockopt(2)</a>, - <a class="Xr">accept_filter(9)</a>, <a class="Xr">accf_dns(9)</a>, - <a class="Xr">accf_http(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The accept filter mechanism and the accf_data filter were - introduced in <span class="Ux">FreeBSD 4.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page and the filter were written by - <span class="An">Alfred Perlstein</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 15, 2000</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/accf_dns.9 3.html b/static/freebsd/man9/accf_dns.9 3.html deleted file mode 100644 index 1bbb46fe..00000000 --- a/static/freebsd/man9/accf_dns.9 3.html +++ /dev/null @@ -1,74 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">ACCF_DNS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">ACCF_DNS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">accf_dns</code> — <span class="Nd">buffer - incoming DNS requests until the whole first request is present</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="Cd">options INET</code> - <br/> - <code class="Cd">options ACCEPT_FILTER_DNS</code></p> -<p class="Pp">In <a class="Xr">rc.conf(5)</a>: - <br/> - <code class="Cd">kld_list="accf_dns"</code></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This is a filter to be placed on a socket that will be using - <a class="permalink" href="#accept"><code class="Fn" id="accept">accept</code></a>() - to receive incoming connections.</p> -<p class="Pp" id="accept~2">It prevents the application from receiving the - connected descriptor via - <a class="permalink" href="#accept~2"><code class="Fn">accept</code></a>() - until a whole DNS request is available on the socket. It does this by - reading the first two bytes of the request, to determine its size, and - waiting until the required amount of data is available to be read.</p> -<p class="Pp">The <var class="Fa">ACCEPT_FILTER_DNS</var> kernel option is also - a module that can be enabled at runtime via <a class="Xr">kldload(8)</a> if - the INET option has been compiled into the kernel.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">If the <code class="Nm">accf_dns</code> module is available in the - kernel, the following code will enable the DNS accept filter on a socket - <var class="Fa">sok</var>.</p> -<div class="Bd Pp Bd-indent Li"> -<pre> struct accept_filter_arg afa; - - bzero(&afa, sizeof(afa)); - strcpy(afa.af_name, "dnsready"); - setsockopt(sok, SOL_SOCKET, SO_ACCEPTFILTER, &afa, sizeof(afa));</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">setsockopt(2)</a>, - <a class="Xr">accept_filter(9)</a>, <a class="Xr">accf_data(9)</a>, - <a class="Xr">accf_http(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The accept filter mechanism was introduced in - <span class="Ux">FreeBSD 4.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page and the filter were written by - <span class="An">David Malone</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 16, 2008</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/accf_http.9 3.html b/static/freebsd/man9/accf_http.9 3.html deleted file mode 100644 index f25c2c43..00000000 --- a/static/freebsd/man9/accf_http.9 3.html +++ /dev/null @@ -1,89 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">ACCF_HTTP(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">ACCF_HTTP(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">accf_http</code> — <span class="Nd">buffer - incoming connections until a certain complete HTTP request - arrives</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="Cd">options INET</code> - <br/> - <code class="Cd">options ACCEPT_FILTER_HTTP</code></p> -<p class="Pp">In <a class="Xr">rc.conf(5)</a>: - <br/> - <code class="Cd">kld_list="accf_http"</code></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This is a filter to be placed on a socket that will be using - <a class="permalink" href="#accept"><code class="Fn" id="accept">accept</code></a>() - to receive incoming HTTP connections.</p> -<p class="Pp" id="accept~2">It prevents the application from receiving the - connected descriptor via - <a class="permalink" href="#accept~2"><code class="Fn">accept</code></a>() - until either a full HTTP/1.0 or HTTP/1.1 HEAD or GET request has been - buffered by the kernel.</p> -<p class="Pp" id="accept~3">If something other than a HTTP/1.0 or HTTP/1.1 HEAD - or GET request is received the kernel will allow the application to receive - the connection descriptor via - <a class="permalink" href="#accept~3"><code class="Fn">accept</code></a>().</p> -<p class="Pp" id="select">The utility of <code class="Nm">accf_http</code> is - such that a server will not have to context switch several times before - performing the initial parsing of the request. This effectively reduces the - amount of required CPU utilization to handle incoming requests by keeping - active processes in preforking servers such as Apache low and reducing the - size of the file descriptor set that needs to be managed by interfaces such - as <a class="permalink" href="#select"><code class="Fn">select</code></a>(), - <a class="permalink" href="#poll"><code class="Fn" id="poll">poll</code></a>() - or - <a class="permalink" href="#kevent"><code class="Fn" id="kevent">kevent</code></a>() - based servers.</p> -<p class="Pp">The <code class="Nm">accf_http</code> kernel option is also a - module that can be enabled at runtime via <a class="Xr">kldload(8)</a> if - the INET option has been compiled into the kernel.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">Assuming ACCEPT_FILTER_HTTP has been included in the kernel config - file or the <code class="Nm">accf_http</code> module has been loaded, this - will enable the http accept filter on the socket - <var class="Fa">sok</var>.</p> -<div class="Bd Pp Bd-indent Li"> -<pre> struct accept_filter_arg afa; - - bzero(&afa, sizeof(afa)); - strcpy(afa.af_name, "httpready"); - setsockopt(sok, SOL_SOCKET, SO_ACCEPTFILTER, &afa, sizeof(afa));</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">setsockopt(2)</a>, - <a class="Xr">accept_filter(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The accept filter mechanism and the accf_http filter were - introduced in <span class="Ux">FreeBSD 4.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page and the filter were written by - <span class="An">Alfred Perlstein</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 15, 2000</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/accf_tls.9 3.html b/static/freebsd/man9/accf_tls.9 3.html deleted file mode 100644 index 35adbf1e..00000000 --- a/static/freebsd/man9/accf_tls.9 3.html +++ /dev/null @@ -1,86 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">ACCF_TLS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">ACCF_TLS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">accf_tls</code> — <span class="Nd">buffer - incoming connections until a TLS handshake like request arrives</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="Cd">options INET</code> - <br/> - <code class="Cd">options ACCEPT_FILTER_TLS</code></p> -<p class="Pp">In <a class="Xr">rc.conf(5)</a>: - <br/> - <code class="Cd">kld_list="accf_tls"</code></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This is a filter to be placed on a socket that will be using - <a class="permalink" href="#accept"><code class="Fn" id="accept">accept</code></a>(<var class="Fa">2</var>) - to receive incoming HTTPS connections. It prevents the application from - receiving the connected descriptor via - <code class="Fn">accept</code>(<var class="Fa">2</var>) until a full TLS - handshake has been buffered by the kernel. The - <code class="Nm">accf_tls</code> will first check that byte at offset 0 is - <var class="Va">0x16</var>, which matches handshake type. Then it will read - 2-byte request length value at offset 3 and will continue reading until - reading the entire length of the handshake is buffered. If something other - than <var class="Va">0x16</var> is at offset 0, the kernel will allow the - application to receive the connection descriptor via - <code class="Fn">accept</code>(<var class="Fa">2</var>).</p> -<p class="Pp" id="select">The utility of <code class="Nm">accf_tls</code> is - such that a server will not have to context switch several times before - performing the initial parsing of the request. This effectively reduces the - amount of required CPU utilization to handle incoming requests by keeping - active processes in preforking servers such as Apache low and reducing the - size of the file descriptor set that needs to be managed by interfaces such - as <a class="permalink" href="#select"><code class="Fn">select</code></a>(), - <a class="permalink" href="#poll"><code class="Fn" id="poll">poll</code></a>() - or - <a class="permalink" href="#kevent"><code class="Fn" id="kevent">kevent</code></a>() - based servers.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">Assuming ACCEPT_FILTER_TLS has been included in the kernel config - file or the <code class="Nm">accf_tls</code> module has been loaded, this - will enable the TLS accept filter on the socket - <var class="Fa">sok</var>.</p> -<div class="Bd Pp Bd-indent Li"> -<pre> struct accept_filter_arg afa; - - bzero(&afa, sizeof(afa)); - strcpy(afa.af_name, "tlsready"); - setsockopt(sok, SOL_SOCKET, SO_ACCEPTFILTER, &afa, sizeof(afa));</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">setsockopt(2)</a>, - <a class="Xr">accept_filter(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">accf_tls</code> accept filter was introduced - in <span class="Ux">FreeBSD 15.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">accf_tls</code> filter was written by - <span class="An">Maksim Yevmenkin</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 24, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/acl.9 3.html b/static/freebsd/man9/acl.9 3.html deleted file mode 100644 index 4e630c5c..00000000 --- a/static/freebsd/man9/acl.9 3.html +++ /dev/null @@ -1,207 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">ACL(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">ACL(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">acl</code> — <span class="Nd">virtual file - system access control lists</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/acl.h</a>></code></p> -<p class="Pp">In the kernel configuration file: - <br/> - <code class="Cd">options UFS_ACL</code></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Access control lists, or ACLs, allow fine-grained specification of - rights for vnodes representing files and directories. However, as there are - a plethora of file systems with differing ACL semantics, the vnode interface - is aware only of the syntax of ACLs, relying on the underlying file system - to implement the details. Depending on the underlying file system, each file - or directory may have zero or more ACLs associated with it, named using the - <var class="Fa">type</var> field of the appropriate vnode ACL calls: - <a class="Xr">VOP_ACLCHECK(9)</a>, <a class="Xr">VOP_GETACL(9)</a>, and - <a class="Xr">VOP_SETACL(9)</a>.</p> -<p class="Pp">Currently, each ACL is represented in-kernel by a fixed-size - <var class="Vt">acl</var> structure, defined as follows:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct acl { - unsigned int acl_maxcnt; - unsigned int acl_cnt; - int acl_spare[4]; - struct acl_entry acl_entry[ACL_MAX_ENTRIES]; -};</pre> -</div> -<p class="Pp">An ACL is constructed from a fixed size array of ACL entries, each - of which consists of a set of permissions, principal namespace, and - principal identifier. In this implementation, the - <var class="Vt">acl_maxcnt</var> field is always set to - <code class="Dv">ACL_MAX_ENTRIES</code>.</p> -<p class="Pp">Each individual ACL entry is of the type - <var class="Vt">acl_entry_t</var>, which is a structure with the following - members:</p> -<dl class="Bl-tag"> - <dt><var class="Vt">acl_tag_t</var> <var class="Va">ae_tag</var></dt> - <dd>The following is a list of definitions of ACL types to be set in - <var class="Va">ae_tag</var>: - <p class="Pp"></p> - <div class="Bd-indent"> - <dl class="Bl-tag Bl-compact"> - <dt id="ACL_UNDEFINED_FIELD"><a class="permalink" href="#ACL_UNDEFINED_FIELD"><code class="Dv">ACL_UNDEFINED_FIELD</code></a></dt> - <dd>Undefined ACL type.</dd> - <dt id="ACL_USER_OBJ"><a class="permalink" href="#ACL_USER_OBJ"><code class="Dv">ACL_USER_OBJ</code></a></dt> - <dd>Discretionary access rights for processes whose effective user ID - matches the user ID of the file's owner.</dd> - <dt id="ACL_USER"><a class="permalink" href="#ACL_USER"><code class="Dv">ACL_USER</code></a></dt> - <dd>Discretionary access rights for processes whose effective user ID - matches the ACL entry qualifier.</dd> - <dt id="ACL_GROUP_OBJ"><a class="permalink" href="#ACL_GROUP_OBJ"><code class="Dv">ACL_GROUP_OBJ</code></a></dt> - <dd>Discretionary access rights for processes whose effective group ID or - any supplemental groups match the group ID of the file's owner.</dd> - <dt id="ACL_GROUP"><a class="permalink" href="#ACL_GROUP"><code class="Dv">ACL_GROUP</code></a></dt> - <dd>Discretionary access rights for processes whose effective group ID or - any supplemental groups match the ACL entry qualifier.</dd> - <dt id="ACL_MASK"><a class="permalink" href="#ACL_MASK"><code class="Dv">ACL_MASK</code></a></dt> - <dd>The maximum discretionary access rights that can be granted to a - process in the file group class. This is only valid for POSIX.1e - ACLs.</dd> - <dt id="ACL_OTHER"><a class="permalink" href="#ACL_OTHER"><code class="Dv">ACL_OTHER</code></a></dt> - <dd>Discretionary access rights for processes not covered by any other ACL - entry. This is only valid for POSIX.1e ACLs.</dd> - <dt id="ACL_OTHER_OBJ"><a class="permalink" href="#ACL_OTHER_OBJ"><code class="Dv">ACL_OTHER_OBJ</code></a></dt> - <dd>Same as <code class="Dv">ACL_OTHER</code>.</dd> - <dt id="ACL_EVERYONE"><a class="permalink" href="#ACL_EVERYONE"><code class="Dv">ACL_EVERYONE</code></a></dt> - <dd>Discretionary access rights for all users. This is only valid for - NFSv4 ACLs.</dd> - </dl> - </div> - <p class="Pp">Each POSIX.1e ACL must contain exactly one - <code class="Dv">ACL_USER_OBJ</code>, one - <code class="Dv">ACL_GROUP_OBJ</code>, and one - <code class="Dv">ACL_OTHER</code>. If any of - <code class="Dv">ACL_USER</code>, <code class="Dv">ACL_GROUP</code>, or - <code class="Dv">ACL_OTHER</code> are present, then exactly one - <code class="Dv">ACL_MASK</code> entry should be present.</p> - </dd> - <dt><var class="Vt">uid_t</var> <var class="Va">ae_id</var></dt> - <dd>The ID of user for whom this ACL describes access permissions. For entries - other than <code class="Dv">ACL_USER</code> and - <code class="Dv">ACL_GROUP</code>, this field should be set to - <code class="Dv">ACL_UNDEFINED_ID</code>.</dd> - <dt><var class="Vt">acl_perm_t</var> <var class="Va">ae_perm</var></dt> - <dd>This field defines what kind of access the process matching this ACL has - for accessing the associated file. For POSIX.1e ACLs, the following are - valid: - <dl class="Bl-tag"> - <dt id="ACL_EXECUTE"><a class="permalink" href="#ACL_EXECUTE"><code class="Dv">ACL_EXECUTE</code></a></dt> - <dd>The process may execute the associated file.</dd> - <dt id="ACL_WRITE"><a class="permalink" href="#ACL_WRITE"><code class="Dv">ACL_WRITE</code></a></dt> - <dd>The process may write to the associated file.</dd> - <dt id="ACL_READ"><a class="permalink" href="#ACL_READ"><code class="Dv">ACL_READ</code></a></dt> - <dd>The process may read from the associated file.</dd> - <dt id="ACL_PERM_NONE"><a class="permalink" href="#ACL_PERM_NONE"><code class="Dv">ACL_PERM_NONE</code></a></dt> - <dd>The process has no read, write or execute permissions to the - associated file.</dd> - </dl> - <p class="Pp">For NFSv4 ACLs, the following are valid:</p> - <dl class="Bl-tag"> - <dt id="ACL_READ_DATA"><a class="permalink" href="#ACL_READ_DATA"><code class="Dv">ACL_READ_DATA</code></a></dt> - <dd>The process may read from the associated file.</dd> - <dt id="ACL_LIST_DIRECTORY"><a class="permalink" href="#ACL_LIST_DIRECTORY"><code class="Dv">ACL_LIST_DIRECTORY</code></a></dt> - <dd>Same as <code class="Dv">ACL_READ_DATA</code>.</dd> - <dt id="ACL_WRITE_DATA"><a class="permalink" href="#ACL_WRITE_DATA"><code class="Dv">ACL_WRITE_DATA</code></a></dt> - <dd>The process may write to the associated file.</dd> - <dt id="ACL_ADD_FILE"><a class="permalink" href="#ACL_ADD_FILE"><code class="Dv">ACL_ADD_FILE</code></a></dt> - <dd>Same as <code class="Dv">ACL_ACL_WRITE_DATA</code>.</dd> - <dt id="ACL_APPEND_DATA"><a class="permalink" href="#ACL_APPEND_DATA"><code class="Dv">ACL_APPEND_DATA</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="ACL_ADD_SUBDIRECTORY"><a class="permalink" href="#ACL_ADD_SUBDIRECTORY"><code class="Dv">ACL_ADD_SUBDIRECTORY</code></a></dt> - <dd>Same as <code class="Dv">ACL_APPEND_DATA</code>.</dd> - <dt id="ACL_READ_NAMED_ATTRS"><a class="permalink" href="#ACL_READ_NAMED_ATTRS"><code class="Dv">ACL_READ_NAMED_ATTRS</code></a></dt> - <dd>Ignored.</dd> - <dt id="ACL_WRITE_NAMED_ATTRS"><a class="permalink" href="#ACL_WRITE_NAMED_ATTRS"><code class="Dv">ACL_WRITE_NAMED_ATTRS</code></a></dt> - <dd>Ignored.</dd> - <dt id="ACL_EXECUTE~2"><a class="permalink" href="#ACL_EXECUTE~2"><code class="Dv">ACL_EXECUTE</code></a></dt> - <dd>The process may execute the associated file.</dd> - <dt id="ACL_DELETE_CHILD"><a class="permalink" href="#ACL_DELETE_CHILD"><code class="Dv">ACL_DELETE_CHILD</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="ACL_READ_ATTRIBUTES"><a class="permalink" href="#ACL_READ_ATTRIBUTES"><code class="Dv">ACL_READ_ATTRIBUTES</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="ACL_WRITE_ATTRIBUTES"><a class="permalink" href="#ACL_WRITE_ATTRIBUTES"><code class="Dv">ACL_WRITE_ATTRIBUTES</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="ACL_DELETE"><a class="permalink" href="#ACL_DELETE"><code class="Dv">ACL_DELETE</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="ACL_READ_ACL"><a class="permalink" href="#ACL_READ_ACL"><code class="Dv">ACL_READ_ACL</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="ACL_WRITE_ACL"><a class="permalink" href="#ACL_WRITE_ACL"><code class="Dv">ACL_WRITE_ACL</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="ACL_WRITE_OWNER"><a class="permalink" href="#ACL_WRITE_OWNER"><code class="Dv">ACL_WRITE_OWNER</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="ACL_SYNCHRONIZE"><a class="permalink" href="#ACL_SYNCHRONIZE"><code class="Dv">ACL_SYNCHRONIZE</code></a></dt> - <dd>Ignored.</dd> - </dl> - </dd> - <dt><var class="Vt">acl_entry_type_t</var> - <var class="Va">ae_entry_type</var></dt> - <dd>This field defines the type of NFSv4 ACL entry. It is not used with - POSIX.1e ACLs. The following values are valid: - <dl class="Bl-tag"> - <dt id="ACL_ENTRY_TYPE_ALLOW"><a class="permalink" href="#ACL_ENTRY_TYPE_ALLOW"><code class="Dv">ACL_ENTRY_TYPE_ALLOW</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="ACL_ENTRY_TYPE_DENY"><a class="permalink" href="#ACL_ENTRY_TYPE_DENY"><code class="Dv">ACL_ENTRY_TYPE_DENY</code></a></dt> - <dd style="width: auto;"> </dd> - </dl> - </dd> - <dt><var class="Vt">acl_flag_t</var> <var class="Va">ae_flags</var></dt> - <dd>This field defines the inheritance flags of NFSv4 ACL entry. It is not - used with POSIX.1e ACLs. The following values are valid: - <dl class="Bl-tag"> - <dt id="ACL_ENTRY_FILE_INHERIT"><a class="permalink" href="#ACL_ENTRY_FILE_INHERIT"><code class="Dv">ACL_ENTRY_FILE_INHERIT</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="ACL_ENTRY_DIRECTORY_INHERIT"><a class="permalink" href="#ACL_ENTRY_DIRECTORY_INHERIT"><code class="Dv">ACL_ENTRY_DIRECTORY_INHERIT</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="ACL_ENTRY_NO_PROPAGATE_INHERIT"><a class="permalink" href="#ACL_ENTRY_NO_PROPAGATE_INHERIT"><code class="Dv">ACL_ENTRY_NO_PROPAGATE_INHERIT</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="ACL_ENTRY_INHERIT_ONLY"><a class="permalink" href="#ACL_ENTRY_INHERIT_ONLY"><code class="Dv">ACL_ENTRY_INHERIT_ONLY</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="ACL_ENTRY_INHERITED"><a class="permalink" href="#ACL_ENTRY_INHERITED"><code class="Dv">ACL_ENTRY_INHERITED</code></a></dt> - <dd style="width: auto;"> </dd> - </dl> - The <code class="Dv">ACL_ENTRY_INHERITED</code> flag is set on an ACE that - has been inherited from its parent. It may also be set programmatically, - and is valid on both files and directories.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">acl(3)</a>, <a class="Xr">vaccess(9)</a>, - <a class="Xr">vaccess_acl_nfs4(9)</a>, - <a class="Xr">vaccess_acl_posix1e(9)</a>, <a class="Xr">VFS(9)</a>, - <a class="Xr">VOP_ACLCHECK(9)</a>, <a class="Xr">VOP_GETACL(9)</a>, - <a class="Xr">VOP_SETACL(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Robert - Watson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 4, 2015</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/alq.9 3.html b/static/freebsd/man9/alq.9 3.html deleted file mode 100644 index 5f249196..00000000 --- a/static/freebsd/man9/alq.9 3.html +++ /dev/null @@ -1,300 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">ALQ(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">ALQ(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">alq</code>, - <code class="Nm">alq_open_flags</code>, <code class="Nm">alq_open</code>, - <code class="Nm">alq_writen</code>, <code class="Nm">alq_write</code>, - <code class="Nm">alq_flush</code>, <code class="Nm">alq_close</code>, - <code class="Nm">alq_getn</code>, <code class="Nm">alq_get</code>, - <code class="Nm">alq_post_flags</code>, <code class="Nm">alq_post</code> - — <span class="Nd">Asynchronous Logging Queues</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/alq.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">alq_open_flags</code>(<var class="Fa">struct alq **app</var>, - <var class="Fa">const char *file</var>, <var class="Fa">struct ucred - *cred</var>, <var class="Fa">int cmode</var>, <var class="Fa">int - size</var>, <var class="Fa">int flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">alq_open</code>(<var class="Fa">struct alq **app</var>, - <var class="Fa">const char *file</var>, <var class="Fa">struct ucred - *cred</var>, <var class="Fa">int cmode</var>, <var class="Fa">int - size</var>, <var class="Fa">int count</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">alq_writen</code>(<var class="Fa" style="white-space: nowrap;">struct - alq *alq</var>, <var class="Fa" style="white-space: nowrap;">void - *data</var>, <var class="Fa" style="white-space: nowrap;">int len</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">alq_write</code>(<var class="Fa" style="white-space: nowrap;">struct - alq *alq</var>, <var class="Fa" style="white-space: nowrap;">void - *data</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">alq_flush</code>(<var class="Fa" style="white-space: nowrap;">struct - alq *alq</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">alq_close</code>(<var class="Fa" style="white-space: nowrap;">struct - alq *alq</var>);</p> -<p class="Pp"><var class="Ft">struct ale *</var> - <br/> - <code class="Fn">alq_getn</code>(<var class="Fa" style="white-space: nowrap;">struct - alq *alq</var>, <var class="Fa" style="white-space: nowrap;">int len</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">struct ale *</var> - <br/> - <code class="Fn">alq_get</code>(<var class="Fa" style="white-space: nowrap;">struct - alq *alq</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">alq_post_flags</code>(<var class="Fa" style="white-space: nowrap;">struct - alq *alq</var>, <var class="Fa" style="white-space: nowrap;">struct ale - *ale</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">alq_post</code>(<var class="Fa" style="white-space: nowrap;">struct - alq *alq</var>, <var class="Fa" style="white-space: nowrap;">struct ale - *ale</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">alq</code> facility provides an asynchronous - fixed or variable length recording mechanism, known as Asynchronous Logging - Queues. It can record to any <a class="Xr">vnode(9)</a>, thus providing the - ability to journal logs to character devices as well as regular files. All - functions accept a <var class="Vt">struct alq</var> argument, which is an - opaque type that maintains state information for an Asynchronous Logging - Queue. The logging facility runs in a separate kernel thread, which services - all log entry requests.</p> -<p class="Pp">An “asynchronous log entry” is defined as - <var class="Vt">struct ale</var>, which has the following members:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct ale { - intptr_t ae_bytesused; /* # bytes written to ALE. */ - char *ae_data; /* Write ptr. */ - int ae_pad; /* Unused, compat. */ -};</pre> -</div> -<p class="Pp" id="alq_writen">An <code class="Nm">alq</code> can be created in - either fixed or variable length mode. A variable length - <code class="Nm">alq</code> accommodates writes of varying length using - <a class="permalink" href="#alq_writen"><code class="Fn">alq_writen</code></a>() - and <code class="Fn">alq_getn</code>(). A fixed length - <code class="Nm">alq</code> accommodates a fixed number of writes using - <code class="Fn">alq_write</code>() and <code class="Fn">alq_get</code>(), - each of fixed size (set at queue creation time). Fixed length mode is - deprecated in favour of variable length mode.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="FUNCTIONS"><a class="permalink" href="#FUNCTIONS">FUNCTIONS</a></h1> -<p class="Pp">The <code class="Fn">alq_open_flags</code>() function creates a - new variable length asynchronous logging queue. The - <var class="Fa">file</var> argument is the name of the file to open for - logging. If the file does not yet exist, <code class="Fn">alq_open</code>() - will attempt to create it. The <var class="Fa">cmode</var> argument will be - passed to - <a class="permalink" href="#vn_open"><code class="Fn" id="vn_open">vn_open</code></a>() - as the requested creation mode, to be used if the file will be created by - <code class="Fn">alq_open</code>(). Consumers of this API may wish to pass - <code class="Dv">ALQ_DEFAULT_CMODE</code>, a default creation mode suitable - for most applications. The <var class="Fa">cred</var> argument specifies the - credentials to use when opening and performing I/O on the file. The - <var class="Fa">size</var> argument sets the size (in bytes) of the - underlying queue. The ALQ_ORDERED flag may be passed in via - <var class="Fa">flags</var> to indicate that the ordering of writer threads - waiting for a busy <code class="Nm">alq</code> to free up resources should - be preserved.</p> -<p class="Pp" id="alq_open">The deprecated - <a class="permalink" href="#alq_open"><code class="Fn">alq_open</code></a>() - function is implemented as a wrapper around - <a class="permalink" href="#alq_open_flags"><code class="Fn" id="alq_open_flags">alq_open_flags</code></a>() - to provide backwards compatibility to consumers that have not been updated - to utilise the newer <code class="Fn">alq_open_flags</code>() function. It - passes all arguments through to <code class="Fn">alq_open_flags</code>() - untouched except for <var class="Fa">size</var> and - <var class="Fa">count</var>, and sets <var class="Fa">flags</var> to 0. To - create a variable length mode <code class="Nm">alq</code>, the - <var class="Fa">size</var> argument should be set to the size (in bytes) of - the underlying queue and the <var class="Fa">count</var> argument should be - set to 0. To create a fixed length mode <code class="Nm">alq</code>, the - <var class="Fa">size</var> argument should be set to the size (in bytes) of - each write and the <var class="Fa">count</var> argument should be set to the - number of <var class="Fa">size</var> byte chunks to reserve capacity - for.</p> -<p class="Pp" id="alq_writen~2">The - <a class="permalink" href="#alq_writen~2"><code class="Fn">alq_writen</code></a>() - function writes <var class="Fa">len</var> bytes from - <var class="Fa">data</var> to the designated variable length mode queue - <var class="Fa">alq</var>. If <code class="Fn">alq_writen</code>() could not - write the entry immediately and <code class="Dv">ALQ_WAITOK</code> is set in - <var class="Fa">flags</var>, the function will be allowed to - <a class="Xr">msleep_spin(9)</a> with the - “<code class="Li">alqwnord</code>” or - “<code class="Li">alqwnres</code>” wait message. A write will - automatically schedule the queue <var class="Fa">alq</var> to be flushed to - disk. This behaviour can be controlled by passing ALQ_NOACTIVATE via - <var class="Fa">flags</var> to indicate that the write should not schedule - <var class="Fa">alq</var> to be flushed to disk.</p> -<p class="Pp" id="alq_write">The deprecated - <a class="permalink" href="#alq_write"><code class="Fn">alq_write</code></a>() - function is implemented as a wrapper around - <code class="Fn">alq_writen</code>() to provide backwards compatibility to - consumers that have not been updated to utilise variable length mode queues. - The function will write <var class="Fa">size</var> bytes of data (where - <var class="Fa">size</var> was specified at queue creation time) from the - <var class="Fa">data</var> buffer to the <var class="Fa">alq</var>. Note - that it is an error to call <code class="Fn">alq_write</code>() on a - variable length mode queue.</p> -<p class="Pp" id="alq_flush">The - <a class="permalink" href="#alq_flush"><code class="Fn">alq_flush</code></a>() - function is used for flushing <var class="Fa">alq</var> to the log medium - that was passed to <code class="Fn">alq_open</code>(). If - <var class="Fa">alq</var> has data to flush and is not already in the - process of being flushed, the function will block doing IO. Otherwise, the - function will return immediately.</p> -<p class="Pp" id="alq_close">The - <a class="permalink" href="#alq_close"><code class="Fn">alq_close</code></a>() - function will close the asynchronous logging queue <var class="Fa">alq</var> - and flush all pending write requests to the log medium. It will free all - resources that were previously allocated.</p> -<p class="Pp" id="alq_getn">The - <a class="permalink" href="#alq_getn"><code class="Fn">alq_getn</code></a>() - function returns an asynchronous log entry from <var class="Fa">alq</var>, - initialised to point at a buffer capable of receiving - <var class="Fa">len</var> bytes of data. This function leaves - <var class="Fa">alq</var> in a locked state, until a subsequent - <code class="Fn">alq_post</code>() or - <code class="Fn">alq_post_flags</code>() call is made. If - <code class="Fn">alq_getn</code>() could not obtain - <var class="Fa">len</var> bytes of buffer immediately and - <code class="Dv">ALQ_WAITOK</code> is set in <var class="Fa">flags</var>, - the function will be allowed to <a class="Xr">msleep_spin(9)</a> with the - “<code class="Li">alqgnord</code>” or - “<code class="Li">alqgnres</code>” wait message. The caller - can choose to write less than <var class="Fa">len</var> bytes of data to the - returned asynchronous log entry by setting the entry's ae_bytesused field to - the number of bytes actually written. This must be done prior to calling - <code class="Fn">alq_post</code>().</p> -<p class="Pp" id="alq_get">The deprecated - <a class="permalink" href="#alq_get"><code class="Fn">alq_get</code></a>() - function is implemented as a wrapper around - <code class="Fn">alq_getn</code>() to provide backwards compatibility to - consumers that have not been updated to utilise variable length mode queues. - The asynchronous log entry returned will be initialised to point at a buffer - capable of receiving <var class="Fa">size</var> bytes of data (where - <var class="Fa">size</var> was specified at queue creation time). Note that - it is an error to call <code class="Fn">alq_get</code>() on a variable - length mode queue.</p> -<p class="Pp" id="alq_post_flags">The - <a class="permalink" href="#alq_post_flags"><code class="Fn">alq_post_flags</code></a>() - function schedules the asynchronous log entry <var class="Fa">ale</var> - (obtained from <code class="Fn">alq_getn</code>() or - <code class="Fn">alq_get</code>()) for writing to <var class="Fa">alq</var>. - The ALQ_NOACTIVATE flag may be passed in via <var class="Fa">flags</var> to - indicate that the queue should not be immediately scheduled to be flushed to - disk. This function leaves <var class="Fa">alq</var> in an unlocked - state.</p> -<p class="Pp" id="alq_post">The - <a class="permalink" href="#alq_post"><code class="Fn">alq_post</code></a>() - function is implemented as a wrapper around - <code class="Fn">alq_post_flags</code>() to provide backwards compatibility - to consumers that have not been updated to utilise the newer - <code class="Fn">alq_post_flags</code>() function. It simply passes all - arguments through to <code class="Fn">alq_post_flags</code>() untouched, and - sets <var class="Fa">flags</var> to 0.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">The <code class="Fn">alq_writen</code>() and - <code class="Fn">alq_write</code>() functions both perform a - <a class="Xr">bcopy(3)</a> from the supplied <var class="Fa">data</var> - buffer into the underlying <code class="Nm">alq</code> buffer. Performance - critical code paths may wish to consider using - <code class="Fn">alq_getn</code>() (variable length queues) or - <code class="Fn">alq_get</code>() (fixed length queues) to avoid the extra - memory copy. Note that a queue remains locked between calls to - <code class="Fn">alq_getn</code>() or <code class="Fn">alq_get</code>() and - <code class="Fn">alq_post</code>() or - <code class="Fn">alq_post_flags</code>(), so this method of writing to a - queue is unsuitable for situations where the time between calls may be - substantial.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKING"><a class="permalink" href="#LOCKING">LOCKING</a></h1> -<p class="Pp">Each asynchronous logging queue is protected by a spin mutex.</p> -<p class="Pp" id="alq_flush~2">Functions - <a class="permalink" href="#alq_flush~2"><code class="Fn">alq_flush</code></a>() - and <code class="Fn">alq_open</code>() may attempt to acquire an internal - sleep mutex, and should consequently not be used in contexts where sleeping - is not allowed.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">alq_open</code>() function returns one of the - error codes listed in <a class="Xr">open(2)</a>, if it fails to open - <var class="Fa">file</var>, or else it returns 0.</p> -<p class="Pp">The <code class="Fn">alq_writen</code>() and - <code class="Fn">alq_write</code>() functions return - <code class="Er">EWOULDBLOCK</code> if <code class="Dv">ALQ_NOWAIT</code> - was set in <var class="Fa">flags</var> and either the queue is full or the - system is shutting down.</p> -<p class="Pp">The <code class="Fn">alq_getn</code>() and - <code class="Fn">alq_get</code>() functions return - <code class="Dv">NULL</code> if <code class="Dv">ALQ_NOWAIT</code> was set - in <var class="Fa">flags</var> and either the queue is full or the system is - shutting down.</p> -<p class="Pp">NOTE: invalid arguments to non-void functions will result in - undefined behaviour.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">syslog(3)</a>, <a class="Xr">kproc(9)</a>, - <a class="Xr">ktr(9)</a>, <a class="Xr">msleep_spin(9)</a>, - <a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The Asynchronous Logging Queues (ALQ) facility first appeared in - <span class="Ux">FreeBSD 5.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">alq</code> facility was written by - <span class="An">Jeffrey Roberson</span> - <<a class="Mt" href="mailto:jeff@FreeBSD.org">jeff@FreeBSD.org</a>> - and extended by <span class="An">Lawrence Stewart</span> - <<a class="Mt" href="mailto:lstewart@freebsd.org">lstewart@freebsd.org</a>>.</p> -<p class="Pp">This manual page was written by <span class="An">Hiten - Pandya</span> - <<a class="Mt" href="mailto:hmp@FreeBSD.org">hmp@FreeBSD.org</a>> and - revised by <span class="An">Lawrence Stewart</span> - <<a class="Mt" href="mailto:lstewart@freebsd.org">lstewart@freebsd.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 26, 2010</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/altq.9 3.html b/static/freebsd/man9/altq.9 3.html deleted file mode 100644 index bc95d846..00000000 --- a/static/freebsd/man9/altq.9 3.html +++ /dev/null @@ -1,510 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">ALTQ(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">ALTQ(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">ALTQ</code> — <span class="Nd">kernel - interfaces for manipulating output queues on network interfaces</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/socket.h</a>></code> - <br/> - <code class="In">#include <<a class="In">net/if.h</a>></code> - <br/> - <code class="In">#include <<a class="In">net/if_var.h</a>></code></p> -<section class="Ss"> -<h2 class="Ss" id="Enqueue_macros"><a class="permalink" href="#Enqueue_macros">Enqueue - macros</a></h2> -<p class="Pp"><code class="Fn">IFQ_ENQUEUE</code>(<var class="Fa" style="white-space: nowrap;">struct - ifaltq *ifq</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>, <var class="Fa" style="white-space: nowrap;">int error</var>);</p> -<p class="Pp"><code class="Fn">IFQ_HANDOFF</code>(<var class="Fa" style="white-space: nowrap;">struct - ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>, <var class="Fa" style="white-space: nowrap;">int error</var>);</p> -<p class="Pp"><code class="Fn">IFQ_HANDOFF_ADJ</code>(<var class="Fa">struct - ifnet *ifp</var>, <var class="Fa">struct mbuf *m</var>, <var class="Fa">int - adjust</var>, <var class="Fa">int error</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Dequeue_macros"><a class="permalink" href="#Dequeue_macros">Dequeue - macros</a></h2> -<p class="Pp"><code class="Fn">IFQ_DEQUEUE</code>(<var class="Fa" style="white-space: nowrap;">struct - ifaltq *ifq</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><code class="Fn">IFQ_POLL_NOLOCK</code>(<var class="Fa" style="white-space: nowrap;">struct - ifaltq *ifq</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><code class="Fn">IFQ_PURGE</code>(<var class="Fa" style="white-space: nowrap;">struct - ifaltq *ifq</var>);</p> -<p class="Pp"><code class="Fn">IFQ_IS_EMPTY</code>(<var class="Fa" style="white-space: nowrap;">struct - ifaltq *ifq</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Driver_managed_dequeue_macros"><a class="permalink" href="#Driver_managed_dequeue_macros">Driver - managed dequeue macros</a></h2> -<p class="Pp"><code class="Fn">IFQ_DRV_DEQUEUE</code>(<var class="Fa" style="white-space: nowrap;">struct - ifaltq *ifq</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><code class="Fn">IFQ_DRV_PREPEND</code>(<var class="Fa" style="white-space: nowrap;">struct - ifaltq *ifq</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><code class="Fn">IFQ_DRV_PURGE</code>(<var class="Fa" style="white-space: nowrap;">struct - ifaltq *ifq</var>);</p> -<p class="Pp"><code class="Fn">IFQ_DRV_IS_EMPTY</code>(<var class="Fa" style="white-space: nowrap;">struct - ifaltq *ifq</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="General_setup_macros"><a class="permalink" href="#General_setup_macros">General - setup macros</a></h2> -<p class="Pp"><code class="Fn">IFQ_SET_MAXLEN</code>(<var class="Fa" style="white-space: nowrap;">struct - ifaltq *ifq</var>, <var class="Fa" style="white-space: nowrap;">int - len</var>);</p> -<p class="Pp"><code class="Fn">IFQ_INC_LEN</code>(<var class="Fa" style="white-space: nowrap;">struct - ifaltq *ifq</var>);</p> -<p class="Pp"><code class="Fn">IFQ_DEC_LEN</code>(<var class="Fa" style="white-space: nowrap;">struct - ifaltq *ifq</var>);</p> -<p class="Pp"><code class="Fn">IFQ_INC_DROPS</code>(<var class="Fa" style="white-space: nowrap;">struct - ifaltq *ifq</var>);</p> -<p class="Pp"><code class="Fn">IFQ_SET_READY</code>(<var class="Fa" style="white-space: nowrap;">struct - ifaltq *ifq</var>);</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">ALTQ</code> system is a framework to manage - queuing disciplines on network interfaces. <code class="Nm">ALTQ</code> - introduces new macros to manipulate output queues. The output queue macros - are used to abstract queue operations and not to touch the internal fields - of the output queue structure. The macros are independent from the - <code class="Nm">ALTQ</code> implementation, and compatible with the - traditional <var class="Vt">ifqueue</var> macros for ease of transition.</p> -<p class="Pp" id="IFQ_ENQUEUE"><a class="permalink" href="#IFQ_ENQUEUE"><code class="Fn">IFQ_ENQUEUE</code></a>(), - <a class="permalink" href="#IFQ_HANDOFF"><code class="Fn" id="IFQ_HANDOFF">IFQ_HANDOFF</code></a>() - and - <a class="permalink" href="#IFQ_HANDOFF_ADJ"><code class="Fn" id="IFQ_HANDOFF_ADJ">IFQ_HANDOFF_ADJ</code></a>() - enqueue a packet <var class="Fa">m</var> to the queue - <var class="Fa">ifq</var>. The underlying queuing discipline may discard the - packet. The <var class="Fa">error</var> argument is set to 0 on success, or - <code class="Er">ENOBUFS</code> if the packet is discarded. The packet - pointed to by <var class="Fa">m</var> will be freed by the device driver on - success, or by the queuing discipline on failure, so the caller should not - touch <var class="Fa">m</var> after enqueuing. - <code class="Fn">IFQ_HANDOFF</code>() and - <code class="Fn">IFQ_HANDOFF_ADJ</code>() combine the enqueue operation with - statistic generation and call - <a class="permalink" href="#if_start"><code class="Fn" id="if_start">if_start</code></a>() - upon successful enqueue to initiate the actual send.</p> -<p class="Pp" id="IFQ_DEQUEUE"><a class="permalink" href="#IFQ_DEQUEUE"><code class="Fn">IFQ_DEQUEUE</code></a>() - dequeues a packet from the queue. The dequeued packet is returned in - <var class="Fa">m</var>, or <var class="Fa">m</var> is set to - <code class="Dv">NULL</code> if no packet is dequeued. The caller must - always check <var class="Fa">m</var> since a non-empty queue could return - <code class="Dv">NULL</code> under rate-limiting.</p> -<p class="Pp" id="IFQ_POLL_NOLOCK"><a class="permalink" href="#IFQ_POLL_NOLOCK"><code class="Fn">IFQ_POLL_NOLOCK</code></a>() - returns the next packet without removing it from the queue. The caller must - hold the queue mutex when calling <code class="Fn">IFQ_POLL_NOLOCK</code>() - in order to guarantee that a subsequent call to - <a class="permalink" href="#IFQ_DEQUEUE_NOLOCK"><code class="Fn" id="IFQ_DEQUEUE_NOLOCK">IFQ_DEQUEUE_NOLOCK</code></a>() - dequeues the same packet.</p> -<p class="Pp" id="IFQ_*_NOLOCK"><a class="permalink" href="#IFQ_*_NOLOCK"><code class="Fn">IFQ_*_NOLOCK</code></a>() - variants (if available) always assume that the caller holds the queue mutex. - They can be grabbed with - <a class="permalink" href="#IFQ_LOCK"><code class="Fn" id="IFQ_LOCK">IFQ_LOCK</code></a>() - and released with - <a class="permalink" href="#IFQ_UNLOCK"><code class="Fn" id="IFQ_UNLOCK">IFQ_UNLOCK</code></a>().</p> -<p class="Pp" id="IFQ_PURGE"><a class="permalink" href="#IFQ_PURGE"><code class="Fn">IFQ_PURGE</code></a>() - discards all the packets in the queue. The purge operation is needed since a - non-work conserving queue cannot be emptied by a dequeue loop.</p> -<p class="Pp" id="IFQ_IS_EMPTY"><a class="permalink" href="#IFQ_IS_EMPTY"><code class="Fn">IFQ_IS_EMPTY</code></a>() - can be used to check if the queue is empty. Note that - <code class="Fn">IFQ_DEQUEUE</code>() could still return - <code class="Dv">NULL</code> if the queuing discipline is non-work - conserving.</p> -<p class="Pp" id="IFQ_DRV_DEQUEUE"><a class="permalink" href="#IFQ_DRV_DEQUEUE"><code class="Fn">IFQ_DRV_DEQUEUE</code></a>() - moves up to <var class="Fa">ifq->ifq_drv_maxlen</var> packets from the - queue to the “driver managed” queue and returns the first one - via <var class="Fa">m</var>. As for <code class="Fn">IFQ_DEQUEUE</code>(), - <var class="Fa">m</var> can be <code class="Dv">NULL</code> even for a - non-empty queue. Subsequent calls to - <code class="Fn">IFQ_DRV_DEQUEUE</code>() pass the packets from the - “driver managed” queue without obtaining the queue mutex. It - is the responsibility of the caller to protect against concurrent access. - Enabling <code class="Nm">ALTQ</code> for a given queue sets - <var class="Va">ifq_drv_maxlen</var> to 0 as the “bulk - dequeue” performed by <code class="Fn">IFQ_DRV_DEQUEUE</code>() for - higher values of <var class="Va">ifq_drv_maxlen</var> is adverse to - <code class="Nm">ALTQ</code>'s internal timing. Note that a driver must not - mix - <a class="permalink" href="#IFQ_DRV_*"><code class="Fn" id="IFQ_DRV_*">IFQ_DRV_*</code></a>() - macros with the default dequeue macros as the default macros do not look at - the “driver managed” queue which might lead to an mbuf - leak.</p> -<p class="Pp" id="IFQ_DRV_PREPEND"><a class="permalink" href="#IFQ_DRV_PREPEND"><code class="Fn">IFQ_DRV_PREPEND</code></a>() - prepends <var class="Fa">m</var> to the “driver managed” queue - from where it will be obtained with the next call to - <code class="Fn">IFQ_DRV_DEQUEUE</code>().</p> -<p class="Pp" id="IFQ_DRV_PURGE"><a class="permalink" href="#IFQ_DRV_PURGE"><code class="Fn">IFQ_DRV_PURGE</code></a>() - flushes all packets in the “driver managed” queue and calls to - <code class="Fn">IFQ_PURGE</code>() afterwards.</p> -<p class="Pp" id="IFQ_DRV_IS_EMPTY"><a class="permalink" href="#IFQ_DRV_IS_EMPTY"><code class="Fn">IFQ_DRV_IS_EMPTY</code></a>() - checks for packets in the “driver managed” part of the queue. - If it is empty, it forwards to <code class="Fn">IFQ_IS_EMPTY</code>().</p> -<p class="Pp" id="IFQ_SET_MAXLEN"><a class="permalink" href="#IFQ_SET_MAXLEN"><code class="Fn">IFQ_SET_MAXLEN</code></a>() - sets the queue length limit to the default FIFO queue. The - <var class="Va">ifq_drv_maxlen</var> member of the - <var class="Vt">ifaltq</var> structure controls the length limit of the - “driver managed” queue.</p> -<p class="Pp" id="IFQ_INC_LEN"><a class="permalink" href="#IFQ_INC_LEN"><code class="Fn">IFQ_INC_LEN</code></a>() - and - <a class="permalink" href="#IFQ_DEC_LEN"><code class="Fn" id="IFQ_DEC_LEN">IFQ_DEC_LEN</code></a>() - increment or decrement the current queue length in packets. This is mostly - for internal purposes.</p> -<p class="Pp" id="IFQ_INC_DROPS"><a class="permalink" href="#IFQ_INC_DROPS"><code class="Fn">IFQ_INC_DROPS</code></a>() - increments the drop counter and is identical to - <a class="permalink" href="#IF_DROP"><code class="Fn" id="IF_DROP">IF_DROP</code></a>(). - It is defined for naming consistency only.</p> -<p class="Pp" id="IFQ_SET_READY"><a class="permalink" href="#IFQ_SET_READY"><code class="Fn">IFQ_SET_READY</code></a>() - sets a flag to indicate that a driver was converted to use the new macros. - <code class="Nm">ALTQ</code> can be enabled only on interfaces with this - flag.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="COMPATIBILITY"><a class="permalink" href="#COMPATIBILITY">COMPATIBILITY</a></h1> -<section class="Ss"> -<h2 class="Ss" id="ifaltq_structure"><a class="permalink" href="#ifaltq_structure"><var class="Vt">ifaltq - structure</var></a></h2> -<p class="Pp">In order to keep compatibility with the existing code, the new - output queue structure <var class="Vt">ifaltq</var> has the same fields. The - traditional <code class="Fn">IF_*</code>() macros and the code directly - referencing the fields within <var class="Va">if_snd</var> still work with - <var class="Vt">ifaltq</var>.</p> -<div class="Bd Pp Li"> -<pre> ##old-style## ##new-style## - | - struct ifqueue { | struct ifaltq { - struct mbuf *ifq_head; | struct mbuf *ifq_head; - struct mbuf *ifq_tail; | struct mbuf *ifq_tail; - int ifq_len; | int ifq_len; - int ifq_maxlen; | int ifq_maxlen; - }; | /* driver queue fields */ - | ...... - | /* altq related fields */ - | ...... - | }; - |</pre> -</div> -The new structure replaces <var class="Vt">struct ifqueue</var> in - <var class="Vt">struct ifnet</var>. -<div class="Bd Pp Li"> -<pre> ##old-style## ##new-style## - | - struct ifnet { | struct ifnet { - .... | .... - | - struct ifqueue if_snd; | struct ifaltq if_snd; - | - .... | .... - }; | }; - |</pre> -</div> -The (simplified) new <code class="Fn">IFQ_*</code>() macros look like: -<div class="Bd Pp Li"> -<pre> #define IFQ_DEQUEUE(ifq, m) \ - if (ALTQ_IS_ENABLED((ifq)) \ - ALTQ_DEQUEUE((ifq), (m)); \ - else \ - IF_DEQUEUE((ifq), (m));</pre> -</div> -</section> -<section class="Ss"> -<h2 class="Ss" id="Enqueue_operation"><a class="permalink" href="#Enqueue_operation">Enqueue - operation</a></h2> -<p class="Pp">The semantics of the enqueue operation is changed. In the new - style, enqueue and packet drop are combined since they cannot be easily - separated in many queuing disciplines. The new enqueue operation corresponds - to the following macro that is written with the old macros.</p> -<div class="Bd Pp Li"> -<pre>#define IFQ_ENQUEUE(ifq, m, error) \ -do { \ - if (IF_QFULL((ifq))) { \ - m_freem((m)); \ - (error) = ENOBUFS; \ - IF_DROP(ifq); \ - } else { \ - IF_ENQUEUE((ifq), (m)); \ - (error) = 0; \ - } \ -} while (0)</pre> -</div> -<p class="Pp"><code class="Fn">IFQ_ENQUEUE</code>() does the following:</p> -<p class="Pp"></p> -<ul class="Bl-dash Bl-compact"> - <li>queue a packet,</li> - <li>drop (and free) a packet if the enqueue operation fails.</li> -</ul> -<p class="Pp">If the enqueue operation fails, <var class="Fa">error</var> is set - to <code class="Er">ENOBUFS</code>. The <var class="Fa">m</var> mbuf is - freed by the queuing discipline. The caller should not touch mbuf after - calling <code class="Fn">IFQ_ENQUEUE</code>() so that the caller may need to - copy <var class="Va">m_pkthdr.len</var> or <var class="Va">m_flags</var> - field beforehand for statistics. <code class="Fn">IFQ_HANDOFF</code>() and - <code class="Fn">IFQ_HANDOFF_ADJ</code>() can be used if only default - interface statistics and an immediate call to - <code class="Fn">if_start</code>() are desired. The caller should not use - <code class="Fn">senderr</code>() since mbuf was already freed.</p> -<p class="Pp">The new style <code class="Fn">if_output</code>() looks as - follows:</p> -<div class="Bd Pp Li"> -<pre> ##old-style## ##new-style## - | - int | int - ether_output(ifp, m0, dst, rt0) | ether_output(ifp, m0, dst, rt0) - { | { - ...... | ...... - | - | mflags = m->m_flags; - | len = m->m_pkthdr.len; - s = splimp(); | s = splimp(); - if (IF_QFULL(&ifp->if_snd)) { | IFQ_ENQUEUE(&ifp->if_snd, m, - | error); - IF_DROP(&ifp->if_snd); | if (error != 0) { - splx(s); | splx(s); - senderr(ENOBUFS); | return (error); - } | } - IF_ENQUEUE(&ifp->if_snd, m); | - ifp->if_obytes += | ifp->if_obytes += len; - m->m_pkthdr.len; | - if (m->m_flags & M_MCAST) | if (mflags & M_MCAST) - ifp->if_omcasts++; | ifp->if_omcasts++; - | - if ((ifp->if_flags & IFF_OACTIVE) | if ((ifp->if_flags & IFF_OACTIVE) - == 0) | == 0) - (*ifp->if_start)(ifp); | (*ifp->if_start)(ifp); - splx(s); | splx(s); - return (error); | return (error); - | - bad: | bad: - if (m) | if (m) - m_freem(m); | m_freem(m); - return (error); | return (error); - } | } - |</pre> -</div> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="HOW_TO_CONVERT_THE_EXISTING_DRIVERS"><a class="permalink" href="#HOW_TO_CONVERT_THE_EXISTING_DRIVERS">HOW - TO CONVERT THE EXISTING DRIVERS</a></h1> -<p class="Pp">First, make sure the corresponding - <a class="permalink" href="#if_output"><code class="Fn" id="if_output">if_output</code></a>() - is already converted to the new style.</p> -<p class="Pp">Look for <var class="Va">if_snd</var> in the driver. Probably, you - need to make changes to the lines that include - <var class="Va">if_snd</var>.</p> -<section class="Ss"> -<h2 class="Ss" id="Empty_check_operation"><a class="permalink" href="#Empty_check_operation">Empty - check operation</a></h2> -<p class="Pp">If the code checks <var class="Va">ifq_head</var> to see whether - the queue is empty or not, use - <a class="permalink" href="#IFQ_IS_EMPTY~2"><code class="Fn" id="IFQ_IS_EMPTY~2">IFQ_IS_EMPTY</code></a>().</p> -<div class="Bd Pp Li"> -<pre> ##old-style## ##new-style## - | - if (ifp->if_snd.ifq_head != NULL) | if (!IFQ_IS_EMPTY(&ifp->if_snd)) - |</pre> -</div> -<code class="Fn">IFQ_IS_EMPTY</code>() only checks if there is any packet stored - in the queue. Note that even when <code class="Fn">IFQ_IS_EMPTY</code>() is - <code class="Dv">FALSE</code>, <code class="Fn">IFQ_DEQUEUE</code>() could - still return <code class="Dv">NULL</code> if the queue is under rate-limiting. -</section> -<section class="Ss"> -<h2 class="Ss" id="Dequeue_operation"><a class="permalink" href="#Dequeue_operation">Dequeue - operation</a></h2> -<p class="Pp">Replace - <a class="permalink" href="#IF_DEQUEUE"><code class="Fn" id="IF_DEQUEUE">IF_DEQUEUE</code></a>() - by <code class="Fn">IFQ_DEQUEUE</code>(). Always check whether the dequeued - mbuf is <code class="Dv">NULL</code> or not. Note that even when - <code class="Fn">IFQ_IS_EMPTY</code>() is <code class="Dv">FALSE</code>, - <code class="Fn">IFQ_DEQUEUE</code>() could return - <code class="Dv">NULL</code> due to rate-limiting.</p> -<div class="Bd Pp Li"> -<pre> ##old-style## ##new-style## - | - IF_DEQUEUE(&ifp->if_snd, m); | IFQ_DEQUEUE(&ifp->if_snd, m); - | if (m == NULL) - | return; - |</pre> -</div> -A driver is supposed to call <code class="Fn">if_start</code>() from - transmission complete interrupts in order to trigger the next dequeue. -</section> -<section class="Ss"> -<h2 class="Ss" id="Poll-and-dequeue_operation"><a class="permalink" href="#Poll-and-dequeue_operation">Poll-and-dequeue - operation</a></h2> -<p class="Pp">If the code polls the packet at the head of the queue and actually - uses the packet before dequeuing it, use - <code class="Fn">IFQ_POLL_NOLOCK</code>() and - <code class="Fn">IFQ_DEQUEUE_NOLOCK</code>().</p> -<div class="Bd Pp Li"> -<pre> ##old-style## ##new-style## - | - | IFQ_LOCK(&ifp->if_snd); - m = ifp->if_snd.ifq_head; | IFQ_POLL_NOLOCK(&ifp->if_snd, m); - if (m != NULL) { | if (m != NULL) { - | - /* use m to get resources */ | /* use m to get resources */ - if (something goes wrong) | if (something goes wrong) - | IFQ_UNLOCK(&ifp->if_snd); - return; | return; - | - IF_DEQUEUE(&ifp->if_snd, m); | IFQ_DEQUEUE_NOLOCK(&ifp->if_snd, m); - | IFQ_UNLOCK(&ifp->if_snd); - | - /* kick the hardware */ | /* kick the hardware */ - } | } - |</pre> -</div> -It is guaranteed that <code class="Fn">IFQ_DEQUEUE_NOLOCK</code>() under the - same lock as a previous <code class="Fn">IFQ_POLL_NOLOCK</code>() returns the - same packet. Note that they need to be guarded by - <code class="Fn">IFQ_LOCK</code>(). -</section> -<section class="Ss"> -<h2 class="Ss" id="Eliminating_IF_PREPEND"><a class="permalink" href="#Eliminating_IF_PREPEND">Eliminating - <a class="permalink" href="#IF_PREPEND"><code class="Fn" id="IF_PREPEND">IF_PREPEND</code></a>()</a></h2> -<p class="Pp">If the code uses <code class="Fn">IF_PREPEND</code>(), you have to - eliminate it unless you can use a “driver managed” queue which - allows the use of <code class="Fn">IFQ_DRV_PREPEND</code>() as a substitute. - A common usage of <code class="Fn">IF_PREPEND</code>() is to cancel the - previous dequeue operation. You have to convert the logic into - poll-and-dequeue.</p> -<div class="Bd Pp Li"> -<pre> ##old-style## ##new-style## - | - | IFQ_LOCK(&ifp->if_snd); - IF_DEQUEUE(&ifp->if_snd, m); | IFQ_POLL_NOLOCK(&ifp->if_snd, m); - if (m != NULL) { | if (m != NULL) { - | - if (something_goes_wrong) { | if (something_goes_wrong) { - IF_PREPEND(&ifp->if_snd, m); | IFQ_UNLOCK(&ifp->if_snd); - return; | return; - } | } - | - | /* at this point, the driver - | * is committed to send this - | * packet. - | */ - | IFQ_DEQUEUE_NOLOCK(&ifp->if_snd, m); - | IFQ_UNLOCK(&ifp->if_snd); - | - /* kick the hardware */ | /* kick the hardware */ - } | } - |</pre> -</div> -</section> -<section class="Ss"> -<h2 class="Ss" id="Purge_operation"><a class="permalink" href="#Purge_operation">Purge - operation</a></h2> -<p class="Pp">Use <code class="Fn">IFQ_PURGE</code>() to empty the queue. Note - that a non-work conserving queue cannot be emptied by a dequeue loop.</p> -<div class="Bd Pp Li"> -<pre> ##old-style## ##new-style## - | - while (ifp->if_snd.ifq_head != NULL) {| IFQ_PURGE(&ifp->if_snd); - IF_DEQUEUE(&ifp->if_snd, m); | - m_freem(m); | - } | - |</pre> -</div> -</section> -<section class="Ss"> -<h2 class="Ss" id="Conversion_using_a_driver_managed_queue"><a class="permalink" href="#Conversion_using_a_driver_managed_queue">Conversion - using a driver managed queue</a></h2> -<p class="Pp">Convert - <a class="permalink" href="#IF_*"><code class="Fn" id="IF_*">IF_*</code></a>() - macros to their equivalent <code class="Fn">IFQ_DRV_*</code>() and employ - <code class="Fn">IFQ_DRV_IS_EMPTY</code>() where appropriate.</p> -<div class="Bd Pp Li"> -<pre> ##old-style## ##new-style## - | - if (ifp->if_snd.ifq_head != NULL) | if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) - |</pre> -</div> -Make sure that calls to <code class="Fn">IFQ_DRV_DEQUEUE</code>(), - <code class="Fn">IFQ_DRV_PREPEND</code>() and - <code class="Fn">IFQ_DRV_PURGE</code>() are protected with a mutex of some - kind. -</section> -<section class="Ss"> -<h2 class="Ss" id="Attach_routine"><a class="permalink" href="#Attach_routine">Attach - routine</a></h2> -<p class="Pp">Use <code class="Fn">IFQ_SET_MAXLEN</code>() to set - <var class="Va">ifq_maxlen</var> to <var class="Fa">len</var>. Initialize - <var class="Va">ifq_drv_maxlen</var> with a sensible value if you plan to - use the <code class="Fn">IFQ_DRV_*</code>() macros. Add - <code class="Fn">IFQ_SET_READY</code>() to show this driver is converted to - the new style. (This is used to distinguish new-style drivers.)</p> -<div class="Bd Pp Li"> -<pre> ##old-style## ##new-style## - | - ifp->if_snd.ifq_maxlen = qsize; | IFQ_SET_MAXLEN(&ifp->if_snd, qsize); - | ifp->if_snd.ifq_drv_maxlen = qsize; - | IFQ_SET_READY(&ifp->if_snd); - if_attach(ifp); | if_attach(ifp); - |</pre> -</div> -</section> -<section class="Ss"> -<h2 class="Ss" id="Other_issues"><a class="permalink" href="#Other_issues">Other - issues</a></h2> -<p class="Pp">The new macros for statistics:</p> -<div class="Bd Pp Li"> -<pre> ##old-style## ##new-style## - | - IF_DROP(&ifp->if_snd); | IFQ_INC_DROPS(&ifp->if_snd); - | - ifp->if_snd.ifq_len++; | IFQ_INC_LEN(&ifp->if_snd); - | - ifp->if_snd.ifq_len--; | IFQ_DEC_LEN(&ifp->if_snd); - |</pre> -</div> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="QUEUING_DISCIPLINES"><a class="permalink" href="#QUEUING_DISCIPLINES">QUEUING - DISCIPLINES</a></h1> -<p class="Pp">Queuing disciplines need to maintain <var class="Fa">ifq_len</var> - (used by <code class="Fn">IFQ_IS_EMPTY</code>()). Queuing disciplines also - need to guarantee that the same mbuf is returned if - <code class="Fn">IFQ_DEQUEUE</code>() is called immediately after - <a class="permalink" href="#IFQ_POLL"><code class="Fn" id="IFQ_POLL">IFQ_POLL</code></a>().</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pf(4)</a>, <a class="Xr">pf.conf(5)</a>, - <a class="Xr">pfctl(8)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">ALTQ</code> system first appeared in March - 1997 and found home in the KAME project (https://www.kame.net). It was - imported to <span class="Ux">FreeBSD</span> in 5.3 .</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 20, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/atomic.9 3.html b/static/freebsd/man9/atomic.9 3.html deleted file mode 100644 index fc10c6fe..00000000 --- a/static/freebsd/man9/atomic.9 3.html +++ /dev/null @@ -1,613 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">ATOMIC(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">ATOMIC(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">atomic_add</code>, - <code class="Nm">atomic_clear</code>, <code class="Nm">atomic_cmpset</code>, - <code class="Nm">atomic_fcmpset</code>, - <code class="Nm">atomic_fetchadd</code>, - <code class="Nm">atomic_interrupt_fence</code>, - <code class="Nm">atomic_load</code>, - <code class="Nm">atomic_readandclear</code>, - <code class="Nm">atomic_set</code>, <code class="Nm">atomic_subtract</code>, - <code class="Nm">atomic_store</code>, - <code class="Nm">atomic_thread_fence</code> — <span class="Nd">atomic - operations</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">machine/atomic.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">atomic_add_[acq_|rel_]<type></code>(<var class="Fa" style="white-space: nowrap;">volatile - <type> *p</var>, - <var class="Fa" style="white-space: nowrap;"><type> v</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">atomic_clear_[acq_|rel_]<type></code>(<var class="Fa" style="white-space: nowrap;">volatile - <type> *p</var>, - <var class="Fa" style="white-space: nowrap;"><type> v</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">atomic_cmpset_[acq_|rel_]<type></code>(<var class="Fa">volatile - <type> *dst</var>, <var class="Fa"><type> old</var>, - <var class="Fa"><type> new</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">atomic_fcmpset_[acq_|rel_]<type></code>(<var class="Fa">volatile - <type> *dst</var>, <var class="Fa"><type> *old</var>, - <var class="Fa"><type> new</var>);</p> -<p class="Pp"><var class="Ft"><type></var> - <br/> - <code class="Fn">atomic_fetchadd_<type></code>(<var class="Fa" style="white-space: nowrap;">volatile - <type> *p</var>, - <var class="Fa" style="white-space: nowrap;"><type> v</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">atomic_interrupt_fence</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft"><type></var> - <br/> - <code class="Fn">atomic_load_[acq_]<type></code>(<var class="Fa" style="white-space: nowrap;">const - volatile <type> *p</var>);</p> -<p class="Pp"><var class="Ft"><type></var> - <br/> - <code class="Fn">atomic_readandclear_<type></code>(<var class="Fa" style="white-space: nowrap;">volatile - <type> *p</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">atomic_set_[acq_|rel_]<type></code>(<var class="Fa" style="white-space: nowrap;">volatile - <type> *p</var>, - <var class="Fa" style="white-space: nowrap;"><type> v</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">atomic_subtract_[acq_|rel_]<type></code>(<var class="Fa" style="white-space: nowrap;">volatile - <type> *p</var>, - <var class="Fa" style="white-space: nowrap;"><type> v</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">atomic_store_[rel_]<type></code>(<var class="Fa" style="white-space: nowrap;">volatile - <type> *p</var>, - <var class="Fa" style="white-space: nowrap;"><type> v</var>);</p> -<p class="Pp"><var class="Ft"><type></var> - <br/> - <code class="Fn">atomic_swap_<type></code>(<var class="Fa" style="white-space: nowrap;">volatile - <type> *p</var>, - <var class="Fa" style="white-space: nowrap;"><type> v</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">atomic_testandclear_<type></code>(<var class="Fa" style="white-space: nowrap;">volatile - <type> *p</var>, <var class="Fa" style="white-space: nowrap;">u_int - v</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">atomic_testandset_<type></code>(<var class="Fa" style="white-space: nowrap;">volatile - <type> *p</var>, <var class="Fa" style="white-space: nowrap;">u_int - v</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">atomic_thread_fence_[acq|acq_rel|rel|seq_cst]</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Atomic operations are commonly used to implement reference counts - and as building blocks for synchronization primitives, such as mutexes.</p> -<p class="Pp" id="atomically">All of these operations are performed - <a class="permalink" href="#atomically"><i class="Em">atomically</i></a> - across multiple threads and in the presence of interrupts, meaning that they - are performed in an indivisible manner from the perspective of concurrently - running threads and interrupt handlers.</p> -<p class="Pp">On all architectures supported by <span class="Ux">FreeBSD</span>, - ordinary loads and stores of integers in cache-coherent memory are - inherently atomic if the integer is naturally aligned and its size does not - exceed the processor's word size. However, such loads and stores may be - elided from the program by the compiler, whereas atomic operations are - always performed.</p> -<p class="Pp">When atomic operations are performed on cache-coherent memory, all - operations on the same location are totally ordered.</p> -<p class="Pp" id="torn">When an atomic load is performed on a location in - cache-coherent memory, it reads the entire value that was defined by the - last atomic store to each byte of the location. An atomic load will never - return a value out of thin air. When an atomic store is performed on a - location, no other thread or interrupt handler will observe a - <a class="permalink" href="#torn"><i class="Em">torn write</i></a>, or - partial modification of the location.</p> -<p class="Pp">Except as noted below, the semantics of these operations are - almost identical to the semantics of similarly named C11 atomic - operations.</p> -<section class="Ss"> -<h2 class="Ss" id="Types"><a class="permalink" href="#Types">Types</a></h2> -<p class="Pp">Most atomic operations act upon a specific - <var class="Fa">type</var>. That type is indicated in the function name. In - contrast to C11 atomic operations, <span class="Ux">FreeBSD</span>'s atomic - operations are performed on ordinary integer types. The available types - are:</p> -<p class="Pp"></p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt id="int"><a class="permalink" href="#int"><code class="Li">int</code></a></dt> - <dd>unsigned integer</dd> - <dt id="long"><a class="permalink" href="#long"><code class="Li">long</code></a></dt> - <dd>unsigned long integer</dd> - <dt id="ptr"><a class="permalink" href="#ptr"><code class="Li">ptr</code></a></dt> - <dd>unsigned integer the size of a pointer</dd> - <dt id="32"><a class="permalink" href="#32"><code class="Li">32</code></a></dt> - <dd>unsigned 32-bit integer</dd> - <dt id="64"><a class="permalink" href="#64"><code class="Li">64</code></a></dt> - <dd>unsigned 64-bit integer</dd> -</dl> -</div> -<p class="Pp" id="atomic_add_int">For example, the function to atomically add - two integers is called - <a class="permalink" href="#atomic_add_int"><code class="Fn">atomic_add_int</code></a>().</p> -<p class="Pp">Certain architectures also provide operations for types smaller - than “<code class="Li">int</code>”.</p> -<p class="Pp"></p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt id="char"><a class="permalink" href="#char"><code class="Li">char</code></a></dt> - <dd>unsigned character</dd> - <dt id="short"><a class="permalink" href="#short"><code class="Li">short</code></a></dt> - <dd>unsigned short integer</dd> - <dt id="8"><a class="permalink" href="#8"><code class="Li">8</code></a></dt> - <dd>unsigned 8-bit integer</dd> - <dt id="16"><a class="permalink" href="#16"><code class="Li">16</code></a></dt> - <dd>unsigned 16-bit integer</dd> -</dl> -</div> -<p class="Pp">These types must not be used in machine-independent code.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Acquire_and_Release_Operations"><a class="permalink" href="#Acquire_and_Release_Operations">Acquire - and Release Operations</a></h2> -<p class="Pp">By default, a thread's accesses to different memory locations - might not be performed in - <a class="permalink" href="#program"><i class="Em" id="program">program - order</i></a>, that is, the order in which the accesses appear in the source - code. To optimize the program's execution, both the compiler and processor - might reorder the thread's accesses. However, both ensure that their - reordering of the accesses is not visible to the thread. Otherwise, the - traditional memory model that is expected by single-threaded programs would - be violated. Nonetheless, other threads in a multithreaded program, such as - the <span class="Ux">FreeBSD</span> kernel, might observe the reordering. - Moreover, in some cases, such as the implementation of synchronization - between threads, arbitrary reordering might result in the incorrect - execution of the program. To constrain the reordering that both the compiler - and processor might perform on a thread's accesses, a programmer can use - atomic operations with <i class="Em">acquire</i> and - <i class="Em">release</i> semantics.</p> -<p class="Pp" id="relaxed">Atomic operations on memory have up to three - variants. The first, or - <a class="permalink" href="#relaxed"><i class="Em">relaxed</i></a> variant, - performs the operation without imposing any ordering constraints on accesses - to other memory locations. This variant is the default. The second variant - has acquire semantics, and the third variant has release semantics.</p> -<p class="Pp" id="atomic_subtract_acq_int">An atomic operation can only have - <i class="Em">acquire</i> semantics if it performs a load from memory. When - an atomic operation has acquire semantics, a load performed as part of the - operation must have completed before any subsequent load or store (by - program order) is performed. Conversely, acquire semantics do not require - that prior loads or stores have completed before a load from the atomic - operation is performed. To denote acquire semantics, the suffix - “<code class="Li">_acq</code>” is inserted into the function - name immediately prior to the - “<code class="Li">_</code>⟨<var class="Fa">type</var>⟩” - suffix. For example, to subtract two integers ensuring that the load of the - value from memory is completed before any subsequent loads and stores are - performed, use - <a class="permalink" href="#atomic_subtract_acq_int"><code class="Fn">atomic_subtract_acq_int</code></a>().</p> -<p class="Pp" id="atomic_add_rel_long">An atomic operation can only have - <i class="Em">release</i> semantics if it performs a store to memory. When - an atomic operation has release semantics, all prior loads or stores (by - program order) must have completed before a store executed as part of the - operation that is performed. Conversely, release semantics do not require - that a store from the atomic operation must have completed before any - subsequent load or store is performed. To denote release semantics, the - suffix “<code class="Li">_rel</code>” is inserted into the - function name immediately prior to the - “<code class="Li">_</code>⟨<var class="Fa">type</var>⟩” - suffix. For example, to add two long integers ensuring that all prior loads - and stores are completed before the store of the result is performed, use - <a class="permalink" href="#atomic_add_rel_long"><code class="Fn">atomic_add_rel_long</code></a>().</p> -<p class="Pp" id="synchronizes">When a release operation by one thread - <a class="permalink" href="#synchronizes"><i class="Em">synchronizes - with</i></a> an acquire operation by another thread, usually meaning that - the acquire operation reads the value written by the release operation, then - the effects of all prior stores by the releasing thread must become visible - to subsequent loads by the acquiring thread. Moreover, the effects of all - stores (by other threads) that were visible to the releasing thread must - also become visible to the acquiring thread. These rules only apply to the - synchronizing threads. Other threads might observe these stores in a - different order.</p> -<p class="Pp">In effect, atomic operations with acquire and release semantics - establish one-way barriers to reordering that enable the implementations of - synchronization primitives to express their ordering requirements without - also imposing unnecessary ordering. For example, for a critical section - guarded by a mutex, an acquire operation when the mutex is locked and a - release operation when the mutex is unlocked will prevent any loads or - stores from moving outside of the critical section. However, they will not - prevent the compiler or processor from moving loads or stores into the - critical section, which does not violate the semantics of a mutex.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Architecture-dependent_caveats_for_compare-and-swap"><a class="permalink" href="#Architecture-dependent_caveats_for_compare-and-swap">Architecture-dependent - caveats for compare-and-swap</a></h2> -<p class="Pp">The - <a class="permalink" href="#atomic__f_cmpset__type_"><code class="Fn" id="atomic__f_cmpset__type_">atomic_[f]cmpset_<type></code></a>() - operations, specifically those without explicitly specified memory ordering, - are defined as relaxed. Consequently, a thread's accesses to memory - locations different from that of the atomic operation can be reordered in - relation to the atomic operation.</p> -<p class="Pp" id="amd64">However, the implementation on the - <a class="permalink" href="#amd64"><b class="Sy">amd64</b></a> and - <a class="permalink" href="#i386"><b class="Sy" id="i386">i386</b></a> - architectures provide sequentially consistent semantics. In particular, the - reordering mentioned above cannot occur.</p> -<p class="Pp" id="arm64/aarch64">On the - <a class="permalink" href="#arm64/aarch64"><b class="Sy">arm64/aarch64</b></a> - architecture, the operation may include either acquire semantics on the - constituent load or release semantics on the constituent store. This means - that accesses to other locations in program order before the atomic, might - be observed as executed after the load that is the part of the atomic - operation (but not after the store from the operation due to release). - Similarly, accesses after the atomic might be observed as executed before - the store.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Thread_Fence_Operations"><a class="permalink" href="#Thread_Fence_Operations">Thread - Fence Operations</a></h2> -<p class="Pp">Alternatively, a programmer can use atomic thread fence operations - to constrain the reordering of accesses. In contrast to other atomic - operations, fences do not, themselves, access memory.</p> -<p class="Pp" id="atomic_thread_fence_acq">When a fence has acquire semantics, - all prior loads (by program order) must have completed before any subsequent - load or store is performed. Thus, an acquire fence is a two-way barrier for - load operations. To denote acquire semantics, the suffix - “<code class="Li">_acq</code>” is appended to the function - name, for example, - <a class="permalink" href="#atomic_thread_fence_acq"><code class="Fn">atomic_thread_fence_acq</code></a>().</p> -<p class="Pp" id="atomic_thread_fence_rel">When a fence has release semantics, - all prior loads or stores (by program order) must have completed before any - subsequent store operation is performed. Thus, a release fence is a two-way - barrier for store operations. To denote release semantics, the suffix - “<code class="Li">_rel</code>” is appended to the function - name, for example, - <a class="permalink" href="#atomic_thread_fence_rel"><code class="Fn">atomic_thread_fence_rel</code></a>().</p> -<p class="Pp" id="atomic_thread_fence_acq_rel">Although - <a class="permalink" href="#atomic_thread_fence_acq_rel"><code class="Fn">atomic_thread_fence_acq_rel</code></a>() - implements both acquire and release semantics, it is not a full barrier. For - example, a store prior to the fence (in program order) may be completed - after a load subsequent to the fence. In contrast, - <a class="permalink" href="#atomic_thread_fence_seq_cst"><code class="Fn" id="atomic_thread_fence_seq_cst">atomic_thread_fence_seq_cst</code></a>() - implements a full barrier. Neither loads nor stores may cross this barrier - in either direction.</p> -<p class="Pp">In C11, a release fence by one thread synchronizes with an acquire - fence by another thread when an atomic load that is prior to the acquire - fence (by program order) reads the value written by an atomic store that is - subsequent to the release fence. In contrast, in - <span class="Ux">FreeBSD</span>, because of the atomicity of ordinary, - naturally aligned loads and stores, fences can also be synchronized by - ordinary loads and stores. This simplifies the implementation and use of - some synchronization primitives in <span class="Ux">FreeBSD</span>.</p> -<p class="Pp">Since neither a compiler nor a processor can foresee which - (atomic) load will read the value written by an (atomic) store, the ordering - constraints imposed by fences must be more restrictive than acquire loads - and release stores. Essentially, this is why fences are two-way - barriers.</p> -<p class="Pp">Although fences impose more restrictive ordering than acquire - loads and release stores, by separating access from ordering, they can - sometimes facilitate more efficient implementations of synchronization - primitives. For example, they can be used to avoid executing a memory - barrier until a memory access shows that some condition is satisfied.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Interrupt_Fence_Operations"><a class="permalink" href="#Interrupt_Fence_Operations">Interrupt - Fence Operations</a></h2> -<p class="Pp">The - <a class="permalink" href="#atomic_interrupt_fence"><code class="Fn" id="atomic_interrupt_fence">atomic_interrupt_fence</code></a>() - function establishes ordering between its call location and any interrupt - handler executing on the same CPU. It is modeled after the similar C11 - function - <a class="permalink" href="#atomic_signal_fence"><code class="Fn" id="atomic_signal_fence">atomic_signal_fence</code></a>(), - and adapted for the kernel environment.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Multiple_Processors"><a class="permalink" href="#Multiple_Processors">Multiple - Processors</a></h2> -<p class="Pp">In multiprocessor systems, the atomicity of the atomic operations - on memory depends on support for cache coherence in the underlying - architecture. In general, cache coherence on the default memory type, - <code class="Dv">VM_MEMATTR_DEFAULT</code>, is guaranteed by all - architectures that are supported by <span class="Ux">FreeBSD</span>. For - example, cache coherence is guaranteed on write-back memory by the amd64 and - i386 architectures. However, on some architectures, cache coherence might - not be enabled on all memory types. To determine if cache coherence is - enabled for a non-default memory type, consult the architecture's - documentation.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Semantics"><a class="permalink" href="#Semantics">Semantics</a></h2> -<p class="Pp">This section describes the semantics of each operation using a C - like notation.</p> -<dl class="Bl-hang"> - <dt id="atomic_add"><a class="permalink" href="#atomic_add"><code class="Fn">atomic_add</code></a>(<var class="Fa">p</var>, - <var class="Fa">v</var>)</dt> - <dd> - <div class="Bd Li"> - <pre>*p += v;</pre> - </div> - </dd> - <dt id="atomic_clear"><a class="permalink" href="#atomic_clear"><code class="Fn">atomic_clear</code></a>(<var class="Fa">p</var>, - <var class="Fa">v</var>)</dt> - <dd> - <div class="Bd Li"> - <pre>*p &= ~v;</pre> - </div> - </dd> - <dt><code class="Fn">atomic_cmpset</code>(<var class="Fa">dst</var>, - <var class="Fa">old</var>, <var class="Fa">new</var>)</dt> - <dd> - <div class="Bd Li"> - <pre>if (*dst == old) { - *dst = new; - return (1); -} else - return (0);</pre> - </div> - </dd> -</dl> -<p class="Pp" id="atomic_cmpset">Some architectures do not implement the - <a class="permalink" href="#atomic_cmpset"><code class="Fn">atomic_cmpset</code></a>() - functions for the types “<code class="Li">char</code>”, - “<code class="Li">short</code>”, - “<code class="Li">8</code>”, and - “<code class="Li">16</code>”.</p> -<dl class="Bl-hang"> - <dt><code class="Fn">atomic_fcmpset</code>(<var class="Fa">dst</var>, - <var class="Fa">*old</var>, <var class="Fa">new</var>)</dt> - <dd></dd> -</dl> -<p class="Pp" id="Compare">On architectures implementing - <a class="permalink" href="#Compare"><i class="Em">Compare And Swap</i></a> - operation in hardware, the functionality can be described as</p> -<div class="Bd Bd-indent Li"> -<pre>if (*dst == *old) { - *dst = new; - return (1); -} else { - *old = *dst; - return (0); -}</pre> -</div> -On architectures which provide - <a class="permalink" href="#Load"><i class="Em" id="Load">Load Linked/Store - Conditional</i></a> primitive, the write to <code class="Dv">*dst</code> might - also fail for several reasons, most important of which is a parallel write to - <code class="Dv">*dst</code> cache line by other CPU. In this case - <a class="permalink" href="#atomic_fcmpset"><code class="Fn" id="atomic_fcmpset">atomic_fcmpset</code></a>() - function also returns <code class="Dv">false</code>, despite -<div class="Bd Bd-indent"><code class="Li">*old == *dst</code></div> -. -<p class="Pp" id="atomic_fcmpset~2">Some architectures do not implement the - <a class="permalink" href="#atomic_fcmpset~2"><code class="Fn">atomic_fcmpset</code></a>() - functions for the types “<code class="Li">char</code>”, - “<code class="Li">short</code>”, - “<code class="Li">8</code>”, and - “<code class="Li">16</code>”.</p> -<dl class="Bl-hang"> - <dt><code class="Fn">atomic_fetchadd</code>(<var class="Fa">p</var>, - <var class="Fa">v</var>)</dt> - <dd> - <div class="Bd Li"> - <pre>tmp = *p; -*p += v; -return (tmp);</pre> - </div> - </dd> -</dl> -<p class="Pp" id="atomic_fetchadd">The - <a class="permalink" href="#atomic_fetchadd"><code class="Fn">atomic_fetchadd</code></a>() - functions are only implemented for the types - “<code class="Li">int</code>”, - “<code class="Li">long</code>” and - “<code class="Li">32</code>” and do not have any variants with - memory barriers at this time.</p> -<dl class="Bl-hang"> - <dt id="atomic_load"><a class="permalink" href="#atomic_load"><code class="Fn">atomic_load</code></a>(<var class="Fa">p</var>)</dt> - <dd> - <div class="Bd Li"> - <pre>return (*p);</pre> - </div> - </dd> - <dt><code class="Fn">atomic_readandclear</code>(<var class="Fa">p</var>)</dt> - <dd> - <div class="Bd Li"> - <pre>tmp = *p; -*p = 0; -return (tmp);</pre> - </div> - </dd> -</dl> -<p class="Pp" id="atomic_readandclear">The - <a class="permalink" href="#atomic_readandclear"><code class="Fn">atomic_readandclear</code></a>() - functions are not implemented for the types - “<code class="Li">char</code>”, - “<code class="Li">short</code>”, - “<code class="Li">ptr</code>”, - “<code class="Li">8</code>”, and - “<code class="Li">16</code>” and do not have any variants with - memory barriers at this time.</p> -<dl class="Bl-hang"> - <dt id="atomic_set"><a class="permalink" href="#atomic_set"><code class="Fn">atomic_set</code></a>(<var class="Fa">p</var>, - <var class="Fa">v</var>)</dt> - <dd> - <div class="Bd Li"> - <pre>*p |= v;</pre> - </div> - </dd> - <dt id="atomic_subtract"><a class="permalink" href="#atomic_subtract"><code class="Fn">atomic_subtract</code></a>(<var class="Fa">p</var>, - <var class="Fa">v</var>)</dt> - <dd> - <div class="Bd Li"> - <pre>*p -= v;</pre> - </div> - </dd> - <dt id="atomic_store"><a class="permalink" href="#atomic_store"><code class="Fn">atomic_store</code></a>(<var class="Fa">p</var>, - <var class="Fa">v</var>)</dt> - <dd> - <div class="Bd Li"> - <pre>*p = v;</pre> - </div> - </dd> - <dt><code class="Fn">atomic_swap</code>(<var class="Fa">p</var>, - <var class="Fa">v</var>)</dt> - <dd> - <div class="Bd Li"> - <pre>tmp = *p; -*p = v; -return (tmp);</pre> - </div> - </dd> -</dl> -<p class="Pp" id="atomic_swap">The - <a class="permalink" href="#atomic_swap"><code class="Fn">atomic_swap</code></a>() - functions are not implemented for the types - “<code class="Li">char</code>”, - “<code class="Li">short</code>”, - “<code class="Li">ptr</code>”, - “<code class="Li">8</code>”, and - “<code class="Li">16</code>” and do not have any variants with - memory barriers at this time.</p> -<dl class="Bl-hang"> - <dt id="atomic_testandclear"><a class="permalink" href="#atomic_testandclear"><code class="Fn">atomic_testandclear</code></a>(<var class="Fa">p</var>, - <var class="Fa">v</var>)</dt> - <dd> - <div class="Bd Li"> - <pre>bit = 1 << (v % (sizeof(*p) * NBBY)); -tmp = (*p & bit) != 0; -*p &= ~bit; -return (tmp);</pre> - </div> - </dd> -</dl> -<dl class="Bl-hang"> - <dt><code class="Fn">atomic_testandset</code>(<var class="Fa">p</var>, - <var class="Fa">v</var>)</dt> - <dd> - <div class="Bd Li"> - <pre>bit = 1 << (v % (sizeof(*p) * NBBY)); -tmp = (*p & bit) != 0; -*p |= bit; -return (tmp);</pre> - </div> - </dd> -</dl> -<p class="Pp" id="atomic_testandset">The - <a class="permalink" href="#atomic_testandset"><code class="Fn">atomic_testandset</code></a>() - and - <a class="permalink" href="#atomic_testandclear~2"><code class="Fn" id="atomic_testandclear~2">atomic_testandclear</code></a>() - functions are only implemented for the types - “<code class="Li">int</code>”, - “<code class="Li">long</code>”, “ptr”, - “<code class="Li">32</code>”, and - “<code class="Li">64</code>” and generally do not have any - variants with memory barriers at this time except for - <a class="permalink" href="#atomic_testandset_acq_long"><code class="Fn" id="atomic_testandset_acq_long">atomic_testandset_acq_long</code></a>().</p> -<p class="Pp">The type “<code class="Li">64</code>” is currently - not implemented for some of the atomic operations on the arm, i386, and - powerpc architectures.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">atomic_cmpset</code>() function returns the - result of the compare operation. The - <code class="Fn">atomic_fcmpset</code>() function returns - <code class="Dv">true</code> if the operation succeeded. Otherwise it - returns <code class="Dv">false</code> and sets <var class="Va">*old</var> to - the found value. The <code class="Fn">atomic_fetchadd</code>(), - <code class="Fn">atomic_load</code>(), - <code class="Fn">atomic_readandclear</code>(), and - <code class="Fn">atomic_swap</code>() functions return the value at the - specified address. The <code class="Fn">atomic_testandset</code>() and - <code class="Fn">atomic_testandclear</code>() function returns the result of - the test operation.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">This example uses the - <code class="Fn">atomic_cmpset_acq_ptr</code>() and - <code class="Fn">atomic_set_ptr</code>() functions to obtain a sleep mutex - and handle recursion. Since the <var class="Va">mtx_lock</var> member of a - <var class="Vt">struct mtx</var> is a pointer, the - “<code class="Li">ptr</code>” type is used.</p> -<div class="Bd Pp Li"> -<pre>/* Try to obtain mtx_lock once. */ -#define _obtain_lock(mp, tid) \ - atomic_cmpset_acq_ptr(&(mp)->mtx_lock, MTX_UNOWNED, (tid)) - -/* Get a sleep lock, deal with recursion inline. */ -#define _get_sleep_lock(mp, tid, opts, file, line) do { \ - uintptr_t _tid = (uintptr_t)(tid); \ - \ - if (!_obtain_lock(mp, tid)) { \ - if (((mp)->mtx_lock & MTX_FLAGMASK) != _tid) \ - _mtx_lock_sleep((mp), _tid, (opts), (file), (line));\ - else { \ - atomic_set_ptr(&(mp)->mtx_lock, MTX_RECURSE); \ - (mp)->mtx_recurse++; \ - } \ - } \ -} while (0)</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Fn">atomic_add</code>(), - <code class="Fn">atomic_clear</code>(), - <code class="Fn">atomic_set</code>(), and - <code class="Fn">atomic_subtract</code>() operations were introduced in - <span class="Ux">FreeBSD 3.0</span>. Initially, these operations were - defined on the types “<code class="Li">char</code>”, - “<code class="Li">short</code>”, - “<code class="Li">int</code>”, and - “<code class="Li">long</code>”.</p> -<p class="Pp">The <code class="Fn">atomic_cmpset</code>(), - <code class="Fn">atomic_load_acq</code>(), - <code class="Fn">atomic_readandclear</code>(), and - <code class="Fn">atomic_store_rel</code>() operations were added in - <span class="Ux">FreeBSD 5.0</span>. Simultaneously, the acquire and release - variants were introduced, and support was added for operation on the types - “<code class="Li">8</code>”, - “<code class="Li">16</code>”, - “<code class="Li">32</code>”, - “<code class="Li">64</code>”, and - “<code class="Li">ptr</code>”.</p> -<p class="Pp">The <code class="Fn">atomic_fetchadd</code>() operation was added - in <span class="Ux">FreeBSD 6.0</span>.</p> -<p class="Pp">The <code class="Fn">atomic_swap</code>() and - <code class="Fn">atomic_testandset</code>() operations were added in - <span class="Ux">FreeBSD 10.0</span>.</p> -<p class="Pp">The <code class="Fn">atomic_testandclear</code>() and - <code class="Fn">atomic_thread_fence</code>() operations were added in - <span class="Ux">FreeBSD 11.0</span>.</p> -<p class="Pp">The relaxed variants of <code class="Fn">atomic_load</code>() and - <code class="Fn">atomic_store</code>() were added in - <span class="Ux">FreeBSD 12.0</span>.</p> -<p class="Pp">The <code class="Fn">atomic_interrupt_fence</code>() operation was - added in <span class="Ux">FreeBSD 13.0</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 16, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/backlight.9 3.html b/static/freebsd/man9/backlight.9 3.html deleted file mode 100644 index 59865e09..00000000 --- a/static/freebsd/man9/backlight.9 3.html +++ /dev/null @@ -1,97 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BACKLIGHT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BACKLIGHT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">backlight</code>, - <code class="Nm">backlight_register</code>, - <code class="Nm">backlight_destroy</code>, - <code class="Nm">BACKLIGHT_GET_STATUS</code>, - <code class="Nm">BACKLIGHT_SET_STATUS</code> — - <span class="Nd">BACKLIGHT methods</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="Cd">device backlight</code> - <br/> - <code class="In">#include <<a class="In">backlight_if.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">sys/sys/backlight.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">BACKLIGHT_GET_STATUS</code>(<var class="Fa" style="white-space: nowrap;">device_t - bus</var>, <var class="Fa" style="white-space: nowrap;">struct - backlight_props *props</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">BACKLIGHT_SET_STATUS</code>(<var class="Fa" style="white-space: nowrap;">device_t - bus</var>, <var class="Fa" style="white-space: nowrap;">struct - backlight_props *props</var>);</p> -<p class="Pp"><var class="Ft">struct cdev *</var> - <br/> - <code class="Fn">backlight_register</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>, <var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">backlight_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct - cdev *cdev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The backlight driver provides a generic way for handling a panel - backlight.</p> -<p class="Pp" id="backlight_register">Drivers for backlight system register - themselves globally using the - <a class="permalink" href="#backlight_register"><code class="Fn">backlight_register</code></a>() - function. They must define two methods, - <a class="permalink" href="#BACKLIGHT_GET_STATUS"><code class="Fn" id="BACKLIGHT_GET_STATUS">BACKLIGHT_GET_STATUS</code></a>() - which is used to query the current brightness level and - <a class="permalink" href="#BACKLIGHT_SET_STATUS"><code class="Fn" id="BACKLIGHT_SET_STATUS">BACKLIGHT_SET_STATUS</code></a>() - which is used to update it.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="INTERFACE"><a class="permalink" href="#INTERFACE">INTERFACE</a></h1> -<dl class="Bl-tag"> - <dt><code class="Fn">BACKLIGHT_GET_STATUS</code>(<var class="Fa">device_t - bus</var>, <var class="Fa">struct backlight_props *props</var>)</dt> - <dd>Driver fills the current brightless level and the optional supported - levels.</dd> - <dt><code class="Fn">BACKLIGHT_SET_STATUS</code>(<var class="Fa">device_t - bus</var>, <var class="Fa">struct backlight_props *props</var>)</dt> - <dd>Driver update the backlight level based on the brightness member of the - props struct.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="FILES"><a class="permalink" href="#FILES">FILES</a></h1> -<dl class="Bl-tag"> - <dt><span class="Pa">/dev/backlight/*</span></dt> - <dd style="width: auto;"> </dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">backlight(8)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">backlight</code> interface first appear in - <span class="Ux">FreeBSD 13.0</span>. The <code class="Nm">backlight</code> - driver and manual page was written by <span class="An">Emmanuel Vadot</span> - <<a class="Mt" href="mailto:manu@FreeBSD.org">manu@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 2, 2020</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/bhnd.9 3.html b/static/freebsd/man9/bhnd.9 3.html deleted file mode 100644 index cb26480d..00000000 --- a/static/freebsd/man9/bhnd.9 3.html +++ /dev/null @@ -1,2322 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BHND(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BHND(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bhnd</code> — <span class="Nd">BHND driver - programming interface</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">dev/bhnd/bhnd.h</a>></code></p> -<section class="Ss"> -<h2 class="Ss">Bus Resource Functions</h2> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_activate_resource</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">int type</var>, <var class="Fa">int rid</var>, - <var class="Fa">struct bhnd_resource *r</var>);</p> -<p class="Pp"><var class="Ft">struct bhnd_resource *</var> - <br/> - <code class="Fn">bhnd_alloc_resource</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">int type</var>, <var class="Fa">int *rid</var>, - <var class="Fa">rman_res_t start</var>, <var class="Fa">rman_res_t - end</var>, <var class="Fa">rman_res_t count</var>, <var class="Fa">u_int - flags</var>);</p> -<p class="Pp"><var class="Ft">struct bhnd_resource *</var> - <br/> - <code class="Fn">bhnd_alloc_resource_any</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">int type</var>, <var class="Fa">int *rid</var>, - <var class="Fa">u_int flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_alloc_resources</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">struct resource_spec *rs</var>, - <var class="Fa">struct bhnd_resource **res</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_deactivate_resource</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">int type</var>, <var class="Fa">int rid</var>, - <var class="Fa">struct bhnd_resource *r</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_release_resource</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">int type</var>, <var class="Fa">int rid</var>, - <var class="Fa">struct bhnd_resource *r</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_release_resources</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">const struct resource_spec *rs</var>, - <var class="Fa">struct bhnd_resource **res</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss">Bus Space Functions</h2> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_barrier</code>(<var class="Fa">struct bhnd_resource - *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">bus_size_t length</var>, <var class="Fa">int - flags</var>);</p> -<p class="Pp"><var class="Ft">uint8_t</var> - <br/> - <code class="Fn">bhnd_bus_read_1</code>(<var class="Fa" style="white-space: nowrap;">struct - bhnd_resource *r</var>, - <var class="Fa" style="white-space: nowrap;">bus_size_t offset</var>);</p> -<p class="Pp"><var class="Ft">uint16_t</var> - <br/> - <code class="Fn">bhnd_bus_read_2</code>(<var class="Fa" style="white-space: nowrap;">struct - bhnd_resource *r</var>, - <var class="Fa" style="white-space: nowrap;">bus_size_t offset</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">bhnd_bus_read_4</code>(<var class="Fa" style="white-space: nowrap;">struct - bhnd_resource *r</var>, - <var class="Fa" style="white-space: nowrap;">bus_size_t offset</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_read_multi_1</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint8_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_read_multi_2</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint16_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_read_multi_4</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint32_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_read_multi_stream_1</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint8_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_read_multi_stream_2</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint16_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_read_multi_stream_4</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint32_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_read_region_1</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint8_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_read_region_2</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint16_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_read_region_4</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint32_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_read_region_stream_1</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint8_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_read_region_stream_2</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint16_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_read_region_stream_4</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint32_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_read_stream_1</code>(<var class="Fa" style="white-space: nowrap;">struct - bhnd_resource *r</var>, - <var class="Fa" style="white-space: nowrap;">bus_size_t offset</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_read_stream_2</code>(<var class="Fa" style="white-space: nowrap;">struct - bhnd_resource *r</var>, - <var class="Fa" style="white-space: nowrap;">bus_size_t offset</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">bhnd_bus_read_stream_4</code>(<var class="Fa" style="white-space: nowrap;">struct - bhnd_resource *r</var>, - <var class="Fa" style="white-space: nowrap;">bus_size_t offset</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_set_multi_1</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint8_t value</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_set_multi_2</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint16_t value</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_set_multi_4</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint32_t value</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_set_region_1</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint8_t value</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_set_region_2</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint16_t value</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_set_region_4</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint32_t value</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_write_1</code>(<var class="Fa" style="white-space: nowrap;">struct - bhnd_resource *r</var>, <var class="Fa" style="white-space: nowrap;">uint8_t - value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_write_2</code>(<var class="Fa" style="white-space: nowrap;">struct - bhnd_resource *r</var>, - <var class="Fa" style="white-space: nowrap;">uint16_t value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_write_4</code>(<var class="Fa" style="white-space: nowrap;">struct - bhnd_resource *r</var>, - <var class="Fa" style="white-space: nowrap;">uint32_t value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_write_multi_1</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint8_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_write_multi_2</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint16_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_write_multi_4</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint32_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_write_multi_stream_1</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint8_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_write_multi_stream_2</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint16_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_write_multi_stream_4</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint32_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_write_region_1</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint8_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_write_region_2</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint16_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_write_region_4</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint32_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_write_region_stream_1</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint8_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_write_region_stream_2</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint16_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_write_region_stream_4</code>(<var class="Fa">struct - bhnd_resource *r</var>, <var class="Fa">bus_size_t offset</var>, - <var class="Fa">uint32_t *datap</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_write_stream_1</code>(<var class="Fa" style="white-space: nowrap;">struct - bhnd_resource *r</var>, <var class="Fa" style="white-space: nowrap;">uint8_t - value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_write_stream_2</code>(<var class="Fa" style="white-space: nowrap;">struct - bhnd_resource *r</var>, - <var class="Fa" style="white-space: nowrap;">uint16_t value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_bus_write_stream_4</code>(<var class="Fa" style="white-space: nowrap;">struct - bhnd_resource *r</var>, - <var class="Fa" style="white-space: nowrap;">uint32_t value</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss">Device Configuration Functions</h2> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_read_ioctl</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">uint16_t - *ioctl</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_write_ioctl</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">uint16_t - value</var>, <var class="Fa" style="white-space: nowrap;">uint16_t - mask</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_read_iost</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">uint16_t - *iost</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">bhnd_read_config</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">void *value</var>, - <var class="Fa">u_int width</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_write_config</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">const void - *value</var>, <var class="Fa">u_int width</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_reset_hw</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">uint16_t - ioctl</var>, <var class="Fa" style="white-space: nowrap;">uint16_t - reset_ioctl</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_suspend_hw</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">uint16_t - ioctl</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">bhnd_is_hw_suspended</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss">Device Information Functions</h2> -<p class="Pp"><var class="Ft">bhnd_attach_type</var> - <br/> - <code class="Fn">bhnd_get_attach_type</code>(<var class="Fa">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">const struct bhnd_chipid *</var> - <br/> - <code class="Fn">bhnd_get_chipid</code>(<var class="Fa">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">bhnd_devclass_t</var> - <br/> - <code class="Fn">bhnd_get_class</code>(<var class="Fa">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">u_int</var> - <br/> - <code class="Fn">bhnd_get_core_index</code>(<var class="Fa">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">struct bhnd_core_info</var> - <br/> - <code class="Fn">bhnd_get_core_info</code>(<var class="Fa">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_get_core_unit</code>(<var class="Fa">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">uint16_t</var> - <br/> - <code class="Fn">bhnd_get_device</code>(<var class="Fa">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">const char *</var> - <br/> - <code class="Fn">bhnd_get_device_name</code>(<var class="Fa">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">uint8_t</var> - <br/> - <code class="Fn">bhnd_get_hwrev</code>(<var class="Fa">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">uint16_t</var> - <br/> - <code class="Fn">bhnd_get_vendor</code>(<var class="Fa">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">const char *</var> - <br/> - <code class="Fn">bhnd_get_vendor_name</code>(<var class="Fa">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_read_board_info</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">struct bhnd_board_info *info</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss">Device Matching Functions</h2> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">bhnd_board_matches</code>(<var class="Fa">const struct - bhnd_board_info *board</var>, <var class="Fa">const struct bhnd_board_match - *desc</var>);</p> -<p class="Pp"><var class="Ft">device_t</var> - <br/> - <code class="Fn">bhnd_bus_match_child</code>(<var class="Fa">device_t - bus</var>, <var class="Fa">const struct bhnd_core_match *desc</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">bhnd_chip_matches</code>(<var class="Fa">const struct - bhnd_chipid *chip</var>, <var class="Fa">const struct bhnd_chip_match - *desc</var>);</p> -<p class="Pp"><var class="Ft">struct bhnd_core_match</var> - <br/> - <code class="Fn">bhnd_core_get_match_desc</code>(<var class="Fa">const struct - bhnd_core_info *core</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">bhnd_core_matches</code>(<var class="Fa">const struct - bhnd_core_info *core</var>, <var class="Fa">const struct bhnd_core_match - *desc</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">bhnd_cores_equal</code>(<var class="Fa">const struct - bhnd_core_info *lhs</var>, <var class="Fa">const struct bhnd_core_info - *rhs</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">bhnd_hwrev_matches</code>(<var class="Fa">uint16_t - hwrev</var>, <var class="Fa">const struct bhnd_hwrev_match *desc</var>);</p> -<p class="Pp"><var class="Ft">const struct bhnd_core_info *</var> - <br/> - <code class="Fn">bhnd_match_core</code>(<var class="Fa">const struct - bhnd_core_info *cores</var>, <var class="Fa">u_int num_cores</var>, - <var class="Fa">const struct bhnd_core_match *desc</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss">Device Table Functions</h2> -<p class="Pp"><var class="Ft">const struct bhnd_device *</var> - <br/> - <code class="Fn">bhnd_device_lookup</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">const struct bhnd_device *table</var>, - <var class="Fa">size_t entry_size</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">bhnd_device_matches</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">const struct bhnd_device_match *desc</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">bhnd_device_quirks</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">const struct bhnd_device *table</var>, - <var class="Fa">size_t entry_size</var>);</p> -<p class="Pp"><code class="Fn">BHND_BOARD_QUIRK</code>(<var class="Fa">board</var>, - <var class="Fa">flags</var>);</p> -<p class="Pp"><code class="Fn">BHND_CHIP_QUIRK</code>(<var class="Fa">chip</var>, - <var class="Fa">hwrev</var>, <var class="Fa">flags</var>);</p> -<p class="Pp"><code class="Fn">BHND_CORE_QUIRK</code>(<var class="Fa">hwrev</var>, - <var class="Fa">flags</var>);</p> -<p class="Pp"><code class="Fn">BHND_DEVICE</code>(<var class="Fa">vendor</var>, - <var class="Fa">device</var>, <var class="Fa">desc</var>, - <var class="Fa">quirks</var>, <var class="Fa">...</var>);</p> -<p class="Pp"><code class="Fn">BHND_DEVICE_IS_END</code>(<var class="Fa">struct - bhnd_device *d</var>);</p> -<p class="Pp"><code class="Fn">BHND_DEVICE_QUIRK_IS_END</code>(<var class="Fa">struct - bhnd_device_quirk *q</var>);</p> -<p class="Pp"><code class="Fn">BHND_PKG_QUIRK</code>(<var class="Fa">chip</var>, - <var class="Fa">pkg</var>, <var class="Fa">flags</var>);</p> -<div class="Bd Pp Li"> -<pre>struct bhnd_device_quirk { - struct bhnd_device_match desc; - uint32_t quirks; -};</pre> -</div> -<div class="Bd Pp Li"> -<pre>struct bhnd_device { - const struct bhnd_device_match core; - const char *desc; - const struct bhnd_device_quirk *quirks_table; - uint32_t device_flags; -};</pre> -</div> -<div class="Bd Pp Li"> -<pre>enum { - BHND_DF_ANY = 0, - BHND_DF_HOSTB = (1 << 0), - BHND_DF_SOC = (1 << 1), - BHND_DF_ADAPTER = (1 << 2) -};</pre> -</div> -<div class="Bd Pp Li"> -<pre>#define BHND_DEVICE_END { { BHND_MATCH_ANY }, NULL, NULL, 0 }</pre> -</div> -<div class="Bd Pp Li"> -<pre>#define BHND_DEVICE_QUIRK_END { { BHND_MATCH_ANY }, 0 }</pre> -</div> -</section> -<section class="Ss"> -<h2 class="Ss">DMA Address Translation Functions</h2> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_get_dma_translation</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">u_int width</var>, <var class="Fa">uint32_t - flags</var>, <var class="Fa">bus_dma_tag_t *dmat</var>, - <var class="Fa">struct bhnd_dma_translation *translation</var>);</p> -<div class="Bd Pp Li"> -<pre>struct bhnd_dma_translation { - bhnd_addr_t base_addr; - bhnd_addr_t addr_mask; - bhnd_addr_t addrext_mask; - uint32_t flags; -};</pre> -</div> -<div class="Bd Pp Li"> -<pre>typedef enum { - BHND_DMA_ADDR_30BIT = 30, - BHND_DMA_ADDR_32BIT = 32, - BHND_DMA_ADDR_64BIT = 64 -} bhnd_dma_addrwidth;</pre> -</div> -<div class="Bd Pp Li"> -<pre>enum bhnd_dma_translation_flags { - BHND_DMA_TRANSLATION_PHYSMAP = (1<<0), - BHND_DMA_TRANSLATION_BYTESWAPPED = (1<<1) -};</pre> -</div> -</section> -<section class="Ss"> -<h2 class="Ss">Interrupt Functions</h2> -<p class="Pp"><var class="Ft">u_int</var> - <br/> - <code class="Fn">bhnd_get_intr_count</code>(<var class="Fa">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_get_intr_ivec</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">u_int intr</var>, <var class="Fa">u_int *ivec</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_map_intr</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">u_int intr</var>, <var class="Fa">rman_res_t - *irq</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_unmap_intr</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">rman_res_t irq</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss">NVRAM Functions</h2> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_nvram_getvar</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">const char *name</var>, <var class="Fa">void *buf</var>, - <var class="Fa">size_t *len</var>, <var class="Fa">bhnd_nvram_type - type</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_nvram_getvar_array</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">const char *name</var>, <var class="Fa">void - *buf</var>, <var class="Fa">size_t size</var>, - <var class="Fa">bhnd_nvram_type type</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_nvram_getvar_int</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">const char *name</var>, <var class="Fa">void - *value</var>, <var class="Fa">int width</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_nvram_getvar_int8</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">int8_t - *value</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_nvram_getvar_int16</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">int16_t - *value</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_nvram_getvar_int32</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">int32_t - *value</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_nvram_getvar_uint</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">const char *name</var>, <var class="Fa">void - *value</var>, <var class="Fa">int width</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_nvram_getvar_uint8</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">const char *name</var>, <var class="Fa">uint8_t - *value</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_nvram_getvar_uint16</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">const char *name</var>, <var class="Fa">uint16_t - *value</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_nvram_getvar_uint32</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">const char *name</var>, <var class="Fa">uint32_t - *value</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_nvram_getvar_str</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">const char *name</var>, <var class="Fa">char - *buf</var>, <var class="Fa">size_t len</var>, <var class="Fa">size_t - *rlen</var>);</p> -<p class="Pp"><var class="Ft">const char *</var> - <br/> - <code class="Fn">bhnd_nvram_string_array_next</code>(<var class="Fa">const - char *inp</var>, <var class="Fa">size_t ilen</var>, <var class="Fa">const - char *prev</var>, <var class="Fa">size_t *olen</var>);</p> -<div class="Bd Pp Li"> -<pre>typedef enum { - BHND_NVRAM_TYPE_UINT8 = 0, - BHND_NVRAM_TYPE_UINT16 = 1, - BHND_NVRAM_TYPE_UINT32 = 2, - BHND_NVRAM_TYPE_UINT64 = 3, - BHND_NVRAM_TYPE_INT8 = 4, - BHND_NVRAM_TYPE_INT16 = 5, - BHND_NVRAM_TYPE_INT32 = 6, - BHND_NVRAM_TYPE_INT64 = 7, - BHND_NVRAM_TYPE_CHAR = 8, - BHND_NVRAM_TYPE_STRING = 9, - BHND_NVRAM_TYPE_BOOL = 10, - BHND_NVRAM_TYPE_NULL = 11, - BHND_NVRAM_TYPE_DATA = 12 - BHND_NVRAM_TYPE_UINT8_ARRAY = 16, - BHND_NVRAM_TYPE_UINT16_ARRAY = 17, - BHND_NVRAM_TYPE_UINT32_ARRAY = 18, - BHND_NVRAM_TYPE_UINT64_ARRAY = 19, - BHND_NVRAM_TYPE_INT8_ARRAY = 20, - BHND_NVRAM_TYPE_INT16_ARRAY = 21, - BHND_NVRAM_TYPE_INT32_ARRAY = 22, - BHND_NVRAM_TYPE_INT64_ARRAY = 23, - BHND_NVRAM_TYPE_CHAR_ARRAY = 24, - BHND_NVRAM_TYPE_STRING_ARRAY = 25, - BHND_NVRAM_TYPE_BOOL_ARRAY = 26 -} bhnd_nvram_type;</pre> -</div> -</section> -<section class="Ss"> -<h2 class="Ss">Port/Region Functions</h2> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_decode_port_rid</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">int type</var>, <var class="Fa">int rid</var>, - <var class="Fa">bhnd_port_type *port_type</var>, <var class="Fa">u_int - *port</var>, <var class="Fa">u_int *region</var>);</p> -<p class="Pp"><var class="Ft">u_int</var> - <br/> - <code class="Fn">bhnd_get_port_count</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">bhnd_port_type type</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_get_port_rid</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">bhnd_port_type type</var>, <var class="Fa">u_int port</var>, - <var class="Fa">u_int region</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_get_region_addr</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">bhnd_port_type port_type</var>, - <var class="Fa">u_int port</var>, <var class="Fa">u_int region</var>, - <var class="Fa">bhnd_addr_t *region_addr</var>, <var class="Fa">bhnd_size_t - *region_size</var>);</p> -<p class="Pp"><var class="Ft">u_int</var> - <br/> - <code class="Fn">bhnd_get_region_count</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">bhnd_port_type type</var>, <var class="Fa">u_int - port</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">bhnd_is_region_valid</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">bhnd_port_type type</var>, <var class="Fa">u_int - port</var>, <var class="Fa">u_int region</var>);</p> -<div class="Bd Pp Li"> -<pre>typedef enum { - BHND_PORT_DEVICE = 0, - BHND_PORT_BRIDGE = 1, - BHND_PORT_AGENT = 2 -} bhnd_port_type;</pre> -</div> -</section> -<section class="Ss"> -<h2 class="Ss">Power Management Functions</h2> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_alloc_pmu</code>(<var class="Fa">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_release_pmu</code>(<var class="Fa">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_enable_clocks</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">uint32_t clocks</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_request_clock</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">bhnd_clock clock</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_get_clock_freq</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">bhnd_clock clock</var>, <var class="Fa">u_int - *freq</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_get_clock_latency</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">bhnd_clock clock</var>, <var class="Fa">u_int - *latency</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_request_ext_rsrc</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">u_int rsrc</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_release_ext_rsrc</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">u_int rsrc</var>);</p> -<div class="Bd Pp Li"> -<pre>typedef enum { - BHND_CLOCK_DYN = (1 << 0), - BHND_CLOCK_ILP = (1 << 1), - BHND_CLOCK_ALP = (1 << 2), - BHND_CLOCK_HT = (1 << 3) -} bhnd_clock;</pre> -</div> -</section> -<section class="Ss"> -<h2 class="Ss">Service Provider Functions</h2> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_register_provider</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">bhnd_service_t service</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_deregister_provider</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">bhnd_service_t service</var>);</p> -<p class="Pp"><var class="Ft">device_t</var> - <br/> - <code class="Fn">bhnd_retain_provider</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">bhnd_service_t service</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_release_provider</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">device_t provider</var>, - <var class="Fa">bhnd_service_t service</var>);</p> -<div class="Bd Pp Li"> -<pre>typedef enum { - BHND_SERVICE_CHIPC, - BHND_SERVICE_PWRCTL, - BHND_SERVICE_PMU, - BHND_SERVICE_NVRAM, - BHND_SERVICE_GPIO, - BHND_SERVICE_ANY = 1000 -} bhnd_service_t;</pre> -</div> -</section> -<section class="Ss"> -<h2 class="Ss">Utility Functions</h2> -<p class="Pp"><var class="Ft">bhnd_erom_class_t *</var> - <br/> - <code class="Fn">bhnd_driver_get_erom_class</code>(<var class="Fa">driver_t - *driver</var>);</p> -<p class="Pp"><var class="Ft">bhnd_devclass_t</var> - <br/> - <code class="Fn">bhnd_find_core_class</code>(<var class="Fa">uint16_t - vendor</var>, <var class="Fa">uint16_t device</var>);</p> -<p class="Pp"><var class="Ft">const char *</var> - <br/> - <code class="Fn">bhnd_find_core_name</code>(<var class="Fa">uint16_t - vendor</var>, <var class="Fa">uint16_t device</var>);</p> -<p class="Pp"><var class="Ft">bhnd_devclass_t</var> - <br/> - <code class="Fn">bhnd_core_class</code>(<var class="Fa">const struct - bhnd_core_info *ci</var>);</p> -<p class="Pp"><var class="Ft">const char *</var> - <br/> - <code class="Fn">bhnd_core_name</code>(<var class="Fa">const struct - bhnd_core_info *ci</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_format_chip_id</code>(<var class="Fa">char - *buffer</var>, <var class="Fa">size_t size</var>, <var class="Fa">uint16_t - chip_id</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_set_custom_core_desc</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">const char *dev_name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_set_default_core_desc</code>(<var class="Fa">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">const char *</var> - <br/> - <code class="Fn">bhnd_vendor_name</code>(<var class="Fa">uint16_t - vendor</var>);</p> -<div class="Bd Pp Li"> -<pre>#define BHND_CHIPID_MAX_NAMELEN 32</pre> -</div> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><code class="Nm">bhnd</code> provides a unified bus and driver - programming interface for the on-chip interconnects and IP cores found in - Broadcom Home Networking Division (BHND) devices.</p> -<p class="Pp">The BHND device family consists of MIPS/ARM SoCs (System On a - Chip) and host-connected chipsets based on a common library of Broadcom IP - cores, connected via one of two on-chip backplane (hardware bus) - architectures.</p> -<p class="Pp">Hardware designed prior to 2009 used Broadcom's - “SSB” backplane architecture, based on Sonics Silicon's - interconnect IP. Each core on the Sonics backplane vends a 4 KiB register - block, containing both device-specific CSRs, and SSB-specific per-core - device management (enable/reset/etc) registers.</p> -<p class="Pp">Subsequent hardware is based on Broadcom's “BCMA” - backplane, based on ARM's AMBA IP. The IP cores used in earlier SSB-based - devices were adapted for compatibility with the new backplane, with - additional “wrapper” cores providing per-core device - management functions in place of the SSB per-core management registers.</p> -<p class="Pp">When BHND hardware is used as a host-connected peripheral (e.g., - in a PCI Wi-Fi card), the on-chip peripheral controller core is configured - to operate as an endpoint device, bridging access to the SoC hardware:</p> -<ul class="Bl-dash Bd-indent"> - <li>Host access to SoC address space is provided via a set of register windows - (e.g., a set of configurable windows into SoC address space mapped via PCI - BARs)</li> - <li>DMA is supported by the bridge core's sparse mapping of host address space - into the backplane address space. These address regions may be used as a - target for the on-chip DMA engine.</li> - <li>Any backplane interrupt vectors routed to the bridge core may be mapped by - the bridge to host interrupts (e.g., PCI INTx/MSI/MSI-X).</li> -</ul> -<p class="Pp">The <code class="Nm">bhnd</code> driver programming interface - — and <a class="Xr">bhndb(4)</a> host bridge drivers — support - the implementation of common drivers for Broadcom IP cores, whether attached - via a BHND host bridge, or via the native SoC backplane.</p> -<section class="Ss"> -<h2 class="Ss">Bus Resource Functions</h2> -<p class="Pp">The bhnd_resource functions are wrappers for the standard - <var class="Vt">struct resource</var> bus APIs, providing support for - <var class="Vt">SYS_RES_MEMORY</var> resources that, on - <a class="Xr">bhndb(4)</a> bridged chipsets, may require on-demand remapping - of address windows prior to accessing bus memory.</p> -<p class="Pp">These functions are primarily used in the implementation of BHND - platform device drivers that, on host-connected peripherals, must share a - small set of register windows during initial setup and teardown.</p> -<p class="Pp">BHND peripherals are designed to not require register window - remapping during normal operation, and most drivers may safely use the - standard <var class="Vt">struct resource</var> APIs directly.</p> -<p class="Pp" id="bhnd_activate_resource">The - <a class="permalink" href="#bhnd_activate_resource"><code class="Fn">bhnd_activate_resource</code></a>() - function activates a previously allocated resource.</p> -<p class="Pp">The arguments are as follows:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">dev</var></dt> - <dd>The device holding ownership of the allocated resource.</dd> - <dt><var class="Fa">type</var></dt> - <dd>The type of the resource.</dd> - <dt><var class="Fa">rid</var></dt> - <dd>The bus-specific handle that identifies the resource being activated.</dd> - <dt id="bhnd_alloc_resource"><var class="Fa">r</var></dt> - <dd>A pointer to the resource returned by - <a class="permalink" href="#bhnd_alloc_resource"><code class="Fn">bhnd_alloc_resource</code></a>().</dd> -</dl> -<p class="Pp" id="bhnd_alloc_resource~2">The - <a class="permalink" href="#bhnd_alloc_resource~2"><code class="Fn">bhnd_alloc_resource</code></a>() - function allocates a resource from a device's parent - <a class="Xr">bhnd(4)</a> bus.</p> -<p class="Pp">The arguments are as follows:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">dev</var></dt> - <dd>The device requesting resource ownership.</dd> - <dt><var class="Fa">type</var></dt> - <dd>The type of resource to allocate. This may be any type supported by the - standard <a class="Xr">bus_alloc_resource(9)</a> function.</dd> - <dt><var class="Fa">rid</var></dt> - <dd>The bus-specific handle identifying the resource being allocated.</dd> - <dt><var class="Fa">start</var></dt> - <dd>The start address of the resource.</dd> - <dt><var class="Fa">end</var></dt> - <dd>The end address of the resource.</dd> - <dt><var class="Fa">count</var></dt> - <dd>The size of the resource.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>The flags for the resource to be allocated. These may be any values - supported by the standard <a class="Xr">bus_alloc_resource(9)</a> - function.</dd> -</dl> -<p class="Pp">To request that the bus supply the resource's default - <var class="Fa">start</var>, <var class="Fa">end</var>, and - <var class="Fa">count</var> values, pass <var class="Fa">start</var> and - <var class="Fa">end</var> values of 0ul and ~0ul respectively, and a - <var class="Fa">count</var> of 1.</p> -<p class="Pp" id="bhnd_alloc_resource_any">The - <a class="permalink" href="#bhnd_alloc_resource_any"><code class="Fn">bhnd_alloc_resource_any</code></a>() - function is a convenience wrapper for - <code class="Fn">bhnd_alloc_resource</code>(), using the resource's default - <var class="Fa">start</var>, <var class="Fa">end</var>, and - <var class="Fa">count</var> values.</p> -<p class="Pp">The arguments are as follows:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">dev</var></dt> - <dd>The device requesting resource ownership.</dd> - <dt><var class="Fa">type</var></dt> - <dd>The type of resource to allocate. This may be any type supported by the - standard <a class="Xr">bus_alloc_resource(9)</a> function.</dd> - <dt><var class="Fa">rid</var></dt> - <dd>The bus-specific handle identifying the resource being allocated.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>The flags for the resource to be allocated. These may be any values - supported by the standard <a class="Xr">bus_alloc_resource(9)</a> - function.</dd> -</dl> -<p class="Pp" id="bhnd_alloc_resources">The - <a class="permalink" href="#bhnd_alloc_resources"><code class="Fn">bhnd_alloc_resources</code></a>() - function allocates resources defined in resource specification from a - device's parent <a class="Xr">bhnd(4)</a> bus.</p> -<p class="Pp">The arguments are as follows:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">dev</var></dt> - <dd>The device requesting ownership of the resources.</dd> - <dt><var class="Fa">rs</var></dt> - <dd>A standard bus resource specification. If all requested resources, are - successfully allocated, this will be updated with the allocated resource - identifiers.</dd> - <dt><var class="Fa">res</var></dt> - <dd>If all requested resources are successfully allocated, this will be - populated with the allocated <var class="Vt">struct bhnd_resource</var> - instances.</dd> -</dl> -<p class="Pp" id="bhnd_deactivate_resource">The - <a class="permalink" href="#bhnd_deactivate_resource"><code class="Fn">bhnd_deactivate_resource</code></a>() - function deactivates a resource previously activated by. - <code class="Fn">bhnd_activate_resource</code>(). The arguments are as - follows:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">dev</var></dt> - <dd>The device holding ownership of the activated resource.</dd> - <dt><var class="Fa">type</var></dt> - <dd>The type of the resource.</dd> - <dt><var class="Fa">rid</var></dt> - <dd>The bus-specific handle identifying the resource.</dd> - <dt><var class="Fa">r</var></dt> - <dd>A pointer to the resource returned by bhnd_alloc_resource.</dd> -</dl> -<p class="Pp" id="bhnd_release_resource">The - <a class="permalink" href="#bhnd_release_resource"><code class="Fn">bhnd_release_resource</code></a>() - function frees a resource previously returned by - <code class="Fn">bhnd_alloc_resource</code>(). The arguments are as - follows:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">dev</var></dt> - <dd>The device holding ownership of the resource.</dd> - <dt><var class="Fa">type</var></dt> - <dd>The type of the resource.</dd> - <dt><var class="Fa">rid</var></dt> - <dd>The bus-specific handle identifying the resource.</dd> - <dt><var class="Fa">r</var></dt> - <dd>A pointer to the resource returned by bhnd_alloc_resource.</dd> -</dl> -<p class="Pp" id="bhnd_release_resources">The - <a class="permalink" href="#bhnd_release_resources"><code class="Fn">bhnd_release_resources</code></a>() - function frees resources previously returned by - <code class="Fn">bhnd_alloc_resources</code>(). The arguments are as - follows:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">dev</var></dt> - <dd>The device that owns the resources.</dd> - <dt><var class="Fa">rs</var></dt> - <dd>A standard bus resource specification previously initialized by - <code class="Fn">bhnd_alloc_resources</code>().</dd> - <dt><var class="Fa">res</var></dt> - <dd>The resources to be released.</dd> -</dl> -<p class="Pp">The <var class="Vt">bhnd_resource</var> structure contains the - following fields:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">res</var></dt> - <dd>A pointer to the bus <var class="Vt">struct resource</var>.</dd> - <dt><var class="Fa">direct</var></dt> - <dd>If true, the resource requires bus window remapping before it is MMIO - accessible.</dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss">Bus Space Functions</h2> -<p class="Pp">The bhnd_bus_space functions wrap their equivalent - <a class="Xr">bus_space(9)</a> counterparts, and provide support for - accessing bus memory via <var class="Vt">struct bhnd_resource</var>.</p> -<p class="Pp"></p> -<dl class="Bl-ohang Bd-indent Bl-compact"> - <dt id="bhnd_bus_barrier"><a class="permalink" href="#bhnd_bus_barrier"><code class="Fn">bhnd_bus_barrier</code></a>()</dt> - <dd></dd> - <dt id="bhnd_bus__read_write___1_2_4_"><a class="permalink" href="#bhnd_bus__read_write___1_2_4_"><code class="Fn">bhnd_bus_[read|write]_[1|2|4]</code></a>()</dt> - <dd></dd> - <dt id="bhnd_bus__read_multi_write_multi___1_2_4_"><a class="permalink" href="#bhnd_bus__read_multi_write_multi___1_2_4_"><code class="Fn">bhnd_bus_[read_multi|write_multi]_[1|2|4]</code></a>()</dt> - <dd></dd> - <dt id="bhnd_bus__read_multi_stream_write_multi_stream___1_2_4_"><a class="permalink" href="#bhnd_bus__read_multi_stream_write_multi_stream___1_2_4_"><code class="Fn">bhnd_bus_[read_multi_stream|write_multi_stream]_[1|2|4]</code></a>()</dt> - <dd></dd> - <dt id="bhnd_bus__read_region_write_region___1_2_4_"><a class="permalink" href="#bhnd_bus__read_region_write_region___1_2_4_"><code class="Fn">bhnd_bus_[read_region|write_region]_[1|2|4]</code></a>()</dt> - <dd></dd> - <dt id="bhnd_bus__read_region_stream_write_region_stream___1_2_4_"><a class="permalink" href="#bhnd_bus__read_region_stream_write_region_stream___1_2_4_"><code class="Fn">bhnd_bus_[read_region_stream|write_region_stream]_[1|2|4]</code></a>()</dt> - <dd></dd> - <dt id="bhnd_bus__read_stream_write_stream___1_2_4_"><a class="permalink" href="#bhnd_bus__read_stream_write_stream___1_2_4_"><code class="Fn">bhnd_bus_[read_stream|write_stream]_[1|2|4]</code></a>()</dt> - <dd></dd> - <dt id="bhnd_bus__set_multi_set_stream___1_2_4_"><a class="permalink" href="#bhnd_bus__set_multi_set_stream___1_2_4_"><code class="Fn">bhnd_bus_[set_multi|set_stream]_[1|2|4]</code></a>()</dt> - <dd></dd> -</dl> -<p class="Pp">Drivers that do not rely on <var class="Vt">struct - bhnd_resource</var> should use the standard <var class="Vt">struct - resource</var> and <a class="Xr">bus_space(9)</a> APIs directly.</p> -</section> -<section class="Ss"> -<h2 class="Ss">Device Configuration Functions</h2> -<p class="Pp">The - <a class="permalink" href="#bhnd_read_ioctl"><code class="Fn" id="bhnd_read_ioctl">bhnd_read_ioctl</code></a>() - function is used to read the I/O control register value of device - <var class="Fa">dev</var>, returning the current value in - <var class="Fa">ioctl</var>.</p> -<p class="Pp" id="bhnd_write_ioctl">The - <a class="permalink" href="#bhnd_write_ioctl"><code class="Fn">bhnd_write_ioctl</code></a>() - function is used to modify the I/O control register of - <var class="Fa">dev</var>. The new value of the register is computed by - updating any bits set in <var class="Fa">mask</var> to - <var class="Fa">value</var>. The following I/O control flags are - supported:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="BHND_IOCTL_BIST"><a class="permalink" href="#BHND_IOCTL_BIST"><code class="Dv">BHND_IOCTL_BIST</code></a></dt> - <dd>Initiate a built-in self-test (BIST). Must be cleared after BIST results - are read via the IOST (I/O Status) register.</dd> - <dt id="BHND_IOCTL_PME"><a class="permalink" href="#BHND_IOCTL_PME"><code class="Dv">BHND_IOCTL_PME</code></a></dt> - <dd>Enable posting of power management events by the core.</dd> - <dt id="BHND_IOCTL_CLK_FORCE"><a class="permalink" href="#BHND_IOCTL_CLK_FORCE"><code class="Dv">BHND_IOCTL_CLK_FORCE</code></a></dt> - <dd>Force disable of clock gating, resulting in all clocks being distributed - within the core. Should be set when asserting/deasserting reset to ensure - the reset signal fully propagates to the entire core.</dd> - <dt id="BHND_IOCTL_CLK_EN"><a class="permalink" href="#BHND_IOCTL_CLK_EN"><code class="Dv">BHND_IOCTL_CLK_EN</code></a></dt> - <dd>If cleared, the core clock will be disabled. Should be set during normal - operation, and cleared when the core is held in reset.</dd> - <dt id="BHND_IOCTL_CFLAGS"><a class="permalink" href="#BHND_IOCTL_CFLAGS"><code class="Dv">BHND_IOCTL_CFLAGS</code></a></dt> - <dd>The mask of IOCTL bits reserved for additional core-specific I/O control - flags.</dd> -</dl> -</div> -<p class="Pp" id="bhnd_read_iost">The - <a class="permalink" href="#bhnd_read_iost"><code class="Fn">bhnd_read_iost</code></a>() - function is used to read the I/O status register of device - <var class="Fa">dev</var>, returning the current value in - <var class="Fa">iost</var>. The following I/O status flags are - supported:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="BHND_IOST_BIST_DONE"><a class="permalink" href="#BHND_IOST_BIST_DONE"><code class="Dv">BHND_IOST_BIST_DONE</code></a></dt> - <dd>Set upon BIST completion. Will be cleared when the - <code class="Dv">BHND_IOCTL_BIST</code> flag of the I/O control register - is cleared using <code class="Fn">bhnd_write_ioctl</code>().</dd> - <dt id="BHND_IOST_BIST_FAIL"><a class="permalink" href="#BHND_IOST_BIST_FAIL"><code class="Dv">BHND_IOST_BIST_FAIL</code></a></dt> - <dd>Set upon detection of a BIST error; the value is unspecified if BIST has - not completed and <code class="Dv">BHND_IOST_BIST_DONE</code> is not also - set.</dd> - <dt id="BHND_IOST_CLK"><a class="permalink" href="#BHND_IOST_CLK"><code class="Dv">BHND_IOST_CLK</code></a></dt> - <dd>Set if the core has required that clocked be ungated, or cleared - otherwise. The value is undefined if a core does not support clock - gating.</dd> - <dt id="BHND_IOST_DMA64"><a class="permalink" href="#BHND_IOST_DMA64"><code class="Dv">BHND_IOST_DMA64</code></a></dt> - <dd>Set if this core supports 64-bit DMA.</dd> - <dt id="BHND_IOST_CFLAGS"><a class="permalink" href="#BHND_IOST_CFLAGS"><code class="Dv">BHND_IOST_CFLAGS</code></a></dt> - <dd>The mask of IOST bits reserved for additional core-specific I/O status - flags.</dd> -</dl> -</div> -<p class="Pp" id="bhnd_read_config">The - <a class="permalink" href="#bhnd_read_config"><code class="Fn">bhnd_read_config</code></a>() - function is used to read a data item of <var class="Fa">width</var> bytes at - <var class="Fa">offset</var> from the backplane-specific agent/config space - of the device <var class="Fa">dev</var>.</p> -<p class="Pp" id="bhnd_write_config">The - <a class="permalink" href="#bhnd_write_config"><code class="Fn">bhnd_write_config</code></a>() - function is used to write a data item of <var class="Fa">width</var> bytes - with <var class="Fa">value</var> at <var class="Fa">offset</var> from the - backplane-specific agent/config space of the device - <var class="Fa">dev</var>. The requested <var class="Fa">width</var> must be - one of 1, 2, or 4 bytes.</p> -<p class="Pp" id="bhnd_read_config~2">The agent/config space accessible via - <a class="permalink" href="#bhnd_read_config~2"><code class="Fn">bhnd_read_config</code></a>() - and <code class="Fn">bhnd_write_config</code>() is backplane-specific, and - these functions should only be used for functionality that is not available - via another <code class="Nm">bhnd</code> function.</p> -<p class="Pp" id="bhnd_suspend_hw">The - <a class="permalink" href="#bhnd_suspend_hw"><code class="Fn">bhnd_suspend_hw</code></a>() - function transitions the device <var class="Fa">dev</var> to a low power - “RESET” state, writing <var class="Fa">ioctl</var> to the I/O - control flags of <var class="Fa">dev</var>. The hardware may be brought out - of this state using <code class="Fn">bhnd_reset_hw</code>().</p> -<p class="Pp" id="bhnd_reset_hw">The - <a class="permalink" href="#bhnd_reset_hw"><code class="Fn">bhnd_reset_hw</code></a>() - function first transitions the device <var class="Fa">dev</var> to a low - power RESET state, writing <var class="Fa">ioctl_reset</var> to the I/O - control flags of <var class="Fa">dev</var>, and then brings the device out - of RESET, writing <var class="Fa">ioctl</var> to the device's I/O control - flags.</p> -<p class="Pp" id="bhnd_is_hw_suspended">The - <a class="permalink" href="#bhnd_is_hw_suspended"><code class="Fn">bhnd_is_hw_suspended</code></a>() - function returns <code class="Dv">true</code> if the device - <var class="Fa">dev</var> is currently held in a RESET state, or is - otherwise not clocked. Otherwise, it returns - <code class="Dv">false</code>.</p> -<p class="Pp" id="bhnd_enable_clocks">Any outstanding per-device PMU requests - made using - <a class="permalink" href="#bhnd_enable_clocks"><code class="Fn">bhnd_enable_clocks</code></a>(), - <code class="Fn">bhnd_request_clock</code>(), or - <code class="Fn">bhnd_request_ext_rsrc</code>() will be released - automatically upon placing a device into a RESET state.</p> -</section> -<section class="Ss"> -<h2 class="Ss">Device Information Functions</h2> -<p class="Pp">The - <a class="permalink" href="#bhnd_get_attach_type"><code class="Fn" id="bhnd_get_attach_type">bhnd_get_attach_type</code></a>() - function returns the attachment type of the parent <a class="Xr">bhnd(4)</a> - bus of device <var class="Fa">dev</var>.</p> -<p class="Pp">The following attachment types are supported:</p> -<dl class="Bl-hang Bd-indent"> - <dt id="BHND_ATTACH_ADAPTER"><a class="permalink" href="#BHND_ATTACH_ADAPTER"><code class="Dv">BHND_ATTACH_ADAPTER</code></a></dt> - <dd>The bus is resident on a bridged adapter, such as a PCI Wi-Fi device.</dd> - <dt id="BHND_ATTACH_NATIVE"><a class="permalink" href="#BHND_ATTACH_NATIVE"><code class="Dv">BHND_ATTACH_NATIVE</code></a></dt> - <dd>The bus is resident on the native host, such as the primary or secondary - bus of an embedded SoC.</dd> -</dl> -<p class="Pp" id="bhnd_get_chipid">The - <a class="permalink" href="#bhnd_get_chipid"><code class="Fn">bhnd_get_chipid</code></a>() - function returns chip information from the parent <a class="Xr">bhnd(4)</a> - bus of device <var class="Fa">dev</var>. The returned - <var class="Vt">bhnd_chipid</var> struct contains the following fields:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt><var class="Fa">chip_id</var></dt> - <dd>The chip identifier.</dd> - <dt><var class="Fa">chip_rev</var></dt> - <dd>The chip's hardware revision.</dd> - <dt><var class="Fa">chip_pkg</var></dt> - <dd>The chip's semiconductor package identifier. - <p class="Pp">Several different physical semiconductor package variants may - exist for a given chip, each of which may require driver workarounds for - hardware errata, unpopulated components, etc.</p> - </dd> - <dt><var class="Fa">chip_type</var></dt> - <dd>The interconnect architecture used by this chip.</dd> - <dt><var class="Fa">chip_caps</var></dt> - <dd>The <code class="Nm">bhnd</code> capability flags supported by this - chip.</dd> - <dt><var class="Fa">enum_addr</var></dt> - <dd>The backplane enumeration address. On SSB devices, this will be the base - address of the first SSB core. On BCMA devices, this will be the address - of the enumeration ROM (EROM) core.</dd> - <dt><var class="Fa">ncores</var></dt> - <dd>The number of cores on the chip backplane, or 0 if unknown.</dd> -</dl> -</div> -<p class="Pp">The following constants are defined for known - <var class="Fa">chip_type</var> values:</p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt id="BHND_CHIPTYPE_SIBA"><a class="permalink" href="#BHND_CHIPTYPE_SIBA"><code class="Dv">BHND_CHIPTYPE_SIBA</code></a></dt> - <dd>SSB interconnect.</dd> - <dt id="BHND_CHIPTYPE_BCMA"><a class="permalink" href="#BHND_CHIPTYPE_BCMA"><code class="Dv">BHND_CHIPTYPE_BCMA</code></a></dt> - <dd>BCMA interconnect.</dd> - <dt id="BHND_CHIPTYPE_BCMA_ALT"><a class="permalink" href="#BHND_CHIPTYPE_BCMA_ALT"><code class="Dv">BHND_CHIPTYPE_BCMA_ALT</code></a></dt> - <dd>BCMA-compatible variant found in Broadcom Northstar ARM SoCs.</dd> - <dt id="BHND_CHIPTYPE_UBUS"><a class="permalink" href="#BHND_CHIPTYPE_UBUS"><code class="Dv">BHND_CHIPTYPE_UBUS</code></a></dt> - <dd>UBUS interconnect. This BCMA-derived interconnect is found in Broadcom - BCM33xx DOCSIS SoCs, and BCM63xx xDSL SoCs. UBUS is not currently - supported by <a class="Xr">bhnd(4)</a>.</dd> -</dl> -</div> -<p class="Pp">The following <var class="Fa">chip_caps</var> flags are - supported:</p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt id="BHND_CAP_BP64"><a class="permalink" href="#BHND_CAP_BP64"><code class="Dv">BHND_CAP_BP64</code></a></dt> - <dd>The backplane supports 64-bit addressing.</dd> - <dt id="BHND_CAP_PMU"><a class="permalink" href="#BHND_CAP_PMU"><code class="Dv">BHND_CAP_PMU</code></a></dt> - <dd>PMU is present.</dd> -</dl> -</div> -<p class="Pp">Additional symbolic constants for known - <var class="Fa">chip_id</var>, <var class="Fa">chip_pkg</var>, and - <var class="Fa">chip_type</var> values are defined in - <code class="In"><<a class="In">dev/bhnd/bhnd_ids.h</a>></code>.</p> -<p class="Pp" id="bhnd_get_class">The - <a class="permalink" href="#bhnd_get_class"><code class="Fn">bhnd_get_class</code></a>() - function returns the BHND class of device <var class="Fa">dev</var>, if the - device's - <a class="permalink" href="#vendor"><i class="Em" id="vendor">vendor</i></a> - and - <a class="permalink" href="#device"><i class="Em" id="device">device</i></a> - identifiers are recognized. Otherwise, returns - <code class="Dv">BHND_DEVCLASS_OTHER</code>.</p> -<p class="Pp">One of the following device classes will be returned:</p> -<p class="Pp"></p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt id="BHND_DEVCLASS_CC"><a class="permalink" href="#BHND_DEVCLASS_CC"><code class="Dv">BHND_DEVCLASS_CC</code></a></dt> - <dd>ChipCommon I/O Controller</dd> - <dt id="BHND_DEVCLASS_CC_B"><a class="permalink" href="#BHND_DEVCLASS_CC_B"><code class="Dv">BHND_DEVCLASS_CC_B</code></a></dt> - <dd>ChipCommon Auxiliary Controller</dd> - <dt id="BHND_DEVCLASS_PMU"><a class="permalink" href="#BHND_DEVCLASS_PMU"><code class="Dv">BHND_DEVCLASS_PMU</code></a></dt> - <dd>PMU Controller</dd> - <dt id="BHND_DEVCLASS_PCI"><a class="permalink" href="#BHND_DEVCLASS_PCI"><code class="Dv">BHND_DEVCLASS_PCI</code></a></dt> - <dd>PCI Host/Device Bridge</dd> - <dt id="BHND_DEVCLASS_PCIE"><a class="permalink" href="#BHND_DEVCLASS_PCIE"><code class="Dv">BHND_DEVCLASS_PCIE</code></a></dt> - <dd>PCIe Host/Device Bridge</dd> - <dt id="BHND_DEVCLASS_PCCARD"><a class="permalink" href="#BHND_DEVCLASS_PCCARD"><code class="Dv">BHND_DEVCLASS_PCCARD</code></a></dt> - <dd>PCMCIA Host/Device Bridge</dd> - <dt id="BHND_DEVCLASS_RAM"><a class="permalink" href="#BHND_DEVCLASS_RAM"><code class="Dv">BHND_DEVCLASS_RAM</code></a></dt> - <dd>Internal RAM/SRAM</dd> - <dt id="BHND_DEVCLASS_MEMC"><a class="permalink" href="#BHND_DEVCLASS_MEMC"><code class="Dv">BHND_DEVCLASS_MEMC</code></a></dt> - <dd>Memory Controller</dd> - <dt id="BHND_DEVCLASS_ENET"><a class="permalink" href="#BHND_DEVCLASS_ENET"><code class="Dv">BHND_DEVCLASS_ENET</code></a></dt> - <dd>IEEE 802.3 MAC/PHY</dd> - <dt id="BHND_DEVCLASS_ENET_MAC"><a class="permalink" href="#BHND_DEVCLASS_ENET_MAC"><code class="Dv">BHND_DEVCLASS_ENET_MAC</code></a></dt> - <dd>IEEE 802.3 MAC</dd> - <dt id="BHND_DEVCLASS_ENET_PHY"><a class="permalink" href="#BHND_DEVCLASS_ENET_PHY"><code class="Dv">BHND_DEVCLASS_ENET_PHY</code></a></dt> - <dd>IEEE 802.3 PHY</dd> - <dt id="BHND_DEVCLASS_WLAN"><a class="permalink" href="#BHND_DEVCLASS_WLAN"><code class="Dv">BHND_DEVCLASS_WLAN</code></a></dt> - <dd>IEEE 802.11 MAC/PHY/Radio</dd> - <dt id="BHND_DEVCLASS_WLAN_MAC"><a class="permalink" href="#BHND_DEVCLASS_WLAN_MAC"><code class="Dv">BHND_DEVCLASS_WLAN_MAC</code></a></dt> - <dd>IEEE 802.11 MAC</dd> - <dt id="BHND_DEVCLASS_WLAN_PHY"><a class="permalink" href="#BHND_DEVCLASS_WLAN_PHY"><code class="Dv">BHND_DEVCLASS_WLAN_PHY</code></a></dt> - <dd>IEEE 802.11 PHY</dd> - <dt id="BHND_DEVCLASS_CPU"><a class="permalink" href="#BHND_DEVCLASS_CPU"><code class="Dv">BHND_DEVCLASS_CPU</code></a></dt> - <dd>CPU Core</dd> - <dt id="BHND_DEVCLASS_SOC_ROUTER"><a class="permalink" href="#BHND_DEVCLASS_SOC_ROUTER"><code class="Dv">BHND_DEVCLASS_SOC_ROUTER</code></a></dt> - <dd>Interconnect Router</dd> - <dt id="BHND_DEVCLASS_SOC_BRIDGE"><a class="permalink" href="#BHND_DEVCLASS_SOC_BRIDGE"><code class="Dv">BHND_DEVCLASS_SOC_BRIDGE</code></a></dt> - <dd>Interconnect Host Bridge</dd> - <dt id="BHND_DEVCLASS_EROM"><a class="permalink" href="#BHND_DEVCLASS_EROM"><code class="Dv">BHND_DEVCLASS_EROM</code></a></dt> - <dd>Device Enumeration ROM</dd> - <dt id="BHND_DEVCLASS_NVRAM"><a class="permalink" href="#BHND_DEVCLASS_NVRAM"><code class="Dv">BHND_DEVCLASS_NVRAM</code></a></dt> - <dd>NVRAM/Flash Controller</dd> - <dt id="BHND_DEVCLASS_SOFTMODEM"><a class="permalink" href="#BHND_DEVCLASS_SOFTMODEM"><code class="Dv">BHND_DEVCLASS_SOFTMODEM</code></a></dt> - <dd>Analog/PSTN SoftModem Codec</dd> - <dt id="BHND_DEVCLASS_USB_HOST"><a class="permalink" href="#BHND_DEVCLASS_USB_HOST"><code class="Dv">BHND_DEVCLASS_USB_HOST</code></a></dt> - <dd>USB Host Controller</dd> - <dt id="BHND_DEVCLASS_USB_DEV"><a class="permalink" href="#BHND_DEVCLASS_USB_DEV"><code class="Dv">BHND_DEVCLASS_USB_DEV</code></a></dt> - <dd>USB Device Controller</dd> - <dt id="BHND_DEVCLASS_USB_DUAL"><a class="permalink" href="#BHND_DEVCLASS_USB_DUAL"><code class="Dv">BHND_DEVCLASS_USB_DUAL</code></a></dt> - <dd>USB Host/Device Controller</dd> - <dt id="BHND_DEVCLASS_OTHER"><a class="permalink" href="#BHND_DEVCLASS_OTHER"><code class="Dv">BHND_DEVCLASS_OTHER</code></a></dt> - <dd>Other / Unknown</dd> - <dt id="BHND_DEVCLASS_INVALID"><a class="permalink" href="#BHND_DEVCLASS_INVALID"><code class="Dv">BHND_DEVCLASS_INVALID</code></a></dt> - <dd>Invalid Class</dd> -</dl> -</div> -<p class="Pp" id="bhnd_get_core_info">The - <a class="permalink" href="#bhnd_get_core_info"><code class="Fn">bhnd_get_core_info</code></a>() - function returns the core information for device <var class="Fa">dev</var>. - The returned <var class="Vt">bhnd_core_info</var> structure contains the - following fields:</p> -<p class="Pp"></p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt><var class="Fa">vendor</var></dt> - <dd>Vendor identifier (JEP-106, ARM 4-bit continuation encoded)</dd> - <dt><var class="Fa">device</var></dt> - <dd>Device identifier</dd> - <dt><var class="Fa">hwrev</var></dt> - <dd>Hardware revision</dd> - <dt><var class="Fa">core_idx</var></dt> - <dd>Core index</dd> - <dt><var class="Fa">unit</var></dt> - <dd>Core unit</dd> -</dl> -</div> -<p class="Pp">Symbolic constants for common vendor and device identifiers are - defined in - <code class="In"><<a class="In">dev/bhnd/bhnd_ids.h</a>></code>. - Common vendor identifiers include:</p> -<p class="Pp"></p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt id="BHND_MFGID_ARM"><a class="permalink" href="#BHND_MFGID_ARM"><code class="Dv">BHND_MFGID_ARM</code></a></dt> - <dd>ARM</dd> - <dt id="BHND_MFGID_BCM"><a class="permalink" href="#BHND_MFGID_BCM"><code class="Dv">BHND_MFGID_BCM</code></a></dt> - <dd>Broadcom</dd> - <dt id="BHND_MFGID_MIPS"><a class="permalink" href="#BHND_MFGID_MIPS"><code class="Dv">BHND_MFGID_MIPS</code></a></dt> - <dd>MIPS</dd> -</dl> -</div> -<p class="Pp" id="bhnd_get_core_index">The - <a class="permalink" href="#bhnd_get_core_index"><code class="Fn">bhnd_get_core_index</code></a>(), - <a class="permalink" href="#bhnd_get_core_unit"><code class="Fn" id="bhnd_get_core_unit">bhnd_get_core_unit</code></a>(), - <a class="permalink" href="#bhnd_get_device"><code class="Fn" id="bhnd_get_device">bhnd_get_device</code></a>(), - <a class="permalink" href="#bhnd_get_hwrev"><code class="Fn" id="bhnd_get_hwrev">bhnd_get_hwrev</code></a>(), - and - <a class="permalink" href="#bhnd_get_vendor"><code class="Fn" id="bhnd_get_vendor">bhnd_get_vendor</code></a>() - functions are convenience wrappers for - <code class="Fn">bhnd_get_core_info</code>(), returning, respect the - <var class="Fa">core_idx</var>, <var class="Fa">core_unit</var>, - <var class="Fa">device</var>, <var class="Fa">hwrev</var>, or - <var class="Fa">vendor</var> field from the - <var class="Vt">bhnd_core_info</var> structure.</p> -<p class="Pp" id="bhnd_get_device_name">The - <a class="permalink" href="#bhnd_get_device_name"><code class="Fn">bhnd_get_device_name</code></a>() - function returns a human readable name for device - <var class="Fa">dev</var>.</p> -<p class="Pp" id="bhnd_get_vendor_name">The - <a class="permalink" href="#bhnd_get_vendor_name"><code class="Fn">bhnd_get_vendor_name</code></a>() - function returns a human readable name for the vendor of device - <var class="Fa">dev</var>.</p> -<p class="Pp" id="bhnd_read_board_info">The - <a class="permalink" href="#bhnd_read_board_info"><code class="Fn">bhnd_read_board_info</code></a>() - function attempts to read the board information for device - <var class="Fa">dev</var>. The board information will be returned in the - location pointed to by <var class="Fa">info</var> on success.</p> -<p class="Pp">The <var class="Vt">bhnd_board_info</var> structure contains the - following fields:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt><var class="Fa">board_vendor</var></dt> - <dd>Vendor ID of the board manufacturer (PCI-SIG assigned).</dd> - <dt><var class="Fa">board_type</var></dt> - <dd>Board ID.</dd> - <dt><var class="Fa">board_devid</var></dt> - <dd>Device ID.</dd> - <dt><var class="Fa">board_rev</var></dt> - <dd>Board revision.</dd> - <dt><var class="Fa">board_srom_rev</var></dt> - <dd>Board SROM format revision.</dd> - <dt><var class="Fa">board_flags</var></dt> - <dd>Board flags (1)</dd> - <dt><var class="Fa">board_flags2</var></dt> - <dd>Board flags (2)</dd> - <dt><var class="Fa">board_flags3</var></dt> - <dd>Board flags (3)</dd> -</dl> -</div> -<p class="Pp">The <var class="Fa">board_devid</var> field is the Broadcom PCI - device ID that most closely matches the capabilities of the BHND device (if - any).</p> -<p class="Pp">On PCI devices, the <var class="Fa">board_vendor</var>, - <var class="Fa">board_type</var>, and <var class="Fa">board_devid</var> - fields default to the PCI Subsystem Vendor ID, PCI Subsystem ID, and PCI - device ID, unless overridden in device NVRAM.</p> -<p class="Pp">On other devices, including SoCs, the - <var class="Fa">board_vendor</var>, <var class="Fa">board_type</var>, and - <var class="Fa">board_devid</var> fields will be populated from device - NVRAM.</p> -<p class="Pp">Symbolic constants for common board flags are defined in - <code class="In"><<a class="In">dev/bhnd/bhnd_ids.h</a>></code>.</p> -</section> -<section class="Ss"> -<h2 class="Ss">Device Matching Functions</h2> -<p class="Pp">The bhnd device matching functions are used to match against core, - chip, and board-level device attributes. Match requirements are specified - using the <var class="Vt">struct bhnd_board_match</var>, - <var class="Vt">struct bhnd_chip_match</var>, <var class="Vt">struct - bhnd_core_match</var>, <var class="Vt">struct bhnd_device_match</var>, and - <var class="Vt">struct bhnd_hwrev_match</var> match descriptor - structures.</p> -<p class="Pp" id="bhnd_board_matches">The - <a class="permalink" href="#bhnd_board_matches"><code class="Fn">bhnd_board_matches</code></a>() - function returns <code class="Dv">true</code> if <var class="Fa">board</var> - matches the board match descriptor <var class="Fa">desc</var>. Otherwise, it - returns <code class="Dv">false</code>.</p> -<p class="Pp" id="bhnd_chip_matches">The - <a class="permalink" href="#bhnd_chip_matches"><code class="Fn">bhnd_chip_matches</code></a>() - function returns <code class="Dv">true</code> if <var class="Fa">chip</var> - matches the chip match descriptor <var class="Fa">desc</var>. Otherwise, it - returns <code class="Dv">false</code>.</p> -<p class="Pp" id="bhnd_core_matches">The - <a class="permalink" href="#bhnd_core_matches"><code class="Fn">bhnd_core_matches</code></a>() - function returns <code class="Dv">true</code> if <var class="Fa">core</var> - matches the core match descriptor <var class="Fa">desc</var>. Otherwise, it - returns <code class="Dv">false</code>.</p> -<p class="Pp" id="bhnd_device_matches">The - <a class="permalink" href="#bhnd_device_matches"><code class="Fn">bhnd_device_matches</code></a>() - function returns <code class="Dv">true</code> if the device - <var class="Fa">dev</var> matches the device match descriptor - <var class="Fa">desc</var>. Otherwise, it returns - <code class="Dv">false</code>.</p> -<p class="Pp" id="bhnd_hwrev_matches">The - <a class="permalink" href="#bhnd_hwrev_matches"><code class="Fn">bhnd_hwrev_matches</code></a>() - function returns <code class="Dv">true</code> if <var class="Fa">hwrev</var> - matches the hwrev match descriptor <var class="Fa">desc</var>. Otherwise, it - returns <code class="Dv">false</code>.</p> -<p class="Pp" id="bhnd_bus_match_child">The - <a class="permalink" href="#bhnd_bus_match_child"><code class="Fn">bhnd_bus_match_child</code></a>() - function returns the first child device of <var class="Fa">bus</var> that - matches the device match descriptor <var class="Fa">desc</var>. If no - matching child is found, <code class="Dv">NULL</code> is returned.</p> -<p class="Pp" id="bhnd_core_get_match_desc">The - <a class="permalink" href="#bhnd_core_get_match_desc"><code class="Fn">bhnd_core_get_match_desc</code></a>() - function returns an equality match descriptor for the core info in - <var class="Fa">core</var>. The returned descriptor will match only on core - attributes identical to those defined by <var class="Fa">core</var>.</p> -<p class="Pp" id="bhnd_cores_equal">The - <a class="permalink" href="#bhnd_cores_equal"><code class="Fn">bhnd_cores_equal</code></a>() - function is a convenience wrapper for - <code class="Fn">bhnd_core_matches</code>() and - <code class="Fn">bhnd_core_get_match_desc</code>(). This function returns - <code class="Dv">true</code> if the <var class="Vt">bhnd_core_info</var> - structures <var class="Fa">lhs</var> and <var class="Fa">rhs</var> are - equal. Otherwise, it returns <code class="Dv">false</code>.</p> -<p class="Pp" id="bhnd_match_core">The - <a class="permalink" href="#bhnd_match_core"><code class="Fn">bhnd_match_core</code></a>() - function returns a pointer to the first entry in the array - <var class="Fa">cores</var> of length <var class="Fa">num_cores</var> that - matches <var class="Fa">desc</var>. If no matching core is found, - <code class="Dv">NULL</code> is returned.</p> -<p class="Pp">A <var class="Vt">bhnd_board_match</var> match descriptor may be - initialized using one or more of the following macros:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="BHND_MATCH_BOARD_VENDOR"><a class="permalink" href="#BHND_MATCH_BOARD_VENDOR"><code class="Fn">BHND_MATCH_BOARD_VENDOR</code></a>(<var class="Fa">vendor</var>)</dt> - <dd>Match on boards with a vendor equal to <var class="Fa">vendor</var>.</dd> - <dt id="BHND_MATCH_BOARD_TYPE"><a class="permalink" href="#BHND_MATCH_BOARD_TYPE"><code class="Fn">BHND_MATCH_BOARD_TYPE</code></a>(<var class="Fa">type</var>)</dt> - <dd>Match on boards with a type equal to <code class="Dv">BHND_BOARD_ - ##</code> <var class="Fa">type</var></dd> - <dt id="BHND_MATCH_SROMREV"><a class="permalink" href="#BHND_MATCH_SROMREV"><code class="Fn">BHND_MATCH_SROMREV</code></a>(<var class="Fa">sromrev</var>)</dt> - <dd>Match on boards with a sromrev that matches <code class="Dv">BHND_HWREV_ - ##</code> <var class="Fa">sromrev</var>.</dd> - <dt id="BHND_MATCH_BOARD_REV"><a class="permalink" href="#BHND_MATCH_BOARD_REV"><code class="Fn">BHND_MATCH_BOARD_REV</code></a>(<var class="Fa">hwrev</var>)</dt> - <dd>Match on boards with hardware revisions that match <code class="Dv">BHND_ - ##</code> <var class="Fa">hwrev</var>.</dd> - <dt id="BHND_MATCH_BOARD"><a class="permalink" href="#BHND_MATCH_BOARD"><code class="Fn">BHND_MATCH_BOARD</code></a>(<var class="Fa">vendor</var>, - <var class="Fa">type</var>)</dt> - <dd>A convenience wrapper for - <code class="Fn">BHND_MATCH_BOARD_VENDOR</code>() and - <code class="Fn">BHND_MATCH_BOARD_TYPE</code>().</dd> -</dl> -</div> -<p class="Pp">For example:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct bhnd_board_match board_desc = { - BHND_MATCH_BOARD_VENDOR(BHND_MFGID_BROADCOM), - BHND_MATCH_BOARD_TYPE(BCM94360X52C), - BHND_MATCH_BOARD_REV(HWREV_ANY), - BHND_MATCH_SROMREV(RANGE(0, 10)) -};</pre> -</div> -<p class="Pp">A <var class="Vt">bhnd_chip_match</var> match descriptor may be - initialized using one or more of the following macros:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="BHND_MATCH_CHIP_ID"><a class="permalink" href="#BHND_MATCH_CHIP_ID"><code class="Fn">BHND_MATCH_CHIP_ID</code></a>(<var class="Fa">id</var>)</dt> - <dd>Match on chips with an ID equal to <code class="Dv">BHND_CHIPID_ ##</code> - <var class="Fa">id</var></dd> - <dt id="BHND_MATCH_CHIP_REV"><a class="permalink" href="#BHND_MATCH_CHIP_REV"><code class="Fn">BHND_MATCH_CHIP_REV</code></a>(<var class="Fa">hwrev</var>)</dt> - <dd>Match on chips with hardware revisions that match <code class="Dv">BHND_ - ##</code> <var class="Fa">hwrev</var>.</dd> - <dt id="BHND_MATCH_CHIP_PKG"><a class="permalink" href="#BHND_MATCH_CHIP_PKG"><code class="Fn">BHND_MATCH_CHIP_PKG</code></a>(<var class="Fa">pkg</var>)</dt> - <dd>Match on chips with a package ID equal to <code class="Dv">BHND_PKGID_ - ##</code> <var class="Fa">pkg</var></dd> - <dt id="BHND_MATCH_CHIP_TYPE"><a class="permalink" href="#BHND_MATCH_CHIP_TYPE"><code class="Fn">BHND_MATCH_CHIP_TYPE</code></a>(<var class="Fa">type</var>)</dt> - <dd>Match on chips with a chip type equal to <code class="Dv">BHND_CHIPTYPE_ - ##</code> <var class="Fa">type</var></dd> - <dt id="BHND_MATCH_CHIP_IP"><a class="permalink" href="#BHND_MATCH_CHIP_IP"><code class="Fn">BHND_MATCH_CHIP_IP</code></a>(<var class="Fa">id</var>, - <var class="Fa">pkg</var>)</dt> - <dd>A convenience wrapper for <code class="Fn">BHND_MATCH_CHIP_ID</code>() and - <code class="Fn">BHND_MATCH_CHIP_PKG</code>().</dd> - <dt id="BHND_MATCH_CHIP_IPR"><a class="permalink" href="#BHND_MATCH_CHIP_IPR"><code class="Fn">BHND_MATCH_CHIP_IPR</code></a>(<var class="Fa">id</var>, - <var class="Fa">pkg</var>, <var class="Fa">hwrev</var>)</dt> - <dd>A convenience wrapper for <code class="Fn">BHND_MATCH_CHIP_ID</code>(), - <code class="Fn">BHND_MATCH_CHIP_PKG</code>(), and - <code class="Fn">BHND_MATCH_CHIP_REV</code>().</dd> - <dt id="BHND_MATCH_CHIP_IR"><a class="permalink" href="#BHND_MATCH_CHIP_IR"><code class="Fn">BHND_MATCH_CHIP_IR</code></a>(<var class="Fa">id</var>, - <var class="Fa">hwrev</var>)</dt> - <dd>A convenience wrapper for <code class="Fn">BHND_MATCH_CHIP_ID</code>() and - <code class="Fn">BHND_MATCH_CHIP_REV</code>().</dd> -</dl> -</div> -<p class="Pp">For example:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct bhnd_chip_match chip_desc = { - BHND_MATCH_CHIP_IP(BCM4329, BCM4329_289PIN), - BHND_MATCH_CHIP_TYPE(SIBA) -};</pre> -</div> -<p class="Pp">A <var class="Vt">bhnd_core_match</var> match descriptor may be - initialized using one or more of the following macros:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="BHND_MATCH_CORE_VENDOR"><a class="permalink" href="#BHND_MATCH_CORE_VENDOR"><code class="Fn">BHND_MATCH_CORE_VENDOR</code></a>(<var class="Fa">vendor</var>)</dt> - <dd>Match on cores with a vendor ID equal to <var class="Fa">vendor</var></dd> - <dt id="BHND_MATCH_CORE_ID"><a class="permalink" href="#BHND_MATCH_CORE_ID"><code class="Fn">BHND_MATCH_CORE_ID</code></a>(<var class="Fa">id</var>)</dt> - <dd>Match on cores with a device ID equal to <var class="Fa">id</var></dd> - <dt id="BHND_MATCH_CORE_REV"><a class="permalink" href="#BHND_MATCH_CORE_REV"><code class="Fn">BHND_MATCH_CORE_REV</code></a>(<var class="Fa">hwrev</var>)</dt> - <dd>Match on cores with hardware revisions that match <code class="Dv">BHND_ - ##</code> <var class="Fa">hwrev</var>.</dd> - <dt id="BHND_MATCH_CORE_CLASS"><a class="permalink" href="#BHND_MATCH_CORE_CLASS"><code class="Fn">BHND_MATCH_CORE_CLASS</code></a>(<var class="Fa">class</var>)</dt> - <dd>Match on cores with a core device class equal to - <var class="Fa">class</var></dd> - <dt id="BHND_MATCH_CORE_IDX"><a class="permalink" href="#BHND_MATCH_CORE_IDX"><code class="Fn">BHND_MATCH_CORE_IDX</code></a>(<var class="Fa">idx</var>)</dt> - <dd>Match on cores with a core index equal to <var class="Fa">idx</var></dd> - <dt id="BHND_MATCH_CORE_UNIT"><a class="permalink" href="#BHND_MATCH_CORE_UNIT"><code class="Fn">BHND_MATCH_CORE_UNIT</code></a>(<var class="Fa">unit</var>)</dt> - <dd>Match on cores with a core unit equal to <var class="Fa">unit</var></dd> - <dt id="BHND_MATCH_CORE"><a class="permalink" href="#BHND_MATCH_CORE"><code class="Fn">BHND_MATCH_CORE</code></a>(<var class="Fa">vendor</var>, - <var class="Fa">id</var>)</dt> - <dd>A convenience wrapper for <code class="Fn">BHND_MATCH_CORE_VENDOR</code>() - and <code class="Fn">BHND_MATCH_CORE_ID</code>().</dd> -</dl> -</div> -<p class="Pp">For example:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct bhnd_core_match core_desc = { - BHND_MATCH_CORE(BHND_MFGID_BROADCOM, BHND_COREID_CC), - BHND_MATCH_CORE_REV(HWREV_RANGE(0, 10)) -};</pre> -</div> -<p class="Pp">The <var class="Vt">bhnd_device_match</var> match descriptor - supports matching on all board, chip, and core attributes, and may be - initialized using any of the <var class="Vt">bhnd_board_match</var>, - <var class="Vt">bhnd_chip_match</var>, or - <var class="Vt">bhnd_core_match</var> macros.</p> -<p class="Pp">For example:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct bhnd_device_match device_desc = { - BHND_MATCH_CHIP_IP(BCM4329, BCM4329_289PIN), - BHND_MATCH_BOARD_VENDOR(BHND_MFGID_BROADCOM), - BHND_MATCH_BOARD_TYPE(BCM94329AGB), - BHND_MATCH_CORE(BHND_MFGID_BROADCOM, BHND_COREID_CC), -};</pre> -</div> -<p class="Pp">A <var class="Vt">bhnd_hwrev_match</var> match descriptor may be - initialized using one of the following macros:</p> -<p class="Pp"></p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt id="BHND_HWREV_ANY"><a class="permalink" href="#BHND_HWREV_ANY"><code class="Dv">BHND_HWREV_ANY</code></a></dt> - <dd>Matches any hardware revision.</dd> - <dt id="BHND_HWREV_EQ"><a class="permalink" href="#BHND_HWREV_EQ"><code class="Fn">BHND_HWREV_EQ</code></a>(<var class="Fa">hwrev</var>)</dt> - <dd>Matches any hardware revision equal to <var class="Fa">hwrev</var></dd> - <dt id="BHND_HWREV_GTE"><a class="permalink" href="#BHND_HWREV_GTE"><code class="Fn">BHND_HWREV_GTE</code></a>(<var class="Fa">hwrev</var>)</dt> - <dd>Matches any hardware revision greater than or equal to - <var class="Fa">hwrev</var></dd> - <dt id="BHND_HWREV_LTE"><a class="permalink" href="#BHND_HWREV_LTE"><code class="Fn">BHND_HWREV_LTE</code></a>(<var class="Fa">hwrev</var>)</dt> - <dd>Matches any hardware revision less than or equal to - <var class="Fa">hwrev</var></dd> - <dt id="BHND_HWREV_RANGE"><a class="permalink" href="#BHND_HWREV_RANGE"><code class="Fn">BHND_HWREV_RANGE</code></a>(<var class="Fa">start</var>, - <var class="Fa">end</var>)</dt> - <dd>Matches any hardware revision within an inclusive range. If - <code class="Dv">BHND_HWREV_INVALID</code> is specified as the - <var class="Fa">end</var> value, will match on any revision equal to or - greater than <var class="Fa">start</var></dd> -</dl> -</div> -</section> -<section class="Ss"> -<h2 class="Ss">Device Table Functions</h2> -<p class="Pp">The bhnd device table functions are used to query device and quirk - tables.</p> -<p class="Pp" id="bhnd_device_lookup">The - <a class="permalink" href="#bhnd_device_lookup"><code class="Fn">bhnd_device_lookup</code></a>() - function returns a pointer to the first entry in device table - <var class="Fa">table</var> that matches the device - <var class="Fa">dev</var>. The table entry size is specified by - <var class="Fa">entry_size</var>.</p> -<p class="Pp" id="bhnd_device_quirks">The - <a class="permalink" href="#bhnd_device_quirks"><code class="Fn">bhnd_device_quirks</code></a>() - function scan the device table <var class="Fa">table</var> for all quirk - entries that match the device <var class="Fa">dev</var>, returning the - bitwise OR of all matching quirk flags. The table entry size is specified by - <var class="Fa">entry_size</var>.</p> -<p class="Pp">The <var class="Vt">bhnd_device</var> structure contains the - following fields:</p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt><var class="Fa">core</var></dt> - <dd>A <var class="Vt">bhnd_device_match</var> descriptor.</dd> - <dt><var class="Fa">desc</var></dt> - <dd>A verbose device description suitable for use with - <a class="Xr">device_set_desc(9)</a>, or - <code class="Dv">NULL</code>.</dd> - <dt><var class="Fa">quirks_table</var></dt> - <dd>The quirks table for this device, or <code class="Dv">NULL</code>.</dd> - <dt><var class="Fa">device_flags</var></dt> - <dd>The device flags required when matching this entry.</dd> -</dl> -</div> -<p class="Pp">The following device flags are supported:</p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt id="BHND_DF_ANY"><a class="permalink" href="#BHND_DF_ANY"><code class="Dv">BHND_DF_ANY</code></a></dt> - <dd>Match on any device.</dd> - <dt id="BHND_DF_HOSTB"><a class="permalink" href="#BHND_DF_HOSTB"><code class="Dv">BHND_DF_HOSTB</code></a></dt> - <dd>Match only if the device is the <a class="Xr">bhndb(4)</a> host bridge. - Implies <code class="Dv">BHND_DF_ADAPTER</code>.</dd> - <dt id="BHND_DF_SOC"><a class="permalink" href="#BHND_DF_SOC"><code class="Dv">BHND_DF_SOC</code></a></dt> - <dd>Match only if the device is attached to a native SoC backplane.</dd> - <dt id="BHND_DF_ADAPTER"><a class="permalink" href="#BHND_DF_ADAPTER"><code class="Dv">BHND_DF_ADAPTER</code></a></dt> - <dd>Match only if the device is attached to a <a class="Xr">bhndb(4)</a> - bridged backplane.</dd> -</dl> -</div> -<p class="Pp">A <var class="Vt">bhnd_device</var> table entry may be initialized - using one of the following macros:</p> -<dl class="Bl-ohang Bd-indent"> - <dt id="BHND_DEVICE"><a class="permalink" href="#BHND_DEVICE"><code class="Fn">BHND_DEVICE</code></a>(<var class="Fa">vendor</var>, - <var class="Fa">device</var>, <var class="Fa">desc</var>, - <var class="Fa">quirks</var>, <var class="Fa">flags</var>)</dt> - <dd>Match on devices with a vendor ID equal to <code class="Dv">BHND_MFGID_ - ##</code> <var class="Fa">vendor</var> and a core device ID equal to - <code class="Dv">BHND_COREID_ ##</code> <var class="Fa">device</var>. - <p class="Pp">The device's verbose description is specified by the - <var class="Fa">desc</var> argument, a pointer to the device-specific - quirks table is specified by the <var class="Fa">quirks</var> argument, - and any required device flags may be provided in - <var class="Fa">flags</var>. The optional <var class="Fa">flags</var> - argument defaults to <code class="Dv">BHND_DF_ANY</code> if omitted.</p> - </dd> - <dt id="BHND_DEVICE_END"><a class="permalink" href="#BHND_DEVICE_END"><code class="Dv">BHND_DEVICE_END</code></a></dt> - <dd>Terminate the <var class="Vt">bhnd_device</var> table.</dd> -</dl> -<p class="Pp">For example:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct bhnd_device bhnd_usb11_devices[] = { - BHND_DEVICE(BCM, USB, "Broadcom USB1.1 Controller", - bhnd_usb11_quirks), - BHND_DEVICE_END -};</pre> -</div> -<p class="Pp">The <var class="Vt">bhnd_device_quirk</var> structure contains the - following fields:</p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt><var class="Fa">desc</var></dt> - <dd>A <var class="Vt">bhnd_device_match</var> descriptor.</dd> - <dt><var class="Fa">quirks</var></dt> - <dd>Applicable quirk flags.</dd> -</dl> -</div> -<p class="Pp">A bhnd_device_quirk table entry may be initialized using one of - the following convenience macros:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="BHND_BOARD_QUIRK"><a class="permalink" href="#BHND_BOARD_QUIRK"><code class="Fn">BHND_BOARD_QUIRK</code></a>(<var class="Fa">board</var>, - <var class="Fa">flags</var>)</dt> - <dd>Set quirk flags <var class="Fa">flags</var> on devices with a board type - equal to <code class="Dv">BHND_BOARD_ ##</code> - <var class="Fa">board</var>.</dd> - <dt id="BHND_CHIP_QUIRK"><a class="permalink" href="#BHND_CHIP_QUIRK"><code class="Fn">BHND_CHIP_QUIRK</code></a>(<var class="Fa">chip</var>, - <var class="Fa">hwrev</var>, <var class="Fa">flags</var>)</dt> - <dd>Set quirk flags <var class="Fa">flags</var> on devices with a chip ID - equal to <code class="Dv">BHND_CHIPID_BCM ##</code> - <var class="Fa">chip</var> and chip hardware revision that matches - <code class="Dv">BHND_ ##</code> <var class="Fa">hwrev</var>.</dd> - <dt id="BHND_PKG_QUIRK"><a class="permalink" href="#BHND_PKG_QUIRK"><code class="Fn">BHND_PKG_QUIRK</code></a>(<var class="Fa">chip</var>, - <var class="Fa">pkg</var>, <var class="Fa">flags"</var>)</dt> - <dd>Set quirk flags <var class="Fa">flags</var> on devices with a chip ID - equal to <code class="Dv">BHND_CHIPID_BCM ##</code> - <var class="Fa">chip</var> and chip package equal to - <code class="Dv">BHND_ ## chip ##</code> <var class="Fa">pkg</var>.</dd> - <dt id="BHND_CORE_QUIRK"><a class="permalink" href="#BHND_CORE_QUIRK"><code class="Fn">BHND_CORE_QUIRK</code></a>(<var class="Fa">hwrev</var>, - <var class="Fa">flags"</var>)</dt> - <dd>Set quirk flags <var class="Fa">flags</var> on devices with a core - hardware revision that matches <code class="Dv">BHND_ ##</code> - <var class="Fa">hwrev</var>.</dd> -</dl> -</div> -For example: -<div class="Bd Pp Bd-indent Li"> -<pre>struct bhnd_device_quirk bhnd_usb11_quirks[] = { - BHND_DEVICE(BCM, USB, "Broadcom USB1.1 Controller", - bhnd_usb11_quirks), - BHND_DEVICE_END -};</pre> -</div> -</section> -<section class="Ss"> -<h2 class="Ss">DMA Address Translation Functions</h2> -<p class="Pp">The - <a class="permalink" href="#bhnd_get_dma_translation"><code class="Fn" id="bhnd_get_dma_translation">bhnd_get_dma_translation</code></a>() - function is used to request a DMA address translation descriptor suitable - for use with a maximum DMA address width of <var class="Fa">width</var>, - with support for the requested translation <var class="Fa">flags</var>.</p> -<p class="Pp">If a suitable DMA address translation descriptor is found, it will - be stored in <var class="Fa">translation</var>, and a bus DMA tag specifying - the DMA translation's address restrictions will be stored in - <var class="Fa">dmat</var>. The <var class="Fa">translation</var> and - <var class="Fa">dmat</var> arguments may be <code class="Dv">NULL</code> if - the translation descriptor or DMA tag are not desired.</p> -<p class="Pp">The following DMA translation flags are supported:</p> -<dl class="Bl-ohang Bd-indent"> - <dt id="BHND_DMA_TRANSLATION_PHYSMAP"><a class="permalink" href="#BHND_DMA_TRANSLATION_PHYSMAP"><code class="Dv">BHND_DMA_TRANSLATION_PHYSMAP</code></a></dt> - <dd>The translation remaps the device's physical address space. - <p class="Pp">This is used in conjunction with - <code class="Dv">BHND_DMA_TRANSLATION_BYTESWAPPED</code> to define a DMA - translation that provides byteswapped access to physical memory on - big-endian MIPS SoCs.</p> - </dd> - <dt id="BHND_DMA_TRANSLATION_BYTESWAPPED"><a class="permalink" href="#BHND_DMA_TRANSLATION_BYTESWAPPED"><code class="Dv">BHND_DMA_TRANSLATION_BYTESWAPPED</code></a></dt> - <dd>The translation provides a byte-swapped mapping; write requests will be - byte-swapped before being written to memory, and read requests will be - byte-swapped before being returned. - <p class="Pp">This is primarily used to perform efficient byte swapping of - DMA data on embedded MIPS SoCs executing in big-endian mode.</p> - </dd> -</dl> -<p class="Pp">The following symbolic constants are defined for common DMA - address widths:</p> -<p class="Pp"></p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt id="BHND_DMA_ADDR_30BIT"><a class="permalink" href="#BHND_DMA_ADDR_30BIT"><code class="Dv">BHND_DMA_ADDR_30BIT</code></a></dt> - <dd>30-bit DMA</dd> - <dt id="BHND_DMA_ADDR_32BIT"><a class="permalink" href="#BHND_DMA_ADDR_32BIT"><code class="Dv">BHND_DMA_ADDR_32BIT</code></a></dt> - <dd>32-bit DMA</dd> - <dt id="BHND_DMA_ADDR_64BIT"><a class="permalink" href="#BHND_DMA_ADDR_64BIT"><code class="Dv">BHND_DMA_ADDR_64BIT</code></a></dt> - <dd>64-bit DMA</dd> -</dl> -</div> -<p class="Pp">The <var class="Vt">bhnd_dma_translation</var> structure contains - the following fields:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">base_addr</var></dt> - <dd>Host-to-device physical address translation. This may be added to a host - physical address to produce a device DMA address.</dd> - <dt><var class="Fa">addr_mask</var></dt> - <dd>Device-addressable address mask. This defines the device DMA address - range, and excludes any bits reserved for mapping the address within the - translation window at <var class="Fa">base_addr</var>.</dd> - <dt><var class="Fa">addrext_mask</var></dt> - <dd>Device-addressable extended address mask. If a the per-core BHND DMA - engine supports the 'addrext' control field, it can be used to provide - address bits excluded by <var class="Fa">addr_mask</var>. - <p class="Pp">Support for DMA extended address changes — including - coordination with the core providing device-to-host DMA address - translation — is handled transparently by the DMA engine.</p> - <p class="Pp">For example, on PCI Wi-Fi devices, the Wi-Fi core's DMA engine - will (in effect) update the PCI host bridge core's DMA - <code class="Dv">sbtopcitranslation</code> base address to map the - target address prior to performing a DMA transaction.</p> - </dd> - <dt><var class="Fa">flags</var></dt> - <dd>Translation flags.</dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss">Interrupt Functions</h2> -<p class="Pp">The - <a class="permalink" href="#bhnd_get_intr_count"><code class="Fn" id="bhnd_get_intr_count">bhnd_get_intr_count</code></a>() - function is used to determine the number of backplane interrupt lines - assigned to the device <var class="Fa">dev</var>. Interrupt line identifiers - are allocated in monotonically increasing order, starting with 0.</p> -<p class="Pp" id="bhnd_get_intr_ivec">The - <a class="permalink" href="#bhnd_get_intr_ivec"><code class="Fn">bhnd_get_intr_ivec</code></a>() - function is used to determine the backplane interrupt vector assigned to - interrupt line <var class="Fa">intr</var> on the device - <var class="Fa">dev</var>, writing the result to <var class="Fa">ivec</var>. - Interrupt vector assignments are backplane-specific: On BCMA devices, this - function returns the OOB bus line assigned to the interrupt. On SIBA - devices, it returns the target OCP slave flag number assigned to the - interrupt.</p> -<p class="Pp" id="bhnd_map_intr">The - <a class="permalink" href="#bhnd_map_intr"><code class="Fn">bhnd_map_intr</code></a>() - function is used to map interrupt line <var class="Fa">intr</var> assigned - to device <var class="Fa">dev</var> to an IRQ number, writing the result to - <var class="Fa">irq</var>. Until unmapped, this IRQ may be used when - allocating a resource of type SYS_RES_IRQ.</p> -<p class="Pp">Ownership of the interrupt mapping is assumed by the caller, and - must be explicitly released using <var class="Fa">bhnd_unmap_intr</var>.</p> -<p class="Pp" id="bhnd_unmap_intr">The - <a class="permalink" href="#bhnd_unmap_intr"><code class="Fn">bhnd_unmap_intr</code></a>() - function is used to unmap bus IRQ <var class="Fa">irq</var> previously - mapped using <code class="Fn">bhnd_map_intr</code>() by the device - <var class="Fa">dev</var>.</p> -</section> -<section class="Ss"> -<h2 class="Ss">NVRAM Functions</h2> -<p class="Pp">The <code class="Fn">bhnd_nvram_getvar</code>() function is used - to read the value of NVRAM variable <var class="Fa">name</var> from the - NVRAM provider(s) registered with the parent <a class="Xr">bhnd(4)</a> bus - of device <var class="Fa">dev</var>, coerced to the desired data - representation <var class="Fa">type</var>, written to the buffer specified - by <var class="Fa">buf</var>.</p> -<p class="Pp" id="bhnd_nvram_getvar">Before the call, the maximum capacity of - <var class="Fa">buf</var> is specified by <var class="Fa">len</var>. After a - successful call — or if <code class="Er">ENOMEM</code> is returned - — the size of the available data will be written to - <var class="Fa">len</var>. The size of the desired data representation can - be determined by calling - <a class="permalink" href="#bhnd_nvram_getvar"><code class="Fn">bhnd_nvram_getvar</code></a>() - with a <code class="Dv">NULL</code> argument for - <var class="Fa">buf</var>.</p> -<p class="Pp">The following NVRAM data types are supported:</p> -<p class="Pp"></p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt id="BHND_NVRAM_TYPE_UINT8"><a class="permalink" href="#BHND_NVRAM_TYPE_UINT8"><code class="Dv">BHND_NVRAM_TYPE_UINT8</code></a></dt> - <dd>unsigned 8-bit integer</dd> - <dt id="BHND_NVRAM_TYPE_UINT16"><a class="permalink" href="#BHND_NVRAM_TYPE_UINT16"><code class="Dv">BHND_NVRAM_TYPE_UINT16</code></a></dt> - <dd>unsigned 16-bit integer</dd> - <dt id="BHND_NVRAM_TYPE_UINT32"><a class="permalink" href="#BHND_NVRAM_TYPE_UINT32"><code class="Dv">BHND_NVRAM_TYPE_UINT32</code></a></dt> - <dd>unsigned 32-bit integer</dd> - <dt id="BHND_NVRAM_TYPE_UINT64"><a class="permalink" href="#BHND_NVRAM_TYPE_UINT64"><code class="Dv">BHND_NVRAM_TYPE_UINT64</code></a></dt> - <dd>signed 64-bit integer</dd> - <dt id="BHND_NVRAM_TYPE_INT8"><a class="permalink" href="#BHND_NVRAM_TYPE_INT8"><code class="Dv">BHND_NVRAM_TYPE_INT8</code></a></dt> - <dd>signed 8-bit integer</dd> - <dt id="BHND_NVRAM_TYPE_INT16"><a class="permalink" href="#BHND_NVRAM_TYPE_INT16"><code class="Dv">BHND_NVRAM_TYPE_INT16</code></a></dt> - <dd>signed 16-bit integer</dd> - <dt id="BHND_NVRAM_TYPE_INT32"><a class="permalink" href="#BHND_NVRAM_TYPE_INT32"><code class="Dv">BHND_NVRAM_TYPE_INT32</code></a></dt> - <dd>signed 32-bit integer</dd> - <dt id="BHND_NVRAM_TYPE_INT64"><a class="permalink" href="#BHND_NVRAM_TYPE_INT64"><code class="Dv">BHND_NVRAM_TYPE_INT64</code></a></dt> - <dd>signed 64-bit integer</dd> - <dt id="BHND_NVRAM_TYPE_CHAR"><a class="permalink" href="#BHND_NVRAM_TYPE_CHAR"><code class="Dv">BHND_NVRAM_TYPE_CHAR</code></a></dt> - <dd>UTF-8 character</dd> - <dt id="BHND_NVRAM_TYPE_STRING"><a class="permalink" href="#BHND_NVRAM_TYPE_STRING"><code class="Dv">BHND_NVRAM_TYPE_STRING</code></a></dt> - <dd>UTF-8 NUL-terminated string</dd> - <dt id="BHND_NVRAM_TYPE_BOOL"><a class="permalink" href="#BHND_NVRAM_TYPE_BOOL"><code class="Dv">BHND_NVRAM_TYPE_BOOL</code></a></dt> - <dd>uint8 boolean value</dd> - <dt id="BHND_NVRAM_TYPE_NULL"><a class="permalink" href="#BHND_NVRAM_TYPE_NULL"><code class="Dv">BHND_NVRAM_TYPE_NULL</code></a></dt> - <dd>NULL (empty) value</dd> - <dt id="BHND_NVRAM_TYPE_DATA"><a class="permalink" href="#BHND_NVRAM_TYPE_DATA"><code class="Dv">BHND_NVRAM_TYPE_DATA</code></a></dt> - <dd>opaque octet string</dd> - <dt id="BHND_NVRAM_TYPE_UINT8_ARRAY"><a class="permalink" href="#BHND_NVRAM_TYPE_UINT8_ARRAY"><code class="Dv">BHND_NVRAM_TYPE_UINT8_ARRAY</code></a></dt> - <dd>array of uint8 integers</dd> - <dt id="BHND_NVRAM_TYPE_UINT16_ARRAY"><a class="permalink" href="#BHND_NVRAM_TYPE_UINT16_ARRAY"><code class="Dv">BHND_NVRAM_TYPE_UINT16_ARRAY</code></a></dt> - <dd>array of uint16 integers</dd> - <dt id="BHND_NVRAM_TYPE_UINT32_ARRAY"><a class="permalink" href="#BHND_NVRAM_TYPE_UINT32_ARRAY"><code class="Dv">BHND_NVRAM_TYPE_UINT32_ARRAY</code></a></dt> - <dd>array of uint32 integers</dd> - <dt id="BHND_NVRAM_TYPE_UINT64_ARRAY"><a class="permalink" href="#BHND_NVRAM_TYPE_UINT64_ARRAY"><code class="Dv">BHND_NVRAM_TYPE_UINT64_ARRAY</code></a></dt> - <dd>array of uint64 integers</dd> - <dt id="BHND_NVRAM_TYPE_INT8_ARRAY"><a class="permalink" href="#BHND_NVRAM_TYPE_INT8_ARRAY"><code class="Dv">BHND_NVRAM_TYPE_INT8_ARRAY</code></a></dt> - <dd>array of int8 integers</dd> - <dt id="BHND_NVRAM_TYPE_INT16_ARRAY"><a class="permalink" href="#BHND_NVRAM_TYPE_INT16_ARRAY"><code class="Dv">BHND_NVRAM_TYPE_INT16_ARRAY</code></a></dt> - <dd>array of int16 integers</dd> - <dt id="BHND_NVRAM_TYPE_INT32_ARRAY"><a class="permalink" href="#BHND_NVRAM_TYPE_INT32_ARRAY"><code class="Dv">BHND_NVRAM_TYPE_INT32_ARRAY</code></a></dt> - <dd>array of int32 integers</dd> - <dt id="BHND_NVRAM_TYPE_INT64_ARRAY"><a class="permalink" href="#BHND_NVRAM_TYPE_INT64_ARRAY"><code class="Dv">BHND_NVRAM_TYPE_INT64_ARRAY</code></a></dt> - <dd>array of int64 integers</dd> - <dt id="BHND_NVRAM_TYPE_CHAR_ARRAY"><a class="permalink" href="#BHND_NVRAM_TYPE_CHAR_ARRAY"><code class="Dv">BHND_NVRAM_TYPE_CHAR_ARRAY</code></a></dt> - <dd>array of UTF-8 characters</dd> - <dt id="BHND_NVRAM_TYPE_STRING_ARRAY"><a class="permalink" href="#BHND_NVRAM_TYPE_STRING_ARRAY"><code class="Dv">BHND_NVRAM_TYPE_STRING_ARRAY</code></a></dt> - <dd>array of UTF-8 NUL-terminated strings</dd> - <dt id="BHND_NVRAM_TYPE_BOOL_ARRAY"><a class="permalink" href="#BHND_NVRAM_TYPE_BOOL_ARRAY"><code class="Dv">BHND_NVRAM_TYPE_BOOL_ARRAY</code></a></dt> - <dd>array of uint8 boolean values</dd> -</dl> -</div> -<p class="Pp" id="bhnd_nvram_getvar_array">The - <a class="permalink" href="#bhnd_nvram_getvar_array"><code class="Fn">bhnd_nvram_getvar_array</code></a>(), - <code class="Fn">bhnd_nvram_getvar_int</code>(), - <code class="Fn">bhnd_nvram_getvar_int8</code>(), - <code class="Fn">bhnd_nvram_getvar_int16</code>(), - <code class="Fn">bhnd_nvram_getvar_int32</code>(), - <code class="Fn">bhnd_nvram_getvar_uint</code>(), - <code class="Fn">bhnd_nvram_getvar_uint8</code>(), - <code class="Fn">bhnd_nvram_getvar_uint16</code>(), - <code class="Fn">bhnd_nvram_getvar_uint32</code>(), and - <code class="Fn">bhnd_nvram_getvar_str</code>() functions are convenience - wrappers for <code class="Fn">bhnd_nvram_getvar</code>().</p> -<p class="Pp" id="bhnd_nvram_getvar_array~2">The - <a class="permalink" href="#bhnd_nvram_getvar_array~2"><code class="Fn">bhnd_nvram_getvar_array</code></a>() - function returns either a value of exactly <var class="Fa">size</var> in - <var class="Fa">buf</var>, or returns an error code of - <code class="Er">ENXIO</code> if the data representation is not exactly - <var class="Fa">size</var> in length.</p> -<p class="Pp" id="bhnd_nvram_getvar_int">The - <a class="permalink" href="#bhnd_nvram_getvar_int"><code class="Fn">bhnd_nvram_getvar_int</code></a>() - and - <a class="permalink" href="#bhnd_nvram_getvar_uint"><code class="Fn" id="bhnd_nvram_getvar_uint">bhnd_nvram_getvar_uint</code></a>() - functions return the value of NVRAM variable <var class="Fa">name</var>, - coerced to a signed or unsigned integer type of <var class="Fa">width</var> - (1, 2, or 4 bytes).</p> -<p class="Pp" id="bhnd_nvram_getvar_int8">The - <a class="permalink" href="#bhnd_nvram_getvar_int8"><code class="Fn">bhnd_nvram_getvar_int8</code></a>(), - <a class="permalink" href="#bhnd_nvram_getvar_int16"><code class="Fn" id="bhnd_nvram_getvar_int16">bhnd_nvram_getvar_int16</code></a>(), - <a class="permalink" href="#bhnd_nvram_getvar_int32"><code class="Fn" id="bhnd_nvram_getvar_int32">bhnd_nvram_getvar_int32</code></a>(), - <code class="Fn">bhnd_nvram_getvar_uint</code>(), - <a class="permalink" href="#bhnd_nvram_getvar_uint8"><code class="Fn" id="bhnd_nvram_getvar_uint8">bhnd_nvram_getvar_uint8</code></a>(), - <a class="permalink" href="#bhnd_nvram_getvar_uint16"><code class="Fn" id="bhnd_nvram_getvar_uint16">bhnd_nvram_getvar_uint16</code></a>(), - and - <a class="permalink" href="#bhnd_nvram_getvar_uint32"><code class="Fn" id="bhnd_nvram_getvar_uint32">bhnd_nvram_getvar_uint32</code></a>() - functions return the value of NVRAM variable <var class="Fa">name</var>, - coerced to a signed or unsigned 8, 16, or 32-bit integer type.</p> -<p class="Pp" id="bhnd_nvram_getvar_str">The - <a class="permalink" href="#bhnd_nvram_getvar_str"><code class="Fn">bhnd_nvram_getvar_str</code></a>() - functions return the value of NVRAM variable <var class="Fa">name</var>, - coerced to a NUL-terminated string.</p> -<p class="Pp" id="bhnd_nvram_string_array_next">The - <a class="permalink" href="#bhnd_nvram_string_array_next"><code class="Fn">bhnd_nvram_string_array_next</code></a>() - function iterates over all strings in the <var class="Fa">inp</var> - <code class="Dv">BHND_NVRAM_TYPE_STRING_ARRAY</code> value. The size of - <var class="Fa">inp</var>, including any terminating NUL character(s), is - specified using the <var class="Fa">ilen</var> argument. The - <var class="Fa">prev</var> argument should be either a string pointer - previously returned by - <code class="Fn">bhnd_nvram_string_array_next</code>(), or - <code class="Dv">NULL</code> to begin iteration. If <var class="Fa">prev is - not</var> <code class="Dv">NULL</code>, the <var class="Fa">olen</var> - argument must be a pointer to the length previously returned by - <code class="Fn">bhnd_nvram_string_array_next</code>(). On success, the next - string element's length will be written to this pointer.</p> -</section> -<section class="Ss"> -<h2 class="Ss">Port/Region Functions</h2> -<p class="Pp">Per-device interconnect memory mappings are identified by a - combination of <i class="Em">port type</i>, <i class="Em">port number</i>, - and <a class="permalink" href="#region"><i class="Em" id="region">region - number</i></a>. Port and memory region identifiers are allocated in - monotonically increasing order for each <i class="Em">port type</i>, - starting with 0.</p> -<p class="Pp">The following port types are supported:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="BHND_PORT_DEVICE"><a class="permalink" href="#BHND_PORT_DEVICE"><code class="Dv">BHND_PORT_DEVICE</code></a></dt> - <dd>Device memory. The device's control/status registers are always mapped by - the first device port and region, and will be assigned a - <code class="Dv">SYS_RES_MEMORY</code> resource ID of 0.</dd> - <dt id="BHND_PORT_BRIDGE"><a class="permalink" href="#BHND_PORT_BRIDGE"><code class="Dv">BHND_PORT_BRIDGE</code></a></dt> - <dd>Bridge memory.</dd> - <dt id="BHND_PORT_AGENT"><a class="permalink" href="#BHND_PORT_AGENT"><code class="Dv">BHND_PORT_AGENT</code></a></dt> - <dd>Interconnect agent/wrapper.</dd> -</dl> -</div> -<p class="Pp" id="bhnd_decode_port_rid">The - <a class="permalink" href="#bhnd_decode_port_rid"><code class="Fn">bhnd_decode_port_rid</code></a>() - function is used to decode the resource ID <var class="Fa">rid</var> - assigned to device <var class="Fa">dev</var>, of resource type - <var class="Fa">type</var>, writing the port type to - <var class="Fa">port_type</var>, port number to <var class="Fa">port</var>, - and region number to <var class="Fa">region</var>.</p> -<p class="Pp" id="bhnd_get_port_count">The - <a class="permalink" href="#bhnd_get_port_count"><code class="Fn">bhnd_get_port_count</code></a>() - function returns the number of ports of type <var class="Fa">type</var> - assigned to device <var class="Fa">dev</var>.</p> -<p class="Pp" id="bhnd_get_port_rid">The - <a class="permalink" href="#bhnd_get_port_rid"><code class="Fn">bhnd_get_port_rid</code></a>() - function returns the resource ID for the - <code class="Dv">SYS_RES_MEMORY</code> resource mapping the - <var class="Fa">port</var> of <var class="Fa">type</var> and - <var class="Fa">region</var> on device <var class="Fa">dev</var>, or -1 if - the port or region are invalid, or do not have an assigned resource ID.</p> -<p class="Pp" id="bhnd_get_region_addr">The - <a class="permalink" href="#bhnd_get_region_addr"><code class="Fn">bhnd_get_region_addr</code></a>() - function is used to determine the base address and size of the memory - <var class="Fa">region</var> on <var class="Fa">port</var> of - <var class="Fa">type</var> assigned to <var class="Fa">dev</var>. The - region's base device address will be written to - <var class="Fa">region_addr</var>, and the region size to - <var class="Fa">region_size</var>.</p> -<p class="Pp" id="bhnd_get_region_count">The - <a class="permalink" href="#bhnd_get_region_count"><code class="Fn">bhnd_get_region_count</code></a>() - function returns the number of memory regions mapped to - <var class="Fa">port</var> of <var class="Fa">type</var> on device - <var class="Fa">dev</var>.</p> -<p class="Pp" id="bhnd_is_region_valid">The - <a class="permalink" href="#bhnd_is_region_valid"><code class="Fn">bhnd_is_region_valid</code></a>() - function returns <code class="Dv">true</code> if - <var class="Fa">region</var> is a valid region mapped by - <var class="Fa">port</var> of <var class="Fa">type</var> on device - <var class="Fa">dev</var>.</p> -</section> -<section class="Ss"> -<h2 class="Ss">Power Management Functions</h2> -<p class="Pp">Drivers must ask the parent <a class="Xr">bhnd(4)</a> bus to - allocate device PMU state using <code class="Fn">bhnd_alloc_pmu</code>() - before calling any another bhnd PMU functions.</p> -<p class="Pp" id="bhnd_alloc_pmu">The - <a class="permalink" href="#bhnd_alloc_pmu"><code class="Fn">bhnd_alloc_pmu</code></a>() - function is used to allocate per-device PMU state and enable PMU request - handling for device <var class="Fa">dev</var>. The memory region containing - the device's PMU register block must be allocated using - <a class="Xr">bus_alloc_resource(9)</a> or - <code class="Fn">bhnd_alloc_resource</code>() before calling - <code class="Fn">bhnd_alloc_pmu</code>(), and must not be released until - after calling <code class="Fn">bhnd_release_pmu</code>().</p> -<p class="Pp">On all supported BHND hardware, the PMU register block is mapped - by the device's control/status registers in the first device port and - region.</p> -<p class="Pp" id="bhnd_release_pmu">The - <a class="permalink" href="#bhnd_release_pmu"><code class="Fn">bhnd_release_pmu</code></a>() - function releases the per-device PMU state previously allocated for device - <var class="Fa">dev</var> using <code class="Fn">bhnd_alloc_pmu</code>(). - Any outstanding clock and external resource requests will be discarded upon - release of the device PMU state.</p> -<p class="Pp" id="bhnd_enable_clocks~2">The - <a class="permalink" href="#bhnd_enable_clocks~2"><code class="Fn">bhnd_enable_clocks</code></a>() - function is used to request that <var class="Fa">clocks</var> be powered up - and routed to the backplane on behalf of device <var class="Fa">dev</var>. - This will power any clock sources required (e.g., XTAL, PLL, etc) and wait - until the requested clocks are stable. If the request succeeds, any previous - clock requests issued by <var class="Fa">dev</var> will be discarded.</p> -<p class="Pp">The following clocks are supported, and may be combined using - bitwise OR to request multiple clocks:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt>BHND_CLOCK_DYN</dt> - <dd>Dynamically select an appropriate clock source based on all outstanding - clock requests by any device attached to the parent - <a class="Xr">bhnd(4)</a> bus.</dd> - <dt>BHND_CLOCK_ILP</dt> - <dd>Idle Low-Power (ILP) Clock. May be used if no register access is required, - or long request latency is acceptable.</dd> - <dt>BHND_CLOCK_ALP</dt> - <dd>Active Low-Power (ALP) Clock. Supports low-latency register access and - low-rate DMA.</dd> - <dt>BHND_CLOCK_HT</dt> - <dd>High Throughput (HT) Clock. Supports high bus throughput and - lowest-latency register access.</dd> -</dl> -</div> -<p class="Pp" id="bhnd_request_clock">The - <a class="permalink" href="#bhnd_request_clock"><code class="Fn">bhnd_request_clock</code></a>() - function is used to request that <var class="Fa">clock</var> (or faster) be - powered up and routed to device <var class="Fa">dev</var>.</p> -<p class="Pp" id="bhnd_get_clock_freq">The - <a class="permalink" href="#bhnd_get_clock_freq"><code class="Fn">bhnd_get_clock_freq</code></a>() - function is used to request the current clock frequency of - <var class="Fa">clock</var>, writing the frequency in Hz to - <var class="Fa">freq</var>.</p> -<p class="Pp" id="bhnd_get_clock_latency">The - <a class="permalink" href="#bhnd_get_clock_latency"><code class="Fn">bhnd_get_clock_latency</code></a>() - function is used to determine the transition latency required for - <var class="Fa">clock</var>, writing the latency in microseconds to - <var class="Fa">latency</var>. The <code class="Dv">BHND_CLOCK_HT</code> - latency value is suitable for use as the D11 Wi-Fi core - <a class="permalink" href="#fastpwrup_dly"><i class="Em" id="fastpwrup_dly">fastpwrup_dly</i></a> - value.</p> -<p class="Pp" id="bhnd_request_ext_rsrc">The - <a class="permalink" href="#bhnd_request_ext_rsrc"><code class="Fn">bhnd_request_ext_rsrc</code></a>() - function is used to request that the external PMU-managed resource assigned - to device <var class="Fa">dev</var>, identified by device-specific - identifier <var class="Fa">rsrc</var>, be powered up.</p> -<p class="Pp" id="bhnd_release_ext_rsrc">The - <a class="permalink" href="#bhnd_release_ext_rsrc"><code class="Fn">bhnd_release_ext_rsrc</code></a>() - function releases any outstanding requests by device - <var class="Fa">dev</var> for the PMU-managed resource identified by - device-specific identifier <var class="Fa">rsrc</var>. If an external - resource is shared by multiple devices, it will not be powered down until - all device requests are released.</p> -</section> -<section class="Ss"> -<h2 class="Ss">Service Provider Functions</h2> -<p class="Pp">The - <a class="permalink" href="#bhnd_register_provider"><code class="Fn" id="bhnd_register_provider">bhnd_register_provider</code></a>() - function is used to register device <var class="Fa">dev</var> as a provider - for platform <var class="Fa">service</var> with the parent - <a class="Xr">bhnd(4)</a> bus.</p> -<p class="Pp">The following service types are supported:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="BHND_SERVICE_CHIPC"><a class="permalink" href="#BHND_SERVICE_CHIPC"><code class="Dv">BHND_SERVICE_CHIPC</code></a></dt> - <dd>ChipCommon service. The providing device must implement the bhnd_chipc - interface.</dd> - <dt id="BHND_SERVICE_PWRCTL"><a class="permalink" href="#BHND_SERVICE_PWRCTL"><code class="Dv">BHND_SERVICE_PWRCTL</code></a></dt> - <dd>Legacy PWRCTL service. The providing device must implement the bhnd_pwrctl - interface.</dd> - <dt id="BHND_SERVICE_PMU"><a class="permalink" href="#BHND_SERVICE_PMU"><code class="Dv">BHND_SERVICE_PMU</code></a></dt> - <dd>PMU service. The providing device must implement the bhnd_pmu - interface.</dd> - <dt id="BHND_SERVICE_NVRAM"><a class="permalink" href="#BHND_SERVICE_NVRAM"><code class="Dv">BHND_SERVICE_NVRAM</code></a></dt> - <dd>NVRAM service. The providing device must implement the bhnd_nvram - interface.</dd> - <dt id="BHND_SERVICE_GPIO"><a class="permalink" href="#BHND_SERVICE_GPIO"><code class="Dv">BHND_SERVICE_GPIO</code></a></dt> - <dd>GPIO service. The providing device must implement the standard - <a class="Xr">gpio(4)</a> interface.</dd> - <dt id="BHND_SERVICE_ANY"><a class="permalink" href="#BHND_SERVICE_ANY"><code class="Dv">BHND_SERVICE_ANY</code></a></dt> - <dd>Matches on any service type. May be used with - <a class="permalink" href="#bhnd_deregister_provider"><code class="Fn" id="bhnd_deregister_provider">bhnd_deregister_provider</code></a>() - to remove all service provider registrations for a device.</dd> -</dl> -</div> -<p class="Pp" id="bhnd_deregister_provider~2">The - <a class="permalink" href="#bhnd_deregister_provider~2"><code class="Fn">bhnd_deregister_provider</code></a>() - function attempts to remove provider registration for the device - <var class="Fa">dev</var> and <var class="Fa">service</var>. If a - <var class="Fa">service</var> argument of - <code class="Dv">BHND_SERVICE_ANY</code> is specified, this function will - attempt to remove - <a class="permalink" href="#all"><i class="Em" id="all">all service provider - registrations for</i></a> <var class="Fa">dev</var>.</p> -<p class="Pp" id="bhnd_retain_provider">The - <a class="permalink" href="#bhnd_retain_provider"><code class="Fn">bhnd_retain_provider</code></a>() - function retains and returns a reference to the provider registered for - <var class="Fa">service</var> with the parent <a class="Xr">bhnd(4)</a> bus - of device <var class="Fa">dev</var>, if available. On success, the caller is - responsible for releasing this provider reference using - <code class="Fn">bhnd_release_provider</code>(). The service provider is - guaranteed to remain available until the provider reference is released.</p> -<p class="Pp" id="bhnd_release_provider">The - <a class="permalink" href="#bhnd_release_provider"><code class="Fn">bhnd_release_provider</code></a>() - function releases a reference to a <var class="Fa">provider</var> for - <var class="Fa">service</var>, previously retained by device - <var class="Fa">dev</var> using - <code class="Fn">bhnd_retain_provider</code>().</p> -</section> -<section class="Ss"> -<h2 class="Ss">Utility Functions</h2> -<p class="Pp">The - <a class="permalink" href="#bhnd_driver_get_erom_class"><code class="Fn" id="bhnd_driver_get_erom_class">bhnd_driver_get_erom_class</code></a>() - function returns the <a class="Xr">bhnd_erom(9)</a> class for the device - enumeration table format used by <a class="Xr">bhnd(4)</a> bus driver - instance <var class="Fa">driver</var>. If the driver does not support - <a class="Xr">bhnd_erom(9)</a> device enumeration, - <code class="Dv">NULL</code> is returned.</p> -<p class="Pp" id="bhnd_find_core_class">The - <a class="permalink" href="#bhnd_find_core_class"><code class="Fn">bhnd_find_core_class</code></a>() - function looks up the BHND class, if known, for the BHND vendor ID - <var class="Fa">vendor</var> and device ID <var class="Fa">device</var>.</p> -<p class="Pp" id="bhnd_find_core_name">The - <a class="permalink" href="#bhnd_find_core_name"><code class="Fn">bhnd_find_core_name</code></a>() - function is used to fetch the human-readable name, if known, for the BHND - core with a vendor ID of <var class="Fa">vendor</var> and device ID of - <var class="Fa">device</var>.</p> -<p class="Pp" id="bhnd_core_class">The - <a class="permalink" href="#bhnd_core_class"><code class="Fn">bhnd_core_class</code></a>() - and - <a class="permalink" href="#bhnd_core_name"><code class="Fn" id="bhnd_core_name">bhnd_core_name</code></a>() - functions are convenience wrappers for - <code class="Fn">bhnd_find_core_class</code>() and - <code class="Fn">bhnd_find_core_name</code>(), that use the - <var class="Fa">vendor</var> and <var class="Fa">device</var> fields of the - core info structure <var class="Fa">ci</var>.</p> -<p class="Pp" id="bhnd_format_chip_id">The - <a class="permalink" href="#bhnd_format_chip_id"><code class="Fn">bhnd_format_chip_id</code></a>() - function writes a NUL-terminated human-readable representation of the BHND - <var class="Fa">chip_id</var> value to the specified - <var class="Fa">buffer</var> with a capacity of <var class="Fa">size</var>. - No more than <var class="Fa">size-1</var> characters will be written, with - the <var class="Fa">size'th</var> character set to '\0'. A buffer size of - <code class="Dv">BHND_CHIPID_MAX_NAMELEN</code> is sufficient for any string - representation produced using - <code class="Fn">bhnd_format_chip_id</code>().</p> -<p class="Pp" id="bhnd_set_custom_core_desc">The - <a class="permalink" href="#bhnd_set_custom_core_desc"><code class="Fn">bhnd_set_custom_core_desc</code></a>() - function uses the <a class="Xr">bhnd(4)</a> device identification of - <var class="Fa">dev</var>, overriding the core name with the specified - <var class="Fa">dev_name</var>, to populate the device's verbose description - using <a class="Xr">device_set_desc(9)</a>.</p> -<p class="Pp" id="bhnd_set_default_core_desc">The - <a class="permalink" href="#bhnd_set_default_core_desc"><code class="Fn">bhnd_set_default_core_desc</code></a>() - function uses the <a class="Xr">bhnd(4)</a> device identification of - <var class="Fa">dev</var> to populate the device's verbose description using - <a class="Xr">device_set_desc(9)</a>.</p> -<p class="Pp" id="bhnd_vendor_name">The - <a class="permalink" href="#bhnd_vendor_name"><code class="Fn">bhnd_vendor_name</code></a>() - function returns the human-readable name for the JEP-106, ARM 4-bit - continuation encoded manufacturer ID <var class="Fa">vendor</var>, if - known.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<section class="Ss"> -<h2 class="Ss">Bus Resource Functions</h2> -<p class="Pp">The <code class="Fn">bhnd_activate_resource</code>(), - <code class="Fn">bhnd_alloc_resources</code>(), - <code class="Fn">bhnd_deactivate_resource</code>(), and - <code class="Fn">bhnd_release_resource</code>() functions return 0 on - success, otherwise an appropriate error code is returned.</p> -<p class="Pp">The <code class="Fn">bhnd_alloc_resource</code>() and - <code class="Fn">bhnd_alloc_resource_any</code>() functions return a pointer - to <var class="Vt">struct resource</var> on success, a null pointer - otherwise.</p> -</section> -<section class="Ss"> -<h2 class="Ss">Device Configuration Functions</h2> -<p class="Pp">The <code class="Fn">bhnd_read_config</code>() and - <code class="Fn">bhnd_write_config</code>() functions return 0 on success, - or one of the following values on error:</p> -<dl class="Bl-tag"> - <dt>[<code class="Er">EINVAL</code>]</dt> - <dd>The device is not a direct child of the <a class="Xr">bhnd(4)</a> bus</dd> - <dt>[<code class="Er">EINVAL</code>]</dt> - <dd>The requested width is not one of 1, 2, or 4 bytes.</dd> - <dt>[<code class="Er">ENODEV</code>]</dt> - <dd>Accessing agent/config space for the device is unsupported.</dd> - <dt>[<code class="Er">EFAULT</code>]</dt> - <dd>The requested offset or width exceeds the bounds of the mapped - agent/config space.</dd> -</dl> -<p class="Pp">The <code class="Fn">bhnd_read_ioctl</code>(), - <code class="Fn">bhnd_write_ioctl</code>(), - <code class="Fn">bhnd_read_iost</code>(), - <code class="Fn">bhnd_reset_hw</code>(), and - <code class="Fn">bhnd_suspend_hw</code>() functions return 0 on success, - otherwise an appropriate error code is returned.</p> -</section> -<section class="Ss"> -<h2 class="Ss">Device Information Functions</h2> -<p class="Pp">The <code class="Fn">bhnd_read_board_info</code>() function - returns 0 on success, otherwise an appropriate error code is returned.</p> -</section> -<section class="Ss"> -<h2 class="Ss">DMA Address Translation Functions</h2> -<p class="Pp">The <code class="Fn">bhnd_get_dma_translation</code>() function - returns 0 on success, or one of the following values on error:</p> -<dl class="Bl-tag"> - <dt>[<code class="Er">ENODEV</code>]</dt> - <dd>DMA is not supported.</dd> - <dt>[<code class="Er">ENOENT</code>]</dt> - <dd>No DMA translation matching the requested address width and translation - flags is available.</dd> -</dl> -<p class="Pp">If fetching the requested DMA address translation otherwise fails, - an appropriate error code will be returned.</p> -</section> -<section class="Ss"> -<h2 class="Ss">Interrupt Functions</h2> -<p class="Pp">The <code class="Fn">bhnd_get_intr_ivec</code>() function returns - 0 on success, or <code class="Er">ENXIO</code> if the requested interrupt - line exceeds the number of interrupt lines assigned to the device.</p> -<p class="Pp">The <code class="Fn">bhnd_map_intr</code>() function returns 0 on - success, otherwise an appropriate error code is returned.</p> -</section> -<section class="Ss"> -<h2 class="Ss">NVRAM Functions</h2> -<p class="Pp">The <code class="Fn">bhnd_nvram_getvar</code>(), - <code class="Fn">bhnd_nvram_getvar_array</code>(), - <code class="Fn">bhnd_nvram_getvar_int</code>(), - <code class="Fn">bhnd_nvram_getvar_int8</code>(), - <code class="Fn">bhnd_nvram_getvar_int16</code>(), - <code class="Fn">bhnd_nvram_getvar_int32</code>(), - <code class="Fn">bhnd_nvram_getvar_uint</code>(), - <code class="Fn">bhnd_nvram_getvar_uint8</code>(), - <code class="Fn">bhnd_nvram_getvar_uint16</code>(), and - <code class="Fn">bhnd_nvram_getvar_uint32</code>() functions return 0 on - success, or one of the following values on error:</p> -<dl class="Bl-tag"> - <dt>[<code class="Er">ENODEV</code>]</dt> - <dd>If an NVRAM provider has not been registered with the bus.</dd> - <dt>[<code class="Er">ENOENT</code>]</dt> - <dd>The requested variable was not found.</dd> - <dt>[<code class="Er">ENOMEM</code>]</dt> - <dd>If the buffer of size is too small to hold the requested value.</dd> - <dt>[<code class="Er">EOPNOTSUPP</code>]</dt> - <dd>If the value's native type is incompatible with and cannot be coerced to - the requested type.</dd> - <dt>[<code class="Er">ERANGE</code>]</dt> - <dd>If value coercion would overflow (or underflow) the requested type</dd> -</dl> -<p class="Pp">If reading the variable otherwise fails, an appropriate error code - will be returned.</p> -</section> -<section class="Ss"> -<h2 class="Ss">Port/Region Functions</h2> -<p class="Pp">The <code class="Fn">bhnd_decode_port_rid</code>() function - returns 0 on success, or an appropriate error code if no matching - port/region is found.</p> -<p class="Pp">The <code class="Fn">bhnd_get_port_rid</code>() function returns - the resource ID for the requested port and region, or -1 if the port or - region are invalid, or do not have an assigned resource ID.</p> -<p class="Pp">The <code class="Fn">bhnd_get_region_addr</code>() function - returns 0 on success, or an appropriate error code if no matching - port/region is found.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="PMU_Functions"><a class="permalink" href="#PMU_Functions">PMU - Functions</a></h2> -<p class="Pp">The <code class="Fn">bhnd_alloc_pmu</code>() function returns 0 on - success, otherwise an appropriate error code is returned.</p> -<p class="Pp">The <code class="Fn">bhnd_release_pmu</code>() function returns 0 - on success, otherwise an appropriate error code is returned, and the core - state will be left unmodified.</p> -<p class="Pp">The <code class="Fn">bhnd_enable_clocks</code>() and - <code class="Fn">bhnd_request_clock</code>() functions return 0 on success, - or one of the following values on error:</p> -<dl class="Bl-tag"> - <dt>[<code class="Er">ENODEV</code>]</dt> - <dd>An unsupported clock was requested.</dd> - <dt>[<code class="Er">ENXIO</code>]</dt> - <dd>No PMU or PWRCTL provider has been registered with the bus.</dd> -</dl> -<p class="Pp">The <code class="Fn">bhnd_get_clock_freq</code>() function returns - 0 on success, or <code class="Er">ENODEV</code> if the frequency for the - specified clock is not available.</p> -<p class="Pp">The <code class="Fn">bhnd_get_clock_latency</code>() function - returns 0 on success, or <code class="Er">ENODEV</code> if the transition - latency for the specified clock is not available.</p> -<p class="Pp">The <code class="Fn">bhnd_request_ext_rsrc</code>() and - <code class="Fn">bhnd_release_ext_rsrc</code>() functions return 0 on - success, otherwise an appropriate error code is returned.</p> -</section> -<section class="Ss"> -<h2 class="Ss">Service Provider Functions</h2> -<p class="Pp">The <code class="Fn">bhnd_register_provider</code>() function - returns 0 on success, <code class="Er">EEXIST</code> if an entry for service - already exists, or an appropriate error code if service registration - otherwise fails.</p> -<p class="Pp">The <code class="Fn">bhnd_deregister_provider</code>() function - returns 0 on success, or <code class="Er">EBUSY</code> if active references - to the service provider exist.</p> -<p class="Pp">The <code class="Fn">bhnd_retain_provider</code>() function - returns a pointer to <var class="Vt">device_t</var> on success, a null - pointer if the requested provider is not registered.</p> -</section> -<section class="Ss"> -<h2 class="Ss">Utility Functions</h2> -<p class="Pp">The <code class="Fn">bhnd_format_chip_id</code>() function returns - the total number of bytes written on success, or a negative integer on - failure.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">bhnd(4)</a>, <a class="Xr">bhnd_erom(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">bhnd</code> driver programming interface and - this manual page were written by <span class="An">Landon Fuller</span> - <<a class="Mt" href="mailto:landonf@FreeBSD.org">landonf@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 26, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/bhnd_erom.9 3.html b/static/freebsd/man9/bhnd_erom.9 3.html deleted file mode 100644 index cd4de85c..00000000 --- a/static/freebsd/man9/bhnd_erom.9 3.html +++ /dev/null @@ -1,355 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BHND_EROM(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BHND_EROM(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bhnd_erom</code>, - <code class="Nm">bhnd_erom_alloc</code>, - <code class="Nm">bhnd_erom_dump</code>, - <code class="Nm">bhnd_erom_fini_static</code>, - <code class="Nm">bhnd_erom_free</code>, - <code class="Nm">bhnd_erom_free_core_table</code>, - <code class="Nm">bhnd_erom_get_core_table</code>, - <code class="Nm">bhnd_erom_init_static</code>, - <code class="Nm">bhnd_erom_io</code>, - <code class="Nm">bhnd_erom_io_fini</code>, - <code class="Nm">bhnd_erom_io_map</code>, - <code class="Nm">bhnd_erom_io_read</code>, - <code class="Nm">bhnd_erom_iobus_init</code>, - <code class="Nm">bhnd_erom_iores_new</code>, - <code class="Nm">bhnd_erom_lookup_core</code>, - <code class="Nm">bhnd_erom_lookup_core_addr</code>, - <code class="Nm">bhnd_erom_probe</code>, - <code class="Nm">bhnd_erom_probe_driver_classes</code> — - <span class="Nd">BHND device enumeration table parsing</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">dev/bhnd/bhnd.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">dev/bhnd/bhnd_erom.h</a>></code></p> -<p class="Pp"><var class="Vt">typedef struct bhnd_erom bhnd_erom_t</var>; - <br/> - <var class="Vt">typedef struct kobj_class bhnd_erom_class_t</var>; - <br/> - <var class="Vt">typedef struct bhnd_erom_static bhnd_erom_static_t</var>;</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_erom_probe</code>(<var class="Fa">bhnd_erom_class_t - *cls</var>, <var class="Fa">struct bhnd_erom_io *eio</var>, - <var class="Fa">const struct bhnd_chipid *hint</var>, <var class="Fa">struct - bhnd_chipid *cid</var>);</p> -<p class="Pp"><var class="Ft">bhnd_erom_class_t *</var> - <br/> - <code class="Fn">bhnd_erom_probe_driver_classes</code>(<var class="Fa">devclass_t - bus_devclass</var>, <var class="Fa">struct bhnd_erom_io *eio</var>, - <var class="Fa">const struct bhnd_chipid *hint</var>, <var class="Fa">struct - bhnd_chipid *cid</var>);</p> -<p class="Pp"><var class="Ft">bhnd_erom_t *</var> - <br/> - <code class="Fn">bhnd_erom_alloc</code>(<var class="Fa">bhnd_erom_class_t - *cls</var>, <var class="Fa">const struct bhnd_chipid *cid</var>, - <var class="Fa">struct bhnd_erom_io *eio</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_erom_free</code>(<var class="Fa">bhnd_erom_t - *erom</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_erom_init_static</code>(<var class="Fa">bhnd_erom_class_t - *cls</var>, <var class="Fa">bhnd_erom_t *erom</var>, <var class="Fa">size_t - esize</var>, <var class="Fa">const struct bhnd_chipid *cid</var>, - <var class="Fa">struct bhnd_erom_io *eio</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_erom_fini_static</code>(<var class="Fa">bhnd_erom_t - *erom</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_erom_dump</code>(<var class="Fa">bhnd_erom_t - *erom</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_erom_get_core_table</code>(<var class="Fa">bhnd_erom_t - *erom</var>, <var class="Fa">struct bhnd_core_info **cores</var>, - <var class="Fa">u_int *num_cores</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_erom_free_core_table</code>(<var class="Fa">bhnd_erom_t - *erom</var>, <var class="Fa">struct bhnd_core_info *cores</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_erom_lookup_core</code>(<var class="Fa">bhnd_erom_t - *erom</var>, <var class="Fa">const struct bhnd_core_match *desc</var>, - <var class="Fa">struct bhnd_core_info *core</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_erom_lookup_core_addr</code>(<var class="Fa">bhnd_erom_t - *erom</var>, <var class="Fa">const struct bhnd_core_match *desc</var>, - <var class="Fa">bhnd_port_type type</var>, <var class="Fa">u_int port</var>, - <var class="Fa">u_int region</var>, <var class="Fa">struct bhnd_core_info - *core</var>, <var class="Fa">bhnd_addr_t *addr</var>, - <var class="Fa">bhnd_size_t *size</var>);</p> -<section class="Ss"> -<h2 class="Ss">Bus Space I/O</h2> -<p class="Pp"><var class="Ft">struct bhnd_erom_io *</var> - <br/> - <code class="Fn">bhnd_erom_iores_new</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">int rid</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_erom_iobus_init</code>(<var class="Fa">struct - bhnd_erom_iobus *iobus</var>, <var class="Fa">bhnd_addr_t addr</var>, - <var class="Fa">bhnd_size_t size</var>, <var class="Fa">bus_space_tag_t - bst</var>, <var class="Fa">bus_space_handle_t bsh</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bhnd_erom_io_fini</code>(<var class="Fa">struct bhnd_erom_io - *eio</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bhnd_erom_io_map</code>(<var class="Fa">struct bhnd_erom_io - *eio</var>, <var class="Fa">bhnd_addr_t addr</var>, - <var class="Fa">bhnd_size_t size</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">bhnd_erom_io_read</code>(<var class="Fa">struct bhnd_erom_io - *eio</var>, <var class="Fa">bhnd_size_t offset</var>, <var class="Fa">u_int - width</var>);</p> -<p class="Pp"><code class="In">#include - <<a class="In">dev/bhnd/bhnd_eromvar.h</a>></code></p> -<div class="Bd Pp Li"> -<pre>struct bhnd_erom_io { - bhnd_erom_io_map_t *map; - bhnd_erom_io_read_t *read; - bhnd_erom_io_fini_t *fini; -};</pre> -</div> -<br/> -<var class="Ft">typedef int</var> -<br/> -<code class="Fn">(bhnd_erom_io_map_t)</code>(<var class="Fa">struct bhnd_erom_io - *eio</var>, <var class="Fa">bhnd_addr_t addr</var>, - <var class="Fa">bhnd_size_t size</var>); -<p class="Pp"><var class="Ft">typedef uint32_t</var> - <br/> - <code class="Fn">(bhnd_erom_io_read_t)</code>(<var class="Fa">struct - bhnd_erom_io *eio</var>, <var class="Fa">bhnd_size_t offset</var>, - <var class="Fa">u_int width</var>);</p> -<p class="Pp"><var class="Ft">typedef void</var> - <br/> - <code class="Fn">(bhnd_erom_io_fini_t)</code>(<var class="Fa">struct - bhnd_erom_io *eio</var>);</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">bhnd_erom</code> framework provides a common - parser interface to the BHND device enumeration table formats supported by - <a class="Xr">bhnd(4)</a> bus drivers.</p> -<p class="Pp" id="bhnd_erom_probe">The - <a class="permalink" href="#bhnd_erom_probe"><code class="Fn">bhnd_erom_probe</code></a>() - function is used to identify a <a class="Xr">bhnd(4)</a> bus device and - determine whether the erom class <var class="Fa">cls</var> is capable of - parsing its device enumeration table. If successful, the probed chip - identification is written to the location pointed to by - <var class="Fa">cid</var>.</p> -<p class="Pp" id="bhnd_erom_io_map">A pointer to a bus I/O instance mapping the - device registers of the first hardware core must be provided using the - <var class="Fa">eio</var> argument. The registers can be mapped using - <a class="permalink" href="#bhnd_erom_io_map"><code class="Fn">bhnd_erom_io_map</code></a>().</p> -<p class="Pp">On devices that do not provide standard - <a class="Xr">bhnd_chipc(4)</a> chip identification registers via the first - hardware core, a pointer to chip information for the device must be - specified using the <var class="Fa">hint</var> argument. Otherwise, the - <var class="Fa">hint</var> argument should be - <code class="Dv">NULL</code>.</p> -<p class="Pp" id="bhnd_erom_probe_driver_classes">The - <a class="permalink" href="#bhnd_erom_probe_driver_classes"><code class="Fn">bhnd_erom_probe_driver_classes</code></a>() - function is a convenience wrapper for - <code class="Fn">bhnd_erom_probe</code>(). This function will iterate over - all drivers instances in the device class - <var class="Fa">bus_devclass</var>, using - <a class="Xr">bhnd_driver_get_erom_class(9)</a> to fetch each driver's erom - class and probe the hardware core mapped by <var class="Fa">eio</var>. A - pointer to the erom class with the highest probe priority is returned on - success. If there are no successful probe results from the erom classes, - <code class="Dv">NULL</code> is returned.</p> -<p class="Pp" id="bhnd_erom_alloc">The - <a class="permalink" href="#bhnd_erom_alloc"><code class="Fn">bhnd_erom_alloc</code></a>() - function allocates and returns a new parser instance of the device - enumeration class <var class="Fa">cls</var> for the chip identified by - <var class="Fa">cid</var>, using the bus I/O instance - <var class="Fa">eio</var> to map and read the device table. On success, the - returned <var class="Vt">bhnd_erom_t</var> assumes ownership of - <var class="Fa">eio</var>.</p> -<p class="Pp" id="bhnd_erom_free">The - <a class="permalink" href="#bhnd_erom_free"><code class="Fn">bhnd_erom_free</code></a>() - function releases all resources held by an erom parser successfully - allocated using <code class="Fn">bhnd_erom_alloc</code>().</p> -<p class="Pp" id="bhnd_erom_init_static">Clients can manage the allocation of - memory themselves with - <a class="permalink" href="#bhnd_erom_init_static"><code class="Fn">bhnd_erom_init_static</code></a>(). - This is useful in cases like performing device enumeration before - <a class="Xr">malloc(9)</a> initialization. - <code class="Fn">bhnd_erom_init_static</code>() is called with - <var class="Fa">erom</var> set to a pointer to the memory for the instance, - and the total available bytes in <var class="Fa">esize</var>.</p> -<p class="Pp">The <var class="Vt">bhnd_erom_static</var> structure is large - enough to statically allocate any supported parser class instance state. - Pointers to a <var class="Vt">bhnd_erom_static</var> structure can be cast - to <var class="Vt">bhnd_erom_t</var>.</p> -<p class="Pp" id="bhnd_erom_fini_static">The - <a class="permalink" href="#bhnd_erom_fini_static"><code class="Fn">bhnd_erom_fini_static</code></a>() - function releases all resources held by an erom parser successfully - initialized using <code class="Fn">bhnd_erom_init_static</code>().</p> -<p class="Pp" id="bhnd_erom_dump">The - <a class="permalink" href="#bhnd_erom_dump"><code class="Fn">bhnd_erom_dump</code></a>() - function enumerates and prints all device table entries in - <var class="Fa">erom</var>.</p> -<p class="Pp" id="bhnd_erom_get_core_table">The - <a class="permalink" href="#bhnd_erom_get_core_table"><code class="Fn">bhnd_erom_get_core_table</code></a>() - function enumerates all device table entries in <var class="Fa">erom</var>, - returning a table of core information structures in - <var class="Fa">cores</var> and the count in - <var class="Fa">num_cores</var>. The memory allocated for the table must be - freed using <code class="Fn">bhnd_erom_free_core_table</code>().</p> -<p class="Pp" id="bhnd_erom_free_core_table">The - <a class="permalink" href="#bhnd_erom_free_core_table"><code class="Fn">bhnd_erom_free_core_table</code></a>() - function frees any memory allocated in a previous call to - <code class="Fn">bhnd_erom_get_core_table</code>().</p> -<p class="Pp" id="bhnd_erom_lookup_core">The - <a class="permalink" href="#bhnd_erom_lookup_core"><code class="Fn">bhnd_erom_lookup_core</code></a>() - function locates the first device table entry in <var class="Fa">erom</var> - that matches core match descriptor <var class="Fa">desc</var>, writing the - core information of the matching entry to <var class="Fa">core</var>.</p> -<p class="Pp" id="bhnd_erom_lookup_core_addr">The - <a class="permalink" href="#bhnd_erom_lookup_core_addr"><code class="Fn">bhnd_erom_lookup_core_addr</code></a>() - function locates the first device table entry in <var class="Fa">erom</var> - that matches core match descriptor <var class="Fa">desc</var>, fetching the - base address and size of the memory region <var class="Fa">region</var> - mapped to the port <var class="Fa">port</var> of type - <var class="Fa">type</var>. On success, the core information of the matching - entry is written to <var class="Fa">core</var>, the base address of the port - region is written to <var class="Fa">addr</var>, and the total size of the - port region is written to <var class="Fa">size</var>. If the core - information is not desired, set <var class="Fa">core</var> to - <code class="Dv">NULL</code>.</p> -<section class="Ss"> -<h2 class="Ss">Bus Space I/O</h2> -<p class="Pp">The <var class="Vt">bhnd_erom_io</var> structure provides a set of - I/O callbacks used by <code class="Nm">bhnd_erom</code> to map and read the - device enumeration table. Clients may either use the existing - <code class="Fn">bhnd_erom_iores_new</code>() or - <code class="Fn">bhnd_erom_iobus_init</code>() functions to allocate a bus - I/O instance, or implement the <var class="Vt">bhnd_erom_io</var> callbacks - directly.</p> -<p class="Pp">The <var class="Vt">bhnd_erom_io</var> structure contains these - required fields:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="bhnd_erom_io_map~2"><var class="Fa">map</var></dt> - <dd>A function implementing - <a class="permalink" href="#bhnd_erom_io_map~2"><code class="Fn">bhnd_erom_io_map</code></a>().</dd> - <dt><var class="Fa">read</var></dt> - <dd>A function implementing <code class="Fn">bhnd_erom_io_read</code>().</dd> - <dt><var class="Fa">fini</var></dt> - <dd>A function implementing <code class="Fn">bhnd_erom_io_fini</code>().</dd> -</dl> -</div> -<p class="Pp" id="bhnd_erom_iores_new">The - <a class="permalink" href="#bhnd_erom_iores_new"><code class="Fn">bhnd_erom_iores_new</code></a>() - function allocates and returns a new bus I/O instance that will perform - mapping by using <a class="Xr">bhnd_alloc_resource(9)</a> to allocate - <code class="Dv">SYS_RES_MEMORY</code> bus resources on demand from the - device <var class="Fa">dev</var> using a resource ID of - <var class="Fa">rid</var>.</p> -<p class="Pp" id="bhnd_erom_iobus_init">The - <a class="permalink" href="#bhnd_erom_iobus_init"><code class="Fn">bhnd_erom_iobus_init</code></a>() - function initializes a caller-allocated bus I/O instance - <var class="Fa">iobus</var> that will perform bus I/O using the bus space - tag <var class="Fa">bst</var> and handle <var class="Fa">bsh</var>. The base - address and total size mapped by <var class="Fa">bsh</var> should be - specified using the <var class="Fa">addr</var> and - <var class="Fa">size</var> arguments.</p> -<p class="Pp" id="bhnd_erom_io_fini">The - <a class="permalink" href="#bhnd_erom_io_fini"><code class="Fn">bhnd_erom_io_fini</code></a>() - function frees all resources held by the bus I/O instance - <var class="Fa">eio</var>.</p> -<p class="Pp" id="bhnd_erom_io_map~3">The - <a class="permalink" href="#bhnd_erom_io_map~3"><code class="Fn">bhnd_erom_io_map</code></a>() - function is used to request that the bus I/O instance - <var class="Fa">eio</var> map <a class="Xr">bhnd(4)</a> bus space at bus - address <var class="Fa">addr</var> with a mapping of size - <var class="Fa">size</var>.</p> -<p class="Pp" id="bhnd_erom_io_read">The - <a class="permalink" href="#bhnd_erom_io_read"><code class="Fn">bhnd_erom_io_read</code></a>() - function is used to read a data item of <var class="Fa">width</var> bytes - from the bus I/O instance <var class="Fa">eio</var> at - <var class="Fa">offset</var>, relative to the bus address previously mapped - using <code class="Fn">bhnd_erom_io_map</code>().</p> -<p class="Pp">The <var class="Fa">width</var> must be one of 1, 2, or 4 - bytes.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">bhnd_erom_probe</code>() function returns a - standard <a class="Xr">DEVICE_PROBE(9)</a> result.</p> -<p class="Pp">A return value equal to or less than zero indicates success. - Values greater than zero indicates an error, and will be an appropriate - error code. For values less than or equal to zero, the erom class returning - the highest value should be used to parse the erom table. - <code class="Er">ENXIO</code> is returned if the device is not supported by - the parser.</p> -<p class="Pp">The <code class="Fn">bhnd_erom_probe_driver_classes</code>() - function returns a pointer to the probed - <var class="Vt">bhnd_erom_class_t</var> instance on success, a null pointer - otherwise.</p> -<p class="Pp">The <code class="Fn">bhnd_erom_alloc</code>() function returns a - pointer to <var class="Vt">bhnd_erom_t</var> on success, or - <code class="Dv">NULL</code> if an error occurred allocating or initializing - the EROM parser.</p> -<p class="Pp">The <code class="Fn">bhnd_erom_init_static</code>() function - returns 0 on success, <code class="Er">ENOMEM</code> if the allocation size - is smaller than required by the erom class, or an appropriate error code if - initialization otherwise fails.</p> -<p class="Pp">The <code class="Fn">bhnd_erom_lookup_core</code>() function - returns 0 on success, <code class="Er">ENOENT</code> if no matching core is - found, or an appropriate error code if parsing the device table otherwise - fails.</p> -<p class="Pp">The <code class="Fn">bhnd_erom_dump</code>(), - <code class="Fn">bhnd_erom_get_core_table</code>(), - <code class="Fn">bhnd_erom_iobus_init</code>(), - <code class="Fn">bhnd_erom_io_map</code>(), functions return 0 on success, - otherwise an appropriate error code is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">bhnd(4)</a>, <a class="Xr">bhnd(9)</a>, - <a class="Xr">bhnd_alloc_resource(9)</a>, - <a class="Xr">bhnd_driver_get_erom_class(9)</a>, - <a class="Xr">bus_space(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">bhnd_erom</code> framework and this manual - page were written by <span class="An">Landon Fuller</span> - <<a class="Mt" href="mailto:landonf@FreeBSD.org">landonf@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 9, 2017</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/bios.9 3.html b/static/freebsd/man9/bios.9 3.html deleted file mode 100644 index 59c484bb..00000000 --- a/static/freebsd/man9/bios.9 3.html +++ /dev/null @@ -1,158 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BIOS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BIOS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bios_sigsearch</code>, - <code class="Nm">bios32_SDlookup</code>, <code class="Nm">bios32</code>, - <code class="Nm">bios_oem_strings</code> — <span class="Nd">interact - with PC BIOS</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">machine/pc/bios.h</a>></code></p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">bios_sigsearch</code>(<var class="Fa" style="white-space: nowrap;">uint32_t - start</var>, <var class="Fa" style="white-space: nowrap;">u_char *sig</var>, - <var class="Fa" style="white-space: nowrap;">int siglen</var>, - <var class="Fa" style="white-space: nowrap;">int paralen</var>, - <var class="Fa" style="white-space: nowrap;">int sigofs</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bios32_SDlookup</code>(<var class="Fa" style="white-space: nowrap;">struct - bios32_SDentry *ent</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bios32</code>(<var class="Fa" style="white-space: nowrap;">struct - bios_regs *br</var>, <var class="Fa" style="white-space: nowrap;">u_int - offset</var>, <var class="Fa" style="white-space: nowrap;">u_short - segment</var>);</p> -<p class="Pp"><code class="Fn">BIOS_PADDRTOVADDR</code>(<var class="Fa" style="white-space: nowrap;">addr</var>);</p> -<p class="Pp"><code class="Fn">BIOS_VADDRTOPADDR</code>(<var class="Fa" style="white-space: nowrap;">addr</var>);</p> -<p class="Pp"><var class="Vt">extern struct bios32_SDentry PCIbios</var>; - <br/> - <var class="Vt">extern struct SMBIOS_table SMBIOStable</var>; - <br/> - <var class="Vt">extern struct DMI_table DMItable</var>;</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bios_oem_strings</code>(<var class="Fa" style="white-space: nowrap;">struct - bios_oem *oem</var>, <var class="Fa" style="white-space: nowrap;">u_char - *buffer</var>, <var class="Fa" style="white-space: nowrap;">size_t - maxlen</var>);</p> -<div class="Bd Pp Li"> -<pre>struct bios_oem_signature { - char * anchor; /* search anchor string in BIOS memory */ - size_t offset; /* offset from anchor (may be negative) */ - size_t totlen; /* total length of BIOS string to copy */ -}; -struct bios_oem_range { - u_int from; /* shouldn't be below 0xe0000 */ - u_int to; /* shouldn't be above 0xfffff */ -}; -struct bios_oem { - struct bios_oem_range range; - struct bios_oem_signature signature[]; -};</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These functions provide a general-purpose interface for dealing - with the BIOS functions and data encountered on x86 PC-architecture - systems.</p> -<dl class="Bl-tag"> - <dt id="bios_sigsearch"><a class="permalink" href="#bios_sigsearch"><code class="Fn">bios_sigsearch</code></a>()</dt> - <dd>Searches the BIOS address space for a service signature, usually an - uppercase ASCII sequence surrounded by underscores. The search begins at - <var class="Fa">start</var>, or at the beginning of the BIOS if - <var class="Fa">start</var> is zero. <var class="Fa">siglen</var> bytes of - the BIOS image and <var class="Fa">sig</var> are compared at - <var class="Fa">sigofs</var> bytes offset from the current location. If no - match is found, the current location is incremented by - <var class="Fa">paralen</var> bytes and the search repeated. If the - signature is found, its effective physical address is returned. If no - signature is found, zero is returned.</dd> - <dt id="bios_oem_strings"><a class="permalink" href="#bios_oem_strings"><code class="Fn">bios_oem_strings</code></a>()</dt> - <dd>Searches a given BIOS memory range for one or more strings, and composes a - printable concatenation of those found. The routine expects a structure - describing the BIOS address <var class="Fa">range</var> (within - <code class="Li">0xe0000</code> - <code class="Li">0xfffff</code>), and a - { <code class="Dv">NULL</code>, <code class="Li">0</code>, - <code class="Li">0</code> } -terminated array of - <var class="Vt">bios_oem_signature</var> structures which define the - <var class="Va">anchor</var> string, an <var class="Va">offset</var> from - the beginning of the match (which may be negative), and - <var class="Va">totlen</var> number of bytes to be collected from BIOS - memory starting at that offset. Unmatched anchors are ignored, whereas - matches are copied from BIOS memory starting at their corresponding - <var class="Vt">offset</var> with unprintable characters being replaced - with space, and consecutive spaces being suppressed. This composed string - is stored in <var class="Fa">buffer</var> up to the given - <var class="Fa">maxlen</var> bytes (including trailing - ‘<code class="Li">\0</code>’, and any trailing space - suppressed). If an error is encountered, i.e. trying to read out of said - BIOS range, other invalid input, or <var class="Fa">buffer</var> overflow, - a negative integer is returned, otherwise the length of the composed - string is returned. In particular, a return value of 0 means that none of - the given anchor strings were found in the specified BIOS memory - range.</dd> - <dt id="BIOS_VADDRTOPADDR"><a class="permalink" href="#BIOS_VADDRTOPADDR"><code class="Fn">BIOS_VADDRTOPADDR</code></a>()</dt> - <dd>Returns the effective physical address which corresponds to the kernel - virtual address <var class="Fa">addr</var>.</dd> - <dt id="BIOS_PADDRTOVADDR"><a class="permalink" href="#BIOS_PADDRTOVADDR"><code class="Fn">BIOS_PADDRTOVADDR</code></a>()</dt> - <dd>Returns the kernel virtual address which corresponds to the effective - physical address <var class="Fa">addr</var>.</dd> - <dt>SMBIOStable</dt> - <dd>If not NULL, points to a <var class="Ft">struct SMBIOS_table</var> - structure containing information read from the System Management BIOS - table during system startup.</dd> - <dt>DMItable</dt> - <dd>If not NULL, points to a <var class="Ft">struct DMI_table</var> structure - containing information read from the Desktop Management Interface - parameter table during system startup.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="BIOS32"><a class="permalink" href="#BIOS32">BIOS32</a></h1> -<p class="Pp">At system startup, the BIOS is scanned for the BIOS32 Service - Directory (part of the PCI specification), and the existence of the - directory is recorded. This can then be used to locate other services.</p> -<dl class="Bl-tag"> - <dt id="bios32_SDlookup"><a class="permalink" href="#bios32_SDlookup"><code class="Fn">bios32_SDlookup</code></a>()</dt> - <dd>Attempts to locate the BIOS32 service matching the 4-byte identifier - passed in the <var class="Fa">ident</var> field of the - <var class="Fa">ent</var> argument.</dd> - <dt id="bios32"><a class="permalink" href="#bios32"><code class="Fn">bios32</code></a>()</dt> - <dd>Calls a bios32 function. This presumes that the function is capable of - working within the kernel segment (normally the case). The virtual address - of the entrypoint is supplied in <var class="Fa">entry</var> and the - register arguments to the function are supplied in - <var class="Fa">args</var>.</dd> - <dt>PCIbios</dt> - <dd>If not NULL, points to a <var class="Ft">struct bios32_SDentry</var> - structure describing the PCI BIOS entrypoint which was found during system - startup.</dd> -</dl> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 9, 2005</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/bitset.9 3.html b/static/freebsd/man9/bitset.9 3.html deleted file mode 100644 index f0a617ef..00000000 --- a/static/freebsd/man9/bitset.9 3.html +++ /dev/null @@ -1,487 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BITSET(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BITSET(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bitset(9)</code> — - <code class="Nm">BITSET_DEFINE</code>, - <code class="Nm">BITSET_T_INITIALIZER</code>, - <code class="Nm">BITSET_FSET</code>, <code class="Nm">BIT_CLR</code>, - <code class="Nm">BIT_COPY</code>, <code class="Nm">BIT_ISSET</code>, - <code class="Nm">BIT_SET</code>, <code class="Nm">BIT_ZERO</code>, - <code class="Nm">BIT_FILL</code>, <code class="Nm">BIT_SETOF</code>, - <code class="Nm">BIT_EMPTY</code>, <code class="Nm">BIT_ISFULLSET</code>, - <code class="Nm">BIT_FFS</code>, <code class="Nm">BIT_FFS_AT</code>, - <code class="Nm">BIT_FLS</code>, <code class="Nm">BIT_FOREACH_ISSET</code>, - <code class="Nm">BIT_FOREACH_ISCLR</code>, - <code class="Nm">BIT_COUNT</code>, <code class="Nm">BIT_SUBSET</code>, - <code class="Nm">BIT_OVERLAP</code>, <code class="Nm">BIT_CMP</code>, - <code class="Nm">BIT_OR</code>, <code class="Nm">BIT_OR2</code>, - <code class="Nm">BIT_ORNOT</code>, <code class="Nm">BIT_ORNOT2</code>, - <code class="Nm">BIT_AND</code>, <code class="Nm">BIT_AND2</code>, - <code class="Nm">BIT_ANDNOT</code>, <code class="Nm">BIT_ANDNOT2</code>, - <code class="Nm">BIT_XOR</code>, <code class="Nm">BIT_XOR2</code>, - <code class="Nm">BIT_CLR_ATOMIC</code>, - <code class="Nm">BIT_SET_ATOMIC</code>, - <code class="Nm">BIT_SET_ATOMIC_ACQ</code>, - <code class="Nm">BIT_TEST_SET_ATOMIC</code>, - <code class="Nm">BIT_TEST_CLR_ATOMIC</code>, - <code class="Nm">BIT_AND_ATOMIC</code>, - <code class="Nm">BIT_OR_ATOMIC</code>, - <code class="Nm">BIT_COPY_STORE_REL</code> — <span class="Nd">bitset - manipulation macros</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/_bitset.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bitset.h</a>></code></p> -<p class="Pp"><code class="Fn">BITSET_DEFINE</code>(<var class="Fa" style="white-space: nowrap;">STRUCTNAME</var>, - <var class="Fa" style="white-space: nowrap;">const SETSIZE</var>);</p> -<p class="Pp"><code class="Fn">BITSET_T_INITIALIZER</code>(<var class="Fa" style="white-space: nowrap;">ARRAY_CONTENTS</var>);</p> -<p class="Pp"><code class="Fn">BITSET_FSET</code>(<var class="Fa" style="white-space: nowrap;">N_WORDS</var>);</p> -<p class="Pp"><code class="Fn">BIT_CLR</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">size_t - bit</var>, <var class="Fa" style="white-space: nowrap;">struct STRUCTNAME - *bitset</var>);</p> -<p class="Pp"><code class="Fn">BIT_COPY</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct - STRUCTNAME *from</var>, <var class="Fa" style="white-space: nowrap;">struct - STRUCTNAME *to</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">BIT_ISSET</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">size_t - bit</var>, <var class="Fa" style="white-space: nowrap;">struct STRUCTNAME - *bitset</var>);</p> -<p class="Pp"><code class="Fn">BIT_SET</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">size_t - bit</var>, <var class="Fa" style="white-space: nowrap;">struct STRUCTNAME - *bitset</var>);</p> -<p class="Pp"><code class="Fn">BIT_ZERO</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct - STRUCTNAME *bitset</var>);</p> -<p class="Pp"><code class="Fn">BIT_FILL</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct - STRUCTNAME *bitset</var>);</p> -<p class="Pp"><code class="Fn">BIT_SETOF</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">size_t - bit</var>, <var class="Fa" style="white-space: nowrap;">struct STRUCTNAME - *bitset</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">BIT_EMPTY</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct - STRUCTNAME *bitset</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">BIT_ISFULLSET</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct - STRUCTNAME *bitset</var>);</p> -<p class="Pp"><var class="Ft">long</var> - <br/> - <code class="Fn">BIT_FFS</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct - STRUCTNAME *bitset</var>);</p> -<p class="Pp"><var class="Ft">long</var> - <br/> - <code class="Fn">BIT_FFS_AT</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct - STRUCTNAME *bitset</var>, <var class="Fa" style="white-space: nowrap;">long - start</var>);</p> -<p class="Pp"><var class="Ft">long</var> - <br/> - <code class="Fn">BIT_FLS</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct - STRUCTNAME *bitset</var>);</p> -<p class="Pp"><code class="Fn">BIT_FOREACH_ISSET</code>(<var class="Fa">const - SETSIZE</var>, <var class="Fa">size_t bit</var>, <var class="Fa">const - struct STRUCTNAME *bitset</var>);</p> -<p class="Pp"><code class="Fn">BIT_FOREACH_ISCLR</code>(<var class="Fa">const - SETSIZE</var>, <var class="Fa">size_t bit</var>, <var class="Fa">const - struct STRUCTNAME *bitset</var>);</p> -<p class="Pp"><var class="Ft">long</var> - <br/> - <code class="Fn">BIT_COUNT</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct - STRUCTNAME *bitset</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">BIT_SUBSET</code>(<var class="Fa">const SETSIZE</var>, - <var class="Fa">struct STRUCTNAME *haystack</var>, <var class="Fa">struct - STRUCTNAME *needle</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">BIT_OVERLAP</code>(<var class="Fa">const SETSIZE</var>, - <var class="Fa">struct STRUCTNAME *bitset1</var>, <var class="Fa">struct - STRUCTNAME *bitset2</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">BIT_CMP</code>(<var class="Fa">const SETSIZE</var>, - <var class="Fa">struct STRUCTNAME *bitset1</var>, <var class="Fa">struct - STRUCTNAME *bitset2</var>);</p> -<p class="Pp"><code class="Fn">BIT_OR</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct - STRUCTNAME *dst</var>, <var class="Fa" style="white-space: nowrap;">struct - STRUCTNAME *src</var>);</p> -<p class="Pp"><code class="Fn">BIT_OR2</code>(<var class="Fa">const - SETSIZE</var>, <var class="Fa">struct STRUCTNAME *dst</var>, - <var class="Fa">struct STRUCTNAME *src1</var>, <var class="Fa">struct - STRUCTNAME *src2</var>);</p> -<p class="Pp"><code class="Fn">BIT_ORNOT</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct - STRUCTNAME *dst</var>, <var class="Fa" style="white-space: nowrap;">struct - STRUCTNAME *src</var>);</p> -<p class="Pp"><code class="Fn">BIT_ORNOT2</code>(<var class="Fa">const - SETSIZE</var>, <var class="Fa">struct STRUCTNAME *dst</var>, - <var class="Fa">struct STRUCTNAME *src1</var>, <var class="Fa">struct - STRUCTNAME *src2</var>);</p> -<p class="Pp"><code class="Fn">BIT_AND</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct - STRUCTNAME *dst</var>, <var class="Fa" style="white-space: nowrap;">struct - STRUCTNAME *src</var>);</p> -<p class="Pp"><code class="Fn">BIT_AND2</code>(<var class="Fa">const - SETSIZE</var>, <var class="Fa">struct STRUCTNAME *dst</var>, - <var class="Fa">struct STRUCTNAME *src1</var>, <var class="Fa">struct - STRUCTNAME *src2</var>);</p> -<p class="Pp"><code class="Fn">BIT_ANDNOT</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct - STRUCTNAME *dst</var>, <var class="Fa" style="white-space: nowrap;">struct - STRUCTNAME *src</var>);</p> -<p class="Pp"><code class="Fn">BIT_ANDNOT2</code>(<var class="Fa">const - SETSIZE</var>, <var class="Fa">struct STRUCTNAME *dst</var>, - <var class="Fa">struct STRUCTNAME *src1</var>, <var class="Fa">struct - STRUCTNAME *src2</var>);</p> -<p class="Pp"><code class="Fn">BIT_XOR</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">struct - STRUCTNAME *dst</var>, <var class="Fa" style="white-space: nowrap;">struct - STRUCTNAME *src</var>);</p> -<p class="Pp"><code class="Fn">BIT_XOR2</code>(<var class="Fa">const - SETSIZE</var>, <var class="Fa">struct STRUCTNAME *dst</var>, - <var class="Fa">struct STRUCTNAME *src1</var>, <var class="Fa">struct - STRUCTNAME *src2</var>);</p> -<p class="Pp"><code class="Fn">BIT_CLR_ATOMIC</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">size_t - bit</var>, <var class="Fa" style="white-space: nowrap;">struct STRUCTNAME - *bitset</var>);</p> -<p class="Pp"><code class="Fn">BIT_SET_ATOMIC</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">size_t - bit</var>, <var class="Fa" style="white-space: nowrap;">struct STRUCTNAME - *bitset</var>);</p> -<p class="Pp"><code class="Fn">BIT_SET_ATOMIC_ACQ</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">size_t - bit</var>, <var class="Fa" style="white-space: nowrap;">struct STRUCTNAME - *bitset</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">BIT_TEST_SET_ATOMIC</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">size_t - bit</var>, <var class="Fa" style="white-space: nowrap;">struct STRUCTNAME - *bitset</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">BIT_TEST_CLR_ATOMIC</code>(<var class="Fa" style="white-space: nowrap;">const - SETSIZE</var>, <var class="Fa" style="white-space: nowrap;">size_t - bit</var>, <var class="Fa" style="white-space: nowrap;">struct STRUCTNAME - *bitset</var>);</p> -<p class="Pp"><code class="Fn">BIT_AND_ATOMIC</code>(<var class="Fa">const - SETSIZE</var>, <var class="Fa">struct STRUCTNAME *dst</var>, - <var class="Fa">struct STRUCTNAME *src</var>);</p> -<p class="Pp"><code class="Fn">BIT_OR_ATOMIC</code>(<var class="Fa">const - SETSIZE</var>, <var class="Fa">struct STRUCTNAME *dst</var>, - <var class="Fa">struct STRUCTNAME *src</var>);</p> -<p class="Pp"><code class="Fn">BIT_COPY_STORE_REL</code>(<var class="Fa">const - SETSIZE</var>, <var class="Fa">struct STRUCTNAME *from</var>, - <var class="Fa">struct STRUCTNAME *to</var>);</p> -<p class="Pp"><code class="Fd">#define _WANT_FREEBSD_BITSET</code></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">bitset(9)</code> family of macros provide a - flexible and efficient bitset implementation if the maximum size of the set - is known at compilation. Throughout this manual page, the name - <var class="Fa">SETSIZE</var> refers to the size of the bitset in bits. - Individual bits in bitsets are referenced with indices zero through - <var class="Fa">SETSIZE - 1</var>. One example use of - <code class="In"><<a class="In">sys/bitset.h</a>></code> is - <code class="In"><<a class="In">sys/cpuset.h</a>></code>.</p> -<p class="Pp">These macros are meant to be used in the kernel and are visible if - <code class="Dv">_KERNEL is defined when</code> - <code class="In"><<a class="In">sys/_bitset.h</a>></code> or - <code class="In"><<a class="In">sys/bitset.h</a>></code> are included - in a program. Userland programs must define - <code class="Dv">_WANT_FREEBSD_BITSET</code> before including these files to - make the macros visible.</p> -<p class="Pp" id="BITSET_DEFINE">The - <a class="permalink" href="#BITSET_DEFINE"><code class="Fn">BITSET_DEFINE</code></a>() - macro defines a bitset struct <var class="Fa">STRUCTNAME</var> with room to - represent <var class="Fa">SETSIZE</var> bits.</p> -<p class="Pp" id="BITSET_T_INITIALIZER">The - <a class="permalink" href="#BITSET_T_INITIALIZER"><code class="Fn">BITSET_T_INITIALIZER</code></a>() - macro allows one to initialize a bitset struct with a compile time literal - value.</p> -<p class="Pp" id="BITSET_FSET">The - <a class="permalink" href="#BITSET_FSET"><code class="Fn">BITSET_FSET</code></a>() - macro generates a compile time literal, usable by - <code class="Fn">BITSET_T_INITIALIZER</code>(), representing a full bitset - (all bits set). For examples of - <code class="Fn">BITSET_T_INITIALIZER</code>() and - <code class="Fn">BITSET_FSET</code>() usage, see the - <a class="Sx" href="#BITSET_T_INITIALIZER_EXAMPLE">BITSET_T_INITIALIZER - EXAMPLE</a> section. The <var class="Fa">N_WORDS</var> parameter to - <code class="Fn">BITSET_FSET</code>() should be:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>__bitset_words(SETSIZE)</pre> -</div> -<p class="Pp" id="BIT_CLR">The - <a class="permalink" href="#BIT_CLR"><code class="Fn">BIT_CLR</code></a>() - macro clears bit <var class="Fa">bit</var> in the bitset pointed to by - <var class="Fa">bitset</var>. The - <a class="permalink" href="#BIT_CLR_ATOMIC"><code class="Fn" id="BIT_CLR_ATOMIC">BIT_CLR_ATOMIC</code></a>() - macro is identical, but the bit is cleared atomically. The - <a class="permalink" href="#BIT_TEST_CLR_ATOMIC"><code class="Fn" id="BIT_TEST_CLR_ATOMIC">BIT_TEST_CLR_ATOMIC</code></a>() - macro atomically clears the bit and returns whether it was set.</p> -<p class="Pp" id="BIT_COPY">The - <a class="permalink" href="#BIT_COPY"><code class="Fn">BIT_COPY</code></a>() - macro copies the contents of the bitset <var class="Fa">from</var> to the - bitset <var class="Fa">to</var>. - <a class="permalink" href="#BIT_COPY_STORE_REL"><code class="Fn" id="BIT_COPY_STORE_REL">BIT_COPY_STORE_REL</code></a>() - is similar, but copies component machine words from - <var class="Fa">from</var> and writes them to <var class="Fa">to</var> with - atomic store with release semantics. (That is, if <var class="Fa">to</var> - is composed of multiple machine words, - <code class="Fn">BIT_COPY_STORE_REL</code>() performs multiple individually - atomic operations.)</p> -<p class="Pp" id="BIT_ISSET">The - <a class="permalink" href="#BIT_ISSET"><code class="Fn">BIT_ISSET</code></a>() - macro returns <code class="Dv">true</code> if the bit - <var class="Fa">bit</var> in the bitset pointed to by - <var class="Fa">bitset</var> is set.</p> -<p class="Pp" id="BIT_SET">The - <a class="permalink" href="#BIT_SET"><code class="Fn">BIT_SET</code></a>() - macro sets bit <var class="Fa">bit</var> in the bitset pointed to by - <var class="Fa">bitset</var>. The - <a class="permalink" href="#BIT_SET_ATOMIC"><code class="Fn" id="BIT_SET_ATOMIC">BIT_SET_ATOMIC</code></a>() - macro is identical, but the bit is set atomically. The - <a class="permalink" href="#BIT_SET_ATOMIC_ACQ"><code class="Fn" id="BIT_SET_ATOMIC_ACQ">BIT_SET_ATOMIC_ACQ</code></a>() - macro sets the bit with acquire semantics. The - <a class="permalink" href="#BIT_TEST_SET_ATOMIC"><code class="Fn" id="BIT_TEST_SET_ATOMIC">BIT_TEST_SET_ATOMIC</code></a>() - macro atomically sets the bit and returns whether it was set.</p> -<p class="Pp" id="BIT_ZERO">The - <a class="permalink" href="#BIT_ZERO"><code class="Fn">BIT_ZERO</code></a>() - macro clears all bits in <var class="Fa">bitset</var>.</p> -<p class="Pp" id="BIT_FILL">The - <a class="permalink" href="#BIT_FILL"><code class="Fn">BIT_FILL</code></a>() - macro sets all bits in <var class="Fa">bitset</var>.</p> -<p class="Pp" id="BIT_SETOF">The - <a class="permalink" href="#BIT_SETOF"><code class="Fn">BIT_SETOF</code></a>() - macro clears all bits in <var class="Fa">bitset</var> before setting only - bit <var class="Fa">bit</var>.</p> -<p class="Pp" id="BIT_EMPTY">The - <a class="permalink" href="#BIT_EMPTY"><code class="Fn">BIT_EMPTY</code></a>() - macro returns <code class="Dv">true</code> if <var class="Fa">bitset</var> - is empty.</p> -<p class="Pp" id="BIT_ISFULLSET">The - <a class="permalink" href="#BIT_ISFULLSET"><code class="Fn">BIT_ISFULLSET</code></a>() - macro returns <code class="Dv">true</code> if <var class="Fa">bitset</var> - is full (all bits set).</p> -<p class="Pp" id="BIT_FFS">The - <a class="permalink" href="#BIT_FFS"><code class="Fn">BIT_FFS</code></a>() - macro returns the 1-index of the first (lowest) set bit in - <var class="Fa">bitset</var>, or zero if <var class="Fa">bitset</var> is - empty. Like with <a class="Xr">ffs(3)</a>, to use the non-zero result of - <code class="Fn">BIT_FFS</code>() as a <var class="Fa">bit</var> index - parameter to any other <code class="Nm">bitset(9)</code> macro, you must - subtract one from the result.</p> -<p class="Pp" id="BIT_FFS_AT">The - <a class="permalink" href="#BIT_FFS_AT"><code class="Fn">BIT_FFS_AT</code></a>() - macro returns the 1-index of the first (lowest) set bit in - <var class="Fa">bitset</var>, which is greater than the given 1-indexed - <var class="Fa">start</var>, or zero if no bits in - <var class="Fa">bitset</var> greater than <var class="Fa">start</var> are - set.</p> -<p class="Pp" id="BIT_FLS">The - <a class="permalink" href="#BIT_FLS"><code class="Fn">BIT_FLS</code></a>() - macro returns the 1-index of the last (highest) set bit in - <var class="Fa">bitset</var>, or zero if <var class="Fa">bitset</var> is - empty. Like with <a class="Xr">fls(3)</a>, to use the non-zero result of - <code class="Fn">BIT_FLS</code>() as a <var class="Fa">bit</var> index - parameter to any other <code class="Nm">bitset(9)</code> macro, you must - subtract one from the result.</p> -<p class="Pp" id="BIT_FOREACH_ISSET">The - <a class="permalink" href="#BIT_FOREACH_ISSET"><code class="Fn">BIT_FOREACH_ISSET</code></a>() - macro can be used to iterate over all set bits in - <var class="Fa">bitset</var>. The index variable <var class="Fa">bit</var> - must have been declared with type <var class="Ft">int</var>, and upon each - iteration <var class="Fa">bit</var> is set to the index of successive set - bits. The value of <var class="Fa">bit</var> after the loop terminates is - undefined. Similarly, - <a class="permalink" href="#BIT_FOREACH_ISCLR"><code class="Fn" id="BIT_FOREACH_ISCLR">BIT_FOREACH_ISCLR</code></a>() - iterates over all clear bits in <var class="Fa">bitset</var>. In the loop - body, the currently indexed bit may be set or cleared. However, setting or - clearing bits other than the currently indexed bit does not guarantee that - they will or will not be returned in subsequent iterations of the same - loop.</p> -<p class="Pp" id="BIT_COUNT">The - <a class="permalink" href="#BIT_COUNT"><code class="Fn">BIT_COUNT</code></a>() - macro returns the total number of set bits in - <var class="Fa">bitset</var>.</p> -<p class="Pp" id="BIT_SUBSET">The - <a class="permalink" href="#BIT_SUBSET"><code class="Fn">BIT_SUBSET</code></a>() - macro returns <code class="Dv">true</code> if <var class="Fa">needle</var> - is a subset of <var class="Fa">haystack</var>.</p> -<p class="Pp" id="BIT_OVERLAP">The - <a class="permalink" href="#BIT_OVERLAP"><code class="Fn">BIT_OVERLAP</code></a>() - macro returns <code class="Dv">true</code> if <var class="Fa">bitset1</var> - and <var class="Fa">bitset2</var> have any common bits. (That is, if - <var class="Fa">bitset1</var> AND <var class="Fa">bitset2</var> is not the - empty set.)</p> -<p class="Pp" id="BIT_CMP">The - <a class="permalink" href="#BIT_CMP"><code class="Fn">BIT_CMP</code></a>() - macro returns <code class="Dv">true</code> if <var class="Fa">bitset1</var> - is NOT equal to <var class="Fa">bitset2</var>.</p> -<p class="Pp" id="BIT_OR">The - <a class="permalink" href="#BIT_OR"><code class="Fn">BIT_OR</code></a>() - macro sets bits present in <var class="Fa">src</var> in - <var class="Fa">dst</var>. (It is the <code class="Nm">bitset(9)</code> - equivalent of the scalar: <var class="Fa">dst</var> |= - <var class="Fa">src</var>.) - <a class="permalink" href="#BIT_OR_ATOMIC"><code class="Fn" id="BIT_OR_ATOMIC">BIT_OR_ATOMIC</code></a>() - is similar, but sets bits in the component machine words in - <var class="Fa">dst</var> atomically. (That is, if <var class="Fa">dst</var> - is composed of multiple machine words, - <code class="Fn">BIT_OR_ATOMIC</code>() performs multiple individually - atomic operations.)</p> -<p class="Pp" id="BIT_OR2">The - <a class="permalink" href="#BIT_OR2"><code class="Fn">BIT_OR2</code></a>() - macro computes <var class="Fa">src1</var> bitwise or - <var class="Fa">src2</var> and assigns the result to - <var class="Fa">dst</var>. (It is the <code class="Nm">bitset(9)</code> - equivalent of the scalar: <var class="Fa">dst</var> = - <var class="Fa">src1</var> | <var class="Fa">src2</var>.)</p> -<p class="Pp" id="BIT_ORNOT">The - <a class="permalink" href="#BIT_ORNOT"><code class="Fn">BIT_ORNOT</code></a>() - macro sets bits not in <var class="Fa">src</var> in - <var class="Fa">dst</var>. (It is the <code class="Nm">bitset(9)</code> - equivalent of the scalar: <var class="Fa">dst</var> |= <var class="Fa">~ - src</var>.)</p> -<p class="Pp" id="BIT_ORNOT2">The - <a class="permalink" href="#BIT_ORNOT2"><code class="Fn">BIT_ORNOT2</code></a>() - macro computes <var class="Fa">src1</var> bitwise or not - <var class="Fa">src2</var> and assigns the result to - <var class="Fa">dst</var>. (It is the <code class="Nm">bitset(9)</code> - equivalent of the scalar: <var class="Fa">dst</var> = - <var class="Fa">src1</var> | ~ <var class="Fa">src2</var>.)</p> -<p class="Pp" id="BIT_AND">The - <a class="permalink" href="#BIT_AND"><code class="Fn">BIT_AND</code></a>() - macro clears bits absent from <var class="Fa">src</var> from - <var class="Fa">dst</var>. (It is the <code class="Nm">bitset(9)</code> - equivalent of the scalar: <var class="Fa">dst</var> &= - <var class="Fa">src</var>.) - <a class="permalink" href="#BIT_AND_ATOMIC"><code class="Fn" id="BIT_AND_ATOMIC">BIT_AND_ATOMIC</code></a>() - is similar, with the same atomic semantics as - <code class="Fn">BIT_OR_ATOMIC</code>().</p> -<p class="Pp" id="BIT_AND2">The - <a class="permalink" href="#BIT_AND2"><code class="Fn">BIT_AND2</code></a>() - macro computes <var class="Fa">src1</var> bitwise and - <var class="Fa">src2</var> and assigns the result to - <var class="Fa">dst</var>. (It is the <code class="Nm">bitset(9)</code> - equivalent of the scalar: <var class="Fa">dst</var> = - <var class="Fa">src1</var> & <var class="Fa">src2</var>.)</p> -<p class="Pp" id="BIT_ANDNOT">The - <a class="permalink" href="#BIT_ANDNOT"><code class="Fn">BIT_ANDNOT</code></a>() - macro clears bits set in <var class="Fa">src</var> from - <var class="Fa">dst</var>. (It is the <code class="Nm">bitset(9)</code> - equivalent of the scalar: <var class="Fa">dst</var> &= <var class="Fa">~ - src</var>.)</p> -<p class="Pp" id="BIT_ANDNOT2">The - <a class="permalink" href="#BIT_ANDNOT2"><code class="Fn">BIT_ANDNOT2</code></a>() - macro computes <var class="Fa">src1</var> bitwise and not - <var class="Fa">src2</var> and assigns the result to - <var class="Fa">dst</var>. (It is the <code class="Nm">bitset(9)</code> - equivalent of the scalar: <var class="Fa">dst</var> = - <var class="Fa">src1</var> & ~ <var class="Fa">src2</var>.)</p> -<p class="Pp" id="BIT_XOR">The - <a class="permalink" href="#BIT_XOR"><code class="Fn">BIT_XOR</code></a>() - macro toggles bits set in <var class="Fa">src</var> in - <var class="Fa">dst</var>. (It is the <code class="Nm">bitset(9)</code> - equivalent of the scalar: <var class="Fa">dst</var> ^= - <var class="Fa">src</var>.)</p> -<p class="Pp" id="BIT_XOR2">The - <a class="permalink" href="#BIT_XOR2"><code class="Fn">BIT_XOR2</code></a>() - macro computes <var class="Fa">src1</var> bitwise exclusive or - <var class="Fa">src2</var> and assigns the result to - <var class="Fa">dst</var>. (It is the <code class="Nm">bitset(9)</code> - equivalent of the scalar: <var class="Fa">dst</var> = - <var class="Fa">src1</var> ^ <var class="Fa">src2</var>.)</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BITSET_T_INITIALIZER_EXAMPLE"><a class="permalink" href="#BITSET_T_INITIALIZER_EXAMPLE">BITSET_T_INITIALIZER - EXAMPLE</a></h1> -<div class="Bd Li"> -<pre>BITSET_DEFINE(_myset, MYSETSIZE); - -struct _myset myset; - -/* Initialize myset to filled (all bits set) */ -myset = BITSET_T_INITIALIZER(BITSET_FSET(__bitset_words(MYSETSIZE))); - -/* Initialize myset to only the lowest bit set */ -myset = BITSET_T_INITIALIZER(0x1);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">bitstring(3)</a>, <a class="Xr">cpuset(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">bitset(9)</code> macros first appeared in - <span class="Ux">FreeBSD 10.0</span> in January 2014. They were MFCed to - <span class="Ux">FreeBSD 9.3</span>, released in July 2014.</p> -<p class="Pp">This manual page first appeared in <span class="Ux">FreeBSD - 11.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">bitset(9)</code> macros were generalized and - pulled out of <code class="In"><<a class="In">sys/cpuset.h</a>></code> - as <code class="In"><<a class="In">sys/_bitset.h</a>></code> and - <code class="In"><<a class="In">sys/bitset.h</a>></code> by - <span class="An">Attilio Rao</span> - <<a class="Mt" href="mailto:attilio@FreeBSD.org">attilio@FreeBSD.org</a>>. - This manual page was written by <span class="An">Conrad Meyer</span> - <<a class="Mt" href="mailto:cem@FreeBSD.org">cem@FreeBSD.org</a>>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CAVEATS"><a class="permalink" href="#CAVEATS">CAVEATS</a></h1> -<p class="Pp">The <var class="Fa">SETSIZE</var> argument to all of these macros - must match the value given to <code class="Fn">BITSET_DEFINE</code>().</p> -<p class="Pp">Unlike every other reference to individual set members, which are - zero-indexed, <code class="Fn">BIT_FFS</code>(), - <code class="Fn">BIT_FFS_AT</code>() and <code class="Fn">BIT_FLS</code>() - return a one-indexed result (or zero if the set is empty).</p> -<p class="Pp">In order to use the macros defined in - <code class="In"><<a class="In">sys/bitset.h</a>></code> and - <code class="In"><<a class="In">sys/_bitset.h</a>></code> in userland - programs, <code class="Dv">_WANT_FREEBSD_BITSET</code> has to be defined - before including the header files. This requirements exists to prevent a - name space pollution due to macros defined in - <code class="Nm">bitset(9)</code> in programs that include - <code class="In"><<a class="In">sys/cpuset.h</a>></code> or - <code class="In"><<a class="In">sched.h</a>></code>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 20, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/bpf.9 3.html b/static/freebsd/man9/bpf.9 3.html deleted file mode 100644 index 57031e64..00000000 --- a/static/freebsd/man9/bpf.9 3.html +++ /dev/null @@ -1,196 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BPF(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BPF(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bpf</code> — <span class="Nd">Berkeley - Packet Filter</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">net/bpf.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bpfattach</code>(<var class="Fa" style="white-space: nowrap;">struct - ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">u_int - dlt</var>, <var class="Fa" style="white-space: nowrap;">u_int - hdrlen</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bpfattach2</code>(<var class="Fa">struct ifnet *ifp</var>, - <var class="Fa">u_int dlt</var>, <var class="Fa">u_int hdrlen</var>, - <var class="Fa">struct bpf_if **driverp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bpfdetach</code>(<var class="Fa" style="white-space: nowrap;">struct - ifnet *ifp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bpf_tap</code>(<var class="Fa" style="white-space: nowrap;">struct - ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">u_char - *pkt</var>, <var class="Fa" style="white-space: nowrap;">u_int - *pktlen</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bpf_mtap</code>(<var class="Fa" style="white-space: nowrap;">struct - ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bpf_mtap2</code>(<var class="Fa" style="white-space: nowrap;">struct - bpf_if *bp</var>, <var class="Fa" style="white-space: nowrap;">void - *data</var>, <var class="Fa" style="white-space: nowrap;">u_int dlen</var>, - <var class="Fa" style="white-space: nowrap;">struct mbuf *m</var>);</p> -<p class="Pp"><var class="Ft">u_int</var> - <br/> - <code class="Fn">bpf_filter</code>(<var class="Fa">const struct bpf_insn *pc - </var>, <var class="Fa">u_char *pkt</var>, <var class="Fa">u_int - wirelen</var>, <var class="Fa">u_int buflen</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bpf_validate</code>(<var class="Fa" style="white-space: nowrap;">const - struct bpf_insn *fcode</var>, - <var class="Fa" style="white-space: nowrap;">int flen</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The Berkeley Packet Filter provides a raw interface, that is - protocol independent, to data link layers. It allows all packets on the - network, even those destined for other hosts, to be passed from a network - interface to user programs. Each program may specify a filter, in the form - of a <code class="Nm">bpf</code> filter machine program. The - <a class="Xr">bpf(4)</a> manual page describes the interface used by user - programs. This manual page describes the functions used by interfaces to - pass packets to <code class="Nm">bpf</code> and the functions for testing - and running <code class="Nm">bpf</code> filter machine programs.</p> -<p class="Pp" id="bpfattach">The - <a class="permalink" href="#bpfattach"><code class="Fn">bpfattach</code></a>() - function attaches a network interface to <code class="Nm">bpf</code>. The - <var class="Fa">ifp</var> argument is a pointer to the structure that - defines the interface to be attached to an interface. The - <var class="Fa">dlt</var> argument is the data link-layer type: - <code class="Dv">DLT_NULL</code> (no link-layer encapsulation), - <code class="Dv">DLT_EN10MB</code> (Ethernet), - <code class="Dv">DLT_IEEE802_11</code> (802.11 wireless networks), etc. The - rest of the link layer types can be found in - <code class="In"><<a class="In">net/bpf.h</a>></code>. The - <var class="Fa">hdrlen</var> argument is the fixed size of the link header; - variable length headers are not yet supported. The - <code class="Nm">bpf</code> system will hold a pointer to - <var class="Fa">ifp->if_bpf</var>. This variable will set to a - non-<code class="Dv">NULL</code> value when <code class="Nm">bpf</code> - requires packets from this interface to be tapped using the functions - below.</p> -<p class="Pp" id="bpfattach2">The - <a class="permalink" href="#bpfattach2"><code class="Fn">bpfattach2</code></a>() - function allows multiple <code class="Nm">bpf</code> instances to be - attached to a single interface, by registering an explicit - <var class="Fa">if_bpf</var> rather than using - <var class="Fa">ifp->if_bpf</var>. It is then possible to run - <a class="Xr">tcpdump(1)</a> on the interface for any data link-layer types - attached.</p> -<p class="Pp" id="bpfdetach">The - <a class="permalink" href="#bpfdetach"><code class="Fn">bpfdetach</code></a>() - function detaches a <code class="Nm">bpf</code> instance from an interface, - specified by <var class="Fa">ifp</var>. The - <code class="Fn">bpfdetach</code>() function should be called once for each - <code class="Nm">bpf</code> instance attached.</p> -<p class="Pp" id="bpf_tap">The - <a class="permalink" href="#bpf_tap"><code class="Fn">bpf_tap</code></a>() - function is used by an interface to pass the packet to - <code class="Nm">bpf</code>. The packet data (including link-header), - pointed to by <var class="Fa">pkt</var>, is of length - <var class="Fa">pktlen</var>, which must be a contiguous buffer. The - <var class="Fa">ifp</var> argument is a pointer to the structure that - defines the interface to be tapped. The packet is parsed by each processes - filter, and if accepted, it is buffered for the process to read.</p> -<p class="Pp" id="bpf_mtap">The - <a class="permalink" href="#bpf_mtap"><code class="Fn">bpf_mtap</code></a>() - function is like <code class="Fn">bpf_tap</code>() except that it is used to - tap packets that are in an <var class="Vt">mbuf</var> chain, - <var class="Fa">m</var>. The <var class="Fa">ifp</var> argument is a pointer - to the structure that defines the interface to be tapped. Like - <code class="Fn">bpf_tap</code>(), <code class="Fn">bpf_mtap</code>() - requires a link-header for whatever data link layer type is specified. Note - that <code class="Nm">bpf</code> only reads from the - <var class="Vt">mbuf</var> chain, it does not free it or keep a pointer to - it. This means that an <var class="Vt">mbuf</var> containing the link-header - can be prepended to the chain if necessary. A cleaner interface to achieve - this is provided by <code class="Fn">bpf_mtap2</code>().</p> -<p class="Pp" id="bpf_mtap2">The - <a class="permalink" href="#bpf_mtap2"><code class="Fn">bpf_mtap2</code></a>() - function allows the user to pass a link-header <var class="Fa">data</var>, - of length <var class="Fa">dlen</var>, independent of the - <var class="Vt">mbuf</var> <var class="Fa">m</var>, containing the packet. - This simplifies the passing of some link-headers.</p> -<p class="Pp" id="bpf_filter">The - <a class="permalink" href="#bpf_filter"><code class="Fn">bpf_filter</code></a>() - function executes the filter program starting at <var class="Fa">pc</var> on - the packet <var class="Fa">pkt</var>. The <var class="Fa">wirelen</var> - argument is the length of the original packet and - <var class="Fa">buflen</var> is the amount of data present. The - <var class="Fa">buflen</var> value of 0 is special; it indicates that the - <var class="Fa">pkt</var> is actually a pointer to an mbuf chain - (<var class="Vt">struct mbuf *</var>).</p> -<p class="Pp" id="bpf_validate">The - <a class="permalink" href="#bpf_validate"><code class="Fn">bpf_validate</code></a>() - function checks that the filter code <var class="Fa">fcode</var>, of length - <var class="Fa">flen</var>, is valid.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">bpf_filter</code>() function returns -1 (cast - to an unsigned integer) if there is no filter. Otherwise, it returns the - result of the filter program.</p> -<p class="Pp">The <code class="Fn">bpf_validate</code>() function returns 0 when - the program is not a valid filter program.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EVENT_HANDLERS"><a class="permalink" href="#EVENT_HANDLERS">EVENT - HANDLERS</a></h1> -<p class="Pp"><code class="Nm">bpf</code> invokes - <var class="Fa">bpf_track</var> <a class="Xr">EVENTHANDLER(9)</a> event each - time listener attaches to or detaches from an interface. Pointer to - (<var class="Vt">struct ifnet *</var>) is passed as the first argument, - interface <var class="Fa">dlt</var> follows. Last argument indicates - listener is attached (1) or detached (0). Note that handler is invoked with - <code class="Nm">bpf</code> global lock held, which implies restriction on - sleeping and calling <code class="Nm">bpf</code> subsystem inside - <a class="Xr">EVENTHANDLER(9)</a> dispatcher. Note that handler is not - called for write-only listeners.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">tcpdump(1)</a>, <a class="Xr">bpf(4)</a>, - <a class="Xr">EVENTHANDLER(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The Enet packet filter was created in 1980 by Mike Accetta and - Rick Rashid at Carnegie-Mellon University. Jeffrey Mogul, at Stanford, - ported the code to <span class="Ux">BSD</span> and continued its development - from 1983 on. Since then, it has evolved into the Ultrix Packet Filter at - DEC, a STREAMS NIT module under SunOS 4.1, and BPF.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp"><span class="An">Steven McCanne</span>, of Lawrence Berkeley - Laboratory, implemented BPF in Summer 1990. Much of the design is due to - <span class="An">Van Jacobson</span>. This manpage was written by - <span class="An">Orla McGann</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 11, 2012</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/buf.9 3.html b/static/freebsd/man9/buf.9 3.html deleted file mode 100644 index c441c3b4..00000000 --- a/static/freebsd/man9/buf.9 3.html +++ /dev/null @@ -1,111 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUF(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUF(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">buf</code> — <span class="Nd">kernel - buffer I/O scheme used in FreeBSD VM system</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The kernel implements a KVM abstraction of the buffer cache which - allows it to map potentially disparate vm_page's into contiguous KVM for use - by (mainly file system) devices and device I/O. This abstraction supports - block sizes from <code class="Dv">DEV_BSIZE</code> (usually 512) to upwards - of several pages or more. It also supports a relatively primitive - byte-granular valid range and dirty range currently hardcoded for use by - NFS. The code implementing the VM Buffer abstraction is mostly concentrated - in <span class="Pa">sys/kern/vfs_bio.c</span> in the - <span class="Ux">FreeBSD</span> source tree.</p> -<p class="Pp" id="page">One of the most important things to remember when - dealing with buffer pointers (<var class="Vt">struct buf</var>) is that the - underlying pages are mapped directly from the buffer cache. No data copying - occurs in the scheme proper, though some file systems such as UFS do have to - copy a little when dealing with file fragments. The second most important - thing to remember is that due to the underlying page mapping, the - <var class="Va">b_data</var> base pointer in a buf is always - <a class="permalink" href="#page"><i class="Em">page</i></a>-aligned, not - <a class="permalink" href="#block"><i class="Em" id="block">block</i></a>-aligned. - When you have a VM buffer representing some <var class="Va">b_offset</var> - and <var class="Va">b_size</var>, the actual start of the buffer is - ‘<code class="Li">b_data + (b_offset & PAGE_MASK)</code>’ - and not just ‘<code class="Li">b_data</code>’. Finally, the VM - system's core buffer cache supports valid and dirty bits - (<var class="Va">m->valid</var>, <var class="Va">m->dirty</var>) for - pages in <code class="Dv">DEV_BSIZE</code> chunks. Thus a platform with a - hardware page size of 4096 bytes has 8 valid and 8 dirty bits. These bits - are generally set and cleared in groups based on the device block size of - the device backing the page. Complete page's worth are often referred to - using the <code class="Dv">VM_PAGE_BITS_ALL</code> bitmask (i.e., 0xFF if - the hardware page size is 4096).</p> -<p class="Pp">VM buffers also keep track of a byte-granular dirty range and - valid range. This feature is normally only used by the NFS subsystem. I am - not sure why it is used at all, actually, since we have - <code class="Dv">DEV_BSIZE</code> valid/dirty granularity within the VM - buffer. If a buffer dirty operation creates a “hole”, the - dirty range will extend to cover the hole. If a buffer validation operation - creates a “hole” the byte-granular valid range is left alone - and will not take into account the new extension. Thus the whole - byte-granular abstraction is considered a bad hack and it would be nice if - we could get rid of it completely.</p> -<p class="Pp">A VM buffer is capable of mapping the underlying VM cache pages - into KVM in order to allow the kernel to directly manipulate the data - associated with the (<var class="Va">vnode</var>, - <var class="Va">b_offset</var>, <var class="Va">b_size</var>). The kernel - typically unmaps VM buffers the moment they are no longer needed but often - keeps the <var class="Vt">struct buf</var> structure instantiated and even - <var class="Va">bp->b_pages</var> array instantiated despite having - unmapped them from KVM. If a page making up a VM buffer is about to undergo - I/O, the system typically unmaps it from KVM and replaces the page in the - <var class="Va">b_pages[]</var> array with a place-marker called bogus_page. - The place-marker forces any kernel subsystems referencing the associated - <var class="Vt">struct buf</var> to re-lookup the associated page. I believe - the place-marker hack is used to allow sophisticated devices such as file - system devices to remap underlying pages in order to deal with, for example, - re-mapping a file fragment into a file block.</p> -<p class="Pp">VM buffers are used to track I/O operations within the kernel. - Unfortunately, the I/O implementation is also somewhat of a hack because the - kernel wants to clear the dirty bit on the underlying pages the moment it - queues the I/O to the VFS device, not when the physical I/O is actually - initiated. This can create confusion within file system devices that use - delayed-writes because you wind up with pages marked clean that are actually - still dirty. If not treated carefully, these pages could be thrown away! - Indeed, a number of serious bugs related to this hack were not fixed until - the <span class="Ux">FreeBSD 2.2.8</span> / <span class="Ux">FreeBSD - 3.0</span> release. The kernel uses an instantiated VM buffer (i.e., - <var class="Vt">struct buf</var>) to place-mark pages in this special state. - The buffer is typically flagged <code class="Dv">B_DELWRI</code>. When a - device no longer needs a buffer it typically flags it as - <code class="Dv">B_RELBUF</code>. Due to the underlying pages being marked - clean, the ‘<code class="Li">B_DELWRI|B_RELBUF</code>’ - combination must be interpreted to mean that the buffer is still actually - dirty and must be written to its backing store before it can actually be - released. In the case where <code class="Dv">B_DELWRI</code> is not set, the - underlying dirty pages are still properly marked as dirty and the buffer can - be completely freed without losing that clean/dirty state information. (XXX - do we have to check other flags in regards to this situation ???)</p> -<p class="Pp">The kernel reserves a portion of its KVM space to hold VM Buffer's - data maps. Even though this is virtual space (since the buffers are mapped - from the buffer cache), we cannot make it arbitrarily large because - instantiated VM Buffers (<var class="Vt">struct buf</var>'s) prevent their - underlying pages in the buffer cache from being freed. This can complicate - the life of the paging system.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">buf</code> manual page was originally written - by <span class="An">Matthew Dillon</span> and first appeared in - <span class="Ux">FreeBSD 3.1</span>, December 1998.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 22, 1998</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/buf_ring.9 3.html b/static/freebsd/man9/buf_ring.9 3.html deleted file mode 100644 index b7aed8b2..00000000 --- a/static/freebsd/man9/buf_ring.9 3.html +++ /dev/null @@ -1,130 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUF_RING(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUF_RING(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">buf_ring</code>, - <code class="Nm">buf_ring_alloc</code>, - <code class="Nm">buf_ring_free</code>, - <code class="Nm">buf_ring_enqueue</code>, - <code class="Nm">buf_ring_dequeue_mc</code>, - <code class="Nm">buf_ring_dequeue_sc</code>, - <code class="Nm">buf_ring_count</code>, - <code class="Nm">buf_ring_empty</code>, - <code class="Nm">buf_ring_full</code>, <code class="Nm">buf_ring_peek</code> - — <span class="Nd">multi-producer, {single, multi}-consumer lock-less - ring buffer</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/buf_ring.h</a>></code></p> -<p class="Pp"><var class="Ft">struct buf_ring *</var> - <br/> - <code class="Fn">buf_ring_alloc</code>(<var class="Fa" style="white-space: nowrap;">int - count</var>, <var class="Fa" style="white-space: nowrap;">struct malloc_type - *type</var>, <var class="Fa" style="white-space: nowrap;">int flags</var>, - <var class="Fa" style="white-space: nowrap;">struct mtx *sc_lock</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">buf_ring_free</code>(<var class="Fa" style="white-space: nowrap;">struct - buf_ring *br</var>, <var class="Fa" style="white-space: nowrap;">struct - malloc_type *type</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">buf_ring_enqueue</code>(<var class="Fa" style="white-space: nowrap;">struct - buf_ring *br</var>, <var class="Fa" style="white-space: nowrap;">void - *buf</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">buf_ring_dequeue_mc</code>(<var class="Fa" style="white-space: nowrap;">struct - buf_ring *br</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">buf_ring_dequeue_sc</code>(<var class="Fa" style="white-space: nowrap;">struct - buf_ring *br</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">buf_ring_count</code>(<var class="Fa" style="white-space: nowrap;">struct - buf_ring *br</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">buf_ring_empty</code>(<var class="Fa" style="white-space: nowrap;">struct - buf_ring *br</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">buf_ring_full</code>(<var class="Fa" style="white-space: nowrap;">struct - buf_ring *br</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">buf_ring_peek</code>(<var class="Fa" style="white-space: nowrap;">struct - buf_ring *br</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">buf_ring</code> functions provide a lock-less - multi-producer and lock-less multi-consumer as well as single-consumer ring - buffer.</p> -<p class="Pp" id="buf_ring_alloc">The - <a class="permalink" href="#buf_ring_alloc"><code class="Fn">buf_ring_alloc</code></a>() - function is used to allocate a buf_ring ring buffer with - <var class="Fa">count</var> slots using malloc_type - <var class="Fa">type</var> and memory flags <var class="Fa">flags</var>. The - single consumer interface is protected by <var class="Fa">sc_lock</var>.</p> -<p class="Pp" id="buf_ring_free">The - <a class="permalink" href="#buf_ring_free"><code class="Fn">buf_ring_free</code></a>() - function is used to free a buf_ring. The user is responsible for freeing any - enqueued items.</p> -<p class="Pp" id="buf_ring_enqueue">The - <a class="permalink" href="#buf_ring_enqueue"><code class="Fn">buf_ring_enqueue</code></a>() - function is used to enqueue a buffer to a buf_ring.</p> -<p class="Pp" id="buf_ring_dequeue_mc">The - <a class="permalink" href="#buf_ring_dequeue_mc"><code class="Fn">buf_ring_dequeue_mc</code></a>() - function is a multi-consumer safe way of dequeueing elements from a - buf_ring.</p> -<p class="Pp" id="buf_ring_dequeue_sc">The - <a class="permalink" href="#buf_ring_dequeue_sc"><code class="Fn">buf_ring_dequeue_sc</code></a>() - function is a single-consumer interface to dequeue elements - requiring the - user to serialize accesses with a lock.</p> -<p class="Pp" id="buf_ring_count">The - <a class="permalink" href="#buf_ring_count"><code class="Fn">buf_ring_count</code></a>() - function returns the number of elements in a buf_ring.</p> -<p class="Pp" id="buf_ring_empty">The - <a class="permalink" href="#buf_ring_empty"><code class="Fn">buf_ring_empty</code></a>() - function returns <code class="Dv">TRUE</code> if the buf_ring is empty, - <code class="Dv">FALSE</code> otherwise.</p> -<p class="Pp" id="buf_ring_full">The - <a class="permalink" href="#buf_ring_full"><code class="Fn">buf_ring_full</code></a>() - function returns <code class="Dv">TRUE</code> if no more items can be - enqueued, <code class="Dv">FALSE</code> otherwise.</p> -<p class="Pp" id="buf_ring_peek">The - <a class="permalink" href="#buf_ring_peek"><code class="Fn">buf_ring_peek</code></a>() - function returns a pointer to the last element in the buf_ring if the - buf_ring is not empty, <code class="Dv">NULL</code> otherwise.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">buf_ring_enqueue</code>() function return - <code class="Er">ENOBUFS</code> if there are no available slots in the - buf_ring.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">These functions were introduced in <span class="Ux">FreeBSD - 8.0</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 27, 2012</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/bus_activate_resource.9 3.html b/static/freebsd/man9/bus_activate_resource.9 3.html deleted file mode 100644 index e9e89e4c..00000000 --- a/static/freebsd/man9/bus_activate_resource.9 3.html +++ /dev/null @@ -1,115 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_ACTIVATE_RESOURCE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_ACTIVATE_RESOURCE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bus_activate_resource</code>, - <code class="Nm">bus_deactivate_resource</code> — - <span class="Nd">activate or deactivate a resource</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"> - <br/> - <code class="In">#include <<a class="In">machine/bus.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/rman.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">machine/resource.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_activate_resource</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">struct resource *r</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_deactivate_resource</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">struct resource *r</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These functions activate or deactivate a previously allocated - resource. In general, resources must be activated before they can be - accessed by the driver. Bus drivers may perform additional actions to ensure - that the resource is ready to be accessed. For example, the PCI bus driver - enables memory decoding in a PCI device's command register when activating a - memory resource.</p> -<p class="Pp">The arguments are as follows:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">dev</var></dt> - <dd>The device that requests ownership of the resource. Before allocation, the - resource is owned by the parent bus.</dd> - <dt><var class="Fa">r</var></dt> - <dd>A pointer to the <var class="Vt">struct resource</var> returned by - <a class="Xr">bus_alloc_resource(9)</a>.</dd> -</dl> -<section class="Ss"> -<h2 class="Ss" id="Resource_Mapping"><a class="permalink" href="#Resource_Mapping">Resource - Mapping</a></h2> -<p class="Pp">Resources which can be mapped for CPU access by a - <a class="Xr">bus_space(9)</a> tag and handle will create a mapping of the - entire resource when activated. The tag and handle for this mapping are - stored in <var class="Fa">r</var> and can be retrieved via - <a class="Xr">rman_get_bustag(9)</a> and - <a class="Xr">rman_get_bushandle(9)</a>. These can be used with the - <a class="Xr">bus_space(9)</a> API to access device registers or memory - described by <var class="Fa">r</var>. If the mapping is associated with a - virtual address, the virtual address can be retrieved via - <a class="Xr">rman_get_virtual(9)</a>.</p> -<p class="Pp">This implicit mapping can be disabled by passing the - <code class="Dv">RF_UNMAPPED</code> flag to - <a class="Xr">bus_alloc_resource(9)</a>. A driver may use this if it wishes - to allocate its own mappings of a resource using - <a class="Xr">bus_map_resource(9)</a>.</p> -<p class="Pp" id="bus_read_4">A wrapper API for <a class="Xr">bus_space(9)</a> - is also provided that accepts the associated resource as the first argument - in place of the <a class="Xr">bus_space(9)</a> tag and handle. The functions - in this wrapper API are named similarly to the - <a class="Xr">bus_space(9)</a> API except that “_space” is - removed from their name. For example, - <a class="permalink" href="#bus_read_4"><code class="Fn">bus_read_4</code></a>() - can be used in place of - <a class="permalink" href="#bus_space_read_4"><code class="Fn" id="bus_space_read_4">bus_space_read_4</code></a>(). - The wrapper API is preferred in new drivers.</p> -<p class="Pp">These two statements both read a 32-bit register at the start of a - resource:</p> -<div class="Bd Pp Li"> -<pre> bus_space_read_4(rman_get_bustag(res), rman_get_bushandle(res), 0); - bus_read_4(res, 0);</pre> -</div> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an error is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">bus_alloc_resource(9)</a>, - <a class="Xr">bus_map_resource(9)</a>, <a class="Xr">bus_space(9)</a>, - <a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Warner - Losh</span> - <<a class="Mt" href="mailto:imp@FreeBSD.org">imp@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 13, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/bus_adjust_resource.9 4.html b/static/freebsd/man9/bus_adjust_resource.9 4.html deleted file mode 100644 index b3ec2d7b..00000000 --- a/static/freebsd/man9/bus_adjust_resource.9 4.html +++ /dev/null @@ -1,93 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_ADJUST_RESOURCE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_ADJUST_RESOURCE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bus_adjust_resource</code> — - <span class="Nd">adjust resource allocated from a parent bus</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"> - <br/> - <code class="In">#include <<a class="In">machine/bus.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/rman.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">machine/resource.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_adjust_resource</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">struct resource *r</var>, - <var class="Fa">rman_res_t start</var>, <var class="Fa">rman_res_t - end</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This function is used to ask the parent bus to adjust the resource - range assigned to an allocated resource. The resource - <var class="Fa">r</var> should have been allocated by a previous call to - <a class="Xr">bus_alloc_resource(9)</a>. The new resource range must overlap - the existing range of <var class="Fa">r</var>.</p> -<p class="Pp" id="bus_adjust_resource">Note that none of the constraints of the - original allocation request such as alignment or boundary restrictions are - checked by - <a class="permalink" href="#bus_adjust_resource"><code class="Fn">bus_adjust_resource</code></a>(). - It is the caller's responsibility to enforce any such requirements.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">bus_adjust_resource</code>() method returns - zero on success or an error code on failure.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">Grow an existing memory resource by 4096 bytes.</p> -<div class="Bd Pp Li"> -<pre> struct resource *res; - int error; - - error = bus_adjust_resource(dev, res, rman_get_start(res), - rman_get_end(res) + 0x1000);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp"><code class="Fn">bus_adjust_resource</code>() will fail if:</p> -<dl class="Bl-tag"> - <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt> - <dd>The <var class="Fa">dev</var> device does not have a parent device.</dd> - <dt id="EINVAL~2">[<a class="permalink" href="#EINVAL~2"><code class="Er">EINVAL</code></a>]</dt> - <dd>The <var class="Fa">r</var> resource is a shared resource.</dd> - <dt id="EINVAL~3">[<a class="permalink" href="#EINVAL~3"><code class="Er">EINVAL</code></a>]</dt> - <dd>The new address range does not overlap with the existing address range of - <var class="Fa">r</var>.</dd> - <dt id="EBUSY">[<a class="permalink" href="#EBUSY"><code class="Er">EBUSY</code></a>]</dt> - <dd>The new address range conflicts with another allocated resource.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">bus_alloc_resource(9)</a>, - <a class="Xr">bus_release_resource(9)</a>, <a class="Xr">device(9)</a>, - <a class="Xr">driver(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 13, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/bus_alloc_resource.9 3.html b/static/freebsd/man9/bus_alloc_resource.9 3.html deleted file mode 100644 index 9f42e4da..00000000 --- a/static/freebsd/man9/bus_alloc_resource.9 3.html +++ /dev/null @@ -1,168 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_ALLOC_RESOURCE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_ALLOC_RESOURCE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bus_alloc_resource</code>, - <code class="Nm">bus_alloc_resource_any</code>, - <code class="Nm">bus_alloc_resource_anywhere</code> — - <span class="Nd">allocate resources from a parent bus</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"> - <br/> - <code class="In">#include <<a class="In">machine/bus.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/rman.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">machine/resource.h</a>></code></p> -<p class="Pp"><var class="Ft">struct resource *</var> - <br/> - <code class="Fn">bus_alloc_resource</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">int type</var>, <var class="Fa">int rid</var>, - <var class="Fa">rman_res_t start</var>, <var class="Fa">rman_res_t - end</var>, <var class="Fa">rman_res_t count</var>, <var class="Fa">u_int - flags</var>);</p> -<p class="Pp"><var class="Ft">struct resource *</var> - <br/> - <code class="Fn">bus_alloc_resource_any</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">int type</var>, - <var class="Fa" style="white-space: nowrap;">int rid</var>, - <var class="Fa" style="white-space: nowrap;">u_int flags</var>);</p> -<p class="Pp"><var class="Ft">struct resource *</var> - <br/> - <code class="Fn">bus_alloc_resource_anywhere</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">int type</var>, <var class="Fa">int rid</var>, - <var class="Fa">rman_res_t count</var>, <var class="Fa">u_int - flags</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This is an easy interface to the resource-management functions. It - hides the indirection through the parent's method table. This function - generally should be called in attach, but (except in some rare cases) never - earlier.</p> -<p class="Pp" id="bus_alloc_resource_any">The - <a class="permalink" href="#bus_alloc_resource_any"><code class="Fn">bus_alloc_resource_any</code></a>() - and - <a class="permalink" href="#bus_alloc_resource_anywhere"><code class="Fn" id="bus_alloc_resource_anywhere">bus_alloc_resource_anywhere</code></a>() - functions are convenience wrappers for - <a class="permalink" href="#bus_alloc_resource"><code class="Fn" id="bus_alloc_resource">bus_alloc_resource</code></a>(). - <code class="Fn">bus_alloc_resource_any</code>() sets - <var class="Fa">start</var>, <var class="Fa">end</var>, and - <var class="Fa">count</var> to the default resource (see description of - <var class="Fa">start</var> below). - <code class="Fn">bus_alloc_resource_anywhere</code>() sets - <var class="Fa">start</var> and <var class="Fa">end</var> to the default - resource and uses the provided <var class="Fa">count</var> argument.</p> -<p class="Pp">The arguments are as follows:</p> -<ul class="Bl-item"> - <li><var class="Fa">dev</var> is the device that requests ownership of the - resource. Before allocation, the resource is owned by the parent bus.</li> - <li><var class="Fa">type</var> is the type of resource you want to allocate. - It is one of: - <dl class="Bl-tag"> - <dt id="PCI_RES_BUS"><a class="permalink" href="#PCI_RES_BUS"><code class="Dv">PCI_RES_BUS</code></a></dt> - <dd>for PCI bus numbers</dd> - <dt id="SYS_RES_IRQ"><a class="permalink" href="#SYS_RES_IRQ"><code class="Dv">SYS_RES_IRQ</code></a></dt> - <dd>for IRQs</dd> - <dt id="SYS_RES_DRQ"><a class="permalink" href="#SYS_RES_DRQ"><code class="Dv">SYS_RES_DRQ</code></a></dt> - <dd>for ISA DMA lines</dd> - <dt id="SYS_RES_IOPORT"><a class="permalink" href="#SYS_RES_IOPORT"><code class="Dv">SYS_RES_IOPORT</code></a></dt> - <dd>for I/O ports</dd> - <dt id="SYS_RES_MEMORY"><a class="permalink" href="#SYS_RES_MEMORY"><code class="Dv">SYS_RES_MEMORY</code></a></dt> - <dd>for I/O memory</dd> - </dl> - </li> - <li><var class="Fa">rid</var> is a bus specific handle that identifies the - resource being allocated. For ISA this is an index into an array of - resources that have been setup for this device by either the PnP - mechanism, or via the hints mechanism. For PCCARD, this is an index into - the array of resources described by the PC Card's CIS entry. For PCI, the - offset into PCI config space which has the BAR to use to access the - resource.</li> - <li><var class="Fa">start</var> and <var class="Fa">end</var> are the - start/end addresses of the resource. If you specify values of 0ul for - <var class="Fa">start</var> and ~0ul for <var class="Fa">end</var> and 1 - for <var class="Fa">count</var>, the default values for the bus are - calculated.</li> - <li><var class="Fa">count</var> is the size of the resource. For example, the - size of an I/O port is usually 1 byte (but some devices override this). If - you specified the default values for <var class="Fa">start</var> and - <var class="Fa">end</var>, then the default value of the bus is used if - <var class="Fa">count</var> is smaller than the default value and - <var class="Fa">count</var> is used, if it is bigger than the default - value.</li> - <li><var class="Fa">flags</var> sets the flags for the resource. You can set - zero or more of these flags: - <dl class="Bl-tag"> - <dt id="RF_ACTIVE"><a class="permalink" href="#RF_ACTIVE"><code class="Dv">RF_ACTIVE</code></a></dt> - <dd>activate resource atomically.</dd> - <dt id="RF_PREFETCHABLE"><a class="permalink" href="#RF_PREFETCHABLE"><code class="Dv">RF_PREFETCHABLE</code></a></dt> - <dd>resource is prefetchable.</dd> - <dt id="RF_SHAREABLE"><a class="permalink" href="#RF_SHAREABLE"><code class="Dv">RF_SHAREABLE</code></a></dt> - <dd>resource permits contemporaneous sharing. It should always be set - unless you know that the resource cannot be shared. It is the bus - driver's task to filter out the flag if the bus does not support - sharing.</dd> - <dt id="RF_UNMAPPED"><a class="permalink" href="#RF_UNMAPPED"><code class="Dv">RF_UNMAPPED</code></a></dt> - <dd>do not establish implicit mapping when activated via - <a class="Xr">bus_activate_resource(9)</a>.</dd> - </dl> - </li> -</ul> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">A pointer to <var class="Va">struct resource</var> is returned on - success, a null pointer otherwise.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">This is some example code that allocates a 32 byte I/O port range - and an IRQ.</p> -<div class="Bd Pp Li"> -<pre> struct resource *portres, *irqres; - - portres = bus_alloc_resource(dev, SYS_RES_IOPORT, 0, - 0ul, ~0ul, 32, RF_ACTIVE); - irqres = bus_alloc_resource_any(dev, SYS_RES_IRQ, 0, - RF_ACTIVE | RF_SHAREABLE);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">bus_activate_resource(9)</a>, - <a class="Xr">bus_adjust_resource(9)</a>, - <a class="Xr">bus_map_resource(9)</a>, - <a class="Xr">bus_release_resource(9)</a>, <a class="Xr">device(9)</a>, - <a class="Xr">driver(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Alexander - Langer</span> - <<a class="Mt" href="mailto:alex@big.endian.de">alex@big.endian.de</a>> - with parts by <span class="An">Warner Losh</span> - <<a class="Mt" href="mailto:imp@FreeBSD.org">imp@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 6, 2026</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/bus_attach_children.9 3.html b/static/freebsd/man9/bus_attach_children.9 3.html deleted file mode 100644 index 18344241..00000000 --- a/static/freebsd/man9/bus_attach_children.9 3.html +++ /dev/null @@ -1,138 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_ATTACH_CHILDREN(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_ATTACH_CHILDREN(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bus_attach_children</code>, - <code class="Nm">bus_delayed_attach_children</code>, - <code class="Nm">bus_detach_children</code>, - <code class="Nm">bus_enumerate_hinted_children</code>, - <code class="Nm">bus_identify_children</code> — - <span class="Nd">manage child devices of a bus device</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_attach_children</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_delayed_attach_children</code>(<var class="Fa" style="white-space: nowrap;">device_t - bus</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_detach_children</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_enumerate_hinted_children</code>(<var class="Fa" style="white-space: nowrap;">device_t - bus</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_identify_children</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These functions manage state transitions of child devices for - <var class="Fa">dev</var>.</p> -<p class="Pp" id="bus_enumerate_hinted_children"><a class="permalink" href="#bus_enumerate_hinted_children"><code class="Fn">bus_enumerate_hinted_children</code></a>() - walks the kernel environment to identify any device hints that describe a - device attached to <var class="Fa">dev</var>. For each set of matching - hints, the <a class="Xr">BUS_HINTED_CHILD(9)</a> method is invoked. This - function is typically called from a bus driver's - <a class="Xr">DEVICE_ATTACH(9)</a> method to add hinted devices. Note that - most bus drivers do not use hints to identify child devices. This is - typically used for legacy buses such as ISA that do not provide a mechanism - for enumerating devices.</p> -<p class="Pp" id="bus_identify_children"><a class="permalink" href="#bus_identify_children"><code class="Fn">bus_identify_children</code></a>() - iterates over all eligible device drivers for children of - <var class="Fa">dev</var> invoking the <a class="Xr">DEVICE_IDENTIFY(9)</a> - method. This allows device drivers to add child devices that are enumerated - via alternate mechanisms such as firmware tables. This function is typically - called from a bus driver's <a class="Xr">DEVICE_ATTACH(9)</a> method.</p> -<p class="Pp" id="bus_attach_children"><a class="permalink" href="#bus_attach_children"><code class="Fn">bus_attach_children</code></a>() - attaches device drivers to all children of <var class="Fa">dev</var>. This - function invokes <a class="Xr">device_probe_and_attach(9)</a> on each child - device ignoring errors. It makes a best-effort pass to attach device drivers - to all children. Child devices are attached in increasing order. Child - devices with the same order are attached in FIFO order based on the time - when the device was created via <a class="Xr">device_add_child(9)</a>. This - function is typically called from a bus driver's - <a class="Xr">DEVICE_ATTACH(9)</a> method after adding devices.</p> -<p class="Pp" id="bus_delayed_attach_children"><a class="permalink" href="#bus_delayed_attach_children"><code class="Fn">bus_delayed_attach_children</code></a>() - attaches device drivers to all children of <var class="Fa">dev</var> after - interrupts are enabled. This function schedules a call to - <code class="Fn">bus_attach_children</code>() after interrupts are enabled - via <a class="Xr">config_intrhook_establish(9)</a>. If interrupts are - already enabled (for example, when loading a device driver after booting), - <code class="Fn">bus_attach_children</code>() is called immediately.</p> -<p class="Pp" id="bus_detach_children"><a class="permalink" href="#bus_detach_children"><code class="Fn">bus_detach_children</code></a>() - detaches device drivers from all children of <var class="Fa">dev</var> by - calling <a class="Xr">device_detach(9)</a> on each child device. Unlike - <code class="Fn">bus_attach_children</code>(), this function does not make a - best-effort pass. If a child device fails to detach, - <code class="Fn">bus_detach_children</code>() immediately fails returning - the error from the child's failed detach. Child devices are detached in - reverse order compared to <code class="Fn">bus_attach_children</code>(). - That is, child devices are detached in decreasing order, and child devices - with the same order are detached in LIFO order. Detached devices are not - deleted.</p> -<p class="Pp" id="bus_detach_children~2"><a class="permalink" href="#bus_detach_children~2"><code class="Fn">bus_detach_children</code></a>() - is typically called at the start of a bus driver's - <a class="Xr">DEVICE_DETACH(9)</a> method to give child devices a chance to - veto the detach request. It is usually paired with a later call to - <a class="permalink" href="#device_delete_children"><code class="Fn" id="device_delete_children">device_delete_children</code></a>(<var class="Fa">9</var>) - to delete child devices. If no additional logic is required between the two - function calls, a bus driver can use <a class="Xr">bus_generic_detach(9)</a> - to detach and delete children.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">config_intrhook_establish(9)</a>, - <a class="Xr">device_add_child(9)</a>, <a class="Xr">DEVICE_ATTACH(9)</a>, - <a class="Xr">device_delete_children(9)</a>, - <a class="Xr">DEVICE_DETACH(9)</a>, <a class="Xr">device_detach(9)</a>, - <a class="Xr">DEVICE_IDENTIFY(9)</a>, - <a class="Xr">device_probe_and_attach(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp"><code class="Fn">bus_enumerate_hinted_children</code>() first - appeared in <span class="Ux">FreeBSD 6.2</span>.</p> -<p class="Pp"><code class="Fn">bus_delayed_attach_children</code>() first - appeared in <span class="Ux">FreeBSD 12.2</span>.</p> -<p class="Pp"><code class="Fn">bus_identify_children</code>() first appeared in - <span class="Ux">FreeBSD 15.0</span>. Its functionality is available in - older releases via the deprecated - <code class="Fn">bus_generic_probe</code>().</p> -<p class="Pp"><code class="Fn">bus_attach_children</code>() first appeared in - <span class="Ux">FreeBSD 15.0</span>. Its functionality is available in - older releases via the deprecated - <code class="Fn">bus_generic_attach</code>().</p> -<p class="Pp"><code class="Fn">bus_detach_children</code>() first appeared in - <span class="Ux">FreeBSD 15.0</span>. Its functionality is available in - older releases via <code class="Fn">bus_generic_detach</code>().</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 5, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/bus_child_present.9 3.html b/static/freebsd/man9/bus_child_present.9 3.html deleted file mode 100644 index ee1a643e..00000000 --- a/static/freebsd/man9/bus_child_present.9 3.html +++ /dev/null @@ -1,86 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_CHILD_PRESENT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_CHILD_PRESENT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bus_child_present</code> — - <span class="Nd">ask the bus driver to see if this device is still really - present</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"> - <br/> - <code class="In">#include <<a class="In">machine/bus.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/rman.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">machine/resource.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_child_present</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#bus_child_present"><code class="Fn" id="bus_child_present">bus_child_present</code></a>() - function requests that the parent device driver of <var class="Fa">dev</var> - check to see if the hardware represented by <var class="Fa">dev</var> is - still physically accessible at this time. While the notion of accessible - varies from bus to bus, generally hardware that is not accessible cannot be - accessed via the - <a class="permalink" href="#bus_space*"><code class="Fn" id="bus_space*">bus_space*</code></a>() - methods that would otherwise be used to access the device.</p> -<p class="Pp">This does not ask the question “does this device have - children?” which can better be answered by - <a class="Xr">device_get_children(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">A zero return value indicates that the device is not present in - the system. A non-zero return value indicates that the device is present in - the system, or that the state of the device cannot be determined.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">This is some example code. It only calls stop when the - <a class="Xr">dc(4)</a> device is actually present.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>device_t dev; -dc_softc *sc; - -sc = device_get_softc(dev); -if (bus_child_present(dev)) - dc_stop(sc);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Warner - Losh</span> - <<a class="Mt" href="mailto:imp@FreeBSD.org">imp@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 27, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/bus_dma.9 3.html b/static/freebsd/man9/bus_dma.9 3.html deleted file mode 100644 index 06b5a960..00000000 --- a/static/freebsd/man9/bus_dma.9 3.html +++ /dev/null @@ -1,1154 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_DMA(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_DMA(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bus_dma</code>, - <code class="Nm">bus_dma_tag_create</code>, - <code class="Nm">bus_dma_tag_destroy</code>, - <code class="Nm">bus_dma_template_init</code>, - <code class="Nm">bus_dma_template_tag</code>, - <code class="Nm">bus_dma_template_clone</code>, - <code class="Nm">bus_dma_template_fill</code>, - <code class="Nm">BUS_DMA_TEMPLATE_FILL</code>, - <code class="Nm">bus_dmamap_create</code>, - <code class="Nm">bus_dmamap_destroy</code>, - <code class="Nm">bus_dmamap_load</code>, - <code class="Nm">bus_dmamap_load_bio</code>, - <code class="Nm">bus_dmamap_load_ccb</code>, - <code class="Nm">bus_dmamap_load_crp</code>, - <code class="Nm">bus_dmamap_load_crp_buffer</code>, - <code class="Nm">bus_dmamap_load_mbuf</code>, - <code class="Nm">bus_dmamap_load_mbuf_sg</code>, - <code class="Nm">bus_dmamap_load_uio</code>, - <code class="Nm">bus_dmamap_unload</code>, - <code class="Nm">bus_dmamap_sync</code>, - <code class="Nm">bus_dmamem_alloc</code>, - <code class="Nm">bus_dmamem_free</code> — <span class="Nd">Bus and - Machine Independent DMA Mapping Interface</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">machine/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_dma_tag_create</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t - parent</var>, <var class="Fa" style="white-space: nowrap;">bus_size_t - alignment</var>, <var class="Fa" style="white-space: nowrap;">bus_addr_t - boundary</var>, <var class="Fa" style="white-space: nowrap;">bus_addr_t - lowaddr</var>, <var class="Fa" style="white-space: nowrap;">bus_addr_t - highaddr</var>, - <var class="Fa" style="white-space: nowrap;">bus_dma_filter_t - *filtfunc</var>, <var class="Fa" style="white-space: nowrap;">void - *filtfuncarg</var>, <var class="Fa" style="white-space: nowrap;">bus_size_t - maxsize</var>, <var class="Fa" style="white-space: nowrap;">int - nsegments</var>, <var class="Fa" style="white-space: nowrap;">bus_size_t - maxsegsz</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>, <var class="Fa" style="white-space: nowrap;">bus_dma_lock_t - *lockfunc</var>, <var class="Fa" style="white-space: nowrap;">void - *lockfuncarg</var>, - <var class="Fa" style="white-space: nowrap;">bus_dma_tag_t *dmat</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_dma_tag_destroy</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t - dmat</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_dma_template_init</code>(<var class="Fa">bus_dma_template_t - *template</var>, <var class="Fa">bus_dma_tag_t parent</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_dma_template_tag</code>(<var class="Fa">bus_dma_template_t - *template</var>, <var class="Fa">bus_dma_tag_t *dmat</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_dma_template_clone</code>(<var class="Fa">bus_dma_template_t - *template</var>, <var class="Fa">bus_dma_tag_t dmat</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_dma_template_fill</code>(<var class="Fa">bus_dma_template_t - *template</var>, <var class="Fa">bus_dma_param_t params[]</var>, - <var class="Fa">u_int count</var>);</p> -<p class="Pp"><code class="Fn">BUS_DMA_TEMPLATE_FILL</code>(<var class="Fa">bus_dma_template_t - *template</var>, <var class="Fa">bus_dma_param_t param ...</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_dmamap_create</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t - dmat</var>, <var class="Fa" style="white-space: nowrap;">int flags</var>, - <var class="Fa" style="white-space: nowrap;">bus_dmamap_t *mapp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_dmamap_destroy</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t - dmat</var>, <var class="Fa" style="white-space: nowrap;">bus_dmamap_t - map</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_dmamap_load</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t - dmat</var>, <var class="Fa" style="white-space: nowrap;">bus_dmamap_t - map</var>, <var class="Fa" style="white-space: nowrap;">void *buf</var>, - <var class="Fa" style="white-space: nowrap;">bus_size_t buflen</var>, - <var class="Fa" style="white-space: nowrap;">bus_dmamap_callback_t - *callback</var>, <var class="Fa" style="white-space: nowrap;">void - *callback_arg</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_dmamap_load_bio</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t - dmat</var>, <var class="Fa" style="white-space: nowrap;">bus_dmamap_t - map</var>, <var class="Fa" style="white-space: nowrap;">struct bio - *bio</var>, - <var class="Fa" style="white-space: nowrap;">bus_dmamap_callback_t - *callback</var>, <var class="Fa" style="white-space: nowrap;">void - *callback_arg</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_dmamap_load_ccb</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t - dmat</var>, <var class="Fa" style="white-space: nowrap;">bus_dmamap_t - map</var>, <var class="Fa" style="white-space: nowrap;">union ccb - *ccb</var>, - <var class="Fa" style="white-space: nowrap;">bus_dmamap_callback_t - *callback</var>, <var class="Fa" style="white-space: nowrap;">void - *callback_arg</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_dmamap_load_crp</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t - dmat</var>, <var class="Fa" style="white-space: nowrap;">bus_dmamap_t - map</var>, <var class="Fa" style="white-space: nowrap;">struct crypto - *crp</var>, - <var class="Fa" style="white-space: nowrap;">bus_dmamap_callback_t - *callback</var>, <var class="Fa" style="white-space: nowrap;">void - *callback_arg</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_dmamap_load_crp_buffer</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t - dmat</var>, <var class="Fa" style="white-space: nowrap;">bus_dmamap_t - map</var>, <var class="Fa" style="white-space: nowrap;">struct crypto_buffer - *cb</var>, - <var class="Fa" style="white-space: nowrap;">bus_dmamap_callback_t - *callback</var>, <var class="Fa" style="white-space: nowrap;">void - *callback_arg</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_dmamap_load_mbuf</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t - dmat</var>, <var class="Fa" style="white-space: nowrap;">bus_dmamap_t - map</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *mbuf</var>, - <var class="Fa" style="white-space: nowrap;">bus_dmamap_callback2_t - *callback</var>, <var class="Fa" style="white-space: nowrap;">void - *callback_arg</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_dmamap_load_mbuf_sg</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t - dmat</var>, <var class="Fa" style="white-space: nowrap;">bus_dmamap_t - map</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *mbuf</var>, <var class="Fa" style="white-space: nowrap;">bus_dma_segment_t - *segs</var>, <var class="Fa" style="white-space: nowrap;">int *nsegs</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_dmamap_load_uio</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t - dmat</var>, <var class="Fa" style="white-space: nowrap;">bus_dmamap_t - map</var>, <var class="Fa" style="white-space: nowrap;">struct uio - *uio</var>, - <var class="Fa" style="white-space: nowrap;">bus_dmamap_callback2_t - *callback</var>, <var class="Fa" style="white-space: nowrap;">void - *callback_arg</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_dmamap_unload</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t - dmat</var>, <var class="Fa" style="white-space: nowrap;">bus_dmamap_t - map</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_dmamap_sync</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t - dmat</var>, <var class="Fa" style="white-space: nowrap;">bus_dmamap_t - map</var>, <var class="Fa" style="white-space: nowrap;">op</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_dmamem_alloc</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t - dmat</var>, <var class="Fa" style="white-space: nowrap;">void **vaddr</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>, - <var class="Fa" style="white-space: nowrap;">bus_dmamap_t *mapp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_dmamem_free</code>(<var class="Fa" style="white-space: nowrap;">bus_dma_tag_t - dmat</var>, <var class="Fa" style="white-space: nowrap;">void *vaddr</var>, - <var class="Fa" style="white-space: nowrap;">bus_dmamap_t map</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Direct Memory Access (DMA) is a method of transferring data - without involving the CPU, thus providing higher performance. A DMA - transaction can be achieved between device to memory, device to device, or - memory to memory.</p> -<p class="Pp">The <code class="Nm">bus_dma</code> API is a bus, device, and - machine-independent (MI) interface to DMA mechanisms. It provides the client - with flexibility and simplicity by abstracting machine dependent issues like - setting up DMA mappings, handling cache issues, bus specific features and - limitations.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="OVERVIEW"><a class="permalink" href="#OVERVIEW">OVERVIEW</a></h1> -<p class="Pp">A tag structure (<var class="Vt">bus_dma_tag_t</var>) is used to - describe the properties of a group of related DMA transactions. One way to - view this is that a tag describes the limitations of a DMA engine. For - example, if a DMA engine in a device is limited to 32-bit addresses, that - limitation is specified by a parameter when creating the tag for that - device. Similarly, a tag can be marked as requiring buffers whose addresses - are aligned to a specific boundary.</p> -<p class="Pp">Some devices may require multiple tags to describe DMA - transactions with differing properties. For example, a device might require - 16-byte alignment of its descriptor ring while permitting arbitrary - alignment of I/O buffers. In this case, the driver must create one tag for - the descriptor ring and a separate tag for I/O buffers. If a device has - restrictions that are common to all DMA transactions in addition to - restrictions that differ between unrelated groups of transactions, the - driver can first create a “parent” tag that describes the - common restrictions. The per-group tags can then inherit these restrictions - from this “parent” tag rather than having to list them - explicitly when creating the per-group tags.</p> -<p class="Pp">A mapping structure (<var class="Vt">bus_dmamap_t</var>) - represents a mapping of a memory region for DMA. On systems with I/O MMUs, - the mapping structure tracks any I/O MMU entries used by a request. For DMA - requests that require bounce pages, the mapping tracks the bounce pages - used.</p> -<p class="Pp" id="bus_dmamap_load">To prepare for one or more DMA transactions, - a mapping must be bound to a memory region by calling one of the - <a class="permalink" href="#bus_dmamap_load"><code class="Fn">bus_dmamap_load</code></a>() - functions. These functions configure the mapping which can include - programming entries in an I/O MMU and/or allocating bounce pages. An output - of these functions (either directly or indirectly by invoking a callback - routine) is the list of scatter/gather address ranges a consumer can pass to - a DMA engine to access the memory region. When a mapping is no longer - needed, the mapping must be unloaded via - <code class="Fn">bus_dmamap_unload</code>().</p> -<p class="Pp" id="bus_dmamap_sync">Before and after each DMA transaction, - <a class="permalink" href="#bus_dmamap_sync"><code class="Fn">bus_dmamap_sync</code></a>() - must be used to ensure that the correct data is used by the DMA engine and - the CPU. If a mapping uses bounce pages, the sync operations copy data - between the bounce pages and the memory region bound to the mapping. Sync - operations also handle architecture-specific details such as CPU cache - flushing and CPU memory operation ordering.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="STATIC_VS_DYNAMIC"><a class="permalink" href="#STATIC_VS_DYNAMIC">STATIC - VS DYNAMIC</a></h1> -<p class="Pp"><code class="Nm">bus_dma</code> handles two types of DMA - transactions: static and dynamic. Static transactions are used with a - long-lived memory region that is reused for many transactions such as a - descriptor ring. Dynamic transactions are used for transfers to or from - transient buffers such as I/O buffers holding a network packet or disk - block. Each transaction type uses a different subset of the - <code class="Nm">bus_dma</code> API.</p> -<section class="Ss"> -<h2 class="Ss" id="Static_Transactions"><a class="permalink" href="#Static_Transactions">Static - Transactions</a></h2> -<p class="Pp">Static transactions use memory regions allocated by - <code class="Nm">bus_dma</code>. Each static memory region is allocated by - calling <code class="Fn">bus_dmamem_alloc</code>(). This function requires a - valid tag describing the properties of the DMA transactions to this region - such as alignment or address restrictions. Multiple regions can share a - single tag if they share the same restrictions.</p> -<p class="Pp" id="bus_dmamem_alloc"><a class="permalink" href="#bus_dmamem_alloc"><code class="Fn">bus_dmamem_alloc</code></a>() - allocates a memory region along with a mapping object. The associated tag, - memory region, and mapping object must then be passed to - <code class="Fn">bus_dmamap_load</code>() to bind the mapping to the - allocated region and obtain the scatter/gather list.</p> -<p class="Pp" id="bus_dmamem_alloc~2">It is expected that - <a class="permalink" href="#bus_dmamem_alloc~2"><code class="Fn">bus_dmamem_alloc</code></a>() - will attempt to allocate memory requiring less expensive sync operations - (for example, implementations should not allocate regions requiring bounce - pages), but sync operations should still be used. For example, a driver - should use <code class="Fn">bus_dmamap_sync</code>() in an interrupt handler - before reading descriptor ring entries written by the device prior to the - interrupt.</p> -<p class="Pp" id="bus_dmamap_unload">When a consumer is finished with a memory - region, it should unload the mapping via - <a class="permalink" href="#bus_dmamap_unload"><code class="Fn">bus_dmamap_unload</code></a>() - and then release the memory region and mapping object via - <code class="Fn">bus_dmamem_free</code>().</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Dynamic_Transactions"><a class="permalink" href="#Dynamic_Transactions">Dynamic - Transactions</a></h2> -<p class="Pp">Dynamic transactions map memory regions provided by other parts of - the system. A tag must be created via - <code class="Fn">bus_dma_tag_create</code>() to describe the DMA - transactions to and from these memory regions, and a pool of mapping objects - must be allocated via <code class="Fn">bus_dmamap_create</code>() to track - the mappings of any in-flight transactions.</p> -<p class="Pp" id="bus_dmamap_load~2">When a consumer wishes to schedule a - transaction for a memory region, the consumer must first obtain an unused - mapping object from its pool of mapping objects. The memory region must be - bound to the mapping object via one of the - <a class="permalink" href="#bus_dmamap_load~2"><code class="Fn">bus_dmamap_load</code></a>() - functions. Before scheduling the transaction, the consumer should sync the - memory region via <code class="Fn">bus_dmamap_sync</code>() with one or more - of the “PRE” flags. After the transaction has completed, the - consumer should sync the memory region via - <code class="Fn">bus_dmamap_sync</code>() with one or more of the - “POST” flags. The mapping can then be unloaded via - <code class="Fn">bus_dmamap_unload</code>(), and the mapping object can be - returned to the pool of unused mapping objects.</p> -<p class="Pp" id="bus_dmamap_destroy">When a consumer is no longer scheduling - DMA transactions, the mapping objects should be freed via - <a class="permalink" href="#bus_dmamap_destroy"><code class="Fn">bus_dmamap_destroy</code></a>(), - and the tag should be freed via - <code class="Fn">bus_dma_tag_destroy</code>().</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="STRUCTURES_AND_TYPES"><a class="permalink" href="#STRUCTURES_AND_TYPES">STRUCTURES - AND TYPES</a></h1> -<dl class="Bl-tag"> - <dt><var class="Vt">bus_dma_tag_t</var></dt> - <dd>A machine-dependent (MD) opaque type that describes the characteristics of - a group of DMA transactions. DMA tags are organized into a hierarchy, with - each child tag inheriting the restrictions of its parent. This allows all - devices along the path of DMA transactions to contribute to the - constraints of those transactions.</dd> - <dt><var class="Vt">bus_dma_template_t</var></dt> - <dd>A template is a structure for creating a - <var class="Fa">bus_dma_tag_t</var> from a set of defaults. Once - initialized with <code class="Fn">bus_dma_template_init</code>(), a driver - can over-ride individual fields to suit its needs. The following fields - start with the indicated default values: - <div class="Bd Pp Li"> - <pre> alignment 1 - boundary 0 - lowaddr BUS_SPACE_MAXADDR - highaddr BUS_SPACE_MAXADDR - maxsize BUS_SPACE_MAXSIZE - nsegments BUS_SPACE_UNRESTRICTED - maxsegsize BUS_SPACE_MAXSIZE - flags 0 - lockfunc NULL - lockfuncarg NULL</pre> - </div> - <p class="Pp" id="bus_dma_tag_create">Descriptions of each field are - documented with - <a class="permalink" href="#bus_dma_tag_create"><code class="Fn">bus_dma_tag_create</code></a>(). - Note that the <var class="Fa">filtfunc</var> and - <var class="Fa">filtfuncarg</var> attributes of the DMA tag are not - supported with templates.</p> - </dd> - <dt><var class="Vt">bus_dma_filter_t</var></dt> - <dd>Client specified address filter having the format: - <dl class="Bl-tag"> - <dt id="client_filter"><var class="Ft">int</var></dt> - <dd><a class="permalink" href="#client_filter"><code class="Fn">client_filter</code></a>(<var class="Fa">void - *filtarg</var>, <var class="Fa">bus_addr_t testaddr</var>)</dd> - </dl> - <p class="Pp">Address filters can be specified during tag creation to allow - for devices whose DMA address restrictions cannot be specified by a - single window. The <var class="Fa">filtarg</var> argument is specified - by the client during tag creation to be passed to all invocations of the - callback. The <var class="Fa">testaddr</var> argument contains a - potential starting address of a DMA mapping. The filter function - operates on the set of addresses from <var class="Fa">testaddr</var> to - ‘<code class="Li">trunc_page(testaddr) + PAGE_SIZE - - 1</code>’, inclusive. The filter function should return zero if - any mapping in this range can be accommodated by the device and non-zero - otherwise.</p> - <p class="Pp" id="Note:"><a class="permalink" href="#Note:"><i class="Em">Note: - The use of filters is no longer supported and will result in an - error.</i></a></p> - </dd> - <dt><var class="Vt">bus_dma_segment_t</var></dt> - <dd>A machine-dependent type that describes individual DMA segments. It - contains the following fields: - <div class="Bd Pp Li"> - <pre> bus_addr_t ds_addr; - bus_size_t ds_len;</pre> - </div> - <p class="Pp">The <var class="Fa">ds_addr</var> field contains the device - visible address of the DMA segment, and <var class="Fa">ds_len</var> - contains the length of the DMA segment. Although the DMA segments - returned by a mapping call will adhere to all restrictions necessary for - a successful DMA operation, some conversion (e.g. a conversion from host - byte order to the device's byte order) is almost always required when - presenting segment information to the device.</p> - </dd> - <dt><var class="Vt">bus_dmamap_t</var></dt> - <dd>A machine-dependent opaque type describing an individual mapping. One map - is used for each memory allocation that will be loaded. Maps can be reused - once they have been unloaded. Multiple maps can be associated with one DMA - tag. While the value of the map may evaluate to - <code class="Dv">NULL</code> on some platforms under certain conditions, - it should never be assumed that it will be <code class="Dv">NULL</code> in - all cases.</dd> - <dt id="bus_dmamap_load~3"><var class="Vt">bus_dmamap_callback_t</var></dt> - <dd>Client specified callback for receiving mapping information resulting from - the load of a <var class="Vt">bus_dmamap_t</var> via - <a class="permalink" href="#bus_dmamap_load~3"><code class="Fn">bus_dmamap_load</code></a>(), - <code class="Fn">bus_dmamap_load_bio</code>(), - <code class="Fn">bus_dmamap_load_ccb</code>(), - <code class="Fn">bus_dmamap_load_crp</code>(), or - <code class="Fn">bus_dmamap_load_crp_buffer</code>(). Callbacks are of the - format: - <dl class="Bl-tag"> - <dt id="client_callback"><var class="Ft">void</var></dt> - <dd><a class="permalink" href="#client_callback"><code class="Fn">client_callback</code></a>(<var class="Fa">void - *callback_arg</var>, <var class="Fa">bus_dma_segment_t *segs</var>, - <var class="Fa">int nseg</var>, <var class="Fa">int error</var>)</dd> - </dl> - <p class="Pp">The <var class="Fa">callback_arg</var> is the callback - argument passed to dmamap load functions. The <var class="Fa">segs</var> - and <var class="Fa">nseg</var> arguments describe an array of - <var class="Vt">bus_dma_segment_t</var> structures that represent the - mapping. This array is only valid within the scope of the callback - function. The success or failure of the mapping is indicated by the - <var class="Fa">error</var> argument. More information on the use of - callbacks can be found in the description of the individual dmamap load - functions.</p> - </dd> - <dt id="bus_dmamap_load_uio"><var class="Vt">bus_dmamap_callback2_t</var></dt> - <dd>Client specified callback for receiving mapping information resulting from - the load of a <var class="Vt">bus_dmamap_t</var> via - <a class="permalink" href="#bus_dmamap_load_uio"><code class="Fn">bus_dmamap_load_uio</code></a>() - or - <a class="permalink" href="#bus_dmamap_load_mbuf"><code class="Fn" id="bus_dmamap_load_mbuf">bus_dmamap_load_mbuf</code></a>(). - <p class="Pp">Callback2s are of the format:</p> - <dl class="Bl-tag"> - <dt id="client_callback2"><var class="Ft">void</var></dt> - <dd><a class="permalink" href="#client_callback2"><code class="Fn">client_callback2</code></a>(<var class="Fa">void - *callback_arg</var>, <var class="Fa">bus_dma_segment_t *segs</var>, - <var class="Fa">int nseg</var>, <var class="Fa">bus_size_t - mapsize</var>, <var class="Fa">int error</var>)</dd> - </dl> - <p class="Pp">Callback2's behavior is the same as - <var class="Vt">bus_dmamap_callback_t</var> with the addition that the - length of the data mapped is provided via - <var class="Fa">mapsize</var>.</p> - </dd> - <dt id="bus_dmamap_sync~2"><var class="Vt">bus_dmasync_op_t</var></dt> - <dd>Memory synchronization operation specifier. Bus DMA requires explicit - synchronization of memory with its device visible mapping in order to - guarantee memory coherency. The <var class="Vt">bus_dmasync_op_t</var> - allows the type of DMA operation that will be or has been performed to be - communicated to the system so that the correct coherency measures are - taken. The operations are represented as bitfield flags that can be - combined together, though it only makes sense to combine PRE flags or POST - flags, not both. See the - <a class="permalink" href="#bus_dmamap_sync~2"><code class="Fn">bus_dmamap_sync</code></a>() - description below for more details on how to use these operations. - <p class="Pp">All operations specified below are performed from the host - memory point of view, where a read implies data coming from the device - to the host memory, and a write implies data going from the host memory - to the device. Alternatively, the operations can be thought of in terms - of driver operations, where reading a network packet or storage sector - corresponds to a read operation in <code class="Nm">bus_dma</code>.</p> - <dl class="Bl-tag"> - <dt id="BUS_DMASYNC_PREREAD"><a class="permalink" href="#BUS_DMASYNC_PREREAD"><code class="Dv">BUS_DMASYNC_PREREAD</code></a></dt> - <dd>Perform any synchronization required prior to an update of host memory - by the device.</dd> - <dt id="BUS_DMASYNC_PREWRITE"><a class="permalink" href="#BUS_DMASYNC_PREWRITE"><code class="Dv">BUS_DMASYNC_PREWRITE</code></a></dt> - <dd>Perform any synchronization required after an update of host memory by - the CPU and prior to device access to host memory.</dd> - <dt id="BUS_DMASYNC_POSTREAD"><a class="permalink" href="#BUS_DMASYNC_POSTREAD"><code class="Dv">BUS_DMASYNC_POSTREAD</code></a></dt> - <dd>Perform any synchronization required after an update of host memory by - the device and prior to CPU access to host memory.</dd> - <dt id="BUS_DMASYNC_POSTWRITE"><a class="permalink" href="#BUS_DMASYNC_POSTWRITE"><code class="Dv">BUS_DMASYNC_POSTWRITE</code></a></dt> - <dd>Perform any synchronization required after device access to host - memory.</dd> - </dl> - </dd> - <dt><var class="Vt">bus_dma_lock_t</var></dt> - <dd>Client specified lock/mutex manipulation method. This will be called from - within busdma whenever a client lock needs to be manipulated. In its - current form, the function will be called immediately before the callback - for a DMA load operation that has been deferred with - <code class="Dv">BUS_DMA_LOCK</code> and immediately after with - <code class="Dv">BUS_DMA_UNLOCK</code>. If the load operation does not - need to be deferred, then it will not be called since the function loading - the map should be holding the appropriate locks. This method is of the - format: - <dl class="Bl-tag"> - <dt id="lockfunc"><var class="Ft">void</var></dt> - <dd><a class="permalink" href="#lockfunc"><code class="Fn">lockfunc</code></a>(<var class="Fa">void - *lockfunc_arg</var>, <var class="Fa">bus_dma_lock_op_t op</var>)</dd> - </dl> - <p class="Pp">The <var class="Fa">lockfuncarg</var> argument is specified by - the client during tag creation to be passed to all invocations of the - callback. The <var class="Fa">op</var> argument specifies the lock - operation to perform.</p> - <p class="Pp" id="busdma_lock_mutex">Two <var class="Vt">lockfunc</var> - implementations are provided for convenience. - <a class="permalink" href="#busdma_lock_mutex"><code class="Fn">busdma_lock_mutex</code></a>() - performs standard mutex operations on the sleep mutex provided via - <var class="Fa">lockfuncarg</var>. - <a class="permalink" href="#dflt_lock"><code class="Fn" id="dflt_lock">dflt_lock</code></a>() - will generate a system panic if it is called. It is substituted into the - tag when <var class="Fa">lockfunc</var> is passed as - <code class="Dv">NULL</code> to - <code class="Fn">bus_dma_tag_create</code>() and is useful for tags that - should not be used with deferred load operations.</p> - </dd> - <dt><var class="Vt">bus_dma_lock_op_t</var></dt> - <dd>Operations to be performed by the client-specified - <code class="Fn">lockfunc</code>(). - <dl class="Bl-tag"> - <dt id="BUS_DMA_LOCK"><a class="permalink" href="#BUS_DMA_LOCK"><code class="Dv">BUS_DMA_LOCK</code></a></dt> - <dd>Acquires and/or locks the client locking primitive.</dd> - <dt id="BUS_DMA_UNLOCK"><a class="permalink" href="#BUS_DMA_UNLOCK"><code class="Dv">BUS_DMA_UNLOCK</code></a></dt> - <dd>Releases and/or unlocks the client locking primitive.</dd> - </dl> - </dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="FUNCTIONS"><a class="permalink" href="#FUNCTIONS">FUNCTIONS</a></h1> -<dl class="Bl-tag"> - <dt><code class="Fn">bus_dma_tag_create</code>(<var class="Fa">parent</var>, - <var class="Fa">alignment</var>, <var class="Fa">boundary</var>, - <var class="Fa">lowaddr</var>, <var class="Fa">highaddr</var>, - <var class="Fa">*filtfunc</var>, <var class="Fa">*filtfuncarg</var>, - <var class="Fa">maxsize</var>, <var class="Fa">nsegments</var>, - <var class="Fa">maxsegsz</var>, <var class="Fa">flags</var>, - <var class="Fa">lockfunc</var>, <var class="Fa">lockfuncarg</var>, - <var class="Fa">*dmat</var>)</dt> - <dd>Allocates a DMA tag, and initializes it according to the arguments - provided: - <dl class="Bl-tag"> - <dt><var class="Fa">parent</var></dt> - <dd>A parent tag from which to inherit restrictions. The restrictions - passed in other arguments can only further tighten the restrictions - inherited from the parent tag. - <p class="Pp" id="bus_get_dma_tag">All tags created by a device driver - must inherit from the tag returned by - <a class="permalink" href="#bus_get_dma_tag"><code class="Fn">bus_get_dma_tag</code></a>() - to honor restrictions between the parent bridge, CPU memory, and the - device.</p> - </dd> - <dt id="1"><var class="Fa">alignment</var></dt> - <dd>Alignment constraint, in bytes, of any mappings created using this - tag. The alignment must be a power of 2. Hardware that can DMA - starting at any address would specify - <a class="permalink" href="#1"><i class="Em">1</i></a> for byte - alignment. Hardware requiring DMA transfers to start on a multiple of - 4K would specify - <a class="permalink" href="#4096"><i class="Em" id="4096">4096</i></a>.</dd> - <dt><var class="Fa">boundary</var></dt> - <dd>Boundary constraint, in bytes, of the target DMA memory region. The - boundary indicates the set of addresses, all multiples of the boundary - argument, that cannot be crossed by a single - <var class="Vt">bus_dma_segment_t</var>. The boundary must be a power - of 2 and must be no smaller than the maximum segment size. - ‘<code class="Li">0</code>’ indicates that there are no - boundary restrictions.</dd> - <dt id="cannot"><var class="Fa">lowaddr</var>, - <var class="Fa">highaddr</var></dt> - <dd>Bounds of the window of bus address space that - <a class="permalink" href="#cannot"><i class="Em">cannot</i></a> be - directly accessed by the device. The window contains all addresses - greater than <var class="Fa">lowaddr</var> and less than or equal to - <var class="Fa">highaddr</var>. For example, a device incapable of DMA - above 4GB, would specify a <var class="Fa">highaddr</var> of - <code class="Dv">BUS_SPACE_MAXADDR</code> and a - <var class="Fa">lowaddr</var> of - <code class="Dv">BUS_SPACE_MAXADDR_32BIT</code>. Similarly a device - that can only perform DMA to addresses below 16MB would specify a - <var class="Fa">highaddr</var> of - <code class="Dv">BUS_SPACE_MAXADDR</code> and a - <var class="Fa">lowaddr</var> of - <code class="Dv">BUS_SPACE_MAXADDR_24BIT</code>. Some implementations - require that some region of device visible address space, overlapping - available host memory, be outside the window. This area of - ‘<code class="Li">safe memory</code>’ is used to bounce - requests that would otherwise conflict with the exclusion window.</dd> - <dt><var class="Fa">filtfunc</var></dt> - <dd>Formerly the optional filter function; must be - <code class="Dv">NULL</code>.</dd> - <dt><var class="Fa">filtfuncarg</var></dt> - <dd>Must be <code class="Dv">NULL</code>.</dd> - <dt><var class="Fa">maxsize</var></dt> - <dd>Maximum size, in bytes, of the sum of all segment lengths in a given - DMA mapping associated with this tag.</dd> - <dt><var class="Fa">nsegments</var></dt> - <dd>Number of discontinuities (scatter/gather segments) allowed in a DMA - mapped region.</dd> - <dt><var class="Fa">maxsegsz</var></dt> - <dd>Maximum size, in bytes, of a segment in any DMA mapped region - associated with <var class="Fa">dmat</var>.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>Are as follows: - <dl class="Bl-tag"> - <dt id="BUS_DMA_ALLOCNOW"><a class="permalink" href="#BUS_DMA_ALLOCNOW"><code class="Dv">BUS_DMA_ALLOCNOW</code></a></dt> - <dd>Pre-allocate enough resources to handle at least one map load - operation on this tag. If sufficient resources are not available, - <code class="Er">ENOMEM</code> is returned. This should not be - used for tags that only describe buffers that will be allocated - with <code class="Fn">bus_dmamem_alloc</code>(). Also, due to - resource sharing with other tags, this flag does not guarantee - that resources will be allocated or reserved exclusively for this - tag. It should be treated only as a minor optimization.</dd> - <dt id="BUS_DMA_COHERENT"><a class="permalink" href="#BUS_DMA_COHERENT"><code class="Dv">BUS_DMA_COHERENT</code></a></dt> - <dd>Indicate that the DMA engine and CPU are cache-coherent. Cached - memory may be used to back allocations created by - <code class="Fn">bus_dmamem_alloc</code>(). For - <code class="Fn">bus_dma_tag_create</code>(), the - <code class="Dv">BUS_DMA_COHERENT</code> flag is currently - implemented on arm64.</dd> - </dl> - </dd> - <dt><var class="Fa">lockfunc</var></dt> - <dd>Optional lock manipulation function (may be - <code class="Dv">NULL</code>) to be called when busdma needs to - manipulate a lock on behalf of the client. If - <code class="Dv">NULL</code> is specified, - <code class="Fn">dflt_lock</code>() is used.</dd> - <dt><var class="Fa">lockfuncarg</var></dt> - <dd>Optional argument to be passed to the function specified by - <var class="Fa">lockfunc</var>.</dd> - <dt><var class="Fa">dmat</var></dt> - <dd>Pointer to a bus_dma_tag_t where the resulting DMA tag will be - stored.</dd> - </dl> - <p class="Pp">Returns <code class="Er">ENOMEM</code> if sufficient memory is - not available for tag creation or allocating mapping resources. Returns - <code class="Er">EINVAL</code> if either <var class="Fa">filtfunc</var> - or <var class="Fa">filtarg</var> arguments are not - <code class="Dv">NULL</code>.</p> - </dd> - <dt id="bus_dma_tag_destroy"><a class="permalink" href="#bus_dma_tag_destroy"><code class="Fn">bus_dma_tag_destroy</code></a>(<var class="Fa">dmat</var>)</dt> - <dd>Deallocate the DMA tag <var class="Fa">dmat</var> that was created by - <code class="Fn">bus_dma_tag_create</code>(). - <p class="Pp">Returns <code class="Er">EBUSY</code> if any DMA maps remain - associated with <var class="Fa">dmat</var> or - ‘<code class="Li">0</code>’ on success.</p> - </dd> - <dt id="bus_dma_template_init"><a class="permalink" href="#bus_dma_template_init"><code class="Fn">bus_dma_template_init</code></a>(<var class="Fa">*template</var>, - <var class="Fa">parent</var>)</dt> - <dd>Initializes a <var class="Fa">bus_dma_template_t</var> structure. If the - <var class="Fa">parent</var> argument is non-NULL, this parent tag is - associated with the template and will be compiled into the dma tag that is - later created. The values of the parent are not copied into the template. - During tag creation in - <a class="permalink" href="#bus_dma_tag_template"><code class="Fn" id="bus_dma_tag_template">bus_dma_tag_template</code></a>(), - any parameters from the parent tag that are more restrictive than what is - in the provided template will overwrite what goes into the new tag.</dd> - <dt id="bus_dma_template_tag"><a class="permalink" href="#bus_dma_template_tag"><code class="Fn">bus_dma_template_tag</code></a>(<var class="Fa">*template</var>, - <var class="Fa">*dmat</var>)</dt> - <dd>Unpacks a template into a tag, and returns the tag via the - <var class="Fa">dmat</var>. All return values are identical to - <code class="Fn">bus_dma_tag_create</code>(). The template is not modified - by this function, and can be reused and/or freed upon return.</dd> - <dt id="bus_dma_template_clone"><a class="permalink" href="#bus_dma_template_clone"><code class="Fn">bus_dma_template_clone</code></a>(<var class="Fa">*template</var>, - <var class="Fa">dmat</var>)</dt> - <dd>Copies the fields from an existing tag to a template. The template does - not need to be initialized first. All of its fields will be overwritten by - the values contained in the tag. When paired with - <code class="Fn">bus_dma_template_tag</code>(), this function is useful - for creating copies of tags.</dd> - <dt id="bus_dma_template_fill"><a class="permalink" href="#bus_dma_template_fill"><code class="Fn">bus_dma_template_fill</code></a>(<var class="Fa">*template</var>, - <var class="Fa">params[]</var>, <var class="Fa">count</var>)</dt> - <dd>Fills in the selected fields of the template with the keyed values from - the <var class="Fa">params</var> array. This is not meant to be called - directly, use - <a class="permalink" href="#BUS_DMA_TEMPLATE_FILL"><code class="Fn" id="BUS_DMA_TEMPLATE_FILL">BUS_DMA_TEMPLATE_FILL</code></a>() - instead.</dd> - <dt><code class="Fn">BUS_DMA_TEMPLATE_FILL</code>(<var class="Fa">*template</var>, - <var class="Fa">param ...</var>)</dt> - <dd>Fills in the selected fields of the template with a variable number of - key-value parameters. The macros listed below take an argument of the - specified type and encapsulate it into a key-value structure that is - directly usable as a parameter argument. Multiple parameters may be - provided at once. - <div class="Bd Pp Li"> - <pre> BD_PARENT() void * - BD_ALIGNMENT() uintmax_t - BD_BOUNDARY() uintmax_t - BD_LOWADDR() vm_paddr_t - BD_HIGHADDR() vm_paddr_t - BD_MAXSIZE() uintmax_t - BD_NSEGMENTS() uintmax_t - BD_MAXSEGSIZE() uintmax_t - BD_FLAGS() uintmax_t - BD_LOCKFUNC() void * - BD_LOCKFUNCARG() void *</pre> - </div> - </dd> - <dt><code class="Fn">bus_dmamap_create</code>(<var class="Fa">dmat</var>, - <var class="Fa">flags</var>, <var class="Fa">*mapp</var>)</dt> - <dd>Allocates and initializes a DMA map. Arguments are as follows: - <dl class="Bl-tag"> - <dt><var class="Fa">dmat</var></dt> - <dd>DMA tag.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>Are as follows: - <dl class="Bl-tag"> - <dt id="BUS_DMA_COHERENT~2"><a class="permalink" href="#BUS_DMA_COHERENT~2"><code class="Dv">BUS_DMA_COHERENT</code></a></dt> - <dd>Attempt to map the memory loaded with this map such that cache - sync operations are as cheap as possible. This flag is typically - set on maps when the memory loaded with these will be accessed by - both a CPU and a DMA engine, frequently such as control data and - as opposed to streamable data such as receive and transmit - buffers. Use of this flag does not remove the requirement of using - <code class="Fn">bus_dmamap_sync</code>(), but it may reduce the - cost of performing these operations.</dd> - </dl> - </dd> - <dt><var class="Fa">mapp</var></dt> - <dd>Pointer to a <var class="Vt">bus_dmamap_t</var> where the resulting - DMA map will be stored.</dd> - </dl> - <p class="Pp">Returns <code class="Er">ENOMEM</code> if sufficient memory is - not available for creating the map or allocating mapping resources.</p> - </dd> - <dt id="bus_dmamap_destroy~2"><a class="permalink" href="#bus_dmamap_destroy~2"><code class="Fn">bus_dmamap_destroy</code></a>(<var class="Fa">dmat</var>, - <var class="Fa">map</var>)</dt> - <dd>Frees all resources associated with a given DMA map. Arguments are as - follows: - <dl class="Bl-tag"> - <dt><var class="Fa">dmat</var></dt> - <dd>DMA tag used to allocate <var class="Fa">map</var>.</dd> - <dt><var class="Fa">map</var></dt> - <dd>The DMA map to destroy.</dd> - </dl> - <p class="Pp">Returns <code class="Er">EBUSY</code> if a mapping is still - active for <var class="Fa">map</var>.</p> - </dd> - <dt id="bus_dmamap_load~4"><a class="permalink" href="#bus_dmamap_load~4"><code class="Fn">bus_dmamap_load</code></a>(<var class="Fa">dmat</var>, - <var class="Fa">map</var>, <var class="Fa">buf</var>, - <var class="Fa">buflen</var>, <var class="Fa">*callback</var>, - <var class="Fa">callback_arg</var>, <var class="Fa">flags</var>)</dt> - <dd>Creates a mapping in device visible address space of - <var class="Fa">buflen</var> bytes of <var class="Fa">buf</var>, - associated with the DMA map <var class="Fa">map</var>. This call will - always return immediately and will not block for any reason. Arguments are - as follows: - <dl class="Bl-tag"> - <dt><var class="Fa">dmat</var></dt> - <dd>DMA tag used to allocate <var class="Fa">map</var>.</dd> - <dt><var class="Fa">map</var></dt> - <dd>A DMA map without a currently active mapping.</dd> - <dt><var class="Fa">buf</var></dt> - <dd>A kernel virtual address pointer to a contiguous (in KVA) buffer, to - be mapped into device visible address space.</dd> - <dt><var class="Fa">buflen</var></dt> - <dd>The size of the buffer.</dd> - <dt><var class="Fa">callback</var> <var class="Fa">callback_arg</var></dt> - <dd>The callback function, and its argument. This function is called once - sufficient mapping resources are available for the DMA operation. If - resources are temporarily unavailable, this function will be deferred - until later, but the load operation will still return immediately to - the caller. Thus, callers should not assume that the callback will be - called before the load returns, and code should be structured - appropriately to handle this. See below for specific flags and error - codes that control this behavior.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>Are as follows: - <dl class="Bl-tag"> - <dt id="BUS_DMA_NOWAIT"><a class="permalink" href="#BUS_DMA_NOWAIT"><code class="Dv">BUS_DMA_NOWAIT</code></a></dt> - <dd>The load should not be deferred in case of insufficient mapping - resources, and instead should return immediately with an - appropriate error.</dd> - <dt id="BUS_DMA_NOCACHE"><a class="permalink" href="#BUS_DMA_NOCACHE"><code class="Dv">BUS_DMA_NOCACHE</code></a></dt> - <dd>The generated transactions to and from the virtual page are - non-cacheable.</dd> - </dl> - </dd> - </dl> - <p class="Pp">Return values to the caller are as follows:</p> - <dl class="Bl-tag"> - <dt>0</dt> - <dd>The callback has been called and completed. The status of the mapping - has been delivered to the callback.</dd> - <dt><code class="Er">EINPROGRESS</code></dt> - <dd>The mapping has been deferred for lack of resources. The callback will - be called as soon as resources are available. Callbacks are serviced - in FIFO order. - <p class="Pp">Note that subsequent load operations for the same tag that - do not require extra resources will still succeed. This may result - in out-of-order processing of requests. If the caller requires the - order of requests to be preserved, then the caller is required to - stall subsequent requests until a pending request's callback is - invoked.</p> - </dd> - <dt><code class="Er">ENOMEM</code></dt> - <dd>The load request has failed due to insufficient resources, and the - caller specifically used the <code class="Dv">BUS_DMA_NOWAIT</code> - flag.</dd> - <dt><code class="Er">EINVAL</code></dt> - <dd>The load request was invalid. The callback has been called and has - been provided the same error. This error value may indicate that - <var class="Fa">dmat</var>, <var class="Fa">map</var>, - <var class="Fa">buf</var>, or <var class="Fa">callback</var> were - invalid, or <var class="Fa">buflen</var> was larger than the - <var class="Fa">maxsize</var> argument used to create the dma tag - <var class="Fa">dmat</var>.</dd> - </dl> - <p class="Pp">When the callback is called, it is presented with an error - value indicating the disposition of the mapping. Error may be one of the - following:</p> - <dl class="Bl-tag"> - <dt>0</dt> - <dd>The mapping was successful and the <var class="Fa">dm_segs</var> - callback argument contains an array of - <var class="Vt">bus_dma_segment_t</var> elements describing the - mapping. This array is only valid during the scope of the callback - function.</dd> - <dt><code class="Er">EFBIG</code></dt> - <dd>A mapping could not be achieved within the segment constraints - provided in the tag even though the requested allocation size was less - than maxsize.</dd> - </dl> - </dd> - <dt id="bus_dmamap_load_bio"><a class="permalink" href="#bus_dmamap_load_bio"><code class="Fn">bus_dmamap_load_bio</code></a>(<var class="Fa">dmat</var>, - <var class="Fa">map</var>, <var class="Fa">bio</var>, - <var class="Fa">callback</var>, <var class="Fa">callback_arg</var>, - <var class="Fa">flags</var>)</dt> - <dd>This is a variation of <code class="Fn">bus_dmamap_load</code>() which - maps buffers pointed to by <var class="Fa">bio</var> for DMA transfers. - <var class="Fa">bio</var> may point to either a mapped or unmapped - buffer.</dd> - <dt><code class="Fn">bus_dmamap_load_ccb</code>(<var class="Fa">dmat</var>, - <var class="Fa">map</var>, <var class="Fa">ccb</var>, - <var class="Fa">callback</var>, <var class="Fa">callback_arg</var>, - <var class="Fa">flags</var>)</dt> - <dd>This is a variation of <code class="Fn">bus_dmamap_load</code>() which - maps data pointed to by <var class="Fa">ccb</var> for DMA transfers. The - data for <var class="Fa">ccb</var> may be any of the following types: - <dl class="Bl-tag"> - <dt>CAM_DATA_VADDR</dt> - <dd>The data is a single KVA buffer.</dd> - <dt>CAM_DATA_PADDR</dt> - <dd>The data is a single bus address range.</dd> - <dt>CAM_DATA_SG</dt> - <dd>The data is a scatter/gather list of KVA buffers.</dd> - <dt>CAM_DATA_SG_PADDR</dt> - <dd>The data is a scatter/gather list of bus address ranges.</dd> - <dt>CAM_DATA_BIO</dt> - <dd>The data is contained in a <var class="Vt">struct bio</var> attached - to the CCB.</dd> - </dl> - <p class="Pp" id="bus_dmamap_load_ccb"><a class="permalink" href="#bus_dmamap_load_ccb"><code class="Fn">bus_dmamap_load_ccb</code></a>() - supports the following CCB XPT function codes:</p> - <p class="Pp"></p> - <ul class="Bl-item Bd-indent Bl-compact"> - <li>XPT_ATA_IO</li> - <li>XPT_CONT_TARGET_IO</li> - <li>XPT_SCSI_IO</li> - </ul> - </dd> - <dt id="bus_dmamap_load_crp"><a class="permalink" href="#bus_dmamap_load_crp"><code class="Fn">bus_dmamap_load_crp</code></a>(<var class="Fa">dmat</var>, - <var class="Fa">map</var>, <var class="Fa">crp</var>, - <var class="Fa">callback</var>, <var class="Fa">callback_arg</var>, - <var class="Fa">flags</var>)</dt> - <dd>This is a variation of <code class="Fn">bus_dmamap_load</code>() which - maps the input buffer pointed to by <var class="Fa">crp</var> for DMA - transfers. The <code class="Dv">BUS_DMA_NOWAIT</code> flag is implied, - thus no callback deferral will happen.</dd> - <dt id="bus_dmamap_load_crp_buffer"><a class="permalink" href="#bus_dmamap_load_crp_buffer"><code class="Fn">bus_dmamap_load_crp_buffer</code></a>(<var class="Fa">dmat</var>, - <var class="Fa">map</var>, <var class="Fa">cb</var>, - <var class="Fa">callback</var>, <var class="Fa">callback_arg</var>, - <var class="Fa">flags</var>)</dt> - <dd>This is a variation of <code class="Fn">bus_dmamap_load</code>() which - maps the crypto data buffer pointed to by <var class="Fa">cb</var> for DMA - transfers. The <code class="Dv">BUS_DMA_NOWAIT</code> flag is implied, - thus no callback deferral will happen.</dd> - <dt><code class="Fn">bus_dmamap_load_mbuf</code>(<var class="Fa">dmat</var>, - <var class="Fa">map</var>, <var class="Fa">mbuf</var>, - <var class="Fa">callback2</var>, <var class="Fa">callback_arg</var>, - <var class="Fa">flags</var>)</dt> - <dd>This is a variation of <code class="Fn">bus_dmamap_load</code>() which - maps mbuf chains for DMA transfers. A <var class="Vt">bus_size_t</var> - argument is also passed to the callback routine, which contains the mbuf - chain's packet header length. The <code class="Dv">BUS_DMA_NOWAIT</code> - flag is implied, thus no callback deferral will happen. - <p class="Pp">Mbuf chains are assumed to be in kernel virtual address - space.</p> - <p class="Pp" id="bus_dmamap_load~5">Beside the error values listed for - <a class="permalink" href="#bus_dmamap_load~5"><code class="Fn">bus_dmamap_load</code></a>(), - <code class="Er">EINVAL</code> will be returned if the size of the mbuf - chain exceeds the maximum limit of the DMA tag.</p> - </dd> - <dt id="bus_dmamap_load_mbuf_sg"><a class="permalink" href="#bus_dmamap_load_mbuf_sg"><code class="Fn">bus_dmamap_load_mbuf_sg</code></a>(<var class="Fa">dmat</var>, - <var class="Fa">map</var>, <var class="Fa">mbuf</var>, - <var class="Fa">segs</var>, <var class="Fa">nsegs</var>, - <var class="Fa">flags</var>)</dt> - <dd>This is just like <code class="Fn">bus_dmamap_load_mbuf</code>() except - that it returns immediately without calling a callback function. It is - provided for efficiency. The scatter/gather segment array - <var class="Va">segs</var> is provided by the caller and filled in - directly by the function. The <var class="Va">nsegs</var> argument is - returned with the number of segments filled in. Returns the same errors as - <code class="Fn">bus_dmamap_load_mbuf</code>().</dd> - <dt><code class="Fn">bus_dmamap_load_uio</code>(<var class="Fa">dmat</var>, - <var class="Fa">map</var>, <var class="Fa">uio</var>, - <var class="Fa">callback2</var>, <var class="Fa">callback_arg</var>, - <var class="Fa">flags</var>)</dt> - <dd>This is a variation of <code class="Fn">bus_dmamap_load</code>() which - maps buffers pointed to by <var class="Fa">uio</var> for DMA transfers. A - <var class="Vt">bus_size_t</var> argument is also passed to the callback - routine, which contains the size of <var class="Fa">uio</var>, i.e. - <var class="Fa">uio->uio_resid</var>. The - <code class="Dv">BUS_DMA_NOWAIT</code> flag is implied, thus no callback - deferral will happen. Returns the same errors as - <code class="Fn">bus_dmamap_load</code>(). - <p class="Pp">If <var class="Fa">uio->uio_segflg</var> is - <code class="Dv">UIO_USERSPACE</code>, then it is assumed that the - buffer, <var class="Fa">uio</var> is in - <var class="Fa">uio->uio_td->td_proc</var>'s address space. User - space memory must be in-core and wired prior to attempting a map load - operation. Pages may be locked using <a class="Xr">vslock(9)</a>.</p> - </dd> - <dt id="bus_dmamap_unload~2"><a class="permalink" href="#bus_dmamap_unload~2"><code class="Fn">bus_dmamap_unload</code></a>(<var class="Fa">dmat</var>, - <var class="Fa">map</var>)</dt> - <dd>Unloads a DMA map. Arguments are as follows: - <dl class="Bl-tag"> - <dt><var class="Fa">dmat</var></dt> - <dd>DMA tag used to allocate <var class="Fa">map</var>.</dd> - <dt><var class="Fa">map</var></dt> - <dd>The DMA map that is to be unloaded.</dd> - </dl> - <p class="Pp" id="bus_dmamap_unload~3"><a class="permalink" href="#bus_dmamap_unload~3"><code class="Fn">bus_dmamap_unload</code></a>() - will not perform any implicit synchronization of DMA buffers. This must - be done explicitly by a call to - <code class="Fn">bus_dmamap_sync</code>() prior to unloading the - map.</p> - </dd> - <dt><code class="Fn">bus_dmamap_sync</code>(<var class="Fa">dmat</var>, - <var class="Fa">map</var>, <var class="Fa">op</var>)</dt> - <dd>Performs synchronization of a device visible mapping with the CPU visible - memory referenced by that mapping. Arguments are as follows: - <dl class="Bl-tag"> - <dt><var class="Fa">dmat</var></dt> - <dd>DMA tag used to allocate <var class="Fa">map</var>.</dd> - <dt><var class="Fa">map</var></dt> - <dd>The DMA mapping to be synchronized.</dd> - <dt><var class="Fa">op</var></dt> - <dd>Type of synchronization operation to perform. See the definition of - <var class="Vt">bus_dmasync_op_t</var> for a description of the - acceptable values for <var class="Fa">op</var>.</dd> - </dl> - <p class="Pp" id="bus_dmamap_sync~3">The - <a class="permalink" href="#bus_dmamap_sync~3"><code class="Fn">bus_dmamap_sync</code></a>() - function is the method used to ensure that CPU's and device's direct - memory access (DMA) to shared memory is coherent. For example, the CPU - might be used to set up the contents of a buffer that is to be made - available to a device. To ensure that the data are visible via the - device's mapping of that memory, the buffer must be loaded and a DMA - sync operation of <code class="Dv">BUS_DMASYNC_PREWRITE</code> must be - performed after the CPU has updated the buffer and before the device - access is initiated. If the CPU modifies this buffer again later, - another <code class="Dv">BUS_DMASYNC_PREWRITE</code> sync operation must - be performed before an additional device access. Conversely, suppose a - device updates memory that is to be read by a CPU. In this case, the - buffer must be loaded, and a DMA sync operation of - <code class="Dv">BUS_DMASYNC_PREREAD</code> must be performed before the - device access is initiated. The CPU will only be able to see the results - of this memory update once the DMA operation has completed and a - <code class="Dv">BUS_DMASYNC_POSTREAD</code> sync operation has been - performed.</p> - <p class="Pp">If read and write operations are not preceded and followed by - the appropriate synchronization operations, behavior is undefined.</p> - </dd> - <dt id="bus_dmamem_alloc~3"><a class="permalink" href="#bus_dmamem_alloc~3"><code class="Fn">bus_dmamem_alloc</code></a>(<var class="Fa">dmat</var>, - <var class="Fa">**vaddr</var>, <var class="Fa">flags</var>, - <var class="Fa">*mapp</var>)</dt> - <dd>Allocates memory that is mapped into KVA at the address returned in - <var class="Fa">vaddr</var> and that is permanently loaded into the newly - created <var class="Vt">bus_dmamap_t</var> returned via - <var class="Fa">mapp</var>. Arguments are as follows: - <dl class="Bl-tag"> - <dt><var class="Fa">dmat</var></dt> - <dd>DMA tag describing the constraints of the DMA mapping.</dd> - <dt><var class="Fa">vaddr</var></dt> - <dd>Pointer to a pointer that will hold the returned KVA mapping of the - allocated region.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>Flags are defined as follows: - <dl class="Bl-tag"> - <dt id="BUS_DMA_WAITOK"><a class="permalink" href="#BUS_DMA_WAITOK"><code class="Dv">BUS_DMA_WAITOK</code></a></dt> - <dd>The routine can safely wait (sleep) for resources.</dd> - <dt id="BUS_DMA_NOWAIT~2"><a class="permalink" href="#BUS_DMA_NOWAIT~2"><code class="Dv">BUS_DMA_NOWAIT</code></a></dt> - <dd>The routine is not allowed to wait for resources. If resources are - not available, <code class="Dv">ENOMEM</code> is returned.</dd> - <dt id="BUS_DMA_COHERENT~3"><a class="permalink" href="#BUS_DMA_COHERENT~3"><code class="Dv">BUS_DMA_COHERENT</code></a></dt> - <dd>Attempt to map this memory in a coherent fashion. See - <a class="permalink" href="#bus_dmamap_create"><code class="Fn" id="bus_dmamap_create">bus_dmamap_create</code></a>() - above for a description of this flag. For - <code class="Fn">bus_dmamem_alloc</code>(), the - <code class="Dv">BUS_DMA_COHERENT</code> flag is currently - implemented on arm and arm64.</dd> - <dt id="BUS_DMA_ZERO"><a class="permalink" href="#BUS_DMA_ZERO"><code class="Dv">BUS_DMA_ZERO</code></a></dt> - <dd>Causes the allocated memory to be set to all zeros.</dd> - <dt id="BUS_DMA_NOCACHE~2"><a class="permalink" href="#BUS_DMA_NOCACHE~2"><code class="Dv">BUS_DMA_NOCACHE</code></a></dt> - <dd>The allocated memory will not be cached in the processor caches. - All memory accesses appear on the bus and are executed without - reordering. For <code class="Fn">bus_dmamem_alloc</code>(), the - <code class="Dv">BUS_DMA_NOCACHE</code> flag is currently - implemented on amd64 and i386 where it results in the Strong - Uncacheable PAT to be set for the allocated virtual address - range.</dd> - </dl> - </dd> - <dt><var class="Fa">mapp</var></dt> - <dd>Pointer to a <var class="Vt">bus_dmamap_t</var> where the resulting - DMA map will be stored.</dd> - </dl> - <p class="Pp" id="bus_dma_tag_create~2">The size of memory to be allocated - is <var class="Fa">maxsize</var> as specified in the call to - <a class="permalink" href="#bus_dma_tag_create~2"><code class="Fn">bus_dma_tag_create</code></a>() - for <var class="Fa">dmat</var>.</p> - <p class="Pp" id="bus_dmamem_alloc~4">The current implementation of - <a class="permalink" href="#bus_dmamem_alloc~4"><code class="Fn">bus_dmamem_alloc</code></a>() - will allocate all requests as a single segment.</p> - <p class="Pp" id="bus_dmamem_free">An initial load operation is required to - obtain the bus address of the allocated memory, and an unload operation - is required before freeing the memory, as described below in - <a class="permalink" href="#bus_dmamem_free"><code class="Fn">bus_dmamem_free</code></a>(). - Maps are automatically handled by this function and should not be - explicitly allocated or destroyed.</p> - <p class="Pp" id="bus_dmamap_sync~4">Although an explicit load is not - required for each access to the memory referenced by the returned map, - the synchronization requirements as described in the - <a class="permalink" href="#bus_dmamap_sync~4"><code class="Fn">bus_dmamap_sync</code></a>() - section still apply and should be used to achieve portability on - architectures without coherent buses.</p> - <p class="Pp">Returns <code class="Er">ENOMEM</code> if sufficient memory is - not available for completing the operation.</p> - </dd> - <dt id="bus_dmamem_free~2"><a class="permalink" href="#bus_dmamem_free~2"><code class="Fn">bus_dmamem_free</code></a>(<var class="Fa">dmat</var>, - <var class="Fa">*vaddr</var>, <var class="Fa">map</var>)</dt> - <dd>Frees memory previously allocated by - <code class="Fn">bus_dmamem_alloc</code>(). Any mappings will be - invalidated. Arguments are as follows: - <dl class="Bl-tag"> - <dt><var class="Fa">dmat</var></dt> - <dd>DMA tag.</dd> - <dt><var class="Fa">vaddr</var></dt> - <dd>Kernel virtual address of the memory.</dd> - <dt><var class="Fa">map</var></dt> - <dd>DMA map to be invalidated.</dd> - </dl> - </dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Behavior is undefined if invalid arguments are passed to any of - the above functions. If sufficient resources cannot be allocated for a given - transaction, <code class="Er">ENOMEM</code> is returned. All routines that - are not of type <var class="Vt">void</var> will return 0 on success or an - error code on failure as discussed above.</p> -<p class="Pp">All <var class="Vt">void</var> routines will succeed if provided - with valid arguments.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKING"><a class="permalink" href="#LOCKING">LOCKING</a></h1> -<p class="Pp">Two locking protocols are used by <code class="Nm">bus_dma</code>. - The first is a private global lock that is used to synchronize access to the - bounce buffer pool on the architectures that make use of them. This lock is - strictly a leaf lock that is only used internally to - <code class="Nm">bus_dma</code> and is not exposed to clients of the - API.</p> -<p class="Pp" id="bus_dmamap_load~6">The second protocol involves protecting - various resources stored in the tag. Since almost all - <code class="Nm">bus_dma</code> operations are done through requests from - the driver that created the tag, the most efficient way to protect the tag - resources is through the lock that the driver uses. In cases where - <code class="Nm">bus_dma</code> acts on its own without being called by the - driver, the lock primitive specified in the tag is acquired and released - automatically. An example of this is when the - <a class="permalink" href="#bus_dmamap_load~6"><code class="Fn">bus_dmamap_load</code></a>() - callback function is called from a deferred context instead of the driver - context. This means that certain <code class="Nm">bus_dma</code> functions - must always be called with the same lock held that is specified in the tag. - These functions include:</p> -<p class="Pp"></p> -<ul class="Bl-item Bd-indent Bl-compact"> - <li id="bus_dmamap_load~7"><a class="permalink" href="#bus_dmamap_load~7"><code class="Fn">bus_dmamap_load</code></a>()</li> - <li><code class="Fn">bus_dmamap_load_bio</code>()</li> - <li><code class="Fn">bus_dmamap_load_ccb</code>()</li> - <li><code class="Fn">bus_dmamap_load_mbuf</code>()</li> - <li><code class="Fn">bus_dmamap_load_mbuf_sg</code>()</li> - <li><code class="Fn">bus_dmamap_load_uio</code>()</li> - <li><code class="Fn">bus_dmamap_unload</code>()</li> - <li><code class="Fn">bus_dmamap_sync</code>()</li> -</ul> -<p class="Pp">There is one exception to this rule. It is common practice to call - some of these functions during driver start-up without any locks held. So - long as there is a guarantee of no possible concurrent use of the tag by - different threads during this operation, it is safe to not hold a lock for - these functions.</p> -<p class="Pp">Certain <code class="Nm">bus_dma</code> operations should not be - called with the driver lock held, either because they are already protected - by an internal lock, or because they might sleep due to memory or resource - allocation. The following functions must not be called with any - non-sleepable locks held:</p> -<p class="Pp"></p> -<ul class="Bl-item Bd-indent Bl-compact"> - <li id="bus_dma_tag_create~3"><a class="permalink" href="#bus_dma_tag_create~3"><code class="Fn">bus_dma_tag_create</code></a>()</li> - <li id="bus_dmamap_create~2"><a class="permalink" href="#bus_dmamap_create~2"><code class="Fn">bus_dmamap_create</code></a>()</li> - <li><code class="Fn">bus_dmamem_alloc</code>()</li> -</ul> -<p class="Pp">All other functions do not have a locking protocol and can thus be - called with or without any system or driver locks held.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devclass(9)</a>, <a class="Xr">device(9)</a>, - <a class="Xr">driver(9)</a>, <a class="Xr">rman(9)</a>, - <a class="Xr">vslock(9)</a></p> -<p class="Pp"></p> -<p class="Pp"><cite class="Rs"><span class="RsA">Jason R. Thorpe</span>, - <span class="RsT">A Machine-Independent DMA Framework for NetBSD</span>, - <i class="RsJ">Proceedings of the Summer 1998 USENIX Technical - Conference</i>, <span class="RsQ">USENIX Association</span>, - <span class="RsD">June 1998</span>.</cite></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">bus_dma</code> interface first appeared in - <span class="Ux">NetBSD 1.3</span>.</p> -<p class="Pp">The <code class="Nm">bus_dma</code> API was adopted from - <span class="Ux">NetBSD</span> for use in the CAM SCSI subsystem. The - alterations to the original API were aimed to remove the need for a - <var class="Vt">bus_dma_segment_t</var> array stored in each - <var class="Vt">bus_dmamap_t</var> while allowing callers to queue up on - scarce resources.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">bus_dma</code> interface was designed and - implemented by <span class="An">Jason R. Thorpe</span> of the Numerical - Aerospace Simulation Facility, NASA Ames Research Center. Additional input - on the <code class="Nm">bus_dma</code> design was provided by - <span class="An">Chris Demetriou</span>, <span class="An">Charles - Hannum</span>, <span class="An">Ross Harvey</span>, <span class="An">Matthew - Jacob</span>, <span class="An">Jonathan Stone</span>, and - <span class="An">Matt Thomas</span>.</p> -<p class="Pp">The <code class="Nm">bus_dma</code> interface in - <span class="Ux">FreeBSD</span> benefits from the contributions of - <span class="An">Justin T. Gibbs</span>, <span class="An">Peter Wemm</span>, - <span class="An">Doug Rabson</span>, <span class="An">Matthew N. - Dodd</span>, <span class="An">Sam Leffler</span>, <span class="An">Maxime - Henrion</span>, <span class="An">Jake Burkholder</span>, - <span class="An">Takahashi Yoshihiro</span>, <span class="An">Scott - Long</span> and many others.</p> -<p class="Pp">This manual page was written by <span class="An">Hiten M. - Pandya</span> and <span class="An">Justin T. Gibbs</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 25, 2020</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/bus_generic_detach.9 4.html b/static/freebsd/man9/bus_generic_detach.9 4.html deleted file mode 100644 index 1f468de0..00000000 --- a/static/freebsd/man9/bus_generic_detach.9 4.html +++ /dev/null @@ -1,62 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_GENERIC_DETACH(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_GENERIC_DETACH(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bus_generic_detach</code> — - <span class="Nd">generic implementation of - <code class="Dv">DEVICE_DETACH</code> for buses</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_generic_detach</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This function provides an implementation of the - <a class="Xr">DEVICE_DETACH(9)</a> method which can be used by most bus - code. It uses <a class="Xr">bus_detach_children(9)</a> to detach drivers - from all child devices giving them a chance to veto the detach request. If - <a class="permalink" href="#bus_detach_children"><code class="Fn" id="bus_detach_children">bus_detach_children</code></a>() - succeeds, - <a class="permalink" href="#bus_generic_detach"><code class="Fn" id="bus_generic_detach">bus_generic_detach</code></a>() - calls <a class="Xr">device_delete_children(9)</a> to delete all child - devices.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an appropriate error is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">bus_detach_children(9)</a>, - <a class="Xr">device(9)</a>, <a class="Xr">device_delete_children(9)</a>, - <a class="Xr">driver(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 5, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/bus_generic_new_pass.9 4.html b/static/freebsd/man9/bus_generic_new_pass.9 4.html deleted file mode 100644 index c25b1be7..00000000 --- a/static/freebsd/man9/bus_generic_new_pass.9 4.html +++ /dev/null @@ -1,49 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_GENERIC_NEW_PASS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_GENERIC_NEW_PASS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bus_generic_new_pass</code> — - <span class="Nd">generic implementation of BUS_NEW_PASS for bus - devices</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_generic_new_pass</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This function provides an implementation of the - <a class="Xr">BUS_NEW_PASS(9)</a> method which can be used by bus drivers. - It first invokes the <a class="Xr">DEVICE_IDENTIFY(9)</a> method for any - drivers whose pass level is equal to the new pass level. Then, for each - attached child device it calls <a class="Xr">BUS_NEW_PASS(9)</a> to rescan - child buses, and for each unattached child device it calls - <a class="Xr">device_probe_and_attach(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">BUS_NEW_PASS(9)</a>, - <a class="Xr">bus_set_pass(9)</a>, <a class="Xr">device(9)</a>, - <a class="Xr">DEVICE_IDENTIFY(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 15, 2017</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/bus_generic_print_child.9 3.html b/static/freebsd/man9/bus_generic_print_child.9 3.html deleted file mode 100644 index d77797f1..00000000 --- a/static/freebsd/man9/bus_generic_print_child.9 3.html +++ /dev/null @@ -1,99 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_GENERIC_PRINT_CHILD(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_GENERIC_PRINT_CHILD(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bus_generic_print_child</code>, - <code class="Nm">bus_print_child_domain</code>, - <code class="Nm">bus_print_child_footer</code>, - <code class="Nm">bus_print_child_header</code> — - <span class="Nd">generic implementation of - <a class="Xr">BUS_PRINT_CHILD(9)</a></span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_generic_print_child</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">device_t - child</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_print_child_domain</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">device_t - child</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_print_child_footer</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">device_t - child</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_print_child_header</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">device_t - child</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><a class="permalink" href="#bus_generic_print_child"><code class="Fn" id="bus_generic_print_child">bus_generic_print_child</code></a>() - prints out the default device announcement message. Given device - ‘foo0’ on bus ‘bar0’ where foo0 has the - description “FooCard 1234” and is associated with the NUMA - domain 1, the following would be printed:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>foo0: <FooCard 1234> numa-domain 1 on bar0</pre> -</div> -<p class="Pp" id="bus_generic_print_child~2"><a class="permalink" href="#bus_generic_print_child~2"><code class="Fn">bus_generic_print_child</code></a>() - calls the three helper functions - <code class="Fn">bus_print_child_header</code>(), - <code class="Fn">bus_print_child_domain</code>(), and - <code class="Fn">bus_print_child_footer</code>().</p> -<p class="Pp" id="bus_print_child_header"><a class="permalink" href="#bus_print_child_header"><code class="Fn">bus_print_child_header</code></a>() - outputs the device name and unit followed by the device description in angle - brackets (“foo0: <FooCard 1234>”).</p> -<p class="Pp" id="bus_print_child_domain"><a class="permalink" href="#bus_print_child_domain"><code class="Fn">bus_print_child_domain</code></a>() - outputs “ numa-domain” followed by the domain number if - <a class="permalink" href="#bus_get_domain"><code class="Fn" id="bus_get_domain">bus_get_domain</code></a>() - returns a valid domain for the device (“numa-domain 1”). If - <var class="Fa">dev</var> is not associated witha valid domain, nothing is - output.</p> -<p class="Pp" id="bus_print_child_footer"><a class="permalink" href="#bus_print_child_footer"><code class="Fn">bus_print_child_footer</code></a>() - outputs the string “ on” followed by the parent device's name - and unit (“ on bar0”).</p> -<p class="Pp" id="bus_generic_print_child~3">These functions can be used to - implement <a class="Xr">BUS_PRINT_CHILD(9)</a> in a bus driver if - <a class="permalink" href="#bus_generic_print_child~3"><code class="Fn">bus_generic_print_child</code></a>() - is not sufficient.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The number of characters output.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">BUS_PRINT_CHILD(9)</a>, - <a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 5, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/bus_generic_read_ivar.9 4.html b/static/freebsd/man9/bus_generic_read_ivar.9 4.html deleted file mode 100644 index 4eefb5f9..00000000 --- a/static/freebsd/man9/bus_generic_read_ivar.9 4.html +++ /dev/null @@ -1,56 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_GENERIC_READ_IVAR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_GENERIC_READ_IVAR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bus_generic_read_ivar</code>, - <code class="Nm">bus_generic_write_ivar</code> — - <span class="Nd">generic implementation of - <code class="Dv">BUS_READ_IVAR</code> and - <code class="Dv">BUS_WRITE_IVAR</code> for buses</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_generic_read_ivar</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">device_t - child</var>, <var class="Fa" style="white-space: nowrap;">int index</var>, - <var class="Fa" style="white-space: nowrap;">uintptr_t *result</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_generic_write_ivar</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">device_t - child</var>, <var class="Fa" style="white-space: nowrap;">int index</var>, - <var class="Fa" style="white-space: nowrap;">uintptr_t value</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These functions simply return <code class="Er">ENOENT</code>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 15, 2017</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/bus_generic_shutdown.9 4.html b/static/freebsd/man9/bus_generic_shutdown.9 4.html deleted file mode 100644 index e09ca54f..00000000 --- a/static/freebsd/man9/bus_generic_shutdown.9 4.html +++ /dev/null @@ -1,55 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_GENERIC_SHUTDOWN(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_GENERIC_SHUTDOWN(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bus_generic_shutdown</code> — - <span class="Nd">generic implementation of - <code class="Dv">DEVICE_SHUTDOWN</code> for buses</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_generic_shutdown</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This function provides an implementation of the - <a class="Xr">DEVICE_SHUTDOWN(9)</a> method which can be used by most bus - code. It simply calls the <a class="Xr">DEVICE_SHUTDOWN(9)</a> method of - each child device attached to the bus.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an appropriate error is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 15, 2017</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/bus_get_resource.9 4.html b/static/freebsd/man9/bus_get_resource.9 4.html deleted file mode 100644 index 9e11492a..00000000 --- a/static/freebsd/man9/bus_get_resource.9 4.html +++ /dev/null @@ -1,87 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_GET_RESOURCE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_GET_RESOURCE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bus_get_resource</code> — - <span class="Nd">read a resource range/value with a given resource - ID</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/rman.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_get_resource</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">int type</var>, <var class="Fa">int rid</var>, - <var class="Fa">rman_res_t *startp</var>, <var class="Fa">rman_res_t - *countp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#bus_get_resource"><code class="Fn" id="bus_get_resource">bus_get_resource</code></a>() - function reads the range or value of the resource - <var class="Fa">type</var>, <var class="Fa">rid</var> pair and stores it in - the <var class="Fa">startp</var> and <var class="Fa">countp</var> - arguments.</p> -<p class="Pp">The arguments are as follows:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">dev</var></dt> - <dd>The device to read the resource from.</dd> - <dt><var class="Fa">type</var></dt> - <dd>The type of resource you want to read. It is one of: - <p class="Pp"></p> - <dl class="Bl-tag Bl-compact"> - <dt id="SYS_RES_IRQ"><a class="permalink" href="#SYS_RES_IRQ"><code class="Dv">SYS_RES_IRQ</code></a></dt> - <dd>for IRQs</dd> - <dt id="SYS_RES_DRQ"><a class="permalink" href="#SYS_RES_DRQ"><code class="Dv">SYS_RES_DRQ</code></a></dt> - <dd>for ISA DMA lines</dd> - <dt id="SYS_RES_MEMORY"><a class="permalink" href="#SYS_RES_MEMORY"><code class="Dv">SYS_RES_MEMORY</code></a></dt> - <dd>for I/O memory</dd> - <dt id="SYS_RES_IOPORT"><a class="permalink" href="#SYS_RES_IOPORT"><code class="Dv">SYS_RES_IOPORT</code></a></dt> - <dd>for I/O ports</dd> - </dl> - </dd> - <dt><var class="Fa">rid</var></dt> - <dd>A bus-specific handle that identifies the resource being read.</dd> - <dt><var class="Fa">startp</var></dt> - <dd>A pointer to the start address of this resource.</dd> - <dt><var class="Fa">countp</var></dt> - <dd>A pointer to the length of the resource. For example, the size of the - memory in bytes.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an error is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">bus_set_resource(9)</a>, - <a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Sascha - Wildner</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 26, 2015</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/bus_map_resource.9 3.html b/static/freebsd/man9/bus_map_resource.9 3.html deleted file mode 100644 index 54ae36f4..00000000 --- a/static/freebsd/man9/bus_map_resource.9 3.html +++ /dev/null @@ -1,150 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_MAP_RESOURCE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_MAP_RESOURCE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bus_map_resource</code>, - <code class="Nm">bus_unmap_resource</code>, - <code class="Nm">resource_init_map_request</code> — - <span class="Nd">map or unmap an active resource</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"> - <br/> - <code class="In">#include <<a class="In">machine/bus.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/rman.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">machine/resource.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_map_resource</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">struct resource *r</var>, <var class="Fa">struct - resource_map_request *args</var>, <var class="Fa">struct resource_map - *map</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_unmap_resource</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">struct resource *r</var>, <var class="Fa">struct - resource_map *map</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">resource_init_map_request</code>(<var class="Fa" style="white-space: nowrap;">struct - resource_map_request *args</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These functions create or destroy a mapping of a previously - activated resource. Mappings permit CPU access to the resource via the - <a class="Xr">bus_space(9)</a> API.</p> -<p class="Pp">The arguments are as follows:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">dev</var></dt> - <dd>The device that owns the resource.</dd> - <dt><var class="Fa">r</var></dt> - <dd>A pointer to the <var class="Vt">struct resource</var> returned by - <a class="Xr">bus_alloc_resource(9)</a>.</dd> - <dt><var class="Fa">args</var></dt> - <dd>A set of optional properties to apply when creating a mapping. This - argument can be set to <code class="Dv">NULL</code> to request a mapping - of the entire resource with the default properties.</dd> - <dt><var class="Fa">map</var></dt> - <dd>The resource mapping to create or destroy.</dd> -</dl> -<section class="Ss"> -<h2 class="Ss" id="Resource_Mappings"><a class="permalink" href="#Resource_Mappings">Resource - Mappings</a></h2> -<p class="Pp">Resource mappings are described by a <var class="Vt">struct - resource_map</var> object. This structure contains a - <a class="Xr">bus_space(9)</a> tag and handle in the - <var class="Va">r_bustag</var> and <var class="Va">r_bushandle</var> members - that can be used for CPU access to the mapping. The structure also contains - a <var class="Va">r_vaddr</var> member which contains the virtual address of - the mapping if one exists.</p> -<p class="Pp" id="bus_read_4">The wrapper API for <var class="Vt">struct - resource</var> objects described in - <a class="Xr">bus_activate_resource(9)</a> can also be used with - <var class="Vt">struct resource_map</var>. For example, a pointer to a - mapping object can be passed as the first argument to - <a class="permalink" href="#bus_read_4"><code class="Fn">bus_read_4</code></a>(). - This wrapper API is preferred over using the <var class="Va">r_bustag</var> - and <var class="Va">r_bushandle</var> members directly.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Optional_Mapping_Properties"><a class="permalink" href="#Optional_Mapping_Properties">Optional - Mapping Properties</a></h2> -<p class="Pp">The <var class="Vt">struct resource_map_request</var> object - passed in <var class="Fa">args</var> can be used to specify optional - properties of a mapping. The structure must be initialized by invoking - <a class="permalink" href="#resource_init_map_request"><code class="Fn" id="resource_init_map_request">resource_init_map_request</code></a>(). - Properties are then specified by setting one or more of these members:</p> -<dl class="Bl-tag"> - <dt id="offset"><var class="Va">offset</var>, - <var class="Va">length</var></dt> - <dd>These two members specify a region of the resource to map. By default a - mapping is created for the entire resource. The - <var class="Va">offset</var> is relative to the start of the - resource.</dd> - <dt id="memattr"><var class="Va">memattr</var></dt> - <dd>Specifies a memory attribute to use when mapping the resource. By default - memory mappings use the <code class="Dv">VM_MEMATTR_UNCACHEABLE</code> - attribute.</dd> -</dl> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an error is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">This maps a PCI memory BAR with the write-combining memory - attribute and reads the first 32-bit word:</p> -<div class="Bd Pp Li"> -<pre> struct resource *r; - struct resource_map map; - struct resource_map_request req; - uint32_t val; - int rid; - - rid = PCIR_BAR(0); - r = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE | - RF_UNMAPPED); - resource_init_map_request(&req); - req.memattr = VM_MEMATTR_WRITE_COMBINING; - bus_map_resource(dev, SYS_RES_MEMORY, r, &req, &map); - val = bus_read_4(&map, 0);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">bus_activate_resource(9)</a>, - <a class="Xr">bus_alloc_resource(9)</a>, <a class="Xr">bus_space(9)</a>, - <a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">John - Baldwin</span> - <<a class="Mt" href="mailto:jhb@FreeBSD.org">jhb@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 13, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/bus_release_resource.9 4.html b/static/freebsd/man9/bus_release_resource.9 4.html deleted file mode 100644 index fbaa4611..00000000 --- a/static/freebsd/man9/bus_release_resource.9 4.html +++ /dev/null @@ -1,85 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_RELEASE_RESOURCE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_RELEASE_RESOURCE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bus_release_resource</code> — - <span class="Nd">release resources on a bus</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"> - <br/> - <code class="In">#include <<a class="In">machine/bus.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/rman.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">machine/resource.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_release_resource</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">struct resource - *r</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Free a resource allocated by - <a class="Xr">bus_alloc_resource(9)</a>. The resource must not be in use on - release, i.e., call an appropriate function before (e.g. - <a class="Xr">bus_teardown_intr(9)</a> for IRQs).</p> -<ul class="Bl-item"> - <li><var class="Fa">dev</var> is the device that owns the resource.</li> - <li><var class="Fa">r</var> is the pointer to <var class="Va">struct - resource</var>, i.e., the resource itself, returned by - <a class="Xr">bus_alloc_resource(9)</a>.</li> -</ul> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp"><code class="Er">EINVAL</code> is returned, if the device - <var class="Fa">dev</var> has no parent, <code class="Dv">0</code> - otherwise. The kernel will panic, if it cannot release the resource.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<div class="Bd Li"> -<pre> /* deactivate IRQ */ - bus_teardown_intr(dev, foosoftc->irqres, foosoftc->irqid); - - /* release IRQ resource */ - bus_release_resource(dev, foosoftc->irqres); - - /* release I/O port resource */ - bus_release_resource(dev, foosoftc->portres);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">bus_alloc_resource(9)</a>, - <a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Alexander - Langer</span> - <<a class="Mt" href="mailto:alex@big.endian.de">alex@big.endian.de</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 13, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/bus_set_pass.9 4.html b/static/freebsd/man9/bus_set_pass.9 4.html deleted file mode 100644 index 4df5f01d..00000000 --- a/static/freebsd/man9/bus_set_pass.9 4.html +++ /dev/null @@ -1,45 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_SET_PASS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_SET_PASS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bus_set_pass</code> — - <span class="Nd">raise the bus pass level</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_set_pass</code>(<var class="Fa" style="white-space: nowrap;">int - pass</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">bus_set_pass</code> function is called during - boot to raise the bus pass level to <var class="Fa">pass</var>. The function - will rescan the device tree for each pass level between the current pass - level and the new level that has at least one associated driver. The device - tree rescans are implemented by invoking the - <a class="Xr">BUS_NEW_PASS(9)</a> method on the root bus device.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">BUS_NEW_PASS(9)</a>, <a class="Xr">device(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 8, 2009</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/bus_set_resource.9 4.html b/static/freebsd/man9/bus_set_resource.9 4.html deleted file mode 100644 index a24aad50..00000000 --- a/static/freebsd/man9/bus_set_resource.9 4.html +++ /dev/null @@ -1,95 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_SET_RESOURCE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_SET_RESOURCE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bus_set_resource</code> — - <span class="Nd">associate a definite resource with a given resource - ID</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"> - <br/> - <code class="In">#include <<a class="In">machine/bus.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/rman.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">machine/resource.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_set_resource</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">int type</var>, <var class="Fa">int rid</var>, - <var class="Fa">rman_res_t start</var>, <var class="Fa">rman_res_t - count</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#bus_set_resource"><code class="Fn" id="bus_set_resource">bus_set_resource</code></a>() - function sets the start address of the resource <var class="Fa">type</var>, - <var class="Fa">rid</var> pair to be <var class="Fa">count</var> long. - Typically, client drivers do not use this interface. Bus drivers, however, - often use it to set up the resources a client driver uses.</p> -<p class="Pp">The arguments are as follows:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">dev</var></dt> - <dd>The device to set the resource on.</dd> - <dt><var class="Fa">type</var></dt> - <dd>The type of resource you want to allocate. It is one of: - <p class="Pp"></p> - <dl class="Bl-tag Bl-compact"> - <dt id="SYS_RES_IRQ"><a class="permalink" href="#SYS_RES_IRQ"><code class="Dv">SYS_RES_IRQ</code></a></dt> - <dd>for IRQs</dd> - <dt id="SYS_RES_DRQ"><a class="permalink" href="#SYS_RES_DRQ"><code class="Dv">SYS_RES_DRQ</code></a></dt> - <dd>for ISA DMA lines</dd> - <dt id="SYS_RES_IOPORT"><a class="permalink" href="#SYS_RES_IOPORT"><code class="Dv">SYS_RES_IOPORT</code></a></dt> - <dd>for I/O ports</dd> - <dt id="SYS_RES_MEMORY"><a class="permalink" href="#SYS_RES_MEMORY"><code class="Dv">SYS_RES_MEMORY</code></a></dt> - <dd>for I/O memory</dd> - </dl> - </dd> - <dt><var class="Fa">rid</var></dt> - <dd>A bus-specific handle that identifies the resource being allocated.</dd> - <dt><var class="Fa">start</var></dt> - <dd>The start address of this resource.</dd> - <dt><var class="Fa">count</var></dt> - <dd>The length of the resource. For example, the size of the memory in - bytes.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an error is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">bus_alloc_resource(9)</a>, - <a class="Xr">bus_get_resource(9)</a>, <a class="Xr">device(9)</a>, - <a class="Xr">driver(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Warner - Losh</span> - <<a class="Mt" href="mailto:imp@FreeBSD.org">imp@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 29, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/bus_space.9 3.html b/static/freebsd/man9/bus_space.9 3.html deleted file mode 100644 index e2f00da9..00000000 --- a/static/freebsd/man9/bus_space.9 3.html +++ /dev/null @@ -1,1712 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BUS_SPACE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BUS_SPACE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bus_space</code>, - <code class="Nm">bus_space_barrier</code>, - <code class="Nm">bus_space_copy_region_1</code>, - <code class="Nm">bus_space_copy_region_2</code>, - <code class="Nm">bus_space_copy_region_4</code>, - <code class="Nm">bus_space_copy_region_8</code>, - <code class="Nm">bus_space_copy_region_stream_1</code>, - <code class="Nm">bus_space_copy_region_stream_2</code>, - <code class="Nm">bus_space_copy_region_stream_4</code>, - <code class="Nm">bus_space_copy_region_stream_8</code>, - <code class="Nm">bus_space_free</code>, - <code class="Nm">bus_space_map</code>, - <code class="Nm">bus_space_peek_1</code>, - <code class="Nm">bus_space_peek_2</code>, - <code class="Nm">bus_space_peek_4</code>, - <code class="Nm">bus_space_peek_8</code>, - <code class="Nm">bus_space_poke_1</code>, - <code class="Nm">bus_space_poke_2</code>, - <code class="Nm">bus_space_poke_4</code>, - <code class="Nm">bus_space_poke_8</code>, - <code class="Nm">bus_space_read_1</code>, - <code class="Nm">bus_space_read_2</code>, - <code class="Nm">bus_space_read_4</code>, - <code class="Nm">bus_space_read_8</code>, - <code class="Nm">bus_space_read_multi_1</code>, - <code class="Nm">bus_space_read_multi_2</code>, - <code class="Nm">bus_space_read_multi_4</code>, - <code class="Nm">bus_space_read_multi_8</code>, - <code class="Nm">bus_space_read_multi_stream_1</code>, - <code class="Nm">bus_space_read_multi_stream_2</code>, - <code class="Nm">bus_space_read_multi_stream_4</code>, - <code class="Nm">bus_space_read_multi_stream_8</code>, - <code class="Nm">bus_space_read_region_1</code>, - <code class="Nm">bus_space_read_region_2</code>, - <code class="Nm">bus_space_read_region_4</code>, - <code class="Nm">bus_space_read_region_8</code>, - <code class="Nm">bus_space_read_region_stream_1</code>, - <code class="Nm">bus_space_read_region_stream_2</code>, - <code class="Nm">bus_space_read_region_stream_4</code>, - <code class="Nm">bus_space_read_region_stream_8</code>, - <code class="Nm">bus_space_read_stream_1</code>, - <code class="Nm">bus_space_read_stream_2</code>, - <code class="Nm">bus_space_read_stream_4</code>, - <code class="Nm">bus_space_read_stream_8</code>, - <code class="Nm">bus_space_set_multi_1</code>, - <code class="Nm">bus_space_set_multi_2</code>, - <code class="Nm">bus_space_set_multi_4</code>, - <code class="Nm">bus_space_set_multi_8</code>, - <code class="Nm">bus_space_set_multi_stream_1</code>, - <code class="Nm">bus_space_set_multi_stream_2</code>, - <code class="Nm">bus_space_set_multi_stream_4</code>, - <code class="Nm">bus_space_set_multi_stream_8</code>, - <code class="Nm">bus_space_set_region_1</code>, - <code class="Nm">bus_space_set_region_2</code>, - <code class="Nm">bus_space_set_region_4</code>, - <code class="Nm">bus_space_set_region_8</code>, - <code class="Nm">bus_space_set_region_stream_1</code>, - <code class="Nm">bus_space_set_region_stream_2</code>, - <code class="Nm">bus_space_set_region_stream_4</code>, - <code class="Nm">bus_space_set_region_stream_8</code>, - <code class="Nm">bus_space_subregion</code>, - <code class="Nm">bus_space_unmap</code>, - <code class="Nm">bus_space_write_1</code>, - <code class="Nm">bus_space_write_2</code>, - <code class="Nm">bus_space_write_4</code>, - <code class="Nm">bus_space_write_8</code>, - <code class="Nm">bus_space_write_multi_1</code>, - <code class="Nm">bus_space_write_multi_2</code>, - <code class="Nm">bus_space_write_multi_4</code>, - <code class="Nm">bus_space_write_multi_8</code>, - <code class="Nm">bus_space_write_multi_stream_1</code>, - <code class="Nm">bus_space_write_multi_stream_2</code>, - <code class="Nm">bus_space_write_multi_stream_4</code>, - <code class="Nm">bus_space_write_multi_stream_8</code>, - <code class="Nm">bus_space_write_region_1</code>, - <code class="Nm">bus_space_write_region_2</code>, - <code class="Nm">bus_space_write_region_4</code>, - <code class="Nm">bus_space_write_region_8</code>, - <code class="Nm">bus_space_write_region_stream_1</code>, - <code class="Nm">bus_space_write_region_stream_2</code>, - <code class="Nm">bus_space_write_region_stream_4</code>, - <code class="Nm">bus_space_write_region_stream_8</code>, - <code class="Nm">bus_space_write_stream_1</code>, - <code class="Nm">bus_space_write_stream_2</code>, - <code class="Nm">bus_space_write_stream_4</code>, - <code class="Nm">bus_space_write_stream_8</code> — - <span class="Nd">bus space manipulation functions</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">machine/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_space_map</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_addr_t address</var>, - <var class="Fa">bus_size_t size</var>, <var class="Fa">int flags</var>, - <var class="Fa">bus_space_handle_t *handlep</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_unmap</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t size</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_space_subregion</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">bus_size_t - size</var>, <var class="Fa">bus_space_handle_t *nhandlep</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_space_alloc</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_addr_t reg_start</var>, - <var class="Fa">bus_addr_t reg_end</var>, <var class="Fa">bus_size_t - size</var>, <var class="Fa">bus_size_t alignment</var>, - <var class="Fa">bus_size_t boundary</var>, <var class="Fa">int flags</var>, - <var class="Fa">bus_addr_t *addrp</var>, <var class="Fa">bus_space_handle_t - *handlep</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_free</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t size</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_space_peek_1</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t - *datap</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_space_peek_2</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t - *datap</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_space_peek_4</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t - *datap</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_space_peek_8</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t - *datap</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_space_poke_1</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t - *datap</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_space_poke_2</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t - *datap</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_space_poke_4</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t - *datap</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">bus_space_poke_8</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t - *datap</var>);</p> -<p class="Pp"><var class="Ft">uint8_t</var> - <br/> - <code class="Fn">bus_space_read_1</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>);</p> -<p class="Pp"><var class="Ft">uint16_t</var> - <br/> - <code class="Fn">bus_space_read_2</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">bus_space_read_4</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>);</p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">bus_space_read_8</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>);</p> -<p class="Pp"><var class="Ft">uint8_t</var> - <br/> - <code class="Fn">bus_space_read_stream_1</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>);</p> -<p class="Pp"><var class="Ft">uint16_t</var> - <br/> - <code class="Fn">bus_space_read_stream_2</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">bus_space_read_stream_4</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>);</p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">bus_space_read_stream_8</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_1</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t - value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_2</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t - value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_4</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t - value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_8</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t - value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_stream_1</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t - value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_stream_2</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t - value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_stream_4</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t - value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_stream_8</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t - value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_barrier</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">bus_size_t - length</var>, <var class="Fa">int flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_read_region_1</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_read_region_2</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_read_region_4</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_read_region_8</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_read_region_stream_1</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_read_region_stream_2</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_read_region_stream_4</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_read_region_stream_8</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_region_1</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_region_2</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_region_4</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_region_8</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_region_stream_1</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_region_stream_2</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_region_stream_4</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_region_stream_8</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_copy_region_1</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t srchandle</var>, - <var class="Fa">bus_size_t srcoffset</var>, - <var class="Fa">bus_space_handle_t dsthandle</var>, - <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_copy_region_2</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t srchandle</var>, - <var class="Fa">bus_size_t srcoffset</var>, - <var class="Fa">bus_space_handle_t dsthandle</var>, - <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_copy_region_4</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t srchandle</var>, - <var class="Fa">bus_size_t srcoffset</var>, - <var class="Fa">bus_space_handle_t dsthandle</var>, - <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_copy_region_8</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t srchandle</var>, - <var class="Fa">bus_size_t srcoffset</var>, - <var class="Fa">bus_space_handle_t dsthandle</var>, - <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_copy_region_stream_1</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t srchandle</var>, - <var class="Fa">bus_size_t srcoffset</var>, - <var class="Fa">bus_space_handle_t dsthandle</var>, - <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_copy_region_stream_2</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t srchandle</var>, - <var class="Fa">bus_size_t srcoffset</var>, - <var class="Fa">bus_space_handle_t dsthandle</var>, - <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_copy_region_stream_4</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t srchandle</var>, - <var class="Fa">bus_size_t srcoffset</var>, - <var class="Fa">bus_space_handle_t dsthandle</var>, - <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_copy_region_stream_8</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t srchandle</var>, - <var class="Fa">bus_size_t srcoffset</var>, - <var class="Fa">bus_space_handle_t dsthandle</var>, - <var class="Fa">bus_size_t dstoffset</var>, <var class="Fa">bus_size_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_set_region_1</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t - value</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_set_region_2</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t - value</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_set_region_4</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t - value</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_set_region_8</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t - value</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_set_region_stream_1</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t - value</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_set_region_stream_2</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t - value</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_set_region_stream_4</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t - value</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_set_region_stream_8</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t - value</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_read_multi_1</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_read_multi_2</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_read_multi_4</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_read_multi_8</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_read_multi_stream_1</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_read_multi_stream_2</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_read_multi_stream_4</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_read_multi_stream_8</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_multi_1</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_multi_2</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_multi_4</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_multi_8</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_multi_stream_1</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_multi_stream_2</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_multi_stream_4</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_write_multi_stream_8</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t - *datap</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_set_multi_1</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t - value</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_set_multi_2</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t - value</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_set_multi_4</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t - value</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_set_multi_8</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t - value</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_set_multi_stream_1</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint8_t - value</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_set_multi_stream_2</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint16_t - value</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_set_multi_stream_4</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint32_t - value</var>, <var class="Fa">bus_size_t count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bus_space_set_multi_stream_8</code>(<var class="Fa">bus_space_tag_t - space</var>, <var class="Fa">bus_space_handle_t handle</var>, - <var class="Fa">bus_size_t offset</var>, <var class="Fa">uint64_t - value</var>, <var class="Fa">bus_size_t count</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">bus_space</code> functions exist to allow - device drivers machine-independent access to bus memory and register areas. - All of the functions and types described in this document can be used by - including the - <code class="In"><<a class="In">machine/bus.h</a>></code> header - file.</p> -<p class="Pp">Many common devices are used on multiple architectures, but are - accessed differently on each because of architectural constraints. For - instance, a device which is mapped in one system's I/O space may be mapped - in memory space on a second system. On a third system, architectural - limitations might change the way registers need to be accessed (e.g. - creating a non-linear register space). In some cases, a single driver may - need to access the same type of device in multiple ways in a single system - or architecture. The goal of the <code class="Nm">bus_space</code> functions - is to allow a single driver source file to manipulate a set of devices on - different system architectures, and to allow a single driver object file to - manipulate a set of devices on multiple bus types on a single - architecture.</p> -<p class="Pp">Not all buses have to implement all functions described in this - document, though that is encouraged if the operations are logically - supported by the bus. Unimplemented functions should cause compile-time - errors if possible.</p> -<p class="Pp">All of the interface definitions described in this document are - shown as function prototypes and discussed as if they were required to be - functions. Implementations are encouraged to implement prototyped - (type-checked) versions of these interfaces, but may implement them as - macros if appropriate. Machine-dependent types, variables, and functions - should be marked clearly in - <code class="In"><<a class="In">machine/bus.h</a>></code> to avoid - confusion with the machine-independent types and functions, and, if - possible, should be given names which make the machine-dependence clear.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CONCEPTS_AND_GUIDELINES"><a class="permalink" href="#CONCEPTS_AND_GUIDELINES">CONCEPTS - AND GUIDELINES</a></h1> -<p class="Pp">Bus spaces are described by bus space tags, which can be created - only by machine-dependent code. A given machine may have several different - types of bus space (e.g. memory space and I/O space), and thus may provide - multiple different bus space tags. Individual buses or devices on a machine - may use more than one bus space tag. For instance, ISA devices are given an - ISA memory space tag and an ISA I/O space tag. Architectures may have - several different tags which represent the same type of space, for instance - because of multiple different host bus interface chipsets.</p> -<p class="Pp">A range in bus space is described by a bus address and a bus size. - The bus address describes the start of the range in bus space. The bus size - describes the size of the range in bytes. Buses which are not byte - addressable may require use of bus space ranges with appropriately aligned - addresses and properly rounded sizes.</p> -<p class="Pp">Access to regions of bus space is facilitated by use of bus space - handles, which are usually created by mapping a specific range of a bus - space. Handles may also be created by allocating and mapping a range of bus - space, the actual location of which is picked by the implementation within - bounds specified by the caller of the allocation function.</p> -<p class="Pp">All of the bus space access functions require one bus space tag - argument, at least one handle argument, and at least one offset argument (a - bus size). The bus space tag specifies the space, each handle specifies a - region in the space, and each offset specifies the offset into the region of - the actual location(s) to be accessed. Offsets are given in bytes, though - buses may impose alignment constraints. The offset used to access data - relative to a given handle must be such that all of the data being accessed - is in the mapped region that the handle describes. Trying to access data - outside that region is an error.</p> -<p class="Pp">Because some architectures' memory systems use buffering to - improve memory and device access performance, there is a mechanism which can - be used to create “barriers” in the bus space read and write - stream. There are three types of barriers: read, write, and read/write. All - reads started to the region before a read barrier must complete before any - reads after the read barrier are started. (The analogous requirement is true - for write barriers.) Read/write barriers force all reads and writes started - before the barrier to complete before any reads or writes after the barrier - are started. Correctly-written drivers will include all appropriate - barriers, and assume only the read/write ordering imposed by the barrier - operations.</p> -<p class="Pp">People trying to write portable drivers with the - <code class="Nm">bus_space</code> functions should try to make minimal - assumptions about what the system allows. In particular, they should expect - that the system requires bus space addresses being accessed to be naturally - aligned (i.e., base address of handle added to offset is a multiple of the - access size), and that the system does alignment checking on pointers (i.e., - pointer to objects being read and written must point to properly-aligned - data).</p> -<p class="Pp">The descriptions of the <code class="Nm">bus_space</code> - functions given below all assume that they are called with proper arguments. - If called with invalid arguments or arguments that are out of range (e.g. - trying to access data outside of the region mapped when a given handle was - created), undefined behaviour results. In that case, they may cause the - system to halt, either intentionally (via panic) or unintentionally (by - causing a fatal trap of by some other means) or may cause improper operation - which is not immediately fatal. Functions which return - <var class="Ft">void</var> or which return data read from bus space (i.e., - functions which do not obviously return an error code) do not fail. They - could only fail if given invalid arguments, and in that case their behaviour - is undefined. Functions which take a count of bytes have undefined results - if the specified <var class="Fa">count</var> is zero.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="TYPES"><a class="permalink" href="#TYPES">TYPES</a></h1> -<p class="Pp">Several types are defined in - <code class="In"><<a class="In">machine/bus.h</a>></code> to - facilitate use of the <code class="Nm">bus_space</code> functions by - drivers.</p> -<section class="Ss"> -<h2 class="Ss" id="bus_addr_t"><a class="permalink" href="#bus_addr_t"><var class="Vt">bus_addr_t</var></a></h2> -<p class="Pp">The <var class="Vt">bus_addr_t</var> type is used to describe bus - addresses. It must be an unsigned integral type capable of holding the - largest bus address usable by the architecture. This type is primarily used - when mapping and unmapping bus space.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_size_t"><a class="permalink" href="#bus_size_t"><var class="Vt">bus_size_t</var></a></h2> -<p class="Pp">The <var class="Vt">bus_size_t</var> type is used to describe - sizes of ranges in bus space. It must be an unsigned integral type capable - of holding the size of the largest bus address range usable on the - architecture. This type is used by virtually all of the - <code class="Nm">bus_space</code> functions, describing sizes when mapping - regions and offsets into regions when performing space access - operations.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_tag_t"><a class="permalink" href="#bus_space_tag_t"><var class="Vt">bus_space_tag_t</var></a></h2> -<p class="Pp">The <var class="Vt">bus_space_tag_t</var> type is used to describe - a particular bus space on a machine. Its contents are machine-dependent and - should be considered opaque by machine-independent code. This type is used - by all <code class="Nm">bus_space</code> functions to name the space on - which they are operating.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_handle_t"><a class="permalink" href="#bus_space_handle_t"><var class="Vt">bus_space_handle_t</var></a></h2> -<p class="Pp">The <var class="Vt">bus_space_handle_t</var> type is used to - describe a mapping of a range of bus space. Its contents are - machine-dependent and should be considered opaque by machine-independent - code. This type is used when performing bus space access operations.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="MAPPING_AND_UNMAPPING_BUS_SPACE"><a class="permalink" href="#MAPPING_AND_UNMAPPING_BUS_SPACE">MAPPING - AND UNMAPPING BUS SPACE</a></h1> -<p class="Pp">This section is specific to the <span class="Ux">NetBSD</span> - version of these functions and may or may not apply to the - <span class="Ux">FreeBSD</span> version.</p> -<p class="Pp" id="bus_space_map">Bus space must be mapped before it can be used, - and should be unmapped when it is no longer needed. The - <a class="permalink" href="#bus_space_map"><code class="Fn">bus_space_map</code></a>() - and <code class="Fn">bus_space_unmap</code>() functions provide these - capabilities.</p> -<p class="Pp" id="bus_space_subregion">Some drivers need to be able to pass a - subregion of already-mapped bus space to another driver or module within a - driver. The - <a class="permalink" href="#bus_space_subregion"><code class="Fn">bus_space_subregion</code></a>() - function allows such subregions to be created.</p> -<section class="Ss"> -<h2 class="Ss" id="bus_space_map_space_address_size_flags_handlep"><a class="permalink" href="#bus_space_map_space_address_size_flags_handlep"><code class="Fn">bus_space_map</code>(<var class="Fa">space</var>, - <var class="Fa">address</var>, <var class="Fa">size</var>, - <var class="Fa">flags</var>, <var class="Fa">handlep</var>)</a></h2> -<p class="Pp">The <code class="Fn">bus_space_map</code>() function maps the - region of bus space named by the <var class="Fa">space</var>, - <var class="Fa">address</var>, and <var class="Fa">size</var> arguments. If - successful, it returns zero and fills in the bus space handle pointed to by - <var class="Fa">handlep</var> with the handle that can be used to access the - mapped region. If unsuccessful, it will return non-zero and leave the bus - space handle pointed to by <var class="Fa">handlep</var> in an undefined - state.</p> -<p class="Pp">The <var class="Fa">flags</var> argument controls how the space is - to be mapped. Supported flags include:</p> -<dl class="Bl-tag"> - <dt id="BUS_SPACE_MAP_CACHEABLE"><a class="permalink" href="#BUS_SPACE_MAP_CACHEABLE"><code class="Dv">BUS_SPACE_MAP_CACHEABLE</code></a></dt> - <dd>Try to map the space so that accesses can be cached and/or prefetched by - the system. If this flag is not specified, the implementation should map - the space so that it will not be cached or prefetched. - <p class="Pp">This flag must have a value of 1 on all implementations for - backward compatibility.</p> - </dd> - <dt id="BUS_SPACE_MAP_LINEAR"><a class="permalink" href="#BUS_SPACE_MAP_LINEAR"><code class="Dv">BUS_SPACE_MAP_LINEAR</code></a></dt> - <dd>Try to map the space so that its contents can be accessed linearly via - normal memory access methods (e.g. pointer dereferencing and structure - accesses). This is useful when software wants to do direct access to a - memory device, e.g. a frame buffer. If this flag is specified and linear - mapping is not possible, the - <a class="permalink" href="#bus_space_map~2"><code class="Fn" id="bus_space_map~2">bus_space_map</code></a>() - call should fail. If this flag is not specified, the system may map the - space in whatever way is most convenient.</dd> - <dt id="BUS_SPACE_MAP_NONPOSTED"><a class="permalink" href="#BUS_SPACE_MAP_NONPOSTED"><code class="Dv">BUS_SPACE_MAP_NONPOSTED</code></a></dt> - <dd>Try to map the space using non-posted device memory. This is to support - buses and devices where mapping with posted device memory is unsupported - or broken. This flag is currently only available on arm64.</dd> -</dl> -<p class="Pp">Not all combinations of flags make sense or are supported with all - spaces. For instance, <code class="Dv">BUS_SPACE_MAP_CACHEABLE</code> may be - meaningless when used on many systems' I/O port spaces, and on some systems - <code class="Dv">BUS_SPACE_MAP_LINEAR</code> without - <code class="Dv">BUS_SPACE_MAP_CACHEABLE</code> may never work. When the - system hardware or firmware provides hints as to how spaces should be mapped - (e.g. the PCI memory mapping registers' “prefetchable” bit), - those hints should be followed for maximum compatibility. On some systems, - requesting a mapping that cannot be satisfied (e.g. requesting a - non-cacheable mapping when the system can only provide a cacheable one) will - cause the request to fail.</p> -<p class="Pp">Some implementations may keep track of use of bus space for some - or all bus spaces and refuse to allow duplicate allocations. This is - encouraged for bus spaces which have no notion of slot-specific space - addressing, such as ISA, and for spaces which coexist with those spaces - (e.g. PCI memory and I/O spaces co-existing with ISA memory and I/O - spaces).</p> -<p class="Pp">Mapped regions may contain areas for which there is no device on - the bus. If space in those areas is accessed, the results are - bus-dependent.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_unmap_space_handle_size"><a class="permalink" href="#bus_space_unmap_space_handle_size"><a class="permalink" href="#bus_space_unmap"><code class="Fn" id="bus_space_unmap">bus_space_unmap</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">size</var>)</a></h2> -<p class="Pp">The <code class="Fn">bus_space_unmap</code>() function unmaps a - region of bus space mapped with <code class="Fn">bus_space_map</code>(). - When unmapping a region, the <var class="Fa">size</var> specified should be - the same as the size given to <code class="Fn">bus_space_map</code>() when - mapping that region.</p> -<p class="Pp" id="bus_space_unmap~2">After - <a class="permalink" href="#bus_space_unmap~2"><code class="Fn">bus_space_unmap</code></a>() - is called on a handle, that handle is no longer valid. (If copies were made - of the handle they are no longer valid, either.)</p> -<p class="Pp" id="bus_space_unmap~3">This function will never fail. If it would - fail (e.g. because of an argument error), that indicates a software bug - which should cause a panic. In that case, - <a class="permalink" href="#bus_space_unmap~3"><code class="Fn">bus_space_unmap</code></a>() - will never return.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_subregion_space_handle_offset_size_nhandlep"><a class="permalink" href="#bus_space_subregion_space_handle_offset_size_nhandlep"><code class="Fn">bus_space_subregion</code>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">size</var>, <var class="Fa">nhandlep</var>)</a></h2> -<p class="Pp">The <code class="Fn">bus_space_subregion</code>() function is a - convenience function which makes a new handle to some subregion of an - already-mapped region of bus space. The subregion described by the new - handle starts at byte offset <var class="Fa">offset</var> into the region - described by <var class="Fa">handle</var>, with the size give by - <var class="Fa">size</var>, and must be wholly contained within the original - region.</p> -<p class="Pp" id="bus_space_subregion~2">If successful, - <a class="permalink" href="#bus_space_subregion~2"><code class="Fn">bus_space_subregion</code></a>() - returns zero and fills in the bus space handle pointed to by - <var class="Fa">nhandlep</var>. If unsuccessful, it returns non-zero and - leaves the bus space handle pointed to by <var class="Fa">nhandlep</var> in - an undefined state. In either case, the handle described by - <var class="Fa">handle</var> remains valid and is unmodified.</p> -<p class="Pp" id="bus_space_subregion~3">When done with a handle created by - <a class="permalink" href="#bus_space_subregion~3"><code class="Fn">bus_space_subregion</code></a>(), - the handle should be thrown away. Under no circumstances should - <code class="Fn">bus_space_unmap</code>() be used on the handle. Doing so - may confuse any resource management being done on the space, and will result - in undefined behaviour. When <code class="Fn">bus_space_unmap</code>() or - <code class="Fn">bus_space_free</code>() is called on a handle, all - subregions of that handle become invalid.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="ALLOCATING_AND_FREEING_BUS_SPACE"><a class="permalink" href="#ALLOCATING_AND_FREEING_BUS_SPACE">ALLOCATING - AND FREEING BUS SPACE</a></h1> -<p class="Pp">This section is specific to the <span class="Ux">NetBSD</span> - version of these functions and may or may not apply to the - <span class="Ux">FreeBSD</span> version.</p> -<p class="Pp" id="bus_space_alloc">Some devices require or allow bus space to be - allocated by the operating system for device use. When the devices no longer - need the space, the operating system should free it for use by other - devices. The - <a class="permalink" href="#bus_space_alloc"><code class="Fn">bus_space_alloc</code></a>() - and <code class="Fn">bus_space_free</code>() functions provide these - capabilities.</p> -<section class="Ss"> -<h2 class="Ss" id="bus_space_alloc_space_reg_start_reg_end_size_alignment_boundary_flags_addrp_handlep"><a class="permalink" href="#bus_space_alloc_space_reg_start_reg_end_size_alignment_boundary_flags_addrp_handlep"><code class="Fn">bus_space_alloc</code>(<var class="Fa">space</var>, - <var class="Fa">reg_start</var>, <var class="Fa">reg_end</var>, - <var class="Fa">size</var>, <var class="Fa">alignment</var>, - <var class="Fa">boundary</var>, <var class="Fa">flags</var>, - <var class="Fa">addrp</var>, <var class="Fa">handlep</var>)</a></h2> -<p class="Pp">The <code class="Fn">bus_space_alloc</code>() function allocates - and maps a region of bus space with the size given by - <var class="Fa">size</var>, corresponding to the given constraints. If - successful, it returns zero, fills in the bus address pointed to by - <var class="Fa">addrp</var> with the bus space address of the allocated - region, and fills in the bus space handle pointed to by - <var class="Fa">handlep</var> with the handle that can be used to access - that region. If unsuccessful, it returns non-zero and leaves the bus address - pointed to by <var class="Fa">addrp</var> and the bus space handle pointed - to by <var class="Fa">handlep</var> in an undefined state.</p> -<p class="Pp" id="bus_space_alloc~2">Constraints on the allocation are given by - the <var class="Fa">reg_start</var>, <var class="Fa">reg_end</var>, - <var class="Fa">alignment</var>, and <var class="Fa">boundary</var> - parameters. The allocated region will start at or after - <var class="Fa">reg_start</var> and end before or at - <var class="Fa">reg_end</var>. The <var class="Fa">alignment</var> - constraint must be a power of two, and the allocated region will start at an - address that is an even multiple of that power of two. The - <var class="Fa">boundary</var> constraint, if non-zero, ensures that the - region is allocated so that <var class="Fa">first address in region</var> / - <var class="Fa">boundary</var> has the same value as <var class="Fa">last - address in region</var> / <var class="Fa">boundary</var>. If the constraints - cannot be met, - <a class="permalink" href="#bus_space_alloc~2"><code class="Fn">bus_space_alloc</code></a>() - will fail. It is an error to specify a set of constraints that can never be - met (for example, <var class="Fa">size</var> greater than - <var class="Fa">boundary</var>).</p> -<p class="Pp" id="bus_space_map~3">The <var class="Fa">flags</var> parameter is - the same as the like-named parameter to - <a class="permalink" href="#bus_space_map~3"><code class="Fn">bus_space_map</code></a>(), - the same flag values should be used, and they have the same meanings.</p> -<p class="Pp" id="bus_space_alloc~3">Handles created by - <a class="permalink" href="#bus_space_alloc~3"><code class="Fn">bus_space_alloc</code></a>() - should only be freed with <code class="Fn">bus_space_free</code>(). Trying - to use <code class="Fn">bus_space_unmap</code>() on them causes undefined - behaviour. The <code class="Fn">bus_space_subregion</code>() function can be - used on handles created by <code class="Fn">bus_space_alloc</code>().</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_free_space_handle_size"><a class="permalink" href="#bus_space_free_space_handle_size"><code class="Fn">bus_space_free</code>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">size</var>)</a></h2> -<p class="Pp">The <code class="Fn">bus_space_free</code>() function unmaps and - frees a region of bus space mapped and allocated with - <code class="Fn">bus_space_alloc</code>(). When unmapping a region, the - <var class="Fa">size</var> specified should be the same as the size given to - <code class="Fn">bus_space_alloc</code>() when allocating the region.</p> -<p class="Pp" id="bus_space_free">After - <a class="permalink" href="#bus_space_free"><code class="Fn">bus_space_free</code></a>() - is called on a handle, that handle is no longer valid. (If copies were made - of the handle, they are no longer valid, either.)</p> -<p class="Pp" id="bus_space_free~2">This function will never fail. If it would - fail (e.g. because of an argument error), that indicates a software bug - which should cause a panic. In that case, - <a class="permalink" href="#bus_space_free~2"><code class="Fn">bus_space_free</code></a>() - will never return.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="READING_AND_WRITING_SINGLE_DATA_ITEMS"><a class="permalink" href="#READING_AND_WRITING_SINGLE_DATA_ITEMS">READING - AND WRITING SINGLE DATA ITEMS</a></h1> -<p class="Pp">The simplest way to access bus space is to read or write a single - data item. The <code class="Fn">bus_space_read_N</code>() and - <code class="Fn">bus_space_write_N</code>() families of functions provide - the ability to read and write 1, 2, 4, and 8 byte data items on buses which - support those access sizes.</p> -<section class="Ss"> -<h2 class="Ss" id="bus_space_read_1_space_handle_offset"><a class="permalink" href="#bus_space_read_1_space_handle_offset"><a class="permalink" href="#bus_space_read_1"><code class="Fn" id="bus_space_read_1">bus_space_read_1</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_read_2_space_handle_offset"><a class="permalink" href="#bus_space_read_2_space_handle_offset"><a class="permalink" href="#bus_space_read_2"><code class="Fn" id="bus_space_read_2">bus_space_read_2</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_read_4_space_handle_offset"><a class="permalink" href="#bus_space_read_4_space_handle_offset"><a class="permalink" href="#bus_space_read_4"><code class="Fn" id="bus_space_read_4">bus_space_read_4</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_read_8_space_handle_offset"><a class="permalink" href="#bus_space_read_8_space_handle_offset"><a class="permalink" href="#bus_space_read_8"><code class="Fn" id="bus_space_read_8">bus_space_read_8</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>)</a></h2> -<p class="Pp">The <code class="Fn">bus_space_read_N</code>() family of functions - reads a 1, 2, 4, or 8 byte data item from the offset specified by - <var class="Fa">offset</var> into the region specified by - <var class="Fa">handle</var> of the bus space specified by - <var class="Fa">space</var>. The location being read must lie within the bus - space region specified by <var class="Fa">handle</var>.</p> -<p class="Pp">For portability, the starting address of the region specified by - <var class="Fa">handle</var> plus the offset should be a multiple of the - size of data item being read. On some systems, not obeying this requirement - may cause incorrect data to be read, on others it may cause a system - crash.</p> -<p class="Pp" id="bus_space_read_N">Read operations done by the - <a class="permalink" href="#bus_space_read_N"><code class="Fn">bus_space_read_N</code></a>() - functions may be executed out of order with respect to other pending read - and write operations unless order is enforced by use of the - <code class="Fn">bus_space_barrier</code>() function.</p> -<p class="Pp">These functions will never fail. If they would fail (e.g. because - of an argument error), that indicates a software bug which should cause a - panic. In that case, they will never return.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_write_1_space_handle_offset_value"><a class="permalink" href="#bus_space_write_1_space_handle_offset_value"><a class="permalink" href="#bus_space_write_1"><code class="Fn" id="bus_space_write_1">bus_space_write_1</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">value</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_write_2_space_handle_offset_value"><a class="permalink" href="#bus_space_write_2_space_handle_offset_value"><a class="permalink" href="#bus_space_write_2"><code class="Fn" id="bus_space_write_2">bus_space_write_2</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">value</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_write_4_space_handle_offset_value"><a class="permalink" href="#bus_space_write_4_space_handle_offset_value"><a class="permalink" href="#bus_space_write_4"><code class="Fn" id="bus_space_write_4">bus_space_write_4</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">value</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_write_8_space_handle_offset_value"><a class="permalink" href="#bus_space_write_8_space_handle_offset_value"><a class="permalink" href="#bus_space_write_8"><code class="Fn" id="bus_space_write_8">bus_space_write_8</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">value</var>)</a></h2> -<p class="Pp">The <code class="Fn">bus_space_write_N</code>() family of - functions writes a 1, 2, 4, or 8 byte data item to the offset specified by - <var class="Fa">offset</var> into the region specified by - <var class="Fa">handle</var> of the bus space specified by - <var class="Fa">space</var>. The location being written must lie within the - bus space region specified by <var class="Fa">handle</var>.</p> -<p class="Pp">For portability, the starting address of the region specified by - <var class="Fa">handle</var> plus the offset should be a multiple of the - size of data item being written. On some systems, not obeying this - requirement may cause incorrect data to be written, on others it may cause a - system crash.</p> -<p class="Pp" id="bus_space_write_N">Write operations done by the - <a class="permalink" href="#bus_space_write_N"><code class="Fn">bus_space_write_N</code></a>() - functions may be executed out of order with respect to other pending read - and write operations unless order is enforced by use of the - <code class="Fn">bus_space_barrier</code>() function.</p> -<p class="Pp">These functions will never fail. If they would fail (e.g. because - of an argument error), that indicates a software bug which should cause a - panic. In that case, they will never return.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="PROBING_BUS_SPACE_FOR_HARDWARE_WHICH_MAY_NOT_RESPOND"><a class="permalink" href="#PROBING_BUS_SPACE_FOR_HARDWARE_WHICH_MAY_NOT_RESPOND">PROBING - BUS SPACE FOR HARDWARE WHICH MAY NOT RESPOND</a></h1> -<p class="Pp">One problem with the - <a class="permalink" href="#bus_space_read_N~2"><code class="Fn" id="bus_space_read_N~2">bus_space_read_N</code></a>() - and <code class="Fn">bus_space_write_N</code>() family of functions is that - they provide no protection against exceptions which can occur when no - physical hardware or device responds to the read or write cycles. In such a - situation, the system typically would panic due to a kernel-mode bus error. - The <code class="Fn">bus_space_peek_N</code>() and - <code class="Fn">bus_space_poke_N</code>() family of functions provide a - mechanism to handle these exceptions gracefully without the risk of crashing - the system.</p> -<p class="Pp" id="bus_space_read_N~3">As with - <a class="permalink" href="#bus_space_read_N~3"><code class="Fn">bus_space_read_N</code></a>() - and <code class="Fn">bus_space_write_N</code>(), the peek and poke functions - provide the ability to read and write 1, 2, 4, and 8 byte data items on - busses which support those access sizes. All of the constraints specified in - the descriptions of the <code class="Fn">bus_space_read_N</code>() and - <code class="Fn">bus_space_write_N</code>() functions also apply to - <code class="Fn">bus_space_peek_N</code>() and - <code class="Fn">bus_space_poke_N</code>().</p> -<p class="Pp" id="bus_space_barrier">In addition, explicit calls to the - <a class="permalink" href="#bus_space_barrier"><code class="Fn">bus_space_barrier</code></a>() - function are not required as the implementation will ensure all pending - operations complete before the peek or poke operation starts. The - implementation will also ensure that the peek or poke operations complete - before returning.</p> -<p class="Pp" id="bus_space_peek_N">The return value indicates the outcome of - the peek or poke operation. A return value of zero implies that a hardware - device is responding to the operation at the specified offset in the bus - space. A non-zero return value indicates that the kernel intercepted a - hardware exception (e.g., bus error) when the peek or poke operation was - attempted. Note that some busses are incapable of generating exceptions when - non-existent hardware is accessed. In such cases, these functions will - always return zero and the value of the data read by - <a class="permalink" href="#bus_space_peek_N"><code class="Fn">bus_space_peek_N</code></a>() - will be unspecified.</p> -<p class="Pp" id="bus_space_peek_N~2">Finally, it should be noted that at this - time the - <a class="permalink" href="#bus_space_peek_N~2"><code class="Fn">bus_space_peek_N</code></a>() - and <code class="Fn">bus_space_poke_N</code>() functions are not re-entrant - and should not, therefore, be used from within an interrupt service routine. - This constraint may be removed at some point in the future.</p> -<p class="Pp"></p> -<dl class="Bl-ohang Bl-compact"> - <dt id="bus_space_peek_1"><a class="permalink" href="#bus_space_peek_1"><code class="Fn">bus_space_peek_1</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">datap</var>)</dt> - <dd></dd> - <dt id="bus_space_peek_2"><a class="permalink" href="#bus_space_peek_2"><code class="Fn">bus_space_peek_2</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">datap</var>)</dt> - <dd></dd> - <dt id="bus_space_peek_4"><a class="permalink" href="#bus_space_peek_4"><code class="Fn">bus_space_peek_4</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">datap</var>)</dt> - <dd></dd> - <dt id="bus_space_peek_8"><a class="permalink" href="#bus_space_peek_8"><code class="Fn">bus_space_peek_8</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">datap</var>)</dt> - <dd> - <p class="Pp" id="bus_space_peek_N~3">The - <a class="permalink" href="#bus_space_peek_N~3"><code class="Fn">bus_space_peek_N</code></a>() - family of functions cautiously read a 1, 2, 4, or 8 byte data item from - the offset specified by <var class="Fa">offset</var> in the region - specified by <var class="Fa">handle</var> of the bus space specified by - <var class="Fa">space</var>. The data item read is stored in the - location pointed to by <var class="Fa">datap</var>. It is permissible - for <var class="Fa">datap</var> to be NULL, in which case the data item - will be discarded after being read.</p> - <p class="Pp"></p> - </dd> - <dt id="bus_space_poke_1"><a class="permalink" href="#bus_space_poke_1"><code class="Fn">bus_space_poke_1</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">value</var>)</dt> - <dd></dd> - <dt id="bus_space_poke_2"><a class="permalink" href="#bus_space_poke_2"><code class="Fn">bus_space_poke_2</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">value</var>)</dt> - <dd></dd> - <dt id="bus_space_poke_4"><a class="permalink" href="#bus_space_poke_4"><code class="Fn">bus_space_poke_4</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">value</var>)</dt> - <dd></dd> - <dt id="bus_space_poke_8"><a class="permalink" href="#bus_space_poke_8"><code class="Fn">bus_space_poke_8</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">value</var>)</dt> - <dd> - <p class="Pp" id="bus_space_poke_N">The - <a class="permalink" href="#bus_space_poke_N"><code class="Fn">bus_space_poke_N</code></a>() - family of functions cautiously write a 1, 2, 4, or 8 byte data item - specified by <var class="Fa">value</var> to the offset specified by - <var class="Fa">offset</var> in the region specified by - <var class="Fa">handle</var> of the bus space specified by - <var class="Fa">space</var>.</p> - </dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="BARRIERS"><a class="permalink" href="#BARRIERS">BARRIERS</a></h1> -<p class="Pp">In order to allow high-performance buffering implementations to - avoid bus activity on every operation, read and write ordering should be - specified explicitly by drivers when necessary. The - <code class="Fn">bus_space_barrier</code>() function provides that - ability.</p> -<section class="Ss"> -<h2 class="Ss" id="bus_space_barrier_space_handle_offset_length_flags"><a class="permalink" href="#bus_space_barrier_space_handle_offset_length_flags"><code class="Fn">bus_space_barrier</code>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">length</var>, <var class="Fa">flags</var>)</a></h2> -<p class="Pp">The <code class="Fn">bus_space_barrier</code>() function enforces - ordering of bus space read and write operations for the specified subregion - (described by the <var class="Fa">offset</var> and - <var class="Fa">length</var> parameters) of the region named by - <var class="Fa">handle</var> in the space named by - <var class="Fa">space</var>.</p> -<p class="Pp">The <var class="Fa">flags</var> argument controls what types of - operations are to be ordered. Supported flags are:</p> -<dl class="Bl-tag"> - <dt id="BUS_SPACE_BARRIER_READ"><a class="permalink" href="#BUS_SPACE_BARRIER_READ"><code class="Dv">BUS_SPACE_BARRIER_READ</code></a></dt> - <dd>Synchronize read operations.</dd> - <dt id="BUS_SPACE_BARRIER_WRITE"><a class="permalink" href="#BUS_SPACE_BARRIER_WRITE"><code class="Dv">BUS_SPACE_BARRIER_WRITE</code></a></dt> - <dd>Synchronize write operations.</dd> -</dl> -<p class="Pp">Those flags can be combined (or-ed together) to enforce ordering - on both read and write operations.</p> -<p class="Pp">All of the specified type(s) of operation which are done to the - region before the barrier operation are guaranteed to complete before any of - the specified type(s) of operation done after the barrier.</p> -<p class="Pp">Example: Consider a hypothetical device with two single-byte - ports, one write-only input port (at offset 0) and a read-only output port - (at offset 1). Operation of the device is as follows: data bytes are written - to the input port, and are placed by the device on a stack, the top of which - is read by reading from the output port. The sequence to correctly write two - data bytes to the device then read those two data bytes back would be:</p> -<div class="Bd Pp Li"> -<pre>/* - * t and h are the tag and handle for the mapped device's - * space. - */ -bus_space_write_1(t, h, 0, data0); -bus_space_barrier(t, h, 0, 1, BUS_SPACE_BARRIER_WRITE); /* 1 */ -bus_space_write_1(t, h, 0, data1); -bus_space_barrier(t, h, 0, 2, - BUS_SPACE_BARRIER_READ|BUS_SPACE_BARRIER_WRITE); /* 2 */ -ndata1 = bus_space_read_1(t, h, 1); -bus_space_barrier(t, h, 1, 1, BUS_SPACE_BARRIER_READ); /* 3 */ -ndata0 = bus_space_read_1(t, h, 1); -/* data0 == ndata0, data1 == ndata1 */</pre> -</div> -<p class="Pp">The first barrier makes sure that the first write finishes before - the second write is issued, so that two writes to the input port are done in - order and are not collapsed into a single write. This ensures that the data - bytes are written to the device correctly and in order.</p> -<p class="Pp">The second barrier makes sure that the writes to the output port - finish before any of the reads to the input port are issued, thereby making - sure that all of the writes are finished before data is read. This ensures - that the first byte read from the device really is the last one that was - written.</p> -<p class="Pp">The third barrier makes sure that the first read finishes before - the second read is issued, ensuring that data is read correctly and in - order.</p> -<p class="Pp">The barriers in the example above are specified to cover the - absolute minimum number of bus space locations. It is correct (and often - easier) to make barrier operations cover the device's whole range of bus - space, that is, to specify an offset of zero and the size of the whole - region.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="REGION_OPERATIONS"><a class="permalink" href="#REGION_OPERATIONS">REGION - OPERATIONS</a></h1> -<p class="Pp">Some devices use buffers which are mapped as regions in bus space. - Often, drivers want to copy the contents of those buffers to or from memory, - e.g. into mbufs which can be passed to higher levels of the system or from - mbufs to be output to a network. In order to allow drivers to do this as - efficiently as possible, the - <a class="permalink" href="#bus_space_read_region_N"><code class="Fn" id="bus_space_read_region_N">bus_space_read_region_N</code></a>() - and <code class="Fn">bus_space_write_region_N</code>() families of functions - are provided.</p> -<p class="Pp" id="bus_space_copy_region_N">Drivers occasionally need to copy one - region of a bus space to another, or to set all locations in a region of bus - space to contain a single value. The - <a class="permalink" href="#bus_space_copy_region_N"><code class="Fn">bus_space_copy_region_N</code></a>() - family of functions and the <code class="Fn">bus_space_set_region_N</code>() - family of functions allow drivers to perform these operations.</p> -<section class="Ss"> -<h2 class="Ss" id="bus_space_read_region_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_1"><code class="Fn" id="bus_space_read_region_1">bus_space_read_region_1</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_read_region_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_2"><code class="Fn" id="bus_space_read_region_2">bus_space_read_region_2</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_read_region_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_4"><code class="Fn" id="bus_space_read_region_4">bus_space_read_region_4</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_read_region_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_region_8"><code class="Fn" id="bus_space_read_region_8">bus_space_read_region_8</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2> -<p class="Pp">The <code class="Fn">bus_space_read_region_N</code>() family of - functions reads <var class="Fa">count</var> 1, 2, 4, or 8 byte data items - from bus space starting at byte offset <var class="Fa">offset</var> in the - region specified by <var class="Fa">handle</var> of the bus space specified - by <var class="Fa">space</var> and writes them into the array specified by - <var class="Fa">datap</var>. Each successive data item is read from an - offset 1, 2, 4, or 8 bytes after the previous data item (depending on which - function is used). All locations being read must lie within the bus space - region specified by <var class="Fa">handle</var>.</p> -<p class="Pp">For portability, the starting address of the region specified by - <var class="Fa">handle</var> plus the offset should be a multiple of the - size of data items being read and the data array pointer should be properly - aligned. On some systems, not obeying these requirements may cause incorrect - data to be read, on others it may cause a system crash.</p> -<p class="Pp" id="bus_space_read_region_N~2">Read operations done by the - <a class="permalink" href="#bus_space_read_region_N~2"><code class="Fn">bus_space_read_region_N</code></a>() - functions may be executed in any order. They may also be executed out of - order with respect to other pending read and write operations unless order - is enforced by use of the <code class="Fn">bus_space_barrier</code>() - function. There is no way to insert barriers between reads of individual bus - space locations executed by the - <code class="Fn">bus_space_read_region_N</code>() functions.</p> -<p class="Pp">These functions will never fail. If they would fail (e.g. because - of an argument error), that indicates a software bug which should cause a - panic. In that case, they will never return.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_write_region_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_1"><code class="Fn" id="bus_space_write_region_1">bus_space_write_region_1</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_write_region_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_2"><code class="Fn" id="bus_space_write_region_2">bus_space_write_region_2</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_write_region_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_4"><code class="Fn" id="bus_space_write_region_4">bus_space_write_region_4</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_write_region_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_region_8"><code class="Fn" id="bus_space_write_region_8">bus_space_write_region_8</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2> -<p class="Pp">The <code class="Fn">bus_space_write_region_N</code>() family of - functions reads <var class="Fa">count</var> 1, 2, 4, or 8 byte data items - from the array specified by <var class="Fa">datap</var> and writes them to - bus space starting at byte offset <var class="Fa">offset</var> in the region - specified by <var class="Fa">handle</var> of the bus space specified by - <var class="Fa">space</var>. Each successive data item is written to an - offset 1, 2, 4, or 8 bytes after the previous data item (depending on which - function is used). All locations being written must lie within the bus space - region specified by <var class="Fa">handle</var>.</p> -<p class="Pp">For portability, the starting address of the region specified by - <var class="Fa">handle</var> plus the offset should be a multiple of the - size of data items being written and the data array pointer should be - properly aligned. On some systems, not obeying these requirements may cause - incorrect data to be written, on others it may cause a system crash.</p> -<p class="Pp" id="bus_space_write_region_N">Write operations done by the - <a class="permalink" href="#bus_space_write_region_N"><code class="Fn">bus_space_write_region_N</code></a>() - functions may be executed in any order. They may also be executed out of - order with respect to other pending read and write operations unless order - is enforced by use of the <code class="Fn">bus_space_barrier</code>() - function. There is no way to insert barriers between writes of individual - bus space locations executed by the - <code class="Fn">bus_space_write_region_N</code>() functions.</p> -<p class="Pp">These functions will never fail. If they would fail (e.g. because - of an argument error), that indicates a software bug which should cause a - panic. In that case, they will never return.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_copy_region_1_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_1_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_1"><code class="Fn" id="bus_space_copy_region_1">bus_space_copy_region_1</code></a>(<var class="Fa">space</var>, - <var class="Fa">srchandle</var>, <var class="Fa">srcoffset</var>, - <var class="Fa">dsthandle</var>, <var class="Fa">dstoffset</var>, - <var class="Fa">count</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_copy_region_2_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_2_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_2"><code class="Fn" id="bus_space_copy_region_2">bus_space_copy_region_2</code></a>(<var class="Fa">space</var>, - <var class="Fa">srchandle</var>, <var class="Fa">srcoffset</var>, - <var class="Fa">dsthandle</var>, <var class="Fa">dstoffset</var>, - <var class="Fa">count</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_copy_region_4_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_4_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_4"><code class="Fn" id="bus_space_copy_region_4">bus_space_copy_region_4</code></a>(<var class="Fa">space</var>, - <var class="Fa">srchandle</var>, <var class="Fa">srcoffset</var>, - <var class="Fa">dsthandle</var>, <var class="Fa">dstoffset</var>, - <var class="Fa">count</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_copy_region_8_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_8_space_srchandle_srcoffset_dsthandle_dstoffset_count"><a class="permalink" href="#bus_space_copy_region_8"><code class="Fn" id="bus_space_copy_region_8">bus_space_copy_region_8</code></a>(<var class="Fa">space</var>, - <var class="Fa">srchandle</var>, <var class="Fa">srcoffset</var>, - <var class="Fa">dsthandle</var>, <var class="Fa">dstoffset</var>, - <var class="Fa">count</var>)</a></h2> -<p class="Pp">The <code class="Fn">bus_space_copy_region_N</code>() family of - functions copies <var class="Fa">count</var> 1, 2, 4, or 8 byte data items - in bus space from the area starting at byte offset - <var class="Fa">srcoffset</var> in the region specified by - <var class="Fa">srchandle</var> of the bus space specified by - <var class="Fa">space</var> to the area starting at byte offset - <var class="Fa">dstoffset</var> in the region specified by - <var class="Fa">dsthandle</var> in the same bus space. Each successive data - item read or written has an offset 1, 2, 4, or 8 bytes after the previous - data item (depending on which function is used). All locations being read - and written must lie within the bus space region specified by their - respective handles.</p> -<p class="Pp">For portability, the starting addresses of the regions specified - by the each handle plus its respective offset should be a multiple of the - size of data items being copied. On some systems, not obeying this - requirement may cause incorrect data to be copied, on others it may cause a - system crash.</p> -<p class="Pp" id="bus_space_copy_region_N~2">Read and write operations done by - the - <a class="permalink" href="#bus_space_copy_region_N~2"><code class="Fn">bus_space_copy_region_N</code></a>() - functions may be executed in any order. They may also be executed out of - order with respect to other pending read and write operations unless order - is enforced by use of the <code class="Fn">bus_space_barrier</code>() - function. There is no way to insert barriers between reads or writes of - individual bus space locations executed by the - <code class="Fn">bus_space_copy_region_N</code>() functions.</p> -<p class="Pp" id="bus_space_copy_region_N~3">Overlapping copies between - different subregions of a single region of bus space are handled correctly - by the - <a class="permalink" href="#bus_space_copy_region_N~3"><code class="Fn">bus_space_copy_region_N</code></a>() - functions.</p> -<p class="Pp">These functions will never fail. If they would fail (e.g. because - of an argument error), that indicates a software bug which should cause a - panic. In that case, they will never return.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_set_region_1_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_1_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_1"><code class="Fn" id="bus_space_set_region_1">bus_space_set_region_1</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_set_region_2_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_2_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_2"><code class="Fn" id="bus_space_set_region_2">bus_space_set_region_2</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_set_region_4_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_4_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_4"><code class="Fn" id="bus_space_set_region_4">bus_space_set_region_4</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_set_region_8_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_8_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_region_8"><code class="Fn" id="bus_space_set_region_8">bus_space_set_region_8</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2> -<p class="Pp">The <code class="Fn">bus_space_set_region_N</code>() family of - functions writes the given <var class="Fa">value</var> to - <var class="Fa">count</var> 1, 2, 4, or 8 byte data items in bus space - starting at byte offset <var class="Fa">offset</var> in the region specified - by <var class="Fa">handle</var> of the bus space specified by - <var class="Fa">space</var>. Each successive data item has an offset 1, 2, - 4, or 8 bytes after the previous data item (depending on which function is - used). All locations being written must lie within the bus space region - specified by <var class="Fa">handle</var>.</p> -<p class="Pp">For portability, the starting address of the region specified by - <var class="Fa">handle</var> plus the offset should be a multiple of the - size of data items being written. On some systems, not obeying this - requirement may cause incorrect data to be written, on others it may cause a - system crash.</p> -<p class="Pp" id="bus_space_set_region_N">Write operations done by the - <a class="permalink" href="#bus_space_set_region_N"><code class="Fn">bus_space_set_region_N</code></a>() - functions may be executed in any order. They may also be executed out of - order with respect to other pending read and write operations unless order - is enforced by use of the <code class="Fn">bus_space_barrier</code>() - function. There is no way to insert barriers between writes of individual - bus space locations executed by the - <code class="Fn">bus_space_set_region_N</code>() functions.</p> -<p class="Pp">These functions will never fail. If they would fail (e.g. because - of an argument error), that indicates a software bug which should cause a - panic. In that case, they will never return.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="READING_AND_WRITING_A_SINGLE_LOCATION_MULTIPLE_TIMES"><a class="permalink" href="#READING_AND_WRITING_A_SINGLE_LOCATION_MULTIPLE_TIMES">READING - AND WRITING A SINGLE LOCATION MULTIPLE TIMES</a></h1> -<p class="Pp">Some devices implement single locations in bus space which are to - be read or written multiple times to communicate data, e.g. some ethernet - devices' packet buffer FIFOs. In order to allow drivers to manipulate these - types of devices as efficiently as possible, the - <a class="permalink" href="#bus_space_read_multi_N"><code class="Fn" id="bus_space_read_multi_N">bus_space_read_multi_N</code></a>(), - <code class="Fn">bus_space_set_multi_N</code>(), and - <code class="Fn">bus_space_write_multi_N</code>() families of functions are - provided.</p> -<section class="Ss"> -<h2 class="Ss" id="bus_space_read_multi_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_1"><code class="Fn" id="bus_space_read_multi_1">bus_space_read_multi_1</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_read_multi_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_2"><code class="Fn" id="bus_space_read_multi_2">bus_space_read_multi_2</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_read_multi_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_4"><code class="Fn" id="bus_space_read_multi_4">bus_space_read_multi_4</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_read_multi_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_read_multi_8"><code class="Fn" id="bus_space_read_multi_8">bus_space_read_multi_8</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2> -<p class="Pp">The <code class="Fn">bus_space_read_multi_N</code>() family of - functions reads <var class="Fa">count</var> 1, 2, 4, or 8 byte data items - from bus space at byte offset <var class="Fa">offset</var> in the region - specified by <var class="Fa">handle</var> of the bus space specified by - <var class="Fa">space</var> and writes them into the array specified by - <var class="Fa">datap</var>. Each successive data item is read from the same - location in bus space. The location being read must lie within the bus space - region specified by <var class="Fa">handle</var>.</p> -<p class="Pp">For portability, the starting address of the region specified by - <var class="Fa">handle</var> plus the offset should be a multiple of the - size of data items being read and the data array pointer should be properly - aligned. On some systems, not obeying these requirements may cause incorrect - data to be read, on others it may cause a system crash.</p> -<p class="Pp" id="bus_space_read_multi_N~2">Read operations done by the - <a class="permalink" href="#bus_space_read_multi_N~2"><code class="Fn">bus_space_read_multi_N</code></a>() - functions may be executed out of order with respect to other pending read - and write operations unless order is enforced by use of the - <code class="Fn">bus_space_barrier</code>() function. Because the - <code class="Fn">bus_space_read_multi_N</code>() functions read the same bus - space location multiple times, they place an implicit read barrier between - each successive read of that bus space location.</p> -<p class="Pp">These functions will never fail. If they would fail (e.g. because - of an argument error), that indicates a software bug which should cause a - panic. In that case, they will never return.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_write_multi_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_1_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_1"><code class="Fn" id="bus_space_write_multi_1">bus_space_write_multi_1</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_write_multi_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_2_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_2"><code class="Fn" id="bus_space_write_multi_2">bus_space_write_multi_2</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_write_multi_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_4_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_4"><code class="Fn" id="bus_space_write_multi_4">bus_space_write_multi_4</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_write_multi_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_8_space_handle_offset_datap_count"><a class="permalink" href="#bus_space_write_multi_8"><code class="Fn" id="bus_space_write_multi_8">bus_space_write_multi_8</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">datap</var>, <var class="Fa">count</var>)</a></h2> -<p class="Pp">The <code class="Fn">bus_space_write_multi_N</code>() family of - functions reads <var class="Fa">count</var> 1, 2, 4, or 8 byte data items - from the array specified by <var class="Fa">datap</var> and writes them into - bus space at byte offset <var class="Fa">offset</var> in the region - specified by <var class="Fa">handle</var> of the bus space specified by - <var class="Fa">space</var>. Each successive data item is written to the - same location in bus space. The location being written must lie within the - bus space region specified by <var class="Fa">handle</var>.</p> -<p class="Pp">For portability, the starting address of the region specified by - <var class="Fa">handle</var> plus the offset should be a multiple of the - size of data items being written and the data array pointer should be - properly aligned. On some systems, not obeying these requirements may cause - incorrect data to be written, on others it may cause a system crash.</p> -<p class="Pp" id="bus_space_write_multi_N">Write operations done by the - <a class="permalink" href="#bus_space_write_multi_N"><code class="Fn">bus_space_write_multi_N</code></a>() - functions may be executed out of order with respect to other pending read - and write operations unless order is enforced by use of the - <code class="Fn">bus_space_barrier</code>() function. Because the - <code class="Fn">bus_space_write_multi_N</code>() functions write the same - bus space location multiple times, they place an implicit write barrier - between each successive write of that bus space location.</p> -<p class="Pp">These functions will never fail. If they would fail (e.g. because - of an argument error), that indicates a software bug which should cause a - panic. In that case, they will never return.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_set_multi_1_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_1_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_1"><code class="Fn" id="bus_space_set_multi_1">bus_space_set_multi_1</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_set_multi_2_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_2_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_2"><code class="Fn" id="bus_space_set_multi_2">bus_space_set_multi_2</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_set_multi_4_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_4_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_4"><code class="Fn" id="bus_space_set_multi_4">bus_space_set_multi_4</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="bus_space_set_multi_8_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_8_space_handle_offset_value_count"><a class="permalink" href="#bus_space_set_multi_8"><code class="Fn" id="bus_space_set_multi_8">bus_space_set_multi_8</code></a>(<var class="Fa">space</var>, - <var class="Fa">handle</var>, <var class="Fa">offset</var>, - <var class="Fa">value</var>, <var class="Fa">count</var>)</a></h2> -<p class="Pp">The <code class="Fn">bus_space_set_multi_N</code>() writes - <var class="Fa">value</var> into bus space at byte offset - <var class="Fa">offset</var> in the region specified by - <var class="Fa">handle</var> of the bus space specified by - <var class="Fa">space</var>, <var class="Fa">count</var> times. The location - being written must lie within the bus space region specified by - <var class="Fa">handle</var>.</p> -<p class="Pp">For portability, the starting address of the region specified by - <var class="Fa">handle</var> plus the offset should be a multiple of the - size of data items being written and the data array pointer should be - properly aligned. On some systems, not obeying these requirements may cause - incorrect data to be written, on others it may cause a system crash.</p> -<p class="Pp" id="bus_space_set_multi_N">Write operations done by the - <a class="permalink" href="#bus_space_set_multi_N"><code class="Fn">bus_space_set_multi_N</code></a>() - functions may be executed out of order with respect to other pending read - and write operations unless order is enforced by use of the - <code class="Fn">bus_space_barrier</code>() function. Because the - <code class="Fn">bus_space_set_multi_N</code>() functions write the same bus - space location multiple times, they place an implicit write barrier between - each successive write of that bus space location.</p> -<p class="Pp">These functions will never fail. If they would fail (e.g. because - of an argument error), that indicates a software bug which should cause a - panic. In that case, they will never return.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="STREAM_FUNCTIONS"><a class="permalink" href="#STREAM_FUNCTIONS">STREAM - FUNCTIONS</a></h1> -<p class="Pp">Most of the <code class="Nm">bus_space</code> functions imply a - host byte-order and a bus byte-order and take care of any translation for - the caller. In some cases, however, hardware may map a FIFO or some other - memory region for which the caller may want to use multi-word, yet - untranslated access. Access to these types of memory regions should be with - the - <a class="permalink" href="#bus_space_*_stream_N"><code class="Fn" id="bus_space_*_stream_N">bus_space_*_stream_N</code></a>() - functions.</p> -<p class="Pp"></p> -<dl class="Bl-tag Bl-compact"> - <dt id="bus_space_read_stream_1"><a class="permalink" href="#bus_space_read_stream_1"><code class="Fn">bus_space_read_stream_1</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_read_stream_2"><a class="permalink" href="#bus_space_read_stream_2"><code class="Fn">bus_space_read_stream_2</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_read_stream_4"><a class="permalink" href="#bus_space_read_stream_4"><code class="Fn">bus_space_read_stream_4</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_read_stream_8"><a class="permalink" href="#bus_space_read_stream_8"><code class="Fn">bus_space_read_stream_8</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_read_multi_stream_1"><a class="permalink" href="#bus_space_read_multi_stream_1"><code class="Fn">bus_space_read_multi_stream_1</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_read_multi_stream_2"><a class="permalink" href="#bus_space_read_multi_stream_2"><code class="Fn">bus_space_read_multi_stream_2</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_read_multi_stream_4"><a class="permalink" href="#bus_space_read_multi_stream_4"><code class="Fn">bus_space_read_multi_stream_4</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_read_multi_stream_8"><a class="permalink" href="#bus_space_read_multi_stream_8"><code class="Fn">bus_space_read_multi_stream_8</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_read_region_stream_1"><a class="permalink" href="#bus_space_read_region_stream_1"><code class="Fn">bus_space_read_region_stream_1</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_read_region_stream_2"><a class="permalink" href="#bus_space_read_region_stream_2"><code class="Fn">bus_space_read_region_stream_2</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_read_region_stream_4"><a class="permalink" href="#bus_space_read_region_stream_4"><code class="Fn">bus_space_read_region_stream_4</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_read_region_stream_8"><a class="permalink" href="#bus_space_read_region_stream_8"><code class="Fn">bus_space_read_region_stream_8</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_write_stream_1"><a class="permalink" href="#bus_space_write_stream_1"><code class="Fn">bus_space_write_stream_1</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_write_stream_2"><a class="permalink" href="#bus_space_write_stream_2"><code class="Fn">bus_space_write_stream_2</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_write_stream_4"><a class="permalink" href="#bus_space_write_stream_4"><code class="Fn">bus_space_write_stream_4</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_write_stream_8"><a class="permalink" href="#bus_space_write_stream_8"><code class="Fn">bus_space_write_stream_8</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_write_multi_stream_1"><a class="permalink" href="#bus_space_write_multi_stream_1"><code class="Fn">bus_space_write_multi_stream_1</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_write_multi_stream_2"><a class="permalink" href="#bus_space_write_multi_stream_2"><code class="Fn">bus_space_write_multi_stream_2</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_write_multi_stream_4"><a class="permalink" href="#bus_space_write_multi_stream_4"><code class="Fn">bus_space_write_multi_stream_4</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_write_multi_stream_8"><a class="permalink" href="#bus_space_write_multi_stream_8"><code class="Fn">bus_space_write_multi_stream_8</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_write_region_stream_1"><a class="permalink" href="#bus_space_write_region_stream_1"><code class="Fn">bus_space_write_region_stream_1</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_write_region_stream_2"><a class="permalink" href="#bus_space_write_region_stream_2"><code class="Fn">bus_space_write_region_stream_2</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_write_region_stream_4"><a class="permalink" href="#bus_space_write_region_stream_4"><code class="Fn">bus_space_write_region_stream_4</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_write_region_stream_8"><a class="permalink" href="#bus_space_write_region_stream_8"><code class="Fn">bus_space_write_region_stream_8</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_copy_region_stream_1"><a class="permalink" href="#bus_space_copy_region_stream_1"><code class="Fn">bus_space_copy_region_stream_1</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_copy_region_stream_2"><a class="permalink" href="#bus_space_copy_region_stream_2"><code class="Fn">bus_space_copy_region_stream_2</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_copy_region_stream_4"><a class="permalink" href="#bus_space_copy_region_stream_4"><code class="Fn">bus_space_copy_region_stream_4</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_copy_region_stream_8"><a class="permalink" href="#bus_space_copy_region_stream_8"><code class="Fn">bus_space_copy_region_stream_8</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_set_multi_stream_1"><a class="permalink" href="#bus_space_set_multi_stream_1"><code class="Fn">bus_space_set_multi_stream_1</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_set_multi_stream_2"><a class="permalink" href="#bus_space_set_multi_stream_2"><code class="Fn">bus_space_set_multi_stream_2</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_set_multi_stream_4"><a class="permalink" href="#bus_space_set_multi_stream_4"><code class="Fn">bus_space_set_multi_stream_4</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_set_multi_stream_8"><a class="permalink" href="#bus_space_set_multi_stream_8"><code class="Fn">bus_space_set_multi_stream_8</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_set_region_stream_1"><a class="permalink" href="#bus_space_set_region_stream_1"><code class="Fn">bus_space_set_region_stream_1</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_set_region_stream_2"><a class="permalink" href="#bus_space_set_region_stream_2"><code class="Fn">bus_space_set_region_stream_2</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_set_region_stream_4"><a class="permalink" href="#bus_space_set_region_stream_4"><code class="Fn">bus_space_set_region_stream_4</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="bus_space_set_region_stream_8"><a class="permalink" href="#bus_space_set_region_stream_8"><code class="Fn">bus_space_set_region_stream_8</code></a>()</dt> - <dd style="width: auto;"> </dd> -</dl> -<p class="Pp">These functions are defined just as their non-stream counterparts, - except that they provide no byte-order translation.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="COMPATIBILITY"><a class="permalink" href="#COMPATIBILITY">COMPATIBILITY</a></h1> -<p class="Pp">The current <span class="Ux">NetBSD</span> version of the - <code class="Nm">bus_space</code> interface specification differs slightly - from the original specification that came into wide use and - <span class="Ux">FreeBSD</span> adopted. A few of the function names and - arguments have changed for consistency and increased functionality.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">bus_dma(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">bus_space</code> functions were introduced in - a different form (memory and I/O spaces were accessed via different sets of - functions) in <span class="Ux">NetBSD 1.2</span>. The functions were merged - to work on generic “spaces” early in the - <span class="Ux">NetBSD 1.3</span> development cycle, and many drivers were - converted to use them. This document was written later during the - <span class="Ux">NetBSD 1.3</span> development cycle, and the specification - was updated to fix some consistency problems and to add some missing - functionality.</p> -<p class="Pp">The manual page was then adapted to the version of the interface - that <span class="Ux">FreeBSD</span> imported for the CAM SCSI drivers, plus - subsequent evolution. The <span class="Ux">FreeBSD</span> - <code class="Nm">bus_space</code> version was imported in - <span class="Ux">FreeBSD 3.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">bus_space</code> interfaces were designed and - implemented by the <span class="Ux">NetBSD</span> developer community. - Primary contributors and implementors were <span class="An">Chris - Demetriou</span>, <span class="An">Jason Thorpe</span>, and - <span class="An">Charles Hannum</span>, but the rest of the - <span class="Ux">NetBSD</span> developers and the user community played a - significant role in development.</p> -<p class="Pp"><span class="An">Justin Gibbs</span> ported these interfaces to - <span class="Ux">FreeBSD</span>.</p> -<p class="Pp"><span class="An">Chris Demetriou</span> wrote this manual - page.</p> -<p class="Pp"><span class="An">Warner Losh</span> modified it for the - <span class="Ux">FreeBSD</span> implementation.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">This manual may not completely and accurately document the - interface, and many parts of the interface are unspecified.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 1, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/byteorder.9 4.html b/static/freebsd/man9/byteorder.9 4.html deleted file mode 100644 index 84a05bb1..00000000 --- a/static/freebsd/man9/byteorder.9 4.html +++ /dev/null @@ -1,219 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">BYTEORDER(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">BYTEORDER(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bswap16</code>, <code class="Nm">bswap32</code>, - <code class="Nm">bswap64</code>, <code class="Nm">be16toh</code>, - <code class="Nm">be32toh</code>, <code class="Nm">be64toh</code>, - <code class="Nm">htobe16</code>, <code class="Nm">htobe32</code>, - <code class="Nm">htobe64</code>, <code class="Nm">htole16</code>, - <code class="Nm">htole32</code>, <code class="Nm">htole64</code>, - <code class="Nm">le16toh</code>, <code class="Nm">le32toh</code>, - <code class="Nm">le64toh</code>, <code class="Nm">be16enc</code>, - <code class="Nm">be16dec</code>, <code class="Nm">be32enc</code>, - <code class="Nm">be32dec</code>, <code class="Nm">be64enc</code>, - <code class="Nm">be64dec</code>, <code class="Nm">le16enc</code>, - <code class="Nm">le16dec</code>, <code class="Nm">le32enc</code>, - <code class="Nm">le32dec</code>, <code class="Nm">le64enc</code>, - <code class="Nm">le64dec</code> — <span class="Nd">byte order - operations</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/endian.h</a>></code></p> -<p class="Pp"><var class="Ft">uint16_t</var> - <br/> - <code class="Fn">bswap16</code>(<var class="Fa" style="white-space: nowrap;">uint16_t - int16</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">bswap32</code>(<var class="Fa" style="white-space: nowrap;">uint32_t - int32</var>);</p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">bswap64</code>(<var class="Fa" style="white-space: nowrap;">uint64_t - int64</var>);</p> -<p class="Pp"><var class="Ft">uint16_t</var> - <br/> - <code class="Fn">be16toh</code>(<var class="Fa" style="white-space: nowrap;">uint16_t - big16</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">be32toh</code>(<var class="Fa" style="white-space: nowrap;">uint32_t - big32</var>);</p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">be64toh</code>(<var class="Fa" style="white-space: nowrap;">uint64_t - big64</var>);</p> -<p class="Pp"><var class="Ft">uint16_t</var> - <br/> - <code class="Fn">htobe16</code>(<var class="Fa" style="white-space: nowrap;">uint16_t - host16</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">htobe32</code>(<var class="Fa" style="white-space: nowrap;">uint32_t - host32</var>);</p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">htobe64</code>(<var class="Fa" style="white-space: nowrap;">uint64_t - host64</var>);</p> -<p class="Pp"><var class="Ft">uint16_t</var> - <br/> - <code class="Fn">htole16</code>(<var class="Fa" style="white-space: nowrap;">uint16_t - host16</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">htole32</code>(<var class="Fa" style="white-space: nowrap;">uint32_t - host32</var>);</p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">htole64</code>(<var class="Fa" style="white-space: nowrap;">uint64_t - host64</var>);</p> -<p class="Pp"><var class="Ft">uint16_t</var> - <br/> - <code class="Fn">le16toh</code>(<var class="Fa" style="white-space: nowrap;">uint16_t - little16</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">le32toh</code>(<var class="Fa" style="white-space: nowrap;">uint32_t - little32</var>);</p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">le64toh</code>(<var class="Fa" style="white-space: nowrap;">uint64_t - little64</var>);</p> -<p class="Pp"><var class="Ft">uint16_t</var> - <br/> - <code class="Fn">be16dec</code>(<var class="Fa" style="white-space: nowrap;">const - void *</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">be32dec</code>(<var class="Fa" style="white-space: nowrap;">const - void *</var>);</p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">be64dec</code>(<var class="Fa" style="white-space: nowrap;">const - void *</var>);</p> -<p class="Pp"><var class="Ft">uint16_t</var> - <br/> - <code class="Fn">le16dec</code>(<var class="Fa" style="white-space: nowrap;">const - void *</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">le32dec</code>(<var class="Fa" style="white-space: nowrap;">const - void *</var>);</p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">le64dec</code>(<var class="Fa" style="white-space: nowrap;">const - void *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">be16enc</code>(<var class="Fa" style="white-space: nowrap;">void - *</var>, <var class="Fa" style="white-space: nowrap;">uint16_t</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">be32enc</code>(<var class="Fa" style="white-space: nowrap;">void - *</var>, <var class="Fa" style="white-space: nowrap;">uint32_t</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">be64enc</code>(<var class="Fa" style="white-space: nowrap;">void - *</var>, <var class="Fa" style="white-space: nowrap;">uint64_t</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">le16enc</code>(<var class="Fa" style="white-space: nowrap;">void - *</var>, <var class="Fa" style="white-space: nowrap;">uint16_t</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">le32enc</code>(<var class="Fa" style="white-space: nowrap;">void - *</var>, <var class="Fa" style="white-space: nowrap;">uint32_t</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">le64enc</code>(<var class="Fa" style="white-space: nowrap;">void - *</var>, <var class="Fa" style="white-space: nowrap;">uint64_t</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#bswap16"><code class="Fn" id="bswap16">bswap16</code></a>(), - <a class="permalink" href="#bswap32"><code class="Fn" id="bswap32">bswap32</code></a>(), - and - <a class="permalink" href="#bswap64"><code class="Fn" id="bswap64">bswap64</code></a>() - functions return a byte order swapped integer. On big endian systems, the - number is converted to little endian byte order. On little endian systems, - the number is converted to big endian byte order.</p> -<p class="Pp" id="be16toh">The - <a class="permalink" href="#be16toh"><code class="Fn">be16toh</code></a>(), - <a class="permalink" href="#be32toh"><code class="Fn" id="be32toh">be32toh</code></a>(), - and - <a class="permalink" href="#be64toh"><code class="Fn" id="be64toh">be64toh</code></a>() - functions return a big endian byte ordered integer converted to the system's - native byte order. The return value will be the same as the argument on big - endian systems.</p> -<p class="Pp" id="le16toh">The - <a class="permalink" href="#le16toh"><code class="Fn">le16toh</code></a>(), - <a class="permalink" href="#le32toh"><code class="Fn" id="le32toh">le32toh</code></a>(), - and - <a class="permalink" href="#le64toh"><code class="Fn" id="le64toh">le64toh</code></a>() - functions return a little endian byte ordered integer converted to the - system's native byte order. The return value will be the same as the - argument on little endian systems.</p> -<p class="Pp" id="htobe16">The - <a class="permalink" href="#htobe16"><code class="Fn">htobe16</code></a>(), - <a class="permalink" href="#htobe32"><code class="Fn" id="htobe32">htobe32</code></a>(), - and - <a class="permalink" href="#htobe64"><code class="Fn" id="htobe64">htobe64</code></a>() - functions return an integer in the system's native byte order converted to - big endian byte order. The return value will be the same as the argument on - big endian systems.</p> -<p class="Pp" id="htole16">The - <a class="permalink" href="#htole16"><code class="Fn">htole16</code></a>(), - <a class="permalink" href="#htole32"><code class="Fn" id="htole32">htole32</code></a>(), - and - <a class="permalink" href="#htole64"><code class="Fn" id="htole64">htole64</code></a>() - functions return a integer in the system's native byte order converted to - little endian byte order. The return value will be the same as the argument - on little endian systems.</p> -<p class="Pp" id="be16enc">The - <a class="permalink" href="#be16enc"><code class="Fn">be16enc</code></a>(), - <a class="permalink" href="#be16dec"><code class="Fn" id="be16dec">be16dec</code></a>(), - <a class="permalink" href="#be32enc"><code class="Fn" id="be32enc">be32enc</code></a>(), - <a class="permalink" href="#be32dec"><code class="Fn" id="be32dec">be32dec</code></a>(), - <a class="permalink" href="#be64enc"><code class="Fn" id="be64enc">be64enc</code></a>(), - <a class="permalink" href="#be64dec"><code class="Fn" id="be64dec">be64dec</code></a>(), - <a class="permalink" href="#le16enc"><code class="Fn" id="le16enc">le16enc</code></a>(), - <a class="permalink" href="#le16dec"><code class="Fn" id="le16dec">le16dec</code></a>(), - <a class="permalink" href="#le32enc"><code class="Fn" id="le32enc">le32enc</code></a>(), - <a class="permalink" href="#le32dec"><code class="Fn" id="le32dec">le32dec</code></a>(), - <a class="permalink" href="#le64enc"><code class="Fn" id="le64enc">le64enc</code></a>(), - and - <a class="permalink" href="#le64dec"><code class="Fn" id="le64dec">le64dec</code></a>() - functions encode and decode integers to/from byte strings on any alignment - in big/little endian format.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">byteorder(3)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Fn">hto*</code>() and - <code class="Fn">*toh</code>() functions first appeared in - <span class="Ux">FreeBSD 5.0</span>, and were originally developed by the - <span class="Ux">NetBSD</span> project.</p> -<p class="Pp">The encode/decode functions first appeared in - <span class="Ux">FreeBSD 5.1</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 29, 2002</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/callout.9 3.html b/static/freebsd/man9/callout.9 3.html deleted file mode 100644 index e2951509..00000000 --- a/static/freebsd/man9/callout.9 3.html +++ /dev/null @@ -1,614 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">CALLOUT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">CALLOUT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">callout_active</code>, - <code class="Nm">callout_deactivate</code>, - <code class="Nm">callout_drain</code>, <code class="Nm">callout_init</code>, - <code class="Nm">callout_init_mtx</code>, - <code class="Nm">callout_init_rm</code>, - <code class="Nm">callout_init_rw</code>, - <code class="Nm">callout_pending</code>, - <code class="Nm">callout_reset</code>, - <code class="Nm">callout_reset_curcpu</code>, - <code class="Nm">callout_reset_on</code>, - <code class="Nm">callout_reset_sbt</code>, - <code class="Nm">callout_reset_sbt_curcpu</code>, - <code class="Nm">callout_reset_sbt_on</code>, - <code class="Nm">callout_schedule</code>, - <code class="Nm">callout_schedule_curcpu</code>, - <code class="Nm">callout_schedule_on</code>, - <code class="Nm">callout_schedule_sbt</code>, - <code class="Nm">callout_schedule_sbt_curcpu</code>, - <code class="Nm">callout_schedule_sbt_on</code>, - <code class="Nm">callout_stop</code>, <code class="Nm">callout_when</code> - — <span class="Nd">execute a function after a specified length of - time</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/callout.h</a>></code></p> -<div class="Bd Pp Li"> -<pre>typedef void callout_func_t (void *);</pre> -</div> -<br/> -<var class="Ft">int</var> -<br/> -<code class="Fn">callout_active</code>(<var class="Fa" style="white-space: nowrap;">struct - callout *c</var>); -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">callout_deactivate</code>(<var class="Fa" style="white-space: nowrap;">struct - callout *c</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">callout_drain</code>(<var class="Fa" style="white-space: nowrap;">struct - callout *c</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">callout_init</code>(<var class="Fa" style="white-space: nowrap;">struct - callout *c</var>, <var class="Fa" style="white-space: nowrap;">int - mpsafe</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">callout_init_mtx</code>(<var class="Fa" style="white-space: nowrap;">struct - callout *c</var>, <var class="Fa" style="white-space: nowrap;">struct mtx - *mtx</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">callout_init_rm</code>(<var class="Fa" style="white-space: nowrap;">struct - callout *c</var>, <var class="Fa" style="white-space: nowrap;">struct rmlock - *rm</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">callout_init_rw</code>(<var class="Fa" style="white-space: nowrap;">struct - callout *c</var>, <var class="Fa" style="white-space: nowrap;">struct rwlock - *rw</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">callout_pending</code>(<var class="Fa" style="white-space: nowrap;">struct - callout *c</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">callout_reset</code>(<var class="Fa">struct callout *c</var>, - <var class="Fa">int ticks</var>, <var class="Fa">callout_func_t *func</var>, - <var class="Fa">void *arg</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">callout_reset_curcpu</code>(<var class="Fa">struct callout - *c</var>, <var class="Fa">int ticks</var>, <var class="Fa">callout_func_t - *func</var>, <var class="Fa">void *arg</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">callout_reset_on</code>(<var class="Fa">struct callout - *c</var>, <var class="Fa">int ticks</var>, <var class="Fa">callout_func_t - *func</var>, <var class="Fa">void *arg</var>, <var class="Fa">int - cpu</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">callout_reset_sbt</code>(<var class="Fa">struct callout - *c</var>, <var class="Fa">sbintime_t sbt</var>, <var class="Fa">sbintime_t - pr</var>, <var class="Fa">callout_func_t *func</var>, <var class="Fa">void - *arg</var>, <var class="Fa">int flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">callout_reset_sbt_curcpu</code>(<var class="Fa">struct - callout *c</var>, <var class="Fa">sbintime_t sbt</var>, - <var class="Fa">sbintime_t pr</var>, <var class="Fa">callout_func_t - *func</var>, <var class="Fa">void *arg</var>, <var class="Fa">int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">callout_reset_sbt_on</code>(<var class="Fa">struct callout - *c</var>, <var class="Fa">sbintime_t sbt</var>, <var class="Fa">sbintime_t - pr</var>, <var class="Fa">callout_func_t *func</var>, <var class="Fa">void - *arg</var>, <var class="Fa">int cpu</var>, <var class="Fa">int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">callout_schedule</code>(<var class="Fa" style="white-space: nowrap;">struct - callout *c</var>, <var class="Fa" style="white-space: nowrap;">int - ticks</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">callout_schedule_curcpu</code>(<var class="Fa" style="white-space: nowrap;">struct - callout *c</var>, <var class="Fa" style="white-space: nowrap;">int - ticks</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">callout_schedule_on</code>(<var class="Fa" style="white-space: nowrap;">struct - callout *c</var>, <var class="Fa" style="white-space: nowrap;">int - ticks</var>, <var class="Fa" style="white-space: nowrap;">int - cpu</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">callout_schedule_sbt</code>(<var class="Fa">struct callout - *c</var>, <var class="Fa">sbintime_t sbt</var>, <var class="Fa">sbintime_t - pr</var>, <var class="Fa">int flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">callout_schedule_sbt_curcpu</code>(<var class="Fa">struct - callout *c</var>, <var class="Fa">sbintime_t sbt</var>, - <var class="Fa">sbintime_t pr</var>, <var class="Fa">int flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">callout_schedule_sbt_on</code>(<var class="Fa">struct callout - *c</var>, <var class="Fa">sbintime_t sbt</var>, <var class="Fa">sbintime_t - pr</var>, <var class="Fa">int cpu</var>, <var class="Fa">int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">callout_stop</code>(<var class="Fa" style="white-space: nowrap;">struct - callout *c</var>);</p> -<p class="Pp"><var class="Ft">sbintime_t</var> - <br/> - <code class="Fn">callout_when</code>(<var class="Fa">sbintime_t sbt</var>, - <var class="Fa">sbintime_t precision</var>, <var class="Fa">int flags</var>, - <var class="Fa">sbintime_t *sbt_res</var>, <var class="Fa">sbintime_t - *precision_res</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">callout</code> API is used to schedule a call - to an arbitrary function at a specific time in the future. Consumers of this - API are required to allocate a callout structure (struct callout) for each - pending function invocation. This structure stores state about the pending - function invocation including the function to be called and the time at - which the function should be invoked. Pending function calls can be - cancelled or rescheduled to a different time. In addition, a callout - structure may be reused to schedule a new function call after a scheduled - call is completed.</p> -<p class="Pp">Callouts only provide a single-shot mode. If a consumer requires a - periodic timer, it must explicitly reschedule each function call. This is - normally done by rescheduling the subsequent call within the called - function.</p> -<p class="Pp">Callout functions must not sleep. They may not acquire sleepable - locks, wait on condition variables, perform blocking allocation requests, or - invoke any other action that might sleep.</p> -<p class="Pp" id="callout_init">Each callout structure must be initialized by - <a class="permalink" href="#callout_init"><code class="Fn">callout_init</code></a>(), - <code class="Fn">callout_init_mtx</code>(), - <code class="Fn">callout_init_rm</code>(), or - <code class="Fn">callout_init_rw</code>() before it is passed to any of the - other callout functions. The <code class="Fn">callout_init</code>() function - initializes a callout structure in <var class="Fa">c</var> that is not - associated with a specific lock. If the <var class="Fa">mpsafe</var> - argument is zero, the callout structure is not considered to be - “multi-processor safe”; and the Giant lock will be acquired - before calling the callout function and released when the callout function - returns.</p> -<p class="Pp" id="callout_init_mtx">The - <a class="permalink" href="#callout_init_mtx"><code class="Fn">callout_init_mtx</code></a>(), - <code class="Fn">callout_init_rm</code>(), and - <a class="permalink" href="#callout_init_rw"><code class="Fn" id="callout_init_rw">callout_init_rw</code></a>() - functions initialize a callout structure in <var class="Fa">c</var> that is - associated with a specific lock. The lock is specified by the - <var class="Fa">mtx</var>, <var class="Fa">rm</var>, or - <var class="Fa">rw</var> parameter. The associated lock must be held while - stopping or rescheduling the callout. The callout subsystem acquires the - associated lock before calling the callout function and releases it after - the function returns. If the callout was cancelled while the callout - subsystem waited for the associated lock, the callout function is not - called, and the associated lock is released. This ensures that stopping or - rescheduling the callout will abort any previously scheduled invocation.</p> -<p class="Pp" id="callout_init_rm">A sleepable read-mostly lock (one initialized - with the <code class="Dv">RM_SLEEPABLE</code> flag) may not be used with - <a class="permalink" href="#callout_init_rm"><code class="Fn">callout_init_rm</code></a>(). - Similarly, other sleepable lock types such as <a class="Xr">sx(9)</a> and - <a class="Xr">lockmgr(9)</a> cannot be used with callouts because sleeping - is not permitted in the callout subsystem.</p> -<p class="Pp" id="callout_init_mtx~2">These <var class="Fa">flags</var> may be - specified for - <a class="permalink" href="#callout_init_mtx~2"><code class="Fn">callout_init_mtx</code></a>(), - <code class="Fn">callout_init_rm</code>(), or - <a class="permalink" href="#callout_init_rw~2"><code class="Fn" id="callout_init_rw~2">callout_init_rw</code></a>():</p> -<dl class="Bl-tag"> - <dt id="CALLOUT_RETURNUNLOCKED"><a class="permalink" href="#CALLOUT_RETURNUNLOCKED"><code class="Dv">CALLOUT_RETURNUNLOCKED</code></a></dt> - <dd>The callout function will release the associated lock itself, so the - callout subsystem should not attempt to unlock it after the callout - function returns.</dd> - <dt id="CALLOUT_SHAREDLOCK"><a class="permalink" href="#CALLOUT_SHAREDLOCK"><code class="Dv">CALLOUT_SHAREDLOCK</code></a></dt> - <dd>The lock is only acquired in read mode when running the callout handler. - This flag is ignored by <code class="Fn">callout_init_mtx</code>().</dd> -</dl> -<p class="Pp" id="callout_stop">The function - <a class="permalink" href="#callout_stop"><code class="Fn">callout_stop</code></a>() - cancels a callout <var class="Fa">c</var> if it is currently pending. If the - callout is pending and successfully stopped, then - <code class="Fn">callout_stop</code>() returns a value of one. If the - callout is not set, or has already been serviced, then negative one is - returned. If the callout is currently being serviced and cannot be stopped, - then zero will be returned. If the callout is currently being serviced and - cannot be stopped, and at the same time a next invocation of the same - callout is also scheduled, then <code class="Fn">callout_stop</code>() - unschedules the next run and returns zero. If the callout has an associated - lock, then that lock must be held when this function is called.</p> -<p class="Pp" id="callout_drain">The function - <a class="permalink" href="#callout_drain"><code class="Fn">callout_drain</code></a>() - is identical to <code class="Fn">callout_stop</code>() except that it will - wait for the callout <var class="Fa">c</var> to complete if it is already in - progress. This function MUST NOT be called while holding any locks on which - the callout might block, or deadlock will result. Note that if the callout - subsystem has already begun processing this callout, then the callout - function may be invoked before <code class="Fn">callout_drain</code>() - returns. However, the callout subsystem does guarantee that the callout will - be fully stopped before <code class="Fn">callout_drain</code>() returns.</p> -<p class="Pp" id="callout_reset">The - <a class="permalink" href="#callout_reset"><code class="Fn">callout_reset</code></a>() - and - <a class="permalink" href="#callout_schedule"><code class="Fn" id="callout_schedule">callout_schedule</code></a>() - function families schedule a future function invocation for callout - <var class="Fa">c</var>. If <var class="Fa">c</var> already has a pending - callout, it is cancelled before the new invocation is scheduled. These - functions return a value of one if a pending callout was cancelled and zero - if there was no pending callout. If the callout has an associated lock, then - that lock must be held when any of these functions are called.</p> -<p class="Pp">The time at which the callout function will be invoked is - determined by either the <var class="Fa">ticks</var> argument or the - <var class="Fa">sbt</var>, <var class="Fa">pr</var>, and - <var class="Fa">flags</var> arguments. When <var class="Fa">ticks</var> is - used, the callout is scheduled to execute after - <var class="Fa">ticks</var><span class="No">/hz</span> seconds. Non-positive - values of <var class="Fa">ticks</var> are silently converted to the value - ‘1’.</p> -<p class="Pp">The <var class="Fa">sbt</var>, <var class="Fa">pr</var>, and - <var class="Fa">flags</var> arguments provide more control over the - scheduled time including support for higher resolution times, specifying the - precision of the scheduled time, and setting an absolute deadline instead of - a relative timeout. The callout is scheduled to execute in a time window - which begins at the time specified in <var class="Fa">sbt</var> and extends - for the amount of time specified in <var class="Fa">pr</var>. If - <var class="Fa">sbt</var> specifies a time in the past, the window is - adjusted to start at the current time. A non-zero value for - <var class="Fa">pr</var> allows the callout subsystem to coalesce callouts - scheduled close to each other into fewer timer interrupts, reducing - processing overhead and power consumption. These <var class="Fa">flags</var> - may be specified to adjust the interpretation of <var class="Fa">sbt</var> - and <var class="Fa">pr</var>:</p> -<dl class="Bl-tag"> - <dt id="C_ABSOLUTE"><a class="permalink" href="#C_ABSOLUTE"><code class="Dv">C_ABSOLUTE</code></a></dt> - <dd>Handle the <var class="Fa">sbt</var> argument as an absolute time since - boot. By default, <var class="Fa">sbt</var> is treated as a relative - amount of time, similar to <var class="Fa">ticks</var>.</dd> - <dt id="C_DIRECT_EXEC"><a class="permalink" href="#C_DIRECT_EXEC"><code class="Dv">C_DIRECT_EXEC</code></a></dt> - <dd>Run the handler directly from hardware interrupt context instead of from - the softclock thread. This reduces latency and overhead, but puts more - constraints on the callout function. Callout functions run in this context - may use only spin mutexes for locking and should be as small as possible - because they run with absolute priority.</dd> - <dt id="C_PREL"><a class="permalink" href="#C_PREL"><code class="Fn">C_PREL</code></a>()</dt> - <dd>Specifies relative event time precision as binary logarithm of time - interval divided by acceptable time deviation: 1 -- 1/2, 2 -- 1/4, etc. - Note that the larger of <var class="Fa">pr</var> or this value is used as - the length of the time window. Smaller values (which result in larger time - intervals) allow the callout subsystem to aggregate more events in one - timer interrupt.</dd> - <dt id="C_PRECALC"><a class="permalink" href="#C_PRECALC"><code class="Dv">C_PRECALC</code></a></dt> - <dd>The <var class="Fa">sbt</var> argument specifies the absolute time at - which the callout should be run, and the <var class="Fa">pr</var> argument - specifies the requested precision, which will not be adjusted during the - scheduling process. The <var class="Fa">sbt</var> and - <var class="Fa">pr</var> values should be calculated by an earlier call to - <code class="Fn">callout_when</code>() which uses the user-supplied - <var class="Fa">sbt</var>, <var class="Fa">pr</var>, and - <var class="Fa">flags</var> values.</dd> - <dt id="C_HARDCLOCK"><a class="permalink" href="#C_HARDCLOCK"><code class="Dv">C_HARDCLOCK</code></a></dt> - <dd>Align the timeouts to - <a class="permalink" href="#hardclock"><code class="Fn" id="hardclock">hardclock</code></a>() - calls if possible.</dd> -</dl> -<p class="Pp" id="callout_reset~2">The - <a class="permalink" href="#callout_reset~2"><code class="Fn">callout_reset</code></a>() - functions accept a <var class="Fa">func</var> argument which identifies the - function to be called when the time expires. It must be a pointer to a - function that takes a single <var class="Fa">void *</var> argument. Upon - invocation, <var class="Fa">func</var> will receive - <var class="Fa">arg</var> as its only argument. The - <a class="permalink" href="#callout_schedule~2"><code class="Fn" id="callout_schedule~2">callout_schedule</code></a>() - functions reuse the <var class="Fa">func</var> and <var class="Fa">arg</var> - arguments from the previous callout. Note that one of the - <code class="Fn">callout_reset</code>() functions must always be called to - initialize <var class="Fa">func</var> and <var class="Fa">arg</var> before - one of the <code class="Fn">callout_schedule</code>() functions can be - used.</p> -<p class="Pp" id="callout_reset_on">The callout subsystem provides a softclock - thread for each CPU in the system. Callouts are assigned to a single CPU and - are executed by the softclock thread for that CPU. Initially, callouts are - assigned to CPU 0. The - <a class="permalink" href="#callout_reset_on"><code class="Fn">callout_reset_on</code></a>(), - <a class="permalink" href="#callout_reset_sbt_on"><code class="Fn" id="callout_reset_sbt_on">callout_reset_sbt_on</code></a>(), - <a class="permalink" href="#callout_schedule_on"><code class="Fn" id="callout_schedule_on">callout_schedule_on</code></a>() - and - <a class="permalink" href="#callout_schedule_sbt_on"><code class="Fn" id="callout_schedule_sbt_on">callout_schedule_sbt_on</code></a>() - functions assign the callout to CPU <var class="Fa">cpu</var>. The - <a class="permalink" href="#callout_reset_curcpu"><code class="Fn" id="callout_reset_curcpu">callout_reset_curcpu</code></a>(), - <a class="permalink" href="#callout_reset_sbt_curpu"><code class="Fn" id="callout_reset_sbt_curpu">callout_reset_sbt_curpu</code></a>(), - <a class="permalink" href="#callout_schedule_curcpu"><code class="Fn" id="callout_schedule_curcpu">callout_schedule_curcpu</code></a>() - and - <a class="permalink" href="#callout_schedule_sbt_curcpu"><code class="Fn" id="callout_schedule_sbt_curcpu">callout_schedule_sbt_curcpu</code></a>() - functions assign the callout to the current CPU. The - <code class="Fn">callout_reset</code>(), - <a class="permalink" href="#callout_reset_sbt"><code class="Fn" id="callout_reset_sbt">callout_reset_sbt</code></a>(), - <code class="Fn">callout_schedule</code>() and - <a class="permalink" href="#callout_schedule_sbt"><code class="Fn" id="callout_schedule_sbt">callout_schedule_sbt</code></a>() - functions schedule the callout to execute in the softclock thread of the CPU - to which it is currently assigned.</p> -<p class="Pp">Softclock threads are not pinned to their respective CPUs by - default. The softclock thread for CPU 0 can be pinned to CPU 0 by setting - the <var class="Va">kern.pin_default_swi</var> loader tunable to a non-zero - value. Softclock threads for CPUs other than zero can be pinned to their - respective CPUs by setting the <var class="Va">kern.pin_pcpu_swi</var> - loader tunable to a non-zero value.</p> -<p class="Pp" id="callout_pending">The macros - <a class="permalink" href="#callout_pending"><code class="Fn">callout_pending</code></a>(), - <code class="Fn">callout_active</code>() and - <code class="Fn">callout_deactivate</code>() provide access to the current - state of the callout. The <code class="Fn">callout_pending</code>() macro - checks whether a callout is <i class="Em">pending</i>; a callout is - considered <i class="Em">pending</i> when a timeout has been set but the - time has not yet arrived. Note that once the timeout time arrives and the - callout subsystem starts to process this callout, - <code class="Fn">callout_pending</code>() will return - <code class="Dv">FALSE</code> even though the callout function may not have - finished (or even begun) executing. The - <code class="Fn">callout_active</code>() macro checks whether a callout is - marked as <i class="Em">active</i>, and the - <code class="Fn">callout_deactivate</code>() macro clears the callout's - <i class="Em">active</i> flag. The callout subsystem marks a callout as - <i class="Em">active</i> when a timeout is set and it clears the - <i class="Em">active</i> flag in <code class="Fn">callout_stop</code>() and - <code class="Fn">callout_drain</code>(), but it - <a class="permalink" href="#does"><i class="Em" id="does">does not</i></a> - clear it when a callout expires normally via the execution of the callout - function.</p> -<p class="Pp" id="callout_when">The - <a class="permalink" href="#callout_when"><code class="Fn">callout_when</code></a>() - function may be used to pre-calculate the absolute time at which the timeout - should be run and the precision of the scheduled run time according to the - required time <var class="Fa">sbt</var>, precision - <var class="Fa">precision</var>, and additional adjustments requested by the - <var class="Fa">flags</var> argument. Flags accepted by the - <code class="Fn">callout_when</code>() function are the same as flags for - the <code class="Fn">callout_reset</code>() function. The resulting time is - assigned to the variable pointed to by the <var class="Fa">sbt_res</var> - argument, and the resulting precision is assigned to - <var class="Fa">*precision_res</var>. When passing the results to - <var class="Fa">callout_reset</var>, add the <var class="Va">C_PRECALC</var> - flag to <var class="Fa">flags</var>, to avoid incorrect re-adjustment. The - function is intended for situations where precise time of the callout run - should be known in advance, since trying to read this time from the callout - structure itself after a <code class="Fn">callout_reset</code>() call is - racy.</p> -<section class="Ss"> -<h2 class="Ss" id="Avoiding_Race_Conditions"><a class="permalink" href="#Avoiding_Race_Conditions">Avoiding - Race Conditions</a></h2> -<p class="Pp">The callout subsystem invokes callout functions from its own - thread context. Without some kind of synchronization, it is possible that a - callout function will be invoked concurrently with an attempt to stop or - reset the callout by another thread. In particular, since callout functions - typically acquire a lock as their first action, the callout function may - have already been invoked, but is blocked waiting for that lock at the time - that another thread tries to reset or stop the callout.</p> -<p class="Pp">There are three main techniques for addressing these - synchronization concerns. The first approach is preferred as it is the - simplest:</p> -<ol class="Bl-enum Bd-indent"> - <li id="callout_init_mtx~3">Callouts can be associated with a specific lock - when they are initialized by - <a class="permalink" href="#callout_init_mtx~3"><code class="Fn">callout_init_mtx</code></a>(), - <code class="Fn">callout_init_rm</code>(), or - <a class="permalink" href="#callout_init_rw~3"><code class="Fn" id="callout_init_rw~3">callout_init_rw</code></a>(). - When a callout is associated with a lock, the callout subsystem acquires - the lock before the callout function is invoked. This allows the callout - subsystem to transparently handle races between callout cancellation, - scheduling, and execution. Note that the associated lock must be acquired - before calling <code class="Fn">callout_stop</code>() or one of the - <code class="Fn">callout_reset</code>() or - <code class="Fn">callout_schedule</code>() functions to provide this - safety. - <p class="Pp" id="callout_init~2">A callout initialized via - <a class="permalink" href="#callout_init~2"><code class="Fn">callout_init</code></a>() - with <var class="Fa">mpsafe</var> set to zero is implicitly associated - with the <var class="Va">Giant</var> mutex. If - <var class="Va">Giant</var> is held when cancelling or rescheduling the - callout, then its use will prevent races with the callout function.</p> - </li> - <li>The return value from <code class="Fn">callout_stop</code>() (or the - <code class="Fn">callout_reset</code>() and - <code class="Fn">callout_schedule</code>() function families) indicates - whether or not the callout was removed. If it is known that the callout - was set and the callout function has not yet executed, then a return value - of <code class="Dv">FALSE</code> indicates that the callout function is - about to be called. For example: - <div class="Bd Pp Bd-indent Li"> - <pre>if (sc->sc_flags & SCFLG_CALLOUT_RUNNING) { - if (callout_stop(&sc->sc_callout)) { - sc->sc_flags &= ~SCFLG_CALLOUT_RUNNING; - /* successfully stopped */ - } else { - /* - * callout has expired and callout - * function is about to be executed - */ - } -}</pre> - </div> - </li> - <li>The <code class="Fn">callout_pending</code>(), - <code class="Fn">callout_active</code>() and - <code class="Fn">callout_deactivate</code>() macros can be used together - to work around the race conditions. When a callout's timeout is set, the - callout subsystem marks the callout as both <i class="Em">active</i> and - <i class="Em">pending</i>. When the timeout time arrives, the callout - subsystem begins processing the callout by first clearing the - <i class="Em">pending</i> flag. It then invokes the callout function - without changing the <i class="Em">active</i> flag, and does not clear the - <i class="Em">active</i> flag even after the callout function returns. The - mechanism described here requires the callout function itself to clear the - <i class="Em">active</i> flag using the - <code class="Fn">callout_deactivate</code>() macro. The - <code class="Fn">callout_stop</code>() and - <code class="Fn">callout_drain</code>() functions always clear both the - <i class="Em">active</i> and <i class="Em">pending</i> flags before - returning. - <p class="Pp" id="callout_pending~2">The callout function should first check - the <i class="Em">pending</i> flag and return without action if - <a class="permalink" href="#callout_pending~2"><code class="Fn">callout_pending</code></a>() - returns <code class="Dv">TRUE</code>. This indicates that the callout - was rescheduled using <code class="Fn">callout_reset</code>() just - before the callout function was invoked. If - <code class="Fn">callout_active</code>() returns - <code class="Dv">FALSE</code> then the callout function should also - return without action. This indicates that the callout has been stopped. - Finally, the callout function should call - <code class="Fn">callout_deactivate</code>() to clear the - <i class="Em">active</i> flag. For example:</p> - <div class="Bd Pp Bd-indent Li"> - <pre>mtx_lock(&sc->sc_mtx); -if (callout_pending(&sc->sc_callout)) { - /* callout was reset */ - mtx_unlock(&sc->sc_mtx); - return; -} -if (!callout_active(&sc->sc_callout)) { - /* callout was stopped */ - mtx_unlock(&sc->sc_mtx); - return; -} -callout_deactivate(&sc->sc_callout); -/* rest of callout function */</pre> - </div> - <p class="Pp" id="callout_stop~2">Together with appropriate synchronization, - such as the mutex used above, this approach permits the - <a class="permalink" href="#callout_stop~2"><code class="Fn">callout_stop</code></a>() - and <code class="Fn">callout_reset</code>() functions to be used at any - time without races. For example:</p> - <div class="Bd Pp Bd-indent Li"> - <pre>mtx_lock(&sc->sc_mtx); -callout_stop(&sc->sc_callout); -/* The callout is effectively stopped now. */</pre> - </div> - <p class="Pp" id="callout_deactivate">If the callout is still pending then - these functions operate normally, but if processing of the callout has - already begun then the tests in the callout function cause it to return - without further action. Synchronization between the callout function and - other code ensures that stopping or resetting the callout will never be - attempted while the callout function is past the - <a class="permalink" href="#callout_deactivate"><code class="Fn">callout_deactivate</code></a>() - call.</p> - <p class="Pp" id="callout_active">The above technique additionally ensures - that the <i class="Em">active</i> flag always reflects whether the - callout is effectively enabled or disabled. If - <a class="permalink" href="#callout_active"><code class="Fn">callout_active</code></a>() - returns false, then the callout is effectively disabled, since even if - the callout subsystem is actually just about to invoke the callout - function, the callout function will return without action.</p> - </li> -</ol> -<p class="Pp" id="callout_drain~2">There is one final race condition that must - be considered when a callout is being stopped for the last time. In this - case it may not be safe to let the callout function itself detect that the - callout was stopped, since it may need to access data objects that have - already been destroyed or recycled. To ensure that the callout is completely - finished, a call to - <a class="permalink" href="#callout_drain~2"><code class="Fn">callout_drain</code></a>() - should be used. In particular, a callout should always be drained prior to - destroying its associated lock or releasing the storage for the callout - structure.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">callout_active</code>() macro returns the - state of a callout's <i class="Em">active</i> flag.</p> -<p class="Pp">The <code class="Fn">callout_pending</code>() macro returns the - state of a callout's <i class="Em">pending</i> flag.</p> -<p class="Pp">The <code class="Fn">callout_reset</code>() and - <code class="Fn">callout_schedule</code>() function families return a value - of one if the callout was pending before the new function invocation was - scheduled.</p> -<p class="Pp">The <code class="Fn">callout_stop</code>() and - <code class="Fn">callout_drain</code>() functions return a value of one if - the callout was still pending when it was called, a zero if the callout - could not be stopped and a negative one is it was either not running or has - already completed.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">dtrace_callout_execute(4)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp"><span class="Ux">FreeBSD</span> initially used the long standing - <span class="Ux">BSD</span> linked list callout mechanism which offered O(n) - insertion and removal running time but did not generate or require handles - for untimeout operations.</p> -<p class="Pp"><span class="Ux">FreeBSD 3.0</span> introduced a new set of - timeout and untimeout routines from <span class="Ux">NetBSD</span> based on - the work of <span class="An">Adam M. Costello</span> and - <span class="An">George Varghese</span>, published in a technical report - entitled <span class="RsT">Redesigning the BSD Callout and Timer - Facilities</span> and modified for inclusion in - <span class="Ux">FreeBSD</span> by <span class="An">Justin T. Gibbs</span>. - The original work on the data structures used in that implementation was - published by <span class="An">G. Varghese</span> and <span class="An">A. - Lauck</span> in the paper <span class="RsT">Hashed and Hierarchical Timing - Wheels: Data Structures for the Efficient Implementation of a Timer - Facility</span> in the <i class="RsB">Proceedings of the 11th ACM Annual - Symposium on Operating Systems Principles.</i></p> -<p class="Pp"><span class="Ux">FreeBSD 3.3</span> introduced the first - implementations of <code class="Fn">callout_init</code>(), - <code class="Fn">callout_reset</code>(), and - <code class="Fn">callout_stop</code>() which permitted callers to allocate - dedicated storage for callouts. This ensured that a callout would always - fire unlike <code class="Fn">timeout</code>() which would silently fail if - it was unable to allocate a callout.</p> -<p class="Pp"><span class="Ux">FreeBSD 5.0</span> permitted callout handlers to - be tagged as MPSAFE via <code class="Fn">callout_init</code>().</p> -<p class="Pp"><span class="Ux">FreeBSD 5.3</span> introduced - <code class="Fn">callout_drain</code>().</p> -<p class="Pp"><span class="Ux">FreeBSD 6.0</span> introduced - <code class="Fn">callout_init_mtx</code>().</p> -<p class="Pp"><span class="Ux">FreeBSD 8.0</span> introduced per-CPU callout - wheels, <code class="Fn">callout_init_rw</code>(), and - <code class="Fn">callout_schedule</code>().</p> -<p class="Pp"><span class="Ux">FreeBSD 9.0</span> changed the underlying timer - interrupts used to drive callouts to prefer one-shot event timers instead of - a periodic timer interrupt.</p> -<p class="Pp"><span class="Ux">FreeBSD 10.0</span> switched the callout wheel to - support tickless operation. These changes introduced - <var class="Vt">sbintime_t</var> and the - <code class="Fn">callout_reset_sbt*</code>() family of functions. - <span class="Ux">FreeBSD 10.0</span> also added - <code class="Dv">C_DIRECT_EXEC</code> and - <code class="Fn">callout_init_rm</code>().</p> -<p class="Pp"><span class="Ux">FreeBSD 10.2</span> introduced the - <code class="Fn">callout_schedule_sbt*</code>() family of functions.</p> -<p class="Pp"><span class="Ux">FreeBSD 11.0</span> introduced - <code class="Fn">callout_async_drain</code>(). <span class="Ux">FreeBSD - 11.1</span> introduced <code class="Fn">callout_when</code>(). - <span class="Ux">FreeBSD 13.0</span> removed - <var class="Vt">timeout_t</var>, <code class="Fn">timeout</code>(), and - <code class="Fn">untimeout</code>().</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 4, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/casuword.9 3.html b/static/freebsd/man9/casuword.9 3.html deleted file mode 100644 index eaa380ab..00000000 --- a/static/freebsd/man9/casuword.9 3.html +++ /dev/null @@ -1,88 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">CASU(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">CASU(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">casueword</code>, - <code class="Nm">casueword32</code>, <code class="Nm">casuword</code>, - <code class="Nm">casuword32</code> — <span class="Nd">fetch, compare - and store data from user-space</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">casueword</code>(<var class="Fa">volatile u_long *base</var>, - <var class="Fa">u_long oldval</var>, <var class="Fa">u_long *oldvalp</var>, - <var class="Fa">u_long newval</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">casueword32</code>(<var class="Fa">volatile uint32_t - *base</var>, <var class="Fa">uint32_t oldval</var>, <var class="Fa">uint32_t - *oldvalp</var>, <var class="Fa">uint32_t newval</var>);</p> -<p class="Pp"><var class="Ft">u_long</var> - <br/> - <code class="Fn">casuword</code>(<var class="Fa">volatile u_long *base</var>, - <var class="Fa">u_long oldval</var>, <var class="Fa">u_long - newval</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">casuword32</code>(<var class="Fa">volatile uint32_t - *base</var>, <var class="Fa">uint32_t oldval</var>, <var class="Fa">uint32_t - newval</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">casueword</code> functions are designed to - perform atomic compare-and-swap operation on the value in the usermode - memory of the current process.</p> -<p class="Pp" id="casueword32">The <code class="Nm">casueword</code> routines - reads the value from user memory with address <span class="Pa">base</span>, - and compare the value read with <span class="Pa">oldval</span>. If the - values are equal, <span class="Pa">newval</span> is written to the - <span class="Pa">*base</span>. In case of - <a class="permalink" href="#casueword32"><code class="Fn">casueword32</code></a>() - and - <a class="permalink" href="#casueword"><code class="Fn" id="casueword">casueword</code></a>(), - old value is stored into the (kernel-mode) variable pointed by - <span class="Pa">*oldvalp</span>. The userspace value must be naturally - aligned.</p> -<p class="Pp" id="casuword">The callers of - <a class="permalink" href="#casuword"><code class="Fn">casuword</code></a>() - and - <a class="permalink" href="#casuword32"><code class="Fn" id="casuword32">casuword32</code></a>() - functions cannot distinguish between -1 read from userspace and function - failure.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">casuword</code>() and - <code class="Fn">casuword32</code>() functions return the data fetched or -1 - on failure. The <code class="Fn">casueword</code>() and - <code class="Fn">casueword32</code>() functions return 0 on success, -1 on - failure to access memory, and 1 when comparison or store failed. The store - can fail on load-linked/store-conditional architectures.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">atomic(9)</a>, <a class="Xr">fetch(9)</a>, - <a class="Xr">store(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 19, 2019</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/cd.9 3.html b/static/freebsd/man9/cd.9 3.html deleted file mode 100644 index 344017b2..00000000 --- a/static/freebsd/man9/cd.9 3.html +++ /dev/null @@ -1,95 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">CD(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">CD(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">cd</code> — <span class="Nd">CDROM driver - for the CAM SCSI subsystem</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">cd</code> device driver provides a read-only - interface for CDROM drives (SCSI type 5) and WORM drives (SCSI type 4) that - support CDROM type commands. Some drives do not behave as the driver - expects. See the <a class="Sx" href="#QUIRKS">QUIRKS</a> section for - information on possible flags.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="QUIRKS"><a class="permalink" href="#QUIRKS">QUIRKS</a></h1> -<p class="Pp">Each CD-ROM device can have different interpretations of the SCSI - spec. This can lead to drives requiring special handling in the driver. The - following is a list of quirks that the driver recognizes.</p> -<dl class="Bl-tag"> - <dt id="CD_Q_NO_TOUCH"><a class="permalink" href="#CD_Q_NO_TOUCH"><code class="Dv">CD_Q_NO_TOUCH</code></a></dt> - <dd>This flag tells the driver not to probe the drive at attach time to see if - there is a disk in the drive and find out what size it is. This flag is - currently unimplemented in the CAM <code class="Nm">cd</code> driver.</dd> - <dt id="CD_Q_BCD_TRACKS"><a class="permalink" href="#CD_Q_BCD_TRACKS"><code class="Dv">CD_Q_BCD_TRACKS</code></a></dt> - <dd>This flag is for broken drives that return the track numbers in packed BCD - instead of straight decimal. If the drive seems to skip tracks (tracks - 10-15 are skipped) then you have a drive that is in need of this - flag.</dd> - <dt id="CD_Q_NO_CHANGER"><a class="permalink" href="#CD_Q_NO_CHANGER"><code class="Dv">CD_Q_NO_CHANGER</code></a></dt> - <dd>This flag tells the driver that the device in question is not a changer. - This is only necessary for a CDROM device with multiple luns that are not - a part of a changer.</dd> - <dt id="CD_Q_CHANGER"><a class="permalink" href="#CD_Q_CHANGER"><code class="Dv">CD_Q_CHANGER</code></a></dt> - <dd>This flag tells the driver that the given device is a multi-lun changer. - In general, the driver will figure this out automatically when it sees a - LUN greater than 0. Setting this flag only has the effect of telling the - driver to run the initial read capacity command for LUN 0 of the changer - through the changer scheduling code.</dd> - <dt id="CD_Q_10_BYTE_ONLY"><a class="permalink" href="#CD_Q_10_BYTE_ONLY"><code class="Dv">CD_Q_10_BYTE_ONLY</code></a></dt> - <dd>This flag tells the driver that the given device only accepts 10 byte MODE - SENSE/MODE SELECT commands. In general these types of quirks should not be - added to the <a class="Xr">cd(4)</a> driver. The reason is that the driver - does several things to attempt to determine whether the drive in question - needs 10 byte commands. First, it issues a CAM Path Inquiry command to - determine whether the protocol that the drive speaks typically only allows - 10 byte commands. (ATAPI and USB are two prominent examples of protocols - where you generally only want to send 10 byte commands.) Then, if it gets - an ILLEGAL REQUEST error back from a 6 byte MODE SENSE or MODE SELECT - command, it attempts to send the 10 byte version of the command instead. - The only reason you would need a quirk is if your drive uses a protocol - (e.g., SCSI) that typically does not have a problem with 6 byte - commands.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="FILES"><a class="permalink" href="#FILES">FILES</a></h1> -<dl class="Bl-tag Bl-compact"> - <dt><span class="Pa">/sys/cam/scsi/scsi_cd.c</span></dt> - <dd>is the driver source file.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">cd(4)</a>, <a class="Xr">scsi(4)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">cd</code> manual page first appeared in - <span class="Ux">FreeBSD 2.2</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">John-Mark - Gurney</span> - <<a class="Mt" href="mailto:jmg@FreeBSD.org">jmg@FreeBSD.org</a>>. It - was updated for CAM and <span class="Ux">FreeBSD 3.0</span> by - <span class="An">Kenneth Merry</span> - <<a class="Mt" href="mailto:ken@FreeBSD.org">ken@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 25, 2014</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/cdefs.9 3.html b/static/freebsd/man9/cdefs.9 3.html deleted file mode 100644 index 7c6680b3..00000000 --- a/static/freebsd/man9/cdefs.9 3.html +++ /dev/null @@ -1,937 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">CDEFS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">CDEFS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">cdefs</code> — <span class="Nd">compiler - portability macro definitions</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><code class="In"><<a class="In">sys/cdefs.h</a>></code> - defines macros for compiler, C language standard portability, POSIX - standards compliance and symbol visibility. It defines programming - interfaces for the system header files to adopt to the many environments - <span class="Ux">FreeBSD</span> supports compilation for. It defines - convenience macros for the <span class="Ux">FreeBSD</span> sources, tailored - to the base system's needs.</p> -<p class="Pp">Most of these macros are for use inside the - <span class="Ux">FreeBSD</span> sources only. They are not intended as a - general portability layer.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="Supported_Compilers"><a class="permalink" href="#Supported_Compilers">Supported - Compilers</a></h1> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt>Compilers supported for building programs on - <span class="Ux">FreeBSD</span>:</dt> - <dd> - <table class="Bl-column Bd-indent"> - <tr id="Compiler"> - <td><a class="permalink" href="#Compiler"><b class="Sy">Compiler</b></a></td> - <td><a class="permalink" href="#Versions"><b class="Sy" id="Versions">Versions</b></a></td> - </tr> - <tr> - <td>gcc</td> - <td>9, 10, 11, 12, 13, 14</td> - </tr> - <tr> - <td>clang</td> - <td>10, 11, 12, 13, 14, 15, 16, 17, 18</td> - </tr> - <tr> - <td>TinyC (tcc)</td> - <td>0.9</td> - </tr> - <tr> - <td>pcc</td> - <td>1.1</td> - </tr> - </table> - <p class="Pp">Due to testing constraints, tcc and pcc may not always - work.</p> - </dd> - <dt>Compilers supported for building <span class="Ux">FreeBSD - itself:</span></dt> - <dd> - <table class="Bl-column Bd-indent"> - <tr id="Compiler~2"> - <td><a class="permalink" href="#Compiler~2"><b class="Sy">Compiler</b></a></td> - <td><a class="permalink" href="#Major"><b class="Sy" id="Major">Major - Versions Supported</b></a></td> - </tr> - <tr> - <td>gcc</td> - <td>12, 13, 14</td> - </tr> - <tr> - <td>clang</td> - <td>16, 17, 18</td> - </tr> - </table> - <p class="Pp">Please note: Not every single minor versions of these - compilers will work or are supported.</p> - </dd> -</dl> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="Macros_and_Magic_for_Programming_Environment"><a class="permalink" href="#Macros_and_Magic_for_Programming_Environment">Macros - and Magic for Programming Environment</a></h1> -<p class="Pp"><code class="Nm">cdefs</code> defines (or refrains from defining) - a number of macros to increase portability of compiled programs. These are - to allow more advanced language features to appear in header files. The - header files assume a compiler that accepts C prototype function - declarations. They also assume that the compiler accepts ANSI C89 keywords - for all language dialects.</p> -<section class="Ss"> -<h2 class="Ss" id="General_Macros"><a class="permalink" href="#General_Macros">General - Macros</a></h2> -<p class="Pp">General macros that facilitate multiple language environments and - language dialects.</p> -<table class="Bl-column"> - <tr id="Macro"> - <td><a class="permalink" href="#Macro"><b class="Sy">Macro</b></a></td> - <td><a class="permalink" href="#Description"><b class="Sy" id="Description">Description</b></a></td> - </tr> - <tr id="__volatile"> - <td><a class="permalink" href="#__volatile"><code class="Dv">__volatile</code></a></td> - <td>expands to volatile in C++ and C89 and newer environments, __volatile in - pre-ANSI environments that support this extension or nothing - otherwise.</td> - </tr> - <tr id="__inline"> - <td><a class="permalink" href="#__inline"><code class="Dv">__inline</code></a></td> - <td>expands to inline in C++ and C89 and newer environments, __inline in - pre-ANSI environments that support this extension or nothing - otherwise.</td> - </tr> - <tr id="__restrict"> - <td><a class="permalink" href="#__restrict"><code class="Dv">__restrict</code></a></td> - <td>expands to restrict in C99 and newer environments, or __restrict - otherwise.</td> - </tr> - <tr id="__CONCAT"> - <td><a class="permalink" href="#__CONCAT"><code class="Dv">__CONCAT</code></a></td> - <td>used to paste two pre-processor tokens.</td> - </tr> - <tr id="__STRING"> - <td><a class="permalink" href="#__STRING"><code class="Dv">__STRING</code></a></td> - <td>used to convert the argument to a string.</td> - </tr> - <tr id="__BEGIN_DECLS"> - <td><a class="permalink" href="#__BEGIN_DECLS"><code class="Dv">__BEGIN_DECLS</code></a></td> - <td>Start a group of functions.</td> - </tr> - <tr id="__END_DECLS"> - <td><a class="permalink" href="#__END_DECLS"><code class="Dv">__END_DECLS</code></a></td> - <td>End a group of functions. In a C environment, these are defined as - nothing. In a C++ environment, these declare the functions to have - “C” linkage.</td> - </tr> -</table> -</section> -<section class="Ss"> -<h2 class="Ss" id="Function,_Structure_and_Variable_Modifiers"><a class="permalink" href="#Function,_Structure_and_Variable_Modifiers">Function, - Structure and Variable Modifiers</a></h2> -<table class="Bl-column"> - <tr id="Macro~2"> - <td><a class="permalink" href="#Macro~2"><b class="Sy">Macro</b></a></td> - <td><a class="permalink" href="#Description~2"><b class="Sy" id="Description~2">Description</b></a></td> - </tr> - <tr id="__weak_symbol"> - <td><a class="permalink" href="#__weak_symbol"><b class="Sy">__weak_symbol</b></a></td> - <td>Declare the symbol to be a weak symbol</td> - </tr> - <tr id="__dead2"> - <td><a class="permalink" href="#__dead2"><b class="Sy">__dead2</b></a></td> - <td>Function will not return</td> - </tr> - <tr id="__pure2"> - <td><a class="permalink" href="#__pure2"><b class="Sy">__pure2</b></a></td> - <td>Function has no side effects</td> - </tr> - <tr id="__unused"> - <td><a class="permalink" href="#__unused"><b class="Sy">__unused</b></a></td> - <td>To Variable may be unused (usually arguments), so do not warn about - it</td> - </tr> - <tr id="__used"> - <td><a class="permalink" href="#__used"><b class="Sy">__used</b></a></td> - <td>Function really is used, so emit it even if it appears unused.</td> - </tr> - <tr id="__deprecated"> - <td><a class="permalink" href="#__deprecated"><b class="Sy">__deprecated</b></a></td> - <td>Function interface has been deprecated, and clients should migrate to a - new interface. A warning will be issued for clients of this - interface.</td> - </tr> - <tr id="__deprecated1(msg)"> - <td><a class="permalink" href="#__deprecated1(msg)"><b class="Sy">__deprecated1(msg)</b></a></td> - <td>Function interface has been deprecated, and clients should migrate to a - new interface. The string <var class="Fa">msg</var> will be included in a - warning issued for clients of this interface.</td> - </tr> - <tr id="__packed"> - <td><a class="permalink" href="#__packed"><b class="Sy">__packed</b></a></td> - <td>Do not have space between structure elements for natural alignment. Used - when communicating with external protocols.</td> - </tr> - <tr id="__aligned(x)"> - <td><a class="permalink" href="#__aligned(x)"><b class="Sy">__aligned(x)</b></a></td> - <td>Specify in bytes the minimum alignment for the specified field, - structure or variable</td> - </tr> - <tr id="__section(x)"> - <td><a class="permalink" href="#__section(x)"><b class="Sy">__section(x)</b></a></td> - <td>Place function or variable in section <var class="Fa">x</var></td> - </tr> - <tr id="__writeonly"> - <td><a class="permalink" href="#__writeonly"><b class="Sy">__writeonly</b></a></td> - <td>Hint that the variable is only assigned to, but do not warn about it. - Useful for macros and other places the eventual use of the result is - unknown.</td> - </tr> - <tr id="__alloc_size(x)"> - <td><a class="permalink" href="#__alloc_size(x)"><b class="Sy">__alloc_size(x)</b></a></td> - <td>The function always returns at least the number of bytes determined by - argument number Fa x</td> - </tr> - <tr id="__alloc_size2(x,n)"> - <td><a class="permalink" href="#__alloc_size2(x,n)"><b class="Sy">__alloc_size2(x,n)</b></a></td> - <td>The function always returns an array, whose size is at least the number - of bytes determined by argument number Fa x times the number of elements - specified by argument number Fa n</td> - </tr> - <tr id="__alloc_align(x)"> - <td><a class="permalink" href="#__alloc_align(x)"><b class="Sy">__alloc_align(x)</b></a></td> - <td>Function either returns a pointer aligned to <var class="Fa">x - bytes</var> or Dv NULL.</td> - </tr> - <tr id="__min_size"> - <td><a class="permalink" href="#__min_size"><b class="Sy">__min_size</b></a></td> - <td>Declare the array to have a certain, minimum size</td> - </tr> - <tr id="__malloc_like"> - <td><a class="permalink" href="#__malloc_like"><b class="Sy">__malloc_like</b></a></td> - <td>Function behaves like the “malloc” family of - functions.</td> - </tr> - <tr id="__pure"> - <td><a class="permalink" href="#__pure"><b class="Sy">__pure</b></a></td> - <td>Function has no side effects</td> - </tr> - <tr id="__always_inline"> - <td><a class="permalink" href="#__always_inline"><b class="Sy">__always_inline</b></a></td> - <td>Always inline this function when called</td> - </tr> - <tr id="__fastcall"> - <td><a class="permalink" href="#__fastcall"><b class="Sy">__fastcall</b></a></td> - <td>Use the “fastcall” ABI to call and name mangle this - function.</td> - </tr> - <tr id="__result_use_check"> - <td><a class="permalink" href="#__result_use_check"><b class="Sy">__result_use_check</b></a></td> - <td>Warn if function caller does not use its return value</td> - </tr> - <tr id="__nodiscard"> - <td><a class="permalink" href="#__nodiscard"><b class="Sy">__nodiscard</b></a></td> - <td>Equivalent to the standard “[[nodiscard]]” attribute. If - applied to a function, warn if function caller does not use its return - value. The warning may be silenced using a cast to - <var class="Vt">void</var>, or in C++, using an assignment to - <var class="Va">std::ignore</var>. If applied to a struct, C++ class or - enum, this applies to all functions returning values of that type. If - applied to a C++ constructor, this applies to creating instances of the - class using that constructor.</td> - </tr> - <tr id="__returns_twice"> - <td><a class="permalink" href="#__returns_twice"><b class="Sy">__returns_twice</b></a></td> - <td>Returns multiple times, like <a class="Xr">fork(2)</a></td> - </tr> - <tr id="__unreachable"> - <td><a class="permalink" href="#__unreachable"><b class="Sy">__unreachable</b></a></td> - <td>This code is not reachable at runtime</td> - </tr> - <tr id="__predict_true(x)"> - <td><a class="permalink" href="#__predict_true(x)"><b class="Sy">__predict_true(x)</b></a></td> - <td>Hint to the compiler that <var class="Fa">x</var> is true most of the - time. Should only be used when performance is improved for a frequently - called bit of code.</td> - </tr> - <tr id="__predict_false(x)"> - <td><a class="permalink" href="#__predict_false(x)"><b class="Sy">__predict_false(x)</b></a></td> - <td>Hint to the compiler that <var class="Fa">x</var> is false most of the - time. Should only be used when performance is improved for a frequently - called bit of code.</td> - </tr> - <tr id="__null_sentinel"> - <td><a class="permalink" href="#__null_sentinel"><b class="Sy">__null_sentinel</b></a></td> - <td>The varadic function contains a parameter that is a NULL sentinel to - mark the end of its arguments.</td> - </tr> - <tr id="__exported"> - <td><a class="permalink" href="#__exported"><b class="Sy">__exported</b></a></td> - <td></td> - </tr> - <tr id="__hidden"> - <td><a class="permalink" href="#__hidden"><b class="Sy">__hidden</b></a></td> - <td></td> - </tr> - <tr id="__printflike(fmtarg,firstvararg)"> - <td><a class="permalink" href="#__printflike(fmtarg,firstvararg)"><b class="Sy">__printflike(fmtarg,firstvararg)</b></a></td> - <td>Function is similar to - <a class="permalink" href="#printf"><code class="Fn" id="printf">printf</code></a>() - which specifies the format argument with <var class="Fa">fmtarg</var> and - where the arguments formatted by that format start with the - <var class="Fa">firstvararg</var>, with 0 meaning that - <code class="Dv">va_arg</code> is used and cannot be checked.</td> - </tr> - <tr id="__scanflike(fmtarg,firstvararg)"> - <td><a class="permalink" href="#__scanflike(fmtarg,firstvararg)"><b class="Sy">__scanflike(fmtarg,firstvararg)</b></a></td> - <td>Function is similar to - <a class="permalink" href="#scanf"><code class="Fn" id="scanf">scanf</code></a>() - which specifies the format argument with <var class="Fa">fmtarg</var> and - where the arguments formatted by that format start with the - <var class="Fa">firstvararg</var>, with 0 meaning that - <code class="Dv">va_arg</code> is used and cannot be checked.</td> - </tr> - <tr id="__format_arg(f)"> - <td><a class="permalink" href="#__format_arg(f)"><b class="Sy">__format_arg(f)</b></a></td> - <td>Specifies that arg <var class="Fa">f</var> contains a string that will - be passed to a function like <code class="Fn">printf</code>() or - <var class="Fa">scanf</var> after being translated in some way.</td> - </tr> - <tr id="__strfmonlike(fmtarg,firstvararg)"> - <td><a class="permalink" href="#__strfmonlike(fmtarg,firstvararg)"><b class="Sy">__strfmonlike(fmtarg,firstvararg)</b></a></td> - <td>Function is similar to <code class="Fn">scanf</code>() which specifies - the format argument with <var class="Fa">fmtarg</var> and where the - arguments formatted by that format start with the - <var class="Fa">firstvararg</var>, with 0 meaning that - <code class="Dv">va_arg</code> is used and cannot be checked.</td> - </tr> - <tr id="__strtimelike(fmtarg,firstvararg)"> - <td><a class="permalink" href="#__strtimelike(fmtarg,firstvararg)"><b class="Sy">__strtimelike(fmtarg,firstvararg)</b></a></td> - <td>Function is similar to <code class="Fn">scanf</code>() which specifies - the format argument with <var class="Fa">fmtarg</var> and where the - arguments formatted by that format start with the - <var class="Fa">firstvararg</var>, with 0 meaning that - <code class="Dv">va_arg</code> is used and cannot be checked.</td> - </tr> - <tr id="__printf0like(fmtarg,firstvararg)"> - <td><a class="permalink" href="#__printf0like(fmtarg,firstvararg)"><b class="Sy">__printf0like(fmtarg,firstvararg)</b></a></td> - <td>Exactly the same as - <a class="permalink" href="#__printflike"><b class="Sy" id="__printflike">__printflike</b></a> - except <var class="Fa">fmtarg</var> may be - <code class="Dv">NULL.</code></td> - </tr> - <tr id="__strong_reference(sym,aliassym)"> - <td><a class="permalink" href="#__strong_reference(sym,aliassym)"><b class="Sy">__strong_reference(sym,aliassym)</b></a></td> - <td></td> - </tr> - <tr id="__weak_reference(sym,alias)"> - <td><a class="permalink" href="#__weak_reference(sym,alias)"><b class="Sy">__weak_reference(sym,alias)</b></a></td> - <td></td> - </tr> - <tr id="__warn_references(sym,msg)"> - <td><a class="permalink" href="#__warn_references(sym,msg)"><b class="Sy">__warn_references(sym,msg)</b></a></td> - <td></td> - </tr> - <tr id="__sym_compat(sym,impl,verid)"> - <td><a class="permalink" href="#__sym_compat(sym,impl,verid)"><b class="Sy">__sym_compat(sym,impl,verid)</b></a></td> - <td></td> - </tr> - <tr id="__sym_default(sym,impl,verid)"> - <td><a class="permalink" href="#__sym_default(sym,impl,verid)"><b class="Sy">__sym_default(sym,impl,verid)</b></a></td> - <td></td> - </tr> - <tr id="__GLOBAL(sym)"> - <td><a class="permalink" href="#__GLOBAL(sym)"><b class="Sy">__GLOBAL(sym)</b></a></td> - <td></td> - </tr> - <tr id="__WEAK(sym)"> - <td><a class="permalink" href="#__WEAK(sym)"><b class="Sy">__WEAK(sym)</b></a></td> - <td></td> - </tr> - <tr id="__DECONST(type,var)"> - <td><a class="permalink" href="#__DECONST(type,var)"><b class="Sy">__DECONST(type,var)</b></a></td> - <td></td> - </tr> - <tr id="__DEVOLATILE(type,var)"> - <td><a class="permalink" href="#__DEVOLATILE(type,var)"><b class="Sy">__DEVOLATILE(type,var)</b></a></td> - <td></td> - </tr> - <tr id="__DEQUALIFY(type,var)"> - <td><a class="permalink" href="#__DEQUALIFY(type,var)"><b class="Sy">__DEQUALIFY(type,var)</b></a></td> - <td></td> - </tr> - <tr id="__RENAME(x)"> - <td><a class="permalink" href="#__RENAME(x)"><b class="Sy">__RENAME(x)</b></a></td> - <td></td> - </tr> - <tr id="__arg_type_tag"> - <td><a class="permalink" href="#__arg_type_tag"><b class="Sy">__arg_type_tag</b></a></td> - <td></td> - </tr> - <tr id="__datatype_type_tag"> - <td><a class="permalink" href="#__datatype_type_tag"><b class="Sy">__datatype_type_tag</b></a></td> - <td></td> - </tr> - <tr id="__align_up(x,y)"> - <td><a class="permalink" href="#__align_up(x,y)"><b class="Sy">__align_up(x,y)</b></a></td> - <td></td> - </tr> - <tr id="__align_down(x,y)"> - <td><a class="permalink" href="#__align_down(x,y)"><b class="Sy">__align_down(x,y)</b></a></td> - <td></td> - </tr> - <tr id="__is_aligned(x,y)"> - <td><a class="permalink" href="#__is_aligned(x,y)"><b class="Sy">__is_aligned(x,y)</b></a></td> - <td></td> - </tr> -</table> -</section> -<section class="Ss"> -<h2 class="Ss" id="Locking_and_Debugging_Macros"><a class="permalink" href="#Locking_and_Debugging_Macros">Locking - and Debugging Macros</a></h2> -<p class="Pp">Macros for lock annotation and debugging, as well as some general - debugging macros for address sanitizers.</p> -<table class="Bl-column"> - <tr id="__lock_annotate(x)"> - <td><a class="permalink" href="#__lock_annotate(x)"><b class="Sy">__lock_annotate(x)</b></a></td> - <td></td> - </tr> - <tr id="__lockable"> - <td><a class="permalink" href="#__lockable"><b class="Sy">__lockable</b></a></td> - <td></td> - </tr> - <tr id="__locks_exclusive"> - <td><a class="permalink" href="#__locks_exclusive"><b class="Sy">__locks_exclusive</b></a></td> - <td></td> - </tr> - <tr id="__locks_shared"> - <td><a class="permalink" href="#__locks_shared"><b class="Sy">__locks_shared</b></a></td> - <td></td> - </tr> - <tr id="__trylocks_exclusive"> - <td><a class="permalink" href="#__trylocks_exclusive"><b class="Sy">__trylocks_exclusive</b></a></td> - <td></td> - </tr> - <tr id="__trylocks_shared"> - <td><a class="permalink" href="#__trylocks_shared"><b class="Sy">__trylocks_shared</b></a></td> - <td></td> - </tr> - <tr id="__unlocks"> - <td><a class="permalink" href="#__unlocks"><b class="Sy">__unlocks</b></a></td> - <td></td> - </tr> - <tr id="__asserts_exclusive"> - <td><a class="permalink" href="#__asserts_exclusive"><b class="Sy">__asserts_exclusive</b></a></td> - <td></td> - </tr> - <tr id="__asserts_shared"> - <td><a class="permalink" href="#__asserts_shared"><b class="Sy">__asserts_shared</b></a></td> - <td></td> - </tr> - <tr id="__requires_exclusive"> - <td><a class="permalink" href="#__requires_exclusive"><b class="Sy">__requires_exclusive</b></a></td> - <td></td> - </tr> - <tr id="__requires_shared"> - <td><a class="permalink" href="#__requires_shared"><b class="Sy">__requires_shared</b></a></td> - <td></td> - </tr> - <tr id="__requires_unlocked"> - <td><a class="permalink" href="#__requires_unlocked"><b class="Sy">__requires_unlocked</b></a></td> - <td></td> - </tr> - <tr id="__no_lock_analysis"> - <td><a class="permalink" href="#__no_lock_analysis"><b class="Sy">__no_lock_analysis</b></a></td> - <td></td> - </tr> - <tr id="__nosanitizeaddress"> - <td><a class="permalink" href="#__nosanitizeaddress"><b class="Sy">__nosanitizeaddress</b></a></td> - <td></td> - </tr> - <tr id="__nosanitizememory"> - <td><a class="permalink" href="#__nosanitizememory"><b class="Sy">__nosanitizememory</b></a></td> - <td></td> - </tr> - <tr id="__nosanitizethread"> - <td><a class="permalink" href="#__nosanitizethread"><b class="Sy">__nosanitizethread</b></a></td> - <td></td> - </tr> - <tr id="__nostackprotector"> - <td><a class="permalink" href="#__nostackprotector"><b class="Sy">__nostackprotector</b></a></td> - <td></td> - </tr> - <tr id="__guarded_by(x)"> - <td><a class="permalink" href="#__guarded_by(x)"><b class="Sy">__guarded_by(x)</b></a></td> - <td></td> - </tr> - <tr id="__pt_guarded_by(x)"> - <td><a class="permalink" href="#__pt_guarded_by(x)"><b class="Sy">__pt_guarded_by(x)</b></a></td> - <td></td> - </tr> -</table> -</section> -<section class="Ss"> -<h2 class="Ss" id="Emulated_Keywords"><a class="permalink" href="#Emulated_Keywords">Emulated - Keywords</a></h2> -<p class="Pp">As C evolves, many of the old macros we once used have been - incorporated into the standard language. As this happens, we add support for - these keywords as macros for older compilation environments. Sometimes this - results in a nop in the older environment.</p> -<table class="Bl-column"> - <tr id="Keyword"> - <td><a class="permalink" href="#Keyword"><b class="Sy">Keyword</b></a></td> - <td><a class="permalink" href="#Description~3"><b class="Sy" id="Description~3">Description</b></a></td> - </tr> - <tr id="_Alignas(x)"> - <td><a class="permalink" href="#_Alignas(x)"><b class="Sy">_Alignas(x)</b></a></td> - <td></td> - </tr> - <tr id="_Alignof(x)"> - <td><a class="permalink" href="#_Alignof(x)"><b class="Sy">_Alignof(x)</b></a></td> - <td></td> - </tr> - <tr id="_Noreturn"> - <td><a class="permalink" href="#_Noreturn"><b class="Sy">_Noreturn</b></a></td> - <td>Expands to “[[noreturn]]” in C++-11 and newer compilation - environments, otherwise “__dead2”</td> - </tr> - <tr id="_Static_assert(x,"> - <td><a class="permalink" href="#_Static_assert(x,"><b class="Sy">_Static_assert(x, - y)</b></a></td> - <td>Compile time assertion that <var class="Fa">x</var> is true, otherwise - emit <var class="Fa">y</var> as the error message.</td> - </tr> - <tr id="_Thread_local"> - <td><a class="permalink" href="#_Thread_local"><b class="Sy">_Thread_local</b></a></td> - <td>Designate variable as thread local storage</td> - </tr> - <tr id="__generic"> - <td><a class="permalink" href="#__generic"><b class="Sy">__generic</b></a></td> - <td>implement _Generic-like features which aren't entirely possible to - emulate the _Generic keyword</td> - </tr> - <tr id="__noexcept"> - <td><a class="permalink" href="#__noexcept"><b class="Sy">__noexcept</b></a></td> - <td>to emulate the C++11 argument-less noexcept form</td> - </tr> - <tr id="__noexcept_if"> - <td><a class="permalink" href="#__noexcept_if"><b class="Sy">__noexcept_if</b></a></td> - <td>to emulate the C++11 conditional noexcept form</td> - </tr> - <tr id="_Nonnull"> - <td><a class="permalink" href="#_Nonnull"><b class="Sy">_Nonnull</b></a></td> - <td></td> - </tr> - <tr id="_Nullable"> - <td><a class="permalink" href="#_Nullable"><b class="Sy">_Nullable</b></a></td> - <td></td> - </tr> - <tr id="_Null_unspecified"> - <td><a class="permalink" href="#_Null_unspecified"><b class="Sy">_Null_unspecified</b></a></td> - <td></td> - </tr> -</table> -</section> -<section class="Ss"> -<h2 class="Ss" id="Support_Macros"><a class="permalink" href="#Support_Macros">Support - Macros</a></h2> -<p class="Pp">The following macros are defined, or have specific values, to - denote certain things about the build environment.</p> -<table class="Bl-column"> - <tr id="Macro~3"> - <td><a class="permalink" href="#Macro~3"><b class="Sy">Macro</b></a></td> - <td><a class="permalink" href="#Description~4"><b class="Sy" id="Description~4">Description</b></a></td> - </tr> - <tr id="__LONG_LONG_SUPPORTED"> - <td><a class="permalink" href="#__LONG_LONG_SUPPORTED"><b class="Sy">__LONG_LONG_SUPPORTED</b></a></td> - <td>Variables may be declared “long long”. This is defined for - C99 or newer and C++ environments.</td> - </tr> - <tr id="__STDC_LIMIT_MACROS"> - <td><a class="permalink" href="#__STDC_LIMIT_MACROS"><b class="Sy">__STDC_LIMIT_MACROS</b></a></td> - <td></td> - </tr> - <tr id="__STDC_CONSTANT_MACROS"> - <td><a class="permalink" href="#__STDC_CONSTANT_MACROS"><b class="Sy">__STDC_CONSTANT_MACROS</b></a></td> - <td></td> - </tr> -</table> -</section> -<section class="Ss"> -<h2 class="Ss" id="Convenience_Macros"><a class="permalink" href="#Convenience_Macros">Convenience - Macros</a></h2> -<p class="Pp">These macros make it easier to do a number of things, even though - strictly speaking the standard places their normal form in another - header.</p> -<table class="Bl-column"> - <tr id="Macro~4"> - <td><a class="permalink" href="#Macro~4"><b class="Sy">Macro</b></a></td> - <td><a class="permalink" href="#Description~5"><b class="Sy" id="Description~5">Description</b></a></td> - </tr> - <tr id="__offsetof(type,field)"> - <td><a class="permalink" href="#__offsetof(type,field)"><b class="Sy">__offsetof(type,field)</b></a></td> - <td></td> - </tr> - <tr id="__rangeof(type,start,end)"> - <td><a class="permalink" href="#__rangeof(type,start,end)"><b class="Sy">__rangeof(type,start,end)</b></a></td> - <td></td> - </tr> - <tr id="__containerof(x,s,m)"> - <td><a class="permalink" href="#__containerof(x,s,m)"><b class="Sy">__containerof(x,s,m)</b></a></td> - <td></td> - </tr> -</table> -</section> -<section class="Ss"> -<h2 class="Ss" id="ID_Strings"><a class="permalink" href="#ID_Strings">ID - Strings</a></h2> -<p class="Pp">This section is deprecated, but is kept around because too much - contrib software still uses these.</p> -<table class="Bl-column"> - <tr id="Macro~5"> - <td><a class="permalink" href="#Macro~5"><b class="Sy">Macro</b></a></td> - <td><a class="permalink" href="#Description~6"><b class="Sy" id="Description~6">Description</b></a></td> - </tr> - <tr id="__IDSTRING(name,string)"> - <td><a class="permalink" href="#__IDSTRING(name,string)"><b class="Sy">__IDSTRING(name,string)</b></a></td> - <td></td> - </tr> - <tr id="__FBSDID(s)"> - <td><a class="permalink" href="#__FBSDID(s)"><b class="Sy">__FBSDID(s)</b></a></td> - <td></td> - </tr> - <tr id="__RCSID(s)"> - <td><a class="permalink" href="#__RCSID(s)"><b class="Sy">__RCSID(s)</b></a></td> - <td></td> - </tr> - <tr id="__RCSID_SOURCE(s)"> - <td><a class="permalink" href="#__RCSID_SOURCE(s)"><b class="Sy">__RCSID_SOURCE(s)</b></a></td> - <td></td> - </tr> - <tr id="__SCCSID(s)"> - <td><a class="permalink" href="#__SCCSID(s)"><b class="Sy">__SCCSID(s)</b></a></td> - <td></td> - </tr> - <tr id="__COPYRIGHT(s)"> - <td><a class="permalink" href="#__COPYRIGHT(s)"><b class="Sy">__COPYRIGHT(s)</b></a></td> - <td></td> - </tr> -</table> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="Supported_C_Environments"><a class="permalink" href="#Supported_C_Environments">Supported - C Environments</a></h1> -<p class="Pp"><span class="Ux">FreeBSD</span> supports a number C standard - environments. Selection of the language dialect is a compiler-dependent - command line option, though it is usually <code class="Fl">-std=XX</code> - where XX is the standard to set for compiling, such as c89 or c23. - <span class="Ux">FreeBSD</span> provides a number of selection macros to - control visibility of symbols. Please see the section on Selection Macros - for the specifics.</p> -<dl class="Bl-tag"> - <dt>K & R</dt> - <dd>Pre-ANSI Kernighan and Ritchie C. Sometimes called “knr” or - “C78” to distinguish it from newer standards. Support for - this compilation environment is dependent on compilers supporting this - configuration. Most of the old forms of C have been deprecated or removed - in. Compilers make compiling in this mode increasingly difficult and - support for it may ultimately be removed from the tree.</dd> - <dt id="__STDC__"><span class="St">ANSI X3.159-1989 - (“ANSI C89”)</span></dt> - <dd><a class="permalink" href="#__STDC__"><code class="Dv">__STDC__</code></a> - is defined, however <code class="Dv">__STDC_VERSION__</code> is not. - <p class="Pp">Strict environment selected with - <code class="Dv">_ANSI_SOURCE</code>.</p> - </dd> - <dt id="__STDC_VERSION__"><span class="St">ISO/IEC 9899:1999 - (“ISO C99”)</span></dt> - <dd><a class="permalink" href="#__STDC_VERSION__"><code class="Dv">__STDC_VERSION__ - = 199901L</code></a> - <p class="Pp">Strict environment selected with - <code class="Dv">_C99_SOURCE</code>.</p> - </dd> - <dt id="__STDC_VERSION__~2"><span class="St">ISO/IEC 9899:2011 - (“ISO C11”)</span></dt> - <dd><a class="permalink" href="#__STDC_VERSION__~2"><code class="Dv">__STDC_VERSION__ - = 201112L</code></a> - <p class="Pp">Strict environment selected with - <code class="Dv">_C11_SOURCE</code>.</p> - </dd> - <dt id="__STDC_VERSION__~3">ISO/IEC 9899:2018 (“ISO C17”)</dt> - <dd><a class="permalink" href="#__STDC_VERSION__~3"><code class="Dv">__STDC_VERSION__ - = 201710L</code></a> - <p class="Pp">Strict environment selected with - <code class="Dv">_C11_SOURCE</code> since there are no new C17 only - symbols or macros.</p> - <p class="Pp">This version of the standard did not introduce any new - features, only made minor, technical corrections.</p> - </dd> - <dt id="__STDC_VERSION__~4"></dt> - <dd><a class="permalink" href="#__STDC_VERSION__~4"><code class="Dv">__STDC_VERSION__ - = 202311L</code></a> Strict environment selected with - <code class="Dv">_C23_SOURCE</code> though ISO C23 support is only - partially implemented.</dd> -</dl> -<p class="Pp">For more information on C standards, see - <a class="Xr">c(7)</a>.</p> -<section class="Ss"> -<h2 class="Ss" id="Programming_Environment_Selection_Macros"><a class="permalink" href="#Programming_Environment_Selection_Macros">Programming - Environment Selection Macros</a></h2> -<p class="Pp">Defining the macros outlined below requests that the system header - files provide only the functions, structures and macros (symbols) defined by - the appropriate standard, while suppressing all extensions. However, system - headers not defined by that standard may define extensions. You may only - define one of the following for any compilation unit.</p> -<table class="Bl-column"> - <tr id="Macro~6"> - <td><a class="permalink" href="#Macro~6"><b class="Sy">Macro</b></a></td> - <td><a class="permalink" href="#Environment"><b class="Sy" id="Environment">Environment</b></a></td> - </tr> - <tr id="_POSIX_SOURCE"> - <td><a class="permalink" href="#_POSIX_SOURCE"><code class="Dv">_POSIX_SOURCE</code></a></td> - <td><span class="St">IEEE Std 1003.1-1988 (“POSIX.1”)</span> - including <span class="St">ANSI X3.159-1989 - (“ANSI C89”)</span></td> - </tr> - <tr id="_POSIX_C_SOURCE"> - <td><a class="permalink" href="#_POSIX_C_SOURCE"><code class="Dv">_POSIX_C_SOURCE - = 1</code></a></td> - <td><span class="St">IEEE Std 1003.1-1988 (“POSIX.1”)</span> - including <span class="St">ANSI X3.159-1989 - (“ANSI C89”)</span></td> - </tr> - <tr id="_POSIX_C_SOURCE~2"> - <td><a class="permalink" href="#_POSIX_C_SOURCE~2"><code class="Dv">_POSIX_C_SOURCE - = 2</code></a></td> - <td><span class="St">IEEE Std 1003.1-1990 (“POSIX.1”)</span> - including <span class="St">ANSI X3.159-1989 - (“ANSI C89”)</span></td> - </tr> - <tr id="_POSIX_C_SOURCE~3"> - <td><a class="permalink" href="#_POSIX_C_SOURCE~3"><code class="Dv">_POSIX_C_SOURCE - = 199309</code></a></td> - <td><span class="St">IEEE Std 1003.1b-1993 (“POSIX.1b”)</span> - including <span class="St">ANSI X3.159-1989 - (“ANSI C89”)</span></td> - </tr> - <tr id="_POSIX_C_SOURCE~4"> - <td><a class="permalink" href="#_POSIX_C_SOURCE~4"><code class="Dv">_POSIX_C_SOURCE - = 199506</code></a></td> - <td><span class="St">IEEE Std 1003.1c-1995 (“POSIX.1c”)</span> - including <span class="St">ANSI X3.159-1989 - (“ANSI C89”)</span></td> - </tr> - <tr id="_POSIX_C_SOURCE~5"> - <td><a class="permalink" href="#_POSIX_C_SOURCE~5"><code class="Dv">_POSIX_C_SOURCE - = 200112</code></a></td> - <td><span class="St">IEEE Std 1003.1-2001 (“POSIX.1”)</span> - including <span class="St">ISO/IEC 9899:1999 - (“ISO C99”)</span></td> - </tr> - <tr id="_POSIX_C_SOURCE~6"> - <td><a class="permalink" href="#_POSIX_C_SOURCE~6"><code class="Dv">_POSIX_C_SOURCE - = 200809</code></a></td> - <td><span class="St">IEEE Std 1003.1-2008 (“POSIX.1”)</span> - including <span class="St">ISO/IEC 9899:1999 - (“ISO C99”)</span></td> - </tr> - <tr id="_POSIX_C_SOURCE~7"> - <td><a class="permalink" href="#_POSIX_C_SOURCE~7"><code class="Dv">_POSIX_C_SOURCE - = 202405</code></a></td> - <td>including ISO/IEC 9899:2018 ("ISO C17"),</td> - </tr> - <tr id="_XOPEN_SOURCE"> - <td><a class="permalink" href="#_XOPEN_SOURCE"><code class="Dv">_XOPEN_SOURCE - defined</code></a></td> - <td><span class="St">IEEE Std 1003.1-1990 (“POSIX.1”)</span> - with XPG Extensions to <span class="St">Version 1 of the Single - UNIX Specification (“SUSv1”)</span> including - <span class="St">ANSI X3.159-1989 - (“ANSI C89”)</span>. However, - <span class="Ux">FreeBSD</span> implements this as a NOP because too much - software breaks with the correct strict environment.</td> - </tr> - <tr id="_XOPEN_SOURCE~2"> - <td><a class="permalink" href="#_XOPEN_SOURCE~2"><code class="Dv">_XOPEN_SOURCE - = 500</code></a></td> - <td><span class="St">IEEE Std 1003.1c-1995 (“POSIX.1c”)</span> - and XPG extensions to <span class="St">Version 2 of the Single UNIX - Specification (“SUSv2”)</span> including - <span class="St">ANSI X3.159-1989 - (“ANSI C89”)</span></td> - </tr> - <tr id="_XOPEN_SOURCE~3"> - <td><a class="permalink" href="#_XOPEN_SOURCE~3"><code class="Dv">_XOPEN_SOURCE - = 600</code></a></td> - <td><span class="St">IEEE Std 1003.1-2001 (“POSIX.1”)</span> - and XPG extensions to <span class="St">Version 3 of the Single UNIX - Specification (“SUSv3”)</span> including - <span class="St">ISO/IEC 9899:1999 - (“ISO C99”)</span></td> - </tr> - <tr id="_XOPEN_SOURCE~4"> - <td><a class="permalink" href="#_XOPEN_SOURCE~4"><code class="Dv">_XOPEN_SOURCE - = 700</code></a></td> - <td><span class="St">IEEE Std 1003.1-2008 (“POSIX.1”)</span> - and XPG extensions to <span class="St">Version 4 of the Single UNIX - Specification (“SUSv4”)</span> including - <span class="St">ISO/IEC 9899:1999 - (“ISO C99”)</span></td> - </tr> - <tr id="_XOPEN_SOURCE~5"> - <td><a class="permalink" href="#_XOPEN_SOURCE~5"><code class="Dv">_XOPEN_SOURCE - = 800</code></a></td> - <td>and XPG extensions to Version 5 of the Single UNIX Specification - (“SUSv5”) including ISO/IEC 9899:2018 (“ISO - C17”)</td> - </tr> - <tr id="_ANSI_SOURCE"> - <td><a class="permalink" href="#_ANSI_SOURCE"><code class="Dv">_ANSI_SOURCE</code></a></td> - <td><span class="St">ANSI X3.159-1989 - (“ANSI C89”)</span></td> - </tr> - <tr id="_C99_SOURCE"> - <td><a class="permalink" href="#_C99_SOURCE"><code class="Dv">_C99_SOURCE</code></a></td> - <td><span class="St">ISO/IEC 9899:1999 - (“ISO C99”)</span></td> - </tr> - <tr id="_C11_SOURCE"> - <td><a class="permalink" href="#_C11_SOURCE"><code class="Dv">_C11_SOURCE</code></a></td> - <td><span class="St">ISO/IEC 9899:2011 - (“ISO C11”)</span></td> - </tr> - <tr id="_C23_SOURCE"> - <td><a class="permalink" href="#_C23_SOURCE"><code class="Dv">_C23_SOURCE</code></a></td> - <td></td> - </tr> - <tr id="_BSD_SOURCE"> - <td><a class="permalink" href="#_BSD_SOURCE"><code class="Dv">_BSD_SOURCE</code></a></td> - <td>Everything, including <span class="Ux">FreeBSD extensions</span></td> - </tr> -</table> -<p class="Pp">Note: and XPG extensions to Version 5 of the Single UNIX - Specification ("SUSv5") support is incomplete.</p> -<p class="Pp">When both POSIX and C environments are selected, the POSIX - environment selects which C environment is used. However, when C11 dialect - is selected with <span class="St">IEEE Std 1003.1-2008 - (“POSIX.1”)</span>, definitions for <span class="St">ISO/IEC - 9899:2011 (“ISO C11”)</span> are also included. - Likewise, when C23 dialog is selected with <span class="St">IEEE Std - 1003.1-2008 (“POSIX.1”)</span> or, definitions for are also - included.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Header_Visibility_Macros"><a class="permalink" href="#Header_Visibility_Macros">Header - Visibility Macros</a></h2> -<p class="Pp">These macros are set by <code class="Nm">cdefs</code> to control - the visibility of different standards. Users must not define these, and - doing so will produced undefined results. They are documented here for - developers working on system's header files.</p> -<table class="Bl-column"> - <tr id="__XSI_VISIBLE"> - <td><a class="permalink" href="#__XSI_VISIBLE"><code class="Dv">__XSI_VISIBLE</code></a></td> - <td>Restricts the visibility of XOPEN Single Unix Standard version. Possible - values are 500, 600, 700 or 800, corresponding to Issue 5, 6, 7, or 8 of - the Single Unix Standard. These are extra functions in addition to the - normal POSIX ones.</td> - </tr> - <tr id="__POSIX_VISIBLE"> - <td><a class="permalink" href="#__POSIX_VISIBLE"><code class="Dv">__POSIX_VISIBLE</code></a></td> - <td>Make symbols associated with certain standards versions visible. Set to - the value assigned to <code class="Dv">_POSIX_C_SOURCE</code> by - convention with 199009 for <span class="St">IEEE Std 1003.1-1988 - (“POSIX.1”)</span> and 199209 <span class="St">IEEE Std - 1003.1-1990 (“POSIX.1”)</span>.</td> - </tr> - <tr id="__ISO_C_VISIBLE"> - <td><a class="permalink" href="#__ISO_C_VISIBLE"><code class="Dv">__ISO_C_VISIBLE</code></a></td> - <td>The C level that's visible. Possible values include 1990, 1999, 2011, - 2017 and 2023 for <span class="St">ISO/IEC 9899:1990 - (“ISO C90”)</span>, <span class="St">ISO/IEC - 9899:1999 (“ISO C99”)</span>, - <span class="St">ISO/IEC 9899:2011 - (“ISO C11”)</span>, ISO/IEC 9899:2018 ("ISO - C17"), and, respectively.</td> - </tr> - <tr id="__BSD_VISIBLE"> - <td><a class="permalink" href="#__BSD_VISIBLE"><code class="Dv">__BSD_VISIBLE</code></a></td> - <td>1 if the <span class="Ux">FreeBSD</span> extensions are visible, 0 - otherwise.</td> - </tr> - <tr id="__EXT1_VISIBLE"> - <td><a class="permalink" href="#__EXT1_VISIBLE"><code class="Dv">__EXT1_VISIBLE</code></a></td> - <td>1 if the <span class="St">ISO/IEC 9899:2011 - (“ISO C11”)</span> Appendix K 3.7.4.1 extensions are - visible, 0 otherwise.</td> - </tr> -</table> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="Supported_C++_Environments"><a class="permalink" href="#Supported_C++_Environments">Supported - C++ Environments</a></h1> -<p class="Pp"><span class="Ux">FreeBSD</span> supports C++11 and newer standards - fully.</p> -<dl class="Bl-tag"> - <dt id="__cplusplus">ISO/IEC 14882:1998 ("C++98")</dt> - <dd><a class="permalink" href="#__cplusplus"><code class="Dv">__cplusplus = - 199711</code></a> - <p class="Pp">The first standardized version of C++. Unlike K & R - support in C, compilers dropped support for versions of the language - prior to C++98.</p> - </dd> - <dt id="__cplusplus~2">ISO/IEC 14882:2003 ("C++03")</dt> - <dd><a class="permalink" href="#__cplusplus~2"><code class="Dv">__cplusplus = - 199711</code></a> - <p class="Pp">Note, this is the same value as C++98. C++03 did not define a - new value for <code class="Dv">__cplusplus</code>. There is no way, at - compile time, to detect the difference. The standard resolved a number - of defect reports and slightly expanded value initialization. Most - compilers support it the same as C++98.</p> - </dd> - <dt id="__cplusplus~3">ISO/IEC 14882:2011 ("C++11")</dt> - <dd><a class="permalink" href="#__cplusplus~3"><code class="Dv">__cplusplus = - 201103</code></a></dd> - <dt id="__cplusplus~4">ISO/IEC 14882:2014 ("C++14")</dt> - <dd><a class="permalink" href="#__cplusplus~4"><code class="Dv">__cplusplus = - 201402</code></a></dd> - <dt id="__cplusplus~5">ISO/IEC 14882:2017 ("C++17")</dt> - <dd><a class="permalink" href="#__cplusplus~5"><code class="Dv">__cplusplus = - 201703</code></a></dd> - <dt id="__cplusplus~6">ISO/IEC 14882:2020 ("C++20")</dt> - <dd><a class="permalink" href="#__cplusplus~6"><code class="Dv">__cplusplus = - 202002</code></a></dd> - <dt id="__cplusplus~7">ISO/IEC 14882:2023 ("C++23")</dt> - <dd><a class="permalink" href="#__cplusplus~7"><code class="Dv">__cplusplus = - 202302</code></a></dd> -</dl> -<p class="Pp"><span class="Ux">FreeBSD</span> uses llvm project's libc++. - However, they are removing support for C++ prior to C++11. While programs - can still build with earlier environments for now, these changes mean that - <code class="Fl">-pedantic-errors</code> cannot be reliably enabled for - standards older than C++11.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp"><code class="In"><<a class="In">sys/cdefs.h</a>></code> - first appeared in <span class="Ux">4.3BSD-NET/2</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 9, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/cnv.9 4.html b/static/freebsd/man9/cnv.9 4.html deleted file mode 100644 index bca0c09f..00000000 --- a/static/freebsd/man9/cnv.9 4.html +++ /dev/null @@ -1,278 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">CNV(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">CNV(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">cnvlist_get</code>, - <code class="Nm">cnvlist_take</code>, <code class="Nm">cnvlist_free</code> - — <span class="Nd">API for managing name/value pairs by - cookie</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LIBRARY"><a class="permalink" href="#LIBRARY">LIBRARY</a></h1> -<p class="Pp"><span class="Lb">Name/value pairs library (libnv, -lnv)</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/cnv.h</a>></code></p> -<p class="Pp"><var class="Ft">const char *</var> - <br/> - <code class="Fn">cnvlist_name</code>(<var class="Fa" style="white-space: nowrap;">const - void *cookie</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">cnvlist_type</code>(<var class="Fa" style="white-space: nowrap;">const - void *cookie</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">cnvlist_get_bool</code>(<var class="Fa" style="white-space: nowrap;">const - void *cookie</var>);</p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">cnvlist_get_number</code>(<var class="Fa" style="white-space: nowrap;">const - void *cookie</var>);</p> -<p class="Pp"><var class="Ft">const char *</var> - <br/> - <code class="Fn">cnvlist_get_string</code>(<var class="Fa" style="white-space: nowrap;">const - void *cookie</var>);</p> -<p class="Pp"><var class="Ft">const nvlist_t *</var> - <br/> - <code class="Fn">cnvlist_get_nvlist</code>(<var class="Fa" style="white-space: nowrap;">const - void *cookie</var>);</p> -<p class="Pp"><var class="Ft">const void *</var> - <br/> - <code class="Fn">cnvlist_get_binary</code>(<var class="Fa" style="white-space: nowrap;">const - void *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t - *sizep</var>);</p> -<p class="Pp"><var class="Ft">const bool *</var> - <br/> - <code class="Fn">cnvlist_get_bool_array</code>(<var class="Fa" style="white-space: nowrap;">const - void *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t - *nitemsp</var>);</p> -<p class="Pp"><var class="Ft">const uint64_t *</var> - <br/> - <code class="Fn">cnvlist_get_number_array</code>(<var class="Fa" style="white-space: nowrap;">const - void *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t - *nitemsp</var>);</p> -<p class="Pp"><var class="Ft">const char * const *</var> - <br/> - <code class="Fn">cnvlist_get_string_array</code>(<var class="Fa" style="white-space: nowrap;">const - void *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t - *nitemsp</var>);</p> -<p class="Pp"><var class="Ft">const nvlist_t * const *</var> - <br/> - <code class="Fn">cnvlist_get_nvlist_array</code>(<var class="Fa" style="white-space: nowrap;">const - void *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t - *nitemsp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">cnvlist_get_descriptor</code>(<var class="Fa" style="white-space: nowrap;">const - void *cookie</var>);</p> -<p class="Pp"><var class="Ft">const int *</var> - <br/> - <code class="Fn">cnvlist_get_descriptor_array</code>(<var class="Fa" style="white-space: nowrap;">const - void *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t - *nitemsp</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">cnvlist_take_bool</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>);</p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">cnvlist_take_number</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>);</p> -<p class="Pp"><var class="Ft">const char *</var> - <br/> - <code class="Fn">cnvlist_take_string</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>);</p> -<p class="Pp"><var class="Ft">const nvlist_t *</var> - <br/> - <code class="Fn">cnvlist_take_nvlist</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>);</p> -<p class="Pp"><var class="Ft">const void *</var> - <br/> - <code class="Fn">cnvlist_take_binary</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t - *sizep</var>);</p> -<p class="Pp"><var class="Ft">const bool *</var> - <br/> - <code class="Fn">cnvlist_take_bool_array</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t - *nitemsp</var>);</p> -<p class="Pp"><var class="Ft">const uint64_t *</var> - <br/> - <code class="Fn">cnvlist_take_number_array</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t - *nitemsp</var>);</p> -<p class="Pp"><var class="Ft">const char * const *</var> - <br/> - <code class="Fn">cnvlist_take_string_array</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t - *nitemsp</var>);</p> -<p class="Pp"><var class="Ft">const nvlist_t * const *</var> - <br/> - <code class="Fn">cnvlist_take_nvlist_array</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t - *nitemsp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">cnvlist_take_descriptor</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>);</p> -<p class="Pp"><var class="Ft">const int *</var> - <br/> - <code class="Fn">cnvlist_take_descriptor_array</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>, <var class="Fa" style="white-space: nowrap;">size_t - *nitemsp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cnvlist_free_null</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cnvlist_free_bool</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cnvlist_free_number</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cnvlist_free_string</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cnvlist_free_nvlist</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cnvlist_free_descriptor</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cnvlist_free_binary</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cnvlist_free_bool_array</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cnvlist_free_number_array</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cnvlist_free_string_array</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cnvlist_free_nvlist_array</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cnvlist_free_descriptor_array</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">libnv</code> library permits easy management - of name/value pairs and can send and receive them over sockets. For more - information, see <a class="Xr">nv(9)</a>.</p> -<p class="Pp" id="nvlist_next">The concept of cookies is explained in - <a class="permalink" href="#nvlist_next"><code class="Fn">nvlist_next</code></a>(), - <a class="permalink" href="#nvlist_get_parent"><code class="Fn" id="nvlist_get_parent">nvlist_get_parent</code></a>(), - and - <a class="permalink" href="#nvlist_get_pararr"><code class="Fn" id="nvlist_get_pararr">nvlist_get_pararr</code></a>() - from <a class="Xr">nv(9)</a>.</p> -<p class="Pp" id="cnvlist_name">The - <a class="permalink" href="#cnvlist_name"><code class="Fn">cnvlist_name</code></a>() - function returns the name of an element associated with - <var class="Fa">cookie</var>.</p> -<p class="Pp" id="cnvlist_type">The - <a class="permalink" href="#cnvlist_type"><code class="Fn">cnvlist_type</code></a>() - function returns the type of an element associated with - <var class="Fa">cookie</var>. Types which can be returned are described in - <a class="Xr">nv(9)</a>.</p> -<p class="Pp">The <code class="Nm">cnvlist_get</code> functions return the value - associated with <var class="Fa">cookie</var>. Returned strings, nvlists, - descriptors, binaries, or arrays must not be modified by the user since they - still belong to the nvlist. The nvlist must not be in an error state.</p> -<p class="Pp" id="free">The <code class="Nm">cnvlist_take</code> functions - return the value associated with the given cookie and remove the element - from the nvlist. When the value is a string, binary, or array value, the - caller is responsible for freeing the returned memory with - <a class="permalink" href="#free"><code class="Fn">free</code></a>(<var class="Fa">3</var>). - When the value is an nvlist, the caller is responsible for destroying the - returned nvlist with - <a class="permalink" href="#nvlist_destroy"><code class="Fn" id="nvlist_destroy">nvlist_destroy</code></a>(). - When the value is a descriptor, the caller is responsible for closing the - returned descriptor with - <a class="permalink" href="#close"><code class="Fn" id="close">close</code></a>(<var class="Fa">2</var>).</p> -<p class="Pp">The <code class="Nm">cnvlist_free</code> functions remove the - element identified by <var class="Fa">cookie</var> and free any associated - resources. If the element identified by <var class="Fa">cookie</var> has the - wrong type or does not exist, the program aborts.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">The following example demonstrates how to deal with the cnvlist - API.</p> -<div class="Bd Pp Li"> -<pre>int type; -void *cookie, *scookie, *bcookie; -nvlist_t *nvl; -char *name; - -nvl = nvlist_create(0); -nvlist_add_bool(nvl, "test", 1 == 2); -nvlist_add_string(nvl, "test2", "cnvlist"); -cookie = NULL; - -while (nvlist_next(nvl, &type, &cookie) != NULL) { - switch (type) { - case NV_TYPE_BOOL: - printf("test: %d\n", cnvlist_get_bool(cookie)); - bcookie = cookie; - break; - case NV_TYPE_STRING: - printf("test2: %s\n", cnvlist_get_string(cookie)); - scookie = cookie; - break; - } -} - -name = cnvlist_take_string(scookie); -cnvlist_free_bool(bcookie); - -printf("test2: %s\n", name); -free(name); - -printf("nvlist_empty = %d\n", nvlist_empty(nvl)); -nvlist_destroy(nvl); - -return (0);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">close(2)</a>, <a class="Xr">free(3)</a>, - <a class="Xr">nv(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">cnv</code> API was created during the Google - Summer Of Code 2016 by <span class="An">Adam Starak</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 3, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/condvar.9 4.html b/static/freebsd/man9/condvar.9 4.html deleted file mode 100644 index 88cf8dc4..00000000 --- a/static/freebsd/man9/condvar.9 4.html +++ /dev/null @@ -1,216 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">CONDVAR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">CONDVAR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">condvar</code>, <code class="Nm">cv_init</code>, - <code class="Nm">cv_destroy</code>, <code class="Nm">cv_wait</code>, - <code class="Nm">cv_wait_sig</code>, <code class="Nm">cv_wait_unlock</code>, - <code class="Nm">cv_timedwait</code>, - <code class="Nm">cv_timedwait_sbt</code>, - <code class="Nm">cv_timedwait_sig</code>, - <code class="Nm">cv_timedwait_sig_sbt</code>, - <code class="Nm">cv_signal</code>, <code class="Nm">cv_broadcast</code>, - <code class="Nm">cv_broadcastpri</code>, <code class="Nm">cv_wmesg</code> - — <span class="Nd">kernel condition variable</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/proc.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/condvar.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cv_init</code>(<var class="Fa" style="white-space: nowrap;">struct - cv *cvp</var>, <var class="Fa" style="white-space: nowrap;">const char - *desc</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cv_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct - cv *cvp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cv_wait</code>(<var class="Fa" style="white-space: nowrap;">struct - cv *cvp</var>, <var class="Fa" style="white-space: nowrap;">lock</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">cv_wait_sig</code>(<var class="Fa" style="white-space: nowrap;">struct - cv *cvp</var>, <var class="Fa" style="white-space: nowrap;">lock</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cv_wait_unlock</code>(<var class="Fa" style="white-space: nowrap;">struct - cv *cvp</var>, <var class="Fa" style="white-space: nowrap;">lock</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">cv_timedwait</code>(<var class="Fa" style="white-space: nowrap;">struct - cv *cvp</var>, <var class="Fa" style="white-space: nowrap;">lock</var>, - <var class="Fa" style="white-space: nowrap;">int timo</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">cv_timedwait_sbt</code>(<var class="Fa" style="white-space: nowrap;">struct - cv *cvp</var>, <var class="Fa" style="white-space: nowrap;">lock</var>, - <var class="Fa" style="white-space: nowrap;">sbintime_t sbt</var>, - <var class="Fa" style="white-space: nowrap;">sbintime_t pr</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">cv_timedwait_sig</code>(<var class="Fa" style="white-space: nowrap;">struct - cv *cvp</var>, <var class="Fa" style="white-space: nowrap;">lock</var>, - <var class="Fa" style="white-space: nowrap;">int timo</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">cv_timedwait_sig_sbt</code>(<var class="Fa" style="white-space: nowrap;">struct - cv *cvp</var>, <var class="Fa" style="white-space: nowrap;">lock</var>, - <var class="Fa" style="white-space: nowrap;">sbintime_t sbt</var>, - <var class="Fa" style="white-space: nowrap;">sbintime_t pr</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cv_signal</code>(<var class="Fa" style="white-space: nowrap;">struct - cv *cvp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cv_broadcast</code>(<var class="Fa" style="white-space: nowrap;">struct - cv *cvp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cv_broadcastpri</code>(<var class="Fa" style="white-space: nowrap;">struct - cv *cvp</var>, <var class="Fa" style="white-space: nowrap;">int - pri</var>);</p> -<p class="Pp"><var class="Ft">const char *</var> - <br/> - <code class="Fn">cv_wmesg</code>(<var class="Fa" style="white-space: nowrap;">struct - cv *cvp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Condition variables are used in conjunction with mutexes to wait - for conditions to occur. Condition variables are created with - <a class="permalink" href="#cv_init"><code class="Fn" id="cv_init">cv_init</code></a>(), - where <var class="Fa">cvp</var> is a pointer to space for a - <var class="Vt">struct cv</var>, and <var class="Fa">desc</var> is a pointer - to a null-terminated character string that describes the condition variable. - Condition variables are destroyed with - <a class="permalink" href="#cv_destroy"><code class="Fn" id="cv_destroy">cv_destroy</code></a>(). - Threads wait on condition variables by calling - <code class="Fn">cv_wait</code>(), <code class="Fn">cv_wait_sig</code>(), - <code class="Fn">cv_wait_unlock</code>(), - <code class="Fn">cv_timedwait</code>(), or - <code class="Fn">cv_timedwait_sig</code>(). Threads unblock waiters by - calling - <a class="permalink" href="#cv_signal"><code class="Fn" id="cv_signal">cv_signal</code></a>() - to unblock one waiter, or - <a class="permalink" href="#cv_broadcast"><code class="Fn" id="cv_broadcast">cv_broadcast</code></a>() - or - <a class="permalink" href="#cv_broadcastpri"><code class="Fn" id="cv_broadcastpri">cv_broadcastpri</code></a>() - to unblock all waiters. In addition to waking waiters, - <code class="Fn">cv_broadcastpri</code>() ensures that all of the waiters - have a priority of at least <var class="Fa">pri</var> by raising the - priority of any threads that do not. - <a class="permalink" href="#cv_wmesg"><code class="Fn" id="cv_wmesg">cv_wmesg</code></a>() - returns the description string of <var class="Fa">cvp</var>, as set by the - initial call to <code class="Fn">cv_init</code>().</p> -<p class="Pp" id="cv_wait">The <var class="Fa">lock</var> argument is a pointer - to either a <a class="Xr">mutex(9)</a>, <a class="Xr">rwlock(9)</a>, or - <a class="Xr">sx(9)</a> lock. A <a class="Xr">mutex(9)</a> argument must be - initialized with <code class="Dv">MTX_DEF</code> and not - <code class="Dv">MTX_SPIN</code>. A thread must hold - <var class="Fa">lock</var> before calling - <a class="permalink" href="#cv_wait"><code class="Fn">cv_wait</code></a>(), - <a class="permalink" href="#cv_wait_sig"><code class="Fn" id="cv_wait_sig">cv_wait_sig</code></a>(), - <a class="permalink" href="#cv_wait_unlock"><code class="Fn" id="cv_wait_unlock">cv_wait_unlock</code></a>(), - <a class="permalink" href="#cv_timedwait"><code class="Fn" id="cv_timedwait">cv_timedwait</code></a>(), - or - <a class="permalink" href="#cv_timedwait_sig"><code class="Fn" id="cv_timedwait_sig">cv_timedwait_sig</code></a>(). - When a thread waits on a condition, <var class="Fa">lock</var> is atomically - released before the thread is blocked, then reacquired before the function - call returns. In addition, the thread will fully drop the - <var class="Va">Giant</var> mutex (even if recursed) while the it is - suspended and will reacquire the <var class="Va">Giant</var> mutex before - the function returns. The <code class="Fn">cv_wait_unlock</code>() function - does not reacquire the lock before returning. Note that the - <var class="Va">Giant</var> mutex may be specified as - <var class="Fa">lock</var>. However, <var class="Va">Giant</var> may not be - used as <var class="Fa">lock</var> for the - <code class="Fn">cv_wait_unlock</code>() function. All waiters must pass the - same <var class="Fa">lock</var> in conjunction with - <var class="Fa">cvp</var>.</p> -<p class="Pp" id="cv_wait~2">When - <a class="permalink" href="#cv_wait~2"><code class="Fn">cv_wait</code></a>(), - <a class="permalink" href="#cv_wait_sig~2"><code class="Fn" id="cv_wait_sig~2">cv_wait_sig</code></a>(), - <a class="permalink" href="#cv_wait_unlock~2"><code class="Fn" id="cv_wait_unlock~2">cv_wait_unlock</code></a>(), - <a class="permalink" href="#cv_timedwait~2"><code class="Fn" id="cv_timedwait~2">cv_timedwait</code></a>(), - and - <a class="permalink" href="#cv_timedwait_sig~2"><code class="Fn" id="cv_timedwait_sig~2">cv_timedwait_sig</code></a>() - unblock, their calling threads are made runnable. - <code class="Fn">cv_timedwait</code>() and - <code class="Fn">cv_timedwait_sig</code>() wait for at most - <var class="Fa">timo</var> / <code class="Dv">HZ</code> seconds before being - unblocked and returning <code class="Er">EWOULDBLOCK</code>; otherwise, they - return 0. <code class="Fn">cv_wait_sig</code>() and - <code class="Fn">cv_timedwait_sig</code>() return prematurely with a value - of <code class="Er">EINTR</code> or <code class="Er">ERESTART</code> if a - signal is caught, or 0 if signaled via <code class="Fn">cv_signal</code>() - or <code class="Fn">cv_broadcast</code>().</p> -<p class="Pp" id="cv_timedwait_sbt"><a class="permalink" href="#cv_timedwait_sbt"><code class="Fn">cv_timedwait_sbt</code></a>() - and - <a class="permalink" href="#cv_timedwait_sig_sbt"><code class="Fn" id="cv_timedwait_sig_sbt">cv_timedwait_sig_sbt</code></a>() - functions take <var class="Fa">sbt</var> argument instead of - <var class="Fa">timo</var>. It allows to specify relative or absolute - unblock time with higher resolution in form of - <var class="Vt">sbintime_t</var>. The parameter <var class="Fa">pr</var> - allows to specify wanted absolute event precision. The parameter - <var class="Fa">flags</var> allows to pass additional - <a class="permalink" href="#callout_reset_sbt"><code class="Fn" id="callout_reset_sbt">callout_reset_sbt</code></a>() - flags.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If successful, <code class="Fn">cv_wait_sig</code>(), - <code class="Fn">cv_timedwait</code>(), and - <code class="Fn">cv_timedwait_sig</code>() return 0. Otherwise, a non-zero - error code is returned.</p> -<p class="Pp"><code class="Fn">cv_wmesg</code>() returns the description string - that was passed to <code class="Fn">cv_init</code>().</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp"><code class="Fn">cv_wait_sig</code>() and - <code class="Fn">cv_timedwait_sig</code>() will fail if:</p> -<dl class="Bl-tag"> - <dt id="EINTR">[<a class="permalink" href="#EINTR"><code class="Er">EINTR</code></a>]</dt> - <dd>A signal was caught and the system call should be interrupted.</dd> - <dt id="ERESTART">[<a class="permalink" href="#ERESTART"><code class="Er">ERESTART</code></a>]</dt> - <dd>A signal was caught and the system call should be restarted.</dd> -</dl> -<p class="Pp"><code class="Fn">cv_timedwait</code>() and - <code class="Fn">cv_timedwait_sig</code>() will fail if:</p> -<dl class="Bl-tag"> - <dt id="EWOULDBLOCK">[<a class="permalink" href="#EWOULDBLOCK"><code class="Er">EWOULDBLOCK</code></a>]</dt> - <dd>Timeout expired.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">callout(9)</a>, <a class="Xr">locking(9)</a>, - <a class="Xr">mtx_pool(9)</a>, <a class="Xr">mutex(9)</a>, - <a class="Xr">rwlock(9)</a>, <a class="Xr">sema(9)</a>, - <a class="Xr">sleep(9)</a>, <a class="Xr">sx(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 19, 2013</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/config_intrhook.9 3.html b/static/freebsd/man9/config_intrhook.9 3.html deleted file mode 100644 index a728940d..00000000 --- a/static/freebsd/man9/config_intrhook.9 3.html +++ /dev/null @@ -1,127 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">CONFIG_INTRHOOK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">CONFIG_INTRHOOK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">config_intrhook</code> — - <span class="Nd">schedule a function to be run after interrupts have been - enabled, but before root is mounted</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/kernel.h</a>></code></p> -<p class="Pp"><var class="Vt">typedef void (*ich_func_t)(void *arg);</var></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">config_intrhook_establish</code>(<var class="Fa" style="white-space: nowrap;">struct - intr_config_hook *hook</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">config_intrhook_disestablish</code>(<var class="Fa" style="white-space: nowrap;">struct - intr_config_hook *hook</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">config_intrhook_drain</code>(<var class="Fa" style="white-space: nowrap;">struct - intr_config_hook *hook</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">config_intrhook_oneshot</code>(<var class="Fa" style="white-space: nowrap;">ich_func_t - func</var>, <var class="Fa" style="white-space: nowrap;">void - *arg</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#config_intrhook_establish"><code class="Fn" id="config_intrhook_establish">config_intrhook_establish</code></a>() - 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.</p> -<p class="Pp" id="config_intrhook_disestablish">The - <a class="permalink" href="#config_intrhook_disestablish"><code class="Fn">config_intrhook_disestablish</code></a>() - function removes the entry from the hook queue.</p> -<p class="Pp" id="config_intrhook_drain">The - <a class="permalink" href="#config_intrhook_drain"><code class="Fn">config_intrhook_drain</code></a>() - function removes the entry from the hook queue in a safe way. If the hook is - not currently active it removes <var class="Fa">hook</var> from the hook - queue and returns <var class="Vt">ICHS_QUEUED</var>. If the hook is active, - it waits for the hook to complete before returning - <var class="Vt">ICHS_RUNNING</var>. If the hook has previously completed, it - returns <var class="Vt">ICHS_DONE</var>. Because a - <var class="Vt">config_intrhook</var> is undefined prior to - <code class="Fn">config_intrhook_establish</code>(), this function may only - be called after that function has returned.</p> -<p class="Pp" id="config_intrhook_oneshot">The - <a class="permalink" href="#config_intrhook_oneshot"><code class="Fn">config_intrhook_oneshot</code></a>() - function schedules a function to be run as described for - <code class="Fn">config_intrhook_establish</code>(); the entry is - automatically removed from the hook queue after that function runs. This is - appropriate when additional device configuration must be done after - interrupts are enabled, but there is no need to stall the boot process after - that. This function allocates memory using M_WAITOK; do not call this while - holding any non-sleepable locks.</p> -<p class="Pp" id="config_intrhook_disestablish~2">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 - <a class="permalink" href="#config_intrhook_disestablish~2"><code class="Fn">config_intrhook_disestablish</code></a>(). - 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.</p> -<p class="Pp">The requests are made with the - <var class="Vt">intr_config_hook</var> structure. This structure is defined - as follows:</p> -<div class="Bd Pp Li"> -<pre>struct intr_config_hook { - TAILQ_ENTRY(intr_config_hook) ich_links;/* Private */ - ich_func_t ich_func; /* function to call */ - void *ich_arg; /* Argument to call */ -};</pre> -</div> -<p class="Pp">Storage for the <var class="Vt">intr_config_hook</var> structure - must be provided by the driver. It must be stable from just before the hook - is established until after the hook is disestablished.</p> -<p class="Pp" id="SI_SUB_INT_CONFIG_HOOKS">Specifically, hooks are run at - <a class="permalink" href="#SI_SUB_INT_CONFIG_HOOKS"><code class="Fn">SI_SUB_INT_CONFIG_HOOKS</code></a>(), - which is immediately after the scheduler is started, and just before the - root file system device is discovered.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">A zero return value means the hook was successfully added to the - queue (with either deferred or immediate execution). A non-zero return value - means the hook could not be added to the queue because it was already on the - queue.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">DEVICE_ATTACH(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">These functions were introduced in <span class="Ux">FreeBSD - 3.0</span> with the CAM subsystem, but are available for any driver to - use.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The functions were written by <span class="An">Justin Gibbs</span> - <<a class="Mt" href="mailto:gibbs@FreeBSD.org">gibbs@FreeBSD.org</a>>. - This manual page was written by <span class="An">M. Warner Losh</span> - <<a class="Mt" href="mailto:imp@FreeBSD.org">imp@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 8, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/contigmalloc.9 3.html b/static/freebsd/man9/contigmalloc.9 3.html deleted file mode 100644 index 8bfe5a5d..00000000 --- a/static/freebsd/man9/contigmalloc.9 3.html +++ /dev/null @@ -1,118 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">CONTIGMALLOC(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">CONTIGMALLOC(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">contigmalloc</code> — - <span class="Nd">manage contiguous kernel physical memory</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/malloc.h</a>></code></p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">contigmalloc</code>(<var class="Fa">unsigned long size</var>, - <var class="Fa">struct malloc_type *type</var>, <var class="Fa">int - flags</var>, <var class="Fa">vm_paddr_t low</var>, - <var class="Fa">vm_paddr_t high</var>, <var class="Fa">unsigned long - alignment</var>, <var class="Fa">vm_paddr_t boundary</var>);</p> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/domainset.h</a>></code></p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">contigmalloc_domainset</code>(<var class="Fa">unsigned long - size</var>, <var class="Fa">struct malloc_type *type</var>, - <var class="Fa">struct domainset *ds</var>, <var class="Fa">int flags</var>, - <var class="Fa">vm_paddr_t low</var>, <var class="Fa">vm_paddr_t high</var>, - <var class="Fa">unsigned long alignment</var>, <var class="Fa">vm_paddr_t - boundary</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#contigmalloc"><code class="Fn" id="contigmalloc">contigmalloc</code></a>() - function allocates <var class="Fa">size</var> bytes of contiguous physical - memory that is aligned to <var class="Fa">alignment</var> bytes, and which - does not cross a boundary of <var class="Fa">boundary</var> bytes. If - successful, the allocation will reside between physical addresses - <var class="Fa">low</var> and <var class="Fa">high</var>. The returned - pointer points to a wired kernel virtual address range of - <var class="Fa">size</var> bytes allocated from the kernel virtual address - (KVA) map.</p> -<p class="Pp" id="contigmalloc_domainset">The - <a class="permalink" href="#contigmalloc_domainset"><code class="Fn">contigmalloc_domainset</code></a>() - variant allows the caller to additionally specify a - <a class="Xr">numa(4)</a> domain selection policy. See - <a class="Xr">domainset(9)</a> for some example policies.</p> -<p class="Pp" id="contigmalloc~2">The <var class="Fa">flags</var> parameter - modifies - <a class="permalink" href="#contigmalloc~2"><code class="Fn">contigmalloc</code></a>()'s - behaviour as follows:</p> -<dl class="Bl-tag"> - <dt id="M_ZERO"><a class="permalink" href="#M_ZERO"><code class="Dv">M_ZERO</code></a></dt> - <dd>Causes the allocated physical memory to be zero filled.</dd> - <dt id="M_NOWAIT"><a class="permalink" href="#M_NOWAIT"><code class="Dv">M_NOWAIT</code></a></dt> - <dd>Causes <code class="Fn">contigmalloc</code>() to return - <code class="Dv">NULL</code> if the request cannot be immediately - fulfilled due to resource shortage.</dd> -</dl> -<p class="Pp">Other flags (if present) are ignored.</p> -<p class="Pp" id="contigfree">The - <a class="permalink" href="#contigfree"><code class="Fn">contigfree</code></a>() - function is deprecated. Use <a class="Xr">free(9)</a> instead.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">The <code class="Fn">contigmalloc</code>() function does not sleep - waiting for memory resources to be freed up, but instead actively reclaims - pages before giving up. However, unless <code class="Dv">M_NOWAIT</code> is - specified, it may select a page for reclamation that must first be written - to backing storage, causing it to sleep.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">contigmalloc</code>() function returns a - kernel virtual address if allocation succeeds, or - <code class="Dv">NULL</code> otherwise.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<div class="Bd Li"> -<pre>void *p; -p = contigmalloc(8192, M_DEVBUF, M_ZERO, 0, (1L << 22), - 32 * 1024, 1024 * 1024);</pre> -</div> -<p class="Pp">Ask for 8192 bytes of zero-filled memory residing between physical - address 0 and 4194303 inclusive, aligned to a 32K boundary and not crossing - a 1M address boundary.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DIAGNOSTICS"><a class="permalink" href="#DIAGNOSTICS">DIAGNOSTICS</a></h1> -<p class="Pp">The <code class="Fn">contigmalloc</code>() function will panic if - <var class="Fa">size</var> is zero, or if <var class="Fa">alignment</var> or - <var class="Fa">boundary</var> is not a power of two.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">malloc(9)</a>, <a class="Xr">memguard(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 26, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/copy.9 3.html b/static/freebsd/man9/copy.9 3.html deleted file mode 100644 index 9e2c2554..00000000 --- a/static/freebsd/man9/copy.9 3.html +++ /dev/null @@ -1,130 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">COPY(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">COPY(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">copy</code>, <code class="Nm">copyin</code>, - <code class="Nm">copyin_nofault</code>, <code class="Nm">copyout</code>, - <code class="Nm">copyout_nofault</code>, <code class="Nm">copystr</code>, - <code class="Nm">copyinstr</code> — <span class="Nd">heterogeneous - address space copy functions</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">copyin</code>(<var class="Fa" style="white-space: nowrap;">const - void *uaddr</var>, <var class="Fa" style="white-space: nowrap;">void - *kaddr</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">copyin_nofault</code>(<var class="Fa" style="white-space: nowrap;">const - void *uaddr</var>, <var class="Fa" style="white-space: nowrap;">void - *kaddr</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">copyout</code>(<var class="Fa" style="white-space: nowrap;">const - void *kaddr</var>, <var class="Fa" style="white-space: nowrap;">void - *uaddr</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">copyout_nofault</code>(<var class="Fa" style="white-space: nowrap;">const - void *kaddr</var>, <var class="Fa" style="white-space: nowrap;">void - *uaddr</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>);</p> -<p class="Pp"><var class="Ft">int __deprecated</var> - <br/> - <code class="Fn">copystr</code>(<var class="Fa" style="white-space: nowrap;">const - void *kfaddr</var>, <var class="Fa" style="white-space: nowrap;">void - *kdaddr</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>, <var class="Fa" style="white-space: nowrap;">size_t - *done</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">copyinstr</code>(<var class="Fa" style="white-space: nowrap;">const - void *uaddr</var>, <var class="Fa" style="white-space: nowrap;">void - *kaddr</var>, <var class="Fa" style="white-space: nowrap;">size_t len</var>, - <var class="Fa" style="white-space: nowrap;">size_t *done</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">copy</code> functions are designed to copy - contiguous data from one address space to another.</p> -<p class="Pp" id="copystr"><a class="permalink" href="#copystr"><code class="Fn">copystr</code></a>() - is deprecated and should be replaced with <a class="Xr">strlcpy(9)</a>. It - will be removed from <span class="Ux">FreeBSD 13</span>.</p> -<p class="Pp" id="copyin">The - <a class="permalink" href="#copyin"><code class="Fn">copyin</code></a>() and - <code class="Fn">copyin_nofault</code>() functions copy - <var class="Fa">len</var> bytes of data from the user-space address - <var class="Fa">uaddr</var> to the kernel-space address - <var class="Fa">kaddr</var>.</p> -<p class="Pp" id="copyout">The - <a class="permalink" href="#copyout"><code class="Fn">copyout</code></a>() - and - <a class="permalink" href="#copyout_nofault"><code class="Fn" id="copyout_nofault">copyout_nofault</code></a>() - functions copy <var class="Fa">len</var> bytes of data from the kernel-space - address <var class="Fa">kaddr</var> to the user-space address - <var class="Fa">uaddr</var>.</p> -<p class="Pp" id="copyin_nofault">The - <a class="permalink" href="#copyin_nofault"><code class="Fn">copyin_nofault</code></a>() - and - <a class="permalink" href="#copyout_nofault~2"><code class="Fn" id="copyout_nofault~2">copyout_nofault</code></a>() - functions require that the kernel-space and user-space data be accessible - without incurring a page fault. The source and destination addresses must be - physically mapped for read and write access, respectively, and neither the - source nor destination addresses may be pageable.</p> -<p class="Pp" id="copystr~2">The - <a class="permalink" href="#copystr~2"><code class="Fn">copystr</code></a>() - function copies a NUL-terminated string, at most <var class="Fa">len</var> - bytes long, from kernel-space address <var class="Fa">kfaddr</var> to - kernel-space address <var class="Fa">kdaddr</var>. The number of bytes - actually copied, including the terminating NUL, is returned in - <var class="Fa">*done</var> (if <var class="Fa">done</var> is - <span class="No">non-</span><code class="Dv">NULL</code>).</p> -<p class="Pp" id="copyinstr">The - <a class="permalink" href="#copyinstr"><code class="Fn">copyinstr</code></a>() - function copies a NUL-terminated string, at most <var class="Fa">len</var> - bytes long, from user-space address <var class="Fa">uaddr</var> to - kernel-space address <var class="Fa">kaddr</var>. The number of bytes - actually copied, including the terminating NUL, is returned in - <var class="Fa">*done</var> (if <var class="Fa">done</var> is - <span class="No">non-</span><code class="Dv">NULL</code>).</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Nm">copy</code> functions return 0 on success. - All but <code class="Fn">copystr</code>() return - <code class="Er">EFAULT</code> if a bad address is encountered. The - <code class="Fn">copyin_nofault</code>() and - <code class="Fn">copyout_nofault</code>() functions return - <code class="Er">EFAULT</code> if a page fault occurs. The - <code class="Fn">copystr</code>() and <code class="Fn">copyinstr</code>() - functions return <code class="Er">ENAMETOOLONG</code> if the string is - longer than <var class="Fa">len</var> bytes.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">fetch(9)</a>, <a class="Xr">store(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 11, 2020</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/coredumper_register.9 3.html b/static/freebsd/man9/coredumper_register.9 3.html deleted file mode 100644 index c63860e1..00000000 --- a/static/freebsd/man9/coredumper_register.9 3.html +++ /dev/null @@ -1,181 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">COREDUMPER_REGISTER(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">COREDUMPER_REGISTER(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">coredumper_register</code>, - <code class="Nm">coredumper_unregister</code> — - <span class="Nd">loadable user coredumper support</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/ucoredump.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">coredumper_register</code>(<var class="Fa" style="white-space: nowrap;">struct - coredumper *cd</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">coredumper_unregister</code>(<var class="Fa" style="white-space: nowrap;">struct - coredumper *cd</var>);</p> -<p class="Pp"> - <br/> - <var class="Ft">int</var> - <br/> - <code class="Fn">coredumper_probe_fn</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">coredumper_handle_fn</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>, <var class="Fa" style="white-space: nowrap;">off_t - limit</var>);</p> -<div class="Bd Pp Li"> -<pre>/* Incomplete, but the useful members are depicted here. */ -struct coredumper { - const char *cd_name; - coredumper_probe_fn *cd_probe; - coredumper_handle_fn *cd_handle; -};</pre> -</div> -<p class="Pp"> - <br/> - <var class="Ft">int</var> - <br/> - <code class="Fn">coredump_init_fn</code>(<var class="Fa" style="white-space: nowrap;">const - struct coredump_writer *</var>, - <var class="Fa" style="white-space: nowrap;">const struct coredump_params - *</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">coredump_write_fn</code>(<var class="Fa" style="white-space: nowrap;">const - struct coredump_writer *</var>, - <var class="Fa" style="white-space: nowrap;">const void *</var>, - <var class="Fa" style="white-space: nowrap;">size_t</var>, - <var class="Fa" style="white-space: nowrap;">off_t</var>, - <var class="Fa" style="white-space: nowrap;">enum uio_seg</var>, - <var class="Fa" style="white-space: nowrap;">struct ucred *</var>, - <var class="Fa" style="white-space: nowrap;">size_t *</var>, - <var class="Fa" style="white-space: nowrap;">struct thread *</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">coredump_extend_fn</code>(<var class="Fa" style="white-space: nowrap;">const - struct coredump_writer *</var>, - <var class="Fa" style="white-space: nowrap;">off_t</var>, - <var class="Fa" style="white-space: nowrap;">struct ucred *</var>);</p> -<div class="Bd Pp Li"> -<pre>struct coredump_writer { - void *ctx; - coredump_init_fn *init_fn; - coredump_write_fn *write_fn; - coredump_extend_fn *extend_fn; -};</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">coredumper_register</code> mechanism provides - a path for kernel modules to register a new user process core dumper. The - expected use of <code class="Nm">coredumper_register</code> is for a module - to define the fields of the struct coredumper listed above, then call - <a class="permalink" href="#coredumper_register"><code class="Fn" id="coredumper_register">coredumper_register</code></a>() - at <code class="Dv">MOD_LOAD</code> time. A corresponding - <a class="permalink" href="#coredumper_unregister"><code class="Fn" id="coredumper_unregister">coredumper_unregister</code></a>() - should be called at <code class="Dv">MOD_UNLOAD</code> time. Note that - <code class="Fn">coredumper_unregister</code>() will block until the - specified coredumper is no longer processing coredumps.</p> -<p class="Pp" id="cd_probe">When a user process is preparing to start dumping - core, the kernel will execute the - <a class="permalink" href="#cd_probe"><code class="Fn">cd_probe</code></a>() - function for each coredumper currently registered. The - <code class="Fn">cd_probe</code>() function is expected to return either -1 - if it would decline to dump the process, or a priority level greater than 0. - The coredumper with the highest priority will handle the coredump. The - following default priorities are defined:</p> -<dl class="Bl-tag"> - <dt id="COREDUMPER_NOMATCH"><a class="permalink" href="#COREDUMPER_NOMATCH"><code class="Dv">COREDUMPER_NOMATCH</code></a></dt> - <dd>This dumper declines dumping the process.</dd> - <dt id="COREDUMPER_GENERIC"><a class="permalink" href="#COREDUMPER_GENERIC"><code class="Dv">COREDUMPER_GENERIC</code></a></dt> - <dd>This dumper will dump the process at the lowest priority. This priority is - not recommended, as the default vnode dumper will bid at - <code class="Dv">COREDUMPER_GENERIC</code> as well.</dd> - <dt id="COREDUMPER_SPECIAL"><a class="permalink" href="#COREDUMPER_SPECIAL"><code class="Dv">COREDUMPER_SPECIAL</code></a></dt> - <dd>This dumper provides special behavior, and will dump the process at a - higher priority.</dd> - <dt id="COREDUMPER_HIGHPRIORITY"><a class="permalink" href="#COREDUMPER_HIGHPRIORITY"><code class="Dv">COREDUMPER_HIGHPRIORITY</code></a></dt> - <dd>This dumper would prefer to handle this coredump. This may be used by, for - instance, a custom or vendor-specific coredump mechanism that wishes to - preempt others.</dd> -</dl> -<p class="Pp" id="cd_probe~2">Note that this system has been designed such that - the - <a class="permalink" href="#cd_probe~2"><code class="Fn">cd_probe</code></a>() - function can examine the process in question and make an informed decision. - Different processes being dumped could probe at different priorities in the - same coredumper.</p> -<p class="Pp" id="cd_handle">Once the highest priority coredumper has been - selected, the - <a class="permalink" href="#cd_handle"><code class="Fn">cd_handle</code></a>() - function will be invoked. The <code class="Fn">cd_handle</code>() will - receive both the thread and the <code class="Dv">RLIMIT_CORE</code> - <a class="Xr">setrlimit(2)</a> <var class="Fa">limit</var>. The proc lock - will be held on entry, and should be unlocked before the handler returns. - The <var class="Fa">limit</var> is typically passed to the - <code class="Fn">sv_coredump</code>() that belongs to the process's - <var class="Va">p_sysent</var>.</p> -<p class="Pp" id="cd_handle~2">The - <a class="permalink" href="#cd_handle~2"><code class="Fn">cd_handle</code></a>() - function should return either 0 if the dump was successful, or an - appropriate <a class="Xr">errno(2)</a> otherwise.</p> -<section class="Ss"> -<h2 class="Ss" id="Customized_Coredump_Writers"><a class="permalink" href="#Customized_Coredump_Writers">Customized - Coredump Writers</a></h2> -<p class="Pp">Custom coredumpers can define their own - <code class="Dv">coredump_writer</code> to pass to - <code class="Fn">sv_coredump</code>().</p> -<p class="Pp">The <var class="Va">ctx</var> member is opaque and only to be used - by the coredumper itself.</p> -<p class="Pp" id="sv_coredump">The <var class="Va">init_fn</var> function, if - it's provided, will be called by the - <a class="permalink" href="#sv_coredump"><code class="Fn">sv_coredump</code></a>() - implementation before any data is to be written. This allows the writer - implementation to record any coredump parameters that it might need to - capture, or setup the object to be written to.</p> -<p class="Pp" id="sv_coredump~2">The <var class="Va">write_fn</var> function - will be called by the - <a class="permalink" href="#sv_coredump~2"><code class="Fn">sv_coredump</code></a>() - implementation to write out data. The <var class="Va">extend_fn</var> - function will be called to enlarge the coredump, in the sense that a hole is - created in any difference between the current size and the new size. For - convenience, the - <a class="permalink" href="#core_vn_write"><code class="Fn" id="core_vn_write">core_vn_write</code></a>() - and - <a class="permalink" href="#core_vn_extend"><code class="Fn" id="core_vn_extend">core_vn_extend</code></a>() - functions used by the vnode coredumper are exposed in - <code class="In"><<a class="In">sys/ucordumper.h</a>></code>, and the - <code class="Dv">coredump_vnode_ctx</code> defined there should be populated - with the vnode to write to.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">setrlimit(2)</a>, <a class="Xr">core(5)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Kyle Evans</span> - <<a class="Mt" href="mailto:kevans@FreeBSD.org">kevans@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 23, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/counter.9 4.html b/static/freebsd/man9/counter.9 4.html deleted file mode 100644 index b9e32121..00000000 --- a/static/freebsd/man9/counter.9 4.html +++ /dev/null @@ -1,282 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">COUNTER(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">COUNTER(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">counter</code> — - <span class="Nd">SMP-friendly kernel counter implementation</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/counter.h</a>></code></p> -<p class="Pp"><var class="Ft">counter_u64_t</var> - <br/> - <code class="Fn">counter_u64_alloc</code>(<var class="Fa" style="white-space: nowrap;">int - wait</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">counter_u64_free</code>(<var class="Fa" style="white-space: nowrap;">counter_u64_t - c</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">counter_u64_add</code>(<var class="Fa" style="white-space: nowrap;">counter_u64_t - c</var>, <var class="Fa" style="white-space: nowrap;">int64_t v</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">counter_enter</code>();</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">counter_exit</code>();</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">counter_u64_add_protected</code>(<var class="Fa" style="white-space: nowrap;">counter_u64_t - c</var>, <var class="Fa" style="white-space: nowrap;">int64_t v</var>);</p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">counter_u64_fetch</code>(<var class="Fa" style="white-space: nowrap;">counter_u64_t - c</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">counter_u64_zero</code>(<var class="Fa" style="white-space: nowrap;">counter_u64_t - c</var>);</p> -<p class="Pp"><var class="Ft">struct counter_rate *</var> - <br/> - <code class="Fn">counter_rate_alloc</code>(<var class="Fa" style="white-space: nowrap;">int - flags</var>, <var class="Fa" style="white-space: nowrap;">int - period</var>);</p> -<p class="Pp"><var class="Ft">int64_t</var> - <br/> - <code class="Fn">counter_ratecheck</code>(<var class="Fa" style="white-space: nowrap;">struct - counter_rate *cr</var>, <var class="Fa" style="white-space: nowrap;">int64_t - limit</var>);</p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">counter_rate_get</code>(<var class="Fa" style="white-space: nowrap;">struct - counter_rate *cr</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">counter_rate_free</code>(<var class="Fa" style="white-space: nowrap;">struct - counter_rate *cr</var>);</p> -<p class="Pp"><code class="Fn">COUNTER_U64_SYSINIT</code>(<var class="Fa" style="white-space: nowrap;">counter_u64_t - c</var>);</p> -<p class="Pp"><code class="Fn">COUNTER_U64_DEFINE_EARLY</code>(<var class="Fa" style="white-space: nowrap;">counter_u64_t - c</var>);</p> -<p class="Pp"><code class="In">#include - <<a class="In">sys/sysctl.h</a>></code></p> -<p class="Pp"><code class="Fn">SYSCTL_COUNTER_U64</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">nbr</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">access</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_ADD_COUNTER_U64</code>(<var class="Fa" style="white-space: nowrap;">ctx</var>, - <var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">nbr</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">access</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_COUNTER_U64_ARRAY</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">nbr</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">access</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">len</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_ADD_COUNTER_U64_ARRAY</code>(<var class="Fa" style="white-space: nowrap;">ctx</var>, - <var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">nbr</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">access</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">len</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><code class="Nm">counter</code> is a generic facility to create - counters that can be utilized for any purpose (such as collecting - statistical data). A <code class="Nm">counter</code> is guaranteed to be - lossless when several kernel threads do simultaneous updates. However, - <code class="Nm">counter</code> does not block the calling thread, also no - <a class="Xr">atomic(9)</a> operations are used for the update, therefore - the counters can be used in any non-interrupt context. Moreover, - <code class="Nm">counter</code> has special optimisations for SMP - environments, making <code class="Nm">counter</code> update faster than - simple arithmetic on the global variable. Thus - <code class="Nm">counter</code> is considered suitable for accounting in the - performance-critical code paths.</p> -<dl class="Bl-tag"> - <dt id="counter_u64_alloc"><a class="permalink" href="#counter_u64_alloc"><code class="Fn">counter_u64_alloc</code></a>(<var class="Fa">wait</var>)</dt> - <dd>Allocate a new 64-bit unsigned counter. The <var class="Fa">wait</var> - argument is the <a class="Xr">malloc(9)</a> wait flag, should be either - <var class="Va">M_NOWAIT</var> or <var class="Va">M_WAITOK</var>. If - <var class="Va">M_NOWAIT</var> is specified the operation may fail and - return <code class="Dv">NULL</code>.</dd> - <dt id="counter_u64_free"><a class="permalink" href="#counter_u64_free"><code class="Fn">counter_u64_free</code></a>(<var class="Fa">c</var>)</dt> - <dd>Free the previously allocated counter <var class="Fa">c</var>. It is safe - to pass <code class="Dv">NULL</code>.</dd> - <dt id="counter_u64_add"><a class="permalink" href="#counter_u64_add"><code class="Fn">counter_u64_add</code></a>(<var class="Fa">c</var>, - <var class="Fa">v</var>)</dt> - <dd>Add <var class="Fa">v</var> to <var class="Fa">c</var>. The KPI does not - guarantee any protection from wraparound.</dd> - <dt id="counter_enter"><a class="permalink" href="#counter_enter"><code class="Fn">counter_enter</code></a>()</dt> - <dd>Enter mode that would allow the safe update of several counters via - <a class="permalink" href="#counter_u64_add_protected"><code class="Fn" id="counter_u64_add_protected">counter_u64_add_protected</code></a>(). - On some machines this expands to <a class="Xr">critical(9)</a> section, - while on other is a nop. See - <a class="Sx" href="#IMPLEMENTATION_DETAILS">IMPLEMENTATION - DETAILS</a>.</dd> - <dt id="counter_exit"><a class="permalink" href="#counter_exit"><code class="Fn">counter_exit</code></a>()</dt> - <dd>Exit mode for updating several counters.</dd> - <dt><code class="Fn">counter_u64_add_protected</code>(<var class="Fa">c</var>, - <var class="Fa">v</var>)</dt> - <dd>Same as <code class="Fn">counter_u64_add</code>(), but should be preceded - by <code class="Fn">counter_enter</code>().</dd> - <dt id="counter_u64_fetch"><a class="permalink" href="#counter_u64_fetch"><code class="Fn">counter_u64_fetch</code></a>(<var class="Fa">c</var>)</dt> - <dd>Take a snapshot of counter <var class="Fa">c</var>. The data obtained is - not guaranteed to reflect the real cumulative value for any moment.</dd> - <dt id="counter_u64_zero"><a class="permalink" href="#counter_u64_zero"><code class="Fn">counter_u64_zero</code></a>(<var class="Fa">c</var>)</dt> - <dd>Clear the counter <var class="Fa">c</var> and set it to zero.</dd> - <dt id="counter_rate_alloc"><a class="permalink" href="#counter_rate_alloc"><code class="Fn">counter_rate_alloc</code></a>(<var class="Fa">flags</var>, - <var class="Fa">period</var>)</dt> - <dd>Allocate a new struct counter_rate. <var class="Fa">flags</var> is passed - to <a class="Xr">malloc(9)</a>. <var class="Fa">period</var> is the time - over which the rate is checked.</dd> - <dt id="counter_ratecheck"><a class="permalink" href="#counter_ratecheck"><code class="Fn">counter_ratecheck</code></a>(<var class="Fa">cr</var>, - <var class="Fa">limit</var>)</dt> - <dd>The function is a multiprocessor-friendly version of - <a class="permalink" href="#ppsratecheck"><code class="Fn" id="ppsratecheck">ppsratecheck</code></a>() - which uses <code class="Nm">counter</code> internally. Returns - non-negative value if the rate is not yet reached during the current - period, and a negative value otherwise. If the limit was reached during - the previous period, but was just reset back to zero, then - <code class="Fn">counter_ratecheck</code>() returns number of events since - previous reset.</dd> - <dt id="counter_rate_get"><a class="permalink" href="#counter_rate_get"><code class="Fn">counter_rate_get</code></a>(<var class="Fa">cr</var>)</dt> - <dd>The number of hits to this check within the current period.</dd> - <dt id="counter_rate_free"><a class="permalink" href="#counter_rate_free"><code class="Fn">counter_rate_free</code></a>(<var class="Fa">cr</var>)</dt> - <dd>Free the <var class="Fa">cr</var> counter.</dd> - <dt id="COUNTER_U64_SYSINIT"><a class="permalink" href="#COUNTER_U64_SYSINIT"><code class="Fn">COUNTER_U64_SYSINIT</code></a>(<var class="Fa">c</var>)</dt> - <dd>Define a <a class="Xr">SYSINIT(9)</a> initializer for the global counter - <var class="Fa">c</var>.</dd> - <dt id="COUNTER_U64_DEFINE_EARLY"><a class="permalink" href="#COUNTER_U64_DEFINE_EARLY"><code class="Fn">COUNTER_U64_DEFINE_EARLY</code></a>(<var class="Fa">c</var>)</dt> - <dd>Define and initialize a global counter <var class="Fa">c</var>. It is - always safe to increment <var class="Fa">c</var>, though updates prior to - the <code class="Dv">SI_SUB_COUNTER</code> <a class="Xr">SYSINIT(9)</a> - event are lost.</dd> - <dt id="SYSCTL_COUNTER_U64"><a class="permalink" href="#SYSCTL_COUNTER_U64"><code class="Fn">SYSCTL_COUNTER_U64</code></a>(<var class="Fa">parent</var>, - <var class="Fa">nbr</var>, <var class="Fa">name</var>, - <var class="Fa">access</var>, <var class="Fa">ptr</var>, - <var class="Fa">descr</var>)</dt> - <dd>Declare a static <a class="Xr">sysctl(9)</a> oid that would represent a - <code class="Nm">counter</code>. The <var class="Fa">ptr</var> argument - should be a pointer to allocated <var class="Vt">counter_u64_t</var>. A - read of the oid returns value obtained through - <code class="Fn">counter_u64_fetch</code>(). Any write to the oid zeroes - it.</dd> - <dt id="SYSCTL_ADD_COUNTER_U64"><a class="permalink" href="#SYSCTL_ADD_COUNTER_U64"><code class="Fn">SYSCTL_ADD_COUNTER_U64</code></a>(<var class="Fa">ctx</var>, - <var class="Fa">parent</var>, <var class="Fa">nbr</var>, - <var class="Fa">name</var>, <var class="Fa">access</var>, - <var class="Fa">ptr</var>, <var class="Fa">descr</var>)</dt> - <dd>Create a <a class="Xr">sysctl(9)</a> oid that would represent a - <code class="Nm">counter</code>. The <var class="Fa">ptr</var> argument - should be a pointer to allocated <var class="Vt">counter_u64_t</var>. A - read of the oid returns value obtained through - <code class="Fn">counter_u64_fetch</code>(). Any write to the oid zeroes - it.</dd> - <dt id="SYSCTL_COUNTER_U64_ARRAY"><a class="permalink" href="#SYSCTL_COUNTER_U64_ARRAY"><code class="Fn">SYSCTL_COUNTER_U64_ARRAY</code></a>(<var class="Fa">parent</var>, - <var class="Fa">nbr</var>, <var class="Fa">name</var>, - <var class="Fa">access</var>, <var class="Fa">ptr</var>, - <var class="Fa">len</var>, <var class="Fa">descr</var>)</dt> - <dd>Declare a static <a class="Xr">sysctl(9)</a> oid that would represent an - array of <code class="Nm">counter</code>. The <var class="Fa">ptr</var> - argument should be a pointer to allocated array of - <var class="Vt">counter_u64_t's</var>. The <var class="Fa">len</var> - argument should specify number of elements in the array. A read of the oid - returns len-sized array of <var class="Vt">uint64_t</var> values obtained - through <code class="Fn">counter_u64_fetch</code>(). Any write to the oid - zeroes all array elements.</dd> - <dt id="SYSCTL_ADD_COUNTER_U64_ARRAY"><a class="permalink" href="#SYSCTL_ADD_COUNTER_U64_ARRAY"><code class="Fn">SYSCTL_ADD_COUNTER_U64_ARRAY</code></a>(<var class="Fa">ctx</var>, - <var class="Fa">parent</var>, <var class="Fa">nbr</var>, - <var class="Fa">name</var>, <var class="Fa">access</var>, - <var class="Fa">ptr</var>, <var class="Fa">len</var>, - <var class="Fa">descr</var>)</dt> - <dd>Create a <a class="Xr">sysctl(9)</a> oid that would represent an array of - <code class="Nm">counter</code>. The <var class="Fa">ptr</var> argument - should be a pointer to allocated array of - <var class="Vt">counter_u64_t's</var>. The <var class="Fa">len</var> - argument should specify number of elements in the array. A read of the oid - returns len-sized array of <var class="Vt">uint64_t</var> values obtained - through <code class="Fn">counter_u64_fetch</code>(). Any write to the oid - zeroes all array elements.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_DETAILS"><a class="permalink" href="#IMPLEMENTATION_DETAILS">IMPLEMENTATION - DETAILS</a></h1> -<p class="Pp">On all architectures <code class="Nm">counter</code> is - implemented using per-CPU data fields that are specially aligned in memory, - to avoid inter-CPU bus traffic due to shared use of the variables between - CPUs. These are allocated using <var class="Va">UMA_ZONE_PCPU</var> - <a class="Xr">uma(9)</a> zone. The update operation only touches the field - that is private to current CPU. Fetch operation loops through all per-CPU - fields and obtains a snapshot sum of all fields.</p> -<p class="Pp">On amd64 a <code class="Nm">counter</code> update is implemented - as a single instruction without lock semantics, operating on the private - data for the current CPU, which is safe against preemption and - interrupts.</p> -<p class="Pp">On i386 architecture, when machine supports the cmpxchg8 - instruction, this instruction is used. The multi-instruction sequence - provides the same guarantees as the amd64 single-instruction - implementation.</p> -<p class="Pp">On some architectures updating a counter require a - <a class="Xr">critical(9)</a> section.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">The following example creates a static counter array exported to - userspace through a sysctl:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>#define MY_SIZE 8 -static counter_u64_t array[MY_SIZE]; -SYSCTL_COUNTER_U64_ARRAY(_debug, OID_AUTO, counter_array, CTLFLAG_RW, - &array[0], MY_SIZE, "Test counter array");</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">atomic(9)</a>, <a class="Xr">critical(9)</a>, - <a class="Xr">locking(9)</a>, <a class="Xr">malloc(9)</a>, - <a class="Xr">ratecheck(9)</a>, <a class="Xr">sysctl(9)</a>, - <a class="Xr">SYSINIT(9)</a>, <a class="Xr">uma(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">counter</code> facility first appeared in - <span class="Ux">FreeBSD 10.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">counter</code> facility was written by - <span class="An">Gleb Smirnoff</span> and <span class="An">Konstantin - Belousov</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 19, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/cpu_machdep.9 3.html b/static/freebsd/man9/cpu_machdep.9 3.html deleted file mode 100644 index a3ce382f..00000000 --- a/static/freebsd/man9/cpu_machdep.9 3.html +++ /dev/null @@ -1,334 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">cpu_machdep(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">cpu_machdep(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">cpu_machdep</code>, - <code class="Nm">cpu_copy_thread</code>, - <code class="Nm">cpu_exec_vmspace_reuse</code>, - <code class="Nm">cpu_exit</code>, - <code class="Nm">cpu_fetch_syscall_args</code>, - <code class="Nm">cpu_fork</code>, - <code class="Nm">cpu_fork_kthread_handler</code>, - <code class="Nm">cpu_idle</code>, <code class="Nm">cpu_idle_wakeup</code>, - <code class="Nm">cpu_procctl</code>, - <code class="Nm">cpu_set_syscall_retval</code>, - <code class="Nm">cpu_set_upcall</code>, - <code class="Nm">cpu_set_user_tls</code>, - <code class="Nm">cpu_switch</code>, <code class="Nm">cpu_sync_core</code>, - <code class="Nm">cpu_thread_alloc</code>, - <code class="Nm">cpu_thread_clean</code>, - <code class="Nm">cpu_thread_exit</code>, - <code class="Nm">cpu_thread_free</code>, <code class="Nm">cpu_throw</code>, - <code class="Nm">cpu_update_pcb</code> — - <span class="Nd">machine-dependent interfaces to handle CPU and thread - state</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/proc.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/ptrace.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cpu_copy_thread</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>, <var class="Fa" style="white-space: nowrap;">struct thread - *td0</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">cpu_exec_vmspace_reuse</code>(<var class="Fa" style="white-space: nowrap;">struct - proc *p</var>, <var class="Fa" style="white-space: nowrap;">struct vm_map - *map</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cpu_exit</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">cpu_fetch_syscall_args</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cpu_fork</code>(<var class="Fa">struct thread *td1</var>, - <var class="Fa">struct proc *p2</var>, <var class="Fa">struct thread - *td2</var>, <var class="Fa">int flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cpu_fork_kthread_handler</code>(<var class="Fa">struct thread - *td</var>, <var class="Fa">void (*func)(void *)</var>, <var class="Fa">void - *arg</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cpu_idle</code>(<var class="Fa" style="white-space: nowrap;">int - busy</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">cpu_idle_wakeup</code>(<var class="Fa" style="white-space: nowrap;">int - cpu</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">cpu_procctl</code>(<var class="Fa">struct thread *td</var>, - <var class="Fa">int idtype</var>, <var class="Fa">id_t id</var>, - <var class="Fa">int com</var>, <var class="Fa">void *data</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">cpu_ptrace</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *_td</var>, <var class="Fa" style="white-space: nowrap;">int - req</var>, <var class="Fa" style="white-space: nowrap;">void *addr</var>, - <var class="Fa" style="white-space: nowrap;">int data</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cpu_set_syscall_retval</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>, <var class="Fa" style="white-space: nowrap;">int - error</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">cpu_set_upcall</code>(<var class="Fa">struct thread - *td</var>, <var class="Fa">void (*entry)(void *)</var>, <var class="Fa">void - *arg</var>, <var class="Fa">stack_t *stack</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">cpu_set_user_tls</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>, <var class="Fa" style="white-space: nowrap;">void - *tls_base</var>, <var class="Fa" style="white-space: nowrap;">int - thr_flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cpu_switch</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *old</var>, <var class="Fa" style="white-space: nowrap;">struct - thread *new</var>, <var class="Fa" style="white-space: nowrap;">struct mtx - *mtx</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cpu_sync_core</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cpu_thread_alloc</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cpu_thread_clean</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cpu_thread_exit</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cpu_thread_free</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cpu_throw</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *old</var>, <var class="Fa" style="white-space: nowrap;">struct - thread *new</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cpu_update_pcb</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These functions provide architecture-specific implementations of - machine-independent abstractions.</p> -<p class="Pp" id="cpu_exec_vmspace_reuse"><a class="permalink" href="#cpu_exec_vmspace_reuse"><code class="Fn">cpu_exec_vmspace_reuse</code></a>() - returns true if - <a class="permalink" href="#exec_new_vmspace"><code class="Fn" id="exec_new_vmspace">exec_new_vmspace</code></a>() - can reuse an existing <var class="Vt">struct vmspace</var> - (<var class="Fa">map</var>) for the process <var class="Fa">p</var> during - <a class="Xr">execve(2)</a>. This is only invoked if - <var class="Fa">map</var> is not shared with any other consumers. If this - returns false, <code class="Fn">exec_new_vmspace</code>() will create a new - <var class="Vt">struct vmspace</var>.</p> -<p class="Pp" id="cpu_exit"><a class="permalink" href="#cpu_exit"><code class="Fn">cpu_exit</code></a>() - releases machine-dependent resources other than the address space for the - process containing <var class="Fa">td</var> during process exit.</p> -<p class="Pp" id="cpu_fork"><a class="permalink" href="#cpu_fork"><code class="Fn">cpu_fork</code></a>() - copies and updates machine-dependent state (for example, the pcb and user - registers) from the forking thread <var class="Fa">td1</var> in an existing - process to the new thread <var class="Fa">td2</var> in the new process - <var class="Fa">p2</var>. This function must set up the new thread's kernel - stack and pcb so that <var class="Fa">td2</var> calls - <a class="permalink" href="#fork_exit"><code class="Fn" id="fork_exit">fork_exit</code></a>() - when it begins execution passing a pointer to - <a class="permalink" href="#fork_return"><code class="Fn" id="fork_return">fork_return</code></a>() - as the <var class="Fa">callout</var> argument and <var class="Fa">td2</var> - as the <var class="Fa">arg</var> argument.</p> -<p class="Pp" id="cpu_fork_kthread_handler"><a class="permalink" href="#cpu_fork_kthread_handler"><code class="Fn">cpu_fork_kthread_handler</code></a>() - adjusts a new thread's initial pcb and/or kernel stack to pass - <var class="Fa">func</var> and <var class="Fa">arg</var> as the - <var class="Fa">callout</var> and <var class="Fa">arg</var> arguments to - <a class="permalink" href="#fork_exit~2"><code class="Fn" id="fork_exit~2">fork_exit</code></a>(). - This must be called before a new thread is scheduled to run and is used to - set the “main” function for kernel threads.</p> -<p class="Pp" id="cpu_copy_thread"><a class="permalink" href="#cpu_copy_thread"><code class="Fn">cpu_copy_thread</code></a>() - copies machine-dependent state (for example, the pcb and user registers) - from <var class="Fa">td</var> to <var class="Fa">td0</var> when creating a - new thread in the same process. This function must set up the new thread's - kernel stack and pcb so that <var class="Fa">td0</var> calls - <a class="permalink" href="#fork_exit~3"><code class="Fn" id="fork_exit~3">fork_exit</code></a>() - when it begins execution passing a pointer to - <a class="permalink" href="#fork_return~2"><code class="Fn" id="fork_return~2">fork_return</code></a>() - as the <var class="Fa">callout</var> argument and <var class="Fa">td0</var> - as the <var class="Fa">arg</var> argument.</p> -<p class="Pp" id="cpu_set_upcall"><a class="permalink" href="#cpu_set_upcall"><code class="Fn">cpu_set_upcall</code></a>() - updates a new thread's initial user register state to call - <var class="Fa">entry</var> with <var class="Fa">arg</var> as the sole - argument using the user stack described in <var class="Fa">stack</var>.</p> -<p class="Pp" id="cpu_set_user_tls"><a class="permalink" href="#cpu_set_user_tls"><code class="Fn">cpu_set_user_tls</code></a>() - sets a new thread's initial user thread pointer register to reference the - user TLS base pointer <var class="Fa">tls_base</var>. The - <var class="Fa">thr_flags</var> argument provides flags bits, from the same - namespace as <var class="Va">flags</var> member of the - <var class="Vt">struct thr_param</var> argument to the - <a class="Xr">thr_new(2)</a> syscall.</p> -<p class="Pp" id="cpu_update_pcb"><a class="permalink" href="#cpu_update_pcb"><code class="Fn">cpu_update_pcb</code></a>() - updates the pcb of the current thread with current user register values. - This is invoked before writing out register notes in a core dump. This - function typically only has to update user registers for the current thread - that are saved in the pcb during context switches rather than in the - trapframe on kernel entry.</p> -<p class="Pp" id="cpu_update_pcb~2">Note that when - <a class="permalink" href="#cpu_update_pcb~2"><code class="Fn">cpu_update_pcb</code></a>() - is used, threads in a process other than the current thread are stopped, - typically by - <a class="permalink" href="#thread_single"><code class="Fn" id="thread_single">thread_single</code></a>(). - The pcbs of those stopped threads should already be updated by - <code class="Fn">cpu_switch</code>().</p> -<p class="Pp" id="cpu_fetch_syscall_args"><a class="permalink" href="#cpu_fetch_syscall_args"><code class="Fn">cpu_fetch_syscall_args</code></a>() - fetches the current system call arguments for the native FreeBSD ABI from - the current thread's user register state and/or user stack. The arguments - are saved in the <var class="Fa">td_sa</var> member of - <var class="Fa">td</var>.</p> -<p class="Pp" id="cpu_set_syscall_retval"><a class="permalink" href="#cpu_set_syscall_retval"><code class="Fn">cpu_set_syscall_retval</code></a>() - updates the user register state for <var class="Fa">td</var> to store system - call error and return values. If <var class="Fa">error</var> is 0, indicate - success and return the two values in <var class="Fa">td_retval</var>. If - <var class="Fa">error</var> is <code class="Dv">ERESTART,</code> adjust the - user PC to re-invoke the current system call after returning to user mode. - If <var class="Fa">error</var> is <code class="Dv">EJUSTRETURN</code>, leave - the current user register state unchanged. For any other value of - <var class="Fa">error</var>, indicate error and return - <var class="Fa">error</var> as the error code.</p> -<p class="Pp" id="cpu_idle"><a class="permalink" href="#cpu_idle"><code class="Fn">cpu_idle</code></a>() - waits for the next interrupt to occur on the current CPU. If an architecture - supports low power idling, this function should place the CPU into a low - power state while waiting. <var class="Fa">busy</var> is a hint from the - scheduler. If <var class="Fa">busy</var> is non-zero, the scheduler expects - a short sleep, so the CPU should prefer low-latency over maximum power - savings. If <var class="Fa">busy</var> is zero, the CPU should maximumize - power savings including deferring unnecessary clock interrupts via - <a class="permalink" href="#cpu_idleclock"><code class="Fn" id="cpu_idleclock">cpu_idleclock</code></a>().</p> -<p class="Pp" id="cpu_idle_wakeup"><a class="permalink" href="#cpu_idle_wakeup"><code class="Fn">cpu_idle_wakeup</code></a>() - awakens the idle CPU with the ID <var class="Fa">cpu</var> from a low-power - state.</p> -<p class="Pp" id="cpu_procctl"><a class="permalink" href="#cpu_procctl"><code class="Fn">cpu_procctl</code></a>() - handles any machine-dependent <a class="Xr">procctl(2)</a> requests.</p> -<p class="Pp" id="cpu_ptrace"><a class="permalink" href="#cpu_ptrace"><code class="Fn">cpu_ptrace</code></a>() - handles any machine-dependent <a class="Xr">ptrace(2)</a> requests.</p> -<p class="Pp" id="cpu_switch"><a class="permalink" href="#cpu_switch"><code class="Fn">cpu_switch</code></a>() - switches the current CPU between threads by swapping register state. This - function saves the current CPU register state in the pcb of - <var class="Fa">old</var> and loads register values from the pcb of - <var class="Fa">new</var> before returning. While the pcb generally contains - caller-save kernel register state, it can also contain user registers that - are not saved in the trapframe.</p> -<p class="Pp" id="cpu_switch~2">After saving the current CPU register state of - <var class="Fa">old</var>, - <a class="permalink" href="#cpu_switch~2"><code class="Fn">cpu_switch</code></a>() - stores <var class="Fa">mtx</var> in the <var class="Fa">td_lock</var> member - of <var class="Fa">old</var> transferring ownership of the old thread. No - data belonging to <var class="Fa">old</var> can be accessed after that - store. Specifically, the old thread's kernel stack must not be accessed - after this point.</p> -<p class="Pp">When <code class="Dv">SCHED_ULE</code> is being used, this - function must wait (via spinning) for the <var class="Fa">td_lock</var> - member of <var class="Fa">new</var> to change to a value not equal to - <var class="Va">&blocked_lock</var> before loading register values from - <var class="Fa">new</var> or accessing its kernel stack.</p> -<p class="Pp" id="cpu_switch~3">From the caller's perspective, - <a class="permalink" href="#cpu_switch~3"><code class="Fn">cpu_switch</code></a>() - returns when <var class="Fa">old</var> is rescheduled in the future, - possibly on a different CPU. However, the implementation of - <code class="Fn">cpu_switch</code>() returns immediately on the same CPU - into the previously-saved context of <var class="Fa">new</var>.</p> -<p class="Pp" id="cpu_throw"><a class="permalink" href="#cpu_throw"><code class="Fn">cpu_throw</code></a>() - is similar to <code class="Fn">cpu_switch</code>() but does not save any - state for <var class="Fa">old</var> or write to the old thread's - <var class="Fa">td_lock</var> member.</p> -<p class="Pp" id="cpu_sync_core"><a class="permalink" href="#cpu_sync_core"><code class="Fn">cpu_sync_core</code></a>() - ensures that all possible speculation and out-of-order execution is - serialized on the current CPU. Note that this is called from an IPI handler - so only has to handle additional serialization beyond that provided by - handling an IPI.</p> -<section class="Ss"> -<h2 class="Ss" id="Thread_Object_Lifecycle"><a class="permalink" href="#Thread_Object_Lifecycle">Thread - Object Lifecycle</a></h2> -<p class="Pp">These functions support the management of machine-dependent thread - state in conjunction with a thread object's lifecycle.</p> -<p class="Pp">The general model is that a thread object is allocated each time a - new kernel thread is created either by system calls like - <a class="Xr">fork(2)</a> or <a class="Xr">thr_new(2)</a> or when - kernel-only threads are created via <a class="Xr">kproc_create(9)</a>, - <a class="Xr">kproc_kthread_add(9)</a>, or <a class="Xr">kthread_add(9)</a>. - When a kernel thread exits, the thread object is freed. However, there is - one special case to support an optimization where each free process object - caches a thread object. When a process exits, the last thread object is not - freed but remains attached to the process. When the process object is later - reused for a new process in <a class="Xr">fork(2)</a>, the kernel recycles - that last thread object and uses it as the initial thread in the new - process. When a thread is recycled, some of the steps in the thread - allocation and free cycle are skipped as an optimization.</p> -<p class="Pp" id="cpu_thread_alloc"><a class="permalink" href="#cpu_thread_alloc"><code class="Fn">cpu_thread_alloc</code></a>() - initializes machine-dependent fields in <var class="Fa">td</var> after - allocating a new kernel stack. This function typically sets the - <var class="Fa">td_pcb</var> and initial <var class="Fa">td_frame</var> - pointers. <code class="Fn">cpu_thread_alloc</code>() is called both when - allocating a new thread object and when a recycled thread allocates a new - kernel stack. Note that this function is - <a class="permalink" href="#not"><i class="Em" id="not">not</i></a> called - if a recycled thread reuses its existing kernel stack.</p> -<p class="Pp" id="cpu_thread_clean"><a class="permalink" href="#cpu_thread_clean"><code class="Fn">cpu_thread_clean</code></a>() - releases any machine-dependent resources for the last thread in a process - during <a class="Xr">wait(2)</a>. The thread is a candidate for recycling so - should be reset to run as a new thread in case it is recycled by a future - <a class="Xr">fork(2)</a>.</p> -<p class="Pp" id="cpu_thread_exit"><a class="permalink" href="#cpu_thread_exit"><code class="Fn">cpu_thread_exit</code></a>() - cleans any machine-dependent state in <var class="Fa">td</var> while it is - exiting. This is called by the exiting thread so cannot free state needed - during in-kernel execution.</p> -<p class="Pp" id="cpu_thread_free"><a class="permalink" href="#cpu_thread_free"><code class="Fn">cpu_thread_free</code></a>() - releases any machine-dependent state in <var class="Fa">td</var> when it is - being freed. This is called for any thread that was not the last thread in a - process once it has finished execution.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">fork(2)</a>, <a class="Xr">procctl(2)</a>, - <a class="Xr">ptrace(2)</a>, <a class="Xr">thr_new(2)</a>, - <a class="Xr">wait(2)</a>, <a class="Xr">kproc_create(9)</a>, - <a class="Xr">kproc_kthread_add(9)</a>, <a class="Xr">kthread_add(9)</a>, - <a class="Xr">mi_switch(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was developed by SRI International, the - University of Cambridge Computer Laboratory (Department of Computer Science - and Technology), and Capabilities Limited under contract (FA8750-24-C-B047) - (“DEC”).</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 31, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/cpuset.9 4.html b/static/freebsd/man9/cpuset.9 4.html deleted file mode 100644 index e1fcba59..00000000 --- a/static/freebsd/man9/cpuset.9 4.html +++ /dev/null @@ -1,323 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">CPUSET(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">CPUSET(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">cpuset(9)</code> — - <code class="Nm">CPUSET_T_INITIALIZER</code>, - <code class="Nm">CPUSET_FSET</code>, <code class="Nm">CPU_CLR</code>, - <code class="Nm">CPU_COPY</code>, <code class="Nm">CPU_ISSET</code>, - <code class="Nm">CPU_SET</code>, <code class="Nm">CPU_ZERO</code>, - <code class="Nm">CPU_FILL</code>, <code class="Nm">CPU_SETOF</code>, - <code class="Nm">CPU_EMPTY</code>, <code class="Nm">CPU_ISFULLSET</code>, - <code class="Nm">CPU_FFS</code>, <code class="Nm">CPU_COUNT</code>, - <code class="Nm">CPU_SUBSET</code>, <code class="Nm">CPU_OVERLAP</code>, - <code class="Nm">CPU_CMP</code>, <code class="Nm">CPU_OR</code>, - <code class="Nm">CPU_ORNOT</code>, <code class="Nm">CPU_AND</code>, - <code class="Nm">CPU_ANDNOT</code>, <code class="Nm">CPU_XOR</code>, - <code class="Nm">CPU_CLR_ATOMIC</code>, - <code class="Nm">CPU_TEST_CLR_ATOMIC</code>, - <code class="Nm">CPU_SET_ATOMIC</code>, - <code class="Nm">CPU_SET_ATOMIC_ACQ</code>, - <code class="Nm">CPU_TEST_SET_ATOMIC</code>, - <code class="Nm">CPU_AND_ATOMIC</code>, - <code class="Nm">CPU_OR_ATOMIC</code>, - <code class="Nm">CPU_COPY_STORE_REL</code> — <span class="Nd">cpuset - manipulation macros</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/_cpuset.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/cpuset.h</a>></code></p> -<p class="Pp"><code class="Fn">CPUSET_T_INITIALIZER</code>(<var class="Fa" style="white-space: nowrap;">ARRAY_CONTENTS</var>);</p> -<p class="Pp"><var class="Vt">CPUSET_FSET</var></p> -<p class="Pp"><code class="Fn">CPU_CLR</code>(<var class="Fa" style="white-space: nowrap;">size_t - cpu_idx</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *cpuset</var>);</p> -<p class="Pp"><code class="Fn">CPU_COPY</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t - *from</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *to</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">CPU_ISSET</code>(<var class="Fa" style="white-space: nowrap;">size_t - cpu_idx</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *cpuset</var>);</p> -<p class="Pp"><code class="Fn">CPU_SET</code>(<var class="Fa" style="white-space: nowrap;">size_t - cpu_idx</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *cpuset</var>);</p> -<p class="Pp"><code class="Fn">CPU_ZERO</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t - *cpuset</var>);</p> -<p class="Pp"><code class="Fn">CPU_FILL</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t - *cpuset</var>);</p> -<p class="Pp"><code class="Fn">CPU_SETOF</code>(<var class="Fa" style="white-space: nowrap;">size_t - cpu_idx</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *cpuset</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">CPU_EMPTY</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t - *cpuset</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">CPU_ISFULLSET</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t - *cpuset</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">CPU_FFS</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t - *cpuset</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">CPU_COUNT</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t - *cpuset</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">CPU_SUBSET</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t - *haystack</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *needle</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">CPU_OVERLAP</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t - *cpuset1</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *cpuset2</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">CPU_CMP</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t - *cpuset1</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *cpuset2</var>);</p> -<p class="Pp"><code class="Fn">CPU_OR</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t - *dst</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *src1</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *src2</var>);</p> -<p class="Pp"><code class="Fn">CPU_ORNOT</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t - *dst</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *src1</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *src2</var>);</p> -<p class="Pp"><code class="Fn">CPU_AND</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t - *dst</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *src1</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *src2</var>);</p> -<p class="Pp"><code class="Fn">CPU_ANDNOT</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t - *dst</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *src1</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *src2</var>);</p> -<p class="Pp"><code class="Fn">CPU_XOR</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t - *dst</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *src1</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *src2</var>);</p> -<p class="Pp"><code class="Fn">CPU_CLR_ATOMIC</code>(<var class="Fa" style="white-space: nowrap;">size_t - cpu_idx</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *cpuset</var>);</p> -<p class="Pp"><code class="Fn">CPU_TEST_CLR_ATOMIC</code>(<var class="Fa" style="white-space: nowrap;">size_t - cpu_idx</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *cpuset</var>);</p> -<p class="Pp"><code class="Fn">CPU_SET_ATOMIC</code>(<var class="Fa" style="white-space: nowrap;">size_t - cpu_idx</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *cpuset</var>);</p> -<p class="Pp"><code class="Fn">CPU_SET_ATOMIC_ACQ</code>(<var class="Fa" style="white-space: nowrap;">size_t - cpu_idx</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *cpuset</var>);</p> -<p class="Pp"><code class="Fn">CPU_TEST_SET_ATOMIC</code>(<var class="Fa" style="white-space: nowrap;">size_t - cpu_idx</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *cpuset</var>);</p> -<p class="Pp"><code class="Fn">CPU_AND_ATOMIC</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t - *dst</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *src</var>);</p> -<p class="Pp"><code class="Fn">CPU_OR_ATOMIC</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t - *dst</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *src</var>);</p> -<p class="Pp"><code class="Fn">CPU_COPY_STORE_REL</code>(<var class="Fa" style="white-space: nowrap;">cpuset_t - *from</var>, <var class="Fa" style="white-space: nowrap;">cpuset_t - *to</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">cpuset(9)</code> family of macros provide a - flexible and efficient CPU set implementation, backed by the - <a class="Xr">bitset(9)</a> macros. Each CPU is represented by a single bit. - The maximum number of CPUs representable by <var class="Vt">cpuset_t</var> - is <var class="Va">CPU_SETSIZE</var>. Individual CPUs in cpusets are - referenced with indices zero through <var class="Fa">CPU_SETSIZE - - 1</var>.</p> -<p class="Pp" id="CPUSET_T_INITIALIZER">The - <a class="permalink" href="#CPUSET_T_INITIALIZER"><code class="Fn">CPUSET_T_INITIALIZER</code></a>() - macro allows one to initialize a <var class="Vt">cpuset_t</var> with a - compile time literal value.</p> -<p class="Pp" id="CPUSET_FSET">The - <a class="permalink" href="#CPUSET_FSET"><code class="Fn">CPUSET_FSET</code></a>() - macro defines a compile time literal, usable by - <code class="Fn">CPUSET_T_INITIALIZER</code>(), representing a full cpuset - (all CPUs present). For examples of - <code class="Fn">CPUSET_T_INITIALIZER</code>() and - <code class="Fn">CPUSET_FSET</code>() usage, see the - <a class="Sx" href="#CPUSET_T_INITIALIZER_EXAMPLE">CPUSET_T_INITIALIZER - EXAMPLE</a> section.</p> -<p class="Pp" id="CPU_CLR">The - <a class="permalink" href="#CPU_CLR"><code class="Fn">CPU_CLR</code></a>() - macro removes CPU <var class="Fa">cpu_idx</var> from the cpuset pointed to - by <var class="Fa">cpuset</var>. The - <a class="permalink" href="#CPU_CLR_ATOMIC"><code class="Fn" id="CPU_CLR_ATOMIC">CPU_CLR_ATOMIC</code></a>() - macro is identical, but the bit representing the CPU is cleared with atomic - machine instructions. The - <a class="permalink" href="#CPU_TEST_CLR_ATOMIC"><code class="Fn" id="CPU_TEST_CLR_ATOMIC">CPU_TEST_CLR_ATOMIC</code></a>() - macro atomically clears the bit representing the CPU and returns whether it - was set.</p> -<p class="Pp" id="CPU_COPY">The - <a class="permalink" href="#CPU_COPY"><code class="Fn">CPU_COPY</code></a>() - macro copies the contents of the cpuset <var class="Fa">from</var> to the - cpuset <var class="Fa">to</var>. - <a class="permalink" href="#CPU_COPY_STORE_REL"><code class="Fn" id="CPU_COPY_STORE_REL">CPU_COPY_STORE_REL</code></a>() - is similar, but copies component machine words from - <var class="Fa">from</var> and writes them to <var class="Fa">to</var> with - atomic store with release semantics. (That is, if <var class="Fa">to</var> - is composed of multiple machine words, - <code class="Fn">CPU_COPY_STORE_REL</code>() performs multiple individually - atomic operations.)</p> -<p class="Pp" id="CPU_SET">The - <a class="permalink" href="#CPU_SET"><code class="Fn">CPU_SET</code></a>() - macro adds CPU <var class="Fa">cpu_idx</var> to the cpuset pointed to by - <var class="Fa">cpuset</var>, if it is not already present. The - <a class="permalink" href="#CPU_SET_ATOMIC"><code class="Fn" id="CPU_SET_ATOMIC">CPU_SET_ATOMIC</code></a>() - macro is identical, but the bit representing the CPU is set with atomic - machine instructions. The - <a class="permalink" href="#CPU_SET_ATOMIC_ACQ"><code class="Fn" id="CPU_SET_ATOMIC_ACQ">CPU_SET_ATOMIC_ACQ</code></a>() - macro sets the bit representing the CPU with atomic acquire semantics. The - <a class="permalink" href="#CPU_TEST_SET_ATOMIC"><code class="Fn" id="CPU_TEST_SET_ATOMIC">CPU_TEST_SET_ATOMIC</code></a>() - macro atomically sets the bit representing the CPU and returns whether it - was set.</p> -<p class="Pp" id="CPU_ISSET">The - <a class="permalink" href="#CPU_ISSET"><code class="Fn">CPU_ISSET</code></a>() - macro returns <code class="Dv">true</code> if CPU - <var class="Fa">cpu_idx</var> is a member of the cpuset pointed to by - <var class="Fa">cpuset</var>.</p> -<p class="Pp" id="CPU_ZERO">The - <a class="permalink" href="#CPU_ZERO"><code class="Fn">CPU_ZERO</code></a>() - macro removes all CPUs from <var class="Fa">cpuset</var>.</p> -<p class="Pp" id="CPU_FILL">The - <a class="permalink" href="#CPU_FILL"><code class="Fn">CPU_FILL</code></a>() - macro adds all CPUs to <var class="Fa">cpuset</var>.</p> -<p class="Pp" id="CPU_SETOF">The - <a class="permalink" href="#CPU_SETOF"><code class="Fn">CPU_SETOF</code></a>() - macro removes all CPUs in <var class="Fa">cpuset</var> before adding only - CPU <var class="Fa">cpu_idx</var>.</p> -<p class="Pp" id="CPU_EMPTY">The - <a class="permalink" href="#CPU_EMPTY"><code class="Fn">CPU_EMPTY</code></a>() - macro returns <code class="Dv">true</code> if <var class="Fa">cpuset</var> - is empty.</p> -<p class="Pp" id="CPU_ISFULLSET">The - <a class="permalink" href="#CPU_ISFULLSET"><code class="Fn">CPU_ISFULLSET</code></a>() - macro returns <code class="Dv">true</code> if <var class="Fa">cpuset</var> - is full (the set of all CPUs).</p> -<p class="Pp" id="CPU_FFS">The - <a class="permalink" href="#CPU_FFS"><code class="Fn">CPU_FFS</code></a>() - macro returns the 1-index of the first (lowest) CPU in - <var class="Fa">cpuset</var>, or zero if <var class="Fa">cpuset</var> is - empty. Like with <a class="Xr">ffs(3)</a>, to use the non-zero result of - <code class="Fn">CPU_FFS</code>() as a <var class="Fa">cpu_idx</var> index - parameter to any other <code class="Nm">cpuset(9)</code> macro, you must - subtract one from the result.</p> -<p class="Pp" id="CPU_COUNT">The - <a class="permalink" href="#CPU_COUNT"><code class="Fn">CPU_COUNT</code></a>() - macro returns the total number of CPUs in <var class="Fa">cpuset</var>.</p> -<p class="Pp" id="CPU_SUBSET">The - <a class="permalink" href="#CPU_SUBSET"><code class="Fn">CPU_SUBSET</code></a>() - macro returns <code class="Dv">true</code> if <var class="Fa">needle</var> - is a subset of <var class="Fa">haystack</var>.</p> -<p class="Pp" id="CPU_OVERLAP">The - <a class="permalink" href="#CPU_OVERLAP"><code class="Fn">CPU_OVERLAP</code></a>() - macro returns <code class="Dv">true</code> if <var class="Fa">cpuset1</var> - and <var class="Fa">cpuset2</var> have any common CPUs. (That is, if - <var class="Fa">cpuset1</var> AND <var class="Fa">cpuset2</var> is not the - empty set.)</p> -<p class="Pp" id="CPU_CMP">The - <a class="permalink" href="#CPU_CMP"><code class="Fn">CPU_CMP</code></a>() - macro returns <code class="Dv">true</code> if <var class="Fa">cpuset1</var> - is NOT equal to <var class="Fa">cpuset2</var>.</p> -<p class="Pp" id="CPU_OR">The - <a class="permalink" href="#CPU_OR"><code class="Fn">CPU_OR</code></a>() - macro adds CPUs present in <var class="Fa">src</var> to - <var class="Fa">dst</var>. (It is the <code class="Nm">cpuset(9)</code> - equivalent of the scalar: <var class="Fa">dst</var> |= - <var class="Fa">src</var>.) - <a class="permalink" href="#CPU_OR_ATOMIC"><code class="Fn" id="CPU_OR_ATOMIC">CPU_OR_ATOMIC</code></a>() - is similar, but sets the bits representing CPUs in the component machine - words in <var class="Fa">dst</var> with atomic machine instructions. (That - is, if <var class="Fa">dst</var> is composed of multiple machine words, - <code class="Fn">CPU_OR_ATOMIC</code>() performs multiple individually - atomic operations.)</p> -<p class="Pp" id="CPU_ORNOT">The - <a class="permalink" href="#CPU_ORNOT"><code class="Fn">CPU_ORNOT</code></a>() - macro add CPUs not in <var class="Fa">src</var> to - <var class="Fa">dst</var>. (It is the <code class="Nm">cpuset(9)</code> - equivalent of the scalar: <var class="Fa">dst</var> |= <var class="Fa">~ - src</var>.)</p> -<p class="Pp" id="CPU_AND">The - <a class="permalink" href="#CPU_AND"><code class="Fn">CPU_AND</code></a>() - macro removes CPUs absent from <var class="Fa">src</var> from - <var class="Fa">dst</var>. (It is the <code class="Nm">cpuset(9)</code> - equivalent of the scalar: <var class="Fa">dst</var> &= - <var class="Fa">src</var>.) - <a class="permalink" href="#CPU_AND_ATOMIC"><code class="Fn" id="CPU_AND_ATOMIC">CPU_AND_ATOMIC</code></a>() - is similar, with the same atomic semantics as - <code class="Fn">CPU_OR_ATOMIC</code>().</p> -<p class="Pp" id="CPU_ANDNOT">The - <a class="permalink" href="#CPU_ANDNOT"><code class="Fn">CPU_ANDNOT</code></a>() - macro removes CPUs in <var class="Fa">src</var> from - <var class="Fa">dst</var>. (It is the <code class="Nm">cpuset(9)</code> - equivalent of the scalar: <var class="Fa">dst</var> &= <var class="Fa">~ - src</var>.)</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CPUSET_T_INITIALIZER_EXAMPLE"><a class="permalink" href="#CPUSET_T_INITIALIZER_EXAMPLE">CPUSET_T_INITIALIZER - EXAMPLE</a></h1> -<div class="Bd Li"> -<pre>cpuset_t myset; - -/* Initialize myset to filled (all CPUs) */ -myset = CPUSET_T_INITIALIZER(CPUSET_FSET); - -/* Initialize myset to only the lowest CPU */ -myset = CPUSET_T_INITIALIZER(0x1);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">cpuset(1)</a>, <a class="Xr">cpuset(2)</a>, - <a class="Xr">bitset(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp"><code class="In"><<a class="In">sys/cpuset.h</a>></code> - first appeared in <span class="Ux">FreeBSD 7.1</span>, released in January - 2009, and in <span class="Ux">FreeBSD 8.0</span>, released in November - 2009.</p> -<p class="Pp">This manual page first appeared in <span class="Ux">FreeBSD - 11.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">cpuset(9)</code> macros were written by - <span class="An">Jeff Roberson</span> - <<a class="Mt" href="mailto:jeff@FreeBSD.org">jeff@FreeBSD.org</a>>. - This manual page was written by <span class="An">Conrad Meyer</span> - <<a class="Mt" href="mailto:cem@FreeBSD.org">cem@FreeBSD.org</a>>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CAVEATS"><a class="permalink" href="#CAVEATS">CAVEATS</a></h1> -<p class="Pp">Unlike every other reference to individual set members, which are - zero-indexed, <code class="Fn">CPU_FFS</code>() returns a one-indexed result - (or zero if the cpuset is empty).</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 7, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/cr_bsd_visible.9 3.html b/static/freebsd/man9/cr_bsd_visible.9 3.html deleted file mode 100644 index e9fda69c..00000000 --- a/static/freebsd/man9/cr_bsd_visible.9 3.html +++ /dev/null @@ -1,97 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">CR_BSD_VISIBLE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">CR_BSD_VISIBLE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">cr_bsd_visible</code> — - <span class="Nd">determine if subjects may see entities according to BSD - security policies</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/proc.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">cr_bsd_visible</code>(<var class="Fa" style="white-space: nowrap;">struct - ucred *u1</var>, <var class="Fa" style="white-space: nowrap;">struct ucred - *u2</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This function determines if a subject with credentials - <var class="Fa">u1</var> is denied seeing an object or subject associated to - credentials <var class="Fa">u2</var> by the following policies and - associated <a class="Xr">sysctl(8)</a> knobs:</p> -<dl class="Bl-tag"> - <dt id="security.bsd.seeotheruids"><var class="Va">security.bsd.seeotheruids</var></dt> - <dd>If set to 0, subjects cannot see other subjects or objects if they are not - associated with the same real user ID. The corresponding internal function - is <a class="Xr">cr_canseeotheruids(9)</a>.</dd> - <dt id="security.bsd.seeothergids"><var class="Va">security.bsd.seeothergids</var></dt> - <dd>If set to 0, subjects cannot see other subjects or objects if they are not - both a member of at least one common group. The corresponding internal - function is <a class="Xr">cr_canseeothergids(9)</a>.</dd> - <dt id="security.bsd.see_jail_proc"><var class="Va">security.bsd.see_jail_proc</var></dt> - <dd>If set to 0, subjects cannot see other subjects or objects that are not - associated with the same jail as they are. The corresponding internal - function is <a class="Xr">cr_canseejailproc(9)</a>.</dd> -</dl> -<p class="Pp">As usual, the superuser (effective user ID 0) is exempt from any - of these policies provided that the <a class="Xr">sysctl(8)</a> variable - <var class="Va">security.bsd.suser_enabled</var> is non-zero and no active - MAC policy explicitly denies the exemption (see - <a class="Xr">priv_check_cred(9)</a>).</p> -<p class="Pp">This function is intended to be used as a helper to implement - <a class="Xr">cr_cansee(9)</a> and similar functions.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">This function returns zero if a subject with credentials - <var class="Fa">u1</var> may see a subject or object with credentials - <var class="Fa">u2</var> by the active above-mentioned policies, or - <code class="Er">ESRCH</code> otherwise.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="ESRCH">[<a class="permalink" href="#ESRCH"><code class="Er">ESRCH</code></a>]</dt> - <dd>Credentials <var class="Fa">u1</var> and <var class="Fa">u2</var> do not - have the same real user ID.</dd> - <dt id="ESRCH~2">[<a class="permalink" href="#ESRCH~2"><code class="Er">ESRCH</code></a>]</dt> - <dd>Credentials <var class="Fa">u1</var> and <var class="Fa">u2</var> are not - members of any common group (as determined by - <a class="Xr">realgroupmember(9)</a>).</dd> - <dt id="ESRCH~3">[<a class="permalink" href="#ESRCH~3"><code class="Er">ESRCH</code></a>]</dt> - <dd>Credentials <var class="Fa">u1</var> and <var class="Fa">u2</var> are not - in the same jail.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">cr_cansee(9)</a>, - <a class="Xr">cr_canseejailproc(9)</a>, - <a class="Xr">cr_canseeothergids(9)</a>, - <a class="Xr">cr_canseeotheruids(9)</a>, - <a class="Xr">priv_check_cred(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This function and its manual page were written by - <span class="An">Olivier Certner</span> - <<a class="Mt" href="mailto:olce.freebsd@certner.fr">olce.freebsd@certner.fr</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 18, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/cr_cansee.9 3.html b/static/freebsd/man9/cr_cansee.9 3.html deleted file mode 100644 index c17f4ccc..00000000 --- a/static/freebsd/man9/cr_cansee.9 3.html +++ /dev/null @@ -1,72 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">CR_CANSEE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">CR_CANSEE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">cr_cansee</code> — - <span class="Nd">determine visibility of objects given their user - credentials</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/proc.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">cr_cansee</code>(<var class="Fa" style="white-space: nowrap;">struct - ucred *u1</var>, <var class="Fa" style="white-space: nowrap;">struct ucred - *u2</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This function determines if a subject with credential - <var class="Fa">u1</var> can see a subject or object associated to - credential <var class="Fa">u2</var>.</p> -<p class="Pp">Specific types of subjects may need to submit to additional or - different restrictions. As an example, for processes, see - <a class="Xr">p_cansee(9)</a>, which calls this function.</p> -<p class="Pp">The implementation relies on <a class="Xr">cr_bsd_visible(9)</a> - and consequently the <a class="Xr">sysctl(8)</a> variables referenced in its - manual page influence the result.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">This function returns zero if the subject with credential - <var class="Fa">u1</var> can “see” the subject or object with - credential <var class="Fa">u2</var>, or <code class="Er">ESRCH</code> - otherwise.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="ESRCH">[<a class="permalink" href="#ESRCH"><code class="Er">ESRCH</code></a>]</dt> - <dd>The subject with credential <var class="Fa">u1</var> has been jailed and - the subject or object with credential <var class="Fa">u2</var> does not - belong to the same jail or one of its sub-jails, as determined by - <a class="Xr">prison_check(9)</a>.</dd> - <dt id="ESRCH~2">[<a class="permalink" href="#ESRCH~2"><code class="Er">ESRCH</code></a>]</dt> - <dd>The MAC subsystem denied visibility.</dd> - <dt id="ESRCH~3">[<a class="permalink" href="#ESRCH~3"><code class="Er">ESRCH</code></a>]</dt> - <dd><a class="Xr">cr_bsd_visible(9)</a> denied visibility according to the BSD - security policies in force.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">cr_bsd_visible(9)</a>, <a class="Xr">mac(9)</a>, - <a class="Xr">p_cansee(9)</a>, <a class="Xr">prison_check(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 18, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/cr_canseejailproc.9 4.html b/static/freebsd/man9/cr_canseejailproc.9 4.html deleted file mode 100644 index e53cab66..00000000 --- a/static/freebsd/man9/cr_canseejailproc.9 4.html +++ /dev/null @@ -1,69 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">CR_CANSEEJAILPROC(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">CR_CANSEEJAILPROC(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">cr_canseejailproc</code> — - <span class="Nd">determine if subjects may see entities in - sub-jails</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">cr_canseejailproc</code>(<var class="Fa" style="white-space: nowrap;">struct - ucred *u1</var>, <var class="Fa" style="white-space: nowrap;">struct ucred - *u2</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<div class="Bf Em">This function is internal. Its functionality is integrated - into the function <a class="Xr">cr_bsd_visible(9)</a>, which should be called - instead.</div> -<p class="Pp">This function checks if a subject associated to credentials - <var class="Fa">u1</var> is denied seeing a subject or object associated to - credentials <var class="Fa">u2</var> by a policy that requires both - credentials to be associated to the same jail. This is a restriction to the - baseline jail policy that a subject can see subjects or objects in its own - jail or any sub-jail of it.</p> -<p class="Pp">This policy is active if and only if the - <a class="Xr">sysctl(8)</a> variable - <var class="Va">security.bsd.see_jail_proc</var> is set to zero.</p> -<p class="Pp">As usual, the superuser (effective user ID 0) is exempt from this - policy provided that the <a class="Xr">sysctl(8)</a> variable - <var class="Va">security.bsd.suser_enabled</var> is non-zero and no active - MAC policy explicitly denies the exemption (see - <a class="Xr">priv_check_cred(9)</a>).</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">cr_canseejailproc</code>() function returns 0 - if the policy is disabled, both credentials are associated to the same jail, - or if <var class="Fa">u1</var> has privilege exempting it from the policy. - Otherwise, it returns <code class="Er">ESRCH</code>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">cr_bsd_visible(9)</a>, - <a class="Xr">priv_check_cred(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Olivier - Certner</span> - <<a class="Mt" href="mailto:olce.freebsd@certner.fr">olce.freebsd@certner.fr</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 18, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/cr_canseeothergids.9 4.html b/static/freebsd/man9/cr_canseeothergids.9 4.html deleted file mode 100644 index 60dd82af..00000000 --- a/static/freebsd/man9/cr_canseeothergids.9 4.html +++ /dev/null @@ -1,64 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">CR_CANSEEOTHERGIDS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">CR_CANSEEOTHERGIDS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">cr_canseeothergids</code> — - <span class="Nd">determine if subjects may see entities in a disjoint group - set</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">cr_canseeothergids</code>(<var class="Fa" style="white-space: nowrap;">struct - ucred *u1</var>, <var class="Fa" style="white-space: nowrap;">struct ucred - *u2</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<div class="Bf Em">This function is internal. Its functionality is integrated - into the function <a class="Xr">cr_bsd_visible(9)</a>, which should be called - instead.</div> -<p class="Pp">This function checks if a subject associated to credentials - <var class="Fa">u1</var> is denied seeing a subject or object associated to - credentials <var class="Fa">u2</var> by a policy that requires both - credentials to have at least one group in common. For this determination, - the real and supplementary group IDs are used, but not the effective group - IDs, as per <a class="Xr">realgroupmember(9)</a>.</p> -<p class="Pp">This policy is active if and only if the - <a class="Xr">sysctl(8)</a> variable - <var class="Va">security.bsd.see_other_gids</var> is set to zero.</p> -<p class="Pp">As usual, the superuser (effective user ID 0) is exempt from this - policy provided that the <a class="Xr">sysctl(8)</a> variable - <var class="Va">security.bsd.suser_enabled</var> is non-zero and no active - MAC policy explicitly denies the exemption (see - <a class="Xr">priv_check_cred(9)</a>).</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">cr_canseeothergids</code>() function returns - 0 if the policy is disabled, the credentials share at least one common - group, or if <var class="Fa">u1</var> has privilege exempting it from the - policy. Otherwise, it returns <code class="Er">ESRCH</code>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">cr_bsd_visible(9)</a>, - <a class="Xr">priv_check_cred(9)</a>, - <a class="Xr">realgroupmember(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 18, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/cr_canseeotheruids.9 4.html b/static/freebsd/man9/cr_canseeotheruids.9 4.html deleted file mode 100644 index fb57c009..00000000 --- a/static/freebsd/man9/cr_canseeotheruids.9 4.html +++ /dev/null @@ -1,61 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">CR_CANSEEOTHERUIDS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">CR_CANSEEOTHERUIDS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">cr_canseeotheruids</code> — - <span class="Nd">determine if subjects may see entities with differing user - ID</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">cr_canseeotheruids</code>(<var class="Fa" style="white-space: nowrap;">struct - ucred *u1</var>, <var class="Fa" style="white-space: nowrap;">struct ucred - *u2</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<div class="Bf Em">This function is internal. Its functionality is integrated - into the function <a class="Xr">cr_bsd_visible(9)</a>, which should be called - instead.</div> -<p class="Pp">This function checks if a subject associated to credentials - <var class="Fa">u1</var> is denied seeing a subject or object associated to - credentials <var class="Fa">u2</var> by a policy that requires both - credentials to have the same real user ID.</p> -<p class="Pp">This policy is active if and only if the - <a class="Xr">sysctl(8)</a> variable - <var class="Va">security.bsd.see_other_uids</var> is set to zero.</p> -<p class="Pp">As usual, the superuser (effective user ID 0) is exempt from this - policy provided that the <a class="Xr">sysctl(8)</a> variable - <var class="Va">security.bsd.suser_enabled</var> is non-zero and no active - MAC policy explicitly denies the exemption (see - <a class="Xr">priv_check_cred(9)</a>).</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">cr_canseeotheruids</code>() function returns - 0 if the policy is disabled, both credentials have the same real user ID, or - if <var class="Fa">u1</var> has privilege exempting it from the policy. - Otherwise, it returns <code class="Er">ESRCH</code>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">cr_bsd_visible(9)</a>, - <a class="Xr">priv_check_cred(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 18, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/critical_enter.9 3.html b/static/freebsd/man9/critical_enter.9 3.html deleted file mode 100644 index 8f5d8b6a..00000000 --- a/static/freebsd/man9/critical_enter.9 3.html +++ /dev/null @@ -1,94 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">CRITICAL_ENTER(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">CRITICAL_ENTER(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">critical_enter</code>, - <code class="Nm">critical_exit</code> — <span class="Nd">enter and - exit a critical region</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">critical_enter</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">critical_exit</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><code class="Fn">CRITICAL_ASSERT</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These functions are used to prevent preemption in a critical - region of code. All that is guaranteed is that the thread currently - executing on a CPU will not be preempted. Specifically, a thread in a - critical region will not migrate to another CPU while it is in a critical - region, nor will the current CPU switch to a different thread. The current - CPU may still trigger faults and exceptions during a critical section; - however, these faults are usually fatal.</p> -<p class="Pp">The CPU might also receive and handle interrupts within a critical - section. When this occurs the interrupt exit will not result in a context - switch, and execution will continue in the critical section. Thus, the net - effect of a critical section on the current thread's execution is similar to - running with interrupts disabled, except that timer interrupts and filtered - interrupt handlers do not incur a latency penalty.</p> -<p class="Pp" id="critical_enter">The - <a class="permalink" href="#critical_enter"><code class="Fn">critical_enter</code></a>() - and - <a class="permalink" href="#critical_exit"><code class="Fn" id="critical_exit">critical_exit</code></a>() - functions manage a per-thread counter to handle nested critical sections. If - a thread is made runnable that would normally preempt the current thread - while the current thread is in a critical section, then the preemption will - be deferred until the current thread exits the outermost critical - section.</p> -<p class="Pp" id="not">Note that these functions do not provide any inter-CPU - synchronization, data protection, or memory ordering guarantees, and thus - should <a class="permalink" href="#not"><i class="Em">not</i></a> be used to - protect shared data structures.</p> -<p class="Pp">These functions should be used with care as an unbound or infinite - loop within a critical region will deadlock the CPU. Also, they should not - be interlocked with operations on mutexes, sx locks, semaphores, or other - synchronization primitives, as these primitives may require a context switch - to operate. One exception to this is that spin mutexes include a critical - section, so in certain cases critical sections may be interlocked with spin - mutexes.</p> -<p class="Pp">Critical regions should be only as wide as necessary. That is, - code which does not require the critical section to operate correctly should - be excluded from its bounds whenever possible. Abuse of critical sections - has an effect on overall system latency and timer precision, since disabling - preemption will delay the execution of threaded interrupt handlers and - <a class="Xr">callout(9)</a> events on the current CPU.</p> -<p class="Pp" id="CRITICAL_ASSERT">The - <a class="permalink" href="#CRITICAL_ASSERT"><code class="Fn">CRITICAL_ASSERT</code></a>() - macro verifies that the provided thread <var class="Fa">td</var> is - currently executing in a critical section. It is a wrapper around - <a class="Xr">KASSERT(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">callout(9)</a>, <a class="Xr">KASSERT(9)</a>, - <a class="Xr">locking(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">These functions were introduced in <span class="Ux">FreeBSD - 5.0</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 20, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/crypto.9 3.html b/static/freebsd/man9/crypto.9 3.html deleted file mode 100644 index 5d0efed8..00000000 --- a/static/freebsd/man9/crypto.9 3.html +++ /dev/null @@ -1,182 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">CRYPTO(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">CRYPTO(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">crypto</code> — <span class="Nd">API for - cryptographic services in the kernel</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">opencrypto/cryptodev.h</a>></code></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><code class="Nm">crypto</code> is a framework for in-kernel - cryptography. It permits in-kernel consumers to encrypt and decrypt data and - also enables userland applications to use cryptographic hardware through the - <span class="Pa">/dev/crypto</span> device.</p> -<p class="Pp"><code class="Nm">crypto</code> supports encryption and decryption - operations using block and stream ciphers as well as computation and - verification of message authentication codes (MACs). Consumers allocate - sessions to describe a transform as discussed in - <a class="Xr">crypto_session(9)</a>. Consumers then allocate request objects - to describe each transformation such as encrypting a network packet or - decrypting a disk sector. Requests are described in - <a class="Xr">crypto_request(9)</a>.</p> -<p class="Pp">Device drivers are responsible for processing requests submitted - by consumers. <a class="Xr">crypto_driver(9)</a> describes the interfaces - drivers use to register with the framework, helper routines the framework - provides to facilitate request processing, and the interfaces drivers are - required to provide.</p> -<section class="Ss"> -<h2 class="Ss" id="Callbacks"><a class="permalink" href="#Callbacks">Callbacks</a></h2> -<p class="Pp">Since the consumers may not be associated with a process, drivers - may not <a class="Xr">sleep(9)</a>. The same holds for the framework. Thus, - a callback mechanism is used to notify a consumer that a request has been - completed (the callback is specified by the consumer on a per-request - basis). The callback is invoked by the framework whether the request was - successfully completed or not. Errors are reported to the callback - function.</p> -<p class="Pp">Session initialization does not use callbacks and returns errors - synchronously.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Session_Migration"><a class="permalink" href="#Session_Migration">Session - Migration</a></h2> -<p class="Pp">Operations may fail with a specific error code, - <code class="Er">EAGAIN</code>, to indicate that a session handle has - changed and that the request may be re-submitted immediately with the new - session. The consumer should update its saved copy of the session handle to - the value of <var class="Fa">crp_session</var> so that future requests use - the new session.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Supported_Algorithms"><a class="permalink" href="#Supported_Algorithms">Supported - Algorithms</a></h2> -<p class="Pp">More details on some algorithms may be found in - <a class="Xr">crypto(7)</a>.</p> -<p class="Pp">The following authentication algorithms are supported:</p> -<p class="Pp"></p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt id="CRYPTO_AES_CCM_CBC_MAC"><a class="permalink" href="#CRYPTO_AES_CCM_CBC_MAC"><code class="Dv">CRYPTO_AES_CCM_CBC_MAC</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_AES_NIST_GMAC"><a class="permalink" href="#CRYPTO_AES_NIST_GMAC"><code class="Dv">CRYPTO_AES_NIST_GMAC</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_BLAKE2B"><a class="permalink" href="#CRYPTO_BLAKE2B"><code class="Dv">CRYPTO_BLAKE2B</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_BLAKE2S"><a class="permalink" href="#CRYPTO_BLAKE2S"><code class="Dv">CRYPTO_BLAKE2S</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_NULL_HMAC"><a class="permalink" href="#CRYPTO_NULL_HMAC"><code class="Dv">CRYPTO_NULL_HMAC</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_POLY1305"><a class="permalink" href="#CRYPTO_POLY1305"><code class="Dv">CRYPTO_POLY1305</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_RIPEMD160"><a class="permalink" href="#CRYPTO_RIPEMD160"><code class="Dv">CRYPTO_RIPEMD160</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_RIPEMD160_HMAC"><a class="permalink" href="#CRYPTO_RIPEMD160_HMAC"><code class="Dv">CRYPTO_RIPEMD160_HMAC</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_SHA1"><a class="permalink" href="#CRYPTO_SHA1"><code class="Dv">CRYPTO_SHA1</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_SHA1_HMAC"><a class="permalink" href="#CRYPTO_SHA1_HMAC"><code class="Dv">CRYPTO_SHA1_HMAC</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_SHA2_224"><a class="permalink" href="#CRYPTO_SHA2_224"><code class="Dv">CRYPTO_SHA2_224</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_SHA2_224_HMAC"><a class="permalink" href="#CRYPTO_SHA2_224_HMAC"><code class="Dv">CRYPTO_SHA2_224_HMAC</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_SHA2_256"><a class="permalink" href="#CRYPTO_SHA2_256"><code class="Dv">CRYPTO_SHA2_256</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_SHA2_256_HMAC"><a class="permalink" href="#CRYPTO_SHA2_256_HMAC"><code class="Dv">CRYPTO_SHA2_256_HMAC</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_SHA2_384"><a class="permalink" href="#CRYPTO_SHA2_384"><code class="Dv">CRYPTO_SHA2_384</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_SHA2_384_HMAC"><a class="permalink" href="#CRYPTO_SHA2_384_HMAC"><code class="Dv">CRYPTO_SHA2_384_HMAC</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_SHA2_512"><a class="permalink" href="#CRYPTO_SHA2_512"><code class="Dv">CRYPTO_SHA2_512</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_SHA2_512_HMAC"><a class="permalink" href="#CRYPTO_SHA2_512_HMAC"><code class="Dv">CRYPTO_SHA2_512_HMAC</code></a></dt> - <dd style="width: auto;"> </dd> -</dl> -</div> -<p class="Pp">The following encryption algorithms are supported:</p> -<p class="Pp"></p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt id="CRYPTO_AES_CBC"><a class="permalink" href="#CRYPTO_AES_CBC"><code class="Dv">CRYPTO_AES_CBC</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_AES_ICM"><a class="permalink" href="#CRYPTO_AES_ICM"><code class="Dv">CRYPTO_AES_ICM</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_AES_XTS"><a class="permalink" href="#CRYPTO_AES_XTS"><code class="Dv">CRYPTO_AES_XTS</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_CAMELLIA_CBC"><a class="permalink" href="#CRYPTO_CAMELLIA_CBC"><code class="Dv">CRYPTO_CAMELLIA_CBC</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_CHACHA20"><a class="permalink" href="#CRYPTO_CHACHA20"><code class="Dv">CRYPTO_CHACHA20</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_NULL_CBC"><a class="permalink" href="#CRYPTO_NULL_CBC"><code class="Dv">CRYPTO_NULL_CBC</code></a></dt> - <dd style="width: auto;"> </dd> -</dl> -</div> -<p class="Pp">The following authenticated encryption with additional data (AEAD) - algorithms are supported:</p> -<p class="Pp"></p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt id="CRYPTO_AES_CCM_16"><a class="permalink" href="#CRYPTO_AES_CCM_16"><code class="Dv">CRYPTO_AES_CCM_16</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_AES_NIST_GCM_16"><a class="permalink" href="#CRYPTO_AES_NIST_GCM_16"><code class="Dv">CRYPTO_AES_NIST_GCM_16</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="CRYPTO_CHACHA20_POLY1305"><a class="permalink" href="#CRYPTO_CHACHA20_POLY1305"><code class="Dv">CRYPTO_CHACHA20_POLY1305</code></a></dt> - <dd style="width: auto;"> </dd> -</dl> -</div> -<p class="Pp">The following compression algorithms are supported:</p> -<p class="Pp"></p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt id="CRYPTO_DEFLATE_COMP"><a class="permalink" href="#CRYPTO_DEFLATE_COMP"><code class="Dv">CRYPTO_DEFLATE_COMP</code></a></dt> - <dd style="width: auto;"> </dd> -</dl> -</div> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="FILES"><a class="permalink" href="#FILES">FILES</a></h1> -<dl class="Bl-tag"> - <dt><span class="Pa">sys/opencrypto/crypto.c</span></dt> - <dd>most of the framework code</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">crypto(4)</a>, <a class="Xr">ipsec(4)</a>, - <a class="Xr">crypto(7)</a>, <a class="Xr">crypto_driver(9)</a>, - <a class="Xr">crypto_request(9)</a>, <a class="Xr">crypto_session(9)</a>, - <a class="Xr">sleep(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The cryptographic framework first appeared in - <span class="Ux">OpenBSD 2.7</span> and was written by - <span class="An">Angelos D. Keromytis</span> - <<a class="Mt" href="mailto:angelos@openbsd.org">angelos@openbsd.org</a>>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">The framework needs a mechanism for determining which driver is - best for a specific set of algorithms associated with a session. Some type - of benchmarking is in order here.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 12, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/crypto_buffer.9 3.html b/static/freebsd/man9/crypto_buffer.9 3.html deleted file mode 100644 index cb954fa0..00000000 --- a/static/freebsd/man9/crypto_buffer.9 3.html +++ /dev/null @@ -1,256 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">CRYPTO_BUFFER(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">CRYPTO_BUFFER(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">crypto_buffer</code> — - <span class="Nd">symmetric cryptographic request buffers</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">opencrypto/cryptodev.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">crypto_apply</code>(<var class="Fa">struct cryptop - *crp</var>, <var class="Fa">int off</var>, <var class="Fa">int len</var>, - <var class="Fa">int (*f)(void *, void *, u_int)</var>, <var class="Fa">void - *arg</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">crypto_apply_buf</code>(<var class="Fa">struct crypto_buffer - *cb</var>, <var class="Fa">int off</var>, <var class="Fa">int len</var>, - <var class="Fa">int (*f)(void *, void *, u_int)</var>, <var class="Fa">void - *arg</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">crypto_buffer_contiguous_subsegment</code>(<var class="Fa">struct - crypto_buffer *cb</var>, <var class="Fa">size_t skip</var>, - <var class="Fa">size_t len</var>);</p> -<p class="Pp"><var class="Ft">size_t</var> - <br/> - <code class="Fn">crypto_buffer_len</code>(<var class="Fa" style="white-space: nowrap;">struct - crypto_buffer *cb</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">crypto_contiguous_subsegment</code>(<var class="Fa">struct - cryptop *crp</var>, <var class="Fa">size_t skip</var>, - <var class="Fa">size_t len</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crypto_cursor_init</code>(<var class="Fa">struct - crypto_buffer_cursor *cc</var>, <var class="Fa">const struct crypto_buffer - *cb</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crypto_cursor_advance</code>(<var class="Fa" style="white-space: nowrap;">struct - crypto_buffer_cursor *cc</var>, - <var class="Fa" style="white-space: nowrap;">size_t amount</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crypto_cursor_copyback</code>(<var class="Fa">struct - crypto_buffer_cursor *cc</var>, <var class="Fa">int size</var>, - <var class="Fa">const void *src</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crypto_cursor_copydata</code>(<var class="Fa">struct - crypto_buffer_cursor *cc</var>, <var class="Fa">int size</var>, - <var class="Fa">void *dst</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crypto_cursor_copydata_noadv</code>(<var class="Fa">struct - crypto_buffer_cursor *cc</var>, <var class="Fa">int size</var>, - <var class="Fa">void *dst</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">crypto_cursor_segment</code>(<var class="Fa" style="white-space: nowrap;">struct - crypto_buffer_cursor *cc</var>, - <var class="Fa" style="white-space: nowrap;">size_t *len</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crypto_cursor_copy</code>(<var class="Fa">const struct - crypto_buffer_cursor *fromc</var>, <var class="Fa">struct - crypto_buffer_cursor *toc</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">CRYPTO_HAS_OUTPUT_BUFFER</code>(<var class="Fa" style="white-space: nowrap;">struct - cryptop *crp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Symmetric cryptographic requests use data buffers to describe the - data to be modified. Requests can either specify a single data buffer whose - contents are modified in place, or requests may specify separate data - buffers for input and output. <var class="Vt">struct crypto_buffer</var> - provides an abstraction that permits cryptographic requests to operate on - different types of buffers. <var class="Vt">struct crypto_cursor</var> - allows cryptographic drivers to iterate over a data buffer.</p> -<p class="Pp" id="CRYPTO_HAS_OUTPUT_BUFFER"><a class="permalink" href="#CRYPTO_HAS_OUTPUT_BUFFER"><code class="Fn">CRYPTO_HAS_OUTPUT_BUFFER</code></a>() - returns true if <var class="Fa">crp</var> uses separate buffers for input - and output and false if <var class="Fa">crp</var> uses a single buffer.</p> -<p class="Pp" id="crypto_buffer_len"><a class="permalink" href="#crypto_buffer_len"><code class="Fn">crypto_buffer_len</code></a>() - returns the length of data buffer <var class="Fa">cb</var> in bytes.</p> -<p class="Pp" id="crypto_apply_buf"><a class="permalink" href="#crypto_apply_buf"><code class="Fn">crypto_apply_buf</code></a>() - invokes a caller-supplied function to a region of the data buffer - <var class="Fa">cb</var>. The function <var class="Fa">f</var> is called one - or more times. For each invocation, the first argument to - <var class="Fa">f</var> is the value of <var class="Fa">arg</var> passed to - <code class="Fn">crypto_apply_buf</code>(). The second and third arguments - to <var class="Fa">f</var> are a pointer and length to a segment of the - buffer mapped into the kernel. The function is called enough times to cover - the <var class="Fa">len</var> bytes of the data buffer which starts at an - offset <var class="Fa">off</var>. If any invocation of - <var class="Fa">f</var> returns a non-zero value, - <code class="Fn">crypto_apply_buf</code>() immediately returns that value - without invoking <var class="Fa">f</var> on any remaining segments of the - region, otherwise <code class="Fn">crypto_apply_buf</code>() returns the - value from the final call to <var class="Fa">f</var>. - <a class="permalink" href="#crypto_apply"><code class="Fn" id="crypto_apply">crypto_apply</code></a>() - invokes the callback <var class="Fa">f</var> on a region of the input data - buffer for <var class="Fa">crp</var>.</p> -<p class="Pp" id="crypto_buffer_contiguous_subsegment"><a class="permalink" href="#crypto_buffer_contiguous_subsegment"><code class="Fn">crypto_buffer_contiguous_subsegment</code></a>() - attempts to locate a single, virtually-contiguous segment of the data buffer - <var class="Fa">cb</var>. The segment must be <var class="Fa">len</var> - bytes long and start at an offset of <var class="Fa">skip</var> bytes. If a - segment is found, a pointer to the start of the segment is returned. - Otherwise, <code class="Dv">NULL</code> is returned. - <a class="permalink" href="#crypto_contiguous_subsegment"><code class="Fn" id="crypto_contiguous_subsegment">crypto_contiguous_subsegment</code></a>() - attempts to locate a single, virtually-contiguous segment in the input data - buffer for <var class="Fa">crp</var>.</p> -<section class="Ss"> -<h2 class="Ss" id="Data_Buffers"><a class="permalink" href="#Data_Buffers">Data - Buffers</a></h2> -<p class="Pp">Data buffers are described by an instance of - <var class="Vt">struct crypto buffer</var>. The - <var class="Fa">cb_type</var> member contains the type of the data buffer. - The following types are supported:</p> -<dl class="Bl-tag"> - <dt id="CRYPTO_BUF_NONE"><a class="permalink" href="#CRYPTO_BUF_NONE"><code class="Dv">CRYPTO_BUF_NONE</code></a></dt> - <dd>An invalid buffer. Used to mark the output buffer when a crypto request - uses a single data buffer.</dd> - <dt id="CRYPTO_BUF_CONTIG"><a class="permalink" href="#CRYPTO_BUF_CONTIG"><code class="Dv">CRYPTO_BUF_CONTIG</code></a></dt> - <dd>An array of bytes mapped into the kernel's address space.</dd> - <dt id="CRYPTO_BUF_UIO"><a class="permalink" href="#CRYPTO_BUF_UIO"><code class="Dv">CRYPTO_BUF_UIO</code></a></dt> - <dd>A scatter/gather list of kernel buffers as described in - <a class="Xr">uio(9)</a>.</dd> - <dt id="CRYPTO_BUF_MBUF"><a class="permalink" href="#CRYPTO_BUF_MBUF"><code class="Dv">CRYPTO_BUF_MBUF</code></a></dt> - <dd>A chain of network memory buffers as described in - <a class="Xr">mbuf(9)</a>.</dd> - <dt id="CRYPTO_BUF_SINGLE_MBUF"><a class="permalink" href="#CRYPTO_BUF_SINGLE_MBUF"><code class="Dv">CRYPTO_BUF_SINGLE_MBUF</code></a></dt> - <dd>A single network memory buffer as described in - <a class="Xr">mbuf(9)</a>.</dd> - <dt id="CRYPTO_BUF_VMPAGE"><a class="permalink" href="#CRYPTO_BUF_VMPAGE"><code class="Dv">CRYPTO_BUF_VMPAGE</code></a></dt> - <dd>A scatter/gather list of <var class="Vt">vm_page_t</var> structures - describing pages in the kernel's address space. This buffer type is only - available if <code class="Dv">CRYPTO_HAS_VMPAGE</code> is true.</dd> -</dl> -<p class="Pp">The structure also contains the following type-specific - fields:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">cb_buf</var></dt> - <dd>A pointer to the start of a <code class="Dv">CRYPTO_BUF_CONTIG</code> data - buffer.</dd> - <dt><var class="Fa">cb_buf_len</var></dt> - <dd>The length of a <code class="Dv">CRYPTO_BUF_CONTIG</code> data buffer</dd> - <dt><var class="Fa">cb_mbuf</var></dt> - <dd>A pointer to a <var class="Vt">struct mbuf</var> for - <code class="Dv">CRYPTO_BUF_MBUF</code> and - <code class="Dv">CRYPTO_BUF_SINGLE_MBUF</code>.</dd> - <dt><var class="Fa">cb_uio</var></dt> - <dd>A pointer to a <var class="Vt">struct uio</var> for - <code class="Dv">CRYPTO_BUF_UIO</code>.</dd> - <dt><var class="Fa">cb_vm_page</var></dt> - <dd>A pointer to an array of <var class="Vt">struct vm_page</var> for - <code class="Dv">CRYPTO_BUF_VMPAGE</code>.</dd> - <dt><var class="Fa">cb_vm_page_len</var></dt> - <dd>The total amount of data included in the <var class="Fa">cb_vm_page</var> - array, in bytes.</dd> - <dt><var class="Fa">cb_vm_page_offset</var></dt> - <dd>Offset in bytes in the first page of <var class="Fa">cb_vm_page</var> - where valid data begins.</dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss" id="Cursors"><a class="permalink" href="#Cursors">Cursors</a></h2> -<p class="Pp">Cursors provide a mechanism for iterating over a data buffer. They - are primarily intended for use in software drivers which access data buffers - via virtual addresses.</p> -<p class="Pp" id="crypto_cursor_init"><a class="permalink" href="#crypto_cursor_init"><code class="Fn">crypto_cursor_init</code></a>() - initializes the cursor <var class="Fa">cc</var> to reference the start of - the data buffer <var class="Fa">cb</var>.</p> -<p class="Pp" id="crypto_cursor_advance"><a class="permalink" href="#crypto_cursor_advance"><code class="Fn">crypto_cursor_advance</code></a>() - advances the cursor <var class="Fa">amount</var> bytes forward in the data - buffer.</p> -<p class="Pp" id="crypto_cursor_copyback"><a class="permalink" href="#crypto_cursor_copyback"><code class="Fn">crypto_cursor_copyback</code></a>() - copies <var class="Fa">size</var> bytes from the local buffer pointed to by - <var class="Fa">src</var> into the data buffer associated with - <var class="Fa">cc</var>. The bytes are written to the current position of - <var class="Fa">cc</var>, and the cursor is then advanced by - <var class="Fa">size</var> bytes.</p> -<p class="Pp" id="crypto_cursor_copydata"><a class="permalink" href="#crypto_cursor_copydata"><code class="Fn">crypto_cursor_copydata</code></a>() - copies <var class="Fa">size</var> bytes out of the data buffer associated - with <var class="Fa">cc</var> into a local buffer pointed to by - <var class="Fa">dst</var>. The bytes are read from the current position of - <var class="Fa">cc</var>, and the cursor is then advanced by - <var class="Fa">size</var> bytes.</p> -<p class="Pp" id="crypto_cursor_copydata_noadv"><a class="permalink" href="#crypto_cursor_copydata_noadv"><code class="Fn">crypto_cursor_copydata_noadv</code></a>() - is similar to <code class="Fn">crypto_cursor_copydata</code>() except that - it does not change the current position of <var class="Fa">cc</var>.</p> -<p class="Pp" id="crypto_cursor_segment"><a class="permalink" href="#crypto_cursor_segment"><code class="Fn">crypto_cursor_segment</code></a>() - returns the start of the virtually-contiguous segment at the current - position of <var class="Fa">cc</var>. The length of the segment is stored in - <var class="Fa">len</var>.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp"><code class="Fn">crypto_apply</code>() and - <code class="Fn">crypto_apply_buf</code>() return the return value from the - caller-supplied callback function.</p> -<p class="Pp"><code class="Fn">crypto_buffer_contiguous_subsegment</code>(), - <code class="Fn">crypto_contiguous_subsegment</code>(), and - <code class="Fn">crypto_cursor_segment</code>() return a pointer to a - contiguous segment or <code class="Dv">NULL</code>.</p> -<p class="Pp"><code class="Fn">crypto_buffer_len</code>() returns the length of - a buffer in bytes.</p> -<p class="Pp"><code class="Fn">crypto_cursor_seglen</code>() returns the length - in bytes of a contiguous segment.</p> -<p class="Pp"><code class="Fn">crypto_cursor_copy</code>() makes a deep copy of - the cursor <var class="Fa">fromc</var>. The two copies do not share any - state and can thus be used independently.</p> -<p class="Pp"><code class="Fn">CRYPTO_HAS_OUTPUT_BUFFER</code>() returns true if - the request uses a separate output buffer.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ipsec(4)</a>, <a class="Xr">crypto(7)</a>, - <a class="Xr">bus_dma(9)</a>, <a class="Xr">crypto(9)</a>, - <a class="Xr">crypto_driver(9)</a>, <a class="Xr">crypto_request(9)</a>, - <a class="Xr">crypto_session(9)</a>, <a class="Xr">mbuf(9)</a>, - <a class="Xr">uio(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">crypto_buffer</code> functions first appeared - in <span class="Ux">FreeBSD 13</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">crypto_buffer</code> functions and this - manual page were written by <span class="An">John Baldwin</span> - <<a class="Mt" href="mailto:jhb@FreeBSD.org">jhb@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 11, 2022</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/crypto_driver.9 4.html b/static/freebsd/man9/crypto_driver.9 4.html deleted file mode 100644 index ca7af164..00000000 --- a/static/freebsd/man9/crypto_driver.9 4.html +++ /dev/null @@ -1,269 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">CRYPTO_DRIVER(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">CRYPTO_DRIVER(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">crypto_driver</code> — - <span class="Nd">interface for symmetric cryptographic drivers</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">opencrypto/cryptodev.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crypto_copyback</code>(<var class="Fa" style="white-space: nowrap;">struct - cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">int - off</var>, <var class="Fa" style="white-space: nowrap;">int size</var>, - <var class="Fa" style="white-space: nowrap;">const void *src</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crypto_copydata</code>(<var class="Fa" style="white-space: nowrap;">struct - cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">int - off</var>, <var class="Fa" style="white-space: nowrap;">int size</var>, - <var class="Fa" style="white-space: nowrap;">void *dst</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crypto_done</code>(<var class="Fa" style="white-space: nowrap;">struct - cryptop *crp</var>);</p> -<p class="Pp"><var class="Ft">int32_t</var> - <br/> - <code class="Fn">crypto_get_driverid</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">size_t - session_size</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">crypto_get_driver_session</code>(<var class="Fa" style="white-space: nowrap;">crypto_session_t - crypto_session</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crypto_read_iv</code>(<var class="Fa" style="white-space: nowrap;">struct - cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">void - *iv</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">crypto_unblock</code>(<var class="Fa" style="white-space: nowrap;">uint32_t - driverid</var>, <var class="Fa" style="white-space: nowrap;">int - what</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">crypto_unregister_all</code>(<var class="Fa" style="white-space: nowrap;">uint32_t - driverid</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">CRYPTODEV_FREESESSION</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">crypto_session_t - crypto_session</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">CRYPTODEV_NEWSESSION</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">crypto_session_t crypto_session</var>, - <var class="Fa">const struct crypto_session_params *csp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">CRYPTODEV_PROBESESSION</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">const struct crypto_session_params - *csp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">CRYPTODEV_PROCESS</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">struct cryptop - *crp</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">hmac_init_ipad</code>(<var class="Fa">struct auth_hash - *axf</var>, <var class="Fa">const char *key</var>, <var class="Fa">int - klen</var>, <var class="Fa">void *auth_ctx</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">hmac_init_opad</code>(<var class="Fa">struct auth_hash - *axf</var>, <var class="Fa">const char *key</var>, <var class="Fa">int - klen</var>, <var class="Fa">void *auth_ctx</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Symmetric cryptographic drivers process cryptographic requests - submitted to sessions associated with the driver.</p> -<p class="Pp" id="crypto_get_driverid">Cryptographic drivers call - <a class="permalink" href="#crypto_get_driverid"><code class="Fn">crypto_get_driverid</code></a>() - to register with the cryptographic framework. <var class="Fa">dev</var> is - the device used to service requests. The - <a class="permalink" href="#CRYPTODEV"><code class="Fn" id="CRYPTODEV">CRYPTODEV</code></a>() - methods are defined in the method table for the device driver attached to - <var class="Fa">dev</var>. <var class="Fa">session_size</var> specifies the - size of a driver-specific per-session structure allocated by the - cryptographic framework. <var class="Fa">flags</var> is a bitmask of - properties about the driver. Exactly one of - <code class="Dv">CRYPTOCAP_F_SOFTWARE</code> or - <code class="Dv">CRYPTOCAP_F_HARDWARE</code> must be specified. - <code class="Dv">CRYPTOCAP_F_SOFTWARE</code> should be used for drivers - which process requests using host CPUs. - <code class="Dv">CRYPTOCAP_F_HARDWARE</code> should be used for drivers - which process requests on separate co-processors. - <code class="Dv">CRYPTOCAP_F_SYNC</code> should be set for drivers which - process requests synchronously in - <code class="Fn">CRYPTODEV_PROCESS</code>(). - <code class="Dv">CRYPTOCAP_F_ACCEL_SOFTWARE</code> should be set for - software drivers which use accelerated CPU instructions. - <code class="Fn">crypto_get_driverid</code>() returns an opaque driver - id.</p> -<p class="Pp" id="crypto_unregister_all"><a class="permalink" href="#crypto_unregister_all"><code class="Fn">crypto_unregister_all</code></a>() - unregisters a driver from the cryptographic framework. If there are any - pending operations or open sessions, this function will sleep. - <var class="Fa">driverid</var> is the value returned by an earlier call to - <code class="Fn">crypto_get_driverid</code>().</p> -<p class="Pp" id="crypto_newsession">When a new session is created by - <a class="permalink" href="#crypto_newsession"><code class="Fn">crypto_newsession</code></a>(), - <a class="permalink" href="#CRYPTODEV_PROBESESSION"><code class="Fn" id="CRYPTODEV_PROBESESSION">CRYPTODEV_PROBESESSION</code></a>() - is invoked by the cryptographic framework on each active driver to determine - the best driver to use for the session. This method should inspect the - session parameters in <var class="Fa">csp</var>. If a driver does not - support requests described by <var class="Fa">csp</var>, this method should - return an error value. If the driver does support requests described by - <var class="Fa">csp</var>, it should return a negative value. The framework - prefers drivers with the largest negative value, similar to - <a class="Xr">DEVICE_PROBE(9)</a>. The following values are defined for - non-error return values from this method:</p> -<dl class="Bl-tag"> - <dt id="CRYPTODEV_PROBE_HARDWARE"><a class="permalink" href="#CRYPTODEV_PROBE_HARDWARE"><code class="Dv">CRYPTODEV_PROBE_HARDWARE</code></a></dt> - <dd>The driver processes requests via a co-processor.</dd> - <dt id="CRYPTODEV_PROBE_ACCEL_SOFTWARE"><a class="permalink" href="#CRYPTODEV_PROBE_ACCEL_SOFTWARE"><code class="Dv">CRYPTODEV_PROBE_ACCEL_SOFTWARE</code></a></dt> - <dd>The driver processes requests on the host CPU using optimized instructions - such as AES-NI.</dd> - <dt id="CRYPTODEV_PROBE_SOFTWARE"><a class="permalink" href="#CRYPTODEV_PROBE_SOFTWARE"><code class="Dv">CRYPTODEV_PROBE_SOFTWARE</code></a></dt> - <dd>The driver processes requests on the host CPU.</dd> -</dl> -<p class="Pp">This method should not sleep.</p> -<p class="Pp" id="CRYPTODEV_NEWSESSION">Once the framework has chosen a driver - for a session, the framework invokes the - <a class="permalink" href="#CRYPTODEV_NEWSESSION"><code class="Fn">CRYPTODEV_NEWSESSION</code></a>() - method to initialize driver-specific session state. Prior to calling this - method, the framework allocates a per-session driver-specific data - structure. This structure is initialized with zeroes, and its size is set by - the <var class="Fa">session_size</var> passed to - <code class="Fn">crypto_get_driverid</code>(). This method can retrieve a - pointer to this data structure by passing - <var class="Fa">crypto_session</var> to - <code class="Fn">crypto_get_driver_session</code>(). Session parameters are - described in <var class="Fa">csp</var>.</p> -<p class="Pp">This method should not sleep.</p> -<p class="Pp" id="CRYPTODEV_FREESESSION"><a class="permalink" href="#CRYPTODEV_FREESESSION"><code class="Fn">CRYPTODEV_FREESESSION</code></a>() - is invoked to release any driver-specific state when a session is destroyed. - The per-session driver-specific data structure is explicitly zeroed and - freed by the framework after this method returns. If a driver requires no - additional tear-down steps, it can leave this method undefined.</p> -<p class="Pp">This method should not sleep.</p> -<p class="Pp" id="CRYPTODEV_PROCESS"><a class="permalink" href="#CRYPTODEV_PROCESS"><code class="Fn">CRYPTODEV_PROCESS</code></a>() - is invoked for each request submitted to an active session. This method can - either complete a request synchronously or schedule it to be completed - asynchronously, but it must not sleep.</p> -<p class="Pp" id="crypto_unblock">If this method is not able to complete a - request due to insufficient resources such as a full command queue, it can - defer the request by returning <code class="Dv">ERESTART</code>. The request - will be queued by the framework and retried once the driver releases pending - requests via - <a class="permalink" href="#crypto_unblock"><code class="Fn">crypto_unblock</code></a>(). - Any requests submitted to sessions belonging to the driver will also be - queued until <code class="Fn">crypto_unblock</code>() is called.</p> -<p class="Pp">If a driver encounters errors while processing a request, it - should report them via the <var class="Fa">crp_etype</var> field of - <var class="Fa">crp</var> rather than returning an error directly.</p> -<p class="Pp"><var class="Fa">flags</var> may be set to - <code class="Dv">CRYPTO_HINT_MORE</code> if there are additional requests - queued for this driver. The driver can use this as a hint to batch - completion interrupts. Note that these additional requests may be from - different sessions.</p> -<p class="Pp" id="crypto_get_driver_session"><a class="permalink" href="#crypto_get_driver_session"><code class="Fn">crypto_get_driver_session</code></a>() - returns a pointer to the driver-specific per-session data structure for the - session <var class="Fa">crypto_session</var>. This function can be used in - the <code class="Fn">CRYPTODEV_NEWSESSION</code>(), - <code class="Fn">CRYPTODEV_PROCESS</code>(), and - <code class="Fn">CRYPTODEV_FREESESSION</code>() callbacks.</p> -<p class="Pp" id="crypto_copydata"><a class="permalink" href="#crypto_copydata"><code class="Fn">crypto_copydata</code></a>() - copies <var class="Fa">size</var> bytes out of the input buffer for - <var class="Fa">crp</var> into a local buffer pointed to by - <var class="Fa">dst</var>. The bytes are read starting at an offset of - <var class="Fa">off</var> bytes in the request's input buffer.</p> -<p class="Pp" id="crypto_copyback"><a class="permalink" href="#crypto_copyback"><code class="Fn">crypto_copyback</code></a>() - copies <var class="Fa">size</var> bytes from the local buffer pointed to by - <var class="Fa">src</var> into the output buffer for - <var class="Fa">crp</var>. The bytes are written starting at an offset of - <var class="Fa">off</var> bytes in the request's output buffer.</p> -<p class="Pp" id="crypto_read_iv"><a class="permalink" href="#crypto_read_iv"><code class="Fn">crypto_read_iv</code></a>() - copies the IV or nonce for <var class="Fa">crp</var> into the local buffer - pointed to by <var class="Fa">iv</var>.</p> -<p class="Pp" id="crypto_done">A driver calls - <a class="permalink" href="#crypto_done"><code class="Fn">crypto_done</code></a>() - to mark the request <var class="Fa">crp</var> as completed. Any errors - should be set in <var class="Fa">crp_etype</var> prior to calling this - function.</p> -<p class="Pp" id="crypto_unblock~2">If a driver defers a request by returning - <code class="Dv">ERESTART</code> from - <code class="Dv">CRYPTO_PROCESS</code>, the framework will queue all - requests for the driver until the driver calls - <a class="permalink" href="#crypto_unblock~2"><code class="Fn">crypto_unblock</code></a>() - to indicate that the temporary resource shortage has been relieved. For - example, if a driver returns <code class="Dv">ERESTART</code> due to a full - command ring, it would invoke <code class="Fn">crypto_unblock</code>() from - a command completion interrupt that makes a command ring entry available. - <var class="Fa">driverid</var> is the value returned by - <code class="Fn">crypto_get_driverid</code>(). <var class="Fa">what</var> - indicates which types of requests the driver is able to handle again:</p> -<dl class="Bl-tag"> - <dt id="CRYPTO_SYMQ"><a class="permalink" href="#CRYPTO_SYMQ"><code class="Dv">CRYPTO_SYMQ</code></a></dt> - <dd>indicates that the driver is able to handle symmetric requests passed to - <code class="Fn">CRYPTODEV_PROCESS</code>().</dd> -</dl> -<p class="Pp" id="hmac_init_ipad"><a class="permalink" href="#hmac_init_ipad"><code class="Fn">hmac_init_ipad</code></a>() - prepares an authentication context to generate the inner hash of an HMAC. - <var class="Fa">axf</var> is a software implementation of an authentication - algorithm such as the value returned by - <a class="permalink" href="#crypto_auth_hash"><code class="Fn" id="crypto_auth_hash">crypto_auth_hash</code></a>(). - <var class="Fa">key</var> is a pointer to a HMAC key of - <var class="Fa">klen</var> bytes. <var class="Fa">auth_ctx</var> points to a - valid authentication context for the desired algorithm. The function - initializes the context with the supplied key.</p> -<p class="Pp" id="hmac_init_opad"><a class="permalink" href="#hmac_init_opad"><code class="Fn">hmac_init_opad</code></a>() - is similar to <code class="Fn">hmac_init_ipad</code>() except that it - prepares an authentication context to generate the outer hash of an - HMAC.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp"><code class="Fn">crypto_apply</code>() returns the return value - from the caller-supplied callback function.</p> -<p class="Pp"><code class="Fn">crypto_contiguous_subsegment</code>() returns a - pointer to a contiguous segment or <code class="Dv">NULL</code>.</p> -<p class="Pp"><code class="Fn">crypto_get_driverid</code>() returns a driver - identifier on success or -1 on error.</p> -<p class="Pp"><code class="Fn">crypto_unblock</code>(), - <code class="Fn">crypto_unregister_all</code>(), - <code class="Fn">CRYPTODEV_FREESESSION</code>(), - <code class="Fn">CRYPTODEV_NEWSESSION</code>(), and - <code class="Fn">CRYPTODEV_PROCESS</code>() return zero on success or an - error on failure.</p> -<p class="Pp"><code class="Fn">CRYPTODEV_PROBESESSION</code>() returns a - negative value on success or an error on failure.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">crypto(7)</a>, <a class="Xr">crypto(9)</a>, - <a class="Xr">crypto_buffer(9)</a>, <a class="Xr">crypto_request(9)</a>, - <a class="Xr">crypto_session(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 12, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/crypto_request.9 4.html b/static/freebsd/man9/crypto_request.9 4.html deleted file mode 100644 index f33fe032..00000000 --- a/static/freebsd/man9/crypto_request.9 4.html +++ /dev/null @@ -1,505 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">CRYPTO_REQUEST(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">CRYPTO_REQUEST(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">crypto_request</code> — - <span class="Nd">symmetric cryptographic operations</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">opencrypto/cryptodev.h</a>></code></p> -<p class="Pp"><var class="Ft">struct cryptop *</var> - <br/> - <code class="Fn">crypto_clonereq</code>(<var class="Fa" style="white-space: nowrap;">crypto_session_t - cses</var>, <var class="Fa" style="white-space: nowrap;">struct cryptop - *crp</var>, <var class="Fa" style="white-space: nowrap;">int how</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">crypto_dispatch</code>(<var class="Fa" style="white-space: nowrap;">struct - cryptop *crp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">crypto_dispatch_async</code>(<var class="Fa" style="white-space: nowrap;">struct - cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crypto_dispatch_batch</code>(<var class="Fa" style="white-space: nowrap;">struct - cryptopq *crpq</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crypto_destroyreq</code>(<var class="Fa" style="white-space: nowrap;">struct - cryptop *crp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crypto_freereq</code>(<var class="Fa" style="white-space: nowrap;">struct - cryptop *crp</var>);</p> -<p class="Pp"><var class="Ft">struct cryptop *</var> - <br/> - <code class="Fn">crypto_getreq</code>(<var class="Fa" style="white-space: nowrap;">crypto_session_t - cses</var>, <var class="Fa" style="white-space: nowrap;">int how</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crypto_initreq</code>(<var class="Fa" style="white-space: nowrap;">struct - cryptop *crp</var>, - <var class="Fa" style="white-space: nowrap;">crypto_session_t - cses</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crypto_use_buf</code>(<var class="Fa" style="white-space: nowrap;">struct - cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">void - *buf</var>, <var class="Fa" style="white-space: nowrap;">int len</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crypto_use_mbuf</code>(<var class="Fa" style="white-space: nowrap;">struct - cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crypto_use_uio</code>(<var class="Fa" style="white-space: nowrap;">struct - cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">struct uio - *uio</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crypto_use_vmpage</code>(<var class="Fa" style="white-space: nowrap;">struct - cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">vm_page_t - *pages</var>, <var class="Fa" style="white-space: nowrap;">int len</var>, - <var class="Fa" style="white-space: nowrap;">int offset</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crypto_use_output_buf</code>(<var class="Fa" style="white-space: nowrap;">struct - cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">void - *buf</var>, <var class="Fa" style="white-space: nowrap;">int len</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crypto_use_output_mbuf</code>(<var class="Fa" style="white-space: nowrap;">struct - cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crypto_use_output_uio</code>(<var class="Fa" style="white-space: nowrap;">struct - cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">struct uio - *uio</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crypto_use_output_vmpage</code>(<var class="Fa" style="white-space: nowrap;">struct - cryptop *crp</var>, <var class="Fa" style="white-space: nowrap;">vm_page_t - *pages</var>, <var class="Fa" style="white-space: nowrap;">int len</var>, - <var class="Fa" style="white-space: nowrap;">int offset</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Each symmetric cryptographic operation in the kernel is described - by an instance of <var class="Vt">struct cryptop</var> and is associated - with an active session.</p> -<p class="Pp" id="crypto_getreq">Requests can either be allocated dynamically or - use caller-supplied storage. Dynamically allocated requests should be - allocated by either - <a class="permalink" href="#crypto_getreq"><code class="Fn">crypto_getreq</code></a>() - or <code class="Fn">crypto_clonereq</code>(), and freed by - <code class="Fn">crypto_freereq</code>() once the request has completed. - Requests using caller-supplied storage should be initialized by - <code class="Fn">crypto_initreq</code>() at the start of each operation and - destroyed by <code class="Fn">crypto_destroyreq</code>() once the request - has completed.</p> -<p class="Pp" id="crypto_clonereq">For - <a class="permalink" href="#crypto_clonereq"><code class="Fn">crypto_clonereq</code></a>(), - <code class="Fn">crypto_getreq</code>(), and - <a class="permalink" href="#crypto_initreq"><code class="Fn" id="crypto_initreq">crypto_initreq</code></a>(), - <var class="Fa">cses</var> is a reference to an active session. For - <code class="Fn">crypto_clonereq</code>() and - <code class="Fn">crypto_getreq</code>(), <var class="Fa">how</var> is passed - to <a class="Xr">malloc(9)</a> and should be set to either - <code class="Dv">M_NOWAIT</code> or <code class="Dv">M_WAITOK</code>.</p> -<p class="Pp" id="crypto_clonereq~2"><a class="permalink" href="#crypto_clonereq~2"><code class="Fn">crypto_clonereq</code></a>() - allocates a new request that inherits request inputs such as request buffers - from the original <var class="Fa">crp</var> request. However, the new - request is associated with the <var class="Fa">cses</var> session rather - than inheriting the session from <var class="Fa">crp</var>. - <var class="Fa">crp</var> must not be a completed request.</p> -<p class="Pp">Once a request has been initialized, the caller should set fields - in the structure to describe request-specific parameters. Unused fields - should be left as-is.</p> -<p class="Pp" id="crypto_dispatch">The - <a class="permalink" href="#crypto_dispatch"><code class="Fn">crypto_dispatch</code></a>(), - <code class="Fn">crypto_dispatch_async</code>(), and - <code class="Fn">crypto_dispatch_batch</code>() functions pass one or more - crypto requests to the driver attached to the request's session. If there - are errors in the request's fields, these functions may return an error to - the caller. If errors are encountered while servicing the request, they will - instead be reported to the request's callback function - (<var class="Fa">crp_callback</var>) via - <var class="Fa">crp_etype</var>.</p> -<p class="Pp" id="crypto_dispatch~2">Note that a request's callback function may - be invoked before - <a class="permalink" href="#crypto_dispatch~2"><code class="Fn">crypto_dispatch</code></a>() - returns.</p> -<p class="Pp" id="crypto_destroyreq">Once a request has signaled completion by - invoking its callback function, it should be freed via - <a class="permalink" href="#crypto_destroyreq"><code class="Fn">crypto_destroyreq</code></a>() - or - <a class="permalink" href="#crypto_freereq"><code class="Fn" id="crypto_freereq">crypto_freereq</code></a>().</p> -<p class="Pp">Cryptographic operations include several fields to describe the - request.</p> -<section class="Ss"> -<h2 class="Ss" id="Request_Buffers"><a class="permalink" href="#Request_Buffers">Request - Buffers</a></h2> -<p class="Pp">Requests can either specify a single data buffer that is modified - in place (<var class="Fa">crp_buf</var>) or separate input - (<var class="Fa">crp_buf</var>) and output (<var class="Fa">crp_obuf</var>) - buffers. Note that separate input and output buffers are not supported for - compression mode requests.</p> -<p class="Pp">All requests must have a valid <var class="Fa">crp_buf</var> - initialized by one of the following functions:</p> -<dl class="Bl-tag"> - <dt id="crypto_use_buf"><a class="permalink" href="#crypto_use_buf"><code class="Fn">crypto_use_buf</code></a>()</dt> - <dd>Uses an array of <var class="Fa">len</var> bytes pointed to by - <var class="Fa">buf</var> as the data buffer.</dd> - <dt id="crypto_use_mbuf"><a class="permalink" href="#crypto_use_mbuf"><code class="Fn">crypto_use_mbuf</code></a>()</dt> - <dd>Uses the network memory buffer <var class="Fa">m</var> as the data - buffer.</dd> - <dt id="crypto_use_uio"><a class="permalink" href="#crypto_use_uio"><code class="Fn">crypto_use_uio</code></a>()</dt> - <dd>Uses the scatter/gather list <var class="Fa">uio</var> as the data - buffer.</dd> - <dt id="crypto_use_vmpage"><a class="permalink" href="#crypto_use_vmpage"><code class="Fn">crypto_use_vmpage</code></a>()</dt> - <dd>Uses the array of <var class="Vt">vm_page_t</var> structures as the data - buffer.</dd> -</dl> -<p class="Pp">One of the following functions should be used to initialize - <var class="Fa">crp_obuf</var> for requests that use separate input and - output buffers:</p> -<dl class="Bl-tag"> - <dt id="crypto_use_output_buf"><a class="permalink" href="#crypto_use_output_buf"><code class="Fn">crypto_use_output_buf</code></a>()</dt> - <dd>Uses an array of <var class="Fa">len</var> bytes pointed to by - <var class="Fa">buf</var> as the output buffer.</dd> - <dt id="crypto_use_output_mbuf"><a class="permalink" href="#crypto_use_output_mbuf"><code class="Fn">crypto_use_output_mbuf</code></a>()</dt> - <dd>Uses the network memory buffer <var class="Fa">m</var> as the output - buffer.</dd> - <dt id="crypto_use_output_uio"><a class="permalink" href="#crypto_use_output_uio"><code class="Fn">crypto_use_output_uio</code></a>()</dt> - <dd>Uses the scatter/gather list <var class="Fa">uio</var> as the output - buffer.</dd> - <dt id="crypto_use_output_vmpage"><a class="permalink" href="#crypto_use_output_vmpage"><code class="Fn">crypto_use_output_vmpage</code></a>()</dt> - <dd>Uses the array of <var class="Vt">vm_page_t</var> structures as the output - buffer.</dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss" id="Request_Regions"><a class="permalink" href="#Request_Regions">Request - Regions</a></h2> -<p class="Pp">Each request describes one or more regions in the data buffers. - Each region is described by an offset relative to the start of a data buffer - and a length. The length of some regions is the same for all requests - belonging to a session. Those lengths are set in the session parameters of - the associated session. All requests must define a payload region. Other - regions are only required for specific session modes.</p> -<p class="Pp">For requests with separate input and output data buffers, the AAD, - IV, and payload regions are always defined as regions in the input buffer, - and a separate payload output region is defined to hold the output of - encryption or decryption in the output buffer. The digest region describes a - region in the input data buffer for requests that verify an existing digest. - For requests that compute a digest, the digest region describes a region in - the output data buffer. Note that the only data written to the output buffer - is the encryption or decryption result and any computed digest. AAD and IV - regions are not copied from the input buffer into the output buffer but are - only used as inputs.</p> -<p class="Pp">The following regions are defined:</p> -<table class="Bl-column"> - <tr id="Region"> - <td><a class="permalink" href="#Region"><b class="Sy">Region</b></a></td> - <td><a class="permalink" href="#Buffer"><b class="Sy" id="Buffer">Buffer</b></a></td> - <td><a class="permalink" href="#Description"><b class="Sy" id="Description">Description</b></a></td> - </tr> - <tr> - <td>AAD</td> - <td>Input</td> - <td>Embedded Additional Authenticated Data</td> - </tr> - <tr> - <td>IV</td> - <td>Input</td> - <td>Embedded IV or nonce</td> - </tr> - <tr> - <td>Payload</td> - <td>Input</td> - <td>Data to encrypt, decrypt, compress, or decompress</td> - </tr> - <tr> - <td>Payload Output</td> - <td>Output</td> - <td>Encrypted or decrypted data</td> - </tr> - <tr> - <td>Digest</td> - <td>Input/Output</td> - <td>Authentication digest, hash, or tag</td> - </tr> -</table> -<table class="Bl-column"> - <tr id="Region~2"> - <td><a class="permalink" href="#Region~2"><b class="Sy">Region</b></a></td> - <td><a class="permalink" href="#Start"><b class="Sy" id="Start">Start</b></a></td> - <td><a class="permalink" href="#Length"><b class="Sy" id="Length">Length</b></a></td> - </tr> - <tr> - <td>AAD</td> - <td><var class="Fa">crp_aad_start</var></td> - <td><var class="Fa">crp_aad_length</var></td> - </tr> - <tr> - <td>IV</td> - <td><var class="Fa">crp_iv_start</var></td> - <td><var class="Fa">csp_ivlen</var></td> - </tr> - <tr> - <td>Payload</td> - <td><var class="Fa">crp_payload_start</var></td> - <td><var class="Fa">crp_payload_length</var></td> - </tr> - <tr> - <td>Payload Output</td> - <td><var class="Fa">crp_payload_output_start</var></td> - <td><var class="Fa">crp_payload_length</var></td> - </tr> - <tr> - <td>Digest</td> - <td><var class="Fa">crp_digest_start</var></td> - <td><var class="Fa">csp_auth_mlen</var></td> - </tr> -</table> -<p class="Pp">Requests are permitted to operate on only a subset of the data - buffer. For example, requests from IPsec operate on network packets that - include headers not used as either additional authentication data (AAD) or - payload data.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Request_Operations"><a class="permalink" href="#Request_Operations">Request - Operations</a></h2> -<p class="Pp">All requests must specify the type of operation to perform in - <var class="Fa">crp_op</var>. Available operations depend on the session's - mode.</p> -<p class="Pp">Compression requests support the following operations:</p> -<dl class="Bl-tag"> - <dt id="CRYPTO_OP_COMPRESS"><a class="permalink" href="#CRYPTO_OP_COMPRESS"><code class="Dv">CRYPTO_OP_COMPRESS</code></a></dt> - <dd>Compress the data in the payload region of the data buffer.</dd> - <dt id="CRYPTO_OP_DECOMPRESS"><a class="permalink" href="#CRYPTO_OP_DECOMPRESS"><code class="Dv">CRYPTO_OP_DECOMPRESS</code></a></dt> - <dd>Decompress the data in the payload region of the data buffer.</dd> -</dl> -<p class="Pp">Cipher requests support the following operations:</p> -<dl class="Bl-tag"> - <dt id="CRYPTO_OP_ENCRYPT"><a class="permalink" href="#CRYPTO_OP_ENCRYPT"><code class="Dv">CRYPTO_OP_ENCRYPT</code></a></dt> - <dd>Encrypt the data in the payload region of the data buffer.</dd> - <dt id="CRYPTO_OP_DECRYPT"><a class="permalink" href="#CRYPTO_OP_DECRYPT"><code class="Dv">CRYPTO_OP_DECRYPT</code></a></dt> - <dd>Decrypt the data in the payload region of the data buffer.</dd> -</dl> -<p class="Pp">Digest requests support the following operations:</p> -<dl class="Bl-tag"> - <dt id="CRYPTO_OP_COMPUTE_DIGEST"><a class="permalink" href="#CRYPTO_OP_COMPUTE_DIGEST"><code class="Dv">CRYPTO_OP_COMPUTE_DIGEST</code></a></dt> - <dd>Calculate a digest over the payload region of the data buffer and store - the result in the digest region.</dd> - <dt id="CRYPTO_OP_VERIFY_DIGEST"><a class="permalink" href="#CRYPTO_OP_VERIFY_DIGEST"><code class="Dv">CRYPTO_OP_VERIFY_DIGEST</code></a></dt> - <dd>Calculate a digest over the payload region of the data buffer. Compare the - calculated digest to the existing digest from the digest region. If the - digests match, complete the request successfully. If the digests do not - match, fail the request with <code class="Er">EBADMSG</code>.</dd> -</dl> -<p class="Pp">AEAD and Encrypt-then-Authenticate requests support the following - operations:</p> -<dl class="Bl-tag"> - <dt id="CRYPTO_OP_ENCRYPT~2"><a class="permalink" href="#CRYPTO_OP_ENCRYPT~2"><code class="Dv">CRYPTO_OP_ENCRYPT</code></a> - | - <a class="permalink" href="#CRYPTO_OP_COMPUTE_DIGEST~2"><code class="Dv" id="CRYPTO_OP_COMPUTE_DIGEST~2">CRYPTO_OP_COMPUTE_DIGEST</code></a></dt> - <dd>Encrypt the data in the payload region of the data buffer. Calculate a - digest over the AAD and payload regions and store the result in the data - buffer.</dd> - <dt id="CRYPTO_OP_DECRYPT~2"><a class="permalink" href="#CRYPTO_OP_DECRYPT~2"><code class="Dv">CRYPTO_OP_DECRYPT</code></a> - | - <a class="permalink" href="#CRYPTO_OP_VERIFY_DIGEST~2"><code class="Dv" id="CRYPTO_OP_VERIFY_DIGEST~2">CRYPTO_OP_VERIFY_DIGEST</code></a></dt> - <dd>Calculate a digest over the AAD and payload regions of the data buffer. - Compare the calculated digest to the existing digest from the digest - region. If the digests match, decrypt the payload region. If the digests - do not match, fail the request with <code class="Er">EBADMSG</code>.</dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss" id="Request_AAD"><a class="permalink" href="#Request_AAD">Request - AAD</a></h2> -<p class="Pp">AEAD and Encrypt-then-Authenticate requests may optionally include - Additional Authenticated Data. AAD may either be supplied in the AAD region - of the input buffer or as a single buffer pointed to by - <var class="Fa">crp_aad</var>. In either case, - <var class="Fa">crp_aad_length</var> always indicates the amount of AAD in - bytes.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Request_ESN"><a class="permalink" href="#Request_ESN">Request - ESN</a></h2> -<p class="Pp">IPsec requests may optionally include Extended Sequence Numbers - (ESN). ESN may either be supplied in <var class="Fa">crp_esn</var> or as - part of the AAD pointed to by <var class="Fa">crp_aad</var>.</p> -<p class="Pp">If the ESN is stored in <var class="Fa">crp_esn</var>, - <code class="Dv">CSP_F_ESN</code> should be set in - <var class="Fa">csp_flags</var>. This use case is dedicated for encrypt and - authenticate mode, since the high-order 32 bits of the sequence number are - appended after the Next Header (RFC 4303).</p> -<p class="Pp">AEAD modes supply the ESN in a separate AAD buffer (see e.g. RFC - 4106, Chapter 5 AAD Construction).</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Request_IV_and/or_Nonce"><a class="permalink" href="#Request_IV_and/or_Nonce">Request - IV and/or Nonce</a></h2> -<p class="Pp">Some cryptographic operations require an IV or nonce as an input. - An IV may be stored either in the IV region of the data buffer or in - <var class="Fa">crp_iv</var>. By default, the IV is assumed to be stored in - the IV region. If the IV is stored in <var class="Fa">crp_iv</var>, - <code class="Dv">CRYPTO_F_IV_SEPARATE</code> should be set in - <var class="Fa">crp_flags</var> and <var class="Fa">crp_iv_start</var> - should be left as zero.</p> -<p class="Pp">Requests that store part, but not all, of the IV in the data - buffer should store the partial IV in the data buffer and pass the full IV - separately in <var class="Fa">crp_iv</var>.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Request_and_Callback_Scheduling"><a class="permalink" href="#Request_and_Callback_Scheduling">Request - and Callback Scheduling</a></h2> -<p class="Pp">The crypto framework provides multiple methods of scheduling the - dispatch of requests to drivers along with the processing of driver - callbacks. The - <a class="permalink" href="#crypto_dispatch~3"><code class="Fn" id="crypto_dispatch~3">crypto_dispatch</code></a>(), - <code class="Fn">crypto_dispatch_async</code>(), and - <code class="Fn">crypto_dispatch_batch</code>() functions can be used to - request different dispatch scheduling policies.</p> -<p class="Pp" id="crypto_dispatch~4"><a class="permalink" href="#crypto_dispatch~4"><code class="Fn">crypto_dispatch</code></a>() - synchronously passes the request to the driver. The driver itself may - process the request synchronously or asynchronously depending on whether the - driver is implemented by software or hardware.</p> -<p class="Pp" id="crypto_dispatch_async"><a class="permalink" href="#crypto_dispatch_async"><code class="Fn">crypto_dispatch_async</code></a>() - dispatches the request asynchronously. If the driver is inherently - synchronous, the request is queued to a taskqueue backed by a pool of worker - threads. This can increase throughput by allowing requests from a single - producer to be processed in parallel. By default the pool is sized to - provide one thread for each CPU. Worker threads dequeue requests and pass - them to the driver asynchronously. - <code class="Fn">crypto_dispatch_async</code>() additionally takes a - <var class="Va">flags</var> parameter. The - <code class="Dv">CRYPTO_ASYNC_ORDERED</code> flag indicates that completion - callbacks for requests must be called in the same order as requests were - dispatched. If the driver is asynchronous, the behavior of - <code class="Fn">crypto_dispatch_async</code>() is identical to that of - <code class="Fn">crypto_dispatch</code>().</p> -<p class="Pp" id="crypto_dispatch_batch"><a class="permalink" href="#crypto_dispatch_batch"><code class="Fn">crypto_dispatch_batch</code></a>() - allows the caller to collect a batch of requests and submit them to the - driver at the same time. This allows hardware drivers to optimize the - scheduling of request processing and batch completion interrupts. A batch is - submitted to the driver by invoking the driver's process method on each - request, specifying <code class="Dv">CRYPTO_HINT_MORE</code> with each - request except for the last. The <var class="Fa">flags</var> parameter to - <code class="Fn">crypto_dispatch_batch</code>() is currently ignored.</p> -<p class="Pp" id="crypto_done">Callback function scheduling is simpler than - request scheduling. Callbacks can either be invoked synchronously from - <a class="permalink" href="#crypto_done"><code class="Fn">crypto_done</code></a>(), - or they can be queued to a pool of worker threads. This pool of worker - threads is also sized to provide one worker thread for each CPU by default. - Note that a callback function invoked synchronously from - <code class="Fn">crypto_done</code>() must follow the same restrictions - placed on threaded interrupt handlers.</p> -<p class="Pp" id="crypto_done~2">By default, callbacks are invoked - asynchronously by a worker thread. If <code class="Dv">CRYPTO_F_CBIMM</code> - is set, the callback is always invoked synchronously from - <a class="permalink" href="#crypto_done~2"><code class="Fn">crypto_done</code></a>(). - If <code class="Dv">CRYPTO_F_CBIFSYNC</code> is set, the callback is invoked - synchronously if the request was processed by a software driver or - asynchronously if the request was processed by a hardware driver.</p> -<p class="Pp">If a request was scheduled to the taskqueue with - <code class="Dv">CRYPTO_ASYNC_ORDERED</code>, callbacks are always invoked - asynchronously ignoring <code class="Dv">CRYPTO_F_CBIMM</code> and - <code class="Dv">CRYPTO_F_CBIFSYNC</code>. This flag is used by IPsec to - ensure that decrypted network packets are passed up the network stack in - roughly the same order they were received.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Other_Request_Fields"><a class="permalink" href="#Other_Request_Fields">Other - Request Fields</a></h2> -<p class="Pp">In addition to the fields and flags enumerated above, - <var class="Vt">struct cryptop</var> includes the following:</p> -<dl class="Bl-tag"> - <dt id="crypto_getreq~2"><var class="Fa">crp_session</var></dt> - <dd>A reference to the active session. This is set when the request is created - by - <a class="permalink" href="#crypto_getreq~2"><code class="Fn">crypto_getreq</code></a>() - and should not be modified. Drivers can use this to fetch driver-specific - session state or session parameters.</dd> - <dt><var class="Fa">crp_etype</var></dt> - <dd>Error status. Either zero on success, or an error if a request fails. Set - by drivers prior to completing a request via - <code class="Fn">crypto_done</code>().</dd> - <dt><var class="Fa">crp_flags</var></dt> - <dd>A bitmask of flags.</dd> - <dt><var class="Fa">crp_cipher_key</var></dt> - <dd>Pointer to a request-specific encryption key. If this value is not set, - the request uses the session encryption key.</dd> - <dt><var class="Fa">crp_auth_key</var></dt> - <dd>Pointer to a request-specific authentication key. If this value is not - set, the request uses the session authentication key.</dd> - <dt><var class="Fa">crp_opaque</var></dt> - <dd>An opaque pointer. This pointer permits users of the cryptographic - framework to store information about a request to be used in the - callback.</dd> - <dt><var class="Fa">crp_callback</var></dt> - <dd>Callback function. This must point to a callback function of type - <var class="Vt">void (*)(struct cryptop *)</var>. The callback function - should inspect <var class="Fa">crp_etype</var> to determine the status of - the completed operation. It should also arrange for the request to be - freed via <code class="Fn">crypto_freereq</code>().</dd> - <dt><var class="Fa">crp_olen</var></dt> - <dd>Used with compression and decompression requests to describe the updated - length of the payload region in the data buffer. - <p class="Pp">If a compression request increases the size of the payload, - then the data buffer is unmodified, the request completes successfully, - and <var class="Fa">crp_olen</var> is set to the size the compressed - data would have used. Callers can compare this to the payload region - length to determine if the compressed data was discarded.</p> - </dd> -</dl> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp"><code class="Fn">crypto_dispatch</code>() returns an error if the - request contained invalid fields, or zero if the request was valid. - <code class="Fn">crypto_getreq</code>() returns a pointer to a new request - structure on success, or <code class="Dv">NULL</code> on failure. - <code class="Dv">NULL</code> can only be returned if - <code class="Dv">M_NOWAIT</code> was passed in - <var class="Fa">how</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ipsec(4)</a>, <a class="Xr">crypto(7)</a>, - <a class="Xr">crypto(9)</a>, <a class="Xr">crypto_session(9)</a>, - <a class="Xr">mbuf(9)</a>, <a class="Xr">uio(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">Not all drivers properly handle mixing session and per-request - keys within a single session. Consumers should either use a single key for a - session specified in the session parameters or always use per-request - keys.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 8, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/crypto_session.9 3.html b/static/freebsd/man9/crypto_session.9 3.html deleted file mode 100644 index dab25818..00000000 --- a/static/freebsd/man9/crypto_session.9 3.html +++ /dev/null @@ -1,230 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">CRYPTO_SESSION(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">CRYPTO_SESSION(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">crypto_session</code> — - <span class="Nd">state used for symmetric cryptographic services</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">opencrypto/cryptodev.h</a>></code></p> -<p class="Pp"><var class="Ft">struct auth_hash *</var> - <br/> - <code class="Fn">crypto_auth_hash</code>(<var class="Fa" style="white-space: nowrap;">const - struct crypto_session_params *csp</var>);</p> -<p class="Pp"><var class="Ft">struct enc_xform *</var> - <br/> - <code class="Fn">crypto_cipher</code>(<var class="Fa" style="white-space: nowrap;">const - struct crypto_session_params *csp</var>);</p> -<p class="Pp"><var class="Ft">const struct crypto_session_params *</var> - <br/> - <code class="Fn">crypto_get_params</code>(<var class="Fa" style="white-space: nowrap;">crypto_session_t - cses</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">crypto_newsession</code>(<var class="Fa">crypto_session_t - *cses</var>, <var class="Fa">const struct crypto_session_params *csp</var>, - <var class="Fa">int crid</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">crypto_freesession</code>(<var class="Fa" style="white-space: nowrap;">crypto_session_t - cses</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Symmetric cryptographic operations in the kernel are associated - with cryptographic sessions. Sessions hold state shared across multiple - requests. Active sessions are associated with a single cryptographic - driver.</p> -<p class="Pp">The <var class="Vt">crypto_session_t</var> type represents an - opaque reference to an active session. Session objects are allocated and - managed by the cryptographic framework.</p> -<p class="Pp" id="crypto_newsession">New sessions are created by - <a class="permalink" href="#crypto_newsession"><code class="Fn">crypto_newsession</code></a>(). - <var class="Fa">csp</var> describes various parameters associated with the - new session such as the algorithms to use and any session-wide keys. - <var class="Fa">crid</var> can be used to request either a specific - cryptographic driver or classes of drivers. For the latter case, - <var class="Fa">crid</var> should be set to a mask of the following - values:</p> -<dl class="Bl-tag"> - <dt id="CRYPTOCAP_F_HARDWARE"><a class="permalink" href="#CRYPTOCAP_F_HARDWARE"><code class="Dv">CRYPTOCAP_F_HARDWARE</code></a></dt> - <dd>Request hardware drivers. Hardware drivers do not use the host CPU to - perform operations. Typically, a separate co-processor performs the - operations asynchronously.</dd> - <dt id="CRYPTOCAP_F_SOFTWARE"><a class="permalink" href="#CRYPTOCAP_F_SOFTWARE"><code class="Dv">CRYPTOCAP_F_SOFTWARE</code></a></dt> - <dd>Request software drivers. Software drivers use the host CPU to perform - operations. The kernel includes a simple, yet portable implementation of - each supported algorithm in the <a class="Xr">cryptosoft(4)</a> driver. - Additional software drivers may also be available on architectures which - provide instructions designed to accelerate cryptographic operations.</dd> -</dl> -<p class="Pp">If both hardware and software drivers are requested, hardware - drivers are preferred over software drivers. Accelerated software drivers - are preferred over the baseline software driver. If multiple hardware - drivers are available, the framework will distribute sessions across these - drivers in a round-robin fashion.</p> -<p class="Pp" id="crypto_newsession~2">On success, - <a class="permalink" href="#crypto_newsession~2"><code class="Fn">crypto_newsession</code></a>() - saves a reference to the newly created session in - <var class="Fa">cses</var>.</p> -<p class="Pp" id="crypto_freesession"><a class="permalink" href="#crypto_freesession"><code class="Fn">crypto_freesession</code></a>() - is used to free the resources associated with the session - <var class="Fa">cses</var>.</p> -<p class="Pp" id="crypto_auth_hash"><a class="permalink" href="#crypto_auth_hash"><code class="Fn">crypto_auth_hash</code></a>() - returns a structure describing the baseline software implementation of an - authentication algorithm requested by <var class="Fa">csp</var>. If - <var class="Fa">csp</var> does not specify an authentication algorithm, or - requests an invalid algorithm, <code class="Dv">NULL</code> is returned.</p> -<p class="Pp" id="crypto_cipher"><a class="permalink" href="#crypto_cipher"><code class="Fn">crypto_cipher</code></a>() - returns a structure describing the baseline software implementation of an - encryption algorithm requested by <var class="Fa">csp</var>. If - <var class="Fa">csp</var> does not specify an encryption algorithm, or - requests an invalid algorithm, <code class="Dv">NULL</code> is returned.</p> -<p class="Pp" id="crypto_get_params"><a class="permalink" href="#crypto_get_params"><code class="Fn">crypto_get_params</code></a>() - returns a pointer to the session parameters used by - <var class="Fa">cses</var>.</p> -<section class="Ss"> -<h2 class="Ss" id="Session_Parameters"><a class="permalink" href="#Session_Parameters">Session - Parameters</a></h2> -<p class="Pp">Session parameters are used to describe the cryptographic - operations performed by cryptographic requests. Parameters are stored in an - instance of <var class="Vt">struct crypto_session_params</var>. When - initializing parameters to pass to - <code class="Fn">crypto_newsession</code>(), the entire structure should - first be zeroed. Needed fields should then be set leaving unused fields as - zero. This structure contains the following fields:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">csp_mode</var></dt> - <dd>Type of operation to perform. This field must be set to one of the - following: - <dl class="Bl-tag"> - <dt id="CSP_MODE_COMPRESS"><a class="permalink" href="#CSP_MODE_COMPRESS"><code class="Dv">CSP_MODE_COMPRESS</code></a></dt> - <dd>Compress or decompress request payload. - <p class="Pp">The compression algorithm is specified in - <var class="Fa">csp_cipher_alg</var>.</p> - </dd> - <dt id="CSP_MODE_CIPHER"><a class="permalink" href="#CSP_MODE_CIPHER"><code class="Dv">CSP_MODE_CIPHER</code></a></dt> - <dd>Encrypt or decrypt request payload. - <p class="Pp">The encryption algorithm is specified in - <var class="Fa">csp_cipher_alg</var>.</p> - </dd> - <dt id="CSP_MODE_DIGEST"><a class="permalink" href="#CSP_MODE_DIGEST"><code class="Dv">CSP_MODE_DIGEST</code></a></dt> - <dd>Compute or verify a digest, or hash, of request payload. - <p class="Pp">The authentication algorithm is specified in - <var class="Fa">csp_auth_alg</var>.</p> - </dd> - <dt id="CSP_MODE_AEAD"><a class="permalink" href="#CSP_MODE_AEAD"><code class="Dv">CSP_MODE_AEAD</code></a></dt> - <dd>Authenticated encryption with additional data. Decryption operations - require the digest, or tag, and fail if it does not match. - <p class="Pp">The AEAD algorithm is specified in - <var class="Fa">csp_cipher_alg</var>.</p> - </dd> - <dt id="CSP_MODE_ETA"><a class="permalink" href="#CSP_MODE_ETA"><code class="Dv">CSP_MODE_ETA</code></a></dt> - <dd>Encrypt-then-Authenticate. In this mode, encryption operations encrypt - the payload and then compute an authentication digest over the request - additional authentication data followed by the encrypted payload. - Decryption operations fail without decrypting the data if the provided - digest does not match. - <p class="Pp">The encryption algorithm is specified in - <var class="Fa">csp_cipher_alg</var> and the authentication - algorithm is specified in <var class="Fa">csp_auth_alg</var>.</p> - </dd> - </dl> - </dd> - <dt><var class="Fa">csp_flags</var></dt> - <dd>A mask of optional driver features. Drivers will only attach to a session - if they support all of the requested features. - <dl class="Bl-tag"> - <dt id="CSP_F_SEPARATE_OUTPUT"><a class="permalink" href="#CSP_F_SEPARATE_OUTPUT"><code class="Dv">CSP_F_SEPARATE_OUTPUT</code></a></dt> - <dd>Support requests that use separate input and output buffers. Sessions - with this flag set permit requests with either a single buffer that is - modified in-place, or requests with separate input and output buffers. - Sessions without this flag only permit requests with a single buffer - that is modified in-place.</dd> - <dt id="CSP_F_SEPARATE_AAD"><a class="permalink" href="#CSP_F_SEPARATE_AAD"><code class="Dv">CSP_F_SEPARATE_AAD</code></a></dt> - <dd>Support requests that use a separate buffer for AAD rather than - providing AAD as a region in the input buffer. Sessions with this flag - set permit requests with AAD passed in either in a region of the input - buffer or in a single, virtually-contiguous buffer. Sessions without - this flag only permit requests with AAD passed in as a region in the - input buffer.</dd> - <dt id="CSP_F_ESN"><a class="permalink" href="#CSP_F_ESN"><code class="Dv">CSP_F_ESN</code></a></dt> - <dd>Support requests that use a separate buffer for IPsec ESN (Extended - Sequence Numbers). - <p class="Pp">Sessions with this flag set permit requests with IPsec ESN - passed in special buffer. It is required for IPsec ESN support of - encrypt and authenticate mode where the high-order 32 bits of the - sequence number are appended after the Next Header (RFC 4303).</p> - </dd> - </dl> - </dd> - <dt><var class="Fa">csp_ivlen</var></dt> - <dd>If either the cipher or authentication algorithms require an explicit - initialization vector (IV) or nonce, this specifies the length in bytes. - All requests for a session use the same IV length.</dd> - <dt><var class="Fa">csp_cipher_alg</var></dt> - <dd>Encryption or compression algorithm.</dd> - <dt><var class="Fa">csp_cipher_klen</var></dt> - <dd>Length of encryption or decryption key in bytes. All requests for a - session use the same key length.</dd> - <dt><var class="Fa">csp_cipher_key</var></dt> - <dd>Pointer to encryption or decryption key. If all requests for a session use - request-specific keys, this field should be left as - <code class="Dv">NULL</code>. This pointer and associated key must remain - valid for the duration of the crypto session.</dd> - <dt><var class="Fa">csp_auth_alg</var></dt> - <dd>Authentication algorithm.</dd> - <dt><var class="Fa">csp_auth_klen</var></dt> - <dd>Length of authentication key in bytes. If the authentication algorithm - does not use a key, this field should be left as zero.</dd> - <dt><var class="Fa">csp_auth_key</var></dt> - <dd>Pointer to the authentication key. If all requests for a session use - request-specific keys, this field should be left as - <code class="Dv">NULL</code>. This pointer and associated key must remain - valid for the duration of the crypto session.</dd> - <dt><var class="Fa">csp_auth_mlen</var></dt> - <dd>The length in bytes of the digest. If zero, the full length of the digest - is used. If non-zero, the first <var class="Fa">csp_auth_mlen</var> bytes - of the digest are used.</dd> -</dl> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp"><code class="Fn">crypto_newsession</code>() returns a non-zero - value if an error occurs or zero on success.</p> -<p class="Pp"><code class="Fn">crypto_auth_hash</code>() and - <code class="Fn">crypto_cipher</code>() return <code class="Dv">NULL</code> - if the request is valid or a pointer to a structure on success.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">crypto(7)</a>, <a class="Xr">crypto(9)</a>, - <a class="Xr">crypto_request(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">The current implementation of - <code class="Nm">crypto_freesession</code> does not provide a way for the - caller to know that there are no other references to the keys stored in the - session's associated parameters. This function should probably sleep until - any in-flight cryptographic operations associated with the session are - completed.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 22, 2020</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/deadfs.9 4.html b/static/freebsd/man9/deadfs.9 4.html deleted file mode 100644 index c28a1858..00000000 --- a/static/freebsd/man9/deadfs.9 4.html +++ /dev/null @@ -1,47 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEADFS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEADFS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">deadfs</code> — - <span class="Nd">pseudo-filesystem to own reclaimed vnodes</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">deadfs</code> file system implements - operations that do not modify any data and instead return indications of - invalid IO. Its role is to provide a fallback vnode operations vector for - reclaimed <a class="Xr">vnode(9)</a>'s.</p> -<p class="Pp">It is a kernel-only pseudo-file system and so cannot be mounted - from userspace.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">insmntque(9)</a>, <a class="Xr">vnode(9)</a>, - <a class="Xr">VOP_RECLAIM(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">UNIX System Manager's Manual (SMM) for - <span class="Ux">4.4BSD</span> described <code class="Nm">deadfs</code> as a - file system “where rejected vnodes go to die”.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">deadfs</code> manual page was written by - <span class="An">Mateusz Piotrowski</span> - <<a class="Mt" href="mailto:0mp@FreeBSD.org">0mp@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 24, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/dev_clone.9 4.html b/static/freebsd/man9/dev_clone.9 4.html deleted file mode 100644 index f978b0e0..00000000 --- a/static/freebsd/man9/dev_clone.9 4.html +++ /dev/null @@ -1,67 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEV_CLONE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEV_CLONE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">dev_clone</code>, - <code class="Nm">drain_dev_clone_events</code> — - <span class="Nd">eventhandler for name-based device cloning in - devfs</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/conf.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">clone_handler</code>(<var class="Fa" style="white-space: nowrap;">void - *arg</var>, <var class="Fa" style="white-space: nowrap;">struct ucred - *cr</var>, <var class="Fa" style="white-space: nowrap;">char *name</var>, - <var class="Fa" style="white-space: nowrap;">int namelen</var>, - <var class="Fa" style="white-space: nowrap;">struct cdev **dev</var>);</p> -<div class="Bd Pp Li"> -<pre>EVENTHANDLER_REGISTER(dev_clone, clone_handler, arg, priority);</pre> -</div> -<br/> -<var class="Ft">void</var> -<br/> -<code class="Fn">drain_dev_clone_events</code>(); -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">A device driver may register a listener that will be notified each - time a name lookup on the <a class="Xr">devfs(4)</a> mount point fails to - find the vnode. A listener shall be registered for the - <var class="Va">dev_clone</var> event. When called, it is supplied with the - first argument <var class="Va">arg</var> that was specified at handler - registration time, appropriate credentials <var class="Va">cr</var>, and a - name <var class="Va">name</var> of length <var class="Va">namelen</var> that - we look for. If the handler decides that the name is appropriate and wants - to create the device that will be associated with the name, it should return - it to devfs in the <var class="Va">dev</var> argument.</p> -<p class="Pp" id="drain_dev_clone_events">The - <a class="permalink" href="#drain_dev_clone_events"><code class="Fn">drain_dev_clone_events</code></a>() - function is a barrier. It is guaranteed that all calls to eventhandlers for - <code class="Nm">dev_clone</code> that were started before - <code class="Fn">drain_dev_clone_events</code>() call, are finished before - it returns control.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devfs(4)</a>, <a class="Xr">namei(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 3, 2009</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/dev_refthread.9 3.html b/static/freebsd/man9/dev_refthread.9 3.html deleted file mode 100644 index 9ca70fac..00000000 --- a/static/freebsd/man9/dev_refthread.9 3.html +++ /dev/null @@ -1,125 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEV_REFTHREAD(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEV_REFTHREAD(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">dev_refthread</code>, - <code class="Nm">devvn_refthread</code>, - <code class="Nm">dev_relthread</code> — <span class="Nd">safely - access device methods</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/conf.h</a>></code></p> -<p class="Pp"><var class="Ft">struct cdevsw *</var> - <br/> - <code class="Fn">dev_refthread</code>(<var class="Fa" style="white-space: nowrap;">struct - cdev *dev</var>, <var class="Fa" style="white-space: nowrap;">int - *ref</var>);</p> -<p class="Pp"><var class="Ft">struct cdevsw *</var> - <br/> - <code class="Fn">devvn_refthread</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct cdev - **devp</var>, <var class="Fa" style="white-space: nowrap;">int - *ref</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">dev_relthread</code>(<var class="Fa" style="white-space: nowrap;">struct - cdev *dev</var>, <var class="Fa" style="white-space: nowrap;">int - ref</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#dev_refthread"><code class="Fn" id="dev_refthread">dev_refthread</code></a>() - (or <code class="Fn">devvn_refthread</code>()) and - <code class="Fn">dev_relthread</code>() routines provide a safe way to - access <a class="Xr">devfs(4)</a> devices that may be concurrently destroyed - by - <a class="permalink" href="#destroy_dev"><code class="Fn" id="destroy_dev">destroy_dev</code></a>() - (e.g., removable media).</p> -<p class="Pp" id="dev_refthread~2">If successful, - <a class="permalink" href="#dev_refthread~2"><code class="Fn">dev_refthread</code></a>() - and <code class="Fn">devvn_refthread</code>() acquire a "thread - reference" to the associated <var class="Vt">struct cdev</var> and - return a non-NULL pointer to the cdev's <var class="Vt">struct cdevsw</var> - method table. For the duration of that reference, the cdev's associated - private data and method table object are valid. Destruction of the cdev - sleeps until the thread reference is released.</p> -<p class="Pp" id="dev_refthread~3">A reference cannot prevent media removal. It - is an implementation detail of individual drivers how method calls from - callers with - <a class="permalink" href="#dev_refthread~3"><code class="Fn">dev_refthread</code></a>() - references are handled when the device is pending destruction. A common - behavior for disk devices is to return the <code class="Er">ENXIO</code> - status, but that is not required by this KPI.</p> -<p class="Pp" id="devvn_refthread">The - <a class="permalink" href="#devvn_refthread"><code class="Fn">devvn_refthread</code></a>() - variant of <code class="Fn">dev_refthread</code>() extracts the - <var class="Vt">struct cdev</var> pointer out of the - <code class="Dv">VCHR</code> <a class="Xr">vnode(9)</a> automatically before - performing the same actions as <code class="Fn">dev_refthread</code>(). - Additionally, a pointer to the <var class="Vt">struct cdev</var> is returned - to the caller via <var class="Fa">*devp</var>. - <code class="Fn">devvn_refthread</code>() correctly handles possible - parallel reclamation of the vnode.</p> -<p class="Pp" id="dev_relthread"><a class="permalink" href="#dev_relthread"><code class="Fn">dev_relthread</code></a>() - is used to release a reference to a <var class="Vt">struct cdev</var>. - <code class="Fn">dev_relthread</code>() - <a class="permalink" href="#must"><b class="Sy" id="must">must</b></a> only - be invoked when the associated invocation of - <code class="Fn">dev_refthread</code>() or - <code class="Fn">devvn_refthread</code>() returned a non-NULL - <var class="Vt">struct cdevsw *</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CONTEXT"><a class="permalink" href="#CONTEXT">CONTEXT</a></h1> -<p class="Pp"><var class="Vt">struct cdev</var> objects have two reference - counts, <var class="Va">si_refcount</var> and - <var class="Va">si_threadcount</var>. The - <code class="Fn">dev_refthread</code>(), - <code class="Fn">devvn_refthread</code>(), and - <code class="Fn">dev_relthread</code>() functions manipulate the - <var class="Va">si_threadcount</var>. The - <var class="Va">si_threadcount</var> reference guarantees the liveness of - the <var class="Vt">struct cdev</var> object. The other - <var class="Va">si_refcount</var> reference provides only the weaker - guarantee that the memory backing the <var class="Vt">struct cdev</var> has - not been freed.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If <code class="Fn">dev_refthread</code>() or - <code class="Fn">devvn_refthread</code>() are unsuccessful, they return - <code class="Dv">NULL</code>.</p> -<div class="Bf Em">If these routines are unsuccessful, they do not increment the - <var class="Vt">struct cdev</var> <var class="Va">si_threadcount</var> and do - not initialize the value pointed to by the <var class="Fa">*ref</var> - parameter in any way.</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devfs(4)</a>, <a class="Xr">destroy_dev(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CAVEATS"><a class="permalink" href="#CAVEATS">CAVEATS</a></h1> -<p class="Pp">Do not invoke <code class="Fn">dev_relthread</code>() unless the - matching refthread routine succeeded!</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 29, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/devclass.9 4.html b/static/freebsd/man9/devclass.9 4.html deleted file mode 100644 index 499a6ffc..00000000 --- a/static/freebsd/man9/devclass.9 4.html +++ /dev/null @@ -1,55 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVCLASS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVCLASS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">devclass</code> — <span class="Nd">object - representing a class of devices</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><var class="Vt">typedef struct devclass *devclass_t</var>;</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <var class="Vt">devclass</var> object has two main functions - in the system. The first is to manage the allocation of unit numbers for - device instances and the second is to hold the list of device drivers for a - particular bus type. Each <var class="Vt">devclass</var> has a name and - there cannot be two devclasses with the same name. This ensures that unique - unit numbers are allocated to device instances. All instances with the same - name are treated as being the same.</p> -<p class="Pp">When no specific unit number is needed, - <var class="Vt">DEVICE_UNIT_ANY</var> is used.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devclass_add_driver(9)</a>, - <a class="Xr">devclass_delete_driver(9)</a>, - <a class="Xr">devclass_find(9)</a>, - <a class="Xr">devclass_find_driver(9)</a>, - <a class="Xr">devclass_get_device(9)</a>, - <a class="Xr">devclass_get_devices(9)</a>, - <a class="Xr">devclass_get_maxunit(9)</a>, - <a class="Xr">devclass_get_name(9)</a>, - <a class="Xr">devclass_get_softc(9)</a>, <a class="Xr">device(9)</a>, - <a class="Xr">driver(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 16, 1998</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/devclass_find.9 4.html b/static/freebsd/man9/devclass_find.9 4.html deleted file mode 100644 index 79af0683..00000000 --- a/static/freebsd/man9/devclass_find.9 4.html +++ /dev/null @@ -1,52 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVCLASS_FIND(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVCLASS_FIND(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">devclass_find</code> — - <span class="Nd">search for a devclass</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">devclass_t</var> - <br/> - <code class="Fn">devclass_find</code>(<var class="Fa" style="white-space: nowrap;">const - char *classname</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Search for the <var class="Vt">devclass</var> with the specified - name.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If the <var class="Vt">devclass</var> exists, it is returned, - otherwise <code class="Dv">NULL</code> is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devclass(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 16, 1998</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/devclass_get_count.9 4.html b/static/freebsd/man9/devclass_get_count.9 4.html deleted file mode 100644 index 44df7de9..00000000 --- a/static/freebsd/man9/devclass_get_count.9 4.html +++ /dev/null @@ -1,46 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVCLASS_GET_COUNT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVCLASS_GET_COUNT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">devclass_get_count</code> — - <span class="Nd">get the number of devices in a devclass</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">devclass_get_count</code>(<var class="Fa" style="white-space: nowrap;">devclass_t - dc</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Returns the number of device instances in the specified - <var class="Vt">devclass</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devclass(9)</a>, <a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Nate - Lawson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 5, 2004</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/devclass_get_device.9 4.html b/static/freebsd/man9/devclass_get_device.9 4.html deleted file mode 100644 index f788b688..00000000 --- a/static/freebsd/man9/devclass_get_device.9 4.html +++ /dev/null @@ -1,52 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVCLASS_GET_DEVICE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVCLASS_GET_DEVICE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">devclass_get_device</code> — - <span class="Nd">translate unit number to device</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">device_t</var> - <br/> - <code class="Fn">devclass_get_device</code>(<var class="Fa" style="white-space: nowrap;">devclass_t - dc</var>, <var class="Fa" style="white-space: nowrap;">int unit</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This function retrieves the device instance with the given unit - number and returns it.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If the device exists, it is returned, otherwise NULL is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devclass(9)</a>, <a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 16, 1998</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/devclass_get_devices.9 4.html b/static/freebsd/man9/devclass_get_devices.9 4.html deleted file mode 100644 index 41814f66..00000000 --- a/static/freebsd/man9/devclass_get_devices.9 4.html +++ /dev/null @@ -1,59 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVCLASS_GET_DEVICES(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVCLASS_GET_DEVICES(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">devclass_get_devices</code> — - <span class="Nd">get a list of devices in a devclass</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">devclass_get_devices</code>(<var class="Fa" style="white-space: nowrap;">devclass_t - dc</var>, <var class="Fa" style="white-space: nowrap;">device_t - **devlistp</var>, <var class="Fa" style="white-space: nowrap;">int - *devcountp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Retrieve a list of all device instances currently in the devclass - and return the list in <var class="Fa">*devlistp</var> and the count in - <var class="Fa">*devcountp</var>. The memory allocated for the list should - be freed using - <a class="permalink" href="#free"><code class="Fn" id="free">free</code></a>(<var class="Fa">*devlistp</var>, - <var class="Fa">M_TEMP</var>), even if <var class="Fa">*devcountp</var> is - 0.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an appropriate error is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devclass(9)</a>, <a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 19, 2005</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/devclass_get_drivers.9 4.html b/static/freebsd/man9/devclass_get_drivers.9 4.html deleted file mode 100644 index 9a741184..00000000 --- a/static/freebsd/man9/devclass_get_drivers.9 4.html +++ /dev/null @@ -1,59 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVCLASS_GET_DRIVERS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVCLASS_GET_DRIVERS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">devclass_get_drivers</code> — - <span class="Nd">get a list of drivers in a devclass</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">devclass_get_drivers</code>(<var class="Fa" style="white-space: nowrap;">devclass_t - dc</var>, <var class="Fa" style="white-space: nowrap;">driver_t - ***listp</var>, <var class="Fa" style="white-space: nowrap;">int - *countp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Retrieve a list of pointers to all driver instances currently in - the devclass and return the list in <var class="Fa">*listp</var> and the - number of drivers in the list in <var class="Fa">*countp</var>. The memory - allocated for the list should be freed using - <a class="permalink" href="#free"><code class="Fn" id="free">free</code></a>(<var class="Fa">*listp</var>, - <var class="Fa">M_TEMP</var>), even if <var class="Fa">*countp</var> is - 0.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an appropriate error is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devclass(9)</a>, <a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Nate - Lawson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 19, 2005</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/devclass_get_maxunit.9 4.html b/static/freebsd/man9/devclass_get_maxunit.9 4.html deleted file mode 100644 index 7e43b64a..00000000 --- a/static/freebsd/man9/devclass_get_maxunit.9 4.html +++ /dev/null @@ -1,64 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVCLASS_GET_MAXUNIT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVCLASS_GET_MAXUNIT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">devclass_get_maxunit</code> — - <span class="Nd">find the maximum unit number in the class</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">devclass_get_maxunit</code>(<var class="Fa" style="white-space: nowrap;">devclass_t - dc</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Returns the next unit number to be allocated to device instances - in the <code class="Dv">devclass</code>. This is one greater than the - highest currently allocated unit.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">devclass_get_maxunit</code>() function - returns -1 if <var class="Fa">dc</var> is <code class="Dv">NULL</code>, - otherwise it returns the next unit number in <var class="Fa">dc's</var> - devclass.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp">None.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devclass(9)</a>, <a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">The name is confusing since it is one greater than the maximum - unit.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 10, 2010</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/devclass_get_name.9 4.html b/static/freebsd/man9/devclass_get_name.9 4.html deleted file mode 100644 index 5b16d87f..00000000 --- a/static/freebsd/man9/devclass_get_name.9 4.html +++ /dev/null @@ -1,45 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVCLASS_GET_NAME(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVCLASS_GET_NAME(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">devclass_get_name</code> — - <span class="Nd">access the name of a devclass</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">const char *</var> - <br/> - <code class="Fn">devclass_get_name</code>(<var class="Fa" style="white-space: nowrap;">devclass_t - dc</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Return the name of a devclass.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devclass(9)</a>, <a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 16, 1998</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/devclass_get_softc.9 4.html b/static/freebsd/man9/devclass_get_softc.9 4.html deleted file mode 100644 index 16f2e427..00000000 --- a/static/freebsd/man9/devclass_get_softc.9 4.html +++ /dev/null @@ -1,53 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVCLASS_GET_SOFTC(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVCLASS_GET_SOFTC(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">devclass_get_softc</code> — - <span class="Nd">translate unit number to driver private - structure</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">devclass_get_softc</code>(<var class="Fa" style="white-space: nowrap;">devclass_t - dc</var>, <var class="Fa" style="white-space: nowrap;">int unit</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This function retrieves the driver private instance variables for - the device with the given unit number and returns it.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If the device exists, its driver-private variables are returned, - otherwise NULL is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 16, 1998</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/devctl_notify.9 4.html b/static/freebsd/man9/devctl_notify.9 4.html deleted file mode 100644 index 71ee56ba..00000000 --- a/static/freebsd/man9/devctl_notify.9 4.html +++ /dev/null @@ -1,64 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVCTL_NOTIFY(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVCTL_NOTIFY(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">devctl_notify</code> — - <span class="Nd">Send a message, via devctl, to userland</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/devctl.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">devctl_notify</code>(<var class="Fa" style="white-space: nowrap;">const - char *system</var>, <var class="Fa" style="white-space: nowrap;">const char - *subsystem</var>, <var class="Fa" style="white-space: nowrap;">const char - *type</var>, <var class="Fa" style="white-space: nowrap;">const char - *data</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Send a notification to user land via <a class="Xr">devctl(4)</a>. - See <a class="Xr">devctl(4)</a> for the format of these messages.</p> -<p class="Pp">The <code class="Nm">devctl_notify</code> function creates a - string using the following template:</p> -<div class="Bd Pp Li"> -<pre>snprintf(buffer, sizeof(buffer), "!system=%s subsystem=%s type=%s", - system, subsystem, type);</pre> -</div> -<p class="Pp">The <var class="Va">system</var>, <var class="Va">subsystem</var>, - and <var class="Va">type</var> pointers cannot be NULL.</p> -<p class="Pp">The <var class="Va">data</var> argument may be NULL (for no - additions) or a message formatted properly for <a class="Xr">devctl(4)</a>. - A space will be added to the above template and this argument copied - verbatim to form the message passed to userland. Senders should balance - between only passing data that userland can not discover itself and sending - all the data userland will want to use to decide what to do with the - message.</p> -<p class="Pp">The current total message length limit is just under 1kb. Senders - should try to remain well below this limit.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devctl(4)</a>, <a class="Xr">devd(8)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">M. Warner - Losh</span></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 22, 2020</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/devctl_process_running.9 4.html b/static/freebsd/man9/devctl_process_running.9 4.html deleted file mode 100644 index 3c3afc28..00000000 --- a/static/freebsd/man9/devctl_process_running.9 4.html +++ /dev/null @@ -1,50 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVCTL_PROCESS_RUNNING(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVCTL_PROCESS_RUNNING(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">devctl_process_running</code> — - <span class="Nd">Returns true when devctl has a consumer process - running</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/devctl.h</a>></code></p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">devctl_process_running</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">devctl_process_running</code> call returns - <var class="Vt">true</var> when a process has the devctl device open for - reading, and <var class="Vt">false</var> otherwise. One can assume from this - that the default <a class="Xr">devd(8)</a> or similar is running when - <var class="Vt">true</var> is returned. Some subsystems will send a message - and allow userland to do something before proceeding with a default action - if there's a timeout. This call allows those subsystems to do the default - action right away when no process is running.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devd(8)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">M. Warner - Losh</span></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 22, 2020</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/devctl_safe_quote_sb.9 4.html b/static/freebsd/man9/devctl_safe_quote_sb.9 4.html deleted file mode 100644 index d83d4a27..00000000 --- a/static/freebsd/man9/devctl_safe_quote_sb.9 4.html +++ /dev/null @@ -1,51 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVCTL_SAFE_QUOTE_SB(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVCTL_SAFE_QUOTE_SB(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">devctl_safe_quote_sb</code> — - <span class="Nd">Insert a string, properly quoted, into a sbuf</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/devctl.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/sbuf.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">devctl_safe_quote_sb</code>(<var class="Fa" style="white-space: nowrap;">struct - sbuf *sb</var>, <var class="Fa" style="white-space: nowrap;">const char - *src</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Copy the string from <var class="Va">src</var> into - <var class="Va">sb</var>. All backslash characters are doubled. All double - quote characters ‘"’ are also preceded by a backslash. - All other characters are copied without modification. The - <a class="Xr">devctl(4)</a> protocol requires quoted string to be quoted - thus. This routine centralizes this knowledge.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devd(8)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">M. Warner - Losh</span></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 22, 2020</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/devfs_set_cdevpriv.9 3.html b/static/freebsd/man9/devfs_set_cdevpriv.9 3.html deleted file mode 100644 index 46f226bb..00000000 --- a/static/freebsd/man9/devfs_set_cdevpriv.9 3.html +++ /dev/null @@ -1,127 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVFS_CDEVPRIV(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVFS_CDEVPRIV(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">devfs_set_cdevpriv</code>, - <code class="Nm">devfs_get_cdevpriv</code>, - <code class="Nm">devfs_clear_cdevpriv</code>, - <code class="Nm">devfs_foreach_cdevpriv</code> — - <span class="Nd">manage per-open filedescriptor data for devices</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/conf.h</a>></code></p> -<div class="Bd Pp Li"> -<pre>typedef void d_priv_dtor_t(void *data);</pre> -</div> -<br/> -<var class="Ft">int</var> -<br/> -<code class="Fn">devfs_get_cdevpriv</code>(<var class="Fa" style="white-space: nowrap;">void - **datap</var>); -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">devfs_set_cdevpriv</code>(<var class="Fa" style="white-space: nowrap;">void - *priv</var>, <var class="Fa" style="white-space: nowrap;">d_priv_dtor_t - *dtr</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">devfs_clear_cdevpriv</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">devfs_foreach_cdevpriv</code>(<var class="Fa">struct cdev - *dev</var>, <var class="Fa">int (*cb)(void *data, void *arg)</var>, - <var class="Fa">void *arg</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#devfs_xxx_cdevpriv"><code class="Fn" id="devfs_xxx_cdevpriv">devfs_xxx_cdevpriv</code></a>() - family of functions allows the <var class="Fa">cdev</var> driver methods to - associate some driver-specific data with each user process - <a class="Xr">open(2)</a> of the device special file. Currently, functioning - of these functions is restricted to the context of the - <var class="Fa">cdevsw</var> switch method calls performed as - <a class="Xr">devfs(4)</a> operations in response to system calls that use - filedescriptors.</p> -<p class="Pp" id="devfs_set_cdevpriv">The - <a class="permalink" href="#devfs_set_cdevpriv"><code class="Fn">devfs_set_cdevpriv</code></a>() - function associates a data pointed by <var class="Va">priv</var> with - current calling context (filedescriptor). The data may be retrieved later, - possibly from another call performed on this filedescriptor, by the - <code class="Fn">devfs_get_cdevpriv</code>() function. The - <code class="Fn">devfs_clear_cdevpriv</code>() disassociates previously - attached data from context. Immediately after - <code class="Fn">devfs_clear_cdevpriv</code>() finished operating, the - <var class="Va">dtr</var> callback is called, with private data supplied - <var class="Va">data</var> argument. The - <code class="Fn">devfs_clear_cdevpriv</code>() function will be also be - called if the open callback function returns an error code.</p> -<p class="Pp" id="devfs_clear_cdevpriv">On the last filedescriptor close, system - automatically arranges - <a class="permalink" href="#devfs_clear_cdevpriv"><code class="Fn">devfs_clear_cdevpriv</code></a>() - call.</p> -<p class="Pp">If successful, the functions return 0.</p> -<p class="Pp" id="devfs_set_cdevpriv~2">The function - <a class="permalink" href="#devfs_set_cdevpriv~2"><code class="Fn">devfs_set_cdevpriv</code></a>() - returns the following values on error:</p> -<dl class="Bl-tag"> - <dt>[<code class="Er">ENOENT</code>]</dt> - <dd>The current call is not associated with some filedescriptor.</dd> - <dt>[<code class="Er">EBUSY</code>]</dt> - <dd>The private driver data is already associated with current - filedescriptor.</dd> -</dl> -<p class="Pp" id="devfs_get_cdevpriv">The function - <a class="permalink" href="#devfs_get_cdevpriv"><code class="Fn">devfs_get_cdevpriv</code></a>() - returns the following values on error:</p> -<dl class="Bl-tag"> - <dt>[<code class="Er">EBADF</code>]</dt> - <dd>The current call is not associated with some filedescriptor.</dd> - <dt>[<code class="Er">ENOENT</code>]</dt> - <dd>The private driver data was not associated with current filedescriptor, or - <code class="Fn">devfs_clear_cdevpriv</code>() was called.</dd> -</dl> -<p class="Pp" id="devfs_foreach_cdevpriv">The function - <a class="permalink" href="#devfs_foreach_cdevpriv"><code class="Fn">devfs_foreach_cdevpriv</code></a>() - sequentially calls the function <var class="Fa">cb</var> for each - <code class="Nm">cdevpriv</code> structure, currently associated with the - <var class="Fa">cdev</var> device. The iterated - <code class="Nm">cdevpriv</code> data pointer and the user-supplied context - <var class="Fa">arg</var> are passed to the function - <var class="Fa">cb</var>. If <var class="Fa">cb</var> returns non-zero - value, the iteration stops on that element. The - <code class="Fn">devfs_foreach_cdevpriv</code>() returns the return value - from the last call to <var class="Fa">cb</var>, or zero if no - <code class="Nm">cdevpriv</code> data is currently associated with the - device.</p> -<p class="Pp">Current implementation of the iterator makes it impossible to use - any blockable locking inside the callback <var class="Fa">cb</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">close(2)</a>, <a class="Xr">open(2)</a>, - <a class="Xr">devfs(4)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Fn">devfs_cdevpriv</code>() family of functions - first appeared in <span class="Ux">FreeBSD 7.1</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 23, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device.9 3.html b/static/freebsd/man9/device.9 3.html deleted file mode 100644 index 44abf9ea..00000000 --- a/static/freebsd/man9/device.9 3.html +++ /dev/null @@ -1,76 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device</code> — <span class="Nd">an - abstract representation of a device</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><var class="Vt">typedef struct _device *device_t</var>;</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The device object represents a piece of hardware attached to the - system such as an expansion card, the bus which that card is plugged into, - disk drives attached to the expansion card etc. The system defines one - device, <var class="Va">root_bus</var> and all other devices are created - dynamically during autoconfiguration. Normally devices representing - top-level buses in the system (ISA, PCI etc.) will be attached directly to - <var class="Va">root_bus</var> and other devices will be added as children - of their relevant bus.</p> -<p class="Pp">The devices in a system form a tree. All devices except - <var class="Va">root_bus</var> have a parent (see - <a class="Xr">device_get_parent(9)</a>). In addition, any device can have - children attached to it (see <a class="Xr">device_add_child(9)</a>, - <a class="Xr">device_add_child_ordered(9)</a>, - <a class="Xr">device_find_child(9)</a>, - <a class="Xr">device_get_children(9)</a>, and - <a class="Xr">device_delete_child(9)</a>).</p> -<p class="Pp">A device which has been successfully probed and attached to the - system will also have a driver (see <a class="Xr">device_get_driver(9)</a> - and <a class="Xr">driver(9)</a>) and a devclass (see - <a class="Xr">device_get_devclass(9)</a> and <a class="Xr">devclass(9)</a>). - Various other attributes of the device include a unit number (see - <a class="Xr">device_get_unit(9)</a>), verbose description (normally - supplied by the driver, see <a class="Xr">device_set_desc(9)</a> and - <a class="Xr">device_get_desc(9)</a>), a set of bus-specific variables (see - <a class="Xr">device_get_ivars(9)</a>) and a set of driver-specific - variables (see <a class="Xr">device_get_softc(9)</a>).</p> -<p class="Pp">Devices can be in one of several states:</p> -<dl class="Bl-tag"> - <dt id="DS_NOTPRESENT"><a class="permalink" href="#DS_NOTPRESENT"><code class="Dv">DS_NOTPRESENT</code></a></dt> - <dd>the device has not been probed for existence or the probe failed</dd> - <dt id="DS_ALIVE"><a class="permalink" href="#DS_ALIVE"><code class="Dv">DS_ALIVE</code></a></dt> - <dd>the device probe succeeded but not yet attached</dd> - <dt id="DS_ATTACHED"><a class="permalink" href="#DS_ATTACHED"><code class="Dv">DS_ATTACHED</code></a></dt> - <dd>the device has been successfully attached</dd> - <dt id="DS_BUSY"><a class="permalink" href="#DS_BUSY"><code class="Dv">DS_BUSY</code></a></dt> - <dd>the device is currently open</dd> -</dl> -<p class="Pp">The current state of the device can be determined by calling - <a class="Xr">device_get_state(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devclass(9)</a>, <a class="Xr">driver(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 15, 2017</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device_add_child.9 3.html b/static/freebsd/man9/device_add_child.9 3.html deleted file mode 100644 index c61595dd..00000000 --- a/static/freebsd/man9/device_add_child.9 3.html +++ /dev/null @@ -1,110 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_ADD_CHILD(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_ADD_CHILD(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device_add_child</code>, - <code class="Nm">device_add_child_ordered</code> — - <span class="Nd">add a new device as a child of an existing - device</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">device_t</var> - <br/> - <code class="Fn">device_add_child</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">int - unit</var>);</p> -<p class="Pp"><var class="Ft">device_t</var> - <br/> - <code class="Fn">device_add_child_ordered</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">int order</var>, - <var class="Fa" style="white-space: nowrap;">const char *name</var>, - <var class="Fa" style="white-space: nowrap;">int unit</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Create a new child device of <var class="Fa">dev</var>. The - <var class="Fa">name</var> and <var class="Fa">unit</var> arguments specify - the name and unit number of the device. If the name is unknown then the - caller should pass <code class="Dv">NULL</code>. If the unit is unknown then - the caller should pass <code class="Dv">DEVICE_UNIT_ANY</code> and the - system will choose the next available unit number.</p> -<p class="Pp">The name of the device is used to determine which drivers might be - appropriate for the device. If a name is specified then only drivers of that - name are probed. If no name is given then all drivers for the owning bus are - probed. In any event, only the name of the device is stored so that one may - safely unload/load a driver bound to that name.</p> -<p class="Pp">This allows buses which can uniquely identify device instances - (such as PCI) to allow each driver to check each device instance for a - match. For buses which rely on supplied probe hints where only one driver - can have a chance of probing the device, the driver name should be specified - as the device name.</p> -<p class="Pp">Normally unit numbers will be chosen automatically by the system - and a unit number of <code class="Dv">DEVICE_UNIT_ANY</code> should be - given. When a specific unit number is desired (e.g., for wiring a particular - piece of hardware to a pre-configured unit number), that unit should be - passed. If the specified unit number is already allocated, a new unit will - be allocated and a diagnostic message printed.</p> -<p class="Pp" id="device_add_child_ordered">If the devices attached to a bus - must be probed in a specific order (e.g., for the ISA bus some devices are - sensitive to failed probe attempts of unrelated drivers and therefore must - be probed first), the <var class="Fa">order</var> argument of - <a class="permalink" href="#device_add_child_ordered"><code class="Fn">device_add_child_ordered</code></a>() - should be used to specify a partial ordering. The new device will be added - before any existing device with a greater order. If - <code class="Fn">device_add_child</code>() is used, then the new child will - be added as if its order was zero.</p> -<p class="Pp">When adding a device in the context of - <a class="Xr">DEVICE_IDENTIFY(9)</a> routine, the - <a class="Xr">device_find_child(9)</a> routine should be used to ensure that - the device has not already been added to the tree. Because the device name - and <var class="Vt">devclass_t</var> are associated at probe time (not child - addition time), previous instances of the driver (say in a module that was - later unloaded) may have already added the instance. Authors of bus drivers - must likewise be careful when adding children when they are loaded and - unloaded to avoid duplication of children devices.</p> -<p class="Pp" id="device_add_child">When adding a child to another device node, - such as in an identify routine, use <a class="Xr">BUS_ADD_CHILD(9)</a> - instead of - <a class="permalink" href="#device_add_child"><code class="Fn">device_add_child</code></a>(). - <a class="Xr">BUS_ADD_CHILD(9)</a> will call - <code class="Fn">device_add_child</code>() and add the proper bus-specific - data to the new child. <code class="Fn">device_add_child</code>() does not - call <a class="Xr">BUS_ADD_CHILD(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The new device if successful, NULL otherwise.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">BUS_ADD_CHILD(9)</a>, <a class="Xr">device(9)</a>, - <a class="Xr">device_delete_child(9)</a>, - <a class="Xr">device_find_child(9)</a>, - <a class="Xr">DEVICE_IDENTIFY(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 11, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device_delete_child.9 4.html b/static/freebsd/man9/device_delete_child.9 4.html deleted file mode 100644 index f17d2680..00000000 --- a/static/freebsd/man9/device_delete_child.9 4.html +++ /dev/null @@ -1,60 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_DELETE_CHILD(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_DELETE_CHILD(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device_delete_child</code> — - <span class="Nd">delete a child from a device</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">device_delete_child</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">device_t - child</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The specified device is removed from <var class="Fa">dev</var> and - deleted. If the device is currently attached, it is first detached via - <a class="Xr">device_detach(9)</a>. If - <a class="permalink" href="#device_detach"><code class="Fn" id="device_detach">device_detach</code></a>() - fails, its error value is returned. Otherwise, all descendant devices of - <var class="Fa">child</var> are deleted and zero is returned.</p> -<p class="Pp">The <a class="Xr">BUS_CHILD_DELETED(9)</a> method is invoked for - each device that is deleted. This permits the parent device's driver to tear - down any state associated with child devices such as ivars.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an error is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">BUS_CHILD_DELETED(9)</a>, - <a class="Xr">device_add_child(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 5, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device_delete_children.9 4.html b/static/freebsd/man9/device_delete_children.9 4.html deleted file mode 100644 index b5589441..00000000 --- a/static/freebsd/man9/device_delete_children.9 4.html +++ /dev/null @@ -1,57 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_DELETE_CHILDREN(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_DELETE_CHILDREN(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device_delete_children</code> — - <span class="Nd">delete all child devices of a given device</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">device_delete_children</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#device_delete_children"><code class="Fn" id="device_delete_children">device_delete_children</code></a>() - function deletes all child devices of the given device - <var class="Fa">dev</var>, if any, using the - <a class="permalink" href="#device_delete_child"><code class="Fn" id="device_delete_child">device_delete_child</code></a>() - function for each device it finds. If a child device cannot be deleted, this - function will return an error code.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, a non-zero return value indicates - failure.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device_delete_child(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Jeroen Ruigrok - van der Werven</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 28, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device_enable.9 4.html b/static/freebsd/man9/device_enable.9 4.html deleted file mode 100644 index 9a6ed988..00000000 --- a/static/freebsd/man9/device_enable.9 4.html +++ /dev/null @@ -1,63 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_ENABLE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_ENABLE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device_enable</code>, - <code class="Nm">device_disable</code>, - <code class="Nm">device_is_enabled</code> — - <span class="Nd">manipulate device enabled flag</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">device_enable</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">device_disable</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">device_is_enabled</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Each device has an enabled flag associated with it. A device is - enabled by default when it is created but may be disabled (for instance to - prevent a destructive or time consuming probe attempt). To disable a device, - call - <a class="permalink" href="#device_disable"><code class="Fn" id="device_disable">device_disable</code></a>(), - to re-enable it, call - <a class="permalink" href="#device_enable"><code class="Fn" id="device_enable">device_enable</code></a>() - and to test to see if a device is enabled, call - <a class="permalink" href="#device_is_enabled"><code class="Fn" id="device_is_enabled">device_is_enabled</code></a>().</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 16, 1998</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device_find_child.9 4.html b/static/freebsd/man9/device_find_child.9 4.html deleted file mode 100644 index 53f1c4c3..00000000 --- a/static/freebsd/man9/device_find_child.9 4.html +++ /dev/null @@ -1,56 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_FIND_CHILD(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_FIND_CHILD(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device_find_child</code> — - <span class="Nd">search for a child of a device</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">device_t</var> - <br/> - <code class="Fn">device_find_child</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">const char - *classname</var>, <var class="Fa" style="white-space: nowrap;">int - unit</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This function looks for a specific child of - <code class="Dv">dev</code> with the given <var class="Fa">classname</var> - and <var class="Fa">unit</var>. If <var class="Fa">unit</var> is -1, it - returns the first child of <var class="Fa">dev</var> with a matching - <var class="Fa">classname</var> (that is, the one with the lowest unit).</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If it exists, the child device is returned, otherwise NULL.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device_add_child(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 8, 2005</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device_get_children.9 3.html b/static/freebsd/man9/device_get_children.9 3.html deleted file mode 100644 index 9857e468..00000000 --- a/static/freebsd/man9/device_get_children.9 3.html +++ /dev/null @@ -1,78 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_GET_CHILDREN(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_GET_CHILDREN(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device_get_children</code>, - <code class="Nm">device_has_children</code> — - <span class="Nd">examine devices connected to a device</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">device_get_children</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">device_t - **devlistp</var>, <var class="Fa" style="white-space: nowrap;">int - *devcountp</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">device_has_children</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">device_get_children</code> function retrieves - a list of all device instances currently connected to - <var class="Fa">dev</var>. It returns the list in - <var class="Fa">*devlistp</var> and the count in - <var class="Fa">*devcountp</var>. The memory allocated for the list should - be freed using - <a class="permalink" href="#free"><code class="Fn" id="free">free</code></a>(<var class="Fa">*devlistp</var>, - <var class="Fa">M_TEMP</var>). <var class="Fa">devlistp</var> and - <var class="Fa">devcountp</var> are not changed when an error is - returned.</p> -<p class="Pp">As a special case, if <var class="Fa">devlistp</var> is null, no - memory is allocated but the count is still returned in - <var class="Fa">*devcountp</var>.</p> -<p class="Pp">The <code class="Nm">device_has_children</code> function returns - <code class="Dv">true</code> if <var class="Fa">dev</var> has at least one - child and <code class="Dv">false</code> if it has none.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Nm">device_get_children</code> function returns - zero on success and an appropriate error otherwise. The - <code class="Nm">device_has_children</code> function returns true if the - specified device has at least one child and false otherwise.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devclass(9)</a>, <a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span> - <<a class="Mt" href="mailto:dfr@FreeBSD.org">dfr@FreeBSD.org</a>> and - <span class="An">Dag-Erling Smørgrav</span> - <<a class="Mt" href="mailto:des@FreeBSD.org">des@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 28, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device_get_devclass.9 4.html b/static/freebsd/man9/device_get_devclass.9 4.html deleted file mode 100644 index 7a654926..00000000 --- a/static/freebsd/man9/device_get_devclass.9 4.html +++ /dev/null @@ -1,46 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_GET_DEVCLASS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_GET_DEVCLASS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device_get_devclass</code> — - <span class="Nd">access the devclass of a device</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">devclass_t</var> - <br/> - <code class="Fn">device_get_devclass</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The current devclass associated with the device is returned. If - the device has no devclass, <code class="Dv">NULL</code> is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devclass(9)</a>, <a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 16, 1998</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device_get_driver.9 4.html b/static/freebsd/man9/device_get_driver.9 4.html deleted file mode 100644 index 9bcf091b..00000000 --- a/static/freebsd/man9/device_get_driver.9 4.html +++ /dev/null @@ -1,46 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_GET_DRIVER(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_GET_DRIVER(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device_get_driver</code> — - <span class="Nd">access the current driver of a device</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">driver_t *</var> - <br/> - <code class="Fn">device_get_driver</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The current driver associated with the device is returned. If the - device has no driver, <code class="Dv">NULL</code> is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 16, 1998</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device_get_ivars.9 4.html b/static/freebsd/man9/device_get_ivars.9 4.html deleted file mode 100644 index dc8500ab..00000000 --- a/static/freebsd/man9/device_get_ivars.9 4.html +++ /dev/null @@ -1,60 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_GET_IVARS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_GET_IVARS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device_get_ivars</code>, - <code class="Nm">device_set_ivars</code> — <span class="Nd">access - bus private variables</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">device_get_ivars</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">device_set_ivars</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">void - *ivar</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#device_get_ivars"><code class="Fn" id="device_get_ivars">device_get_ivars</code></a>() - function returns the bus-specific instance variables of a device.</p> -<p class="Pp" id="device_set_ivars">The - <a class="permalink" href="#device_set_ivars"><code class="Fn">device_set_ivars</code></a>() - function sets the bus-specific instance variables of a device.</p> -<p class="Pp">Typically, only bus drivers will use these functions. The kernel - assumes that the bus driver will manage this memory, and no automatic memory - allocation or deallocation happens. Client drivers should access ivars - through the <a class="Xr">BUS_READ_IVAR(9)</a> interface instead.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 16, 1998</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device_get_name.9 4.html b/static/freebsd/man9/device_get_name.9 4.html deleted file mode 100644 index d0a137cd..00000000 --- a/static/freebsd/man9/device_get_name.9 4.html +++ /dev/null @@ -1,55 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_GET_NAME(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_GET_NAME(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device_get_name</code>, - <code class="Nm">device_get_nameunit</code> — <span class="Nd">access - the name of a device's device class or instance</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">const char *</var> - <br/> - <code class="Fn">device_get_name</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">const char *</var> - <br/> - <code class="Fn">device_get_nameunit</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#device_get_name"><code class="Fn" id="device_get_name">device_get_name</code></a>() - function returns the name of the device's device class.</p> -<p class="Pp" id="device_get_nameunit">The - <a class="permalink" href="#device_get_nameunit"><code class="Fn">device_get_nameunit</code></a>() - function returns the name of the device's instance.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Warner - Losh</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 21, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device_get_parent.9 4.html b/static/freebsd/man9/device_get_parent.9 4.html deleted file mode 100644 index e2f9ca4d..00000000 --- a/static/freebsd/man9/device_get_parent.9 4.html +++ /dev/null @@ -1,47 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_GET_PARENT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_GET_PARENT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device_get_parent</code> — - <span class="Nd">return the device's parent</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">device_t</var> - <br/> - <code class="Fn">device_get_parent</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#device_get_parent"><code class="Fn" id="device_get_parent">device_get_parent</code></a>() - function returns the name of the device's parent device.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Warner - Losh</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 21, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device_get_property.9 3.html b/static/freebsd/man9/device_get_property.9 3.html deleted file mode 100644 index 33387eef..00000000 --- a/static/freebsd/man9/device_get_property.9 3.html +++ /dev/null @@ -1,92 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_GET_PROPERTY(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_GET_PROPERTY(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device_get_property</code>, - <code class="Nm">device_has_property</code> — <span class="Nd">access - device specific data</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">ssize_t</var> - <br/> - <code class="Fn">device_get_property</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">const char - *prop</var>, <var class="Fa" style="white-space: nowrap;">void *val</var>, - <var class="Fa" style="white-space: nowrap;">size_t sz</var>, - <var class="Fa" style="white-space: nowrap;">device_property_type_t - type</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">device_has_property</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">const char - *prop</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Access device specific data provided by the parent bus. Drivers - can use these properties to obtain device capabilities and set necessary - quirks.</p> -<p class="Pp">The underlying property type is specified with the - <var class="Fa">type</var> argument. Currently the following types are - supported:</p> -<dl class="Bl-tag"> - <dt id="DEVICE_PROP_BUFFER"><a class="permalink" href="#DEVICE_PROP_BUFFER"><code class="Dv">DEVICE_PROP_BUFFER</code></a></dt> - <dd>The underlying property is a string of bytes.</dd> - <dt id="DEVICE_PROP_ANY"><a class="permalink" href="#DEVICE_PROP_ANY"><code class="Dv">DEVICE_PROP_ANY</code></a></dt> - <dd>Wildcard property type.</dd> - <dt id="DEVICE_PROP_HANDLE"><a class="permalink" href="#DEVICE_PROP_HANDLE"><code class="Dv">DEVICE_PROP_HANDLE</code></a></dt> - <dd>Following a reference the underlying property is a handle of the - respective bus.</dd> - <dt id="DEVICE_PROP_UINT32"><a class="permalink" href="#DEVICE_PROP_UINT32"><code class="Dv">DEVICE_PROP_UINT32</code></a></dt> - <dd>The underlying property is an array of unsigned 32 bit integers. The - <var class="Fa">sz</var> argument shall be a multiple of 4.</dd> - <dt id="DEVICE_PROP_UINT64"><a class="permalink" href="#DEVICE_PROP_UINT64"><code class="Dv">DEVICE_PROP_UINT64</code></a></dt> - <dd>The underlying property is an array of unsigned 64 bit integers. The - <var class="Fa">sz</var> argument shall be a multiple of 8.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1> -<p class="Pp">You can pass NULL as pointer to property's value when calling - <a class="permalink" href="#device_get_property"><code class="Fn" id="device_get_property">device_get_property</code></a>() - to obtain its size.</p> -<p class="Pp">Currently this interface is implemented by - <a class="Xr">simplebus(4)</a> and <a class="Xr">acpi(4)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp"><code class="Fn">device_get_property</code>() if successful - returns property's size, otherwise returns -1.</p> -<p class="Pp"><code class="Fn">device_has_property</code>() returns true if - given property was found.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">acpi(4)</a>, <a class="Xr">simplebus(4)</a>, - <a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bartlomiej - Grzesik</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 29, 2022</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device_get_softc.9 4.html b/static/freebsd/man9/device_get_softc.9 4.html deleted file mode 100644 index 6fb8a6d9..00000000 --- a/static/freebsd/man9/device_get_softc.9 4.html +++ /dev/null @@ -1,62 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_GET_SOFTC(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_GET_SOFTC(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device_get_softc</code> — - <span class="Nd">access driver private instance variables</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">device_get_softc</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Return the driver-specific software context of - <var class="Fa">dev</var>. The softc is automatically allocated and zeroed - when the device is attached. The softc is also initialized and present when - a device is probed, but is subject to caveats as described in - <a class="Xr">DEVICE_PROBE(9)</a>. The size of the allocation is determined - by the device's <var class="Vt">driver_t</var> information used to define - the driver. The softc typically encapsulates the state of this instance of - the device.</p> -<p class="Pp">Driver writers are discouraged from using their own softc - management mechanisms. Driver writers should not copy such mechanisms found - in drivers in the tree that predate this function.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The pointer to the driver-specific instance variable is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">DEVICE_PROBE(9)</a>, - <a class="Xr">device_set_softc(9)</a>, <a class="Xr">driver(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 21, 2015</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device_get_state.9 3.html b/static/freebsd/man9/device_get_state.9 3.html deleted file mode 100644 index f430ef69..00000000 --- a/static/freebsd/man9/device_get_state.9 3.html +++ /dev/null @@ -1,90 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_GET_STATE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_GET_STATE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device_get_state</code>, - <code class="Nm">device_busy</code>, <code class="Nm">device_unbusy</code>, - <code class="Nm">device_is_alive</code>, - <code class="Nm">device_is_attached</code> — - <span class="Nd">manipulate device state</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">device_state_t</var> - <br/> - <code class="Fn">device_get_state</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">device_busy</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">device_unbusy</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">device_is_alive</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">device_is_attached</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The current state of a device is accessed by calling - <a class="permalink" href="#device_get_state"><code class="Fn" id="device_get_state">device_get_state</code></a>() - which returns <code class="Dv">DS_NOTPRESENT</code>, - <code class="Dv">DS_ALIVE</code>, <code class="Dv">DS_ATTACHED</code> or - <code class="Dv">DS_BUSY</code> (described in <a class="Xr">device(9)</a>). - To test see if a device was successfully probed, call - <a class="permalink" href="#device_is_alive"><code class="Fn" id="device_is_alive">device_is_alive</code></a>() - which simply returns if the state is greater or equal to - <code class="Dv">DS_ALIVE</code>. To test see if a device was successfully - attached, call - <a class="permalink" href="#device_is_attached"><code class="Fn" id="device_is_attached">device_is_attached</code></a>() - which simply returns if the state is greater or equal to - <code class="Dv">DS_ATTACHED</code>.</p> -<p class="Pp" id="device_busy">Each device has a busy count which is incremented - when - <a class="permalink" href="#device_busy"><code class="Fn">device_busy</code></a>() - is called and decremented when - <a class="permalink" href="#device_unbusy"><code class="Fn" id="device_unbusy">device_unbusy</code></a>() - is called. Both routines return an error if the device state is less than - <code class="Dv">DS_ATTACHED</code>.</p> -<p class="Pp" id="device_busy~2">When - <a class="permalink" href="#device_busy~2"><code class="Fn">device_busy</code></a>() - is called on a device in the <code class="Dv">DS_ATTACHED</code> state, the - device changes to the <code class="Dv">DS_BUSY</code> state. When - <a class="permalink" href="#device_unbusy~2"><code class="Fn" id="device_unbusy~2">device_unbusy</code></a>() - is called and after decrementing, the busy count for the device is zero, the - device changes to the <code class="Dv">DS_ATTACHED</code> state.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 16, 1998</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device_get_sysctl.9 4.html b/static/freebsd/man9/device_get_sysctl.9 4.html deleted file mode 100644 index 71297d92..00000000 --- a/static/freebsd/man9/device_get_sysctl.9 4.html +++ /dev/null @@ -1,56 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_GET_SYSCTL(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_GET_SYSCTL(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device_get_sysctl_ctx</code>, - <code class="Nm">device_get_sysctl_tree</code> — - <span class="Nd">manipulate the sysctl oid tree for driver specific sysctl - nodes</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">struct sysctl_ctx_list *</var> - <br/> - <code class="Fn">device_get_sysctl_ctx</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">device_get_sysctl_tree</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The newbus system automatically adds a sysctl node for each device - in the system. This node can be accessed with the - <a class="permalink" href="#device_get_sysctl_tree"><code class="Fn" id="device_get_sysctl_tree">device_get_sysctl_tree</code></a>() - function. The context for the node can be obtained with the - <a class="permalink" href="#device_get_sysctl_ctx"><code class="Fn" id="device_get_sysctl_ctx">device_get_sysctl_ctx</code></a>() - function.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Warner - Losh</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 18, 2011</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device_get_unit.9 4.html b/static/freebsd/man9/device_get_unit.9 4.html deleted file mode 100644 index 3d3584dc..00000000 --- a/static/freebsd/man9/device_get_unit.9 4.html +++ /dev/null @@ -1,45 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_GET_UNIT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_GET_UNIT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device_get_unit</code> — - <span class="Nd">access the unit number of a device</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">device_get_unit</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Return the unit number of the device.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 16, 1998</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device_printf.9 4.html b/static/freebsd/man9/device_printf.9 4.html deleted file mode 100644 index 7e50e808..00000000 --- a/static/freebsd/man9/device_printf.9 4.html +++ /dev/null @@ -1,53 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_PRINTF(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_PRINTF(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device_printf</code> — - <span class="Nd">formatted output conversion</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">device_printf</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">const char - *fmt</var>, <var class="Fa" style="white-space: nowrap;">...</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#device_printf"><code class="Fn" id="device_printf">device_printf</code></a>() - function is a convenience interface to the <a class="Xr">printf(9)</a> - function. It outputs the name of the <var class="Fa">dev</var> device, - followed by a colon and a space, and then what <a class="Xr">printf(9)</a> - would print if you passed <var class="Fa">fmt</var> and the remaining - arguments to it.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">device_printf</code>() function returns the - number of characters displayed.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">printf(3)</a>, <a class="Xr">printf(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 21, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device_probe_and_attach.9 3.html b/static/freebsd/man9/device_probe_and_attach.9 3.html deleted file mode 100644 index 0e2c80a0..00000000 --- a/static/freebsd/man9/device_probe_and_attach.9 3.html +++ /dev/null @@ -1,117 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_PROBE_AND_ATTACH(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_PROBE_AND_ATTACH(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device_attach</code>, - <code class="Nm">device_detach</code>, <code class="Nm">device_probe</code>, - <code class="Nm">device_probe_and_attach</code> — - <span class="Nd">manage device's connection to a device driver</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">device_attach</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">device_detach</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">device_probe</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">device_probe_and_attach</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These functions manage the relationship between a device and - device drivers.</p> -<p class="Pp" id="device_probe"><a class="permalink" href="#device_probe"><code class="Fn">device_probe</code></a>() - invokes the <a class="Xr">DEVICE_PROBE(9)</a> method of each suitable driver - and to find the driver with the best match for <var class="Fa">dev</var>. If - a matching driver is found, <var class="Fa">dev</var> is set to the - <code class="Dv">DS_ALIVE</code> state and zero is returned. If - <var class="Fa">dev</var> is already attached to a device driver or has been - disabled via <a class="Xr">device_disable(9)</a>, then it will not be probed - and -1 is returned.</p> -<p class="Pp" id="device_attach"><a class="permalink" href="#device_attach"><code class="Fn">device_attach</code></a>() - fully attaches a device driver to <var class="Fa">dev</var>. This function - prints a description of the device and invokes the - <a class="Xr">DEVICE_ATTACH(9)</a> method. If the - <a class="Xr">DEVICE_ATTACH(9)</a> method succeeds, - <var class="Fa">dev</var> is set to the <code class="Dv">DS_ATTACHED</code> - state and zero is returned. If the <a class="Xr">DEVICE_ATTACH(9)</a> method - fails, <a class="Xr">BUS_CHILD_DETACHED(9)</a> is called and an error value - is returned.</p> -<p class="Pp" id="device_attach~2">If the device name and unit are disabled by a - hint, - <a class="permalink" href="#device_attach~2"><code class="Fn">device_attach</code></a>() - disables the device, demotes it to the <code class="Dv">DS_NOTPRESENT</code> - state, and returns <code class="Dv">ENXIO</code>. The device retains its - device name and unit and can be re-enabled via - <a class="Xr">devctl(8)</a>.</p> -<p class="Pp" id="device_probe_and_attach"><a class="permalink" href="#device_probe_and_attach"><code class="Fn">device_probe_and_attach</code></a>() - is a wrapper function around <code class="Fn">device_probe</code>() and - <code class="Fn">device_attach</code>() that fully initialises a device. If - <var class="Fa">dev</var> is already attached or disabled, - <code class="Fn">device_probe_and_attach</code>() leaves the device - unchanged and returns zero. Otherwise, - <code class="Fn">device_probe</code>() is used to identify a device driver - for <var class="Fa">dev</var> and <code class="Fn">device_attach</code>() - finalizes attaching the driver to <var class="Fa">dev</var>. Device drivers - should generally use this function to initialize a device rather than direct - calls to <code class="Fn">device_probe</code>() and - <code class="Fn">device_attach</code>().</p> -<p class="Pp" id="device_detach"><a class="permalink" href="#device_detach"><code class="Fn">device_detach</code></a>() - detaches the device driver from <var class="Fa">dev</var>. This function - invokes the <a class="Xr">DEVICE_DETACH(9)</a> method to tear down device - driver state for <var class="Fa">dev</var>. If the method fails, its error - value is returned and <var class="Fa">dev</var> remains attached. If the - method succeeds, otherwise, <a class="Xr">BUS_CHILD_DETACHED(9)</a> is - called, the device is set to the <code class="Dv">DS_NOTPRESENT</code> - state, and zero is returned. If a device is busy, - <code class="Fn">device_detach</code>() fails with - <code class="Dv">EBUSY</code> and leaving <var class="Fa">dev</var> - unchanged.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Zero is returned on success, otherwise an appropriate error is - returned. In addition, <code class="Fn">device_probe</code>() returns -1 if - <var class="Fa">dev</var> is disabled or already attached.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devctl(8)</a>, - <a class="Xr">BUS_CHILD_DETACHED(9)</a>, <a class="Xr">device(9)</a>, - <a class="Xr">DEVICE_ATTACH(9)</a>, <a class="Xr">DEVICE_DETACH(9)</a>, - <a class="Xr">DEVICE_PROBE(9)</a>, <a class="Xr">driver(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 5, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device_quiet.9 4.html b/static/freebsd/man9/device_quiet.9 4.html deleted file mode 100644 index fc00d092..00000000 --- a/static/freebsd/man9/device_quiet.9 4.html +++ /dev/null @@ -1,64 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_QUIET(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_QUIET(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device_quiet</code>, - <code class="Nm">device_verbose</code>, - <code class="Nm">device_is_quiet</code> — <span class="Nd">manipulate - device quiet flag</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">device_quiet</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">device_verbose</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">device_is_quiet</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Each device has a quiet flag associated with it. A device is - verbose by default when it is created but may be quieted to prevent printing - of the device identification string during attach and printing of a message - during detach. To quiet a device, call - <a class="permalink" href="#device_quiet"><code class="Fn" id="device_quiet">device_quiet</code></a>() - during a device driver probe routine. To re-enable probe messages, call - <a class="permalink" href="#device_verbose"><code class="Fn" id="device_verbose">device_verbose</code></a>(). - To test to see if a device is quieted, call - <a class="permalink" href="#device_is_quiet"><code class="Fn" id="device_is_quiet">device_is_quiet</code></a>().</p> -<p class="Pp">Devices are implicitly marked verbose after a driver detaches.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 12, 2016</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device_set_desc.9 4.html b/static/freebsd/man9/device_set_desc.9 4.html deleted file mode 100644 index 01aa7a3d..00000000 --- a/static/freebsd/man9/device_set_desc.9 4.html +++ /dev/null @@ -1,72 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_SET_DESC(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_SET_DESC(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device_set_desc</code>, - <code class="Nm">device_set_descf</code>, - <code class="Nm">device_set_desc_copy</code>, - <code class="Nm">device_get_desc</code> — <span class="Nd">access the - description of a device</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">device_set_desc</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">const char - *desc</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">device_set_descf</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">const char - *fmt</var>, <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">device_set_desc_copy</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">const char - *desc</var>);</p> -<p class="Pp"><var class="Ft">const char *</var> - <br/> - <code class="Fn">device_get_desc</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Manipulate the verbose description of a device. This description - (if present) is printed as part of the message when it is attached during - autoconfiguration. The variation - <a class="permalink" href="#device_set_desc_copy"><code class="Fn" id="device_set_desc_copy">device_set_desc_copy</code></a>() - is used to set the description if the string passed is a temporary buffer - which will be overwritten. In this case, the system will copy the string, - otherwise the pointer passed will be used directly. - <a class="permalink" href="#device_set_descf"><code class="Fn" id="device_set_descf">device_set_descf</code></a>() - is a printf-like version of - <a class="permalink" href="#device_set_desc"><code class="Fn" id="device_set_desc">device_set_desc</code></a>().</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 9, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device_set_driver.9 4.html b/static/freebsd/man9/device_set_driver.9 4.html deleted file mode 100644 index 5de2faec..00000000 --- a/static/freebsd/man9/device_set_driver.9 4.html +++ /dev/null @@ -1,50 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_SET_DRIVER(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_SET_DRIVER(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device_set_driver</code> — - <span class="Nd">associate a specific driver with a device node in the - tree</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">device_set_driver</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">driver_t - *driver</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This function associates a specific driver with a given device - node in the tree. It is typically used in - <a class="Xr">DEVICE_IDENTIFY(9)</a> functions to add devices to a bus that - does not support doing so automatically, such as the ISA bus.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">M. Warner - Losh</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 21, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/device_set_flags.9 4.html b/static/freebsd/man9/device_set_flags.9 4.html deleted file mode 100644 index deb0683c..00000000 --- a/static/freebsd/man9/device_set_flags.9 4.html +++ /dev/null @@ -1,55 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVICE_GET_FLAGS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVICE_GET_FLAGS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">device_set_flags</code>, - <code class="Nm">device_get_flags</code> — - <span class="Nd">manipulate driver flags</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">device_set_flags</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - flags</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">device_get_flags</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Each device supports a set of driver-dependent flags which are - often used to control device behaviour. These flags are read by calling - <a class="permalink" href="#device_get_flags"><code class="Fn" id="device_get_flags">device_get_flags</code></a>() - and written by calling - <a class="permalink" href="#device_set_flags"><code class="Fn" id="device_set_flags">device_set_flags</code></a>().</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 6, 1999</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/devstat.9 3.html b/static/freebsd/man9/devstat.9 3.html deleted file mode 100644 index 4c185552..00000000 --- a/static/freebsd/man9/devstat.9 3.html +++ /dev/null @@ -1,401 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVSTAT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVSTAT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">devstat</code>, - <code class="Nm">devstat_end_transaction</code>, - <code class="Nm">devstat_end_transaction_bio</code>, - <code class="Nm">devstat_end_transaction_bio_bt</code>, - <code class="Nm">devstat_new_entry</code>, - <code class="Nm">devstat_remove_entry</code>, - <code class="Nm">devstat_start_transaction</code>, - <code class="Nm">devstat_start_transaction_bio</code> — - <span class="Nd">kernel interface for keeping device statistics</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/devicestat.h</a>></code></p> -<p class="Pp"><var class="Ft">struct devstat *</var> - <br/> - <code class="Fn">devstat_new_entry</code>(<var class="Fa">const void - *dev_name</var>, <var class="Fa">int unit_number</var>, - <var class="Fa">uint32_t block_size</var>, - <var class="Fa">devstat_support_flags flags</var>, - <var class="Fa">devstat_type_flags device_type</var>, - <var class="Fa">devstat_priority priority</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">devstat_remove_entry</code>(<var class="Fa" style="white-space: nowrap;">struct - devstat *ds</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">devstat_start_transaction</code>(<var class="Fa">struct - devstat *ds</var>, <var class="Fa">const struct bintime *now</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">devstat_start_transaction_bio</code>(<var class="Fa">struct - devstat *ds</var>, <var class="Fa">struct bio *bp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">devstat_end_transaction</code>(<var class="Fa">struct devstat - *ds</var>, <var class="Fa">uint32_t bytes</var>, - <var class="Fa">devstat_tag_type tag_type</var>, - <var class="Fa">devstat_trans_flags flags</var>, <var class="Fa">const - struct bintime *now</var>, <var class="Fa">const struct bintime - *then</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">devstat_end_transaction_bio</code>(<var class="Fa">struct - devstat *ds</var>, <var class="Fa">const struct bio *bp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">devstat_end_transaction_bio_bt</code>(<var class="Fa">struct - devstat *ds</var>, <var class="Fa">const struct bio *bp</var>, - <var class="Fa">const struct bintime *now</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The devstat subsystem is an interface for recording device - statistics, as its name implies. The idea is to keep reasonably detailed - statistics while utilizing a minimum amount of CPU time to record them. - Thus, no statistical calculations are actually performed in the kernel - portion of the <code class="Nm">devstat</code> code. Instead, that is left - for user programs to handle.</p> -<p class="Pp">The historical and antiquated <code class="Nm">devstat</code> - model assumed a single active IO operation per device, which is not accurate - for most disk-like drivers in the 2000s and beyond. New consumers of the - interface should almost certainly use only the "bio" variants of - the start and end transacation routines.</p> -<p class="Pp" id="devstat_new_entry"><a class="permalink" href="#devstat_new_entry"><code class="Fn">devstat_new_entry</code></a>() - allocates and initializes <var class="Va">devstat</var> structure and - returns a pointer to it. <code class="Fn">devstat_new_entry</code>() takes - several arguments:</p> -<dl class="Bl-tag"> - <dt>dev_name</dt> - <dd>The device name, e.g., da, cd, sa.</dd> - <dt>unit_number</dt> - <dd>Device unit number.</dd> - <dt>block_size</dt> - <dd>Block size of the device, if supported. If the device does not support a - block size, or if the blocksize is unknown at the time the device is added - to the <code class="Nm">devstat</code> list, it should be set to 0.</dd> - <dt>flags</dt> - <dd>Flags indicating operations supported or not supported by the device. See - below for details.</dd> - <dt>device_type</dt> - <dd>The device type. This is broken into three sections: base device type - (e.g., direct access, CDROM, sequential access), interface type (IDE, SCSI - or other) and a pass-through flag to indicate pas-through devices. See - below for a complete list of types.</dd> - <dt>priority</dt> - <dd>The device priority. The priority is used to determine how devices are - sorted within <code class="Nm">devstat</code>'s list of devices. Devices - are sorted first by priority (highest to lowest), and then by attach - order. See below for a complete list of available priorities.</dd> -</dl> -<p class="Pp" id="devstat_remove_entry"><a class="permalink" href="#devstat_remove_entry"><code class="Fn">devstat_remove_entry</code></a>() - removes a device from the <code class="Nm">devstat</code> subsystem. It - takes the devstat structure for the device in question as an argument. The - <code class="Nm">devstat</code> generation number is incremented and the - number of devices is decremented.</p> -<p class="Pp" id="devstat_start_transaction"><a class="permalink" href="#devstat_start_transaction"><code class="Fn">devstat_start_transaction</code></a>() - registers the start of a transaction with the - <code class="Nm">devstat</code> subsystem. Optionally, if the caller already - has a <code class="Fn">binuptime</code>() value available, it may be passed - in <var class="Fa">*now</var>. Usually the caller can just pass - <code class="Dv">NULL</code> for <var class="Fa">now</var>, and the routine - will gather the current <code class="Fn">binuptime</code>() itself. The busy - count is incremented with each transaction start. When a device goes from - idle to busy, the system uptime is recorded in the - <var class="Va">busy_from</var> field of the <var class="Va">devstat</var> - structure.</p> -<p class="Pp" id="devstat_start_transaction_bio"><a class="permalink" href="#devstat_start_transaction_bio"><code class="Fn">devstat_start_transaction_bio</code></a>() - records the <code class="Fn">binuptime</code>() in the provided bio's - <var class="Fa">bio_t0</var> and then invokes - <code class="Fn">devstat_start_transaction</code>().</p> -<p class="Pp" id="devstat_end_transaction"><a class="permalink" href="#devstat_end_transaction"><code class="Fn">devstat_end_transaction</code></a>() - registers the end of a transaction with the <code class="Nm">devstat</code> - subsystem. It takes six arguments:</p> -<dl class="Bl-tag"> - <dt>ds</dt> - <dd>The <var class="Va">devstat</var> structure for the device in - question.</dd> - <dt>bytes</dt> - <dd>The number of bytes transferred in this transaction.</dd> - <dt>tag_type</dt> - <dd>Transaction tag type. See below for tag types.</dd> - <dt>flags</dt> - <dd>Transaction flags indicating whether the transaction was a read, write, or - whether no data was transferred.</dd> - <dt>now</dt> - <dd>The <code class="Fn">binuptime</code>() at the end of the transaction, or - <code class="Dv">NULL</code>.</dd> - <dt>then</dt> - <dd>The <code class="Fn">binuptime</code>() at the beginning of the - transaction, or <code class="Dv">NULL</code>.</dd> -</dl> -<p class="Pp" id="binuptime">If <var class="Fa">now</var> is - <code class="Dv">NULL</code>, it collects the current time from - <a class="permalink" href="#binuptime"><code class="Fn">binuptime</code></a>(). - If <var class="Fa">then</var> is <code class="Dv">NULL</code>, the operation - is not tracked in the <var class="Va">devstat</var> - <var class="Fa">duration</var> table.</p> -<p class="Pp" id="devstat_end_transaction_bio"><a class="permalink" href="#devstat_end_transaction_bio"><code class="Fn">devstat_end_transaction_bio</code></a>() - is a thin wrapper for - <code class="Fn">devstat_end_transaction_bio_bt</code>() with a - <code class="Dv">NULL</code> <var class="Fa">now</var> parameter.</p> -<p class="Pp" id="devstat_end_transaction_bio_bt"><a class="permalink" href="#devstat_end_transaction_bio_bt"><code class="Fn">devstat_end_transaction_bio_bt</code></a>() - is a wrapper for <code class="Fn">devstat_end_transaction</code>() which - pulls all needed information from a <var class="Va">struct bio</var> - prepared by <code class="Fn">devstat_start_transaction_bio</code>(). The bio - must be ready for - <a class="permalink" href="#biodone"><code class="Fn" id="biodone">biodone</code></a>() - (i.e., <var class="Fa">bio_bcount</var> and <var class="Fa">bio_resid</var> - must be correctly initialized).</p> -<p class="Pp">The <var class="Va">devstat</var> structure is composed of the - following fields:</p> -<dl class="Bl-tag"> - <dt>sequence0,</dt> - <dd style="width: auto;"> </dd> - <dt>sequence1</dt> - <dd>An implementation detail used to gather consistent snapshots of device - statistics.</dd> - <dt>start_count</dt> - <dd>Number of operations started.</dd> - <dt>end_count</dt> - <dd>Number of operations completed. The “busy_count” can be - calculated by subtracting <var class="Fa">end_count</var> from - <var class="Fa">start_count</var>. (<var class="Fa">sequence0</var> and - <var class="Fa">sequence1</var> are used to get a consistent snapshot.) - This is the current number of outstanding transactions for the device. - This should never go below zero, and on an idle device it should be zero. - If either one of these conditions is not true, it indicates a problem. - <p class="Pp">There should be one and only one transaction start event and - one transaction end event for each transaction.</p> - </dd> - <dt>dev_links</dt> - <dd>Each <var class="Va">devstat</var> structure is placed in a linked list - when it is registered. The <var class="Va">dev_links</var> field contains - a pointer to the next entry in the list of <var class="Va">devstat</var> - structures.</dd> - <dt>device_number</dt> - <dd>The device number is a unique identifier for each device. The device - number is incremented for each new device that is registered. The device - number is currently only a 32-bit integer, but it could be enlarged if - someone has a system with more than four billion device arrival - events.</dd> - <dt>device_name</dt> - <dd>The device name is a text string given by the registering driver to - identify itself. (e.g., “da”, “cd”, - “sa”, etc.)</dd> - <dt>unit_number</dt> - <dd>The unit number identifies the particular instance of the peripheral - driver in question.</dd> - <dt>bytes[4]</dt> - <dd>This array contains the number of bytes that have been read (index - <code class="Dv">DEVSTAT_READ</code>), written (index - <code class="Dv">DEVSTAT_WRITE</code>), freed or erased (index - <code class="Dv">DEVSTAT_FREE</code>), or other (index - <code class="Dv">DEVSTAT_NO_DATA</code>). All values are unsigned 64-bit - integers.</dd> - <dt>operations[4]</dt> - <dd>This array contains the number of operations of a given type that have - been performed. The indices are identical to those for - <var class="Fa">bytes</var> above. <code class="Dv">DEVSTAT_NO_DATA</code> - or "other" represents the number of transactions to the device - which are neither reads, writes, nor frees. For instance, SCSI drivers - often send a test unit ready command to SCSI devices. The test unit ready - command does not read or write any data. It merely causes the device to - return its status.</dd> - <dt id="devstat_end_transaction~2">duration[4]</dt> - <dd>This array contains the total bintime corresponding to completed - operations of a given type. The indices are identical to those for - <var class="Fa">bytes</var> above. (Operations that complete using the - historical - <a class="permalink" href="#devstat_end_transaction~2"><code class="Fn">devstat_end_transaction</code></a>() - API and do not provide a non-NULL <var class="Fa">then</var> are not - accounted for.)</dd> - <dt>busy_time</dt> - <dd>This is the amount of time that the device busy count has been greater - than zero. This is only updated when the busy count returns to zero.</dd> - <dt id="getmicrotime">creation_time</dt> - <dd>This is the time, as reported by - <a class="permalink" href="#getmicrotime"><code class="Fn">getmicrotime</code></a>() - that the device was registered.</dd> - <dt>block_size</dt> - <dd>This is the block size of the device, if the device has a block size.</dd> - <dt>tag_types</dt> - <dd>This is an array of counters to record the number of various tag types - that are sent to a device. See below for a list of tag types.</dd> - <dt>busy_from</dt> - <dd>If the device is not busy, this was the time that a transaction last - completed. If the device is busy, this the most recent of either the time - that the device became busy, or the time that the last transaction - completed.</dd> - <dt>flags</dt> - <dd>These flags indicate which statistics measurements are supported by a - particular device. These flags are primarily intended to serve as an aid - to userland programs that decipher the statistics.</dd> - <dt>device_type</dt> - <dd>This is the device type. It consists of three parts: the device type - (e.g., direct access, CDROM, sequential access, etc.), the interface (IDE, - SCSI or other) and whether or not the device in question is a pass-through - driver. See below for a complete list of device types.</dd> - <dt>priority</dt> - <dd>This is the priority. This is the first parameter used to determine where - to insert a device in the <code class="Nm">devstat</code> list. The second - parameter is attach order. See below for a list of available - priorities.</dd> - <dt>id</dt> - <dd>Identification for GEOM nodes.</dd> -</dl> -<p class="Pp">Each device is given a device type. Pass-through devices have the - same underlying device type and interface as the device they provide an - interface for, but they also have the pass-through flag set. The base device - types are identical to the SCSI device type numbers, so with SCSI - peripherals, the device type returned from an inquiry is usually ORed with - the SCSI interface type and the pass-through flag if appropriate. The device - type flags are as follows:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>typedef enum { - DEVSTAT_TYPE_DIRECT = 0x000, - DEVSTAT_TYPE_SEQUENTIAL = 0x001, - DEVSTAT_TYPE_PRINTER = 0x002, - DEVSTAT_TYPE_PROCESSOR = 0x003, - DEVSTAT_TYPE_WORM = 0x004, - DEVSTAT_TYPE_CDROM = 0x005, - DEVSTAT_TYPE_SCANNER = 0x006, - DEVSTAT_TYPE_OPTICAL = 0x007, - DEVSTAT_TYPE_CHANGER = 0x008, - DEVSTAT_TYPE_COMM = 0x009, - DEVSTAT_TYPE_ASC0 = 0x00a, - DEVSTAT_TYPE_ASC1 = 0x00b, - DEVSTAT_TYPE_STORARRAY = 0x00c, - DEVSTAT_TYPE_ENCLOSURE = 0x00d, - DEVSTAT_TYPE_FLOPPY = 0x00e, - DEVSTAT_TYPE_MASK = 0x00f, - DEVSTAT_TYPE_IF_SCSI = 0x010, - DEVSTAT_TYPE_IF_IDE = 0x020, - DEVSTAT_TYPE_IF_OTHER = 0x030, - DEVSTAT_TYPE_IF_NVME = 0x040, - DEVSTAT_TYPE_IF_MASK = 0x0f0, - DEVSTAT_TYPE_PASS = 0x100 -} devstat_type_flags;</pre> -</div> -<p class="Pp">Devices have a priority associated with them, which controls - roughly where they are placed in the <code class="Nm">devstat</code> list. - The priorities are as follows:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>typedef enum { - DEVSTAT_PRIORITY_MIN = 0x000, - DEVSTAT_PRIORITY_OTHER = 0x020, - DEVSTAT_PRIORITY_PASS = 0x030, - DEVSTAT_PRIORITY_FD = 0x040, - DEVSTAT_PRIORITY_WFD = 0x050, - DEVSTAT_PRIORITY_TAPE = 0x060, - DEVSTAT_PRIORITY_CD = 0x090, - DEVSTAT_PRIORITY_DISK = 0x110, - DEVSTAT_PRIORITY_ARRAY = 0x120, - DEVSTAT_PRIORITY_MAX = 0xfff -} devstat_priority;</pre> -</div> -<p class="Pp">Each device has associated with it flags to indicate what - operations are supported or not supported. The - <var class="Va">devstat_support_flags</var> values are as follows:</p> -<dl class="Bl-tag"> - <dt>DEVSTAT_ALL_SUPPORTED</dt> - <dd>Every statistic type is supported by the device.</dd> - <dt>DEVSTAT_NO_BLOCKSIZE</dt> - <dd>This device does not have a blocksize.</dd> - <dt>DEVSTAT_NO_ORDERED_TAGS</dt> - <dd>This device does not support ordered tags.</dd> - <dt>DEVSTAT_BS_UNAVAILABLE</dt> - <dd>This device supports a blocksize, but it is currently unavailable. This - flag is most often used with removable media drives.</dd> -</dl> -<p class="Pp" id="devstat_end_transaction~3">Transactions to a device fall into - one of three categories, which are represented in the - <var class="Va">flags</var> passed into - <a class="permalink" href="#devstat_end_transaction~3"><code class="Fn">devstat_end_transaction</code></a>(). - The transaction types are as follows:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>typedef enum { - DEVSTAT_NO_DATA = 0x00, - DEVSTAT_READ = 0x01, - DEVSTAT_WRITE = 0x02, - DEVSTAT_FREE = 0x03 -} devstat_trans_flags; -#define DEVSTAT_N_TRANS_FLAGS 4</pre> -</div> -<p class="Pp">DEVSTAT_NO_DATA is a type of transactions to the device which are - neither reads or writes. For instance, SCSI drivers often send a test unit - ready command to SCSI devices. The test unit ready command does not read or - write any data. It merely causes the device to return its status.</p> -<p class="Pp" id="devstat_end_transaction~4">There are four possible values for - the <var class="Va">tag_type</var> argument to - <a class="permalink" href="#devstat_end_transaction~4"><code class="Fn">devstat_end_transaction</code></a>():</p> -<dl class="Bl-tag"> - <dt>DEVSTAT_TAG_SIMPLE</dt> - <dd>The transaction had a simple tag.</dd> - <dt>DEVSTAT_TAG_HEAD</dt> - <dd>The transaction had a head of queue tag.</dd> - <dt>DEVSTAT_TAG_ORDERED</dt> - <dd>The transaction had an ordered tag.</dd> - <dt>DEVSTAT_TAG_NONE</dt> - <dd>The device does not support tags.</dd> -</dl> -<p class="Pp" id="devstat_end_transaction~5">The tag type values correspond to - the lower four bits of the SCSI tag definitions. In CAM, for instance, the - <var class="Va">tag_action</var> from the CCB is ORed with 0xf to determine - the tag type to pass in to - <a class="permalink" href="#devstat_end_transaction~5"><code class="Fn">devstat_end_transaction</code></a>().</p> -<p class="Pp">There is a macro, <code class="Dv">DEVSTAT_VERSION</code> that is - defined in - <code class="In"><<a class="In">sys/devicestat.h</a>></code>. This is - the current version of the <code class="Nm">devstat</code> subsystem, and it - should be incremented each time a change is made that would require - recompilation of userland programs that access - <code class="Nm">devstat</code> statistics. Userland programs use this - version, via the <var class="Va">kern.devstat.version</var> - <code class="Nm">sysctl</code> variable to determine whether they are in - sync with the kernel <code class="Nm">devstat</code> structures.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">systat(1)</a>, <a class="Xr">devstat(3)</a>, - <a class="Xr">iostat(8)</a>, <a class="Xr">rpc.rstatd(8)</a>, - <a class="Xr">vmstat(8)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">devstat</code> statistics system appeared in - <span class="Ux">FreeBSD 3.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp"><span class="An">Kenneth Merry</span> - <<a class="Mt" href="mailto:ken@FreeBSD.org">ken@FreeBSD.org</a>></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">There may be a need for <code class="Fn">spl</code>() protection - around some of the <code class="Nm">devstat</code> list manipulation code to - ensure, for example, that the list of devices is not changed while someone - is fetching the <var class="Va">kern.devstat.all</var> - <code class="Nm">sysctl</code> variable.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 15, 2020</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/devtoname.9 4.html b/static/freebsd/man9/devtoname.9 4.html deleted file mode 100644 index 53231f0a..00000000 --- a/static/freebsd/man9/devtoname.9 4.html +++ /dev/null @@ -1,45 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DEVTONAME(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DEVTONAME(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">devtoname</code> — - <span class="Nd">converts character device into a string indicating the - device name</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/conf.h</a>></code></p> -<p class="Pp"><var class="Ft">const char *</var> - <br/> - <code class="Fn">devtoname</code>(<var class="Fa" style="white-space: nowrap;">struct - cdev *dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#devtoname"><code class="Fn" id="devtoname">devtoname</code></a>() - function returns a pointer to the name of the device passed to it. The name - is whatever was set to it in - <a class="permalink" href="#make_dev"><code class="Fn" id="make_dev">make_dev</code></a>().</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Fn">devtoname</code>() interface first appeared - in <span class="Ux">FreeBSD 4.0</span></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 10, 2012</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/disk.9 3.html b/static/freebsd/man9/disk.9 3.html deleted file mode 100644 index 6374b646..00000000 --- a/static/freebsd/man9/disk.9 3.html +++ /dev/null @@ -1,258 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DISK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DISK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">disk</code> — <span class="Nd">kernel disk - storage API</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">geom/geom_disk.h</a>></code></p> -<p class="Pp"><var class="Ft">struct disk *</var> - <br/> - <code class="Fn">disk_alloc</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">disk_create</code>(<var class="Fa" style="white-space: nowrap;">struct - disk *disk</var>, <var class="Fa" style="white-space: nowrap;">int - version</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">disk_gone</code>(<var class="Fa" style="white-space: nowrap;">struct - disk *disk</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">disk_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct - disk *disk</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">disk_resize</code>(<var class="Fa" style="white-space: nowrap;">struct - disk *disk</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">disk_add_alias</code>(<var class="Fa" style="white-space: nowrap;">struct - disk *disk</var>, <var class="Fa" style="white-space: nowrap;">const char - *alias</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The disk storage API permits kernel device drivers providing - access to disk-like storage devices to advertise the device to other kernel - components, including <a class="Xr">GEOM(4)</a> and - <a class="Xr">devfs(4)</a>.</p> -<p class="Pp">Each disk device is described by a <var class="Vt">struct - disk</var> structure, which contains a variety of parameters for the disk - device, function pointers for various methods that may be performed on the - device, as well as private data storage for the device driver. In addition, - some fields are reserved for use by GEOM in managing access to the device - and its statistics.</p> -<p class="Pp" id="disk_alloc">GEOM has the ownership of <var class="Vt">struct - disk</var>, and drivers must allocate storage for it with the - <a class="permalink" href="#disk_alloc"><code class="Fn">disk_alloc</code></a>() - function, fill in the fields and call <code class="Fn">disk_create</code>() - when the device is ready to service requests. - <a class="permalink" href="#disk_add_alias"><code class="Fn" id="disk_add_alias">disk_add_alias</code></a>() - adds an alias for the disk and must be called before - <code class="Fn">disk_create</code>(), but may be called multiple times. For - each alias added, a device node will be created with - <a class="Xr">make_dev_alias(9)</a> in the same way primary device nodes are - created with <a class="Xr">make_dev(9)</a> for <var class="Va">d_name</var> - and <var class="Va">d_unit</var>. Care should be taken to ensure that only - one driver creates aliases for any given name. - <a class="permalink" href="#disk_resize"><code class="Fn" id="disk_resize">disk_resize</code></a>() - can be called by the driver after modifying - <var class="Va">d_mediasize</var> to notify GEOM about the disk capacity - change. The <var class="Fa">flags</var> field should be set to either - M_WAITOK, or M_NOWAIT. <code class="Fn">disk_gone</code>() orphans all of - the providers associated with the drive, setting an error condition of ENXIO - in each one. In addition, it prevents a re-taste on last close for writing - if an error condition has been set in the provider. After calling - <a class="permalink" href="#disk_destroy"><code class="Fn" id="disk_destroy">disk_destroy</code></a>(), - the device driver is not allowed to access the contents of - <var class="Vt">struct disk</var> anymore.</p> -<p class="Pp" id="disk_create">The - <a class="permalink" href="#disk_create"><code class="Fn">disk_create</code></a>() - function takes a second parameter, <var class="Fa">version</var>, which must - always be passed <code class="Dv">DISK_VERSION</code>. If GEOM detects that - the driver is compiled against an unsupported version, it will ignore the - device and print a warning on the console.</p> -<section class="Ss"> -<h2 class="Ss" id="Descriptive_Fields"><a class="permalink" href="#Descriptive_Fields">Descriptive - Fields</a></h2> -<p class="Pp">The following fields identify the disk device described by the - structure instance, and must be filled in prior to submitting the structure - to <code class="Fn">disk_create</code>() and may not be subsequently - changed:</p> -<dl class="Bl-tag"> - <dt><var class="Vt">u_int</var> <var class="Va">d_flags</var></dt> - <dd>Optional flags indicating to the storage framework what optional features - or descriptions the storage device driver supports. Currently supported - flags are <code class="Dv">DISKFLAG_OPEN</code> (maintained by storage - framework), <code class="Dv">DISKFLAG_CANDELETE</code> (maintained by - device driver), and <code class="Dv">DISKFLAG_CANFLUSHCACHE</code> - (maintained by device driver).</dd> - <dt><var class="Vt">const char *</var> <var class="Va">d_name</var></dt> - <dd>Holds the name of the storage device class, e.g., - “<code class="Li">ahd</code>”. This value typically uniquely - identifies a particular driver device, and must not conflict with devices - serviced by other device drivers.</dd> - <dt><var class="Vt">u_int</var> <var class="Va">d_unit</var></dt> - <dd>Holds the instance of the storage device class, e.g., - “<code class="Li">4</code>”. This namespace is managed by - the device driver, and assignment of unit numbers might be a property of - probe order, or in some cases topology. Together, the - <var class="Va">d_name</var> and <var class="Va">d_unit</var> values will - uniquely identify a disk storage device.</dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss" id="Disk_Device_Methods"><a class="permalink" href="#Disk_Device_Methods">Disk - Device Methods</a></h2> -<p class="Pp">The following fields identify various disk device methods, if - implemented:</p> -<dl class="Bl-tag"> - <dt><var class="Vt">disk_open_t *</var> <var class="Va">d_open</var></dt> - <dd>Optional: invoked when the disk device is opened. If no method is - provided, open will always succeed.</dd> - <dt><var class="Vt">disk_close_t *</var> <var class="Va">d_close</var></dt> - <dd>Optional: invoked when the disk device is closed. Although an error code - may be returned, the call should always terminate any state setup by the - corresponding open method call.</dd> - <dt><var class="Vt">disk_strategy_t *</var> - <var class="Va">d_strategy</var></dt> - <dd>Mandatory: invoked when a new <var class="Vt">struct bio</var> is to be - initiated on the disk device.</dd> - <dt><var class="Vt">disk_ioctl_t *</var> <var class="Va">d_ioctl</var></dt> - <dd>Optional: invoked when an I/O control operation is initiated on the disk - device. Please note that for security reasons these operations should not - be able to affect other devices than the one on which they are - performed.</dd> - <dt><var class="Vt">dumper_t *</var> <var class="Va">d_dump</var></dt> - <dd>Optional: if configured with <a class="Xr">dumpon(8)</a>, this function is - invoked from a very restricted system state after a kernel panic to record - a copy of the system RAM to the disk.</dd> - <dt id="g_io_deliver"><var class="Vt">disk_getattr_t *</var> - <var class="Va">d_getattr</var></dt> - <dd>Optional: if this method is provided, it gives the disk driver the - opportunity to override the default GEOM response to BIO_GETATTR requests. - This function should return -1 if the attribute is not handled, 0 if the - attribute is handled, or an errno to be passed to - <a class="permalink" href="#g_io_deliver"><code class="Fn">g_io_deliver</code></a>().</dd> - <dt id="disk_gone"><var class="Vt">disk_gone_t *</var> - <var class="Va">d_gone</var></dt> - <dd>Optional: if this method is provided, it will be called after - <a class="permalink" href="#disk_gone"><code class="Fn">disk_gone</code></a>() - is called, once GEOM has finished its cleanup process. Once this callback - is called, it is safe for the disk driver to free all of its resources, as - it will not be receiving further calls from GEOM.</dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss" id="Mandatory_Media_Properties"><a class="permalink" href="#Mandatory_Media_Properties">Mandatory - Media Properties</a></h2> -<p class="Pp">The following fields identify the size and granularity of the disk - device. These fields must stay stable from return of the drivers open method - until the close method is called, but it is perfectly legal to modify them - in the open method before returning.</p> -<dl class="Bl-tag"> - <dt><var class="Vt">u_int</var> <var class="Va">d_sectorsize</var></dt> - <dd>The sector size of the disk device in bytes.</dd> - <dt><var class="Vt">off_t</var> <var class="Va">d_mediasize</var></dt> - <dd>The size of the disk device in bytes.</dd> - <dt><var class="Vt">u_int</var> <var class="Va">d_maxsize</var></dt> - <dd>The maximum supported size in bytes of an I/O request. Requests larger - than this size will be chopped up by GEOM.</dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss" id="Optional_Media_Properties"><a class="permalink" href="#Optional_Media_Properties">Optional - Media Properties</a></h2> -<p class="Pp">These optional fields can provide extra information about the disk - device. Do not initialize these fields if the field/concept does not apply. - These fields must stay stable from return of the drivers open method until - the close method is called, but it is perfectly legal to modify them in the - open method before returning.</p> -<dl class="Bl-tag"> - <dt><var class="Vt">u_int</var> <var class="Va">d_fwsectors</var>, - <var class="Vt">u_int</var> <var class="Va">d_fwheads</var></dt> - <dd>The number of sectors and heads advertised on the disk device by the - firmware or BIOS. These values are almost universally bogus, but on some - architectures necessary for the correct calculation of disk - partitioning.</dd> - <dt><var class="Vt">u_int</var> <var class="Va">d_stripeoffset</var>, - <var class="Vt">u_int</var> <var class="Va">d_stripesize</var></dt> - <dd>These two fields can be used to describe the width and location of natural - performance boundaries for most disk technologies. Please see - <span class="Pa">src/sys/geom/notes</span> for details.</dd> - <dt><var class="Vt">char</var> - <var class="Va">d_ident[DISK_IDENT_SIZE]</var></dt> - <dd>This field can and should be used to store disk's serial number if the - d_getattr method described above isn't implemented, or if it does not - support the GEOM::ident attribute.</dd> - <dt><var class="Vt">char</var> - <var class="Va">d_descr[DISK_IDENT_SIZE]</var></dt> - <dd>This field can be used to store the disk vendor and product - description.</dd> - <dt><var class="Vt">uint16_t</var> <var class="Va">d_hba_vendor</var></dt> - <dd>This field can be used to store the PCI vendor ID for the HBA connected to - the disk.</dd> - <dt><var class="Vt">uint16_t</var> <var class="Va">d_hba_device</var></dt> - <dd>This field can be used to store the PCI device ID for the HBA connected to - the disk.</dd> - <dt><var class="Vt">uint16_t</var> <var class="Va">d_hba_subvendor</var></dt> - <dd>This field can be used to store the PCI subvendor ID for the HBA connected - to the disk.</dd> - <dt><var class="Vt">uint16_t</var> <var class="Va">d_hba_subdevice</var></dt> - <dd>This field can be used to store the PCI subdevice ID for the HBA connected - to the disk.</dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss" id="Driver_Private_Data"><a class="permalink" href="#Driver_Private_Data">Driver - Private Data</a></h2> -<p class="Pp">This field may be used by the device driver to store a pointer to - private data to implement the disk service.</p> -<dl class="Bl-tag"> - <dt><var class="Vt">void *</var> <var class="Va">d_drv1</var></dt> - <dd>Private data pointer. Typically used to store a pointer to the drivers - <var class="Vt">softc</var> structure for this disk device.</dd> -</dl> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devfs(4)</a>, <a class="Xr">GEOM(4)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">kernel disk storage API</code> first appeared - in <span class="Ux">FreeBSD 4.9</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Robert - Watson</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">Disk aliases are not a general purpose aliasing mechanism, but are - intended only to ease the transition from one name to another. They can be - used to ensure that nvd0 and nda0 are the same thing. They cannot be used to - implement the diskX concept from macOS.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 30, 2020</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/dnv.9 3.html b/static/freebsd/man9/dnv.9 3.html deleted file mode 100644 index 3e295eaf..00000000 --- a/static/freebsd/man9/dnv.9 3.html +++ /dev/null @@ -1,153 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DNV(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DNV(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">dnvlist_get</code>, - <code class="Nm">dnvlist_take</code> — <span class="Nd">API for - getting name/value pairs with a default value</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LIBRARY"><a class="permalink" href="#LIBRARY">LIBRARY</a></h1> -<p class="Pp"><span class="Lb">Name/value pairs library (libnv, -lnv)</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/dnv.h</a>></code></p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">dnvlist_get_bool</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">bool - defval</var>);</p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">dnvlist_get_number</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">uint64_t - defval</var>);</p> -<p class="Pp"><var class="Ft">char *</var> - <br/> - <code class="Fn">dnvlist_get_string</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">const char - *defval</var>);</p> -<p class="Pp"><var class="Ft">nvlist_t *</var> - <br/> - <code class="Fn">dnvlist_get_nvlist</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">nvlist_t - *defval</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">dnvlist_get_descriptor</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">int - defval</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">dnvlist_get_binary</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">size_t - *sizep</var>, <var class="Fa" style="white-space: nowrap;">void - *defval</var>, <var class="Fa" style="white-space: nowrap;">size_t - defsize</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">dnvlist_take_bool</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">bool - defval</var>);</p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">dnvlist_take_number</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">uint64_t - defval</var>);</p> -<p class="Pp"><var class="Ft">char *</var> - <br/> - <code class="Fn">dnvlist_take_string</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">const char - *defval</var>);</p> -<p class="Pp"><var class="Ft">nvlist_t *</var> - <br/> - <code class="Fn">dnvlist_take_nvlist</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">nvlist_t - *defval</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">dnvlist_take_descriptor</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">int - defval</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">dnvlist_take_binary</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">size_t - *sizep</var>, <var class="Fa" style="white-space: nowrap;">void - *defval</var>, <var class="Fa" style="white-space: nowrap;">size_t - defsize</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">libnv</code> library permits easy management - of name/value pairs and can send and receive them over sockets. For more - information, see <a class="Xr">nv(9)</a>.</p> -<p class="Pp">The <code class="Nm">dnvlist_get</code> functions return the value - associated with <var class="Fa">name</var>. If an element named - <var class="Fa">name</var> does not exist, the function returns the value - provided in <var class="Fa">defval</var>. Returned strings, nvlists, - descriptors, binaries, or arrays must not be modified by the user since they - still belong to the nvlist. If the nvlist is in an error state, attempts to - use any of these functions will cause the program to abort.</p> -<p class="Pp" id="free">The <code class="Nm">dnvlist_take</code> functions - return the value associated with <var class="Fa">name</var> and removes the - associated element from <var class="Fa">nvl</var>. If an element named - <var class="Fa">name</var> does not exist, the value provided in - <code class="Nm">defval</code> is returned. When the value is a string, - binary, or array value, the caller is responsible for freeing returned - memory with - <a class="permalink" href="#free"><code class="Fn">free</code></a>(<var class="Fa">3</var>). - When the value is an nvlist, the caller is responsible for destroying the - returned nvlist with - <a class="permalink" href="#nvlist_destroy"><code class="Fn" id="nvlist_destroy">nvlist_destroy</code></a>(). - When the value is a descriptor, the caller is responsible for closing the - returned descriptor with - <a class="permalink" href="#close"><code class="Fn" id="close">close</code></a>(<var class="Fa">2</var>).</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">close(2)</a>, <a class="Xr">free(3)</a>, - <a class="Xr">nv(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">dnv</code> API appeared in - <span class="Ux">FreeBSD 11.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">dnv</code> API was implemented by - <span class="An">Pawel Jakub Dawidek</span> - <<a class="Mt" href="mailto:pawel@dawidek.net">pawel@dawidek.net</a>> - under sponsorship from the FreeBSD Foundation. This manual page was written - by <span class="An">Adam Starak</span> - <<a class="Mt" href="mailto:starak.adam@gmail.com">starak.adam@gmail.com</a>></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 3, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/domain.9 3.html b/static/freebsd/man9/domain.9 3.html deleted file mode 100644 index 70233fd5..00000000 --- a/static/freebsd/man9/domain.9 3.html +++ /dev/null @@ -1,194 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DOMAIN(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DOMAIN(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">domain</code>, <code class="Nm">protosw</code> - — <span class="Nd">programming interface for kernel socket - implementation</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/kernel.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/protosw.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/domain.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">domain_add</code>(<var class="Fa" style="white-space: nowrap;">struct - domain *dom</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">domain_remove</code>(<var class="Fa" style="white-space: nowrap;">struct - domain *dom</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">DOMAIN_SET</code>(<var class="Fa" style="white-space: nowrap;">domain</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">protosw_register</code>(<var class="Fa" style="white-space: nowrap;">struct - domain *dom</var>, <var class="Fa" style="white-space: nowrap;">struct - protosw *pr</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">protosw_unregister</code>(<var class="Fa" style="white-space: nowrap;">struct - protosw *pr</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">domain</code> subsystem allows implementation - of communication protocols that are exposed to the userland via the - <a class="Xr">socket(2)</a> API. When an application performs a - <a class="permalink" href="#socket"><code class="Fn" id="socket">socket</code></a>(<var class="Fa">domain</var>, - <var class="Fa">type</var>, <var class="Fa">protocol</var>) syscall, the - kernel searches for a <code class="Nm">domain</code> matching the - <var class="Ar">domain</var> argument, then within this domain, searches for - a protocol matching <var class="Ar">type</var>. If the third argument, - <var class="Ar">protocol</var>, is not <code class="Dv">0</code>, that value - must also match. The structure found must implement certain methods, so that - <a class="Xr">socket(2)</a> API works for this particular kind of a - socket.</p> -<p class="Pp">A minimal <code class="Nm">domain</code> structure implementing a - domain shall be initialized with sparse C99 initializer and has public - fields as follows:</p> -<div class="Bd Pp Li"> -<pre>struct domain { - /* - * Mandatory fields. - */ - int dom_family; /* PF_xxx, first argument of socket(2) */ - char *dom_name; /* text name of the domain */ - u_int dom_nprotosw; /* length of dom_protosw[] */ - /* - * Following methods are optional. - */ - int (*dom_probe)(void); /* check for support */ - struct rib_head *(*dom_rtattach)(uint32_t); /* init route table */ - void (*dom_rtdetach)(struct rib_head *); /* clean up table */ - void *(*dom_ifattach)(struct ifnet *); /* interface attach */ - void (*dom_ifdetach)(struct ifnet *, void *);/* & detach callbacks */ - int (*dom_ifmtu)(struct ifnet *); /* mtu change */ - /* - * Mandatory variable size array of pointers to protosw structs. - */ - struct protosw *dom_protosw[]; -};</pre> -</div> -<p class="Pp">Each domain contains the <var class="Va">dom_protosw</var> array - of protocol switch structures (<var class="Vt">struct protosw *</var>), one - for each socket type supported. The array may have - <code class="Dv">NULL</code> spacers for loadable protocols. Sparse C99 - initializers shall be used to initialize <code class="Nm">protosw</code> - structures. The structure has mandatory field <var class="Va">pr_type</var> - and mandatory <var class="Va">pr_attach</var> method. The rest of the - methods are optional, but a meaningful protocol should implement some.</p> -<div class="Bd Pp Li"> -<pre>struct protosw { - short pr_type; /* second argument of socket(2) */ - short pr_protocol; /* third argument of socket(2) or 0 */ - short pr_flags; /* see protosw.h */ - pr_soreceive_t *pr_soreceive; /* recv(2) */ - pr_rcvd_t *pr_rcvd; /* soreceive_generic() if PR_WANTRCV */ - pr_sosend_t *pr_sosend; /* send(2) */ - pr_send_t *pr_send; /* send(2) via sosend_generic() */ - pr_ready_t *pr_ready; /* sendfile/ktls readyness */ - pr_sopoll_t *pr_sopoll; /* poll(2) */ - pr_attach_t *pr_attach; /* creation: socreate(), sonewconn() */ - pr_detach_t *pr_detach; /* destruction: sofree() */ - pr_connect_t *pr_connect; /* connect(2) */ - pr_disconnect_t *pr_disconnect; /* sodisconnect() */ - pr_close_t *pr_close; /* close(2) */ - pr_shutdown_t *pr_shutdown; /* shutdown(2) */ - pr_abort_t *pr_abort; /* abrupt tear down: soabort() */ - pr_aio_queue_t *pr_aio_queue; /* aio(9) */ - pr_bind_t *pr_bind; /* bind(2) */ - pr_bindat_t *pr_bindat; /* bindat(2) */ - pr_listen_t *pr_listen; /* listen(2) */ - pr_accept_t *pr_accept; /* accept(2) */ - pr_connectat_t *pr_connectat; /* connectat(2) */ - pr_connect2_t *pr_connect2; /* socketpair(2) */ - pr_control_t *pr_control; /* ioctl(2) */ - pr_rcvoob_t *pr_rcvoob; /* soreceive_rcvoob() */ - pr_ctloutput_t *pr_ctloutput; /* control output (from above) */ - pr_peeraddr_t *pr_peeraddr; /* getpeername(2) */ - pr_sockaddr_t *pr_sockaddr; /* getsockname(2) */ - pr_sense_t *pr_sense; /* stat(2) */ -};</pre> -</div> -<p class="Pp">The following functions handle the registration of new domains and - protocols.</p> -<p class="Pp" id="domain_add"><a class="permalink" href="#domain_add"><code class="Fn">domain_add</code></a>() - adds a new protocol domain to the system. In most cases - <code class="Fn">domain_add</code>() is not called directly, instead - <a class="permalink" href="#DOMAIN_SET"><code class="Fn" id="DOMAIN_SET">DOMAIN_SET</code></a>() - is used, which is a wrapper around - <a class="permalink" href="#SYSINIT"><code class="Fn" id="SYSINIT">SYSINIT</code></a>() - macro. If the new domain has defined a <var class="Va">dom_probe</var> - routine, it is called first in <code class="Fn">domain_add</code>() to - determine if the domain should be supported on the current system. If the - probe routine returns a non-0 value, then the domain will not be added. Once - a domain is added it cannot be completely unloaded. This is because there is - no reference counting system in place to determine if there are any active - references from sockets within that domain. However, the experimental - <a class="permalink" href="#domain_remove"><code class="Fn" id="domain_remove">domain_remove</code></a>() - exists, and unloadable domains may be supported in the future.</p> -<p class="Pp" id="protosw_register"><a class="permalink" href="#protosw_register"><code class="Fn">protosw_register</code></a>() - dynamically adds a protocol to a domain, if the latter has an empty slot in - its <var class="Va">dom_protosw</var>. Dynamically added protocol can later - be unloaded with - <a class="permalink" href="#protosw_unregister"><code class="Fn" id="protosw_unregister">protosw_unregister</code></a>().</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">domain_add</code>() never fails, but it may - not add a domain if its <var class="Va">dom_probe</var> fails.</p> -<p class="Pp">The <code class="Fn">protosw_register</code>() function may fail - if:</p> -<dl class="Bl-tag"> - <dt>[<code class="Er">EEXIST</code>]</dt> - <dd>A protocol with the same value of <var class="Va">pr_type</var> and - <var class="Va">pr_protocol</var> already exists in the domain.</dd> - <dt>[<code class="Er">ENOMEM</code>]</dt> - <dd>The domain doesn't have any NULL slots in its - <var class="Va">dom_protosw</var>.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">socket(2)</a>, <a class="Xr">SYSINIT(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">domain</code> subsystem first appeared in - <span class="Ux">4.3BSD</span> as the part of the very first - <a class="Xr">socket(2)</a> API implementation.</p> -<p class="Pp">The <code class="Nm">domain</code> subsystem and this manual page - were significantly rewritten in <span class="Ux">FreeBSD 14</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>> - and - <br/> - <span class="An">Gleb Smirnoff</span> - <<a class="Mt" href="mailto:glebius@FreeBSD.org">glebius@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 14, 2022</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/domainset.9 3.html b/static/freebsd/man9/domainset.9 3.html deleted file mode 100644 index cef5b340..00000000 --- a/static/freebsd/man9/domainset.9 3.html +++ /dev/null @@ -1,160 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DOMAINSET(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DOMAINSET(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">domainset(9)</code> — - <span class="Nd">domainset functions and operation</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/_domainset.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/domainset.h</a>></code></p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct domainset { - domainset_t ds_mask; - uint16_t ds_policy; - domainid_t ds_prefer; - ... -};</pre> -</div> -<p class="Pp"> - <br/> - <var class="Ft">struct domainset *</var> - <br/> - <code class="Fn">DOMAINSET_FIXED</code>(<var class="Fa" style="white-space: nowrap;">domain</var>);</p> -<p class="Pp"><var class="Ft">struct domainset *</var> - <br/> - <code class="Fn">DOMAINSET_FT</code>();</p> -<p class="Pp"><var class="Ft">struct domainset *</var> - <br/> - <code class="Fn">DOMAINSET_IL</code>();</p> -<p class="Pp"><var class="Ft">struct domainset *</var> - <br/> - <code class="Fn">DOMAINSET_RR</code>();</p> -<p class="Pp"><var class="Ft">struct domainset *</var> - <br/> - <code class="Fn">DOMAINSET_PREF</code>(<var class="Fa" style="white-space: nowrap;">domain</var>);</p> -<p class="Pp"><var class="Ft">struct domainset *</var> - <br/> - <code class="Fn">domainset_create</code>(<var class="Fa" style="white-space: nowrap;">const - struct domainset *key</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">domainset_populate</code>(<var class="Fa" style="white-space: nowrap;">struct - domainset *domain</var>, - <var class="Fa" style="white-space: nowrap;">domainset_t *mask</var>, - <var class="Fa" style="white-space: nowrap;">int policy</var>, - <var class="Fa" style="white-space: nowrap;">size_t mask_size</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sysctl_handle_domainset</code>(<var class="Fa" style="white-space: nowrap;">SYSCTL_HANDLER_ARGS</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">domainset(9)</code> API provides memory - domain allocation policy for NUMA machines. Each - <var class="Vt">domainset</var> contains a bitmask of allowed domains, an - integer policy, and an optional preferred domain. Together, these specify a - search order for memory allocations as well as the ability to restrict - threads and objects to a subset of available memory domains for system - partitioning and resource management.</p> -<p class="Pp">Every thread in the system and optionally every - <var class="Vt">vm_object_t</var>, which is used to represent files and - other memory sources, has a reference to a <var class="Vt">struct - domainset</var>. The domainset associated with the object is consulted first - and the system falls back to the thread policy if none exists.</p> -<p class="Pp">The allocation policy has the following possible values:</p> -<dl class="Bl-tag"> - <dt id="DOMAINSET_POLICY_ROUNDROBIN"><a class="permalink" href="#DOMAINSET_POLICY_ROUNDROBIN"><code class="Dv">DOMAINSET_POLICY_ROUNDROBIN</code></a></dt> - <dd>Memory is allocated from each domain in the mask in a round-robin fashion. - This distributes bandwidth evenly among available domains. This policy can - specify a single domain for a fixed allocation.</dd> - <dt id="DOMAINSET_POLICY_FIRSTTOUCH"><a class="permalink" href="#DOMAINSET_POLICY_FIRSTTOUCH"><code class="Dv">DOMAINSET_POLICY_FIRSTTOUCH</code></a></dt> - <dd>Memory is allocated from the node that it is first accessed on. Allocation - falls back to round-robin if the current domain is not in the allowed set - or is out of memory. This policy optimizes for locality but may give - pessimal results if the memory is accessed from many CPUs that are not in - the local domain.</dd> - <dt id="DOMAINSET_POLICY_PREFER"><a class="permalink" href="#DOMAINSET_POLICY_PREFER"><code class="Dv">DOMAINSET_POLICY_PREFER</code></a></dt> - <dd>Memory is allocated from the node in the <var class="Vt">prefer</var> - member. The preferred node must be set in the allowed mask. If the - preferred node is out of memory the allocation falls back to round-robin - among allowed sets.</dd> - <dt id="DOMAINSET_POLICY_INTERLEAVE"><a class="permalink" href="#DOMAINSET_POLICY_INTERLEAVE"><code class="Dv">DOMAINSET_POLICY_INTERLEAVE</code></a></dt> - <dd>Memory is allocated in a striped fashion with multiple pages allocated to - each domain in the set according to the offset within the object. The - strip width is object dependent and may be as large as a super-page (2MB - on amd64). This gives good distribution among memory domains while keeping - system efficiency higher and is preferential to round-robin for general - use.</dd> -</dl> -<p class="Pp" id="DOMAINSET_FIXED">The - <a class="permalink" href="#DOMAINSET_FIXED"><code class="Fn">DOMAINSET_FIXED</code></a>(), - <a class="permalink" href="#DOMAINSET_FT"><code class="Fn" id="DOMAINSET_FT">DOMAINSET_FT</code></a>(), - <a class="permalink" href="#DOMAINSET_IL"><code class="Fn" id="DOMAINSET_IL">DOMAINSET_IL</code></a>(), - <a class="permalink" href="#DOMAINSET_RR"><code class="Fn" id="DOMAINSET_RR">DOMAINSET_RR</code></a>() - and - <a class="permalink" href="#DOMAINSET_PREF"><code class="Fn" id="DOMAINSET_PREF">DOMAINSET_PREF</code></a>() - macros provide pointers to global pre-defined policies for use when the - desired policy is known at compile time. - <code class="Fn">DOMAINSET_FIXED</code>() is a policy which only permits - allocations from the specified domain. - <code class="Fn">DOMAINSET_FT</code>() is a policy which attempts to - allocate memory local to the current CPU, falling back to a round-robin - policy if the initial allocation fails. - <code class="Fn">DOMAINSET_IL</code>() and - <code class="Fn">DOMAINSET_RR</code>() provide round-robin selection among - all domains in the system, corresponding to the - <code class="Dv">DOMAINSET_POLICY_INTERLEAVE</code> and - <code class="Dv">DOMAINSET_POLICY_ROUNDROBIN</code> policies, respectively. - The <code class="Fn">DOMAINSET_PREF</code>() policies attempt allocation - from the specified domain, but unlike - <code class="Fn">DOMAINSET_FIXED</code>() will fall back to other domains to - satisfy the request. These policies should be used in preference to - <code class="Fn">DOMAINSET_FIXED</code>() to avoid blocking indefinitely on - a <code class="Dv">M_WAITOK</code> request.</p> -<p class="Pp" id="domainset_create">The - <a class="permalink" href="#domainset_create"><code class="Fn">domainset_create</code></a>() - function takes a partially filled in domainset as a key and returns a valid - domainset or NULL. It is critical that consumers not use domainsets that - have not been returned by this function. <var class="Vt">domainset</var> is - an immutable type that is shared among all matching keys and must not be - modified after return.</p> -<p class="Pp" id="domainset_populate">The - <a class="permalink" href="#domainset_populate"><code class="Fn">domainset_populate</code></a>() - function fills a <var class="Vt">domainset</var> struct using a domain mask - and policy. It is used for validating and translating a domain mask and - policy into a <var class="Vt">domainset</var> struct when creating a custom - domainset using <var class="Vt">domainset_create</var>.</p> -<p class="Pp" id="sysctl_handle_domainset">The - <a class="permalink" href="#sysctl_handle_domainset"><code class="Fn">sysctl_handle_domainset</code></a>() - function is provided as a convenience for modifying or viewing domainsets - that are not accessible via <a class="Xr">cpuset(2)</a>. It is intended for - use with <a class="Xr">sysctl(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">cpuset(1)</a>, <a class="Xr">cpuset(2)</a>, - <a class="Xr">cpuset_setdomain(2)</a>, <a class="Xr">bitset(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp"><code class="In"><<a class="In">sys/domainset.h</a>></code> - first appeared in <span class="Ux">FreeBSD 12.0</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 24, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/dpcpu.9 4.html b/static/freebsd/man9/dpcpu.9 4.html deleted file mode 100644 index bb0c8df8..00000000 --- a/static/freebsd/man9/dpcpu.9 4.html +++ /dev/null @@ -1,160 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DPCPU(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DPCPU(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">dpcpu</code> — <span class="Nd">Kernel - Dynamic Per-CPU Memory Allocator</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/pcpu.h</a>></code></p> -<section class="Ss"> -<h2 class="Ss" id="Per-CPU_Variable_Definition_and_Declaration"><a class="permalink" href="#Per-CPU_Variable_Definition_and_Declaration">Per-CPU - Variable Definition and Declaration</a></h2> -<p class="Pp"><code class="Fn">DPCPU_DEFINE</code>(<var class="Fa" style="white-space: nowrap;">type</var>, - <var class="Fa" style="white-space: nowrap;">name</var>);</p> -<p class="Pp"><code class="Fn">DPCPU_DEFINE_STATIC</code>(<var class="Fa" style="white-space: nowrap;">type</var>, - <var class="Fa" style="white-space: nowrap;">name</var>);</p> -<p class="Pp"><code class="Fn">DPCPU_DECLARE</code>(<var class="Fa" style="white-space: nowrap;">type</var>, - <var class="Fa" style="white-space: nowrap;">name</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Current_CPU_Accessor_Functions"><a class="permalink" href="#Current_CPU_Accessor_Functions">Current - CPU Accessor Functions</a></h2> -<p class="Pp"><code class="Fn">DPCPU_PTR</code>(<var class="Fa" style="white-space: nowrap;">name</var>);</p> -<p class="Pp"><code class="Fn">DPCPU_GET</code>(<var class="Fa" style="white-space: nowrap;">name</var>);</p> -<p class="Pp"><code class="Fn">DPCPU_SET</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">value</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Named_CPU_Accessor_Functions"><a class="permalink" href="#Named_CPU_Accessor_Functions">Named - CPU Accessor Functions</a></h2> -<p class="Pp"><code class="Fn">DPCPU_ID_PTR</code>(<var class="Fa" style="white-space: nowrap;">cpu</var>, - <var class="Fa" style="white-space: nowrap;">name</var>);</p> -<p class="Pp"><code class="Fn">DPCPU_ID_GET</code>(<var class="Fa" style="white-space: nowrap;">cpu</var>, - <var class="Fa" style="white-space: nowrap;">name</var>);</p> -<p class="Pp"><code class="Fn">DPCPU_ID_SET</code>(<var class="Fa" style="white-space: nowrap;">cpu</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">value</var>);</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><code class="Nm">dpcpu</code> instantiates one instance of a - global variable with each CPU in the system. Dynamically allocated per-CPU - variables are defined using - <a class="permalink" href="#DPCPU_DEFINE"><code class="Fn" id="DPCPU_DEFINE">DPCPU_DEFINE</code></a>(), - which defines a variable of name <var class="Ar">name</var> and type - <var class="Ar">type</var>. Arbitrary C types may be used, including - structures and arrays. If no initialization is provided, then each per-CPU - instance of the variable will be zero-filled (i.e., as though allocated in - BSS):</p> -<div class="Bd Pp Bd-indent Li"> -<pre>DPCPU_DEFINE(int, foo_int);</pre> -</div> -<p class="Pp">Values may also be initialized statically with the definition, - causing each per-CPU instance to be initialized with the value:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>DPCPU_DEFINE(int, foo_int) = 1;</pre> -</div> -<p class="Pp" id="DPCPU_DEFINE_STATIC">Values that can be defined as - <code class="Dv">static</code> must use - <a class="permalink" href="#DPCPU_DEFINE_STATIC"><code class="Fn">DPCPU_DEFINE_STATIC</code></a>():</p> -<div class="Bd Pp Bd-indent Li"> -<pre>DPCPU_DEFINE_STATIC(int, foo_int);</pre> -</div> -<p class="Pp" id="DPCPU_DECLARE"><a class="permalink" href="#DPCPU_DECLARE"><code class="Fn">DPCPU_DECLARE</code></a>() - produces a declaration of the per-CPU variable suitable for use in header - files.</p> -<p class="Pp">The current CPU's variable instance can be accessed via - <code class="Nm">DPCPU_PTR</code> (which returns a pointer to the per-CPU - instance), <code class="Nm">DPCPU_GET</code> (which retrieves the value of - the per-CPU instance), and <code class="Nm">DPCPU_SET</code> (which sets the - value of the per-CPU instance).</p> -<p class="Pp">Instances of variables associated with specific CPUs can be - accessed via the <code class="Nm">DPCPU_ID_PTR</code>, - <code class="Nm">DPCPU_ID_GET</code>, and - <code class="Nm">DPGPU_ID_SET</code> accessor functions, which accept an - additional CPU ID argument, <var class="Ar">cpu</var>.</p> -<section class="Ss"> -<h2 class="Ss" id="Synchronization"><a class="permalink" href="#Synchronization">Synchronization</a></h2> -<p class="Pp">In addition to the ordinary synchronization concerns associated - with global variables, which may imply the use of - <a class="Xr">atomic(9)</a>, <a class="Xr">mutex(9)</a>, or other kernel - synchronization primitives, it is further the case that thread migration - could dynamically change the instance of a variable being accessed by a - thread between operations. This requires additional care when reasoning - about and protecting per-CPU variables.</p> -<p class="Pp">For example, it may be desirable to protect access using - <a class="Xr">critical_section(9)</a> to prevent both preemption and - migration during use. Alternatively, it may be desirable to cache the CPU ID - at the start of a sequence of accesses, using suitable synchronization to - make non-atomic sequences safe in the presence of migration.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>DPCPU_DEFINE_STATIC(int, foo_int); -DPCPU_DEFINE_STATIC(struct mutex, foo_lock); - -void -foo_int_increment(void) -{ - int cpu, value; - - /* Safe as atomic access. */ - atomic_add_int(DPCPU_PTR(foo_int), 1); - - /* - * Protect with a critical section, which prevents preemption - * and migration. However, access to instances from remote CPUs - * is not safe, as critical sections prevent concurrent access - * only from the current CPU. - */ - critical_enter(); - value = DPCPU_GET(foo_int); - value++; - DPCPU_SET(foo_int, value); - critical_exit(); - - /* - * Protect with a per-CPU mutex, tolerating migration, but - * potentially accessing the variable from multiple CPUs if - * migration occurs after reading curcpu. Remote access to a - * per-CPU variable is safe as long as the correct mutex is - * acquired. - */ - cpu = curcpu; - mtx_lock(DPCPU_ID_PTR(cpu, foo_lock)); - value = DPCPU_ID_GET(cpu, foo_int); - value++; - DPCPU_ID_SET(cpu, foo_int); - mtx_unlock(DPCPU_ID_PTR(cpu, foo_lock)); -}</pre> -</div> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">atomic(9)</a>, <a class="Xr">critical_enter(9)</a>, - <a class="Xr">mutex(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp"><code class="Nm">dpcpu</code> was first introduced by - <span class="An">Jeff Roberson</span> in <span class="Ux">FreeBSD - 8.0</span>. This manual page was written by <span class="An">Robert N. M. - Watson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 5, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/drbr.9 3.html b/static/freebsd/man9/drbr.9 3.html deleted file mode 100644 index 7b88f6ba..00000000 --- a/static/freebsd/man9/drbr.9 3.html +++ /dev/null @@ -1,127 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DRBR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DRBR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">drbr</code>, <code class="Nm">drbr_free</code>, - <code class="Nm">drbr_enqueue</code>, <code class="Nm">drbr_dequeue</code>, - <code class="Nm">drbr_dequeue_cond</code>, - <code class="Nm">drbr_flush</code>, <code class="Nm">drbr_empty</code>, - <code class="Nm">drbr_inuse</code> — <span class="Nd">network driver - interface to buf_ring</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">net/if.h</a>></code> - <br/> - <code class="In">#include <<a class="In">net/if_var.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">drbr_free</code>(<var class="Fa" style="white-space: nowrap;">struct - buf_ring *br</var>, <var class="Fa" style="white-space: nowrap;">struct - malloc_type *type</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">drbr_enqueue</code>(<var class="Fa" style="white-space: nowrap;">struct - ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">struct - buf_ring *br</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">drbr_dequeue</code>(<var class="Fa" style="white-space: nowrap;">struct - ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">struct - buf_ring *br</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">drbr_dequeue_cond</code>(<var class="Fa" style="white-space: nowrap;">struct - ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">struct - buf_ring *br</var>, <var class="Fa" style="white-space: nowrap;">int (*func) - (struct mbuf *, void *)</var>, - <var class="Fa" style="white-space: nowrap;">void *arg</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">drbr_flush</code>(<var class="Fa" style="white-space: nowrap;">struct - ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">struct - buf_ring *br</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">drbr_empty</code>(<var class="Fa" style="white-space: nowrap;">struct - ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">struct - buf_ring *br</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">drbr_inuse</code>(<var class="Fa" style="white-space: nowrap;">struct - ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">struct - buf_ring *br</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">drbr</code> functions provide an API to - network drivers for using <a class="Xr">buf_ring(9)</a> for enqueueing and - dequeueing packets. This is meant as a replacement for the IFQ interface for - packet queuing. It allows a packet to be enqueued with a single atomic and - packet dequeue to be done without any per-packet atomics as it is protected - by the driver's tx queue lock. If <code class="Dv">INVARIANTS</code> is - enabled, - <a class="permalink" href="#drbr_dequeue"><code class="Fn" id="drbr_dequeue">drbr_dequeue</code></a>() - will assert that the tx queue lock is held when it is called.</p> -<p class="Pp" id="drbr_free">The - <a class="permalink" href="#drbr_free"><code class="Fn">drbr_free</code></a>() - function frees all the enqueued mbufs and then frees the buf_ring.</p> -<p class="Pp" id="drbr_enqueue">The - <a class="permalink" href="#drbr_enqueue"><code class="Fn">drbr_enqueue</code></a>() - function is used to enqueue an mbuf to a buf_ring, falling back to the - ifnet's IFQ if <a class="Xr">ALTQ(4)</a> is enabled.</p> -<p class="Pp" id="drbr_dequeue~2">The - <a class="permalink" href="#drbr_dequeue~2"><code class="Fn">drbr_dequeue</code></a>() - function is used to dequeue an mbuf from a buf_ring or, if - <a class="Xr">ALTQ(4)</a> is enabled, from the ifnet's IFQ.</p> -<p class="Pp" id="drbr_dequeue_cond">The - <a class="permalink" href="#drbr_dequeue_cond"><code class="Fn">drbr_dequeue_cond</code></a>() - function is used to conditionally dequeue an mbuf from a buf_ring based on - whether <var class="Fa">func</var> returns <code class="Dv">TRUE</code> or - <code class="Dv">FALSE</code>.</p> -<p class="Pp" id="drbr_flush">The - <a class="permalink" href="#drbr_flush"><code class="Fn">drbr_flush</code></a>() - function frees all mbufs enqueued in the buf_ring and the ifnet's IFQ.</p> -<p class="Pp" id="drbr_empty">The - <a class="permalink" href="#drbr_empty"><code class="Fn">drbr_empty</code></a>() - function returns <code class="Dv">TRUE</code> if there are no mbufs - enqueued, <code class="Dv">FALSE</code> otherwise.</p> -<p class="Pp" id="drbr_inuse">The - <a class="permalink" href="#drbr_inuse"><code class="Fn">drbr_inuse</code></a>() - function returns the number of mbufs enqueued. Note to users that this is - intrinsically racy as there is no guarantee that there will not be more - mbufs when <code class="Fn">drbr_dequeue</code>() is actually called. - Provided the tx queue lock is held there will not be less.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">drbr_enqueue</code>() function returns - <code class="Er">ENOBUFS</code> if there are no slots available in the - buf_ring and <code class="Dv">0</code> on success.</p> -<p class="Pp">The <code class="Fn">drbr_dequeue</code>() and - <code class="Fn">drbr_dequeue_cond</code>() functions return an mbuf on - success and <code class="Dv">NULL</code> if the buf_ring is empty.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">These functions were introduced in <span class="Ux">FreeBSD - 8.0</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 27, 2012</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/driver.9 3.html b/static/freebsd/man9/driver.9 3.html deleted file mode 100644 index 3b34b562..00000000 --- a/static/freebsd/man9/driver.9 3.html +++ /dev/null @@ -1,98 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">DRIVER(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">DRIVER(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">driver</code> — <span class="Nd">structure - describing a device driver</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<div class="Bd Li"> -<pre>#include <sys/param.h> -#include <sys/kernel.h> -#include <sys/bus.h> -#include <sys/module.h> - -static int foo_probe(device_t); -static int foo_attach(device_t); -static int foo_detach(device_t); -static int foo_frob(device_t, int, int); -static int foo_twiddle(device_t, char *); - -static device_method_t foo_methods[] = { - /* Methods from the device interface */ - DEVMETHOD(device_probe, foo_probe), - DEVMETHOD(device_attach, foo_attach), - DEVMETHOD(device_detach, foo_detach), - - /* Methods from the bogo interface */ - DEVMETHOD(bogo_frob, foo_frob), - DEVMETHOD(bogo_twiddle, foo_twiddle), - - /* Terminate method list */ - DEVMETHOD_END -}; - -static driver_t foo_driver = { - "foo", - foo_methods, - sizeof(struct foo_softc) -}; - -DRIVER_MODULE(foo, bogo, foo_driver, NULL, NULL);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Each driver in the kernel is described by a - <code class="Dv">driver_t</code> structure. The structure contains the name - of the device, a pointer to a list of methods, an indication of the kind of - device which the driver implements and the size of the private data which - the driver needs to associate with a device instance. Each driver will - implement one or more sets of methods (called interfaces). The example - driver implements the standard "driver" interface and the - fictitious "bogo" interface.</p> -<p class="Pp">When a driver is registered with the system (by the - <code class="Dv">DRIVER_MODULE</code> macro, see - <a class="Xr">DRIVER_MODULE(9)</a>), it is added to the list of drivers - contained in the devclass of its parent bus type. For instance all PCI - drivers would be contained in the devclass named "pci" and all ISA - drivers would be in the devclass named "isa". The reason the - drivers are not held in the device object of the parent bus is to handle - multiple instances of a given type of bus. The - <code class="Dv">DRIVER_MODULE</code> macro will also create the devclass - with the name of the driver and can optionally call extra initialisation - code in the driver by specifying an extra module event handler and argument - as the last two arguments.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devclass(9)</a>, <a class="Xr">device(9)</a>, - <a class="Xr">DEVICE_ATTACH(9)</a>, <a class="Xr">DEVICE_DETACH(9)</a>, - <a class="Xr">DEVICE_IDENTIFY(9)</a>, <a class="Xr">DEVICE_PROBE(9)</a>, - <a class="Xr">DEVICE_SHUTDOWN(9)</a>, <a class="Xr">DRIVER_MODULE(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">driver</code> framework first appeared in - <span class="Ux">FreeBSD 2.2.7</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 19, 2022</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ecn.9 3.html b/static/freebsd/man9/ecn.9 3.html deleted file mode 100644 index aa2145aa..00000000 --- a/static/freebsd/man9/ecn.9 3.html +++ /dev/null @@ -1,174 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">ECN(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">ECN(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">ecn</code>, - <code class="Nm">ip_ecn_ingress</code>, - <code class="Nm">ip_ecn_egress</code>, - <code class="Nm">ip6_ecn_ingress</code>, - <code class="Nm">ip6_ecn_egress</code> — <span class="Nd">IP ECN - interfaces for tunnel encapsulation/decapsulation</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/netinet/ip_ecn.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">sys/netinet6/ip6_ecn.h</a>></code></p> -<section class="Ss"> -<h2 class="Ss" id="Constants"><a class="permalink" href="#Constants">Constants</a></h2> -<p class="Pp"><code class="Dv">ECN_COMPLETE</code> - <code class="Dv">ECN_ALLOWED</code> <code class="Dv">ECN_FORBIDDEN</code> - <code class="Dv">ECN_NOCARE</code></p> -</section> -<section class="Ss"> -<h2 class="Ss" id="ECN_Manipulation_Functions"><a class="permalink" href="#ECN_Manipulation_Functions">ECN - Manipulation Functions</a></h2> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ip_ecn_ingress</code>(<var class="Fa" style="white-space: nowrap;">int - mode</var>, <var class="Fa" style="white-space: nowrap;">uint8_t - *outer</var>, <var class="Fa" style="white-space: nowrap;">const uint8_t - *inner</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ip6_ecn_ingress</code>(<var class="Fa" style="white-space: nowrap;">int - mode</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - *outer</var>, <var class="Fa" style="white-space: nowrap;">const uint32_t - *inner</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ip_ecn_egress</code>(<var class="Fa" style="white-space: nowrap;">int - mode</var>, <var class="Fa" style="white-space: nowrap;">uint8_t - *outer</var>, <var class="Fa" style="white-space: nowrap;">const uint8_t - *inner</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ip6_ecn_egress</code>(<var class="Fa" style="white-space: nowrap;">int - mode</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - *outer</var>, <var class="Fa" style="white-space: nowrap;">const uint32_t - *inner</var>);</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#ip_ecn_ingress"><code class="Fn" id="ip_ecn_ingress">ip_ecn_ingress</code></a>() - and <code class="Fn">ip_ecn_egress</code>() interfaces implement Explicit - Congestion Notification (ECN) processing for tunnel encapsulation (ingress) - and decapsulation (egress). They operate on the ECN bits in the IP Type of - Service (TOS) or IPv6 Traffic Class (TCLASS) header field. These functions - implements the standard specification of RFC6040 in - <var class="Vt">ECN_ALLOWED</var> mode for - <code class="Fn">ip_ecn_egress</code>() with addition of - <var class="Vt">ECN_FORBIDDEN</var> mode as compatibility mode in - <code class="Fn">ip_ecn_ingress</code>().</p> -<section class="Ss"> -<h2 class="Ss" id="Interface"><a class="permalink" href="#Interface">Interface</a></h2> -<p class="Pp">The functions for manipulating <var class="Vt">ip_tos</var> and - <var class="Vt">ipv6_flow</var> are as follows:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt><code class="Fn">ip_ecn_ingress</code>() - <code class="Fn">ip6_ecn_ingress</code>()</dt> - <dd>Perform ECN processing at encapsulation time (ingress) based on the ECN - bits of the <var class="Vt">ip_tos</var> field in <var class="Vt">struct - ip</var> or the <var class="Vt">ip6_flow</var> field in - <var class="Vt">struct ip6_hdr</var> as <var class="Va">inner</var> to - <var class="Va">outer</var>. It also copies the DSCP value from - <var class="Va">inner</var> to <var class="Va">outer</var>.</dd> - <dt><code class="Fn">ip_ecn_egress</code>() - <code class="Fn">ip6_ecn_egress</code>()</dt> - <dd>Perform ECN processing at decapsulation time (egress) based on the ECN - bits of <var class="Va">outer</var> to <var class="Va">inner</var>. - <var class="Vt">ECN_ALLOWED</var> mode may modify the - <var class="Va">inner</var> ECN bits or instruct the caller to drop or log - by returning <var class="Vt">ECN_WARN</var> or - <var class="Vt">ECN_ALARM</var> values.</dd> -</dl> -</div> -<p class="Pp" id="ip_ecn_egress">Return codes for - <a class="permalink" href="#ip_ecn_egress"><code class="Fn">ip_ecn_egress</code></a>() - are as follows:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="ECN_DROP"><a class="permalink" href="#ECN_DROP"><code class="Dv">ECN_DROP</code></a></dt> - <dd>(0) Caller MUST drop the packet.</dd> - <dt id="ECN_SUCCESS"><a class="permalink" href="#ECN_SUCCESS"><code class="Dv">ECN_SUCCESS</code></a></dt> - <dd>(1) Processing succeeded; inner ECN bits may have been updated.</dd> - <dt id="ECN_WARN"><a class="permalink" href="#ECN_WARN"><code class="Dv">ECN_WARN</code></a></dt> - <dd>(2) Processing succeeded; caller MAY log a warning for an anomalous ECN - combination.</dd> - <dt id="ECN_ALARM"><a class="permalink" href="#ECN_ALARM"><code class="Dv">ECN_ALARM</code></a></dt> - <dd>(3) Processing succeeded; caller SHOULD log and MAY raise an alarm for a - serious ECN anomaly.</dd> -</dl> -</div> -<p class="Pp">The following modes are handled by functions:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="ECN_COMPLETE"><a class="permalink" href="#ECN_COMPLETE"><code class="Dv">ECN_COMPLETE</code></a></dt> - <dd>Normal mode as defined in RFC6040. ECN bits are preserved through - encapsulation; decapsulation follows RFC6040 rules and it returns - <var class="Vt">ECN_WARN</var> or <var class="Vt">ECN_ALARM</var> values - when a potentially dangerous packet detected.</dd> - <dt id="ECN_ALLOWED"><a class="permalink" href="#ECN_ALLOWED"><code class="Dv">ECN_ALLOWED</code></a></dt> - <dd>Normal mode as defined in RFC6040 without security checks. ECN bits are - preserved through encapsulation; decapsulation follows RFC6040 rules.</dd> - <dt id="ECN_FORBIDDEN"><a class="permalink" href="#ECN_FORBIDDEN"><code class="Dv">ECN_FORBIDDEN</code></a></dt> - <dd>Compatibility mode. ECN is stripped on encapsulation and decapsulation - will drop packets that carry CE in the outer header. This mode should not - be used in - <a class="permalink" href="#ip_ecn_egress~2"><code class="Fn" id="ip_ecn_egress~2">ip_ecn_egress</code></a>() - or - <a class="permalink" href="#ip6_ecn_egress"><code class="Fn" id="ip6_ecn_egress">ip6_ecn_egress</code></a>() - since the <var class="Vt">ECN_ALLOWED</var> mode already covers all - possible scenarios as specified in RFC6040.</dd> - <dt id="ECN_NOCARE"><a class="permalink" href="#ECN_NOCARE"><code class="Dv">ECN_NOCARE</code></a></dt> - <dd>leave ECN bits unchanged and ignored.</dd> -</dl> -</div> -</section> -<section class="Ss"> -<h2 class="Ss" id="IPV6_HANDLING"><a class="permalink" href="#IPV6_HANDLING">IPV6 - HANDLING</a></h2> -<p class="Pp">IPv6 interfaces - <a class="permalink" href="#ip6_ecn_ingress"><code class="Fn" id="ip6_ecn_ingress">ip6_ecn_ingress</code></a>() - and <code class="Fn">ip6_ecn_egress</code>() extract the 8-bit DSCP and ECN - values from the 32-bit <var class="Vt">ip6_flow</var> and insert it to IPv4 - equivalent interfaces.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ip(4)</a>, <a class="Xr">ip6(4)</a>, - <a class="Xr">ipsec(4)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">Historically <code class="Fn">ip_ecn_egress</code>() used a - boolean-style return. The current API preserves numeric mapping for drop - (ECN_DROP == 0) and success (ECN_SUCCESS == 1) but defines additional - non-zero status codes (ECN_WARN, ECN_ALARM). Callers that only test for - non-zero success will continue to treat WARN/ALARM as success.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp"><span class="An">Pouria Mousavizadeh Tehrani</span> - <<a class="Mt" href="mailto:pouria@FreeBSD.org">pouria@FreeBSD.org</a>></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 19, 2026</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/efirt.9 3.html b/static/freebsd/man9/efirt.9 3.html deleted file mode 100644 index 6c662062..00000000 --- a/static/freebsd/man9/efirt.9 3.html +++ /dev/null @@ -1,208 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">EFIRT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">EFIRT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">efirt</code>, <code class="Nm">efi_rt_ok</code>, - <code class="Nm">efi_get_table</code>, <code class="Nm">efi_get_time</code>, - <code class="Nm">efi_get_time_capabilities</code>, - <code class="Nm">efi_reset_system</code>, - <code class="Nm">efi_set_time</code>, <code class="Nm">efi_var_get</code>, - <code class="Nm">efi_var_nextname</code>, - <code class="Nm">efi_var_set</code> — <span class="Nd">kernel access - to UEFI runtime services</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="Cd">options EFIRT</code></p> -<p class="Pp"> - <br/> - <code class="In">#include <<a class="In">sys/efi.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">efi_rt_ok</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">efi_get_table</code>(<var class="Fa" style="white-space: nowrap;">struct - uuid *uuid</var>, <var class="Fa" style="white-space: nowrap;">void - **ptr</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">efi_get_time</code>(<var class="Fa" style="white-space: nowrap;">struct - efi_tm *tm</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">efi_get_time_capabilities</code>(<var class="Fa" style="white-space: nowrap;">struct - efi_tmcap *tmcap</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">efi_reset_system</code>(<var class="Fa" style="white-space: nowrap;">enum - efi_reset type</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">efi_set_time</code>(<var class="Fa" style="white-space: nowrap;">struct - efi_tm *tm</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">efi_var_get</code>(<var class="Fa" style="white-space: nowrap;">uint16_t - *name</var>, <var class="Fa" style="white-space: nowrap;">struct uuid - *vendor</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - *attrib</var>, <var class="Fa" style="white-space: nowrap;">size_t - *datasize</var>, <var class="Fa" style="white-space: nowrap;">void - *data</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">efi_var_nextname</code>(<var class="Fa" style="white-space: nowrap;">size_t - *namesize</var>, <var class="Fa" style="white-space: nowrap;">uint16_t - *name</var>, <var class="Fa" style="white-space: nowrap;">struct uuid - *vendor</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">efi_var_set</code>(<var class="Fa" style="white-space: nowrap;">uint16_t - *name</var>, <var class="Fa" style="white-space: nowrap;">struct uuid - *vendor</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - attrib</var>, <var class="Fa" style="white-space: nowrap;">size_t - datasize</var>, <var class="Fa" style="white-space: nowrap;">void - *data</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">All of the following calls will return - <code class="Dv">ENXIO</code> if UEFI runtime services are not available. - <code class="Nm">efirt</code> is currently only available on amd64 and - arm64.</p> -<p class="Pp" id="efi_rt_ok">The - <a class="permalink" href="#efi_rt_ok"><code class="Fn">efi_rt_ok</code></a>() - Returns 0 if UEFI runtime services are present and functional, or - <code class="Dv">ENXIO</code> if not.</p> -<p class="Pp" id="efi_get_table">The - <a class="permalink" href="#efi_get_table"><code class="Fn">efi_get_table</code></a>() - function gets a table by uuid from the UEFI system table. Returns 0 if the - table was found and populates *ptr with the address. Returns - <code class="Dv">ENXIO</code> if the configuration table or system table are - unset. Returns <code class="Dv">ENOENT</code> if the requested table cannot - be found.</p> -<p class="Pp" id="efi_get_time">The - <a class="permalink" href="#efi_get_time"><code class="Fn">efi_get_time</code></a>() - function gets the current time from the RTC, if available. Returns 0 and - populates the <var class="Vt">struct efi_tm</var> on success. Returns - <code class="Dv">EINVAL</code> if the <var class="Vt">struct efi_tm</var> is - <code class="Dv">NULL</code>, or <code class="Dv">EIO</code> if the time - could not be retrieved due to a hardware error.</p> -<p class="Pp" id="efi_get_time_capabilities">The - <a class="permalink" href="#efi_get_time_capabilities"><code class="Fn">efi_get_time_capabilities</code></a>() - function gets the capabilities from the RTC. Returns 0 and populates the - <var class="Vt">struct efi_tmcap</var> on success. Returns - <code class="Dv">EINVAL</code> if the <var class="Vt">struct efi_tm</var> is - <code class="Dv">NULL</code>, or <code class="Dv">EIO</code> if the time - could not be retrieved due to a hardware error.</p> -<p class="Pp" id="efi_reset_system">The - <a class="permalink" href="#efi_reset_system"><code class="Fn">efi_reset_system</code></a>() - function requests a reset of the system. The <var class="Fa">type</var> - argument may be one of the <var class="Vt">enum efi_reset</var> values:</p> -<dl class="Bl-tag"> - <dt id="EFI_RESET_COLD"><a class="permalink" href="#EFI_RESET_COLD"><code class="Dv">EFI_RESET_COLD</code></a></dt> - <dd>Perform a cold reset of the system, and reboot.</dd> - <dt id="EFI_RESET_WARM"><a class="permalink" href="#EFI_RESET_WARM"><code class="Dv">EFI_RESET_WARM</code></a></dt> - <dd>Perform a warm reset of the system, and reboot.</dd> - <dt id="EFI_RESET_SHUTDOWN"><a class="permalink" href="#EFI_RESET_SHUTDOWN"><code class="Dv">EFI_RESET_SHUTDOWN</code></a></dt> - <dd>Power off the system.</dd> -</dl> -<p class="Pp" id="efi_set_time">The - <a class="permalink" href="#efi_set_time"><code class="Fn">efi_set_time</code></a>() - function sets the time on the RTC to the time described by the - <var class="Vt">struct efi_tm</var> passed in. Returns 0 on success, - <code class="Dv">EINVAL</code> if a time field is out of range, or - <code class="Dv">EIO</code> if the time could not be set due to a hardware - error.</p> -<p class="Pp" id="efi_var_get">The - <a class="permalink" href="#efi_var_get"><code class="Fn">efi_var_get</code></a>() - function fetches the variable identified by <var class="Fa">vendor</var> and - <var class="Fa">name</var>. Returns 0 and populates - <var class="Fa">attrib</var>, <var class="Fa">datasize</var>, and - <var class="Fa">data</var> on success. Otherwise, one of the following - errors are returned:</p> -<dl class="Bl-tag"> - <dt id="ENOENT"><a class="permalink" href="#ENOENT"><code class="Dv">ENOENT</code></a></dt> - <dd>The variable was not found.</dd> - <dt id="EOVERFLOW"><a class="permalink" href="#EOVERFLOW"><code class="Dv">EOVERFLOW</code></a></dt> - <dd><var class="Fa">datasize</var> is not sufficient to hold the variable - data. <var class="Fa">namesize</var> is updated to reflect the size needed - to complete the request.</dd> - <dt id="EINVAL"><a class="permalink" href="#EINVAL"><code class="Dv">EINVAL</code></a></dt> - <dd>One of <var class="Fa">name</var>, <var class="Fa">vendor</var>, or - <var class="Fa">datasize</var> are NULL. Alternatively, - <var class="Fa">datasize</var> is large enough to hold the response but - <var class="Fa">data</var> is NULL.</dd> - <dt id="EIO"><a class="permalink" href="#EIO"><code class="Dv">EIO</code></a></dt> - <dd>The variable could not be retrieved due to a hardware error.</dd> - <dt id="EDOOFUS"><a class="permalink" href="#EDOOFUS"><code class="Dv">EDOOFUS</code></a></dt> - <dd>The variable could not be retrieved due to an authentication failure.</dd> -</dl> -<p class="Pp" id="efi_var_nextname">The - <a class="permalink" href="#efi_var_nextname"><code class="Fn">efi_var_nextname</code></a>() - function is used for enumeration of variables. On the initial call to - <code class="Fn">efi_var_nextname</code>(), <var class="Fa">name</var> - should be an empty string. Subsequent calls should pass in the last - <var class="Fa">name</var> and <var class="Fa">vendor</var> returned until - <code class="Dv">ENOENT</code> is returned. Returns 0 and populates - <var class="Fa">namesize</var>, <var class="Fa">name</var>, and - <var class="Fa">vendor</var> with the next variable's data. Otherwise, - returns one of the following errors:</p> -<dl class="Bl-tag"> - <dt id="ENOENT~2"><a class="permalink" href="#ENOENT~2"><code class="Dv">ENOENT</code></a></dt> - <dd>The next variable was not found.</dd> - <dt id="EOVERFLOW~2"><a class="permalink" href="#EOVERFLOW~2"><code class="Dv">EOVERFLOW</code></a></dt> - <dd><var class="Fa">datasize</var> is not sufficient to hold the variable - data. <var class="Fa">namesize</var> is updated to reflect the size needed - to complete the request.</dd> - <dt id="EINVAL~2"><a class="permalink" href="#EINVAL~2"><code class="Dv">EINVAL</code></a></dt> - <dd>One of <var class="Fa">name</var>, <var class="Fa">vendor</var>, or - <var class="Fa">datasize</var> are NULL.</dd> - <dt id="EIO~2"><a class="permalink" href="#EIO~2"><code class="Dv">EIO</code></a></dt> - <dd>The variable could not be retrieved due to a hardware error.</dd> -</dl> -<p class="Pp" id="efi_var_set">The - <a class="permalink" href="#efi_var_set"><code class="Fn">efi_var_set</code></a>() - function sets the variable described by <var class="Fa">name</var> and - <var class="Fa">vendor</var>. Returns 0 if the variable has been - successfully. Otherwise, returns one of the following errors:</p> -<dl class="Bl-tag"> - <dt id="EINVAL~3"><a class="permalink" href="#EINVAL~3"><code class="Dv">EINVAL</code></a></dt> - <dd>Either <var class="Fa">attrib</var> was an invalid combination of - attributes, <var class="Fa">datasize</var> exceeds the maximum allowed - size, or <var class="Fa">name</var> is an empty Unicode stirng.</dd> - <dt id="EAGAIN"><a class="permalink" href="#EAGAIN"><code class="Dv">EAGAIN</code></a></dt> - <dd>Not enough storage is available to hold the variable and its data.</dd> - <dt id="EIO~3"><a class="permalink" href="#EIO~3"><code class="Dv">EIO</code></a></dt> - <dd>The variable could not be saved due to a hardware error.</dd> - <dt id="EROFS"><a class="permalink" href="#EROFS"><code class="Dv">EROFS</code></a></dt> - <dd>The variable in question is read-only or may not be deleted.</dd> - <dt id="EDOOFUS~2"><a class="permalink" href="#EDOOFUS~2"><code class="Dv">EDOOFUS</code></a></dt> - <dd>The variable could not be set due to an authentication failure.</dd> - <dt id="ENOENT~3"><a class="permalink" href="#ENOENT~3"><code class="Dv">ENOENT</code></a></dt> - <dd>The variable trying to be updated or deleted was not found.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">efidev(4)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Kyle Evans</span> - <<a class="Mt" href="mailto:kevans@FreeBSD.org">kevans@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 2, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/epoch.9 4.html b/static/freebsd/man9/epoch.9 4.html deleted file mode 100644 index eb84213b..00000000 --- a/static/freebsd/man9/epoch.9 4.html +++ /dev/null @@ -1,284 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">EPOCH(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">EPOCH(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">epoch</code>, - <code class="Nm">epoch_context</code>, <code class="Nm">epoch_alloc</code>, - <code class="Nm">epoch_free</code>, <code class="Nm">epoch_enter</code>, - <code class="Nm">epoch_exit</code>, <code class="Nm">epoch_wait</code>, - <code class="Nm">epoch_enter_preempt</code>, - <code class="Nm">epoch_exit_preempt</code>, - <code class="Nm">epoch_wait_preempt</code>, - <code class="Nm">epoch_call</code>, - <code class="Nm">epoch_drain_callbacks</code>, - <code class="Nm">in_epoch</code>, <code class="Nm">in_epoch_verbose</code> - — <span class="Nd">kernel epoch based reclamation</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/proc.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/epoch.h</a>></code></p> -<div class="Bd Pp Li"> -<pre>struct epoch; /* Opaque */</pre> -</div> -<br/> -<var class="Vt">typedef struct epoch *epoch_t</var>; -<div class="Bd Pp Li"> -<pre>struct epoch_context { - void *data[2]; -};</pre> -</div> -<br/> -<var class="Vt">typedef struct epoch_context *epoch_context_t</var>; -<br/> -<var class="Vt">typedef void epoch_callback_t(epoch_context_t)</var>; -<div class="Bd Pp Li"> -<pre>struct epoch_tracker; /* Opaque */</pre> -</div> -<br/> -<var class="Vt">typedef struct epoch_tracker *epoch_tracker_t</var>; -<p class="Pp"><var class="Ft">epoch_t</var> - <br/> - <code class="Fn">epoch_alloc</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">epoch_free</code>(<var class="Fa" style="white-space: nowrap;">epoch_t - epoch</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">epoch_enter</code>(<var class="Fa" style="white-space: nowrap;">epoch_t - epoch</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">epoch_exit</code>(<var class="Fa" style="white-space: nowrap;">epoch_t - epoch</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">epoch_wait</code>(<var class="Fa" style="white-space: nowrap;">epoch_t - epoch</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">epoch_enter_preempt</code>(<var class="Fa" style="white-space: nowrap;">epoch_t - epoch</var>, <var class="Fa" style="white-space: nowrap;">epoch_tracker_t - et</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">epoch_exit_preempt</code>(<var class="Fa" style="white-space: nowrap;">epoch_t - epoch</var>, <var class="Fa" style="white-space: nowrap;">epoch_tracker_t - et</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">epoch_wait_preempt</code>(<var class="Fa" style="white-space: nowrap;">epoch_t - epoch</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">epoch_call</code>(<var class="Fa" style="white-space: nowrap;">epoch_t - epoch</var>, <var class="Fa" style="white-space: nowrap;">epoch_callback_t - callback</var>, <var class="Fa" style="white-space: nowrap;">epoch_context_t - ctx</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">epoch_drain_callbacks</code>(<var class="Fa" style="white-space: nowrap;">epoch_t - epoch</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">in_epoch</code>(<var class="Fa" style="white-space: nowrap;">epoch_t - epoch</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">in_epoch_verbose</code>(<var class="Fa" style="white-space: nowrap;">epoch_t - epoch</var>, <var class="Fa" style="white-space: nowrap;">int - dump_onfail</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Epochs are used to guarantee liveness and immutability of data by - deferring reclamation and mutation until a grace period has elapsed. Epochs - do not have any lock ordering issues. Entering and leaving an epoch section - will never block.</p> -<p class="Pp" id="epoch_alloc">Epochs are allocated with - <a class="permalink" href="#epoch_alloc"><code class="Fn">epoch_alloc</code></a>(). - The <var class="Fa">name</var> argument is used for debugging convenience - when the <code class="Cd">EPOCH_TRACE</code> kernel option is configured. By - default, epochs do not allow preemption during sections. By default mutexes - cannot be held across - <a class="permalink" href="#epoch_wait_preempt"><code class="Fn" id="epoch_wait_preempt">epoch_wait_preempt</code></a>(). - The <var class="Fa">flags</var> specified are formed by - <a class="permalink" href="#OR"><i class="Em" id="OR">OR</i></a>'ing the - following values:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="EPOCH_LOCKED"><a class="permalink" href="#EPOCH_LOCKED"><code class="Dv">EPOCH_LOCKED</code></a></dt> - <dd>Permit holding mutexes across <code class="Fn">epoch_wait_preempt</code>() - (requires <code class="Dv">EPOCH_PREEMPT</code>). When doing this one must - be cautious of creating a situation where a deadlock is possible.</dd> - <dt id="EPOCH_PREEMPT"><a class="permalink" href="#EPOCH_PREEMPT"><code class="Dv">EPOCH_PREEMPT</code></a></dt> - <dd>The <var class="Vt">epoch</var> will allow preemption during sections. - Only non-sleepable locks may be acquired during a preemptible epoch. The - functions <code class="Fn">epoch_enter_preempt</code>(), - <code class="Fn">epoch_exit_preempt</code>(), and - <code class="Fn">epoch_wait_preempt</code>() must be used in place of - <code class="Fn">epoch_enter</code>(), - <code class="Fn">epoch_exit</code>(), and - <code class="Fn">epoch_wait</code>(), respectively.</dd> -</dl> -</div> -<p class="Pp" id="epoch_free"><var class="Vt">epoch</var>s are freed with - <a class="permalink" href="#epoch_free"><code class="Fn">epoch_free</code></a>().</p> -<p class="Pp" id="epoch_enter">Threads indicate the start of an epoch critical - section by calling - <a class="permalink" href="#epoch_enter"><code class="Fn">epoch_enter</code></a>() - (or - <a class="permalink" href="#epoch_enter_preempt"><code class="Fn" id="epoch_enter_preempt">epoch_enter_preempt</code></a>() - for preemptible epochs). Threads call - <a class="permalink" href="#epoch_exit"><code class="Fn" id="epoch_exit">epoch_exit</code></a>() - (or - <a class="permalink" href="#epoch_exit_preempt"><code class="Fn" id="epoch_exit_preempt">epoch_exit_preempt</code></a>() - for preemptible epochs) to indicate the end of a critical section. - <var class="Vt">struct epoch_tracker</var>s are stack objects whose pointers - are passed to <code class="Fn">epoch_enter_preempt</code>() and - <code class="Fn">epoch_exit_preempt</code>() (much like - <var class="Vt">struct rm_priotracker</var>).</p> -<p class="Pp" id="epoch_call">Threads can defer work until a grace period has - expired since any thread has entered the epoch either synchronously or - asynchronously. - <a class="permalink" href="#epoch_call"><code class="Fn">epoch_call</code></a>() - defers work asynchronously by invoking the provided - <var class="Fa">callback</var> at a later time. - <code class="Fn">epoch_wait</code>() (or - <code class="Fn">epoch_wait_preempt</code>()) blocks the current thread - until the grace period has expired and the work can be done safely.</p> -<p class="Pp" id="epoch_wait">Default, non-preemptible epoch wait - (<a class="permalink" href="#epoch_wait"><code class="Fn">epoch_wait</code></a>()) - is guaranteed to have much shorter completion times relative to preemptible - epoch wait - (<a class="permalink" href="#epoch_wait_preempt~2"><code class="Fn" id="epoch_wait_preempt~2">epoch_wait_preempt</code></a>()). - (In the default type, none of the threads in an epoch section will be - preempted before completing its section.)</p> -<p class="Pp" id="in_epoch">INVARIANTS can assert that a thread is in an epoch - by using - <a class="permalink" href="#in_epoch"><code class="Fn">in_epoch</code></a>(). - <code class="Fn">in_epoch</code>(<var class="Fa">epoch</var>) is equivalent - to invoking - <a class="permalink" href="#in_epoch_verbose"><code class="Fn" id="in_epoch_verbose">in_epoch_verbose</code></a>(<var class="Fa">epoch</var>, - <var class="Fa">0</var>). If <code class="Cd">EPOCH_TRACE</code> is enabled, - <code class="Fn">in_epoch_verbose</code>(<var class="Fa">epoch</var>, - <var class="Fa">1</var>) provides additional verbose debugging - information.</p> -<p class="Pp" id="epoch_wait~2">The epoch API currently does not support - sleeping in epoch_preempt sections. A caller should never call - <a class="permalink" href="#epoch_wait~2"><code class="Fn">epoch_wait</code></a>() - in the middle of an epoch section for the same epoch as this will lead to a - deadlock.</p> -<p class="Pp" id="epoch_drain_callbacks">The - <a class="permalink" href="#epoch_drain_callbacks"><code class="Fn">epoch_drain_callbacks</code></a>() - function is used to drain all pending callbacks which have been invoked by - prior <code class="Fn">epoch_call</code>() function calls on the same epoch. - This function is useful when there are shared memory structure(s) referred - to by the epoch callback(s) which are not refcounted and are rarely freed. - The typical place for calling this function is right before freeing or - invalidating the shared resource(s) used by the epoch callback(s). This - function can sleep and is not optimized for performance.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp"><code class="Fn">in_epoch</code>(<var class="Fa">curepoch</var>) - will return 1 if curthread is in curepoch, 0 otherwise.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">Async free example: Thread 1:</p> -<div class="Bd Pp Li"> -<pre>int -in_pcbladdr(struct inpcb *inp, struct in_addr *faddr, struct in_laddr *laddr, - struct ucred *cred) -{ - /* ... */ - epoch_enter(net_epoch); - CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) { - sa = ifa->ifa_addr; - if (sa->sa_family != AF_INET) - continue; - sin = (struct sockaddr_in *)sa; - if (prison_check_ip4(cred, &sin->sin_addr) == 0) { - ia = (struct in_ifaddr *)ifa; - break; - } - } - epoch_exit(net_epoch); - /* ... */ -}</pre> -</div> -Thread 2: -<div class="Bd Pp Li"> -<pre>void -ifa_free(struct ifaddr *ifa) -{ - - if (refcount_release(&ifa->ifa_refcnt)) - epoch_call(net_epoch, ifa_destroy, &ifa->ifa_epoch_ctx); -} - -void -if_purgeaddrs(struct ifnet *ifp) -{ - - /* .... * - IF_ADDR_WLOCK(ifp); - CK_STAILQ_REMOVE(&ifp->if_addrhead, ifa, ifaddr, ifa_link); - IF_ADDR_WUNLOCK(ifp); - ifa_free(ifa); -}</pre> -</div> -<p class="Pp">Thread 1 traverses the ifaddr list in an epoch. Thread 2 unlinks - with the corresponding epoch safe macro, marks as logically free, and then - defers deletion. More general mutation or a synchronous free would have to - follow a call to <code class="Fn">epoch_wait</code>().</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">callout(9)</a>, <a class="Xr">locking(9)</a>, - <a class="Xr">mtx_pool(9)</a>, <a class="Xr">mutex(9)</a>, - <a class="Xr">rwlock(9)</a>, <a class="Xr">sema(9)</a>, - <a class="Xr">sleep(9)</a>, <a class="Xr">sx(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">epoch</code> framework first appeared in - <span class="Ux">FreeBSD 11.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CAVEATS"><a class="permalink" href="#CAVEATS">CAVEATS</a></h1> -<p class="Pp">One must be cautious when using - <code class="Fn">epoch_wait_preempt</code>(). Threads are pinned during - epoch sections, so if a thread in a section is then preempted by a higher - priority compute bound thread on that CPU, it can be prevented from leaving - the section indefinitely.</p> -<p class="Pp">Epochs are not a straight replacement for read locks. Callers must - use safe list and tailq traversal routines in an epoch (see ck_queue). When - modifying a list referenced from an epoch section safe removal routines must - be used and the caller can no longer modify a list entry in place. An item - to be modified must be handled with copy on write and frees must be deferred - until after a grace period has elapsed.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 25, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ether_gen_addr.9 4.html b/static/freebsd/man9/ether_gen_addr.9 4.html deleted file mode 100644 index d8f4aea2..00000000 --- a/static/freebsd/man9/ether_gen_addr.9 4.html +++ /dev/null @@ -1,65 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">ETHER_GEN_ADDR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">ETHER_GEN_ADDR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">ether_gen_addr</code> — - <span class="Nd">generate an arbitrary MAC address for use</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/socket.h</a>></code> - <br/> - <code class="In">#include <<a class="In">net/if.h</a>></code> - <br/> - <code class="In">#include <<a class="In">net/if_var.h</a>></code> - <br/> - <code class="In">#include <<a class="In">net/ethernet.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ether_gen_addr</code>(<var class="Fa" style="white-space: nowrap;">struct - ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">struct - ether_addr *hwaddr</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#ether_gen_addr"><code class="Fn" id="ether_gen_addr">ether_gen_addr</code></a>() - function generates an arbitrary MAC address for use by an ethernet interface - that does not have an assigned address.</p> -<p class="Pp">By default, <code class="Nm">ether_gen_addr</code> attempts to - generate a stable MAC address using the hostid of the jail that the - <var class="Ar">ifp</var> is being added to. During early boot, the hostid - may not be set on machines that haven't yet populated - <span class="Pa">/etc/hostid</span>, or on machines that do not use - <a class="Xr">loader(8)</a>.</p> -<p class="Pp"><code class="Nm">ether_gen_addr</code> can fail to derive a MAC - address due to memory allocation failure, or because the hostid has not been - populated. In these cases, a locally-administered unicast MAC address will - be randomly generated and returned via the <var class="Ar">hwaddr</var> - parameter.</p> -<p class="Pp">If <code class="Nm">ether_gen_addr</code> succeeds, then it will - return a MAC address in the FreeBSD Foundation OUI, - “58:9c:fc”, via the <var class="Ar">hwaddr</var> - parameter.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Kyle Evans</span> - <<a class="Mt" href="mailto:kevans@FreeBSD.org">kevans@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 1, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/eventtimers.9 4.html b/static/freebsd/man9/eventtimers.9 4.html deleted file mode 100644 index f08938bc..00000000 --- a/static/freebsd/man9/eventtimers.9 4.html +++ /dev/null @@ -1,252 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">EVENTTIMERS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">EVENTTIMERS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">eventtimers</code> — - <span class="Nd">kernel event timers subsystem</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/timeet.h</a>></code></p> -<div class="Bd Pp Li"> -<pre>struct eventtimer; - -typedef int et_start_t(struct eventtimer *et, - sbintime_t first, sbintime_t period); -typedef int et_stop_t(struct eventtimer *et); -typedef void et_event_cb_t(struct eventtimer *et, void *arg); -typedef int et_deregister_cb_t(struct eventtimer *et, void *arg); - -struct eventtimer { - SLIST_ENTRY(eventtimer) et_all; - char *et_name; - int et_flags; -#define ET_FLAGS_PERIODIC 1 -#define ET_FLAGS_ONESHOT 2 -#define ET_FLAGS_PERCPU 4 -#define ET_FLAGS_C3STOP 8 -#define ET_FLAGS_POW2DIV 16 - int et_quality; - int et_active; - uint64_t et_frequency; - sbintime_t et_min_period; - sbintime_t et_max_period; - et_start_t *et_start; - et_stop_t *et_stop; - et_event_cb_t *et_event_cb; - et_deregister_cb_t *et_deregister_cb; - void *et_arg; - void *et_priv; - struct sysctl_oid *et_sysctl; -};</pre> -</div> -<br/> -<var class="Ft">int</var> -<br/> -<code class="Fn">et_register</code>(<var class="Fa" style="white-space: nowrap;">struct - eventtimer *et</var>); -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">et_deregister</code>(<var class="Fa" style="white-space: nowrap;">struct - eventtimer *et</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">et_change_frequency</code>(<var class="Fa" style="white-space: nowrap;">struct - eventtimer *et</var>, <var class="Fa" style="white-space: nowrap;">uint64_t - newfreq</var>);</p> -<p class="Pp"><code class="Fn">ET_LOCK</code>();</p> -<p class="Pp"><code class="Fn">ET_UNLOCK</code>();</p> -<p class="Pp"><var class="Ft">struct eventtimer *</var> - <br/> - <code class="Fn">et_find</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>, <var class="Fa" style="white-space: nowrap;">int - check</var>, <var class="Fa" style="white-space: nowrap;">int - want</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">et_init</code>(<var class="Fa" style="white-space: nowrap;">struct - eventtimer *et</var>, - <var class="Fa" style="white-space: nowrap;">et_event_cb_t *event</var>, - <var class="Fa" style="white-space: nowrap;">et_deregister_cb_t - *deregister</var>, <var class="Fa" style="white-space: nowrap;">void - *arg</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">et_start</code>(<var class="Fa" style="white-space: nowrap;">struct - eventtimer *et</var>, - <var class="Fa" style="white-space: nowrap;">sbintime_t first</var>, - <var class="Fa" style="white-space: nowrap;">sbintime_t period</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">et_stop</code>(<var class="Fa" style="white-space: nowrap;">struct - eventtimer *et</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">et_ban</code>(<var class="Fa" style="white-space: nowrap;">struct - eventtimer *et</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">et_free</code>(<var class="Fa" style="white-space: nowrap;">struct - eventtimer *et</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Event timers are responsible for generating interrupts at - specified time or periodically, to run different time-based events. - Subsystem consists of three main parts:</p> -<dl class="Bl-tag"> - <dt>Drivers</dt> - <dd>Manage hardware to generate requested time events.</dd> - <dt id="hardclock">Consumers</dt> - <dd><span class="Pa">sys/kern/kern_clocksource.c</span> uses event timers to - supply kernel with - <a class="permalink" href="#hardclock"><code class="Fn">hardclock</code></a>(), - <a class="permalink" href="#statclock"><code class="Fn" id="statclock">statclock</code></a>() - and - <a class="permalink" href="#profclock"><code class="Fn" id="profclock">profclock</code></a>() - time events.</dd> - <dt>Glue code</dt> - <dd><span class="Pa">sys/sys/timeet.h</span>, - <span class="Pa">sys/kern/kern_et.c</span> provide APIs for event timer - drivers and consumers.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="DRIVER_API"><a class="permalink" href="#DRIVER_API">DRIVER - API</a></h1> -<p class="Pp">Driver API is built around eventtimer structure. To register its - functionality driver allocates that structure and calls - <a class="permalink" href="#et_register"><code class="Fn" id="et_register">et_register</code></a>(). - Driver should fill following fields there:</p> -<dl class="Bl-tag"> - <dt id="et_name"><var class="Va">et_name</var></dt> - <dd>Unique name of the event timer for management purposes.</dd> - <dt id="et_flags"><var class="Va">et_flags</var></dt> - <dd>Set of flags, describing timer capabilities: - <dl class="Bl-tag Bl-compact"> - <dt>ET_FLAGS_PERIODIC</dt> - <dd>Periodic mode supported.</dd> - <dt>ET_FLAGS_ONESHOT</dt> - <dd>One-shot mode supported.</dd> - <dt>ET_FLAGS_PERCPU</dt> - <dd>Timer is per-CPU.</dd> - <dt>ET_FLAGS_C3STOP</dt> - <dd>Timer may stop in CPU sleep state.</dd> - <dt>ET_FLAGS_POW2DIV</dt> - <dd>Timer supports only 2^n divisors.</dd> - </dl> - </dd> - <dt id="et_quality"><var class="Va">et_quality</var></dt> - <dd>Abstract value to certify whether this timecounter is better than the - others. Higher value means better.</dd> - <dt id="et_frequency"><var class="Va">et_frequency</var></dt> - <dd>Timer oscillator's base frequency, if applicable and known. Used by - consumers to predict set of possible frequencies that could be obtained by - dividing it. Should be zero if not applicable or unknown.</dd> - <dt id="et_min_period"><var class="Va">et_min_period</var>, - <var class="Va">et_max_period</var></dt> - <dd>Minimal and maximal reliably programmable time periods.</dd> - <dt id="et_start"><var class="Va">et_start</var></dt> - <dd>Driver's timer start function pointer.</dd> - <dt id="et_stop"><var class="Va">et_stop</var></dt> - <dd>Driver's timer stop function pointer.</dd> - <dt id="et_priv"><var class="Va">et_priv</var></dt> - <dd>Driver's private data storage.</dd> -</dl> -<p class="Pp">After the event timer functionality is registered, it is - controlled via <var class="Va">et_start</var> and - <var class="Va">et_stop</var> methods. <var class="Va">et_start</var> method - is called to start the specified event timer. The last two arguments are - used to specify time when events should be generated. - <var class="Va">first</var> argument specifies time period before the first - event generated. In periodic mode NULL value specifies that first period is - equal to the <var class="Va">period</var> argument value. - <var class="Va">period</var> argument specifies the time period between - following events for the periodic mode. The NULL value there specifies the - one-shot mode. At least one of these two arguments should be not NULL. When - event time arrive, driver should call <var class="Va">et_event_cb</var> - callback function, passing <var class="Va">et_arg</var> as the second - argument. <var class="Va">et_stop</var> method is called to stop the - specified event timer. For the per-CPU event timers - <var class="Va">et_start</var> and <var class="Va">et_stop</var> methods - control timers associated with the current CPU.</p> -<p class="Pp" id="et_deregister">Driver may deregister its functionality by - calling - <a class="permalink" href="#et_deregister"><code class="Fn">et_deregister</code></a>().</p> -<p class="Pp" id="et_change_frequency">If the frequency of the clock hardware - can change while it is running (for example, during power-saving modes), the - driver must call - <a class="permalink" href="#et_change_frequency"><code class="Fn">et_change_frequency</code></a>() - on each change. If the given event timer is the active timer, - <code class="Fn">et_change_frequency</code>() stops the timer on all CPUs, - updates <var class="Va">et->frequency</var>, then restarts the timer on - all CPUs so that all current events are rescheduled using the new frequency. - If the given timer is not currently active, - <code class="Fn">et_change_frequency</code>() simply updates - <var class="Va">et->frequency</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CONSUMER_API"><a class="permalink" href="#CONSUMER_API">CONSUMER - API</a></h1> -<p class="Pp"><code class="Fn">et_find</code>() allows consumer to find - available event timer, optionally matching specific name and/or capability - flags. Consumer may read returned eventtimer structure, but should not - modify it. When wanted event timer is found, - <code class="Fn">et_init</code>() should be called for it, submitting - <var class="Va">event</var> and optionally <var class="Va">deregister</var> - callbacks functions, and the opaque argument <var class="Va">arg</var>. That - argument will be passed as argument to the callbacks. Event callback - function will be called on scheduled time events. It is called from the - hardware interrupt context, so no sleep is permitted there. Deregister - callback function may be called to report consumer that the event timer - functionality is no longer available. On this call, consumer should stop - using event timer before the return.</p> -<p class="Pp" id="et_start~2">After the timer is found and initialized, it can - be controlled via - <a class="permalink" href="#et_start~2"><code class="Fn">et_start</code></a>() - and <code class="Fn">et_stop</code>(). The arguments are the same as - described in driver API. Per-CPU event timers can be controlled only from - specific CPUs.</p> -<p class="Pp" id="et_ban"><a class="permalink" href="#et_ban"><code class="Fn">et_ban</code></a>() - allows consumer to mark event timer as broken via clearing both one-shot and - periodic capability flags, if it was somehow detected. - <a class="permalink" href="#et_free"><code class="Fn" id="et_free">et_free</code></a>() - is the opposite to - <a class="permalink" href="#et_init"><code class="Fn" id="et_init">et_init</code></a>(). - It releases the event timer for other consumers use.</p> -<p class="Pp" id="ET_LOCK"><a class="permalink" href="#ET_LOCK"><code class="Fn">ET_LOCK</code></a>() - and - <a class="permalink" href="#ET_UNLOCK"><code class="Fn" id="ET_UNLOCK">ET_UNLOCK</code></a>() - macros should be used to manage <a class="Xr">mutex(9)</a> lock around - <a class="permalink" href="#et_find"><code class="Fn" id="et_find">et_find</code></a>(), - <code class="Fn">et_init</code>() and <code class="Fn">et_free</code>() - calls to serialize access to the list of the registered event timers and the - pointers returned by <code class="Fn">et_find</code>(). - <code class="Fn">et_start</code>() and <code class="Fn">et_stop</code>() - calls should be serialized in consumer's internal way to avoid concurrent - timer hardware access.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">eventtimers(4)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp"><span class="An">Alexander Motin</span> - <<a class="Mt" href="mailto:mav@FreeBSD.org">mav@FreeBSD.org</a>></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 2, 2014</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/extattr.9 3.html b/static/freebsd/man9/extattr.9 3.html deleted file mode 100644 index 94bcd948..00000000 --- a/static/freebsd/man9/extattr.9 3.html +++ /dev/null @@ -1,87 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">EXTATTR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">EXTATTR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">extattr</code> — <span class="Nd">virtual - file system named extended attributes</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/extattr.h</a>></code></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Named extended attributes allow additional meta-data to be - associated with vnodes representing files and directories. The semantics of - this additional data is that of a "name=value" pair, where a name - may be defined or undefined, and if defined, associated with zero or more - bytes of arbitrary binary data. Extended attribute names exist within a set - of namespaces; each operation on an extended attribute is required to - provide the namespace to which to operation refers. If the same name is - present in multiple namespaces, the extended attributes associated with the - names are stored and manipulated independently. The following two namespaces - are defined universally, although individual file systems may implement - additional namespaces, or not implement these namespaces: - <code class="Dv">EXTATTR_NAMESPACE_USER</code>, - <code class="Dv">EXTATTR_NAMESPACE_SYSTEM</code>. The semantics of these - attributes are intended to be as follows: user attribute data is protected - according the normal discretionary and mandatory protections associated with - the data in the file or directory; system attribute data is protected such - that appropriate privilege is required to directly access or manipulate - these attributes. By default, processes in a <a class="Xr">jail(8)</a> - cannot access the system attribute data unless the - <var class="Va">allow.extattr</var> configuration parameter is - specified.</p> -<p class="Pp">Reads of extended attribute data may return specific contiguous - regions of the meta-data, in the style of <a class="Xr">VOP_READ(9)</a>, but - writes will replace the entire current "value" associated with a - given name. As there are a plethora of file systems with differing extended - attributes, availability and functionality of these functions may be - limited, and they should be used with awareness of the underlying semantics - of the supporting file system. Authorization schemes for extended attribute - data may also vary by file system, as well as maximum attribute size, and - whether or not any or specific new attributes may be defined.</p> -<p class="Pp">Extended attributes are named using a null-terminated character - string. Depending on underlying file system semantics, this name may or may - not be case-sensitive. Appropriate vnode extended attribute calls are: - <a class="Xr">VOP_GETEXTATTR(9)</a>, <a class="Xr">VOP_LISTEXTATTR(9)</a>, - and <a class="Xr">VOP_SETEXTATTR(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">jail(8)</a>, <a class="Xr">VFS(9)</a>, - <a class="Xr">VOP_GETEXTATTR(9)</a>, <a class="Xr">VOP_LISTEXTATTR(9)</a>, - <a class="Xr">VOP_SETEXTATTR(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Robert - Watson</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">In addition, the interface does not provide a mechanism to - retrieve the current set of available attributes; it has been suggested that - providing a <code class="Dv">NULL</code> attribute name should cause a list - of defined attributes for the passed file or directory, but this is not - currently implemented.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 5, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/exterror.9 3.html b/static/freebsd/man9/exterror.9 3.html deleted file mode 100644 index c28538a1..00000000 --- a/static/freebsd/man9/exterror.9 3.html +++ /dev/null @@ -1,185 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">EXTERROR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">EXTERROR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">exterror</code> — <span class="Nd">provide - extended error information to userspace</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<div class="Bd Li"> -<pre>#define EXTERR_CATEGORY EXTERR_CAT_MYCATEGORY</pre> -</div> -<br/> -<p class="Pp"><code class="In">#include - <<a class="In">sys/exterrvar.h</a>></code></p> -<p class="Pp"><var class="Vt">struct kexterr;</var></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">exterr_clear</code>(<var class="Fa" style="white-space: nowrap;">struct - kexterr *ke</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">exterr_set_from</code>(<var class="Fa" style="white-space: nowrap;">const - struct kexterr *ke</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">EXTERROR</code>(<var class="Fa" style="white-space: nowrap;">int - error</var>, <var class="Fa" style="white-space: nowrap;">const char - *msg</var>, <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">EXTERROR_KE</code>(<var class="Fa" style="white-space: nowrap;">struct - kexterr *ke</var>, <var class="Fa" style="white-space: nowrap;">int - error</var>, <var class="Fa" style="white-space: nowrap;">const char - *msg</var>, <var class="Fa" style="white-space: nowrap;">...</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">exterror</code> framework allows the kernel - to return additional information about an error along with the standard - <a class="Xr">errno(3)</a> error code, which is terse and often lacking - context.</p> -<p class="Pp">The terseness is especially visible with commonly overloaded error - codes like <code class="Er">EINVAL</code> or <code class="Er">EIO</code>, - which occur at many places for a given syscall, or even outside the context - of the current kernel call. Identifying the specific cause for the returned - error using only the <var class="Va">errno</var> value requires searching - for all instances that the error is returned in the kernel and trying to - guess which is the most likely code path to have returned the error. - <code class="Nm">exterror</code> attaches additional data to the error - itself and records the error category and the kernel source code file line - number. The intent of <code class="Nm">exterror</code> is to make it easier - for a user to identify the cause of the error.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="USAGE"><a class="permalink" href="#USAGE">USAGE</a></h1> -<p class="Pp">Before <code class="Nm">exterror</code> can be used in the given - source .c file, the category of extended errors should be allocated in the - <code class="In"><<a class="In">sys/exterr_cat.h</a>></code> file. The - category is the unique integer, that, together with the source line number, - uniquely identifies the extended error occurrence. Then, the - <var class="Va">EXTERR_CATEGORY</var> symbol should be defined as an alias - for the allocated category, as shown in the summary.</p> -<p class="Pp">A typical code fragment to report an error is just</p> -<div class="Bd Bd-indent">return (EINVAL);</div> -An extended error can augment the error code with additional information: -<div class="Bd Bd-indent">return (EXTERROR(EINVAL, "Invalid - length"));</div> -The error data and metadata is saved in the current thread storage. The metadata - includes the category and the source file line number. -<p class="Pp" id="EXTERROR">Arguments to the - <a class="permalink" href="#EXTERROR"><code class="Fn">EXTERROR</code></a>() - macro:</p> -<ul class="Bl-dash"> - <li>The first argument to <code class="Fn">EXTERROR</code>() is the errno - error code.</li> - <li>The second argument is a constant string with the unbound lifetime, which - should tersely provide enough human-readable details about the error.</li> - <li>The <code class="Fn">EXTERROR</code>() macro can take two optional 64-bit - integer arguments, whose meaning is specific to the subsystem. The format - string may include up to two printf-like format specifiers to insert the - optional argument values in the user output, which is done in userspace. - <p class="Pp">The format specifier must be for an integer type, and include - the “j” format modifier to accept only the types - <var class="Vt">intmax_t</var> or <var class="Vt">uintmax_t</var>.</p> - </li> -</ul> -<p class="Pp">The strings passed as the second argument are only retained in the - kernel text if the <code class="Cd">option EXTERR_STRINGS</code> was enabled - in the kernel config. Otherwise they are stripped at compile time and are - not available to userspace at runtime.</p> -<p class="Pp" id="EXTERROR~2">The - <a class="permalink" href="#EXTERROR~2"><code class="Fn">EXTERROR</code></a>() - macro can be used in any context where the current thread is defined. - Specifically, <code class="Fn">EXTERROR</code>() cannot be used in interrupt - contexts and context switch code. Additionally, use of - <code class="Fn">EXTERROR</code>() in kernel threads is not sensible as - there is no userspace to retrieve the extended error data.</p> -<p class="Pp" id="EXTERROR_KE">The - <a class="permalink" href="#EXTERROR_KE"><code class="Fn">EXTERROR_KE</code></a>() - macro is similar to <code class="Fn">EXTERROR</code>(), but it takes an - explicit pointer <var class="Fa">kep</var> to the <var class="Vt">struct - kexterr</var> to fill with the extended error information. The macro - expression value is <var class="Vt">void</var>. See below for description of - the asynchronous i/o error facilities.</p> -<p class="Pp" id="exterr_clear">The - <a class="permalink" href="#exterr_clear"><code class="Fn">exterr_clear</code></a>() - function clears the content of the <var class="Vt">struct kexterr</var> - pointed to by the argument <var class="Fa">ke</var>.</p> -<p class="Pp" id="exterr_set_from">The - <a class="permalink" href="#exterr_set_from"><code class="Fn">exterr_set_from</code></a>() - function sets the current thread extended error data from the - <var class="Fa">struct kexterr</var> pointed to by the argument - <var class="Fa">ke</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="USERSPACE_ACCESS_TO_EXTENDED_ERROR_DATA"><a class="permalink" href="#USERSPACE_ACCESS_TO_EXTENDED_ERROR_DATA">USERSPACE - ACCESS TO EXTENDED ERROR DATA</a></h1> -<p class="Pp">There is no syscall overhead for using - <code class="Nm">exterror</code> in the non-error case. When an error occurs - that has supplied extended information, the kernel copies out that - information into the userspace per-thread area that was registered with the - kernel, typically on image activation, or later at thread startup. The area - is controlled by the <a class="Xr">exterrctl(2)</a> internal syscall, - normally done by the userspace C runtime.</p> -<p class="Pp">Userspace programs do not need to access the extended information - area directly. There is no field that is stable for the specific error - condition. Instead, the base <span class="Lb">library - “c”</span> functions <a class="Xr">err(3)</a> and - <a class="Xr">warn(3)</a> were modified to print the extended information if - it is available in addition to the usual <var class="Va">errno</var> - decoding.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ASYNCHRONOUS_INPUT/OUTPUT"><a class="permalink" href="#ASYNCHRONOUS_INPUT/OUTPUT">ASYNCHRONOUS - INPUT/OUTPUT</a></h1> -<p class="Pp">Due to the nature of the <span class="Ux">FreeBSD</span> i/o - subsystem, most input/output requests, presented as buffers (as in - <var class="Vt">struct buf</var>) and geom bio's ( <var class="Vt">struct - bio</var>) are processed asynchronously in filesystem- and geom-private - threads. This makes it challenging to pass any extended error information - from the geom providers and drivers, where an error typically occurs, back - to the thread that initiated the request, and is the consumer of the - result.</p> -<p class="Pp" id="EXTERROR_KE~2">To alleviate the mismatch, both - <var class="Vt">struct buf</var> and <var class="Vt">struct bio</var> have - member of the <var class="Vt">struct kexterr</var> type. For buffers, the - <var class="Va">b_exterr</var> for <var class="Vt">struct buf</var>, and - <var class="Va">bio_exterr</var> for <var class="Vt">struct bio</var>. - Asynchronous i/o code can use the - <a class="permalink" href="#EXTERROR_KE~2"><code class="Fn">EXTERROR_KE</code></a>() - macro, passing the pointer to the current request's embedded - <var class="Vt">struct kexterr</var>, to record the extended error. In both - cases, the <var class="Va">BIO_EXTERR</var> flag should be set to indicate - that whole extended error is valid, not only the - <var class="Va">b_error</var> or <var class="Va">bio_error</var> values.</p> -<p class="Pp">Both VFS and geom generic layers, and several geom providers that - generate subordinate bio's from the original request, are aware of the - extended errors. They pass <var class="Vt">kexterr</var> from the failed - request back to the thread that create the request.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">errno(3)</a>, <a class="Xr">err(3)</a>, - <a class="Xr">uexterr_gettext(3)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">exterror</code> facility was introduced in - <span class="Ux">FreeBSD 15.0</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 5, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/fail.9 3.html b/static/freebsd/man9/fail.9 3.html deleted file mode 100644 index 273245d4..00000000 --- a/static/freebsd/man9/fail.9 3.html +++ /dev/null @@ -1,263 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">FAIL(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">FAIL(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">DEBUG_FP</code>, - <code class="Nm">KFAIL_POINT_CODE</code>, - <code class="Nm">KFAIL_POINT_CODE_FLAGS</code>, - <code class="Nm">KFAIL_POINT_CODE_COND</code>, - <code class="Nm">KFAIL_POINT_ERROR</code>, - <code class="Nm">KFAIL_POINT_EVAL</code>, - <code class="Nm">KFAIL_POINT_DECLARE</code>, - <code class="Nm">KFAIL_POINT_DEFINE</code>, - <code class="Nm">KFAIL_POINT_GOTO</code>, - <code class="Nm">KFAIL_POINT_RETURN</code>, - <code class="Nm">KFAIL_POINT_RETURN_VOID</code>, - <code class="Nm">KFAIL_POINT_SLEEP_CALLBACKS</code>, - <code class="Nm">fail_point</code> — <span class="Nd">fail - points</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/fail.h</a>></code></p> -<p class="Pp"><code class="Fn">KFAIL_POINT_CODE</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">code</var>);</p> -<p class="Pp"><code class="Fn">KFAIL_POINT_CODE_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">flags</var>, - <var class="Fa" style="white-space: nowrap;">code</var>);</p> -<p class="Pp"><code class="Fn">KFAIL_POINT_CODE_COND</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">cond</var>, - <var class="Fa" style="white-space: nowrap;">flags</var>, - <var class="Fa" style="white-space: nowrap;">code</var>);</p> -<p class="Pp"><code class="Fn">KFAIL_POINT_ERROR</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">error_var</var>);</p> -<p class="Pp"><code class="Fn">KFAIL_POINT_EVAL</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">code</var>);</p> -<p class="Pp"><code class="Fn">KFAIL_POINT_DECLARE</code>(<var class="Fa" style="white-space: nowrap;">name</var>);</p> -<p class="Pp"><code class="Fn">KFAIL_POINT_DEFINE</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">flags</var>);</p> -<p class="Pp"><code class="Fn">KFAIL_POINT_GOTO</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">error_var</var>, - <var class="Fa" style="white-space: nowrap;">label</var>);</p> -<p class="Pp"><code class="Fn">KFAIL_POINT_RETURN</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">name</var>);</p> -<p class="Pp"><code class="Fn">KFAIL_POINT_RETURN_VOID</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">name</var>);</p> -<p class="Pp"><code class="Fn">KFAIL_POINT_SLEEP_CALLBACKS</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">pre_func</var>, - <var class="Fa" style="white-space: nowrap;">pre_arg</var>, - <var class="Fa" style="white-space: nowrap;">post_func</var>, - <var class="Fa" style="white-space: nowrap;">post_arg</var>, - <var class="Fa" style="white-space: nowrap;">code</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Fail points are used to add code points where errors may be - injected in a user controlled fashion. Fail points provide a convenient - wrapper around user-provided error injection code, providing a - <a class="Xr">sysctl(9)</a> MIB, and a parser for that MIB that describes - how the error injection code should fire.</p> -<p class="Pp" id="KFAIL_POINT_CODE">The base fail point macro is - <a class="permalink" href="#KFAIL_POINT_CODE"><code class="Fn">KFAIL_POINT_CODE</code></a>() - where <var class="Fa">parent</var> is a sysctl tree (frequently - <b class="Sy">DEBUG_FP</b> for kernel fail points, but various subsystems - may wish to provide their own fail point trees), and - <var class="Fa">name</var> is the name of the MIB in that tree, and - <var class="Fa">code</var> is the error injection code. The - <var class="Fa">code</var> argument does not require braces, but it is - considered good style to use braces for any multi-line code arguments. - Inside the <var class="Fa">code</var> argument, the evaluation of - <a class="permalink" href="#RETURN_VALUE"><b class="Sy" id="RETURN_VALUE">RETURN_VALUE</b></a> - is derived from the <code class="Fn">return</code>() value set in the sysctl - MIB.</p> -<p class="Pp" id="KFAIL_POINT_CODE_FLAGS">Additionally, - <a class="permalink" href="#KFAIL_POINT_CODE_FLAGS"><code class="Fn">KFAIL_POINT_CODE_FLAGS</code></a>() - provides a <var class="Fa">flags</var> argument which controls the fail - point's behaviour. This can be used to e.g., mark the fail point's context - as non-sleepable, which causes the <b class="Sy">sleep</b> action to be - coerced to a busy wait. The supported flags are:</p> -<dl class="Bl-ohang Bd-indent"> - <dt>FAIL_POINT_USE_TIMEOUT_PATH</dt> - <dd>Rather than sleeping on a <code class="Fn">sleep</code>() call, just fire - the post-sleep function after a timeout fires.</dd> - <dt>FAIL_POINT_NONSLEEPABLE</dt> - <dd>Mark the fail point as being in a non-sleepable context, which coerces - <code class="Fn">sleep</code>() calls to <code class="Fn">delay</code>() - calls.</dd> -</dl> -<p class="Pp" id="KFAIL_POINT_CODE_COND">Likewise, - <a class="permalink" href="#KFAIL_POINT_CODE_COND"><code class="Fn">KFAIL_POINT_CODE_COND</code></a>() - supplies a <var class="Fa">cond</var> argument, which allows you to set the - condition under which the fail point's code may fire. This is equivalent - to:</p> -<div class="Bd Pp Li"> -<pre> if (cond) - KFAIL_POINT_CODE_FLAGS(...); - -</pre> -</div> -See <a class="Sx" href="#SYSCTL_VARIABLES">SYSCTL VARIABLES</a> below. -<p class="Pp" id="KFAIL_POINT_*">The remaining - <a class="permalink" href="#KFAIL_POINT_*"><code class="Fn">KFAIL_POINT_*</code></a>() - macros are wrappers around common error injection paths:</p> -<dl class="Bl-inset"> - <dt id="KFAIL_POINT_RETURN"><a class="permalink" href="#KFAIL_POINT_RETURN"><code class="Fn">KFAIL_POINT_RETURN</code></a>(<var class="Fa">parent</var>, - <var class="Fa">name</var>)</dt> - <dd>is the equivalent of <b class="Sy">KFAIL_POINT_CODE(..., return - RETURN_VALUE)</b></dd> - <dt id="KFAIL_POINT_RETURN_VOID"><a class="permalink" href="#KFAIL_POINT_RETURN_VOID"><code class="Fn">KFAIL_POINT_RETURN_VOID</code></a>(<var class="Fa">parent</var>, - <var class="Fa">name</var>)</dt> - <dd>is the equivalent of <b class="Sy">KFAIL_POINT_CODE(..., return)</b></dd> - <dt id="KFAIL_POINT_ERROR"><a class="permalink" href="#KFAIL_POINT_ERROR"><code class="Fn">KFAIL_POINT_ERROR</code></a>(<var class="Fa">parent</var>, - <var class="Fa">name</var>, <var class="Fa">error_var</var>)</dt> - <dd>is the equivalent of <b class="Sy">KFAIL_POINT_CODE(..., error_var = - RETURN_VALUE)</b></dd> - <dt id="KFAIL_POINT_GOTO"><a class="permalink" href="#KFAIL_POINT_GOTO"><code class="Fn">KFAIL_POINT_GOTO</code></a>(<var class="Fa">parent</var>, - <var class="Fa">name</var>, <var class="Fa">error_var</var>, - <var class="Fa">label</var>)</dt> - <dd>is the equivalent of <b class="Sy">KFAIL_POINT_CODE(..., { error_var = - RETURN_VALUE; goto label;})</b></dd> -</dl> -<p class="Pp">You can also introduce fail points by separating the declaration, - definition, and evaluation portions.</p> -<dl class="Bl-inset"> - <dt id="KFAIL_POINT_DECLARE"><a class="permalink" href="#KFAIL_POINT_DECLARE"><code class="Fn">KFAIL_POINT_DECLARE</code></a>(<var class="Fa">name</var>)</dt> - <dd>is used to declare the <b class="Sy">fail_point</b> struct.</dd> - <dt id="KFAIL_POINT_DEFINE"><a class="permalink" href="#KFAIL_POINT_DEFINE"><code class="Fn">KFAIL_POINT_DEFINE</code></a>(<var class="Fa">parent</var>, - <var class="Fa">name</var>, <var class="Fa">flags</var>)</dt> - <dd>defines and initializes the <b class="Sy">fail_point</b> and sets up its - <a class="Xr">sysctl(9)</a>.</dd> - <dt id="KFAIL_POINT_EVAL"><a class="permalink" href="#KFAIL_POINT_EVAL"><code class="Fn">KFAIL_POINT_EVAL</code></a>(<var class="Fa">name</var>, - <var class="Fa">code</var>)</dt> - <dd>is used at the point that the fail point is executed.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYSCTL_VARIABLES"><a class="permalink" href="#SYSCTL_VARIABLES">SYSCTL - VARIABLES</a></h1> -<p class="Pp">The <code class="Fn">KFAIL_POINT_*</code>() macros add sysctl MIBs - where specified. Many base kernel MIBs can be found in the - <a class="permalink" href="#debug.fail_point"><b class="Sy" id="debug.fail_point">debug.fail_point</b></a> - tree (referenced in code by <b class="Sy">DEBUG_FP</b>).</p> -<p class="Pp">The sysctl variable may be set in a number of ways:</p> -<div class="Bd Pp Li"> -<pre> [<pct>%][<cnt>*]<type>[(args...)][-><more terms>]</pre> -</div> -<p class="Pp">The <type> argument specifies which action to take; it can - be one of:</p> -<dl class="Bl-tag"> - <dt id="off"><a class="permalink" href="#off"><b class="Sy">off</b></a></dt> - <dd>Take no action (does not trigger fail point code)</dd> - <dt id="return"><a class="permalink" href="#return"><b class="Sy">return</b></a></dt> - <dd>Trigger fail point code with specified argument</dd> - <dt id="sleep"><a class="permalink" href="#sleep"><b class="Sy">sleep</b></a></dt> - <dd>Sleep the specified number of milliseconds</dd> - <dt id="panic"><a class="permalink" href="#panic"><b class="Sy">panic</b></a></dt> - <dd>Panic</dd> - <dt id="break"><a class="permalink" href="#break"><b class="Sy">break</b></a></dt> - <dd>Break into the debugger, or trap if there is no debugger support</dd> - <dt id="print"><a class="permalink" href="#print"><b class="Sy">print</b></a></dt> - <dd>Print that the fail point executed</dd> - <dt id="pause"><a class="permalink" href="#pause"><b class="Sy">pause</b></a></dt> - <dd>Threads sleep at the fail point until the fail point is set to - <b class="Sy">off</b></dd> - <dt id="yield"><a class="permalink" href="#yield"><b class="Sy">yield</b></a></dt> - <dd>Thread yields the cpu when the fail point is evaluated</dd> - <dt id="delay"><a class="permalink" href="#delay"><b class="Sy">delay</b></a></dt> - <dd>Similar to sleep, but busy waits the cpu. (Useful in non-sleepable - contexts.)</dd> -</dl> -<p class="Pp">The <pct>% and <cnt>* modifiers prior to <type> - control when <type> is executed. The <pct>% form (e.g. - "1.2%") can be used to specify a probability that <type> - will execute. This is a decimal in the range (0, 100] which can specify up - to 1/10,000% precision. The <cnt>* form (e.g. "5*") can be - used to specify the number of times <type> should be executed before - this <term> is disabled. Only the last probability and the last count - are used if multiple are specified, i.e. "1.2%2%" is the same as - "2%". When both a probability and a count are specified, the - probability is evaluated before the count, i.e. "2%5*" means - "2% of the time, but only 5 times total".</p> -<p class="Pp" id="return~2">The operator -> can be used to express cascading - terms. If you specify <term1>-><term2>, it means that if - <term1> does not ‘<code class="Li">execute</code>’, - <term2> is evaluated. For the purpose of this operator, the - <a class="permalink" href="#return~2"><code class="Fn">return</code></a>() - and <code class="Fn">print</code>() operators are the only types that - cascade. A <code class="Fn">return</code>() term only cascades if the code - executes, and a <code class="Fn">print</code>() term only cascades when - passed a non-zero argument. A pid can optionally be specified. The fail - point term is only executed when invoked by a process with a matching - p_pid.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<dl class="Bl-tag"> - <dt id="sysctl"><a class="permalink" href="#sysctl"><b class="Sy">sysctl - debug.fail_point.foobar="2.1%return(5)"</b></a></dt> - <dd>21/1000ths of the time, execute <var class="Fa">code</var> with - RETURN_VALUE set to 5.</dd> - <dt id="sysctl~2"><a class="permalink" href="#sysctl~2"><b class="Sy">sysctl - debug.fail_point.foobar="2%return(5)->5%return(22)"</b></a></dt> - <dd>2/100ths of the time, execute <var class="Fa">code</var> with RETURN_VALUE - set to 5. If that does not happen, 5% of the time execute - <var class="Fa">code</var> with RETURN_VALUE set to 22.</dd> - <dt id="sysctl~3"><a class="permalink" href="#sysctl~3"><b class="Sy">sysctl - debug.fail_point.foobar="5*return(5)->0.1%return(22)"</b></a></dt> - <dd>For 5 times, return 5. After that, 1/1000th of the time, return 22.</dd> - <dt id="sysctl~4"><a class="permalink" href="#sysctl~4"><b class="Sy">sysctl - debug.fail_point.foobar="0.1%5*return(5)"</b></a></dt> - <dd>Return 5 for 1 in 1000 executions, but only 5 times total.</dd> - <dt id="sysctl~5"><a class="permalink" href="#sysctl~5"><b class="Sy">sysctl - debug.fail_point.foobar="1%*sleep(50)"</b></a></dt> - <dd>1/100th of the time, sleep 50ms.</dd> - <dt id="sysctl~6"><a class="permalink" href="#sysctl~6"><b class="Sy">sysctl - debug.fail_point.foobar="1*return(5)[pid 1234]"</b></a></dt> - <dd>Return 5 once, when pid 1234 executes the fail point.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by</p> -<p class="Pp"><span class="An">Matthew Bryan</span> - <<a class="Mt" href="mailto:matthew.bryan@isilon.com">matthew.bryan@isilon.com</a>> - and</p> -<p class="Pp"><span class="An">Zach Loafman</span> - <<a class="Mt" href="mailto:zml@FreeBSD.org">zml@FreeBSD.org</a>>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CAVEATS"><a class="permalink" href="#CAVEATS">CAVEATS</a></h1> -<p class="Pp">It is easy to shoot yourself in the foot by setting fail points - too aggressively or setting too many in combination. For example, forcing - <code class="Fn">malloc</code>() to fail consistently is potentially harmful - to uptime.</p> -<p class="Pp" id="FAIL_POINT_NONSLEEPABLE">The <code class="Fn">sleep</code>() - sysctl setting may not be appropriate in all situations. Currently, - <code class="Fn">fail_point_eval</code>() does not verify whether the - context is appropriate for calling <code class="Fn">msleep</code>(). You can - force it to evaluate a <b class="Sy">sleep</b> action as a - <b class="Sy">delay</b> action by specifying the - <a class="permalink" href="#FAIL_POINT_NONSLEEPABLE"><b class="Sy">FAIL_POINT_NONSLEEPABLE</b></a> - flag at the point the fail point is declared.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 6, 2019</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/fdt_pinctrl.9 3.html b/static/freebsd/man9/fdt_pinctrl.9 3.html deleted file mode 100644 index 4e0102b7..00000000 --- a/static/freebsd/man9/fdt_pinctrl.9 3.html +++ /dev/null @@ -1,174 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">fdt_pinctrl(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">fdt_pinctrl(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">fdt_pinctrl</code> — - <span class="Nd">helper functions for FDT pinmux controller - drivers</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">dev/fdt/fdt_pinctrl.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">fdt_pinctrl_configure</code>(<var class="Fa" style="white-space: nowrap;">device_t - client</var>, <var class="Fa" style="white-space: nowrap;">u_int - index</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">fdt_pinctrl_configure_by_name</code>(<var class="Fa" style="white-space: nowrap;">device_t - client</var>, <var class="Fa" style="white-space: nowrap;">const char * - name</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">fdt_pinctrl_register</code>(<var class="Fa" style="white-space: nowrap;">device_t - pinctrl</var>, <var class="Fa" style="white-space: nowrap;">const char - *pinprop</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">fdt_pinctrl_configure_tree</code>(<var class="Fa" style="white-space: nowrap;">device_t - pinctrl</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><a class="Xr">fdt_pinctrl(4)</a> provides an API for manipulating - I/O pin configurations on pinmux controllers and pinmux clients. On the - controller side, the standard newbus probe and attach methods are - implemented. As part of handling attach, it calls the - <a class="permalink" href="#fdt_pinctrl_register"><code class="Fn" id="fdt_pinctrl_register">fdt_pinctrl_register</code></a>() - function to register itself as a pinmux controller. Then - <code class="Fn">fdt_pinctrl_configure_tree</code>() is used to walk the - device tree and configure pins specified by the pinctrl-0 property for all - active devices. The driver also implements the - <code class="Fn">fdt_pinctrl_configure</code>() method, which allows client - devices to change their pin configurations after startup. If a client device - requires a pin configuration change at some point of its lifecycle, it uses - the <code class="Fn">fdt_pinctrl_configure</code>() or - <code class="Fn">fdt_pinctrl_configure_by_name</code>() functions.</p> -<p class="Pp" id="fdt_pinctrl_configure"><a class="permalink" href="#fdt_pinctrl_configure"><code class="Fn">fdt_pinctrl_configure</code></a>() - is used by client device <var class="Fa">client</var> to request a pin - configuration described by the pinctrl-N property with index - <var class="Fa">index</var>.</p> -<p class="Pp" id="fdt_pinctrl_configure_by_name"><a class="permalink" href="#fdt_pinctrl_configure_by_name"><code class="Fn">fdt_pinctrl_configure_by_name</code></a>() - is used by client device <var class="Fa">client</var> to request the pin - configuration with name <var class="Fa">name</var>.</p> -<p class="Pp" id="fdt_pinctrl_register~2"><a class="permalink" href="#fdt_pinctrl_register~2"><code class="Fn">fdt_pinctrl_register</code></a>() - registers a pinctrl driver so that it can be used by other devices which - call <code class="Fn">fdt_pinctrl_configure</code>() or - <code class="Fn">fdt_pinctrl_configure_by_name</code>(). It also registers - each child node of the pinctrl driver's node which contains a property with - the name given in <var class="Fa">pinprop</var>. If - <var class="Fa">pinprop</var> is <code class="Dv">NULL</code>, every - descendant node is registered. It is possible for the driver to register - itself as a pinmux controller for more than one pin property type by calling - <code class="Fn">fdt_pinctrl_register</code>() multiple types.</p> -<p class="Pp" id="fdt_pinctrl_configure_tree"><a class="permalink" href="#fdt_pinctrl_configure_tree"><code class="Fn">fdt_pinctrl_configure_tree</code></a>() - walks through enabled devices in the device tree. If the pinctrl-0 property - contains references to child nodes of the specified pinctrl device, their - pins are configured.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<div class="Bd Li"> -<pre>static int -foo_configure_pins(device_t dev, phandle_t cfgxref) -{ - phandle_t cfgnode; - uint32_t *pins, *functions; - int npins, nfunctions; - - cfgnode = OF_node_from_xref(cfgxref); - pins = NULL; - npins = OF_getencprop_alloc_multi(cfgnode, "foo,pins", sizeof(*pins), - (void **)&pins); - functions = NULL; - nfunctions = OF_getencprop_alloc_multi(cfgnode, "foo,functions", - sizeof(*functions), (void **)&functions); - ... -} - -static int -foo_is_gpio(device_t dev, device_t gpiodev, bool *is_gpio) -{ - return (foo_is_pin_func_gpio(is_gpio)); -} - -static int -foo_set_flags(device_t dev, device_t gpiodev, uint32_t pin, uint32_t flags) -{ - int rv; - - rv = foo_is_pin_func_gpio(is_gpio); - if (rv != 0) - return (rv); - foo_set_flags(pin, flags); - return (0); -} - -static int -foo_get_flags(device_t dev, device_t gpiodev, uint32_t pin, uint32_t *flags) -{ - int rv; - - rv = foo_is_pin_func_gpio(is_gpio); - if (rv != 0) - return (rv); - foo_get_flags(pin, flags); - return (0); -} - -static int -foo_attach(device_t dev) -{ - ... - - fdt_pinctrl_register(dev, "foo,pins"); - /* - * It is possible to register more than one pinprop handler - */ - fdt_pinctrl_register(dev, "bar,pins"); - fdt_pinctrl_configure_tree(dev); - - return (0); -} - -static device_method_t foo_methods[] = { - ... - - /* fdt_pinctrl interface */ - DEVMETHOD(fdt_pinctrl_configure, foo_configure_pins), - DEVMETHOD(fdt_pinctrl_is_gpio, foo_is_gpio), - DEVMETHOD(fdt_pinctrl_set_flags, foo_set_flags), - DEVMETHOD(fdt_pinctrl_get_flags, foo_get_flags), - - /* Terminate method list */ - DEVMETHOD_END -}; - -DRIVER_MODULE(foo, simplebus, foo_driver, foo_devclass, NULL, NULL);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">fdt_pinctrl(4)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Oleksandr - Tymoshenko</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 23, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/fetch.9 3.html b/static/freebsd/man9/fetch.9 3.html deleted file mode 100644 index 05657272..00000000 --- a/static/freebsd/man9/fetch.9 3.html +++ /dev/null @@ -1,130 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">FETCH(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">FETCH(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">fetch</code>, <code class="Nm">fubyte</code>, - <code class="Nm">fuword</code>, <code class="Nm">fuword16</code>, - <code class="Nm">fuword32</code>, <code class="Nm">fuword64</code>, - <code class="Nm">fueword</code>, <code class="Nm">fueword32</code>, - <code class="Nm">fueword64</code> — <span class="Nd">fetch data from - user-space</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">fubyte</code>(<var class="Fa" style="white-space: nowrap;">volatile - const void *base</var>);</p> -<p class="Pp"><var class="Ft">long</var> - <br/> - <code class="Fn">fuword</code>(<var class="Fa" style="white-space: nowrap;">volatile - const void *base</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">fuword16</code>(<var class="Fa" style="white-space: nowrap;">volatile - const void *base</var>);</p> -<p class="Pp"><var class="Ft">int32_t</var> - <br/> - <code class="Fn">fuword32</code>(<var class="Fa" style="white-space: nowrap;">volatile - const void *base</var>);</p> -<p class="Pp"><var class="Ft">int64_t</var> - <br/> - <code class="Fn">fuword64</code>(<var class="Fa" style="white-space: nowrap;">volatile - const void *base</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">fueword</code>(<var class="Fa" style="white-space: nowrap;">volatile - const void *base</var>, <var class="Fa" style="white-space: nowrap;">long - *val</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">fueword32</code>(<var class="Fa" style="white-space: nowrap;">volatile - const void *base</var>, <var class="Fa" style="white-space: nowrap;">int32_t - *val</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">fueword64</code>(<var class="Fa" style="white-space: nowrap;">volatile - const void *base</var>, <var class="Fa" style="white-space: nowrap;">int64_t - *val</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">fetch</code> functions are designed to copy - small amounts of data from user-space of the current process. If the user - address is naturally aligned, then the operation will be performed - atomically. Otherwise it may fail or be performed non-atomically, depending - on the platform.</p> -<p class="Pp">The <code class="Nm">fetch</code> routines provide the following - functionality:</p> -<dl class="Bl-tag"> - <dt id="fubyte"><a class="permalink" href="#fubyte"><code class="Fn">fubyte</code></a>()</dt> - <dd>Fetches a byte of data from the user-space address - <span class="Pa">base</span>. The byte read is zero-extended into the - results variable.</dd> - <dt><code class="Fn">fuword</code>()</dt> - <dd>Fetches a word of data (long) from the user-space address - <span class="Pa">base</span>.</dd> - <dt id="fuword16"><a class="permalink" href="#fuword16"><code class="Fn">fuword16</code></a>()</dt> - <dd>Fetches 16 bits of data from the user-space address - <span class="Pa">base</span>. The half-word read is zero-extended into the - results variable.</dd> - <dt><code class="Fn">fuword32</code>()</dt> - <dd>Fetches 32 bits of data from the user-space address - <span class="Pa">base</span>.</dd> - <dt><code class="Fn">fuword64</code>()</dt> - <dd>Fetches 64 bits of data from the user-space address - <span class="Pa">base</span>.</dd> - <dt id="fueword"><a class="permalink" href="#fueword"><code class="Fn">fueword</code></a>()</dt> - <dd>Fetches a word of data (long) from the user-space address - <span class="Pa">base</span> and stores the result in the variable pointed - by <span class="Pa">val</span>.</dd> - <dt id="fueword32"><a class="permalink" href="#fueword32"><code class="Fn">fueword32</code></a>()</dt> - <dd>Fetches 32 bits of data from the user-space address - <span class="Pa">base</span> and stores the result in the variable pointed - by <span class="Pa">val</span>.</dd> - <dt id="fueword64"><a class="permalink" href="#fueword64"><code class="Fn">fueword64</code></a>()</dt> - <dd>Fetches 64 bits of data from the user-space address - <span class="Pa">base</span> and stores the result in the variable pointed - by <span class="Pa">val</span>.</dd> -</dl> -<p class="Pp" id="fuword">The callers of - <a class="permalink" href="#fuword"><code class="Fn">fuword</code></a>(), - <a class="permalink" href="#fuword32"><code class="Fn" id="fuword32">fuword32</code></a>() - and - <a class="permalink" href="#fuword64"><code class="Fn" id="fuword64">fuword64</code></a>() - functions cannot distinguish between -1 read from userspace and function - failure.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">fubyte</code>(), - <code class="Fn">fuword</code>(), <code class="Fn">fuword16</code>(), - <code class="Fn">fuword32</code>(), and <code class="Fn">fuword64</code>() - functions return the data fetched or -1 on failure. The - <code class="Fn">fueword</code>(), <code class="Fn">fueword32</code>() and - <code class="Fn">fueword64</code>() functions return 0 on success and -1 on - failure.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">copy(9)</a>, <a class="Xr">store(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 22, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/firmware.9 3.html b/static/freebsd/man9/firmware.9 3.html deleted file mode 100644 index 06e4ca52..00000000 --- a/static/freebsd/man9/firmware.9 3.html +++ /dev/null @@ -1,319 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">FIRMWARE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">FIRMWARE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">firmware_register</code>, - <code class="Nm">firmware_unregister</code>, - <code class="Nm">firmware_get</code>, - <code class="Nm">firmware_get_flags</code>, - <code class="Nm">firmware_put</code> — <span class="Nd">firmware - image loading and management</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/linker.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/firmware.h</a>></code></p> -<div class="Bd Pp Li"> -<pre>struct firmware { - const char *name; /* system-wide name */ - const void *data; /* location of image */ - size_t datasize; /* size of image in bytes */ - unsigned int version; /* version of the image */ -};</pre> -</div> -<br/> -<var class="Ft">const struct firmware *</var> -<br/> -<code class="Fn">firmware_register</code>(<var class="Fa">const char - *imagename</var>, <var class="Fa">const void *data</var>, - <var class="Fa">size_t datasize</var>, <var class="Fa">unsigned int - version</var>, <var class="Fa">const struct firmware *parent</var>); -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">firmware_unregister</code>(<var class="Fa" style="white-space: nowrap;">const - char *imagename</var>);</p> -<p class="Pp"><var class="Ft">const struct firmware *</var> - <br/> - <code class="Fn">firmware_get</code>(<var class="Fa" style="white-space: nowrap;">const - char *imagename</var>);</p> -<p class="Pp"><var class="Ft">const struct firmware *</var> - <br/> - <code class="Fn">firmware_get_flags</code>(<var class="Fa" style="white-space: nowrap;">const - char *imagename</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">firmware_put</code>(<var class="Fa" style="white-space: nowrap;">const - struct firmware *fp</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">firmware</code> abstraction provides a - convenient interface for loading <code class="Nm">firmware images</code> - into the kernel, and for accessing such images from kernel components.</p> -<p class="Pp">A <code class="Nm">firmware image</code> (or - <code class="Nm">image</code> for brevity) is an opaque block of data - residing in kernel memory. It is associated to a unique - <code class="Nm">imagename</code> which constitutes a search key, and to an - integer <code class="Nm">version</code> number, which is also an opaque - piece of information for the firmware subsystem.</p> -<p class="Pp" id="firmware_register">An image is registered with the - <code class="Nm">firmware</code> subsystem by calling the function - <a class="permalink" href="#firmware_register"><code class="Fn">firmware_register</code></a>(), - and unregistered by calling <code class="Fn">firmware_unregister</code>(). - These functions are usually (but not exclusively) called by specially - crafted kernel modules that contain the firmware image. The modules can be - statically compiled in the kernel, or loaded by - <span class="Pa">/boot/loader</span>, manually at runtime, or on demand by - the firmware subsystem.</p> -<p class="Pp">Firmware binary files may also be loaded directly rather than - embedded into kernel modules.</p> -<p class="Pp" id="firmware_get"><code class="Nm">Clients</code> of the firmware - subsystem can request access to a given image by calling the function - <a class="permalink" href="#firmware_get"><code class="Fn">firmware_get</code></a>() - with the <code class="Nm">imagename</code> they want as an argument, or by - calling - <a class="permalink" href="#firmware_get_flags"><code class="Fn" id="firmware_get_flags">firmware_get_flags</code></a>() - with the <code class="Nm">imagename</code> and <code class="Nm">flags</code> - they want as an arguments. If a matching image is not already registered, - the firmware subsystem will try to load it using the mechanisms specified - below (typically, a kernel module with - <code class="Nm">firmware_register</code> the same name as the image).</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="API_DESCRIPTION"><a class="permalink" href="#API_DESCRIPTION">API - DESCRIPTION</a></h1> -<p class="Pp">The kernel <code class="Nm">firmware_register</code> firmware API - is made of the following functions:</p> -<p class="Pp" id="firmware_register~2"><a class="permalink" href="#firmware_register~2"><code class="Fn">firmware_register</code></a>() - registers with the kernel an image of size <code class="Nm">datasize</code> - located at address <code class="Nm">data</code>, under the name - <code class="Nm">imagename</code>.</p> -<p class="Pp">The function returns NULL on error (e.g. because an image with the - same name already exists, or the image table is full), or a - <var class="Ft">const struct firmware *</var> pointer to the image - requested.</p> -<p class="Pp" id="firmware_unregister"><a class="permalink" href="#firmware_unregister"><code class="Fn">firmware_unregister</code></a>() - tries to unregister the firmware image <code class="Nm">imagename</code> - from the system. The function is successful and returns 0 if there are no - pending references to the image, otherwise it does not unregister the image - and returns EBUSY.</p> -<p class="Pp" id="firmware_get~2"><a class="permalink" href="#firmware_get~2"><code class="Fn">firmware_get</code></a>() - and - <a class="permalink" href="#firmware_get_flags~2"><code class="Fn" id="firmware_get_flags~2">firmware_get_flags</code></a>() - return the requested firmware image. The <var class="Fa">flags</var> - argument may be set to <code class="Dv">FIRMWARE_GET_NOWARN</code> to - indicate that errors on firmware load or registration should only be logged - in case of <code class="Nm">booverbose</code>. If the image is not yet - registered with the system, the functions try to load it. This involves the - linker subsystem and disk access, so <code class="Fn">firmware_get</code>() - or <code class="Fn">firmware_get_flags</code>() must not be called with any - locks (except for <var class="Va">Giant</var>). Note also that if the - firmware image is loaded from a filesystem it must already be mounted. In - particular this means that it may be necessary to defer requests from a - driver attach method unless it is known the root filesystem is already - mounted.</p> -<p class="Pp" id="firmware_get~3">On success, - <a class="permalink" href="#firmware_get~3"><code class="Fn">firmware_get</code></a>() - and - <a class="permalink" href="#firmware_get_flags~3"><code class="Fn" id="firmware_get_flags~3">firmware_get_flags</code></a>() - return a pointer to the image description and increase the reference count - for this image. On failure, the functions return NULL.</p> -<p class="Pp" id="firmware_put"><a class="permalink" href="#firmware_put"><code class="Fn">firmware_put</code></a>() - drops a reference to a firmware image. The <var class="Fa">flags</var> - argument may be set to <code class="Dv">FIRMWARE_UNLOAD</code> to indicate - that firmware_put is free to reclaim resources associated with the firmware - image if this is the last reference. By default a firmware image will be - deferred to a <a class="Xr">taskqueue(9)</a> thread so the call may be done - while holding a lock. In certain cases, such as on driver detach, this - cannot be allowed.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="FIRMWARE_LOADING_VIA_MODULES"><a class="permalink" href="#FIRMWARE_LOADING_VIA_MODULES">FIRMWARE - LOADING VIA MODULES</a></h1> -<p class="Pp">As mentioned before, any component of the system can register - firmware images at any time by simply calling - <code class="Fn">firmware_register</code>().</p> -<p class="Pp" id="firmware_register~3">This is typically done when a module - containing a firmware image is given control, whether compiled in, or - preloaded by <span class="Pa">/boot/loader</span>, or manually loaded with - <a class="Xr">kldload(8)</a>. However, a system can implement additional - mechanisms to bring these images into memory before calling - <a class="permalink" href="#firmware_register~3"><code class="Fn">firmware_register</code></a>().</p> -<p class="Pp" id="firmware_get~4">When - <a class="permalink" href="#firmware_get~4"><code class="Fn">firmware_get</code></a>() - or - <a class="permalink" href="#firmware_get_flags~4"><code class="Fn" id="firmware_get_flags~4">firmware_get_flags</code></a>() - does not find the requested image, it tries to load it using one of the - available loading mechanisms. At the moment, there is only one, namely - <code class="Nm">Loadable kernel modules</code>.</p> -<p class="Pp">A firmware image named <code class="Nm">foo</code> is looked up by - trying to load the module named <code class="Nm">foo.ko</code>, using the - facilities described in <a class="Xr">kld(4)</a>. In particular, images are - looked up in the directories specified by the sysctl variable - <code class="Nm">kern.module_path</code> which on most systems defaults to - <span class="Pa">/boot/kernel;/boot/modules</span>.</p> -<p class="Pp" id="firmware_get~5">Note that in case a module contains multiple - images, the caller should first request a - <a class="permalink" href="#firmware_get~5"><code class="Fn">firmware_get</code></a>() - or - <a class="permalink" href="#firmware_get_flags~5"><code class="Fn" id="firmware_get_flags~5">firmware_get_flags</code></a>() - for the first image contained in the module, followed by requests for the - other images.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUILDING_FIRMWARE_LOADABLE_MODULES"><a class="permalink" href="#BUILDING_FIRMWARE_LOADABLE_MODULES">BUILDING - FIRMWARE LOADABLE MODULES</a></h1> -<p class="Pp">A firmware module is built by embedding the - <code class="Nm">firmware image</code> into a suitable loadable kernel - module that calls <code class="Fn">firmware_register</code>() on loading, - and <code class="Fn">firmware_unregister</code>() on unloading.</p> -<p class="Pp">Various system scripts and makefiles let you build a module by - simply writing a Makefile with the following entries:</p> -<div class="Bd Pp Li"> -<pre> - KMOD= imagename - FIRMWS= image_file:imagename[:version] - .include <bsd.kmod.mk> - -</pre> -</div> -where KMOD is the basename of the module; FIRMWS is a list of colon-separated - tuples indicating the image_file's to be embedded in the module, the imagename - and version of each firmware image. -<p class="Pp">If you need to embed firmware images into a system, you should - write appropriate entries in the <files.arch> or <files> file, - e.g. this example is from <code class="Nm">sys/conf/files</code></p> -<div class="Bd Pp Li"> -<pre>iwn1000fw.c optional iwn1000fw | iwnfw \ - compile-with "${AWK} -f $S/tools/fw_stub.awk iwn1000.fw:iwn1000fw -miwn1000fw -c${.TARGET}" \ - no-ctfconvert no-implicit-rule before-depend local \ - clean "iwn1000fw.c" -# -# NB: ld encodes the path in the binary symbols generated for the -# firmware image so link the file to the object directory to -# get known values for reference in the _fw.c file. -# -iwn1000fw.fwo optional iwn1000fw | iwnfw \ - dependency "iwn1000.fw" \ - compile-with "${NORMAL_FWO}" \ - no-implicit-rule \ - clean "iwn1000fw.fwo"</pre> -</div> -<p class="Pp">Firmware was previously committed to the source tree as uuencoded - files, but this is no longer required; the binary firmware file should be - committed to the tree as provided by the vendor.</p> -<p class="Pp">Note that generating the firmware modules in this way requires the - availability of the following tools: <a class="Xr">awk(1)</a>, - <a class="Xr">make(1)</a>, the compiler and the linker.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOADING_BINARY_FIRMWARE_FILES"><a class="permalink" href="#LOADING_BINARY_FIRMWARE_FILES">LOADING - BINARY FIRMWARE FILES</a></h1> -<section class="Ss"> -<h2 class="Ss" id="Binary_Firmware_Format"><a class="permalink" href="#Binary_Firmware_Format">Binary - Firmware Format</a></h2> -<p class="Pp">Binary firmware files can also be loaded, either from - <span class="Pa">/boot/loader</span>, or when - <code class="Nm">firmware_get</code> cannot find the registered firmware - from a kernel module. Binary firmware files are raw binary files that the - creator of the firmware made. They offer an easier way to load firmware, but - one that lacks the full flexibility and generality of kernel modules with - the following restrictions:</p> -<ul class="Bl-bullet Bl-compact"> - <li>Binary firmware files only hold one set of firmware.</li> - <li>They do not offer kernel module dependencies to ensure they are loaded - automatically by the boot loader.</li> - <li>They cannot be compiled into the kernel.</li> - <li>The <code class="Nm">imagename</code> is identical to the full path name - used to load the module.</li> - <li>The version number is assumed to be zero.</li> -</ul> -</section> -<section class="Ss"> -<h2 class="Ss" id="Loading_from_/boot/loader"><a class="permalink" href="#Loading_from_/boot/loader">Loading - from <span class="Pa">/boot/loader</span></a></h2> -<p class="Pp">Binary firmware files may be loaded either from the command line - with “load -t firmware /boot/firmware/filename” or using the - <a class="Xr">loader.conf(5)</a> mechanism to load modules with a type of - “firmware” For example</p> -<div class="Bd Pp Li"> -<pre>wififw_load="YES" -wififw_name="/boot/firmware/wifi2034_fw.bin" -wififw_type="firmware"</pre> -</div> -</section> -<section class="Ss"> -<h2 class="Ss" id="On_demand_loading_from_firmware_get"><a class="permalink" href="#On_demand_loading_from_firmware_get">On - demand loading from <code class="Nm">firmware_get</code></a></h2> -<p class="Pp">If no kernel module with an embedded firmware image named - <code class="Nm">imagename</code> is loaded, then - <code class="Nm">imagename</code> will be appended to the module path (by - default <span class="Pa">/boot/firmware/</span>) and if that file exists, it - will be loaded and registered using - <code class="Nm">firmware_register</code> using the full path to the - filename as <code class="Nm">imagename</code>.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Searching_for_imagename"><a class="permalink" href="#Searching_for_imagename">Searching - for imagename</a></h2> -<p class="Pp"><code class="Nm">firmware_get</code> uses the following algorithm - to find firmware images:</p> -<ul class="Bl-bullet Bl-compact"> - <li>If an existing firmware image is registered for - <var class="Fa">imagename,</var> that image is returned.</li> - <li>If <var class="Fa">imagename</var> matches the trailing subpath of a - registered image with a full path, that image is returned.</li> - <li>The kernel linker searches for a kernel module named - <var class="Fa">imagename</var>. If a kernel module is found, it is - loaded, and the list of registered firmware images is searched again. If a - match is found, the matching image is returned.</li> - <li>The kernel searches for a file named <var class="Fa">imagename</var> in - the firmware image path (by default - <span class="Pa">/boot/firmware/</span>). If that file exists and can be - read, it contents are registered as a firmware image with the full path as - the <code class="Nm">imagename</code> and that firmware is returned. - Currently, there is an 8MB limit on the size of the firmware image. This - can be changed by by the sysctl variable - <code class="Nm">debug.max_firmware_size</code>.</li> -</ul> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">kld(4)</a>, <a class="Xr">module(9)</a></p> -<p class="Pp"><span class="Pa">/boot/firmware</span></p> -<p class="Pp"><span class="Pa">/usr/share/examples/kld/firmware</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">firmware</code> system was introduced in - <span class="Ux">FreeBSD 6.1</span>. Binary firmware loading was introduced - in <span class="Ux">FreeBSD 15.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Max Laier</span> - <<a class="Mt" href="mailto:mlaier@FreeBSD.org">mlaier@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 25, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/fpu_kern.9 3.html b/static/freebsd/man9/fpu_kern.9 3.html deleted file mode 100644 index 9d23f79c..00000000 --- a/static/freebsd/man9/fpu_kern.9 3.html +++ /dev/null @@ -1,192 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">FPU_KERN(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">FPU_KERN(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">fpu_kern</code> — - <span class="Nd">facility to use the FPU in the kernel</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">machine/fpu.h</a>></code></p> -<p class="Pp"><var class="Ft">struct fpu_kern_ctx *</var> - <br/> - <code class="Fn">fpu_kern_alloc_ctx</code>(<var class="Fa" style="white-space: nowrap;">u_int - flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">fpu_kern_free_ctx</code>(<var class="Fa" style="white-space: nowrap;">struct - fpu_kern_ctx *ctx</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">fpu_kern_enter</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>, <var class="Fa" style="white-space: nowrap;">struct - fpu_kern_ctx *ctx</var>, <var class="Fa" style="white-space: nowrap;">u_int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">fpu_kern_leave</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>, <var class="Fa" style="white-space: nowrap;">struct - fpu_kern_ctx *ctx</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">fpu_kern_thread</code>(<var class="Fa" style="white-space: nowrap;">u_int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">is_fpu_kern_thread</code>(<var class="Fa" style="white-space: nowrap;">u_int - flags</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">fpu_kern</code> family of functions allows - the use of FPU hardware in kernel code. Modern FPUs are not limited to - providing hardware implementation for floating point arithmetic; they offer - advanced accelerators for cryptography and other computational-intensive - algorithms. These facilities share registers with the FPU hardware.</p> -<p class="Pp">Typical kernel code does not need access to the FPU. Saving a - large register file on each entry to the kernel would waste time. When - kernel code uses the FPU, the current FPU state must be saved to avoid - corrupting the user-mode state, and vice versa.</p> -<p class="Pp">The management of the save and restore is automatic. The processor - catches accesses to the FPU registers when the non-current context tries to - access them. Explicit calls are required for the allocation of the save area - and the notification of the start and end of the code using the FPU.</p> -<p class="Pp" id="fpu_kern_alloc_ctx">The - <a class="permalink" href="#fpu_kern_alloc_ctx"><code class="Fn">fpu_kern_alloc_ctx</code></a>() - function allocates the memory used by <code class="Nm">fpu_kern</code> to - track the use of the FPU hardware state and the related software state. The - <code class="Fn">fpu_kern_alloc_ctx</code>() function requires the - <var class="Fa">flags</var> argument, which currently accepts the following - flags:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="FPU_KERN_NOWAIT"><a class="permalink" href="#FPU_KERN_NOWAIT"><code class="Dv">FPU_KERN_NOWAIT</code></a></dt> - <dd>Do not wait for the available memory if the request could not be satisfied - without sleep.</dd> - <dt>0</dt> - <dd>No special handling is required.</dd> -</dl> -</div> -<p class="Pp">The function returns the allocated context area, or - <var class="Va">NULL</var> if the allocation failed.</p> -<p class="Pp" id="fpu_kern_free_ctx">The - <a class="permalink" href="#fpu_kern_free_ctx"><code class="Fn">fpu_kern_free_ctx</code></a>() - function frees the context previously allocated by - <code class="Fn">fpu_kern_alloc_ctx</code>().</p> -<p class="Pp" id="fpu_kern_enter">The - <a class="permalink" href="#fpu_kern_enter"><code class="Fn">fpu_kern_enter</code></a>() - function designates the start of the region of kernel code where the use of - the FPU is allowed. Its arguments are:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt><var class="Fa">td</var></dt> - <dd>Currently must be <var class="Va">curthread</var>.</dd> - <dt><var class="Fa">ctx</var></dt> - <dd>The context save area previously allocated by - <code class="Fn">fpu_kern_alloc_ctx</code>() and not currently in use by - another call to <code class="Fn">fpu_kern_enter</code>().</dd> - <dt><var class="Fa">flags</var></dt> - <dd>This argument currently accepts the following flags: - <div class="Bd-indent"> - <dl class="Bl-tag"> - <dt id="FPU_KERN_NORMAL"><a class="permalink" href="#FPU_KERN_NORMAL"><code class="Dv">FPU_KERN_NORMAL</code></a></dt> - <dd>Indicates that the caller intends to access the full FPU state. Must - be specified currently.</dd> - <dt id="FPU_KERN_KTHR"><a class="permalink" href="#FPU_KERN_KTHR"><code class="Dv">FPU_KERN_KTHR</code></a></dt> - <dd>Indicates that no saving of the current FPU state should be performed, - if the thread called <a class="Xr">fpu_kern_thread(9)</a> function. - This is intended to minimize code duplication in callers which could - be used from both kernel thread and syscall contexts. The - <code class="Fn">fpu_kern_leave</code>() function correctly handles - such contexts.</dd> - <dt id="FPU_KERN_NOCTX"><a class="permalink" href="#FPU_KERN_NOCTX"><code class="Dv">FPU_KERN_NOCTX</code></a></dt> - <dd>Avoid nesting save area. If the flag is specified, the - <var class="Fa">ctx</var> must be passed as - <var class="Va">NULL</var>. The flag should only be used for really - short code blocks which can be executed in a critical section. It - avoids the need to allocate the FPU context by the cost of increased - system latency.</dd> - </dl> - </div> - </dd> -</dl> -</div> -<p class="Pp">The function does not sleep or block. It could cause an FPU trap - during execution, and on the first FPU access after the function returns, as - well as after each context switch. On i386 and amd64 this will be the - <code class="Nm">Device Not Available</code> exception (see Intel Software - Developer Manual for the reference).</p> -<p class="Pp" id="fpu_kern_leave">The - <a class="permalink" href="#fpu_kern_leave"><code class="Fn">fpu_kern_leave</code></a>() - function ends the region started by - <code class="Fn">fpu_kern_enter</code>(). It is erroneous to use the FPU in - the kernel before <code class="Fn">fpu_kern_enter</code>() or after - <code class="Fn">fpu_kern_leave</code>(). The function takes the - <var class="Fa">td</var> thread argument, which currently must be - <var class="Va">curthread</var>, and the <var class="Fa">ctx</var> context - pointer, previously passed to <code class="Fn">fpu_kern_enter</code>(). - After the function returns, the context may be freed or reused by another - invocation of <code class="Fn">fpu_kern_enter</code>(). The function always - returns 0.</p> -<p class="Pp" id="fpu_kern_thread">The - <a class="permalink" href="#fpu_kern_thread"><code class="Fn">fpu_kern_thread</code></a>() - function enables an optimization for threads which never leave to the - usermode. The current thread will reuse the usermode save area for the - kernel FPU state instead of requiring an explicitly allocated context. There - are no flags defined for the function, and no error states that the function - returns. Once this function has been called, neither - <code class="Fn">fpu_kern_enter</code>() nor - <code class="Fn">fpu_kern_leave</code>() is required to be called and the - fpu is available for use in the calling thread.</p> -<p class="Pp" id="is_fpu_kern_thread">The - <a class="permalink" href="#is_fpu_kern_thread"><code class="Fn">is_fpu_kern_thread</code></a>() - function returns the boolean indicating whether the current thread entered - the mode enabled by <code class="Fn">fpu_kern_thread</code>(). There is - currently no flags defined for the function, the return value is true if the - current thread have the permanent FPU save area, and false otherwise.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1> -<p class="Pp">The <code class="Nm">fpu_kern</code> is currently implemented only - for the i386, amd64, arm64, and powerpc architectures.</p> -<p class="Pp">There is no way to handle floating point exceptions raised from - kernel mode.</p> -<p class="Pp">The unused <var class="Fa">flags</var> arguments to the - <code class="Nm">fpu_kern</code> functions are to be extended to allow - specification of the set of the FPU hardware state used by the code region. - This would allow optimizations of saving and restoring the state.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">fpu_kern</code> facitily and this manual page - were written by <span class="An">Konstantin Belousov</span> - <<a class="Mt" href="mailto:kib@FreeBSD.org">kib@FreeBSD.org</a>>. The - arm64 support was added by - <br/> - <span class="An">Andrew Turner</span> - <<a class="Mt" href="mailto:andrew@FreeBSD.org">andrew@FreeBSD.org</a>>. - The powerpc support was added by - <br/> - <span class="An">Shawn Anastasio</span> - <<a class="Mt" href="mailto:sanastasio@raptorengineering.com">sanastasio@raptorengineering.com</a>>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp"><code class="Fn">fpu_kern_leave</code>() should probably have type - <var class="Ft">void</var> (like - <code class="Fn">fpu_kern_enter</code>()).</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 13, 2020</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/g_access.9 3.html b/static/freebsd/man9/g_access.9 3.html deleted file mode 100644 index 9c60e98a..00000000 --- a/static/freebsd/man9/g_access.9 3.html +++ /dev/null @@ -1,151 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">G_ACCESS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">G_ACCESS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">g_access</code> — <span class="Nd">control - access to GEOM consumers and their providers</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">geom/geom.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">g_access</code>(<var class="Fa" style="white-space: nowrap;">struct - g_consumer *cp</var>, <var class="Fa" style="white-space: nowrap;">int - dcr</var>, <var class="Fa" style="white-space: nowrap;">int dcw</var>, - <var class="Fa" style="white-space: nowrap;">int dce</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#g_access"><code class="Fn" id="g_access">g_access</code></a>() - function allows to open, close, and generally change access to the provider - which is attached to the given consumer <var class="Fa">cp</var>. The - arguments <var class="Fa">dcr</var>, <var class="Fa">dcw</var>, and - <var class="Fa">dce</var> represent relative read, write, and exclusive - access count changes. Read and write access counts are self explanatory, and - exclusive access counts deny write access to other interested parties. A - provider's access count is the sum of the access counts of all attached - consumers.</p> -<p class="Pp" id="g_access~2">After attaching a consumer to a provider with - <a class="Xr">g_attach(9)</a>, the - <a class="permalink" href="#g_access~2"><code class="Fn">g_access</code></a>() - function has to be called on the consumer before starting I/O requests.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RESTRICTIONS/CONDITIONS"><a class="permalink" href="#RESTRICTIONS/CONDITIONS">RESTRICTIONS/CONDITIONS</a></h1> -<p class="Pp">The consumer has to be attached to a provider.</p> -<p class="Pp">The intended change must not result in a negative access - count.</p> -<p class="Pp">No-operation is not permitted (<var class="Fa">dcr</var> = - <var class="Fa">dcw</var> = <var class="Fa">dce</var> = - <code class="Li">0</code>).</p> -<p class="Pp">The provider's geom must have an access method defined (e.g., - <var class="Va">gp->access</var>).</p> -<p class="Pp">The topology lock has to be held.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">g_access</code>() function returns 0 if - successful; otherwise an error code is returned. Note that - <code class="Fn">g_access</code>() cannot fail when the arguments - <var class="Fa">dcr</var>, <var class="Fa">dcw</var>, and - <var class="Fa">dce</var> are less than or equal to 0.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">Create a consumer, attach it to a given provider, gain read access - and read first sector.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>void -some_function(struct g_geom *mygeom, struct g_provider *pp) -{ - struct g_consumer *cp; - void *ptr; - int error; - - g_topology_assert(); - - /* Create new consumer on 'mygeom' geom. */ - cp = g_new_consumer(mygeom); - /* Attach newly created consumer to given provider. */ - if (g_attach(cp, pp) != 0) { - g_destroy_consumer(cp); - return; - } - /* Open provider for reading through our consumer. */ - error = g_access(cp, 1, 0, 0); - if (error != 0) { - printf("Cannot access provider: %s\n", error); - g_detach(cp); - g_destroy_consumer(cp); - return; - } - - /* - * Don't hold topology lock while reading. - */ - g_topology_unlock(); - ptr = g_read_data(cp, 0, pp->sectorsize, &error); - if (ptr == NULL) - printf("Error while reading: %d\n", error); - /* - * Do something useful with data. - */ - g_topology_lock(); - - /* Disconnect from provider (release access count). */ - g_access(cp, -1, 0, 0); - /* Detach from provider. */ - g_detach(cp); - /* Destroy consumer. */ - g_destroy_consumer(cp); -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp">Possible errors:</p> -<dl class="Bl-tag"> - <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt> - <dd>The function is trying to open a provider with an exclusive access count, - but it is already open for writing.</dd> - <dt id="EPERM~2">[<a class="permalink" href="#EPERM~2"><code class="Er">EPERM</code></a>]</dt> - <dd>The function is trying to open a provider for writing, but it is already - exclusively open.</dd> -</dl> -<p class="Pp">Any other error that can be returned by the provider's access - method.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">geom(4)</a>, - <a class="Xr">DECLARE_GEOM_CLASS(9)</a>, <a class="Xr">g_attach(9)</a>, - <a class="Xr">g_bio(9)</a>, <a class="Xr">g_consumer(9)</a>, - <a class="Xr">g_data(9)</a>, <a class="Xr">g_event(9)</a>, - <a class="Xr">g_geom(9)</a>, <a class="Xr">g_provider(9)</a>, - <a class="Xr">g_provider_by_name(9)</a>, - <a class="Xr">g_wither_geom(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Pawel Jakub - Dawidek</span> - <<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 16, 2004</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/g_attach.9 3.html b/static/freebsd/man9/g_attach.9 3.html deleted file mode 100644 index 21fb0f5f..00000000 --- a/static/freebsd/man9/g_attach.9 3.html +++ /dev/null @@ -1,139 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">G_ATTACH(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">G_ATTACH(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">g_attach</code>, <code class="Nm">g_detach</code> - — <span class="Nd">attach/detach GEOM consumers to/from - providers</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">geom/geom.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">g_attach</code>(<var class="Fa" style="white-space: nowrap;">struct - g_consumer *cp</var>, <var class="Fa" style="white-space: nowrap;">struct - g_provider *pp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">g_detach</code>(<var class="Fa" style="white-space: nowrap;">struct - g_consumer *cp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#g_attach"><code class="Fn" id="g_attach">g_attach</code></a>() - function attaches given consumer <var class="Fa">cp</var> to given provider - <var class="Fa">pp</var>, thus establishing a communication channel between - the consumer and the provider that allows to change access counts and - perform I/O operations.</p> -<p class="Pp" id="g_detach">The - <a class="permalink" href="#g_detach"><code class="Fn">g_detach</code></a>() - function detaches given consumer <var class="Fa">cp</var> from its - corresponding provider, tearing down the communication channel between - them.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RESTRICTIONS/CONDITIONS"><a class="permalink" href="#RESTRICTIONS/CONDITIONS">RESTRICTIONS/CONDITIONS</a></h1> -<p class="Pp"><code class="Fn">g_attach</code>():</p> -<ul class="Bl-item Bd-indent"> - <li>The consumer must not be attached to a provider.</li> - <li>The operation must not create a topology loop.</li> - <li>The topology lock has to be held.</li> -</ul> -<p class="Pp" id="g_detach~2"><a class="permalink" href="#g_detach~2"><code class="Fn">g_detach</code></a>():</p> -<ul class="Bl-item Bd-indent"> - <li>The consumer has to be attached.</li> - <li>The access count has to be 0.</li> - <li>There must be no active requests.</li> - <li>The topology lock has to be held.</li> -</ul> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">g_attach</code>() function returns 0 if - successful; otherwise an error code is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">Create a consumer, attach it to a given provider, gain read access - and clean up.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>void -some_function(struct g_geom *mygeom, struct g_provider *pp) -{ - struct g_consumer *cp; - - g_topology_assert(); - - /* Create new consumer on 'mygeom' geom. */ - cp = g_new_consumer(mygeom); - /* Attach newly created consumer to given provider. */ - if (g_attach(cp, pp) != 0) { - g_destroy_consumer(cp); - return; - } - /* Open provider for reading through our consumer. */ - if (g_access(cp, 1, 0, 0) != 0) { - g_detach(cp); - g_destroy_consumer(cp); - return; - } - - g_topology_unlock(); - /* - * Read data from provider. - */ - g_topology_lock(); - - /* Disconnect from provider (release access count). */ - g_access(cp, -1, 0, 0); - /* Detach from provider. */ - g_detach(cp); - /* Destroy consumer. */ - g_destroy_consumer(cp); -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp">Possible errors:</p> -<dl class="Bl-tag"> - <dt id="ELOOP">[<a class="permalink" href="#ELOOP"><code class="Er">ELOOP</code></a>]</dt> - <dd>The operation creates a topology loop.</dd> - <dt id="ENXIO">[<a class="permalink" href="#ENXIO"><code class="Er">ENXIO</code></a>]</dt> - <dd>Provider got orphaned.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">geom(4)</a>, - <a class="Xr">DECLARE_GEOM_CLASS(9)</a>, <a class="Xr">g_access(9)</a>, - <a class="Xr">g_bio(9)</a>, <a class="Xr">g_consumer(9)</a>, - <a class="Xr">g_data(9)</a>, <a class="Xr">g_event(9)</a>, - <a class="Xr">g_geom(9)</a>, <a class="Xr">g_provider(9)</a>, - <a class="Xr">g_provider_by_name(9)</a>, - <a class="Xr">g_wither_geom(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Pawel Jakub - Dawidek</span> - <<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 10, 2020</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/g_bio.9 3.html b/static/freebsd/man9/g_bio.9 3.html deleted file mode 100644 index fcd3ab31..00000000 --- a/static/freebsd/man9/g_bio.9 3.html +++ /dev/null @@ -1,270 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">G_BIO(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">G_BIO(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">g_new_bio</code>, - <code class="Nm">g_clone_bio</code>, <code class="Nm">g_destroy_bio</code>, - <code class="Nm">g_format_bio</code>, <code class="Nm">g_print_bio</code>, - <code class="Nm">g_reset_bio</code> — <span class="Nd">GEOM bio - controlling functions</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/bio.h</a>></code> - <br/> - <code class="In">#include <<a class="In">geom/geom.h</a>></code></p> -<p class="Pp"><var class="Ft">struct bio *</var> - <br/> - <code class="Fn">g_new_bio</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft">struct bio *</var> - <br/> - <code class="Fn">g_alloc_bio</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft">struct bio *</var> - <br/> - <code class="Fn">g_clone_bio</code>(<var class="Fa" style="white-space: nowrap;">struct - bio *bp</var>);</p> -<p class="Pp"><var class="Ft">struct bio *</var> - <br/> - <code class="Fn">g_duplicate_bio</code>(<var class="Fa" style="white-space: nowrap;">struct - bio *bp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">g_destroy_bio</code>(<var class="Fa" style="white-space: nowrap;">struct - bio *bp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">g_format_bio</code>(<var class="Fa" style="white-space: nowrap;">struct - sbuf *sb</var>, <var class="Fa" style="white-space: nowrap;">const struct - bio *bp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">g_print_bio</code>(<var class="Fa">struct sbuf *sb</var>, - <var class="Fa">const char *prefix</var>, <var class="Fa">const struct bio - *bp</var>, <var class="Fa">const char *fmtsuffix</var>, - <var class="Fa">...</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">g_reset_bio</code>(<var class="Fa" style="white-space: nowrap;">struct - bio *bp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">A <var class="Vt">struct bio</var> is used by GEOM to describe I/O - requests, its most important fields are described below:</p> -<dl class="Bl-tag"> - <dt id="bio_cmd"><var class="Va">bio_cmd</var></dt> - <dd>I/O request command. There are five I/O requests available in GEOM: - <dl class="Bl-tag"> - <dt id="BIO_READ"><a class="permalink" href="#BIO_READ"><code class="Dv">BIO_READ</code></a></dt> - <dd>A read request.</dd> - <dt id="BIO_WRITE"><a class="permalink" href="#BIO_WRITE"><code class="Dv">BIO_WRITE</code></a></dt> - <dd>A write request.</dd> - <dt id="BIO_DELETE"><a class="permalink" href="#BIO_DELETE"><code class="Dv">BIO_DELETE</code></a></dt> - <dd>Indicates that a certain range of data is no longer used and that it - can be erased or freed as the underlying technology supports. - Technologies like flash adaptation layers can arrange to erase the - relevant blocks before they will become reassigned and cryptographic - devices may want to fill random bits into the range to reduce the - amount of data available for attack.</dd> - <dt id="BIO_GETATTR"><a class="permalink" href="#BIO_GETATTR"><code class="Dv">BIO_GETATTR</code></a></dt> - <dd>Inspect and manipulate out-of-band attributes on a particular provider - or path. Attributes are named by ascii strings and are stored in the - <var class="Va">bio_attribute</var> field.</dd> - <dt id="BIO_FLUSH"><a class="permalink" href="#BIO_FLUSH"><code class="Dv">BIO_FLUSH</code></a></dt> - <dd>Tells underlying providers to flush their write caches.</dd> - </dl> - </dd> - <dt id="bio_flags"><var class="Va">bio_flags</var></dt> - <dd>Available flags: - <dl class="Bl-tag"> - <dt id="BIO_ERROR"><a class="permalink" href="#BIO_ERROR"><code class="Dv">BIO_ERROR</code></a></dt> - <dd>Request failed (error value is stored in - <var class="Va">bio_error</var> field).</dd> - <dt id="BIO_DONE"><a class="permalink" href="#BIO_DONE"><code class="Dv">BIO_DONE</code></a></dt> - <dd>Request finished.</dd> - </dl> - </dd> - <dt id="bio_cflags"><var class="Va">bio_cflags</var></dt> - <dd>Private use by the consumer.</dd> - <dt id="bio_pflags"><var class="Va">bio_pflags</var></dt> - <dd>Private use by the provider.</dd> - <dt id="bio_offset"><var class="Va">bio_offset</var></dt> - <dd>Offset into provider.</dd> - <dt id="bio_data"><var class="Va">bio_data</var></dt> - <dd>Pointer to data buffer.</dd> - <dt id="bio_error"><var class="Va">bio_error</var></dt> - <dd>Error value when <code class="Dv">BIO_ERROR</code> is set.</dd> - <dt id="bio_done"><var class="Va">bio_done</var></dt> - <dd>Pointer to function which will be called when the request is - finished.</dd> - <dt id="bio_driver1"><var class="Va">bio_driver1</var></dt> - <dd>Private use by the provider.</dd> - <dt id="bio_driver2"><var class="Va">bio_driver2</var></dt> - <dd>Private use by the provider.</dd> - <dt id="bio_caller1"><var class="Va">bio_caller1</var></dt> - <dd>Private use by the consumer.</dd> - <dt id="bio_caller2"><var class="Va">bio_caller2</var></dt> - <dd>Private use by the consumer.</dd> - <dt id="bio_attribute"><var class="Va">bio_attribute</var></dt> - <dd>Attribute string for <code class="Dv">BIO_GETATTR</code> request.</dd> - <dt id="bio_from"><var class="Va">bio_from</var></dt> - <dd>Consumer to use for request (attached to provider stored in - <var class="Va">bio_to</var> field) (typically read-only for a - class).</dd> - <dt id="bio_to"><var class="Va">bio_to</var></dt> - <dd>Destination provider (typically read-only for a class).</dd> - <dt id="bio_length"><var class="Va">bio_length</var></dt> - <dd>Request length in bytes.</dd> - <dt id="bio_completed"><var class="Va">bio_completed</var></dt> - <dd>Number of bytes completed, but they may not be completed from the front of - the request.</dd> - <dt id="bio_children"><var class="Va">bio_children</var></dt> - <dd>Number of <var class="Vt">bio</var> clones (typically read-only for a - class).</dd> - <dt id="bio_inbed"><var class="Va">bio_inbed</var></dt> - <dd>Number of finished <var class="Vt">bio</var> clones.</dd> - <dt id="bio_parent"><var class="Va">bio_parent</var></dt> - <dd>Pointer to parent <var class="Vt">bio</var>.</dd> -</dl> -<p class="Pp" id="g_new_bio">The - <a class="permalink" href="#g_new_bio"><code class="Fn">g_new_bio</code></a>() - function allocates a new, empty <var class="Vt">bio</var> structure.</p> -<p class="Pp" id="g_alloc_bio"><a class="permalink" href="#g_alloc_bio"><code class="Fn">g_alloc_bio</code></a>() - - same as <code class="Fn">g_new_bio</code>(), but always succeeds - (allocates bio with the <code class="Dv">M_WAITOK</code> malloc flag).</p> -<p class="Pp" id="g_clone_bio">The - <a class="permalink" href="#g_clone_bio"><code class="Fn">g_clone_bio</code></a>() - function allocates a new <var class="Vt">bio</var> structure and copies the - following fields from the <var class="Vt">bio</var> given as an argument to - clone: <var class="Va">bio_cmd</var>, <var class="Va">bio_length</var>, - <var class="Va">bio_offset</var>, <var class="Va">bio_data</var>, - <var class="Va">bio_attribute</var>. The field - <var class="Va">bio_parent</var> in the clone points to the passed - <var class="Vt">bio</var> and the field <var class="Va">bio_children</var> - in the passed <var class="Vt">bio</var> is incremented.</p> -<p class="Pp">This function should be used for every request which enters - through the provider of a particular geom and needs to be scheduled down. - Proper order is:</p> -<p class="Pp"></p> -<ol class="Bl-enum Bl-compact"> - <li>Clone the received <var class="Vt">struct bio</var>.</li> - <li>Modify the clone.</li> - <li>Schedule the clone on its own consumer.</li> -</ol> -<p class="Pp" id="g_duplicate_bio"><a class="permalink" href="#g_duplicate_bio"><code class="Fn">g_duplicate_bio</code></a>() - - same as <code class="Fn">g_clone_bio</code>(), but always succeeds - (allocates bio with the <code class="Dv">M_WAITOK</code> malloc flag).</p> -<p class="Pp" id="g_destroy_bio">The - <a class="permalink" href="#g_destroy_bio"><code class="Fn">g_destroy_bio</code></a>() - function deallocates and destroys the given <var class="Vt">bio</var> - structure.</p> -<p class="Pp" id="g_format_bio">The - <a class="permalink" href="#g_format_bio"><code class="Fn">g_format_bio</code></a>() - function prints information about the given <var class="Vt">bio</var> - structure into the provided <var class="Vt">sbuf</var>.</p> -<p class="Pp" id="g_print_bio">The - <a class="permalink" href="#g_print_bio"><code class="Fn">g_print_bio</code></a>() - function is a convenience wrapper around - <code class="Fn">g_format_bio</code>() that can be used for debugging - purposes. It prints a provided <var class="Fa">prefix</var> string, followed - by the formatted <var class="Vt">bio</var>, followed by a - <var class="Fa">fmtsuffix</var> in the style of <a class="Xr">printf(9)</a>. - Any of the prefix or suffix strings may be the empty string. - <code class="Fn">g_print_bio</code>() always prints a newline character at - the end of the line.</p> -<p class="Pp" id="g_reset_bio">The - <a class="permalink" href="#g_reset_bio"><code class="Fn">g_reset_bio</code></a>() - function resets the given <var class="Vt">bio</var> structure back to its - initial state. <code class="Fn">g_reset_bio</code>() preserves internal data - structures, while setting all user visible fields to their initial values. - When reusing a <var class="Vt">bio</var> obtained from - <code class="Fn">g_new_bio</code>(), <code class="Fn">g_alloc_bio</code>(), - <code class="Fn">g_clone_bio</code>(), or - <code class="Fn">g_duplicate_bio</code>() for multiple transactions, - <code class="Fn">g_reset_bio</code>() must be called between the - transactions in lieu of - <a class="permalink" href="#bzero"><code class="Fn" id="bzero">bzero</code></a>(). - While not strictly required for a <var class="Vt">bio</var> structure - created by other means, <code class="Fn">g_reset_bio</code>() should be used - to initialize it and between transactions.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">g_new_bio</code>() and - <code class="Fn">g_clone_bio</code>() functions return a pointer to the - allocated <var class="Vt">bio</var>, or <code class="Dv">NULL</code> if an - error occurred.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">Implementation of - “<code class="Dv">NULL</code>-transformation”, meaning that an - I/O request is cloned and scheduled down without any modifications. Let us - assume that field <var class="Va">ex_consumer</var> in structure - <var class="Vt">example_softc</var> contains a consumer attached to the - provider we want to operate on.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>void -example_start(struct bio *bp) -{ - struct example_softc *sc; - struct bio *cbp; - - g_print_bio("Request received: ", bp, ""); - - sc = bp->bio_to->geom->softc; - if (sc == NULL) { - g_io_deliver(bp, ENXIO); - return; - } - - /* Let's clone our bio request. */ - cbp = g_clone_bio(bp); - if (cbp == NULL) { - g_io_deliver(bp, ENOMEM); - return; - } - cbp->bio_done = g_std_done; /* Standard 'done' function. */ - - /* Ok, schedule it down. */ - /* - * The consumer can be obtained from - * LIST_FIRST(&bp->bio_to->geom->consumer) as well, - * if there is only one in our geom. - */ - g_io_request(cbp, sc->ex_consumer); -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">dtrace_io(4)</a>, <a class="Xr">geom(4)</a>, - <a class="Xr">DECLARE_GEOM_CLASS(9)</a>, <a class="Xr">g_access(9)</a>, - <a class="Xr">g_attach(9)</a>, <a class="Xr">g_consumer(9)</a>, - <a class="Xr">g_data(9)</a>, <a class="Xr">g_event(9)</a>, - <a class="Xr">g_geom(9)</a>, <a class="Xr">g_provider(9)</a>, - <a class="Xr">g_provider_by_name(9)</a>, - <a class="Xr">g_wither_geom(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Pawel Jakub - Dawidek</span> - <<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 26, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/g_consumer.9 3.html b/static/freebsd/man9/g_consumer.9 3.html deleted file mode 100644 index dbd9d284..00000000 --- a/static/freebsd/man9/g_consumer.9 3.html +++ /dev/null @@ -1,128 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">G_CONSUMER(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">G_CONSUMER(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">g_new_consumer</code>, - <code class="Nm">g_destroy_consumer</code> — <span class="Nd">GEOM - consumers management</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">geom/geom.h</a>></code></p> -<p class="Pp"><var class="Ft">struct g_consumer *</var> - <br/> - <code class="Fn">g_new_consumer</code>(<var class="Fa" style="white-space: nowrap;">struct - g_geom *gp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">g_destroy_consumer</code>(<var class="Fa" style="white-space: nowrap;">struct - g_consumer *cp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">A GEOM consumer is the backdoor through which a geom connects to - another GEOM provider and through which I/O requests are sent.</p> -<p class="Pp" id="g_new_consumer">The - <a class="permalink" href="#g_new_consumer"><code class="Fn">g_new_consumer</code></a>() - function creates a new consumer on geom <var class="Fa">gp</var>. Before - using the new consumer, it has to be attached to a provider with - <a class="Xr">g_attach(9)</a> and opened with - <a class="Xr">g_access(9)</a>.</p> -<p class="Pp" id="g_destroy_consumer">The - <a class="permalink" href="#g_destroy_consumer"><code class="Fn">g_destroy_consumer</code></a>() - function destroys the given consumer and cancels all related pending events. - This function is the last stage of killing an unwanted consumer.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RESTRICTIONS/CONDITIONS"><a class="permalink" href="#RESTRICTIONS/CONDITIONS">RESTRICTIONS/CONDITIONS</a></h1> -<p class="Pp"><code class="Fn">g_new_consumer</code>():</p> -<ul class="Bl-item Bd-indent"> - <li>The geom <var class="Fa">gp</var> has to have an - <var class="Va">orphan</var> method defined.</li> - <li>The topology lock has to be held.</li> -</ul> -<p class="Pp" id="g_destroy_consumer~2"><a class="permalink" href="#g_destroy_consumer~2"><code class="Fn">g_destroy_consumer</code></a>():</p> -<ul class="Bl-item Bd-indent"> - <li>The consumer must not be attached to a provider.</li> - <li>The access count has to be 0.</li> - <li>The topology lock has to be held.</li> -</ul> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">g_new_consumer</code>() function returns a - pointer to the newly created consumer.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">Create consumer, attach it to given provider, gain read access and - clean up.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>void -some_function(struct g_geom *mygeom, struct g_provider *pp) -{ - struct g_consumer *cp; - - g_topology_assert(); - - /* Create new consumer on 'mygeom' geom. */ - cp = g_new_consumer(mygeom); - /* Attach newly created consumer to given provider. */ - if (g_attach(cp, pp) != 0) { - g_destroy_consumer(cp); - return; - } - /* Open provider for reading through our consumer. */ - if (g_access(cp, 1, 0, 0) != 0) { - g_detach(cp); - g_destroy_consumer(cp); - return; - } - - g_topology_unlock(); - /* - * Read data from provider. - */ - g_topology_lock(); - - /* Disconnect from provider (release access count). */ - g_access(cp, -1, 0, 0); - /* Detach from provider. */ - g_detach(cp); - /* Destroy consumer. */ - g_destroy_consumer(cp); -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">geom(4)</a>, - <a class="Xr">DECLARE_GEOM_CLASS(9)</a>, <a class="Xr">g_access(9)</a>, - <a class="Xr">g_attach(9)</a>, <a class="Xr">g_bio(9)</a>, - <a class="Xr">g_data(9)</a>, <a class="Xr">g_event(9)</a>, - <a class="Xr">g_geom(9)</a>, <a class="Xr">g_provider(9)</a>, - <a class="Xr">g_provider_by_name(9)</a>, - <a class="Xr">g_wither_geom(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Pawel Jakub - Dawidek</span> - <<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 16, 2004</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/g_data.9 3.html b/static/freebsd/man9/g_data.9 3.html deleted file mode 100644 index 07a20eca..00000000 --- a/static/freebsd/man9/g_data.9 3.html +++ /dev/null @@ -1,104 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">G_DATA(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">G_DATA(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">g_read_data</code>, - <code class="Nm">g_write_data</code> — <span class="Nd">read/write - data from/to GEOM consumer</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">geom/geom.h</a>></code></p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">g_read_data</code>(<var class="Fa">struct g_consumer - *cp</var>, <var class="Fa">off_t offset</var>, <var class="Fa">off_t - length</var>, <var class="Fa">int *error</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">g_write_data</code>(<var class="Fa">struct g_consumer - *cp</var>, <var class="Fa">off_t offset</var>, <var class="Fa">void - *ptr</var>, <var class="Fa">off_t length</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#g_read_data"><code class="Fn" id="g_read_data">g_read_data</code></a>() - function reads <var class="Fa">length</var> bytes of data from the provider - attached to consumer <var class="Fa">cp</var>, starting at offset - <var class="Fa">offset</var>. The buffer returned from - <code class="Fn">g_read_data</code>() is allocated with - <a class="permalink" href="#g_malloc"><code class="Fn" id="g_malloc">g_malloc</code></a>(), - so it should be freed by the caller with - <a class="permalink" href="#g_free"><code class="Fn" id="g_free">g_free</code></a>() - after use. If the operation fails, an error value will be stored in the - <var class="Fa">error</var> argument if it is not - <code class="Dv">NULL</code>.</p> -<p class="Pp" id="g_write_data">The - <a class="permalink" href="#g_write_data"><code class="Fn">g_write_data</code></a>() - function writes <var class="Fa">length</var> bytes of data from the buffer - pointed to by <var class="Fa">ptr</var> to the provider attached to consumer - <var class="Fa">cp</var>, starting at offset - <var class="Fa">offset</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RESTRICTIONS/CONDITIONS"><a class="permalink" href="#RESTRICTIONS/CONDITIONS">RESTRICTIONS/CONDITIONS</a></h1> -<p class="Pp">The <var class="Fa">length</var> argument should be a multiple of - the provider's sectorsize and less than or equal to - <code class="Dv">DFLTPHYS</code> (<code class="Dv">DFLTPHYS</code> is - defined in - <code class="In"><<a class="In">sys/param.h</a>></code>).</p> -<p class="Pp">The topology lock must not be held.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">g_read_data</code>() function returns a - pointer to a data buffer or <code class="Dv">NULL</code> if an error - occurred. In that case an error value is stored in the - <var class="Fa">error</var> argument unless it is - <code class="Dv">NULL</code>.</p> -<p class="Pp">The <code class="Fn">g_write_data</code>() function returns 0 if - successful; otherwise an error code is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp">Possible errors:</p> -<dl class="Bl-tag"> - <dt id="EIO">[<a class="permalink" href="#EIO"><code class="Er">EIO</code></a>]</dt> - <dd>An I/O error occurred while reading from or writing to the consumer.</dd> - <dt id="EINTEGRITY">[<a class="permalink" href="#EINTEGRITY"><code class="Er">EINTEGRITY</code></a>]</dt> - <dd>Corrupted data was detected while reading from the consumer.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">geom(4)</a>, - <a class="Xr">DECLARE_GEOM_CLASS(9)</a>, <a class="Xr">g_access(9)</a>, - <a class="Xr">g_attach(9)</a>, <a class="Xr">g_bio(9)</a>, - <a class="Xr">g_consumer(9)</a>, <a class="Xr">g_event(9)</a>, - <a class="Xr">g_geom(9)</a>, <a class="Xr">g_provider(9)</a>, - <a class="Xr">g_provider_by_name(9)</a>, - <a class="Xr">g_wither_geom(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Pawel Jakub - Dawidek</span> - <<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 30, 2020</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/g_event.9 3.html b/static/freebsd/man9/g_event.9 3.html deleted file mode 100644 index 22b26793..00000000 --- a/static/freebsd/man9/g_event.9 3.html +++ /dev/null @@ -1,176 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">G_EVENT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">G_EVENT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">g_post_event</code>, - <code class="Nm">g_waitfor_event</code>, - <code class="Nm">g_cancel_event</code> — <span class="Nd">GEOM events - management</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">geom/geom.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">g_post_event</code>(<var class="Fa" style="white-space: nowrap;">g_event_t - *func</var>, <var class="Fa" style="white-space: nowrap;">void *arg</var>, - <var class="Fa" style="white-space: nowrap;">int flag</var>, - <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">g_waitfor_event</code>(<var class="Fa" style="white-space: nowrap;">g_event_t - *func</var>, <var class="Fa" style="white-space: nowrap;">void *arg</var>, - <var class="Fa" style="white-space: nowrap;">int flag</var>, - <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">g_cancel_event</code>(<var class="Fa" style="white-space: nowrap;">void - *ref</var>);</p> -<p class="Pp"><var class="Ft">struct g_event *</var> - <br/> - <code class="Fn">g_alloc_event</code>(<var class="Fa" style="white-space: nowrap;">int - flag</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">g_post_event_ep</code>(<var class="Fa" style="white-space: nowrap;">g_event_t - *func</var>, <var class="Fa" style="white-space: nowrap;">void *arg</var>, - <var class="Fa" style="white-space: nowrap;">struct g_event *ep</var>, - <var class="Fa" style="white-space: nowrap;">...</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The GEOM framework has its own event queue to inform classes about - important events. The event queue can be also used by GEOM classes - themselves, for example to work around some restrictions in the I/O path, - where sleeping, heavy weight tasks, etc. are not permitted.</p> -<p class="Pp" id="g_post_event">The - <a class="permalink" href="#g_post_event"><code class="Fn">g_post_event</code></a>() - function tells the GEOM framework to call function - <var class="Fa">func</var> with argument <var class="Fa">arg</var> from the - event queue. The <var class="Fa">flag</var> argument is passed to - <a class="Xr">malloc(9)</a> for memory allocations inside of - <code class="Fn">g_post_event</code>(). The only allowed flags are - <code class="Dv">M_WAITOK</code> and <code class="Dv">M_NOWAIT</code>. The - rest of the arguments are used as references to identify the event. An event - can be canceled by using any of the given references as an argument to - <code class="Fn">g_cancel_event</code>(). The list of references has to end - with a <code class="Dv">NULL</code> value.</p> -<p class="Pp" id="g_waitfor_event">The - <a class="permalink" href="#g_waitfor_event"><code class="Fn">g_waitfor_event</code></a>() - function is a blocking version of the <code class="Fn">g_post_event</code>() - function. It waits until the event is finished or canceled and then - returns.</p> -<p class="Pp" id="g_post_event_ep">The - <a class="permalink" href="#g_post_event_ep"><code class="Fn">g_post_event_ep</code></a>() - function posts the event with a pre-allocated <var class="Va">struct - g_event</var>. An event may be pre-allocated with - <code class="Fn">g_alloc_event</code>().</p> -<p class="Pp" id="g_cancel_event">The - <a class="permalink" href="#g_cancel_event"><code class="Fn">g_cancel_event</code></a>() - function cancels all event(s) identified by <var class="Fa">ref</var>. - Cancellation is equivalent to calling the requested function with requested - arguments and argument <var class="Fa">flag</var> set to - <code class="Dv">EV_CANCEL</code>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RESTRICTIONS/CONDITIONS"><a class="permalink" href="#RESTRICTIONS/CONDITIONS">RESTRICTIONS/CONDITIONS</a></h1> -<p class="Pp"><code class="Fn">g_post_event</code>():</p> -<ul class="Bl-item Bd-indent"> - <li>The argument <var class="Fa">flag</var> has to be - <code class="Dv">M_WAITOK</code> or <code class="Dv">M_NOWAIT</code>.</li> - <li>The list of references has to end with a <code class="Dv">NULL</code> - value.</li> -</ul> -<p class="Pp" id="g_waitfor_event~2"><a class="permalink" href="#g_waitfor_event~2"><code class="Fn">g_waitfor_event</code></a>():</p> -<ul class="Bl-item Bd-indent"> - <li>The argument <var class="Fa">flag</var> has to be - <code class="Dv">M_WAITOK</code> or <code class="Dv">M_NOWAIT</code>.</li> - <li>The list of references has to end with a <code class="Dv">NULL</code> - value.</li> - <li>The <code class="Fn">g_waitfor_event</code>() function cannot be called - from an event, since doing so would result in a deadlock.</li> -</ul> -<p class="Pp" id="g_alloc_event"><a class="permalink" href="#g_alloc_event"><code class="Fn">g_alloc_event</code></a>():</p> -<ul class="Bl-item Bd-indent"> - <li>The argument <var class="Fa">flag</var> has to be - <code class="Dv">M_WAITOK</code> or <code class="Dv">M_NOWAIT</code>.</li> - <li id="g_free">The returned <var class="Va">struct g_event *</var> must be - freed with - <a class="permalink" href="#g_free"><code class="Fn">g_free</code></a>() - if <code class="Fn">g_post_event_ep</code>() is not called.</li> -</ul> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">g_post_event</code>() and - <code class="Fn">g_waitfor_event</code>() functions return 0 if successful; - otherwise an error code is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">Example of a function called from the event queue.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>void -example_event(void *arg, int flag) -{ - - if (flag == EV_CANCEL) { - printf("Event with argument %p canceled.\n", arg); - return; - } - - printf("Event with argument %p called.\n", arg); -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp">Possible errors for the <code class="Fn">g_post_event</code>() - function:</p> -<dl class="Bl-tag"> - <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt> - <dd>The <var class="Fa">flag</var> argument was set to - <code class="Dv">M_NOWAIT</code> and there was insufficient memory.</dd> -</dl> -<p class="Pp">Possible errors for the <code class="Fn">g_waitfor_event</code>() - function:</p> -<dl class="Bl-tag"> - <dt id="EAGAIN">[<a class="permalink" href="#EAGAIN"><code class="Er">EAGAIN</code></a>]</dt> - <dd>The event was canceled.</dd> - <dt id="ENOMEM~2">[<a class="permalink" href="#ENOMEM~2"><code class="Er">ENOMEM</code></a>]</dt> - <dd>The <var class="Fa">flag</var> argument was set to - <code class="Dv">M_NOWAIT</code> and there was insufficient memory.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">geom(4)</a>, - <a class="Xr">DECLARE_GEOM_CLASS(9)</a>, <a class="Xr">g_access(9)</a>, - <a class="Xr">g_attach(9)</a>, <a class="Xr">g_bio(9)</a>, - <a class="Xr">g_consumer(9)</a>, <a class="Xr">g_data(9)</a>, - <a class="Xr">g_geom(9)</a>, <a class="Xr">g_provider(9)</a>, - <a class="Xr">g_provider_by_name(9)</a>, - <a class="Xr">g_wither_geom(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Pawel Jakub - Dawidek</span> - <<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 23, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/g_geom.9 3.html b/static/freebsd/man9/g_geom.9 3.html deleted file mode 100644 index df3c6f34..00000000 --- a/static/freebsd/man9/g_geom.9 3.html +++ /dev/null @@ -1,197 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">G_GEOM(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">G_GEOM(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">g_new_geomf</code>, - <code class="Nm">g_new_geom</code>, <code class="Nm">g_destroy_geom</code> - — <span class="Nd">geom management</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">geom/geom.h</a>></code></p> -<p class="Pp"><var class="Ft">struct g_geom *</var> - <br/> - <code class="Fn">g_new_geomf</code>(<var class="Fa" style="white-space: nowrap;">struct - g_class *mp</var>, <var class="Fa" style="white-space: nowrap;">const char - *fmt</var>, <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">struct g_geom *</var> - <br/> - <code class="Fn">g_new_geom</code>(<var class="Fa" style="white-space: nowrap;">struct - g_class *mp</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">g_destroy_geom</code>(<var class="Fa" style="white-space: nowrap;">struct - g_geom *gp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The geom (do not confuse “geom” with - “GEOM”) is an instance of a GEOM class. For example: in a - typical i386 <span class="Ux">FreeBSD</span> system, there will be one geom - of class MBR for each disk. The geom's name is not really important, it is - only used in the XML dump and for debugging purposes. There can be many - geoms with the same name.</p> -<p class="Pp" id="g_new_geomf">The - <a class="permalink" href="#g_new_geomf"><code class="Fn">g_new_geomf</code></a>() - function creates a new geom, which will be an instance of the class - <var class="Fa">mp</var>. The geom's name is created in a - <a class="Xr">printf(3)</a>-like way from the rest of the arguments.</p> -<p class="Pp" id="g_new_geom">The - <a class="permalink" href="#g_new_geom"><code class="Fn">g_new_geom</code></a>() - function is very similar to <code class="Fn">g_new_geomf</code>() except - that it accepts a regular string instead of a - <a class="Xr">printf(3)</a>-like format string as the geom's name.</p> -<p class="Pp" id="g_destroy_geom">The - <a class="permalink" href="#g_destroy_geom"><code class="Fn">g_destroy_geom</code></a>() - function destroys the given geom immediately and cancels all related pending - events.</p> -<p class="Pp">The <var class="Vt">g_geom</var> structure contains fields that - should be set by the caller after geom creation, but before creating any - providers or consumers related to this geom (not all are required):</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt><var class="Vt">g_start_t *</var> <var class="Va">start</var></dt> - <dd>Pointer to a function used for I/O processing.</dd> - <dt><var class="Vt">g_spoiled_t *</var> <var class="Va">spoiled</var></dt> - <dd>Pointer to a function used for consumers spoiling.</dd> - <dt><var class="Vt">g_dumpconf_t *</var> <var class="Va">dumpconf</var></dt> - <dd>Pointer to a function used for configuration in XML format dumping.</dd> - <dt><var class="Vt">g_access_t *</var> <var class="Va">access</var></dt> - <dd>Pointer to a function used for access control.</dd> - <dt><var class="Vt">g_orphan_t *</var> <var class="Va">orphan</var></dt> - <dd>Pointer to a function used to inform about orphaned consumer.</dd> - <dt><var class="Vt">g_ioctl_t *</var> <var class="Va">ioctl</var></dt> - <dd>Pointer to a function used for handling ioctl requests.</dd> - <dt><var class="Vt">void *</var> <var class="Va">softc</var></dt> - <dd>Field for private use.</dd> -</dl> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="RESTRICTIONS/CONDITIONS"><a class="permalink" href="#RESTRICTIONS/CONDITIONS">RESTRICTIONS/CONDITIONS</a></h1> -<p class="Pp">If you intend to use providers in this geom you must set field - <var class="Va">start</var> of your geom.</p> -<p class="Pp">If you are planning to use consumers in your geom you must set - fields <var class="Va">orphan</var> and <var class="Va">access</var> for - it.</p> -<p class="Pp" id="g_new_geomf~2"><a class="permalink" href="#g_new_geomf~2"><code class="Fn">g_new_geomf</code></a>() - and <code class="Fn">g_new_geom</code>():</p> -<ul class="Bl-item Bd-indent"> - <li>Class <var class="Fa">mp</var> must be valid (registered in GEOM).</li> - <li>The topology lock has to be held.</li> -</ul> -<p class="Pp" id="g_destroy_geom~2"><a class="permalink" href="#g_destroy_geom~2"><code class="Fn">g_destroy_geom</code></a>():</p> -<ul class="Bl-item Bd-indent"> - <li>The geom cannot possess any providers.</li> - <li>The geom cannot possess any consumers.</li> - <li>The topology lock has to be held.</li> -</ul> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">g_new_geomf</code>() function returns a - pointer to the newly created geom.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">Create an example geom.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>static void -g_example_start(struct bio *bp) -{ - - [...] -} - -static void -g_example_orphan(struct g_consumer *cp) -{ - - g_topology_assert(); - - [...] -} - -static void -g_example_spoiled(struct g_consumer *cp) -{ - - g_topology_assert(); - - [...] -} - -static int -g_example_access(struct g_provider *pp, int dr, int dw, int de) -{ - - [...] -} - -static struct g_geom * -create_example_geom(struct g_class *myclass) -{ - struct g_geom *gp; - - g_topology_lock(); - gp = g_new_geomf(myclass, "example_geom"); - g_topology_unlock(); - gp->start = g_example_start; - gp->orphan = g_example_orphan; - gp->spoiled = g_example_spoiled; - gp->access = g_example_access; - gp->softc = NULL; - - return (gp); -} - -static int -destroy_example_geom(struct g_geom *gp) -{ - - g_topology_lock(); - if (!LIST_EMPTY(&gp->provider) || - !LIST_EMPTY(&gp->consumer)) { - g_topology_unlock(); - return (EBUSY); - } - g_destroy_geom(gp); - g_topology_unlock(); - - return (0); -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">geom(4)</a>, - <a class="Xr">DECLARE_GEOM_CLASS(9)</a>, <a class="Xr">g_access(9)</a>, - <a class="Xr">g_attach(9)</a>, <a class="Xr">g_bio(9)</a>, - <a class="Xr">g_consumer(9)</a>, <a class="Xr">g_data(9)</a>, - <a class="Xr">g_event(9)</a>, <a class="Xr">g_provider(9)</a>, - <a class="Xr">g_provider_by_name(9)</a>, - <a class="Xr">g_wither_geom(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Pawel Jakub - Dawidek</span> - <<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 24, 2016</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/g_provider.9 3.html b/static/freebsd/man9/g_provider.9 3.html deleted file mode 100644 index 96d01924..00000000 --- a/static/freebsd/man9/g_provider.9 3.html +++ /dev/null @@ -1,130 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">G_PROVIDER(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">G_PROVIDER(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">g_new_providerf</code>, - <code class="Nm">g_destroy_provider</code>, - <code class="Nm">g_error_provider</code> — <span class="Nd">GEOM - providers management</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">geom/geom.h</a>></code></p> -<p class="Pp"><var class="Ft">struct g_provider *</var> - <br/> - <code class="Fn">g_new_providerf</code>(<var class="Fa" style="white-space: nowrap;">struct - g_geom *gp</var>, <var class="Fa" style="white-space: nowrap;">const char - *fmt</var>, <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">g_destroy_provider</code>(<var class="Fa" style="white-space: nowrap;">struct - g_provider *pp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">g_error_provider</code>(<var class="Fa" style="white-space: nowrap;">struct - g_provider *pp</var>, <var class="Fa" style="white-space: nowrap;">int - error</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">A GEOM provider is the front gate at which a geom offers service. - A provider is “a disk-like thing which appears in - <span class="Pa">/dev</span>” – a logical disk in other words. - All providers have three main properties: name, sectorsize and size.</p> -<p class="Pp" id="g_new_providerf">The - <a class="permalink" href="#g_new_providerf"><code class="Fn">g_new_providerf</code></a>() - function creates a new provider on given geom <var class="Fa">gp</var>. The - name of the provider, which will appear as device in - <a class="Xr">devfs(4)</a>, is created in a <a class="Xr">printf(3)</a>-like - way from the rest of the arguments. After creation, the caller has to set - the provider's <var class="Va">mediasize</var> and - <var class="Va">sectorsize</var>, as well as other desired initializations, - and then call <code class="Fn">g_error_provider</code>() to reset the - provider's error, which is initially set to - <code class="Er">ENXIO</code>.</p> -<p class="Pp" id="g_destroy_provider">The - <a class="permalink" href="#g_destroy_provider"><code class="Fn">g_destroy_provider</code></a>() - function destroys the given provider, cancels all related pending events and - removes the corresponding devfs entry.</p> -<p class="Pp" id="g_error_provider">The - <a class="permalink" href="#g_error_provider"><code class="Fn">g_error_provider</code></a>() - function is used to set the provider's error value. If set to a nonzero, all - I/O requests will be denied, as well as increasing its access count will not - be possible (error <var class="Fa">error</var> will be returned).</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RESTRICTIONS/CONDITIONS"><a class="permalink" href="#RESTRICTIONS/CONDITIONS">RESTRICTIONS/CONDITIONS</a></h1> -<p class="Pp"><a class="permalink" href="#g_new_provider"><code class="Fn" id="g_new_provider">g_new_provider</code></a>():</p> -<ul class="Bl-item Bd-indent"> - <li>The provider name should be unique, but this is not enforced by GEOM. If - the name is not unique, one will end up with two (or more) files with the - same name, which is a programmer error.</li> - <li>The geom <var class="Fa">gp</var> has to have a - <var class="Fa">start</var> method defined.</li> - <li>The topology lock has to be held.</li> -</ul> -<p class="Pp" id="g_destroy_provider~2"><a class="permalink" href="#g_destroy_provider~2"><code class="Fn">g_destroy_provider</code></a>():</p> -<ul class="Bl-item Bd-indent"> - <li>The provider must not have consumers attached.</li> - <li>The access count has to be 0.</li> - <li>The topology lock has to be held.</li> -</ul> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">g_new_providerf</code>() function returns a - pointer to the newly created provider.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">Create an example provider, set its parameters and make it - usable.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct g_provider * -create_example_provider(struct g_geom *gp) -{ - struct g_provider *pp; - - g_topology_lock(); - pp = g_new_providerf(gp, "example_provider"); - g_topology_unlock(); - pp->mediasize = 65536; - pp->sectorsize = 512; - g_error_provider(pp, 0); - - return (pp); -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">geom(4)</a>, - <a class="Xr">DECLARE_GEOM_CLASS(9)</a>, <a class="Xr">g_access(9)</a>, - <a class="Xr">g_attach(9)</a>, <a class="Xr">g_bio(9)</a>, - <a class="Xr">g_consumer(9)</a>, <a class="Xr">g_data(9)</a>, - <a class="Xr">g_event(9)</a>, <a class="Xr">g_geom(9)</a>, - <a class="Xr">g_provider_by_name(9)</a>, - <a class="Xr">g_wither_geom(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Pawel Jakub - Dawidek</span> - <<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 16, 2004</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/g_provider_by_name.9 4.html b/static/freebsd/man9/g_provider_by_name.9 4.html deleted file mode 100644 index 34be0003..00000000 --- a/static/freebsd/man9/g_provider_by_name.9 4.html +++ /dev/null @@ -1,66 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">G_PROVIDER_BY_NAME(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">G_PROVIDER_BY_NAME(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">g_provider_by_name</code> — - <span class="Nd">find GEOM provider with given name</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">geom/geom.h</a>></code></p> -<p class="Pp"><var class="Ft">struct g_provider *</var> - <br/> - <code class="Fn">g_provider_by_name</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#g_provider_by_name"><code class="Fn" id="g_provider_by_name">g_provider_by_name</code></a>() - function searches for a provider called <var class="Fa">name</var> and - returns the structure <var class="Vt">g_provider</var> bound to it. Argument - <var class="Fa">name</var> can be a name or full path (i.e., - “<span class="Pa">da0</span>”, or - “<span class="Pa">/dev/da0</span>”).</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RESTRICTIONS/CONDITIONS"><a class="permalink" href="#RESTRICTIONS/CONDITIONS">RESTRICTIONS/CONDITIONS</a></h1> -<p class="Pp">The topology lock has to be held.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">g_provider_by_name</code>() function returns - a pointer to the provider called <var class="Fa">name</var> or - <code class="Dv">NULL</code> if there is no such provider.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">geom(4)</a>, - <a class="Xr">DECLARE_GEOM_CLASS(9)</a>, <a class="Xr">g_access(9)</a>, - <a class="Xr">g_attach(9)</a>, <a class="Xr">g_bio(9)</a>, - <a class="Xr">g_consumer(9)</a>, <a class="Xr">g_data(9)</a>, - <a class="Xr">g_event(9)</a>, <a class="Xr">g_geom(9)</a>, - <a class="Xr">g_provider(9)</a>, <a class="Xr">g_wither_geom(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Pawel Jakub - Dawidek</span> - <<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 29, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/g_wither_geom.9 3.html b/static/freebsd/man9/g_wither_geom.9 3.html deleted file mode 100644 index db3affc3..00000000 --- a/static/freebsd/man9/g_wither_geom.9 3.html +++ /dev/null @@ -1,73 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">G_WITHER_GEOM(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">G_WITHER_GEOM(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">g_wither_geom</code> — - <span class="Nd">destroy geom and related providers and consumers when you - get a chance</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">geom/geom.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">g_wither_geom</code>(<var class="Fa" style="white-space: nowrap;">struct - g_geom *gp</var>, <var class="Fa" style="white-space: nowrap;">int - error</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#g_wither_geom"><code class="Fn" id="g_wither_geom">g_wither_geom</code></a>() - function tells GEOM that geom <var class="Fa">gp</var> is to be destroyed. - GEOM sets an error on each provider of the given geom (in the orphaning - process) and waits for a chance to destroy the geom. If the access count of - any possessed consumer goes to 0, the consumer will be detached and - destroyed automatically. If the last consumer attached to any possessed - provider will be detached, the provider will be destroyed. If there are no - more providers nor consumers, the geom will be destroyed.</p> -<p class="Pp" id="g_wither_geom~2">This is an automatic “garbage - collect” to avoid duplicated code in all classes. Before it is - called, field <var class="Va">softc</var> should be disposed of and set to - <code class="Dv">NULL</code>. Note that the - <a class="permalink" href="#g_wither_geom~2"><code class="Fn">g_wither_geom</code></a>() - function gives no guarantee that the geom will be immediately destroyed, - mostly because the access counts of the geom's consumers and providers may - not be 0. That is why calling this function for every geom from a given - class is not enough to be sure that the class can be unloaded.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RESTRICTIONS/CONDITIONS"><a class="permalink" href="#RESTRICTIONS/CONDITIONS">RESTRICTIONS/CONDITIONS</a></h1> -<p class="Pp">The argument <var class="Fa">error</var> must be nonzero.</p> -<p class="Pp">The topology lock has to be held.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">geom(4)</a>, - <a class="Xr">DECLARE_GEOM_CLASS(9)</a>, <a class="Xr">g_access(9)</a>, - <a class="Xr">g_attach(9)</a>, <a class="Xr">g_bio(9)</a>, - <a class="Xr">g_consumer(9)</a>, <a class="Xr">g_data(9)</a>, - <a class="Xr">g_event(9)</a>, <a class="Xr">g_geom(9)</a>, - <a class="Xr">g_provider(9)</a>, <a class="Xr">g_provider_by_name(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Pawel Jakub - Dawidek</span> - <<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 16, 2004</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/get_cyclecount.9 4.html b/static/freebsd/man9/get_cyclecount.9 4.html deleted file mode 100644 index f12a259b..00000000 --- a/static/freebsd/man9/get_cyclecount.9 4.html +++ /dev/null @@ -1,67 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">GET_CYCLECOUNT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">GET_CYCLECOUNT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">get_cyclecount</code> — - <span class="Nd">get the CPU's fast counter register contents</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">machine/cpu.h</a>></code></p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">get_cyclecount</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#get_cyclecount"><code class="Fn" id="get_cyclecount">get_cyclecount</code></a>() - function uses a register available in most modern CPUs to return a value - that is monotonically increasing inside each CPU.</p> -<p class="Pp">On SMP systems, there will be a number of separate monotonic - sequences, one for each CPU running. The value in the SMP case is selected - from one of these sequences, dependent on which CPU was scheduled to service - the request.</p> -<p class="Pp" id="get_cyclecount~2">The speed and the maximum value of each - counter is CPU-dependent. Some CPUs (such as the Intel 80486) do not have - such a register, so - <a class="permalink" href="#get_cyclecount~2"><code class="Fn">get_cyclecount</code></a>() - on these platforms returns a (monotonic) combination of numbers represented - by the structure returned by <a class="Xr">binuptime(9)</a>.</p> -<p class="Pp">The AMD64 and Intel 64 processors use the - <code class="Li">TSC</code> register.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">binuptime(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Fn">get_cyclecount</code>() function first - appeared in <span class="Ux">FreeBSD 5.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Mark - Murray</span> - <<a class="Mt" href="mailto:markm@FreeBSD.org">markm@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 15, 2011</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/getenv.9 4.html b/static/freebsd/man9/getenv.9 4.html deleted file mode 100644 index 889c8db7..00000000 --- a/static/freebsd/man9/getenv.9 4.html +++ /dev/null @@ -1,231 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">GETENV(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">GETENV(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">freeenv</code>, - <code class="Nm">kern_getenv</code>, <code class="Nm">getenv_int</code>, - <code class="Nm">getenv_long</code>, <code class="Nm">getenv_string</code>, - <code class="Nm">getenv_quad</code>, <code class="Nm">getenv_uint</code>, - <code class="Nm">getenv_ulong</code>, <code class="Nm">getenv_bool</code>, - <code class="Nm">getenv_is_true</code>, - <code class="Nm">getenv_is_false</code>, - <code class="Nm">kern_setenv</code>, <code class="Nm">testenv</code>, - <code class="Nm">kern_unsetenv</code> — <span class="Nd">kernel - environment variable functions</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">freeenv</code>(<var class="Fa" style="white-space: nowrap;">char - *env</var>);</p> -<p class="Pp"><var class="Ft">char *</var> - <br/> - <code class="Fn">kern_getenv</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">getenv_int</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>, <var class="Fa" style="white-space: nowrap;">int - *data</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">getenv_long</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>, <var class="Fa" style="white-space: nowrap;">long - *data</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">getenv_string</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>, <var class="Fa" style="white-space: nowrap;">char - *data</var>, <var class="Fa" style="white-space: nowrap;">int - size</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">getenv_quad</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>, <var class="Fa" style="white-space: nowrap;">quad_t - *data</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">getenv_uint</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>, <var class="Fa" style="white-space: nowrap;">unsigned int - *data</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">getenv_ulong</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>, <var class="Fa" style="white-space: nowrap;">unsigned long - *data</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">getenv_bool</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>, <var class="Fa" style="white-space: nowrap;">bool - *data</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">getenv_is_true</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">getenv_is_false</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">kern_setenv</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>, <var class="Fa" style="white-space: nowrap;">const char - *value</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">testenv</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">kern_unsetenv</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These functions set, unset, fetch, and parse variables from the - kernel's environment.</p> -<p class="Pp" id="kern_getenv">The - <a class="permalink" href="#kern_getenv"><code class="Fn">kern_getenv</code></a>() - function obtains the current value of the kernel environment variable - <var class="Fa">name</var> and returns a pointer to the string value. The - caller should not modify the string pointed to by the return value. The - <code class="Fn">kern_getenv</code>() function may allocate temporary - storage, so the <code class="Fn">freeenv</code>() function must be called to - release any allocated resources when the value returned by - <code class="Fn">kern_getenv</code>() is no longer needed.</p> -<p class="Pp" id="freeenv">The - <a class="permalink" href="#freeenv"><code class="Fn">freeenv</code></a>() - function is used to release the resources allocated by a previous call to - <code class="Fn">kern_getenv</code>(). The <var class="Fa">env</var> - argument passed to <code class="Fn">freeenv</code>() is the pointer returned - by the earlier call to <code class="Fn">kern_getenv</code>(). Like - <a class="Xr">free(3)</a>, the <var class="Fa">env</var> argument can be - <var class="Va">NULL</var>, in which case no action occurs.</p> -<p class="Pp" id="kern_setenv">The - <a class="permalink" href="#kern_setenv"><code class="Fn">kern_setenv</code></a>() - function inserts or resets the kernel environment variable - <var class="Fa">name</var> to <var class="Fa">value</var>. If the variable - <var class="Fa">name</var> already exists, its value is replaced. This - function can fail if an internal limit on the number of environment - variables is exceeded.</p> -<p class="Pp" id="kern_unsetenv">The - <a class="permalink" href="#kern_unsetenv"><code class="Fn">kern_unsetenv</code></a>() - function deletes the kernel environment variable - <var class="Fa">name</var>.</p> -<p class="Pp" id="testenv">The - <a class="permalink" href="#testenv"><code class="Fn">testenv</code></a>() - function is used to determine if a kernel environment variable exists. It - returns a non-zero value if the variable <var class="Fa">name</var> exists - and zero if it does not.</p> -<p class="Pp" id="getenv_int">The - <a class="permalink" href="#getenv_int"><code class="Fn">getenv_int</code></a>(), - <a class="permalink" href="#getenv_long"><code class="Fn" id="getenv_long">getenv_long</code></a>(), - <a class="permalink" href="#getenv_quad"><code class="Fn" id="getenv_quad">getenv_quad</code></a>(), - <a class="permalink" href="#getenv_uint"><code class="Fn" id="getenv_uint">getenv_uint</code></a>(), - and - <a class="permalink" href="#getenv_ulong"><code class="Fn" id="getenv_ulong">getenv_ulong</code></a>() - functions look for a kernel environment variable <var class="Fa">name</var> - and parse it as a signed integer, long integer, signed 64-bit integer, - unsigned integer, or an unsigned long integer, respectively. These functions - fail and return zero if <var class="Fa">name</var> does not exist or if any - invalid characters are present in its value. On success, these function - store the parsed value in the integer variable pointed to by - <var class="Fa">data</var>. If the parsed value overflows the integer type, - a truncated value is stored in <var class="Fa">data</var> and zero is - returned. If the value begins with a prefix of “0x” it is - interpreted as hexadecimal. If it begins with a prefix of “0” - it is interpreted as octal. Otherwise, the value is interpreted as decimal. - The value may contain a single character suffix specifying a unit for the - value. The interpreted value is multiplied by the unit's magnitude before - being returned. The following unit suffixes are supported:</p> -<table class="Bl-column Bd-indent"> - <tr id="Unit"> - <td><a class="permalink" href="#Unit"><b class="Sy">Unit</b></a></td> - <td><a class="permalink" href="#Magnitude"><b class="Sy" id="Magnitude">Magnitude</b></a></td> - </tr> - <tr> - <td>k</td> - <td>2^10</td> - </tr> - <tr> - <td>m</td> - <td>2^20</td> - </tr> - <tr> - <td>g</td> - <td>2^30</td> - </tr> - <tr> - <td>t</td> - <td>2^40</td> - </tr> -</table> -<p class="Pp" id="getenv_string">The - <a class="permalink" href="#getenv_string"><code class="Fn">getenv_string</code></a>() - function stores a copy of the kernel environment variable - <var class="Fa">name</var> in the buffer described by - <var class="Fa">data</var> and <var class="Fa">size</var>. If the variable - does not exist, zero is returned. If the variable exists, up to - <var class="Fa">size - 1</var> characters of its value are copied to the - buffer pointed to by <var class="Fa">data</var> followed by a null character - and a non-zero value is returned.</p> -<p class="Pp" id="getenv_bool">The - <a class="permalink" href="#getenv_bool"><code class="Fn">getenv_bool</code></a>() - function interprets the value of the kernel environment variable - <var class="Fa">name</var> as a boolean value by performing a - case-insensitive comparison against the strings "1", - "0", "true", and "false". If the environment - variable exists and has a valid boolean value, then that value will be - copied to the variable pointed to by <var class="Fa">data</var>. If the - environment variable exists but is not a boolean value, then a warning will - be printed to the kernel message buffer. The - <a class="permalink" href="#getenv_is_true"><code class="Fn" id="getenv_is_true">getenv_is_true</code></a>() - and - <a class="permalink" href="#getenv_is_false"><code class="Fn" id="getenv_is_false">getenv_is_false</code></a>() - functions are wrappers around <code class="Fn">getenv_bool</code>() that - simplify testing for a desired boolean value.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">kern_getenv</code>() function returns a - pointer to an environment variable's value on success or - <code class="Dv">NULL</code> if the variable does not exist.</p> -<p class="Pp">The <code class="Fn">kern_setenv</code>() and - <code class="Fn">kern_unsetenv</code>() functions return zero on success and - -1 on failure.</p> -<p class="Pp">The <code class="Fn">testenv</code>() function returns zero if the - specified environment variable does not exist and a non-zero value if it - does exist.</p> -<p class="Pp">The <code class="Fn">getenv_int</code>(), - <code class="Fn">getenv_long</code>(), - <code class="Fn">getenv_string</code>(), - <code class="Fn">getenv_quad</code>(), - <code class="Fn">getenv_uint</code>(), - <code class="Fn">getenv_ulong</code>(), and - <code class="Fn">getenv_bool</code>() functions return a non-zero value on - success and zero on failure.</p> -<p class="Pp">The <code class="Fn">getenv_is_true</code>() and - <code class="Fn">getenv_is_false</code>() functions return - <code class="Dv">true</code> if the specified environment variable exists - and its value matches the desired boolean condition, and - <code class="Dv">false</code> otherwise.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 21, 2020</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/getnewvnode.9 4.html b/static/freebsd/man9/getnewvnode.9 4.html deleted file mode 100644 index 2d14c2c8..00000000 --- a/static/freebsd/man9/getnewvnode.9 4.html +++ /dev/null @@ -1,72 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">GETNEWVNODE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">GETNEWVNODE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">getnewvnode</code> — <span class="Nd">get - a new vnode</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mount.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">getnewvnode</code>(<var class="Fa" style="white-space: nowrap;">const - char *tag</var>, <var class="Fa" style="white-space: nowrap;">struct mount - *mp</var>, <var class="Fa" style="white-space: nowrap;">struct vop_vector - *vops</var>, <var class="Fa" style="white-space: nowrap;">struct vnode - **vpp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#getnewvnode"><code class="Fn" id="getnewvnode">getnewvnode</code></a>() - function initializes a new vnode, assigning it the vnode operations passed - in <var class="Fa">vops</var>.</p> -<p class="Pp" id="getnewvnode~2">The arguments to - <a class="permalink" href="#getnewvnode~2"><code class="Fn">getnewvnode</code></a>() - are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">tag</var></dt> - <dd>The file system type string. This field should only be referenced for - debugging or for userland utilities.</dd> - <dt><var class="Fa">mp</var></dt> - <dd>The mount point to add the new vnode to.</dd> - <dt><var class="Fa">vops</var></dt> - <dd>The vnode operations to assign to the new vnode.</dd> - <dt><var class="Fa">vpp</var></dt> - <dd>Points to the new vnode upon successful completion.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp"><code class="Fn">getnewvnode</code>() returns 0 on success.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">It never returns an error, instead either succeeds or blocks - indefinitely.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 1, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/gone_in.9 4.html b/static/freebsd/man9/gone_in.9 4.html deleted file mode 100644 index 6cf83b16..00000000 --- a/static/freebsd/man9/gone_in.9 4.html +++ /dev/null @@ -1,81 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">GONE_IN(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">GONE_IN(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">gone_in</code>, - <code class="Nm">gone_in_dev</code> — <span class="Nd">deprecation - notice functions</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/systm.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">gone_in</code>(<var class="Fa" style="white-space: nowrap;">int - major</var>, <var class="Fa" style="white-space: nowrap;">const char - *msg</var>, <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">gone_in_dev</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">int major</var>, - <var class="Fa" style="white-space: nowrap;">const char *msg</var>, - <var class="Fa" style="white-space: nowrap;">...</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">gone_in</code> functions are used to provide - a notice that the kernel is actively using a driver or some other - functionality that is deprecated, and is planned for removal in a future - <span class="Ux">FreeBSD</span> release. The notice is sent to the kernel - <a class="Xr">dmesg(8)</a> log and will appear on the console. The - <var class="Fa">major</var> argument specifies the major version of the - <span class="Ux">FreeBSD</span> release that will remove the deprecated - functionality. The notice shall be printed only once, thus - <code class="Nm">gone_in</code> functions are safe to use in often executed - code paths.</p> -<p class="Pp"><code class="Nm">gone_in_dev</code> will prepend driver name - before the notice.</p> -<p class="Pp">In releases before <var class="Fa">major</var> the provided notice - will be appended with “To be removed in FreeBSD - <var class="Fa">major</var>”.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<div class="Bd Bd-indent Li"> -<pre>void -example_api(foo_t *args) -{ - gone_in(16, "Warning! %s[%u] uses obsolete API. ", - curthread->td_proc->p_comm, curthread->td_proc->p_pid); - - /* API implementation omitted. */ -} - -int -example_driver_attach(struct example_driver_softc *sc) -{ - /* Attach code omitted. */ - - gone_in_dev(sc->dev, 16, "driver is deprecated"); -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">gone_in</code> functions first appeared in - <span class="Ux">FreeBSD 11</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 24, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/groupmember.9 4.html b/static/freebsd/man9/groupmember.9 4.html deleted file mode 100644 index a3b9f6a0..00000000 --- a/static/freebsd/man9/groupmember.9 4.html +++ /dev/null @@ -1,74 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">GROUPMEMBER(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">GROUPMEMBER(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">groupmember</code> — - <span class="Nd">checks if credentials mandate some group - membership</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/ucred.h</a>></code></p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">groupmember</code>(<var class="Fa" style="white-space: nowrap;">gid_t - gid</var>, <var class="Fa" style="white-space: nowrap;">const struct ucred - *cred</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">realgroupmember</code>(<var class="Fa" style="white-space: nowrap;">gid_t - gid</var>, <var class="Fa" style="white-space: nowrap;">const struct ucred - *cred</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#groupmember"><code class="Fn" id="groupmember">groupmember</code></a>() - function checks if credentials <var class="Fa">cred</var> indicate that the - associated subject or object is a member of the group designated by the - group ID <var class="Fa">gid</var>.</p> -<p class="Pp">Considered groups in <var class="Fa">cred</var> are the effective - and supplementary groups. The real group is not taken into account.</p> -<p class="Pp" id="realgroupmember">Function - <a class="permalink" href="#realgroupmember"><code class="Fn">realgroupmember</code></a>() - works the same except that it considers instead the real and supplementary - groups, and not the effective one.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">groupmember</code>() and - <code class="Fn">realgroupmember</code>() functions return - <code class="Dv">true</code> if the given credentials indicate membership of - the group <var class="Fa">gid</var>, or <code class="Dv">false</code> - otherwise.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">getgroups(2)</a>, <a class="Xr">setgroups(2)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was initially written by <span class="An">Chad - David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>> - and was revised by <span class="An">Olivier Certner</span> - <<a class="Mt" href="mailto:olce.freebsd@certner.fr">olce.freebsd@certner.fr</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 31, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/hardclock.9 3.html b/static/freebsd/man9/hardclock.9 3.html deleted file mode 100644 index 446d83ea..00000000 --- a/static/freebsd/man9/hardclock.9 3.html +++ /dev/null @@ -1,69 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">HARDCLOCK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">HARDCLOCK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">hardclock</code> — - <span class="Nd">real-time timer</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">hardclock</code>(<var class="Fa" style="white-space: nowrap;">int - cnt</var>, <var class="Fa" style="white-space: nowrap;">int - usermode</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#hardclock"><code class="Fn" id="hardclock">hardclock</code></a>() - function is called periodically based on pending work. The rate ranges from - <var class="Va">hz</var> times per second on a very busy system, to twice a - second on an idle system. The <var class="Fa">cnt</var> argument reports an - estimate of the number of ticks since the last call. Over long timescales, - the average sum of <var class="Fa">cnt</var> over one second is - <var class="Va">hz</var>. See <a class="Xr">hz(9)</a> for important details - over shorter time scales. The <var class="Fa">usermode</var> argument is - non-zero when <code class="Fn">hardclock</code>() is called from an context - that interrupted usermode execution.</p> -<p class="Pp" id="hardclock~2"><a class="permalink" href="#hardclock~2"><code class="Fn">hardclock</code></a>() - may perform different tasks such as:</p> -<ul class="Bl-bullet Bd-indent"> - <li>Run the current process's virtual and profile time (decrease the - corresponding timers, if they are activated, and generate - <code class="Li">SIGVTALRM</code> or <code class="Li">SIGPROF</code>, - respectively).</li> - <li>Increment the time-of-day, taking care of any <a class="Xr">ntpd(8)</a> or - <a class="Xr">adjtime(2)</a> induced changes and leap seconds, as well as - any necessary compensations to keep in sync with PPS signals or external - clocks, if supported by the kernel.</li> - <li>Schedule softclock interrupts (<a class="Xr">swi(9)</a>) processing.</li> - <li>Collect <a class="Xr">hwpmc(4)</a> statistics.</li> - <li>Do device polling, when enabled (see <a class="Xr">polling(4)</a>).</li> - <li>Implement software <a class="Xr">watchdog(9)</a> processing.</li> - <li>Enqueue <a class="Xr">epoch(9)</a> processing.</li> -</ul> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">adjtime(2)</a>, <a class="Xr">ntp_adjtime(2)</a>, - <a class="Xr">signal(3)</a>, <a class="Xr">hwpmc(4)</a>, - <a class="Xr">polling(4)</a>, <a class="Xr">ntpd(8)</a>, - <a class="Xr">epoch(9)</a>, <a class="Xr">eventtimers(9)</a>, - <a class="Xr">hz(9)</a>, <a class="Xr">swi(9)</a>, - <a class="Xr">watchdog(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 27, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/hash.9 3.html b/static/freebsd/man9/hash.9 3.html deleted file mode 100644 index 7c754137..00000000 --- a/static/freebsd/man9/hash.9 3.html +++ /dev/null @@ -1,211 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">HASH(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">HASH(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">hash</code>, <code class="Nm">hash32</code>, - <code class="Nm">hash32_buf</code>, <code class="Nm">hash32_str</code>, - <code class="Nm">hash32_strn</code>, <code class="Nm">hash32_stre</code>, - <code class="Nm">hash32_strne</code>, <code class="Nm">jenkins_hash</code>, - <code class="Nm">jenkins_hash32</code>, - <code class="Nm">murmur3_32_hash</code>, - <code class="Nm">murmur3_32_hash32</code> — <span class="Nd">general - kernel hashing functions</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/hash.h</a>></code></p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">hash32_buf</code>(<var class="Fa" style="white-space: nowrap;">const - void *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - hash</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">hash32_str</code>(<var class="Fa" style="white-space: nowrap;">const - void *buf</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - hash</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">hash32_strn</code>(<var class="Fa" style="white-space: nowrap;">const - void *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - hash</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">hash32_stre</code>(<var class="Fa" style="white-space: nowrap;">const - void *buf</var>, <var class="Fa" style="white-space: nowrap;">int end</var>, - <var class="Fa" style="white-space: nowrap;">const char **ep</var>, - <var class="Fa" style="white-space: nowrap;">uint32_t hash</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">hash32_strne</code>(<var class="Fa" style="white-space: nowrap;">const - void *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>, <var class="Fa" style="white-space: nowrap;">int end</var>, - <var class="Fa" style="white-space: nowrap;">const char **ep</var>, - <var class="Fa" style="white-space: nowrap;">uint32_t hash</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">jenkins_hash</code>(<var class="Fa" style="white-space: nowrap;">const - void *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - hash</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">jenkins_hash32</code>(<var class="Fa" style="white-space: nowrap;">const - uint32_t *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t - count</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - hash</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">murmur3_32_hash</code>(<var class="Fa" style="white-space: nowrap;">const - void *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - hash</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">murmur3_32_hash32</code>(<var class="Fa" style="white-space: nowrap;">const - uint32_t *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t - count</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - hash</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#hash32"><code class="Fn" id="hash32">hash32</code></a>() - functions are used to give a consistent and general interface to a decent - hashing algorithm within the kernel. These functions can be used to hash - ASCII <code class="Dv">NUL</code> terminated strings, as well as blocks of - memory.</p> -<p class="Pp">A <var class="Fa">len</var> argument is the length of the buffer - in bytes. A <var class="Fa">count</var> argument is the length of the buffer - in 32-bit words.</p> -<p class="Pp" id="hash32_buf">The - <a class="permalink" href="#hash32_buf"><code class="Fn">hash32_buf</code></a>() - function is used as a general buffer hashing function. The argument - <var class="Fa">buf</var> is used to pass in the location, and - <var class="Fa">len</var> is the length of the buffer in bytes. The argument - <var class="Fa">hash</var> is used to extend an existing hash, or is passed - the initial value <code class="Dv">HASHINIT</code> to start a new hash.</p> -<p class="Pp" id="hash32_str">The - <a class="permalink" href="#hash32_str"><code class="Fn">hash32_str</code></a>() - function is used to hash a <code class="Dv">NUL</code> terminated string - passed in <var class="Fa">buf</var> with initial hash value given in - <var class="Fa">hash</var>.</p> -<p class="Pp" id="hash32_strn">The - <a class="permalink" href="#hash32_strn"><code class="Fn">hash32_strn</code></a>() - function is like the <code class="Fn">hash32_str</code>() function, except - it also takes a <var class="Fa">len</var> argument, which is the maximal - length of the expected string.</p> -<p class="Pp" id="hash32_stre">The - <a class="permalink" href="#hash32_stre"><code class="Fn">hash32_stre</code></a>() - and - <a class="permalink" href="#hash32_strne"><code class="Fn" id="hash32_strne">hash32_strne</code></a>() - functions are helper functions used by the kernel to hash pathname - components. These functions have the additional termination condition of - terminating when they find a character given by <var class="Fa">end</var> in - the string to be hashed. If the argument <var class="Fa">ep</var> is not - <code class="Dv">NULL</code>, it is set to the point in the buffer at which - the hash function terminated hashing.</p> -<p class="Pp" id="jenkins_hash">The - <a class="permalink" href="#jenkins_hash"><code class="Fn">jenkins_hash</code></a>() - function has same semantics as the <code class="Fn">hash32_buf</code>(), but - provides more advanced hashing algorithm with better distribution.</p> -<p class="Pp" id="jenkins_hash32">The - <a class="permalink" href="#jenkins_hash32"><code class="Fn">jenkins_hash32</code></a>() - uses same hashing algorithm as the <code class="Fn">jenkins_hash</code>() - function, but works only on <var class="Ft">uint32_t</var> sized arrays, - thus is simpler and faster. It accepts an array of - <var class="Ft">uint32_t</var> values in its first argument and size of this - array in the second argument.</p> -<p class="Pp" id="murmur3_32_hash">The - <a class="permalink" href="#murmur3_32_hash"><code class="Fn">murmur3_32_hash</code></a>() - and - <a class="permalink" href="#murmur3_32_hash32"><code class="Fn" id="murmur3_32_hash32">murmur3_32_hash32</code></a>() - functions are similar to <code class="Fn">jenkins_hash</code>() and - <code class="Fn">jenkins_hash32</code>(), but implement the 32-bit version - of MurmurHash3.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">hash32</code>() functions return a 32 bit - hash value of the buffer or string.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<div class="Bd Bd-indent Li"> -<pre>LIST_HEAD(head, cache) *hashtbl = NULL; -u_long mask = 0; - -void -sample_init(void) -{ - - hashtbl = hashinit(numwanted, type, flags, &mask); -} - -void -sample_use(char *str, int len) -{ - uint32_t hash; - - hash = hash32_str(str, HASHINIT); - hash = hash32_buf(&len, sizeof(len), hash); - hashtbl[hash & mask] = len; -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">free(9)</a>, <a class="Xr">hashinit(9)</a>, - <a class="Xr">malloc(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LIMITATIONS"><a class="permalink" href="#LIMITATIONS">LIMITATIONS</a></h1> -<p class="Pp">The <code class="Fn">hash32</code>() functions are only 32 bit - functions. They will prove to give poor 64 bit performance, especially for - the top 32 bits. At the current time, this is not seen as a great - limitation, as these hash values are usually used to index into an array. - Should these hash values be used for other means, this limitation should be - revisited.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">hash</code> functions first appeared in - <span class="Ux">NetBSD 1.6</span>. The current implementation of - <code class="Nm">hash32</code> functions was first committed to - <span class="Ux">OpenBSD 3.2</span>, and later imported to - <span class="Ux">FreeBSD 6.1</span>. The - <code class="Nm">jenkins_hash</code> functions were added in - <span class="Ux">FreeBSD 10.0</span>. The - <code class="Nm">murmur3_32_hash</code> functions were added in - <span class="Ux">FreeBSD 10.1</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">hash32</code> functions were written by - <span class="An">Tobias Weingartner</span>. The - <code class="Nm">jenkins_hash</code> functions were written by - <br/> - <span class="An">Bob Jenkins</span>. The - <code class="Nm">murmur3_32_hash</code> functions were written by - <br/> - <span class="An">Dag-Erling Smørgrav</span> - <<a class="Mt" href="mailto:des@FreeBSD.org">des@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 30, 2015</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/hashalloc.9 3.html b/static/freebsd/man9/hashalloc.9 3.html deleted file mode 100644 index c53cd5aa..00000000 --- a/static/freebsd/man9/hashalloc.9 3.html +++ /dev/null @@ -1,253 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">HASHALLOC(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">HASHALLOC(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">hashalloc</code>, - <code class="Nm">hashfree</code> — <span class="Nd">allocate and free - kernel hash tables</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/malloc.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/hash.h</a>></code></p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">hashalloc</code>(<var class="Fa" style="white-space: nowrap;">struct - hashalloc_args *args</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">hashfree</code>(<var class="Fa" style="white-space: nowrap;">void - *table</var>, <var class="Fa" style="white-space: nowrap;">struct - hashalloc_args *args</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#hashalloc"><code class="Fn" id="hashalloc">hashalloc</code></a>() - and <code class="Fn">hashfree</code>() functions provide a flexible kernel - programming interface (KPI) for allocating and freeing hash tables with - configurable bucket headers.</p> -<p class="Pp" id="hashalloc~2"><a class="permalink" href="#hashalloc~2"><code class="Fn">hashalloc</code></a>() - allocates memory for a hash table according to the parameters specified in - the <var class="Fa">args</var> structure. It computes an appropriate number - of buckets (adjusting <var class="Fa">args->size</var> as needed based on - the requested <var class="Fa">type</var>), allocates memory using - <a class="Xr">malloc(9)</a>, initializes each bucket's queue header (e.g., - <var class="Vt">LIST_HEAD</var>, <var class="Vt">TAILQ_HEAD</var>, etc.), - and, if requested, initializes per-bucket locks. The returned memory - allocation can be used as an array of header structures that start with - initialized list header of the requested type followed by initialized lock - of requested type.</p> -<p class="Pp" id="hashfree"><a class="permalink" href="#hashfree"><code class="Fn">hashfree</code></a>() - frees a hash table previously allocated by - <code class="Fn">hashalloc</code>().</p> -<p class="Pp">Both functions require the caller to pass the same (or equivalent) - <var class="Fa">struct hashalloc_args</var> that specifies the desired - configuration of the hash table and has the following members:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct hashalloc_args { - /* Required arguments */ - size_t size; /* in: desired buckets, out: allocated */ - int mflags; /* malloc(9) flags */ - struct malloc_type *mtype; /* malloc(9) type */ - /* Optional arguments */ - size_t hdrsize; /* bucket header size; 0 = auto */ - enum { - HASH_TYPE_POWER2, - HASH_TYPE_PRIME, - } type; /* default HASH_TYPE_POWER2 */ - enum { - HASH_HEAD_LIST, - HASH_HEAD_CK_LIST, - HASH_HEAD_SLIST, - HASH_HEAD_CK_SLIST, - HASH_HEAD_STAILQ, - HASH_HEAD_CK_STAILQ, - HASH_HEAD_TAILQ, - } head; /* default HASH_HEAD_LIST */ - enum { - HASH_LOCK_NONE, - HASH_LOCK_MTX, - HASH_LOCK_RWLOCK, - HASH_LOCK_SX, - HASH_LOCK_RMLOCK, - HASH_LOCK_RMSLOCK, - } lock; /* default HASH_LOCK_NONE */ - int lopts; /* lock init options */ - const char *lname; /* lock name */ - int (*ctor)(void *); /* bucket constructor */ - void (*dtor)(void *); /* bucket destructor */ - /* Returned arguments */ - int error; /* error code in case of failure */ -};</pre> -</div> -<p class="Pp" id="hashalloc~3">Argument members <var class="Fa">size</var>, - <var class="Fa">mflags</var> and <var class="Fa">mtype</var> are required - for the - <a class="permalink" href="#hashalloc~3"><code class="Fn">hashalloc</code></a>(). - The argument <var class="Fa">size</var>, as filled by earlier call to - <code class="Fn">hashalloc</code>(), and <var class="Fa">mtype</var> are - required for the <code class="Fn">hashfree</code>(). The rest of arguments - are optional and have reasonable defaults. A hash table that was allocated - with a non-default allocation arguments shall pass the same arguments to - <code class="Fn">hashfree</code>(). The structure shall be initialized with - sparse C99 initializer as it may contain opaque extension members. The - structure may be allocated on the stack of a caller.</p> -<dl class="Bl-tag"> - <dt><var class="Fa">size</var></dt> - <dd>Desired number of buckets for <code class="Fn">hashalloc</code>(). Upon a - successful return <code class="Fn">hashalloc</code>() sets this member to - the actual number allocated (may be rounded up to power-of-2 or nearest - prime). The value returned by <code class="Fn">hashalloc</code>() shall be - later supplied to the <code class="Fn">hashfree</code>().</dd> - <dt><var class="Fa">mflags</var>, <var class="Fa">mtype</var></dt> - <dd>Passed directly to <a class="Xr">malloc(9)</a>.</dd> - <dt><var class="Fa">hdrsize</var></dt> - <dd>Optional member that allows the caller to set a different (increased) size - of a bucket header.</dd> - <dt><var class="Fa">type</var></dt> - <dd>Bucket count policy: - <dl class="Bl-tag"> - <dt id="HASH_TYPE_POWER2"><a class="permalink" href="#HASH_TYPE_POWER2"><code class="Dv">HASH_TYPE_POWER2</code></a></dt> - <dd>Rounded up to largest power of two less than or equal to argument - <var class="Fa">size</var>.</dd> - <dt id="HASH_TYPE_PRIME"><a class="permalink" href="#HASH_TYPE_PRIME"><code class="Dv">HASH_TYPE_PRIME</code></a></dt> - <dd>Sized to the largest prime number less than or equal to argument - <var class="Fa">size</var>.</dd> - </dl> - <p class="Pp">Default is <code class="Dv">HASH_TYPE_POWER2</code>.</p> - </dd> - <dt><var class="Fa">head</var></dt> - <dd>Queue header type for each bucket, a <a class="Xr">queue(3)</a> or - Concurrency-kit (CK) type. - <dl class="Bl-tag"> - <dt id="HASH_HEAD_LIST"><a class="permalink" href="#HASH_HEAD_LIST"><code class="Dv">HASH_HEAD_LIST</code></a></dt> - <dd><a class="Xr">queue(3)</a> <code class="Fd">LIST_HEAD</code></dd> - <dt id="HASH_HEAD_CK_LIST"><a class="permalink" href="#HASH_HEAD_CK_LIST"><code class="Dv">HASH_HEAD_CK_LIST</code></a></dt> - <dd>Concurrency-kit <code class="Fd">CK_LIST_HEAD</code></dd> - <dt id="HASH_HEAD_SLIST"><a class="permalink" href="#HASH_HEAD_SLIST"><code class="Dv">HASH_HEAD_SLIST</code></a></dt> - <dd><a class="Xr">queue(3)</a> <code class="Fd">SLIST_HEAD</code></dd> - <dt id="HASH_HEAD_CK_SLIST"><a class="permalink" href="#HASH_HEAD_CK_SLIST"><code class="Dv">HASH_HEAD_CK_SLIST</code></a></dt> - <dd>Concurrency-kit <code class="Fd">CK_SLIST_HEAD</code></dd> - <dt id="HASH_HEAD_STAILQ"><a class="permalink" href="#HASH_HEAD_STAILQ"><code class="Dv">HASH_HEAD_STAILQ</code></a></dt> - <dd><a class="Xr">queue(3)</a> <code class="Fd">STAILQ_HEAD</code></dd> - <dt id="HASH_HEAD_CK_STAILQ"><a class="permalink" href="#HASH_HEAD_CK_STAILQ"><code class="Dv">HASH_HEAD_CK_STAILQ</code></a></dt> - <dd>Concurrency-kit <code class="Fd">CK_STAILQ_HEAD</code></dd> - <dt id="HASH_HEAD_TAILQ"><a class="permalink" href="#HASH_HEAD_TAILQ"><code class="Dv">HASH_HEAD_TAILQ</code></a></dt> - <dd><a class="Xr">queue(3)</a> <code class="Fd">TAILQ_HEAD</code></dd> - </dl> - <p class="Pp">Default is <code class="Dv">HASH_HEAD_LIST</code>.</p> - </dd> - <dt><var class="Fa">lock</var></dt> - <dd>Synchronization: - <dl class="Bl-tag"> - <dt id="HASH_LOCK_NONE"><a class="permalink" href="#HASH_LOCK_NONE"><code class="Dv">HASH_LOCK_NONE</code></a></dt> - <dd>No per-bucket lock.</dd> - <dt id="HASH_LOCK_MTX"><a class="permalink" href="#HASH_LOCK_MTX"><code class="Dv">HASH_LOCK_MTX</code></a></dt> - <dd>Per-bucket <a class="Xr">mutex(9)</a>.</dd> - <dt id="HASH_LOCK_RWLOCK"><a class="permalink" href="#HASH_LOCK_RWLOCK"><code class="Dv">HASH_LOCK_RWLOCK</code></a></dt> - <dd>Per-bucket <a class="Xr">rwlock(9)</a>.</dd> - <dt id="HASH_LOCK_SX"><a class="permalink" href="#HASH_LOCK_SX"><code class="Dv">HASH_LOCK_SX</code></a></dt> - <dd>Per-bucket <a class="Xr">sx(9)</a>.</dd> - <dt id="HASH_LOCK_RMLOCK"><a class="permalink" href="#HASH_LOCK_RMLOCK"><code class="Dv">HASH_LOCK_RMLOCK</code></a></dt> - <dd>Per-bucket <a class="Xr">rmlock(9)</a>.</dd> - <dt id="HASH_LOCK_RMSLOCK"><a class="permalink" href="#HASH_LOCK_RMSLOCK"><code class="Dv">HASH_LOCK_RMSLOCK</code></a></dt> - <dd>Per-bucket sleepable (rms) <a class="Xr">rmlock(9)</a>.</dd> - </dl> - <p class="Pp">Default is <code class="Dv">HASH_LOCK_NONE</code>.</p> - </dd> - <dt><var class="Fa">lopts</var></dt> - <dd>Options passed to <a class="Xr">mtx_init(9)</a>, - <a class="Xr">rw_init(9)</a>, <a class="Xr">sx_init(9)</a>, - <a class="Xr">rm_init(9)</a> or <a class="Xr">rms_init(9)</a> (if locking - is enabled).</dd> - <dt><var class="Fa">lname</var></dt> - <dd>Lock name. This member is required unless <var class="Fa">lock</var> is - <code class="Dv">HASH_LOCK_NONE</code>.</dd> - <dt id="hashalloc~4"><var class="Fa">ctor</var></dt> - <dd>Optional constructor to be called by - <a class="permalink" href="#hashalloc~4"><code class="Fn">hashalloc</code></a>() - for each bucket after list header and lock initialization. May fail with - error code, yielding in a failure of - <code class="Fn">hashalloc</code>().</dd> - <dt><var class="Fa">dtor</var></dt> - <dd>Optional destructor to be called by <code class="Fn">hashfree</code>() for - each bucket before lock destructors and list emptyness checks.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp"><code class="Fn">hashalloc</code>() returns a pointer to the - allocated and initialized hash table on success, or - <code class="Dv">NULL</code> on memory allocation failure or constructor - failure. The <var class="Fa">error</var> member of - <var class="Fa">args</var> is set to appropriate error code. When - <var class="Fa">mflags</var> in <var class="Fa">args</var> contain the - <var class="Va">M_WAITOK</var> flag and the <var class="Fa">ctor</var> is - either NULL or never fails, then <code class="Fn">hashalloc</code>() never - fails.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">A simple mutex-protected hash table using TAILQ buckets:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct bucket { - TAILQ_HEAD(, foo) head; - struct mtx lock; -} *table; - -struct hashalloc_args args = { - .size = 9000, - .mflags = M_WAITOK, - .mtype = M_FOO, - .head = HASH_HEAD_TAILQ, - .lock = HASH_LOCK_MTX, - .lopts = MTX_DEF, - .lname = "bucket of foo", -}; - -table = hashalloc(&args); -/* Use table as array of struct bucket ... */ -mtx_lock(&table[hash].lock); -TAILQ_INSERT_HEAD(&table[hash].head, foo, next); - -/* Later */ -hashfree(table, &args);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">malloc(9)</a>, <a class="Xr">mutex(9)</a>, - <a class="Xr">rmlock(9)</a>, <a class="Xr">rwlock(9)</a>, - <a class="Xr">sx(9)</a>, <a class="Xr">queue(3)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">hashalloc</code> KPI first appeared in - <span class="Ux">FreeBSD 16.0</span>. It supersedes older interface - <code class="Fn">hashinit</code>(), that was available since - <span class="Ux">4.4BSD</span>, by offering greater control over the hash - table structure and locking strategy.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp"><span class="An">Gleb Smirnoff</span> - <<a class="Mt" href="mailto:glebius@FreeBSD.org">glebius@FreeBSD.org</a>></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 12, 2026</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/hashinit.9 3.html b/static/freebsd/man9/hashinit.9 3.html deleted file mode 100644 index 3b29700f..00000000 --- a/static/freebsd/man9/hashinit.9 3.html +++ /dev/null @@ -1,174 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">HASHINIT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">HASHINIT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">hashinit</code>, - <code class="Nm">hashinit_flags</code>, <code class="Nm">hashdestroy</code>, - <code class="Nm">phashinit</code>, <code class="Nm">phashinit_flags</code> - — <span class="Nd">manage kernel hash tables</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/malloc.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/queue.h</a>></code></p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">hashinit</code>(<var class="Fa" style="white-space: nowrap;">int - nelements</var>, <var class="Fa" style="white-space: nowrap;">struct - malloc_type *type</var>, <var class="Fa" style="white-space: nowrap;">u_long - *hashmask</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">hashinit_flags</code>(<var class="Fa">int nelements</var>, - <var class="Fa">struct malloc_type *type</var>, <var class="Fa">u_long - *hashmask</var>, <var class="Fa">int flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">hashdestroy</code>(<var class="Fa" style="white-space: nowrap;">void - *hashtbl</var>, <var class="Fa" style="white-space: nowrap;">struct - malloc_type *type</var>, <var class="Fa" style="white-space: nowrap;">u_long - hashmask</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">phashinit</code>(<var class="Fa" style="white-space: nowrap;">int - nelements</var>, <var class="Fa" style="white-space: nowrap;">struct - malloc_type *type</var>, <var class="Fa" style="white-space: nowrap;">u_long - *nentries</var>);</p> -<p class="Pp"><code class="Fn">phashinit_flags</code>(<var class="Fa" style="white-space: nowrap;">int - nelements</var>, <var class="Fa" style="white-space: nowrap;">struct - malloc_type *type</var>, <var class="Fa" style="white-space: nowrap;">u_long - *nentries</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="WARNING"><a class="permalink" href="#WARNING">WARNING</a></h1> -<p class="Pp">This KPI is obsolete and scheduled for removal in - <span class="Ux">FreeBSD 17</span>. Use <a class="Xr">hashalloc(9)</a> - instead.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#hashinit"><code class="Fn" id="hashinit">hashinit</code></a>(), - <code class="Fn">hashinit_flags</code>(), - <code class="Fn">phashinit</code>() and - <code class="Fn">phashinit_flags</code>() functions allocate space for hash - tables of size given by the argument <var class="Fa">nelements</var>.</p> -<p class="Pp" id="hashinit~2">The - <a class="permalink" href="#hashinit~2"><code class="Fn">hashinit</code></a>() - function allocates hash tables that are sized to largest power of two less - than or equal to argument <var class="Fa">nelements</var>. The - <a class="permalink" href="#phashinit"><code class="Fn" id="phashinit">phashinit</code></a>() - function allocates hash tables that are sized to the largest prime number - less than or equal to argument <var class="Fa">nelements</var>. The - <code class="Fn">hashinit_flags</code>() function operates like - <code class="Fn">hashinit</code>() but also accepts an additional argument - <var class="Fa">flags</var> which control various options during allocation. - <code class="Fn">phashinit_flags</code>() function operates like - <code class="Fn">phashinit</code>() but also accepts an additional argument - <var class="Fa">flags</var> which control various options during allocation. - Allocated hash tables are contiguous arrays of - <a class="Xr">LIST_HEAD(3)</a> entries, allocated using - <a class="Xr">malloc(9)</a>, and initialized using - <a class="Xr">LIST_INIT(3)</a>. The malloc arena to be used for allocation - is pointed to by argument <var class="Fa">type</var>.</p> -<p class="Pp" id="hashdestroy">The - <a class="permalink" href="#hashdestroy"><code class="Fn">hashdestroy</code></a>() - function frees the space occupied by the hash table pointed to by argument - <var class="Fa">hashtbl</var>. Argument <var class="Fa">type</var> - determines the malloc arena to use when freeing space. The argument - <var class="Fa">hashmask</var> should be the bit mask returned by the call - to <code class="Fn">hashinit</code>() that allocated the hash table. The - argument <var class="Fa">flags</var> must be used with one of the following - values.</p> -<p class="Pp"></p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt id="HASH_NOWAIT"><a class="permalink" href="#HASH_NOWAIT"><code class="Dv">HASH_NOWAIT</code></a></dt> - <dd>Any malloc performed by the - <a class="permalink" href="#hashinit_flags"><code class="Fn" id="hashinit_flags">hashinit_flags</code></a>() - and - <a class="permalink" href="#phashinit_flags"><code class="Fn" id="phashinit_flags">phashinit_flags</code></a>() - function will not be allowed to wait, and therefore may fail.</dd> - <dt id="HASH_WAITOK"><a class="permalink" href="#HASH_WAITOK"><code class="Dv">HASH_WAITOK</code></a></dt> - <dd>Any malloc performed by <code class="Fn">hashinit_flags</code>() and - <code class="Fn">phashinit_flags</code>() function is allowed to wait for - memory. This is also the behavior of <code class="Fn">hashinit</code>() - and <code class="Fn">phashinit</code>().</dd> -</dl> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">The largest prime hash value chosen by - <code class="Fn">phashinit</code>() is 32749.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">hashinit</code>() function returns a pointer - to an allocated hash table and sets the location pointed to by - <var class="Fa">hashmask</var> to the bit mask to be used for computing the - correct slot in the hash table.</p> -<p class="Pp">The <code class="Fn">phashinit</code>() function returns a pointer - to an allocated hash table and sets the location pointed to by - <var class="Fa">nentries</var> to the number of rows in the hash table.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">A typical example is shown below:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>... -static LIST_HEAD(foo, foo) *footable; -static u_long foomask; -... -footable = hashinit(32, M_FOO, &foomask);</pre> -</div> -<p class="Pp">Here we allocate a hash table with 32 entries from the malloc - arena pointed to by <code class="Dv">M_FOO</code>. The mask for the - allocated hash table is returned in <var class="Va">foomask</var>. A - subsequent call to <code class="Fn">hashdestroy</code>() uses the value in - <var class="Va">foomask</var>:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>... -hashdestroy(footable, M_FOO, foomask);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="DIAGNOSTICS"><a class="permalink" href="#DIAGNOSTICS">DIAGNOSTICS</a></h1> -<p class="Pp">The <code class="Fn">hashinit</code>() and - <code class="Fn">phashinit</code>() functions will panic if argument - <var class="Fa">nelements</var> is less than or equal to zero.</p> -<p class="Pp">The <code class="Fn">hashdestroy</code>() function will panic if - the hash table pointed to by <var class="Fa">hashtbl</var> is not empty.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">hashalloc(9)</a>, <a class="Xr">LIST_HEAD(3)</a>, - <a class="Xr">malloc(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">There is no <code class="Fn">phashdestroy</code>() function, and - using <code class="Fn">hashdestroy</code>() to free a hash table allocated - by <code class="Fn">phashinit</code>() usually has grave consequences.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 17, 2026</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/hexdump.9 4.html b/static/freebsd/man9/hexdump.9 4.html deleted file mode 100644 index f2df6903..00000000 --- a/static/freebsd/man9/hexdump.9 4.html +++ /dev/null @@ -1,79 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">HEXDUMP(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">HEXDUMP(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">hexdump</code> — <span class="Nd">dump a - block of bytes to the console in hexadecimal form</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/systm.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">hexdump</code>(<var class="Fa" style="white-space: nowrap;">void - *ptr</var>, <var class="Fa" style="white-space: nowrap;">int length</var>, - <var class="Fa" style="white-space: nowrap;">const char *hdr</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#hexdump"><code class="Fn" id="hexdump">hexdump</code></a>() - function prints an array of bytes to the console in hexadecimal form, along - with the ASCII representation of the bytes, if possible. By default, each - line of output will start with an offset count, followed by 16 hexadecimal - values, followed by 16 ASCII characters.</p> -<dl class="Bl-tag"> - <dt><var class="Fa">ptr</var></dt> - <dd>Pointer to the array of bytes to print. It does not need to be - <code class="Dv">NUL</code>-terminated.</dd> - <dt><var class="Fa">length</var></dt> - <dd>Number of bytes to print.</dd> - <dt><var class="Fa">hdr</var></dt> - <dd>Pointer to a <code class="Dv">NUL</code>-terminated character string that - will be prepended to each line of output. A value of - <code class="Dv">NULL</code> implies that no header will be printed.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>Flags for controlling the formatting of the output. - <dl class="Bl-tag"> - <dt>Bits 0-7</dt> - <dd>Integer value of the number of bytes to display on each line. A value - of 0 implies that the default value of 16 will be used.</dd> - <dt>Bits 8-15</dt> - <dd>Character ASCII value to use as the separator for the hexadecimal - output. A value of 0 implies that the default value of 32 (ASCII - space) will be used.</dd> - <dt id="HD_OMIT_COUNT"><a class="permalink" href="#HD_OMIT_COUNT"><code class="Dv">HD_OMIT_COUNT</code></a></dt> - <dd>Do not print the offset column at the beginning of each line.</dd> - <dt id="HD_OMIT_HEX"><a class="permalink" href="#HD_OMIT_HEX"><code class="Dv">HD_OMIT_HEX</code></a></dt> - <dd>Do not print the hexadecimal values on each line.</dd> - <dt id="HD_OMIT_CHARS"><a class="permalink" href="#HD_OMIT_CHARS"><code class="Dv">HD_OMIT_CHARS</code></a></dt> - <dd>Do not print the character values on each line.</dd> - </dl> - </dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ascii(7)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Scott - Long</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 7, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/hhook.9 3.html b/static/freebsd/man9/hhook.9 3.html deleted file mode 100644 index 3d7bf97d..00000000 --- a/static/freebsd/man9/hhook.9 3.html +++ /dev/null @@ -1,292 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">HHOOK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">HHOOK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">hhook</code>, - <code class="Nm">hhook_head_register</code>, - <code class="Nm">hhook_head_deregister</code>, - <code class="Nm">hhook_head_deregister_lookup</code>, - <code class="Nm">hhook_run_hooks</code>, - <code class="Nm">HHOOKS_RUN_IF</code>, - <code class="Nm">HHOOKS_RUN_LOOKUP_IF</code> — - <span class="Nd">Helper Hook Framework</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/hhook.h</a>></code></p> -<p class="Pp"><var class="Ft">typedef int</var> - <br/> - <code class="Fn">(*hhook_func_t)</code>(<var class="Fa" style="white-space: nowrap;">int32_t - hhook_type</var>, <var class="Fa" style="white-space: nowrap;">int32_t - hhook_id</var>, <var class="Fa" style="white-space: nowrap;">void - *udata</var>, <var class="Fa" style="white-space: nowrap;">void - *ctx_data</var>, <var class="Fa" style="white-space: nowrap;">void - *hdata</var>, <var class="Fa" style="white-space: nowrap;">struct osd - *hosd</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <code class="Fn">hhook_head_register</code>(<var class="Fa" style="white-space: nowrap;">int32_t - hhook_type</var>, <var class="Fa" style="white-space: nowrap;">int32_t - hhook_id</var>, <var class="Fa" style="white-space: nowrap;">struct - hhook_head **hhh</var>, - <var class="Fa" style="white-space: nowrap;">uint32_t flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <code class="Fn">hhook_head_deregister</code>(<var class="Fa" style="white-space: nowrap;">struct - hhook_head *hhh</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <code class="Fn">hhook_head_deregister_lookup</code>(<var class="Fa" style="white-space: nowrap;">int32_t - hhook_type</var>, <var class="Fa" style="white-space: nowrap;">int32_t - hhook_id</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <code class="Fn">hhook_run_hooks</code>(<var class="Fa" style="white-space: nowrap;">struct - hhook_head *hhh</var>, <var class="Fa" style="white-space: nowrap;">void - *ctx_data</var>, <var class="Fa" style="white-space: nowrap;">struct osd - *hosd</var>);</p> -<p class="Pp"><code class="Fn">HHOOKS_RUN_IF</code>(<var class="Fa" style="white-space: nowrap;">hhh</var>, - <var class="Fa" style="white-space: nowrap;">ctx_data</var>, - <var class="Fa" style="white-space: nowrap;">hosd</var>);</p> -<p class="Pp"><code class="Fn">HHOOKS_RUN_LOOKUP_IF</code>(<var class="Fa" style="white-space: nowrap;">hhook_type</var>, - <var class="Fa" style="white-space: nowrap;">hhook_id</var>, - <var class="Fa" style="white-space: nowrap;">ctx_data</var>, - <var class="Fa" style="white-space: nowrap;">hosd</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><code class="Nm">hhook</code> provides a framework for managing - and running arbitrary hook functions at defined hook points within the - kernel. The KPI was inspired by <a class="Xr">pfil(9)</a>, and in many - respects can be thought of as a more generic superset of pfil.</p> -<p class="Pp">The <a class="Xr">khelp(9)</a> and <code class="Nm">hhook</code> - frameworks are tightly integrated. Khelp is responsible for registering and - deregistering Khelp module hook functions with <code class="Nm">hhook</code> - points. The KPI functions used by <a class="Xr">khelp(9)</a> to do this are - not documented here as they are not relevant to consumers wishing to - instantiate hook points.</p> -<section class="Ss"> -<h2 class="Ss" id="Information_for_Khelp_Module_Implementors"><a class="permalink" href="#Information_for_Khelp_Module_Implementors">Information - for Khelp Module Implementors</a></h2> -<p class="Pp">Khelp modules indirectly interact with - <code class="Nm">hhook</code> by defining appropriate hook functions for - insertion into hook points. Hook functions must conform to the - <var class="Ft">hhook_func_t</var> function pointer declaration outlined in - the <a class="Sx" href="#SYNOPSIS">SYNOPSIS</a>.</p> -<p class="Pp">The <var class="Fa">hhook_type</var> and - <var class="Fa">hhook_id</var> arguments identify the hook point which has - called into the hook function. These are useful when a single hook function - is registered for multiple hook points and wants to know which hook point - has called into it. - <code class="In"><<a class="In">sys/hhook.h</a>></code> lists - available <var class="Fa">hhook_type</var> defines and subsystems which - export hook points are responsible for defining the - <var class="Fa">hhook_id</var> value in appropriate header files.</p> -<p class="Pp">The <var class="Fa">udata</var> argument will be passed to the - hook function if it was specified in the <var class="Vt">struct - hookinfo</var> at hook registration time.</p> -<p class="Pp">The <var class="Fa">ctx_data</var> argument contains context - specific data from the hook point call site. The data type passed is - subsystem dependent.</p> -<p class="Pp">The <var class="Fa">hdata</var> argument is a pointer to the - persistent per-object storage allocated for use by the module if required. - The pointer will only ever be NULL if the module did not request per-object - storage.</p> -<p class="Pp" id="khelp_get_osd">The <var class="Fa">hosd</var> argument can be - used with the <a class="Xr">khelp(9)</a> framework's - <a class="permalink" href="#khelp_get_osd"><code class="Fn">khelp_get_osd</code></a>() - function to access data belonging to a different Khelp module.</p> -<p class="Pp">Khelp modules instruct the Khelp framework to register their hook - functions with <code class="Nm">hhook</code> points by creating a - <var class="Vt">struct hookinfo</var> per hook point, which contains the - following members:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct hookinfo { - hhook_func_t hook_func; - struct helper *hook_helper; - void *hook_udata; - int32_t hook_id; - int32_t hook_type; -};</pre> -</div> -<p class="Pp">Khelp modules are responsible for setting all members of the - struct except <var class="Va">hook_helper</var> which is handled by the - Khelp framework.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Creating_and_Managing_Hook_Points"><a class="permalink" href="#Creating_and_Managing_Hook_Points">Creating - and Managing Hook Points</a></h2> -<p class="Pp">Kernel subsystems that wish to provide - <code class="Nm">hhook</code> points typically need to make four and - possibly five key changes to their implementation:</p> -<ul class="Bl-bullet"> - <li>Define a list of <var class="Va">hhook_id</var> mappings in an appropriate - subsystem header.</li> - <li id="hhook_head_register">Register each hook point with the - <a class="permalink" href="#hhook_head_register"><code class="Fn">hhook_head_register</code></a>() - function during initialisation of the subsystem.</li> - <li>Select or create a standardised data type to pass to hook functions as - contextual data.</li> - <li>Add a call to <code class="Fn">HHOOKS_RUN_IF</code>() or - <code class="Fn">HHOOKS_RUN_IF_LOOKUP</code>() at the point in the - subsystem's code where the hook point should be executed.</li> - <li>If the subsystem can be dynamically added/removed at runtime, each hook - point registered with the <code class="Fn">hhook_head_register</code>() - function when the subsystem was initialised needs to be deregistered with - the <code class="Fn">hhook_head_deregister</code>() or - <code class="Fn">hhook_head_deregister_lookup</code>() functions when the - subsystem is being deinitialised prior to removal.</li> -</ul> -<p class="Pp" id="hhook_head_register~2">The - <a class="permalink" href="#hhook_head_register~2"><code class="Fn">hhook_head_register</code></a>() - function registers a hook point with the <code class="Nm">hhook</code> - framework. The <var class="Fa">hook_type</var> argument defines the high - level type for the hook point. Valid types are defined in - <code class="In"><<a class="In">sys/hhook.h</a>></code> and new types - should be added as required. The <var class="Fa">hook_id</var> argument - specifies a unique, subsystem specific identifier for the hook point. The - <var class="Fa">hhh</var> argument will, if not NULL, be used to store a - reference to the <var class="Vt">struct hhook_head</var> created as part of - the registration process. Subsystems will generally want to store a local - copy of the <var class="Vt">struct hhook_head</var> so that they can use the - <code class="Fn">HHOOKS_RUN_IF</code>() macro to instantiate hook points. - The HHOOK_WAITOK flag may be passed in via the <var class="Fa">flags</var> - argument if <a class="Xr">malloc(9)</a> is allowed to sleep waiting for - memory to become available. If the hook point is within a virtualised - subsystem (e.g. the network stack), the HHOOK_HEADISINVNET flag should be - passed in via the <var class="Fa">flags</var> argument so that the - <var class="Vt">struct hhook_head</var> created during the registration - process will be added to a virtualised list.</p> -<p class="Pp" id="hhook_head_deregister">The - <a class="permalink" href="#hhook_head_deregister"><code class="Fn">hhook_head_deregister</code></a>() - function deregisters a previously registered hook point from the - <code class="Nm">hhook</code> framework. The <var class="Fa">hhh</var> - argument is the pointer to the <var class="Vt">struct hhook_head</var> - returned by - <a class="permalink" href="#hhoook_head_register"><code class="Fn" id="hhoook_head_register">hhoook_head_register</code></a>() - when the hook point was registered.</p> -<p class="Pp" id="hhook_head_deregister_lookup">The - <a class="permalink" href="#hhook_head_deregister_lookup"><code class="Fn">hhook_head_deregister_lookup</code></a>() - function can be used instead of - <code class="Fn">hhook_head_deregister</code>() in situations where the - caller does not have a cached copy of the <var class="Vt">struct - hhook_head</var> and wants to deregister a hook point using the appropriate - <var class="Fa">hook_type</var> and <var class="Fa">hook_id</var> - identifiers instead.</p> -<p class="Pp" id="hhook_run_hooks">The - <a class="permalink" href="#hhook_run_hooks"><code class="Fn">hhook_run_hooks</code></a>() - function should normally not be called directly and should instead be called - indirectly via the <code class="Fn">HHOOKS_RUN_IF</code>() macro. However, - there may be circumstances where it is preferable to call the function - directly, and so it is documented here for completeness. The - <var class="Fa">hhh</var> argument references the - <code class="Nm">hhook</code> point to call all registered hook functions - for. The <var class="Fa">ctx_data</var> argument specifies a pointer to the - contextual hook point data to pass into the hook functions. The - <var class="Fa">hosd</var> argument should be the pointer to the appropriate - object's <var class="Vt">struct osd</var> if the subsystem provides the - ability for Khelp modules to associate per-object data. Subsystems which do - not should pass NULL.</p> -<p class="Pp" id="HHOOKS_RUN_IF">The - <a class="permalink" href="#HHOOKS_RUN_IF"><code class="Fn">HHOOKS_RUN_IF</code></a>() - macro is the preferred way to implement hook points. It only calls the - <code class="Fn">hhook_run_hooks</code>() function if at least one hook - function is registered for the hook point. By checking for registered hook - functions, the macro minimises the cost associated with adding hook points - to frequently used code paths by reducing to a simple if test in the common - case where no hook functions are registered. The arguments are as described - for the <code class="Fn">hhook_run_hooks</code>() function.</p> -<p class="Pp" id="HHOOKS_RUN_IF_LOOKUP">The - <a class="permalink" href="#HHOOKS_RUN_IF_LOOKUP"><code class="Fn">HHOOKS_RUN_IF_LOOKUP</code></a>() - macro performs the same function as the - <code class="Fn">HHOOKS_RUN_IF</code>() macro, but performs an additional - step to look up the <var class="Vt">struct hhook_head</var> for the - specified <var class="Fa">hook_type</var> and <var class="Fa">hook_id</var> - identifiers. It should not be used except in code paths which are - infrequently executed because of the reference counting overhead associated - with the look up.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">Each <var class="Vt">struct hhook_head</var> protects its internal - list of hook functions with a <a class="Xr">rmlock(9)</a>. Therefore, - anytime <code class="Fn">hhook_run_hooks</code>() is called directly or - indirectly via the <code class="Fn">HHOOKS_RUN_IF</code>() or - <code class="Fn">HHOOKS_RUN_IF_LOOKUP</code>() macros, a non-sleepable read - lock will be acquired and held across the calls to all registered hook - functions.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp"><code class="Fn">hhook_head_register</code>() returns 0 if no - errors occurred. It returns EEXIST if a hook point with the same - <var class="Fa">hook_type</var> and <var class="Fa">hook_id</var> is already - registered. It returns EINVAL if the HHOOK_HEADISINVNET flag is not set in - <var class="Fa">flags</var> because the implementation does not yet support - hook points in non-virtualised subsystems (see the - <a class="Sx" href="#BUGS">BUGS</a> section for details). It returns ENOMEM - if <a class="Xr">malloc(9)</a> failed to allocate memory for the new - <var class="Vt">struct hhook_head</var>.</p> -<p class="Pp"><code class="Fn">hhook_head_deregister</code>() and - <code class="Fn">hhook_head_deregister_lookup</code>() return 0 if no errors - occurred. They return ENOENT if <var class="Fa">hhh</var> is NULL. They - return EBUSY if the reference count of <var class="Fa">hhh</var> is greater - than one.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">A well commented example Khelp module can be found at: - <span class="Pa">/usr/share/examples/kld/khelp/h_example.c</span></p> -<p class="Pp">The <a class="Xr">tcp(4)</a> implementation provides two - <code class="Nm">hhook</code> points which are called for packets - sent/received when a connection is in the established phase. Search for - HHOOK in the following files: <span class="Pa">sys/netinet/tcp_var.h</span>, - <span class="Pa">sys/netinet/tcp_input.c</span>, - <span class="Pa">sys/netinet/tcp_output.c</span> and - <span class="Pa">sys/netinet/tcp_subr.c</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">khelp(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ACKNOWLEDGEMENTS"><a class="permalink" href="#ACKNOWLEDGEMENTS">ACKNOWLEDGEMENTS</a></h1> -<p class="Pp">Development and testing of this software were made possible in - part by grants from the FreeBSD Foundation and Cisco University Research - Program Fund at Community Foundation Silicon Valley.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">hhook</code> framework first appeared in - <span class="Ux">FreeBSD 9.0</span>.</p> -<p class="Pp">The <code class="Nm">hhook</code> framework was first released in - 2010 by Lawrence Stewart whilst studying at Swinburne University of - Technology's Centre for Advanced Internet Architectures, Melbourne, - Australia. More details are available at:</p> -<p class="Pp">http://caia.swin.edu.au/urp/newtcp/</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">hhook</code> framework was written by - <span class="An">Lawrence Stewart</span> - <<a class="Mt" href="mailto:lstewart@FreeBSD.org">lstewart@FreeBSD.org</a>>.</p> -<p class="Pp">This manual page was written by <span class="An">David - Hayes</span> - <<a class="Mt" href="mailto:david.hayes@ieee.org">david.hayes@ieee.org</a>> - and <span class="An">Lawrence Stewart</span> - <<a class="Mt" href="mailto:lstewart@FreeBSD.org">lstewart@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 21, 2013</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/hz.9 3.html b/static/freebsd/man9/hz.9 3.html deleted file mode 100644 index fdc35443..00000000 --- a/static/freebsd/man9/hz.9 3.html +++ /dev/null @@ -1,115 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">HZ(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">HZ(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">hz</code>, <code class="Nm">tick</code>, - <code class="Nm">stathz</code>, <code class="Nm">profhz</code> — - <span class="Nd">system time model</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/kernel.h</a>></code></p> -<p class="Pp"> - <br/> - <var class="Vt">extern int hz;</var> - <br/> - <var class="Vt">extern int tick;</var> - <br/> - <var class="Vt">extern int stathz;</var> - <br/> - <var class="Vt">extern int profhz; /* deprecated */</var></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><span class="Ux">FreeBSD</span> utilizes periodic, one-shot, - global or per-CPU timing hardware using <a class="Xr">eventtimers(9)</a> to - produce traditional clock behavior. These clocks regulate periodic events in - the system.</p> -<p class="Pp">The main clock is used to update the system's notion of time via - <a class="Xr">timecounters(9)</a> and to pace periodic system processing as - documented in <a class="Xr">hardclock(9)</a>. That routine may be called - once every 1 / <var class="Va">hz</var> seconds, though the call is omitted - if no work is needed in the next tick and it has not been 0.5 seconds since - the last call.</p> -<p class="Pp">The stat clock running at <var class="Va">stathz</var> gathers - statistics on the system and its processes. It computes values for - <a class="Xr">getrusage(2)</a> and statistics displayed by - <a class="Xr">ps(1)</a> and <a class="Xr">top(1)</a>.</p> -<p class="Pp">Finally, a profiling clock may run at <var class="Vt">profhz</var> - to sample user program counter values for profiling purposes. This profiling - mechanism has been replaced by the more functional - <a class="Xr">hwpmc(4)</a> and may be removed in a future version of - <span class="Ux">FreeBSD</span>.</p> -<p class="Pp"><var class="Va">tick</var> is the length of time in microseconds - of one system tick.</p> -<p class="Pp" id="struct">These system variables are also available as - <a class="permalink" href="#struct"><i class="Em">struct clockinfo</i></a> - from <a class="Xr">sysctl(3)</a> and - <a class="permalink" href="#kern.clockrate"><b class="Sy" id="kern.clockrate">kern.clockrate</b></a> - from <a class="Xr">sysctl(8)</a>.</p> -<p class="Pp" id="kern.cp_time">The current global and per-CPU CPU time usage is - returned to the user in units of 1 / <var class="Va">stathz</var> ticks in - the - <a class="permalink" href="#kern.cp_time"><b class="Sy">kern.cp_time</b></a> - and - <a class="permalink" href="#kern.cp_times"><b class="Sy" id="kern.cp_times">kern.cp_times</b></a> - sysctl MIBs.</p> -<p class="Pp" id="kern.hz">The <var class="Va">hz</var> rate may be overridden - by defining <code class="Dv">HZ</code> in the kernel configuration file or - setting <a class="permalink" href="#kern.hz"><b class="Sy">kern.hz</b></a> - system tuneable via <a class="Xr">loader.conf(5)</a>.</p> -<p class="Pp">The current default is 1000 Hz for a tick of 1 ms for real - hardware. For virtual machine guests, the default is 100 Hz for a tick of 10 - ms. Only override the default value if you really know what you are doing. - Due to the adaptive nature of timeouts, changing this value has less effect - than it had in the past.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ps(1)</a>, <a class="Xr">top(1)</a>, - <a class="Xr">setitimer(2)</a>, <a class="Xr">timer_settime(2)</a>, - <a class="Xr">loader.conf(5)</a>, <a class="Xr">eventtimers(9)</a>, - <a class="Xr">hardclock(9)</a>, <a class="Xr">microtime(9)</a>, - <a class="Xr">time_second(9)</a>, <a class="Xr">timecounters(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">Historically, both the <var class="Va">stathz</var> and - <var class="Va">profhz</var> clocks have run off the same physical timer - running at the slower rate when no process is using the profile features, or - at the higher rate when at least one process is using it. Although the - interface is deprecated by <span class="St">IEEE Std 1003.1-2008 - (“POSIX.1”)</span> in favor of - <a class="Xr">timer_settime(2)</a>, several programs still use - <a class="Xr">setitimer(2)</a> and <var class="Va">ITIMER_PROF</var> for a - higher-resolution periodic interrupt than has been traditionally - available.</p> -<p class="Pp">Historically, <a class="Xr">hardclock(9)</a> has also been run off - a separate interrupt, except on constrained platforms that lack enough - periodic interrupt sources. <span class="Ux">FreeBSD</span> uses - <a class="Xr">eventtimers(9)</a> to abstract these details away, though some - old code may still harbor assumptions that are an imperfect fit to this - abstraction.</p> -<p class="Pp"><a class="Xr">timecounters(9)</a> are limited to 32-bits and wrap - after about a second, so we must update the time hands they maintain at - least every half second to get the proper wrapping math. In addition, - <var class="Va">kern.cp_times</var> needs to updated at least once a second - so that the values displayed by <a class="Xr">top(1)</a> update every - second.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 1, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ieee80211.9 3.html b/static/freebsd/man9/ieee80211.9 3.html deleted file mode 100644 index 7c8c3714..00000000 --- a/static/freebsd/man9/ieee80211.9 3.html +++ /dev/null @@ -1,568 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">IEEE80211(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">IEEE80211(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">IEEE80211</code> — <span class="Nd">802.11 - network layer</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">net80211/ieee80211_var.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_ifattach</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211com *ic</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_ifdetach</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211com *ic</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_mhz2ieee</code>(<var class="Fa" style="white-space: nowrap;">u_int - freq</var>, <var class="Fa" style="white-space: nowrap;">u_int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_chan2ieee</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211com *ic</var>, <var class="Fa" style="white-space: nowrap;">const - struct ieee80211_channel *c</var>);</p> -<p class="Pp"><var class="Ft">u_int</var> - <br/> - <code class="Fn">ieee80211_ieee2mhz</code>(<var class="Fa" style="white-space: nowrap;">u_int - chan</var>, <var class="Fa" style="white-space: nowrap;">u_int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_media_change</code>(<var class="Fa" style="white-space: nowrap;">struct - ifnet *ifp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_media_status</code>(<var class="Fa" style="white-space: nowrap;">struct - ifnet *ifp</var>, <var class="Fa" style="white-space: nowrap;">struct - ifmediareq *imr</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_setmode</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211com *ic</var>, <var class="Fa" style="white-space: nowrap;">enum - ieee80211_phymode mode</var>);</p> -<p class="Pp"><var class="Ft">enum ieee80211_phymode</var> - <br/> - <code class="Fn">ieee80211_chan2mode</code>(<var class="Fa">const struct - ieee80211_channel *chan</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_rate2media</code>(<var class="Fa">struct - ieee80211com *ic</var>, <var class="Fa">int rate</var>, <var class="Fa">enum - ieee80211_phymode mode</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_media2rate</code>(<var class="Fa" style="white-space: nowrap;">int - mword</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">IEEE 802.11 device drivers are written to use the infrastructure - provided by the <code class="Nm">IEEE80211</code> software layer. This - software provides a support framework for drivers that includes ifnet - cloning, state management, and a user management API by which applications - interact with 802.11 devices. Most drivers depend on the - <code class="Nm">IEEE80211</code> layer for protocol services but devices - that off-load functionality may bypass the layer to connect directly to the - device.</p> -<p class="Pp">A <code class="Nm">IEEE80211</code> device driver implements a - virtual radio API that is exported to users through network interfaces (aka - vaps) that are cloned from the underlying device. These interfaces have an - operating mode (station, adhoc, hostap, wds, monitor, etc.) that is fixed - for the lifetime of the interface. Devices that can support multiple - concurrent interfaces allow multiple vaps to be cloned. This enables - construction of interesting applications such as an AP vap and one or more - WDS vaps or multiple AP vaps, each with a different security model. The - <code class="Nm">IEEE80211</code> layer virtualizes most 802.11 state and - coordinates vap state changes including scheduling multiple vaps. State that - is not virtualized includes the current channel and WME/WMM parameters. - Protocol processing is typically handled entirely in the - <code class="Nm">IEEE80211</code> layer with drivers responsible purely for - moving data between the host and device. Similarly, - <code class="Nm">IEEE80211</code> handles most <a class="Xr">ioctl(2)</a> - requests without entering the driver; instead drivers are notified of state - changes that require their involvement.</p> -<p class="Pp">The virtual radio interface defined by the - <code class="Nm">IEEE80211</code> layer means that drivers must be - structured to follow specific rules. Drivers that support only a single - interface at any time must still follow these rules.</p> -<p class="Pp">Most of these functions require that attachment to the stack is - performed before calling.</p> -<p class="Pp" id="ieee80211_ifattach">The - <a class="permalink" href="#ieee80211_ifattach"><code class="Fn">ieee80211_ifattach</code></a>() - function attaches the wireless network interface <var class="Fa">ic</var> to - the 802.11 network stack layer. This function must be called before using - any of the <code class="Nm">IEEE80211</code> functions which need to store - driver state across invocations.</p> -<p class="Pp" id="ieee80211_ifdetach">The - <a class="permalink" href="#ieee80211_ifdetach"><code class="Fn">ieee80211_ifdetach</code></a>() - function frees any <code class="Nm">IEEE80211</code> structures associated - with the driver, and performs Ethernet and BPF detachment on behalf of the - caller.</p> -<p class="Pp" id="ieee80211_mhz2ieee">The - <a class="permalink" href="#ieee80211_mhz2ieee"><code class="Fn">ieee80211_mhz2ieee</code></a>() - utility function converts the frequency <var class="Fa">freq</var> - (specified in MHz) to an IEEE 802.11 channel number. The - <var class="Fa">flags</var> argument is a hint which specifies whether the - frequency is in the 2GHz ISM band - (<var class="Vt">IEEE80211_CHAN_2GHZ</var>) or the 5GHz band - (<var class="Vt">IEEE80211_CHAN_5GHZ</var>); appropriate clipping of the - result is then performed.</p> -<p class="Pp" id="ieee80211_chan2ieee">The - <a class="permalink" href="#ieee80211_chan2ieee"><code class="Fn">ieee80211_chan2ieee</code></a>() - function converts the channel specified in <var class="Fa">*c</var> to an - IEEE channel number for the driver <var class="Fa">ic</var>. If the - conversion would be invalid, an error message is printed to the system - console. This function REQUIRES that the driver is hooked up to the - <code class="Nm">IEEE80211</code> subsystem.</p> -<p class="Pp" id="ieee80211_ieee2mhz">The - <a class="permalink" href="#ieee80211_ieee2mhz"><code class="Fn">ieee80211_ieee2mhz</code></a>() - utility function converts the IEEE channel number <var class="Ft">chan</var> - to a frequency (in MHz). The <var class="Fa">flags</var> argument is a hint - which specifies whether the frequency is in the 2GHz ISM band - (<var class="Vt">IEEE80211_CHAN_2GHZ</var>) or the 5GHz band - (<var class="Vt">IEEE80211_CHAN_5GHZ</var>); appropriate clipping of the - result is then performed.</p> -<p class="Pp" id="ieee80211_media_status">The - <a class="permalink" href="#ieee80211_media_status"><code class="Fn">ieee80211_media_status</code></a>() - and - <a class="permalink" href="#ieee80211_media_change"><code class="Fn" id="ieee80211_media_change">ieee80211_media_change</code></a>() - functions are device-independent handlers for <var class="Vt">ifmedia</var> - commands and are not intended to be called directly.</p> -<p class="Pp" id="ieee80211_setmode">The - <a class="permalink" href="#ieee80211_setmode"><code class="Fn">ieee80211_setmode</code></a>() - function is called from within the 802.11 stack to change the mode of the - driver's PHY; it is not intended to be called directly.</p> -<p class="Pp" id="ieee80211_chan2mode">The - <a class="permalink" href="#ieee80211_chan2mode"><code class="Fn">ieee80211_chan2mode</code></a>() - function returns the PHY mode required for use with the channel - <var class="Fa">chan</var>. This is typically used when selecting a rate - set, to be advertised in beacons, for example.</p> -<p class="Pp" id="ieee80211_rate2media">The - <a class="permalink" href="#ieee80211_rate2media"><code class="Fn">ieee80211_rate2media</code></a>() - function converts the bit rate <var class="Fa">rate</var> (measured in units - of 0.5Mbps) to an <var class="Vt">ifmedia</var> sub-type, for the device - <var class="Fa">ic</var> running in PHY mode <var class="Fa">mode</var>. The - <a class="permalink" href="#ieee80211_media2rate"><code class="Fn" id="ieee80211_media2rate">ieee80211_media2rate</code></a>() - performs the reverse of this conversion, returning the bit rate (in 0.5Mbps - units) corresponding to an <var class="Vt">ifmedia</var> sub-type.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DATA_STRUCTURES"><a class="permalink" href="#DATA_STRUCTURES">DATA - STRUCTURES</a></h1> -<p class="Pp">The virtual radio architecture splits state between a single - per-device <var class="Vt">ieee80211com</var> structure and one or more - <var class="Vt">ieee80211vap</var> structures. Drivers are expected to setup - various shared state in these structures at device attach and during vap - creation but otherwise should treat them as read-only. The - <var class="Vt">ieee80211com</var> structure is allocated by the - <code class="Nm">IEEE80211</code> layer as adjunct data to a device's - <var class="Vt">ifnet</var>; it is accessed through the - <var class="Vt">if_l2com</var> structure member. The - <var class="Vt">ieee80211vap</var> structure is allocated by the driver in - the “vap create” method and should be extended with any - driver-private state. This technique of giving the driver control to - allocate data structures is used for other <code class="Nm">IEEE80211</code> - data structures and should be exploited to maintain driver-private state - together with public <code class="Nm">IEEE80211</code> state.</p> -<p class="Pp">The other main data structures are the station, or node, table - that tracks peers in the local BSS, and the channel table that defines the - current set of available radio channels. Both tables are bound to the - <var class="Vt">ieee80211com</var> structure and shared by all vaps. - Long-lasting references to a node are counted to guard against premature - reclamation. In particular every packet sent/received holds a node reference - (either explicitly for transmit or implicitly on receive).</p> -<p class="Pp">The <var class="Vt">ieee80211com</var> and - <var class="Vt">ieee80211vap</var> structures also hold a collection of - method pointers that drivers fill-in and/or override to take control of - certain operations. These methods are the primary way drivers are bound to - the <code class="Nm">IEEE80211</code> layer and are described below.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DRIVER_ATTACH/DETACH"><a class="permalink" href="#DRIVER_ATTACH/DETACH">DRIVER - ATTACH/DETACH</a></h1> -<p class="Pp">Drivers attach to the <code class="Nm">IEEE80211</code> layer with - the - <a class="permalink" href="#ieee80211_ifattach~2"><code class="Fn" id="ieee80211_ifattach~2">ieee80211_ifattach</code></a>() - function. The driver is expected to allocate and setup any device-private - data structures before passing control. The - <var class="Vt">ieee80211com</var> structure must be pre-initialized with - state required to setup the <code class="Nm">IEEE80211</code> layer:</p> -<dl class="Bl-tag"> - <dt id="ic_ifp"><a class="permalink" href="#ic_ifp"><code class="Dv">ic_ifp</code></a></dt> - <dd>Backpointer to the physical device's ifnet.</dd> - <dt id="ic_caps"><a class="permalink" href="#ic_caps"><code class="Dv">ic_caps</code></a></dt> - <dd>Device/driver capabilities; see below for a complete description.</dd> - <dt id="ic_channels"><a class="permalink" href="#ic_channels"><code class="Dv">ic_channels</code></a></dt> - <dd>Table of channels the device is capable of operating on. This is initially - provided by the driver but may be changed through calls that change the - regulatory state.</dd> - <dt id="ic_nchan"><a class="permalink" href="#ic_nchan"><code class="Dv">ic_nchan</code></a></dt> - <dd>Number of entries in <code class="Dv">ic_channels</code>.</dd> -</dl> -<p class="Pp" id="ieee80211_ifattach~3">On return from - <a class="permalink" href="#ieee80211_ifattach~3"><code class="Fn">ieee80211_ifattach</code></a>() - the driver is expected to override default callback functions in the - <var class="Vt">ieee80211com</var> structure to register it's private - routines. Methods marked with a “*” must be provided by the - driver.</p> -<dl class="Bl-tag"> - <dt id="ic_vap_create*"><a class="permalink" href="#ic_vap_create*"><code class="Dv">ic_vap_create*</code></a></dt> - <dd>Create a vap instance of the specified type (operating mode). Any fixed - BSSID and/or MAC address is provided. Drivers that support multi-bssid - operation may honor the requested BSSID or assign their own.</dd> - <dt id="ic_vap_delete*"><a class="permalink" href="#ic_vap_delete*"><code class="Dv">ic_vap_delete*</code></a></dt> - <dd>Destroy a vap instance created with - <code class="Dv">ic_vap_create</code>.</dd> - <dt id="ic_getradiocaps"><a class="permalink" href="#ic_getradiocaps"><code class="Dv">ic_getradiocaps</code></a></dt> - <dd>Return the list of calibrated channels for the radio. The default method - returns the current list of channels (space permitting).</dd> - <dt id="ic_setregdomain"><a class="permalink" href="#ic_setregdomain"><code class="Dv">ic_setregdomain</code></a></dt> - <dd>Process a request to change regulatory state. The routine may reject a - request or constrain changes (e.g. reduce transmit power caps). The - default method accepts all proposed changes.</dd> - <dt id="ic_send_mgmt"><a class="permalink" href="#ic_send_mgmt"><code class="Dv">ic_send_mgmt</code></a></dt> - <dd>Send an 802.11 management frame. The default method fabricates the frame - using <code class="Nm">IEEE80211</code> state and passes it to the driver - through the <code class="Dv">ic_raw_xmit</code> method.</dd> - <dt id="ic_raw_xmit"><a class="permalink" href="#ic_raw_xmit"><code class="Dv">ic_raw_xmit</code></a></dt> - <dd>Transmit a raw 802.11 frame. The default method drops the frame and - generates a message on the console.</dd> - <dt id="ic_updateslot"><a class="permalink" href="#ic_updateslot"><code class="Dv">ic_updateslot</code></a></dt> - <dd>Update hardware state after an 802.11 IFS slot time change. There is no - default method; the pointer may be NULL in which case it will not be - used.</dd> - <dt id="ic_update_mcast"><a class="permalink" href="#ic_update_mcast"><code class="Dv">ic_update_mcast</code></a></dt> - <dd>Update hardware for a change in the multicast packet filter. The default - method prints a console message.</dd> - <dt id="ic_update_promisc"><a class="permalink" href="#ic_update_promisc"><code class="Dv">ic_update_promisc</code></a></dt> - <dd>Update hardware for a change in the promiscuous mode setting. The default - method prints a console message.</dd> - <dt id="ic_newassoc"><a class="permalink" href="#ic_newassoc"><code class="Dv">ic_newassoc</code></a></dt> - <dd>Update driver/device state for association to a new AP (in station mode) - or when a new station associates (e.g. in AP mode). There is no default - method; the pointer may be NULL in which case it will not be used.</dd> - <dt id="ic_node_alloc"><a class="permalink" href="#ic_node_alloc"><code class="Dv">ic_node_alloc</code></a></dt> - <dd>Allocate and initialize a <var class="Vt">ieee80211_node</var> structure. - This method cannot sleep. The default method allocates zero'd memory using - <a class="Xr">malloc(9)</a>. Drivers should override this method to - allocate extended storage for their own needs. Memory allocated by the - driver must be tagged with <code class="Dv">M_80211_NODE</code> to balance - the memory allocation statistics.</dd> - <dt id="ic_node_free"><a class="permalink" href="#ic_node_free"><code class="Dv">ic_node_free</code></a></dt> - <dd>Reclaim storage of a node allocated by - <code class="Dv">ic_node_alloc</code>. Drivers are expected to - <a class="permalink" href="#interpose"><i class="Em" id="interpose">interpose</i></a> - their own method to cleanup private state but must call through this - method to allow <code class="Nm">IEEE80211</code> to reclaim it's private - state.</dd> - <dt id="ic_node_cleanup"><a class="permalink" href="#ic_node_cleanup"><code class="Dv">ic_node_cleanup</code></a></dt> - <dd>Cleanup state in a <var class="Vt">ieee80211_node</var> created by - <code class="Dv">ic_node_alloc</code>. This operation is distinguished - from <code class="Dv">ic_node_free</code> in that it may be called long - before the node is actually reclaimed to cleanup adjunct state. This can - happen, for example, when a node must not be reclaimed due to references - held by packets in the transmit queue. Drivers typically interpose - <code class="Dv">ic_node_cleanup</code> instead of - <code class="Dv">ic_node_free</code>.</dd> - <dt id="ic_node_age"><a class="permalink" href="#ic_node_age"><code class="Dv">ic_node_age</code></a></dt> - <dd>Age, and potentially reclaim, resources associated with a node. The - default method ages frames on the power-save queue (in AP mode) and - pending frames in the receive reorder queues (for stations using - A-MPDU).</dd> - <dt id="ic_node_drain"><a class="permalink" href="#ic_node_drain"><code class="Dv">ic_node_drain</code></a></dt> - <dd>Reclaim all optional resources associated with a node. This call is used - to free up resources when they are in short supply.</dd> - <dt id="ic_node_getrssi"><a class="permalink" href="#ic_node_getrssi"><code class="Dv">ic_node_getrssi</code></a></dt> - <dd>Return the Receive Signal Strength Indication (RSSI) in .5 dBm units for - the specified node. This interface returns a subset of the information - returned by <code class="Dv">ic_node_getsignal</code>. The default method - calculates a filtered average over the last ten samples passed in to - <a class="Xr">ieee80211_input(9)</a> or - <a class="Xr">ieee80211_input_all(9)</a>.</dd> - <dt id="ic_node_getsignal"><a class="permalink" href="#ic_node_getsignal"><code class="Dv">ic_node_getsignal</code></a></dt> - <dd>Return the RSSI and noise floor (in .5 dBm units) for a station. The - default method calculates RSSI as described above; the noise floor - returned is the last value supplied to - <a class="Xr">ieee80211_input(9)</a> or - <a class="Xr">ieee80211_input_all(9)</a>.</dd> - <dt id="ic_node_getmimoinfo"><a class="permalink" href="#ic_node_getmimoinfo"><code class="Dv">ic_node_getmimoinfo</code></a></dt> - <dd>Return MIMO radio state for a station in support of the - <code class="Dv">IEEE80211_IOC_STA_INFO</code> ioctl request. The default - method returns nothing.</dd> - <dt id="ic_scan_start*"><a class="permalink" href="#ic_scan_start*"><code class="Dv">ic_scan_start*</code></a></dt> - <dd>Prepare driver/hardware state for scanning. This callback is done in a - sleepable context.</dd> - <dt id="ic_scan_end*"><a class="permalink" href="#ic_scan_end*"><code class="Dv">ic_scan_end*</code></a></dt> - <dd>Restore driver/hardware state after scanning completes. This callback is - done in a sleepable context.</dd> - <dt id="ic_set_channel*"><a class="permalink" href="#ic_set_channel*"><code class="Dv">ic_set_channel*</code></a></dt> - <dd>Set the current radio channel using <var class="Vt">ic_curchan</var>. This - callback is done in a sleepable context.</dd> - <dt id="ic_scan_curchan"><a class="permalink" href="#ic_scan_curchan"><code class="Dv">ic_scan_curchan</code></a></dt> - <dd>Start scanning on a channel. This method is called immediately after each - channel change and must initiate the work to scan a channel and schedule a - timer to advance to the next channel in the scan list. This callback is - done in a sleepable context. The default method handles active scan work - (e.g. sending ProbeRequest frames), and schedules a call to - <a class="Xr">ieee80211_scan_next(9)</a> according to the maximum dwell - time for the channel. Drivers that off-load scan work to firmware - typically use this method to trigger per-channel scan activity.</dd> - <dt id="ic_scan_mindwell"><a class="permalink" href="#ic_scan_mindwell"><code class="Dv">ic_scan_mindwell</code></a></dt> - <dd>Handle reaching the minimum dwell time on a channel when scanning. This - event is triggered when one or more stations have been found on a channel - and the minimum dwell time has been reached. This callback is done in a - sleepable context. The default method signals the scan machinery to - advance to the next channel as soon as possible. Drivers can use this - method to preempt further work (e.g. if scanning is handled by firmware) - or ignore the request to force maximum dwell time on a channel.</dd> - <dt id="ic_recv_action"><a class="permalink" href="#ic_recv_action"><code class="Dv">ic_recv_action</code></a></dt> - <dd>Process a received Action frame. The default method points to - <a class="Xr">ieee80211_recv_action(9)</a> which provides a mechanism for - setting up handlers for each Action frame class.</dd> - <dt id="ic_send_action"><a class="permalink" href="#ic_send_action"><code class="Dv">ic_send_action</code></a></dt> - <dd>Transmit an Action frame. The default method points to - <a class="Xr">ieee80211_send_action(9)</a> which provides a mechanism for - setting up handlers for each Action frame class.</dd> - <dt id="ic_ampdu_enable"><a class="permalink" href="#ic_ampdu_enable"><code class="Dv">ic_ampdu_enable</code></a></dt> - <dd>Check if transmit A-MPDU should be enabled for the specified station and - AC. The default method checks a per-AC traffic rate against a per-vap - threshold to decide if A-MPDU should be enabled. This method also - rate-limits ADDBA requests so that requests are not made too frequently - when a receiver has limited resources.</dd> - <dt id="ic_addba_request"><a class="permalink" href="#ic_addba_request"><code class="Dv">ic_addba_request</code></a></dt> - <dd>Request A-MPDU transmit aggregation. The default method sets up local - state and issues an ADDBA Request Action frame. Drivers may interpose this - method if they need to setup private state for handling transmit - A-MPDU.</dd> - <dt id="ic_addb_response"><a class="permalink" href="#ic_addb_response"><code class="Dv">ic_addb_response</code></a></dt> - <dd>Process a received ADDBA Response Action frame and setup resources as - needed for doing transmit A-MPDU.</dd> - <dt id="ic_addb_stop"><a class="permalink" href="#ic_addb_stop"><code class="Dv">ic_addb_stop</code></a></dt> - <dd>Shutdown an A-MPDU transmit stream for the specified station and AC. The - default method reclaims local state after sending a DelBA Action - frame.</dd> - <dt id="ic_bar_response"><a class="permalink" href="#ic_bar_response"><code class="Dv">ic_bar_response</code></a></dt> - <dd>Process a response to a transmitted BAR control frame.</dd> - <dt id="ic_ampdu_rx_start"><a class="permalink" href="#ic_ampdu_rx_start"><code class="Dv">ic_ampdu_rx_start</code></a></dt> - <dd>Prepare to receive A-MPDU data from the specified station for the - TID.</dd> - <dt id="ic_ampdu_rx_stop"><a class="permalink" href="#ic_ampdu_rx_stop"><code class="Dv">ic_ampdu_rx_stop</code></a></dt> - <dd>Terminate receipt of A-MPDU data from the specified station for the - TID.</dd> -</dl> -<p class="Pp">Once the <code class="Nm">IEEE80211</code> layer is attached to a - driver there are two more steps typically done to complete the work:</p> -<ol class="Bl-enum"> - <li>Setup “radiotap support” for capturing raw 802.11 packets - that pass through the device. This is done with a call to - <a class="Xr">ieee80211_radiotap_attach(9)</a>.</li> - <li>Do any final device setup like enabling interrupts.</li> -</ol> -<p class="Pp" id="ieee80211_ifdetach~2">State is torn down and reclaimed with a - call to - <a class="permalink" href="#ieee80211_ifdetach~2"><code class="Fn">ieee80211_ifdetach</code></a>(). - Note this call may result in multiple callbacks into the driver so it should - be done before any critical driver state is reclaimed. On return from - <code class="Fn">ieee80211_ifdetach</code>() all associated vaps and ifnet - structures are reclaimed or inaccessible to user applications so it is safe - to teardown driver state without worry about being re-entered. The driver is - responsible for calling <a class="Xr">if_free(9)</a> on the ifnet it - allocated for the physical device.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DRIVER_CAPABILITIES"><a class="permalink" href="#DRIVER_CAPABILITIES">DRIVER - CAPABILITIES</a></h1> -<p class="Pp">Driver/device capabilities are specified using several sets of - flags in the <var class="Vt">ieee80211com</var> structure. General - capabilities are specified by <var class="Vt">ic_caps</var>. Hardware - cryptographic capabilities are specified by - <var class="Vt">ic_cryptocaps</var>. Software cryptographic capabilities are - specified by <var class="Vt">ic_sw_cryptocaps</var>. 802.11n capabilities, - if any, are specified by <var class="Vt">ic_htcaps</var>. The - <code class="Nm">IEEE80211</code> layer propagates a subset of these - capabilities to each vap through the equivalent fields: - <var class="Vt">iv_caps</var>, <var class="Vt">iv_cryptocaps</var>, and - <var class="Vt">iv_htcaps</var>. The following general capabilities are - defined:</p> -<dl class="Bl-tag"> - <dt id="IEEE80211_C_STA"><a class="permalink" href="#IEEE80211_C_STA"><code class="Dv">IEEE80211_C_STA</code></a></dt> - <dd>Device is capable of operating in station (aka Infrastructure) mode.</dd> - <dt id="IEEE80211_C_8023ENCAP"><a class="permalink" href="#IEEE80211_C_8023ENCAP"><code class="Dv">IEEE80211_C_8023ENCAP</code></a></dt> - <dd>Device requires 802.3-encapsulated frames be passed for transmit. By - default <code class="Nm">IEEE80211</code> will encapsulate all outbound - frames as 802.11 frames (without a PLCP header).</dd> - <dt id="IEEE80211_C_FF"><a class="permalink" href="#IEEE80211_C_FF"><code class="Dv">IEEE80211_C_FF</code></a></dt> - <dd>Device supports Atheros Fast-Frames.</dd> - <dt id="IEEE80211_C_TURBOP"><a class="permalink" href="#IEEE80211_C_TURBOP"><code class="Dv">IEEE80211_C_TURBOP</code></a></dt> - <dd>Device supports Atheros Dynamic Turbo mode.</dd> - <dt id="IEEE80211_C_IBSS"><a class="permalink" href="#IEEE80211_C_IBSS"><code class="Dv">IEEE80211_C_IBSS</code></a></dt> - <dd>Device is capable of operating in adhoc/IBSS mode.</dd> - <dt id="IEEE80211_C_PMGT"><a class="permalink" href="#IEEE80211_C_PMGT"><code class="Dv">IEEE80211_C_PMGT</code></a></dt> - <dd>Device supports dynamic power-management (aka power save) in station - mode.</dd> - <dt id="IEEE80211_C_HOSTAP"><a class="permalink" href="#IEEE80211_C_HOSTAP"><code class="Dv">IEEE80211_C_HOSTAP</code></a></dt> - <dd>Device is capable of operating as an Access Point in Infrastructure - mode.</dd> - <dt id="IEEE80211_C_AHDEMO"><a class="permalink" href="#IEEE80211_C_AHDEMO"><code class="Dv">IEEE80211_C_AHDEMO</code></a></dt> - <dd>Device is capable of operating in Adhoc Demo mode. In this mode the device - is used purely to send/receive raw 802.11 frames.</dd> - <dt id="IEEE80211_C_SWRETRY"><a class="permalink" href="#IEEE80211_C_SWRETRY"><code class="Dv">IEEE80211_C_SWRETRY</code></a></dt> - <dd>Device supports software retry of transmitted frames.</dd> - <dt id="IEEE80211_C_TXPMGT"><a class="permalink" href="#IEEE80211_C_TXPMGT"><code class="Dv">IEEE80211_C_TXPMGT</code></a></dt> - <dd>Device support dynamic transmit power changes on transmitted frames; also - known as Transmit Power Control (TPC).</dd> - <dt id="IEEE80211_C_SHSLOT"><a class="permalink" href="#IEEE80211_C_SHSLOT"><code class="Dv">IEEE80211_C_SHSLOT</code></a></dt> - <dd>Device supports short slot time operation (for 802.11g).</dd> - <dt id="IEEE80211_C_SHPREAMBLE"><a class="permalink" href="#IEEE80211_C_SHPREAMBLE"><code class="Dv">IEEE80211_C_SHPREAMBLE</code></a></dt> - <dd>Device supports short preamble operation (for 802.11g).</dd> - <dt id="IEEE80211_C_MONITOR"><a class="permalink" href="#IEEE80211_C_MONITOR"><code class="Dv">IEEE80211_C_MONITOR</code></a></dt> - <dd>Device is capable of operating in monitor mode.</dd> - <dt id="IEEE80211_C_DFS"><a class="permalink" href="#IEEE80211_C_DFS"><code class="Dv">IEEE80211_C_DFS</code></a></dt> - <dd>Device supports radar detection and/or DFS. DFS protocol support can be - handled by <code class="Nm">IEEE80211</code> but the device must be - capable of detecting radar events.</dd> - <dt id="IEEE80211_C_MBSS"><a class="permalink" href="#IEEE80211_C_MBSS"><code class="Dv">IEEE80211_C_MBSS</code></a></dt> - <dd>Device is capable of operating in MeshBSS (MBSS) mode (as defined by - 802.11s Draft 3.0).</dd> - <dt id="IEEE80211_C_WPA1"><a class="permalink" href="#IEEE80211_C_WPA1"><code class="Dv">IEEE80211_C_WPA1</code></a></dt> - <dd>Device supports WPA1 operation.</dd> - <dt id="IEEE80211_C_WPA2"><a class="permalink" href="#IEEE80211_C_WPA2"><code class="Dv">IEEE80211_C_WPA2</code></a></dt> - <dd>Device supports WPA2/802.11i operation.</dd> - <dt id="IEEE80211_C_BURST"><a class="permalink" href="#IEEE80211_C_BURST"><code class="Dv">IEEE80211_C_BURST</code></a></dt> - <dd>Device supports frame bursting.</dd> - <dt id="IEEE80211_C_WME"><a class="permalink" href="#IEEE80211_C_WME"><code class="Dv">IEEE80211_C_WME</code></a></dt> - <dd>Device supports WME/WMM operation (at the moment this is mostly support - for sending and receiving QoS frames with EDCF).</dd> - <dt id="IEEE80211_C_WDS"><a class="permalink" href="#IEEE80211_C_WDS"><code class="Dv">IEEE80211_C_WDS</code></a></dt> - <dd>Device supports transmit/receive of 4-address frames.</dd> - <dt id="IEEE80211_C_BGSCAN"><a class="permalink" href="#IEEE80211_C_BGSCAN"><code class="Dv">IEEE80211_C_BGSCAN</code></a></dt> - <dd>Device supports background scanning.</dd> - <dt id="IEEE80211_C_TXFRAG"><a class="permalink" href="#IEEE80211_C_TXFRAG"><code class="Dv">IEEE80211_C_TXFRAG</code></a></dt> - <dd>Device supports transmit of fragmented 802.11 frames.</dd> - <dt id="IEEE80211_C_TDMA"><a class="permalink" href="#IEEE80211_C_TDMA"><code class="Dv">IEEE80211_C_TDMA</code></a></dt> - <dd>Device is capable of operating in TDMA mode.</dd> -</dl> -<p class="Pp">The follow general crypto capabilities are defined. In general - <code class="Nm">IEEE80211</code> will fall-back to software support when a - device is not capable of hardware acceleration of a cipher. This can be done - on a per-key basis. <code class="Nm">IEEE80211</code> can also handle - software <code class="Dv">Michael</code> calculation combined with hardware - <code class="Dv">AES</code> acceleration.</p> -<dl class="Bl-tag"> - <dt id="IEEE80211_CRYPTO_WEP"><a class="permalink" href="#IEEE80211_CRYPTO_WEP"><code class="Dv">IEEE80211_CRYPTO_WEP</code></a></dt> - <dd>Device supports hardware WEP cipher.</dd> - <dt id="IEEE80211_CRYPTO_TKIP"><a class="permalink" href="#IEEE80211_CRYPTO_TKIP"><code class="Dv">IEEE80211_CRYPTO_TKIP</code></a></dt> - <dd>Device supports hardware TKIP cipher.</dd> - <dt id="IEEE80211_CRYPTO_AES_OCB"><a class="permalink" href="#IEEE80211_CRYPTO_AES_OCB"><code class="Dv">IEEE80211_CRYPTO_AES_OCB</code></a></dt> - <dd>Device supports hardware AES-OCB cipher.</dd> - <dt id="IEEE80211_CRYPTO_AES_CCM"><a class="permalink" href="#IEEE80211_CRYPTO_AES_CCM"><code class="Dv">IEEE80211_CRYPTO_AES_CCM</code></a></dt> - <dd>Device supports hardware AES-CCM cipher.</dd> - <dt id="IEEE80211_CRYPTO_TKIPMIC"><a class="permalink" href="#IEEE80211_CRYPTO_TKIPMIC"><code class="Dv">IEEE80211_CRYPTO_TKIPMIC</code></a></dt> - <dd>Device supports hardware Michael for use with TKIP.</dd> - <dt id="IEEE80211_CRYPTO_CKIP"><a class="permalink" href="#IEEE80211_CRYPTO_CKIP"><code class="Dv">IEEE80211_CRYPTO_CKIP</code></a></dt> - <dd>Devices supports hardware CKIP cipher.</dd> -</dl> -<p class="Pp">The follow general 802.11n capabilities are defined. The first - capabilities are defined exactly as they appear in the 802.11n - specification. Capabilities beginning with IEEE80211_HTC_AMPDU are used - solely by the <code class="Nm">IEEE80211</code> layer.</p> -<dl class="Bl-tag"> - <dt id="IEEE80211_HTCAP_CHWIDTH40"><a class="permalink" href="#IEEE80211_HTCAP_CHWIDTH40"><code class="Dv">IEEE80211_HTCAP_CHWIDTH40</code></a></dt> - <dd>Device supports 20/40 channel width operation.</dd> - <dt id="IEEE80211_HTCAP_SMPS_DYNAMIC"><a class="permalink" href="#IEEE80211_HTCAP_SMPS_DYNAMIC"><code class="Dv">IEEE80211_HTCAP_SMPS_DYNAMIC</code></a></dt> - <dd>Device supports dynamic SM power save operation.</dd> - <dt id="IEEE80211_HTCAP_SMPS_ENA"><a class="permalink" href="#IEEE80211_HTCAP_SMPS_ENA"><code class="Dv">IEEE80211_HTCAP_SMPS_ENA</code></a></dt> - <dd>Device supports static SM power save operation.</dd> - <dt id="IEEE80211_HTCAP_GREENFIELD"><a class="permalink" href="#IEEE80211_HTCAP_GREENFIELD"><code class="Dv">IEEE80211_HTCAP_GREENFIELD</code></a></dt> - <dd>Device supports Greenfield preamble.</dd> - <dt id="IEEE80211_HTCAP_SHORTGI20"><a class="permalink" href="#IEEE80211_HTCAP_SHORTGI20"><code class="Dv">IEEE80211_HTCAP_SHORTGI20</code></a></dt> - <dd>Device supports Short Guard Interval on 20MHz channels.</dd> - <dt id="IEEE80211_HTCAP_SHORTGI40"><a class="permalink" href="#IEEE80211_HTCAP_SHORTGI40"><code class="Dv">IEEE80211_HTCAP_SHORTGI40</code></a></dt> - <dd>Device supports Short Guard Interval on 40MHz channels.</dd> - <dt id="IEEE80211_HTCAP_TXSTBC"><a class="permalink" href="#IEEE80211_HTCAP_TXSTBC"><code class="Dv">IEEE80211_HTCAP_TXSTBC</code></a></dt> - <dd>Device supports Space Time Block Convolution (STBC) for transmit.</dd> - <dt id="IEEE80211_HTCAP_RXSTBC_1STREAM"><a class="permalink" href="#IEEE80211_HTCAP_RXSTBC_1STREAM"><code class="Dv">IEEE80211_HTCAP_RXSTBC_1STREAM</code></a></dt> - <dd>Device supports 1 spatial stream for STBC receive.</dd> - <dt id="IEEE80211_HTCAP_RXSTBC_2STREAM"><a class="permalink" href="#IEEE80211_HTCAP_RXSTBC_2STREAM"><code class="Dv">IEEE80211_HTCAP_RXSTBC_2STREAM</code></a></dt> - <dd>Device supports 1-2 spatial streams for STBC receive.</dd> - <dt id="IEEE80211_HTCAP_RXSTBC_3STREAM"><a class="permalink" href="#IEEE80211_HTCAP_RXSTBC_3STREAM"><code class="Dv">IEEE80211_HTCAP_RXSTBC_3STREAM</code></a></dt> - <dd>Device supports 1-3 spatial streams for STBC receive.</dd> - <dt id="IEEE80211_HTCAP_MAXAMSDU_7935"><a class="permalink" href="#IEEE80211_HTCAP_MAXAMSDU_7935"><code class="Dv">IEEE80211_HTCAP_MAXAMSDU_7935</code></a></dt> - <dd>Device supports A-MSDU frames up to 7935 octets.</dd> - <dt id="IEEE80211_HTCAP_MAXAMSDU_3839"><a class="permalink" href="#IEEE80211_HTCAP_MAXAMSDU_3839"><code class="Dv">IEEE80211_HTCAP_MAXAMSDU_3839</code></a></dt> - <dd>Device supports A-MSDU frames up to 3839 octets.</dd> - <dt id="IEEE80211_HTCAP_DSSSCCK40"><a class="permalink" href="#IEEE80211_HTCAP_DSSSCCK40"><code class="Dv">IEEE80211_HTCAP_DSSSCCK40</code></a></dt> - <dd>Device supports use of DSSS/CCK on 40MHz channels.</dd> - <dt id="IEEE80211_HTCAP_PSMP"><a class="permalink" href="#IEEE80211_HTCAP_PSMP"><code class="Dv">IEEE80211_HTCAP_PSMP</code></a></dt> - <dd>Device supports PSMP.</dd> - <dt id="IEEE80211_HTCAP_40INTOLERANT"><a class="permalink" href="#IEEE80211_HTCAP_40INTOLERANT"><code class="Dv">IEEE80211_HTCAP_40INTOLERANT</code></a></dt> - <dd>Device is intolerant of 40MHz wide channel use.</dd> - <dt id="IEEE80211_HTCAP_LSIGTXOPPROT"><a class="permalink" href="#IEEE80211_HTCAP_LSIGTXOPPROT"><code class="Dv">IEEE80211_HTCAP_LSIGTXOPPROT</code></a></dt> - <dd>Device supports L-SIG TXOP protection.</dd> - <dt id="IEEE80211_HTC_AMPDU"><a class="permalink" href="#IEEE80211_HTC_AMPDU"><code class="Dv">IEEE80211_HTC_AMPDU</code></a></dt> - <dd>Device supports A-MPDU aggregation. Note that any 802.11n compliant device - must support A-MPDU receive so this implicitly means support for - <i class="Em">transmit</i> of A-MPDU frames.</dd> - <dt id="IEEE80211_HTC_AMSDU"><a class="permalink" href="#IEEE80211_HTC_AMSDU"><code class="Dv">IEEE80211_HTC_AMSDU</code></a></dt> - <dd>Device supports A-MSDU aggregation. Note that any 802.11n compliant device - must support A-MSDU receive so this implicitly means support for - <i class="Em">transmit</i> of A-MSDU frames.</dd> - <dt id="IEEE80211_HTC_HT"><a class="permalink" href="#IEEE80211_HTC_HT"><code class="Dv">IEEE80211_HTC_HT</code></a></dt> - <dd>Device supports High Throughput (HT) operation. This capability must be - set to enable 802.11n functionality in - <code class="Nm">IEEE80211</code>.</dd> - <dt id="IEEE80211_HTC_SMPS"><a class="permalink" href="#IEEE80211_HTC_SMPS"><code class="Dv">IEEE80211_HTC_SMPS</code></a></dt> - <dd>Device supports MIMO Power Save operation.</dd> - <dt id="IEEE80211_HTC_RIFS"><a class="permalink" href="#IEEE80211_HTC_RIFS"><code class="Dv">IEEE80211_HTC_RIFS</code></a></dt> - <dd>Device supports Reduced Inter Frame Spacing (RIFS).</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ioctl(2)</a>, <a class="Xr">ieee80211_amrr(9)</a>, - <a class="Xr">ieee80211_beacon(9)</a>, <a class="Xr">ieee80211_bmiss(9)</a>, - <a class="Xr">ieee80211_crypto(9)</a>, <a class="Xr">ieee80211_ddb(9)</a>, - <a class="Xr">ieee80211_input(9)</a>, <a class="Xr">ieee80211_node(9)</a>, - <a class="Xr">ieee80211_output(9)</a>, <a class="Xr">ieee80211_proto(9)</a>, - <a class="Xr">ieee80211_radiotap(9)</a>, - <a class="Xr">ieee80211_regdomain(9)</a>, - <a class="Xr">ieee80211_scan(9)</a>, <a class="Xr">ieee80211_vap(9)</a>, - <a class="Xr">ifnet(9)</a>, <a class="Xr">malloc(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">IEEE80211</code> series of functions first - appeared in <span class="Ux">NetBSD 1.5</span>, and were later ported to - <span class="Ux">FreeBSD 4.6</span>. This man page was updated with the - information from <span class="Ux">NetBSD</span> - <code class="Nm">IEEE80211</code> man page.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The original <span class="Ux">NetBSD</span> - <code class="Nm">IEEE80211</code> man page was written by - <span class="An">Bruce M. Simpson</span> - <<a class="Mt" href="mailto:bms@FreeBSD.org">bms@FreeBSD.org</a>> and - <span class="An">Darron Broad</span> - <<a class="Mt" href="mailto:darron@kewl.org">darron@kewl.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 24, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ieee80211_amrr.9 3.html b/static/freebsd/man9/ieee80211_amrr.9 3.html deleted file mode 100644 index b1c80d53..00000000 --- a/static/freebsd/man9/ieee80211_amrr.9 3.html +++ /dev/null @@ -1,159 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">IEEE8021_AMRR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">IEEE8021_AMRR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">ieee80211_amrr</code> — - <span class="Nd">802.11 network driver transmit rate control - support</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">net80211/ieee80211_amrr.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_amrr_init</code>(<var class="Fa">struct - ieee80211_amrr *</var>, <var class="Fa">struct ieee80211vap *</var>, - <var class="Fa">int amin</var>, <var class="Fa">int amax</var>, - <var class="Fa">int interval</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_amrr_cleanup</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211_amrr *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_amrr_setinterval</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211_amrr *</var>, <var class="Fa" style="white-space: nowrap;">int - interval</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_amrr_node_init</code>(<var class="Fa">struct - ieee80211_amrr *</var>, <var class="Fa">struct ieee80211_amrr_node *</var>, - <var class="Fa">struct ieee80211_node *</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_amrr_choose</code>(<var class="Fa">struct - ieee80211_node *</var>, <var class="Fa">struct ieee80211_amrr_node - *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_amrr_tx_complete</code>(<var class="Fa">struct - ieee80211_amrr_node *</var>, <var class="Fa">int ok</var>, - <var class="Fa">int retries</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_amrr_tx_update</code>(<var class="Fa">struct - ieee80211_amrr_node *</var>, <var class="Fa">int txnct</var>, - <var class="Fa">int success</var>, <var class="Fa">int retrycnt</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><code class="Nm">ieee80211_amrr</code> is an implementation of the - AMRR transmit rate control algorithm for drivers that use the - <code class="Nm">net80211</code> software layer. A rate control algorithm is - responsible for choosing the transmit rate for each frame. To maximize - throughput algorithms try to use the highest rate that is appropriate for - the operating conditions. The rate will vary as conditions change; the - distance between two stations may change, transient noise may be present - that affects signal quality, etc. <code class="Nm">ieee80211_amrr</code> - uses very simple information from a driver to do it's job: whether a frame - was successfully delivered and how many transmit attempts were made. While - this enables its use with virtually any wireless device it limits it's - effectiveness--do not expect it to function well in difficult environments - and/or respond quickly to changing conditions.</p> -<p class="Pp"><code class="Nm">ieee80211_amrr</code> requires per-vap state and - per-node state for each station it is to select rates for. The API's are - designed for drivers to pre-allocate state in the driver-private extension - areas of each vap and node. For example the <a class="Xr">ral(4)</a> driver - defines a vap as:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct rt2560_vap { - struct ieee80211vap ral_vap; - struct ieee80211_beacon_offsets ral_bo; - struct ieee80211_amrr amrr; - - int (*ral_newstate)(struct ieee80211vap *, - enum ieee80211_state, int); -};</pre> -</div> -<p class="Pp">The <var class="Vt">amrr</var> structure member holds the per-vap - state for <code class="Nm">ieee80211_amrr</code> and - <a class="Xr">ral(4)</a> initializes it in the vap create method with:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>ieee80211_amrr_init(&rvp->amrr, vap, - IEEE80211_AMRR_MIN_SUCCESS_THRESHOLD, - IEEE80211_AMRR_MAX_SUCCESS_THRESHOLD, - 500 /* ms */);</pre> -</div> -<p class="Pp">The node is defined as:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct rt2560_node { - struct ieee80211_node ni; - struct ieee80211_amrr_node amrr; -};</pre> -</div> -<p class="Pp">with initialization done in the driver's - <var class="Vt">iv_newassoc</var> method:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>static void -rt2560_newassoc(struct ieee80211_node *ni, int isnew) -{ - struct ieee80211vap *vap = ni->ni_vap; - - ieee80211_amrr_node_init(&RT2560_VAP(vap)->amrr, - &RT2560_NODE(ni)->amrr, ni); -}</pre> -</div> -<p class="Pp" id="ieee80211_amrr_choose">Once - <code class="Nm">ieee80211_amrr</code> state is setup, transmit rates are - requested by calling - <a class="permalink" href="#ieee80211_amrr_choose"><code class="Fn">ieee80211_amrr_choose</code></a>() - in the transmit path; e.g.:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>tp = &vap->iv_txparms[ieee80211_chan2mode(ni->ni_chan)]; -if (IEEE80211_IS_MULTICAST(wh->i_addr1)) { - rate = tp->mcastrate; -} else if (m0->m_flags & M_EAPOL) { - rate = tp->mgmtrate; -} else if (tp->ucastrate != IEEE80211_FIXED_RATE_NONE) { - rate = tp->ucastrate; -} else { - (void) ieee80211_amrr_choose(ni, &RT2560_NODE(ni)->amrr); - rate = ni->ni_txrate; -}</pre> -</div> -<p class="Pp" id="ieee80211_amrr_choose~2">Note a rate is chosen only for - unicast data frames when a fixed transmit rate is not configured; the other - cases are handled with the <code class="Nm">net80211</code> transmit - parameters. Note also that - <a class="permalink" href="#ieee80211_amrr_choose~2"><code class="Fn">ieee80211_amrr_choose</code></a>() - writes the chosen rate in <var class="Vt">ni_txrate</var>; this eliminates - copying the value as it is exported to user applications so they can display - the current transmit rate in status.</p> -<p class="Pp" id="ieee80211_amrr_tx_complete">The remaining work a driver must - do is feed status back to <code class="Nm">ieee80211_amrr</code> when a - frame transmit completes using - <a class="permalink" href="#ieee80211_amrr_tx_complete"><code class="Fn">ieee80211_amrr_tx_complete</code></a>(). - Drivers that poll a device to retrieve statistics can use - <a class="permalink" href="#ieee80211_amrr_tx_update"><code class="Fn" id="ieee80211_amrr_tx_update">ieee80211_amrr_tx_update</code></a>() - (instead or in addition).</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ieee80211(9)</a>, - <a class="Xr">ieee80211_output(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 4, 2009</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ieee80211_beacon.9 3.html b/static/freebsd/man9/ieee80211_beacon.9 3.html deleted file mode 100644 index eff2b10e..00000000 --- a/static/freebsd/man9/ieee80211_beacon.9 3.html +++ /dev/null @@ -1,102 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">IEEE80211_BEACON(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">IEEE80211_BEACON(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">ieee80211_beacon</code> — - <span class="Nd">802.11 beacon support</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">net80211/ieee80211_var.h</a>></code></p> -<p class="Pp"> - <br/> - <var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">ieee80211_beacon_alloc</code>(<var class="Fa">struct - ieee80211_node *</var>, <var class="Fa">struct ieee80211_beacon_offsets - *</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_beacon_update</code>(<var class="Fa">struct - ieee80211_node *</var>, <var class="Fa">struct ieee80211_beacon_offsets - *</var>, <var class="Fa">struct mbuf *</var>, <var class="Fa">int - mcast</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_beacon_notify</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211vap *</var>, <var class="Fa" style="white-space: nowrap;">int - what</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">net80211</code> software layer provides a - support framework for drivers that includes a template-based mechanism for - dynamic update of beacon frames transmit in hostap, adhoc, and mesh - operating modes. Drivers should use - <a class="permalink" href="#ieee80211_beacon_alloc"><code class="Fn" id="ieee80211_beacon_alloc">ieee80211_beacon_alloc</code></a>() - to create an initial beacon frame. The - <var class="Vt">ieee80211_beacon_offsets</var> structure holds information - about the beacon contents that is used to optimize updates done with - <code class="Fn">ieee80211_beacon_update</code>().</p> -<p class="Pp">Update calls should only be done when something changes that - affects the contents of the beacon frame. When this happens the - <code class="Dv">iv_update_beacon</code> method is invoked and a - driver-supplied routine must do the right thing. For devices that involve - the host to transmit each beacon frame this work may be as simple as marking - a bit in the <var class="Vt">ieee80211_beacon_offsets</var> structure:</p> -<div class="Bd Pp Li"> -<pre>static void -ath_beacon_update(struct ieee80211vap *vap, int item) -{ - struct ieee80211_beacon_offsets *bo = &ATH_VAP(vap)->av_boff; - setbit(bo->bo_flags, item); -}</pre> -</div> -<p class="Pp" id="ieee80211_beacon_update">with the - <a class="permalink" href="#ieee80211_beacon_update"><code class="Fn">ieee80211_beacon_update</code></a>() - call done before the next beacon is to be sent.</p> -<p class="Pp">Devices that off-load beacon generation may instead choose to use - this callback to push updates immediately to the device. Exactly how that is - accomplished is unspecified. One possibility is to update the beacon frame - contents and extract the appropriate information element, but other - scenarios are possible.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="MULTI-VAP_BEACON_SCHEDULING"><a class="permalink" href="#MULTI-VAP_BEACON_SCHEDULING">MULTI-VAP - BEACON SCHEDULING</a></h1> -<p class="Pp">Drivers that support multiple vaps that can each beacon need to - consider how to schedule beacon frames. There are two possibilities at the - moment: - <a class="permalink" href="#burst"><i class="Em" id="burst">burst</i></a> - all beacons at TBTT or - <a class="permalink" href="#stagger"><i class="Em" id="stagger">stagger - beacons</i></a> over the beacon interval. Bursting beacon frames may result - in aperiodic delivery that can affect power save operation of associated - stations. Applying some jitter (e.g. by randomly ordering burst frames) may - be sufficient to combat this and typically this is not an issue unless - stations are using aggressive power save techniques such as U-APSD - (sometimes employed by VoIP phones). Staggering frames requires more - interrupts and device support that may not be available. Staggering beacon - frames is usually superior to bursting frames, up to about eight vaps, at - which point the overhead becomes significant and the channel becomes - noticeably busy anyway.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ieee80211(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 4, 2009</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ieee80211_bmiss.9 3.html b/static/freebsd/man9/ieee80211_bmiss.9 3.html deleted file mode 100644 index 55b693b8..00000000 --- a/static/freebsd/man9/ieee80211_bmiss.9 3.html +++ /dev/null @@ -1,72 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">IEEE80211_BMISS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">IEEE80211_BMISS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">ieee80211_bmiss</code> — - <span class="Nd">802.11 beacon miss support</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">net80211/ieee80211_var.h</a>></code></p> -<p class="Pp"> - <br/> - <var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_beacon_miss</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211com *</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">net80211</code> software layer provides a - support framework for drivers that includes handling beacon miss events in - station mode. Drivers can dispatch beacon miss events that are recognized in - hardware or <code class="Nm">net80211</code> can detect beacon miss if the - driver dispatches received beacon frames through the normal receive path. - Software beacon miss support is especially useful when multiple vaps are - operating and any hardware beacon miss support is not available (e.g. - operating as an access point together with one or more station mode - vaps).</p> -<p class="Pp" id="ieee80211_beacon_miss">Drivers should dispatch beacon miss - events recognized in the driver with - <a class="permalink" href="#ieee80211_beacon_miss"><code class="Fn">ieee80211_beacon_miss</code></a>(). - This causes some number of ProbeRequest frames to be sent to the access - point to check if the association is still alive. If no response is received - and roaming mode is set to <code class="Dv">IEEE80211_ROAMING_AUTO</code> - then <code class="Nm">net80211</code> will try to re-associate and if that - fails trigger a scan to look for the access point or another suitable AP. - When the <code class="Nm">net80211</code> state machine is being operated - manually, e.g. by <a class="Xr">wpa_supplicant(8)</a>, then applications are - notified of the state change and are responsible for handling the work of - scanning for a new access point. The number of beacon miss events (without a - ProbeResponse) is user settable with the - <code class="Dv">IEEE80211_IOC_BMISSTHRESHOLD</code> request.</p> -<p class="Pp">Software beacon miss detection is enabled per-vap by setting the - <code class="Dv">IEEE80211_FEXT_SWBMISS</code> flag. Typically this is done - when a vap is setup when the - <code class="Dv">IEEE80211_CLONE_NOBEACONS</code> option is supplied to the - clone operation. But drivers may also force this when they know they need - help detecting beacon miss. When beacon miss is detected in software the - event is dispatched without driver involvement. Note that software beacon - miss handling is not limited to station mode; it can be used in any - operating mode where beacons from a peer station are received.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">wpa_supplicant(8)</a>, - <a class="Xr">ieee80211(9)</a>, <a class="Xr">ieee80211_vap(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 4, 2009</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ieee80211_crypto.9 3.html b/static/freebsd/man9/ieee80211_crypto.9 3.html deleted file mode 100644 index b518feda..00000000 --- a/static/freebsd/man9/ieee80211_crypto.9 3.html +++ /dev/null @@ -1,221 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">IEEE80211_CRYPTO(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">IEEE80211_CRYPTO(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">ieee80211_crypto</code> — - <span class="Nd">802.11 cryptographic support</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">net80211/ieee80211_var.h</a>></code></p> -<p class="Pp"> - <br/> - <var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_crypto_register</code>(<var class="Fa" style="white-space: nowrap;">const - struct ieee80211_cipher *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_crypto_unregister</code>(<var class="Fa" style="white-space: nowrap;">const - struct ieee80211_cipher *</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_crypto_available</code>(<var class="Fa" style="white-space: nowrap;">int - cipher</var>);</p> -<p class="Pp"> - <br/> - <var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_notify_replay_failure</code>(<var class="Fa">struct - ieee80211vap *</var>, <var class="Fa">const struct ieee80211_frame *</var>, - <var class="Fa">const struct ieee80211_key *</var>, <var class="Fa">uint64_t - rsc</var>, <var class="Fa">int tid</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_notify_michael_failure</code>(<var class="Fa">struct - ieee80211vap *</var>, <var class="Fa">const struct ieee80211_frame *</var>, - <var class="Fa">u_int keyix</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_crypto_newkey</code>(<var class="Fa">struct - ieee80211vap *</var>, <var class="Fa">int cipher</var>, <var class="Fa">int - flags</var>, <var class="Fa">struct ieee80211_key *</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_crypto_setkey</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211vap *</var>, <var class="Fa" style="white-space: nowrap;">struct - ieee80211_key *</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_crypto_delkey</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211vap *</var>, <var class="Fa" style="white-space: nowrap;">struct - ieee80211_key *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_key_update_begin</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211vap *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_key_update_end</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211vap *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_crypto_delglobalkeys</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211vap *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_crypto_reload_keys</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211com *</var>);</p> -<p class="Pp"> - <br/> - <var class="Ft">struct ieee80211_key *</var> - <br/> - <code class="Fn">ieee80211_crypto_encap</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211_node *</var>, <var class="Fa" style="white-space: nowrap;">struct - mbuf *</var>);</p> -<p class="Pp"><var class="Ft">struct ieee80211_key *</var> - <br/> - <code class="Fn">ieee80211_crypto_decap</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211_node *</var>, <var class="Fa" style="white-space: nowrap;">struct - mbuf *</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_crypto_demic</code>(<var class="Fa">struct - ieee80211vap *</var>, <var class="Fa">struct ieee80211_key *</var>, - <var class="Fa">struct mbuf *</var>, <var class="Fa">int force</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_crypto_enmic</code>(<var class="Fa">struct - ieee80211vap *</var>, <var class="Fa">struct ieee80211_key *</var>, - <var class="Fa">struct mbuf *</var>, <var class="Fa">int force</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">net80211</code> layer includes comprehensive - cryptographic support for 802.11 protocols. Software implementations of - ciphers required by WPA and 802.11i are provided as well as encap/decap - processing of 802.11 frames. Software ciphers are written as kernel modules - and register with the core crypto support. The cryptographic framework - supports hardware acceleration of ciphers by drivers with automatic - fall-back to software implementations when a driver is unable to provide - necessary hardware services.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CRYPTO_CIPHER_MODULES"><a class="permalink" href="#CRYPTO_CIPHER_MODULES">CRYPTO - CIPHER MODULES</a></h1> -<p class="Pp"><code class="Nm">net80211</code> cipher modules register their - services using - <a class="permalink" href="#ieee80211_crypto_register"><code class="Fn" id="ieee80211_crypto_register">ieee80211_crypto_register</code></a>() - and supply a template that describes their operation. This - <var class="Vt">ieee80211_cipher</var> structure defines protocol-related - state such as the number of bytes of space in the 802.11 header to - reserve/remove during encap/decap and entry points for setting up keys and - doing cryptographic operations.</p> -<p class="Pp">Cipher modules can associate private state to each key through the - <var class="Vt">wk_private</var> structure member. If state is setup by the - module it will be called before a key is destroyed so it can reclaim - resources.</p> -<p class="Pp" id="ieee80211_notify_replay_failure">Crypto modules can notify the - system of two events. When a packet replay event is recognized - <a class="permalink" href="#ieee80211_notify_replay_failure"><code class="Fn">ieee80211_notify_replay_failure</code></a>() - can be used to signal the event. When a <code class="Dv">TKIP</code> Michael - failure is detected - <a class="permalink" href="#ieee80211_notify_michael_failure"><code class="Fn" id="ieee80211_notify_michael_failure">ieee80211_notify_michael_failure</code></a>() - can be invoked. Drivers may also use these routines to signal events - detected by the hardware.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CRYPTO_KEY_MANAGEMENT"><a class="permalink" href="#CRYPTO_KEY_MANAGEMENT">CRYPTO - KEY MANAGEMENT</a></h1> -<p class="Pp">The <code class="Nm">net80211</code> layer implements a per-vap - 4-element “global key table” and a per-station “unicast - key” for protocols such as WPA, 802.1x, and 802.11i. The global key - table is designed to support legacy WEP operation and Multicast/Group keys, - though some applications also use it to implement WPA in station mode. Keys - in the global table are identified by a key index in the range 0-3. - Per-station keys are identified by the MAC address of the station and are - typically used for unicast PTK bindings.</p> -<p class="Pp"><code class="Nm">net80211</code> provides - <a class="Xr">ioctl(2)</a> operations for managing both global and - per-station keys. Drivers typically do not participate in software key - management; they are involved only when providing hardware acceleration of - cryptographic operations.</p> -<p class="Pp" id="ieee80211_crypto_newkey"><a class="permalink" href="#ieee80211_crypto_newkey"><code class="Fn">ieee80211_crypto_newkey</code></a>() - is used to allocate a new <code class="Nm">net80211</code> key or - reconfigure an existing key. The cipher must be specified along with any - fixed key index. The <code class="Nm">net80211</code> layer will handle - allocating cipher and driver resources to support the key.</p> -<p class="Pp" id="ieee80211_crypto_setkey">Once a key is allocated it's contents - can be set using - <a class="permalink" href="#ieee80211_crypto_setkey"><code class="Fn">ieee80211_crypto_setkey</code></a>() - and deleted with - <a class="permalink" href="#ieee80211_crypto_delkey"><code class="Fn" id="ieee80211_crypto_delkey">ieee80211_crypto_delkey</code></a>() - (with any cipher and driver resources reclaimed).</p> -<p class="Pp" id="ieee80211_crypto_delglobalkeys"><a class="permalink" href="#ieee80211_crypto_delglobalkeys"><code class="Fn">ieee80211_crypto_delglobalkeys</code></a>() - is used to reclaim all keys in the global key table for a vap; it typically - is used only within the <code class="Nm">net80211</code> layer.</p> -<p class="Pp" id="ieee80211_crypto_reload_keys"><a class="permalink" href="#ieee80211_crypto_reload_keys"><code class="Fn">ieee80211_crypto_reload_keys</code></a>() - handles hardware key state reloading from software key state, such as - required after a suspend/resume cycle.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DRIVER_CRYPTO_SUPPORT"><a class="permalink" href="#DRIVER_CRYPTO_SUPPORT">DRIVER - CRYPTO SUPPORT</a></h1> -<p class="Pp">Drivers identify ciphers they have hardware support for through - the <var class="Vt">ic_cryptocaps</var> field of the - <var class="Vt">ieee80211com</var> structure. If hardware support is - available then a driver should also fill in the - <code class="Dv">iv_key_alloc</code>, <code class="Dv">iv_key_set</code>, - and <code class="Dv">iv_key_delete</code> methods of each - <var class="Vt">ieee80211vap</var> created for use with the device. In - addition the methods <code class="Dv">iv_key_update_begin</code> and - <code class="Dv">iv_key_update_end</code> can be setup to handle - synchronization requirements for updating hardware key state.</p> -<p class="Pp">When <code class="Nm">net80211</code> allocates a software key and - the driver can accelerate the cipher operations the - <code class="Dv">iv_key_alloc</code> method will be invoked. Drivers may - return a token that is associated with outbound traffic (for use in - encrypting frames). Otherwise, e.g. if hardware resources are not available, - the driver will not return a token and <code class="Nm">net80211</code> will - arrange to do the work in software and pass frames to the driver that are - already prepared for transmission.</p> -<p class="Pp">For receive, drivers mark frames with the - <code class="Dv">M_WEP</code> mbuf flag to indicate the hardware has - decrypted the payload. If frames have the - <code class="Dv">IEEE80211_FC1_PROTECTED</code> bit marked in their 802.11 - header and are not tagged with <code class="Dv">M_WEP</code> then decryption - is done in software. For more complicated scenarios the software key state - is consulted; e.g. to decide if Michael verification needs to be done in - software after the hardware has handled TKIP decryption.</p> -<p class="Pp" id="ieee80211_key_update_begin">Drivers that manage complicated - key data structures, e.g. faulting software keys into a hardware key cache, - can safely manipulate software key state by bracketing their work with calls - to - <a class="permalink" href="#ieee80211_key_update_begin"><code class="Fn">ieee80211_key_update_begin</code></a>() - and - <a class="permalink" href="#ieee80211_key_update_end"><code class="Fn" id="ieee80211_key_update_end">ieee80211_key_update_end</code></a>(). - These calls also synchronize hardware key state update when receive traffic - is active.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ioctl(2)</a>, <a class="Xr">wlan_ccmp(4)</a>, - <a class="Xr">wlan_tkip(4)</a>, <a class="Xr">wlan_wep(4)</a>, - <a class="Xr">ieee80211(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 29, 2010</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ieee80211_ddb.9 4.html b/static/freebsd/man9/ieee80211_ddb.9 4.html deleted file mode 100644 index 7b99741f..00000000 --- a/static/freebsd/man9/ieee80211_ddb.9 4.html +++ /dev/null @@ -1,56 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">IEEE80211_DDB(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">IEEE80211_DDB(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">ieee80211_ddb</code> — - <span class="Nd">802.11 ddb support</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<div class="Bd"><code class="Cd">options DDB</code></div> -<div class="Bd Pp"><code class="Cd">show vap [addr]</code> -<br/> -<code class="Cd">show all vaps</code> -<br/> -<code class="Cd">show com [addr]</code> -<br/> -<code class="Cd">show sta [addr]</code> -<br/> -<code class="Cd">show statab [addr]</code> -<br/> -<code class="Cd">show mesh [addr]</code></div> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">net80211</code> layer includes - <a class="Xr">ddb(4)</a> support for displaying important data structures. - This is especially important because wireless applications are often built - for embedded environments where cross-machine or post-mortem debugging - facilities like <a class="Xr">kgdb(1)</a> - (<span class="Pa">ports/devel/gdb</span>) are infeasible.</p> -<p class="Pp">The most commonly used command is</p> -<div class="Bd Pp Bd-indent Li"> -<pre>show all vaps/a</pre> -</div> -<p class="Pp">which dumps the contents of all - <var class="Vt">ieee80211vap</var>, <var class="Vt">ieee80211com</var>, and - <var class="Vt">ieee80211_node</var> data structures in the system.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ddb(4)</a>, <a class="Xr">ieee80211(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 4, 2009</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ieee80211_input.9 3.html b/static/freebsd/man9/ieee80211_input.9 3.html deleted file mode 100644 index e0ded463..00000000 --- a/static/freebsd/man9/ieee80211_input.9 3.html +++ /dev/null @@ -1,83 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">IEEE80211_INPUT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">IEEE80211_INPUT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">ieee80211_input</code> — - <span class="Nd">software 802.11 stack input functions</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">net80211/ieee80211_var.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_input</code>(<var class="Fa">struct ieee80211_node - *</var>, <var class="Fa">struct mbuf *</var>, <var class="Fa">int - rssi</var>, <var class="Fa">int noise</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_input_all</code>(<var class="Fa">struct - ieee80211com *</var>, <var class="Fa">struct mbuf *</var>, - <var class="Fa">int rssi</var>, <var class="Fa">int noise</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">net80211</code> layer that supports 802.11 - device drivers requires that receive processing be single-threaded. - Typically this is done using a dedicated driver - <a class="Xr">taskqueue(9)</a> thread. - <a class="permalink" href="#ieee80211_input"><code class="Fn" id="ieee80211_input">ieee80211_input</code></a>() - and - <a class="permalink" href="#ieee80211_input_all"><code class="Fn" id="ieee80211_input_all">ieee80211_input_all</code></a>() - process received 802.11 frames and are designed for use in that context; - e.g. no driver locks may be held.</p> -<p class="Pp">The frame passed up in the <var class="Vt">mbuf</var> must have - the 802.11 protocol header at the front; all device-specific information - and/or PLCP must be removed. Any CRC must be stripped from the end of the - frame. The 802.11 protocol header should be 32-bit aligned for optimal - performance but receive processing does not require it. If the frame holds a - payload and that is not aligned to a 32-bit boundary then the payload will - be re-aligned so that it is suitable for processing by protocols such as - <a class="Xr">ip(4)</a>.</p> -<p class="Pp">If a device (such as <a class="Xr">ath(4)</a>) inserts padding - after the 802.11 header to align the payload to a 32-bit boundary the - <code class="Dv">IEEE80211_C_DATAPAD</code> capability must be set. - Otherwise header and payload are assumed contiguous in the mbuf chain.</p> -<p class="Pp">If a received frame must pass through the A-MPDU receive reorder - buffer then the mbuf must be marked with the <code class="Dv">M_AMPDU</code> - flag. Note that for the moment this is required of all frames received from - a station and TID where a Block ACK stream is active, not just A-MPDU - aggregates. It is sufficient to check for - <code class="Dv">IEEE80211_NODE_HT</code> in the - <var class="Vt">ni_flags</var> of the station's node table entry, any frames - that do not require reorder processing will be dispatched with only minimal - overhead.</p> -<p class="Pp">The <var class="Vt">rssi</var> parameter is the Receive Signal - Strength Indication of the frame measured in 0.5dBm units relative to the - noise floor. The <var class="Vt">noise</var> parameter is the best - approximation of the noise floor in dBm units at the time the frame was - received. RSSI and noise are used by the <code class="Nm">net80211</code> - layer to make scanning and roaming decisions in station mode and to do auto - channel selection for hostap and similar modes. Otherwise the values are - made available to user applications (with the rssi presented as a filtered - average over the last ten values and the noise floor the last reported - value).</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ieee80211(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 4, 2009</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ieee80211_node.9 3.html b/static/freebsd/man9/ieee80211_node.9 3.html deleted file mode 100644 index 5f8c677e..00000000 --- a/static/freebsd/man9/ieee80211_node.9 3.html +++ /dev/null @@ -1,190 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">IEEE80211_NODE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">IEEE80211_NODE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">ieee80211_node</code> — - <span class="Nd">software 802.11 stack node management functions</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">net80211/ieee80211_var.h</a>></code></p> -<p class="Pp"><var class="Ft">struct ieee80211_node *</var> - <br/> - <code class="Fn">ieee80211_find_rxnode</code>(<var class="Fa">struct - ieee80211com *</var>, <var class="Fa">const struct ieee80211_frame_min - *</var>);</p> -<p class="Pp"><var class="Ft">struct ieee80211_node *</var> - <br/> - <code class="Fn">ieee80211_find_rxnode_withkey</code>(<var class="Fa">struct - ieee80211com *</var>, <var class="Fa">const struct ieee80211_frame_min - *</var>, <var class="Fa">ieee80211_keyix</var>);</p> -<p class="Pp"><var class="Ft">struct ieee80211_node *</var> - <br/> - <code class="Fn">ieee80211_ref_node</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211_node *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_free_node</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211_node *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_iterate_nodes</code>(<var class="Fa">struct - ieee80211_node_table *</var>, <var class="Fa">ieee80211_iter_func *f</var>, - <var class="Fa">void *arg</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_dump_nodes</code>(<var class="Fa">struct - ieee80211_node_table *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_dump_node</code>(<var class="Fa">struct - ieee80211_node *</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">net80211</code> layer that supports 802.11 - device drivers maintains a database of peer stations called the “node - table” in the <var class="Vt">ic_sta</var> entry of the - <var class="Vt">ieee80211com</var> structure. Station mode vaps create an - entry for the access point the station is associated to. AP mode vaps create - entries for associated stations. Adhoc and mesh mode vaps create entries for - neighbor stations. WDS mode vaps create an entry for the peer station. - Stations for all vaps reside in the same table; each node entry has a - <var class="Vt">ni_vap</var> field that identifies the vap that created it. - In some instances an entry is used by multiple vaps (e.g. for dynamic WDS a - station associated to an ap vap may also be the peer of a WDS vap).</p> -<p class="Pp" id="ieee80211_ref_node">Node table entries are reference counted. - That is, there is a count of all long term references that determines when - an entry may be reclaimed. References are held by every in-flight frame sent - to a station to ensure the entry is not reclaimed while the frame is queued - or otherwise held by a driver. Routines that lookup a table entry return a - “held reference” (i.e. a pointer to a table entry with the - reference count incremented). The - <a class="permalink" href="#ieee80211_ref_node"><code class="Fn">ieee80211_ref_node</code></a>() - call explicitly increments the reference count of a node. - <a class="permalink" href="#ieee80211_free_node"><code class="Fn" id="ieee80211_free_node">ieee80211_free_node</code></a>() - decrements the reference count of a node and if the count goes to zero - reclaims the table entry.</p> -<p class="Pp">The station table and its entries are exposed to drivers in - several ways. Each frame transmitted to a station includes a reference to - the associated node in the <var class="Vt">m_pkthdr.rcvif</var> field. This - reference must be reclaimed by the driver when transmit processing is done. - For each frame received the driver must lookup the table entry to use in - dispatching the frame “up the stack”. This lookup implicitly - obtains a reference to the table entry and the driver must reclaim the - reference when frame processing is completed. Otherwise drivers frequently - inspect the contents of the <var class="Vt">iv_bss</var> node when handling - state machine changes as important information is maintained in the data - structure.</p> -<p class="Pp" id="ieee80211_iterate_nodes">The node table is opaque to drivers. - Entries may be looked up using one of the pre-defined API's or the - <a class="permalink" href="#ieee80211_iterate_nodes"><code class="Fn">ieee80211_iterate_nodes</code></a>() - call may be used to iterate through all entries to do per-node processing or - implement some non-standard search mechanism. Note that - <code class="Fn">ieee80211_iterate_nodes</code>() is single-threaded - per-device and the effort processing involved is fairly substantial so it - should be used carefully.</p> -<p class="Pp" id="ieee80211_dump_node">Two routines are provided to print the - contents of nodes to the console for debugging: - <a class="permalink" href="#ieee80211_dump_node"><code class="Fn">ieee80211_dump_node</code></a>() - displays the contents of a single node while - <a class="permalink" href="#ieee80211_dump_nodes"><code class="Fn" id="ieee80211_dump_nodes">ieee80211_dump_nodes</code></a>() - displays the contents of the specified node table. Nodes may also be - displayed using <a class="Xr">ddb(4)</a> with the “show node” - directive and the station node table can be displayed with “show - statab”.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DRIVER_PRIVATE_STATE"><a class="permalink" href="#DRIVER_PRIVATE_STATE">DRIVER - PRIVATE STATE</a></h1> -<p class="Pp">Node data structures may be extended by the driver to include - driver-private state. This is done by overriding the - <var class="Vt">ic_node_alloc</var> method used to allocate a node table - entry. The driver method must allocate a structure that is an extension of - the <var class="Vt">ieee80211_node</var> structure. For example the - <a class="Xr">iwi(4)</a> driver defines a private node structure as:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct iwi_node { - struct ieee80211_node in_node; - int in_station; -};</pre> -</div> -<p class="Pp">and then provides a private allocation routine that does this:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>static struct ieee80211_node * -iwi_node_alloc(struct ieee80211vap *vap, - const uint8_t mac[IEEE80211_ADDR_LEN]) -{ - struct iwi_node *in; - - in = malloc(sizeof(struct iwi_node), M_80211_NODE, - M_NOWAIT | M_ZERO); - if (in == NULL) - return NULL; - in->in_station = -1; - return &in->in_node; -}</pre> -</div> -<p class="Pp">Note that when reclaiming a node allocated by the driver the - “parent method” must be called to ensure - <code class="Nm">net80211</code> state is reclaimed; for example:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>static void -iwi_node_free(struct ieee80211_node *ni) -{ - struct ieee80211com *ic = ni->ni_ic; - struct iwi_softc *sc = ic->ic_ifp->if_softc; - struct iwi_node *in = (struct iwi_node *)ni; - - if (in->in_station != -1) - free_unr(sc->sc_unr, in->in_station); - sc->sc_node_free(ni); /* invoke net80211 free handler */ -}</pre> -</div> -<p class="Pp">Beware that care must be taken to avoid holding references that - might cause nodes from being reclaimed. <code class="Nm">net80211</code> - will reclaim a node when the last reference is reclaimed in its data - structures. However if a driver holds additional references then - <code class="Nm">net80211</code> will not recognize this and table entries - will not be reclaimed. Such references should not be needed if the driver - overrides the <var class="Vt">ic_node_cleanup</var> and/or - <var class="Vt">ic_node_free</var> methods.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="KEY_TABLE_SUPPORT"><a class="permalink" href="#KEY_TABLE_SUPPORT">KEY - TABLE SUPPORT</a></h1> -<p class="Pp">Node table lookups are typically done using a hash of the - stations' mac address. When receiving frames this is sufficient to find the - node table entry for the transmitter. But some devices also identify the - sending station in the device state received with each frame and this data - can be used to optimize lookups on receive using a companion table called - the “keytab”. This table records a separate node table - reference that can be fetched without any locking using the table index. - This logic is handled with the - <a class="permalink" href="#ieee80211_find_rxnode_withkey"><code class="Fn" id="ieee80211_find_rxnode_withkey">ieee80211_find_rxnode_withkey</code></a>() - call: if a keytab entry is found using the specified index then it is - returned directly; otherwise a normal lookup is done and the keytab entry is - written using the specified index. If the specified index is - <code class="Dv">IEEE80211_KEYIX_NONE</code> then a normal lookup is done - without a table update.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ddb(4)</a>, <a class="Xr">ieee80211(9)</a>, - <a class="Xr">ieee80211_proto(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 2, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ieee80211_output.9 3.html b/static/freebsd/man9/ieee80211_output.9 3.html deleted file mode 100644 index 62d80efc..00000000 --- a/static/freebsd/man9/ieee80211_output.9 3.html +++ /dev/null @@ -1,141 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">IEEE80211_OUTPUT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">IEEE80211_OUTPUT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">ieee80211_output</code> — - <span class="Nd">software 802.11 stack output functions</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">net80211/ieee80211_var.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">M_WME_GETAC</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">M_SEQNO_GET</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *</var>);</p> -<p class="Pp"><var class="Ft">struct ieee80211_key *</var> - <br/> - <code class="Fn">ieee80211_crypto_encap</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211_node *</var>, <var class="Fa" style="white-space: nowrap;">struct - mbuf *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_process_callback</code>(<var class="Fa">struct - ieee80211_node *</var>, <var class="Fa">struct mbuf *</var>, - <var class="Fa">int</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">net80211</code> layer that supports 802.11 - device drivers handles most of the work required to transmit frames. Drivers - usually receive fully-encapsulated 802.11 frames that have been classified - and assigned a transmit priority; all that is left is to do crypto - encapsulation, prepare any hardware-specific state, and push the packet out - to the device. Outbound frames are either generated by the - <code class="Nm">net80211</code> layer (e.g. management frames) or are - passed down from upper layers through the <a class="Xr">ifnet(9)</a> - transmit queue. Data frames passed down for transmit flow through - <code class="Nm">net80211</code> which handles aggregation, 802.11 - encapsulation, and then dispatches the frames to the driver through it's - transmit queue.</p> -<p class="Pp">There are two control paths by which frames reach a driver for - transmit. Data packets are queued to the device's - <var class="Vt">if_snd</var> queue and the driver's - <var class="Vt">if_start</var> method is called. Other frames are passed - down using the <var class="Vt">ic_raw_xmit</var> method without queueing - (unless done by the driver). The raw transmit path may include data frames - from user applications that inject them through <a class="Xr">bpf(4)</a> and - NullData frames generated by <code class="Nm">net80211</code> to probe for - idle stations (when operating as an access point).</p> -<p class="Pp"><code class="Nm">net80211</code> handles all state-related - bookkeeping and management for the handling of data frames. Data frames are - only transmit for a vap in the <code class="Dv">IEEE80211_S_RUN</code> - state; there is no need, for example, to check for frames sent down when CAC - or CSA is active. Similarly, <code class="Nm">net80211</code> handles - activities such as background scanning and power save mode, frames will not - be sent to a driver unless it is operating on the BSS channel with - “full power”.</p> -<p class="Pp" id="ieee80211_free_node">All frames passed to a driver for - transmit hold a reference to a node table entry in the - <var class="Vt">m_pkthdr.rcvif</var> field. The node is associated with the - frame destination. Typically it is the receiver's entry but in some - situations it may be a placeholder entry or the “next hop - station” (such as in a mesh network). In all cases the reference must - be reclaimed with - <a class="permalink" href="#ieee80211_free_node"><code class="Fn">ieee80211_free_node</code></a>() - when the transmit work is completed. The rule to remember is: - <code class="Nm">net80211</code> passes responsibility for the - <var class="Vt">mbuf</var> and “node reference” to the driver - with each frame it hands off for transmit.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="PACKET_CLASSIFICATION"><a class="permalink" href="#PACKET_CLASSIFICATION">PACKET - CLASSIFICATION</a></h1> -<p class="Pp">All frames passed by <code class="Nm">net80211</code> for transmit - are assigned a priority based on any vlan tag assigned to the receiving - station and/or any Diffserv setting in an IP or IPv6 header. If both vlan - and Diffserv priority are present the higher of the two is used. If WME/WMM - is being used then any ACM policy (in station mode) is also enforced. The - resulting AC is attached to the mbuf and may be read back using the - <a class="permalink" href="#M_WME_GETAC"><code class="Fn" id="M_WME_GETAC">M_WME_GETAC</code></a>() - macro.</p> -<p class="Pp">PAE/EAPOL frames are tagged with an - <code class="Dv">M_EAPOL</code> mbuf flag; drivers should transmit them with - care, usually by using the transmit rate for management frames. - Multicast/broadcast frames are marked with the - <code class="Dv">M_MCAST</code> mbuf flag. Frames coming out of a station's - power save queue and that have more frames immediately following are marked - with the <code class="Dv">M_MORE_DATA</code> mbuf flag. Such frames will be - queued consecutively in the driver's <var class="Vt">if_snd</var> queue and - drivers should preserve the ordering when passing them to the device.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="FRAGMENTED_FRAMES"><a class="permalink" href="#FRAGMENTED_FRAMES">FRAGMENTED - FRAMES</a></h1> -<p class="Pp">The <code class="Nm">net80211</code> layer will fragment data - frames according to the setting of <var class="Vt">iv_fragthreshold</var> if - a driver marks the <code class="Dv">IEEE80211_C_TXFRAG</code> capability. - Fragmented frames are placed in the devices transmit queue with the - fragments chained together with <var class="Vt">m_nextpkt</var>. Each frame - is marked with the <code class="Dv">M_FRAG</code> mbuf flag, and the first - and last are marked with <code class="Dv">M_FIRSTFRAG</code> and - <code class="Dv">M_LASTFRAG</code>, respectively. Drivers are expected to - process all fragments or none.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="TRANSMIT_CALLBACKS"><a class="permalink" href="#TRANSMIT_CALLBACKS">TRANSMIT - CALLBACKS</a></h1> -<p class="Pp">Frames sent by <code class="Nm">net80211</code> may be tagged with - the <code class="Dv">M_TXCB</code> mbuf flag to indicate a callback should - be done when their transmission completes. The callback is done using - <a class="permalink" href="#ieee80211_process_callback"><code class="Fn" id="ieee80211_process_callback">ieee80211_process_callback</code></a>() - with the last parameter set to a non-zero value if an error occurred and - zero otherwise. Note <code class="Nm">net80211</code> understands that - drivers may be incapable of determining status; a device may not report if - an ACK frame is received and/or a device may queue transmit requests in its - hardware and only report status on whether the frame was successfully - queued.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">bpf(4)</a>, <a class="Xr">ieee80211(9)</a>, - <a class="Xr">ifnet(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 29, 2010</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ieee80211_proto.9 3.html b/static/freebsd/man9/ieee80211_proto.9 3.html deleted file mode 100644 index 921b1d66..00000000 --- a/static/freebsd/man9/ieee80211_proto.9 3.html +++ /dev/null @@ -1,198 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">IEEE80211_PROTO(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">IEEE80211_PROTO(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">ieee80211_proto</code> — - <span class="Nd">802.11 state machine support</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">net80211/ieee80211_var.h</a>></code></p> -<p class="Pp"> - <br/> - <var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_start_all</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211com *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_stop_all</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211com *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_suspend_all</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211com *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_resume_all</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211com *</var>);</p> -<p class="Pp"><code class="Dv">enum ieee80211_state</code>; - <br/> - <var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_new_state</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211vap *</var>, <var class="Fa" style="white-space: nowrap;">enum - ieee80211_state</var>, - <var class="Fa" style="white-space: nowrap;">int</var>);</p> -<p class="Pp"> - <br/> - <var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_wait_for_parent</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211com *</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">net80211</code> layer that supports 802.11 - device drivers uses a state machine to control operation of vaps. These - state machines vary according to the vap operating mode. Station mode state - machines follow the 802.11 MLME states in the protocol specification. Other - state machines are simpler and reflect operational work such as scanning for - a BSS or automatically selecting a channel to operate on. When multiple vaps - are operational the state machines are used to coordinate operation such as - choosing a channel. The state machine mechanism also serves to bind the - <code class="Nm">net80211</code> layer to a driver; this is described more - below.</p> -<p class="Pp">The following states are defined for state machines:</p> -<dl class="Bl-tag"> - <dt id="IEEE80211_S_INIT"><a class="permalink" href="#IEEE80211_S_INIT"><code class="Dv">IEEE80211_S_INIT</code></a></dt> - <dd>Default/initial state. A vap in this state should not hold any dynamic - state (e.g. entries for associated stations in the node table). The driver - must quiesce the hardware; e.g. there should be no interrupts firing.</dd> - <dt id="IEEE80211_S_SCAN"><a class="permalink" href="#IEEE80211_S_SCAN"><code class="Dv">IEEE80211_S_SCAN</code></a></dt> - <dd>Scanning for a BSS or choosing a channel to operate on. Note that scanning - can also take place in other states (e.g. when background scanning is - active); this state is entered when initially bringing a vap to an - operational state or after an event such as a beacon miss (in station - mode).</dd> - <dt id="IEEE80211_S_AUTH"><a class="permalink" href="#IEEE80211_S_AUTH"><code class="Dv">IEEE80211_S_AUTH</code></a></dt> - <dd>Authenticating to an access point (in station mode). This state is - normally reached from <code class="Dv">IEEE80211_S_SCAN</code> after - selecting a BSS, but may also be reached from - <code class="Dv">IEEE80211_S_ASSOC</code> or - <code class="Dv">IEEE80211_S_RUN</code> if the authentication handshake - fails.</dd> - <dt id="IEEE80211_S_ASSOC"><a class="permalink" href="#IEEE80211_S_ASSOC"><code class="Dv">IEEE80211_S_ASSOC</code></a></dt> - <dd>Associating to an access point (in station mode). This state is reached - from <code class="Dv">IEEE80211_S_AUTH</code> after successfully - authenticating or from <code class="Dv">IEEE80211_S_RUN</code> if a - DisAssoc frame is received.</dd> - <dt id="IEEE80211_S_CAC"><a class="permalink" href="#IEEE80211_S_CAC"><code class="Dv">IEEE80211_S_CAC</code></a></dt> - <dd>Doing Channel Availability Check (CAC). This state is entered only when - DFS is enabled and the channel selected for operation requires CAC.</dd> - <dt id="IEEE80211_S_RUN"><a class="permalink" href="#IEEE80211_S_RUN"><code class="Dv">IEEE80211_S_RUN</code></a></dt> - <dd>Operational. In this state a vap can transmit data frames, accept requests - for stations associating, etc. Beware that data traffic is also gated by - whether the associated “port” is authorized. When - WPA/802.11i/802.1x is operational authorization may happen separately; - e.g. in station mode <a class="Xr">wpa_supplicant(8)</a> must complete the - handshakes and plumb the necessary keys before a port is authorized. In - this state a BSS is operational and associated state is valid and may be - used; e.g. <var class="Vt">ic_bss</var> and - <var class="Vt">ic_bsschan</var> are guaranteed to be usable.</dd> - <dt id="IEEE80211_S_CSA"><a class="permalink" href="#IEEE80211_S_CSA"><code class="Dv">IEEE80211_S_CSA</code></a></dt> - <dd>Channel Switch Announcement (CSA) is pending. This state is reached only - from <code class="Dv">IEEE80211_S_RUN</code> when either a CSA is received - from an access point (in station mode) or the local station is preparing - to change channel. In this state traffic may be muted depending on the - Mute setting in the CSA.</dd> - <dt id="IEEE80211_S_SLEEP"><a class="permalink" href="#IEEE80211_S_SLEEP"><code class="Dv">IEEE80211_S_SLEEP</code></a></dt> - <dd>Asleep to save power (in station mode). This state is reached only from - <code class="Dv">IEEE80211_S_RUN</code> when power save operation is - enabled and the local station is deemed sufficiently idle to enter low - power mode.</dd> -</dl> -<p class="Pp">Note that states are ordered (as shown above); e.g. a vap must be - in the <code class="Dv">IEEE80211_S_RUN</code> or “greater” - before it can transmit frames. Certain <code class="Nm">net80211</code> data - are valid only in certain states; e.g. the <var class="Vt">iv_bsschan</var> - that specifies the channel for the operating BSS should never be used except - in <code class="Dv">IEEE80211_S_RUN</code> or greater.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="STATE_CHANGES"><a class="permalink" href="#STATE_CHANGES">STATE - CHANGES</a></h1> -<p class="Pp">State machine changes are typically handled internal to the - <code class="Nm">net80211</code> layer in response to - <a class="Xr">ioctl(2)</a> requests, received frames, or external events - such as a beacon miss. The - <a class="permalink" href="#ieee80211_new_state"><code class="Fn" id="ieee80211_new_state">ieee80211_new_state</code></a>() - function is used to initiate a state machine change on a vap. The new state - and an optional argument are supplied. The request is initially processed to - handle coordination of multiple vaps. For example, only one vap at a time - can be scanning, if multiple vaps request a change to - <code class="Dv">IEEE80211_S_SCAN</code> the first will be permitted to run - and the others will be - <a class="permalink" href="#deferred"><i class="Em" id="deferred">deferred</i></a> - until the scan operation completes at which time the selected channel will - be adopted. Similarly <code class="Nm">net80211</code> handles coordination - of combinations of vaps such as an AP and station vap where the station may - need to roam to follow the AP it is associated to (dragging along the AP vap - to the new channel). Another important coordination is the handling of - <code class="Dv">IEEE80211_S_CAC</code> and - <code class="Dv">IEEE80211_S_CSA</code>. No more than one vap can ever be - actively changing state at a time. In fact <code class="Nm">net80211</code> - single-threads the state machine logic in a dedicated - <a class="Xr">taskqueue(9)</a> thread that is also used to synchronize work - such as scanning and beacon miss handling.</p> -<p class="Pp">After multi-vap scheduling/coordination is done the per-vap - <var class="Vt">iv_newstate</var> method is called to carry out the state - change work. Drivers use this entry to setup private state and then dispatch - the call to the <code class="Nm">net80211</code> layer using the previously - defined method pointer (in OOP-parlance they call the “super - method” ).</p> -<p class="Pp"><code class="Nm">net80211</code> handles two state changes - specially. On transition to <code class="Dv">IEEE80211_S_RUN</code> the - <code class="Dv">IFF_DRV_OACTIVE</code> bit on the vap's transmit queue is - cleared so traffic can flow. On transition to - <code class="Dv">IEEE80211_S_INIT</code> any state in the scan cache - associated with the vap is flushed and any frames pending on the transmit - queue are flushed.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DRIVER_INTEGRATION"><a class="permalink" href="#DRIVER_INTEGRATION">DRIVER - INTEGRATION</a></h1> -<p class="Pp">Drivers are expected to override the - <var class="Vt">iv_newstate</var> method to interpose their own code and - handle setup work required by state changes. Otherwise drivers must call - <a class="permalink" href="#ieee80211_start_all"><code class="Fn" id="ieee80211_start_all">ieee80211_start_all</code></a>() - in response to being marked up through an - <code class="Dv">SIOCSIFFLAGS</code> ioctl request and they should use - <a class="permalink" href="#ieee80211_suspend_all"><code class="Fn" id="ieee80211_suspend_all">ieee80211_suspend_all</code></a>() - and - <a class="permalink" href="#ieee80211_resume_all"><code class="Fn" id="ieee80211_resume_all">ieee80211_resume_all</code></a>() - to implement suspend/resume support.</p> -<p class="Pp" id="ieee80211_stop_all">There is also an - <a class="permalink" href="#ieee80211_stop_all"><code class="Fn">ieee80211_stop_all</code></a>() - call to force all vaps to an <code class="Dv">IEEE80211_S_INIT</code> state - but this should not be needed by a driver; control is usually handled by - <code class="Nm">net80211</code> or, in the case of card eject or vap - destroy, work will be initiated outside the driver.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ioctl(2)</a>, <a class="Xr">wpa_supplicant(8)</a>, - <a class="Xr">ieee80211(9)</a>, <a class="Xr">ifnet(9)</a>, - <a class="Xr">taskqueue(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The state machine concept was part of the original - <code class="Nm">ieee80211</code> code base that first appeared in - <span class="Ux">NetBSD 1.5</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 4, 2009</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ieee80211_radiotap.9 3.html b/static/freebsd/man9/ieee80211_radiotap.9 3.html deleted file mode 100644 index eb4f76f8..00000000 --- a/static/freebsd/man9/ieee80211_radiotap.9 3.html +++ /dev/null @@ -1,248 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">IEEE80211_RADIOTAP(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">IEEE80211_RADIOTAP(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">ieee80211_radiotap</code> — - <span class="Nd">802.11 device packet capture support</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">net80211/ieee80211_var.h</a>></code></p> -<p class="Pp"> - <br/> - <var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_radiotap_attach</code>(<var class="Fa">struct - ieee80211com *</var>, <var class="Fa">struct ieee80211_radiotap_header - *th</var>, <var class="Fa">int tlen</var>, <var class="Fa">uint32_t - tx_radiotap</var>, <var class="Fa">struct ieee80211_radiotap_header - *rh</var>, <var class="Fa">int rlen</var>, <var class="Fa">uint32_t - rx_radiotap</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_radiotap_active_vap</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211vap *</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_radiotap_active</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211com *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_radiotap_tx</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211vap *</var>, <var class="Fa" style="white-space: nowrap;">struct - mbuf *</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">net80211</code> layer used by 802.11 drivers - includes support for a device-independent packet capture format called - <code class="Nm">radiotap</code> that is understood by tools such as - <a class="Xr">tcpdump(1)</a>. This facility is designed for capturing 802.11 - traffic, including information that is not part of the normal 802.11 frame - structure.</p> -<p class="Pp" id="ieee80211_radiotap_attach">Radiotap was designed to balance - the desire for a hardware-independent, extensible capture format against the - need to conserve CPU and memory bandwidth on embedded systems. These - considerations led to a format consisting of a standard preamble followed by - an extensible bitmap indicating the presence of optional capture fields. A - <code class="Nm">net80211</code> device driver supporting - <var class="Vt">radiotap</var> defines two packed structures that it shares - with <code class="Nm">net80211</code>. These structures embed an instance of - a <var class="Vt">ieee80211_radiotap_header</var> structure at the - beginning, with subsequent fields in the appropriate order, and macros to - set the bits of the <var class="Va">it_present</var> bitmap to indicate - which fields exist and are filled in by the driver. This information is then - supplied through the - <a class="permalink" href="#ieee80211_radiotap_attach"><code class="Fn">ieee80211_radiotap_attach</code></a>() - call after a successful - <a class="permalink" href="#ieee80211_ifattach"><code class="Fn" id="ieee80211_ifattach">ieee80211_ifattach</code></a>() - request.</p> -<p class="Pp" id="ieee80211_radiotap_active_vap">With radiotap setup, drivers - just need to fill in per-packet capture state for frames sent/received and - dispatch capture state in the transmit path (since control is not returned - to the <code class="Nm">net80211</code> layer before the packet is handed to - the device). To minimize overhead this work should be done only when one or - more processes are actively capturing data; this is checked with one of - <a class="permalink" href="#ieee80211_radiotap_active_vap"><code class="Fn">ieee80211_radiotap_active_vap</code></a>() - and - <a class="permalink" href="#ieee80211_radiotap_active"><code class="Fn" id="ieee80211_radiotap_active">ieee80211_radiotap_active</code></a>(). - In the transmit path capture work looks like this:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>if (ieee80211_radiotap_active_vap(vap)) { - ... /* record transmit state */ - ieee80211_radiotap_tx(vap, m); /* capture transmit event */ -}</pre> -</div> -<p class="Pp">While in the receive path capture is handled in - <code class="Nm">net80211</code> but state must be captured before - dispatching a frame:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>if (ieee80211_radiotap_active(ic)) { - ... /* record receive state */ -} -... -ieee80211_input(...); /* packet capture handled in net80211 */</pre> -</div> -<p class="Pp">The following fields are defined for - <var class="Vt">radiotap</var>, in the order in which they should appear in - the buffer supplied to <code class="Nm">net80211</code>.</p> -<dl class="Bl-tag"> - <dt id="IEEE80211_RADIOTAP_TSFT"><a class="permalink" href="#IEEE80211_RADIOTAP_TSFT"><code class="Dv">IEEE80211_RADIOTAP_TSFT</code></a></dt> - <dd>This field contains the unsigned 64-bit value, in microseconds, of the - MAC's 802.11 Time Synchronization Function (TSF). In theory, for each - received frame, this value is recorded when the first bit of the MPDU - arrived at the MAC. In practice, hardware snapshots the TSF otherwise and - one cannot assume this data is accurate without driver adjustment.</dd> - <dt id="IEEE80211_RADIOTAP_FLAGS"><a class="permalink" href="#IEEE80211_RADIOTAP_FLAGS"><code class="Dv">IEEE80211_RADIOTAP_FLAGS</code></a></dt> - <dd>This field contains a single unsigned 8-bit value, containing one or more - of these bit flags: - <dl class="Bl-tag"> - <dt id="IEEE80211_RADIOTAP_F_CFP"><a class="permalink" href="#IEEE80211_RADIOTAP_F_CFP"><code class="Dv">IEEE80211_RADIOTAP_F_CFP</code></a></dt> - <dd>Frame was sent/received during the Contention Free Period (CFP).</dd> - <dt id="IEEE80211_RADIOTAP_F_SHORTPRE"><a class="permalink" href="#IEEE80211_RADIOTAP_F_SHORTPRE"><code class="Dv">IEEE80211_RADIOTAP_F_SHORTPRE</code></a></dt> - <dd>Frame was sent/received with short preamble.</dd> - <dt id="IEEE80211_RADIOTAP_F_WEP"><a class="permalink" href="#IEEE80211_RADIOTAP_F_WEP"><code class="Dv">IEEE80211_RADIOTAP_F_WEP</code></a></dt> - <dd>Frame was encrypted.</dd> - <dt id="IEEE80211_RADIOTAP_F_FRAG"><a class="permalink" href="#IEEE80211_RADIOTAP_F_FRAG"><code class="Dv">IEEE80211_RADIOTAP_F_FRAG</code></a></dt> - <dd>Frame was an 802.11 fragment.</dd> - <dt id="IEEE80211_RADIOTAP_F_FCS"><a class="permalink" href="#IEEE80211_RADIOTAP_F_FCS"><code class="Dv">IEEE80211_RADIOTAP_F_FCS</code></a></dt> - <dd>Frame contents includes the FCS.</dd> - <dt id="IEEE80211_RADIOTAP_F_DATAPAD"><a class="permalink" href="#IEEE80211_RADIOTAP_F_DATAPAD"><code class="Dv">IEEE80211_RADIOTAP_F_DATAPAD</code></a></dt> - <dd>Frame contents potentially has padding between the 802.11 header and - the data payload to align the payload to a 32-bit boundary.</dd> - <dt id="IEEE80211_RADIOTAP_F_BADFCS"><a class="permalink" href="#IEEE80211_RADIOTAP_F_BADFCS"><code class="Dv">IEEE80211_RADIOTAP_F_BADFCS</code></a></dt> - <dd>Frame was received with an invalid FCS.</dd> - <dt id="IEEE80211_RADIOTAP_F_SHORTGI"><a class="permalink" href="#IEEE80211_RADIOTAP_F_SHORTGI"><code class="Dv">IEEE80211_RADIOTAP_F_SHORTGI</code></a></dt> - <dd>Frame was sent/received with Short Guard Interval.</dd> - </dl> - </dd> - <dt id="IEEE80211_RADIOTAP_RATE"><a class="permalink" href="#IEEE80211_RADIOTAP_RATE"><code class="Dv">IEEE80211_RADIOTAP_RATE</code></a></dt> - <dd>This field contains a single unsigned 8-bit value that is the data rate. - Legacy rates are in units of 500Kbps. MCS rates (used on 802.11n/HT - channels) have the high bit set and the MCS in the low 7 bits.</dd> - <dt id="IEEE80211_RADIOTAP_CHANNEL"><a class="permalink" href="#IEEE80211_RADIOTAP_CHANNEL"><code class="Dv">IEEE80211_RADIOTAP_CHANNEL</code></a></dt> - <dd>This field contains two unsigned 16-bit values. The first value is the - center frequency for the channel the frame was sent/received on. The - second value is a bitmap containing flags that specify channel properties. - <p class="Pp">This field is deprecated in favor of - <code class="Dv">IEEE80211_RADIOTAP_XCHANNEL</code> but may be used to - save space in the capture file for legacy devices.</p> - </dd> - <dt id="IEEE80211_RADIOTAP_DBM_ANTSIGNAL"><a class="permalink" href="#IEEE80211_RADIOTAP_DBM_ANTSIGNAL"><code class="Dv">IEEE80211_RADIOTAP_DBM_ANTSIGNAL</code></a></dt> - <dd>This field contains a single signed 8-bit value that indicates the RF - signal power at the antenna, in decibels difference from 1mW.</dd> - <dt id="IEEE80211_RADIOTAP_DBM_ANTNOISE"><a class="permalink" href="#IEEE80211_RADIOTAP_DBM_ANTNOISE"><code class="Dv">IEEE80211_RADIOTAP_DBM_ANTNOISE</code></a></dt> - <dd>This field contains a single signed 8-bit value that indicates the RF - noise power at the antenna, in decibels difference from 1mW.</dd> - <dt id="IEEE80211_RADIOTAP_DBM_TX_POWER"><a class="permalink" href="#IEEE80211_RADIOTAP_DBM_TX_POWER"><code class="Dv">IEEE80211_RADIOTAP_DBM_TX_POWER</code></a></dt> - <dd>Transmit power expressed as decibels from a 1mW reference. This field is a - single signed 8-bit value. This is the absolute power level measured at - the antenna port.</dd> - <dt id="IEEE80211_RADIOTAP_ANTENNA"><a class="permalink" href="#IEEE80211_RADIOTAP_ANTENNA"><code class="Dv">IEEE80211_RADIOTAP_ANTENNA</code></a></dt> - <dd>This field contains a single unsigned 8-bit value that specifies which - antenna was used to transmit or receive the frame. Antenna numbering is - device-specific but typically the primary antenna has the lowest number. - On transmit a value of zero may be seen which typically means antenna - selection is left to the device.</dd> - <dt id="IEEE80211_RADIOTAP_DB_ANTSIGNAL"><a class="permalink" href="#IEEE80211_RADIOTAP_DB_ANTSIGNAL"><code class="Dv">IEEE80211_RADIOTAP_DB_ANTSIGNAL</code></a></dt> - <dd>This field contains a single unsigned 8-bit value that indicates the RF - signal power at the antenna, in decibels difference from an arbitrary, - fixed reference.</dd> - <dt id="IEEE80211_RADIOTAP_DB_ANTNOISE"><a class="permalink" href="#IEEE80211_RADIOTAP_DB_ANTNOISE"><code class="Dv">IEEE80211_RADIOTAP_DB_ANTNOISE</code></a></dt> - <dd>This field contains a single unsigned 8-bit value that indicates the RF - noise power at the antenna, in decibels difference from an arbitrary, - fixed reference.</dd> - <dt id="IEEE80211_RADIOTAP_XCHANNEL"><a class="permalink" href="#IEEE80211_RADIOTAP_XCHANNEL"><code class="Dv">IEEE80211_RADIOTAP_XCHANNEL</code></a></dt> - <dd>This field contains four values: a 32-bit unsigned bitmap of flags that - describe the channel attributes, a 16-bit unsigned frequency in MHz - (typically the channel center), an 8-bit unsigned IEEE channel number, and - a signed 8-bit value that holds the maximum regulatory transmit power cap - in .5 dBm (8 bytes total). Channel flags are defined in: - <code class="In"><<a class="In">net80211/_ieee80211.h</a>></code> - (only a subset are found in - <code class="In"><<a class="In">net80211/ieee80211_radiotap.h</a>></code> - ). This property supersedes - <code class="Dv">IEEE80211_RADIOTAP_CHANNEL</code> and is the only way to - completely express all channel attributes and the mapping between channel - frequency and IEEE channel number.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">Radiotap receive definitions for the Intersil Prism driver:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>#define WI_RX_RADIOTAP_PRESENT \ - ((1 << IEEE80211_RADIOTAP_TSFT) \ - (1 << IEEE80211_RADIOTAP_FLAGS) | \ - (1 << IEEE80211_RADIOTAP_RATE) | \ - (1 << IEEE80211_RADIOTAP_CHANNEL) | \ - (1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL) | \ - (1 << IEEE80211_RADIOTAP_DB_ANTNOISE)) - -struct wi_rx_radiotap_header { - struct ieee80211_radiotap_header wr_ihdr; - uint64_t wr_tsf; - uint8_t wr_flags; - uint8_t wr_rate; - uint16_t wr_chan_freq; - uint16_t wr_chan_flags; - uint8_t wr_antsignal; - uint8_t wr_antnoise; -} __packed __aligned(8);</pre> -</div> -<p class="Pp">and transmit definitions for the Atheros driver:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>#define ATH_TX_RADIOTAP_PRESENT ( \ - (1 << IEEE80211_RADIOTAP_FLAGS) | \ - (1 << IEEE80211_RADIOTAP_RATE) | \ - (1 << IEEE80211_RADIOTAP_DBM_TX_POWER) | \ - (1 << IEEE80211_RADIOTAP_ANTENNA) | \ - (1 << IEEE80211_RADIOTAP_XCHANNEL) | \ - 0) - -struct ath_tx_radiotap_header { - struct ieee80211_radiotap_header wt_ihdr; - uint8_t wt_flags; - uint8_t wt_rate; - uint8_t wt_txpower; - uint8_t wt_antenna; - uint32_t wt_chan_flags; - uint16_t wt_chan_freq; - uint8_t wt_chan_ieee; - int8_t wt_chan_maxpow; -} __packed;</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">tcpdump(1)</a>, <a class="Xr">bpf(4)</a>, - <a class="Xr">ieee80211(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">ieee80211_radiotap</code> definitions first - appeared in <span class="Ux">NetBSD 1.5</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The original version of this manual page was written by - <span class="An">Bruce M. Simpson</span> - <<a class="Mt" href="mailto:bms@FreeBSD.org">bms@FreeBSD.org</a>> and - <span class="An">Darron Broad</span> - <<a class="Mt" href="mailto:darron@kewl.org">darron@kewl.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 11, 2019</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ieee80211_regdomain.9 3.html b/static/freebsd/man9/ieee80211_regdomain.9 3.html deleted file mode 100644 index b0233133..00000000 --- a/static/freebsd/man9/ieee80211_regdomain.9 3.html +++ /dev/null @@ -1,118 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">IEEE80211_REGDOMAIN(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">IEEE80211_REGDOMAIN(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">ieee80211_regdomain</code> — - <span class="Nd">802.11 regulatory support</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">net80211/ieee80211_var.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">net80211/ieee80211_regdomain.h</a>></code></p> -<p class="Pp"> - <br/> - <var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_init_channels</code>(<var class="Fa">struct - ieee80211com *</var>, <var class="Fa">const struct ieee80211_regdomain - *</var>, <var class="Fa">const uint8_t bands[]</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_sort_channels</code>(<var class="Fa">struct - ieee80211_channel *</var>, <var class="Fa">int nchans</var>);</p> -<p class="Pp"><var class="Ft">struct ieee80211_appie *</var> - <br/> - <code class="Fn">ieee80211_alloc_countryie</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211com *</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">net80211</code> software layer provides a - support framework for drivers that includes comprehensive regulatory - support. <code class="Nm">net80211</code> provides mechanisms that enforce - <a class="permalink" href="#regulatory"><i class="Em" id="regulatory">regulatory - policy</i></a> by privileged user applications.</p> -<p class="Pp" id="ieee80211_ifattach">Drivers define a device's capabilities and - can intercept and control regulatory changes requested through - <code class="Nm">net80211</code>. The initial regulatory state, including - the channel list, must be filled in by the driver before calling - <a class="permalink" href="#ieee80211_ifattach"><code class="Fn">ieee80211_ifattach</code></a>(). - The channel list should reflect the set of channels the device is - <a class="permalink" href="#calibrated"><i class="Em" id="calibrated">calibrated</i></a> - for use on. This list may also be requested later through the - <var class="Vt">ic_getradiocaps</var> method in the - <var class="Vt">ieee80211com</var> structure. The - <a class="permalink" href="#ieee80211_init_channels"><code class="Fn" id="ieee80211_init_channels">ieee80211_init_channels</code></a>() - function is provided as a rudimentary fallback for drivers that do not (or - cannot) fill in a proper channel list. Default regulatory state is supplied - such as the regulatory SKU, ISO country code, location (e.g. indoor, - outdoor), and a set of frequency bands the device is capable of operating - on. <code class="Nm">net80211</code> populates the channel table in - <var class="Vt">ic_channels</var> with a default set of channels and - capabilities. Note this mechanism should be used with care as any mismatch - between the channel list created and the device's capabilities can result in - runtime errors (e.g. a request to operate on a channel the device does not - support). The SKU and country information are used for generating 802.11h - protocol elements and related operation such as for 802.11d; mis-setup by a - driver is not fatal, only potentially confusing.</p> -<p class="Pp" id="ieee80211_notify_country">Devices that do not have a - fixed/default regulatory state can set the regulatory SKU to - <code class="Dv">SKU_DEBUG</code> and country code to - <code class="Dv">CTRY_DEFAULT</code> and leave proper setup to user - applications. If default settings are known they can be installed and/or an - event can be dispatched to user space using - <a class="permalink" href="#ieee80211_notify_country"><code class="Fn">ieee80211_notify_country</code></a>() - so that <a class="Xr">devd(8)</a> will do the appropriate setup work at - system boot (or device insertion).</p> -<p class="Pp" id="ieee80211_sort_channels">The channel table is sorted to - optimize lookups using the - <a class="permalink" href="#ieee80211_sort_channels"><code class="Fn">ieee80211_sort_channels</code></a>() - routine. This should be done whenever the channel table contents are - modified.</p> -<p class="Pp" id="ieee80211_alloc_countryie">The - <a class="permalink" href="#ieee80211_alloc_countryie"><code class="Fn">ieee80211_alloc_countryie</code></a>() - function allocates an information element as specified by 802.11h. Because - this is expensive to generate it is cached in - <var class="Vt">ic_countryie</var> and generated only when regulatory state - changes. Drivers that call - <code class="Fn">ieee80211_alloc_countryie</code>() directly should not help - with this caching; doing so may confuse the <code class="Nm">net80211</code> - layer.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DRIVER_REGULATORY_CONTROL"><a class="permalink" href="#DRIVER_REGULATORY_CONTROL">DRIVER - REGULATORY CONTROL</a></h1> -<p class="Pp">Drivers can control regulatory change requests by overriding the - <var class="Vt">ic_setregdomain</var> method that checks change requests. - While drivers can reject any request that does not meet its requirements it - is recommended that one be lenient in what is accepted and, whenever - possible, instead of rejecting a request, alter it to be correct. For - example, if the transmit power cap for a channel is too high the driver can - either reject the request or (better) reduce the cap to be compliant. - Requests that include unacceptable channels should cause the request to be - rejected as otherwise a mismatch may be created between application state - and the state managed by <code class="Nm">net80211</code>. The exact rules - by which to operate are still being codified.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">regdomain(5)</a>, <a class="Xr">ifconfig(8)</a>, - <a class="Xr">ieee80211(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 4, 2009</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ieee80211_scan.9 3.html b/static/freebsd/man9/ieee80211_scan.9 3.html deleted file mode 100644 index d331f5d8..00000000 --- a/static/freebsd/man9/ieee80211_scan.9 3.html +++ /dev/null @@ -1,291 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">IEEE80211_SCAN(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">IEEE80211_SCAN(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">ieee80211_scan</code> — - <span class="Nd">802.11 scanning support</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">net80211/ieee80211_var.h</a>></code></p> -<p class="Pp"> - <br/> - <var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_start_scan</code>(<var class="Fa">struct - ieee80211vap *</var>, <var class="Fa">int flags</var>, <var class="Fa">u_int - duration</var>, <var class="Fa">u_int mindwell</var>, <var class="Fa">u_int - maxdwell</var>, <var class="Fa">u_int nssid</var>, <var class="Fa">const - struct ieee80211_scan_ssid ssids[]</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_check_scan</code>(<var class="Fa">struct - ieee80211vap *</var>, <var class="Fa">int flags</var>, <var class="Fa">u_int - duration</var>, <var class="Fa">u_int mindwell</var>, <var class="Fa">u_int - maxdwell</var>, <var class="Fa">u_int nssid</var>, <var class="Fa">const - struct ieee80211_scan_ssid ssids[]</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_check_scan_current</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211vap *</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_bg_scan</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211vap *</var>, - <var class="Fa" style="white-space: nowrap;">int</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_cancel_scan</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211vap *</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_cancel_scan_any</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211vap *</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_scan_next</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211vap *</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_scan_done</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211vap *</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_probe_curchan</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211vap *</var>, - <var class="Fa" style="white-space: nowrap;">int</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_add_scan</code>(<var class="Fa">struct ieee80211vap - *</var>, <var class="Fa">const struct ieee80211_scanparams *</var>, - <var class="Fa">const struct ieee80211_frame *</var>, <var class="Fa">int - subtype</var>, <var class="Fa">int rssi</var>, <var class="Fa">int - noise</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_scan_timeout</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211com *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_scan_assoc_fail</code>(<var class="Fa">struct - ieee80211vap *</var>, <var class="Fa">const uint8_t - mac[IEEE80211_ADDR_LEN]</var>, <var class="Fa">int reason</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_scan_flush</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211vap *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_scan_iterate</code>(<var class="Fa">struct - ieee80211vap *</var>, <var class="Fa">ieee80211_scan_iter_func</var>, - <var class="Fa">void *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_scan_dump_channels</code>(<var class="Fa" style="white-space: nowrap;">const - struct ieee80211_scan_state *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_scanner_register</code>(<var class="Fa">enum - ieee80211_opmode</var>, <var class="Fa">const struct ieee80211_scanner - *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_scanner_unregister</code>(<var class="Fa">enum - ieee80211_opmode</var>, <var class="Fa">const struct ieee80211_scanner - *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_scanner_unregister_all</code>(<var class="Fa" style="white-space: nowrap;">const - struct ieee80211_scanner *</var>);</p> -<p class="Pp"><var class="Ft">const struct ieee80211_scanner *</var> - <br/> - <code class="Fn">ieee80211_scanner_get</code>(<var class="Fa" style="white-space: nowrap;">enum - ieee80211_opmode</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">net80211</code> software layer provides an - extensible framework for scanning. Scanning is the procedure by which a - station locates a BSS to join (in infrastructure and IBSS mode), or a - channel to use (when operating as an AP or an IBSS master). Scans are either - “active” or “passive”. An active scan causes one - or more ProbeRequest frames to be sent on visiting each channel. A passive - request causes each channel in the scan set to be visited but no frames to - be transmitted; the station only listens for traffic. Note that active - scanning may still need to listen for traffic before sending ProbeRequest - frames depending on regulatory constraints.</p> -<p class="Pp">A scan operation involves constructing a set of channels to - inspect (the scan set), visiting each channel and collecting information - (e.g. what BSS are present), and then analyzing the results to make - decisions such as which BSS to join. This process needs to be as fast as - possible so <code class="Nm">net80211</code> does things like intelligently - construct scan sets and dwell on a channel only as long as necessary. Scan - results are cached and the scan cache is used to avoid scanning when - possible and to enable roaming between access points when operating in - infrastructure mode.</p> -<p class="Pp" id="policy">Scanning is handled by pluggable modules that - implement <a class="permalink" href="#policy"><i class="Em">policy</i></a> - per-operating mode. The core scanning support provides an infrastructure to - support these modules and exports a common API to the rest of the - <code class="Nm">net80211</code> layer. Policy modules decide what channels - to visit, what state to record to make decisions, and selects the final - station/channel to return as the result of a scan.</p> -<p class="Pp" id="ieee80211_new_state">Scanning is done synchronously when - initially bringing a vap to an operational state and optionally in the - background to maintain the scan cache for doing roaming and rogue AP - monitoring. Scanning is not tied to the <code class="Nm">net80211</code> - state machine that governs vaps except for linkage to the - <code class="Dv">IEEE80211_S_SCAN</code> state. Only one vap at a time may - be scanning; this scheduling policy is handled in - <a class="permalink" href="#ieee80211_new_state"><code class="Fn">ieee80211_new_state</code></a>() - and is transparent to scanning code.</p> -<p class="Pp">Scanning is controlled by a set of parameters that (potentially) - constrains the channel set and any desired SSID's and BSSID's. - <code class="Nm">net80211</code> comes with a standard scanner module that - works with all available operating modes and supports “background - scanning” and “roaming” operation.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SCANNER_MODULES"><a class="permalink" href="#SCANNER_MODULES">SCANNER - MODULES</a></h1> -<p class="Pp">Scanning modules use a registration mechanism to hook into the - <code class="Nm">net80211</code> layer. Use - <a class="permalink" href="#ieee80211_scanner_register"><code class="Fn" id="ieee80211_scanner_register">ieee80211_scanner_register</code></a>() - to register a scan module for a particular operating mode and - <a class="permalink" href="#ieee80211_scanner_unregister"><code class="Fn" id="ieee80211_scanner_unregister">ieee80211_scanner_unregister</code></a>() - or - <a class="permalink" href="#ieee80211_scanner_unregister_all"><code class="Fn" id="ieee80211_scanner_unregister_all">ieee80211_scanner_unregister_all</code></a>() - to clear entries (typically on module unload). Only one scanner module can - be registered at any time for an operating mode.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DRIVER_SUPPORT"><a class="permalink" href="#DRIVER_SUPPORT">DRIVER - SUPPORT</a></h1> -<p class="Pp">Scanning operations are usually managed by the - <code class="Nm">net80211</code> layer. Drivers must provide - <var class="Vt">ic_scan_start</var> and <var class="Vt">ic_scan_stop</var> - methods that are called at the start of a scan and when the work is done; - these should handle work such as enabling receive of Beacon and - ProbeResponse frames and disable any BSSID matching. The - <var class="Vt">ic_set_channel</var> method is used to change channels while - scanning. <code class="Nm">net80211</code> will generate ProbeRequest frames - and transmit them using the <code class="Nm">ic_raw_xmit</code> method. - Frames received while scanning are dispatched to - <code class="Nm">net80211</code> using the normal receive path. Devices that - off-load scan work to firmware most easily mesh with - <code class="Nm">net80211</code> by operating on a channel-at-a-time basis - as this defers control to <code class="Nm">net80211's</code> scan machine - scheduler. But multi-channel scanning is supported if the driver manually - dispatches results using <code class="Fn">ieee80211_add_scan</code>() - routine to enter results into the scan cache.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SCAN_REQUESTS"><a class="permalink" href="#SCAN_REQUESTS">SCAN - REQUESTS</a></h1> -<p class="Pp">Scan requests occur by way of the - <code class="Dv">IEEE80211_SCAN_REQUEST</code> ioctl or through a change in - a vap's state machine that requires scanning. In both cases the scan cache - can be checked first and, if it is deemed suitably “warm” then - it's contents are used without leaving the current channel. To start a scan - without checking the cache - <a class="permalink" href="#ieee80211_start_scan"><code class="Fn" id="ieee80211_start_scan">ieee80211_start_scan</code></a>() - can be called; otherwise - <a class="permalink" href="#ieee80211_check_scan"><code class="Fn" id="ieee80211_check_scan">ieee80211_check_scan</code></a>() - can be used to first check the scan cache, kicking off a scan if the cache - contents are out of date. There is also - <a class="permalink" href="#ieee80211_check_scan_current"><code class="Fn" id="ieee80211_check_scan_current">ieee80211_check_scan_current</code></a>() - which is a shorthand for using previously set scan parameters for checking - the scan cache and then scanning.</p> -<p class="Pp" id="ieee80211_bg_scan">Background scanning is done using - <a class="permalink" href="#ieee80211_bg_scan"><code class="Fn">ieee80211_bg_scan</code></a>() - in a co-routine fashion. The first call to this routine will start a - background scan that runs for a limited period of time before returning to - the BSS channel. Subsequent calls advance through the scan set until all - channels are visited. Typically these later calls are timed to allow receipt - of frames buffered by an access point for the station.</p> -<p class="Pp" id="ieee80211_cancel_scan">A scan operation can be canceled using - <a class="permalink" href="#ieee80211_cancel_scan"><code class="Fn">ieee80211_cancel_scan</code></a>() - if it was initiated by the specified vap, or - <a class="permalink" href="#ieee80211_cancel_scan_any"><code class="Fn" id="ieee80211_cancel_scan_any">ieee80211_cancel_scan_any</code></a>() - to force termination regardless which vap started it. These requests are - mostly used by <code class="Nm">net80211</code> in the transmit path to - cancel background scans when frames are to be sent. Drivers should not need - to use these calls (or most of the calls described on this page).</p> -<p class="Pp" id="ieee80211_scan_next">The - <a class="permalink" href="#ieee80211_scan_next"><code class="Fn">ieee80211_scan_next</code></a>() - and - <a class="permalink" href="#ieee80211_scan_done"><code class="Fn" id="ieee80211_scan_done">ieee80211_scan_done</code></a>() - routines do explicit iteration through the scan set and should not normally - be used by drivers. - <a class="permalink" href="#ieee80211_probe_curchan"><code class="Fn" id="ieee80211_probe_curchan">ieee80211_probe_curchan</code></a>() - handles the work of transmitting ProbeRequest frames when visiting a channel - during an active scan. When the channel attributes are marked with - <code class="Dv">IEEE80211_CHAN_PASSIVE</code> this function will arrange - that before any frame is transmitted 802.11 traffic is first received (in - order to comply with regulatory constraints).</p> -<p class="Pp">Min/max dwell time parameters are used to constrain time spent - visiting a channel. The maximum dwell time constrains the time spent - listening for traffic. The minimum dwell time is used to reduce this - time--when it is reached and one or more frames have been received then an - immediate channel change will be done. Drivers can override this behaviour - through the <var class="Vt">iv_scan_mindwell</var> method.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SCAN_CACHE_MANAGEMENT"><a class="permalink" href="#SCAN_CACHE_MANAGEMENT">SCAN - CACHE MANAGEMENT</a></h1> -<p class="Pp">The scan cache contents are managed by the scan policy module and - are opaque outside this module. The <code class="Nm">net80211</code> scan - framework defines API's for interacting. The validity of the scan cache - contents are controlled by <var class="Vt">iv_scanvalid</var> which is - exported to user space through the - <code class="Dv">IEEE80211_SCAN_VALID</code> request.</p> -<p class="Pp" id="ieee80211_scan_flush">The cache contents can be explicitly - flushed with - <a class="permalink" href="#ieee80211_scan_flush"><code class="Fn">ieee80211_scan_flush</code></a>() - or by setting the <code class="Dv">IEEE80211_SCAN_FLUSH</code> flag when - starting a scan operation.</p> -<p class="Pp" id="ieee80211_add_scan">Scan cache entries are created with the - <a class="permalink" href="#ieee80211_add_scan"><code class="Fn">ieee80211_add_scan</code></a>() - routine; usually on receipt of Beacon or ProbeResponse frames. Existing - entries are typically updated based on the latest information though some - information such as RSSI and noise floor readings may be combined to present - an average.</p> -<p class="Pp" id="ieee80211_scan_timeout">The cache contents is aged through - <a class="permalink" href="#ieee80211_scan_timeout"><code class="Fn">ieee80211_scan_timeout</code></a>() - calls. Typically these happen together with other station table activity; - every <code class="Dv">IEEE80211_INACT_WAIT</code> seconds (default 15).</p> -<p class="Pp" id="ieee80211_scan_assoc_success">Individual cache entries are - marked usable with - <a class="permalink" href="#ieee80211_scan_assoc_success"><code class="Fn">ieee80211_scan_assoc_success</code></a>() - and faulty with - <a class="permalink" href="#ieee80211_scan_assoc_fail"><code class="Fn" id="ieee80211_scan_assoc_fail">ieee80211_scan_assoc_fail</code></a>() - with the latter taking an argument to identify if there was no response to - Authentication/Association requests or if a negative response was received - (which might hasten cache eviction or blacklist the entry).</p> -<p class="Pp" id="ieee80211_scan_iterate">The cache contents can be viewed using - the - <a class="permalink" href="#ieee80211_scan_iterate"><code class="Fn">ieee80211_scan_iterate</code></a>() - call. Cache entries are exported in a public format that is exported to user - applications through the <code class="Dv">IEEE80211_SCAN_RESULTS</code> - request.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ioctl(2)</a>, <a class="Xr">ieee80211(9)</a>, - <a class="Xr">ieee80211_proto(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 29, 2010</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ieee80211_vap.9 3.html b/static/freebsd/man9/ieee80211_vap.9 3.html deleted file mode 100644 index 0ae1b2b1..00000000 --- a/static/freebsd/man9/ieee80211_vap.9 3.html +++ /dev/null @@ -1,116 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">IEEE80211_VAP(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">IEEE80211_VAP(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">net80211_vap</code> — - <span class="Nd">802.11 network layer virtual radio support</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">net80211/ieee80211_var.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_vap_setup</code>(<var class="Fa">struct - ieee80211com *</var>, <var class="Fa">struct ieee80211vap *</var>, - <var class="Fa">const char name[IFNAMSIZ]</var>, <var class="Fa">int - unit</var>, <var class="Fa">int opmode</var>, <var class="Fa">int - flags</var>, <var class="Fa">const uint8_t bssid[IEEE80211_ADDR_LEN]</var>, - <var class="Fa">const uint8_t macaddr[IEEE80211_ADDR_LEN]</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ieee80211_vap_attach</code>(<var class="Fa">struct - ieee80211vap *</var>, <var class="Fa">ifm_change_cb_t media_change</var>, - <var class="Fa">ifm_stat_cb_t media_stat</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ieee80211_vap_detach</code>(<var class="Fa" style="white-space: nowrap;">struct - ieee80211vap *</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">net80211</code> software layer provides a - support framework for drivers that includes a virtual radio API that is - exported to users through network interfaces (aka vaps) that are cloned from - the underlying device. These interfaces have an operating mode (station, - adhoc, hostap, wds, monitor, etc.) that is fixed for the lifetime of the - interface. Devices that can support multiple concurrent interfaces allow - multiple vaps to be cloned.</p> -<p class="Pp">The virtual radio interface defined by the - <code class="Nm">net80211</code> layer means that drivers must be structured - to follow specific rules. Drivers that support only a single interface at - any time must still follow these rules.</p> -<p class="Pp">The virtual radio architecture splits state between a single - per-device <var class="Vt">ieee80211com</var> structure and one or more - <var class="Vt">ieee80211vap</var> structures. Vaps are created with the - <code class="Dv">SIOCIFCREATE2</code> request. This results in a call into - the driver's <var class="Vt">ic_vap_create</var> method where the driver can - decide if the request should be accepted.</p> -<p class="Pp" id="ieee80211_vap_setup">The vap creation process is done in three - steps. First the driver allocates the data structure with - <a class="Xr">malloc(9)</a>. This data structure must have an - <var class="Vt">ieee80211vap</var> structure at the front but is usually - extended with driver-private state. Next the vap is setup with a call to - <a class="permalink" href="#ieee80211_vap_setup"><code class="Fn">ieee80211_vap_setup</code></a>(). - This request initializes <code class="Nm">net80211</code> state but does not - activate the interface. The driver can then override methods setup by - <code class="Nm">net80211</code> and setup driver resources before finally - calling - <a class="permalink" href="#ieee80211_vap_attach"><code class="Fn" id="ieee80211_vap_attach">ieee80211_vap_attach</code></a>() - to complete the process. Both these calls must be done without holding any - driver locks as work may require the process block/sleep.</p> -<p class="Pp" id="ieee80211_vap_detach">A vap is deleted when an - <code class="Dv">SIOCIFDESTROY</code> ioctl request is made or when the - device detaches (causing all associated vaps to automatically be deleted). - Delete requests cause the <var class="Vt">ic_vap_delete</var> method to be - called. Drivers must quiesce the device before calling - <a class="permalink" href="#ieee80211_vap_detach"><code class="Fn">ieee80211_vap_detach</code></a>() - to deactivate the vap and isolate it from activities such as requests from - user applications. The driver can then reclaim resources held by the vap and - re-enable device operation. The exact procedure for quiescing a device is - unspecified but typically it involves blocking interrupts and stopping - transmit and receive processing.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="MULTI-VAP_OPERATION"><a class="permalink" href="#MULTI-VAP_OPERATION">MULTI-VAP - OPERATION</a></h1> -<p class="Pp">Drivers are responsible for deciding if multiple vaps can be - created and how to manage them. Whether or not multiple concurrent vaps can - be supported depends on a device's capabilities. For example, multiple - hostap vaps can usually be supported but many devices do not support - assigning each vap a unique BSSID. If a device supports hostap operation it - can usually support concurrent station mode vaps but possibly with - limitations such as losing support for hardware beacon miss support. Devices - that are capable of hostap operation and can send and receive 4-address - frames should be able to support WDS vaps together with an ap vap. But in - contrast some devices cannot support WDS vaps without at least one ap vap - (this however can be finessed by forcing the ap vap to not transmit beacon - frames). All devices should support the creation of any number of monitor - mode vaps concurrent with other vaps but it is the responsibility of the - driver to allow this.</p> -<p class="Pp">An important consequence of supporting multiple concurrent vaps is - that a driver's <var class="Vt">iv_newstate</var> method must be written to - handle being called for each vap. Where necessary, drivers must track - private state for all vaps and not just the one whose state is being changed - (e.g. for handling beacon timers the driver may need to know if all vaps - that beacon are stopped before stopping the hardware timers).</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ieee80211(9)</a>, <a class="Xr">ifnet(9)</a>, - <a class="Xr">malloc(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 4, 2009</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/iflib.9 4.html b/static/freebsd/man9/iflib.9 4.html deleted file mode 100644 index 86e00305..00000000 --- a/static/freebsd/man9/iflib.9 4.html +++ /dev/null @@ -1,55 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">IFLIB(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">IFLIB(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">iflib</code> — <span class="Nd">Network - Interface Driver Framework</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><code class="Nm">iflib</code> is a framework for writing network - interface drivers for <span class="Ux">FreeBSD</span>. It is designed to - remove a large amount of the boilerplate that is often needed for modern - network interface devices, allowing driver authors to focus on the specific - code needed for their hardware.</p> -<p class="Pp">There are three logical components to - <code class="Nm">iflib</code> each of which is described in its own manual - page. These are:</p> -<dl class="Bl-tag"> - <dt><a class="Xr">iflibdi(9)</a></dt> - <dd>Device-independent functions, used to integrate - <code class="Nm">iflib</code> into the rest of the - <span class="Ux">FreeBSD</span> networking stack.</dd> - <dt><a class="Xr">iflibdd(9)</a></dt> - <dd>Device-dependent functions, used when writing new - <code class="Nm">iflib</code> based drivers.</dd> - <dt><a class="Xr">iflibtxrx(9)</a></dt> - <dd>Device-dependent transmit and receive functions, used when writing new - <code class="Nm">iflib</code> based drivers.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">iflib(4)</a>, <a class="Xr">iflibdd(9)</a>, - <a class="Xr">iflibdi(9)</a>, <a class="Xr">iflibtxrx(9)</a>, - <a class="Xr">ifnet(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp"><span class="An">Benno Rice</span> - <<a class="Mt" href="mailto:benno@FreeBSD.org">benno@FreeBSD.org</a>></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 20, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/iflibdd.9 4.html b/static/freebsd/man9/iflibdd.9 4.html deleted file mode 100644 index a3986f5d..00000000 --- a/static/freebsd/man9/iflibdd.9 4.html +++ /dev/null @@ -1,367 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">IFLIBDD(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">IFLIBDD(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">iflibdd</code> — <span class="Nd">Device - Dependent Configuration Functions</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">ifdi_if.h</a>></code></p> -<section class="Ss"> -<h2 class="Ss" id="Soft_Queue_Setup_and_Teardown_Functions"><a class="permalink" href="#Soft_Queue_Setup_and_Teardown_Functions">Soft - Queue Setup and Teardown Functions</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss">Mandatory Functions</h2> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ifdi_tx_queues_alloc</code>(<var class="Fa">if_ctx_t - ctx</var>, <var class="Fa">caddr_t *vaddrs</var>, <var class="Fa">uint64_t - *paddrs</var>, <var class="Fa">int ntxqs</var>, <var class="Fa">int - ntxqsets</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ifdi_rx_queues_alloc</code>(<var class="Fa">if_ctx_t - ctx</var>, <var class="Fa">caddr_t *vaddrs</var>, <var class="Fa">uint64_t - *paddrs</var>, <var class="Fa">int nrxqs</var>, <var class="Fa">int - nrxqsets</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ifdi_queues_free</code>(<var class="Fa">if_ctx_t - ctx</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss">Optional Functions</h2> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ifdi_txq_setup</code>(<var class="Fa">if_ctx_t ctx</var>, - <var class="Fa">uint16_t qid</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ifdi_rxq_setup</code>(<var class="Fa">if_ctx_t ctx</var>, - <var class="Fa">uint16_t qid</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Device_Setup_and_Teardown_Functions"><a class="permalink" href="#Device_Setup_and_Teardown_Functions">Device - Setup and Teardown Functions</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss">Mandatory Functions</h2> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ifdi_attach_pre</code>(<var class="Fa">if_ctx_t - ctx</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ifdi_attach_post</code>(<var class="Fa">if_ctx_t - ctx</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ifdi_detach</code>(<var class="Fa">if_ctx_t ctx</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss">Optional Functions</h2> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ifdi_vlan_register</code>(<var class="Fa">if_ctx_t ctx</var>, - <var class="Fa">uint16_t vtag</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ifdi_vlan_unregister</code>(<var class="Fa">if_ctx_t - ctx</var>, <var class="Fa">uint16_t vtag</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ifdi_suspend</code>(<var class="Fa">if_ctx_t ctx</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ifdi_resume</code>(<var class="Fa">if_ctx_t ctx</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss">Device Configuration Functions</h2> -</section> -<section class="Ss"> -<h2 class="Ss">Mandatory Functions</h2> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ifdi_init</code>(<var class="Fa">if_ctx_t ctx</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ifdi_stop</code>(<var class="Fa">if_ctx_t ctx</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ifdi_multi_set</code>(<var class="Fa">if_ctx_t - ctx</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ifdi_mtu_set</code>(<var class="Fa">if_ctx_t ctx</var>, - <var class="Fa">uint32_t mtu</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ifdi_media_status</code>(<var class="Fa">if_ctx_t ctx</var>, - <var class="Fa">struct ifmediareq *ifr</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ifdi_media_change</code>(<var class="Fa">if_ctx_t - ctx</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ifdi_promisc_set</code>(<var class="Fa">if_ctx_t ctx</var>, - <var class="Fa">int flags</var>);</p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">ifdi_get_counter</code>(<var class="Fa">if_ctx_t ctx</var>, - <var class="Fa">ift_counter cnt</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ifdi_update_admin_status</code>(<var class="Fa">if_ctx_t - ctx</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss">Optional Functions</h2> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ifdi_media_set</code>(<var class="Fa">if_ctx_t - ctx</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Interrupt_enable/disable"><a class="permalink" href="#Interrupt_enable/disable">Interrupt - enable/disable</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss">Mandatory Functions</h2> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ifdi_intr_enable</code>(<var class="Fa">if_ctx_t - ctx</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ifdi_queue_intr_enable</code>(<var class="Fa">if_ctx_t - ctx</var>, <var class="Fa">uint16_t qid</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ifdi_intr_disable</code>(<var class="Fa">if_ctx_t - ctx</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="IOV_Support"><a class="permalink" href="#IOV_Support">IOV - Support</a></h2> -<p class="Pp"><var class="Ft">init</var> - <br/> - <code class="Fn">iov_init</code>(<var class="Fa">if_ctx_t ctx</var>, - <var class="Fa">uint16_t num_vfs</var>, <var class="Fa">const nvlist_t - *params</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">iov_uinit</code>(<var class="Fa">if_ctx_t ctx</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ifdi_vflr_handle</code>(<var class="Fa">if_ctx_t - ctx</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ifdi_vf_add</code>(<var class="Fa">if_ctx_t ctx</var>, - <var class="Fa">uint16_t vfnum</var>, <var class="Fa">const nvlist_t - *params</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss">Optional Functions</h2> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ifdi_link_intr_enable</code>(<var class="Fa">if_ctx_t - ctx</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Optional_Service_Routines"><a class="permalink" href="#Optional_Service_Routines">Optional - Service Routines</a></h2> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ifdi_timer</code>(<var class="Fa">if_ctx_t ctx</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ifdi_watchdog_reset</code>(<var class="Fa">if_ctx_t - ctx</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss">Additional Functions</h2> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ifdi_led_func</code>(<var class="Fa">if_ctx_t ctx</var>, - <var class="Fa">int onoff</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ifdi_sysctl_int_delay</code>(<var class="Fa">if_ctx_t - ctx</var>, <var class="Fa">if_int_delay_info_t iidi</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ifdi_i2c_req</code>(<var class="Fa">if_ctx_t ctx</var>, - <var class="Fa">struct ifi2creq *req</var>);</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="FUNCTIONS"><a class="permalink" href="#FUNCTIONS">FUNCTIONS</a></h1> -<p class="Pp">The above named functions are device dependent configuration - functions. These routines are registered with iflib by the driver and are - called from the corresponding iflib function to configure device specific - functions and registers.</p> -<section class="Ss"> -<h2 class="Ss" id="Device_Dependent_Functions"><a class="permalink" href="#Device_Dependent_Functions">Device - Dependent Functions</a></h2> -</section> -<section class="Ss"> -<h2 class="Ss" id="Soft_Queue_Setup_and_Teardown"><a class="permalink" href="#Soft_Queue_Setup_and_Teardown">Soft - Queue Setup and Teardown</a></h2> -<dl class="Bl-ohang Bd-indent"> - <dt id="ifdi_tx_queues_alloc"><a class="permalink" href="#ifdi_tx_queues_alloc"><code class="Fn">ifdi_tx_queues_alloc</code></a>()</dt> - <dd>Mandatory function that is called during iflib_attach to allocate transmit - queues. vaddrs and paddrs are arrays of virtual and physical addresses - respectively of the hardware transmit queues. ntxqs is the number of - queues per qset. ntxqsets is the number of qsets.</dd> - <dt id="ifdi_rx_queues_alloc"><a class="permalink" href="#ifdi_rx_queues_alloc"><code class="Fn">ifdi_rx_queues_alloc</code></a>()</dt> - <dd>Mandatory function that is called during iflib_attach to allocate receive - queues. vaddrs and paddrs are arrays of virtual and physical addresses - respectively of the hardware receive queues. nrxqs is the number of queues - per qset. nrxqsets is the number of qsets.</dd> - <dt id="ifdi_queues_free"><a class="permalink" href="#ifdi_queues_free"><code class="Fn">ifdi_queues_free</code></a>()</dt> - <dd>Mandatory function that frees the allocated queues and associated transmit - buffers.</dd> - <dt id="ifdi_txq_setup"><a class="permalink" href="#ifdi_txq_setup"><code class="Fn">ifdi_txq_setup</code></a>()</dt> - <dd>Optional function for each transmit queue that handles device specific - initialization.</dd> - <dt id="ifdi_rxq_setup"><a class="permalink" href="#ifdi_rxq_setup"><code class="Fn">ifdi_rxq_setup</code></a>()</dt> - <dd>Optional function for each receive queue that handles device specific - initialization.</dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss" id="Device_Setup_and_Teardown"><a class="permalink" href="#Device_Setup_and_Teardown">Device - Setup and Teardown</a></h2> -<dl class="Bl-ohang Bd-indent"> - <dt id="ifdi_attach_pre"><a class="permalink" href="#ifdi_attach_pre"><code class="Fn">ifdi_attach_pre</code></a>()</dt> - <dd>Mandatory function implemented by the driver to perform any attach logic - that procedes interrupt and queue allocation, queue setup, and interrupt - assignment.</dd> - <dt id="ifdi_attach_post"><a class="permalink" href="#ifdi_attach_post"><code class="Fn">ifdi_attach_post</code></a>()</dt> - <dd>Mandatory function implemented by the driver to perform any attach logic - that occurs after ifdi_attach_pre, and iflib's queue setup and MSI/MSIX(X) - or legacy interrupt assignment.</dd> - <dt id="ifdi_detach"><a class="permalink" href="#ifdi_detach"><code class="Fn">ifdi_detach</code></a>()</dt> - <dd>Mandatory function that frees any resources allocated by the driver in - ifdi_attach_pre and ifdi_attach_post.</dd> - <dt id="ifdi_vlan_register"><a class="permalink" href="#ifdi_vlan_register"><code class="Fn">ifdi_vlan_register</code></a>()</dt> - <dd>Optional function called by the VLAN config eventhandler. - <var class="Va">vtag</var> is the new VLAN tag.</dd> - <dt id="ifdi_vlan_unregister"><a class="permalink" href="#ifdi_vlan_unregister"><code class="Fn">ifdi_vlan_unregister</code></a>()</dt> - <dd>Optional function called by the VLAN unconfig eventhandler.</dd> - <dt id="ifdi_suspend"><a class="permalink" href="#ifdi_suspend"><code class="Fn">ifdi_suspend</code></a>()</dt> - <dd>Optional function that suspends the driver.</dd> - <dt id="ifdi_resume"><a class="permalink" href="#ifdi_resume"><code class="Fn">ifdi_resume</code></a>()</dt> - <dd>Optional function that resumes a driver.</dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss">Device Configuration Functions</h2> -<dl class="Bl-ohang Bd-indent"> - <dt id="ifdi_init"><a class="permalink" href="#ifdi_init"><code class="Fn">ifdi_init</code></a>()</dt> - <dd>Mandatory function that will initialize and bring up the hardware. For - example, it will reset the chip and enable the receiver unit. It should - mark the interface running, but not active ( - <code class="Dv">IFF_DRV_RUNNING</code>, <code class="Dv">~IIF_DRV_OACTIVE - ).</code></dd> - <dt id="ifdi_stop"><a class="permalink" href="#ifdi_stop"><code class="Fn">ifdi_stop</code></a>()</dt> - <dd>Mandatory function that should disable all traffic on the interface by - issuing a global reset on the MAC and deallocating the TX and RX - buffers.</dd> - <dt id="ifdi_multi_set"><a class="permalink" href="#ifdi_multi_set"><code class="Fn">ifdi_multi_set</code></a>()</dt> - <dd>Programs the interfaces multicast addresses</dd> - <dt id="ifdi_media_status"><a class="permalink" href="#ifdi_media_status"><code class="Fn">ifdi_media_status</code></a>()</dt> - <dd>Media Ioctl Callback. Function is called whenever the user queries the - status of the interface using <a class="Xr">ifconfig(8)</a>. The driver - sets the appropriate link type and speed in ifmr->ifm_active.</dd> - <dt id="ifdi_mtu_set"><a class="permalink" href="#ifdi_mtu_set"><code class="Fn">ifdi_mtu_set</code></a>()</dt> - <dd>Sets the mtu interface to the value of the second function parameter - mtu.</dd> - <dt id="ifdi_media_change"><a class="permalink" href="#ifdi_media_change"><code class="Fn">ifdi_media_change</code></a>()</dt> - <dd>Function is called when the user changes speed/duplex using the - media/mediaopt option with <a class="Xr">ifconfig(8)</a>.</dd> - <dt id="ifdi_promisc_set"><a class="permalink" href="#ifdi_promisc_set"><code class="Fn">ifdi_promisc_set</code></a>()</dt> - <dd>Enables or disables promisc settings depending upon the flags value. - <var class="Va">flags</var> contains the interface's - <a class="Xr">ifnet(9)</a> flags.</dd> - <dt id="ifdi_get_counter"><a class="permalink" href="#ifdi_get_counter"><code class="Fn">ifdi_get_counter</code></a>()</dt> - <dd>Returns the value for counter cnt depending upon counter type.</dd> - <dt id="ifdi_update_admin_status"><a class="permalink" href="#ifdi_update_admin_status"><code class="Fn">ifdi_update_admin_status</code></a>()</dt> - <dd>Sets the link_up state to TRUE or FALSE depending upon the OS link state. - A real check of the hardware only happens with a link interrupt.</dd> - <dt id="ifdi_media_set"><a class="permalink" href="#ifdi_media_set"><code class="Fn">ifdi_media_set</code></a>()</dt> - <dd>Need to define</dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss" id="Interrupt_Enable/Disable"><a class="permalink" href="#Interrupt_Enable/Disable">Interrupt - Enable/Disable</a></h2> -<dl class="Bl-ohang Bd-indent"> - <dt id="ifdi_intr_enable"><a class="permalink" href="#ifdi_intr_enable"><code class="Fn">ifdi_intr_enable</code></a>()</dt> - <dd>Mandatory function that enables all interrupts.</dd> - <dt id="ifdi_intr_disable"><a class="permalink" href="#ifdi_intr_disable"><code class="Fn">ifdi_intr_disable</code></a>()</dt> - <dd>Mandatory function that disables all interrupts.</dd> - <dt id="ifdi_queue_intr_enable"><a class="permalink" href="#ifdi_queue_intr_enable"><code class="Fn">ifdi_queue_intr_enable</code></a>()</dt> - <dd>Mandatory function that enables interrupts on queue qid.</dd> - <dt id="iov_init"><a class="permalink" href="#iov_init"><code class="Fn">iov_init</code></a>()</dt> - <dd>Initialize num_vfs VFs.</dd> - <dt id="io_uninit"><a class="permalink" href="#io_uninit"><code class="Fn">io_uninit</code></a>()</dt> - <dd>Tear down the context for all VFs.</dd> - <dt id="ifdi_vflr_handle"><a class="permalink" href="#ifdi_vflr_handle"><code class="Fn">ifdi_vflr_handle</code></a>()</dt> - <dd>Handle any VFs that have reset themselves via a Function Level Reset - (FLR).</dd> - <dt id="ifdi_vf_add"><a class="permalink" href="#ifdi_vf_add"><code class="Fn">ifdi_vf_add</code></a>()</dt> - <dd>Set parameters in params in VF vfnum.</dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss" id="Service_Routines"><a class="permalink" href="#Service_Routines">Service - Routines</a></h2> -<dl class="Bl-ohang Bd-indent"> - <dt id="ifdi_timer"><a class="permalink" href="#ifdi_timer"><code class="Fn">ifdi_timer</code></a>()</dt> - <dd>Optional timer routine that will be run every 500ms.</dd> - <dt id="ifdi_watchdog_reset"><a class="permalink" href="#ifdi_watchdog_reset"><code class="Fn">ifdi_watchdog_reset</code></a>()</dt> - <dd>Optional function to run when a transmit queue is hung.</dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss">Additional Functions</h2> -<dl class="Bl-ohang Bd-indent"> - <dt id="ifdi_led_func"><a class="permalink" href="#ifdi_led_func"><code class="Fn">ifdi_led_func</code></a>()</dt> - <dd></dd> - <dt id="ifdi_sysctl_int_delay"><a class="permalink" href="#ifdi_sysctl_int_delay"><code class="Fn">ifdi_sysctl_int_delay</code></a>()</dt> - <dd></dd> - <dt id="ifdi_i2c_req"><a class="permalink" href="#ifdi_i2c_req"><code class="Fn">ifdi_i2c_req</code></a>()</dt> - <dd></dd> -</dl> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ifconfig(8)</a>, <a class="Xr">iflibdi(9)</a>, - <a class="Xr">iflibtxrx(9)</a>, <a class="Xr">ifnet(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Nicole - Graziano</span></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 3, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/iflibdi.9 4.html b/static/freebsd/man9/iflibdi.9 4.html deleted file mode 100644 index 0c074e67..00000000 --- a/static/freebsd/man9/iflibdi.9 4.html +++ /dev/null @@ -1,250 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">IFLIBDI(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">IFLIBDI(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">iflibdi</code> — <span class="Nd">Device - Independent Configuration Functions</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">ifdi_if.h</a>></code></p> -<section class="Ss"> -<h2 class="Ss">Device Independent Functions</h2> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">iflib_device_attach</code>(<var class="Fa">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">iflib_device_detach</code>(<var class="Fa">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">iflib_device_suspend</code>(<var class="Fa">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">iflib_device_resume</code>(<var class="Fa">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">iflib_device_register</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">void *softc</var>, - <var class="Fa">if_shared_ctx_t sctx</var>, <var class="Fa">if_ctx_t - *ctxp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">iflib_device_deregister</code>(<var class="Fa">if_ctx_t - ctx</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">iflib_irq_alloc</code>(<var class="Fa">if_ctx_t ctx</var>, - <var class="Fa">if_irq_t irq_info</var>, <var class="Fa">int rid</var>, - <var class="Fa">driver_filter_t filter</var>, <var class="Fa">void - *filter_arg</var>, <var class="Fa">driver_intr_t handler</var>, - <var class="Fa">void *arg</var>, <var class="Fa">char *name</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">iflib_irq_alloc_generic</code>(<var class="Fa">if_ctx_t - ctx</var>, <var class="Fa">if_irq_t irq</var>, <var class="Fa">int - rid</var>, <var class="Fa">intr_type_t type</var>, - <var class="Fa">driver_filter_t *filter</var>, <var class="Fa">void - *filter_arg</var>, <var class="Fa">int qid</var>, <var class="Fa">char - *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">iflib_led_create</code>(<var class="Fa">if_ctx_t - ctx</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">iflib_tx_intr_deferred</code>(<var class="Fa">if_ctx_t - ctx</var>, <var class="Fa">int txqid</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">iflib_rx_intr_deferred</code>(<var class="Fa">if_ctx_t - ctx</var>, <var class="Fa">int rxqid</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">iflib_link_intr_deferred</code>(<var class="Fa">if_ctx_t - ctx</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">iflib_link_state_change</code>(<var class="Fa">if_ctx_t - ctx</var>, <var class="Fa">int linkstate</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">iflib_add_int_delay_sysctl</code>(<var class="Fa">if_ctx_t - ctx</var>, <var class="Fa">const char *</var>, <var class="Fa">const char - *</var>, <var class="Fa">if_int_delay_info_t</var>, - <var class="Fa">int</var>, <var class="Fa">int</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Global_Variables"><a class="permalink" href="#Global_Variables">Global - Variables</a></h2> -<p class="Pp"><var class="Vt">extern struct if_txrx</var></p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="DATA_STRUCTURES"><a class="permalink" href="#DATA_STRUCTURES">DATA - STRUCTURES</a></h1> -<p class="Pp">The <i>if_ctx_t</i> Structure is the device independent data - structure that contains statistics and identifying information used to - transmit and receive data packets. The interface is associated with an array - of queues assigned sequentially. Each queue has its own transmit - (iflib_txq_t) and receive (iflib_rxq_t) queue. The transmit queue is used to - hold packets while the interface is in the process of sending another. The - receive queue is used to receive packets that are awaiting processing.</p> -<section class="Ss"> -<h2 class="Ss" id="The_if_ctx_t_Structure"><a class="permalink" href="#The_if_ctx_t_Structure">The - if_ctx_t Structure</a></h2> -<p class="Pp">The fields of <var class="Vt">struct if_ctx_t</var> are as - follows:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="if_softc"><var class="Va">if_softc</var></dt> - <dd>(<var class="Vt">void</var>) A pointer to the driver's private state - block.</dd> - <dt id="ifc_dev"><var class="Va">ifc_dev</var></dt> - <dd>(<var class="Vt">device_t</var>) The underlying device structure.</dd> - <dt id="ifc_ip"><var class="Va">ifc_ip</var></dt> - <dd>(<var class="Vt">if_t</var>) A link back to the interface structure</dd> - <dt id="ifc_cpus"><var class="Va">ifc_cpus</var></dt> - <dd>(<var class="Vt">cpuset_t</var>)</dd> - <dt id="ifc_mutex"><var class="Va">ifc_mutex</var></dt> - <dd>(<var class="Vt">struct mtx</var>) Mutex lock used to maintain data - integrity</dd> - <dt id="ifc_mtx_name"><var class="Va">ifc_mtx_name</var></dt> - <dd>(<var class="Vt">char *</var>) The name of the mutex</dd> - <dt id="ifc_txqs"><var class="Va">ifc_txqs</var></dt> - <dd>(<var class="Vt">iflib_txq_t</var>) Device independent transmit queue - maintained internally by iflib</dd> - <dt id="ifc_rxqs"><var class="Va">ifc_rxqs</var></dt> - <dd>(<var class="Vt">iflib_rxq_t</var>) Device independent receive queue - maintained internally by iflib</dd> - <dt id="ifc_qsets"><var class="Va">ifc_qsets</var></dt> - <dd>(<var class="Vt">iflib_qset_t</var>) Output queue that contains a single - transmit (ifc_txq_t) and receive (ifc_rxq_t) queue</dd> - <dt id="ifc_if_flags"><var class="Va">ifc_if_flags</var></dt> - <dd>(<var class="Vt">uint32_t</var>) Flags describing the operational - parameter of the interface</dd> - <dt id="ifc_in_detach"><var class="Va">ifc_in_detach</var></dt> - <dd>(<var class="Vt">int</var>)</dd> - <dt id="ifc_link_state"><var class="Va">ifc_link_state</var></dt> - <dd>(<var class="Vt">int</var>) Describes the current link state of the - Ethernet interface. Its possible values are either active or - inactive.</dd> - <dt id="ifc_link_irq"><var class="Va">ifc_link_irq</var></dt> - <dd>(<var class="Vt">int</var>)</dd> - <dt id="ifc_vlan_attach_event"><var class="Va">ifc_vlan_attach_event</var></dt> - <dd>(<var class="Vt">eventhandler_tag</var>)</dd> - <dt id="ifc_vlan_detach_event"><var class="Va">ifc_vlan_detach_event</var></dt> - <dd>(<var class="Vt">eventhandler_tag</var>)</dd> - <dt id="ifc_pause_frames"><var class="Va">ifc_pause_frames</var></dt> - <dd>(<var class="Vt">int</var>)</dd> - <dt id="ifc_watchdog_events"><var class="Va">ifc_watchdog_events</var></dt> - <dd>(<var class="Vt">int</var>)</dd> - <dt id="ifc_mac"><var class="Va">ifc_mac</var></dt> - <dd>(<var class="Vt">uint8_t</var>)</dd> - <dt id="ifc_msix_mem"><var class="Va">ifc_msix_mem</var></dt> - <dd>(<var class="Vt">struct resource *</var>)</dd> - <dt id="ifc_legacy_irq"><var class="Va">ifc_legacy_irq</var></dt> - <dd>(<var class="Vt">struct if_irq</var>)</dd> - <dt id="ifc_admin_task"><var class="Va">ifc_admin_task</var></dt> - <dd>(<var class="Vt">struct grouptask</var>) Taskqueue task scheduled for link - state change events of the interface</dd> - <dt id="ifc_filter_info"><var class="Va">ifc_filter_info</var></dt> - <dd>(<var class="Vt">struct iflib_filter_info</var>) Statistics and - information relating to the interface device filter</dd> - <dt id="ifc_media"><var class="Va">ifc_media</var></dt> - <dd>(<var class="Vt">struct ifmedia</var>)</dd> - <dt id="ifc_txrx"><var class="Va">ifc_txrx</var></dt> - <dd>(<var class="Vt">struct if_txrx</var>)</dd> -</dl> -</div> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="FUNCTIONS"><a class="permalink" href="#FUNCTIONS">FUNCTIONS</a></h1> -<p class="Pp">The above named functions are found exclusively in iflib. They are - independent of the underlying hardware type or configuration.</p> -<section class="Ss"> -<h2 class="Ss">Device Independent Functions</h2> -<dl class="Bl-ohang Bd-indent"> - <dt id="iflib_device_attach"><a class="permalink" href="#iflib_device_attach"><code class="Fn">iflib_device_attach</code></a>()</dt> - <dd>Function initiates a device registration with the iflib framework. It - calls the iflib_register function, which is responsible for allocating and - initializing the <i>if_ctx_t</i> structure.</dd> - <dt id="iflib_device_detach"><a class="permalink" href="#iflib_device_detach"><code class="Fn">iflib_device_detach</code></a>()</dt> - <dd>Shutdown and detach the device. Unregister vlan events, drain any - dependent tasks, and release irq, pci, and msix memory.</dd> - <dt id="iflib_device_suspend"><a class="permalink" href="#iflib_device_suspend"><code class="Fn">iflib_device_suspend</code></a>()</dt> - <dd>Suspend a device by calling the device dependent suspend function and - bus_generic_suspend.</dd> - <dt id="iflib_device_resume"><a class="permalink" href="#iflib_device_resume"><code class="Fn">iflib_device_resume</code></a>()</dt> - <dd>Resume a device by calling the device dependent resume function, the - iflib_init_locked function, and bus_generic_resume.</dd> - <dt id="iflib_device_register"><a class="permalink" href="#iflib_device_register"><code class="Fn">iflib_device_register</code></a>()</dt> - <dd>Register a device with the iflib framework. Allocate and initialize the - <i>if_ctx_t</i> structure. Setup and initialize the MSI or MSI/X interrupt - queues if necessary. Allocate memory for queues and qset structure - setup.</dd> - <dt id="iflib_irq_alloc"><a class="permalink" href="#iflib_irq_alloc"><code class="Fn">iflib_irq_alloc</code></a>()</dt> - <dd>Allocate an interrupt resource for a given rid value with an associated - filter and handler function.</dd> - <dt id="iflib_irq_alloc_generic"><a class="permalink" href="#iflib_irq_alloc_generic"><code class="Fn">iflib_irq_alloc_generic</code></a>()</dt> - <dd>Performs the same function as iflib_device_irq_alloc along with the - additional functionality of adding a taskgroup. The data fields and - callback function are determined by the type of interrupt, such as - <code class="Dv">IFLIB_INTR_TX</code>, - <code class="Dv">IFLIB_INTR_RX</code>, and - <code class="Dv">IFLIB_INTR_ADMIN</code>.</dd> - <dt id="iflib_led_create"><a class="permalink" href="#iflib_led_create"><code class="Fn">iflib_led_create</code></a>()</dt> - <dd>Calls led_create to initialize the ctx->ifc_led_dev field</dd> - <dt id="iflib_tx_intr_deferred"><a class="permalink" href="#iflib_tx_intr_deferred"><code class="Fn">iflib_tx_intr_deferred</code></a>()</dt> - <dd>Calls GROUPTASK_ENQUEUE to enqueue the transfer queues ift_task.</dd> - <dt id="iflib_rx_intr_deferred"><a class="permalink" href="#iflib_rx_intr_deferred"><code class="Fn">iflib_rx_intr_deferred</code></a>()</dt> - <dd>Calls GROUPTASK_ENQUEUE to enqueue the receive queues ifr_task.</dd> - <dt id="iflib_link_intr_deferred"><a class="permalink" href="#iflib_link_intr_deferred"><code class="Fn">iflib_link_intr_deferred</code></a>()</dt> - <dd>Calls GROUPTASK_ENQUEUE to enqueue the link task</dd> - <dt id="iflib_link_state_change"><a class="permalink" href="#iflib_link_state_change"><code class="Fn">iflib_link_state_change</code></a>()</dt> - <dd>Change the interface link status to either - <code class="Dv">LINK_STATE_UP</code> or - <code class="Dv">LINK_STATE_DOWN</code> as specified by the second - argument to the function. - <p class="Pp" id="Interface"><a class="permalink" href="#Interface"><i class="Em">Interface - Link States</i></a> The following link states are currently defined:</p> - </dd> - <dt id="LINK_STATE_UP"><a class="permalink" href="#LINK_STATE_UP"><code class="Dv">LINK_STATE_UP</code></a></dt> - <dd>The link is up.</dd> - <dt id="LINK_STATE_DOWN"><a class="permalink" href="#LINK_STATE_DOWN"><code class="Dv">LINK_STATE_DOWN</code></a></dt> - <dd>The link is down.</dd> - <dt id="iflib_add_int_delay_sysctl"><a class="permalink" href="#iflib_add_int_delay_sysctl"><code class="Fn">iflib_add_int_delay_sysctl</code></a>()</dt> - <dd>Modifies settings to user defined values for a given set of - variables.</dd> -</dl> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">iflibdd(9)</a>, <a class="Xr">iflibtxrx(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Nicole - Graziano</span></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 21, 2019</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/iflibtxrx.9 3.html b/static/freebsd/man9/iflibtxrx.9 3.html deleted file mode 100644 index f16a0d37..00000000 --- a/static/freebsd/man9/iflibtxrx.9 3.html +++ /dev/null @@ -1,258 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">IFLIBTXTX(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">IFLIBTXTX(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">iflibtxrx</code> — <span class="Nd">Device - Dependent Transmit and Receive Functions</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">ifdi_if.h</a>></code></p> -<section class="Ss"> -<h2 class="Ss" id="Interface_Manipulation_Functions"><a class="permalink" href="#Interface_Manipulation_Functions">Interface - Manipulation Functions</a></h2> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">isc_txd_encap</code>(<var class="Fa">void *sc</var>, - <var class="Fa">if_pkt_info_t pi</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">isc_txd_flush</code>(<var class="Fa">void *sc</var>, - <var class="Fa">uint16_t qid</var>, <var class="Fa">uint32_t - _pidx_or_credits_</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">isc_txd_credits_update</code>(<var class="Fa">void *sc</var>, - <var class="Fa">uint16_t qid</var>, <var class="Fa">bool clear</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">isc_rxd_available</code>(<var class="Fa">void *sc</var>, - <var class="Fa">uint16_t qsid</var>, <var class="Fa">uint32_t - cidx</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">isc_rxd_refill</code>(<var class="Fa">void *sc</var>, - <var class="Fa">uint16_t qsid</var>, <var class="Fa">uint8_t flid</var>, - <var class="Fa">uint32_t pidx</var>, <var class="Fa">uint64_t *paddrs</var>, - <var class="Fa">caddr_t *vaddrs</var>, <var class="Fa">uint16_t - count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">isc_rxd_flush</code>(<var class="Fa">void *sc</var>, - <var class="Fa">uint16_t qsid</var>, <var class="Fa">uint8_t flid</var>, - <var class="Fa">uint32_t pidx</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">isc_rxd_pkt_get</code>(<var class="Fa">void *sc</var>, - <var class="Fa">if_rxd_info_t ri</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Global_Variables"><a class="permalink" href="#Global_Variables">Global - Variables</a></h2> -<p class="Pp"><var class="Vt">extern struct if_txrx</var></p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="DATA_STRUCTURES"><a class="permalink" href="#DATA_STRUCTURES">DATA - STRUCTURES</a></h1> -<p class="Pp">The device dependent mechanisms for handling packet transmit and - receive are primarily defined by the functions named above. The if_pkt_info - data structure contains statistics and identifying info necessary for packet - transmission. While the data structure for packet receipt is the if_rxd_info - structure.</p> -<section class="Ss"> -<h2 class="Ss" id="The_if_pkt_info_Structure"><a class="permalink" href="#The_if_pkt_info_Structure">The - if_pkt_info Structure</a></h2> -<p class="Pp">The fields of <var class="Vt">struct if_pkt_info</var> are as - follows:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="ipi_len"><var class="Va">ipi_len</var></dt> - <dd>(<var class="Vt">uint32_t</var>) Denotes the size of packet to be sent on - the transmit queue.</dd> - <dt id="ipi_segs"><var class="Va">ipi_segs</var></dt> - <dd>(<var class="Vt">bus_dma_segment_t *</var>) A pointer to the - bus_dma_segment of the device independent transfer queue defined in - iflib.</dd> - <dt id="ipi_qsidx"><var class="Va">ipi_qsidx</var></dt> - <dd>Unique index value assigned sequentially to each transmit queue. Used to - reference the currently transmitting queue.</dd> - <dt id="ipi_nsegs"><var class="Va">ipi_nsegs</var></dt> - <dd>(<var class="Vt">uint16_t</var>) Number of descriptors to be read into the - device dependent transfer descriptors.</dd> - <dt id="ipi_ndescs"><var class="Va">ipi_ndescs</var></dt> - <dd>(<var class="Vt">uint16_t</var>) Number of descriptors in use. Calculated - by subtracting the old pidx value from the new pidx value.</dd> - <dt id="ipi_flags"><var class="Va">ipi_flags</var></dt> - <dd>(<var class="Vt">uint16_t</var>) Flags defined on a per packet basis.</dd> - <dt id="ipi_pidx"><var class="Va">ipi_pidx</var></dt> - <dd>(<var class="Vt">uint32_t</var>) Value of first pidx sent to the isc_encap - function for encapsulation and subsequent transmission.</dd> - <dt id="ipi_new_pidx"><var class="Va">ipi_new_pidx</var></dt> - <dd>(<var class="Vt">uint32_t</var>) Value set after the termination of the - isc_encap function. This value will become the first pidx sent to the - isc-encap the next time that the function is called.</dd> - <dt><var class="Va"><b>The</b> <b>Following</b> <b>Fields</b> <b>Are</b> - <b>Used</b> <b>For</b> <b>Offload</b> <b>Handling</b></var></dt> - <dd style="width: auto;"> </dd> - <dt id="ipi_csum_flags"><var class="Va">ipi_csum_flags</var></dt> - <dd>(<var class="Vt">uint64_t</var>) Flags describing the checksum values, - used on a per packet basis.</dd> - <dt id="ipi_tso_segsz"><var class="Va">ipi_tso_segsz</var></dt> - <dd>(<var class="Vt">uint16_t</var>) Size of the TSO Segment Size.</dd> - <dt id="ipi_mflags"><var class="Va">ipi_mflags</var></dt> - <dd>(<var class="Vt">uint16_t</var>) Flags describing the operational - parameters of the mbuf.</dd> - <dt id="ipi_vtag"><var class="Va">ipi_vtag</var></dt> - <dd>(<var class="Vt">uint16_t</var>) Contains the VLAN information in the - Ethernet Frame.</dd> - <dt id="ipi_etype"><var class="Va">ipi_etype</var></dt> - <dd>(<var class="Vt">uint16_t</var>) Type of ethernet header protocol as - contained by the struct ether_vlan_header.</dd> - <dt id="ipi_ehrdlen"><var class="Va">ipi_ehrdlen</var></dt> - <dd>(<var class="Vt">uint8_t</var>) Length of the Ethernet Header.</dd> - <dt id="ipi_ip_hlen"><var class="Va">ipi_ip_hlen</var></dt> - <dd>(<var class="Vt">uint8_t</var>) Length of the TCP Header</dd> - <dt id="ipi_tcp_hlen"><var class="Va">ipi_tcp_hlen</var></dt> - <dd>(<var class="Vt">uint8_t</var>) Length of the TCP Header.</dd> - <dt id="ipi_tcp_hflags"><var class="Va">ipi_tcp_hflags</var></dt> - <dd>(<var class="Vt">uint8_t</var>) Flags describing the operational - parameters of the TCP Header.</dd> - <dt id="ipi_ipproto"><var class="Va">ipi_ipproto</var></dt> - <dd>(<var class="Vt">uint8_t</var>) Specifies the type of IP Protocol in use. - Example TCP, UDP, or SCTP.</dd> -</dl> -</div> -</section> -<section class="Ss"> -<h2 class="Ss" id="The_if_rxd_info_Structure"><a class="permalink" href="#The_if_rxd_info_Structure">The - if_rxd_info Structure</a></h2> -<p class="Pp">The fields of <var class="Vt">struct if_rxd_info</var> are as - follows:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="iri_qsidx"><var class="Va">iri_qsidx</var></dt> - <dd>(<var class="Vt">uint16_t</var>) Unique index value assigned sequentially - to each receive queue. Used to reference the currently receiving - queue.</dd> - <dt id="iri_vtag"><var class="Va">iri_vtag</var></dt> - <dd>(<var class="Vt">uint16_t</var>) Contains the VLAN information in the - Ethernet Frame.</dd> - <dt id="iri_len"><var class="Va">iri_len</var></dt> - <dd>(<var class="Vt">uint16_t</var>) Denotes the size of a received - packet.</dd> - <dt id="iri_next_offset"><var class="Va">iri_next_offset</var></dt> - <dd>(<var class="Vt">uint16_t</var>) Denotes the offset value for the next - packet to be receive. A Null value signifies the end of packet.</dd> - <dt id="iri_cidx"><var class="Va">iri_cidx</var></dt> - <dd>(<var class="Vt">uint32_t</var>) Denotes the index value of the packet - currently being processed in the consumer queue.</dd> - <dt id="iri_flowid"><var class="Va">iri_flowid</var></dt> - <dd>(<var class="Vt">uint32_t</var>) Value of the RSS hash for the - packet.</dd> - <dt id="iri_flags"><var class="Va">iri_flags</var></dt> - <dd>(<var class="Vt">uint</var>) - <br/> - Flags describing the operational parameters of the mbuf contained in the - <br/> - receive packet.</dd> - <dt id="iri_csum_flags"><var class="Va">iri_csum_flags</var></dt> - <dd>(<var class="Vt">uint32_t</var>) Flags describing the checksum value - contained in the receive packet.</dd> - <dt id="iri_csum_data"><var class="Va">iri_csum_data</var></dt> - <dd>(<var class="Vt">uint32_t</var>) Checksum data contained in the - <a class="Xr">mbuf(9)</a> packet header.</dd> - <dt id="iri_m"><var class="Va">iri_m</var></dt> - <dd>(<var class="Vt">struct mbuf *</var>) A mbuf for drivers that manage their - own receive queues.</dd> - <dt id="iri_ifp"><var class="Va">iri_ifp</var></dt> - <dd>(<var class="Vt">struct ifnet *</var>) A link back to the interface - structure. Utilized by drivers that have multiple interface per - softc.</dd> - <dt id="iri_rsstype"><var class="Va">iri_rsstype</var></dt> - <dd>(<var class="Vt">uint8_t</var>) The value of the RSS hash type.</dd> - <dt id="iri_pad"><var class="Va">iri_pad</var></dt> - <dd>(<var class="Vt">uint8_t</var>) The length of any padding contained by the - received data.</dd> - <dt id="iri_qidx"><var class="Va">iri_qidx</var></dt> - <dd>(<var class="Vt">uint8_t</var>) Represents the type of queue event. If - value >= 0 then it is the freelist id otherwise it is a completion - queue event.</dd> -</dl> -</div> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="FUNCTIONS"><a class="permalink" href="#FUNCTIONS">FUNCTIONS</a></h1> -<p class="Pp">All function calls are associated exclusively with either packet - transmission or receipt. The void *sc passed as the first argument to all of - the following functions represents the driver's softc.</p> -<section class="Ss"> -<h2 class="Ss" id="Transmit_Packet_Functions"><a class="permalink" href="#Transmit_Packet_Functions">Transmit - Packet Functions</a></h2> -<dl class="Bl-ohang Bd-indent"> - <dt id="isc_txd_encap"><a class="permalink" href="#isc_txd_encap"><code class="Fn">isc_txd_encap</code></a>()</dt> - <dd>Transmit function that sends a packet on an interface. The if_pkt_info - data structure contains data information fields describing the packet. - This function returns 0 if successful, otherwise an error value is - returned.</dd> - <dt id="isc_txd_flush"><a class="permalink" href="#isc_txd_flush"><code class="Fn">isc_txd_flush</code></a>()</dt> - <dd>Flush function is called immediately after the isc_txd_encap function - transmits a packet. It updates the hardware producer index or increments - the descriptors used to pidx_or_credits in the queue designated by the qid - number. This is often referred to as poking the doorbell register.</dd> - <dt id="isc_txd_credits_update"><a class="permalink" href="#isc_txd_credits_update"><code class="Fn">isc_txd_credits_update</code></a>()</dt> - <dd>Credit function advances the buffer ring and calculates the credits - (descriptors) processed. Until the I/O is complete it cleans the range in - case of multisegments and updates the count of processed packets. The - function returns the number of processed credits.</dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss" id="Receive_Packet_Functions"><a class="permalink" href="#Receive_Packet_Functions">Receive - Packet Functions</a></h2> -<dl class="Bl-ohang Bd-indent"> - <dt id="isc_rxd_available"><a class="permalink" href="#isc_rxd_available"><code class="Fn">isc_rxd_available</code></a>()</dt> - <dd>Function calculates the remaining number of descriptors from a position - given by idx. The function returns this value.</dd> - <dt id="isc_rxd_refill"><a class="permalink" href="#isc_rxd_refill"><code class="Fn">isc_rxd_refill</code></a>()</dt> - <dd>Starting with the physical address paddrs, the function reads a packet - into the rx_ring until a value designated by count is reached. vaddrs is - typically not needed and is provided for devices that place their own - metadata in the packet header.</dd> - <dt id="isc_rxd_flush"><a class="permalink" href="#isc_rxd_flush"><code class="Fn">isc_rxd_flush</code></a>()</dt> - <dd>Flush function updates the producer pointer on the free list flid in queue - set number qid to pidx to reflect the presence of new buffers.</dd> - <dt id="isc_rxd_pkt_get"><a class="permalink" href="#isc_rxd_pkt_get"><code class="Fn">isc_rxd_pkt_get</code></a>()</dt> - <dd>Process a single software descriptor. rxr->rx_base[i] contains a - descriptor that describes a received packet. Hardware specific information - about the buffer referred to by ri is returned in the data structure - if_rxd_info</dd> -</dl> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">iflibdd(9)</a>, <a class="Xr">iflibdi(9)</a>, - <a class="Xr">mbuf(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Nicole - Graziano</span></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 17, 2020</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ifnet.9 3.html b/static/freebsd/man9/ifnet.9 3.html deleted file mode 100644 index dbf27192..00000000 --- a/static/freebsd/man9/ifnet.9 3.html +++ /dev/null @@ -1,1731 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">IFNET(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">IFNET(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">if_t</code>, <code class="Nm">ifnet</code>, - <code class="Nm">ifaddr</code>, <code class="Nm">ifqueue</code>, - <code class="Nm">if_data</code> — <span class="Nd">kernel interfaces - for manipulating network interfaces</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/time.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/socket.h</a>></code> - <br/> - <code class="In">#include <<a class="In">net/if.h</a>></code> - <br/> - <code class="In">#include <<a class="In">net/if_var.h</a>></code> - <br/> - <code class="In">#include <<a class="In">net/if_types.h</a>></code></p> -<section class="Ss"> -<h2 class="Ss">Interface Manipulation Functions</h2> -<p class="Pp"><var class="Ft">if_t</var> - <br/> - <code class="Fn">if_alloc</code>(<var class="Fa" style="white-space: nowrap;">u_char - type</var>);</p> -<p class="Pp"><var class="Ft">if_t</var> - <br/> - <code class="Fn">if_alloc_dev</code>(<var class="Fa" style="white-space: nowrap;">u_char - type</var>, <var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">if_t</var> - <br/> - <code class="Fn">if_alloc_domain</code>(<var class="Fa" style="white-space: nowrap;">u_char - type</var>, <var class="Fa" style="white-space: nowrap;">int - numa_domain</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">if_attach</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">if_detach</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">if_free</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">if_free_type</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">u_char - type</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">if_down</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ifioctl</code>(<var class="Fa" style="white-space: nowrap;">struct - socket *so</var>, <var class="Fa" style="white-space: nowrap;">u_long - cmd</var>, <var class="Fa" style="white-space: nowrap;">caddr_t data</var>, - <var class="Fa" style="white-space: nowrap;">struct thread *td</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ifpromisc</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">int - pswitch</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_allmulti</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">int - amswitch</var>);</p> -<p class="Pp"><var class="Ft">if_t</var> - <br/> - <code class="Fn">ifunit</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>);</p> -<p class="Pp"><var class="Ft">if_t</var> - <br/> - <code class="Fn">ifunit_ref</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">if_up</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss">Interface Address Functions</h2> -<p class="Pp"><var class="Ft">struct ifaddr *</var> - <br/> - <code class="Fn">ifa_ifwithaddr</code>(<var class="Fa" style="white-space: nowrap;">struct - sockaddr *addr</var>);</p> -<p class="Pp"><var class="Ft">struct ifaddr *</var> - <br/> - <code class="Fn">ifa_ifwithdstaddr</code>(<var class="Fa" style="white-space: nowrap;">struct - sockaddr *addr</var>, <var class="Fa" style="white-space: nowrap;">int - fib</var>);</p> -<p class="Pp"><var class="Ft">struct ifaddr *</var> - <br/> - <code class="Fn">ifa_ifwithnet</code>(<var class="Fa" style="white-space: nowrap;">struct - sockaddr *addr</var>, <var class="Fa" style="white-space: nowrap;">int - ignore_ptp</var>, <var class="Fa" style="white-space: nowrap;">int - fib</var>);</p> -<p class="Pp"><var class="Ft">struct ifaddr *</var> - <br/> - <code class="Fn">ifaof_ifpforaddr</code>(<var class="Fa" style="white-space: nowrap;">struct - sockaddr *addr</var>, <var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ifa_ref</code>(<var class="Fa" style="white-space: nowrap;">struct - ifaddr *ifa</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">ifa_free</code>(<var class="Fa" style="white-space: nowrap;">struct - ifaddr *ifa</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss">Interface Multicast Address Functions</h2> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_addmulti</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">struct sockaddr - *sa</var>, <var class="Fa" style="white-space: nowrap;">struct ifmultiaddr - **ifmap</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_delmulti</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">struct sockaddr - *sa</var>);</p> -<p class="Pp"><var class="Ft">struct ifmultiaddr *</var> - <br/> - <code class="Fn">if_findmulti</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">struct sockaddr - *sa</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Output_queue_accessors"><a class="permalink" href="#Output_queue_accessors">Output - queue accessors</a></h2> -<p class="Pp"><code class="Fn">if_dequeue</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Output_queue_macros"><a class="permalink" href="#Output_queue_macros">Output - queue macros</a></h2> -<p class="Pp"><code class="Fn">IF_DEQUEUE</code>(<var class="Fa" style="white-space: nowrap;">struct - ifqueue *ifq</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="if_t_accesors"><a class="permalink" href="#if_t_accesors">if_t - accesors</a></h2> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">if_setbaudrate</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">uint64_t - baudrate</var>);</p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">if_getbaudrate</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_setcapabilities</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">int - capabilities</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_setcapabilitiesbit</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">int setbit</var>, - <var class="Fa" style="white-space: nowrap;">int clearbit</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_getcapabilities</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_togglecapenable</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">int - togglecap</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_setcapenable</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">int - capenable</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_setcapenablebit</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">int setcap</var>, - <var class="Fa" style="white-space: nowrap;">int clearcap</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_getcapenable</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_setcapabilities2</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">int - capabilities</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_setcapabilities2bit</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">int setbit</var>, - <var class="Fa" style="white-space: nowrap;">int clearbit</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_getcapabilities2</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_togglecapenable2</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">int - togglecap</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_setcapenable2</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">int - capenable</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_setcapenable2bit</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">int setcap</var>, - <var class="Fa" style="white-space: nowrap;">int clearcap</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_getcapenable2</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_getdunit</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_getindex</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_getidxgen</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>);</p> -<p class="Pp"><var class="Ft">const char *</var> - <br/> - <code class="Fn">if_getdname</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">if_setdname</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">const char *</var> - <br/> - <code class="Fn">if_name</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_setname</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">if_setdescr</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">char - *descrbuf</var>);</p> -<p class="Pp"><var class="Ft">char *</var> - <br/> - <code class="Fn">if_allocdescr</code>(<var class="Fa" style="white-space: nowrap;">size_t - sz</var>, <var class="Fa" style="white-space: nowrap;">int - malloc_flag</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">if_freedescr</code>(<var class="Fa" style="white-space: nowrap;">char - *descrbuf</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_getalloctype</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_gettype</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_setdev</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">void - *dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_setdrvflagbits</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">int - if_setflags</var>, <var class="Fa" style="white-space: nowrap;">int - clear_flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_getdrvflags</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_setdrvflags</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_getlinkstate</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_clearhwassist</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_sethwassistbits</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">int toset</var>, - <var class="Fa" style="white-space: nowrap;">int toclear</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_sethwassist</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">int - hwassist_bit</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_gethwassist</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_togglehwassist</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">int - toggle_bits</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_setsoftc</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">void - *softc</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">if_getsoftc</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">if_setllsoftc</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">void - *softc</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">if_getllsoftc</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">u_int</var> - <br/> - <code class="Fn">if_getfib</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">uint8_t</var> - <br/> - <code class="Fn">if_getaddrlen</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_gethwaddr</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>, <var class="Fa" style="white-space: nowrap;">struct ifreq - *</var>);</p> -<p class="Pp"><var class="Ft">const uint8_t *</var> - <br/> - <code class="Fn">if_getbroadcastaddr</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">if_setbroadcastaddr</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">const uint8_t - *</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_setmtu</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">int mtu</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_getmtu</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_getmtu_family</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>, <var class="Fa" style="white-space: nowrap;">int - family</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">if_notifymtu</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_setflagbits</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">int set</var>, - <var class="Fa" style="white-space: nowrap;">int clear</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_setflags</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_getflags</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_getnumadomain</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_sendq_empty</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_setsendqready</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_setsendqlen</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">int - tx_desc_count</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_sethwtsomax</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">u_int - if_hw_tsomax</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_sethwtsomaxsegcount</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">u_int - if_hw_tsomaxsegcount</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_sethwtsomaxsegsize</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">u_int - if_hw_tsomaxsegsize</var>);</p> -<p class="Pp"><var class="Ft">u_int</var> - <br/> - <code class="Fn">if_gethwtsomax</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>);</p> -<p class="Pp"><var class="Ft">u_int</var> - <br/> - <code class="Fn">if_gethwtsomaxsegcount</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>);</p> -<p class="Pp"><var class="Ft">u_int</var> - <br/> - <code class="Fn">if_gethwtsomaxsegsize</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">if_setnetmapadapter</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">struct - netmap_adapter *na</var>);</p> -<p class="Pp"><var class="Ft">struct netmap_adapter *</var> - <br/> - <code class="Fn">if_getnetmapadapter</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">if_input</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf* - sendmp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_sendq_prepend</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">if_dequeue</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_setifheaderlen</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">int len</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">if_setrcvif</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">if_setvtag</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">u_int16_t - tag</var>);</p> -<p class="Pp"><var class="Ft">u_int16_t</var> - <br/> - <code class="Fn">if_getvtag</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *m</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_vlantrunkinuse</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">caddr_t</var> - <br/> - <code class="Fn">if_getlladdr</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>);</p> -<p class="Pp"><var class="Ft">struct vnet *</var> - <br/> - <code class="Fn">if_getvnet</code>(<var class="Fa" style="white-space: nowrap;">const - if_t ifp</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">if_gethandle</code>(<var class="Fa" style="white-space: nowrap;">u_char</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">if_bpfmtap</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">if_etherbpfmtap</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">if_vlancap</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_transmit</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">if_init</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">void - *ctx</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">if_resolvemulti</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">struct sockaddr - **</var>, <var class="Fa" style="white-space: nowrap;">struct sockaddr - *</var>);</p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">if_getcounter</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">ift_counter - counter</var>);</p> -<p class="Pp"><var class="Ft">struct label *</var> - <br/> - <code class="Fn">if_getmaclabel</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">if_setmaclabel</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">struct label - *label</var>);</p> -<p class="Pp"><var class="Ft">struct bpf_if *</var> - <br/> - <code class="Fn">if_getbpf</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">uint8_t</var> - <br/> - <code class="Fn">if_getpcp</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">if_getl2com</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">struct ifvlantrunk *</var> - <br/> - <code class="Fn">if_getvlantrunk</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">if_altq_is_enabled</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="struct_ifnet_Member_Functions"><a class="permalink" href="#struct_ifnet_Member_Functions">struct - ifnet Member Functions</a></h2> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">(*if_input)</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">(*if_output)</code>(<var class="Fa">if_t ifp</var>, - <var class="Fa">struct mbuf *m</var>, <var class="Fa">const struct sockaddr - *dst</var>, <var class="Fa">struct route *ro</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">(*if_start)</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">(*if_transmit)</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">(*if_qflush)</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">(*if_ioctl)</code>(<var class="Fa" style="white-space: nowrap;">if_t - ifp</var>, <var class="Fa" style="white-space: nowrap;">u_long cmd</var>, - <var class="Fa" style="white-space: nowrap;">caddr_t data</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">(*if_init)</code>(<var class="Fa" style="white-space: nowrap;">void - *if_softc</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">(*if_resolvemulti)</code>(<var class="Fa">if_t ifp</var>, - <var class="Fa">struct sockaddr **retsa</var>, <var class="Fa">struct - sockaddr *addr</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="struct_ifaddr_member_function"><a class="permalink" href="#struct_ifaddr_member_function">struct - ifaddr member function</a></h2> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">(*ifa_rtrequest)</code>(<var class="Fa">int cmd</var>, - <var class="Fa">struct rtentry *rt</var>, <var class="Fa">struct rt_addrinfo - *info</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Global_Variables"><a class="permalink" href="#Global_Variables">Global - Variables</a></h2> -<p class="Pp"><var class="Vt">extern struct ifnethead ifnet</var>; - <br/> - <var class="Vt">extern int if_index</var>; - <br/> - <var class="Vt">extern int ifqmaxlen</var>;</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="DATA_STRUCTURES"><a class="permalink" href="#DATA_STRUCTURES">DATA - STRUCTURES</a></h1> -<p class="Pp">The kernel mechanisms for handling network interfaces reside - primarily in the <var class="Vt">ifnet</var>, <var class="Vt">if_data</var>, - <var class="Vt">ifaddr</var>, and <var class="Vt">ifmultiaddr</var> - structures in <code class="In"><<a class="In">net/if.h</a>></code> and - <code class="In"><<a class="In">net/if_var.h</a>></code> and the - functions named above and defined in <span class="Pa">/sys/net/if.c</span>. - Those interfaces which are intended to be used by user programs are defined - in <code class="In"><<a class="In">net/if.h</a>></code>; these include - the interface flags, the <var class="Vt">if_data</var> structure, and the - structures defining the appearance of interface-related messages on the - <a class="Xr">route(4)</a> routing socket and in - <a class="Xr">sysctl(3)</a>. The header file - <code class="In"><<a class="In">net/if_var.h</a>></code> defines the - kernel-internal interfaces, including the <var class="Vt">ifnet</var>, - <var class="Vt">ifaddr</var>, and <var class="Vt">ifmultiaddr</var> - structures and the functions which manipulate them. (A few user programs - will need <code class="In"><<a class="In">net/if_var.h</a>></code> - because it is the prerequisite of some other header file like - <code class="In"><<a class="In">netinet/if_ether.h</a>></code>. Most - references to those two files in particular can be replaced by - <code class="In"><<a class="In">net/ethernet.h</a>></code>.)</p> -<p class="Pp">The system keeps a linked list of interfaces using the - <code class="Li">TAILQ</code> macros defined in <a class="Xr">queue(3)</a>; - this list is headed by a <var class="Vt">struct ifnethead</var> called - <var class="Va">ifnet</var>. The elements of this list are of type - <var class="Vt">struct ifnet</var>, and most kernel routines which - manipulate interface as such accept or return pointers to these structures. - Each interface structure contains an <var class="Vt">if_data</var> structure - used for statistics and information. Each interface also has a - <code class="Li">TAILQ</code> of interface addresses, described by - <var class="Vt">ifaddr</var> structures. An <code class="Dv">AF_LINK</code> - address (see <a class="Xr">link_addr(3)</a>) describing the link layer - implemented by the interface (if any) is accessed by the - <var class="Va">if_addr</var> structure. (Some trivial interfaces do not - provide any link layer addresses; this structure, while still present, - serves only to identify the interface name and index.)</p> -<p class="Pp">Finally, those interfaces supporting reception of multicast - datagrams have a <code class="Li">TAILQ</code> of multicast group - memberships, described by <var class="Vt">ifmultiaddr</var> structures. - These memberships are reference-counted.</p> -<p class="Pp">Interfaces are also associated with an output queue, defined as a - <var class="Vt">struct ifqueue</var>; this structure is used to hold packets - while the interface is in the process of sending another.</p> -<section class="Ss"> -<h2 class="Ss" id="The_ifnet_accessors"><a class="permalink" href="#The_ifnet_accessors">The - ifnet accessors</a></h2> -<p class="Pp">The accessors for <var class="Vt">if_t</var> are as follows:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="if_getbaudrate"><a class="permalink" href="#if_getbaudrate"><code class="Fn">if_getbaudrate</code></a>() - <a class="permalink" href="#if_setbaudrate"><code class="Fn" id="if_setbaudrate">if_setbaudrate</code></a>()</dt> - <dd>(<var class="Vt">u_long</var>) The line rate of the interface, in bits per - second.</dd> - <dt id="if_setcapabilities"><a class="permalink" href="#if_setcapabilities"><code class="Fn">if_setcapabilities</code></a>() - <a class="permalink" href="#if_setcapabilitiesbit"><code class="Fn" id="if_setcapabilitiesbit">if_setcapabilitiesbit</code></a>() - <a class="permalink" href="#if_getcapabilities"><code class="Fn" id="if_getcapabilities">if_getcapabilities</code></a>()</dt> - <dd>(<var class="Vt">int</var>) Flags describing the capabilities the - interface supports (see below).</dd> - <dt id="if_getcapenable"><a class="permalink" href="#if_getcapenable"><code class="Fn">if_getcapenable</code></a>() - <a class="permalink" href="#if_setcapenable"><code class="Fn" id="if_setcapenable">if_setcapenable</code></a>() - <a class="permalink" href="#if_setcapenablebit"><code class="Fn" id="if_setcapenablebit">if_setcapenablebit</code></a>() - <a class="permalink" href="#if_togglecapenable"><code class="Fn" id="if_togglecapenable">if_togglecapenable</code></a>()</dt> - <dd>(<var class="Vt">int</var>) Flags describing the enabled capabilities of - the interface (see below).</dd> - <dt id="if_getcapabilities2"><a class="permalink" href="#if_getcapabilities2"><code class="Fn">if_getcapabilities2</code></a>() - <a class="permalink" href="#if_setcapabilities2"><code class="Fn" id="if_setcapabilities2">if_setcapabilities2</code></a>() - <a class="permalink" href="#if_setcapabilities2bit"><code class="Fn" id="if_setcapabilities2bit">if_setcapabilities2bit</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_getcapenable2"><a class="permalink" href="#if_getcapenable2"><code class="Fn">if_getcapenable2</code></a>() - <a class="permalink" href="#if_setcapenable2"><code class="Fn" id="if_setcapenable2">if_setcapenable2</code></a>() - <a class="permalink" href="#if_setcapenable2bit"><code class="Fn" id="if_setcapenable2bit">if_setcapenable2bit</code></a>() - <a class="permalink" href="#if_togglecapenable2"><code class="Fn" id="if_togglecapenable2">if_togglecapenable2</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_getdunit"><a class="permalink" href="#if_getdunit"><code class="Fn">if_getdunit</code></a>()</dt> - <dd>(<var class="Vt">int</var>) A unique number assigned to each interface - managed by a particular driver. Drivers may choose to set this to - <code class="Dv">IF_DUNIT_NONE</code> if a unit number is not associated - with the device. (Initialized by driver, usually via - <a class="permalink" href="#if_initname"><code class="Fn" id="if_initname">if_initname</code></a>().)</dd> - <dt id="if_getindex"><a class="permalink" href="#if_getindex"><code class="Fn">if_getindex</code></a>()</dt> - <dd>(<var class="Vt">u_short</var>) Return the unique number assigned to the - device when attached. This number can be used in a <var class="Vt">struct - sockaddr_dl</var> to refer to a particular interface by index (see - <a class="Xr">link_addr(3)</a>). This is initialized by - <code class="Fn">if_alloc</code>().</dd> - <dt id="if_getidxgen"><a class="permalink" href="#if_getidxgen"><code class="Fn">if_getidxgen</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_getdname"><a class="permalink" href="#if_getdname"><code class="Fn">if_getdname</code></a>() - <a class="permalink" href="#if_setdname"><code class="Fn" id="if_setdname">if_setdname</code></a>()</dt> - <dd>(<var class="Ft">const char *</var>) The name of the driver. This is - initialized by driver (usually via - <code class="Fn">if_initname</code>()).</dd> - <dt id="if_name"><a class="permalink" href="#if_name"><code class="Fn">if_name</code></a>() - <a class="permalink" href="#if_setname"><code class="Fn" id="if_setname">if_setname</code></a>()</dt> - <dd>(<var class="Vt">char *</var>) The name of the interface, (e.g., - ‘<code class="Li">fxp0</code>’ or - “<code class="Li">lo0</code>”). This is initialized by - driver, usually via <code class="Fn">if_initname</code>().</dd> - <dt id="if_getalloctype"><a class="permalink" href="#if_getalloctype"><code class="Fn">if_getalloctype</code></a>()</dt> - <dd>(<var class="Ft">u_char</var>) The type of the interface as it was at the - time of its allocation. It is used to cache the type passed to - <code class="Fn">if_alloc</code>(), but unlike - <var class="Va">if_type</var>, it would not be changed by drivers.</dd> - <dt id="if_gettype"><a class="permalink" href="#if_gettype"><code class="Fn">if_gettype</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_setdev"><a class="permalink" href="#if_setdev"><code class="Fn">if_setdev</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_getdrvflags"><a class="permalink" href="#if_getdrvflags"><code class="Fn">if_getdrvflags</code></a>() - <a class="permalink" href="#if_setdrvflags"><code class="Fn" id="if_setdrvflags">if_setdrvflags</code></a>() - <a class="permalink" href="#if_setdrvflagbits"><code class="Fn" id="if_setdrvflagbits">if_setdrvflagbits</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_getlinkstate"><a class="permalink" href="#if_getlinkstate"><code class="Fn">if_getlinkstate</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_clearhwassist"><a class="permalink" href="#if_clearhwassist"><code class="Fn">if_clearhwassist</code></a>() - <a class="permalink" href="#if_sethwassistbits"><code class="Fn" id="if_sethwassistbits">if_sethwassistbits</code></a>()</dt> - <dd><a class="permalink" href="#if_gethwassist"><code class="Fn" id="if_gethwassist">if_gethwassist</code></a>() - <a class="permalink" href="#if_sethwassist"><code class="Fn" id="if_sethwassist">if_sethwassist</code></a>() - <a class="permalink" href="#if_togglehwassist"><code class="Fn" id="if_togglehwassist">if_togglehwassist</code></a>() - (<var class="Vt">u_long</var>) A detailed interpretation of the - capabilities to offload computational tasks for <i class="Em">outgoing</i> - packets. The interface driver must keep this field in accord with the - current value of <var class="Va">if_capenable</var>.</dd> - <dt id="if_getsoftc"><a class="permalink" href="#if_getsoftc"><code class="Fn">if_getsoftc</code></a>() - <a class="permalink" href="#if_setsoftc"><code class="Fn" id="if_setsoftc">if_setsoftc</code></a>()</dt> - <dd>(<var class="Ft">void *</var>) A pointer to the driver's private state - block. This is initialized by driver at attach.</dd> - <dt id="if_setllsoftc"><a class="permalink" href="#if_setllsoftc"><code class="Fn">if_setllsoftc</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_getllsoftc"><a class="permalink" href="#if_getllsoftc"><code class="Fn">if_getllsoftc</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_getfib"><a class="permalink" href="#if_getfib"><code class="Fn">if_getfib</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_getaddrlen"><a class="permalink" href="#if_getaddrlen"><code class="Fn">if_getaddrlen</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_gethwaddr"><a class="permalink" href="#if_gethwaddr"><code class="Fn">if_gethwaddr</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_getbroadcastaddr"><a class="permalink" href="#if_getbroadcastaddr"><code class="Fn">if_getbroadcastaddr</code></a>() - <a class="permalink" href="#if_setbroadcastaddr"><code class="Fn" id="if_setbroadcastaddr">if_setbroadcastaddr</code></a>()</dt> - <dd>Access the interface broadcast address.</dd> - <dt id="if_setmtu"><a class="permalink" href="#if_setmtu"><code class="Fn">if_setmtu</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_getmtu"><a class="permalink" href="#if_getmtu"><code class="Fn">if_getmtu</code></a>()</dt> - <dd>Access the interface MTU.</dd> - <dt id="if_setflags"><a class="permalink" href="#if_setflags"><code class="Fn">if_setflags</code></a>() - <a class="permalink" href="#if_getflags"><code class="Fn" id="if_getflags">if_getflags</code></a>() - <a class="permalink" href="#if_setflagbits"><code class="Fn" id="if_setflagbits">if_setflagbits</code></a>()</dt> - <dd>(<var class="Vt">int</var>) Flags describing operational parameters of - this interface (see below). These flags are manipulated by generic - code.</dd> - <dt id="if_getnumadomain"><a class="permalink" href="#if_getnumadomain"><code class="Fn">if_getnumadomain</code></a>()</dt> - <dd>(<var class="Vt">uint8_t</var>) The NUMA domain of the hardware device - associated with the interface. This is filled in with a wildcard value - unless the kernel is NUMA aware, the system is a NUMA system, and the - ifnet is allocated using <code class="Fn">if_alloc_dev</code>() or - <code class="Fn">if_alloc_domain</code>().</dd> - <dt id="if_sendq_empty"><a class="permalink" href="#if_sendq_empty"><code class="Fn">if_sendq_empty</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_setsendqready"><a class="permalink" href="#if_setsendqready"><code class="Fn">if_setsendqready</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_setsendqlen"><a class="permalink" href="#if_setsendqlen"><code class="Fn">if_setsendqlen</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_sethwtsomax"><a class="permalink" href="#if_sethwtsomax"><code class="Fn">if_sethwtsomax</code></a>() - <a class="permalink" href="#if_gethwtsomax"><code class="Fn" id="if_gethwtsomax">if_gethwtsomax</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_sethwtsomaxsegcount"><a class="permalink" href="#if_sethwtsomaxsegcount"><code class="Fn">if_sethwtsomaxsegcount</code></a>() - <a class="permalink" href="#if_gethwtsomaxsegcount"><code class="Fn" id="if_gethwtsomaxsegcount">if_gethwtsomaxsegcount</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_sethwtsomaxsegsize"><a class="permalink" href="#if_sethwtsomaxsegsize"><code class="Fn">if_sethwtsomaxsegsize</code></a>() - <a class="permalink" href="#if_gethwtsomaxsegsize"><code class="Fn" id="if_gethwtsomaxsegsize">if_gethwtsomaxsegsize</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_setnetmapadapter"><a class="permalink" href="#if_setnetmapadapter"><code class="Fn">if_setnetmapadapter</code></a>() - <a class="permalink" href="#if_getnetmapadapter"><code class="Fn" id="if_getnetmapadapter">if_getnetmapadapter</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_setifheaderlen"><a class="permalink" href="#if_setifheaderlen"><code class="Fn">if_setifheaderlen</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_setrcvif"><a class="permalink" href="#if_setrcvif"><code class="Fn">if_setrcvif</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_setvtag"><a class="permalink" href="#if_setvtag"><code class="Fn">if_setvtag</code></a>() - <a class="permalink" href="#if_getvtag"><code class="Fn" id="if_getvtag">if_getvtag</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_vlantrunkinuse"><a class="permalink" href="#if_vlantrunkinuse"><code class="Fn">if_vlantrunkinuse</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_getlladdr"><a class="permalink" href="#if_getlladdr"><code class="Fn">if_getlladdr</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_getvnet"><a class="permalink" href="#if_getvnet"><code class="Fn">if_getvnet</code></a>()</dt> - <dd>(<var class="Vt">struct vnet *</var>) A pointer to the virtual network - stack instance. This is initialized by - <code class="Fn">if_attach</code>().</dd> - <dt id="if_gethandle"><a class="permalink" href="#if_gethandle"><code class="Fn">if_gethandle</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_vlancap"><a class="permalink" href="#if_vlancap"><code class="Fn">if_vlancap</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_getcounter"><a class="permalink" href="#if_getcounter"><code class="Fn">if_getcounter</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_getmaclabel"><a class="permalink" href="#if_getmaclabel"><code class="Fn">if_getmaclabel</code></a>() - <a class="permalink" href="#if_setmaclabel"><code class="Fn" id="if_setmaclabel">if_setmaclabel</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_getbpf"><a class="permalink" href="#if_getbpf"><code class="Fn">if_getbpf</code></a>()</dt> - <dd>(<var class="Ft">struct bpf_if *</var>) Opaque per-interface data for the - packet filter, <a class="Xr">bpf(4)</a>. This is initialized by - <a class="permalink" href="#bpf_attach"><code class="Fn" id="bpf_attach">bpf_attach</code></a>().</dd> - <dt id="if_getpcp"><a class="permalink" href="#if_getpcp"><code class="Fn">if_getpcp</code></a>()</dt> - <dd style="width: auto;"> </dd> - <dt id="if_getl2com"><a class="permalink" href="#if_getl2com"><code class="Fn">if_getl2com</code></a>()</dt> - <dd>A pointer to the common data for the interface's layer 2 protocol. This is - initialized by <code class="Fn">if_alloc</code>(). - <a class="permalink" href="#if_getvlantrunk"><code class="Fn" id="if_getvlantrunk">if_getvlantrunk</code></a>(<var class="Fa">if_t - ifp</var>) (<var class="Ft">struct ifvlantrunk *</var>) A pointer to - 802.1Q trunk structure, <a class="Xr">vlan(4)</a>. This is initialized by - the driver-specific <code class="Fn">if_ioctl</code>() routine.</dd> - <dt><code class="Fn">if_getdrvflags</code>() - <code class="Fn">if_setdrvflags</code>() - <code class="Fn">if_setdrvflagbits</code>()</dt> - <dd>(<var class="Ft">int</var>) Flags describing operational status of this - interface (see below). These flags are manipulated by driver.</dd> - <dt><code class="Fn">if_addmulti</code>() - <code class="Fn">if_delmulti</code>() - <code class="Fn">if_findmulti</code>()</dt> - <dd>Add, remove, and find multicast addresses assigned to this interface.</dd> - <dt id="if_getifaddr"><a class="permalink" href="#if_getifaddr"><code class="Fn">if_getifaddr</code></a>()</dt> - <dd>(<var class="Vt">struct ifaddr *</var>) Get a pointer to the interface's - link-level address.</dd> - <dt><code class="Fn">if_getbroadcastaddr</code>() - <code class="Fn">if_setbroadcastaddr</code>()</dt> - <dd>(<var class="Ft">const u_int8_t *</var>) A link-level broadcast bytestring - for protocols with variable address length.</dd> - <dt id="if_getafdata"><a class="permalink" href="#if_getafdata"><code class="Fn">if_getafdata</code></a>()</dt> - <dd>(<var class="Ft">void *</var>) An address family dependent data - region.</dd> - <dt id="if_addgroup"><a class="permalink" href="#if_addgroup"><code class="Fn">if_addgroup</code></a>() - <a class="permalink" href="#if_delgroup"><code class="Fn" id="if_delgroup">if_delgroup</code></a>()</dt> - <dd>Add and delete groups from the interface.</dd> -</dl> -</div> -<p class="Pp" id="if_ref">References to <var class="Vt">ifnet</var> structures - are gained by calling the - <a class="permalink" href="#if_ref"><code class="Fn">if_ref</code></a>() - function and released by calling the - <a class="permalink" href="#if_rele"><code class="Fn" id="if_rele">if_rele</code></a>() - function. They are used to allow kernel code walking global interface lists - to release the <var class="Vt">ifnet</var> lock yet keep the - <var class="Vt">ifnet</var> structure stable.</p> -<p class="Pp">There are in addition a number of function pointers which the - driver must initialize to complete its interface with the generic interface - layer:</p> -<dl class="Bl-ohang Bd-indent"> - <dt id="if_input"><a class="permalink" href="#if_input"><code class="Fn">if_input</code></a>()</dt> - <dd>Pass a packet to an appropriate upper layer as determined from the - link-layer header of the packet. This routine is to be called from an - interrupt handler or used to emulate reception of a packet on this - interface. A single function implementing - <code class="Fn">if_input</code>() can be shared among multiple drivers - utilizing the same link-layer framing, e.g., Ethernet.</dd> - <dt id="if_output"><a class="permalink" href="#if_output"><code class="Fn">if_output</code></a>()</dt> - <dd>Output a packet on interface <var class="Fa">ifp</var>, or queue it on the - output queue if the interface is already active.</dd> - <dt id="if_transmit"><a class="permalink" href="#if_transmit"><code class="Fn">if_transmit</code></a>()</dt> - <dd>Transmit a packet on an interface or queue it if the interface is in use. - This function will return <code class="Dv">ENOBUFS</code> if the devices - software and hardware queues are both full. This function must be - installed after <code class="Fn">if_attach</code>() to override the - default implementation. This function is exposed in order to allow drivers - to manage their own queues and to reduce the latency caused by a - frequently gratuitous enqueue / dequeue pair to ifq. The suggested - internal software queuing mechanism is buf_ring.</dd> - <dt id="if_qflush"><a class="permalink" href="#if_qflush"><code class="Fn">if_qflush</code></a>()</dt> - <dd>Free mbufs in internally managed queues when the interface is marked down. - This function must be installed after <code class="Fn">if_attach</code>() - to override the default implementation. This function is exposed in order - to allow drivers to manage their own queues and to reduce the latency - caused by a frequently gratuitous enqueue / dequeue pair to ifq. The - suggested internal software queuing mechanism is buf_ring.</dd> - <dt id="if_start"><a class="permalink" href="#if_start"><code class="Fn">if_start</code></a>()</dt> - <dd>Start queued output on an interface. This function is exposed in order to - provide for some interface classes to share a - <code class="Fn">if_output</code>() among all drivers. - <code class="Fn">if_start</code>() may only be called when the - <code class="Dv">IFF_DRV_OACTIVE</code> flag is not set. (Thus, - <code class="Dv">IFF_DRV_OACTIVE</code> does not literally mean that - output is active, but rather that the device's internal output queue is - full.) Please note that this function will soon be deprecated.</dd> - <dt><code class="Fn">if_ioctl</code>()</dt> - <dd>Process interface-related <a class="Xr">ioctl(2)</a> requests (defined in - <code class="In"><<a class="In">sys/sockio.h</a>></code>). - Preliminary processing is done by the generic routine - <code class="Fn">ifioctl</code>() to check for appropriate privileges, - locate the interface being manipulated, and perform certain generic - operations like twiddling flags and flushing queues. See the description - of <code class="Fn">ifioctl</code>() below for more information.</dd> - <dt id="if_init"><a class="permalink" href="#if_init"><code class="Fn">if_init</code></a>()</dt> - <dd>Initialize and bring up the hardware, e.g., reset the chip and enable the - receiver unit. Should mark the interface running, but not active - (<code class="Dv">IFF_DRV_RUNNING</code>, - <code class="Dv">~IIF_DRV_OACTIVE</code>).</dd> - <dt><code class="Fn">if_resolvemulti</code>()</dt> - <dd>Check the requested multicast group membership, - <var class="Fa">addr</var>, for validity, and if necessary compute a - link-layer group which corresponds to that address which is returned in - <var class="Fa">*retsa</var>. Returns zero on success, or an error code on - failure.</dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss" id="Interface_Flags"><a class="permalink" href="#Interface_Flags">Interface - Flags</a></h2> -<p class="Pp">Interface flags are used for a number of different purposes. Some - flags simply indicate information about the type of interface and its - capabilities; others are dynamically manipulated to reflect the current - state of the interface. Flags of the former kind are marked - ⟨S⟩ in this table; the latter are marked ⟨D⟩. - Flags which begin with “IFF_DRV_” are stored in - <var class="Va">if_drv_flags</var>; all other flags are stored in - <var class="Va">if_flags</var>.</p> -<p class="Pp">The macro <code class="Dv">IFF_CANTCHANGE</code> defines the bits - which cannot be set by a user program using the - <code class="Dv">SIOCSIFFLAGS</code> command to <a class="Xr">ioctl(2)</a>; - these are indicated by an asterisk - (‘<code class="Li">*</code>’) in the following listing.</p> -<p class="Pp"></p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt id="IFF_UP"><a class="permalink" href="#IFF_UP"><code class="Dv">IFF_UP</code></a></dt> - <dd>⟨D⟩ The interface has been configured up by the user-level - code.</dd> - <dt id="IFF_BROADCAST"><a class="permalink" href="#IFF_BROADCAST"><code class="Dv">IFF_BROADCAST</code></a></dt> - <dd>⟨S*⟩ The interface supports broadcast.</dd> - <dt id="IFF_DEBUG"><a class="permalink" href="#IFF_DEBUG"><code class="Dv">IFF_DEBUG</code></a></dt> - <dd>⟨D⟩ Used to enable/disable driver debugging code.</dd> - <dt id="IFF_LOOPBACK"><a class="permalink" href="#IFF_LOOPBACK"><code class="Dv">IFF_LOOPBACK</code></a></dt> - <dd>⟨S⟩ The interface is a loopback device.</dd> - <dt id="IFF_POINTOPOINT"><a class="permalink" href="#IFF_POINTOPOINT"><code class="Dv">IFF_POINTOPOINT</code></a></dt> - <dd>⟨S*⟩ The interface is point-to-point; - “broadcast” address is actually the address of the other - end.</dd> - <dt id="IFF_DRV_RUNNING"><a class="permalink" href="#IFF_DRV_RUNNING"><code class="Dv">IFF_DRV_RUNNING</code></a></dt> - <dd>⟨D*⟩ The interface has been configured and dynamic resources - were successfully allocated. Probably only useful internal to the - interface.</dd> - <dt id="IFF_NOARP"><a class="permalink" href="#IFF_NOARP"><code class="Dv">IFF_NOARP</code></a></dt> - <dd>⟨D⟩ Disable network address resolution on this - interface.</dd> - <dt id="IFF_PROMISC"><a class="permalink" href="#IFF_PROMISC"><code class="Dv">IFF_PROMISC</code></a></dt> - <dd>⟨D*⟩ This interface is in promiscuous mode.</dd> - <dt id="IFF_PPROMISC"><a class="permalink" href="#IFF_PPROMISC"><code class="Dv">IFF_PPROMISC</code></a></dt> - <dd>⟨D⟩ This interface is in the permanently promiscuous mode - (implies <code class="Dv">IFF_PROMISC</code>).</dd> - <dt id="IFF_ALLMULTI"><a class="permalink" href="#IFF_ALLMULTI"><code class="Dv">IFF_ALLMULTI</code></a></dt> - <dd>⟨D*⟩ This interface is in all-multicasts mode (used by - multicast routers).</dd> - <dt id="IFF_PALLMULTI"><a class="permalink" href="#IFF_PALLMULTI"><code class="Dv">IFF_PALLMULTI</code></a></dt> - <dd>⟨D⟩ This interface is in the permanently all-multicasts mode - (implies <code class="Dv">IFF_ALLMULTI</code>).</dd> - <dt id="IFF_DRV_OACTIVE"><a class="permalink" href="#IFF_DRV_OACTIVE"><code class="Dv">IFF_DRV_OACTIVE</code></a></dt> - <dd>⟨D*⟩ The interface's hardware output queue (if any) is full; - output packets are to be queued.</dd> - <dt id="IFF_SIMPLEX"><a class="permalink" href="#IFF_SIMPLEX"><code class="Dv">IFF_SIMPLEX</code></a></dt> - <dd>⟨S*⟩ The interface cannot hear its own transmissions.</dd> - <dt id="IFF_LINK0"><a class="permalink" href="#IFF_LINK0"><code class="Dv">IFF_LINK0</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="IFF_LINK1"><a class="permalink" href="#IFF_LINK1"><code class="Dv">IFF_LINK1</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="IFF_LINK2"><a class="permalink" href="#IFF_LINK2"><code class="Dv">IFF_LINK2</code></a></dt> - <dd>⟨D⟩ Control flags for the link layer. (Currently abused to - select among multiple physical layers on some devices.)</dd> - <dt id="IFF_MULTICAST"><a class="permalink" href="#IFF_MULTICAST"><code class="Dv">IFF_MULTICAST</code></a></dt> - <dd>⟨S*⟩ This interface supports multicast.</dd> - <dt id="IFF_CANTCONFIG"><a class="permalink" href="#IFF_CANTCONFIG"><code class="Dv">IFF_CANTCONFIG</code></a></dt> - <dd>⟨S*⟩ The interface is not configurable in a meaningful way. - Primarily useful for <code class="Dv">IFT_USB</code> interfaces registered - at the interface list.</dd> - <dt id="IFF_MONITOR"><a class="permalink" href="#IFF_MONITOR"><code class="Dv">IFF_MONITOR</code></a></dt> - <dd>⟨D⟩ This interface blocks transmission of packets and - discards incoming packets after BPF processing. Used to monitor network - traffic but not interact with the network in question.</dd> - <dt id="IFF_STATICARP"><a class="permalink" href="#IFF_STATICARP"><code class="Dv">IFF_STATICARP</code></a></dt> - <dd>⟨D⟩ Used to enable/disable ARP requests on this - interface.</dd> - <dt id="IFF_DYING"><a class="permalink" href="#IFF_DYING"><code class="Dv">IFF_DYING</code></a></dt> - <dd>⟨D*⟩ Set when the <var class="Vt">ifnet</var> structure of - this interface is being released and still has - <var class="Va">if_refcount</var> references.</dd> -</dl> -</div> -</section> -<section class="Ss"> -<h2 class="Ss" id="Interface_Capabilities_Flags"><a class="permalink" href="#Interface_Capabilities_Flags">Interface - Capabilities Flags</a></h2> -<p class="Pp">Interface capabilities are specialized features an interface may - or may not support. These capabilities are very hardware-specific and allow, - when enabled, to offload specific network processing to the interface or to - offer a particular feature for use by other kernel parts.</p> -<p class="Pp" id="ifioctl">It should be stressed that a capability can be - completely uncontrolled (i.e., stay always enabled with no way to disable - it) or allow limited control over itself (e.g., depend on another - capability's state.) Such peculiarities are determined solely by the - hardware and driver of a particular interface. Only the driver possesses the - knowledge on whether and how the interface capabilities can be controlled. - Consequently, capabilities flags in <var class="Va">if_capenable</var> - should never be modified directly by kernel code other than the interface - driver. The command <code class="Dv">SIOCSIFCAP</code> to - <a class="permalink" href="#ifioctl"><code class="Fn">ifioctl</code></a>() - is the dedicated means to attempt altering - <var class="Va">if_capenable</var> on an interface. Userland code shall use - <a class="Xr">ioctl(2)</a>.</p> -<p class="Pp">The following capabilities are currently supported by the - system:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="IFCAP_RXCSUM"><a class="permalink" href="#IFCAP_RXCSUM"><code class="Dv">IFCAP_RXCSUM</code></a></dt> - <dd>This interface can do checksum validation on receiving data. Some - interfaces do not have sufficient buffer storage to store frames above a - certain MTU-size completely. The driver for the interface might disable - hardware checksum validation if the MTU is set above the hardcoded - limit.</dd> - <dt id="IFCAP_TXCSUM"><a class="permalink" href="#IFCAP_TXCSUM"><code class="Dv">IFCAP_TXCSUM</code></a></dt> - <dd>This interface can do checksum calculation on transmitting data.</dd> - <dt id="IFCAP_HWCSUM"><a class="permalink" href="#IFCAP_HWCSUM"><code class="Dv">IFCAP_HWCSUM</code></a></dt> - <dd>A shorthand for (<code class="Dv">IFCAP_RXCSUM</code> | - <code class="Dv">IFCAP_TXCSUM</code>).</dd> - <dt id="IFCAP_NETCONS"><a class="permalink" href="#IFCAP_NETCONS"><code class="Dv">IFCAP_NETCONS</code></a></dt> - <dd>This interface can be a network console.</dd> - <dt id="IFCAP_VLAN_MTU"><a class="permalink" href="#IFCAP_VLAN_MTU"><code class="Dv">IFCAP_VLAN_MTU</code></a></dt> - <dd>The <a class="Xr">vlan(4)</a> driver can operate over this interface in - software tagging mode without having to decrease MTU on - <a class="Xr">vlan(4)</a> interfaces below 1500 bytes. This implies the - ability of this interface to cope with frames somewhat longer than - permitted by the Ethernet specification.</dd> - <dt id="IFCAP_VLAN_HWTAGGING"><a class="permalink" href="#IFCAP_VLAN_HWTAGGING"><code class="Dv">IFCAP_VLAN_HWTAGGING</code></a></dt> - <dd>This interface can do VLAN tagging on output and demultiplex frames by - their VLAN tag on input.</dd> - <dt id="IFCAP_JUMBO_MTU"><a class="permalink" href="#IFCAP_JUMBO_MTU"><code class="Dv">IFCAP_JUMBO_MTU</code></a></dt> - <dd>This Ethernet interface can transmit and receive frames up to 9000 bytes - long.</dd> - <dt id="IFCAP_POLLING"><a class="permalink" href="#IFCAP_POLLING"><code class="Dv">IFCAP_POLLING</code></a></dt> - <dd>This interface supports <a class="Xr">polling(4)</a>. See below for - details.</dd> - <dt id="IFCAP_VLAN_HWCSUM"><a class="permalink" href="#IFCAP_VLAN_HWCSUM"><code class="Dv">IFCAP_VLAN_HWCSUM</code></a></dt> - <dd>This interface can do checksum calculation on both transmitting and - receiving data on <a class="Xr">vlan(4)</a> interfaces (implies - <code class="Dv">IFCAP_HWCSUM</code>).</dd> - <dt id="IFCAP_TSO4"><a class="permalink" href="#IFCAP_TSO4"><code class="Dv">IFCAP_TSO4</code></a></dt> - <dd>This Ethernet interface supports TCP4 Segmentation offloading.</dd> - <dt id="IFCAP_TSO6"><a class="permalink" href="#IFCAP_TSO6"><code class="Dv">IFCAP_TSO6</code></a></dt> - <dd>This Ethernet interface supports TCP6 Segmentation offloading.</dd> - <dt id="IFCAP_TSO"><a class="permalink" href="#IFCAP_TSO"><code class="Dv">IFCAP_TSO</code></a></dt> - <dd>A shorthand for (<code class="Dv">IFCAP_TSO4</code> | - <code class="Dv">IFCAP_TSO6</code>).</dd> - <dt id="IFCAP_TOE4"><a class="permalink" href="#IFCAP_TOE4"><code class="Dv">IFCAP_TOE4</code></a></dt> - <dd>This Ethernet interface supports TCP4 Offload Engine.</dd> - <dt id="IFCAP_TOE6"><a class="permalink" href="#IFCAP_TOE6"><code class="Dv">IFCAP_TOE6</code></a></dt> - <dd>This Ethernet interface supports TCP6 Offload Engine.</dd> - <dt id="IFCAP_TOE"><a class="permalink" href="#IFCAP_TOE"><code class="Dv">IFCAP_TOE</code></a></dt> - <dd>A shorthand for (<code class="Dv">IFCAP_TOE4</code> | - <code class="Dv">IFCAP_TOE6</code>).</dd> - <dt id="IFCAP_WOL_UCAST"><a class="permalink" href="#IFCAP_WOL_UCAST"><code class="Dv">IFCAP_WOL_UCAST</code></a></dt> - <dd>This Ethernet interface supports waking up on any Unicast packet.</dd> - <dt id="IFCAP_WOL_MCAST"><a class="permalink" href="#IFCAP_WOL_MCAST"><code class="Dv">IFCAP_WOL_MCAST</code></a></dt> - <dd>This Ethernet interface supports waking up on any Multicast packet.</dd> - <dt id="IFCAP_WOL_MAGIC"><a class="permalink" href="#IFCAP_WOL_MAGIC"><code class="Dv">IFCAP_WOL_MAGIC</code></a></dt> - <dd>This Ethernet interface supports waking up on any Magic packet such as - those sent by <a class="Xr">wake(8)</a>.</dd> - <dt id="IFCAP_WOL"><a class="permalink" href="#IFCAP_WOL"><code class="Dv">IFCAP_WOL</code></a></dt> - <dd>A shorthand for (<code class="Dv">IFCAP_WOL_UCAST</code> | - <code class="Dv">IFCAP_WOL_MCAST</code> | - <code class="Dv">IFCAP_WOL_MAGIC</code>).</dd> - <dt id="IFCAP_VLAN_HWFILTER"><a class="permalink" href="#IFCAP_VLAN_HWFILTER"><code class="Dv">IFCAP_VLAN_HWFILTER</code></a></dt> - <dd>This interface supports frame filtering in hardware on - <a class="Xr">vlan(4)</a> interfaces.</dd> - <dt id="IFCAP_VLAN_HWTSO"><a class="permalink" href="#IFCAP_VLAN_HWTSO"><code class="Dv">IFCAP_VLAN_HWTSO</code></a></dt> - <dd>This interface supports TCP Segmentation offloading on - <a class="Xr">vlan(4)</a> interfaces (implies - <code class="Dv">IFCAP_TSO</code>).</dd> - <dt id="IFCAP_LINKSTATE"><a class="permalink" href="#IFCAP_LINKSTATE"><code class="Dv">IFCAP_LINKSTATE</code></a></dt> - <dd>This Ethernet interface supports dynamic link state changes.</dd> - <dt id="IFCAP_NETMAP"><a class="permalink" href="#IFCAP_NETMAP"><code class="Dv">IFCAP_NETMAP</code></a></dt> - <dd>This Ethernet interface supports <a class="Xr">netmap(4)</a>.</dd> -</dl> -</div> -<p class="Pp">The ability of advanced network interfaces to offload certain - computational tasks from the host CPU to the board is limited mostly to - TCP/IP. Therefore a separate field associated with an interface (see - <var class="Va">ifnet.if_data.ifi_hwassist</var> below) keeps a detailed - description of its enabled capabilities specific to TCP/IP processing. The - TCP/IP module consults the field to see which tasks can be done on an - <i class="Em">outgoing</i> packet by the interface. The flags defined for - that field are a superset of those for - <var class="Va">mbuf.m_pkthdr.csum_flags</var>, namely:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="CSUM_IP"><a class="permalink" href="#CSUM_IP"><code class="Dv">CSUM_IP</code></a></dt> - <dd>The interface will compute IP checksums.</dd> - <dt id="CSUM_TCP"><a class="permalink" href="#CSUM_TCP"><code class="Dv">CSUM_TCP</code></a></dt> - <dd>The interface will compute TCP checksums.</dd> - <dt id="CSUM_UDP"><a class="permalink" href="#CSUM_UDP"><code class="Dv">CSUM_UDP</code></a></dt> - <dd>The interface will compute UDP checksums.</dd> -</dl> -</div> -<p class="Pp" id="incoming">An interface notifies the TCP/IP module about the - tasks the former has performed on an - <a class="permalink" href="#incoming"><i class="Em">incoming</i></a> packet - by setting the corresponding flags in the field - <var class="Va">mbuf.m_pkthdr.csum_flags</var> of the <var class="Vt">mbuf - chain</var> containing the packet. See <a class="Xr">mbuf(9)</a> for - details.</p> -<p class="Pp" id="ifioctl~2">The capability of a network interface to operate in - <a class="Xr">polling(4)</a> mode involves several flags in different global - variables and per-interface fields. The capability flag - <code class="Dv">IFCAP_POLLING</code> set in interface's - <var class="Va">if_capabilities</var> indicates support for - <a class="Xr">polling(4)</a> on the particular interface. If set in - <var class="Va">if_capabilities</var>, the same flag can be marked or - cleared in the interface's <var class="Va">if_capenable</var> within - <a class="permalink" href="#ifioctl~2"><code class="Fn">ifioctl</code></a>(), - thus initiating switch of the interface to <a class="Xr">polling(4)</a> mode - or interrupt mode, respectively. The actual mode change is managed by the - driver-specific <code class="Fn">if_ioctl</code>() routine. The - <a class="Xr">polling(4)</a> handler returns the number of packets - processed.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="The_if_data_Structure"><a class="permalink" href="#The_if_data_Structure">The - if_data Structure</a></h2> -<p class="Pp">The <var class="Vt">if_data</var> structure contains statistics - and identifying information used by management programs, and which is - exported to user programs by way of the <a class="Xr">ifmib(4)</a> branch of - the <a class="Xr">sysctl(3)</a> MIB. The following elements of the - <var class="Vt">if_data</var> structure are initialized by the interface and - are not expected to change significantly over the course of normal - operation:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="ifi_type"><var class="Va">ifi_type</var></dt> - <dd>(<var class="Vt">u_char</var>) The type of the interface, as defined in - <code class="In"><<a class="In">net/if_types.h</a>></code> and - described below in the <a class="Sx" href="#Interface_Types">Interface - Types</a> section.</dd> - <dt id="ifi_physical"><var class="Va">ifi_physical</var></dt> - <dd>(<var class="Vt">u_char</var>) Intended to represent a selection of - physical layers on devices which support more than one; never - implemented.</dd> - <dt id="ifi_addrlen"><var class="Va">ifi_addrlen</var></dt> - <dd>(<var class="Vt">u_char</var>) Length of a link-layer address on this - device, or zero if there are none. Used to initialized the address length - field in <var class="Vt">sockaddr_dl</var> structures referring to this - interface.</dd> - <dt id="ifi_hdrlen"><var class="Va">ifi_hdrlen</var></dt> - <dd>(<var class="Vt">u_char</var>) Maximum length of any link-layer header - which might be prepended by the driver to a packet before transmission. - The generic code computes the maximum over all interfaces and uses that - value to influence the placement of data in <var class="Vt">mbuf</var>s to - attempt to ensure that there is always sufficient space to prepend a - link-layer header without allocating an additional - <var class="Vt">mbuf</var>.</dd> - <dt id="ifi_datalen"><var class="Va">ifi_datalen</var></dt> - <dd>(<var class="Vt">u_char</var>) Length of the <var class="Vt">if_data</var> - structure. Allows some stabilization of the routing socket ABI in the face - of increases in the length of <var class="Vt">struct ifdata</var>.</dd> - <dt id="ifi_mtu"><var class="Va">ifi_mtu</var></dt> - <dd>(<var class="Vt">u_long</var>) The maximum transmission unit of the - medium, exclusive of any link-layer overhead.</dd> - <dt id="ifi_metric"><var class="Va">ifi_metric</var></dt> - <dd>(<var class="Vt">u_long</var>) A dimensionless metric interpreted by a - user-mode routing process.</dd> - <dt id="ifi_epoch"><var class="Va">ifi_epoch</var></dt> - <dd>(<var class="Vt">time_t</var>) The system uptime when interface was - attached or the statistics below were reset. This is intended to be used - to set the SNMP variable <var class="Va">ifCounterDiscontinuityTime</var>. - It may also be used to determine if two successive queries for an - interface of the same index have returned results for the same - interface.</dd> -</dl> -</div> -<p class="Pp">The structure additionally contains generic statistics applicable - to a variety of different interface types (except as noted, all members are - of type <var class="Vt">u_long</var>):</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="ifi_link_state"><var class="Va">ifi_link_state</var></dt> - <dd>(<var class="Vt">u_char</var>) The current link state of Ethernet - interfaces. See the <a class="Sx" href="#Interface_Link_States">Interface - Link States</a> section for possible values.</dd> - <dt id="ifi_ipackets"><var class="Va">ifi_ipackets</var></dt> - <dd>Number of packets received.</dd> - <dt id="ifi_ierrors"><var class="Va">ifi_ierrors</var></dt> - <dd>Number of receive errors detected (e.g., FCS errors, DMA overruns, etc.). - More detailed breakdowns can often be had by way of a link-specific - MIB.</dd> - <dt id="ifi_opackets"><var class="Va">ifi_opackets</var></dt> - <dd>Number of packets transmitted.</dd> - <dt id="ifi_oerrors"><var class="Va">ifi_oerrors</var></dt> - <dd>Number of output errors detected (e.g., late collisions, DMA overruns, - etc.). More detailed breakdowns can often be had by way of a link-specific - MIB.</dd> - <dt id="ifi_collisions"><var class="Va">ifi_collisions</var></dt> - <dd>Total number of collisions detected on output for CSMA interfaces. (This - member is sometimes [ab]used by other types of interfaces for other output - error counts.)</dd> - <dt id="ifi_ibytes"><var class="Va">ifi_ibytes</var></dt> - <dd>Total traffic received, in bytes.</dd> - <dt id="ifi_obytes"><var class="Va">ifi_obytes</var></dt> - <dd>Total traffic transmitted, in bytes.</dd> - <dt id="ifi_imcasts"><var class="Va">ifi_imcasts</var></dt> - <dd>Number of packets received which were sent by link-layer multicast.</dd> - <dt id="ifi_omcasts"><var class="Va">ifi_omcasts</var></dt> - <dd>Number of packets sent by link-layer multicast.</dd> - <dt id="ifi_iqdrops"><var class="Va">ifi_iqdrops</var></dt> - <dd>Number of packets dropped on input. Rarely implemented.</dd> - <dt id="ifi_oqdrops"><var class="Va">ifi_oqdrops</var></dt> - <dd>Number of packets dropped on output.</dd> - <dt id="ifi_noproto"><var class="Va">ifi_noproto</var></dt> - <dd>Number of packets received for unknown network-layer protocol.</dd> - <dt id="ifi_lastchange"><var class="Va">ifi_lastchange</var></dt> - <dd>(<var class="Vt">struct timeval</var>) The time of the last administrative - change to the interface (as required for SNMP ) .</dd> -</dl> -</div> -</section> -<section class="Ss"> -<h2 class="Ss" id="Interface_Types"><a class="permalink" href="#Interface_Types">Interface - Types</a></h2> -<p class="Pp">The header file - <code class="In"><<a class="In">net/if_types.h</a>></code> defines - symbolic constants for a number of different types of interfaces. The most - common are:</p> -<p class="Pp"></p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt id="IFT_OTHER"><a class="permalink" href="#IFT_OTHER"><code class="Dv">IFT_OTHER</code></a></dt> - <dd>none of the following</dd> - <dt id="IFT_ETHER"><a class="permalink" href="#IFT_ETHER"><code class="Dv">IFT_ETHER</code></a></dt> - <dd>Ethernet</dd> - <dt id="IFT_ISO88023"><a class="permalink" href="#IFT_ISO88023"><code class="Dv">IFT_ISO88023</code></a></dt> - <dd>ISO 8802-3 CSMA/CD</dd> - <dt id="IFT_ISO88024"><a class="permalink" href="#IFT_ISO88024"><code class="Dv">IFT_ISO88024</code></a></dt> - <dd>ISO 8802-4 Token Bus</dd> - <dt id="IFT_ISO88025"><a class="permalink" href="#IFT_ISO88025"><code class="Dv">IFT_ISO88025</code></a></dt> - <dd>ISO 8802-5 Token Ring</dd> - <dt id="IFT_ISO88026"><a class="permalink" href="#IFT_ISO88026"><code class="Dv">IFT_ISO88026</code></a></dt> - <dd>ISO 8802-6 DQDB MAN</dd> - <dt id="IFT_FDDI"><a class="permalink" href="#IFT_FDDI"><code class="Dv">IFT_FDDI</code></a></dt> - <dd>FDDI</dd> - <dt id="IFT_PPP"><a class="permalink" href="#IFT_PPP"><code class="Dv">IFT_PPP</code></a></dt> - <dd>Internet Point-to-Point Protocol (<a class="Xr">ppp(8)</a>)</dd> - <dt id="IFT_LOOP"><a class="permalink" href="#IFT_LOOP"><code class="Dv">IFT_LOOP</code></a></dt> - <dd>The loopback (<a class="Xr">lo(4)</a>) interface</dd> - <dt id="IFT_SLIP"><a class="permalink" href="#IFT_SLIP"><code class="Dv">IFT_SLIP</code></a></dt> - <dd>Serial Line IP</dd> - <dt id="IFT_PARA"><a class="permalink" href="#IFT_PARA"><code class="Dv">IFT_PARA</code></a></dt> - <dd>Parallel-port IP (“PLIP”)</dd> - <dt id="IFT_ATM"><a class="permalink" href="#IFT_ATM"><code class="Dv">IFT_ATM</code></a></dt> - <dd>Asynchronous Transfer Mode</dd> - <dt id="IFT_USB"><a class="permalink" href="#IFT_USB"><code class="Dv">IFT_USB</code></a></dt> - <dd>USB Interface</dd> -</dl> -</div> -</section> -<section class="Ss"> -<h2 class="Ss" id="Interface_Link_States"><a class="permalink" href="#Interface_Link_States">Interface - Link States</a></h2> -<p class="Pp">The following link states are currently defined:</p> -<p class="Pp"></p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt id="LINK_STATE_UNKNOWN"><a class="permalink" href="#LINK_STATE_UNKNOWN"><code class="Dv">LINK_STATE_UNKNOWN</code></a></dt> - <dd>The link is in an invalid or unknown state.</dd> - <dt id="LINK_STATE_DOWN"><a class="permalink" href="#LINK_STATE_DOWN"><code class="Dv">LINK_STATE_DOWN</code></a></dt> - <dd>The link is down.</dd> - <dt id="LINK_STATE_UP"><a class="permalink" href="#LINK_STATE_UP"><code class="Dv">LINK_STATE_UP</code></a></dt> - <dd>The link is up.</dd> -</dl> -</div> -</section> -<section class="Ss"> -<h2 class="Ss" id="The_ifaddr_Structure"><a class="permalink" href="#The_ifaddr_Structure">The - ifaddr Structure</a></h2> -<p class="Pp">Every interface is associated with a list (or, rather, a - <code class="Li">TAILQ</code>) of addresses, rooted at the interface - structure's <var class="Va">if_addrhead</var> member. The first element in - this list is always an <code class="Dv">AF_LINK</code> address representing - the interface itself; multi-access network drivers should complete this - structure by filling in their link-layer addresses after calling - <a class="permalink" href="#if_attach"><code class="Fn" id="if_attach">if_attach</code></a>(). - Other members of the structure represent network-layer addresses which have - been configured by means of the <code class="Dv">SIOCAIFADDR</code> command - to <a class="Xr">ioctl(2)</a>, called on a socket of the appropriate - protocol family. The elements of this list consist of - <var class="Vt">ifaddr</var> structures. Most protocols will declare their - own protocol-specific interface address structures, but all begin with a - <var class="Vt">struct ifaddr</var> which provides the most-commonly-needed - functionality across all protocols. Interface addresses are - reference-counted.</p> -<p class="Pp">The members of <var class="Vt">struct ifaddr</var> are as - follows:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="ifa_addr"><var class="Va">ifa_addr</var></dt> - <dd>(<var class="Vt">struct sockaddr *</var>) The local address of the - interface.</dd> - <dt id="ifa_dstaddr"><var class="Va">ifa_dstaddr</var></dt> - <dd>(<var class="Vt">struct sockaddr *</var>) The remote address of - point-to-point interfaces, and the broadcast address of broadcast - interfaces. (<var class="Va">ifa_broadaddr</var> is a macro for - <var class="Va">ifa_dstaddr</var>.)</dd> - <dt id="ifa_netmask"><var class="Va">ifa_netmask</var></dt> - <dd>(<var class="Vt">struct sockaddr *</var>) The network mask for - multi-access interfaces, and the confusion generator for point-to-point - interfaces.</dd> - <dt id="ifa_ifp"><var class="Va">ifa_ifp</var></dt> - <dd>(<var class="Vt">if_t</var>) A link back to the interface structure.</dd> - <dt id="ifa_link"><var class="Va">ifa_link</var></dt> - <dd>(<a class="permalink" href="#TAILQ_ENTRY"><code class="Fn" id="TAILQ_ENTRY">TAILQ_ENTRY</code></a>(<var class="Fa">ifaddr</var>)) - <a class="Xr">queue(3)</a> glue for list of addresses on each - interface.</dd> - <dt id="ifa_rtrequest"><var class="Va">ifa_rtrequest</var></dt> - <dd>See below.</dd> - <dt id="ifa_flags"><var class="Va">ifa_flags</var></dt> - <dd>(<var class="Vt">u_short</var>) Some of the flags which would be used for - a route representing this address in the route table.</dd> - <dt id="ifa_refcnt"><var class="Va">ifa_refcnt</var></dt> - <dd>(<var class="Vt">short</var>) The reference count.</dd> -</dl> -</div> -<p class="Pp" id="ifa_ref">References to <var class="Vt">ifaddr</var> structures - are gained by calling the - <a class="permalink" href="#ifa_ref"><code class="Fn">ifa_ref</code></a>() - function and released by calling the - <a class="permalink" href="#ifa_free"><code class="Fn" id="ifa_free">ifa_free</code></a>() - function.</p> -<p class="Pp" id="ifa_rtrequest~2"><a class="permalink" href="#ifa_rtrequest~2"><code class="Fn">ifa_rtrequest</code></a>() - is a pointer to a function which receives callouts from the routing code - (<a class="permalink" href="#rtrequest"><code class="Fn" id="rtrequest">rtrequest</code></a>()) - to perform link-layer-specific actions upon requests to add, or delete - routes. The <var class="Fa">cmd</var> argument indicates the request in - question: <code class="Dv">RTM_ADD</code>, or - <code class="Dv">RTM_DELETE</code>. The <var class="Fa">rt</var> argument is - the route in question; the <var class="Fa">info</var> argument contains the - specific destination being manipulated.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="FUNCTIONS"><a class="permalink" href="#FUNCTIONS">FUNCTIONS</a></h1> -<p class="Pp">The functions provided by the generic interface code can be - divided into two groups: those which manipulate interfaces, and those which - manipulate interface addresses. In addition to these functions, there may - also be link-layer support routines which are used by a number of drivers - implementing a specific link layer over different hardware; see the - documentation for that link layer for more details.</p> -<section class="Ss"> -<h2 class="Ss" id="The_ifmultiaddr_Structure"><a class="permalink" href="#The_ifmultiaddr_Structure">The - ifmultiaddr Structure</a></h2> -<p class="Pp">Every multicast-capable interface is associated with a list of - multicast group memberships, which indicate at a low level which link-layer - multicast addresses (if any) should be accepted, and at a high level, in - which network-layer multicast groups a user process has expressed - interest.</p> -<p class="Pp">The elements of the structure are as follows:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="ifma_link"><var class="Va">ifma_link</var></dt> - <dd>(<a class="permalink" href="#LIST_ENTRY"><code class="Fn" id="LIST_ENTRY">LIST_ENTRY</code></a>(<var class="Fa">ifmultiaddr</var>)) - <a class="Xr">queue(3)</a> macro glue.</dd> - <dt id="ifma_addr"><var class="Va">ifma_addr</var></dt> - <dd>(<var class="Vt">struct sockaddr *</var>) A pointer to the address which - this record represents. The memberships for various address families are - stored in arbitrary order.</dd> - <dt id="ifma_lladdr"><var class="Va">ifma_lladdr</var></dt> - <dd>(<var class="Vt">struct sockaddr *</var>) A pointer to the link-layer - multicast address, if any, to which the network-layer multicast address in - <var class="Va">ifma_addr</var> is mapped, else a null pointer. If this - element is non-nil, this membership also holds an invisible reference to - another membership for that link-layer address.</dd> - <dt id="ifma_refcount"><var class="Va">ifma_refcount</var></dt> - <dd>(<var class="Vt">u_int</var>) A reference count of requests for this - particular membership.</dd> -</dl> -</div> -</section> -<section class="Ss"> -<h2 class="Ss">Interface Manipulation Functions</h2> -<dl class="Bl-ohang Bd-indent"> - <dt id="if_alloc"><a class="permalink" href="#if_alloc"><code class="Fn">if_alloc</code></a>()</dt> - <dd>Allocate and initialize <var class="Vt">struct ifnet</var>. Initialization - includes the allocation of an interface index and may include the - allocation of a <var class="Fa">type</var> specific structure in - <var class="Va">if_l2com</var>.</dd> - <dt id="if_alloc_dev"><a class="permalink" href="#if_alloc_dev"><code class="Fn">if_alloc_dev</code></a>()</dt> - <dd>Allocate and initialize <var class="Vt">struct ifnet</var> as - <code class="Fn">if_alloc</code>() does, with the addition that the ifnet - can be tagged with the appropriate NUMA domain derived from the - <var class="Fa">dev</var> argument passed by the caller.</dd> - <dt id="if_alloc_domain"><a class="permalink" href="#if_alloc_domain"><code class="Fn">if_alloc_domain</code></a>()</dt> - <dd>Allocate and initialize <var class="Vt">struct ifnet</var> as - <code class="Fn">if_alloc</code>() does, with the addition that the ifnet - will be tagged with the NUMA domain via the - <var class="Fa">numa_domain</var> argument passed by the caller.</dd> - <dt><code class="Fn">if_attach</code>()</dt> - <dd>Link the specified interface <var class="Fa">ifp</var> into the list of - network interfaces. Also initialize the list of addresses on that - interface, and create a link-layer <var class="Vt">ifaddr</var> structure - to be the first element in that list. (A pointer to this address structure - is saved in the <var class="Vt">ifnet</var> structure.) The - <var class="Fa">ifp</var> must have been allocated by - <code class="Fn">if_alloc</code>(), <code class="Fn">if_alloc_dev</code>() - or <code class="Fn">if_alloc_domain</code>().</dd> - <dt id="if_detach"><a class="permalink" href="#if_detach"><code class="Fn">if_detach</code></a>()</dt> - <dd>Shut down and unlink the specified <var class="Fa">ifp</var> from the - interface list.</dd> - <dt id="if_free"><a class="permalink" href="#if_free"><code class="Fn">if_free</code></a>()</dt> - <dd>Free the given <var class="Fa">ifp</var> back to the system. The interface - must have been previously detached if it was ever attached.</dd> - <dt id="if_free_type"><a class="permalink" href="#if_free_type"><code class="Fn">if_free_type</code></a>()</dt> - <dd>Identical to <code class="Fn">if_free</code>() except that the given - <var class="Fa">type</var> is used to free <var class="Va">if_l2com</var> - instead of the type in <var class="Va">if_type</var>. This is intended for - use with drivers that change their interface type.</dd> - <dt><code class="Fn">if_down</code>()</dt> - <dd>Mark the interface <var class="Fa">ifp</var> as down (i.e., - <code class="Dv">IFF_UP</code> is not set), flush its output queue, notify - protocols of the transition, and generate a message from the - <a class="Xr">route(4)</a> routing socket.</dd> - <dt><code class="Fn">if_up</code>()</dt> - <dd>Mark the interface <var class="Fa">ifp</var> as up, notify protocols of - the transition, and generate a message from the <a class="Xr">route(4)</a> - routing socket.</dd> - <dt id="ifpromisc"><a class="permalink" href="#ifpromisc"><code class="Fn">ifpromisc</code></a>()</dt> - <dd>Add or remove a promiscuous reference to <var class="Fa">ifp</var>. If - <var class="Fa">pswitch</var> is true, add a reference; if it is false, - remove a reference. On reference count transitions from zero to one and - one to zero, set the <code class="Dv">IFF_PROMISC</code> flag - appropriately and call <code class="Fn">if_ioctl</code>() to set up the - interface in the desired mode.</dd> - <dt id="if_allmulti"><a class="permalink" href="#if_allmulti"><code class="Fn">if_allmulti</code></a>()</dt> - <dd>As <code class="Fn">ifpromisc</code>(), but for the all-multicasts - (<code class="Dv">IFF_ALLMULTI</code>) flag instead of the promiscuous - flag.</dd> - <dt id="ifunit"><a class="permalink" href="#ifunit"><code class="Fn">ifunit</code></a>()</dt> - <dd>Return an <var class="Vt">ifnet</var> pointer for the interface named - <var class="Fa">name</var>.</dd> - <dt id="ifunit_ref"><a class="permalink" href="#ifunit_ref"><code class="Fn">ifunit_ref</code></a>()</dt> - <dd>Return a reference-counted (via <code class="Fn">ifa_ref</code>()) - <var class="Vt">ifnet</var> pointer for the interface named - <var class="Fa">name</var>. This is the preferred function over - <code class="Fn">ifunit</code>(). The caller is responsible for releasing - the reference with <code class="Fn">if_rele</code>() when it is finished - with the ifnet.</dd> - <dt><code class="Fn">ifioctl</code>()</dt> - <dd>Process the ioctl request <var class="Fa">cmd</var>, issued on socket - <var class="Fa">so</var> by thread <var class="Fa">td</var>, with data - parameter <var class="Fa">data</var>. This is the main routine for - handling all interface configuration requests from user mode. It is - ordinarily only called from the socket-layer <a class="Xr">ioctl(2)</a> - handler, and only for commands with class - ‘<code class="Li">i</code>’. Any unrecognized commands will - be passed down to socket <var class="Fa">so</var>'s protocol for further - interpretation. The following commands are handled by - <code class="Fn">ifioctl</code>(): - <p class="Pp"></p> - <div class="Bd-indent"> - <dl class="Bl-tag Bl-compact"> - <dt id="SIOCGIFCONF"><a class="permalink" href="#SIOCGIFCONF"><code class="Dv">SIOCGIFCONF</code></a></dt> - <dd>Get interface configuration. (No call-down to driver.) - <p class="Pp"></p> - </dd> - <dt id="SIOCSIFNAME"><a class="permalink" href="#SIOCSIFNAME"><code class="Dv">SIOCSIFNAME</code></a></dt> - <dd>Set the interface name. <code class="Dv">RTM_IFANNOUNCE</code> - departure and arrival messages are sent so that routing code that - relies on the interface name will update its interface list. Caller - must have appropriate privilege. (No call-down to driver.)</dd> - <dt id="SIOCGIFCAP"><a class="permalink" href="#SIOCGIFCAP"><code class="Dv">SIOCGIFCAP</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="SIOCGIFDATA"><a class="permalink" href="#SIOCGIFDATA"><code class="Dv">SIOCGIFDATA</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="SIOCGIFFIB"><a class="permalink" href="#SIOCGIFFIB"><code class="Dv">SIOCGIFFIB</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="SIOCGIFFLAGS"><a class="permalink" href="#SIOCGIFFLAGS"><code class="Dv">SIOCGIFFLAGS</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="SIOCGIFMETRIC"><a class="permalink" href="#SIOCGIFMETRIC"><code class="Dv">SIOCGIFMETRIC</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="SIOCGIFMTU"><a class="permalink" href="#SIOCGIFMTU"><code class="Dv">SIOCGIFMTU</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="SIOCGIFPHYS"><a class="permalink" href="#SIOCGIFPHYS"><code class="Dv">SIOCGIFPHYS</code></a></dt> - <dd>Get interface capabilities, data, FIB, flags, metric, MTU, medium - selection. (No call-down to driver.) - <p class="Pp"></p> - </dd> - <dt id="SIOCSIFCAP"><a class="permalink" href="#SIOCSIFCAP"><code class="Dv">SIOCSIFCAP</code></a></dt> - <dd>Enable or disable interface capabilities. Caller must have appropriate - privilege. Before a call to the driver-specific - <a class="permalink" href="#if_ioctl"><code class="Fn" id="if_ioctl">if_ioctl</code></a>() - routine, the requested mask for enabled capabilities is checked - against the mask of capabilities supported by the interface, - <var class="Va">if_capabilities</var>. Requesting to enable an - unsupported capability is invalid. The rest is supposed to be done by - the driver, which includes updating <var class="Va">if_capenable</var> - and <var class="Va">if_data.ifi_hwassist</var> appropriately. - <p class="Pp"></p> - </dd> - <dt id="SIOCGIFCAPNV"><a class="permalink" href="#SIOCGIFCAPNV"><code class="Dv">SIOCGIFCAPNV</code></a></dt> - <dd><a class="Xr">nv(9)</a> version of the - <code class="Dv">SIOCGIFCAP</code> ioctl. Caller must provide a - pointer to <var class="Vt">struct ifreq_cap_nv</var> as - <var class="Fa">data</var>, where the member - <code class="Dv">buffer</code> points to some buffer containing - <code class="Dv">buf_length</code> bytes. The serialized nvlist with - description of the device capabilities is written to the buffer. If - buffer is too short, the structure is updated with - <code class="Dv">buffer</code> member set to - <code class="Dv">NULL</code>, <code class="Dv">length</code> set to - the minimal required length, and error <code class="Er">EFBIG</code> - is returned. - <p class="Pp">Elements of the returned nvlist for simple capabilities - are boolean, identified by names. Presence of the boolean element - means that corresponding capability is supported by the interface. - Element's value describes the current configured state: - <code class="Dv">true</code> means that the capability is enabled, - and <code class="Dv">false</code> that it is disabled.</p> - <p class="Pp">Driver indicates support for both - <code class="Dv">SIOCGIFCAPNV</code> and - <code class="Dv">SIOCSIFCAPNV</code> requests by setting - <code class="Dv">IFCAP_NV</code> non-modifiable capability bit in - <code class="Dv">if_capabilities</code>.</p> - <p class="Pp"></p> - </dd> - <dt id="SIOCSIFCAPNV"><a class="permalink" href="#SIOCSIFCAPNV"><code class="Dv">SIOCSIFCAPNV</code></a></dt> - <dd><a class="Xr">nv(9)</a> version of the - <code class="Dv">SIOCSIFCAP</code> ioctl. Caller must provide the - pointer to <var class="Vt">struct ifreq_cap_nv</var> as - <var class="Fa">data</var>, where the member - <code class="Dv">buffer</code> points to serialized nvlist of - <code class="Dv">length</code> bytes. Each element of nvlist describes - a requested update of one capability, identified by the element name. - For simple capabilities, the element must be boolean. Its - <code class="Dv">true</code> value means that the caller asks to - enable the capability, and <code class="Dv">false</code> value to - disable. Only capabilities listed in the nvlist are affected by the - call. - <p class="Pp"></p> - </dd> - <dt id="SIOCSIFFIB"><a class="permalink" href="#SIOCSIFFIB"><code class="Dv">SIOCSIFFIB</code></a></dt> - <dd>Sets interface FIB. Caller must have appropriate privilege. FIB values - start at 0 and values greater or equals than - <var class="Va">net.fibs</var> are considered invalid.</dd> - <dt id="SIOCSIFFLAGS"><a class="permalink" href="#SIOCSIFFLAGS"><code class="Dv">SIOCSIFFLAGS</code></a></dt> - <dd>Change interface flags. Caller must have appropriate privilege. If a - change to the <code class="Dv">IFF_UP</code> flag is requested, - <a class="permalink" href="#if_up"><code class="Fn" id="if_up">if_up</code></a>() - or - <a class="permalink" href="#if_down"><code class="Fn" id="if_down">if_down</code></a>() - is called as appropriate. Flags listed in - <code class="Dv">IFF_CANTCHANGE</code> are masked off, and the field - <var class="Va">if_flags</var> in the interface structure is updated. - Finally, the driver <code class="Fn">if_ioctl</code>() routine is - called to perform any setup requested. - <p class="Pp"></p> - </dd> - <dt id="SIOCSIFMETRIC"><a class="permalink" href="#SIOCSIFMETRIC"><code class="Dv">SIOCSIFMETRIC</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="SIOCSIFPHYS"><a class="permalink" href="#SIOCSIFPHYS"><code class="Dv">SIOCSIFPHYS</code></a></dt> - <dd>Change interface metric or medium. Caller must have appropriate - privilege. - <p class="Pp"></p> - </dd> - <dt id="SIOCSIFMTU"><a class="permalink" href="#SIOCSIFMTU"><code class="Dv">SIOCSIFMTU</code></a></dt> - <dd>Change interface MTU. Caller must have appropriate privilege. MTU - values less than 72 or greater than 65535 are considered invalid. The - driver - <a class="permalink" href="#if_ioctl~2"><code class="Fn" id="if_ioctl~2">if_ioctl</code></a>() - routine is called to implement the change; it is responsible for any - additional sanity checking and for actually modifying the MTU in the - interface structure. - <p class="Pp"></p> - </dd> - <dt id="SIOCADDMULTI"><a class="permalink" href="#SIOCADDMULTI"><code class="Dv">SIOCADDMULTI</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="SIOCDELMULTI"><a class="permalink" href="#SIOCDELMULTI"><code class="Dv">SIOCDELMULTI</code></a></dt> - <dd>Add or delete permanent multicast group memberships on the interface. - Caller must have appropriate privilege. The - <a class="permalink" href="#if_addmulti"><code class="Fn" id="if_addmulti">if_addmulti</code></a>() - or <code class="Fn">if_delmulti</code>() function is called to perform - the operation; qq.v. - <p class="Pp"></p> - </dd> - <dt id="SIOCAIFADDR"><a class="permalink" href="#SIOCAIFADDR"><code class="Dv">SIOCAIFADDR</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="SIOCDIFADDR"><a class="permalink" href="#SIOCDIFADDR"><code class="Dv">SIOCDIFADDR</code></a></dt> - <dd>The socket's protocol control routine is called to implement the - requested action.</dd> - </dl> - </div> - </dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss">Interface Address Functions</h2> -<p class="Pp">Several functions exist to look up an interface address structure - given an address. - <a class="permalink" href="#ifa_ifwithaddr"><code class="Fn" id="ifa_ifwithaddr">ifa_ifwithaddr</code></a>() - returns an interface address with either a local address or a broadcast - address precisely matching the parameter <var class="Fa">addr</var>. - <a class="permalink" href="#ifa_ifwithdstaddr"><code class="Fn" id="ifa_ifwithdstaddr">ifa_ifwithdstaddr</code></a>() - returns an interface address for a point-to-point interface whose remote - (“destination”) address is <var class="Fa">addr</var> and a - fib is <var class="Fa">fib</var>. If <var class="Fa">fib</var> is - <code class="Dv">RT_ALL_FIBS</code>, then the first interface address - matching <var class="Fa">addr</var> will be returned.</p> -<p class="Pp" id="ifa_ifwithnet"><a class="permalink" href="#ifa_ifwithnet"><code class="Fn">ifa_ifwithnet</code></a>() - returns the most specific interface address which matches the specified - address, <var class="Fa">addr</var>, subject to its configured netmask, or a - point-to-point interface address whose remote address is - <var class="Fa">addr</var> if one is found. If - <var class="Fa">ignore_ptp</var> is true, skip point-to-point interface - addresses. The <var class="Fa">fib</var> parameter is handled the same way - as by - <a class="permalink" href="#ifa_ifwithdstaddr~2"><code class="Fn" id="ifa_ifwithdstaddr~2">ifa_ifwithdstaddr</code></a>().</p> -<p class="Pp" id="ifaof_ifpforaddr"><a class="permalink" href="#ifaof_ifpforaddr"><code class="Fn">ifaof_ifpforaddr</code></a>() - returns the most specific address configured on interface - <var class="Fa">ifp</var> which matches address <var class="Fa">addr</var>, - subject to its configured netmask. If the interface is point-to-point, only - an interface address whose remote address is precisely - <var class="Fa">addr</var> will be returned.</p> -<p class="Pp">All of these functions return a null pointer if no such address - can be found.</p> -</section> -<section class="Ss"> -<h2 class="Ss">Interface Multicast Address Functions</h2> -<p class="Pp">The - <a class="permalink" href="#if_addmulti~2"><code class="Fn" id="if_addmulti~2">if_addmulti</code></a>(), - <code class="Fn">if_delmulti</code>(), and - <code class="Fn">if_findmulti</code>() functions provide support for - requesting and relinquishing multicast group memberships, and for querying - an interface's membership list, respectively. The - <code class="Fn">if_addmulti</code>() function takes a pointer to an - interface, <var class="Fa">ifp</var>, and a generic address, - <var class="Fa">sa</var>. It also takes a pointer to a - <var class="Vt">struct ifmultiaddr *</var> which is filled in on successful - return with the address of the group membership control block. The - <code class="Fn">if_addmulti</code>() function performs the following - four-step process:</p> -<ol class="Bl-enum Bd-indent"> - <li id="if_resolvemulti">Call the interface's - <a class="permalink" href="#if_resolvemulti"><code class="Fn">if_resolvemulti</code></a>() - entry point to determine the link-layer address, if any, corresponding to - this membership request, and also to give the link layer an opportunity to - veto this membership request should it so desire.</li> - <li>Check the interface's group membership list for a pre-existing membership - for this group. If one is not found, allocate a new one; if one is, - increment its reference count.</li> - <li>If the <code class="Fn">if_resolvemulti</code>() routine returned a - link-layer address corresponding to the group, repeat the previous step - for that address as well.</li> - <li>If the interface's multicast address filter needs to be changed because a - new membership was added, call the interface's - <code class="Fn">if_ioctl</code>() routine (with a - <var class="Fa">cmd</var> argument of - <code class="Dv">SIOCADDMULTI</code>) to request that it do so.</li> -</ol> -<p class="Pp" id="if_delmulti">The - <a class="permalink" href="#if_delmulti"><code class="Fn">if_delmulti</code></a>() - function, given an interface <var class="Fa">ifp</var> and an address, - <var class="Fa">sa</var>, reverses this process. Both functions return zero - on success, or a standard error number on failure.</p> -<p class="Pp" id="if_findmulti">The - <a class="permalink" href="#if_findmulti"><code class="Fn">if_findmulti</code></a>() - function examines the membership list of interface <var class="Fa">ifp</var> - for an address matching <var class="Fa">sa</var>, and returns a pointer to - that <var class="Vt">struct ifmultiaddr</var> if one is found, else it - returns a null pointer.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ioctl(2)</a>, <a class="Xr">link_addr(3)</a>, - <a class="Xr">queue(3)</a>, <a class="Xr">sysctl(3)</a>, - <a class="Xr">bpf(4)</a>, <a class="Xr">ifmib(4)</a>, - <a class="Xr">lo(4)</a>, <a class="Xr">netintro(4)</a>, - <a class="Xr">polling(4)</a>, <a class="Xr">config(8)</a>, - <a class="Xr">ppp(8)</a>, <a class="Xr">mbuf(9)</a>, - <a class="Xr">rtentry(9)</a></p> -<p class="Pp"><cite class="Rs"><span class="RsA">Gary R. Wright</span> and - <span class="RsA">W. Richard Stevens</span>, <i class="RsB">TCP/IP - Illustrated</i>, <span class="RsV">Vol. 2</span>, - <span class="RsO">Addison-Wesley, ISBN 0-201-63354-X</span>.</cite></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Garrett A. - Wollman</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 10, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/inittodr.9 3.html b/static/freebsd/man9/inittodr.9 3.html deleted file mode 100644 index 1b0460ad..00000000 --- a/static/freebsd/man9/inittodr.9 3.html +++ /dev/null @@ -1,76 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">INITTODR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">INITTODR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">inittodr</code> — - <span class="Nd">initialize system time</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">inittodr</code>(<var class="Fa" style="white-space: nowrap;">time_t - base</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#inittodr"><code class="Fn" id="inittodr">inittodr</code></a>() - function determines the time and sets the system clock. It tries to pick the - correct time using a set of heuristics that examine the system's battery - backed clock and the time obtained from the root file system, as given in - <var class="Fa">base</var>. How the <var class="Fa">base</var> value is - obtained will vary depending on the root file system type. The heuristics - used include:</p> -<ul class="Bl-bullet"> - <li>If the battery-backed clock has a valid time, it is used.</li> - <li>If the battery-backed clock does not have a valid time, the time provided - in <var class="Fa">base</var> will be used.</li> -</ul> -<p class="Pp">Once a system time has been determined, it is stored in the - <var class="Va">time</var> variable.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DIAGNOSTICS"><a class="permalink" href="#DIAGNOSTICS">DIAGNOSTICS</a></h1> -<p class="Pp">The <code class="Fn">inittodr</code>() function prints diagnostic - messages if it has trouble figuring out the system time. Conditions that can - cause diagnostic messages to be printed include:</p> -<ul class="Bl-bullet"> - <li>The battery-backed clock's time appears nonsensical.</li> -</ul> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">resettodr(9)</a>, <a class="Xr">time(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">On many systems, <code class="Fn">inittodr</code>() has to convert - from a time expressed in terms of year, month, day, hours, minutes, and - seconds to <var class="Va">time</var>, expressed in seconds. Many of the - implementations could share code, but do not.</p> -<p class="Pp">Each system's heuristics for picking the correct time are slightly - different.</p> -<p class="Pp">The <span class="Ux">FreeBSD</span> implementation should do a - better job of validating the time provided in <var class="Fa">base</var> - when the battery-backed clock is unusable. Currently it unconditionally sets - the system clock to this value.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 22, 1997</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/insmntque.9 3.html b/static/freebsd/man9/insmntque.9 3.html deleted file mode 100644 index 94bac6db..00000000 --- a/static/freebsd/man9/insmntque.9 3.html +++ /dev/null @@ -1,84 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">INSMNTQUE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">INSMNTQUE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">insmntque</code>, - <code class="Nm">insmntque1</code> — <span class="Nd">associate a - vnode with a mount</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">insmntque</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct mount - *mp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">insmntque1</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">struct mount - *mp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#insmntque"><code class="Fn" id="insmntque">insmntque</code></a>() - function associates a vnode with a mount. This includes updating - <var class="Va">v_mount</var> for the vnode, and inserting the vnode into - the mount's vnode list.</p> -<p class="Pp">The indirect mount reference count, maintained as the count of the - vnodes owned by it, is incremented for each vnode added to the mount, and - that reference is decremented by <a class="Xr">vgone(9)</a>.</p> -<p class="Pp">The mount's interlock is held while the vnode is inserted. The - vnode must be exclusively locked.</p> -<p class="Pp" id="insmntque~2">On failure, - <a class="permalink" href="#insmntque~2"><code class="Fn">insmntque</code></a>() - resets vnode's operations vector to the vector of - <a class="Xr">deadfs(9)</a>, clears <var class="Va">v_data</var>, and then - calls <a class="Xr">vgone(9)</a> and <a class="Xr">vput(9)</a>. If more - elaborated cleanup after <code class="Fn">insmntque</code>() failure is - needed, the - <a class="permalink" href="#insmntque1"><code class="Fn" id="insmntque1">insmntque1</code></a>() - function may be used instead. It does not do any cleanup following a - failure, leaving all the work to the caller. In particular, the operations - vector <var class="Va">v_op</var> and <var class="Va">v_data</var> fields of - the vnode are kept intact.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">insmntque</code>() function will always - return 0, unless the file system is currently being unmounted in which case - it may return <code class="Dv">EBUSY</code>. Also, - <code class="Fn">insmntque</code>() may be forced to insert the vnode into - the mount's vnode list by setting the <var class="Va">VV_FORCEINSMQ</var> - flag in the vnode <var class="Va">v_flag</var>, even if the file system is - being unmounted.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vgone(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 24, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/intr_event.9 3.html b/static/freebsd/man9/intr_event.9 3.html deleted file mode 100644 index 07f157eb..00000000 --- a/static/freebsd/man9/intr_event.9 3.html +++ /dev/null @@ -1,341 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">INTR_EVENT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">INTR_EVENT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">intr_event_add_handler</code>, - <code class="Nm">intr_event_create</code>, - <code class="Nm">intr_event_destroy</code>, - <code class="Nm">intr_event_handle</code>, - <code class="Nm">intr_event_remove_handler</code>, - <code class="Nm">intr_priority</code> — <span class="Nd">kernel - interrupt handler and thread API</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/interrupt.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">intr_event_add_handler</code>(<var class="Fa">struct - intr_event *ie</var>, <var class="Fa">const char *name</var>, - <var class="Fa">driver_filter_t filter</var>, <var class="Fa">driver_intr_t - handler</var>, <var class="Fa">void *arg</var>, <var class="Fa">u_char - pri</var>, <var class="Fa">enum intr_type flags</var>, <var class="Fa">void - **cookiep</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">intr_event_create</code>(<var class="Fa">struct intr_event - **event</var>, <var class="Fa">void *source</var>, <var class="Fa">int - flags</var>, <var class="Fa">int irq</var>, <var class="Fa">void - (*pre_ithread)(void *)</var>, <var class="Fa">void (*post_ithread)(void - *)</var>, <var class="Fa">void (*post_filter)(void *)</var>, - <var class="Fa">int (*assign_cpu)(void *, int)</var>, <var class="Fa">const - char *fmt</var>, <var class="Fa">...</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">intr_event_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct - intr_event *ie</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">intr_event_handle</code>(<var class="Fa" style="white-space: nowrap;">struct - intr_event *ie</var>, <var class="Fa" style="white-space: nowrap;">struct - trapframe *frame</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">intr_event_remove_handler</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>);</p> -<p class="Pp"><var class="Ft">u_char</var> - <br/> - <code class="Fn">intr_priority</code>(<var class="Fa" style="white-space: nowrap;">enum - intr_type flags</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The interrupt event API provides methods to manage the - registration and execution of interrupt handlers and their associated thread - contexts.</p> -<p class="Pp">Each interrupt event in the system corresponds to a single - hardware or software interrupt source. Each interrupt event maintains a list - of interrupt handlers, sorted by priority, which will be invoked when - handling the event. An interrupt event will typically, but not always, have - an associated <a class="Xr">kthread(9)</a>, known as the interrupt thread. - Finally, each event contains optional callback functions which will be - invoked before and after the handler functions themselves.</p> -<p class="Pp">An interrupt handler contains two distinct handler functions: the - <i class="Em">filter</i> and the thread <i class="Em">handler</i>. The - <i class="Em">filter</i> function is run from interrupt context and is - intended to perform quick handling such as acknowledging or masking a - hardware interrupt, and queueing work for the ensuing thread - <i class="Em">handler</i>. Both functions are optional; each interrupt - handler may choose to register a filter, a thread handler, or both. Each - interrupt handler also consists of a name, a set of flags, and an opaque - argument which will be passed to both the <i class="Em">filter</i> and - <i class="Em">handler</i> functions.</p> -<section class="Ss"> -<h2 class="Ss" id="Handler_Constraints"><a class="permalink" href="#Handler_Constraints">Handler - Constraints</a></h2> -<p class="Pp">The <i class="Em">filter</i> function is executed inside a - <a class="Xr">critical(9)</a> section. Therefore, filters may not yield the - CPU for any reason, and may only use spin locks to access shared data. - Allocating memory within a filter is not permitted.</p> -<p class="Pp">The <i class="Em">handler</i> function executes from the context - of the associated interrupt kernel thread. Sleeping is not permitted, but - the interrupt thread may be preempted by higher priority threads. Thus, - threaded handler functions may obtain non-sleepable locks, as described in - <a class="Xr">locking(9)</a>. Any memory or zone allocations in an interrupt - thread must specify the <code class="Dv">M_NOWAIT</code> flag, and any - allocation errors must be handled.</p> -<p class="Pp">The exception to these constraints is software interrupt threads, - which are allowed to sleep but should be allocated and scheduled using the - <a class="Xr">swi(9)</a> interface.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Function_Descriptions"><a class="permalink" href="#Function_Descriptions">Function - Descriptions</a></h2> -<p class="Pp">The - <a class="permalink" href="#intr_event_create"><code class="Fn" id="intr_event_create">intr_event_create</code></a>() - function creates a new interrupt event. The <var class="Fa">event</var> - argument points to a <var class="Vt">struct intr_event</var> pointer that - will reference the newly created event upon success. The - <var class="Fa">source</var> argument is an opaque pointer which will be - passed to the <var class="Fa">pre_ithread</var>, - <var class="Fa">post_ithread</var>, and <var class="Fa">post_filter</var> - callbacks. The <var class="Fa">flags</var> argument is a mask of properties - of this thread. The only valid flag currently for - <code class="Fn">intr_event_create</code>() is - <code class="Dv">IE_SOFT</code> to specify that this interrupt thread is a - software interrupt. The <var class="Fa">enable</var> and - <var class="Fa">disable</var> arguments specify optional functions used to - enable and disable this interrupt thread's interrupt source. The - <var class="Fa">irq</var> argument is the unique interrupt vector number - corresponding to the event. The <var class="Fa">pre_ithread</var>, - <var class="Fa">post_ithread</var>, and <var class="Fa">post_filter</var> - arguments are callback functions that are invoked at different points while - handling an interrupt. This is described in more detail in the - <a class="Sx" href="#Handler_Callbacks">Handler Callbacks</a> section, - below. They may be <var class="Va">NULL</var> to specify no callback. The - <var class="Fa">assign_cpu</var> argument points to a callback function that - will be invoked when binding an interrupt to a particular CPU. It may be - <var class="Va">NULL</var> if binding is unsupported. The remaining - arguments form a <a class="Xr">printf(9)</a> argument list that is used to - build the base name of the new interrupt thread. The full name of an - interrupt thread is formed by concatenating the base name of the interrupt - thread with the names of all of its interrupt handlers.</p> -<p class="Pp" id="intr_event_destroy">The - <a class="permalink" href="#intr_event_destroy"><code class="Fn">intr_event_destroy</code></a>() - function destroys a previously created interrupt event by releasing its - resources. An interrupt event can only be destroyed if it has no handlers - remaining.</p> -<p class="Pp" id="intr_event_add_handler">The - <a class="permalink" href="#intr_event_add_handler"><code class="Fn">intr_event_add_handler</code></a>() - function adds a new handler to an existing interrupt event specified by - <var class="Fa">ie</var>. The <var class="Fa">name</var> argument specifies - a name for this handler. The <var class="Fa">filter</var> argument provide - the filter function to execute. The <var class="Fa">handler</var> argument - provides the handler function to be executed from the event's interrupt - thread. The <var class="Fa">arg</var> argument will be passed to the - <var class="Fa">filter</var> and <var class="Fa">handler</var> functions - when they are invoked. The <var class="Fa">pri</var> argument specifies the - priority of this handler, corresponding to the values defined in - <code class="In"><<a class="In">sys/priority.h</a>></code>. It - determines the order this handler is called relative to the other handlers - for this event, as well as the scheduling priority of the backing kernel - thread. <var class="Fa">flags</var> argument can be used to specify - properties of this handler as defined in - <code class="In"><<a class="In">sys/bus.h</a>></code>. If - <var class="Fa">cookiep</var> is not <code class="Dv">NULL</code>, then it - will be assigned a cookie that can be used later to remove this handler.</p> -<p class="Pp" id="intr_event_handle">The - <a class="permalink" href="#intr_event_handle"><code class="Fn">intr_event_handle</code></a>() - function is the main entry point into the interrupt handling code. It must - be called from an interrupt context. The function will execute all filter - handlers associated with the interrupt event <var class="Fa">ie</var>, and - schedule the associated interrupt thread to run, if applicable. The - <var class="Fa">frame</var> argument is used to pass a pointer to the - <var class="Vt">struct trapframe</var> containing the machine state at the - time of the interrupt. The main body of this function runs within a - <a class="Xr">critical(9)</a> section.</p> -<p class="Pp" id="intr_event_remove_handler">The - <a class="permalink" href="#intr_event_remove_handler"><code class="Fn">intr_event_remove_handler</code></a>() - function removes an interrupt handler from the interrupt event specified by - <var class="Fa">ie</var>. The <var class="Fa">cookie</var> argument, - obtained from <code class="Fn">intr_event_add_handler</code>(), identifies - the handler to remove.</p> -<p class="Pp" id="intr_priority">The - <a class="permalink" href="#intr_priority"><code class="Fn">intr_priority</code></a>() - function translates the <code class="Dv">INTR_TYPE_*</code> interrupt flags - into interrupt thread scheduling priorities.</p> -<p class="Pp">The interrupt flags not related to the type of a particular - interrupt (<code class="Dv">INTR_TYPE_*</code>) can be used to specify - additional properties of both hardware and software interrupt handlers. The - <code class="Dv">INTR_EXCL</code> flag specifies that this handler cannot - share an interrupt thread with another handler. The - <code class="Dv">INTR_MPSAFE</code> flag specifies that this handler is MP - safe in that it does not need the Giant mutex to be held while it is - executed. The <code class="Dv">INTR_ENTROPY</code> flag specifies that the - interrupt source this handler is tied to is a good source of entropy, and - thus that entropy should be gathered when an interrupt from the handler's - source triggers. Presently, the <code class="Dv">INTR_ENTROPY</code> flag is - not valid for software interrupt handlers. The - <code class="Dv">INTR_SLEEPABLE</code> flag specifies that the interrupt - ithread may sleep. Presently, the <code class="Dv">INTR_SLEEPABLE</code> - flag requires the <code class="Dv">INTR_EXCL</code> flag to be set.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Handler_Callbacks"><a class="permalink" href="#Handler_Callbacks">Handler - Callbacks</a></h2> -<p class="Pp">Each <var class="Vt">struct intr_event</var> is assigned three - optional callback functions when it is created: - <var class="Fa">pre_ithread</var>, <var class="Fa">post_ithread</var>, and - <var class="Fa">post_filter</var>. These callbacks are intended to be - defined by the interrupt controller driver, to allow for actions such as - masking and unmasking hardware interrupt signals.</p> -<p class="Pp">When an interrupt is triggered, all filters are run to determine - if any threaded interrupt handlers should be scheduled for execution by the - associated interrupt thread. If no threaded handlers are scheduled, the - <var class="Fa">post_filter</var> callback is invoked which should - acknowledge the interrupt and permit it to trigger in the future. If any - threaded handlers are scheduled, the <var class="Fa">pre_ithread</var> - callback is invoked instead. This handler should acknowledge the interrupt, - but it should also ensure that the interrupt will not fire continuously - until after the threaded handlers have executed. Typically this callback - masks level-triggered interrupts in an interrupt controller while leaving - edge-triggered interrupts alone. Once all threaded handlers have executed, - the <var class="Fa">post_ithread</var> callback is invoked from the - interrupt thread to enable future interrupts. Typically this callback - unmasks level-triggered interrupts in an interrupt controller.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">intr_event_add_handler</code>(), - <code class="Fn">intr_event_create</code>(), - <code class="Fn">intr_event_destroy</code>(), - <code class="Fn">intr_event_handle</code>(), and - <code class="Fn">intr_event_remove_handler</code>() functions return zero on - success and non-zero on failure. The <code class="Fn">intr_priority</code>() - function returns a process priority corresponding to the passed in interrupt - flags.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">The <a class="Xr">swi_add(9)</a> function demonstrates the use of - <code class="Fn">intr_event_create</code>() and - <code class="Fn">intr_event_add_handler</code>().</p> -<div class="Bd Pp Bd-indent Li"> -<pre>int -swi_add(struct intr_event **eventp, const char *name, driver_intr_t handler, - void *arg, int pri, enum intr_type flags, void **cookiep) -{ - struct intr_event *ie; - int error = 0; - - if (flags & INTR_ENTROPY) - return (EINVAL); - - ie = (eventp != NULL) ? *eventp : NULL; - - if (ie != NULL) { - if (!(ie->ie_flags & IE_SOFT)) - return (EINVAL); - } else { - error = intr_event_create(&ie, NULL, IE_SOFT, 0, - NULL, NULL, NULL, swi_assign_cpu, "swi%d:", pri); - if (error) - return (error); - if (eventp != NULL) - *eventp = ie; - } - if (handler != NULL) { - error = intr_event_add_handler(ie, name, NULL, handler, arg, - PI_SWI(pri), flags, cookiep); - } - return (error); -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp">The <code class="Fn">intr_event_add_handler</code>() function will - fail if:</p> -<dl class="Bl-tag"> - <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt> - <dd>The <var class="Fa">ie</var> or <var class="Fa">name</var> arguments are - <code class="Dv">NULL</code>.</dd> - <dt id="EINVAL~2">[<a class="permalink" href="#EINVAL~2"><code class="Er">EINVAL</code></a>]</dt> - <dd>The <var class="Fa">handler</var> and <var class="Fa">filter</var> - arguments are both <code class="Dv">NULL</code>.</dd> - <dt id="EINVAL~3">[<a class="permalink" href="#EINVAL~3"><code class="Er">EINVAL</code></a>]</dt> - <dd>The <code class="Dv">IH_EXCLUSIVE</code> flag is specified and the - interrupt thread <var class="Fa">ie</var> already has at least one - handler, or the interrupt thread <var class="Fa">ie</var> already has an - exclusive handler.</dd> -</dl> -<p class="Pp">The <code class="Fn">intr_event_create</code>() function will fail - if:</p> -<dl class="Bl-tag"> - <dt id="EINVAL~4">[<a class="permalink" href="#EINVAL~4"><code class="Er">EINVAL</code></a>]</dt> - <dd>A flag other than <code class="Dv">IE_SOFT</code> was specified in the - <var class="Fa">flags</var> parameter.</dd> -</dl> -<p class="Pp">The <code class="Fn">intr_event_destroy</code>() function will - fail if:</p> -<dl class="Bl-tag"> - <dt id="EINVAL~5">[<a class="permalink" href="#EINVAL~5"><code class="Er">EINVAL</code></a>]</dt> - <dd>The <var class="Fa">ie</var> argument is - <code class="Dv">NULL</code>.</dd> - <dt id="EBUSY">[<a class="permalink" href="#EBUSY"><code class="Er">EBUSY</code></a>]</dt> - <dd>The interrupt event pointed to by <var class="Fa">ie</var> has at least - one handler which has not been removed with - <code class="Fn">intr_event_remove_handler</code>().</dd> -</dl> -<p class="Pp">The <code class="Fn">intr_event_handle</code>() function will fail - if:</p> -<dl class="Bl-tag"> - <dt id="EINVAL~6">[<a class="permalink" href="#EINVAL~6"><code class="Er">EINVAL</code></a>]</dt> - <dd>The <var class="Fa">ie</var> argument is - <code class="Dv">NULL</code>.</dd> - <dt id="EINVAL~7">[<a class="permalink" href="#EINVAL~7"><code class="Er">EINVAL</code></a>]</dt> - <dd>There are no interrupt handlers assigned to <var class="Fa">ie</var>.</dd> - <dt id="EINVAL~8">[<a class="permalink" href="#EINVAL~8"><code class="Er">EINVAL</code></a>]</dt> - <dd>The interrupt was not acknowledged by any filter and has no associated - thread handler.</dd> -</dl> -<p class="Pp">The <code class="Fn">intr_event_remove_handler</code>() function - will fail if:</p> -<dl class="Bl-tag"> - <dt id="EINVAL~9">[<a class="permalink" href="#EINVAL~9"><code class="Er">EINVAL</code></a>]</dt> - <dd>The <var class="Fa">cookie</var> argument is - <code class="Dv">NULL</code>.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">critical(9)</a>, <a class="Xr">kthread(9)</a>, - <a class="Xr">locking(9)</a>, <a class="Xr">malloc(9)</a>, - <a class="Xr">swi(9)</a>, <a class="Xr">uma(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">Interrupt threads and their corresponding API first appeared in - <span class="Ux">FreeBSD 5.0</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 24, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/intro.9 3.html b/static/freebsd/man9/intro.9 3.html deleted file mode 100644 index 9c218a7a..00000000 --- a/static/freebsd/man9/intro.9 3.html +++ /dev/null @@ -1,387 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">INTRO(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">INTRO(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">intro</code> — - <span class="Nd">introduction to kernel programming interfaces</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Welcome to the <span class="Ux">FreeBSD</span> kernel - documentation. Outside the source code itself, this set of - <a class="Xr">man(1)</a> pages is the primary resource for information on - usage of the numerous programming interfaces available within the kernel. In - some cases, it is also a source of truth for the implementation details - and/or design decisions behind a particular subsystem or piece of code.</p> -<p class="Pp">The intended audience of this documentation is developers, and the - primary authors are also developers. It is written assuming a certain - familiarity with common programming or OS-level concepts and practices. - However, this documentation should also attempt to provide enough background - information that readers approaching a particular subsystem or interface for - the first time will be able to understand.</p> -<p class="Pp">To further set expectations, we acknowledge that kernel - documentation, like the source code itself, is forever a work-in-progress. - There will be large sections of the codebase whose documentation is subtly - or severely outdated, or missing altogether. This documentation is a - supplement to the source code, and cannot always be taken at face value.</p> -<p class="Pp">At its best, section 9 documentation will provide a description of - a particular piece of code that, paired with its implementation, fully - informs the reader of the intended and realized effects.</p> -<p class="Pp"><a class="Xr">man(1)</a> pages in this section most frequently - describe functions, but may also describe types, global variables, macros, - or high-level concepts.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CODING_GUIDELINES"><a class="permalink" href="#CODING_GUIDELINES">CODING - GUIDELINES</a></h1> -<p class="Pp">Code written for the <span class="Ux">FreeBSD</span> kernel is - expected to conform to the established style and coding conventions. Please - see <a class="Xr">style(9)</a> for a detailed set of rules and - guidelines.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="OVERVIEW"><a class="permalink" href="#OVERVIEW">OVERVIEW</a></h1> -<p class="Pp">Below is presented various subsystems.</p> -<section class="Ss"> -<h2 class="Ss" id="Data_Structures"><a class="permalink" href="#Data_Structures">Data - Structures</a></h2> -<p class="Pp">There are implementations for many well-known data structures - available in the kernel.</p> -<dl class="Bl-tag"> - <dt><a class="Xr">bitstring(3)</a></dt> - <dd>Simple bitmap implementation.</dd> - <dt><a class="Xr">counter(9)</a></dt> - <dd>An SMP-safe general-purpose counter implementation.</dd> - <dt><a class="Xr">hash(9)</a></dt> - <dd>Hash map implementation.</dd> - <dt><a class="Xr">nv(9)</a></dt> - <dd>Name/value pairs.</dd> - <dt><a class="Xr">queue(3)</a></dt> - <dd>Singly-linked and doubly-linked lists, and queues.</dd> - <dt><a class="Xr">refcount(9)</a></dt> - <dd>An SMP-safe implementation of reference counts.</dd> - <dt><a class="Xr">sbuf(9)</a></dt> - <dd>Dynamic string composition.</dd> - <dt><a class="Xr">sglist(9)</a></dt> - <dd>A scatter/gather list implementation.</dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss" id="Utility_Functions"><a class="permalink" href="#Utility_Functions">Utility - Functions</a></h2> -<p class="Pp">Functions or facilities of general usefulness or convenience. See - also the <a class="Sx" href="#Testing_and_Debugging_Tools">Testing and - Debugging Tools</a> or <a class="Sx" href="#Miscellaneous">Miscellaneous</a> - sub-sections below.</p> -<p class="Pp">Formatted output and logging functions are described by - <a class="Xr">printf(9)</a>.</p> -<p class="Pp">Endian-swapping functions: <a class="Xr">byteorder(9)</a>.</p> -<p class="Pp">Data output in hexadecimal format: - <a class="Xr">hexdump(9)</a>.</p> -<p class="Pp">A rich set of macros for declaring <a class="Xr">sysctl(8)</a> - variables and functions is described by <a class="Xr">sysctl(9)</a>.</p> -<p class="Pp" id="_Static_assert">Non-recoverable errors in the kernel should - trigger a <a class="Xr">panic(9)</a>. Run-time assertions can be verified - using the <a class="Xr">KASSERT(9)</a> macros. Compile-time assertions - should use - <a class="permalink" href="#_Static_assert"><code class="Fn">_Static_assert</code></a>().</p> -<p class="Pp">The SYSINIT framework provides macros for declaring functions that - will be executed during start-up and shutdown; see - <a class="Xr">SYSINIT(9)</a>.</p> -<p class="Pp">Deprecation messages may be emitted with - <a class="Xr">gone_in(9)</a>.</p> -<p class="Pp">A unit number facility is provided by - <a class="Xr">unr(9)</a>.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Synchronization_Primitives"><a class="permalink" href="#Synchronization_Primitives">Synchronization - Primitives</a></h2> -<p class="Pp">The <a class="Xr">locking(9)</a> man page gives an overview of the - various types of locks available in the kernel and advice on their - usage.</p> -<p class="Pp">Atomic primitives are described by - <a class="Xr">atomic(9)</a>.</p> -<p class="Pp">The <a class="Xr">epoch(9)</a> and <a class="Xr">smr(9)</a> - facilities are used to create lock-free data structures. There is also - <a class="Xr">seqc(9)</a>.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Memory_Management"><a class="permalink" href="#Memory_Management">Memory - Management</a></h2> -<p class="Pp">Dynamic memory allocations inside the kernel are generally done - using <a class="Xr">malloc(9)</a>. Frequently allocated objects may prefer - to use <a class="Xr">uma(9)</a>.</p> -<p class="Pp">Much of the virtual memory system operates on - <var class="Vt">vm_page_t</var> structures. The following functions are - documented:</p> -<div class="Bd Pp Bd-indent"><a class="Xr">vm_page_advise(9)</a>, - <a class="Xr">vm_page_aflag(9)</a>, <a class="Xr">vm_page_alloc(9)</a>, - <a class="Xr">vm_page_bits(9)</a>, <a class="Xr">vm_page_busy(9)</a>, - <a class="Xr">vm_page_deactivate(9)</a>, <a class="Xr">vm_page_free(9)</a>, - <a class="Xr">vm_page_grab(9)</a>, <a class="Xr">vm_page_insert(9)</a>, - <a class="Xr">vm_page_lookup(9)</a>, <a class="Xr">vm_page_rename(9)</a>, - <a class="Xr">vm_page_sbusy(9)</a>, <a class="Xr">vm_page_wire(9)</a></div> -<p class="Pp">Virtual address space maps are managed with the - <a class="Xr">vm_map(9)</a> API.</p> -<p class="Pp">The machine-dependent portion of the virtual memory stack is the - <a class="Xr">pmap(9)</a> module.</p> -<p class="Pp">Allocation policies for NUMA memory domains are managed with the - <a class="Xr">domainset(9)</a> API.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="File_Systems"><a class="permalink" href="#File_Systems">File - Systems</a></h2> -<p class="Pp">The kernel interface for file systems is <a class="Xr">VFS(9)</a>. - File system implementations register themselves with - <a class="Xr">vfsconf(9)</a>.</p> -<p class="Pp">The <a class="Xr">vnode(9)</a> is the abstract and - filesystem-independent representation of a file, directory, or other - file-like entity within the kernel.</p> -<p class="Pp">The implementation of access control lists for filesystems is - described by <a class="Xr">acl(9)</a>. Also - <a class="Xr">vaccess(9)</a>.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="I/O_and_Storage"><a class="permalink" href="#I/O_and_Storage">I/O - and Storage</a></h2> -<p class="Pp">The GEOM framework represents I/O requests using the - <a class="Xr">bio(9)</a> structure.</p> -<p class="Pp">Disk drivers connect themselves to GEOM using the - <a class="Xr">disk(9)</a> API.</p> -<p class="Pp">The <a class="Xr">devstat(9)</a> facility provides an interface - for recording device statistics in disk drivers.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Networking"><a class="permalink" href="#Networking">Networking</a></h2> -<p class="Pp">Much of the networking stack uses the <a class="Xr">mbuf(9)</a>, a - flexible memory management unit commonly used to store network packets.</p> -<p class="Pp">Network interfaces are implemented using the - <a class="Xr">ifnet(9)</a> API, which has functions for drivers and - consumers.</p> -<p class="Pp">A framework for managing packet output queues is described by - <a class="Xr">altq(9)</a>.</p> -<p class="Pp">To receive incoming packets, network protocols register themselves - with <a class="Xr">netisr(9)</a>.</p> -<p class="Pp">Virtualization of the network stack is provided by - <a class="Xr">VNET(9)</a>.</p> -<p class="Pp">The front-end for interfacing with network sockets from within the - kernel is described by <a class="Xr">socket(9)</a>. The back-end interface - for socket implementations is <a class="Xr">domain(9)</a>.</p> -<p class="Pp">The low-level packet filter interface is described by - <a class="Xr">pfil(9)</a>.</p> -<p class="Pp">The <a class="Xr">bpf(9)</a> interface provides a mechanism to - redirect packets to userspace.</p> -<p class="Pp">The subsystem for IEEE 802.11 wireless networking is described by - <a class="Xr">ieee80211(9)</a>.</p> -<p class="Pp">A framework for modular TCP implementations is described by - <a class="Xr">tcp_functions(9)</a>.</p> -<p class="Pp">A framework for modular congestion control algorithms is described - by <a class="Xr">mod_cc(9)</a>.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Device_Drivers"><a class="permalink" href="#Device_Drivers">Device - Drivers</a></h2> -<p class="Pp">Consult the <a class="Xr">device(9)</a> and - <a class="Xr">driver(9)</a> pages first.</p> -<p class="Pp">Most drivers act as devices, and provide a set of methods - implementing the device interface. This includes methods such as - <a class="Xr">DEVICE_PROBE(9)</a>, <a class="Xr">DEVICE_ATTACH(9)</a>, and - <a class="Xr">DEVICE_DETACH(9)</a>.</p> -<p class="Pp">In addition to devices, there are buses. Buses may have children, - in the form of devices or other buses. Bus drivers will implement additional - methods, such as <a class="Xr">BUS_ADD_CHILD(9)</a>, - <a class="Xr">BUS_READ_IVAR(9)</a>, or <a class="Xr">BUS_RESCAN(9)</a>.</p> -<p class="Pp">Buses often perform resource accounting on behalf of their - children. For this there is the <a class="Xr">rman(9)</a> API.</p> -<p class="Pp">Drivers can request and manage their resources (e.g. memory-space - or IRQ number) from their parent using the following sets of functions:</p> -<div class="Bd Pp Bd-indent"><a class="Xr">bus_alloc_resource(9)</a>, - <a class="Xr">bus_adjust_resource(9)</a>, - <a class="Xr">bus_get_resource(9)</a>, <a class="Xr">bus_map_resource(9)</a>, - <a class="Xr">bus_release_resource(9)</a>, - <a class="Xr">bus_set_resource(9)</a></div> -<p class="Pp">Direct Memory Access (DMA) is handled using the - <a class="Xr">busdma(9)</a> framework.</p> -<p class="Pp">Functions for accessing bus space (i.e. read/write) are provided - by <a class="Xr">bus_space(9)</a>.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Clocks_and_Timekeeping"><a class="permalink" href="#Clocks_and_Timekeeping">Clocks - and Timekeeping</a></h2> -<p class="Pp">The kernel clock frequency and overall system time model is - described by <a class="Xr">hz(9)</a>.</p> -<p class="Pp">A few global time variables, such as system up-time, are described - by <a class="Xr">time(9)</a>.</p> -<p class="Pp">Raw CPU cycles are provided by - <a class="Xr">get_cyclecount(9)</a>.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Userspace_Memory_Access"><a class="permalink" href="#Userspace_Memory_Access">Userspace - Memory Access</a></h2> -<p class="Pp">Direct read/write access of userspace memory from the kernel is - not permitted, and memory transactions that cross the kernel/user boundary - must go through one of several interfaces built for this task.</p> -<p class="Pp">Most device drivers use the <a class="Xr">uiomove(9)</a> set of - routines.</p> -<p class="Pp">Simpler primitives for reading or writing smaller chunks of memory - are described by <a class="Xr">casuword(9)</a>, <a class="Xr">copy(9)</a>, - <a class="Xr">fetch(9)</a>, and <a class="Xr">store(9)</a>.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Kernel_Threads,_Tasks,_and_Callbacks"><a class="permalink" href="#Kernel_Threads,_Tasks,_and_Callbacks">Kernel - Threads, Tasks, and Callbacks</a></h2> -<p class="Pp">Kernel threads and processes are created using the - <a class="Xr">kthread(9)</a> and <a class="Xr">kproc(9)</a> interfaces, - respectively.</p> -<p class="Pp">Where dedicated kernel threads are too heavyweight, there is also - the <a class="Xr">taskqueue(9)</a> interface.</p> -<p class="Pp">For low-latency callback handling, the - <a class="Xr">callout(9)</a> framework should be used.</p> -<p class="Pp">Dynamic handlers for pre-defined event hooks are registered and - invoked using the <a class="Xr">EVENTHANDLER(9)</a> API.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Thread_Switching_and_Scheduling"><a class="permalink" href="#Thread_Switching_and_Scheduling">Thread - Switching and Scheduling</a></h2> -<p class="Pp">The machine-independent interface to a context switch is - <a class="Xr">mi_switch(9)</a>.</p> -<p class="Pp">To prevent preemption, use a <a class="Xr">critical(9)</a> - section.</p> -<p class="Pp">To voluntarily yield the processor, use - <a class="Xr">kern_yield(9)</a>.</p> -<p class="Pp">The various functions which will deliberately put a thread to - sleep are described by <a class="Xr">sleep(9)</a>. Sleeping threads are - removed from the scheduler and placed on a - <a class="Xr">sleepqueue(9)</a>.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Processes_and_Signals"><a class="permalink" href="#Processes_and_Signals">Processes - and Signals</a></h2> -<p class="Pp">To locate a process or process group by its identifier, use - <a class="Xr">pfind(9)</a> and <a class="Xr">pgfind(9)</a>. Alternatively, - the <a class="Xr">pget(9)</a> function provides additional search - specificity.</p> -<p class="Pp">The "hold count" of a process can be manipulated with - <a class="Xr">PHOLD(9)</a>.</p> -<p class="Pp">The kernel interface for signals is described by - <a class="Xr">signal(9)</a>.</p> -<p class="Pp">Signals can be sent to processes or process groups using the - functions described by <a class="Xr">psignal(9)</a>.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Security"><a class="permalink" href="#Security">Security</a></h2> -<p class="Pp">See the overview in <a class="Xr">security(7)</a>.</p> -<p class="Pp">The basic structure for user credentials is <var class="Vt">struct - ucred</var>, managed by the <a class="Xr">ucred(9)</a> API. Thread - credentials are verified using <a class="Xr">priv(9)</a> to allow or deny - certain privileged actions.</p> -<p class="Pp">Policies influenced by <var class="Va">kern.securelevel</var> must - use the <a class="Xr">securelevel_gt(9)</a> or - <a class="Xr">securelevel_ge(9)</a> functions.</p> -<p class="Pp">The Mandatory Access Control (MAC) framework provides a wide set - of hooks, supporting dynamically-registered security modules; see - <a class="Xr">mac(9)</a>.</p> -<p class="Pp">Cryptographic services are provided by the OpenCrypto framework. - This API provides an interface for both consumers and crypto drivers; see - <a class="Xr">crypto(9)</a>.</p> -<p class="Pp">For information on random number generation, see - <a class="Xr">random(9)</a> and <a class="Xr">prng(9)</a>.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Kernel_Modules"><a class="permalink" href="#Kernel_Modules">Kernel - Modules</a></h2> -<p class="Pp">The interfaces for declaring loadable kernel modules are described - by <a class="Xr">module(9)</a>.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Interrupts"><a class="permalink" href="#Interrupts">Interrupts</a></h2> -<p class="Pp"><a class="Xr">intr_event(9)</a> describes the machine-independent - portion of the interrupt framework that supports registration and execution - of interrupt handlers.</p> -<p class="Pp">Software interrupts are provided by <a class="Xr">swi(9)</a>.</p> -<p class="Pp">Device drivers register their interrupt handlers using the - <a class="Xr">bus_setup_intr(9)</a> function.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Testing_and_Debugging_Tools"><a class="permalink" href="#Testing_and_Debugging_Tools">Testing - and Debugging Tools</a></h2> -<p class="Pp">A kernel test framework: <a class="Xr">kern_testfrwk(9)</a></p> -<p class="Pp">A facility for defining configurable fail points is described by - <a class="Xr">fail(9)</a>.</p> -<p class="Pp">Commands for the <a class="Xr">ddb(4)</a> kernel debugger are - defined with the <a class="Xr">DB_COMMAND(9)</a> family of macros.</p> -<p class="Pp">The <a class="Xr">ktr(4)</a> tracing facility adds static - tracepoints to many areas of the kernel. These tracepoints are defined using - the macros described by <a class="Xr">ktr(9)</a>.</p> -<p class="Pp">Static probes for DTrace are defined using the - <a class="Xr">SDT(9)</a> macros.</p> -<p class="Pp">Stack traces can be captured and printed with the - <a class="Xr">stack(9)</a> API.</p> -<p class="Pp">Kernel sanitizers can perform additional compiler-assisted checks - against memory use/access. These runtimes are capable of detecting - difficult-to-identify classes of bugs, at the cost of a large overhead. The - Kernel Address Sanitizer <a class="Xr">KASAN(9)</a> and Kernel Memory - Sanitizer <a class="Xr">KMSAN(9)</a> are supported.</p> -<p class="Pp">The <a class="Xr">LOCK_PROFILING(9)</a> kernel config option - enables extra code to assist with profiling and/or debugging lock - performance.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Driver_Tools"><a class="permalink" href="#Driver_Tools">Driver - Tools</a></h2> -<p class="Pp">Defined functions/APIs for specific types of devices.</p> -<dl class="Bl-tag"> - <dt><a class="Xr">iflib(9)</a></dt> - <dd>Programming interface for <a class="Xr">iflib(4)</a> based network - drivers.</dd> - <dt><a class="Xr">pci(9)</a></dt> - <dd>Peripheral Component Interconnect (PCI) and PCI Express (PCIe) programming - API.</dd> - <dt><a class="Xr">pwmbus(9)</a></dt> - <dd>Pulse-Width Modulation (PWM) bus interface methods.</dd> - <dt><a class="Xr">usbdi(9)</a></dt> - <dd>Universal Serial Bus programming interface.</dd> - <dt><a class="Xr">superio(9)</a></dt> - <dd>Functions for Super I/O controller devices.</dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss" id="Miscellaneous"><a class="permalink" href="#Miscellaneous">Miscellaneous</a></h2> -<p class="Pp">Dynamic per-CPU variables: <a class="Xr">dpcpu(9)</a>.</p> -<p class="Pp">CPU bitmap management: <a class="Xr">cpuset(9)</a>.</p> -<p class="Pp">Kernel environment management: <a class="Xr">getenv(9)</a>.</p> -<p class="Pp">Contexts for CPU floating-point registers are managed by the - <a class="Xr">fpu_kern(9)</a> facility.</p> -<p class="Pp">For details on the shutdown/reboot procedure and available - shutdown hooks, see <a class="Xr">reboot(9)</a>.</p> -<p class="Pp">A facility for asynchronous logging to files from within the - kernel is provided by <a class="Xr">alq(9)</a>.</p> -<p class="Pp">The <a class="Xr">osd(9)</a> framework provides a mechanism to - dynamically extend core structures in a way that preserves KBI. See the - <a class="Xr">hhook(9)</a> and <a class="Xr">khelp(9)</a> APIs for - information on how this is used.</p> -<p class="Pp">The kernel object implementation is described by - <a class="Xr">kobj(9)</a>.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">man(1)</a>, <a class="Xr">style(9)</a></p> -<p class="Pp"><cite class="Rs"><span class="RsT">The FreeBSD Architecture - Handbook</span>, - <a class="RsU" href="https://docs.freebsd.org/en/books/arch-handbook/">https://docs.freebsd.org/en/books/arch-handbook/</a>.</cite></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 30, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/kasan.9 3.html b/static/freebsd/man9/kasan.9 3.html deleted file mode 100644 index c5bf9093..00000000 --- a/static/freebsd/man9/kasan.9 3.html +++ /dev/null @@ -1,137 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">KASAN(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">KASAN(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">KASAN</code> — <span class="Nd">Kernel - Address SANitizer</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp">The <span class="Pa">GENERIC-KASAN</span> kernel configuration can - be used to compile a KASAN-enabled kernel using - <span class="Pa">GENERIC</span> as a base configuration. Alternately, to - compile KASAN into the kernel, place the following line in your kernel - configuration file:</p> -<div class="Bd Pp Bd-indent"><code class="Cd">options KASAN</code></div> -<p class="Pp"> - <br/> - <code class="In">#include <<a class="In">sys/asan.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kasan_mark</code>(<var class="Fa" style="white-space: nowrap;">const - void *addr</var>, <var class="Fa" style="white-space: nowrap;">size_t - size</var>, <var class="Fa" style="white-space: nowrap;">size_t - redzsize</var>, <var class="Fa" style="white-space: nowrap;">uint8_t - code</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><code class="Nm">KASAN</code> is a subsystem which leverages - compiler instrumentation to detect invalid memory accesses in the kernel. - Currently it is implemented on the amd64 and arm64 platforms.</p> -<p class="Pp" id="kmem_malloc">When <code class="Nm">KASAN</code> is compiled - into the kernel, the compiler is configured to emit function calls upon - every memory access. The functions are implemented by - <code class="Nm">KASAN</code> and permit run-time detection of several types - of bugs including use-after-frees, double frees and frees of invalid - pointers, and out-of-bounds accesses. These protections apply to memory - allocated by <a class="Xr">uma(9)</a>, <a class="Xr">malloc(9)</a> and - related functions, and - <a class="permalink" href="#kmem_malloc"><code class="Fn">kmem_malloc</code></a>() - and related functions, as well as global variables and kernel stacks. - <code class="Nm">KASAN</code> is conservative and will not detect all - instances of these types of bugs. Memory accesses through the kernel map are - sanitized, but accesses via the direct map are not. When - <code class="Nm">KASAN</code> is configured, the kernel aims to minimize its - use of the direct map.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp"><code class="Nm">KASAN</code> is implemented using compiler - instrumentation and a kernel runtime. When a kernel is built with the KASAN - option enabled, the compiler inserts function calls before most memory - accesses in the generated code. The runtime implements the corresponding - functions, which decide whether a given access is valid. If not, the runtime - prints a warning or panics the kernel, depending on the value of the - <a class="permalink" href="#debug.kasan.panic_on_violation"><b class="Sy" id="debug.kasan.panic_on_violation">debug.kasan.panic_on_violation</b></a> - sysctl/tunable.</p> -<p class="Pp" id="debug.kasan.disable=1">The <code class="Nm">KASAN</code> - runtime in a KASAN-configured kernel can be disabled by setting the loader - tunable - <a class="permalink" href="#debug.kasan.disable=1"><b class="Sy">debug.kasan.disable=1</b></a>.</p> -<p class="Pp">The <code class="Nm">KASAN</code> runtime works by maintaining a - shadow map for the kernel map. There exists a linear mapping between - addresses in the kernel map and addresses in the shadow map. The shadow map - is used to store information about the current state of allocations from the - kernel map. For example, when a buffer is returned by - <a class="Xr">malloc(9)</a>, the corresponding region of the shadow map is - marked to indicate that the buffer is valid. When it is freed, the shadow - map is updated to mark the buffer as invalid. Accesses to the buffer are - intercepted by the <code class="Nm">KASAN</code> runtime and validated using - the contents of the shadow map.</p> -<p class="Pp">Upon booting, all kernel memory is marked as valid. Kernel - allocators must mark cached but free buffers as invalid, and must mark them - valid before freeing the kernel virtual address range. This slightly reduces - the effectiveness of <code class="Nm">KASAN</code> but simplifies its - maintenance and integration into the kernel.</p> -<p class="Pp">Updates to the shadow map are performed by calling - <code class="Fn">kasan_mark</code>(). Parameter <var class="Fa">addr</var> - is the address of the buffer whose shadow is to be updated, - <var class="Fa">size</var> is the usable size of the buffer, and - <var class="Fa">redzsize</var> is the full size of the buffer allocated from - lower layers of the system. <var class="Fa">redzsize</var> must be greater - than or equal to <var class="Fa">size</var>. In some cases kernel allocators - will return a buffer larger than that requested by the consumer; the unused - space at the end is referred to as a red zone and is always marked as - invalid. <var class="Fa">code</var> allows the caller to specify an - identifier used when marking a buffer as invalid. The identifier is included - in any reports generated by <code class="Nm">KASAN</code> and helps identify - the source of the invalid access. For instance, when an item is freed to a - <a class="Xr">uma(9)</a> zone, the item is marked with - <code class="Dv">KASAN_UMA_FREED</code>. See - <code class="In"><<a class="In">sys/asan.h</a>></code> for the - available identifiers. If the entire buffer is to be marked valid, i.e., - <var class="Fa">size</var> and <var class="Fa">redzsize</var> are equal, - <var class="Fa">code</var> should be 0.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">build(7)</a>, <a class="Xr">KMSAN(9)</a>, - <a class="Xr">malloc(9)</a>, <a class="Xr">memguard(9)</a>, - <a class="Xr">redzone(9)</a>, <a class="Xr">uma(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp"><code class="Nm">KASAN</code> was ported from - <span class="Ux">NetBSD</span> and first appeared in - <span class="Ux">FreeBSD 13.1</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">Accesses to kernel memory outside of the kernel map are ignored by - the <code class="Nm">KASAN</code> runtime. When - <code class="Nm">KASAN</code> is configured, the kernel memory allocators - are configured to use the kernel map, but some uses of the direct map - remain. For example, on amd64 and arm64, accesses to page table pages are - not tracked.</p> -<p class="Pp">Some kernel memory allocators explicitly permit accesses after an - object has been freed. These cannot be sanitized by - <code class="Nm">KASAN</code>. For example, memory from all - <a class="Xr">uma(9)</a> zones initialized with the - <code class="Dv">UMA_ZONE_NOFREE</code> flag are not sanitized.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 13, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/kern_reboot.9 3.html b/static/freebsd/man9/kern_reboot.9 3.html deleted file mode 100644 index 126aea0f..00000000 --- a/static/freebsd/man9/kern_reboot.9 3.html +++ /dev/null @@ -1,228 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">REBOOT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">REBOOT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">kern_reboot</code>, - <code class="Nm">shutdown_nice</code> — <span class="Nd">reboot, - halt, or power off the system</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/reboot.h</a>></code></p> -<p class="Pp"><var class="Vt">extern int rebooting;</var></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kern_reboot</code>(<var class="Fa" style="white-space: nowrap;">int - howto</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">shutdown_nice</code>(<var class="Fa" style="white-space: nowrap;">int - howto</var>);</p> -<p class="Pp"><code class="In">#include - <<a class="In">sys/eventhandler.h</a>></code></p> -<p class="Pp"><code class="Fn">EVENTHANDLER_REGISTER</code>(<var class="Fa" style="white-space: nowrap;">shutdown_pre_sync</var>, - <var class="Fa" style="white-space: nowrap;">shutdown_fn</var>, - <var class="Fa" style="white-space: nowrap;">private</var>, - <var class="Fa" style="white-space: nowrap;">priority</var>);</p> -<p class="Pp"><code class="Fn">EVENTHANDLER_REGISTER</code>(<var class="Fa" style="white-space: nowrap;">shutdown_post_sync</var>, - <var class="Fa" style="white-space: nowrap;">shutdown_fn</var>, - <var class="Fa" style="white-space: nowrap;">private</var>, - <var class="Fa" style="white-space: nowrap;">priority</var>);</p> -<p class="Pp"><code class="Fn">EVENTHANDLER_REGISTER</code>(<var class="Fa" style="white-space: nowrap;">shutdown_final</var>, - <var class="Fa" style="white-space: nowrap;">shutdown_fn</var>, - <var class="Fa" style="white-space: nowrap;">private</var>, - <var class="Fa" style="white-space: nowrap;">priority</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#kern_reboot"><code class="Fn" id="kern_reboot">kern_reboot</code></a>() - function handles final system shutdown, and either halts, reboots, or powers - down the system. The exact action to be taken is determined by the flags - passed in <var class="Fa">howto</var>.</p> -<p class="Pp">The relevant flags are:</p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt id="RB_HALT"><a class="permalink" href="#RB_HALT"><code class="Dv">RB_HALT</code></a></dt> - <dd>Halt the system in-place rather than restarting.</dd> - <dt id="RB_POWEROFF"><a class="permalink" href="#RB_POWEROFF"><code class="Dv">RB_POWEROFF</code></a></dt> - <dd>Power down the system rather than restarting.</dd> - <dt id="RB_POWERCYCLE"><a class="permalink" href="#RB_POWERCYCLE"><code class="Dv">RB_POWERCYCLE</code></a></dt> - <dd>Request a power-cycle in addition to restarting.</dd> - <dt id="RB_NOSYNC"><a class="permalink" href="#RB_NOSYNC"><code class="Dv">RB_NOSYNC</code></a></dt> - <dd>Do not sync filesystems during shutdown.</dd> - <dt id="RB_DUMP"><a class="permalink" href="#RB_DUMP"><code class="Dv">RB_DUMP</code></a></dt> - <dd>Dump kernel memory during shutdown.</dd> -</dl> -</div> -<p class="Pp">The <var class="Fa">howto</var> field, and its full list of flags - are described in additional detail by <a class="Xr">reboot(2)</a>.</p> -<p class="Pp" id="kern_reboot~2"><a class="permalink" href="#kern_reboot~2"><code class="Fn">kern_reboot</code></a>() - performs the following actions:</p> -<ol class="Bl-enum Bd-indent"> - <li>Set the <var class="Va">rebooting</var> variable to - <code class="Dv">1</code>, indicating that the reboot process has begun - and cannot be stopped.</li> - <li>Unless the <code class="Dv">RB_NOSYNC</code> flag is set in - <var class="Fa">howto</var>, sync and unmount the system's disks by - calling <a class="Xr">vfs_unmountall(9)</a>.</li> - <li id="doadump">If rebooting after a panic (<code class="Dv">RB_DUMP</code> - is set in <var class="Fa">howto</var>, but <code class="Dv">RB_HALT</code> - is not set), initiate a system crash dump via - <a class="permalink" href="#doadump"><code class="Fn">doadump</code></a>().</li> - <li>Print a message indicating that the system is about to be halted or - rebooted, and a report of the total system uptime.</li> - <li>Execute all registered shutdown hooks. See - <a class="Sx" href="#SHUTDOWN_HOOKS">SHUTDOWN HOOKS</a> below.</li> - <li id="cpu_reset">As a last resort, if none of the shutdown hooks handled the - reboot, call the machine-dependent - <a class="permalink" href="#cpu_reset"><code class="Fn">cpu_reset</code></a>() - function. In the unlikely case that this is not supported, - <code class="Fn">kern_reboot</code>() will loop forever at the end of the - function. This requires a manual reset of the system.</li> -</ol> -<p class="Pp" id="kern_reboot~3"><a class="permalink" href="#kern_reboot~3"><code class="Fn">kern_reboot</code></a>() - may be called from a typical kernel execution context, when the system is - running normally. It may also be called as the final step of a kernel panic, - or from the kernel debugger. Therefore, the code in this function is subject - to restrictions described by the - <a class="Sx" href="#EXECUTION_CONTEXT">EXECUTION CONTEXT</a> section of the - <a class="Xr">panic(9)</a> man page.</p> -<p class="Pp" id="shutdown_nice">The - <a class="permalink" href="#shutdown_nice"><code class="Fn">shutdown_nice</code></a>() - function is the intended path for performing a clean reboot or shutdown when - the system is operating under normal conditions. Calling this function will - send a signal to the <a class="Xr">init(8)</a> process, instructing it to - perform a shutdown. When <a class="Xr">init(8)</a> has cleanly terminated - its children, it will perform the <a class="Xr">reboot(2)</a> system call, - which in turn calls <code class="Fn">kern_reboot</code>().</p> -<p class="Pp" id="shutdown_nice~2">If - <a class="permalink" href="#shutdown_nice~2"><code class="Fn">shutdown_nice</code></a>() - is called before the <a class="Xr">init(8)</a> process has been spawned, or - if the system has panicked or otherwise halted, - <code class="Fn">kern_reboot</code>() will be called directly.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SHUTDOWN_HOOKS"><a class="permalink" href="#SHUTDOWN_HOOKS">SHUTDOWN - HOOKS</a></h1> -<p class="Pp">The system defines three separate - <a class="Xr">EVENTHANDLER(9)</a> events, which are invoked successively - during the shutdown procedure. These are - <var class="Va">shutdown_pre_sync</var>, - <var class="Va">shutdown_post_sync</var>, and - <var class="Va">shutdown_final</var>. They will be executed unconditionally - in the listed order. Handler functions registered to any of these events - will receive the value of <var class="Fa">howto</var> as their second - argument, which may be used to decide what action to take.</p> -<p class="Pp">The <var class="Va">shutdown_pre_sync</var> event is invoked - before syncing filesystems to disk. It enables any action or state - transition that must happen before this point to take place.</p> -<p class="Pp">The <var class="Va">shutdown_post_sync</var> event is invoked at - the point immediately after the filesystem sync has finished. It enables, - for example, disk drivers to complete the sync by flushing their cache to - disk. Note that this event still takes place before the optional kernel core - dump.</p> -<p class="Pp" id="kern_reboot~4">The <var class="Va">shutdown_final</var> event - is invoked as the very last step of - <a class="permalink" href="#kern_reboot~4"><code class="Fn">kern_reboot</code></a>(). - Drivers and subsystems such as <a class="Xr">acpi(4)</a> can register - handlers to this event that will perform the actual reboot, power-off, or - halt.</p> -<p class="Pp">Notably, the <var class="Va">shutdown_final</var> event is also - the point at which all kernel modules will have their shutdown - (<code class="Dv">MOD_SHUTDOWN</code>) hooks executed, and when the - <a class="Xr">DEVICE_SHUTDOWN(9)</a> method will be executed recursively on - all devices.</p> -<p class="Pp" id="kern_reboot~5">All event handlers, like - <a class="permalink" href="#kern_reboot~5"><code class="Fn">kern_reboot</code></a>() - itself, may be run in either normal shutdown context or a kernel panic or - debugger context. Handler functions are expected to take care not to trigger - recursive panics.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">kern_reboot</code>() function does not - return.</p> -<p class="Pp">The <code class="Fn">shutdown_nice</code>() function will usually - return to its caller, having initiated the asynchronous system shutdown. It - will not return when called from a panic or debugger context, or during - early boot.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">A hypothetical driver, foo(4), defines a - <var class="Va">shutdown_final</var> event handler that can handle system - power-off by writing to a device register, but it does not handle halt or - reset.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>void -foo_poweroff_handler(struct void *arg, int howto) -{ - struct foo_softc *sc = arg; - uint32_t reg; - - if ((howto & RB_POWEROFF) != 0) { - reg = FOO_POWEROFF; - WRITE4(sc, FOO_POWEROFF_REG, reg); - } -}</pre> -</div> -<p class="Pp">The handler is then registered in the device attach routine:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>int -foo_attach(device_t dev) -{ - struct foo_softc *sc; - - ... - - /* Pass the device's software context as the private arg. */ - EVENTHANDLER_REGISTER(shutdown_final, foo_poweroff_handler, sc, - SHUTDOWN_PRI_DEFAULT); - - ... -}</pre> -</div> -<p class="Pp">This <var class="Va">shutdown_final</var> handler uses the - <code class="Dv">RB_NOSYNC</code> flag to detect that a panic or other - unusual condition has occurred, and returns early:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>void -bar_shutdown_final(struct void *arg, int howto) -{ - - if ((howto & RB_NOSYNC) != 0) - return; - - /* Some code that is not panic-safe. */ - ... -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">reboot(2)</a>, <a class="Xr">init(8)</a>, - <a class="Xr">DEVICE_SHUTDOWN(9)</a>, <a class="Xr">EVENTHANDLER(9)</a>, - <a class="Xr">module(9)</a>, <a class="Xr">panic(9)</a>, - <a class="Xr">vfs_unmountall(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 23, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/kern_testfrwk.9 3.html b/static/freebsd/man9/kern_testfrwk.9 3.html deleted file mode 100644 index 71687c21..00000000 --- a/static/freebsd/man9/kern_testfrwk.9 3.html +++ /dev/null @@ -1,150 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">KERN_TESTFRWK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">KERN_TESTFRWK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">kern_testfrwk</code> — <span class="Nd">A - kernel testing framework</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp">kldload kern_testfrwk</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">So what is this sys/tests directory in the kernel all about?</p> -<p class="Pp">Have you ever wanted to test a part of the - <span class="Ux">FreeBSD</span> kernel in some way and you had no real way - from user-land to make what you want to occur happen? Say an error path or - situation where locking occurs in a particular manner that happens only once - in a blue moon?</p> -<p class="Pp">If so, then the kernel test framework is just what you are looking - for. It is designed to help you create the situation you want.</p> -<p class="Pp">There are two components to the system: the test framework and - your test. This document will describe both components and use the test - submitted with the initial commit of this code to discuss the test - (<a class="Xr">callout_test(4)</a>). All of the tests become kernel loadable - modules. The test you write should have a dependency on the test framework. - That way it will be loaded automatically with your test. For example, you - can see how to do this in the bottom of callout_test.c in - <span class="Pa">sys/tests/callout_test/callout_test.c</span>.</p> -<p class="Pp">The framework itself is in - <span class="Pa">sys/tests/framework/kern_testfrwk.c</span>. Its job is to - manage the tests that are loaded. (More than one can be loaded.) The idea is - pretty simple; you load the test framework and then load your test.</p> -<p class="Pp" id="kern_testframework_register">When your test loads, you - register your tests with the kernel test framework. You do that through a - call to - <a class="permalink" href="#kern_testframework_register"><code class="Fn">kern_testframework_register</code></a>(). - Usually this is done at the module load event as shown below:</p> -<div class="Bd Pp Bd-indent Li"> -<pre> switch (type) { - case MOD_LOAD: - err = kern_testframework_register("callout_test", - run_callout_test);</pre> -</div> -<p class="Pp" id="run_callout_test">Here the test is "callout_test" - and it is registered to run the function - <a class="permalink" href="#run_callout_test"><code class="Fn">run_callout_test</code></a>() - passing it a <var class="Fa">struct kern_test *ptr</var>. The - <var class="Vt">kern_test</var> structure is defined in - <span class="Pa">kern_testfrwk.h</span>.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct kern_test { - char name[TEST_NAME_LEN]; - int num_threads; /* Fill in how many threads you want */ - int tot_threads_running; /* Private to framework */ - uint8_t test_options[TEST_OPTION_SPACE]; -};</pre> -</div> -<p class="Pp">The user sends this structure down via a sysctl to start your - test. He or she places the same name you registered - ("callout_test" in our example) in the <var class="Va">name</var> - field. The user can also set the number of threads to run with - <var class="Va">num_threads</var>.</p> -<p class="Pp" id="run_callout_test~2">The framework will start the requested - number of kernel threads, all running your test at the same time. The user - does not specify anything in <var class="Va">tot_threads_running</var>; it - is private to the framework. As the framework calls each of your tests, it - will set the <var class="Va">tot_threads_running</var> to the index of the - thread that your call is made from. For example, if the user sets - <var class="Va">num_threads</var> to 2, then the function - <a class="permalink" href="#run_callout_test~2"><code class="Fn">run_callout_test</code></a>() - will be called once with <var class="Va">tot_threads_running</var> to 0, and - a second time with <var class="Va">tot_threads_running</var> set to 1.</p> -<p class="Pp">The <var class="Va">test_options</var> field is a test-specific - set of information that is an opaque blob. It is passed in from user space - and has a maximum size of 256 bytes. You can pass arbitrary test input in - the space. In the case of callout_test we reshape that to:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct callout_test { - int number_of_callouts; - int test_number; -};</pre> -</div> -<p class="Pp" id="run_callout_test~3">So the first lines of - <a class="permalink" href="#run_callout_test~3"><code class="Fn">run_callout_test</code></a>() - does the following to get at the user specific data:</p> -<div class="Bd Pp Bd-indent Li"> -<pre> struct callout_test *u; - size_t sz; - int i; - struct callout_run *rn; - int index = test->tot_threads_running; - - u = (struct callout_test *)test->test_options;</pre> -</div> -<p class="Pp">That way it can access: <var class="Va">u->test_number</var> - (there are two types of tests provided with this test) and - <var class="Va">u->number_of_callouts</var> (how many simultaneous - callouts to run).</p> -<p class="Pp" id="callout_async_drain">Your test can do anything with these - bytes. So the callout_test in question wants to create a situation where - multiple callouts are all run, that is the - <var class="Va">number_of_callouts</var>, and it tries to cancel the callout - with the new - <a class="permalink" href="#callout_async_drain"><code class="Fn">callout_async_drain</code></a>(). - The threads do this by acquiring the lock in question, and then starting - each of the callouts. It waits for the callouts to all go off (the executor - spins waits). This forces the situation that the callouts have expired and - are all waiting on the lock that the executor holds. After the callouts are - all blocked, the executor calls - <code class="Fn">callout_async_drain</code>() on each callout and releases - the lock.</p> -<p class="Pp">After all the callouts are done, a total status is printed showing - the results via <a class="Xr">printf(9)</a>. The human tester can run - <a class="Xr">dmesg(8)</a> to see the results. In this case it is expected - that if you are running test 0, all the callouts expire on the same CPU so - only one callout_drain function would have been called. the number of - zero_returns should match the number of callout_drains that were called, - i.e., 1. The one_returns should be the remainder of the callouts. If the - test number was 1, the callouts were spread across all CPUs. The number of - zero_returns will again match the number of drain calls made which matches - the number of CPUs that were put in use.</p> -<p class="Pp">More than one thread can be used with this test, though in the - example case it is probably not necessary.</p> -<p class="Pp">You should not need to change the framework. Just add tests and - register them after loading.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The kernel test framework was written by <span class="An">Randall - Stewart</span> - <<a class="Mt" href="mailto:rrs@FreeBSD.org">rrs@FreeBSD.org</a>> with - help from - <br/> - <span class="An">John Mark Gurney</span> - <<a class="Mt" href="mailto:jmg@FreeBSD.org">jmg@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 12, 2015</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/kern_yield.9 3.html b/static/freebsd/man9/kern_yield.9 3.html deleted file mode 100644 index 2be273f0..00000000 --- a/static/freebsd/man9/kern_yield.9 3.html +++ /dev/null @@ -1,114 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">KERN_YIELD(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">KERN_YIELD(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">kern_yield</code>, - <code class="Nm">maybe_yield</code>, <code class="Nm">should_yield</code> - — <span class="Nd">functions for yielding execution of the current - thread</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kern_yield</code>(<var class="Fa" style="white-space: nowrap;">int - prio</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">maybe_yield</code>();</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">should_yield</code>();</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#kern_yield"><code class="Fn" id="kern_yield">kern_yield</code></a>() - function causes the currently running thread to voluntarily, but - unconditionally, surrender its execution to the scheduler. The - <var class="Va">prio</var> argument specifies the scheduling priority to be - assigned before the context switch, which has an influence on when execution - will resume. Note that the requested priority will take effect until the - thread returns to usermode, after which its base user priority will be - restored. Valid values for <var class="Va">prio</var> are any of the - <code class="Dv">PRI_*</code> values defined in - <code class="In"><<a class="In">sys/priority.h</a>></code>, as well as - the following special values:</p> -<dl class="Bl-tag"> - <dt id="PRI_USER"><a class="permalink" href="#PRI_USER"><code class="Dv">PRI_USER</code></a></dt> - <dd>Schedule the thread with its base user priority; the value corresponding - to <a class="Xr">setpriority(2)</a> / <a class="Xr">nice(3)</a>.</dd> - <dt id="PRI_UNCHANGED"><a class="permalink" href="#PRI_UNCHANGED"><code class="Dv">PRI_UNCHANGED</code></a></dt> - <dd>Yield the thread without changing its priority.</dd> -</dl> -<p class="Pp" id="should_yield">The - <a class="permalink" href="#should_yield"><code class="Fn">should_yield</code></a>() - function checks if sufficient time has passed since the thread's last - voluntary context switch that yielding would be a useful service to other - threads. It returns <var class="Va">true</var> when this is the case. See - <a class="Sx" href="#USAGE_NOTES">USAGE NOTES</a> for an elaboration of what - this means.</p> -<p class="Pp" id="maybe_yield">The - <a class="permalink" href="#maybe_yield"><code class="Fn">maybe_yield</code></a>() - function is a helper function for the common task of optionally yielding the - processor. Internally, - <code class="Fn">kern_yield</code>(<var class="Fa">PRI_USER</var>) will be - called if <code class="Fn">should_yield</code>() returns - <var class="Va">true</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="USAGE_NOTES"><a class="permalink" href="#USAGE_NOTES">USAGE - NOTES</a></h1> -<p class="Pp">Although the kernel supports preemption, this is usually reserved - for high-priority realtime or interrupt threads. Kernel worker threads and - timesharing threads are not guaranteed to preempt each another. Thus, - threads executing in the kernel are expected to behave cooperatively with - respect to other threads in the system. The yield functions are mostly - intended to be used by threads which perform a lot of work inside the - kernel. For example: <code class="Fn">maybe_yield</code>() is called by the - <code class="Dv">vlnru</code> process each time it reclaims a vnode.</p> -<p class="Pp" id="kern_yield~2">The scheduler aims to identify threads which - monopolize the CPU, and will schedule them with decreased priority. Threads - which regularly yield the processor will be given the chance to run more - often. The possibly surprising effect of this is that, depending on the - disposition of other threads on the CPU's runqueue, a call to - <a class="permalink" href="#kern_yield~2"><code class="Fn">kern_yield</code></a>() - does not guarantee that the yielding thread will be taken off the CPU.</p> -<p class="Pp" id="kern_yield~3">With the above considerations in mind, it is - advised that code written using - <a class="permalink" href="#kern_yield~3"><code class="Fn">kern_yield</code></a>() - be measured to confirm that its use has a positive effect on relevant - performance or responsiveness metrics. Switching thread contexts has a - non-zero cost, and thus yielding the processor too eagerly could have a - negative impact on performance.</p> -<p class="Pp">Additionally, since yielding is a cooperative action, it is - advised that the yielding thread release any locks that it may be holding, - when possible. Otherwise, threads which have been given the chance to run - could end up waiting on the yielding thread to release the lock, largely - defeating the purpose of the yield.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">setpriority(2)</a>, <a class="Xr">nice(3)</a>, - <a class="Xr">mi_switch(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Mitchell - Horne</span> - <<a class="Mt" href="mailto:mhorne@FreeBSD.org">mhorne@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 30, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/kernacc.9 4.html b/static/freebsd/man9/kernacc.9 4.html deleted file mode 100644 index eb0269e2..00000000 --- a/static/freebsd/man9/kernacc.9 4.html +++ /dev/null @@ -1,71 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">KERNACC(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">KERNACC(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">kernacc</code>, <code class="Nm">useracc</code> - — <span class="Nd">check memory regions for accessibility</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/proc.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_extern.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">kernacc</code>(<var class="Fa" style="white-space: nowrap;">void - *addr</var>, <var class="Fa" style="white-space: nowrap;">int len</var>, - <var class="Fa" style="white-space: nowrap;">int rw</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">useracc</code>(<var class="Fa" style="white-space: nowrap;">void - *addr</var>, <var class="Fa" style="white-space: nowrap;">int len</var>, - <var class="Fa" style="white-space: nowrap;">int rw</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#kernacc"><code class="Fn" id="kernacc">kernacc</code></a>() - and - <a class="permalink" href="#useracc"><code class="Fn" id="useracc">useracc</code></a>() - functions check whether operations of the type specified in - <var class="Fa">rw</var> are permitted in the range of virtual addresses - given by <var class="Fa">addr</var> and <var class="Fa">len</var>. The - possible values of <var class="Fa">rw</var> are any bitwise combination of - <code class="Dv">VM_PROT_READ</code>, <code class="Dv">VM_PROT_WRITE</code> - and <code class="Dv">VM_PROT_EXECUTE</code>. - <code class="Fn">kernacc</code>() checks addresses in the kernel address - space, while <code class="Fn">useracc</code>() considers - <var class="Fa">addr</var> to represent an user space address. The process - context to use for this operation is taken from the global variable - <var class="Va">curproc</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Both functions return boolean true if the type of access specified - by <var class="Fa">rw</var> is permitted. Otherwise boolean false is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">The process pointer should be passed in as an argument to - <code class="Fn">useracc</code>().</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 16, 1996</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/kernel_mount.9 3.html b/static/freebsd/man9/kernel_mount.9 3.html deleted file mode 100644 index 9e4c49e7..00000000 --- a/static/freebsd/man9/kernel_mount.9 3.html +++ /dev/null @@ -1,160 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">KERNEL_MOUNT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">KERNEL_MOUNT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">free_mntarg</code>, - <code class="Nm">kernel_mount</code>, <code class="Nm">mount_arg</code>, - <code class="Nm">mount_argb</code>, <code class="Nm">mount_argf</code>, - <code class="Nm">mount_argsu</code> — <span class="Nd">functions - provided as part of the kernel mount interface</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">free_mntarg</code>(<var class="Fa" style="white-space: nowrap;">struct - mntarg *ma</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">kernel_mount</code>(<var class="Fa" style="white-space: nowrap;">struct - mntarg *ma</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">struct mntarg *</var> - <br/> - <code class="Fn">mount_arg</code>(<var class="Fa">struct mntarg *ma</var>, - <var class="Fa">const char *name</var>, <var class="Fa">const void - *val</var>, <var class="Fa">int len</var>);</p> -<p class="Pp"><var class="Ft">struct mntarg *</var> - <br/> - <code class="Fn">mount_argb</code>(<var class="Fa" style="white-space: nowrap;">struct - mntarg *ma</var>, <var class="Fa" style="white-space: nowrap;">int - flag</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">struct mntarg *</var> - <br/> - <code class="Fn">mount_argf</code>(<var class="Fa" style="white-space: nowrap;">struct - mntarg *ma</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">const char - *fmt</var>, <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">struct mntarg *</var> - <br/> - <code class="Fn">mount_argsu</code>(<var class="Fa">struct mntarg *ma</var>, - <var class="Fa">const char *name</var>, <var class="Fa">const void - *val</var>, <var class="Fa">int len</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#kernel_mount"><code class="Fn" id="kernel_mount">kernel_mount</code></a>() - family of functions are provided as an API for building a list of mount - arguments which will be used to mount file systems from inside the kernel. - By accumulating a list of arguments, the API takes shape and provides the - information necessary for the kernel to control the - <a class="Xr">mount(8)</a> utility. When an error occurs, the process will - stop. This will not cause a <a class="Xr">panic(9)</a>.</p> -<p class="Pp">The header of the structure is stored in - <span class="Pa">src/sys/kern/vfs_mount.c</span> which permits automatic - structure creation to ease the mount process. Memory allocation must always - be freed when the entire process is complete, it is an error otherwise.</p> -<p class="Pp" id="free_mntarg">The - <a class="permalink" href="#free_mntarg"><code class="Fn">free_mntarg</code></a>() - function is used to free or clear the <var class="Vt">mntarg</var> - structure.</p> -<p class="Pp" id="kernel_mount~2">The - <a class="permalink" href="#kernel_mount~2"><code class="Fn">kernel_mount</code></a>() - function pulls information from the structure to perform the mount request - on a given file system. Additionally, the - <code class="Fn">kernel_mount</code>() function always calls the - <code class="Fn">free_mntarg</code>() function. If <var class="Fa">ma</var> - contains any error code generated during the construction, that code will be - called and the file system mount will not be attempted.</p> -<p class="Pp" id="mount_arg">The - <a class="permalink" href="#mount_arg"><code class="Fn">mount_arg</code></a>() - function takes a plain argument and crafts parts of the structure with - regards to various mount options. If the length is a value less than 0, - <a class="Xr">strlen(3)</a> is used. This argument will be referenced until - either <code class="Fn">free_mntarg</code>() or - <code class="Fn">kernel_mount</code>() is called.</p> -<p class="Pp" id="mount_argb">The - <a class="permalink" href="#mount_argb"><code class="Fn">mount_argb</code></a>() - function is used to add boolean arguments to the structure. The - <var class="Fa">flag</var> is the boolean value and - <var class="Fa">name</var> must start with - "<code class="Li">no</code>", otherwise a panic will occur.</p> -<p class="Pp" id="mount_argf">The - <a class="permalink" href="#mount_argf"><code class="Fn">mount_argf</code></a>() - function adds <a class="Xr">printf(9)</a> style arguments to the current - structure.</p> -<p class="Pp" id="mount_argsu">The - <a class="permalink" href="#mount_argsu"><code class="Fn">mount_argsu</code></a>() - function will add arguments to the structure from a userland string.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">An example of the <code class="Fn">*_cmount</code>() function:</p> -<div class="Bd Pp Li"> -<pre>static int -msdosfs_cmount(struct mntarg *ma, void *data, int flags, struct thread *td) -{ - struct msdosfs_args args; - int error; - - if (data == NULL) - return (EINVAL); - error = copyin(data, &args, sizeof(args)); - if (error) - return (error); - - ma = mount_argsu(ma, "from", args.fspec, MAXPATHLEN); - ma = mount_arg(ma, "export", &args.export, sizeof(args.export)); - ma = mount_argf(ma, "uid", "%d", args.uid); - ma = mount_argf(ma, "gid", "%d", args.gid); - ma = mount_argf(ma, "mask", "%d", args.mask); - ma = mount_argf(ma, "dirmask", "%d", args.dirmask); - - ma = mount_argb(ma, args.flags & MSDOSFSMNT_SHORTNAME, "noshortname"); - ma = mount_argb(ma, args.flags & MSDOSFSMNT_LONGNAME, "nolongname"); - ma = mount_argb(ma, !(args.flags & MSDOSFSMNT_NOWIN95), "nowin95"); - ma = mount_argb(ma, args.flags & MSDOSFSMNT_KICONV, "nokiconv"); - - ma = mount_argsu(ma, "cs_win", args.cs_win, MAXCSLEN); - ma = mount_argsu(ma, "cs_dos", args.cs_dos, MAXCSLEN); - ma = mount_argsu(ma, "cs_local", args.cs_local, MAXCSLEN); - - error = kernel_mount(ma, flags); - - return (error); -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">VFS(9)</a>, <a class="Xr">VFS_MOUNT(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Fn">kernel_mount</code>() family of functions and - this manual page first appeared in <span class="Ux">FreeBSD 6.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Fn">kernel_mount</code>() family of functions and - API was developed by <span class="An">Poul-Henning Kamp</span> - <<a class="Mt" href="mailto:phk@FreeBSD.org">phk@FreeBSD.org</a>>. - This manual page was written by <span class="An">Tom Rhodes</span> - <<a class="Mt" href="mailto:trhodes@FreeBSD.org">trhodes@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 20, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/khelp.9 3.html b/static/freebsd/man9/khelp.9 3.html deleted file mode 100644 index 1dd082c7..00000000 --- a/static/freebsd/man9/khelp.9 3.html +++ /dev/null @@ -1,309 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">KHELP(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">KHELP(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">khelp</code>, - <code class="Nm">khelp_init_osd</code>, - <code class="Nm">khelp_destroy_osd</code>, - <code class="Nm">khelp_get_id</code>, <code class="Nm">khelp_get_osd</code>, - <code class="Nm">khelp_add_hhook</code>, - <code class="Nm">khelp_remove_hhook</code>, - <code class="Nm">KHELP_DECLARE_MOD</code>, - <code class="Nm">KHELP_DECLARE_MOD_UMA</code> — - <span class="Nd">Kernel Helper Framework</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/khelp.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">sys/module_khelp.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <code class="Fn">khelp_init_osd</code>(<var class="Fa" style="white-space: nowrap;">uint32_t - classes</var>, <var class="Fa" style="white-space: nowrap;">struct osd - *hosd</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <code class="Fn">khelp_destroy_osd</code>(<var class="Fa" style="white-space: nowrap;">struct - osd *hosd</var>);</p> -<p class="Pp"><var class="Ft">int32_t</var> - <code class="Fn">khelp_get_id</code>(<var class="Fa" style="white-space: nowrap;">char - *hname</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <code class="Fn">khelp_get_osd</code>(<var class="Fa" style="white-space: nowrap;">struct - osd *hosd</var>, <var class="Fa" style="white-space: nowrap;">int32_t - id</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <code class="Fn">khelp_add_hhook</code>(<var class="Fa" style="white-space: nowrap;">const - struct hookinfo *hki</var>, - <var class="Fa" style="white-space: nowrap;">uint32_t flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <code class="Fn">khelp_remove_hhook</code>(<var class="Fa" style="white-space: nowrap;">const - struct hookinfo *hki</var>);</p> -<p class="Pp"><code class="Fn">KHELP_DECLARE_MOD</code>(<var class="Fa" style="white-space: nowrap;">hname</var>, - <var class="Fa" style="white-space: nowrap;">hdata</var>, - <var class="Fa" style="white-space: nowrap;">hhooks</var>, - <var class="Fa" style="white-space: nowrap;">version</var>);</p> -<p class="Pp"><code class="Fn">KHELP_DECLARE_MOD_UMA</code>(<var class="Fa" style="white-space: nowrap;">hname</var>, - <var class="Fa" style="white-space: nowrap;">hdata</var>, - <var class="Fa" style="white-space: nowrap;">hhooks</var>, - <var class="Fa" style="white-space: nowrap;">version</var>, - <var class="Fa" style="white-space: nowrap;">ctor</var>, - <var class="Fa" style="white-space: nowrap;">dtor</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><code class="Nm">khelp</code> provides a framework for managing - <code class="Nm">khelp</code> modules, which indirectly use the - <a class="Xr">hhook(9)</a> KPI to register their hook functions with hook - points of interest within the kernel. Khelp modules aim to provide a - structured way to dynamically extend the kernel at runtime in an ABI - preserving manner. Depending on the subsystem providing hook points, a - <code class="Nm">khelp</code> module may be able to associate per-object - data for maintaining relevant state between hook calls. The - <a class="Xr">hhook(9)</a> and <code class="Nm">khelp</code> frameworks are - tightly integrated and anyone interested in <code class="Nm">khelp</code> - should also read the <a class="Xr">hhook(9)</a> manual page thoroughly.</p> -<section class="Ss"> -<h2 class="Ss" id="Information_for_Khelp_Module_Implementors"><a class="permalink" href="#Information_for_Khelp_Module_Implementors">Information - for Khelp Module Implementors</a></h2> -<p class="Pp"><code class="Nm">khelp</code> modules are represented within the - <code class="Nm">khelp</code> framework by a <var class="Vt">struct - helper</var> which has the following members:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct helper { - int (*mod_init) (void); - int (*mod_destroy) (void); -#define HELPER_NAME_MAXLEN 16 - char h_name[HELPER_NAME_MAXLEN]; - uma_zone_t h_zone; - struct hookinfo *h_hooks; - uint32_t h_nhooks; - uint32_t h_classes; - int32_t h_id; - volatile uint32_t h_refcount; - uint16_t h_flags; - TAILQ_ENTRY(helper) h_next; -};</pre> -</div> -<p class="Pp">Modules must instantiate a <var class="Vt">struct helper</var>, - but are only required to set the <var class="Va">h_classes</var> field, and - may optionally set the <var class="Va">h_flags</var>, - <var class="Va">mod_init</var> and <var class="Va">mod_destroy</var> fields - where required. The framework takes care of all other fields and modules - should refrain from manipulating them. Using the C99 designated initialiser - feature to set fields is encouraged.</p> -<p class="Pp">If specified, the <var class="Va">mod_init</var> function will be - run by the <code class="Nm">khelp</code> framework prior to completing the - registration process. Returning a non-zero value from the - <var class="Va">mod_init</var> function will abort the registration process - and fail to load the module. If specified, the - <var class="Va">mod_destroy</var> function will be run by the - <code class="Nm">khelp</code> framework during the deregistration process, - after the module has been deregistered by the <code class="Nm">khelp</code> - framework. The return value is currently ignored. Valid - <code class="Nm">khelp</code> classes are defined in - <code class="In"><<a class="In">sys/khelp.h</a>></code>. Valid flags - are defined in - <code class="In"><<a class="In">sys/module_khelp.h</a>></code>. The - HELPER_NEEDS_OSD flag should be set in the <var class="Va">h_flags</var> - field if the <code class="Nm">khelp</code> module requires persistent - per-object data storage. There is no programmatic way (yet) to check if a - <code class="Nm">khelp</code> class provides the ability for - <code class="Nm">khelp</code> modules to associate persistent per-object - data, so a manual check is required.</p> -<p class="Pp" id="KHELP_DECLARE_MOD">The - <a class="permalink" href="#KHELP_DECLARE_MOD"><code class="Fn">KHELP_DECLARE_MOD</code></a>() - and <code class="Fn">KHELP_DECLARE_MOD_UMA</code>() macros provide - convenient wrappers around the <a class="Xr">DECLARE_MODULE(9)</a> macro, - and are used to register a <code class="Nm">khelp</code> module with the - <code class="Nm">khelp</code> framework. - <code class="Fn">KHELP_DECLARE_MOD_UMA</code>() should only be used by - modules which require the use of persistent per-object storage i.e. modules - which set the HELPER_NEEDS_OSD flag in their <var class="Vt">struct - helper</var>'s <var class="Va">h_flags</var> field.</p> -<p class="Pp" id="KHELP_DECLARE_MOD_UMA">The first four arguments common to both - macros are as follows. The <var class="Fa">hname</var> argument specifies - the unique <a class="Xr">ascii(7)</a> name for the - <code class="Nm">khelp</code> module. It should be no longer than - HELPER_NAME_MAXLEN-1 characters in length. The <var class="Fa">hdata</var> - argument is a pointer to the module's <var class="Vt">struct helper</var>. - The <var class="Fa">hhooks</var> argument points to a static array of - <var class="Vt">struct hookinfo</var> structures. The array should contain a - <var class="Vt">struct hookinfo</var> for each <a class="Xr">hhook(9)</a> - point the module wishes to hook, even when using the same hook function - multiple times for different <a class="Xr">hhook(9)</a> points. The - <var class="Fa">version</var> argument specifies a version number for the - module which will be passed to <a class="Xr">MODULE_VERSION(9)</a>. The - <a class="permalink" href="#KHELP_DECLARE_MOD_UMA"><code class="Fn">KHELP_DECLARE_MOD_UMA</code></a>() - macro takes the additional <var class="Fa">ctor</var> and - <var class="Fa">dtor</var> arguments, which specify optional - <a class="Xr">uma(9)</a> constructor and destructor functions. NULL should - be passed where the functionality is not required.</p> -<p class="Pp" id="khelp_get_id">The - <a class="permalink" href="#khelp_get_id"><code class="Fn">khelp_get_id</code></a>() - function returns the numeric identifier for the - <code class="Nm">khelp</code> module with name - <var class="Fa">hname</var>.</p> -<p class="Pp" id="khelp_get_osd">The - <a class="permalink" href="#khelp_get_osd"><code class="Fn">khelp_get_osd</code></a>() - function is used to obtain the per-object data pointer for a specified - <code class="Nm">khelp</code> module. The <var class="Fa">hosd</var> - argument is a pointer to the underlying subsystem object's - <var class="Vt">struct osd</var>. This is provided by the - <a class="Xr">hhook(9)</a> framework when calling into a - <code class="Nm">khelp</code> module's hook function. The - <var class="Fa">id</var> argument specifies the numeric identifier for the - <code class="Nm">khelp</code> module to extract the data pointer from - <var class="Fa">hosd</var> for. The <var class="Fa">id</var> is obtained - using the <code class="Fn">khelp_get_id</code>() function.</p> -<p class="Pp" id="khelp_add_hhook">The - <a class="permalink" href="#khelp_add_hhook"><code class="Fn">khelp_add_hhook</code></a>() - and - <a class="permalink" href="#khelp_remove_hhook"><code class="Fn" id="khelp_remove_hhook">khelp_remove_hhook</code></a>() - functions allow a <code class="Nm">khelp</code> module to dynamically - hook/unhook <a class="Xr">hhook(9)</a> points at run time. The - <var class="Fa">hki</var> argument specifies a pointer to a - <var class="Vt">struct hookinfo</var> which encapsulates the required - information about the <a class="Xr">hhook(9)</a> point and hook function - being manipulated. The HHOOK_WAITOK flag may be passed in via the - <var class="Fa">flags</var> argument of - <code class="Fn">khelp_add_hhook</code>() if <a class="Xr">malloc(9)</a> is - allowed to sleep waiting for memory to become available.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Integrating_Khelp_Into_a_Kernel_Subsystem"><a class="permalink" href="#Integrating_Khelp_Into_a_Kernel_Subsystem">Integrating - Khelp Into a Kernel Subsystem</a></h2> -<p class="Pp">Most of the work required to allow <code class="Nm">khelp</code> - modules to do useful things relates to defining and instantiating suitable - <a class="Xr">hhook(9)</a> points for <code class="Nm">khelp</code> modules - to hook into. The only additional decision a subsystem needs to make is - whether it wants to allow <code class="Nm">khelp</code> modules to associate - persistent per-object data. Providing support for persistent data storage - can allow <code class="Nm">khelp</code> modules to perform more complex - functionality which may be desirable. Subsystems which want to allow Khelp - modules to associate persistent per-object data with one of the subsystem's - data structures need to make the following two key changes:</p> -<ul class="Bl-bullet"> - <li>Embed a <var class="Vt">struct osd</var> pointer in the structure - definition for the object.</li> - <li>Add calls to <code class="Fn">khelp_init_osd</code>() and - <code class="Fn">khelp_destroy_osd</code>() to the subsystem code paths - which are responsible for respectively initialising and destroying the - object.</li> -</ul> -<p class="Pp" id="khelp_init_osd">The - <a class="permalink" href="#khelp_init_osd"><code class="Fn">khelp_init_osd</code></a>() - function initialises the per-object data storage for all currently loaded - <code class="Nm">khelp</code> modules of appropriate classes which have set - the HELPER_NEEDS_OSD flag in their <var class="Va">h_flags</var> field. The - <var class="Fa">classes</var> argument specifies a bitmask of - <code class="Nm">khelp</code> classes which this subsystem associates with. - If a <code class="Nm">khelp</code> module matches any of the classes in the - bitmask, that module will be associated with the object. The - <var class="Fa">hosd</var> argument specifies the pointer to the object's - <var class="Vt">struct osd</var> which will be used to provide the - persistent storage for use by <code class="Nm">khelp</code> modules.</p> -<p class="Pp" id="khelp_destroy_osd">The - <a class="permalink" href="#khelp_destroy_osd"><code class="Fn">khelp_destroy_osd</code></a>() - function frees all memory that was associated with an object's - <var class="Vt">struct osd</var> by a previous call to - <code class="Fn">khelp_init_osd</code>(). The <var class="Fa">hosd</var> - argument specifies the pointer to the object's <var class="Vt">struct - osd</var> which will be purged in preparation for destruction.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp"><code class="Nm">khelp</code> modules are protected from being - prematurely unloaded by a reference count. The count is incremented each - time a subsystem calls <code class="Fn">khelp_init_osd</code>() causing - persistent storage to be allocated for the module, and decremented for each - corresponding call to <code class="Fn">khelp_destroy_osd</code>(). Only when - a module's reference count has dropped to zero can the module be - unloaded.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">khelp_init_osd</code>() function returns zero - if no errors occurred. It returns ENOMEM if a <code class="Nm">khelp</code> - module which requires per-object storage fails to allocate the necessary - memory.</p> -<p class="Pp">The <code class="Fn">khelp_destroy_osd</code>() function only - returns zero to indicate that no errors occurred.</p> -<p class="Pp">The <code class="Fn">khelp_get_id</code>() function returns the - unique numeric identifier for the registered <code class="Nm">khelp</code> - module with name <var class="Fa">hname</var>. It return -1 if no module with - the specified name is currently registered.</p> -<p class="Pp">The <code class="Fn">khelp_get_osd</code>() function returns the - pointer to the <code class="Nm">khelp</code> module's persistent object - storage memory. If the module identified by <var class="Fa">id</var> does - not have persistent object storage registered with the object's - <var class="Fa">hosd</var> <var class="Vt">struct osd</var>, NULL is - returned.</p> -<p class="Pp">The <code class="Fn">khelp_add_hhook</code>() function returns - zero if no errors occurred. It returns ENOENT if it could not find the - requested <a class="Xr">hhook(9)</a> point. It returns ENOMEM if - <a class="Xr">malloc(9)</a> failed to allocate memory. It returns EEXIST if - attempting to register the same hook function more than once for the same - <a class="Xr">hhook(9)</a> point.</p> -<p class="Pp">The <code class="Fn">khelp_remove_hhook</code>() function returns - zero if no errors occurred. It returns ENOENT if it could not find the - requested <a class="Xr">hhook(9)</a> point.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">A well commented example Khelp module can be found at: - <span class="Pa">/usr/share/examples/kld/khelp/h_example.c</span></p> -<p class="Pp">The Enhanced Round Trip Time (ERTT) <a class="Xr">h_ertt(4)</a> - <code class="Nm">khelp</code> module provides a more complex example of what - is possible.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">h_ertt(4)</a>, <a class="Xr">hhook(9)</a>, - <a class="Xr">osd(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ACKNOWLEDGEMENTS"><a class="permalink" href="#ACKNOWLEDGEMENTS">ACKNOWLEDGEMENTS</a></h1> -<p class="Pp">Development and testing of this software were made possible in - part by grants from the FreeBSD Foundation and Cisco University Research - Program Fund at Community Foundation Silicon Valley.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">khelp</code> kernel helper framework first - appeared in <span class="Ux">FreeBSD 9.0</span>.</p> -<p class="Pp">The <code class="Nm">khelp</code> framework was first released in - 2010 by Lawrence Stewart whilst studying at Swinburne University of - Technology's Centre for Advanced Internet Architectures, Melbourne, - Australia. More details are available at:</p> -<p class="Pp">http://caia.swin.edu.au/urp/newtcp/</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">khelp</code> framework was written by - <span class="An">Lawrence Stewart</span> - <<a class="Mt" href="mailto:lstewart@FreeBSD.org">lstewart@FreeBSD.org</a>>.</p> -<p class="Pp">This manual page was written by <span class="An">David - Hayes</span> - <<a class="Mt" href="mailto:david.hayes@ieee.org">david.hayes@ieee.org</a>> - and <span class="An">Lawrence Stewart</span> - <<a class="Mt" href="mailto:lstewart@FreeBSD.org">lstewart@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 1, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/kmsan.9 3.html b/static/freebsd/man9/kmsan.9 3.html deleted file mode 100644 index f90b3f3c..00000000 --- a/static/freebsd/man9/kmsan.9 3.html +++ /dev/null @@ -1,314 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">KMSAN(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">KMSAN(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">KMSAN</code> — <span class="Nd">Kernel - Memory SANitizer</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp">The <span class="Pa">GENERIC-KMSAN</span> kernel configuration can - be used to compile a KMSAN-enabled kernel using - <span class="Pa">GENERIC</span> as a base configuration. Alternately, to - compile KMSAN into the kernel, place the following line in your kernel - configuration file:</p> -<div class="Bd Pp Bd-indent"><code class="Cd">options KMSAN</code></div> -<p class="Pp"> - <br/> - <code class="In">#include <<a class="In">sys/msan.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kmsan_mark</code>(<var class="Fa" style="white-space: nowrap;">const - void *addr</var>, <var class="Fa" style="white-space: nowrap;">size_t - size</var>, <var class="Fa" style="white-space: nowrap;">uint8_t - code</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kmsan_orig</code>(<var class="Fa" style="white-space: nowrap;">const - void *addr</var>, <var class="Fa" style="white-space: nowrap;">size_t - size</var>, <var class="Fa" style="white-space: nowrap;">int type</var>, - <var class="Fa" style="white-space: nowrap;">uintptr_t pc</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kmsan_check</code>(<var class="Fa" style="white-space: nowrap;">const - void *addr</var>, <var class="Fa" style="white-space: nowrap;">size_t - size</var>, <var class="Fa" style="white-space: nowrap;">const char - *descr</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kmsan_check_bio</code>(<var class="Fa" style="white-space: nowrap;">const - struct bio *</var>, <var class="Fa" style="white-space: nowrap;">const char - *descr</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kmsan_check_ccb</code>(<var class="Fa" style="white-space: nowrap;">const - union ccb *</var>, <var class="Fa" style="white-space: nowrap;">const char - *descr</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kmsan_check_mbuf</code>(<var class="Fa" style="white-space: nowrap;">const - struct mbuf *</var>, <var class="Fa" style="white-space: nowrap;">const char - *descr</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kmsan_check_uio</code>(<var class="Fa" style="white-space: nowrap;">const - struct uio *</var>, <var class="Fa" style="white-space: nowrap;">const char - *descr</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><code class="Nm">KMSAN</code> is a subsystem which leverages - compiler instrumentation to detect uses of uninitialized memory in the - kernel. Currently it is implemented only on the amd64 and arm64 - platforms.</p> -<p class="Pp" id="memcpy">When <code class="Nm">KMSAN</code> is compiled into - the kernel, the compiler is configured to emit function calls preceding - memory accesses. The functions are implemented by the - <code class="Nm">KMSAN</code> runtime component and use hidden, - byte-granular shadow state to determine whether the source operand has been - initialized. When uninitialized memory is used as a source operand in - certain operations, such as control flow expressions or memory accesses, the - runtime reports an error. Otherwise, the shadow state is propagated to - destination operand. For example, a variable assignment or a - <a class="permalink" href="#memcpy"><code class="Fn">memcpy</code></a>() - call which copies uninitialized memory will cause the destination buffer or - variable to be marked uninitialized.</p> -<p class="Pp" id="debug.kmsan.panic_on_violation">To report an error, the - <code class="Nm">KMSAN</code> runtime will either trigger a kernel panic or - print a message to the console, depending on the value of the - <a class="permalink" href="#debug.kmsan.panic_on_violation"><b class="Sy">debug.kmsan.panic_on_violation</b></a> - sysctl. In both cases, a stack trace and information about the origin of the - uninitialized memory is included.</p> -<p class="Pp">In addition to compiler-detected uses of uninitialized memory, - various kernel I/O “exit points”, such as - <a class="Xr">copyout(9)</a>, perform validation of the input's shadow state - and will raise an error if any uninitialized bytes are detected.</p> -<p class="Pp">The <code class="Nm">KMSAN</code> option imposes a significant - performance penalty. Kernel code typically runs two or three times slower, - and each byte mapped in the kernel map requires two bytes of shadow state. - As a result, <code class="Nm">KMSAN</code> should be used only for kernel - testing and development. It is not recommended to enable - <code class="Nm">KMSAN</code> in systems with less than 8GB of physical - RAM.</p> -<p class="Pp" id="debug.kmsan.disable=1">The sanitizer in a KMSAN-configured - kernel can be disabled by setting the loader tunable - <a class="permalink" href="#debug.kmsan.disable=1"><b class="Sy">debug.kmsan.disable=1</b></a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="FUNCTIONS"><a class="permalink" href="#FUNCTIONS">FUNCTIONS</a></h1> -<p class="Pp">The - <a class="permalink" href="#kmsan_mark"><code class="Fn" id="kmsan_mark">kmsan_mark</code></a>() - and <code class="Fn">kmsan_orig</code>() functions update - <code class="Nm">KMSAN</code> shadow state. - <code class="Fn">kmsan_mark</code>() marks an address range as valid or - invalid according to the value of the <var class="Va">code</var> parameter. - The valid values for this parameter are - <code class="Dv">KMSAN_STATE_INITED</code> and - <code class="Dv">KMSAN_STATE_UNINIT</code>, which mark the range as - initialized and uninitialized, respectively. For example, when a piece of - memory is freed to a kernel allocator, it will typically have been marked - initialized; before the memory is reused for a new allocation, the allocator - should mark it as uninitialized. As another example, writes to host memory - performed by devices, e.g., via DMA, are not intercepted by the sanitizer; - to avoid false positives, drivers should mark device-written memory as - initialized. For many drivers this is handled internally by the - <a class="Xr">busdma(9)</a> subsystem.</p> -<p class="Pp" id="kmsan_orig">The - <a class="permalink" href="#kmsan_orig"><code class="Fn">kmsan_orig</code></a>() - function updates “origin” shadow state. In particular, it - associates a given uninitialized buffer with a memory type and code address. - This is used by the <code class="Nm">KMSAN</code> runtime to track the - source of uninitialized memory and is only for debugging purposes. See - <a class="Sx" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION NOTES</a> for more - details.</p> -<p class="Pp" id="kmsan_check">The - <a class="permalink" href="#kmsan_check"><code class="Fn">kmsan_check</code></a>() - function and its sub-typed siblings validate the shadow state of the - region(s) of kernel memory passed as input parameters. If any byte of the - input is marked as uninitialized, the runtime will generate a report. These - functions are useful during debugging, as they can be strategically inserted - into code paths to narrow down the source of uninitialized memory. They are - also used to perform validation in various kernel I/O paths, helping ensure - that, for example, packets transmitted over a network do not contain - uninitialized kernel memory. <code class="Fn">kmsan_check</code>() and - related functions also take a <var class="Fa">descr</var> parameter which is - inserted into any reports raised by the check.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<section class="Ss"> -<h2 class="Ss" id="Shadow_Maps"><a class="permalink" href="#Shadow_Maps">Shadow - Maps</a></h2> -<p class="Pp">The <code class="Nm">KMSAN</code> runtime makes use of two shadows - of the kernel map. Each address in the kernel map has a linear mapping to - addresses in the two shadows. The first, simply called the shadow map, - tracks the state of the corresponding kernel memory. A non-zero byte in the - shadow map indicates that the corresponding byte of kernel memory is - uninitialized. The <code class="Nm">KMSAN</code> instrumentation - automatically propagates shadow state as the contents of kernel memory are - transformed and copied.</p> -<p class="Pp">The second shadow is called the origin map, and exists only to - help debug reports from the sanitizer. To avoid false positives, - <code class="Nm">KMSAN</code> does not raise reports for certain operations - on uninitialized memory, such as copying or arithmetic. Thus, operations on - uninitialized state which raise a report may be far removed from the source - of the bug, complicating debugging. The origin map contains information - which can help pinpoint the root cause of a particular - <code class="Nm">KMSAN</code> report; when generating a report, the runtime - uses state from the origin map to provide extra details.</p> -<p class="Pp">Unlike the shadow map, the origin map is not byte-granular, but - consists of 4-byte “cells”. Each cell describes the - corresponding four bytes of mapped kernel memory and holds a type and - compressed code address. When kernel memory is allocated for some purpose, - its origin is initialized either by the compiler instrumentation or by - runtime hooks in the allocator. The type indicates the specific allocator, - e.g., <a class="Xr">uma(9)</a>, and the address provides the location in the - kernel code where the memory was allocated.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Assembly_Code"><a class="permalink" href="#Assembly_Code">Assembly - Code</a></h2> -<p class="Pp">When <code class="Nm">KMSAN</code> is configured, the compiler - will only emit instrumentation for C code. Files containing assembly code - are left un-instrumented. In some cases this is handled by the sanitizer - runtime, which defines wrappers for subroutines implemented in assembly. - These wrappers are referred to as interceptors and handle updating shadow - state to reflect the operations performed by the original subroutines. In - other cases, C code which calls assembly code or is called from assembly - code may need to use <code class="Fn">kmsan_mark</code>() to manually update - shadow state. This is typically only necessary in machine-dependent - code.</p> -<p class="Pp">Inline assembly is instrumented by the compiler to update shadow - state based on the output operands of the code, and thus does not usually - require any special handling to avoid false positives.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Interrupts_and_Exceptions"><a class="permalink" href="#Interrupts_and_Exceptions">Interrupts - and Exceptions</a></h2> -<p class="Pp">In addition to the shadow maps, the sanitizer requires some - thread-local storage (TLS) to track initialization and origin state for - function parameters and return values. The sanitizer instrumentation will - automatically fetch, update and verify this state. In particular, this - storage block has a layout defined by the sanitizer ABI.</p> -<p class="Pp">Most kernel code runs in a context where interrupts or exceptions - may redirect the CPU to begin execution of unrelated code. To ensure that - thread-local sanitizer state remains consistent, the runtime maintains a - stack of TLS blocks for each thread. When machine-dependent interrupt and - exception handlers begin execution, they push a new entry onto the stack - before calling into any C code, and pop the stack before resuming execution - of the interrupted code. These operations are performed by the - <code class="Fn">kmsan_intr_enter</code>() and - <code class="Fn">kmsan_intr_leave</code>() functions in the sanitizer - runtime.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">The following contrived example demonstrates some of the types of - bugs that are automatically detected by <code class="Nm">KMSAN</code>:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>int -f(size_t osz) -{ - struct { - uint32_t bar; - uint16_t baz; - /* A 2-byte hole is here. */ - } foo; - char *buf; - size_t sz; - int error; - - /* - * This will raise a report since "sz" is uninitialized - * here. If it is initialized, and "osz" was left uninitialized - * by the caller, a report would also be raised. - */ - if (sz < osz) - return (1); - - buf = malloc(32, M_TEMP, M_WAITOK); - - /* - * This will raise a report since "buf" has not been - * initialized and contains whatever data is left over from the - * previous use of that memory. - */ - for (i = 0; i < 32; i++) - if (buf[i] != ' ') - foo.bar++; - foo.baz = 0; - - /* - * This will raise a report since the pad bytes in "foo" have - * not been initialized, e.g., by memset(), and this call will - * thus copy uninitialized kernel stack memory into userspace. - */ - copyout(&foo, uaddr, sizeof(foo)); - - /* - * This line itself will not raise a report, but may trigger - * a report in the caller depending on how the return value is - * used. - */ - return (error); -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">build(7)</a>, <a class="Xr">busdma(9)</a>, - <a class="Xr">copyout(9)</a>, <a class="Xr">KASAN(9)</a>, - <a class="Xr">uio(9)</a>, <a class="Xr">uma(9)</a></p> -<p class="Pp"><cite class="Rs"><span class="RsA">Evgeniy Stepanov</span> and - <span class="RsA">Konstantin Serebryany</span>, - <span class="RsT">MemorySanitizer: fast detector of uninitialized memory use - in C++</span>, <i class="RsJ">2015 IEEE/ACM International Symposium on Code - Generation and Optimization (CGO)</i>, - <span class="RsD">2015</span>.</cite></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp"><code class="Nm">KMSAN</code> was ported from - <span class="Ux">NetBSD</span> and first appeared in - <span class="Ux">FreeBSD 14.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">Accesses to kernel memory outside of the kernel map are ignored by - the <code class="Nm">KMSAN</code> runtime. In particular, memory accesses - via the direct map are not validated. When memory is copied from outside the - kernel map into the kernel map, that region of the kernel map is marked as - initialized. When <code class="Nm">KMSAN</code> is configured, kernel memory - allocators are configured to use the kernel map, and filesystems are - configured to always map data buffers into the kernel map, so usage of the - direct map is minimized. However, some uses of the direct map remain. This - is a conservative policy which aims to avoid false positives, but it will - mask bug in some kernel subsystems.</p> -<p class="Pp">On amd64, global variables and the physical page array - <var class="Va">vm_page_array</var> are not sanitized. This is intentional, - as it reduces memory usage by avoiding creating shadows of large regions of - the kernel map. However, this can allow bugs to go undetected by - <code class="Nm">KMSAN</code>.</p> -<p class="Pp">Some kernel memory allocators provide type-stable objects, and - code which uses them frequently depends on object data being preserved - across allocations. Such allocations cannot be sanitized by - <code class="Nm">KMSAN</code>. However, in some cases it may be possible to - use <code class="Fn">kmsan_mark</code>() to manually annotate fields which - are known to contain invalid data upon allocation.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 11, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/kobj.9 3.html b/static/freebsd/man9/kobj.9 3.html deleted file mode 100644 index 42459e96..00000000 --- a/static/freebsd/man9/kobj.9 3.html +++ /dev/null @@ -1,142 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">KOBJ(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">KOBJ(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">kobj</code> — <span class="Nd">a kernel - object system for FreeBSD</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/kobj.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kobj_class_compile</code>(<var class="Fa" style="white-space: nowrap;">kobj_class_t - cls</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kobj_class_compile_static</code>(<var class="Fa" style="white-space: nowrap;">kobj_class_t - cls</var>, <var class="Fa" style="white-space: nowrap;">kobj_ops_t - ops</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kobj_class_free</code>(<var class="Fa" style="white-space: nowrap;">kobj_class_t - cls</var>);</p> -<p class="Pp"><var class="Ft">kobj_t</var> - <br/> - <code class="Fn">kobj_create</code>(<var class="Fa" style="white-space: nowrap;">kobj_class_t - cls</var>, <var class="Fa" style="white-space: nowrap;">struct malloc_type - *mtype</var>, <var class="Fa" style="white-space: nowrap;">int - mflags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kobj_init</code>(<var class="Fa" style="white-space: nowrap;">kobj_t - obj</var>, <var class="Fa" style="white-space: nowrap;">kobj_class_t - cls</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kobj_init_static</code>(<var class="Fa" style="white-space: nowrap;">kobj_t - obj</var>, <var class="Fa" style="white-space: nowrap;">kobj_class_t - cls</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kobj_delete</code>(<var class="Fa" style="white-space: nowrap;">kobj_t - obj</var>, <var class="Fa" style="white-space: nowrap;">struct malloc_type - *mtype</var>);</p> -<p class="Pp"><code class="Fn">DEFINE_CLASS</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">kobj_method_t *methods</var>, - <var class="Fa" style="white-space: nowrap;">size_t size</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The kernel object system implements an object-oriented programming - system in the <span class="Ux">FreeBSD</span> kernel. The system is based - around the concepts of interfaces, which are descriptions of sets of - methods; classes, which are lists of functions implementing certain methods - from those interfaces; and objects, which combine a class with a structure - in memory.</p> -<p class="Pp">Methods are called using a dynamic method dispatching algorithm - which is designed to allow new interfaces and classes to be introduced into - the system at runtime. The method dispatch algorithm is designed to be both - fast and robust and is only slightly more expensive than a direct function - call, making kernel objects suitable for performance-critical - algorithms.</p> -<p class="Pp">Suitable uses for kernel objects are any algorithms which need - some kind of polymorphism (i.e., many different objects which can be treated - in a uniform way). The common behaviour of the objects is described by a - suitable interface and each different type of object is implemented by a - suitable class.</p> -<p class="Pp" id="kobj_create">The simplest way to create a kernel object is to - call - <a class="permalink" href="#kobj_create"><code class="Fn">kobj_create</code></a>() - with a suitable class, malloc type and flags (see - <a class="Xr">malloc(9)</a> for a description of the malloc type and flags). - This will allocate memory for the object based on the object size specified - by the class and initialise it by zeroing the memory and installing a - pointer to the class' method dispatch table. Objects created in this way - should be freed by calling - <a class="permalink" href="#kobj_delete"><code class="Fn" id="kobj_delete">kobj_delete</code></a>().</p> -<p class="Pp" id="kobj_init">Clients which would like to manage the allocation - of memory themselves should call - <a class="permalink" href="#kobj_init"><code class="Fn">kobj_init</code></a>() - or - <a class="permalink" href="#kobj_init_static"><code class="Fn" id="kobj_init_static">kobj_init_static</code></a>() - with a pointer to the memory for the object and the class which implements - it. It is also possible to use <code class="Fn">kobj_init</code>() and - <code class="Fn">kobj_init_static</code>() to change the class for an - object. This should be done with care as the classes must agree on the - layout of the object. The device framework uses this feature to associate - drivers with devices.</p> -<p class="Pp" id="kobj_class_compile">The functions - <a class="permalink" href="#kobj_class_compile"><code class="Fn">kobj_class_compile</code></a>(), - <a class="permalink" href="#kobj_class_compile_static"><code class="Fn" id="kobj_class_compile_static">kobj_class_compile_static</code></a>() - and - <a class="permalink" href="#kobj_class_free"><code class="Fn" id="kobj_class_free">kobj_class_free</code></a>() - are used to process a class description to make method dispatching - efficient. A client should not normally need to call these since a class - will automatically be compiled the first time it is used. If a class is to - be used before <a class="Xr">malloc(9)</a> and <a class="Xr">mutex(9)</a> - are initialised, then <code class="Fn">kobj_class_compile_static</code>() - should be called with the class and a pointer to a statically allocated - <var class="Vt">kobj_ops</var> structure before the class is used to - initialise any objects. In that case, also - <code class="Fn">kobj_init_static</code>() should be used instead of - <code class="Fn">kobj_init</code>().</p> -<p class="Pp" id="KOBJMETHOD">To define a class, first define a simple array of - <var class="Vt">kobj_method_t</var>. Each method which the class implements - should be entered into the table using the macro - <a class="permalink" href="#KOBJMETHOD"><code class="Fn">KOBJMETHOD</code></a>() - which takes the name of the method (including its interface) and a pointer - to a function which implements it. The table should be terminated with two - zeros. The macro - <a class="permalink" href="#DEFINE_CLASS"><code class="Fn" id="DEFINE_CLASS">DEFINE_CLASS</code></a>() - can then be used to initialise a <var class="Vt">kobj_class_t</var> - structure. The size argument to <code class="Fn">DEFINE_CLASS</code>() - specifies how much memory should be allocated for each object.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">Some of the concepts for this interface appeared in the device - framework used for the alpha port of <span class="Ux">FreeBSD 3.0</span> and - more widely in <span class="Ux">FreeBSD 4.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 14, 2011</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/kproc.9 3.html b/static/freebsd/man9/kproc.9 3.html deleted file mode 100644 index 90e3b0c3..00000000 --- a/static/freebsd/man9/kproc.9 3.html +++ /dev/null @@ -1,294 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">KPROC(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">KPROC(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">kproc_start</code>, - <code class="Nm">kproc_shutdown</code>, - <code class="Nm">kproc_create</code>, <code class="Nm">kproc_exit</code>, - <code class="Nm">kproc_resume</code>, <code class="Nm">kproc_suspend</code>, - <code class="Nm">kproc_suspend_check</code> — <span class="Nd">kernel - processes</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/kthread.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kproc_start</code>(<var class="Fa" style="white-space: nowrap;">const - void *udata</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kproc_shutdown</code>(<var class="Fa" style="white-space: nowrap;">void - *arg</var>, <var class="Fa" style="white-space: nowrap;">int - howto</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">kproc_create</code>(<var class="Fa">void (*func)(void - *)</var>, <var class="Fa">void *arg</var>, <var class="Fa">struct proc - **newpp</var>, <var class="Fa">int flags</var>, <var class="Fa">int - pages</var>, <var class="Fa">const char *fmt</var>, - <var class="Fa">...</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kproc_exit</code>(<var class="Fa" style="white-space: nowrap;">int - ecode</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">kproc_resume</code>(<var class="Fa" style="white-space: nowrap;">struct - proc *p</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">kproc_suspend</code>(<var class="Fa" style="white-space: nowrap;">struct - proc *p</var>, <var class="Fa" style="white-space: nowrap;">int - timo</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kproc_suspend_check</code>(<var class="Fa" style="white-space: nowrap;">struct - proc *p</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">kproc_kthread_add</code>(<var class="Fa">void (*func)(void - *)</var>, <var class="Fa">void *arg</var>, <var class="Fa">struct proc - **procptr</var>, <var class="Fa">struct thread **tdptr</var>, - <var class="Fa">int flags</var>, <var class="Fa">int pages</var>, - <var class="Fa">char * procname</var>, <var class="Fa">const char - *fmt</var>, <var class="Fa">...</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">In <span class="Ux">FreeBSD 8.0</span>, the - <a class="permalink" href="#kthread*"><code class="Fn" id="kthread*">kthread*</code></a>(<var class="Fa">9</var>) - family of functions was renamed to be the - <a class="permalink" href="#kproc*"><code class="Fn" id="kproc*">kproc*</code></a>(<var class="Fa">9</var>) - family of functions, as they were misnamed and actually produced kernel - processes. A new family of - <a class="permalink" href="#different"><i class="Em" id="different">different</i></a> - <a class="permalink" href="#kthread_*"><code class="Fn" id="kthread_*">kthread_*</code></a>(<var class="Fa">9</var>) - functions was added to produce - <a class="permalink" href="#real"><i class="Em" id="real">real</i></a> - kernel - <a class="permalink" href="#threads"><i class="Em" id="threads">threads</i></a>. - See the <a class="Xr">kthread(9)</a> man page for more information on those - calls. Also note that the - <code class="Fn">kproc_kthread_add</code>(<var class="Fa">9</var>) function - appears in both pages as its functionality is split.</p> -<p class="Pp" id="kproc_start">The function - <a class="permalink" href="#kproc_start"><code class="Fn">kproc_start</code></a>() - is used to start “internal” daemons such as - <code class="Nm">bufdaemon</code>, <code class="Nm">pagedaemon</code>, - <code class="Nm">vmdaemon</code>, and the <code class="Nm">syncer</code> and - is intended to be called from <a class="Xr">SYSINIT(9)</a>. The - <var class="Fa">udata</var> argument is actually a pointer to a - <var class="Vt">struct kproc_desc</var> which describes the kernel process - that should be created:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct kproc_desc { - char *arg0; - void (*func)(void); - struct proc **global_procpp; -};</pre> -</div> -<p class="Pp" id="kproc_start~2">The structure members are used by - <a class="permalink" href="#kproc_start~2"><code class="Fn">kproc_start</code></a>() - as follows:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="arg0"><var class="Va">arg0</var></dt> - <dd>String to be used for the name of the process. This string will be copied - into the <var class="Va">p_comm</var> member of the new process' - <var class="Vt">struct proc</var>.</dd> - <dt id="func"><var class="Va">func</var></dt> - <dd>The main function for this kernel process to run.</dd> - <dt id="global_procpp"><var class="Va">global_procpp</var></dt> - <dd>A pointer to a <var class="Vt">struct proc</var> pointer that should be - updated to point to the newly created process' process structure. If this - variable is <code class="Dv">NULL</code>, then it is ignored.</dd> -</dl> -</div> -<p class="Pp" id="kproc_create">The - <a class="permalink" href="#kproc_create"><code class="Fn">kproc_create</code></a>() - function is used to create a kernel process. The new process shares its - address space with process 0, the <code class="Nm">swapper</code> process, - and runs in kernel mode only. The <var class="Fa">func</var> argument - specifies the function that the process should execute. The - <var class="Fa">arg</var> argument is an arbitrary pointer that is passed in - as the only argument to <var class="Fa">func</var> when it is called by the - new process. The <var class="Fa">newpp</var> pointer points to a - <var class="Vt">struct proc</var> pointer that is to be updated to point to - the newly created process. If this argument is <code class="Dv">NULL</code>, - then it is ignored. The <var class="Fa">flags</var> argument specifies a set - of flags as described in <a class="Xr">rfork(2)</a>. The - <var class="Fa">pages</var> argument specifies the size of the new kernel - process's stack in pages. If 0 is used, the default kernel stack size is - allocated. The rest of the arguments form a <a class="Xr">printf(9)</a> - argument list that is used to build the name of the new process and is - stored in the <var class="Va">p_comm</var> member of the new process's - <var class="Vt">struct proc</var>.</p> -<p class="Pp" id="kproc_exit">The - <a class="permalink" href="#kproc_exit"><code class="Fn">kproc_exit</code></a>() - function is used to terminate kernel processes. It should be called by the - main function of the kernel process rather than letting the main function - return to its caller. The <var class="Fa">ecode</var> argument specifies the - exit status of the process. While exiting, the function - <a class="Xr">exit1(9)</a> will initiate a call to - <a class="Xr">wakeup(9)</a> on the process handle.</p> -<p class="Pp" id="kproc_resume">The - <a class="permalink" href="#kproc_resume"><code class="Fn">kproc_resume</code></a>(), - <a class="permalink" href="#kproc_suspend"><code class="Fn" id="kproc_suspend">kproc_suspend</code></a>(), - and - <a class="permalink" href="#kproc_suspend_check"><code class="Fn" id="kproc_suspend_check">kproc_suspend_check</code></a>() - functions are used to suspend and resume a kernel process. During the main - loop of its execution, a kernel process that wishes to allow itself to be - suspended should call <code class="Fn">kproc_suspend_check</code>() passing - in <var class="Va">curproc</var> as the only argument. This function checks - to see if the kernel process has been asked to suspend. If it has, it will - <a class="Xr">tsleep(9)</a> until it is told to resume. Once it has been - told to resume it will return allowing execution of the kernel process to - continue. The other two functions are used to notify a kernel process of a - suspend or resume request. The <var class="Fa">p</var> argument points to - the <var class="Vt">struct proc</var> of the kernel process to suspend or - resume. For <code class="Fn">kproc_suspend</code>(), the - <var class="Fa">timo</var> argument specifies a timeout to wait for the - kernel process to acknowledge the suspend request and suspend itself.</p> -<p class="Pp" id="kproc_shutdown">The - <a class="permalink" href="#kproc_shutdown"><code class="Fn">kproc_shutdown</code></a>() - function is meant to be registered as a shutdown event for kernel processes - that need to be suspended voluntarily during system shutdown so as not to - interfere with system shutdown activities. The actual suspension of the - kernel process is done with - <a class="permalink" href="#kproc_suspend~2"><code class="Fn" id="kproc_suspend~2">kproc_suspend</code></a>().</p> -<p class="Pp" id="kproc_kthread_add">The - <a class="permalink" href="#kproc_kthread_add"><code class="Fn">kproc_kthread_add</code></a>() - function is much like the <code class="Fn">kproc_create</code>() function - above except that if the kproc already exists, then only a new thread (see - <a class="Xr">kthread(9)</a>) is created on the existing process. The - <var class="Fa">func</var> argument specifies the function that the process - should execute. The <var class="Fa">arg</var> argument is an arbitrary - pointer that is passed in as the only argument to <var class="Fa">func</var> - when it is called by the new process. The <var class="Fa">procptr</var> - pointer points to a <var class="Vt">struct proc</var> pointer that is the - location to be updated with the new proc pointer if a new process is - created, or if not <code class="Dv">NULL</code>, must contain the process - pointer for the already existing process. If this argument points to - <code class="Dv">NULL</code>, then a new process is created and the field - updated. If not NULL, the <var class="Fa">tdptr</var> pointer points to a - <var class="Vt">struct thread</var> pointer that is the location to be - updated with the new thread pointer. The <var class="Fa">flags</var> - argument specifies a set of flags as described in - <a class="Xr">rfork(2)</a>. The <var class="Fa">pages</var> argument - specifies the size of the new kernel thread's stack in pages. If 0 is used, - the default kernel stack size is allocated. The procname argument is the - name the new process should be given if it needs to be created. It is - <a class="permalink" href="#NOT"><i class="Em" id="NOT">NOT</i></a> a printf - style format specifier but a simple string. The rest of the arguments form a - <a class="Xr">printf(9)</a> argument list that is used to build the name of - the new thread and is stored in the <var class="Va">td_name</var> member of - the new thread's <var class="Vt">struct thread</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">kproc_create</code>(), - <code class="Fn">kproc_resume</code>(), and - <code class="Fn">kproc_suspend</code>() functions return zero on success and - non-zero on failure.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">This example demonstrates the use of a <var class="Vt">struct - kproc_desc</var> and the functions <code class="Fn">kproc_start</code>(), - <code class="Fn">kproc_shutdown</code>(), and - <code class="Fn">kproc_suspend_check</code>() to run the - <code class="Nm">bufdaemon</code> process.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>static struct proc *bufdaemonproc; - -static struct kproc_desc buf_kp = { - "bufdaemon", - buf_daemon, - &bufdaemonproc -}; -SYSINIT(bufdaemon, SI_SUB_KTHREAD_BUF, SI_ORDER_FIRST, kproc_start, - &buf_kp) - -static void -buf_daemon() -{ - ... - /* - * This process needs to be suspended prior to shutdown sync. - */ - EVENTHANDLER_REGISTER(shutdown_pre_sync, kproc_shutdown, - bufdaemonproc, SHUTDOWN_PRI_LAST); - ... - for (;;) { - kproc_suspend_check(bufdaemonproc); - ... - } -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp">The <code class="Fn">kproc_resume</code>() and - <code class="Fn">kproc_suspend</code>() functions will fail if:</p> -<dl class="Bl-tag"> - <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt> - <dd>The <var class="Fa">p</var> argument does not reference a kernel - process.</dd> -</dl> -<p class="Pp">The <code class="Fn">kproc_create</code>() function will fail - if:</p> -<dl class="Bl-tag"> - <dt id="EAGAIN">[<a class="permalink" href="#EAGAIN"><code class="Er">EAGAIN</code></a>]</dt> - <dd>The system-imposed limit on the total number of processes under execution - would be exceeded. The limit is given by the <a class="Xr">sysctl(3)</a> - MIB variable <code class="Dv">KERN_MAXPROC</code>.</dd> - <dt id="EINVAL~2">[<a class="permalink" href="#EINVAL~2"><code class="Er">EINVAL</code></a>]</dt> - <dd>The <code class="Dv">RFCFDG</code> flag was specified in the - <var class="Fa">flags</var> parameter.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">rfork(2)</a>, <a class="Xr">exit1(9)</a>, - <a class="Xr">kthread(9)</a>, <a class="Xr">SYSINIT(9)</a>, - <a class="Xr">wakeup(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Fn">kproc_start</code>() function first appeared - in <span class="Ux">FreeBSD 2.2</span>. The - <code class="Fn">kproc_shutdown</code>(), - <code class="Fn">kproc_create</code>(), - <code class="Fn">kproc_exit</code>(), - <code class="Fn">kproc_resume</code>(), - <code class="Fn">kproc_suspend</code>(), and - <code class="Fn">kproc_suspend_check</code>() functions were introduced in - <span class="Ux">FreeBSD 4.0</span>. Prior to <span class="Ux">FreeBSD - 5.0</span>, the <code class="Fn">kproc_shutdown</code>(), - <code class="Fn">kproc_resume</code>(), - <code class="Fn">kproc_suspend</code>(), and - <code class="Fn">kproc_suspend_check</code>() functions were named - <code class="Fn">shutdown_kproc</code>(), - <code class="Fn">resume_kproc</code>(), - <code class="Fn">shutdown_kproc</code>(), and - <code class="Fn">kproc_suspend_loop</code>(), respectively. Originally they - had the names <code class="Fn">kthread_*</code>() but were changed to - <code class="Fn">kproc_*</code>() when real kthreads became available.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 19, 2007</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/kqueue.9 4.html b/static/freebsd/man9/kqueue.9 4.html deleted file mode 100644 index 827536ea..00000000 --- a/static/freebsd/man9/kqueue.9 4.html +++ /dev/null @@ -1,299 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">KQUEUE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">KQUEUE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">kqueue_add_filteropts</code>, - <code class="Nm">kqueue_del_filteropts</code>, - <code class="Nm">kqfd_register</code>, - <code class="Nm">knote_fdclose</code>, <code class="Nm">knlist_init</code>, - <code class="Nm">knlist_init_mtx</code>, <code class="Nm">knlist_add</code>, - <code class="Nm">knlist_remove</code>, <code class="Nm">knlist_empty</code>, - <code class="Nm">knlist_clear</code>, <code class="Nm">knlist_delete</code>, - <code class="Nm">knlist_destroy</code>, - <code class="Nm">KNOTE_LOCKED</code>, <code class="Nm">KNOTE_UNLOCKED</code> - — <span class="Nd">event delivery subsystem</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/event.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">kqueue_add_filteropts</code>(<var class="Fa" style="white-space: nowrap;">int - filt</var>, <var class="Fa" style="white-space: nowrap;">struct filterops - *filtops</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">kqueue_del_filteropts</code>(<var class="Fa" style="white-space: nowrap;">int - filt</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">kqfd_register</code>(<var class="Fa" style="white-space: nowrap;">int - fd</var>, <var class="Fa" style="white-space: nowrap;">struct kevent - *kev</var>, <var class="Fa" style="white-space: nowrap;">struct thread - *td</var>, <var class="Fa" style="white-space: nowrap;">int - waitok</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">knote_fdclose</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>, <var class="Fa" style="white-space: nowrap;">int - fd</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">knlist_init</code>(<var class="Fa">struct knlist *knl</var>, - <var class="Fa">void *lock</var>, <var class="Fa">void (*kl_lock)(void - *)</var>, <var class="Fa">void (*kl_unlock)(void *)</var>, - <var class="Fa">int (*kl_locked)(void *)</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">knlist_init_mtx</code>(<var class="Fa" style="white-space: nowrap;">struct - knlist *knl</var>, <var class="Fa" style="white-space: nowrap;">struct mtx - *lock</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">knlist_add</code>(<var class="Fa" style="white-space: nowrap;">struct - knlist *knl</var>, <var class="Fa" style="white-space: nowrap;">struct knote - *kn</var>, <var class="Fa" style="white-space: nowrap;">int - islocked</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">knlist_remove</code>(<var class="Fa" style="white-space: nowrap;">struct - knlist *knl</var>, <var class="Fa" style="white-space: nowrap;">struct knote - *kn</var>, <var class="Fa" style="white-space: nowrap;">int - islocked</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">knlist_empty</code>(<var class="Fa" style="white-space: nowrap;">struct - knlist *knl</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">knlist_clear</code>(<var class="Fa" style="white-space: nowrap;">struct - knlist *knl</var>, <var class="Fa" style="white-space: nowrap;">int - islocked</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">knlist_delete</code>(<var class="Fa" style="white-space: nowrap;">struct - knlist *knl</var>, <var class="Fa" style="white-space: nowrap;">struct - thread *td</var>, <var class="Fa" style="white-space: nowrap;">int - islocked</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">knlist_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct - knlist *knl</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">KNOTE_LOCKED</code>(<var class="Fa" style="white-space: nowrap;">struct - knlist *knl</var>, <var class="Fa" style="white-space: nowrap;">long - hint</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">KNOTE_UNLOCKED</code>(<var class="Fa" style="white-space: nowrap;">struct - knlist *knl</var>, <var class="Fa" style="white-space: nowrap;">long - hint</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The functions - <a class="permalink" href="#kqueue_add_filteropts"><code class="Fn" id="kqueue_add_filteropts">kqueue_add_filteropts</code></a>() - and - <a class="permalink" href="#kqueue_del_filteropts"><code class="Fn" id="kqueue_del_filteropts">kqueue_del_filteropts</code></a>() - allow for the addition and removal of a filter type. The filter is - statically defined by the <code class="Dv">EVFILT_*</code> macros. The - function <code class="Fn">kqueue_add_filteropts</code>() will make - <var class="Fa">filt</var> available. The <var class="Vt">struct - filterops</var> has the following members:</p> -<dl class="Bl-tag"> - <dt id="f_isfd"><var class="Va">f_isfd</var></dt> - <dd>If <var class="Va">f_isfd</var> is set, <var class="Va">ident</var> in - <var class="Vt">struct kevent</var> is taken to be a file descriptor. In - this case, the <var class="Vt">knote</var> passed into - <var class="Va">f_attach</var> will have the <var class="Va">kn_fp</var> - member initialized to the <var class="Vt">struct file *</var> that - represents the file descriptor.</dd> - <dt id="f_attach"><var class="Va">f_attach</var></dt> - <dd>The <var class="Va">f_attach</var> function will be called when attaching - a <var class="Vt">knote</var> to the object. The method should call - <a class="permalink" href="#knlist_add"><code class="Fn" id="knlist_add">knlist_add</code></a>() - to add the <var class="Vt">knote</var> to the list that was initialized - with <code class="Fn">knlist_init</code>(). The call to - <code class="Fn">knlist_add</code>() is only necessary if the object can - have multiple <var class="Vt">knotes</var> associated with it. If there is - no <var class="Vt">knlist</var> to call - <code class="Fn">knlist_add</code>() with, the function - <var class="Va">f_attach</var> must clear the - <code class="Dv">KN_DETACHED</code> bit of <var class="Va">kn_status</var> - in the <var class="Vt">knote</var>. The function shall return 0 on - success, or appropriate error for the failure, such as when the object is - being destroyed, or does not exist. During <var class="Va">f_attach</var>, - it is valid to change the <var class="Va">kn_fop</var> pointer to a - different pointer. This will change the <var class="Va">f_event</var> and - <var class="Va">f_detach</var> functions called when processing the - <var class="Vt">knote</var>.</dd> - <dt id="f_detach"><var class="Va">f_detach</var></dt> - <dd>The <var class="Va">f_detach</var> function will be called to detach the - <var class="Vt">knote</var> if the <var class="Vt">knote</var> has not - already been detached by a call to - <a class="permalink" href="#knlist_remove"><code class="Fn" id="knlist_remove">knlist_remove</code></a>() - or <code class="Fn">knlist_delete</code>(). The list - <var class="Fa">lock</var> will not be held when this function is - called.</dd> - <dt id="f_event"><var class="Va">f_event</var></dt> - <dd>The <var class="Va">f_event</var> function will be called to update the - status of the <var class="Vt">knote</var>. If the function returns 0, it - will be assumed that the object is not ready (or no longer ready) to be - woken up. The <var class="Fa">hint</var> argument will be 0 when scanning - <var class="Vt">knotes</var> to see which are triggered. Otherwise, the - <var class="Fa">hint</var> argument will be the value passed to either - <code class="Dv">KNOTE_LOCKED</code> or - <code class="Dv">KNOTE_UNLOCKED</code>. The <var class="Va">kn_data</var> - value should be updated as necessary to reflect the current value, such as - number of bytes available for reading, or buffer space available for - writing. - <p class="Pp" id="must">Locks - <a class="permalink" href="#must"><i class="Em">must not</i></a> be - acquired in <var class="Va">f_event</var>. If a lock is required in - <var class="Va">f_event</var>, it must be obtained in the - <var class="Fa">kl_lock</var> function of the - <var class="Vt">knlist</var> that the <var class="Va">knote</var> was - added to.</p> - </dd> - <dt id="f_copy"><var class="Va">f_copy</var></dt> - <dd>The <var class="Va">f_copy</var> function is called to copy notes when the - process forks. When <code class="Dv">NULL</code>, the current node is not - duplicated to the child process. Filter might set - <code class="Dv">f_copy</code> to - <a class="permalink" href="#knote_triv_copy"><code class="Fn" id="knote_triv_copy">knote_triv_copy</code></a>() - if there is no additional handling required, besides shallow copying of - the knote itself.</dd> -</dl> -<p class="Pp" id="kqfd_register">The function - <a class="permalink" href="#kqfd_register"><code class="Fn">kqfd_register</code></a>() - will register the <var class="Vt">kevent</var> on the kqueue file descriptor - <var class="Fa">fd</var>. If it is safe to sleep, - <var class="Fa">waitok</var> should be set.</p> -<p class="Pp" id="knote_fdclose">The function - <a class="permalink" href="#knote_fdclose"><code class="Fn">knote_fdclose</code></a>() - is used to delete all <var class="Vt">knotes</var> associated with - <var class="Fa">fd</var>. Once returned, there will no longer be any - <var class="Vt">knotes</var> associated with the <var class="Fa">fd</var>. - The <var class="Vt">knotes</var> removed will never be returned from a - <a class="Xr">kevent(2)</a> call, so if userland uses the - <var class="Vt">knote</var> to track resources, they will be leaked. The - <a class="permalink" href="#FILEDESC_LOCK"><code class="Fn" id="FILEDESC_LOCK">FILEDESC_LOCK</code></a>() - lock must be held over the call to <code class="Fn">knote_fdclose</code>() - so that file descriptors cannot be added or removed.</p> -<p class="Pp" id="knlist_*">The - <a class="permalink" href="#knlist_*"><code class="Fn">knlist_*</code></a>() - family of functions are for managing <var class="Vt">knotes</var> associated - with an object. A <var class="Vt">knlist</var> is not required, but is - commonly used. If used, the <var class="Vt">knlist</var> must be initialized - with either <code class="Fn">knlist_init</code>() or - <code class="Fn">knlist_init_mtx</code>(). The <var class="Vt">knlist</var> - structure may be embedded into the object structure. The - <var class="Fa">lock</var> will be held over <var class="Va">f_event</var> - calls.</p> -<p class="Pp" id="knlist_init">For the - <a class="permalink" href="#knlist_init"><code class="Fn">knlist_init</code></a>() - function, if <var class="Fa">lock</var> is <code class="Dv">NULL</code>, a - shared global lock will be used and the remaining arguments must be - <code class="Dv">NULL</code>. The function pointers - <var class="Fa">kl_lock</var>, <var class="Fa">kl_unlock</var> and - <var class="Fa">kl_locked</var> will be used to manipulate the argument - <var class="Fa">lock</var>. If any of the function pointers are - <code class="Dv">NULL</code>, a function operating on - <code class="Dv">MTX_DEF</code> style <a class="Xr">mutex(9)</a> locks will - be used instead.</p> -<p class="Pp" id="knlist_init_mtx">The function - <a class="permalink" href="#knlist_init_mtx"><code class="Fn">knlist_init_mtx</code></a>() - may be used to initialize a <var class="Vt">knlist</var> when - <var class="Fa">lock</var> is a <code class="Dv">MTX_DEF</code> style - <a class="Xr">mutex(9)</a> lock.</p> -<p class="Pp" id="knlist_empty">The function - <a class="permalink" href="#knlist_empty"><code class="Fn">knlist_empty</code></a>() - returns true when there are no <var class="Vt">knotes</var> on the list. The - function requires that the <var class="Fa">lock</var> be held when - called.</p> -<p class="Pp" id="knlist_clear">The function - <a class="permalink" href="#knlist_clear"><code class="Fn">knlist_clear</code></a>() - removes all <var class="Vt">knotes</var> from the list. The - <var class="Fa">islocked</var> argument declares if the - <var class="Fa">lock</var> has been acquired. All - <var class="Vt">knotes</var> will have <code class="Dv">EV_ONESHOT</code> - set so that the <var class="Vt">knote</var> will be returned and removed - during the next scan. The <var class="Va">f_detach</var> function will be - called when the <var class="Vt">knote</var> is deleted during the next - scan.</p> -<p class="Pp" id="knlist_delete">The function - <a class="permalink" href="#knlist_delete"><code class="Fn">knlist_delete</code></a>() - removes and deletes all <var class="Vt">knotes</var> on the list. The - function <var class="Va">f_detach</var> will not be called, and the - <var class="Vt">knote</var> will not be returned on the next scan. Using - this function could leak userland resources if a process uses the - <var class="Vt">knote</var> to track resources.</p> -<p class="Pp" id="knlist_clear~2">Both the - <a class="permalink" href="#knlist_clear~2"><code class="Fn">knlist_clear</code></a>() - and <code class="Fn">knlist_delete</code>() functions may sleep. They also - may release the <var class="Fa">lock</var> to wait for other - <var class="Vt">knotes</var> to drain.</p> -<p class="Pp" id="knlist_destroy">The - <a class="permalink" href="#knlist_destroy"><code class="Fn">knlist_destroy</code></a>() - function is used to destroy a <var class="Vt">knlist</var>. There must be no - <var class="Vt">knotes</var> associated with the - <var class="Vt">knlist</var> (<code class="Fn">knlist_empty</code>() returns - true) and no more <var class="Vt">knotes</var> may be attached to the - object. A <var class="Vt">knlist</var> may be emptied by calling - <code class="Fn">knlist_clear</code>() or - <code class="Fn">knlist_delete</code>().</p> -<p class="Pp" id="KNOTE_LOCKED">The macros - <a class="permalink" href="#KNOTE_LOCKED"><code class="Fn">KNOTE_LOCKED</code></a>() - and - <a class="permalink" href="#KNOTE_UNLOCKED"><code class="Fn" id="KNOTE_UNLOCKED">KNOTE_UNLOCKED</code></a>() - are used to notify <var class="Vt">knotes</var> about events associated with - the object. It will iterate over all <var class="Vt">knotes</var> on the - list calling the <var class="Va">f_event</var> function associated with the - <var class="Vt">knote</var>. The macro - <code class="Fn">KNOTE_LOCKED</code>() must be used if the lock associated - with the <var class="Fa">knl</var> is held. The function - <code class="Fn">KNOTE_UNLOCKED</code>() will acquire the lock before - iterating over the list of <var class="Vt">knotes</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The function <code class="Fn">kqueue_add_filteropts</code>() will - return zero on success, <code class="Er">EINVAL</code> in the case of an - invalid <var class="Fa">filt</var>, or <code class="Er">EEXIST</code> if the - filter has already been installed.</p> -<p class="Pp">The function <code class="Fn">kqueue_del_filteropts</code>() will - return zero on success, <code class="Er">EINVAL</code> in the case of an - invalid <var class="Fa">filt</var>, or <code class="Er">EBUSY</code> if the - filter is still in use.</p> -<p class="Pp">The function <code class="Fn">kqfd_register</code>() will return - zero on success, <code class="Er">EBADF</code> if the file descriptor is not - a kqueue, or any of the possible values returned by - <a class="Xr">kevent(2)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">kevent(2)</a>, <a class="Xr">kqueue(2)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">John-Mark - Gurney</span> - <<a class="Mt" href="mailto:jmg@FreeBSD.org">jmg@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 2, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/kstack_contains.9 4.html b/static/freebsd/man9/kstack_contains.9 4.html deleted file mode 100644 index 4c5acd20..00000000 --- a/static/freebsd/man9/kstack_contains.9 4.html +++ /dev/null @@ -1,57 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">KSTACK_CONTAINS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">KSTACK_CONTAINS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">kstack_contains</code> — - <span class="Nd">determine if an address range lies within the kernel stack - for a thread</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">machine/stack.h</a>></code></p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">kstack_contains</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t - va</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This function can be used to determine whether a given address - range falls within the kernel stack for the thread pointed to by - <var class="Fa">td</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The function <code class="Fn">kstack_contains</code>() returns - <code class="Dv">true</code> if the range of addresses - [<var class="Fa">va</var>..(<var class="Fa">va</var>+<var class="Fa">len</var>-1)] - (both addresses inclusive) lies within the kernel stack for the thread - pointed to by argument <var class="Fa">td</var>, or returns - <code class="Dv">false</code> otherwise.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp">This function does not return an error.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">kproc(9)</a>, <a class="Xr">kthread(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 2, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/kthread.9 3.html b/static/freebsd/man9/kthread.9 3.html deleted file mode 100644 index 01aa3362..00000000 --- a/static/freebsd/man9/kthread.9 3.html +++ /dev/null @@ -1,271 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">KTHREAD(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">KTHREAD(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">kthread_start</code>, - <code class="Nm">kthread_shutdown</code>, - <code class="Nm">kthread_add</code>, <code class="Nm">kthread_exit</code>, - <code class="Nm">kthread_resume</code>, - <code class="Nm">kthread_suspend</code>, - <code class="Nm">kthread_suspend_check</code> — - <span class="Nd">kernel threads</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/kthread.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kthread_start</code>(<var class="Fa" style="white-space: nowrap;">const - void *udata</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kthread_shutdown</code>(<var class="Fa" style="white-space: nowrap;">void - *arg</var>, <var class="Fa" style="white-space: nowrap;">int - howto</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kthread_exit</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">kthread_resume</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">kthread_suspend</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>, <var class="Fa" style="white-space: nowrap;">int - timo</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kthread_suspend_check</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><code class="In">#include - <<a class="In">sys/unistd.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">kthread_add</code>(<var class="Fa">void (*func)(void - *)</var>, <var class="Fa">void *arg</var>, <var class="Fa">struct proc - *procp</var>, <var class="Fa">struct thread **newtdpp</var>, - <var class="Fa">int flags</var>, <var class="Fa">int pages</var>, - <var class="Fa">const char *fmt</var>, <var class="Fa">...</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">kproc_kthread_add</code>(<var class="Fa">void (*func)(void - *)</var>, <var class="Fa">void *arg</var>, <var class="Fa">struct proc - **procptr</var>, <var class="Fa">struct thread **tdptr</var>, - <var class="Fa">int flags</var>, <var class="Fa">int pages</var>, - <var class="Fa">char * procname</var>, <var class="Fa">const char - *fmt</var>, <var class="Fa">...</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">In <span class="Ux">FreeBSD 8.0</span>, the older family of - <a class="permalink" href="#kthread_*"><code class="Fn" id="kthread_*">kthread_*</code></a>(<var class="Fa">9</var>) - functions was renamed to be the - <a class="permalink" href="#kproc_*"><code class="Fn" id="kproc_*">kproc_*</code></a>(<var class="Fa">9</var>) - family of functions, as they were previously misnamed and actually produced - kernel processes. This new family of - <code class="Fn">kthread_*</code>(<var class="Fa">9</var>) functions was - added to produce - <a class="permalink" href="#real"><i class="Em" id="real">real</i></a> - kernel threads. See the <a class="Xr">kproc(9)</a> man page for more - information on the renamed calls. Also note that the - <code class="Fn">kproc_kthread_add</code>(<var class="Fa">9</var>) function - appears in both pages as its functionality is split.</p> -<p class="Pp" id="kthread_start">The function - <a class="permalink" href="#kthread_start"><code class="Fn">kthread_start</code></a>() - is used to start “internal” daemons such as - <code class="Nm">bufdaemon</code>, <code class="Nm">pagedaemon</code>, - <code class="Nm">vmdaemon</code>, and the <code class="Nm">syncer</code> and - is intended to be called from <a class="Xr">SYSINIT(9)</a>. The - <var class="Fa">udata</var> argument is actually a pointer to a - <var class="Vt">struct kthread_desc</var> which describes the kernel thread - that should be created:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct kthread_desc { - char *arg0; - void (*func)(void); - struct thread **global_threadpp; -};</pre> -</div> -<p class="Pp" id="kthread_start~2">The structure members are used by - <a class="permalink" href="#kthread_start~2"><code class="Fn">kthread_start</code></a>() - as follows:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="arg0"><var class="Va">arg0</var></dt> - <dd>String to be used for the name of the thread. This string will be copied - into the <var class="Va">td_name</var> member of the new threads' - <var class="Vt">struct thread</var>.</dd> - <dt id="func"><var class="Va">func</var></dt> - <dd>The main function for this kernel thread to run.</dd> - <dt id="global_threadpp"><var class="Va">global_threadpp</var></dt> - <dd>A pointer to a <var class="Vt">struct thread</var> pointer that should be - updated to point to the newly created thread's - <var class="Vt">thread</var> structure. If this variable is - <code class="Dv">NULL</code>, then it is ignored. The thread will be a - subthread of <var class="Va">proc0</var> (PID 0).</dd> -</dl> -</div> -<p class="Pp" id="kthread_add">The - <a class="permalink" href="#kthread_add"><code class="Fn">kthread_add</code></a>() - function is used to create a kernel thread. The new thread runs in kernel - mode only. It is added to the process specified by the - <var class="Fa">procp</var> argument, or if that is - <code class="Dv">NULL</code>, to <var class="Va">proc0</var>. The - <var class="Fa">func</var> argument specifies the function that the thread - should execute. The <var class="Fa">arg</var> argument is an arbitrary - pointer that is passed in as the only argument to <var class="Fa">func</var> - when it is called by the new thread. The <var class="Fa">newtdpp</var> - pointer points to a <var class="Vt">struct thread</var> pointer that is to - be updated to point to the newly created thread. If this argument is - <code class="Dv">NULL</code>, then it is ignored. The - <var class="Fa">flags</var> argument may be set to - <code class="Dv">RFSTOPPED</code> to leave the thread in a stopped state. - The caller must call - <a class="permalink" href="#sched_add"><code class="Fn" id="sched_add">sched_add</code></a>() - to start the thread. The <var class="Fa">pages</var> argument specifies the - size of the new kernel thread's stack in pages. If 0 is used, the default - kernel stack size is allocated. The rest of the arguments form a - <a class="Xr">printf(9)</a> argument list that is used to build the name of - the new thread and is stored in the <var class="Va">td_name</var> member of - the new thread's <var class="Vt">struct thread</var>.</p> -<p class="Pp" id="kproc_kthread_add">The - <a class="permalink" href="#kproc_kthread_add"><code class="Fn">kproc_kthread_add</code></a>() - function is much like the <code class="Fn">kthread_add</code>() function - above except that if the kproc does not already exist, it is created. This - function is better documented in the <a class="Xr">kproc(9)</a> manual - page.</p> -<p class="Pp" id="kthread_exit">The - <a class="permalink" href="#kthread_exit"><code class="Fn">kthread_exit</code></a>() - function is used to terminate kernel threads. It should be called by the - main function of the kernel thread rather than letting the main function - return to its caller.</p> -<p class="Pp" id="kthread_resume">The - <a class="permalink" href="#kthread_resume"><code class="Fn">kthread_resume</code></a>(), - <a class="permalink" href="#kthread_suspend"><code class="Fn" id="kthread_suspend">kthread_suspend</code></a>(), - and - <a class="permalink" href="#kthread_suspend_check"><code class="Fn" id="kthread_suspend_check">kthread_suspend_check</code></a>() - functions are used to suspend and resume a kernel thread. During the main - loop of its execution, a kernel thread that wishes to allow itself to be - suspended should call <code class="Fn">kthread_suspend_check</code>() in - order to check if the it has been asked to suspend. If it has, it will - <a class="Xr">msleep(9)</a> until it is told to resume. Once it has been - told to resume it will return allowing execution of the kernel thread to - continue. The other two functions are used to notify a kernel thread of a - suspend or resume request. The <var class="Fa">td</var> argument points to - the <var class="Vt">struct thread</var> of the kernel thread to suspend or - resume. For <code class="Fn">kthread_suspend</code>(), the - <var class="Fa">timo</var> argument specifies a timeout to wait for the - kernel thread to acknowledge the suspend request and suspend itself.</p> -<p class="Pp" id="kthread_shutdown">The - <a class="permalink" href="#kthread_shutdown"><code class="Fn">kthread_shutdown</code></a>() - function is meant to be registered as a shutdown event for kernel threads - that need to be suspended voluntarily during system shutdown so as not to - interfere with system shutdown activities. The actual suspension of the - kernel thread is done with - <a class="permalink" href="#kthread_suspend~2"><code class="Fn" id="kthread_suspend~2">kthread_suspend</code></a>().</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">kthread_add</code>(), - <code class="Fn">kthread_resume</code>(), and - <code class="Fn">kthread_suspend</code>() functions return zero on success - and non-zero on failure.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">This example demonstrates the use of a <var class="Vt">struct - kthread_desc</var> and the functions - <code class="Fn">kthread_start</code>(), - <code class="Fn">kthread_shutdown</code>(), and - <code class="Fn">kthread_suspend_check</code>() to run the - <code class="Nm">bufdaemon</code> process.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>static struct thread *bufdaemonthread; - -static struct kthread_desc buf_kp = { - "bufdaemon", - buf_daemon, - &bufdaemonthread -}; -SYSINIT(bufdaemon, SI_SUB_KTHREAD_BUF, SI_ORDER_FIRST, kthread_start, - &buf_kp) - -static void -buf_daemon() -{ - ... - /* - * This process needs to be suspended prior to shutdown sync. - */ - EVENTHANDLER_REGISTER(shutdown_pre_sync, kthread_shutdown, - bufdaemonthread, SHUTDOWN_PRI_LAST); - ... - for (;;) { - kthread_suspend_check(); - ... - } -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp">The <code class="Fn">kthread_resume</code>() and - <code class="Fn">kthread_suspend</code>() functions will fail if:</p> -<dl class="Bl-tag"> - <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt> - <dd>The <var class="Fa">td</var> argument does not reference a kernel - thread.</dd> -</dl> -<p class="Pp">The <code class="Fn">kthread_add</code>() function will fail - if:</p> -<dl class="Bl-tag"> - <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt> - <dd>Memory for a thread's stack could not be allocated.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">kproc(9)</a>, <a class="Xr">SYSINIT(9)</a>, - <a class="Xr">wakeup(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Fn">kthread_start</code>() function first - appeared in <span class="Ux">FreeBSD 2.2</span> where it created a whole - process. It was converted to create threads in <span class="Ux">FreeBSD - 8.0</span>. The <code class="Fn">kthread_shutdown</code>(), - <code class="Fn">kthread_exit</code>(), - <code class="Fn">kthread_resume</code>(), - <code class="Fn">kthread_suspend</code>(), and - <code class="Fn">kthread_suspend_check</code>() functions were introduced in - <span class="Ux">FreeBSD 4.0</span> and were converted to threads in - <span class="Ux">FreeBSD 8.0</span>. The - <code class="Fn">kthread_create</code>() call was renamed to - <code class="Fn">kthread_add</code>() in <span class="Ux">FreeBSD - 8.0</span>. The old functionality of creating a kernel process was renamed - to <a class="Xr">kproc_create(9)</a>. Prior to <span class="Ux">FreeBSD - 5.0</span>, the <code class="Fn">kthread_shutdown</code>(), - <code class="Fn">kthread_resume</code>(), - <code class="Fn">kthread_suspend</code>(), and - <code class="Fn">kthread_suspend_check</code>() functions were named - <code class="Fn">shutdown_kproc</code>(), - <code class="Fn">resume_kproc</code>(), - <code class="Fn">shutdown_kproc</code>(), and - <code class="Fn">kproc_suspend_loop</code>(), respectively.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 15, 2014</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ktr.9 4.html b/static/freebsd/man9/ktr.9 4.html deleted file mode 100644 index 1863f4fd..00000000 --- a/static/freebsd/man9/ktr.9 4.html +++ /dev/null @@ -1,182 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">KTR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">KTR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">CTR0</code>, <code class="Nm">CTR1</code>, - <code class="Nm">CTR2</code>, <code class="Nm">CTR3</code>, - <code class="Nm">CTR4</code>, <code class="Nm">CTR5</code> — - <span class="Nd">kernel tracing facility</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/ktr.h</a>></code></p> -<p class="Pp"><var class="Vt">extern int ktr_cpumask</var>; - <br/> - <var class="Vt">extern int ktr_entries</var>; - <br/> - <var class="Vt">extern int ktr_extend</var>; - <br/> - <var class="Vt">extern int ktr_mask</var>; - <br/> - <var class="Vt">extern int ktr_verbose</var>; - <br/> - <var class="Vt">extern struct ktr_entry ktr_buf[]</var>;</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">CTR</code>(<var class="Fa" style="white-space: nowrap;">u_int - mask</var>, <var class="Fa" style="white-space: nowrap;">char *format</var>, - <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">CTR0</code>(<var class="Fa" style="white-space: nowrap;">u_int - mask</var>, <var class="Fa" style="white-space: nowrap;">char - *format</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">CTR1</code>(<var class="Fa" style="white-space: nowrap;">u_int - mask</var>, <var class="Fa" style="white-space: nowrap;">char *format</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">CTR2</code>(<var class="Fa" style="white-space: nowrap;">u_int - mask</var>, <var class="Fa" style="white-space: nowrap;">char *format</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>, - <var class="Fa" style="white-space: nowrap;">arg2</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">CTR3</code>(<var class="Fa" style="white-space: nowrap;">u_int - mask</var>, <var class="Fa" style="white-space: nowrap;">char *format</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>, - <var class="Fa" style="white-space: nowrap;">arg2</var>, - <var class="Fa" style="white-space: nowrap;">arg3</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">CTR4</code>(<var class="Fa" style="white-space: nowrap;">u_int - mask</var>, <var class="Fa" style="white-space: nowrap;">char *format</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>, - <var class="Fa" style="white-space: nowrap;">arg2</var>, - <var class="Fa" style="white-space: nowrap;">arg3</var>, - <var class="Fa" style="white-space: nowrap;">arg4</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">CTR5</code>(<var class="Fa" style="white-space: nowrap;">u_int - mask</var>, <var class="Fa" style="white-space: nowrap;">char *format</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>, - <var class="Fa" style="white-space: nowrap;">arg2</var>, - <var class="Fa" style="white-space: nowrap;">arg3</var>, - <var class="Fa" style="white-space: nowrap;">arg4</var>, - <var class="Fa" style="white-space: nowrap;">arg5</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">CTR6</code>(<var class="Fa" style="white-space: nowrap;">u_int - mask</var>, <var class="Fa" style="white-space: nowrap;">char *format</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>, - <var class="Fa" style="white-space: nowrap;">arg2</var>, - <var class="Fa" style="white-space: nowrap;">arg3</var>, - <var class="Fa" style="white-space: nowrap;">arg4</var>, - <var class="Fa" style="white-space: nowrap;">arg5</var>, - <var class="Fa" style="white-space: nowrap;">arg6</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">KTR provides a circular buffer of events that can be logged in a - <a class="Xr">printf(9)</a> style fashion. These events can then be dumped - with <a class="Xr">ddb(4)</a>, <a class="Xr">gdb(1)</a> - (<span class="Pa">ports/devel/gdb</span>) or - <a class="Xr">ktrdump(8)</a>.</p> -<p class="Pp">Events are created and logged in the kernel via the - <code class="Dv">CTR</code> and - <code class="Dv">CTR</code><var class="Ar">x</var> macros. The first - parameter is a mask of event types (<code class="Dv">KTR_*</code>) defined - in <code class="In"><<a class="In">sys/ktr_class.h</a>></code>. The - event will be logged only if any of the event types specified in - <var class="Fa">mask</var> are enabled in the global event mask stored in - <var class="Va">ktr_mask</var>. The <var class="Fa">format</var> argument is - a <a class="Xr">printf(9)</a> style format string used to build the text of - the event log message. Following the <var class="Fa">format</var> string are - zero to six arguments referenced by <var class="Fa">format</var>. Each event - is logged with a file name and source line number of the originating CTR - call, and a timestamp in addition to the log message.</p> -<p class="Pp">The event is stored in the circular buffer with supplied arguments - as is, and formatting is done at the dump time. Do not use pointers to the - objects with limited lifetime, for instance, strings, because the pointer - may become invalid when buffer is printed.</p> -<p class="Pp">The <code class="Dv">CTR</code><var class="Ar">x</var> macros - differ only in the number of arguments each one takes, as indicated by its - name.</p> -<p class="Pp">The <var class="Va">ktr_entries</var> variable contains the number - of entries in the <var class="Va">ktr_buf</var> array. These variables are - mostly useful for post-mortem crash dump tools to locate the base of the - circular trace buffer and its length.</p> -<p class="Pp">The <var class="Va">ktr_mask</var> variable contains the run time - mask of events to log.</p> -<p class="Pp">The CPU event mask is stored in the - <var class="Va">ktr_cpumask</var> variable.</p> -<p class="Pp">The <var class="Va">ktr_verbose</var> variable stores the verbose - flag that controls whether events are logged to the console in addition to - the event buffer.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">This example demonstrates the use of tracepoints at the - <code class="Dv">KTR_PROC</code> logging level.</p> -<div class="Bd Pp Li"> -<pre>void -mi_switch() -{ - ... - /* - * Pick a new current process and record its start time. - */ - ... - CTR3(KTR_PROC, "mi_switch: old proc %p (pid %d)", p, p->p_pid); - ... - cpu_switch(); - ... - CTR3(KTR_PROC, "mi_switch: new proc %p (pid %d)", p, p->p_pid); - ... -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ktr(4)</a>, <a class="Xr">ktrdump(8)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The KTR kernel tracing facility first appeared in - <span class="Ux">BSD/OS 3.0</span> and was imported into - <span class="Ux">FreeBSD 5.0</span>.</p> -<p class="Pp">The <code class="Fn">CTR</code>() macro accepting a variable - number of arguments first appeared in <span class="Ux">FreeBSD - 14.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">Currently there is one global buffer shared among all CPUs. It - might be profitable at some point in time to use per-CPU buffers instead so - that if one CPU halts or starts spinning, then the log messages it emitted - just prior to halting or spinning will not be drowned out by events from the - other CPUs.</p> -<p class="Pp">The arguments given in <code class="Fn">CTRx</code>() macros are - stored as <var class="Vt">u_long</var>, so do not pass arguments larger than - size of an <var class="Vt">u_long</var> type. For example passing 64bit - arguments on 32bit architectures will give incorrect results.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 12, 2022</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/lock.9 4.html b/static/freebsd/man9/lock.9 4.html deleted file mode 100644 index 2e87a299..00000000 --- a/static/freebsd/man9/lock.9 4.html +++ /dev/null @@ -1,431 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">LOCK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">LOCK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">lockinit</code>, - <code class="Nm">lockdestroy</code>, <code class="Nm">lockmgr</code>, - <code class="Nm">lockmgr_args</code>, - <code class="Nm">lockmgr_args_rw</code>, - <code class="Nm">lockmgr_disown</code>, - <code class="Nm">lockmgr_disowned</code>, - <code class="Nm">lockmgr_lock_flags</code>, - <code class="Nm">lockmgr_printinfo</code>, - <code class="Nm">lockmgr_recursed</code>, - <code class="Nm">lockmgr_rw</code>, <code class="Nm">lockmgr_slock</code>, - <code class="Nm">lockmgr_unlock</code>, - <code class="Nm">lockmgr_xlock</code>, <code class="Nm">lockstatus</code>, - <code class="Nm">lockmgr_assert</code> — <span class="Nd">lockmgr - family of functions</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/lock.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/lockmgr.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">lockinit</code>(<var class="Fa" style="white-space: nowrap;">struct - lock *lkp</var>, <var class="Fa" style="white-space: nowrap;">int - prio</var>, <var class="Fa" style="white-space: nowrap;">const char - *wmesg</var>, <var class="Fa" style="white-space: nowrap;">int timo</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">lockdestroy</code>(<var class="Fa" style="white-space: nowrap;">struct - lock *lkp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">lockmgr</code>(<var class="Fa" style="white-space: nowrap;">struct - lock *lkp</var>, <var class="Fa" style="white-space: nowrap;">u_int - flags</var>, <var class="Fa" style="white-space: nowrap;">struct mtx - *ilk</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">lockmgr_args</code>(<var class="Fa" style="white-space: nowrap;">struct - lock *lkp</var>, <var class="Fa" style="white-space: nowrap;">u_int - flags</var>, <var class="Fa" style="white-space: nowrap;">struct mtx - *ilk</var>, <var class="Fa" style="white-space: nowrap;">const char - *wmesg</var>, <var class="Fa" style="white-space: nowrap;">int prio</var>, - <var class="Fa" style="white-space: nowrap;">int timo</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">lockmgr_args_rw</code>(<var class="Fa" style="white-space: nowrap;">struct - lock *lkp</var>, <var class="Fa" style="white-space: nowrap;">u_int - flags</var>, <var class="Fa" style="white-space: nowrap;">struct rwlock - *ilk</var>, <var class="Fa" style="white-space: nowrap;">const char - *wmesg</var>, <var class="Fa" style="white-space: nowrap;">int prio</var>, - <var class="Fa" style="white-space: nowrap;">int timo</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">lockmgr_disown</code>(<var class="Fa" style="white-space: nowrap;">struct - lock *lkp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">lockmgr_disowned</code>(<var class="Fa" style="white-space: nowrap;">const - struct lock *lkp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">lockmgr_lock_flags</code>(<var class="Fa" style="white-space: nowrap;">struct - lock *lkp</var>, <var class="Fa" style="white-space: nowrap;">u_int - flags</var>, <var class="Fa" style="white-space: nowrap;">struct lock_object - *ilk</var>, <var class="Fa" style="white-space: nowrap;">const char - *file</var>, <var class="Fa" style="white-space: nowrap;">int - line</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">lockmgr_printinfo</code>(<var class="Fa" style="white-space: nowrap;">const - struct lock *lkp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">lockmgr_recursed</code>(<var class="Fa" style="white-space: nowrap;">const - struct lock *lkp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">lockmgr_rw</code>(<var class="Fa" style="white-space: nowrap;">struct - lock *lkp</var>, <var class="Fa" style="white-space: nowrap;">u_int - flags</var>, <var class="Fa" style="white-space: nowrap;">struct rwlock - *ilk</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">lockmgr_slock</code>(<var class="Fa" style="white-space: nowrap;">struct - lock *lkp</var>, <var class="Fa" style="white-space: nowrap;">u_int - flags</var>, <var class="Fa" style="white-space: nowrap;">const char - *file</var>, <var class="Fa" style="white-space: nowrap;">int - line</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">lockmgr_unlock</code>(<var class="Fa" style="white-space: nowrap;">struct - lock *lkp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">lockmgr_xlock</code>(<var class="Fa" style="white-space: nowrap;">struct - lock *lkp</var>, <var class="Fa" style="white-space: nowrap;">u_int - flags</var>, <var class="Fa" style="white-space: nowrap;">const char - *file</var>, <var class="Fa" style="white-space: nowrap;">int - line</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">lockstatus</code>(<var class="Fa" style="white-space: nowrap;">const - struct lock *lkp</var>);</p> -<p class="Pp"> - <br/> - <code class="Cd">options INVARIANTS</code> - <br/> - <code class="Cd">options INVARIANT_SUPPORT</code> - <br/> - <var class="Ft">void</var> - <br/> - <code class="Fn">lockmgr_assert</code>(<var class="Fa" style="white-space: nowrap;">const - struct lock *lkp</var>, <var class="Fa" style="white-space: nowrap;">int - what</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#lockinit"><code class="Fn" id="lockinit">lockinit</code></a>() - function is used to initialize a lock. It must be called before any - operation can be performed on a lock. Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">lkp</var></dt> - <dd>A pointer to the lock to initialize.</dd> - <dt><var class="Fa">prio</var></dt> - <dd>The priority passed to <a class="Xr">sleep(9)</a>.</dd> - <dt><var class="Fa">wmesg</var></dt> - <dd>The lock message. This is used for both debugging output and - <a class="Xr">sleep(9)</a>.</dd> - <dt><var class="Fa">timo</var></dt> - <dd>The timeout value passed to <a class="Xr">sleep(9)</a>.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>The flags the lock is to be initialized with: - <dl class="Bl-tag"> - <dt id="LK_CANRECURSE"><a class="permalink" href="#LK_CANRECURSE"><code class="Dv">LK_CANRECURSE</code></a></dt> - <dd>Allow recursive exclusive locks.</dd> - <dt id="LK_NOPROFILE"><a class="permalink" href="#LK_NOPROFILE"><code class="Dv">LK_NOPROFILE</code></a></dt> - <dd>Disable lock profiling for this lock.</dd> - <dt id="LK_NOSHARE"><a class="permalink" href="#LK_NOSHARE"><code class="Dv">LK_NOSHARE</code></a></dt> - <dd>Allow exclusive locks only.</dd> - <dt id="LK_NOWITNESS"><a class="permalink" href="#LK_NOWITNESS"><code class="Dv">LK_NOWITNESS</code></a></dt> - <dd>Instruct <a class="Xr">witness(4)</a> to ignore this lock.</dd> - <dt id="LK_NODUP"><a class="permalink" href="#LK_NODUP"><code class="Dv">LK_NODUP</code></a></dt> - <dd><a class="Xr">witness(4)</a> should log messages about duplicate locks - being acquired.</dd> - <dt id="LK_QUIET"><a class="permalink" href="#LK_QUIET"><code class="Dv">LK_QUIET</code></a></dt> - <dd>Disable <a class="Xr">ktr(4)</a> logging for this lock.</dd> - </dl> - </dd> -</dl> -<p class="Pp" id="lockdestroy">The - <a class="permalink" href="#lockdestroy"><code class="Fn">lockdestroy</code></a>() - function is used to destroy a lock, and while it is called in a number of - places in the kernel, it currently does nothing.</p> -<p class="Pp" id="lockmgr">The - <a class="permalink" href="#lockmgr"><code class="Fn">lockmgr</code></a>() - and - <a class="permalink" href="#lockmgr_rw"><code class="Fn" id="lockmgr_rw">lockmgr_rw</code></a>() - functions handle general locking functionality within the kernel, including - support for shared and exclusive locks, and recursion. - <code class="Fn">lockmgr</code>() and <code class="Fn">lockmgr_rw</code>() - are also able to upgrade and downgrade locks.</p> -<p class="Pp">Their arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">lkp</var></dt> - <dd>A pointer to the lock to manipulate.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>Flags indicating what action is to be taken. - <dl class="Bl-tag"> - <dt id="LK_SHARED"><a class="permalink" href="#LK_SHARED"><code class="Dv">LK_SHARED</code></a></dt> - <dd>Acquire a shared lock. If an exclusive lock is currently held, - <code class="Dv">EDEADLK</code> will be returned.</dd> - <dt id="LK_EXCLUSIVE"><a class="permalink" href="#LK_EXCLUSIVE"><code class="Dv">LK_EXCLUSIVE</code></a></dt> - <dd>Acquire an exclusive lock. If an exclusive lock is already held, and - <code class="Dv">LK_CANRECURSE</code> is not set, the system will - <a class="Xr">panic(9)</a>.</dd> - <dt id="LK_DOWNGRADE"><a class="permalink" href="#LK_DOWNGRADE"><code class="Dv">LK_DOWNGRADE</code></a></dt> - <dd>Downgrade exclusive lock to a shared lock. Downgrading a shared lock - is not permitted. If an exclusive lock has been recursed, the system - will <a class="Xr">panic(9)</a>.</dd> - <dt id="LK_UPGRADE"><a class="permalink" href="#LK_UPGRADE"><code class="Dv">LK_UPGRADE</code></a></dt> - <dd>Upgrade a shared lock to an exclusive lock. If this call fails, the - shared lock is lost, even if the <code class="Dv">LK_NOWAIT</code> - flag is specified. During the upgrade, the shared lock could be - temporarily dropped. Attempts to upgrade an exclusive lock will cause - a <a class="Xr">panic(9)</a>.</dd> - <dt id="LK_TRYUPGRADE"><a class="permalink" href="#LK_TRYUPGRADE"><code class="Dv">LK_TRYUPGRADE</code></a></dt> - <dd>Try to upgrade a shared lock to an exclusive lock. The failure to - upgrade does not result in the dropping of the shared lock - ownership.</dd> - <dt id="LK_RELEASE"><a class="permalink" href="#LK_RELEASE"><code class="Dv">LK_RELEASE</code></a></dt> - <dd>Release the lock. Releasing a lock that is not held can cause a - <a class="Xr">panic(9)</a>.</dd> - <dt id="LK_DRAIN"><a class="permalink" href="#LK_DRAIN"><code class="Dv">LK_DRAIN</code></a></dt> - <dd>Wait for all activity on the lock to end, then mark it decommissioned. - This is used before freeing a lock that is part of a piece of memory - that is about to be freed. (As documented in - <code class="In"><<a class="In">sys/lockmgr.h</a>></code>.)</dd> - <dt id="LK_SLEEPFAIL"><a class="permalink" href="#LK_SLEEPFAIL"><code class="Dv">LK_SLEEPFAIL</code></a></dt> - <dd>Fail if operation has slept.</dd> - <dt id="LK_NOWAIT"><a class="permalink" href="#LK_NOWAIT"><code class="Dv">LK_NOWAIT</code></a></dt> - <dd>Do not allow the call to sleep. This can be used to test the - lock.</dd> - <dt id="LK_TIMELOCK"><a class="permalink" href="#LK_TIMELOCK"><code class="Dv">LK_TIMELOCK</code></a></dt> - <dd>Use <var class="Fa">timo</var> during a sleep; otherwise, 0 is - used.</dd> - <dt id="LK_NOWITNESS~2"><a class="permalink" href="#LK_NOWITNESS~2"><code class="Dv">LK_NOWITNESS</code></a></dt> - <dd>Skip the <a class="Xr">witness(4)</a> checks for this instance.</dd> - <dt id="LK_CANRECURSE~2"><a class="permalink" href="#LK_CANRECURSE~2"><code class="Dv">LK_CANRECURSE</code></a></dt> - <dd>Allow recursion on an exclusive lock. For every lock there must be a - release.</dd> - <dt id="LK_INTERLOCK"><a class="permalink" href="#LK_INTERLOCK"><code class="Dv">LK_INTERLOCK</code></a></dt> - <dd>Unlock the interlock (which should be locked already).</dd> - <dt id="LK_NODDLKTREAT"><a class="permalink" href="#LK_NODDLKTREAT"><code class="Dv">LK_NODDLKTREAT</code></a></dt> - <dd>Normally, - <a class="permalink" href="#lockmgr~2"><code class="Fn" id="lockmgr~2">lockmgr</code></a>() - postpones serving further shared requests for shared-locked lock if - there is exclusive waiter, to avoid exclusive lock starvation. But, if - the thread requesting the shared lock already owns a shared lockmgr - lock, the request is granted even in presence of the parallel - exclusive lock request, which is done to avoid deadlocks with - recursive shared acquisition. - <p class="Pp">The <code class="Dv">LK_NODDLKTREAT</code> flag can only - be used by code which requests shared non-recursive lock. The flag - allows exclusive requests to preempt the current shared request even - if the current thread owns shared locks. This is safe since shared - lock is guaranteed to not recurse, and is used when thread is known - to held unrelated shared locks, to not cause unnecessary starvation. - An example is <code class="Dv">vp</code> locking in VFS - <a class="Xr">lookup(9)</a>, when <code class="Dv">dvp</code> is - already locked.</p> - </dd> - </dl> - </dd> - <dt id="lockmgr~3"><var class="Fa">ilk</var></dt> - <dd>An interlock mutex for controlling group access to the lock. If - <code class="Dv">LK_INTERLOCK</code> is specified, - <a class="permalink" href="#lockmgr~3"><code class="Fn">lockmgr</code></a>() - and - <a class="permalink" href="#lockmgr_rw~2"><code class="Fn" id="lockmgr_rw~2">lockmgr_rw</code></a>() - assume <var class="Fa">ilk</var> is currently owned and not recursed, and - will return it unlocked. See <a class="Xr">mtx_assert(9)</a>.</dd> -</dl> -<p class="Pp" id="lockmgr_args">The - <a class="permalink" href="#lockmgr_args"><code class="Fn">lockmgr_args</code></a>() - and - <a class="permalink" href="#lockmgr_args_rw"><code class="Fn" id="lockmgr_args_rw">lockmgr_args_rw</code></a>() - function work like <code class="Fn">lockmgr</code>() and - <code class="Fn">lockmgr_rw</code>() but accepting a - <var class="Fa">wmesg</var>, <var class="Fa">timo</var> and - <var class="Fa">prio</var> on a per-instance basis. The specified values - will override the default ones, but this can still be used passing, - respectively, <code class="Dv">LK_WMESG_DEFAULT</code>, - <code class="Dv">LK_PRIO_DEFAULT</code> and - <code class="Dv">LK_TIMO_DEFAULT</code>.</p> -<p class="Pp" id="lockmgr_lock_flags">The - <a class="permalink" href="#lockmgr_lock_flags"><code class="Fn">lockmgr_lock_flags</code></a>() - function works like <code class="Fn">lockmgr</code>() but accepts explicit - <var class="Fa">file</var> and <var class="Fa">line</var> arguments for lock - tracing.</p> -<p class="Pp" id="lockmgr_slock">The - <a class="permalink" href="#lockmgr_slock"><code class="Fn">lockmgr_slock</code></a>(), - <a class="permalink" href="#lockmgr_xlock"><code class="Fn" id="lockmgr_xlock">lockmgr_xlock</code></a>(), - and - <a class="permalink" href="#lockmgr_unlock"><code class="Fn" id="lockmgr_unlock">lockmgr_unlock</code></a>() - functions are lightweight entry points that function like - <code class="Fn">lockmgr</code>() for the <code class="Dv">LK_SHARED</code>, - <code class="Dv">LK_EXCLUSIVE</code>, and <code class="Dv">LK_RELEASE</code> - operations respectively. They provide functionality similar to - <a class="Xr">sx(9)</a> locks in that none of the additional - <a class="Xr">lockmgr(9)</a> features are supported. Specifically, these - functions do not support unlocking interlocks, the - <code class="Dv">LK_SLEEPFAIL</code> flag, or locks with shared locking - disabled via <code class="Dv">LK_NOSHARE</code>. They also accept explicit - <var class="Fa">file</var> and <var class="Fa">line</var> arguments for lock - tracing.</p> -<p class="Pp" id="lockmgr_disown">The - <a class="permalink" href="#lockmgr_disown"><code class="Fn">lockmgr_disown</code></a>() - function switches the owner from the current thread to be - <code class="Dv">LK_KERNPROC</code>, if the lock is already held.</p> -<p class="Pp" id="lockmgr_disowned">The - <a class="permalink" href="#lockmgr_disowned"><code class="Fn">lockmgr_disowned</code></a>() - function returns true or false according to whether the lock is held by - <code class="Dv">LK_KERNPROC</code>.</p> -<p class="Pp" id="lockmgr_printinfo">The - <a class="permalink" href="#lockmgr_printinfo"><code class="Fn">lockmgr_printinfo</code></a>() - function prints debugging information about the lock. It is used primarily - by <a class="Xr">VOP_PRINT(9)</a> functions.</p> -<p class="Pp" id="lockmgr_recursed">The - <a class="permalink" href="#lockmgr_recursed"><code class="Fn">lockmgr_recursed</code></a>() - function returns true if the lock is recursed, 0 otherwise.</p> -<p class="Pp" id="lockstatus">The - <a class="permalink" href="#lockstatus"><code class="Fn">lockstatus</code></a>() - function returns the status of the lock in relation to the current - thread.</p> -<p class="Pp" id="lockmgr_assert">When compiled with <code class="Cd">options - INVARIANTS</code> and <code class="Cd">options INVARIANT_SUPPORT</code>, the - <a class="permalink" href="#lockmgr_assert"><code class="Fn">lockmgr_assert</code></a>() - function tests <var class="Fa">lkp</var> for the assertions specified in - <var class="Fa">what</var>, and panics if they are not met. One of the - following assertions must be specified:</p> -<dl class="Bl-tag"> - <dt id="KA_LOCKED"><a class="permalink" href="#KA_LOCKED"><code class="Dv">KA_LOCKED</code></a></dt> - <dd>Assert that the current thread has either a shared or an exclusive lock on - the <var class="Vt">lkp</var> lock pointed to by the first argument.</dd> - <dt id="KA_SLOCKED"><a class="permalink" href="#KA_SLOCKED"><code class="Dv">KA_SLOCKED</code></a></dt> - <dd>Assert that the current thread has a shared lock on the - <var class="Vt">lkp</var> lock pointed to by the first argument.</dd> - <dt id="KA_XLOCKED"><a class="permalink" href="#KA_XLOCKED"><code class="Dv">KA_XLOCKED</code></a></dt> - <dd>Assert that the current thread has an exclusive lock on the - <var class="Vt">lkp</var> lock pointed to by the first argument.</dd> - <dt id="KA_UNLOCKED"><a class="permalink" href="#KA_UNLOCKED"><code class="Dv">KA_UNLOCKED</code></a></dt> - <dd>Assert that the current thread has no lock on the - <var class="Vt">lkp</var> lock pointed to by the first argument.</dd> -</dl> -<p class="Pp">In addition, one of the following optional assertions can be used - with either an <code class="Dv">KA_LOCKED</code>, - <code class="Dv">KA_SLOCKED</code>, or <code class="Dv">KA_XLOCKED</code> - assertion:</p> -<dl class="Bl-tag"> - <dt id="KA_RECURSED"><a class="permalink" href="#KA_RECURSED"><code class="Dv">KA_RECURSED</code></a></dt> - <dd>Assert that the current thread has a recursed lock on - <var class="Fa">lkp</var>.</dd> - <dt id="KA_NOTRECURSED"><a class="permalink" href="#KA_NOTRECURSED"><code class="Dv">KA_NOTRECURSED</code></a></dt> - <dd>Assert that the current thread does not have a recursed lock on - <var class="Fa">lkp</var>.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">lockmgr</code>() and - <code class="Fn">lockmgr_rw</code>() functions return 0 on success and - non-zero on failure.</p> -<p class="Pp">The <code class="Fn">lockstatus</code>() function returns:</p> -<dl class="Bl-tag"> - <dt id="LK_EXCLUSIVE~2"><a class="permalink" href="#LK_EXCLUSIVE~2"><code class="Dv">LK_EXCLUSIVE</code></a></dt> - <dd>An exclusive lock is held by the current thread.</dd> - <dt id="LK_EXCLOTHER"><a class="permalink" href="#LK_EXCLOTHER"><code class="Dv">LK_EXCLOTHER</code></a></dt> - <dd>An exclusive lock is held by someone other than the current thread.</dd> - <dt id="LK_SHARED~2"><a class="permalink" href="#LK_SHARED~2"><code class="Dv">LK_SHARED</code></a></dt> - <dd>A shared lock is held.</dd> - <dt id="0"><a class="permalink" href="#0"><code class="Li">0</code></a></dt> - <dd>The lock is not held by anyone.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp"><code class="Fn">lockmgr</code>() and - <code class="Fn">lockmgr_rw</code>() fail if:</p> -<dl class="Bl-tag"> - <dt id="EBUSY">[<a class="permalink" href="#EBUSY"><code class="Er">EBUSY</code></a>]</dt> - <dd><a class="permalink" href="#LK_FORCEUPGRADE"><code class="Dv" id="LK_FORCEUPGRADE">LK_FORCEUPGRADE</code></a> - was requested and another thread had already requested a lock - upgrade.</dd> - <dt id="EBUSY~2">[<a class="permalink" href="#EBUSY~2"><code class="Er">EBUSY</code></a>]</dt> - <dd><a class="permalink" href="#LK_NOWAIT~2"><code class="Dv" id="LK_NOWAIT~2">LK_NOWAIT</code></a> - was set, and a sleep would have been required, or - <code class="Dv">LK_TRYUPGRADE</code> operation was not able to upgrade - the lock.</dd> - <dt id="EDEADLK">[<a class="permalink" href="#EDEADLK"><code class="Er">EDEADLK</code></a>]</dt> - <dd>A shared lock was attempted while the thread already held the exclusive - lock.</dd> - <dt id="ENOLCK">[<a class="permalink" href="#ENOLCK"><code class="Er">ENOLCK</code></a>]</dt> - <dd><a class="permalink" href="#LK_SLEEPFAIL~2"><code class="Dv" id="LK_SLEEPFAIL~2">LK_SLEEPFAIL</code></a> - was set and <code class="Fn">lockmgr</code>() or - <code class="Fn">lockmgr_rw</code>() did sleep.</dd> - <dt id="EINTR">[<a class="permalink" href="#EINTR"><code class="Er">EINTR</code></a>]</dt> - <dd><a class="permalink" href="#PCATCH"><code class="Dv" id="PCATCH">PCATCH</code></a> - was set in the lock priority, and a signal was delivered during a sleep. - Note the - <a class="permalink" href="#ERESTART"><code class="Er" id="ERESTART">ERESTART</code></a> - error below.</dd> - <dt id="ERESTART~2">[<a class="permalink" href="#ERESTART~2"><code class="Er">ERESTART</code></a>]</dt> - <dd><a class="permalink" href="#PCATCH~2"><code class="Dv" id="PCATCH~2">PCATCH</code></a> - was set in the lock priority, a signal was delivered during a sleep, and - the system call is to be restarted.</dd> - <dt id="EWOULDBLOCK">[<a class="permalink" href="#EWOULDBLOCK"><code class="Er">EWOULDBLOCK</code></a>]</dt> - <dd>a non-zero timeout was given, and the timeout expired.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">If <code class="Dv">LK_INTERLOCK</code> is passed in the - <var class="Fa">flags</var> argument to - <a class="permalink" href="#lockmgr~4"><code class="Fn" id="lockmgr~4">lockmgr</code></a>() - or - <a class="permalink" href="#lockmgr_rw~3"><code class="Fn" id="lockmgr_rw~3">lockmgr_rw</code></a>(), - the <var class="Fa">ilk</var> must be held prior to calling - <code class="Fn">lockmgr</code>() or <code class="Fn">lockmgr_rw</code>(), - and will be returned unlocked.</p> -<p class="Pp">Upgrade attempts that fail result in the loss of the lock that is - currently held. Also, it is invalid to upgrade an exclusive lock, and a - <a class="Xr">panic(9)</a> will be the result of trying.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">witness(4)</a>, <a class="Xr">condvar(9)</a>, - <a class="Xr">locking(9)</a>, <a class="Xr">mtx_assert(9)</a>, - <a class="Xr">mutex(9)</a>, <a class="Xr">panic(9)</a>, - <a class="Xr">rwlock(9)</a>, <a class="Xr">sleep(9)</a>, - <a class="Xr">sx(9)</a>, <a class="Xr">VOP_PRINT(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 21, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/locking.9 3.html b/static/freebsd/man9/locking.9 3.html deleted file mode 100644 index a983183f..00000000 --- a/static/freebsd/man9/locking.9 3.html +++ /dev/null @@ -1,458 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">LOCKING(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">LOCKING(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">locking</code> — <span class="Nd">kernel - synchronization primitives</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#FreeBSD"><i class="Em" id="FreeBSD">FreeBSD</i></a> - kernel is written to run across multiple CPUs and as such provides several - different synchronization primitives to allow developers to safely access - and manipulate many data types.</p> -<section class="Ss"> -<h2 class="Ss" id="Mutexes"><a class="permalink" href="#Mutexes">Mutexes</a></h2> -<p class="Pp">Mutexes (also called "blocking mutexes") are the most - commonly used synchronization primitive in the kernel. A thread acquires - (locks) a mutex before accessing data shared with other threads (including - interrupt threads), and releases (unlocks) it afterwards. If the mutex - cannot be acquired, the thread requesting it will wait. Mutexes are adaptive - by default, meaning that if the owner of a contended mutex is currently - running on another CPU, then a thread attempting to acquire the mutex will - spin rather than yielding the processor. Mutexes fully support priority - propagation.</p> -<p class="Pp">See <a class="Xr">mutex(9)</a> for details.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Spin_Mutexes"><a class="permalink" href="#Spin_Mutexes">Spin - Mutexes</a></h2> -<p class="Pp">Spin mutexes are a variation of basic mutexes; the main difference - between the two is that spin mutexes never block. Instead, they spin while - waiting for the lock to be released. To avoid deadlock, a thread that holds - a spin mutex must never yield its CPU. Unlike ordinary mutexes, spin mutexes - disable interrupts when acquired. Since disabling interrupts can be - expensive, they are generally slower to acquire and release. Spin mutexes - should be used only when absolutely necessary, e.g. to protect data shared - with interrupt filter code (see <a class="Xr">bus_setup_intr(9)</a> for - details), or for scheduler internals.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Mutex_Pools"><a class="permalink" href="#Mutex_Pools">Mutex - Pools</a></h2> -<p class="Pp">With most synchronization primitives, such as mutexes, the - programmer must provide memory to hold the primitive. For example, a mutex - may be embedded inside the structure it protects. Mutex pools provide a - preallocated set of mutexes to avoid this requirement. Note that mutexes - from a pool may only be used as leaf locks.</p> -<p class="Pp">See <a class="Xr">mtx_pool(9)</a> for details.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Reader/Writer_Locks"><a class="permalink" href="#Reader/Writer_Locks">Reader/Writer - Locks</a></h2> -<p class="Pp">Reader/writer locks allow shared access to protected data by - multiple threads or exclusive access by a single thread. The threads with - shared access are known as - <a class="permalink" href="#readers"><i class="Em" id="readers">readers</i></a> - since they should only read the protected data. A thread with exclusive - access is known as a - <a class="permalink" href="#writer"><i class="Em" id="writer">writer</i></a> - since it may modify protected data.</p> -<p class="Pp">Reader/writer locks can be treated as mutexes (see above and - <a class="Xr">mutex(9)</a>) with shared/exclusive semantics. Reader/writer - locks support priority propagation like mutexes, but priority is propagated - only to an exclusive holder. This limitation comes from the fact that shared - owners are anonymous.</p> -<p class="Pp">See <a class="Xr">rwlock(9)</a> for details.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Read-Mostly_Locks"><a class="permalink" href="#Read-Mostly_Locks">Read-Mostly - Locks</a></h2> -<p class="Pp">Read-mostly locks are similar to - <a class="permalink" href="#reader/writer"><i class="Em" id="reader/writer">reader/writer</i></a> - locks but optimized for very infrequent write locking. - <a class="permalink" href="#Read-mostly"><i class="Em" id="Read-mostly">Read-mostly</i></a> - locks implement full priority propagation by tracking shared owners using a - caller-supplied - <a class="permalink" href="#tracker"><i class="Em" id="tracker">tracker</i></a> - data structure.</p> -<p class="Pp">See <a class="Xr">rmlock(9)</a> for details.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Sleepable_Read-Mostly_Locks"><a class="permalink" href="#Sleepable_Read-Mostly_Locks">Sleepable - Read-Mostly Locks</a></h2> -<p class="Pp">Sleepable read-mostly locks are a variation on read-mostly locks. - Threads holding an exclusive lock may sleep, but threads holding a shared - lock may not. Priority is propagated to shared owners but not to exclusive - owners.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Shared/exclusive_locks"><a class="permalink" href="#Shared/exclusive_locks">Shared/exclusive - locks</a></h2> -<p class="Pp">Shared/exclusive locks are similar to reader/writer locks; the - main difference between them is that shared/exclusive locks may be held - during unbounded sleep. Acquiring a contested shared/exclusive lock can - perform an unbounded sleep. These locks do not support priority - propagation.</p> -<p class="Pp">See <a class="Xr">sx(9)</a> for details.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Lockmanager_locks"><a class="permalink" href="#Lockmanager_locks">Lockmanager - locks</a></h2> -<p class="Pp">Lockmanager locks are sleepable shared/exclusive locks used mostly - in <a class="Xr">VFS(9)</a> (as a <a class="Xr">vnode(9)</a> lock) and in - the buffer cache (<a class="Xr">BUF_LOCK(9)</a>). They have features other - lock types do not have such as sleep timeouts, blocking upgrades, writer - starvation avoidance, draining, and an interlock mutex, but this makes them - complicated both to use and to implement; for this reason, they should be - avoided.</p> -<p class="Pp">See <a class="Xr">lock(9)</a> for details.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Non-blocking_synchronization"><a class="permalink" href="#Non-blocking_synchronization">Non-blocking - synchronization</a></h2> -<p class="Pp">The kernel has two facilities, <a class="Xr">epoch(9)</a> and - <a class="Xr">smr(9)</a>, which can be used to provide read-only access to a - data structure while one or more writers are concurrently modifying the data - structure. Specifically, readers using <a class="Xr">epoch(9)</a> and - <a class="Xr">smr(9)</a> to synchronize accesses do not block writers, in - contrast with reader/writer locks, and they help ensure that memory freed by - writers is not reused until all readers which may be accessing it have - finished. Thus, they are a useful building block in the construction of - lock-free data structures.</p> -<p class="Pp">These facilities are difficult to use correctly and should be - avoided in preference to traditional mutual exclusion-based synchronization, - except when performance or non-blocking guarantees are a major concern.</p> -<p class="Pp">See <a class="Xr">epoch(9)</a> and <a class="Xr">smr(9)</a> for - details.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Counting_semaphores"><a class="permalink" href="#Counting_semaphores">Counting - semaphores</a></h2> -<p class="Pp">Counting semaphores provide a mechanism for synchronizing access - to a pool of resources. Unlike mutexes, semaphores do not have the concept - of an owner, so they can be useful in situations where one thread needs to - acquire a resource, and another thread needs to release it. They are largely - deprecated.</p> -<p class="Pp">See <a class="Xr">sema(9)</a> for details.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Condition_variables"><a class="permalink" href="#Condition_variables">Condition - variables</a></h2> -<p class="Pp">Condition variables are used in conjunction with locks to wait for - a condition to become true. A thread must hold the associated lock before - calling one of the - <a class="permalink" href="#cv_wait"><code class="Fn" id="cv_wait">cv_wait</code></a>(), - functions. When a thread waits on a condition, the lock is atomically - released before the thread yields the processor and reacquired before the - function call returns. Condition variables may be used with blocking - mutexes, reader/writer locks, read-mostly locks, and shared/exclusive - locks.</p> -<p class="Pp">See <a class="Xr">condvar(9)</a> for details.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Sleep/Wakeup"><a class="permalink" href="#Sleep/Wakeup">Sleep/Wakeup</a></h2> -<p class="Pp">The functions - <a class="permalink" href="#tsleep"><code class="Fn" id="tsleep">tsleep</code></a>(), - <code class="Fn">msleep</code>(), <code class="Fn">msleep_spin</code>(), - <code class="Fn">pause</code>(), <code class="Fn">wakeup</code>(), and - <a class="permalink" href="#wakeup_one"><code class="Fn" id="wakeup_one">wakeup_one</code></a>() - also handle event-based thread blocking. Unlike condition variables, - arbitrary addresses may be used as wait channels and a dedicated structure - does not need to be allocated. However, care must be taken to ensure that - wait channel addresses are unique to an event. If a thread must wait for an - external event, it is put to sleep by <code class="Fn">tsleep</code>(), - <code class="Fn">msleep</code>(), <code class="Fn">msleep_spin</code>(), or - <code class="Fn">pause</code>(). Threads may also wait using one of the - locking primitive sleep routines <a class="Xr">mtx_sleep(9)</a>, - <a class="Xr">rw_sleep(9)</a>, or <a class="Xr">sx_sleep(9)</a>.</p> -<p class="Pp" id="wakeup">The parameter <var class="Fa">chan</var> is an - arbitrary address that uniquely identifies the event on which the thread is - being put to sleep. All threads sleeping on a single - <var class="Fa">chan</var> are woken up later by - <a class="permalink" href="#wakeup"><code class="Fn">wakeup</code></a>() - (often called from inside an interrupt routine) to indicate that the event - the thread was blocking on has occurred.</p> -<p class="Pp" id="msleep">Several of the sleep functions including - <a class="permalink" href="#msleep"><code class="Fn">msleep</code></a>(), - <a class="permalink" href="#msleep_spin"><code class="Fn" id="msleep_spin">msleep_spin</code></a>(), - and the locking primitive sleep routines specify an additional lock - parameter. The lock will be released before sleeping and reacquired before - the sleep routine returns. If <var class="Fa">priority</var> includes the - <code class="Dv">PDROP</code> flag, then the lock will not be reacquired - before returning. The lock is used to ensure that a condition can be checked - atomically, and that the current thread can be suspended without missing a - change to the condition or an associated wakeup. In addition, all of the - sleep routines will fully drop the <var class="Va">Giant</var> mutex (even - if recursed) while the thread is suspended and will reacquire the - <var class="Va">Giant</var> mutex (restoring any recursion) before the - function returns.</p> -<p class="Pp" id="pause">The - <a class="permalink" href="#pause"><code class="Fn">pause</code></a>() - function is a special sleep function that waits for a specified amount of - time to pass before the thread resumes execution. This sleep cannot be - terminated early by either an explicit <code class="Fn">wakeup</code>() or a - signal.</p> -<p class="Pp">See <a class="Xr">sleep(9)</a> for details.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Giant"><a class="permalink" href="#Giant">Giant</a></h2> -<p class="Pp">Giant is a special mutex used to protect data structures that do - not yet have their own locks. Since it provides semantics akin to the old - <a class="Xr">spl(9)</a> interface, Giant has special characteristics:</p> -<ol class="Bl-enum"> - <li>It is recursive.</li> - <li>Drivers can request that Giant be locked around them by not marking - themselves MPSAFE. Note that infrastructure to do this is slowly going - away as non-MPSAFE drivers either became properly locked or - disappear.</li> - <li>Giant must be locked before other non-sleepable locks.</li> - <li>Giant is dropped during unbounded sleeps and reacquired after wakeup.</li> - <li>There are places in the kernel that drop Giant and pick it back up again. - Sleep locks will do this before sleeping. Parts of the network or VM code - may do this as well. This means that you cannot count on Giant keeping - other code from running if your code sleeps, even if you want it to.</li> -</ol> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="INTERACTIONS"><a class="permalink" href="#INTERACTIONS">INTERACTIONS</a></h1> -<p class="Pp">The primitives can interact and have a number of rules regarding - how they can and can not be combined. Many of these rules are checked by - <a class="Xr">witness(4)</a>.</p> -<section class="Ss"> -<h2 class="Ss" id="Bounded_vs._Unbounded_Sleep"><a class="permalink" href="#Bounded_vs._Unbounded_Sleep">Bounded - vs. Unbounded Sleep</a></h2> -<p class="Pp">In a bounded sleep (also referred to as “blocking”) - the only resource needed to resume execution of a thread is CPU time for the - owner of a lock that the thread is waiting to acquire. In an unbounded sleep - (often referred to as simply “sleeping”) a thread waits for an - external event or for a condition to become true. In particular, a - dependency chain of threads in bounded sleeps should always make forward - progress, since there is always CPU time available. This requires that no - thread in a bounded sleep is waiting for a lock held by a thread in an - unbounded sleep. To avoid priority inversions, a thread in a bounded sleep - lends its priority to the owner of the lock that it is waiting for.</p> -<p class="Pp">The following primitives perform bounded sleeps: mutexes, - reader/writer locks and read-mostly locks.</p> -<p class="Pp">The following primitives perform unbounded sleeps: sleepable - read-mostly locks, shared/exclusive locks, lockmanager locks, counting - semaphores, condition variables, and sleep/wakeup.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="General_Principles"><a class="permalink" href="#General_Principles">General - Principles</a></h2> -<ul class="Bl-bullet"> - <li>It is an error to do any operation that could result in yielding the - processor while holding a spin mutex.</li> - <li>It is an error to do any operation that could result in unbounded sleep - while holding any primitive from the 'bounded sleep' group. For example, - it is an error to try to acquire a shared/exclusive lock while holding a - mutex, or to try to allocate memory with M_WAITOK while holding a - reader/writer lock. - <p class="Pp" id="sleep">Note that the lock passed to one of the - <a class="permalink" href="#sleep"><code class="Fn">sleep</code></a>() - or <code class="Fn">cv_wait</code>() functions is dropped before the - thread enters the unbounded sleep and does not violate this rule.</p> - </li> - <li>It is an error to do any operation that could result in yielding of the - processor when running inside an interrupt filter.</li> - <li>It is an error to do any operation that could result in unbounded sleep - when running inside an interrupt thread.</li> -</ul> -</section> -<section class="Ss"> -<h2 class="Ss" id="Interaction_table"><a class="permalink" href="#Interaction_table">Interaction - table</a></h2> -<p class="Pp">The following table shows what you can and can not do while - holding one of the locking primitives discussed. Note that - “sleep” includes - <a class="permalink" href="#sema_wait"><code class="Fn" id="sema_wait">sema_wait</code></a>(), - <a class="permalink" href="#sema_timedwait"><code class="Fn" id="sema_timedwait">sema_timedwait</code></a>(), - any of the <code class="Fn">cv_wait</code>() functions, and any of the - <code class="Fn">sleep</code>() functions.</p> -<table class="Bl-column Bd-indent"> - <tr> - <td><i class="Em"> You want:</i></td> - <td>spin mtx</td> - <td>mutex/rw</td> - <td>rmlock</td> - <td>sleep rm</td> - <td>sx/lk</td> - <td>sleep</td> - </tr> - <tr id="You"> - <td><a class="permalink" href="#You"><i class="Em">You have:</i></a></td> - <td>--------</td> - <td>--------</td> - <td>------</td> - <td>--------</td> - <td>-----</td> - <td>------</td> - </tr> - <tr> - <td>spin mtx</td> - <td>ok</td> - <td>no</td> - <td>no</td> - <td>no</td> - <td>no</td> - <td>no-1</td> - </tr> - <tr> - <td>mutex/rw</td> - <td>ok</td> - <td>ok</td> - <td>ok</td> - <td>no</td> - <td>no</td> - <td>no-1</td> - </tr> - <tr> - <td>rmlock</td> - <td>ok</td> - <td>ok</td> - <td>ok</td> - <td>no</td> - <td>no</td> - <td>no-1</td> - </tr> - <tr> - <td>sleep rm</td> - <td>ok</td> - <td>ok</td> - <td>ok</td> - <td>ok-2</td> - <td>ok-2</td> - <td>ok-2/3</td> - </tr> - <tr> - <td>sx</td> - <td>ok</td> - <td>ok</td> - <td>ok</td> - <td>ok</td> - <td>ok</td> - <td>ok-3</td> - </tr> - <tr> - <td>lockmgr</td> - <td>ok</td> - <td>ok</td> - <td>ok</td> - <td>ok</td> - <td>ok</td> - <td>ok</td> - </tr> -</table> -<p class="Pp" id="*1"><a class="permalink" href="#*1"><i class="Em">*1</i></a> - There are calls that atomically release this primitive when going to sleep - and reacquire it on wakeup - (<a class="permalink" href="#mtx_sleep"><code class="Fn" id="mtx_sleep">mtx_sleep</code></a>(), - <a class="permalink" href="#rw_sleep"><code class="Fn" id="rw_sleep">rw_sleep</code></a>(), - <code class="Fn">msleep_spin</code>(), etc.).</p> -<p class="Pp" id="*2"><a class="permalink" href="#*2"><i class="Em">*2</i></a> - These cases are only allowed while holding a write lock on a sleepable - read-mostly lock.</p> -<p class="Pp" id="*3"><a class="permalink" href="#*3"><i class="Em">*3</i></a> - Though one can sleep while holding this lock, one can also use a - <a class="permalink" href="#sleep~2"><code class="Fn" id="sleep~2">sleep</code></a>() - function to atomically release this primitive when going to sleep and - reacquire it on wakeup.</p> -<p class="Pp">Note that non-blocking try operations on locks are always - permitted.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Context_mode_table"><a class="permalink" href="#Context_mode_table">Context - mode table</a></h2> -<p class="Pp">The next table shows what can be used in different contexts. At - this time this is a rather easy to remember table.</p> -<table class="Bl-column Bd-indent"> - <tr id="Context:"> - <td><a class="permalink" href="#Context:"><i class="Em">Context:</i></a></td> - <td>spin mtx</td> - <td>mutex/rw</td> - <td>rmlock</td> - <td>sleep rm</td> - <td>sx/lk</td> - <td>sleep</td> - </tr> - <tr> - <td>interrupt filter:</td> - <td>ok</td> - <td>no</td> - <td>no</td> - <td>no</td> - <td>no</td> - <td>no</td> - </tr> - <tr> - <td>interrupt thread:</td> - <td>ok</td> - <td>ok</td> - <td>ok</td> - <td>no</td> - <td>no</td> - <td>no</td> - </tr> - <tr> - <td>callout:</td> - <td>ok</td> - <td>ok</td> - <td>ok</td> - <td>no</td> - <td>no</td> - <td>no</td> - </tr> - <tr> - <td>direct callout:</td> - <td>ok</td> - <td>no</td> - <td>no</td> - <td>no</td> - <td>no</td> - <td>no</td> - </tr> - <tr> - <td>system call:</td> - <td>ok</td> - <td>ok</td> - <td>ok</td> - <td>ok</td> - <td>ok</td> - <td>ok</td> - </tr> -</table> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">lockstat(1)</a>, <a class="Xr">witness(4)</a>, - <a class="Xr">atomic(9)</a>, <a class="Xr">BUS_SETUP_INTR(9)</a>, - <a class="Xr">callout(9)</a>, <a class="Xr">condvar(9)</a>, - <a class="Xr">epoch(9)</a>, <a class="Xr">lock(9)</a>, - <a class="Xr">LOCK_PROFILING(9)</a>, <a class="Xr">mtx_pool(9)</a>, - <a class="Xr">mutex(9)</a>, <a class="Xr">rmlock(9)</a>, - <a class="Xr">rwlock(9)</a>, <a class="Xr">sema(9)</a>, - <a class="Xr">sleep(9)</a>, <a class="Xr">smr(9)</a>, - <a class="Xr">sx(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">There are too many locking primitives to choose from.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 28, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/mac.9 3.html b/static/freebsd/man9/mac.9 3.html deleted file mode 100644 index 87203490..00000000 --- a/static/freebsd/man9/mac.9 3.html +++ /dev/null @@ -1,200 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">MAC(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">MAC(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">mac</code> — <span class="Nd">TrustedBSD - Mandatory Access Control framework</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mac.h</a>></code></p> -<p class="Pp">In the kernel configuration file: - <br/> - <code class="Cd">options MAC</code> - <br/> - <code class="Cd">options MAC_DEBUG</code></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<section class="Ss"> -<h2 class="Ss" id="Introduction"><a class="permalink" href="#Introduction">Introduction</a></h2> -<p class="Pp">The TrustedBSD mandatory access control framework permits - dynamically introduced system security modules to modify system security - functionality. This can be used to support a variety of new security - services, including traditional labeled mandatory access control models. The - framework provides a series of entry points which must be called by code - supporting various kernel services, especially with respects to access - control points and object creation. The framework then calls out to security - modules to offer them the opportunity to modify security behavior at those - MAC API entry points. Both consumers of the API (normal kernel services) and - security modules must be aware of the semantics of the API calls, - particularly with respect to synchronization primitives (such as - locking).</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Kernel_Objects_Supported_by_the_Framework"><a class="permalink" href="#Kernel_Objects_Supported_by_the_Framework">Kernel - Objects Supported by the Framework</a></h2> -<p class="Pp">The MAC framework manages labels on a variety of types of - in-kernel objects, including process credentials, vnodes, devfs_dirents, - mount points, sockets, mbufs, bpf descriptors, network interfaces, IP - fragment queues, and pipes. Label data on kernel objects, represented by - <var class="Vt">struct label</var>, is policy-unaware, and may be used in - the manner seen fit by policy modules.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="API_for_Consumers"><a class="permalink" href="#API_for_Consumers">API - for Consumers</a></h2> -<p class="Pp">The MAC API provides a large set of entry points, too broad to - specifically document here. In general, these entry points represent an - access control check or other MAC-relevant operations, accept one or more - subjects (credentials) authorizing the activity, a set of objects on which - the operation is to be performed, and a set of operation arguments providing - information about the type of operation being requested.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Locking_for_Consumers"><a class="permalink" href="#Locking_for_Consumers">Locking - for Consumers</a></h2> -<p class="Pp">Consumers of the MAC API must be aware of the locking requirements - for each API entry point: generally, appropriate locks must be held over - each subject or object being passed into the call, so that MAC modules may - make use of various aspects of the object for access control purposes. For - example, vnode locks are frequently required in order that the MAC framework - and modules may retrieve security labels and attributes from the vnodes for - the purposes of access control. Similarly, the caller must be aware of the - reference counting semantics of any subject or object passed into the MAC - API: all calls require that a valid reference to the object be held for the - duration of the (potentially lengthy) MAC API call. Under some - circumstances, objects must be held in either a shared or exclusive - manner.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="API_for_Module_Writers"><a class="permalink" href="#API_for_Module_Writers">API - for Module Writers</a></h2> -<p class="Pp">Each module exports a structure describing the MAC API operations - that the module chooses to implement, including initialization and - destruction API entry points, a variety of object creation and destruction - calls, and a large set of access control check points. In the future, - additional audit entry points will also be present. Module authors may - choose to only implement a subset of the entry points, setting API function - pointers in the description structure to <code class="Dv">NULL</code>, - permitting the framework to avoid calling into the module.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Locking_for_Module_Writers"><a class="permalink" href="#Locking_for_Module_Writers">Locking - for Module Writers</a></h2> -<p class="Pp">Module writers must be aware of the locking semantics of entry - points that they implement: MAC API entry points will have specific locking - or reference counting semantics for each argument, and modules must follow - the locking and reference counting protocol or risk a variety of failure - modes (including race conditions, inappropriate pointer dereferences, - etc).</p> -<p class="Pp">MAC module writers must also be aware that MAC API entry points - will frequently be invoked from deep in a kernel stack, and as such must be - careful to avoid violating more global locking requirements, such as global - lock order requirements. For example, it may be inappropriate to lock - additional objects not specifically maintained and ordered by the policy - module, or the policy module might violate a global ordering requirement - relating to those additional objects.</p> -<p class="Pp">Finally, MAC API module implementors must be careful to avoid - inappropriately calling back into the MAC framework: the framework makes use - of locking to prevent inconsistencies during policy module attachment and - detachment. MAC API modules should avoid producing scenarios in which - deadlocks or inconsistencies might occur.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Adding_New_MAC_Entry_Points"><a class="permalink" href="#Adding_New_MAC_Entry_Points">Adding - New MAC Entry Points</a></h2> -<p class="Pp">The MAC API is intended to be easily expandable as new services - are added to the kernel. In order that policies may be guaranteed the - opportunity to ubiquitously protect system subjects and objects, it is - important that kernel developers maintain awareness of when security checks - or relevant subject or object operations occur in newly written or modified - kernel code. New entry points must be carefully documented so as to prevent - any confusion regarding lock orders and semantics. Introducing new entry - points requires four distinct pieces of work: introducing new MAC API - entries reflecting the operation arguments, scattering these MAC API entry - points throughout the new or modified kernel service, extending the - front-end implementation of the MAC API framework, and modifying appropriate - modules to take advantage of the new entry points so that they may - consistently enforce their policies.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="ENTRY_POINTS"><a class="permalink" href="#ENTRY_POINTS">ENTRY - POINTS</a></h1> -<p class="Pp">System service and module authors should reference the - <span class="RsT">FreeBSD Architecture Handbook</span> for information on - the MAC Framework APIs.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">acl(3)</a>, <a class="Xr">mac(3)</a>, - <a class="Xr">posix1e(3)</a>, <a class="Xr">mac(4)</a>, - <a class="Xr">ucred(9)</a>, <a class="Xr">vaccess(9)</a>, - <a class="Xr">vaccess_acl_posix1e(9)</a>, <a class="Xr">VFS(9)</a>, - <a class="Xr">VOP_SETLABEL(9)</a></p> -<p class="Pp"><cite class="Rs"><span class="RsT">The FreeBSD Architecture - Handbook</span>, - <a class="RsU" href="https://docs.freebsd.org/en/books/arch-handbook/">https://docs.freebsd.org/en/books/arch-handbook/</a>.</cite></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The TrustedBSD MAC Framework first appeared in - <span class="Ux">FreeBSD 5.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Robert - Watson</span>. This software was contributed to the - <span class="Ux">FreeBSD</span> Project by Network Associates Laboratories, - the Security Research Division of Network Associates Inc. under DARPA/SPAWAR - contract N66001-01-C-8035 (“CBOSS”), as part of the DARPA - CHATS research program.</p> -<p class="Pp">The TrustedBSD MAC Framework was designed by - <span class="An">Robert Watson</span>, and implemented by the Network - Associates Laboratories Network Security (NETSEC), Secure Execution - Environment (SEE), and Adaptive Network Defense research groups. Network - Associates Laboratory staff contributing to the CBOSS Project include (in - alphabetical order): <span class="An">Lee Badger</span>, - <span class="An">Brian Feldman</span>, <span class="An">Hrishikesh - Dandekar</span>, <span class="An">Tim Fraser</span>, <span class="An">Doug - Kilpatrick</span>, <span class="An">Suresh Krishnaswamy</span>, - <span class="An">Adam Migus</span>, <span class="An">Wayne Morrison</span>, - <span class="An">Andrew Reisse</span>, <span class="An">Chris Vance</span>, - and <span class="An">Robert Watson</span>.</p> -<p class="Pp">Sub-contracted staff include: <span class="An">Chris - Costello</span>, <span class="An">Poul-Henning Kamp</span>, - <span class="An">Jonathan Lemon</span>, <span class="An">Kirk - McKusick</span>, <span class="An">Dag-Erling Smørgrav</span>.</p> -<p class="Pp">Additional contributors include: <span class="An">Pawel - Dawidek</span>, <span class="An">Chris Faulhaber</span>, - <span class="An">Ilmar Habibulin</span>, <span class="An">Mike - Halderman</span>, <span class="An">Bosko Milekic</span>, - <span class="An">Thomas Moestl</span>, <span class="An">Andrew - Reiter</span>, and <span class="An">Tim Robbins</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">While the MAC Framework design is intended to support the - containment of the root user, not all attack channels are currently - protected by entry point checks. As such, MAC Framework policies should not - be relied on, in isolation, to protect against a malicious privileged - user.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 20, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/make_dev.9 4.html b/static/freebsd/man9/make_dev.9 4.html deleted file mode 100644 index 75599e63..00000000 --- a/static/freebsd/man9/make_dev.9 4.html +++ /dev/null @@ -1,415 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">MAKE_DEV(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">MAKE_DEV(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">make_dev</code>, - <code class="Nm">make_dev_cred</code>, - <code class="Nm">make_dev_credf</code>, <code class="Nm">make_dev_p</code>, - <code class="Nm">make_dev_s</code>, <code class="Nm">make_dev_alias</code>, - <code class="Nm">make_dev_alias_p</code>, - <code class="Nm">destroy_dev</code>, - <code class="Nm">destroy_dev_sched</code>, - <code class="Nm">destroy_dev_sched_cb</code>, - <code class="Nm">destroy_dev_drain</code>, - <code class="Nm">dev_depends</code> — <span class="Nd">create and - destroy character devices including devfs registration</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/conf.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">make_dev_args_init</code>(<var class="Fa" style="white-space: nowrap;">struct - make_dev_args *args</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">make_dev_s</code>(<var class="Fa" style="white-space: nowrap;">struct - make_dev_args *args</var>, - <var class="Fa" style="white-space: nowrap;">struct cdev **cdev</var>, - <var class="Fa" style="white-space: nowrap;">const char *fmt</var>, - <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">make_dev_alias_p</code>(<var class="Fa" style="white-space: nowrap;">int - flags</var>, <var class="Fa" style="white-space: nowrap;">struct cdev - **cdev</var>, <var class="Fa" style="white-space: nowrap;">struct cdev - *pdev</var>, <var class="Fa" style="white-space: nowrap;">const char - *fmt</var>, <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">destroy_dev</code>(<var class="Fa" style="white-space: nowrap;">struct - cdev *dev</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">destroy_dev_sched</code>(<var class="Fa" style="white-space: nowrap;">struct - cdev *dev</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">destroy_dev_sched_cb</code>(<var class="Fa" style="white-space: nowrap;">struct - cdev *dev</var>, <var class="Fa" style="white-space: nowrap;">void - (*cb)(void *)</var>, <var class="Fa" style="white-space: nowrap;">void - *arg</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">destroy_dev_drain</code>(<var class="Fa" style="white-space: nowrap;">struct - cdevsw *csw</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">dev_depends</code>(<var class="Fa" style="white-space: nowrap;">struct - cdev *pdev</var>, <var class="Fa" style="white-space: nowrap;">struct cdev - *cdev</var>);</p> -<p class="Pp">LEGACY INTERFACES - <br/> - <var class="Ft">struct cdev *</var> - <br/> - <code class="Fn">make_dev</code>(<var class="Fa" style="white-space: nowrap;">struct - cdevsw *cdevsw</var>, <var class="Fa" style="white-space: nowrap;">int - unit</var>, <var class="Fa" style="white-space: nowrap;">uid_t uid</var>, - <var class="Fa" style="white-space: nowrap;">gid_t gid</var>, - <var class="Fa" style="white-space: nowrap;">int perms</var>, - <var class="Fa" style="white-space: nowrap;">const char *fmt</var>, - <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">struct cdev *</var> - <br/> - <code class="Fn">make_dev_cred</code>(<var class="Fa" style="white-space: nowrap;">struct - cdevsw *cdevsw</var>, <var class="Fa" style="white-space: nowrap;">int - unit</var>, <var class="Fa" style="white-space: nowrap;">struct ucred - *cr</var>, <var class="Fa" style="white-space: nowrap;">uid_t uid</var>, - <var class="Fa" style="white-space: nowrap;">gid_t gid</var>, - <var class="Fa" style="white-space: nowrap;">int perms</var>, - <var class="Fa" style="white-space: nowrap;">const char *fmt</var>, - <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">struct cdev *</var> - <br/> - <code class="Fn">make_dev_credf</code>(<var class="Fa" style="white-space: nowrap;">int - flags</var>, <var class="Fa" style="white-space: nowrap;">struct cdevsw - *cdevsw</var>, <var class="Fa" style="white-space: nowrap;">int unit</var>, - <var class="Fa" style="white-space: nowrap;">struct ucred *cr</var>, - <var class="Fa" style="white-space: nowrap;">uid_t uid</var>, - <var class="Fa" style="white-space: nowrap;">gid_t gid</var>, - <var class="Fa" style="white-space: nowrap;">int perms</var>, - <var class="Fa" style="white-space: nowrap;">const char *fmt</var>, - <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">make_dev_p</code>(<var class="Fa" style="white-space: nowrap;">int - flags</var>, <var class="Fa" style="white-space: nowrap;">struct cdev - **cdev</var>, <var class="Fa" style="white-space: nowrap;">struct cdevsw - *devsw</var>, <var class="Fa" style="white-space: nowrap;">struct ucred - *cr</var>, <var class="Fa" style="white-space: nowrap;">uid_t uid</var>, - <var class="Fa" style="white-space: nowrap;">gid_t gid</var>, - <var class="Fa" style="white-space: nowrap;">int mode</var>, - <var class="Fa" style="white-space: nowrap;">const char *fmt</var>, - <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">struct cdev *</var> - <br/> - <code class="Fn">make_dev_alias</code>(<var class="Fa" style="white-space: nowrap;">struct - cdev *pdev</var>, <var class="Fa" style="white-space: nowrap;">const char - *fmt</var>, <var class="Fa" style="white-space: nowrap;">...</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#make_dev_s"><code class="Fn" id="make_dev_s">make_dev_s</code></a>() - function creates a <var class="Fa">cdev</var> structure for a new device, - which is returned into the <var class="Fa">cdev</var> argument. It also - notifies <a class="Xr">devfs(4)</a> of the presence of the new device, that - causes corresponding nodes to be created. Besides this, a - <a class="Xr">devctl(4)</a> notification is sent. The function takes the - structure <var class="Va">struct make_dev_args args</var>, which specifies - the parameters for the device creation:</p> -<p class="Pp"></p> -<div class="Bd Bd-indent Li"> -<pre>struct make_dev_args { - size_t mda_size; - int mda_flags; - struct cdevsw *mda_devsw; - struct ucred *mda_cr; - uid_t mda_uid; - gid_t mda_gid; - int mda_mode; - int mda_unit; - void *mda_si_drv1; - void *mda_si_drv2; -};</pre> -</div> -<p class="Pp" id="make_dev_args_init">Before use and filling with the desired - values, the structure must be initialized by the - <a class="permalink" href="#make_dev_args_init"><code class="Fn">make_dev_args_init</code></a>() - function, which ensures that future kernel interface expansion does not - affect driver source code or binary interface.</p> -<p class="Pp">The created device will be owned by - <var class="Va">args.mda_uid</var>, with the group ownership as - <var class="Va">args.mda_gid</var>. The name is the expansion of - <var class="Va">fmt</var> and following arguments as - <a class="Xr">printf(9)</a> would print it. The name determines its path - under <span class="Pa">/dev</span> or other <a class="Xr">devfs(4)</a> mount - point and may contain slash ‘<code class="Li">/</code>’ - characters to denote subdirectories. The permissions of the file specified - in <var class="Va">args.mda_mode</var> are defined in - <code class="In"><<a class="In">sys/stat.h</a>></code>:</p> -<p class="Pp"></p> -<div class="Bd Bd-indent Li"> -<pre>#define S_IRWXU 0000700 /* RWX mask for owner */ -#define S_IRUSR 0000400 /* R for owner */ -#define S_IWUSR 0000200 /* W for owner */ -#define S_IXUSR 0000100 /* X for owner */ - -#define S_IRWXG 0000070 /* RWX mask for group */ -#define S_IRGRP 0000040 /* R for group */ -#define S_IWGRP 0000020 /* W for group */ -#define S_IXGRP 0000010 /* X for group */ - -#define S_IRWXO 0000007 /* RWX mask for other */ -#define S_IROTH 0000004 /* R for other */ -#define S_IWOTH 0000002 /* W for other */ -#define S_IXOTH 0000001 /* X for other */ - -#define S_ISUID 0004000 /* set user id on execution */ -#define S_ISGID 0002000 /* set group id on execution */ -#define S_ISVTX 0001000 /* sticky bit */ -#ifndef _POSIX_SOURCE -#define S_ISTXT 0001000 -#endif</pre> -</div> -<p class="Pp">The <var class="Va">args.mda_cr</var> argument specifies - credentials that will be stored in the <var class="Fa">si_cred</var> member - of the initialized <var class="Fa">struct cdev</var>.</p> -<p class="Pp" id="make_dev_s~2">The <var class="Va">args.mda_flags</var> - argument alters the operation of - <a class="permalink" href="#make_dev_s~2"><code class="Fn">make_dev_s</code></a>(). - The following values are currently accepted:</p> -<p class="Pp"></p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt id="MAKEDEV_REF"><a class="permalink" href="#MAKEDEV_REF"><code class="Dv">MAKEDEV_REF</code></a></dt> - <dd>reference the created device</dd> - <dt id="MAKEDEV_NOWAIT"><a class="permalink" href="#MAKEDEV_NOWAIT"><code class="Dv">MAKEDEV_NOWAIT</code></a></dt> - <dd>do not sleep, the call may fail</dd> - <dt id="MAKEDEV_WAITOK"><a class="permalink" href="#MAKEDEV_WAITOK"><code class="Dv">MAKEDEV_WAITOK</code></a></dt> - <dd>allow the function to sleep to satisfy malloc</dd> - <dt id="MAKEDEV_ETERNAL"><a class="permalink" href="#MAKEDEV_ETERNAL"><code class="Dv">MAKEDEV_ETERNAL</code></a></dt> - <dd>created device will be never destroyed</dd> - <dt id="MAKEDEV_CHECKNAME"><a class="permalink" href="#MAKEDEV_CHECKNAME"><code class="Dv">MAKEDEV_CHECKNAME</code></a></dt> - <dd>return an error if the device name is invalid or already exists</dd> -</dl> -</div> -<p class="Pp" id="make_dev_alias_p">Only <code class="Dv">MAKEDEV_NOWAIT</code>, - <code class="Dv">MAKEDEV_WAITOK</code> and - <code class="Dv">MAKEDEV_CHECKNAME</code> values are accepted for the - <a class="permalink" href="#make_dev_alias_p"><code class="Fn">make_dev_alias_p</code></a>() - function.</p> -<p class="Pp">The <code class="Dv">MAKEDEV_WAITOK</code> flag is assumed if none - of <code class="Dv">MAKEDEV_WAITOK</code>, - <code class="Dv">MAKEDEV_NOWAIT</code> is specified.</p> -<p class="Pp" id="devfs_lookup">The <a class="Xr">dev_clone(9)</a> event handler - shall specify the <code class="Dv">MAKEDEV_REF</code> flag when creating a - device in response to lookup, to avoid a race where the created device is - immediately destroyed after - <a class="permalink" href="#devfs_lookup"><code class="Fn">devfs_lookup</code></a>() - drops its reference to <var class="Fa">cdev</var>.</p> -<p class="Pp" id="destroy_dev">The <code class="Dv">MAKEDEV_ETERNAL</code> flag - allows the kernel to not acquire some locks when translating system calls - into the cdevsw methods calls. It is responsibility of the driver author to - make sure that - <a class="permalink" href="#destroy_dev"><code class="Fn">destroy_dev</code></a>() - is never called on the returned cdev. For the convenience, use the - <code class="Dv">MAKEDEV_ETERNAL_KLD</code> flag for the code that can be - compiled into kernel or loaded (and unloaded) as loadable module.</p> -<p class="Pp">A panic will occur if the - <code class="Dv">MAKEDEV_CHECKNAME</code> flag is not specified and the - device name is invalid or already exists.</p> -<p class="Pp" id="make_dev_p">The - <a class="permalink" href="#make_dev_p"><code class="Fn">make_dev_p</code></a>() - use of the form:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct cdev *dev; -int res; -res = make_dev_p(flags, &dev, cdevsw, cred, uid, gid, perms, name);</pre> -</div> -<p class="Pp">is equivalent to the code:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct cdev *dev; -struct make_dev_args args; -int res; - -make_dev_args_init(&args); -args.mda_flags = flags; -args.mda_devsw = cdevsw; -args.mda_cr = cred; -args.mda_uid = uid; -args.mda_gid = gid; -args.mda_mode = perms; -res = make_dev_s(&args, &dev, name);</pre> -</div> -<p class="Pp" id="make_dev_credf">Similarly, the - <a class="permalink" href="#make_dev_credf"><code class="Fn">make_dev_credf</code></a>() - function call is equivalent to:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>(void) make_dev_s(&args, &dev, name);</pre> -</div> -<p class="Pp" id="make_dev_credf~2">In other words, - <a class="permalink" href="#make_dev_credf~2"><code class="Fn">make_dev_credf</code></a>() - does not allow the caller to obtain the return value, and in kernels - compiled with the <var class="Va">INVARIANTS</var> options, the function - asserts that the device creation succeeded.</p> -<p class="Pp" id="make_dev_cred">The - <a class="permalink" href="#make_dev_cred"><code class="Fn">make_dev_cred</code></a>() - function is equivalent to the call:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>make_dev_credf(0, cdevsw, unit, cr, uid, gid, perms, fmt, ...);</pre> -</div> -<p class="Pp" id="make_dev">The - <a class="permalink" href="#make_dev"><code class="Fn">make_dev</code></a>() - function call is the same as:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>make_dev_credf(0, cdevsw, unit, NULL, uid, gid, perms, fmt, ...);</pre> -</div> -<p class="Pp" id="make_dev_alias_p~2">The - <a class="permalink" href="#make_dev_alias_p~2"><code class="Fn">make_dev_alias_p</code></a>() - function takes the returned <var class="Ft">cdev</var> from - <code class="Fn">make_dev</code>() and makes another (aliased) name for this - device. It is an error to call <code class="Fn">make_dev_alias_p</code>() - prior to calling <code class="Fn">make_dev</code>().</p> -<p class="Pp" id="make_dev_alias">The - <a class="permalink" href="#make_dev_alias"><code class="Fn">make_dev_alias</code></a>() - function is similar to <code class="Fn">make_dev_alias_p</code>() but it - returns the resulting aliasing <var class="Ft">*cdev</var> and may not - return an error.</p> -<p class="Pp" id="make_dev_s~3">The <var class="Fa">cdev</var> returned by - <a class="permalink" href="#make_dev_s~3"><code class="Fn">make_dev_s</code></a>() - and <code class="Fn">make_dev_alias_p</code>() has two fields, - <var class="Fa">si_drv1</var> and <var class="Fa">si_drv2</var>, that are - available to store state. Both fields are of type <var class="Ft">void - *</var>, and can be initialized simultaneously with the - <var class="Va">cdev</var> allocation by filling - <var class="Va">args.mda_si_drv1</var> and - <var class="Va">args.mda_si_drv2</var> members of the - <code class="Fn">make_dev_s</code>() argument structure, or filled after the - <var class="Va">cdev</var> is allocated, if using legacy interfaces. In the - latter case, the driver should handle the race of accessing uninitialized - <var class="Va">si_drv1</var> and <var class="Va">si_drv2</var> itself. - These are designed to replace the <var class="Fa">unit</var> argument to - <code class="Fn">make_dev</code>(), which can be obtained with - <a class="permalink" href="#dev2unit"><code class="Fn" id="dev2unit">dev2unit</code></a>().</p> -<p class="Pp" id="destroy_dev~2">The - <a class="permalink" href="#destroy_dev~2"><code class="Fn">destroy_dev</code></a>() - function takes the returned <var class="Fa">cdev</var> from - <code class="Fn">make_dev</code>() and destroys the registration for that - device. The notification is sent to <a class="Xr">devctl(4)</a> about the - destruction event. Do not call <code class="Fn">destroy_dev</code>() on - devices that were created with <code class="Fn">make_dev_alias</code>().</p> -<p class="Pp" id="dev_depends">The - <a class="permalink" href="#dev_depends"><code class="Fn">dev_depends</code></a>() - function establishes a parent-child relationship between two devices. The - net effect is that a <code class="Fn">destroy_dev</code>() of the parent - device will also result in the destruction of the child device(s), if any - exist. A device may simultaneously be a parent and a child, so it is - possible to build a complete hierarchy.</p> -<p class="Pp" id="destroy_dev_sched_cb">The - <a class="permalink" href="#destroy_dev_sched_cb"><code class="Fn">destroy_dev_sched_cb</code></a>() - function schedules execution of the <code class="Fn">destroy_dev</code>() - for the specified <var class="Fa">cdev</var> in the safe context. After - <code class="Fn">destroy_dev</code>() is finished, and if the supplied - <var class="Fa">cb</var> is not <code class="Dv">NULL</code>, the callback - <var class="Fa">cb</var> is called, with argument <var class="Fa">arg</var>. - The <code class="Fn">destroy_dev_sched</code>() function is the same as:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>destroy_dev_sched_cb(cdev, NULL, NULL);</pre> -</div> -<p class="Pp" id="d_close">Neither the - <a class="permalink" href="#d_close"><code class="Fn">d_close</code></a>() - driver method, nor a <a class="Xr">devfs_cdevpriv(9)</a> - <var class="Fa">dtr</var> method can <code class="Fn">destroy_dev</code>() - directly. Doing so causes deadlock when - <code class="Fn">destroy_dev</code>() waits for all threads to leave the - driver methods and finish executing any per-open destructors. Also, because - <code class="Fn">destroy_dev</code>() sleeps, no non-sleepable locks may be - held over the call. The <code class="Fn">destroy_dev_sched</code>() family - of functions overcome these issues.</p> -<p class="Pp" id="destroy_dev_drain">The device driver may call the - <a class="permalink" href="#destroy_dev_drain"><code class="Fn">destroy_dev_drain</code></a>() - function to wait until all devices that have supplied - <var class="Fa">csw</var> as cdevsw, are destroyed. This is useful when - driver knows that - <a class="permalink" href="#destroy_dev_sched"><code class="Fn" id="destroy_dev_sched">destroy_dev_sched</code></a>() - is called for all instantiated devices, but need to postpone module unload - until <code class="Fn">destroy_dev</code>() is actually finished for all of - them.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If successful, <code class="Fn">make_dev_s</code>() and - <code class="Fn">make_dev_p</code>() will return 0, otherwise they will - return an error. If successful, <code class="Fn">make_dev_credf</code>() - will return a valid <var class="Fa">cdev</var> pointer, otherwise it will - return <code class="Dv">NULL</code>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp">The <code class="Fn">make_dev_s</code>(), - <code class="Fn">make_dev_p</code>() and - <code class="Fn">make_dev_alias_p</code>() calls will fail and the device - will be not registered if:</p> -<dl class="Bl-tag"> - <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt> - <dd>The <code class="Dv">MAKEDEV_NOWAIT</code> flag was specified and a memory - allocation request could not be satisfied.</dd> - <dt id="ENAMETOOLONG">[<a class="permalink" href="#ENAMETOOLONG"><code class="Er">ENAMETOOLONG</code></a>]</dt> - <dd>The <code class="Dv">MAKEDEV_CHECKNAME</code> flag was specified and the - provided device name is longer than - <code class="Dv">SPECNAMELEN</code>.</dd> - <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt> - <dd>The <code class="Dv">MAKEDEV_CHECKNAME</code> flag was specified and the - provided device name is empty, contains a "." or ".." - path component or ends with - ‘<code class="Li">/</code>’.</dd> - <dt id="EINVAL~2">[<a class="permalink" href="#EINVAL~2"><code class="Er">EINVAL</code></a>]</dt> - <dd>The <code class="Dv">MAKEDEV_CHECKNAME</code> flag was specified and the - provided device name contains invalid characters.</dd> - <dt id="EEXIST">[<a class="permalink" href="#EEXIST"><code class="Er">EEXIST</code></a>]</dt> - <dd>The <code class="Dv">MAKEDEV_CHECKNAME</code> flag was specified and the - provided device name already exists.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">devctl(4)</a>, <a class="Xr">devfs(4)</a>, - <a class="Xr">dev_clone(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Fn">make_dev</code>() and - <code class="Fn">destroy_dev</code>() functions first appeared in - <span class="Ux">FreeBSD 4.0</span>. The function - <code class="Fn">make_dev_alias</code>() first appeared in - <span class="Ux">FreeBSD 4.1</span>. The function - <code class="Fn">dev_depends</code>() first appeared in - <span class="Ux">FreeBSD 5.0</span>. The functions - <code class="Fn">make_dev_credf</code>(), - <code class="Fn">destroy_dev_sched</code>(), - <code class="Fn">destroy_dev_sched_cb</code>() first appeared in - <span class="Ux">FreeBSD 7.0</span>. The function - <code class="Fn">make_dev_p</code>() first appeared in - <span class="Ux">FreeBSD 8.2</span>. The function - <code class="Fn">make_dev_s</code>() first appeared in - <span class="Ux">FreeBSD 11.0</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 4, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/malloc.9 4.html b/static/freebsd/man9/malloc.9 4.html deleted file mode 100644 index 2676cb88..00000000 --- a/static/freebsd/man9/malloc.9 4.html +++ /dev/null @@ -1,332 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">MALLOC(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">MALLOC(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">malloc</code>, - <code class="Nm">mallocarray</code>, <code class="Nm">free</code>, - <code class="Nm">zfree</code>, <code class="Nm">realloc</code>, - <code class="Nm">reallocf</code>, - <code class="Nm">malloc_usable_size</code>, - <code class="Nm">malloc_aligned</code>, <code class="Nm">malloc_exec</code>, - <code class="Nm">MALLOC_DECLARE</code>, - <code class="Nm">MALLOC_DEFINE</code>, - <code class="Nm">malloc_domainset</code>, - <code class="Nm">malloc_domainset_aligned</code>, - <code class="Nm">malloc_domainset_exec</code>, - <code class="Nm">mallocarray_domainset</code> — - <span class="Nd">kernel memory management routines</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/malloc.h</a>></code></p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">malloc</code>(<var class="Fa" style="white-space: nowrap;">size_t - size</var>, <var class="Fa" style="white-space: nowrap;">struct malloc_type - *type</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">mallocarray</code>(<var class="Fa" style="white-space: nowrap;">size_t - nmemb</var>, <var class="Fa" style="white-space: nowrap;">size_t size</var>, - <var class="Fa" style="white-space: nowrap;">struct malloc_type *type</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">free</code>(<var class="Fa" style="white-space: nowrap;">void - *addr</var>, <var class="Fa" style="white-space: nowrap;">struct malloc_type - *type</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">zfree</code>(<var class="Fa" style="white-space: nowrap;">void - *addr</var>, <var class="Fa" style="white-space: nowrap;">struct malloc_type - *type</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">realloc</code>(<var class="Fa" style="white-space: nowrap;">void - *addr</var>, <var class="Fa" style="white-space: nowrap;">size_t size</var>, - <var class="Fa" style="white-space: nowrap;">struct malloc_type *type</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">reallocf</code>(<var class="Fa" style="white-space: nowrap;">void - *addr</var>, <var class="Fa" style="white-space: nowrap;">size_t size</var>, - <var class="Fa" style="white-space: nowrap;">struct malloc_type *type</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">size_t</var> - <br/> - <code class="Fn">malloc_usable_size</code>(<var class="Fa" style="white-space: nowrap;">const - void *addr</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">malloc_aligned</code>(<var class="Fa">size_t size</var>, - <var class="Fa">size_t align</var>, <var class="Fa">struct malloc_type - *type</var>, <var class="Fa">int flags</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">malloc_exec</code>(<var class="Fa" style="white-space: nowrap;">size_t - size</var>, <var class="Fa" style="white-space: nowrap;">struct malloc_type - *type</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><code class="Fn">MALLOC_DECLARE</code>(<var class="Fa" style="white-space: nowrap;">type</var>);</p> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/malloc.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/kernel.h</a>></code></p> -<p class="Pp"><code class="Fn">MALLOC_DEFINE</code>(<var class="Fa" style="white-space: nowrap;">type</var>, - <var class="Fa" style="white-space: nowrap;">shortdesc</var>, - <var class="Fa" style="white-space: nowrap;">longdesc</var>);</p> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/domainset.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/malloc.h</a>></code></p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">malloc_domainset</code>(<var class="Fa" style="white-space: nowrap;">size_t - size</var>, <var class="Fa" style="white-space: nowrap;">struct malloc_type - *type</var>, <var class="Fa" style="white-space: nowrap;">struct domainset - *ds</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">malloc_domainset_aligned</code>(<var class="Fa">size_t - size</var>, <var class="Fa">size_t align</var>, <var class="Fa">struct - malloc_type *type</var>, <var class="Fa">struct domainset *ds</var>, - <var class="Fa">int flags</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">malloc_domainset_exec</code>(<var class="Fa" style="white-space: nowrap;">size_t - size</var>, <var class="Fa" style="white-space: nowrap;">struct malloc_type - *type</var>, <var class="Fa" style="white-space: nowrap;">struct domainset - *ds</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">mallocarray_domainset</code>(<var class="Fa" style="white-space: nowrap;">size_t - nmemb</var>, <var class="Fa" style="white-space: nowrap;">size_t size</var>, - <var class="Fa" style="white-space: nowrap;">struct malloc_type *type</var>, - <var class="Fa" style="white-space: nowrap;">struct domainset *ds</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#malloc"><code class="Fn" id="malloc">malloc</code></a>() - function allocates uninitialized memory in kernel address space for an - object whose size is specified by <var class="Fa">size</var>.</p> -<p class="Pp" id="malloc_domainset">The - <a class="permalink" href="#malloc_domainset"><code class="Fn">malloc_domainset</code></a>() - variant allocates memory from a specific <a class="Xr">numa(4)</a> domain - using the specified domain selection policy. See - <a class="Xr">domainset(9)</a> for some example policies.</p> -<p class="Pp" id="malloc_aligned">The - <a class="permalink" href="#malloc_aligned"><code class="Fn">malloc_aligned</code></a>() - and - <a class="permalink" href="#malloc_domainset_aligned"><code class="Fn" id="malloc_domainset_aligned">malloc_domainset_aligned</code></a>() - variants return allocations aligned as specified by - <var class="Fa">align</var>, which must be non-zero, a power of two, and - less than or equal to the page size.</p> -<p class="Pp" id="malloc_exec">Both - <a class="permalink" href="#malloc_exec"><code class="Fn">malloc_exec</code></a>() - and - <a class="permalink" href="#malloc_domainset_exec"><code class="Fn" id="malloc_domainset_exec">malloc_domainset_exec</code></a>() - can be used to return executable memory. Not all platforms enforce a - distinction between executable and non-executable memory.</p> -<p class="Pp" id="mallocarray">The - <a class="permalink" href="#mallocarray"><code class="Fn">mallocarray</code></a>() - function allocates uninitialized memory in kernel address space for an array - of <var class="Fa">nmemb</var> entries whose size is specified by - <var class="Fa">size</var>.</p> -<p class="Pp" id="mallocarray_domainset">The - <a class="permalink" href="#mallocarray_domainset"><code class="Fn">mallocarray_domainset</code></a>() - variant allocates memory from a specific <a class="Xr">numa(4)</a> domain - using the specified domain selection policy. See - <a class="Xr">domainset(9)</a> for some example policies.</p> -<p class="Pp" id="free">The - <a class="permalink" href="#free"><code class="Fn">free</code></a>() - function releases memory at address <var class="Fa">addr</var> that was - previously allocated by <code class="Fn">malloc</code>() for re-use. The - memory is not zeroed. If <var class="Fa">addr</var> is - <code class="Dv">NULL</code>, then <code class="Fn">free</code>() does - nothing.</p> -<p class="Pp" id="free~2">Like - <a class="permalink" href="#free~2"><code class="Fn">free</code></a>(), the - <a class="permalink" href="#zfree"><code class="Fn" id="zfree">zfree</code></a>() - function releases memory at address <var class="Fa">addr</var> that was - previously allocated by <code class="Fn">malloc</code>() for re-use. - However, <code class="Fn">zfree</code>() will zero the memory before it is - released.</p> -<p class="Pp" id="realloc">The - <a class="permalink" href="#realloc"><code class="Fn">realloc</code></a>() - function changes the size of the previously allocated memory referenced by - <var class="Fa">addr</var> to <var class="Fa">size</var> bytes. The contents - of the memory are unchanged up to the lesser of the new and old sizes. Note - that the returned value may differ from <var class="Fa">addr</var>. If the - requested memory cannot be allocated, <code class="Dv">NULL</code> is - returned and the memory referenced by <var class="Fa">addr</var> is valid - and unchanged. If <var class="Fa">addr</var> is - <code class="Dv">NULL</code>, the <code class="Fn">realloc</code>() function - behaves identically to <code class="Fn">malloc</code>() for the specified - size.</p> -<p class="Pp" id="reallocf">The - <a class="permalink" href="#reallocf"><code class="Fn">reallocf</code></a>() - function is identical to <code class="Fn">realloc</code>() except that it - will free the passed pointer when the requested memory cannot be - allocated.</p> -<p class="Pp" id="malloc_usable_size">The - <a class="permalink" href="#malloc_usable_size"><code class="Fn">malloc_usable_size</code></a>() - function returns the usable size of the allocation pointed to by - <var class="Fa">addr</var>. The return value may be larger than the size - that was requested during allocation.</p> -<p class="Pp" id="malloc~2">Unlike its standard C library counterpart - (<a class="Xr">malloc(3)</a>), the kernel version takes two more arguments. - The <var class="Fa">flags</var> argument further qualifies - <a class="permalink" href="#malloc~2"><code class="Fn">malloc</code></a>()'s - operational characteristics as follows:</p> -<dl class="Bl-tag"> - <dt id="M_ZERO"><a class="permalink" href="#M_ZERO"><code class="Dv">M_ZERO</code></a></dt> - <dd>Causes the allocated memory to be set to all zeros.</dd> - <dt id="M_NODUMP"><a class="permalink" href="#M_NODUMP"><code class="Dv">M_NODUMP</code></a></dt> - <dd>For allocations greater than page size, causes the allocated memory to be - excluded from kernel core dumps.</dd> - <dt id="M_NOWAIT"><a class="permalink" href="#M_NOWAIT"><code class="Dv">M_NOWAIT</code></a></dt> - <dd>Causes <code class="Fn">malloc</code>(), - <code class="Fn">realloc</code>(), and <code class="Fn">reallocf</code>() - to return <code class="Dv">NULL</code> if the request cannot be - immediately fulfilled due to resource shortage. Note that - <code class="Dv">M_NOWAIT</code> is required when running in an interrupt - context.</dd> - <dt id="M_WAITOK"><a class="permalink" href="#M_WAITOK"><code class="Dv">M_WAITOK</code></a></dt> - <dd>Indicates that it is OK to wait for resources. If the request cannot be - immediately fulfilled, the current process is put to sleep to wait for - resources to be released by other processes. The - <code class="Fn">malloc</code>(), <code class="Fn">mallocarray</code>(), - <code class="Fn">realloc</code>(), and <code class="Fn">reallocf</code>() - functions cannot return <code class="Dv">NULL</code> if - <code class="Dv">M_WAITOK</code> is specified. If the multiplication of - <var class="Fa">nmemb</var> and <var class="Fa">size</var> would cause an - integer overflow, the <code class="Fn">mallocarray</code>() function - induces a panic.</dd> - <dt id="M_USE_RESERVE"><a class="permalink" href="#M_USE_RESERVE"><code class="Dv">M_USE_RESERVE</code></a></dt> - <dd>Indicates that the system can use its reserve of memory to satisfy the - request. This option should only be used in combination with - <code class="Dv">M_NOWAIT</code> when an allocation failure cannot be - tolerated by the caller without catastrophic effects on the system.</dd> - <dt id="M_NEVERFREED"><a class="permalink" href="#M_NEVERFREED"><code class="Dv">M_NEVERFREED</code></a></dt> - <dd>This is an internal flag used by the <a class="Xr">uma(9)</a> allocator - and should not be used in regular <code class="Fn">malloc</code>() - invocations. See the description of VM_ALLOC_NOFREE in - <a class="Xr">vm_page_alloc(9)</a> for more details.</dd> -</dl> -<p class="Pp">Exactly one of either <code class="Dv">M_WAITOK</code> or - <code class="Dv">M_NOWAIT</code> must be specified.</p> -<p class="Pp">The <var class="Fa">type</var> argument is used to perform - statistics on memory usage, and for basic sanity checks. It can be used to - identify multiple allocations. The statistics can be examined by - ‘vmstat -m’.</p> -<p class="Pp" id="MALLOC_DECLARE">A <var class="Fa">type</var> is defined using - <var class="Vt">struct malloc_type</var> via the - <a class="permalink" href="#MALLOC_DECLARE"><code class="Fn">MALLOC_DECLARE</code></a>() - and <code class="Fn">MALLOC_DEFINE</code>() macros.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>/* sys/something/foo_extern.h */ - -MALLOC_DECLARE(M_FOOBUF); - -/* sys/something/foo_main.c */ - -MALLOC_DEFINE(M_FOOBUF, "foobuffers", "Buffers to foo data into the ether"); - -/* sys/something/foo_subr.c */ - -... -buf = malloc(sizeof(*buf), M_FOOBUF, M_NOWAIT); - -</pre> -</div> -<p class="Pp" id="MALLOC_DEFINE">In order to use - <a class="permalink" href="#MALLOC_DEFINE"><code class="Fn">MALLOC_DEFINE</code></a>(), - one must include - <code class="In"><<a class="In">sys/param.h</a>></code> (instead of - <code class="In"><<a class="In">sys/types.h</a>></code>) and - <code class="In"><<a class="In">sys/kernel.h</a>></code>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CONTEXT"><a class="permalink" href="#CONTEXT">CONTEXT</a></h1> -<p class="Pp"><code class="Fn">malloc</code>(), - <code class="Fn">realloc</code>() and <code class="Fn">reallocf</code>() may - not be called from fast interrupts handlers. When called from threaded - interrupts, <var class="Fa">flags</var> must contain - <code class="Dv">M_NOWAIT</code>.</p> -<p class="Pp"><code class="Fn">malloc</code>(), - <code class="Fn">realloc</code>() and <code class="Fn">reallocf</code>() may - sleep when called with <code class="Dv">M_WAITOK</code>. - <code class="Fn">free</code>() never sleeps. However, - <code class="Fn">malloc</code>(), <code class="Fn">realloc</code>(), - <code class="Fn">reallocf</code>() and <code class="Fn">free</code>() may - not be called in a critical section or while holding a spin lock.</p> -<p class="Pp">Any calls to <code class="Fn">malloc</code>() (even with - <code class="Dv">M_NOWAIT</code>) or <code class="Fn">free</code>() when - holding a <a class="Xr">vnode(9)</a> interlock, will cause a LOR (Lock Order - Reversal) due to the intertwining of VM Objects and Vnodes.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">The memory allocator allocates memory in chunks that have size a - power of two for requests up to the size of a page of memory. For larger - requests, one or more pages is allocated. While it should not be relied - upon, this information may be useful for optimizing the efficiency of memory - use.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">malloc</code>(), - <code class="Fn">realloc</code>(), and <code class="Fn">reallocf</code>() - functions return a kernel virtual address that is suitably aligned for - storage of any type of object, or <code class="Dv">NULL</code> if the - request could not be satisfied (implying that - <code class="Dv">M_NOWAIT</code> was set).</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DIAGNOSTICS"><a class="permalink" href="#DIAGNOSTICS">DIAGNOSTICS</a></h1> -<p class="Pp">A kernel compiled with the <code class="Dv">INVARIANTS</code> - configuration option attempts to detect memory corruption caused by such - things as writing outside the allocated area and imbalanced calls to the - <code class="Fn">malloc</code>() and <code class="Fn">free</code>() - functions. Failing consistency checks will cause a panic or a system console - message.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">numa(4)</a>, <a class="Xr">vmstat(8)</a>, - <a class="Xr">contigmalloc(9)</a>, <a class="Xr">domainset(9)</a>, - <a class="Xr">memguard(9)</a>, <a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp"><code class="Fn">zfree</code>() first appeared in - <span class="Ux">FreeBSD 13.0</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 4, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/mbchain.9 4.html b/static/freebsd/man9/mbchain.9 4.html deleted file mode 100644 index 8fec949c..00000000 --- a/static/freebsd/man9/mbchain.9 4.html +++ /dev/null @@ -1,229 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">MBCHAIN(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">MBCHAIN(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">mbchain</code>, <code class="Nm">mb_init</code>, - <code class="Nm">mb_initm</code>, <code class="Nm">mb_done</code>, - <code class="Nm">mb_detach</code>, <code class="Nm">mb_fixhdr</code>, - <code class="Nm">mb_reserve</code>, <code class="Nm">mb_put_uint8</code>, - <code class="Nm">mb_put_uint16be</code>, - <code class="Nm">mb_put_uint16le</code>, - <code class="Nm">mb_put_uint32be</code>, - <code class="Nm">mb_put_uint32le</code>, - <code class="Nm">mb_put_int64be</code>, - <code class="Nm">mb_put_int64le</code>, <code class="Nm">mb_put_mem</code>, - <code class="Nm">mb_put_mbuf</code>, <code class="Nm">mb_put_uio</code> - — <span class="Nd">set of functions to build an mbuf chain from - various data types</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="Cd">options LIBMCHAIN</code> <code class="Li">kldload - libmchain</code></p> -<p class="Pp"> - <br/> - <code class="In">#include <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/uio.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mchain.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">mb_init</code>(<var class="Fa" style="white-space: nowrap;">struct - mbchain *mbp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">mb_initm</code>(<var class="Fa" style="white-space: nowrap;">struct - mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">mb_done</code>(<var class="Fa" style="white-space: nowrap;">struct - mbchain *mbp</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">mb_detach</code>(<var class="Fa" style="white-space: nowrap;">struct - mbchain *mbp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">mb_fixhdr</code>(<var class="Fa" style="white-space: nowrap;">struct - mbchain *mbp</var>);</p> -<p class="Pp"><var class="Ft">caddr_t</var> - <br/> - <code class="Fn">mb_reserve</code>(<var class="Fa" style="white-space: nowrap;">struct - mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">int - size</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">mb_put_uint8</code>(<var class="Fa" style="white-space: nowrap;">struct - mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">uint8_t - x</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">mb_put_uint16be</code>(<var class="Fa" style="white-space: nowrap;">struct - mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">uint16_t - x</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">mb_put_uint16le</code>(<var class="Fa" style="white-space: nowrap;">struct - mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">uint16_t - x</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">mb_put_uint32be</code>(<var class="Fa" style="white-space: nowrap;">struct - mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - x</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">mb_put_uint32le</code>(<var class="Fa" style="white-space: nowrap;">struct - mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - x</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">mb_put_int64be</code>(<var class="Fa" style="white-space: nowrap;">struct - mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">int64_t - x</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">mb_put_int64le</code>(<var class="Fa" style="white-space: nowrap;">struct - mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">int64_t - x</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">mb_put_mem</code>(<var class="Fa" style="white-space: nowrap;">struct - mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">c_caddr_t - source</var>, <var class="Fa" style="white-space: nowrap;">int size</var>, - <var class="Fa" style="white-space: nowrap;">int type</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">mb_put_mbuf</code>(<var class="Fa" style="white-space: nowrap;">struct - mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">mb_put_uio</code>(<var class="Fa" style="white-space: nowrap;">struct - mbchain *mbp</var>, <var class="Fa" style="white-space: nowrap;">struct uio - *uiop</var>, <var class="Fa" style="white-space: nowrap;">int - size</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These functions are used to compose mbuf chains from various data - types. The <var class="Vt">mbchain</var> structure is used as a working - context and should be initialized with a call to either - <a class="permalink" href="#mb_init"><code class="Fn" id="mb_init">mb_init</code></a>() - or - <a class="permalink" href="#mb_initm"><code class="Fn" id="mb_initm">mb_initm</code></a>(). - It has the following fields:</p> -<dl class="Bl-tag"> - <dt id="mb_top"><var class="Va">mb_top</var></dt> - <dd>(<var class="Vt">struct mbuf *</var>) A pointer to the top of constructed - mbuf chain.</dd> - <dt id="mb_cur"><var class="Va">mb_cur</var></dt> - <dd>(<var class="Vt">struct mbuf *</var>) A pointer to the currently filled - mbuf.</dd> - <dt id="mb_mleft"><var class="Va">mb_mleft</var></dt> - <dd>(<var class="Vt">int</var>) Number of bytes left in the current mbuf.</dd> - <dt id="mb_count"><var class="Va">mb_count</var></dt> - <dd>(<var class="Vt">int</var>) Total number of bytes placed in the mbuf - chain.</dd> - <dt id="mb_copy"><var class="Va">mb_copy</var></dt> - <dd>(<var class="Vt">mb_copy_t *</var>) User-defined function to perform a - copy into mbuf; useful if any unusual data conversion is necessary.</dd> - <dt id="mb_udata"><var class="Va">mb_udata</var></dt> - <dd>(<var class="Vt">void *</var>) User-supplied data which can be used in the - <var class="Va">mb_copy</var> function.</dd> -</dl> -<p class="Pp" id="mb_done"><a class="permalink" href="#mb_done"><code class="Fn">mb_done</code></a>() - function disposes an mbuf chain pointed to by - <var class="Fa">mbp->mb_top</var> field and sets the field to - <code class="Dv">NULL</code>.</p> -<p class="Pp" id="mb_detach"><a class="permalink" href="#mb_detach"><code class="Fn">mb_detach</code></a>() - function returns the value of <var class="Fa">mbp->mb_top</var> field and - sets its value to <code class="Dv">NULL</code>.</p> -<p class="Pp" id="mb_fixhdr"><a class="permalink" href="#mb_fixhdr"><code class="Fn">mb_fixhdr</code></a>() - recalculates the length of an mbuf chain and updates the - <var class="Va">m_pkthdr.len</var> field of the first mbuf in the chain. It - returns the calculated length.</p> -<p class="Pp" id="mb_reserve"><a class="permalink" href="#mb_reserve"><code class="Fn">mb_reserve</code></a>() - ensures that the object of the length specified by the - <var class="Fa">size</var> argument will fit in the current mbuf (mbuf - allocation is performed if necessary), and advances all pointers as if the - real data was placed. Returned value will point to the beginning of the - reserved space. Note that the size of the object should not exceed - <code class="Dv">MLEN</code> bytes.</p> -<p class="Pp" id="mb_put_*">All - <a class="permalink" href="#mb_put_*"><code class="Fn">mb_put_*</code></a>() - functions perform an actual copy of the data into mbuf chain. Functions - which have <code class="Cm">le</code> or <code class="Cm">be</code> suffixes - will perform conversion to the little- or big-endian data formats.</p> -<p class="Pp" id="mb_put_mem"><a class="permalink" href="#mb_put_mem"><code class="Fn">mb_put_mem</code></a>() - function copies <var class="Fa">size</var> bytes of data specified by the - <var class="Fa">source</var> argument to an mbuf chain. The - <var class="Fa">type</var> argument specifies the method used to perform a - copy, and can be one of the following:</p> -<dl class="Bl-tag"> - <dt id="MB_MSYSTEM"><a class="permalink" href="#MB_MSYSTEM"><code class="Dv">MB_MSYSTEM</code></a></dt> - <dd>Use - <a class="permalink" href="#bcopy"><code class="Fn" id="bcopy">bcopy</code></a>() - function.</dd> - <dt id="MB_MUSER"><a class="permalink" href="#MB_MUSER"><code class="Dv">MB_MUSER</code></a></dt> - <dd>Use <a class="Xr">copyin(9)</a> function.</dd> - <dt id="MB_MINLINE"><a class="permalink" href="#MB_MINLINE"><code class="Dv">MB_MINLINE</code></a></dt> - <dd>Use an “inline” loop which does not call any function.</dd> - <dt id="MB_MZERO"><a class="permalink" href="#MB_MZERO"><code class="Dv">MB_MZERO</code></a></dt> - <dd>Do not copy any data, but just fill the destination with zero bytes.</dd> - <dt id="MB_MCUSTOM"><a class="permalink" href="#MB_MCUSTOM"><code class="Dv">MB_MCUSTOM</code></a></dt> - <dd>Call function specified by the <var class="Fa">mbp->mb_copy</var> - field.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">All <var class="Ft">int</var> functions except - <code class="Fn">mb_fixhdr</code>() return zero if successful and an error - code otherwise.</p> -<p class="Pp" id="Note"><a class="permalink" href="#Note"><i class="Em">Note</i></a>: - after failure of any function, an mbuf chain is left in the broken state, - and only <code class="Fn">mb_done</code>() function can safely be called to - destroy it.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<div class="Bd Li"> -<pre>struct mbchain *mbp; -struct mbuf *m; - -mb_init(mbp); -mb_put_uint8(mbp, 33); -mb_put_uint16le(mbp, length); -m = m_copym(mbp->mb_top, 0, M_COPYALL, M_WAIT); -send(m); -mb_done(mbp);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">mbuf(9)</a>, <a class="Xr">mdchain(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Boris - Popov</span> - <<a class="Mt" href="mailto:bp@FreeBSD.org">bp@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 20, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/mbuf.9 4.html b/static/freebsd/man9/mbuf.9 4.html deleted file mode 100644 index de9adb99..00000000 --- a/static/freebsd/man9/mbuf.9 4.html +++ /dev/null @@ -1,1032 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">MBUF(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">MBUF(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">mbuf</code> — <span class="Nd">memory - management in the kernel IPC subsystem</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mbuf.h</a>></code></p> -<section class="Ss"> -<h2 class="Ss" id="Mbuf_allocation_macros"><a class="permalink" href="#Mbuf_allocation_macros">Mbuf - allocation macros</a></h2> -<p class="Pp"><code class="Fn">MGET</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int - how</var>, <var class="Fa" style="white-space: nowrap;">short - type</var>);</p> -<p class="Pp"><code class="Fn">MGETHDR</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int - how</var>, <var class="Fa" style="white-space: nowrap;">short - type</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">MCLGET</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int - how</var>);</p> -<p class="Pp"><code class="Fn">MEXTADD</code>(<var class="Fa">struct mbuf - *mbuf</var>, <var class="Fa">char *buf</var>, <var class="Fa">u_int - size</var>, <var class="Fa">void (*free)(struct mbuf *)</var>, - <var class="Fa">void *opt_arg1</var>, <var class="Fa">void *opt_arg2</var>, - <var class="Fa">int flags</var>, <var class="Fa">int type</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Mbuf_utility_macros"><a class="permalink" href="#Mbuf_utility_macros">Mbuf - utility macros</a></h2> -<p class="Pp"><var class="Ft">type</var> - <br/> - <code class="Fn">mtod</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, - <var class="Fa" style="white-space: nowrap;">type</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">mtodo</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, - <var class="Fa" style="white-space: nowrap;">offset</var>);</p> -<p class="Pp"><code class="Fn">M_ALIGN</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">u_int - len</var>);</p> -<p class="Pp"><code class="Fn">MH_ALIGN</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">u_int - len</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">M_LEADINGSPACE</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">M_TRAILINGSPACE</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>);</p> -<p class="Pp"><code class="Fn">M_MOVE_PKTHDR</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *to</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *from</var>);</p> -<p class="Pp"><code class="Fn">M_PREPEND</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int - len</var>, <var class="Fa" style="white-space: nowrap;">int how</var>);</p> -<p class="Pp"><code class="Fn">MCHTYPE</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">short - type</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">M_WRITABLE</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Mbuf_allocation_functions"><a class="permalink" href="#Mbuf_allocation_functions">Mbuf - allocation functions</a></h2> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">m_get</code>(<var class="Fa" style="white-space: nowrap;">int - how</var>, <var class="Fa" style="white-space: nowrap;">short - type</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">m_get2</code>(<var class="Fa" style="white-space: nowrap;">int - size</var>, <var class="Fa" style="white-space: nowrap;">int how</var>, - <var class="Fa" style="white-space: nowrap;">short type</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">m_get3</code>(<var class="Fa" style="white-space: nowrap;">int - size</var>, <var class="Fa" style="white-space: nowrap;">int how</var>, - <var class="Fa" style="white-space: nowrap;">short type</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">m_getm</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *orig</var>, <var class="Fa" style="white-space: nowrap;">int - len</var>, <var class="Fa" style="white-space: nowrap;">int how</var>, - <var class="Fa" style="white-space: nowrap;">short type</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">m_getjcl</code>(<var class="Fa" style="white-space: nowrap;">int - how</var>, <var class="Fa" style="white-space: nowrap;">short type</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>, - <var class="Fa" style="white-space: nowrap;">int size</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">m_getcl</code>(<var class="Fa" style="white-space: nowrap;">int - how</var>, <var class="Fa" style="white-space: nowrap;">short type</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">m_gethdr</code>(<var class="Fa" style="white-space: nowrap;">int - how</var>, <var class="Fa" style="white-space: nowrap;">short - type</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">m_free</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">m_freem</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Mbuf_utility_functions"><a class="permalink" href="#Mbuf_utility_functions">Mbuf - utility functions</a></h2> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">m_adj</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int - len</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">m_align</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int - len</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">m_append</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int - len</var>, <var class="Fa" style="white-space: nowrap;">c_caddr_t - cp</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">m_prepend</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int - len</var>, <var class="Fa" style="white-space: nowrap;">int how</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">m_copyup</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int - len</var>, <var class="Fa" style="white-space: nowrap;">int - dstoff</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">m_pullup</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int - len</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">m_pulldown</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int - offset</var>, <var class="Fa" style="white-space: nowrap;">int len</var>, - <var class="Fa" style="white-space: nowrap;">int *offsetp</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">m_copym</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int - offset</var>, <var class="Fa" style="white-space: nowrap;">int len</var>, - <var class="Fa" style="white-space: nowrap;">int how</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">m_copypacket</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int - how</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">m_dup</code>(<var class="Fa" style="white-space: nowrap;">const - struct mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int - how</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">m_copydata</code>(<var class="Fa" style="white-space: nowrap;">const - struct mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int - offset</var>, <var class="Fa" style="white-space: nowrap;">int len</var>, - <var class="Fa" style="white-space: nowrap;">caddr_t buf</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">m_copyback</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int - offset</var>, <var class="Fa" style="white-space: nowrap;">int len</var>, - <var class="Fa" style="white-space: nowrap;">caddr_t buf</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">m_devget</code>(<var class="Fa">char *buf</var>, - <var class="Fa">int len</var>, <var class="Fa">int offset</var>, - <var class="Fa">struct ifnet *ifp</var>, <var class="Fa">void (*copy)(char - *from, caddr_t to, u_int len)</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">m_cat</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *n</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">m_catpkt</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *n</var>);</p> -<p class="Pp"><var class="Ft">u_int</var> - <br/> - <code class="Fn">m_fixhdr</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">m_dup_pkthdr</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *to</var>, <var class="Fa" style="white-space: nowrap;">const struct - mbuf *from</var>, <var class="Fa" style="white-space: nowrap;">int - how</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">m_move_pkthdr</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *to</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *from</var>);</p> -<p class="Pp"><var class="Ft">u_int</var> - <br/> - <code class="Fn">m_length</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - **last</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">m_split</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int - len</var>, <var class="Fa" style="white-space: nowrap;">int how</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">m_apply</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int - off</var>, <var class="Fa" style="white-space: nowrap;">int len</var>, - <var class="Fa" style="white-space: nowrap;">int (*f)(void *arg, void *data, - u_int len)</var>, <var class="Fa" style="white-space: nowrap;">void - *arg</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">m_getptr</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *mbuf</var>, <var class="Fa" style="white-space: nowrap;">int - loc</var>, <var class="Fa" style="white-space: nowrap;">int *off</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">m_defrag</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *m0</var>, <var class="Fa" style="white-space: nowrap;">int - how</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">m_collapse</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *m0</var>, <var class="Fa" style="white-space: nowrap;">int how</var>, - <var class="Fa" style="white-space: nowrap;">int maxfrags</var>);</p> -<p class="Pp"><var class="Ft">struct mbuf *</var> - <br/> - <code class="Fn">m_unshare</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *m0</var>, <var class="Fa" style="white-space: nowrap;">int - how</var>);</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">An <var class="Vt">mbuf</var> is a basic unit of memory management - in the kernel IPC subsystem. Network packets and socket buffers are stored - in <var class="Vt">mbufs</var>. A network packet may span multiple - <var class="Vt">mbufs</var> arranged into a <var class="Vt">mbuf chain</var> - (linked list), which allows adding or trimming network headers with little - overhead.</p> -<p class="Pp">While a developer should not bother with - <var class="Vt">mbuf</var> internals without serious reason in order to - avoid incompatibilities with future changes, it is useful to understand the - general structure of an <var class="Vt">mbuf</var>.</p> -<p class="Pp">An <var class="Vt">mbuf</var> consists of a variable-sized header - and a small internal buffer for data. The total size of an - <var class="Vt">mbuf</var>, <code class="Dv">MSIZE</code>, is a constant - defined in <code class="In"><<a class="In">sys/param.h</a>></code>. - The <var class="Vt">mbuf</var> header includes:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="m_next"><var class="Va">m_next</var></dt> - <dd>(<var class="Vt">struct mbuf *</var>) A pointer to the next - <var class="Vt">mbuf</var> in the <var class="Vt">mbuf chain</var>.</dd> - <dt id="m_nextpkt"><var class="Va">m_nextpkt</var></dt> - <dd>(<var class="Vt">struct mbuf *</var>) A pointer to the next - <var class="Vt">mbuf chain</var> in the queue.</dd> - <dt id="m_data"><var class="Va">m_data</var></dt> - <dd>(<var class="Vt">caddr_t</var>) A pointer to data attached to this - <var class="Vt">mbuf</var>.</dd> - <dt id="m_len"><var class="Va">m_len</var></dt> - <dd>(<var class="Vt">int</var>) The length of the data.</dd> - <dt id="m_type"><var class="Va">m_type</var></dt> - <dd>(<var class="Vt">short</var>) The type of the data.</dd> - <dt id="m_flags"><var class="Va">m_flags</var></dt> - <dd>(<var class="Vt">int</var>) The <var class="Vt">mbuf</var> flags.</dd> -</dl> -</div> -<p class="Pp">The <var class="Vt">mbuf</var> flag bits are defined as - follows:</p> -<div class="Bd Pp Li"> -<pre>#define M_EXT 0x00000001 /* has associated external storage */ -#define M_PKTHDR 0x00000002 /* start of record */ -#define M_EOR 0x00000004 /* end of record */ -#define M_RDONLY 0x00000008 /* associated data marked read-only */ -#define M_BCAST 0x00000010 /* send/received as link-level broadcast */ -#define M_MCAST 0x00000020 /* send/received as link-level multicast */ -#define M_PROMISC 0x00000040 /* packet was not for us */ -#define M_VLANTAG 0x00000080 /* ether_vtag is valid */ -#define M_EXTPG 0x00000100 /* has array of unmapped pages and TLS */ -#define M_NOFREE 0x00000200 /* do not free mbuf, embedded in cluster */ -#define M_TSTMP 0x00000400 /* rcv_tstmp field is valid */ -#define M_TSTMP_HPREC 0x00000800 /* rcv_tstmp is high-prec, typically - hw-stamped on port (useful for IEEE 1588 - and 802.1AS) */ - -#define M_PROTO1 0x00001000 /* protocol-specific */ -#define M_PROTO2 0x00002000 /* protocol-specific */ -#define M_PROTO3 0x00004000 /* protocol-specific */ -#define M_PROTO4 0x00008000 /* protocol-specific */ -#define M_PROTO5 0x00010000 /* protocol-specific */ -#define M_PROTO6 0x00020000 /* protocol-specific */ -#define M_PROTO7 0x00040000 /* protocol-specific */ -#define M_PROTO8 0x00080000 /* protocol-specific */ -#define M_PROTO9 0x00100000 /* protocol-specific */ -#define M_PROTO10 0x00200000 /* protocol-specific */ -#define M_PROTO11 0x00400000 /* protocol-specific */ -#define M_PROTO12 0x00800000 /* protocol-specific */</pre> -</div> -<p class="Pp">The available <var class="Vt">mbuf</var> types are defined as - follows:</p> -<div class="Bd Pp Li"> -<pre>#define MT_DATA 1 /* dynamic (data) allocation */ -#define MT_HEADER MT_DATA /* packet header */ - -#define MT_VENDOR1 4 /* for vendor-internal use */ -#define MT_VENDOR2 5 /* for vendor-internal use */ -#define MT_VENDOR3 6 /* for vendor-internal use */ -#define MT_VENDOR4 7 /* for vendor-internal use */ - -#define MT_SONAME 8 /* socket name */ - -#define MT_EXP1 9 /* for experimental use */ -#define MT_EXP2 10 /* for experimental use */ -#define MT_EXP3 11 /* for experimental use */ -#define MT_EXP4 12 /* for experimental use */ - -#define MT_CONTROL 14 /* extra-data protocol message */ -#define MT_EXTCONTROL 15 /* control message with externalized contents */ -#define MT_OOBDATA 16 /* expedited data */</pre> -</div> -<p class="Pp">The available external buffer types are defined as follows:</p> -<div class="Bd Pp Li"> -<pre>#define EXT_CLUSTER 1 /* mbuf cluster */ -#define EXT_SFBUF 2 /* sendfile(2)'s sf_bufs */ -#define EXT_JUMBOP 3 /* jumbo cluster 4096 bytes */ -#define EXT_JUMBO9 4 /* jumbo cluster 9216 bytes */ -#define EXT_JUMBO16 5 /* jumbo cluster 16184 bytes */ -#define EXT_PACKET 6 /* mbuf+cluster from packet zone */ -#define EXT_MBUF 7 /* external mbuf reference */ -#define EXT_RXRING 8 /* data in NIC receive ring */ -#define EXT_PGS 9 /* array of unmapped pages */ - -#define EXT_VENDOR1 224 /* for vendor-internal use */ -#define EXT_VENDOR2 225 /* for vendor-internal use */ -#define EXT_VENDOR3 226 /* for vendor-internal use */ -#define EXT_VENDOR4 227 /* for vendor-internal use */ - -#define EXT_EXP1 244 /* for experimental use */ -#define EXT_EXP2 245 /* for experimental use */ -#define EXT_EXP3 246 /* for experimental use */ -#define EXT_EXP4 247 /* for experimental use */ - -#define EXT_NET_DRV 252 /* custom ext_buf provided by net driver(s) */ -#define EXT_MOD_TYPE 253 /* custom module's ext_buf type */ -#define EXT_DISPOSABLE 254 /* can throw this buffer away w/page flipping */ -#define EXT_EXTREF 255 /* has externally maintained ref_cnt ptr */</pre> -</div> -<p class="Pp">If the <code class="Dv">M_PKTHDR</code> flag is set, a - <var class="Vt">struct pkthdr</var> <var class="Va">m_pkthdr</var> is added - to the <var class="Vt">mbuf</var> header. It contains a pointer to the - interface the packet has been received from (<var class="Vt">struct - ifnet</var> <var class="Va">*rcvif</var>), and the total packet length - (<var class="Vt">int</var> <var class="Va">len</var>). Optionally, it may - also contain an attached list of packet tags (<var class="Vt">struct - m_tag</var>). See <a class="Xr">mbuf_tags(9)</a> for details. Fields used in - offloading checksum calculation to the hardware are kept in - <var class="Va">m_pkthdr</var> as well. See - <a class="Sx" href="#HARDWARE_ASSISTED_CHECKSUM_CALCULATION">HARDWARE-ASSISTED - CHECKSUM CALCULATION</a> for details.</p> -<p class="Pp">If small enough, data is stored in the internal data buffer of an - <var class="Vt">mbuf</var>. If the data is sufficiently large, another - <var class="Vt">mbuf</var> may be added to the <var class="Vt">mbuf - chain</var>, or external storage may be associated with the - <var class="Vt">mbuf</var>. <code class="Dv">MHLEN</code> bytes of data can - fit into an <var class="Vt">mbuf</var> with the - <code class="Dv">M_PKTHDR</code> flag set, <code class="Dv">MLEN</code> - bytes can otherwise.</p> -<p class="Pp">If external storage is being associated with an - <var class="Vt">mbuf</var>, the <var class="Va">m_ext</var> header is added - at the cost of losing the internal data buffer. It includes a pointer to - external storage, the size of the storage, a pointer to a function used for - freeing the storage, a pointer to an optional argument that can be passed to - the function, and a pointer to a reference counter. An - <var class="Vt">mbuf</var> using external storage has the - <code class="Dv">M_EXT</code> flag set.</p> -<p class="Pp">The system supplies a macro for allocating the desired external - storage buffer, <code class="Dv">MEXTADD</code>.</p> -<p class="Pp">The allocation and management of the reference counter is handled - by the subsystem.</p> -<p class="Pp">The system also supplies a default type of external storage buffer - called an <var class="Vt">mbuf cluster</var>. <var class="Vt">Mbuf - clusters</var> can be allocated and configured with the use of the - <code class="Dv">MCLGET</code> macro. Each <var class="Vt">mbuf - cluster</var> is <code class="Dv">MCLBYTES</code> in size, where MCLBYTES is - a machine-dependent constant. The system defines an advisory macro - <code class="Dv">MINCLSIZE</code>, which is the smallest amount of data to - put into an <var class="Vt">mbuf cluster</var>. It is equal to - <code class="Dv">MHLEN</code> plus one. It is typically preferable to store - data into the data region of an <var class="Vt">mbuf</var>, if size permits, - as opposed to allocating a separate <var class="Vt">mbuf cluster</var> to - hold the same data.</p> -<section class="Ss"> -<h2 class="Ss" id="Macros_and_Functions"><a class="permalink" href="#Macros_and_Functions">Macros - and Functions</a></h2> -<p class="Pp">There are numerous predefined macros and functions that provide - the developer with common utilities.</p> -<dl class="Bl-ohang Bd-indent"> - <dt id="mtod"><a class="permalink" href="#mtod"><code class="Fn">mtod</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">type</var>)</dt> - <dd>Convert an <var class="Fa">mbuf</var> pointer to a data pointer. The macro - expands to the data pointer cast to the specified - <var class="Fa">type</var>. <b class="Sy">Note</b>: It is advisable to - ensure that there is enough contiguous data in <var class="Fa">mbuf</var>. - See - <a class="permalink" href="#m_pullup"><code class="Fn" id="m_pullup">m_pullup</code></a>() - for details.</dd> - <dt id="mtodo"><a class="permalink" href="#mtodo"><code class="Fn">mtodo</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">offset</var>)</dt> - <dd>Return a data pointer at an offset (in bytes) into the data attached to - <var class="Fa">mbuf</var>. Returns a <var class="Ft">void *</var> pointer - . <b class="Sy">Note</b>: The caller must ensure that the offset is in - bounds of the attached data.</dd> - <dt><code class="Fn">MGET</code>(<var class="Fa">mbuf</var>, - <var class="Fa">how</var>, <var class="Fa">type</var>)</dt> - <dd>Allocate an <var class="Vt">mbuf</var> and initialize it to contain - internal data. <var class="Fa">mbuf</var> will point to the allocated - <var class="Vt">mbuf</var> on success, or be set to - <code class="Dv">NULL</code> on failure. The <var class="Fa">how</var> - argument is to be set to <code class="Dv">M_WAITOK</code> or - <code class="Dv">M_NOWAIT</code>. It specifies whether the caller is - willing to block if necessary. A number of other functions and macros - related to <var class="Vt">mbufs</var> have the same argument because they - may at some point need to allocate new <var class="Vt">mbufs</var>.</dd> - <dt id="MGETHDR"><a class="permalink" href="#MGETHDR"><code class="Fn">MGETHDR</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">how</var>, <var class="Fa">type</var>)</dt> - <dd>Allocate an <var class="Vt">mbuf</var> and initialize it to contain a - packet header and internal data. See <code class="Fn">MGET</code>() for - details.</dd> - <dt id="MEXTADD"><a class="permalink" href="#MEXTADD"><code class="Fn">MEXTADD</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">buf</var>, <var class="Fa">size</var>, - <var class="Fa">free</var>, <var class="Fa">opt_arg1</var>, - <var class="Fa">opt_arg2</var>, <var class="Fa">flags</var>, - <var class="Fa">type</var>)</dt> - <dd>Associate externally managed data with <var class="Fa">mbuf</var>. Any - internal data contained in the mbuf will be discarded, and the - <code class="Dv">M_EXT</code> flag will be set. The - <var class="Fa">buf</var> and <var class="Fa">size</var> arguments are the - address and length, respectively, of the data. The - <var class="Fa">free</var> argument points to a function which will be - called to free the data when the mbuf is freed; it is only used if - <var class="Fa">type</var> is <code class="Dv">EXT_EXTREF</code>. The - <var class="Fa">opt_arg1</var> and <var class="Fa">opt_arg2</var> - arguments will be saved in <var class="Va">ext_arg1</var> and - <var class="Va">ext_arg2</var> fields of the <var class="Va">struct - m_ext</var> of the mbuf. The <var class="Fa">flags</var> argument - specifies additional <var class="Vt">mbuf</var> flags; it is not necessary - to specify <code class="Dv">M_EXT</code>. Finally, the - <var class="Fa">type</var> argument specifies the type of external data, - which controls how it will be disposed of when the - <var class="Vt">mbuf</var> is freed. In most cases, the correct value is - <code class="Dv">EXT_EXTREF</code>.</dd> - <dt id="MCLGET"><a class="permalink" href="#MCLGET"><code class="Fn">MCLGET</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">how</var>)</dt> - <dd>Allocate and attach an <var class="Vt">mbuf cluster</var> to - <var class="Fa">mbuf</var>. On success, a non-zero value returned; - otherwise, 0. Historically, consumers would check for success by testing - the <code class="Dv">M_EXT</code> flag on the mbuf, but this is now - discouraged to avoid unnecessary awareness of the implementation of - external storage in protocol stacks and device drivers.</dd> - <dt id="M_ALIGN"><a class="permalink" href="#M_ALIGN"><code class="Fn">M_ALIGN</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">len</var>)</dt> - <dd>Set the pointer <var class="Fa">mbuf->m_data</var> to place an object - of the size <var class="Fa">len</var> at the end of the internal data area - of <var class="Fa">mbuf</var>, long word aligned. Applicable only if - <var class="Fa">mbuf</var> is newly allocated with - <code class="Fn">MGET</code>() or <code class="Fn">m_get</code>().</dd> - <dt id="MH_ALIGN"><a class="permalink" href="#MH_ALIGN"><code class="Fn">MH_ALIGN</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">len</var>)</dt> - <dd>Serves the same purpose as <code class="Fn">M_ALIGN</code>() does, but - only for <var class="Fa">mbuf</var> newly allocated with - <code class="Fn">MGETHDR</code>() or <code class="Fn">m_gethdr</code>(), - or initialized by - <a class="permalink" href="#m_dup_pkthdr"><code class="Fn" id="m_dup_pkthdr">m_dup_pkthdr</code></a>() - or - <a class="permalink" href="#m_move_pkthdr"><code class="Fn" id="m_move_pkthdr">m_move_pkthdr</code></a>().</dd> - <dt id="m_align"><a class="permalink" href="#m_align"><code class="Fn">m_align</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">len</var>)</dt> - <dd>Services the same purpose as <code class="Fn">M_ALIGN</code>() but handles - any type of mbuf.</dd> - <dt id="M_LEADINGSPACE"><a class="permalink" href="#M_LEADINGSPACE"><code class="Fn">M_LEADINGSPACE</code></a>(<var class="Fa">mbuf</var>)</dt> - <dd>Returns the number of bytes available before the beginning of data in - <var class="Fa">mbuf</var>.</dd> - <dt id="M_TRAILINGSPACE"><a class="permalink" href="#M_TRAILINGSPACE"><code class="Fn">M_TRAILINGSPACE</code></a>(<var class="Fa">mbuf</var>)</dt> - <dd>Returns the number of bytes available after the end of data in - <var class="Fa">mbuf</var>.</dd> - <dt id="M_PREPEND"><a class="permalink" href="#M_PREPEND"><code class="Fn">M_PREPEND</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">len</var>, <var class="Fa">how</var>)</dt> - <dd>This macro operates on an <var class="Vt">mbuf chain</var>. It is an - optimized wrapper for <code class="Fn">m_prepend</code>() that can make - use of possible empty space before data (e.g. left after trimming of a - link-layer header). The new <var class="Vt">mbuf chain</var> pointer or - <code class="Dv">NULL</code> is in <var class="Fa">mbuf</var> after the - call.</dd> - <dt id="M_MOVE_PKTHDR"><a class="permalink" href="#M_MOVE_PKTHDR"><code class="Fn">M_MOVE_PKTHDR</code></a>(<var class="Fa">to</var>, - <var class="Fa">from</var>)</dt> - <dd>Using this macro is equivalent to calling - <code class="Fn">m_move_pkthdr</code>(<var class="Fa">to</var>, - <var class="Fa">from</var>).</dd> - <dt id="M_WRITABLE"><a class="permalink" href="#M_WRITABLE"><code class="Fn">M_WRITABLE</code></a>(<var class="Fa">mbuf</var>)</dt> - <dd>This macro will evaluate true if <var class="Fa">mbuf</var> is not marked - <code class="Dv">M_RDONLY</code> and if either <var class="Fa">mbuf</var> - does not contain external storage or, if it does, then if the reference - count of the storage is not greater than 1. The - <code class="Dv">M_RDONLY</code> flag can be set in - <var class="Fa">mbuf->m_flags</var>. This can be achieved during setup - of the external storage, by passing the <code class="Dv">M_RDONLY</code> - bit as a <var class="Fa">flags</var> argument to the - <code class="Fn">MEXTADD</code>() macro, or can be directly set in - individual <var class="Vt">mbufs</var>.</dd> - <dt id="MCHTYPE"><a class="permalink" href="#MCHTYPE"><code class="Fn">MCHTYPE</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">type</var>)</dt> - <dd>Change the type of <var class="Fa">mbuf</var> to - <var class="Fa">type</var>. This is a relatively expensive operation and - should be avoided.</dd> -</dl> -<p class="Pp">The functions are:</p> -<dl class="Bl-ohang Bd-indent"> - <dt id="m_get"><a class="permalink" href="#m_get"><code class="Fn">m_get</code></a>(<var class="Fa">how</var>, - <var class="Fa">type</var>)</dt> - <dd>A function version of - <a class="permalink" href="#MGET"><code class="Fn" id="MGET">MGET</code></a>() - for non-critical paths.</dd> - <dt id="m_get2"><a class="permalink" href="#m_get2"><code class="Fn">m_get2</code></a>(<var class="Fa">size</var>, - <var class="Fa">how</var>, <var class="Fa">type</var>, - <var class="Fa">flags</var>)</dt> - <dd>Allocate an <var class="Vt">mbuf</var> with enough space to hold specified - amount of data. If the size is larger than - <code class="Dv">MJUMPAGESIZE</code>, <code class="Dv">NULL</code> will be - returned.</dd> - <dt id="m_get3"><a class="permalink" href="#m_get3"><code class="Fn">m_get3</code></a>(<var class="Fa">size</var>, - <var class="Fa">how</var>, <var class="Fa">type</var>, - <var class="Fa">flags</var>)</dt> - <dd>Allocate an <var class="Vt">mbuf</var> with enough space to hold specified - amount of data. If the size is larger than <code class="Dv">MJUM16BYTES, - NULL</code> will be returned.</dd> - <dt id="m_getm"><a class="permalink" href="#m_getm"><code class="Fn">m_getm</code></a>(<var class="Fa">orig</var>, - <var class="Fa">len</var>, <var class="Fa">how</var>, - <var class="Fa">type</var>)</dt> - <dd>Allocate <var class="Fa">len</var> bytes worth of - <var class="Vt">mbufs</var> and <var class="Vt">mbuf clusters</var> if - necessary and append the resulting allocated <var class="Vt">mbuf - chain</var> to the <var class="Vt">mbuf chain</var> - <var class="Fa">orig</var>, if it is - <span class="No">non-</span><code class="Dv">NULL</code>. If the - allocation fails at any point, free whatever was allocated and return - <code class="Dv">NULL</code>. If <var class="Fa">orig</var> is - <span class="No">non-</span><code class="Dv">NULL</code>, it will not be - freed. It is possible to use <code class="Fn">m_getm</code>() to either - append <var class="Fa">len</var> bytes to an existing - <var class="Vt">mbuf</var> or <var class="Vt">mbuf chain</var> (for - example, one which may be sitting in a pre-allocated ring) or to simply - perform an all-or-nothing <var class="Vt">mbuf</var> and - <var class="Vt">mbuf cluster</var> allocation.</dd> - <dt id="m_gethdr"><a class="permalink" href="#m_gethdr"><code class="Fn">m_gethdr</code></a>(<var class="Fa">how</var>, - <var class="Fa">type</var>)</dt> - <dd>A function version of <code class="Fn">MGETHDR</code>() for non-critical - paths.</dd> - <dt id="m_getcl"><a class="permalink" href="#m_getcl"><code class="Fn">m_getcl</code></a>(<var class="Fa">how</var>, - <var class="Fa">type</var>, <var class="Fa">flags</var>)</dt> - <dd>Fetch an <var class="Vt">mbuf</var> with a <var class="Vt">mbuf - cluster</var> attached to it. If one of the allocations fails, the entire - allocation fails. This routine is the preferred way of fetching both the - <var class="Vt">mbuf</var> and <var class="Vt">mbuf cluster</var> - together, as it avoids having to unlock/relock between allocations. - Returns <code class="Dv">NULL</code> on failure.</dd> - <dt id="m_getjcl"><a class="permalink" href="#m_getjcl"><code class="Fn">m_getjcl</code></a>(<var class="Fa">how</var>, - <var class="Fa">type</var>, <var class="Fa">flags</var>, - <var class="Fa">size</var>)</dt> - <dd>This is like <code class="Fn">m_getcl</code>() but the specified - <var class="Fa">size</var> of the cluster to be allocated must be one of - <code class="Dv">MCLBYTES</code>, <code class="Dv">MJUMPAGESIZE</code>, - <code class="Dv">MJUM9BYTES</code>, or - <code class="Dv">MJUM16BYTES</code>.</dd> - <dt id="m_free"><a class="permalink" href="#m_free"><code class="Fn">m_free</code></a>(<var class="Fa">mbuf</var>)</dt> - <dd>Frees <var class="Vt">mbuf</var>. Returns <var class="Va">m_next</var> of - the freed <var class="Vt">mbuf</var>.</dd> -</dl> -<p class="Pp">The functions below operate on <var class="Vt">mbuf - chains</var>.</p> -<dl class="Bl-ohang Bd-indent"> - <dt id="m_freem"><a class="permalink" href="#m_freem"><code class="Fn">m_freem</code></a>(<var class="Fa">mbuf</var>)</dt> - <dd>Free an entire <var class="Vt">mbuf chain</var>, including any external - storage.</dd> - <dt id="m_adj"><a class="permalink" href="#m_adj"><code class="Fn">m_adj</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">len</var>)</dt> - <dd>Trim <var class="Fa">len</var> bytes from the head of an - <var class="Vt">mbuf chain</var> if <var class="Fa">len</var> is positive, - from the tail otherwise.</dd> - <dt id="m_append"><a class="permalink" href="#m_append"><code class="Fn">m_append</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">len</var>, <var class="Fa">cp</var>)</dt> - <dd>Append <var class="Vt">len</var> bytes of data <var class="Vt">cp</var> to - the <var class="Vt">mbuf chain</var>. Extend the mbuf chain if the new - data does not fit in existing space.</dd> - <dt id="m_prepend"><a class="permalink" href="#m_prepend"><code class="Fn">m_prepend</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">len</var>, <var class="Fa">how</var>)</dt> - <dd>Allocate a new <var class="Vt">mbuf</var> and prepend it to the - <var class="Vt">mbuf chain</var>, handle <code class="Dv">M_PKTHDR</code> - properly. <b class="Sy">Note</b>: It does not allocate any - <var class="Vt">mbuf clusters</var>, so <var class="Fa">len</var> must be - less than <code class="Dv">MLEN</code> or <code class="Dv">MHLEN</code>, - depending on the <code class="Dv">M_PKTHDR</code> flag setting.</dd> - <dt id="m_copyup"><a class="permalink" href="#m_copyup"><code class="Fn">m_copyup</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">len</var>, <var class="Fa">dstoff</var>)</dt> - <dd>Similar to <code class="Fn">m_pullup</code>() but copies - <var class="Fa">len</var> bytes of data into a new mbuf at - <var class="Fa">dstoff</var> bytes into the mbuf. The - <var class="Fa">dstoff</var> argument aligns the data and leaves room for - a link layer header. Returns the new <var class="Vt">mbuf chain</var> on - success, and frees the <var class="Vt">mbuf chain</var> and returns - <code class="Dv">NULL</code> on failure. <b class="Sy">Note</b>: The - function does not allocate <var class="Vt">mbuf clusters</var>, so - <var class="Fa">len + dstoff</var> must be less than - <code class="Dv">MHLEN</code>.</dd> - <dt><code class="Fn">m_pullup</code>(<var class="Fa">mbuf</var>, - <var class="Fa">len</var>)</dt> - <dd>Arrange that the first <var class="Fa">len</var> bytes of an - <var class="Vt">mbuf chain</var> are contiguous and lay in the data area - of <var class="Fa">mbuf</var>, so they are accessible with - <code class="Fn">mtod</code>(<var class="Fa">mbuf</var>, - <var class="Fa">type</var>). It is important to remember that this may - involve reallocating some mbufs and moving data so all pointers - referencing data within the old mbuf chain must be recalculated or made - invalid. Return the new <var class="Vt">mbuf chain</var> on success, - <code class="Dv">NULL</code> on failure (the <var class="Vt">mbuf - chain</var> is freed in this case). <b class="Sy">Note</b>: It does not - allocate any <var class="Vt">mbuf clusters</var>, so - <var class="Fa">len</var> must be less than or equal to - <code class="Dv">MHLEN</code>.</dd> - <dt id="m_pulldown"><a class="permalink" href="#m_pulldown"><code class="Fn">m_pulldown</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">offset</var>, <var class="Fa">len</var>, - <var class="Fa">offsetp</var>)</dt> - <dd>Arrange that <var class="Fa">len</var> bytes between - <var class="Fa">offset</var> and <var class="Fa">offset + len</var> in the - <var class="Vt">mbuf chain</var> are contiguous and lay in the data area - of <var class="Fa">mbuf</var>, so they are accessible with - <code class="Fn">mtod</code>() or <code class="Fn">mtodo</code>(). - <var class="Fa">len</var> must be smaller than, or equal to, the size of - an <var class="Vt">mbuf cluster</var>. Return a pointer to an intermediate - <var class="Vt">mbuf</var> in the chain containing the requested region; - the offset in the data region of the <var class="Vt">mbuf chain</var> to - the data contained in the returned mbuf is stored in - <var class="Fa">*offsetp</var>. If <var class="Fa">offsetp</var> is NULL, - the region may be accessed using - <code class="Fn">mtod</code>(<var class="Fa">mbuf</var>, - <var class="Fa">type</var>) or - <code class="Fn">mtodo</code>(<var class="Fa">mbuf</var>, - <var class="Fa">0</var>). If <var class="Fa">offsetp</var> is non-NULL, - the region may be accessed using - <code class="Fn">mtodo</code>(<var class="Fa">mbuf</var>, - <var class="Fa">*offsetp</var>). The region of the mbuf chain between its - beginning and <var class="Fa">offset</var> is not modified, therefore it - is safe to hold pointers to data within this region before calling - <code class="Fn">m_pulldown</code>().</dd> - <dt id="m_copym"><a class="permalink" href="#m_copym"><code class="Fn">m_copym</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">offset</var>, <var class="Fa">len</var>, - <var class="Fa">how</var>)</dt> - <dd>Make a copy of an <var class="Vt">mbuf chain</var> starting - <var class="Fa">offset</var> bytes from the beginning, continuing for - <var class="Fa">len</var> bytes. If <var class="Fa">len</var> is - <code class="Dv">M_COPYALL</code>, copy to the end of the - <var class="Vt">mbuf chain</var>. <b class="Sy">Note</b>: The copy is - read-only, because the <var class="Vt">mbuf clusters</var> are not copied, - only their reference counts are incremented.</dd> - <dt id="m_copypacket"><a class="permalink" href="#m_copypacket"><code class="Fn">m_copypacket</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">how</var>)</dt> - <dd>Copy an entire packet including header, which must be present. This is an - optimized version of the common case - <code class="Fn">m_copym</code>(<var class="Fa">mbuf</var>, - <var class="Fa">0</var>, <var class="Fa">M_COPYALL</var>, - <var class="Fa">how</var>). <b class="Sy">Note</b>: the copy is read-only, - because the <var class="Vt">mbuf clusters</var> are not copied, only their - reference counts are incremented.</dd> - <dt id="m_dup"><a class="permalink" href="#m_dup"><code class="Fn">m_dup</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">how</var>)</dt> - <dd>Copy a packet header <var class="Vt">mbuf chain</var> into a completely - new <var class="Vt">mbuf chain</var>, including copying any - <var class="Vt">mbuf clusters</var>. Use this instead of - <code class="Fn">m_copypacket</code>() when you need a writable copy of an - <var class="Vt">mbuf chain</var>.</dd> - <dt id="m_copydata"><a class="permalink" href="#m_copydata"><code class="Fn">m_copydata</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">offset</var>, <var class="Fa">len</var>, - <var class="Fa">buf</var>)</dt> - <dd>Copy data from an <var class="Vt">mbuf chain</var> starting - <var class="Fa">off</var> bytes from the beginning, continuing for - <var class="Fa">len</var> bytes, into the indicated buffer - <var class="Fa">buf</var>.</dd> - <dt id="m_copyback"><a class="permalink" href="#m_copyback"><code class="Fn">m_copyback</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">offset</var>, <var class="Fa">len</var>, - <var class="Fa">buf</var>)</dt> - <dd>Copy <var class="Fa">len</var> bytes from the buffer - <var class="Fa">buf</var> back into the indicated <var class="Vt">mbuf - chain</var>, starting at <var class="Fa">offset</var> bytes from the - beginning of the <var class="Vt">mbuf chain</var>, extending the - <var class="Vt">mbuf chain</var> if necessary. <b class="Sy">Note</b>: It - does not allocate any <var class="Vt">mbuf clusters</var>, just adds - <var class="Vt">mbufs</var> to the <var class="Vt">mbuf chain</var>. It is - safe to set <var class="Fa">offset</var> beyond the current - <var class="Vt">mbuf chain</var> end: zeroed <var class="Vt">mbufs</var> - will be allocated to fill the space.</dd> - <dt id="m_length"><a class="permalink" href="#m_length"><code class="Fn">m_length</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">last</var>)</dt> - <dd>Return the length of the <var class="Vt">mbuf chain</var>, and optionally - a pointer to the last <var class="Vt">mbuf</var>.</dd> - <dt><code class="Fn">m_dup_pkthdr</code>(<var class="Fa">to</var>, - <var class="Fa">from</var>, <var class="Fa">how</var>)</dt> - <dd>Upon the function's completion, the <var class="Vt">mbuf</var> - <var class="Fa">to</var> will contain an identical copy of - <var class="Fa">from->m_pkthdr</var> and the per-packet attributes - found in the <var class="Vt">mbuf chain</var> <var class="Fa">from</var>. - The <var class="Vt">mbuf</var> <var class="Fa">from</var> must have the - flag <code class="Dv">M_PKTHDR</code> initially set, and - <var class="Fa">to</var> must be empty on entry.</dd> - <dt><code class="Fn">m_move_pkthdr</code>(<var class="Fa">to</var>, - <var class="Fa">from</var>)</dt> - <dd>Move <var class="Va">m_pkthdr</var> and the per-packet attributes from the - <var class="Vt">mbuf chain</var> <var class="Fa">from</var> to the - <var class="Vt">mbuf</var> <var class="Fa">to</var>. The - <var class="Vt">mbuf</var> <var class="Fa">from</var> must have the flag - <code class="Dv">M_PKTHDR</code> initially set, and - <var class="Fa">to</var> must be empty on entry. Upon the function's - completion, <var class="Fa">from</var> will have the flag - <code class="Dv">M_PKTHDR</code> and the per-packet attributes - cleared.</dd> - <dt id="m_fixhdr"><a class="permalink" href="#m_fixhdr"><code class="Fn">m_fixhdr</code></a>(<var class="Fa">mbuf</var>)</dt> - <dd>Set the packet-header length to the length of the <var class="Vt">mbuf - chain</var>.</dd> - <dt id="m_devget"><a class="permalink" href="#m_devget"><code class="Fn">m_devget</code></a>(<var class="Fa">buf</var>, - <var class="Fa">len</var>, <var class="Fa">offset</var>, - <var class="Fa">ifp</var>, <var class="Fa">copy</var>)</dt> - <dd>Copy data from a device local memory pointed to by - <var class="Fa">buf</var> to an <var class="Vt">mbuf chain</var>. The copy - is done using a specified copy routine <var class="Fa">copy</var>, or - <a class="permalink" href="#bcopy"><code class="Fn" id="bcopy">bcopy</code></a>() - if <var class="Fa">copy</var> is <code class="Dv">NULL</code>.</dd> - <dt id="m_cat"><a class="permalink" href="#m_cat"><code class="Fn">m_cat</code></a>(<var class="Fa">m</var>, - <var class="Fa">n</var>)</dt> - <dd>Concatenate <var class="Fa">n</var> to <var class="Fa">m</var>. Both - <var class="Vt">mbuf chains</var> must be of the same type. - <var class="Fa">n</var> is not guaranteed to be valid after - <code class="Fn">m_cat</code>() returns. <code class="Fn">m_cat</code>() - does not update any packet header fields or free mbuf tags.</dd> - <dt id="m_catpkt"><a class="permalink" href="#m_catpkt"><code class="Fn">m_catpkt</code></a>(<var class="Fa">m</var>, - <var class="Fa">n</var>)</dt> - <dd>A variant of <code class="Fn">m_cat</code>() that operates on packets. - Both <var class="Fa">m</var> and <var class="Fa">n</var> must contain - packet headers. <var class="Fa">n</var> is not guaranteed to be valid - after <code class="Fn">m_catpkt</code>() returns.</dd> - <dt id="m_split"><a class="permalink" href="#m_split"><code class="Fn">m_split</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">len</var>, <var class="Fa">how</var>)</dt> - <dd>Partition an <var class="Vt">mbuf chain</var> in two pieces, returning the - tail: all but the first <var class="Fa">len</var> bytes. In case of - failure, it returns <code class="Dv">NULL</code> and attempts to restore - the <var class="Vt">mbuf chain</var> to its original state.</dd> - <dt><code class="Fn">m_apply</code>(<var class="Fa">mbuf</var>, - <var class="Fa">off</var>, <var class="Fa">len</var>, - <var class="Fa">f</var>, <var class="Fa">arg</var>)</dt> - <dd>Apply a function to an <var class="Vt">mbuf chain</var>, at offset - <var class="Fa">off</var>, for length <var class="Fa">len</var> bytes. - Typically used to avoid calls to <code class="Fn">m_pullup</code>() which - would otherwise be unnecessary or undesirable. <var class="Fa">arg</var> - is a convenience argument which is passed to the callback function - <var class="Fa">f</var>. - <p class="Pp" id="f">Each time - <a class="permalink" href="#f"><code class="Fn">f</code></a>() is - called, it will be passed <var class="Fa">arg</var>, a pointer to the - <var class="Fa">data</var> in the current mbuf, and the length - <var class="Fa">len</var> of the data in this mbuf to which the function - should be applied.</p> - <p class="Pp" id="m_apply">The function should return zero to indicate - success; otherwise, if an error is indicated, then - <a class="permalink" href="#m_apply"><code class="Fn">m_apply</code></a>() - will return the error and stop iterating through the - <var class="Vt">mbuf chain</var>.</p> - </dd> - <dt id="m_getptr"><a class="permalink" href="#m_getptr"><code class="Fn">m_getptr</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">loc</var>, <var class="Fa">off</var>)</dt> - <dd>Return a pointer to the mbuf containing the data located at - <var class="Fa">loc</var> bytes from the beginning of the - <var class="Vt">mbuf chain</var>. The corresponding offset into the mbuf - will be stored in <var class="Fa">*off</var>.</dd> - <dt><code class="Fn">m_defrag</code>(<var class="Fa">m0</var>, - <var class="Fa">how</var>)</dt> - <dd>Defragment an mbuf chain, returning the shortest possible chain of mbufs - and clusters. If allocation fails and this can not be completed, - <code class="Dv">NULL</code> will be returned and the original chain will - be unchanged. Upon success, the original chain will be freed and the new - chain will be returned. <var class="Fa">how</var> should be either - <code class="Dv">M_WAITOK</code> or <code class="Dv">M_NOWAIT</code>, - depending on the caller's preference. - <p class="Pp">This function is especially useful in network drivers, where - certain long mbuf chains must be shortened before being added to TX - descriptor lists.</p> - </dd> - <dt id="m_collapse"><a class="permalink" href="#m_collapse"><code class="Fn">m_collapse</code></a>(<var class="Fa">m0</var>, - <var class="Fa">how</var>, <var class="Fa">maxfrags</var>)</dt> - <dd>Defragment an mbuf chain, returning a chain of at most - <var class="Fa">maxfrags</var> mbufs and clusters. If allocation fails or - the chain cannot be collapsed as requested, <code class="Dv">NULL</code> - will be returned, with the original chain possibly modified. As with - <a class="permalink" href="#m_defrag"><code class="Fn" id="m_defrag">m_defrag</code></a>(), - <var class="Fa">how</var> should be one of - <code class="Dv">M_WAITOK</code> or <code class="Dv">M_NOWAIT</code>.</dd> - <dt id="m_unshare"><a class="permalink" href="#m_unshare"><code class="Fn">m_unshare</code></a>(<var class="Fa">m0</var>, - <var class="Fa">how</var>)</dt> - <dd>Create a version of the specified mbuf chain whose contents can be safely - modified without affecting other users. If allocation fails and this - operation can not be completed, <code class="Dv">NULL</code> will be - returned. The original mbuf chain is always reclaimed and the reference - count of any shared mbuf clusters is decremented. - <var class="Fa">how</var> should be either - <code class="Dv">M_WAITOK</code> or <code class="Dv">M_NOWAIT</code>, - depending on the caller's preference. As a side-effect of this process the - returned mbuf chain may be compacted. - <p class="Pp">This function is especially useful in the transmit path of - network code, when data must be encrypted or otherwise altered prior to - transmission.</p> - </dd> -</dl> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="HARDWARE-ASSISTED_CHECKSUM_CALCULATION"><a class="permalink" href="#HARDWARE-ASSISTED_CHECKSUM_CALCULATION">HARDWARE-ASSISTED - CHECKSUM CALCULATION</a></h1> -<p class="Pp">This section currently applies to SCTP, TCP, and UDP over IP only. - In order to save the host CPU resources, computing checksums is offloaded to - the network interface hardware if possible. The - <var class="Va">m_pkthdr</var> member of the leading - <var class="Vt">mbuf</var> of a packet contains two fields used for that - purpose, <var class="Vt">int</var> <var class="Va">csum_flags</var> and - <var class="Vt">int</var> <var class="Va">csum_data</var>. The meaning of - those fields depends on whether the packet is fragmented. Henceforth, - <var class="Va">csum_flags</var> or <var class="Va">csum_data</var> of a - packet will denote the corresponding field of the - <var class="Va">m_pkthdr</var> member of the leading - <var class="Vt">mbuf</var> in the <var class="Vt">mbuf chain</var> - containing the packet.</p> -<p class="Pp">When a packet is sent by SCTP, TCP, or UDP, the computation of the - checksum is delayed until the outgoing interface has been determined for a - packet. The interface-specific field - <var class="Va">ifnet.if_data.ifi_hwassist</var> (see - <a class="Xr">ifnet(9)</a>) is consulted by IP for the capabilities of the - network interface selected for output to assist in computing checksums. The - <var class="Va">csum_flags</var> field of the packet header is set to - indicate which actions the interface is supposed to perform on it. The - actions unsupported by the network interface are done in the software prior - to passing the packet down to the interface driver; such actions will never - be requested through <var class="Va">csum_flags</var>.</p> -<p class="Pp">The flags demanding a particular action from an interface are as - follows:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="CSUM_IP"><a class="permalink" href="#CSUM_IP"><code class="Dv">CSUM_IP</code></a></dt> - <dd>The IP header checksum is to be computed and stored in the corresponding - field of the packet. The hardware is expected to know the format of an IP - header to determine the offset of the IP checksum field.</dd> - <dt id="CSUM_SCTP"><a class="permalink" href="#CSUM_SCTP"><code class="Dv">CSUM_SCTP</code></a></dt> - <dd>The SCTP checksum is to be computed. (See below.)</dd> - <dt id="CSUM_TCP"><a class="permalink" href="#CSUM_TCP"><code class="Dv">CSUM_TCP</code></a></dt> - <dd>The TCP checksum is to be computed. (See below.)</dd> - <dt id="CSUM_UDP"><a class="permalink" href="#CSUM_UDP"><code class="Dv">CSUM_UDP</code></a></dt> - <dd>The UDP checksum is to be computed. (See below.)</dd> -</dl> -</div> -<p class="Pp">Should a SCTP, TCP, or UDP checksum be offloaded to the hardware, - the field <var class="Va">csum_data</var> will contain the byte offset of - the checksum field relative to the end of the IP header. In the case of TCP - or UDP, the checksum field will be initially set by the TCP or UDP - implementation to the checksum of the pseudo header defined by the TCP and - UDP specifications. In the case of SCTP, the checksum field will be - initially set by the SCTP implementation to 0.</p> -<p class="Pp">When a packet is received by an interface, it indicates the - actions it has performed on a packet by setting one or more of the following - flags in <var class="Va">csum_flags</var> associated with the packet:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="CSUM_IP_CHECKED"><a class="permalink" href="#CSUM_IP_CHECKED"><code class="Dv">CSUM_IP_CHECKED</code></a></dt> - <dd>The IP header checksum has been computed.</dd> - <dt id="CSUM_IP_VALID"><a class="permalink" href="#CSUM_IP_VALID"><code class="Dv">CSUM_IP_VALID</code></a></dt> - <dd>The IP header has a valid checksum. This flag can appear only in - combination with <code class="Dv">CSUM_IP_CHECKED</code>.</dd> - <dt id="CSUM_DATA_VALID"><a class="permalink" href="#CSUM_DATA_VALID"><code class="Dv">CSUM_DATA_VALID</code></a></dt> - <dd>The checksum of the data portion of the IP packet has been computed and - stored in the field <var class="Va">csum_data</var> in network byte - order.</dd> - <dt id="CSUM_PSEUDO_HDR"><a class="permalink" href="#CSUM_PSEUDO_HDR"><code class="Dv">CSUM_PSEUDO_HDR</code></a></dt> - <dd>Can be set only along with <code class="Dv">CSUM_DATA_VALID</code> to - indicate that the IP data checksum found in - <var class="Va">csum_data</var> allows for the pseudo header defined by - the TCP and UDP specifications. Otherwise the checksum of the pseudo - header must be calculated by the host CPU and added to - <var class="Va">csum_data</var> to obtain the final checksum to be used - for TCP or UDP validation purposes.</dd> -</dl> -</div> -<p class="Pp">If a particular network interface just indicates success or - failure of SCTP, TCP, or UDP checksum validation without returning the exact - value of the checksum to the host CPU, its driver can mark - <code class="Dv">CSUM_DATA_VALID</code> in <var class="Va">csum_flags</var> - as well as, for TCP and UDP, <code class="Dv">CSUM_PSEUDO_HDR</code> and set - <var class="Va">csum_data</var> to <code class="Li">0xFFFF</code> - hexadecimal to indicate a valid checksum. It is a peculiarity of the - algorithm used that the Internet checksum calculated over any valid packet - will be <code class="Li">0xFFFF</code> as long as the original checksum - field is included. Note that for SCTP the value of - <var class="Va">csum_data</var> is not relevant and - <code class="Dv">CSUM_PSEUDO_HDR</code> in <var class="Va">csum_flags</var> - is not set, since SCTP does not use a pseudo header checksum.</p> -<p class="Pp">If IP delivers a packet with the flags - <code class="Dv">CSUM_IP</code>, <code class="Dv">CSUM_SCTP</code>, - <code class="Dv">CSUM_TCP</code>, or <code class="Dv">CSUM_UDP</code> set in - <var class="Va">csum_flags</var> to a local IP, SCTP, TCP, or UDP stack, the - packet will be processed without computing or validating the checksum, since - the packet has not been on the wire. This can happen if the packet was - handled by a virtual interface such as <a class="Xr">tap(4)</a> or - <a class="Xr">epair(4)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="STRESS_TESTING"><a class="permalink" href="#STRESS_TESTING">STRESS - TESTING</a></h1> -<p class="Pp">When running a kernel compiled with the option - <code class="Dv">MBUF_STRESS_TEST</code>, the following - <a class="Xr">sysctl(8)</a>-controlled options may be used to create various - failure/extreme cases for testing of network drivers and other parts of the - kernel that rely on <var class="Vt">mbufs</var>.</p> -<dl class="Bl-tag"> - <dt id="net.inet.ip.mbuf_frag_size"><var class="Va">net.inet.ip.mbuf_frag_size</var></dt> - <dd>Causes - <a class="permalink" href="#ip_output"><code class="Fn" id="ip_output">ip_output</code></a>() - to fragment outgoing <var class="Vt">mbuf chains</var> into fragments of - the specified size. Setting this variable to 1 is an excellent way to test - the long <var class="Vt">mbuf chain</var> handling ability of network - drivers.</dd> - <dt id="kern.ipc.m_defragrandomfailures"><var class="Va">kern.ipc.m_defragrandomfailures</var></dt> - <dd>Causes the function - <a class="permalink" href="#m_defrag~2"><code class="Fn" id="m_defrag~2">m_defrag</code></a>() - to randomly fail, returning <code class="Dv">NULL</code>. Any piece of - code which uses <code class="Fn">m_defrag</code>() should be tested with - this feature.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">See above.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ifnet(9)</a>, <a class="Xr">mbuf_tags(9)</a></p> -<p class="Pp"><cite class="Rs"><span class="RsA">S. J. Leffler</span>, - <span class="RsA">W. N. Joy</span>, <span class="RsA">R. S. Fabry</span>, - and <span class="RsA">M. J. Karels</span>, <span class="RsT">Networking - Implementation Notes</span>, <i class="RsB">4.4BSD System Manager's Manual - (SMM)</i>.</cite></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp"><var class="Vt">Mbufs</var> appeared in an early version of - <span class="Ux">BSD</span>. Besides being used for network packets, they - were used to store various dynamic structures, such as routing table - entries, interface addresses, protocol control blocks, etc. In more recent - <span class="Ux">FreeBSD</span> use of <var class="Vt">mbufs</var> is almost - entirely limited to packet storage, with <a class="Xr">uma(9)</a> zones - being used directly to store other network-related memory.</p> -<p class="Pp">Historically, the <var class="Vt">mbuf</var> allocator has been a - special-purpose memory allocator able to run in interrupt contexts and - allocating from a special kernel address space map. As of - <span class="Ux">FreeBSD 5.3</span>, the <var class="Vt">mbuf</var> - allocator is a wrapper around <a class="Xr">uma(9)</a>, allowing caching of - <var class="Vt">mbufs</var>, clusters, and <var class="Vt">mbuf</var> + - cluster pairs in per-CPU caches, as well as bringing other benefits of slab - allocation.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The original <code class="Nm">mbuf</code> manual page was written - by <span class="An">Yar Tikhiy</span>. The <a class="Xr">uma(9)</a> - <var class="Vt">mbuf</var> allocator was written by - <br/> - <span class="An">Bosko Milekic</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 20, 2026</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/mbuf_tags.9 4.html b/static/freebsd/man9/mbuf_tags.9 4.html deleted file mode 100644 index aac5e5f6..00000000 --- a/static/freebsd/man9/mbuf_tags.9 4.html +++ /dev/null @@ -1,262 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">MBUF_TAGS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">MBUF_TAGS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">mbuf_tags</code> — <span class="Nd">a - framework for generic packet attributes</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/mbuf.h</a>></code></p> -<p class="Pp"><var class="Ft">struct m_tag *</var> - <br/> - <code class="Fn">m_tag_alloc</code>(<var class="Fa" style="white-space: nowrap;">uint32_t - cookie</var>, <var class="Fa" style="white-space: nowrap;">uint16_t - type</var>, <var class="Fa" style="white-space: nowrap;">int len</var>, - <var class="Fa" style="white-space: nowrap;">int wait</var>);</p> -<p class="Pp"><var class="Ft">struct m_tag *</var> - <br/> - <code class="Fn">m_tag_copy</code>(<var class="Fa" style="white-space: nowrap;">struct - m_tag *t</var>, <var class="Fa" style="white-space: nowrap;">int - how</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">m_tag_copy_chain</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *to</var>, <var class="Fa" style="white-space: nowrap;">const struct - mbuf *from</var>, <var class="Fa" style="white-space: nowrap;">int - how</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">m_tag_delete</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">struct m_tag - *t</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">m_tag_delete_chain</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">struct m_tag - *t</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">m_tag_delete_nonpersistent</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *m</var>);</p> -<p class="Pp"><var class="Ft">struct m_tag *</var> - <br/> - <code class="Fn">m_tag_find</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">uint16_t - type</var>, <var class="Fa" style="white-space: nowrap;">struct m_tag - *start</var>);</p> -<p class="Pp"><var class="Ft">struct m_tag *</var> - <br/> - <code class="Fn">m_tag_first</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">m_tag_free</code>(<var class="Fa" style="white-space: nowrap;">struct - m_tag *t</var>);</p> -<p class="Pp"><var class="Ft">struct m_tag *</var> - <br/> - <code class="Fn">m_tag_get</code>(<var class="Fa" style="white-space: nowrap;">uint16_t - type</var>, <var class="Fa" style="white-space: nowrap;">int len</var>, - <var class="Fa" style="white-space: nowrap;">int wait</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">m_tag_init</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *m</var>);</p> -<p class="Pp"><var class="Ft">struct m_tag *</var> - <br/> - <code class="Fn">m_tag_locate</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - cookie</var>, <var class="Fa" style="white-space: nowrap;">uint16_t - type</var>, <var class="Fa" style="white-space: nowrap;">struct m_tag - *t</var>);</p> -<p class="Pp"><var class="Ft">struct m_tag *</var> - <br/> - <code class="Fn">m_tag_next</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">struct m_tag - *t</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">m_tag_prepend</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">struct m_tag - *t</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">m_tag_unlink</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">struct m_tag - *t</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Mbuf tags allow additional meta-data to be associated with - in-flight packets by providing a mechanism for the tagging of additional - kernel memory onto packet header mbufs. Tags are maintained in chains off of - the <a class="Xr">mbuf(9)</a> header, and maintained using a series of API - calls to allocate, search, and delete tags. Tags are identified using an ID - and cookie that uniquely identify a class of data tagged onto the packet, - and may contain an arbitrary amount of additional storage. Typical uses of - mbuf tags include Mandatory Access Control (MAC) labels as described in - <a class="Xr">mac(9)</a>, IPsec policy information as described in - <a class="Xr">ipsec(4)</a>, and packet filter tags used by - <a class="Xr">pf(4)</a>.</p> -<p class="Pp" id="M_COPY_PKTHDR">Tags will be maintained across a variety of - operations, including the copying of packet headers using facilities such as - <a class="permalink" href="#M_COPY_PKTHDR"><code class="Fn">M_COPY_PKTHDR</code></a>() - and - <a class="permalink" href="#M_MOVE_PKTHDR"><code class="Fn" id="M_MOVE_PKTHDR">M_MOVE_PKTHDR</code></a>(). - Any tags associated with an mbuf header will be automatically freed when the - mbuf is freed, although some subsystems will wish to delete the tags prior - to that time.</p> -<p class="Pp">Packet tags are used by different kernel APIs to keep track of - operations done or scheduled to happen to packets. Each packet tag can be - distinguished by its type and cookie. The cookie is used to identify a - specific module or API. The packet tags are attached to mbuf packet - headers.</p> -<p class="Pp" id="sizeof">The first - <a class="permalink" href="#sizeof"><code class="Fn">sizeof</code></a>(<var class="Fa">struct - m_tag</var>) bytes of a tag contain a <var class="Vt">struct - m_tag</var>:</p> -<div class="Bd Pp Li"> -<pre>struct m_tag { - SLIST_ENTRY(m_tag) m_tag_link; /* List of packet tags */ - uint16_t m_tag_id; /* Tag ID */ - uint16_t m_tag_len; /* Length of data */ - uint32_t m_tag_cookie; /* ABI/Module ID */ - void (*m_tag_free)(struct m_tag *); -};</pre> -</div> -<p class="Pp" id="m_tag_free_default">The <var class="Va">m_tag_link</var> field - is used to link tags together (see <a class="Xr">queue(3)</a> for more - details). The <var class="Va">m_tag_id</var>, - <var class="Va">m_tag_len</var> and <var class="Va">m_tag_cookie</var> - fields are set to type, length, and cookie, respectively. - <var class="Va">m_tag_free</var> points to - <a class="permalink" href="#m_tag_free_default"><code class="Fn">m_tag_free_default</code></a>(). - Following this structure are <var class="Va">m_tag_len</var> bytes of space - that can be used to store tag-specific information. Addressing this data - region may be tricky. A safe way is embedding <var class="Vt">struct - m_tag</var> into a private data structure, as follows:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct foo { - struct m_tag tag; - ... -}; -struct foo *p = (struct foo *)m_tag_alloc(...); -struct m_tag *mtag = &p->tag;</pre> -</div> -<p class="Pp">Note that <span class="Ux">OpenBSD</span> does not support - cookies, it needs <var class="Va">m_tag_id</var> to be globally unique. To - keep compatibility with <span class="Ux">OpenBSD</span>, a cookie - <code class="Dv">MTAG_ABI_COMPAT</code> is provided along with some - compatibility functions. When writing an <span class="Ux">OpenBSD</span> - compatible code, one should be careful not to take already used tag type. - Tag types are defined in - <code class="In"><<a class="In">sys/mbuf.h</a>></code>.</p> -<section class="Ss"> -<h2 class="Ss" id="Packet_Tag_Manipulation_Functions"><a class="permalink" href="#Packet_Tag_Manipulation_Functions">Packet - Tag Manipulation Functions</a></h2> -<dl class="Bl-ohang Bd-indent"> - <dt id="m_tag_alloc"><a class="permalink" href="#m_tag_alloc"><code class="Fn">m_tag_alloc</code></a>(<var class="Fa">cookie</var>, - <var class="Fa">type</var>, <var class="Fa">len</var>, - <var class="Fa">wait</var>)</dt> - <dd>Allocate a new tag of type <var class="Fa">type</var> and cookie - <var class="Fa">cookie</var> with <var class="Va">len</var> bytes of space - following the tag header itself. The <var class="Fa">wait</var> argument - is passed directly to <a class="Xr">malloc(9)</a>. If successful, - <code class="Fn">m_tag_alloc</code>() returns a memory buffer of - (<var class="Va">len</var> <span class="No">+</span> - <code class="Fn">sizeof</code>(<var class="Fa">struct m_tag</var>)) bytes. - Otherwise, <code class="Dv">NULL</code> is returned. A compatibility - function - <a class="permalink" href="#m_tag_get"><code class="Fn" id="m_tag_get">m_tag_get</code></a>() - is also provided.</dd> - <dt id="m_tag_copy"><a class="permalink" href="#m_tag_copy"><code class="Fn">m_tag_copy</code></a>(<var class="Fa">tag</var>, - <var class="Fa">how</var>)</dt> - <dd>Allocate a copy of <var class="Fa">tag</var>. The - <var class="Fa">how</var> argument is passed directly to - <code class="Fn">m_tag_alloc</code>(). The return values are the same as - in <code class="Fn">m_tag_alloc</code>().</dd> - <dt id="m_tag_copy_chain"><a class="permalink" href="#m_tag_copy_chain"><code class="Fn">m_tag_copy_chain</code></a>(<var class="Fa">tombuf</var>, - <var class="Fa">frommbuf</var>, <var class="Fa">how</var>)</dt> - <dd>Allocate and copy all tags from mbuf <var class="Fa">frommbuf</var> to - mbuf <var class="Fa">tombuf</var>. Returns 1 on success, and 0 on failure. - In the latter case, mbuf <var class="Fa">tombuf</var> loses all its tags, - even previously present.</dd> - <dt id="m_tag_delete"><a class="permalink" href="#m_tag_delete"><code class="Fn">m_tag_delete</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">tag</var>)</dt> - <dd>Remove <var class="Fa">tag</var> from <var class="Fa">mbuf</var>'s list - and free it.</dd> - <dt id="m_tag_delete_chain"><a class="permalink" href="#m_tag_delete_chain"><code class="Fn">m_tag_delete_chain</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">tag</var>)</dt> - <dd>Remove and free a packet tag chain, starting from - <var class="Fa">tag</var>. If <var class="Fa">tag</var> is - <code class="Dv">NULL</code>, all tags are deleted.</dd> - <dt id="m_tag_delete_nonpersistent"><a class="permalink" href="#m_tag_delete_nonpersistent"><code class="Fn">m_tag_delete_nonpersistent</code></a>(<var class="Fa">mbuf</var>)</dt> - <dd>Traverse <var class="Fa">mbuf</var>'s tags and delete those which do not - have the <code class="Dv">MTAG_PERSISTENT</code> flag set.</dd> - <dt id="m_tag_first"><a class="permalink" href="#m_tag_first"><code class="Fn">m_tag_first</code></a>(<var class="Fa">mbuf</var>)</dt> - <dd>Return the first tag associated with <var class="Fa">mbuf</var>.</dd> - <dt id="m_tag_free"><a class="permalink" href="#m_tag_free"><code class="Fn">m_tag_free</code></a>(<var class="Fa">tag</var>)</dt> - <dd>Free <var class="Fa">tag</var> using its <var class="Va">m_tag_free</var> - method. The <code class="Fn">m_tag_free_default</code>() function is used - by default.</dd> - <dt id="m_tag_init"><a class="permalink" href="#m_tag_init"><code class="Fn">m_tag_init</code></a>(<var class="Fa">mbuf</var>)</dt> - <dd>Initialize the tag storage for packet <var class="Fa">mbuf</var>.</dd> - <dt id="m_tag_locate"><a class="permalink" href="#m_tag_locate"><code class="Fn">m_tag_locate</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">cookie</var>, <var class="Fa">type</var>, - <var class="Fa">tag</var>)</dt> - <dd>Search for a tag defined by <var class="Fa">type</var> and - <var class="Fa">cookie</var> in <var class="Fa">mbuf</var>, starting from - position specified by <var class="Fa">tag</var>. If the latter is - <code class="Dv">NULL</code>, then search through the whole list. Upon - success, a pointer to the first found tag is returned. In either case, - <code class="Dv">NULL</code> is returned. A compatibility function - <a class="permalink" href="#m_tag_find"><code class="Fn" id="m_tag_find">m_tag_find</code></a>() - is also provided.</dd> - <dt id="m_tag_next"><a class="permalink" href="#m_tag_next"><code class="Fn">m_tag_next</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">tag</var>)</dt> - <dd>Return tag next to <var class="Fa">tag</var> in - <var class="Fa">mbuf</var>. If absent, <code class="Dv">NULL</code> is - returned.</dd> - <dt id="m_tag_prepend"><a class="permalink" href="#m_tag_prepend"><code class="Fn">m_tag_prepend</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">tag</var>)</dt> - <dd>Add the new tag <var class="Fa">tag</var> at the head of the tag list for - packet <var class="Fa">mbuf</var>.</dd> - <dt id="m_tag_unlink"><a class="permalink" href="#m_tag_unlink"><code class="Fn">m_tag_unlink</code></a>(<var class="Fa">mbuf</var>, - <var class="Fa">tag</var>)</dt> - <dd>Remove tag <var class="Fa">tag</var> from the list of tags of packet - <var class="Fa">mbuf</var>.</dd> -</dl> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="CODE_REFERENCES"><a class="permalink" href="#CODE_REFERENCES">CODE - REFERENCES</a></h1> -<p class="Pp">The tag-manipulating code is contained in the file - <span class="Pa">sys/kern/uipc_mbuf2.c</span>. Inlined functions are defined - in <code class="In"><<a class="In">sys/mbuf.h</a>></code>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">queue(3)</a>, <a class="Xr">mbuf(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The packet tags first appeared in <span class="Ux">OpenBSD - 2.9</span> and were written by <span class="An">Angelos D. Keromytis</span> - <<a class="Mt" href="mailto:angelos@openbsd.org">angelos@openbsd.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 28, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/mdchain.9 4.html b/static/freebsd/man9/mdchain.9 4.html deleted file mode 100644 index 4866652a..00000000 --- a/static/freebsd/man9/mdchain.9 4.html +++ /dev/null @@ -1,229 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">MDCHAIN(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">MDCHAIN(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">mdchain</code>, <code class="Nm">md_initm</code>, - <code class="Nm">md_done</code>, <code class="Nm">md_append_record</code>, - <code class="Nm">md_next_record</code>, - <code class="Nm">md_get_uint8</code>, <code class="Nm">md_get_uint16</code>, - <code class="Nm">md_get_uint16be</code>, - <code class="Nm">md_get_uint16le</code>, - <code class="Nm">md_get_uint32</code>, - <code class="Nm">md_get_uint32be</code>, - <code class="Nm">md_get_uint32le</code>, - <code class="Nm">md_get_int64</code>, - <code class="Nm">md_get_int64be</code>, - <code class="Nm">md_get_int64le</code>, <code class="Nm">md_get_mem</code>, - <code class="Nm">md_get_mbuf</code>, <code class="Nm">md_get_uio</code> - — <span class="Nd">set of functions to dissect an mbuf chain to - various data types</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="Cd">options LIBMCHAIN</code> <code class="Li">kldload - libmchain</code></p> -<p class="Pp"> - <br/> - <code class="In">#include <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/uio.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mchain.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">md_initm</code>(<var class="Fa" style="white-space: nowrap;">struct - mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">md_done</code>(<var class="Fa" style="white-space: nowrap;">struct - mdchain *mdp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">md_append_record</code>(<var class="Fa" style="white-space: nowrap;">struct - mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *top</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">md_next_record</code>(<var class="Fa" style="white-space: nowrap;">struct - mdchain *mdp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">md_get_uint8</code>(<var class="Fa" style="white-space: nowrap;">struct - mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">uint8_t - *x</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">md_get_uint16</code>(<var class="Fa" style="white-space: nowrap;">struct - mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">uint16_t - *x</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">md_get_uint16be</code>(<var class="Fa" style="white-space: nowrap;">struct - mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">uint16_t - *x</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">md_get_uint16le</code>(<var class="Fa" style="white-space: nowrap;">struct - mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">uint16_t - *x</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">md_get_uint32</code>(<var class="Fa" style="white-space: nowrap;">struct - mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - *x</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">md_get_uint32be</code>(<var class="Fa" style="white-space: nowrap;">struct - mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - *x</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">md_get_uint32le</code>(<var class="Fa" style="white-space: nowrap;">struct - mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - *x</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">md_get_int64</code>(<var class="Fa" style="white-space: nowrap;">struct - mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">int64_t - *x</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">md_get_int64be</code>(<var class="Fa" style="white-space: nowrap;">struct - mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">int64_t - *x</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">md_get_int64le</code>(<var class="Fa" style="white-space: nowrap;">struct - mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">int64_t - *x</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">md_get_mem</code>(<var class="Fa" style="white-space: nowrap;">struct - mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">caddr_t - target</var>, <var class="Fa" style="white-space: nowrap;">int size</var>, - <var class="Fa" style="white-space: nowrap;">int type</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">md_get_mbuf</code>(<var class="Fa" style="white-space: nowrap;">struct - mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">int - size</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - **m</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">md_get_uio</code>(<var class="Fa" style="white-space: nowrap;">struct - mdchain *mdp</var>, <var class="Fa" style="white-space: nowrap;">struct uio - *uiop</var>, <var class="Fa" style="white-space: nowrap;">int - size</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These functions are used to decompose mbuf chains to various data - types. The <var class="Vt">mdchain</var> structure is used as a working - context and should be initialized through a call of the - <a class="permalink" href="#mb_initm"><code class="Fn" id="mb_initm">mb_initm</code></a>() - function. It has the following fields:</p> -<dl class="Bl-tag"> - <dt id="md_top"><var class="Va">md_top</var></dt> - <dd>(<var class="Vt">struct mbuf *</var>) A pointer to the top of the parsed - mbuf chain.</dd> - <dt id="md_cur"><var class="Va">md_cur</var></dt> - <dd>(<var class="Vt">struct mbuf *</var>) A pointer to the currently parsed - mbuf.</dd> - <dt id="md_pas"><var class="Va">md_pas</var></dt> - <dd>(<var class="Vt">int</var>) Offset in the current mbuf.</dd> -</dl> -<p class="Pp" id="md_done">The - <a class="permalink" href="#md_done"><code class="Fn">md_done</code></a>() - function disposes of an mbuf chain pointed to by the - <var class="Fa">mdp->md_top</var> field and sets the field to - <code class="Dv">NULL</code>.</p> -<p class="Pp" id="md_append_record">The - <a class="permalink" href="#md_append_record"><code class="Fn">md_append_record</code></a>() - appends a new mbuf chain using <var class="Va">m_nextpkt</var> field to form - a single linked list of mbuf chains. If the - <var class="Fa">mdp->md_top</var> field is <code class="Dv">NULL</code>, - then this function behaves exactly as the - <a class="permalink" href="#md_initm"><code class="Fn" id="md_initm">md_initm</code></a>() - function.</p> -<p class="Pp" id="md_next_record">The - <a class="permalink" href="#md_next_record"><code class="Fn">md_next_record</code></a>() - function extracts the next mbuf chain and disposes the current one, if any. - For a new mbuf chain it calls the - <a class="permalink" href="#md_initm~2"><code class="Fn" id="md_initm~2">md_initm</code></a>() - function. If there is no data left the function returns - <code class="Er">ENOENT</code>.</p> -<p class="Pp" id="md_get_*">All - <a class="permalink" href="#md_get_*"><code class="Fn">md_get_*</code></a>() - functions perform an actual copy of the data from an mbuf chain. Functions - which have <code class="Cm">le</code> or <code class="Cm">be</code> suffixes - will perform conversion to the little- or big-endian data formats.</p> -<p class="Pp" id="md_get_mem"><a class="permalink" href="#md_get_mem"><code class="Fn">md_get_mem</code></a>() - function copies <var class="Fa">size</var> bytes of data specified by the - <var class="Fa">source</var> argument from an mbuf chain. The - <var class="Fa">type</var> argument specifies the method used to perform a - copy, and can be one of the following:</p> -<dl class="Bl-tag"> - <dt id="MB_MSYSTEM"><a class="permalink" href="#MB_MSYSTEM"><code class="Dv">MB_MSYSTEM</code></a></dt> - <dd>Use the - <a class="permalink" href="#bcopy"><code class="Fn" id="bcopy">bcopy</code></a>() - function.</dd> - <dt id="MB_MUSER"><a class="permalink" href="#MB_MUSER"><code class="Dv">MB_MUSER</code></a></dt> - <dd>Use the <a class="Xr">copyin(9)</a> function.</dd> - <dt id="MB_MINLINE"><a class="permalink" href="#MB_MINLINE"><code class="Dv">MB_MINLINE</code></a></dt> - <dd>Use an “inline” loop which does not call any function.</dd> -</dl> -<p class="Pp">If <var class="Fa">target</var> is <code class="Dv">NULL</code>, - an actual copy is not performed and the function just skips the given number - of bytes.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">All <var class="Ft">int</var> functions return zero if successful, - otherwise an error code is returned.</p> -<p class="Pp" id="Note"><a class="permalink" href="#Note"><i class="Em">Note</i></a>: - after failure of any function, an mbuf chain is left in the broken state and - only the <code class="Fn">md_done</code>() function can safely be called to - destroy it.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<div class="Bd Li"> -<pre>struct mdchain *mdp; -struct mbuf *m; -uint16_t length; -uint8_t byte; - -receive(so, &m); -md_initm(mdp, m); -if (md_get_uint8(mdp, &byte) != 0 || - md_get_uint16le(mdp, &length) != 0) - error = EBADRPC; -mb_done(mdp);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">mbchain(9)</a>, <a class="Xr">mbuf(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Boris - Popov</span> - <<a class="Mt" href="mailto:bp@FreeBSD.org">bp@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 28, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/memcchr.9 4.html b/static/freebsd/man9/memcchr.9 4.html deleted file mode 100644 index 4dbb5109..00000000 --- a/static/freebsd/man9/memcchr.9 4.html +++ /dev/null @@ -1,55 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">MEMCCHR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">MEMCCHR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">memcchr</code> — <span class="Nd">locate - the complement of a byte in byte string</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/libkern.h</a>></code></p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">memcchr</code>(<var class="Fa" style="white-space: nowrap;">const - void *b</var>, <var class="Fa" style="white-space: nowrap;">int c</var>, - <var class="Fa" style="white-space: nowrap;">size_t len</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#memcchr"><code class="Fn" id="memcchr">memcchr</code></a>() - function locates the first occurrence of a byte unequal to - <var class="Fa">c</var> (converted to an <var class="Vt">unsigned - char</var>) in string <var class="Fa">b</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">memcchr</code>() function returns a pointer - to the byte located, or NULL if no such byte exists within - <var class="Fa">len</var> bytes.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">memchr(3)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Fn">memcchr</code>() function first appeared in - <span class="Ux">FreeBSD 10.0</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 1, 2012</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/memguard.9 3.html b/static/freebsd/man9/memguard.9 3.html deleted file mode 100644 index 8ba31e90..00000000 --- a/static/freebsd/man9/memguard.9 3.html +++ /dev/null @@ -1,135 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">MEMGUARD(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">MEMGUARD(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">MemGuard</code> — <span class="Nd">memory - allocator for debugging purposes</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="Cd">options DEBUG_MEMGUARD</code></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><code class="Nm">MemGuard</code> is a simple and small replacement - memory allocator designed to help detect tamper-after-free scenarios. These - problems are more and more common and likely with multithreaded kernels - where race conditions are more prevalent.</p> -<p class="Pp" id="malloc"><code class="Nm">MemGuard</code> can take over - <a class="permalink" href="#malloc"><code class="Fn">malloc</code></a>(), - <a class="permalink" href="#realloc"><code class="Fn" id="realloc">realloc</code></a>() - and - <a class="permalink" href="#free"><code class="Fn" id="free">free</code></a>() - for a single malloc type. Alternatively <code class="Nm">MemGuard</code> can - take over - <a class="permalink" href="#uma_zalloc"><code class="Fn" id="uma_zalloc">uma_zalloc</code></a>(), - <a class="permalink" href="#uma_zalloc_arg"><code class="Fn" id="uma_zalloc_arg">uma_zalloc_arg</code></a>() - and - <a class="permalink" href="#uma_free"><code class="Fn" id="uma_free">uma_free</code></a>() - for a single <a class="Xr">uma(9)</a> zone. Also - <code class="Nm">MemGuard</code> can guard all allocations larger than - <code class="Dv">PAGE_SIZE</code>, and can guard a random fraction of all - allocations. There is also a knob to prevent allocations smaller than a - specified size from being guarded, to limit memory waste.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">To use <code class="Nm">MemGuard</code> for a memory type, either - add an entry to <span class="Pa">/boot/loader.conf</span>:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>vm.memguard.desc=<memory_type></pre> -</div> -<p class="Pp">Or set the <var class="Va">vm.memguard.desc</var> - <a class="Xr">sysctl(8)</a> variable at run-time:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>sysctl vm.memguard.desc=<memory_type></pre> -</div> -<p class="Pp">Where <var class="Ar">memory_type</var> can be either a short - description of the memory type to monitor, either name of - <a class="Xr">uma(9)</a> zone. Only allocations from that - <var class="Ar">memory_type</var> made after - <var class="Va">vm.memguard.desc</var> is set will potentially be guarded. - If <var class="Va">vm.memguard.desc</var> is modified at run-time then only - allocations of the new <var class="Ar">memory_type</var> will potentially be - guarded once the <a class="Xr">sysctl(8)</a> is set. Existing guarded - allocations will still be properly released by either - <a class="Xr">free(9)</a> or <a class="Xr">uma_zfree(9)</a>, depending on - what kind of allocation was taken over.</p> -<p class="Pp">To determine short description of a <a class="Xr">malloc(9)</a> - type one can either take it from the first column of - <a class="Xr">vmstat(8)</a> <code class="Fl">-m</code> output, or to find it - in the kernel source. It is the second argument to - <a class="Xr">MALLOC_DEFINE(9)</a> macro. To determine name of - <a class="Xr">uma(9)</a> zone one can either take it from the first column - of <a class="Xr">vmstat(8)</a> <code class="Fl">-z</code> output, or to find - it in the kernel source. It is the first argument to the - <a class="Xr">uma_zcreate(9)</a> function.</p> -<p class="Pp">The <var class="Va">vm.memguard.divisor</var> boot-time tunable is - used to scale how much of the system's physical memory - <code class="Nm">MemGuard</code> is allowed to consume. The default is 10, - so up to <var class="Va">vm_cnt.v_page_count</var>/10 pages can be used. - <code class="Nm">MemGuard</code> will reserve - <var class="Va">vm_kmem_max</var> / - <var class="Va">vm.memguard.divisor</var> bytes of virtual address space, - limited by twice the physical memory size. The physical limit is reported as - <var class="Va">vm.memguard.phys_limit</var> and the virtual space reserved - for <code class="Nm">MemGuard</code> is reported as - <var class="Va">vm.memguard.mapsize</var>.</p> -<p class="Pp"><code class="Nm">MemGuard</code> will not do page promotions for - any allocation smaller than <var class="Va">vm.memguard.minsize</var> bytes. - The default is 0, meaning all allocations can potentially be guarded. - <code class="Nm">MemGuard</code> can guard sufficiently large allocations - randomly, with average frequency of every one in 100000 / - <var class="Va">vm.memguard.frequency</var> allocations. The default is 0, - meaning no allocations are randomly guarded.</p> -<p class="Pp"><code class="Nm">MemGuard</code> can optionally add unmapped guard - pages around each allocation to detect overflow and underflow, if - <var class="Va">vm.memguard.options</var> has the 1 bit set. This option is - enabled by default. <code class="Nm">MemGuard</code> will optionally guard - all allocations of <code class="Dv">PAGE_SIZE</code> or larger if - <var class="Va">vm.memguard.options</var> has the 2 bit set. This option is - off by default. By default <code class="Nm">MemGuard</code> does not guard - <a class="Xr">uma(9)</a> zones that have been initialized with the - <code class="Dv">UMA_ZONE_NOFREE</code> flag set, since it can produce false - positives on them. However, this safety measure can be turned off by setting - bit 3 of the <var class="Va">vm.memguard.options</var> tunable.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">sysctl(8)</a>, <a class="Xr">vmstat(8)</a>, - <a class="Xr">contigmalloc(9)</a>, <a class="Xr">malloc(9)</a>, - <a class="Xr">redzone(9)</a>, <a class="Xr">uma(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp"><code class="Nm">MemGuard</code> first appeared in - <span class="Ux">FreeBSD 6.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp"><code class="Nm">MemGuard</code> was originally written by - <span class="An">Bosko Milekic</span> - <<a class="Mt" href="mailto:bmilekic@FreeBSD.org">bmilekic@FreeBSD.org</a>>. - This manual page was originally written by <span class="An">Christian - Brueffer</span> - <<a class="Mt" href="mailto:brueffer@FreeBSD.org">brueffer@FreeBSD.org</a>>. - Additions have been made by <span class="An">Matthew Fleming</span> - <<a class="Mt" href="mailto:mdf@FreeBSD.org">mdf@FreeBSD.org</a>> and - <span class="An">Gleb Smirnoff</span> - <<a class="Mt" href="mailto:glebius@FreeBSD.org">glebius@FreeBSD.org</a>> - to both the implementation and the documentation.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 22, 2017</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/mi_switch.9 3.html b/static/freebsd/man9/mi_switch.9 3.html deleted file mode 100644 index bbd5d65c..00000000 --- a/static/freebsd/man9/mi_switch.9 3.html +++ /dev/null @@ -1,134 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">MI_SWITCH(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">MI_SWITCH(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">mi_switch</code> — <span class="Nd">switch - to another thread context</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/proc.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">mi_switch</code>(<var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#mi_switch"><code class="Fn" id="mi_switch">mi_switch</code></a>() - function implements the machine-independent prelude to a thread context - switch. It is the single entry point for every context switch and is called - from only a few distinguished places in the kernel. The context switch is, - by necessity, always performed by the switched thread, even when the switch - is initiated from elsewhere; e.g. preemption requested via Inter-Processor - Interrupt (IPI).</p> -<p class="Pp" id="mi_switch~2">The various major uses of - <a class="permalink" href="#mi_switch~2"><code class="Fn">mi_switch</code></a>() - can be enumerated as follows:</p> -<ol class="Bl-enum Bd-indent"> - <li id="turnstile_wait">From within a function such as - <a class="Xr">sleepq_wait(9)</a> or - <a class="permalink" href="#turnstile_wait"><code class="Fn">turnstile_wait</code></a>() - when the current thread voluntarily relinquishes the CPU to wait for some - resource or lock to become available.</li> - <li>Involuntary preemption due to arrival of a higher-priority thread.</li> - <li>At the tail end of <a class="Xr">critical_exit(9)</a>, if preemption was - deferred due to the critical section.</li> - <li id="sched_clock">Within the TDA_SCHED AST handler, when rescheduling - before the return to usermode was requested. There are several reasons for - this, a notable one coming from - <a class="permalink" href="#sched_clock"><code class="Fn">sched_clock</code></a>() - when the running thread has exceeded its time slice.</li> - <li>In the signal handling code (see <a class="Xr">issignal(9)</a>) if a - signal is delivered that causes a process to stop.</li> - <li id="thread_suspend_check">In - <a class="permalink" href="#thread_suspend_check"><code class="Fn">thread_suspend_check</code></a>() - where a thread needs to stop execution due to the suspension state of the - process as a whole.</li> - <li>In <a class="Xr">kern_yield(9)</a> when a thread wants to voluntarily - relinquish the processor.</li> -</ol> -<p class="Pp" id="mi_switch~3">The <var class="Va">flags</var> argument to - <a class="permalink" href="#mi_switch~3"><code class="Fn">mi_switch</code></a>() - indicates the context switch type. One of the following must be passed:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="SWT_OWEPREEMPT"><a class="permalink" href="#SWT_OWEPREEMPT"><code class="Dv">SWT_OWEPREEMPT</code></a></dt> - <dd>Switch due to delayed preemption after exiting a critical section.</dd> - <dt id="SWT_TURNSTILE"><a class="permalink" href="#SWT_TURNSTILE"><code class="Dv">SWT_TURNSTILE</code></a></dt> - <dd>Switch after propagating scheduling priority to the owner of a - resource.</dd> - <dt id="SWT_SLEEPQ"><a class="permalink" href="#SWT_SLEEPQ"><code class="Dv">SWT_SLEEPQ</code></a></dt> - <dd>Begin waiting on a <a class="Xr">sleepqueue(9)</a>.</dd> - <dt id="SWT_RELINQUISH"><a class="permalink" href="#SWT_RELINQUISH"><code class="Dv">SWT_RELINQUISH</code></a></dt> - <dd>Yield call.</dd> - <dt id="SWT_NEEDRESCHED"><a class="permalink" href="#SWT_NEEDRESCHED"><code class="Dv">SWT_NEEDRESCHED</code></a></dt> - <dd>Rescheduling was requested.</dd> - <dt id="SWT_IDLE"><a class="permalink" href="#SWT_IDLE"><code class="Dv">SWT_IDLE</code></a></dt> - <dd>Switch from the idle thread.</dd> - <dt id="SWT_IWAIT"><a class="permalink" href="#SWT_IWAIT"><code class="Dv">SWT_IWAIT</code></a></dt> - <dd>A kernel thread which handles interrupts has finished work and must wait - for interrupts to schedule additional work.</dd> - <dt id="SWT_SUSPEND"><a class="permalink" href="#SWT_SUSPEND"><code class="Dv">SWT_SUSPEND</code></a></dt> - <dd>Thread suspended.</dd> - <dt id="SWT_REMOTEPREEMPT"><a class="permalink" href="#SWT_REMOTEPREEMPT"><code class="Dv">SWT_REMOTEPREEMPT</code></a></dt> - <dd>Preemption by a higher-priority thread, initiated by a remote - processor.</dd> - <dt id="SWT_REMOTEWAKEIDLE"><a class="permalink" href="#SWT_REMOTEWAKEIDLE"><code class="Dv">SWT_REMOTEWAKEIDLE</code></a></dt> - <dd>Idle thread preempted, initiated by a remote processor.</dd> - <dt id="SWT_BIND"><a class="permalink" href="#SWT_BIND"><code class="Dv">SWT_BIND</code></a></dt> - <dd>The running thread has been bound to another processor and must be - switched out.</dd> -</dl> -</div> -<p class="Pp">In addition to the switch type, callers must specify the nature of - the switch by performing a bitwise OR with one of the - <code class="Dv">SW_VOL</code> or <code class="Dv">SW_INVOL</code> flags, - but not both. Respectively, these flags denote whether the context switch is - voluntary or involuntary on the part of the current thread. For an - involuntary context switch in which the running thread is being preempted, - the caller should also pass the <code class="Dv">SW_PREEMPT</code> flag.</p> -<p class="Pp" id="mi_switch~4">Upon entry to - <a class="permalink" href="#mi_switch~4"><code class="Fn">mi_switch</code></a>(), - the current thread must be holding its assigned thread lock. It may be - unlocked as part of the context switch. After they have been rescheduled and - execution resumes, threads will exit <code class="Fn">mi_switch</code>() - with their thread lock unlocked.</p> -<p class="Pp" id="mi_switch~5"><a class="permalink" href="#mi_switch~5"><code class="Fn">mi_switch</code></a>() - records the amount of time the current thread has been running before - handing control over to the scheduler, via - <a class="permalink" href="#sched_switch"><code class="Fn" id="sched_switch">sched_switch</code></a>(). - After selecting a new thread to run, the scheduler will call - <code class="Fn">cpu_switch</code>() to perform the low-level context - switch.</p> -<p class="Pp" id="cpu_switch"><a class="permalink" href="#cpu_switch"><code class="Fn">cpu_switch</code></a>() - is the machine-dependent function that performs the actual switch from the - running thread <var class="Fa">oldtd</var> to the chosen thread - <var class="Fa">newtd</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">cpu_switch(9)</a>, <a class="Xr">cpu_throw(9)</a>, - <a class="Xr">critical_exit(9)</a>, <a class="Xr">issignal(9)</a>, - <a class="Xr">kern_yield(9)</a>, <a class="Xr">mutex(9)</a>, - <a class="Xr">pmap(9)</a>, <a class="Xr">sleepqueue(9)</a>, - <a class="Xr">thread_exit(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 7, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/microseq.9 4.html b/static/freebsd/man9/microseq.9 4.html deleted file mode 100644 index 0977e1c5..00000000 --- a/static/freebsd/man9/microseq.9 4.html +++ /dev/null @@ -1,524 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">MICROSEQ(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">MICROSEQ(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">microseq</code> — <span class="Nd">ppbus - microsequencer developer's guide</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">dev/ppbus/ppbconf.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">dev/ppbus/ppb_msq.h</a>></code></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">See <a class="Xr">ppbus(4)</a> for ppbus description and general - info about the microsequencer.</p> -<p class="Pp">The purpose of this document is to encourage developers to use the - microsequencer mechanism in order to have:</p> -<ol class="Bl-enum Bd-indent"> - <li>a uniform programming model</li> - <li>efficient code</li> -</ol> -<p class="Pp">Before using microsequences, you are encouraged to look at - <a class="Xr">ppc(4)</a> microsequencer implementation and an example of how - using it in <a class="Xr">ppi(4)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="PPBUS_register_model"><a class="permalink" href="#PPBUS_register_model">PPBUS - register model</a></h1> -<section class="Ss"> -<h2 class="Ss" id="Background"><a class="permalink" href="#Background">Background</a></h2> -<p class="Pp">The parallel port model chosen for ppbus is the PC parallel port - model. Thus, any register described later has the same semantic than its - counterpart in a PC parallel port. For more info about ISA/ECP programming, - get the Microsoft standard referenced as "Extended Capabilities Port - Protocol and ISA interface Standard". Registers described later are - standard parallel port registers.</p> -<p class="Pp">Mask macros are defined in the standard ppbus include files for - each valid bit of parallel port registers.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Data_register"><a class="permalink" href="#Data_register">Data - register</a></h2> -<p class="Pp">In compatible or nibble mode, writing to this register will drive - data to the parallel port data lines. In any other mode, drivers may be - tri-stated by setting the direction bit (PCD) in the control register. Reads - to this register return the value on the data lines.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Device_status_register"><a class="permalink" href="#Device_status_register">Device - status register</a></h2> -<p class="Pp">This read-only register reflects the inputs on the parallel port - interface.</p> -<p class="Pp"></p> -<table class="Bl-column Bl-compact"> - <tr id="Bit"> - <td><a class="permalink" href="#Bit"><i class="Em">Bit</i></a></td> - <td><a class="permalink" href="#Name"><i class="Em" id="Name">Name</i></a></td> - <td><a class="permalink" href="#Description"><i class="Em" id="Description">Description</i></a></td> - </tr> - <tr> - <td>7</td> - <td>nBUSY</td> - <td>inverted version of parallel port Busy signal</td> - </tr> - <tr> - <td>6</td> - <td>nACK</td> - <td>version of parallel port nAck signal</td> - </tr> - <tr> - <td>5</td> - <td>PERROR</td> - <td>version of parallel port PERROR signal</td> - </tr> - <tr> - <td>4</td> - <td>SELECT</td> - <td>version of parallel port Select signal</td> - </tr> - <tr> - <td>3</td> - <td>nFAULT</td> - <td>version of parallel port nFault signal</td> - </tr> -</table> -<p class="Pp">Others are reserved and return undefined result when read.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Device_control_register"><a class="permalink" href="#Device_control_register">Device - control register</a></h2> -<p class="Pp">This register directly controls several output signals as well as - enabling some functions.</p> -<p class="Pp"></p> -<table class="Bl-column Bl-compact"> - <tr id="Bit~2"> - <td><a class="permalink" href="#Bit~2"><i class="Em">Bit</i></a></td> - <td><a class="permalink" href="#Name~2"><i class="Em" id="Name~2">Name</i></a></td> - <td><a class="permalink" href="#Description~2"><i class="Em" id="Description~2">Description</i></a></td> - </tr> - <tr> - <td>5</td> - <td>PCD</td> - <td>direction bit in extended modes</td> - </tr> - <tr> - <td>4</td> - <td>IRQENABLE</td> - <td>1 enables an interrupt on the rising edge of nAck</td> - </tr> - <tr> - <td>3</td> - <td>SELECTIN</td> - <td>inverted and driven as parallel port nSelectin signal</td> - </tr> - <tr> - <td>2</td> - <td>nINIT</td> - <td>driven as parallel port nInit signal</td> - </tr> - <tr> - <td>1</td> - <td>AUTOFEED</td> - <td>inverted and driven as parallel port nAutoFd signal</td> - </tr> - <tr> - <td>0</td> - <td>STROBE</td> - <td>inverted and driven as parallel port nStrobe signal</td> - </tr> -</table> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="MICROINSTRUCTIONS"><a class="permalink" href="#MICROINSTRUCTIONS">MICROINSTRUCTIONS</a></h1> -<section class="Ss"> -<h2 class="Ss" id="Description~3"><a class="permalink" href="#Description~3">Description</a></h2> -<p class="Pp"><a class="permalink" href="#Microinstructions"><i class="Em" id="Microinstructions">Microinstructions</i></a> - are either parallel port accesses, program iterations, submicrosequence or C - calls. The parallel port must be considered as the logical model described - in <a class="Xr">ppbus(4)</a>.</p> -<p class="Pp">Available microinstructions are:</p> -<div class="Bd Pp Li"> -<pre>#define MS_OP_GET 0 /* get <ptr>, <len> */ -#define MS_OP_PUT 1 /* put <ptr>, <len> */ -#define MS_OP_RFETCH 2 /* rfetch <reg>, <mask>, <ptr> */ -#define MS_OP_RSET 3 /* rset <reg>, <mask>, <mask> */ -#define MS_OP_RASSERT 4 /* rassert <reg>, <mask> */ -#define MS_OP_DELAY 5 /* delay <val> */ -#define MS_OP_SET 6 /* set <val> */ -#define MS_OP_DBRA 7 /* dbra <offset> */ -#define MS_OP_BRSET 8 /* brset <mask>, <offset> */ -#define MS_OP_BRCLEAR 9 /* brclear <mask>, <offset> */ -#define MS_OP_RET 10 /* ret <retcode> */ -#define MS_OP_C_CALL 11 /* c_call <function>, <parameter> */ -#define MS_OP_PTR 12 /* ptr <pointer> */ -#define MS_OP_ADELAY 13 /* adelay <val> */ -#define MS_OP_BRSTAT 14 /* brstat <mask>, <mask>, <offset> */ -#define MS_OP_SUBRET 15 /* subret <code> */ -#define MS_OP_CALL 16 /* call <microsequence> */ -#define MS_OP_RASSERT_P 17 /* rassert_p <iter>, <reg> */ -#define MS_OP_RFETCH_P 18 /* rfetch_p <iter>, <reg>, <mask> */ -#define MS_OP_TRIG 19 /* trigger <reg>, <len>, <array> */</pre> -</div> -</section> -<section class="Ss"> -<h2 class="Ss" id="Execution_context"><a class="permalink" href="#Execution_context">Execution - context</a></h2> -<p class="Pp">The - <a class="permalink" href="#execution"><i class="Em" id="execution">execution - context</i></a> of microinstructions is:</p> -<ul class="Bl-bullet Bd-indent"> - <li id="program">the - <a class="permalink" href="#program"><i class="Em">program counter</i></a> - which points to the next microinstruction to execute either in the main - microsequence or in a subcall</li> - <li id="ptr">the current value of - <a class="permalink" href="#ptr"><i class="Em">ptr</i></a> which points to - the next char to send/receive</li> - <li id="branch">the current value of the internal - <a class="permalink" href="#branch"><i class="Em">branch - register</i></a></li> -</ul> -<p class="Pp">This data is modified by some of the microinstructions, not - all.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="MS_OP_GET_and_MS_OP_PUT"><a class="permalink" href="#MS_OP_GET_and_MS_OP_PUT">MS_OP_GET - and MS_OP_PUT</a></h2> -<p class="Pp">are microinstructions used to do either predefined standard - IEEE1284-1994 transfers or programmed non-standard io.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="MS_OP_RFETCH_-_Register_FETCH"><a class="permalink" href="#MS_OP_RFETCH_-_Register_FETCH">MS_OP_RFETCH - - Register FETCH</a></h2> -<p class="Pp">is used to retrieve the current value of a parallel port register, - apply a mask and save it in a buffer.</p> -<p class="Pp">Parameters:</p> -<ol class="Bl-enum Bd-indent"> - <li>register</li> - <li>character mask</li> - <li>pointer to the buffer</li> -</ol> -<p class="Pp">Predefined macro: MS_RFETCH(reg,mask,ptr)</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="MS_OP_RSET_-_Register_SET"><a class="permalink" href="#MS_OP_RSET_-_Register_SET">MS_OP_RSET - - Register SET</a></h2> -<p class="Pp">is used to assert/clear some bits of a particular parallel port - register, two masks are applied.</p> -<p class="Pp">Parameters:</p> -<ol class="Bl-enum Bd-indent"> - <li>register</li> - <li>mask of bits to assert</li> - <li>mask of bits to clear</li> -</ol> -<p class="Pp">Predefined macro: MS_RSET(reg,assert,clear)</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="MS_OP_RASSERT_-_Register_ASSERT"><a class="permalink" href="#MS_OP_RASSERT_-_Register_ASSERT">MS_OP_RASSERT - - Register ASSERT</a></h2> -<p class="Pp">is used to assert all bits of a particular parallel port - register.</p> -<p class="Pp">Parameters:</p> -<ol class="Bl-enum Bd-indent"> - <li>register</li> - <li>byte to assert</li> -</ol> -<p class="Pp">Predefined macro: MS_RASSERT(reg,byte)</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="MS_OP_DELAY_-_microsecond_DELAY"><a class="permalink" href="#MS_OP_DELAY_-_microsecond_DELAY">MS_OP_DELAY - - microsecond DELAY</a></h2> -<p class="Pp">is used to delay the execution of the microsequence.</p> -<p class="Pp">Parameter:</p> -<ol class="Bl-enum Bd-indent"> - <li>delay in microseconds</li> -</ol> -<p class="Pp">Predefined macro: MS_DELAY(delay)</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="MS_OP_SET_-_SET_internal_branch_register"><a class="permalink" href="#MS_OP_SET_-_SET_internal_branch_register">MS_OP_SET - - SET internal branch register</a></h2> -<p class="Pp">is used to set the value of the internal branch register.</p> -<p class="Pp">Parameter:</p> -<ol class="Bl-enum Bd-indent"> - <li>integer value</li> -</ol> -<p class="Pp">Predefined macro: MS_SET(accum)</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="MS_OP_DBRA_-_"><a class="permalink" href="#MS_OP_DBRA_-_">MS_OP_DBRA - - Do BRAnch</a></h2> -<p class="Pp">is used to branch if internal branch register decremented by one - result value is positive.</p> -<p class="Pp">Parameter:</p> -<ol class="Bl-enum Bd-indent"> - <li>integer offset in the current executed (sub)microsequence. Offset is added - to the index of the next microinstruction to execute.</li> -</ol> -<p class="Pp">Predefined macro: MS_DBRA(offset)</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="MS_OP_BRSET_-_BRanch_on_SET"><a class="permalink" href="#MS_OP_BRSET_-_BRanch_on_SET">MS_OP_BRSET - - BRanch on SET</a></h2> -<p class="Pp">is used to branch if some of the status register bits of the - parallel port are set.</p> -<p class="Pp">Parameter:</p> -<ol class="Bl-enum Bd-indent"> - <li>bits of the status register</li> - <li>integer offset in the current executed (sub)microsequence. Offset is added - to the index of the next microinstruction to execute.</li> -</ol> -<p class="Pp">Predefined macro: MS_BRSET(mask,offset)</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="MS_OP_BRCLEAR_-_BRanch_on_CLEAR"><a class="permalink" href="#MS_OP_BRCLEAR_-_BRanch_on_CLEAR">MS_OP_BRCLEAR - - BRanch on CLEAR</a></h2> -<p class="Pp">is used to branch if some of the status register bits of the - parallel port are cleared.</p> -<p class="Pp">Parameter:</p> -<ol class="Bl-enum Bd-indent"> - <li>bits of the status register</li> - <li>integer offset in the current executed (sub)microsequence. Offset is added - to the index of the next microinstruction to execute.</li> -</ol> -<p class="Pp">Predefined macro: MS_BRCLEAR(mask,offset)</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="MS_OP_RET_-_RETurn"><a class="permalink" href="#MS_OP_RET_-_RETurn">MS_OP_RET - - RETurn</a></h2> -<p class="Pp">is used to return from a microsequence. This instruction is - mandatory. This is the only way for the microsequencer to detect the end of - the microsequence. The return code is returned in the integer pointed by the - (int *) parameter of the ppb_MS_microseq().</p> -<p class="Pp">Parameter:</p> -<ol class="Bl-enum Bd-indent"> - <li>integer return code</li> -</ol> -<p class="Pp">Predefined macro: MS_RET(code)</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="MS_OP_C_CALL_-_C_function_CALL"><a class="permalink" href="#MS_OP_C_CALL_-_C_function_CALL">MS_OP_C_CALL - - C function CALL</a></h2> -<p class="Pp">is used to call C functions from microsequence execution. This may - be useful when a non-standard i/o is performed to retrieve a data character - from the parallel port.</p> -<p class="Pp">Parameter:</p> -<ol class="Bl-enum Bd-indent"> - <li>the C function to call</li> - <li>the parameter to pass to the function call</li> -</ol> -<p class="Pp">The C function shall be declared as a <var class="Ft">int(*)(void - *p, char *ptr)</var>. The ptr parameter is the current position in the - buffer currently scanned.</p> -<p class="Pp">Predefined macro: MS_C_CALL(func,param)</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="MS_OP_PTR_-_initialize_internal_PTR"><a class="permalink" href="#MS_OP_PTR_-_initialize_internal_PTR">MS_OP_PTR - - initialize internal PTR</a></h2> -<p class="Pp">is used to initialize the internal pointer to the currently - scanned buffer. This pointer is passed to any C call (see above).</p> -<p class="Pp">Parameter:</p> -<ol class="Bl-enum Bd-indent"> - <li>pointer to the buffer that shall be accessed by xxx_P() microsequence - calls. Note that this pointer is automatically incremented during xxx_P() - calls</li> -</ol> -<p class="Pp">Predefined macro: MS_PTR(ptr)</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="MS_OP_ADELAY_-_do_an_Asynchronous_DELAY"><a class="permalink" href="#MS_OP_ADELAY_-_do_an_Asynchronous_DELAY">MS_OP_ADELAY - - do an Asynchronous DELAY</a></h2> -<p class="Pp">is used to make a tsleep() during microsequence execution. The - tsleep is executed at PPBPRI level.</p> -<p class="Pp">Parameter:</p> -<ol class="Bl-enum Bd-indent"> - <li>delay in ms</li> -</ol> -<p class="Pp">Predefined macro: MS_ADELAY(delay)</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="MS_OP_BRSTAT_-_BRanch_on_STATe"><a class="permalink" href="#MS_OP_BRSTAT_-_BRanch_on_STATe">MS_OP_BRSTAT - - BRanch on STATe</a></h2> -<p class="Pp">is used to branch on status register state condition.</p> -<p class="Pp">Parameter:</p> -<ol class="Bl-enum Bd-indent"> - <li>mask of asserted bits. Bits that shall be asserted in the status register - are set in the mask</li> - <li>mask of cleared bits. Bits that shall be cleared in the status register - are set in the mask</li> - <li>integer offset in the current executed (sub)microsequence. Offset is added - to the index of the next microinstruction to execute.</li> -</ol> -<p class="Pp">Predefined macro: MS_BRSTAT(asserted_bits,clear_bits,offset)</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="MS_OP_SUBRET_-_SUBmicrosequence_RETurn"><a class="permalink" href="#MS_OP_SUBRET_-_SUBmicrosequence_RETurn">MS_OP_SUBRET - - SUBmicrosequence RETurn</a></h2> -<p class="Pp">is used to return from the submicrosequence call. This action is - mandatory before a RET call. Some microinstructions (PUT, GET) may not be - callable within a submicrosequence.</p> -<p class="Pp">No parameter.</p> -<p class="Pp">Predefined macro: MS_SUBRET()</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="MS_OP_CALL_-_submicrosequence_CALL"><a class="permalink" href="#MS_OP_CALL_-_submicrosequence_CALL">MS_OP_CALL - - submicrosequence CALL</a></h2> -<p class="Pp">is used to call a submicrosequence. A submicrosequence is a - microsequence with a SUBRET call. Parameter:</p> -<ol class="Bl-enum Bd-indent"> - <li>the submicrosequence to execute</li> -</ol> -<p class="Pp">Predefined macro: MS_CALL(microseq)</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="MS_OP_RASSERT_P_-_Register_ASSERT_from_internal_PTR"><a class="permalink" href="#MS_OP_RASSERT_P_-_Register_ASSERT_from_internal_PTR">MS_OP_RASSERT_P - - Register ASSERT from internal PTR</a></h2> -<p class="Pp">is used to assert a register with data currently pointed by the - internal PTR pointer. Parameter:</p> -<ol class="Bl-enum Bd-indent"> - <li>amount of data to write to the register</li> - <li>register</li> -</ol> -<p class="Pp">Predefined macro: MS_RASSERT_P(iter,reg)</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="MS_OP_RFETCH_P_-_Register_FETCH_to_internal_PTR"><a class="permalink" href="#MS_OP_RFETCH_P_-_Register_FETCH_to_internal_PTR">MS_OP_RFETCH_P - - Register FETCH to internal PTR</a></h2> -<p class="Pp">is used to fetch data from a register. Data is stored in the - buffer currently pointed by the internal PTR pointer. Parameter:</p> -<ol class="Bl-enum Bd-indent"> - <li>amount of data to read from the register</li> - <li>register</li> - <li>mask applied to fetched data</li> -</ol> -<p class="Pp">Predefined macro: MS_RFETCH_P(iter,reg,mask)</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="MS_OP_TRIG_-_TRIG_register"><a class="permalink" href="#MS_OP_TRIG_-_TRIG_register">MS_OP_TRIG - - TRIG register</a></h2> -<p class="Pp">is used to trigger the parallel port. This microinstruction is - intended to provide a very efficient control of the parallel port. - Triggering a register is writing data, wait a while, write data, wait a - while... This allows to write magic sequences to the port. Parameter:</p> -<ol class="Bl-enum Bd-indent"> - <li>amount of data to read from the register</li> - <li>register</li> - <li>size of the array</li> - <li>array of unsigned chars. Each couple of u_chars define the data to write - to the register and the delay in us to wait. The delay is limited to 255 - us to simplify and reduce the size of the array.</li> -</ol> -<p class="Pp">Predefined macro: MS_TRIG(reg,len,array)</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="MICROSEQUENCES"><a class="permalink" href="#MICROSEQUENCES">MICROSEQUENCES</a></h1> -<section class="Ss"> -<h2 class="Ss" id="C_structures"><a class="permalink" href="#C_structures">C - structures</a></h2> -<div class="Bd Li"> -<pre>union ppb_insarg { - int i; - char c; - void *p; - int (* f)(void *, char *); -}; - -struct ppb_microseq { - int opcode; /* microins. opcode */ - union ppb_insarg arg[PPB_MS_MAXARGS]; /* arguments */ -};</pre> -</div> -</section> -<section class="Ss"> -<h2 class="Ss" id="Using_microsequences"><a class="permalink" href="#Using_microsequences">Using - microsequences</a></h2> -<p class="Pp">To instantiate a microsequence, just declare an array of - ppb_microseq structures and initialize it as needed. You may either use - predefined macros or code directly your microinstructions according to the - ppb_microseq definition. For example,</p> -<div class="Bd Pp Li"> -<pre> struct ppb_microseq select_microseq[] = { - - /* parameter list - */ - #define SELECT_TARGET MS_PARAM(0, 1, MS_TYP_INT) - #define SELECT_INITIATOR MS_PARAM(3, 1, MS_TYP_INT) - - /* send the select command to the drive */ - MS_DASS(MS_UNKNOWN), - MS_CASS(H_nAUTO | H_nSELIN | H_INIT | H_STROBE), - MS_CASS( H_AUTO | H_nSELIN | H_INIT | H_STROBE), - MS_DASS(MS_UNKNOWN), - MS_CASS( H_AUTO | H_nSELIN | H_nINIT | H_STROBE), - - /* now, wait until the drive is ready */ - MS_SET(VP0_SELTMO), -/* loop: */ MS_BRSET(H_ACK, 2 /* ready */), - MS_DBRA(-2 /* loop */), -/* error: */ MS_RET(1), -/* ready: */ MS_RET(0) - };</pre> -</div> -<p class="Pp">Here, some parameters are undefined and must be filled before - executing the microsequence. In order to initialize each microsequence, one - should use the ppb_MS_init_msq() function like this:</p> -<div class="Bd Pp Li"> -<pre> ppb_MS_init_msq(select_microseq, 2, - SELECT_TARGET, 1 << target, - SELECT_INITIATOR, 1 << initiator);</pre> -</div> -<p class="Pp">and then execute the microsequence.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="The_microsequencer"><a class="permalink" href="#The_microsequencer">The - microsequencer</a></h2> -<p class="Pp">The microsequencer is executed either at ppbus or adapter level - (see <a class="Xr">ppbus(4)</a> for info about ppbus system layers). Most of - the microsequencer is executed at ppc level to avoid ppbus to adapter - function call overhead. But some actions like deciding whereas the transfer - is IEEE1284-1994 compliant are executed at ppbus layer.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ppbus(4)</a>, <a class="Xr">ppc(4)</a>, - <a class="Xr">ppi(4)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">microseq</code> manual page first appeared in - <span class="Ux">FreeBSD 3.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Nicolas - Souchu</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">Only one level of submicrosequences is allowed.</p> -<p class="Pp">When triggering the port, maximum delay allowed is 255 us.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 6, 1998</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/microtime.9 4.html b/static/freebsd/man9/microtime.9 4.html deleted file mode 100644 index 10dd7210..00000000 --- a/static/freebsd/man9/microtime.9 4.html +++ /dev/null @@ -1,104 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">MICROTIME(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">MICROTIME(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">bintime</code>, - <code class="Nm">getbintime</code>, <code class="Nm">microtime</code>, - <code class="Nm">getmicrotime</code>, <code class="Nm">nanotime</code>, - <code class="Nm">getnanotime</code> — <span class="Nd">get the - current time</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/time.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">bintime</code>(<var class="Fa" style="white-space: nowrap;">struct - bintime *bt</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">getbintime</code>(<var class="Fa" style="white-space: nowrap;">struct - bintime *bt</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">microtime</code>(<var class="Fa" style="white-space: nowrap;">struct - timeval *tv</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">getmicrotime</code>(<var class="Fa" style="white-space: nowrap;">struct - timeval *tv</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nanotime</code>(<var class="Fa" style="white-space: nowrap;">struct - timespec *ts</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">getnanotime</code>(<var class="Fa" style="white-space: nowrap;">struct - timespec *tsp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#bintime"><code class="Fn" id="bintime">bintime</code></a>() - and <code class="Fn">getbintime</code>() functions store the system time as - a <var class="Vt">struct bintime</var> at the addresses specified by - <var class="Fa">bt</var>. The <code class="Fn">microtime</code>() and - <code class="Fn">getmicrotime</code>() functions perform the same utility, - but record the time as a <var class="Vt">struct timeval</var> instead. - Similarly the <code class="Fn">nanotime</code>() and - <code class="Fn">getnanotime</code>() functions store the time as a - <var class="Vt">struct timespec</var>.</p> -<p class="Pp" id="bintime~2">The - <a class="permalink" href="#bintime~2"><code class="Fn">bintime</code></a>(), - <a class="permalink" href="#microtime"><code class="Fn" id="microtime">microtime</code></a>(), - and - <a class="permalink" href="#nanotime"><code class="Fn" id="nanotime">nanotime</code></a>() - functions always query the timecounter to return the current time as - precisely as possible. Whereas <code class="Fn">getbintime</code>(), - <code class="Fn">getmicrotime</code>(), and - <code class="Fn">getnanotime</code>() functions are abstractions which - return a less precise, but faster to obtain, time.</p> -<p class="Pp" id="getbintime">The intent of the - <a class="permalink" href="#getbintime"><code class="Fn">getbintime</code></a>(), - <a class="permalink" href="#getmicrotime"><code class="Fn" id="getmicrotime">getmicrotime</code></a>(), - and - <a class="permalink" href="#getnanotime"><code class="Fn" id="getnanotime">getnanotime</code></a>() - functions is to enforce the user's preference for timer accuracy versus - execution time.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">binuptime(9)</a>, <a class="Xr">getbinuptime(9)</a>, - <a class="Xr">getmicrouptime(9)</a>, <a class="Xr">getnanouptime(9)</a>, - <a class="Xr">microuptime(9)</a>, <a class="Xr">nanouptime(9)</a>, - <a class="Xr">tvtohz(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">bintime</code> functions first appeared in - <span class="Ux">FreeBSD 5.0</span>. The <code class="Nm">microtime</code> - and <code class="Nm">nanotime</code> functions first appeared in - <span class="Ux">FreeBSD 3.0</span> but have existed in other incarnations - since <span class="Ux">4.4BSD</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Kelly - Yancey</span> - <<a class="Mt" href="mailto:kbyanc@posi.net">kbyanc@posi.net</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 16, 2004</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/microuptime.9 4.html b/static/freebsd/man9/microuptime.9 4.html deleted file mode 100644 index c3b21012..00000000 --- a/static/freebsd/man9/microuptime.9 4.html +++ /dev/null @@ -1,110 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">MICROUPTIME(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">MICROUPTIME(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">binuptime</code>, - <code class="Nm">getbinuptime</code>, <code class="Nm">microuptime</code>, - <code class="Nm">getmicrouptime</code>, <code class="Nm">nanouptime</code>, - <code class="Nm">getnanouptime</code>, <code class="Nm">sbinuptime</code>, - <code class="Nm">getsbinuptime</code> — <span class="Nd">get the time - elapsed since boot</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/time.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">binuptime</code>(<var class="Fa" style="white-space: nowrap;">struct - bintime *bt</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">getbinuptime</code>(<var class="Fa" style="white-space: nowrap;">struct - bintime *bt</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">microuptime</code>(<var class="Fa" style="white-space: nowrap;">struct - timeval *tv</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">getmicrouptime</code>(<var class="Fa" style="white-space: nowrap;">struct - timeval *tv</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nanouptime</code>(<var class="Fa" style="white-space: nowrap;">struct - timespec *ts</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">getnanouptime</code>(<var class="Fa" style="white-space: nowrap;">struct - timespec *tsp</var>);</p> -<p class="Pp"><var class="Ft">sbintime_t</var> - <br/> - <code class="Fn">sbinuptime</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft">sbintime_t</var> - <br/> - <code class="Fn">getsbinuptime</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#binuptime"><code class="Fn" id="binuptime">binuptime</code></a>() - and <code class="Fn">getbinuptime</code>() functions store the time elapsed - since boot as a <var class="Vt">struct bintime</var> at the address - specified by <var class="Fa">bt</var>. The - <code class="Fn">microuptime</code>() and - <code class="Fn">getmicrouptime</code>() functions perform the same utility, - but record the elapsed time as a <var class="Vt">struct timeval</var> - instead. Similarly the <code class="Fn">nanouptime</code>() and - <code class="Fn">getnanouptime</code>() functions store the elapsed time as - a <var class="Vt">struct timespec</var>. The - <code class="Fn">sbinuptime</code>() and - <code class="Fn">getsbinuptime</code>() functions return the time elapsed - since boot as a <var class="Vt">sbintime_t</var>.</p> -<p class="Pp" id="binuptime~2">The - <a class="permalink" href="#binuptime~2"><code class="Fn">binuptime</code></a>(), - <a class="permalink" href="#microuptime"><code class="Fn" id="microuptime">microuptime</code></a>(), - <a class="permalink" href="#nanouptime"><code class="Fn" id="nanouptime">nanouptime</code></a>(), - and - <a class="permalink" href="#sbinuptime"><code class="Fn" id="sbinuptime">sbinuptime</code></a>() - functions always query the timecounter to return the current time as - precisely as possible. Whereas <code class="Fn">getbinuptime</code>(), - <code class="Fn">getmicrouptime</code>(), - <code class="Fn">getnanouptime</code>(), and - <code class="Fn">getsbinuptime</code>() functions are abstractions which - return a less precise, but faster to obtain, time.</p> -<p class="Pp" id="getbinuptime">The intent of the - <a class="permalink" href="#getbinuptime"><code class="Fn">getbinuptime</code></a>(), - <a class="permalink" href="#getmicrouptime"><code class="Fn" id="getmicrouptime">getmicrouptime</code></a>(), - <a class="permalink" href="#getnanouptime"><code class="Fn" id="getnanouptime">getnanouptime</code></a>(), - and - <a class="permalink" href="#getsbinuptime"><code class="Fn" id="getsbinuptime">getsbinuptime</code></a>() - functions is to enforce the user's preference for timer accuracy versus - execution time.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">bintime(9)</a>, <a class="Xr">get_cyclecount(9)</a>, - <a class="Xr">getbintime(9)</a>, <a class="Xr">getmicrotime(9)</a>, - <a class="Xr">getnanotime(9)</a>, <a class="Xr">microtime(9)</a>, - <a class="Xr">nanotime(9)</a>, <a class="Xr">tvtohz(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Kelly - Yancey</span> - <<a class="Mt" href="mailto:kbyanc@posi.net">kbyanc@posi.net</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 21, 2015</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/mod_cc.9 3.html b/static/freebsd/man9/mod_cc.9 3.html deleted file mode 100644 index 6e448911..00000000 --- a/static/freebsd/man9/mod_cc.9 3.html +++ /dev/null @@ -1,281 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">MOD_CC(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">MOD_CC(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">mod_cc</code>, - <code class="Nm">DECLARE_CC_MODULE</code>, <code class="Nm">CCV</code> - — <span class="Nd">Modular Congestion Control</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">netinet/tcp.h</a>></code> - <br/> - <code class="In">#include <<a class="In">netinet/cc/cc.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">netinet/cc/cc_module.h</a>></code></p> -<p class="Pp"><code class="Fn">DECLARE_CC_MODULE</code>(<var class="Fa" style="white-space: nowrap;">ccname</var>, - <var class="Fa" style="white-space: nowrap;">ccalgo</var>);</p> -<p class="Pp"><code class="Fn">CCV</code>(<var class="Fa" style="white-space: nowrap;">ccv</var>, - <var class="Fa" style="white-space: nowrap;">what</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">mod_cc</code> framework allows congestion - control algorithms to be implemented as dynamically loadable kernel modules - via the <a class="Xr">kld(4)</a> facility. Transport protocols can select - from the list of available algorithms on a connection-by-connection basis, - or use the system default (see <a class="Xr">mod_cc(4)</a> for more - details).</p> -<p class="Pp"><code class="Nm">mod_cc</code> modules are identified by an - <a class="Xr">ascii(7)</a> name and set of hook functions encapsulated in a - <var class="Vt">struct cc_algo</var>, which has the following members:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct cc_algo { - char name[TCP_CA_NAME_MAX]; - int (*mod_init) (void); - int (*mod_destroy) (void); - size_t (*cc_data_sz)(void); - int (*cb_init) (struct cc_var *ccv, void *ptr); - void (*cb_destroy) (struct cc_var *ccv); - void (*conn_init) (struct cc_var *ccv); - void (*ack_received) (struct cc_var *ccv, uint16_t type); - void (*cong_signal) (struct cc_var *ccv, uint32_t type); - void (*post_recovery) (struct cc_var *ccv); - void (*after_idle) (struct cc_var *ccv); - int (*ctl_output)(struct cc_var *, struct sockopt *, void *); - void (*rttsample)(struct cc_var *, uint32_t, uint32_t, uint32_t); - void (*newround)(struct cc_var *, uint32_t); -};</pre> -</div> -<p class="Pp">The <var class="Va">name</var> field identifies the unique name of - the algorithm, and should be no longer than TCP_CA_NAME_MAX-1 characters in - length (the TCP_CA_NAME_MAX define lives in - <code class="In"><<a class="In">netinet/tcp.h</a>></code> for - compatibility reasons).</p> -<p class="Pp">The <var class="Va">mod_init</var> function is called when a new - module is loaded into the system but before the registration process is - complete. It should be implemented if a module needs to set up some global - state prior to being available for use by new connections. Returning a - non-zero value from <var class="Va">mod_init</var> will cause the loading of - the module to fail.</p> -<p class="Pp">The <var class="Va">mod_destroy</var> function is called prior to - unloading an existing module from the kernel. It should be implemented if a - module needs to clean up any global state before being removed from the - kernel. The return value is currently ignored.</p> -<p class="Pp">The <var class="Va">cc_data_sz</var> function is called by the - socket option code to get the size of data that the - <var class="Va">cb_init</var> function needs. The socket option code then - preallocates the modules memory so that the <var class="Va">cb_init</var> - function will not fail (the socket option code uses M_WAITOK with no locks - held to do this).</p> -<p class="Pp">The <var class="Va">cb_init</var> function is called when a TCP - control block <var class="Vt">struct tcpcb</var> is created. It should be - implemented if a module needs to allocate memory for storing private - per-connection state. Returning a non-zero value from - <var class="Va">cb_init</var> will cause the connection set up to be - aborted, terminating the connection as a result. Note that the ptr argument - passed to the function should be checked to see if it is non-NULL, if so it - is preallocated memory that the cb_init function must use instead of calling - malloc itself.</p> -<p class="Pp">The <var class="Va">cb_destroy</var> function is called when a TCP - control block <var class="Vt">struct tcpcb</var> is destroyed. It should be - implemented if a module needs to free memory allocated in - <var class="Va">cb_init</var>.</p> -<p class="Pp">The <var class="Va">conn_init</var> function is called when a new - connection has been established and variables are being initialised. It - should be implemented to initialise congestion control algorithm variables - for the newly established connection.</p> -<p class="Pp">The <var class="Va">ack_received</var> function is called when a - TCP acknowledgement (ACK) packet is received. Modules use the - <var class="Fa">type</var> argument as an input to their congestion - management algorithms. The ACK types currently reported by the stack are - CC_ACK and CC_DUPACK. CC_ACK indicates the received ACK acknowledges - previously unacknowledged data. CC_DUPACK indicates the received ACK - acknowledges data we have already received an ACK for.</p> -<p class="Pp">The <var class="Va">cong_signal</var> function is called when a - congestion event is detected by the TCP stack. Modules use the - <var class="Fa">type</var> argument as an input to their congestion - management algorithms. The congestion event types currently reported by the - stack are CC_ECN, CC_RTO, CC_RTO_ERR and CC_NDUPACK. CC_ECN is reported when - the TCP stack receives an explicit congestion notification (RFC3168). CC_RTO - is reported when the retransmission time out timer fires. CC_RTO_ERR is - reported if the retransmission time out timer fired in error. CC_NDUPACK is - reported if N duplicate ACKs have been received back-to-back, where N is the - fast retransmit duplicate ack threshold (N=3 currently as per RFC5681).</p> -<p class="Pp">The <var class="Va">post_recovery</var> function is called after - the TCP connection has recovered from a congestion event. It should be - implemented to adjust state as required.</p> -<p class="Pp">The <var class="Va">after_idle</var> function is called when data - transfer resumes after an idle period. It should be implemented to adjust - state as required.</p> -<p class="Pp">The <var class="Va">ctl_output</var> function is called when - <a class="Xr">getsockopt(2)</a> or <a class="Xr">setsockopt(2)</a> is called - on a <a class="Xr">tcp(4)</a> socket with the <var class="Va">struct - sockopt</var> pointer forwarded unmodified from the TCP control, and a - <var class="Va">void *</var> pointer to algorithm specific argument.</p> -<p class="Pp">The <var class="Va">rttsample</var> function is called to pass - round trip time information to the congestion controller. The additional - arguments to the function include the microsecond RTT that is being noted, - the number of times that the data being acknowledged was retransmitted as - well as the flightsize at send. For transports that do not track flightsize - at send, this variable will be the current cwnd at the time of the call.</p> -<p class="Pp">The <var class="Va">newround</var> function is called each time a - new round trip time begins. The montonically increasing round number is also - passed to the congestion controller as well. This can be used for various - purposes by the congestion controller (e.g Hystart++).</p> -<p class="Pp">Note that currently not all TCP stacks call the - <var class="Va">rttsample</var> and <var class="Va">newround</var> function - so dependency on these functions is also dependent upon which TCP stack is - in use.</p> -<p class="Pp" id="DECLARE_CC_MODULE">The - <a class="permalink" href="#DECLARE_CC_MODULE"><code class="Fn">DECLARE_CC_MODULE</code></a>() - macro provides a convenient wrapper around the - <a class="Xr">DECLARE_MODULE(9)</a> macro, and is used to register a - <code class="Nm">mod_cc</code> module with the - <code class="Nm">mod_cc</code> framework. The <var class="Fa">ccname</var> - argument specifies the module's name. The <var class="Fa">ccalgo</var> - argument points to the module's <var class="Vt">struct cc_algo</var>.</p> -<p class="Pp"><code class="Nm">mod_cc</code> modules must instantiate a - <var class="Vt">struct cc_algo</var>, but are only required to set the name - field, and optionally any of the function pointers. Note that if a module - defines the <var class="Va">cb_init</var> function it also must define a - <var class="Va">cc_data_sz</var> function. This is because when switching - from one congestion control module to another the socket option code will - preallocate memory for the <var class="Va">cb_init</var> function. If no - memory is allocated by the modules <var class="Va">cb_init</var> then the - <var class="Va">cc_data_sz</var> function should return 0.</p> -<p class="Pp">The stack will skip calling any function pointer which is NULL, so - there is no requirement to implement any of the function pointers (with the - exception of the cb_init <-> cc_data_sz dependency noted above). Using - the C99 designated initialiser feature to set fields is encouraged.</p> -<p class="Pp">Each function pointer which deals with congestion control state is - passed a pointer to a <var class="Vt">struct cc_var</var>, which has the - following members:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct cc_var { - void *cc_data; - int bytes_this_ack; - tcp_seq curack; - uint32_t flags; - int type; - union ccv_container { - struct tcpcb *tcp; - struct sctp_nets *sctp; - } ccvc; - uint16_t nsegs; - uint8_t labc; -};</pre> -</div> -<p class="Pp"><var class="Vt">struct cc_var</var> groups congestion control - related variables into a single, embeddable structure and adds a layer of - indirection to accessing transport protocol control blocks. The eventual - goal is to allow a single set of <code class="Nm">mod_cc</code> modules to - be shared between all congestion aware transport protocols, though currently - only <a class="Xr">tcp(4)</a> is supported.</p> -<p class="Pp" id="CCV">To aid the eventual transition towards this goal, direct - use of variables from the transport protocol's data structures is strongly - discouraged. However, it is inevitable at the current time to require access - to some of these variables, and so the - <a class="permalink" href="#CCV"><code class="Fn">CCV</code></a>() macro - exists as a convenience accessor. The <var class="Fa">ccv</var> argument - points to the <var class="Vt">struct cc_var</var> passed into the function - by the <code class="Nm">mod_cc</code> framework. The - <var class="Fa">what</var> argument specifies the name of the variable to - access.</p> -<p class="Pp">Apart from the <var class="Va">type</var> and - <var class="Va">ccv_container</var> fields, the remaining fields in - <var class="Vt">struct cc_var</var> are for use by - <code class="Nm">mod_cc</code> modules.</p> -<p class="Pp">The <var class="Va">cc_data</var> field is available for - algorithms requiring additional per-connection state to attach a dynamic - memory pointer to. The memory should be allocated and attached in the - module's <var class="Va">cb_init</var> hook function.</p> -<p class="Pp">The <var class="Va">bytes_this_ack</var> field specifies the - number of new bytes acknowledged by the most recently received ACK packet. - It is only valid in the <var class="Va">ack_received</var> hook - function.</p> -<p class="Pp">The <var class="Va">curack</var> field specifies the sequence - number of the most recently received ACK packet. It is only valid in the - <var class="Va">ack_received</var>, <var class="Va">cong_signal</var> and - <var class="Va">post_recovery</var> hook functions.</p> -<p class="Pp">The <var class="Va">flags</var> field is used to pass useful - information from the stack to a <code class="Nm">mod_cc</code> module. The - CCF_ABC_SENTAWND flag is relevant in <var class="Va">ack_received</var> and - is set when appropriate byte counting (RFC3465) has counted a window's worth - of bytes has been sent. It is the module's responsibility to clear the flag - after it has processed the signal. The CCF_CWND_LIMITED flag is relevant in - <var class="Va">ack_received</var> and is set when the connection's ability - to send data is currently constrained by the value of the congestion window. - Algorithms should use the absence of this flag being set to avoid - accumulating a large difference between the congestion window and send - window.</p> -<p class="Pp">The <var class="Va">nsegs</var> variable is used to pass in how - much compression was done by the local LRO system. So for example if LRO - pushed three in-order acknowledgements into one acknowledgement the variable - would be set to three.</p> -<p class="Pp">The <var class="Va">labc</var> variable is used in conjunction - with the CCF_USE_LOCAL_ABC flag to override what labc variable the - congestion controller will use for this particular acknowledgement.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">cc_cdg(4)</a>, <a class="Xr">cc_chd(4)</a>, - <a class="Xr">cc_cubic(4)</a>, <a class="Xr">cc_dctcp(4)</a>, - <a class="Xr">cc_hd(4)</a>, <a class="Xr">cc_htcp(4)</a>, - <a class="Xr">cc_newreno(4)</a>, <a class="Xr">cc_vegas(4)</a>, - <a class="Xr">mod_cc(4)</a>, <a class="Xr">tcp(4)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ACKNOWLEDGEMENTS"><a class="permalink" href="#ACKNOWLEDGEMENTS">ACKNOWLEDGEMENTS</a></h1> -<p class="Pp">Development and testing of this software were made possible in - part by grants from the FreeBSD Foundation and Cisco University Research - Program Fund at Community Foundation Silicon Valley.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="FUTURE_WORK"><a class="permalink" href="#FUTURE_WORK">FUTURE - WORK</a></h1> -<p class="Pp">Integrate with <a class="Xr">sctp(4)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The modular Congestion Control (CC) framework first appeared in - <span class="Ux">FreeBSD 9.0</span>.</p> -<p class="Pp">The framework was first released in 2007 by James Healy and - Lawrence Stewart whilst working on the NewTCP research project at Swinburne - University of Technology's Centre for Advanced Internet Architectures, - Melbourne, Australia, which was made possible in part by a grant from the - Cisco University Research Program Fund at Community Foundation Silicon - Valley. More details are available at:</p> -<p class="Pp">http://caia.swin.edu.au/urp/newtcp/</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">mod_cc</code> framework was written by - <span class="An">Lawrence Stewart</span> - <<a class="Mt" href="mailto:lstewart@FreeBSD.org">lstewart@FreeBSD.org</a>>, - <span class="An">James Healy</span> - <<a class="Mt" href="mailto:jimmy@deefa.com">jimmy@deefa.com</a>> and - <span class="An">David Hayes</span> - <<a class="Mt" href="mailto:david.hayes@ieee.org">david.hayes@ieee.org</a>>.</p> -<p class="Pp">This manual page was written by <span class="An">David - Hayes</span> - <<a class="Mt" href="mailto:david.hayes@ieee.org">david.hayes@ieee.org</a>> - and <span class="An">Lawrence Stewart</span> - <<a class="Mt" href="mailto:lstewart@FreeBSD.org">lstewart@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 13, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/module.9 3.html b/static/freebsd/man9/module.9 3.html deleted file mode 100644 index ad8230b9..00000000 --- a/static/freebsd/man9/module.9 3.html +++ /dev/null @@ -1,88 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">MODULE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">MODULE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">module</code> — <span class="Nd">structure - describing a kernel module</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Each module in the kernel is described by a - <var class="Vt">module_t</var> structure. The structure contains the name of - the device, a unique ID number, a pointer to an event handler function and - to an argument, which is given to the event handler, as well as some kernel - internal data. If the event handler function is - <code class="Dv">NULL</code>, the module will use a no-operation function - handler instead.</p> -<p class="Pp">The <a class="Xr">DECLARE_MODULE(9)</a> macro registers the module - with the system.</p> -<p class="Pp">When the module is loaded, the event handler function is called - with the <var class="Fa">what</var> argument set to - <code class="Dv">MOD_LOAD</code>.</p> -<p class="Pp">On unload it is first called with <var class="Fa">what</var> set - to <code class="Dv">MOD_QUIESCE</code>. If the unload was not forced, a - non-zero return will prevent the unload from happening.</p> -<p class="Pp">If the unload continues <var class="Fa">what</var> is set to - <code class="Dv">MOD_UNLOAD</code>. If the module returns non-zero to this, - the unload will not happen.</p> -<p class="Pp">The difference between <code class="Dv">MOD_QUIESCE</code> and - <code class="Dv">MOD_UNLOAD</code> is that the module should fail - <code class="Dv">MOD_QUIESCE</code> if it is currently in use, whereas - <code class="Dv">MOD_UNLOAD</code> should only fail if it is impossible to - unload the module, for instance because there are memory references to the - module which cannot be revoked.</p> -<p class="Pp">When the system is shutting down, <var class="Fa">what</var> - contains the value of <code class="Dv">MOD_SHUTDOWN</code>.</p> -<p class="Pp">The module should return <code class="Er">EOPNOTSUPP</code> for - unsupported and unrecognized values of <var class="Fa">what</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<div class="Bd Li"> -<pre>#include <sys/param.h> -#include <sys/kernel.h> -#include <sys/module.h> - -static int foo_handler(module_t mod, int /*modeventtype_t*/ what, - void *arg); - -static moduledata_t mod_data= { - "foo", - foo_handler, - NULL -}; - -MODULE_VERSION(foo, 1); -MODULE_DEPEND(foo, bar, 1, 3, 4); - -DECLARE_MODULE(foo, mod_data, SI_SUB_EXEC, SI_ORDER_ANY);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">DECLARE_MODULE(9)</a>, - <a class="Xr">DEV_MODULE(9)</a>, <a class="Xr">DRIVER_MODULE(9)</a>, - <a class="Xr">MODULE_DEPEND(9)</a>, <a class="Xr">MODULE_PNP_INFO(9)</a>, - <a class="Xr">MODULE_VERSION(9)</a>, <a class="Xr">SYSCALL_MODULE(9)</a></p> -<p class="Pp"><span class="Pa">/usr/share/examples/kld</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Alexander - Langer</span> - <<a class="Mt" href="mailto:alex@FreeBSD.org">alex@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 11, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/mtx_pool.9 3.html b/static/freebsd/man9/mtx_pool.9 3.html deleted file mode 100644 index 59b9f25f..00000000 --- a/static/freebsd/man9/mtx_pool.9 3.html +++ /dev/null @@ -1,162 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">MTX_POOL(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">MTX_POOL(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">mtx_pool</code>, - <code class="Nm">mtx_pool_alloc</code>, - <code class="Nm">mtx_pool_find</code>, - <code class="Nm">mtx_pool_lock</code>, - <code class="Nm">mtx_pool_lock_spin</code>, - <code class="Nm">mtx_pool_unlock</code>, - <code class="Nm">mtx_pool_unlock_spin</code>, - <code class="Nm">mtx_pool_create</code>, - <code class="Nm">mtx_pool_destroy</code> — <span class="Nd">mutex - pool routines</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/lock.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mutex.h</a>></code></p> -<p class="Pp"><var class="Ft">struct mtx *</var> - <br/> - <code class="Fn">mtx_pool_alloc</code>(<var class="Fa" style="white-space: nowrap;">struct - mtx_pool *pool</var>);</p> -<p class="Pp"><var class="Ft">struct mtx *</var> - <br/> - <code class="Fn">mtx_pool_find</code>(<var class="Fa" style="white-space: nowrap;">struct - mtx_pool *pool</var>, <var class="Fa" style="white-space: nowrap;">void - *ptr</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">mtx_pool_lock</code>(<var class="Fa" style="white-space: nowrap;">struct - mtx_pool *pool</var>, <var class="Fa" style="white-space: nowrap;">void - *ptr</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">mtx_pool_lock_spin</code>(<var class="Fa" style="white-space: nowrap;">struct - mtx_pool *pool</var>, <var class="Fa" style="white-space: nowrap;">void - *ptr</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">mtx_pool_unlock</code>(<var class="Fa" style="white-space: nowrap;">struct - mtx_pool *pool</var>, <var class="Fa" style="white-space: nowrap;">void - *ptr</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">mtx_pool_unlock_spin</code>(<var class="Fa" style="white-space: nowrap;">struct - mtx_pool *pool</var>, <var class="Fa" style="white-space: nowrap;">void - *ptr</var>);</p> -<p class="Pp"><var class="Ft">struct mtx_pool *</var> - <br/> - <code class="Fn">mtx_pool_create</code>(<var class="Fa" style="white-space: nowrap;">const - char *mtx_name</var>, <var class="Fa" style="white-space: nowrap;">int - pool_size</var>, <var class="Fa" style="white-space: nowrap;">int - opts</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">mtx_pool_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct - mtx_pool **poolp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Mutex pools are designed to be used as short term leaf mutexes; - i.e., the last mutex one might acquire before calling - <a class="Xr">mtx_sleep(9)</a>. They operate using a shared pool of mutexes. - A mutex may be chosen from the pool based on a supplied pointer, which may - or may not point to anything valid, or the caller may allocate an arbitrary - shared mutex from the pool and save the returned mutex pointer for later - use.</p> -<p class="Pp">The shared mutexes in the <var class="Va">mtxpool_sleep</var> - mutex pool, which is created by default, are standard, non-recursive, - blockable mutexes, and should only be used in appropriate situations. The - mutexes in the <var class="Va">mtxpool_lockbuilder</var> mutex pool are - similar, except that they are initialized with the MTX_NOWITNESS flag so - that they may be used to build higher-level locks. Other mutex pools may be - created that contain mutexes with different properties, such as spin - mutexes.</p> -<p class="Pp">The caller can lock and unlock mutexes returned by the pool - routines, but since the mutexes are shared, the caller should not attempt to - destroy them or modify their characteristics. While pool mutexes are - normally leaf mutexes (meaning that one cannot depend on any ordering - guarantees after obtaining one), one can still obtain other mutexes under - carefully controlled circumstances. Specifically, if one has a private mutex - (one that was allocated and initialized by the caller), one can obtain it - after obtaining a pool mutex if ordering issues are carefully accounted for. - In these cases the private mutex winds up being the true leaf mutex.</p> -<p class="Pp">Pool mutexes have the following advantages:</p> -<p class="Pp"></p> -<ol class="Bl-enum Bd-indent Bl-compact"> - <li>No structural overhead; i.e., they can be associated with a structure - without adding bloat to it.</li> - <li>Mutexes can be obtained for invalid pointers, which is useful when one - uses mutexes to interlock destructor operations.</li> - <li>No initialization or destruction overhead.</li> - <li>Can be used with <a class="Xr">mtx_sleep(9)</a>.</li> -</ol> -<p class="Pp">And the following disadvantages:</p> -<p class="Pp"></p> -<ol class="Bl-enum Bd-indent Bl-compact"> - <li>Should generally only be used as leaf mutexes.</li> - <li>Pool/pool dependency ordering cannot be guaranteed.</li> - <li>Possible L1 cache mastership contention between CPUs.</li> -</ol> -<p class="Pp" id="mtx_pool_alloc"><a class="permalink" href="#mtx_pool_alloc"><code class="Fn">mtx_pool_alloc</code></a>() - obtains a shared mutex from the specified pool. This routine uses a simple - rover to choose one of the shared mutexes managed by the - <code class="Nm">mtx_pool</code> subsystem.</p> -<p class="Pp" id="mtx_pool_find"><a class="permalink" href="#mtx_pool_find"><code class="Fn">mtx_pool_find</code></a>() - returns the shared mutex associated with the specified address. This routine - will create a hash out of the pointer passed into it and will choose a - shared mutex from the specified pool based on that hash. The pointer does - not need to point to anything real.</p> -<p class="Pp" id="mtx_pool_lock"><a class="permalink" href="#mtx_pool_lock"><code class="Fn">mtx_pool_lock</code></a>(), - <a class="permalink" href="#mtx_pool_lock_spin"><code class="Fn" id="mtx_pool_lock_spin">mtx_pool_lock_spin</code></a>(), - <a class="permalink" href="#mtx_pool_unlock"><code class="Fn" id="mtx_pool_unlock">mtx_pool_unlock</code></a>(), - and - <a class="permalink" href="#mtx_pool_unlock_spin"><code class="Fn" id="mtx_pool_unlock_spin">mtx_pool_unlock_spin</code></a>() - lock and unlock the shared mutex from the specified pool associated with the - specified address; they are a combination of - <code class="Fn">mtx_pool_find</code>() and <a class="Xr">mtx_lock(9)</a>, - <a class="Xr">mtx_lock_spin(9)</a>, <a class="Xr">mtx_unlock(9)</a>, and - <a class="Xr">mtx_unlock_spin(9)</a>, respectively. Since these routines - must first find the mutex to operate on, they are not as fast as directly - using the mutex pointer returned by a previous invocation of - <code class="Fn">mtx_pool_find</code>() or - <code class="Fn">mtx_pool_alloc</code>().</p> -<p class="Pp" id="mtx_pool_create"><a class="permalink" href="#mtx_pool_create"><code class="Fn">mtx_pool_create</code></a>() - allocates and initializes a new mutex pool of the specified size. The pool - size must be a power of two. The <var class="Fa">opts</var> argument is - passed to <a class="Xr">mtx_init(9)</a> to set the options for each mutex in - the pool.</p> -<p class="Pp" id="mtx_pool_destroy"><a class="permalink" href="#mtx_pool_destroy"><code class="Fn">mtx_pool_destroy</code></a>() - calls <a class="Xr">mtx_destroy(9)</a> on each mutex in the specified pool, - deallocates the memory associated with the pool, and assigns NULL to the - pool pointer.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">locking(9)</a>, <a class="Xr">mutex(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">These routines first appeared in <span class="Ux">FreeBSD - 5.0</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 6, 2010</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/mutex.9 4.html b/static/freebsd/man9/mutex.9 4.html deleted file mode 100644 index f676d026..00000000 --- a/static/freebsd/man9/mutex.9 4.html +++ /dev/null @@ -1,456 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">MUTEX(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">MUTEX(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">mutex</code>, <code class="Nm">mtx_init</code>, - <code class="Nm">mtx_destroy</code>, <code class="Nm">mtx_lock</code>, - <code class="Nm">mtx_lock_spin</code>, - <code class="Nm">mtx_lock_flags</code>, - <code class="Nm">mtx_lock_spin_flags</code>, - <code class="Nm">mtx_trylock</code>, - <code class="Nm">mtx_trylock_flags</code>, - <code class="Nm">mtx_trylock_spin</code>, - <code class="Nm">mtx_trylock_spin_flags</code>, - <code class="Nm">mtx_unlock</code>, <code class="Nm">mtx_unlock_spin</code>, - <code class="Nm">mtx_unlock_flags</code>, - <code class="Nm">mtx_unlock_spin_flags</code>, - <code class="Nm">mtx_sleep</code>, <code class="Nm">mtx_initialized</code>, - <code class="Nm">mtx_owned</code>, <code class="Nm">mtx_recursed</code>, - <code class="Nm">mtx_assert</code>, <code class="Nm">MTX_SYSINIT</code> - — <span class="Nd">kernel synchronization primitives</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/lock.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mutex.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">mtx_init</code>(<var class="Fa" style="white-space: nowrap;">struct - mtx *mutex</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">const char - *type</var>, <var class="Fa" style="white-space: nowrap;">int - opts</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">mtx_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct - mtx *mutex</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">mtx_lock</code>(<var class="Fa" style="white-space: nowrap;">struct - mtx *mutex</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">mtx_lock_spin</code>(<var class="Fa" style="white-space: nowrap;">struct - mtx *mutex</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">mtx_lock_flags</code>(<var class="Fa" style="white-space: nowrap;">struct - mtx *mutex</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">mtx_lock_spin_flags</code>(<var class="Fa" style="white-space: nowrap;">struct - mtx *mutex</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">mtx_trylock</code>(<var class="Fa" style="white-space: nowrap;">struct - mtx *mutex</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">mtx_trylock_flags</code>(<var class="Fa" style="white-space: nowrap;">struct - mtx *mutex</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">mtx_trylock_spin</code>(<var class="Fa" style="white-space: nowrap;">struct - mtx *mutex</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">mtx_trylock_spin_flags</code>(<var class="Fa" style="white-space: nowrap;">struct - mtx *mutex</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">mtx_unlock</code>(<var class="Fa" style="white-space: nowrap;">struct - mtx *mutex</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">mtx_unlock_spin</code>(<var class="Fa" style="white-space: nowrap;">struct - mtx *mutex</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">mtx_unlock_flags</code>(<var class="Fa" style="white-space: nowrap;">struct - mtx *mutex</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">mtx_unlock_spin_flags</code>(<var class="Fa" style="white-space: nowrap;">struct - mtx *mutex</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">mtx_sleep</code>(<var class="Fa" style="white-space: nowrap;">void - *chan</var>, <var class="Fa" style="white-space: nowrap;">struct mtx - *mtx</var>, <var class="Fa" style="white-space: nowrap;">int priority</var>, - <var class="Fa" style="white-space: nowrap;">const char *wmesg</var>, - <var class="Fa" style="white-space: nowrap;">int timo</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">mtx_initialized</code>(<var class="Fa" style="white-space: nowrap;">const - struct mtx *mutex</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">mtx_owned</code>(<var class="Fa" style="white-space: nowrap;">const - struct mtx *mutex</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">mtx_recursed</code>(<var class="Fa" style="white-space: nowrap;">const - struct mtx *mutex</var>);</p> -<p class="Pp"> - <br/> - <code class="Cd">options INVARIANTS</code> - <br/> - <code class="Cd">options INVARIANT_SUPPORT</code> - <br/> - <var class="Ft">void</var> - <br/> - <code class="Fn">mtx_assert</code>(<var class="Fa" style="white-space: nowrap;">const - struct mtx *mutex</var>, <var class="Fa" style="white-space: nowrap;">int - what</var>);</p> -<p class="Pp"><code class="In">#include - <<a class="In">sys/kernel.h</a>></code></p> -<p class="Pp"><code class="Fn">MTX_SYSINIT</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">struct mtx *mtx</var>, - <var class="Fa" style="white-space: nowrap;">const char *description</var>, - <var class="Fa" style="white-space: nowrap;">int opts</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Mutexes are the most basic and primary method of thread - synchronization. The major design considerations for mutexes are:</p> -<ol class="Bl-enum"> - <li>Acquiring and releasing uncontested mutexes should be as cheap as - possible.</li> - <li>They must have the information and storage space to support priority - propagation.</li> - <li>A thread must be able to recursively acquire a mutex, provided that the - mutex is initialized to support recursion.</li> -</ol> -<p class="Pp">There are currently two flavors of mutexes, those that context - switch when they block and those that do not.</p> -<p class="Pp">By default, <code class="Dv">MTX_DEF</code> mutexes will context - switch when they are already held. As an optimization, they may spin for - some amount of time before context switching. It is important to remember - that since a thread may be preempted at any time, the possible context - switch introduced by acquiring a mutex is guaranteed to not break anything - that is not already broken.</p> -<p class="Pp">Mutexes which do not context switch are - <code class="Dv">MTX_SPIN</code> mutexes. These should only be used to - protect data shared with primary interrupt code. This includes interrupt - filters and low level scheduling code. In all architectures both acquiring - and releasing of a uncontested spin mutex is more expensive than the same - operation on a non-spin mutex. In order to protect an interrupt service - routine from blocking against itself all interrupts are either blocked or - deferred on a processor while holding a spin lock. It is permissible to hold - multiple spin mutexes.</p> -<p class="Pp">Once a spin mutex has been acquired it is not permissible to - acquire a blocking mutex.</p> -<p class="Pp">The storage needed to implement a mutex is provided by a - <var class="Vt">struct mtx</var>. In general this should be treated as an - opaque object and referenced only with the mutex primitives.</p> -<p class="Pp" id="mtx_init">The - <a class="permalink" href="#mtx_init"><code class="Fn">mtx_init</code></a>() - function must be used to initialize a mutex before it can be passed to any - of the other mutex functions. The <var class="Fa">name</var> option is used - to identify the lock in debugging output etc. The <var class="Fa">type</var> - option is used by the witness code to classify a mutex when doing checks of - lock ordering. If <var class="Fa">type</var> is - <code class="Dv">NULL</code>, <var class="Fa">name</var> is used in its - place. The pointer passed in as <var class="Fa">name</var> and - <var class="Fa">type</var> is saved rather than the data it points to. The - data pointed to must remain stable until the mutex is destroyed. The - <var class="Fa">opts</var> argument is used to set the type of mutex. It may - contain either <code class="Dv">MTX_DEF</code> or - <code class="Dv">MTX_SPIN</code> but not both. If the kernel has been - compiled with <code class="Cd">option INVARIANTS</code>, - <code class="Fn">mtx_init</code>() will assert that the - <var class="Fa">mutex</var> has not been initialized multiple times without - intervening calls to <code class="Fn">mtx_destroy</code>() unless the - <code class="Dv">MTX_NEW</code> option is specified. See below for - additional initialization options.</p> -<p class="Pp" id="mtx_lock">The - <a class="permalink" href="#mtx_lock"><code class="Fn">mtx_lock</code></a>() - function acquires a <code class="Dv">MTX_DEF</code> mutual exclusion lock on - behalf of the currently running kernel thread. If another kernel thread is - holding the mutex, the caller will be disconnected from the CPU until the - mutex is available (i.e., it will block).</p> -<p class="Pp" id="mtx_lock_spin">The - <a class="permalink" href="#mtx_lock_spin"><code class="Fn">mtx_lock_spin</code></a>() - function acquires a <code class="Dv">MTX_SPIN</code> mutual exclusion lock - on behalf of the currently running kernel thread. If another kernel thread - is holding the mutex, the caller will spin until the mutex becomes - available. Interrupts are disabled during the spin and remain disabled - following the acquiring of the lock.</p> -<p class="Pp" id="mtx_init~2">It is possible for the same thread to recursively - acquire a mutex with no ill effects, provided that the - <code class="Dv">MTX_RECURSE</code> bit was passed to - <a class="permalink" href="#mtx_init~2"><code class="Fn">mtx_init</code></a>() - during the initialization of the mutex.</p> -<p class="Pp" id="mtx_lock_flags">The - <a class="permalink" href="#mtx_lock_flags"><code class="Fn">mtx_lock_flags</code></a>() - and - <a class="permalink" href="#mtx_lock_spin_flags"><code class="Fn" id="mtx_lock_spin_flags">mtx_lock_spin_flags</code></a>() - functions acquire a <code class="Dv">MTX_DEF</code> or - <code class="Dv">MTX_SPIN</code> lock, respectively, and also accept a - <var class="Fa">flags</var> argument. In both cases, the only flags - presently available for lock acquires are <code class="Dv">MTX_QUIET</code> - and <code class="Dv">MTX_RECURSE</code>. If the - <code class="Dv">MTX_QUIET</code> bit is turned on in the - <var class="Fa">flags</var> argument, then if - <code class="Dv">KTR_LOCK</code> tracing is being done, it will be silenced - during the lock acquire. If the <code class="Dv">MTX_RECURSE</code> bit is - turned on in the <var class="Fa">flags</var> argument, then the mutex can be - acquired recursively.</p> -<p class="Pp" id="mtx_trylock">The - <a class="permalink" href="#mtx_trylock"><code class="Fn">mtx_trylock</code></a>() - and - <a class="permalink" href="#mtx_trylock_spin"><code class="Fn" id="mtx_trylock_spin">mtx_trylock_spin</code></a>() - functions attempt to acquire a <code class="Dv">MTX_DEF</code> or - <code class="Dv">MTX_SPIN</code> mutex, respectively, pointed to by - <var class="Fa">mutex</var>. If the mutex cannot be immediately acquired, - the functions will return 0, otherwise the mutex will be acquired and a - non-zero value will be returned.</p> -<p class="Pp" id="mtx_trylock_flags">The - <a class="permalink" href="#mtx_trylock_flags"><code class="Fn">mtx_trylock_flags</code></a>() - and - <a class="permalink" href="#mtx_trylock_spin_flags"><code class="Fn" id="mtx_trylock_spin_flags">mtx_trylock_spin_flags</code></a>() - functions have the same behavior as <code class="Fn">mtx_trylock</code>() - and <code class="Fn">mtx_trylock_spin</code>() respectively, but should be - used when the caller desires to pass in a <var class="Fa">flags</var> value. - Presently, the only valid value in the <code class="Fn">mtx_trylock</code>() - and <code class="Fn">mtx_trylock_spin</code>() cases is - <code class="Dv">MTX_QUIET</code>, and its effects are identical to those - described for <code class="Fn">mtx_lock</code>() above.</p> -<p class="Pp" id="mtx_unlock">The - <a class="permalink" href="#mtx_unlock"><code class="Fn">mtx_unlock</code></a>() - function releases a <code class="Dv">MTX_DEF</code> mutual exclusion lock. - The current thread may be preempted if a higher priority thread is waiting - for the mutex.</p> -<p class="Pp" id="mtx_unlock_spin">The - <a class="permalink" href="#mtx_unlock_spin"><code class="Fn">mtx_unlock_spin</code></a>() - function releases a <code class="Dv">MTX_SPIN</code> mutual exclusion - lock.</p> -<p class="Pp" id="mtx_unlock_flags">The - <a class="permalink" href="#mtx_unlock_flags"><code class="Fn">mtx_unlock_flags</code></a>() - and - <a class="permalink" href="#mtx_unlock_spin_flags"><code class="Fn" id="mtx_unlock_spin_flags">mtx_unlock_spin_flags</code></a>() - functions behave in exactly the same way as do the standard mutex unlock - routines above, while also allowing a <var class="Fa">flags</var> argument - which may specify <code class="Dv">MTX_QUIET</code>. The behavior of - <code class="Dv">MTX_QUIET</code> is identical to its behavior in the mutex - lock routines.</p> -<p class="Pp" id="mtx_destroy">The - <a class="permalink" href="#mtx_destroy"><code class="Fn">mtx_destroy</code></a>() - function is used to destroy <var class="Fa">mutex</var> so the data - associated with it may be freed or otherwise overwritten. Any mutex which is - destroyed must previously have been initialized with - <code class="Fn">mtx_init</code>(). It is permissible to have a single hold - count on a mutex when it is destroyed. It is not permissible to hold the - mutex recursively, or have another thread blocked on the mutex when it is - destroyed.</p> -<p class="Pp" id="mtx_sleep">The - <a class="permalink" href="#mtx_sleep"><code class="Fn">mtx_sleep</code></a>() - function is used to atomically release <var class="Fa">mtx</var> while - waiting for an event. For more details on the parameters to this function, - see <a class="Xr">sleep(9)</a>.</p> -<p class="Pp" id="mtx_initialized">The - <a class="permalink" href="#mtx_initialized"><code class="Fn">mtx_initialized</code></a>() - function returns non-zero if <var class="Fa">mutex</var> has been - initialized and zero otherwise.</p> -<p class="Pp" id="mtx_owned">The - <a class="permalink" href="#mtx_owned"><code class="Fn">mtx_owned</code></a>() - function returns non-zero if the current thread holds - <var class="Fa">mutex</var>. If the current thread does not hold - <var class="Fa">mutex</var> zero is returned.</p> -<p class="Pp" id="mtx_recursed">The - <a class="permalink" href="#mtx_recursed"><code class="Fn">mtx_recursed</code></a>() - function returns non-zero if the <var class="Fa">mutex</var> is recursed. - This check should only be made if the running thread already owns - <var class="Fa">mutex</var>.</p> -<p class="Pp" id="mtx_assert">The - <a class="permalink" href="#mtx_assert"><code class="Fn">mtx_assert</code></a>() - function allows assertions specified in <var class="Fa">what</var> to be - made about <var class="Fa">mutex</var>. If the assertions are not true and - the kernel is compiled with <code class="Cd">options INVARIANTS</code> and - <code class="Cd">options INVARIANT_SUPPORT</code>, the kernel will panic. - Currently the following assertions are supported:</p> -<dl class="Bl-tag"> - <dt id="MA_OWNED"><a class="permalink" href="#MA_OWNED"><code class="Dv">MA_OWNED</code></a></dt> - <dd>Assert that the current thread holds the mutex pointed to by the first - argument.</dd> - <dt id="MA_NOTOWNED"><a class="permalink" href="#MA_NOTOWNED"><code class="Dv">MA_NOTOWNED</code></a></dt> - <dd>Assert that the current thread does not hold the mutex pointed to by the - first argument.</dd> - <dt id="MA_RECURSED"><a class="permalink" href="#MA_RECURSED"><code class="Dv">MA_RECURSED</code></a></dt> - <dd>Assert that the current thread has recursed on the mutex pointed to by the - first argument. This assertion is only valid in conjunction with - <code class="Dv">MA_OWNED</code>.</dd> - <dt id="MA_NOTRECURSED"><a class="permalink" href="#MA_NOTRECURSED"><code class="Dv">MA_NOTRECURSED</code></a></dt> - <dd>Assert that the current thread has not recursed on the mutex pointed to by - the first argument. This assertion is only valid in conjunction with - <code class="Dv">MA_OWNED</code>.</dd> -</dl> -<p class="Pp" id="MTX_SYSINIT">The - <a class="permalink" href="#MTX_SYSINIT"><code class="Fn">MTX_SYSINIT</code></a>() - macro is used to generate a call to the - <a class="permalink" href="#mtx_sysinit"><code class="Fn" id="mtx_sysinit">mtx_sysinit</code></a>() - routine at system startup in order to initialize a given mutex lock. The - parameters are the same as <code class="Fn">mtx_init</code>() but with an - additional argument, <var class="Fa">name</var>, that is used in generating - unique variable names for the related structures associated with the lock - and the sysinit routine.</p> -<section class="Ss"> -<h2 class="Ss" id="The_Default_Mutex_Type"><a class="permalink" href="#The_Default_Mutex_Type">The - Default Mutex Type</a></h2> -<p class="Pp">Most kernel code should use the default lock type, - <code class="Dv">MTX_DEF</code>. The default lock type will allow the thread - to be disconnected from the CPU if the lock is already held by another - thread. The implementation may treat the lock as a short term spin lock - under some circumstances. However, it is always safe to use these forms of - locks in an interrupt thread without fear of deadlock against an interrupted - thread on the same CPU.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="The_Spin_Mutex_Type"><a class="permalink" href="#The_Spin_Mutex_Type">The - Spin Mutex Type</a></h2> -<p class="Pp">A <code class="Dv">MTX_SPIN</code> mutex will not relinquish the - CPU when it cannot immediately get the requested lock, but will loop, - waiting for the mutex to be released by another CPU. This could result in - deadlock if another thread interrupted the thread which held a mutex and - then tried to acquire the mutex. For this reason spin locks disable all - interrupts on the local CPU.</p> -<p class="Pp">Spin locks are fairly specialized locks that are intended to be - held for very short periods of time. Their primary purpose is to protect - portions of the code that implement other synchronization primitives such as - default mutexes, thread scheduling, and interrupt threads.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Initialization_Options"><a class="permalink" href="#Initialization_Options">Initialization - Options</a></h2> -<p class="Pp">The options passed in the <var class="Fa">opts</var> argument of - <a class="permalink" href="#mtx_init~3"><code class="Fn" id="mtx_init~3">mtx_init</code></a>() - specify the mutex type. One of the <code class="Dv">MTX_DEF</code> or - <code class="Dv">MTX_SPIN</code> options is required and only one of those - two options may be specified. The possibilities are:</p> -<dl class="Bl-tag"> - <dt id="MTX_DEF"><a class="permalink" href="#MTX_DEF"><code class="Dv">MTX_DEF</code></a></dt> - <dd>Default mutexes will always allow the current thread to be suspended to - avoid deadlock conditions against interrupt threads. The implementation of - this lock type may spin for a while before suspending the current - thread.</dd> - <dt id="MTX_SPIN"><a class="permalink" href="#MTX_SPIN"><code class="Dv">MTX_SPIN</code></a></dt> - <dd>Spin mutexes will never relinquish the CPU. All interrupts are disabled on - the local CPU while any spin lock is held.</dd> - <dt id="MTX_RECURSE"><a class="permalink" href="#MTX_RECURSE"><code class="Dv">MTX_RECURSE</code></a></dt> - <dd>Specifies that the initialized mutex is allowed to recurse. This bit must - be present if the mutex is permitted to recurse. - <p class="Pp" id="mtx_trylock~2">Note that neither - <a class="permalink" href="#mtx_trylock~2"><code class="Fn">mtx_trylock</code></a>() - nor - <a class="permalink" href="#mtx_trylock_spin~2"><code class="Fn" id="mtx_trylock_spin~2">mtx_trylock_spin</code></a>() - support recursion; that is, attempting to acquire an already-owned mutex - fails.</p> - </dd> - <dt id="MTX_QUIET"><a class="permalink" href="#MTX_QUIET"><code class="Dv">MTX_QUIET</code></a></dt> - <dd>Do not log any mutex operations for this lock.</dd> - <dt id="MTX_NOWITNESS"><a class="permalink" href="#MTX_NOWITNESS"><code class="Dv">MTX_NOWITNESS</code></a></dt> - <dd>Instruct <a class="Xr">witness(4)</a> to ignore this lock.</dd> - <dt id="MTX_DUPOK"><a class="permalink" href="#MTX_DUPOK"><code class="Dv">MTX_DUPOK</code></a></dt> - <dd>Witness should not log messages about duplicate locks being acquired.</dd> - <dt id="MTX_NOPROFILE"><a class="permalink" href="#MTX_NOPROFILE"><code class="Dv">MTX_NOPROFILE</code></a></dt> - <dd>Do not profile this lock.</dd> - <dt id="MTX_NEW"><a class="permalink" href="#MTX_NEW"><code class="Dv">MTX_NEW</code></a></dt> - <dd>Do not check for double-init.</dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss" id="Lock_and_Unlock_Flags"><a class="permalink" href="#Lock_and_Unlock_Flags">Lock - and Unlock Flags</a></h2> -<p class="Pp">The flags passed to the <code class="Fn">mtx_lock_flags</code>(), - <code class="Fn">mtx_lock_spin_flags</code>(), - <code class="Fn">mtx_unlock_flags</code>(), and - <code class="Fn">mtx_unlock_spin_flags</code>() functions provide some basic - options to the caller, and are often used only under special circumstances - to modify lock or unlock behavior. Standard locking and unlocking should be - performed with the <code class="Fn">mtx_lock</code>(), - <code class="Fn">mtx_lock_spin</code>(), - <code class="Fn">mtx_unlock</code>(), and - <code class="Fn">mtx_unlock_spin</code>() functions. Only if a flag is - required should the corresponding flags-accepting routines be used.</p> -<p class="Pp">Options that modify mutex behavior:</p> -<dl class="Bl-tag"> - <dt id="MTX_QUIET~2"><a class="permalink" href="#MTX_QUIET~2"><code class="Dv">MTX_QUIET</code></a></dt> - <dd>This option is used to quiet logging messages during individual mutex - operations. This can be used to trim superfluous logging messages for - debugging purposes.</dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss" id="Giant"><a class="permalink" href="#Giant">Giant</a></h2> -<p class="Pp">If <var class="Va">Giant</var> must be acquired, it must be - acquired prior to acquiring other mutexes. Put another way: it is impossible - to acquire <var class="Va">Giant</var> non-recursively while holding another - mutex. It is possible to acquire other mutexes while holding - <var class="Va">Giant</var>, and it is possible to acquire - <var class="Va">Giant</var> recursively while holding other mutexes.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Sleeping"><a class="permalink" href="#Sleeping">Sleeping</a></h2> -<p class="Pp">Sleeping while holding a mutex (except for - <var class="Va">Giant</var>) is never safe and should be avoided. There are - numerous assertions which will fail if this is attempted.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Functions_Which_Access_Memory_in_Userspace"><a class="permalink" href="#Functions_Which_Access_Memory_in_Userspace">Functions - Which Access Memory in Userspace</a></h2> -<p class="Pp">No mutexes should be held (except for <var class="Va">Giant</var>) - across functions which access memory in userspace, such as - <a class="Xr">copyin(9)</a>, <a class="Xr">copyout(9)</a>, - <a class="Xr">uiomove(9)</a>, <a class="Xr">fuword(9)</a>, etc. No locks are - needed when calling these functions.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">condvar(9)</a>, <a class="Xr">LOCK_PROFILING(9)</a>, - <a class="Xr">locking(9)</a>, <a class="Xr">mtx_pool(9)</a>, - <a class="Xr">panic(9)</a>, <a class="Xr">rwlock(9)</a>, - <a class="Xr">sema(9)</a>, <a class="Xr">sleep(9)</a>, - <a class="Xr">sx(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">These functions appeared in <span class="Ux">BSD/OS 4.1</span> and - <span class="Ux">FreeBSD 5.0</span>. The - <code class="Fn">mtx_trylock_spin</code>() function was added in - <span class="Ux">FreeBSD 11.1</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 17, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/namei.9 3.html b/static/freebsd/man9/namei.9 3.html deleted file mode 100644 index 634973b7..00000000 --- a/static/freebsd/man9/namei.9 3.html +++ /dev/null @@ -1,423 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">NAMEI(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">NAMEI(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">namei</code>, <code class="Nm">NDINIT</code>, - <code class="Nm">NDINIT_AT</code>, <code class="Nm">NDFREE_PNBUF</code> - — <span class="Nd">pathname translation and lookup - operations</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/fcntl.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/namei.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">namei</code>(<var class="Fa" style="white-space: nowrap;">struct - nameidata *ndp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">NDINIT</code>(<var class="Fa">struct nameidata *ndp</var>, - <var class="Fa">enum nameiop op</var>, <var class="Fa">u_int64_t - flags</var>, <var class="Fa">enum uio_seg segflg</var>, - <var class="Fa">const char *namep</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">NDINIT_AT</code>(<var class="Fa">struct nameidata *ndp</var>, - <var class="Fa">enum nameiop op</var>, <var class="Fa">u_int64_t - flags</var>, <var class="Fa">enum uio_seg segflg</var>, - <var class="Fa">const char *namep</var>, <var class="Fa">int - dirfd</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">NDFREE_PNBUF</code>(<var class="Fa" style="white-space: nowrap;">struct - nameidata *ndp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">namei</code> facility allows the client to - perform pathname translation and lookup operations. The - <code class="Nm">namei</code> functions will increment the reference count - for the vnode in question. The reference count has to be decremented after - use of the vnode, by using either <a class="Xr">vrele(9)</a> or - <a class="Xr">vput(9)</a>, depending on whether the - <code class="Dv">LOCKLEAF</code> flag was specified or not.</p> -<p class="Pp" id="NDINIT">The - <a class="permalink" href="#NDINIT"><code class="Fn">NDINIT</code></a>() - macro is used to initialize <code class="Nm">namei</code> components. It - takes the following arguments:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">ndp</var></dt> - <dd>A pointer to the <var class="Vt">struct nameidata</var> to - initialize.</dd> - <dt id="namei"><var class="Fa">op</var></dt> - <dd>The operation which - <a class="permalink" href="#namei"><code class="Fn">namei</code></a>() - will perform. The following operations are valid: - <code class="Dv">LOOKUP</code>, <code class="Dv">CREATE</code>, - <code class="Dv">DELETE</code>, and <code class="Dv">RENAME</code>. The - latter three are just setup for those effects; just calling - <code class="Fn">namei</code>() will not result in - <a class="permalink" href="#VOP_RENAME"><code class="Fn" id="VOP_RENAME">VOP_RENAME</code></a>() - being called.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>Operation flags, described in the next section. Several of these can be - effective at the same time.</dd> - <dt><var class="Fa">segflg</var></dt> - <dd>UIO segment indicator. This indicates if the name of the object is in - userspace (<code class="Dv">UIO_USERSPACE</code>) or in the kernel address - space (<code class="Dv">UIO_SYSSPACE</code>).</dd> - <dt><var class="Fa">namep</var></dt> - <dd>Pointer to the component's pathname buffer (the file or directory name - that will be looked up).</dd> -</dl> -<p class="Pp" id="NDINIT_AT">The - <a class="permalink" href="#NDINIT_AT"><code class="Fn">NDINIT_AT</code></a>() - macro is similar to <code class="Fn">NDINIT</code>(), but takes one extra - argument:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">dirfd</var></dt> - <dd>File descriptor referencing a directory, or the special value - <code class="Dv">AT_FDCWD</code> meaning the calling thread's current - working directory. Lookups will be performed relative to this - directory.</dd> -</dl> -<p class="Pp" id="NDFREE_PNBUF">The - <a class="permalink" href="#NDFREE_PNBUF"><code class="Fn">NDFREE_PNBUF</code></a>() - macro is used to free the pathname buffer. It must be called exactly once - for each successful - <a class="permalink" href="#namei~2"><code class="Fn" id="namei~2">namei</code></a>() - call. It takes the following argument:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">ndp</var></dt> - <dd>A pointer to a <var class="Vt">struct nameidata</var> that was used in a - successful <code class="Fn">namei</code>() call.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="NAMEI_OPERATION_FLAGS"><a class="permalink" href="#NAMEI_OPERATION_FLAGS">NAMEI - OPERATION FLAGS</a></h1> -<p class="Pp">The <code class="Fn">namei</code>() function takes the following - set of “operation flags” that influence its operation:</p> -<dl class="Bl-tag"> - <dt id="NC_NOMAKEENTRY"><a class="permalink" href="#NC_NOMAKEENTRY"><code class="Dv">NC_NOMAKEENTRY</code></a></dt> - <dd>An alias for <code class="Dv">NOCACHE</code>.</dd> - <dt id="NC_KEEPPOSENTRY"><a class="permalink" href="#NC_KEEPPOSENTRY"><code class="Dv">NC_KEEPPOSENTRY</code></a></dt> - <dd>Keep the positive-caching entry in cache. This flag is typically combined - with <code class="Dv">NOCACHE</code> to not cache a new entry, but keep - existing one, or with <code class="Dv">MAKEENTRY</code>.</dd> - <dt id="NOCACHE"><a class="permalink" href="#NOCACHE"><code class="Dv">NOCACHE</code></a></dt> - <dd>Avoid <code class="Fn">namei</code>() creating this entry in the namecache - if it is not already present. Normally, <code class="Fn">namei</code>() - will add entries to the name cache if they are not already there.</dd> - <dt id="LOCKLEAF"><a class="permalink" href="#LOCKLEAF"><code class="Dv">LOCKLEAF</code></a></dt> - <dd>Lock vnode on return with <code class="Dv">LK_EXCLUSIVE</code> unless - <code class="Dv">LOCKSHARED</code> is also set. - <a class="Xr">VOP_UNLOCK(9)</a> should be used to release the lock (or - <a class="Xr">vput(9)</a> which is equivalent to calling - <a class="Xr">VOP_UNLOCK(9)</a> followed by <a class="Xr">vrele(9)</a>, - all in one).</dd> - <dt id="LOCKPARENT"><a class="permalink" href="#LOCKPARENT"><code class="Dv">LOCKPARENT</code></a></dt> - <dd>This flag lets the <code class="Fn">namei</code>() function return the - parent (directory) vnode, <var class="Va">ni_dvp</var> in locked state, - unless it is identical to <var class="Va">ni_vp</var>, in which case - <var class="Va">ni_dvp</var> is not locked per se (but may be locked due - to <code class="Dv">LOCKLEAF</code>). If a lock is enforced, it should be - released using <a class="Xr">vput(9)</a> or - <a class="Xr">VOP_UNLOCK(9)</a> and <a class="Xr">vrele(9)</a>.</dd> - <dt id="WANTPARENT"><a class="permalink" href="#WANTPARENT"><code class="Dv">WANTPARENT</code></a></dt> - <dd>This flag allows the <code class="Fn">namei</code>() function to return - the parent (directory) vnode in an unlocked state. The parent vnode must - be released separately by using <a class="Xr">vrele(9)</a>.</dd> - <dt id="FAILIFEXISTS"><a class="permalink" href="#FAILIFEXISTS"><code class="Dv">FAILIFEXISTS</code></a></dt> - <dd>Makes the <code class="Nm">namei</code> operation fail if the target - exists. It requires that the <code class="Dv">LOCKPARENT</code> flag is - set and <code class="Dv">LOCKLEAF</code> is not.</dd> - <dt id="FOLLOW"><a class="permalink" href="#FOLLOW"><code class="Dv">FOLLOW</code></a></dt> - <dd>With this flag, <code class="Fn">namei</code>() will follow the symbolic - link if the last part of the path supplied is a symbolic link (i.e., it - will return a vnode for whatever the link points at, instead for the link - itself).</dd> - <dt id="EMPTYPATH"><a class="permalink" href="#EMPTYPATH"><code class="Dv">EMPTYPATH</code></a></dt> - <dd>For <code class="Nm">namei</code> call initialized with - <code class="Fn">NDINIT_AT</code>(), allow the <var class="Fa">namep</var> - path to be empty. In this case, the <var class="Fa">dirfd</var> file - descriptor may reference a file of arbitrary type, not necessary a - directory, and lookup returns the vnode for this file.</dd> - <dt id="LOCKSHARED"><a class="permalink" href="#LOCKSHARED"><code class="Dv">LOCKSHARED</code></a></dt> - <dd>Lock vnode on return with <code class="Dv">LK_SHARED</code>, if permitted - by the file system that owns the vnode. The file system must explicitly - permit this by setting <code class="Dv">MNTK_LOOKUP_SHARED</code> in - <code class="Dv">mp->mnt_kern_flag</code> during mount and by calling - <a class="permalink" href="#VN_LOCK_ASHARE"><code class="Fn" id="VN_LOCK_ASHARE">VN_LOCK_ASHARE</code></a>() - when allocating the vnode. If <code class="Dv">LOCKLEAF</code> is - specified but shared locking is not permitted, then the vnode will be - returned with <code class="Dv">LK_EXCLUSIVE</code>. - <a class="Xr">VOP_UNLOCK(9)</a> should be used to release the lock (or - <a class="Xr">vput(9)</a> which is equivalent to calling - <a class="Xr">VOP_UNLOCK(9)</a> followed by <a class="Xr">vrele(9)</a>, - all in one).</dd> - <dt id="NOFOLLOW"><a class="permalink" href="#NOFOLLOW"><code class="Dv">NOFOLLOW</code></a></dt> - <dd>Do not follow symbolic links (pseudo). This flag is not looked for by the - actual code, which looks for <code class="Dv">FOLLOW</code>. - <code class="Dv">NOFOLLOW</code> is used to indicate to the source code - reader that symlinks are intentionally not followed.</dd> - <dt id="RBENEATH"><a class="permalink" href="#RBENEATH"><code class="Dv">RBENEATH</code></a></dt> - <dd>Requires that <code class="Nm">namei</code> did not cross the - <var class="Fa">dirfd</var> directory. The flag is used to implement - <code class="Dv">O_RESOLVE_BENEATH</code> flag for - <a class="Xr">openat(2)</a>.</dd> - <dt id="NAMEILOOKUP"><a class="permalink" href="#NAMEILOOKUP"><code class="Dv">NAMEILOOKUP</code></a></dt> - <dd>The component is embedded in a <code class="Nm">namei</code> lookup - structure, and the - <a class="permalink" href="#vfs_lookup_nameidata"><code class="Fn" id="vfs_lookup_nameidata">vfs_lookup_nameidata</code></a>() - function can be used to obtain that structure. This can be useful in - <a class="Xr">VOP_LOOKUP(9)</a> implementations which need to obtain extra - lookup metadata.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="PARAMETERS_DESCRIPTORS_FLAGS"><a class="permalink" href="#PARAMETERS_DESCRIPTORS_FLAGS">PARAMETERS - DESCRIPTORS FLAGS</a></h1> -<p class="Pp">These flags are used for several purposes. Some of them affects - the global <code class="Nm">namei</code> operation, some provide information - for processing of the specific path element, for instance, by the - <code class="Dv">VOP_LOOKUP</code> implementation of the involved - filesystem.</p> -<dl class="Bl-tag"> - <dt id="RDONLY"><a class="permalink" href="#RDONLY"><code class="Dv">RDONLY</code></a></dt> - <dd>Specifies that the lookup should act as if the final node is located on - read-only mount. The flag is typically used by file servers, e.g. NFS, to - handle read-only exports.</dd> - <dt id="ISRESTARTED"><a class="permalink" href="#ISRESTARTED"><code class="Dv">ISRESTARTED</code></a></dt> - <dd>The <code class="Nm">namei</code> was restarted with - <a class="permalink" href="#NDRESTART"><code class="Fn" id="NDRESTART">NDRESTART</code></a>(). - This is used internally for double-root lookups used by ABI subsystems, - after the lookup with native root failed. The components are reset to the - original values, and lookup is repeated with different root, once.</dd> - <dt id="IGNOREWHITEOUT"><a class="permalink" href="#IGNOREWHITEOUT"><code class="Dv">IGNOREWHITEOUT</code></a></dt> - <dd>Ignore whiteouts, e.g. when checking if a directory is empty.</dd> - <dt id="ISWHITEOUT"><a class="permalink" href="#ISWHITEOUT"><code class="Dv">ISWHITEOUT</code></a></dt> - <dd>The result of lookup is whiteout.</dd> - <dt id="DOWHITEOUT"><a class="permalink" href="#DOWHITEOUT"><code class="Dv">DOWHITEOUT</code></a></dt> - <dd>Handle whiteouts, the instruction for the - <a class="permalink" href="#VOP_LOOKUP"><code class="Fn" id="VOP_LOOKUP">VOP_LOOKUP</code></a>() - filesystem methods.</dd> - <dt id="WILLBEDIR"><a class="permalink" href="#WILLBEDIR"><code class="Dv">WILLBEDIR</code></a></dt> - <dd>The lookup is done for creating a new entry that will be directory. It - allows the trailing slash in the path string.</dd> - <dt id="ISOPEN"><a class="permalink" href="#ISOPEN"><code class="Dv">ISOPEN</code></a></dt> - <dd>The caller is the code that opens a file. This allows to weaken the lock - mode of the return vnode, if the mount point indicates extended shared - lock support.</dd> - <dt id="NOCROSSMOUNT"><a class="permalink" href="#NOCROSSMOUNT"><code class="Dv">NOCROSSMOUNT</code></a></dt> - <dd>Do not cross mount points during lookup. - <p class="Pp">For “..” lookup leading to mount root, returns - the root vnode of the mount instead of the covered vnode of the - filesystem where the mount was placed.</p> - <p class="Pp">For other lookups passing over mount, do not jump into the - mounted filesystem. This allows to descend into the file hierarchy - otherwise shadowed by the mount point.</p> - </dd> - <dt id="NOMACCHECK"><a class="permalink" href="#NOMACCHECK"><code class="Dv">NOMACCHECK</code></a></dt> - <dd>Do not perform MAC checks during lookup.</dd> - <dt id="AUDITVNODE1"><a class="permalink" href="#AUDITVNODE1"><code class="Dv">AUDITVNODE1</code></a></dt> - <dd>Audit the looked up vnode information, use the first slot for audit - information.</dd> - <dt id="AUDITVNODE2"><a class="permalink" href="#AUDITVNODE2"><code class="Dv">AUDITVNODE2</code></a></dt> - <dd>Same as <code class="Dv">AUDITVNODE1</code> but use the second slot.</dd> - <dt id="NOCAPCHECK"><a class="permalink" href="#NOCAPCHECK"><code class="Dv">NOCAPCHECK</code></a></dt> - <dd>Do not perform capability checks. If the calling process is in capability - mode, lookup is denied outright.</dd> - <dt id="OPENREAD"><a class="permalink" href="#OPENREAD"><code class="Dv">OPENREAD</code></a></dt> - <dd>The lookup was for open and file will be opened for read.</dd> - <dt id="OPENWRITE"><a class="permalink" href="#OPENWRITE"><code class="Dv">OPENWRITE</code></a></dt> - <dd>The lookup was for open and file will be opened for write.</dd> - <dt id="WANTIOCTLCAPS"><a class="permalink" href="#WANTIOCTLCAPS"><code class="Dv">WANTIOCTLCAPS</code></a></dt> - <dd>Leave ioctl caps for the caller. See the description of - <code class="Nm">namei</code> results.</dd> - <dt id="OPENNAMED"><a class="permalink" href="#OPENNAMED"><code class="Dv">OPENNAMED</code></a></dt> - <dd>Opening a named attribute (directory).</dd> - <dt id="NOEXECCHECK"><a class="permalink" href="#NOEXECCHECK"><code class="Dv">NOEXECCHECK</code></a></dt> - <dd>Do not perform check for allowed execution on the starting directory. It - is used to implement the POSIX-required semantic for - <a class="Xr">openat(2)</a> lookups that must use the permissions from - time the directory was opened, and not when used for lookup.</dd> - <dt id="MAKEENTRY"><a class="permalink" href="#MAKEENTRY"><code class="Dv">MAKEENTRY</code></a></dt> - <dd>Looked-up entry is to be added to name cache.</dd> - <dt id="ISSYMLINK"><a class="permalink" href="#ISSYMLINK"><code class="Dv">ISSYMLINK</code></a></dt> - <dd>Current component is symlink, and it needs the interpretation according to - the <code class="Dv">FOLLOW</code> or <code class="Dv">NOFOLLOW</code> - flags.</dd> - <dt id="ISLASTCN"><a class="permalink" href="#ISLASTCN"><code class="Dv">ISLASTCN</code></a></dt> - <dd>This is last component of pathname. It is handled specially, many flags - augment its processing.</dd> - <dt id="ISDOTDOT"><a class="permalink" href="#ISDOTDOT"><code class="Dv">ISDOTDOT</code></a></dt> - <dd>Current component name is “..”. Usually implies a need to - specially handle the vnode locking for instantiation of the target vnode. - The generic - <a class="permalink" href="#vn_vget_ino_gen"><code class="Fn" id="vn_vget_ino_gen">vn_vget_ino_gen</code></a>() - function and its more specialized variant - <a class="permalink" href="#vn_vget_ino"><code class="Fn" id="vn_vget_ino">vn_vget_ino</code></a>() - might be useful.</dd> - <dt id="TRAILINGSLASH"><a class="permalink" href="#TRAILINGSLASH"><code class="Dv">TRAILINGSLASH</code></a></dt> - <dd>Path ended in a slash.</dd> - <dt id="CREATENAMED"><a class="permalink" href="#CREATENAMED"><code class="Dv">CREATENAMED</code></a></dt> - <dd>Create a named attribute dir.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="ALLOCATED_ELEMENTS"><a class="permalink" href="#ALLOCATED_ELEMENTS">ALLOCATED - ELEMENTS</a></h1> -<p class="Pp">The <var class="Vt">nameidata</var> structure is composed of the - following fields:</p> -<dl class="Bl-tag"> - <dt id="ni_startdir"><var class="Va">ni_startdir</var></dt> - <dd>In the normal case, this is either the current directory or the root. It - is the current directory if the name passed in does not start with - ‘<code class="Li">/</code>’ and we have not gone through any - symlinks with an absolute path, and the root otherwise. - <p class="Pp" id="vfs_lookup">In this case, it is only used by - <a class="permalink" href="#vfs_lookup"><code class="Fn">vfs_lookup</code></a>(), - and should not be considered valid after a call to - <a class="permalink" href="#namei~3"><code class="Fn" id="namei~3">namei</code></a>().</p> - </dd> - <dt id="ni_dvp"><var class="Va">ni_dvp</var></dt> - <dd>Vnode pointer to directory of the object on which lookup is performed. - This is available on successful return if - <code class="Dv">LOCKPARENT</code> or <code class="Dv">WANTPARENT</code> - is set. It is locked if <code class="Dv">LOCKPARENT</code> is set.</dd> - <dt id="ni_vp"><var class="Va">ni_vp</var></dt> - <dd>Vnode pointer to the resulting object, <code class="Dv">NULL</code> - otherwise. The <var class="Va">v_usecount</var> field of this vnode is - incremented. If <code class="Dv">LOCKLEAF</code> is set, it is also - locked.</dd> - <dt id="ni_cnd.cn_pnbuf"><var class="Va">ni_cnd.cn_pnbuf</var></dt> - <dd>The pathname buffer contains the location of the file or directory that - will be used by the <code class="Nm">namei</code> operations. It is - managed by the <a class="Xr">uma(9)</a> zone allocation interface.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RESULTS"><a class="permalink" href="#RESULTS">RESULTS</a></h1> -<p class="Pp">The <var class="Vt">struct namei</var> member - <code class="Dv">ni_resflags</code> returns the following flags giving some - details of the successful operation:</p> -<dl class="Bl-tag"> - <dt id="NIRES_ABS"><a class="permalink" href="#NIRES_ABS"><code class="Dv">NIRES_ABS</code></a></dt> - <dd>The path passed was absolute.</dd> - <dt id="NIRES_STRICTREL"><a class="permalink" href="#NIRES_STRICTREL"><code class="Dv">NIRES_STRICTREL</code></a></dt> - <dd>Restricted lookup result. Only relative lookups were done to resolve the - path to vnode.</dd> - <dt id="NIRES_EMPTYPATH"><a class="permalink" href="#NIRES_EMPTYPATH"><code class="Dv">NIRES_EMPTYPATH</code></a></dt> - <dd>The <code class="Dv">EMPTYPATH</code> flag was provided and used. In - particular, the passed path was empty.</dd> -</dl> -<p class="Pp">If the <code class="Dv">WANTIOCTLCAPS</code> flag was specified, - on return the <var class="Va">ni_filecaps</var> member of the - <var class="Vt">struct namei</var> contains the capabilities of the file - descriptor used as the lookup starting point - (<var class="Va">dirfd</var>).</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If successful, <code class="Fn">namei</code>() will return 0, - otherwise it will return an error.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="FILES"><a class="permalink" href="#FILES">FILES</a></h1> -<dl class="Bl-tag"> - <dt><span class="Pa">src/sys/kern/vfs_lookup.c</span></dt> - <dd style="width: auto;"> </dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">Assuming the <code class="Dv">path</code> variable contains a - pointer to userspace path string, the following example looks up the file - named by it, and performs required error and resource handling:</p> -<div class="Bd Pp Li"> -<pre> char *path; - struct nameidata nd; - int error; - - NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | AUDITVNODE1, UIO_USERSPACE, - path); - if ((error = namei(&nd)) != 0) - return (error); - NDFREE_PNBUF(&nd); - ... use nd.ni_vp vnode</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp">Errors which <code class="Fn">namei</code>() may return:</p> -<dl class="Bl-tag"> - <dt id="ENOTDIR">[<a class="permalink" href="#ENOTDIR"><code class="Er">ENOTDIR</code></a>]</dt> - <dd>A component of the specified pathname is not a directory when a directory - is expected.</dd> - <dt id="ENAMETOOLONG">[<a class="permalink" href="#ENAMETOOLONG"><code class="Er">ENAMETOOLONG</code></a>]</dt> - <dd>A component of a pathname exceeded 255 characters, or an entire pathname - exceeded 1023 characters.</dd> - <dt id="ENOENT">[<a class="permalink" href="#ENOENT"><code class="Er">ENOENT</code></a>]</dt> - <dd>A component of the specified pathname does not exist, or the pathname is - an empty string.</dd> - <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt> - <dd>An attempt is made to access a file in a way forbidden by its file access - permissions.</dd> - <dt id="ELOOP">[<a class="permalink" href="#ELOOP"><code class="Er">ELOOP</code></a>]</dt> - <dd>Too many symbolic links were encountered in translating the pathname.</dd> - <dt id="EISDIR">[<a class="permalink" href="#EISDIR"><code class="Er">EISDIR</code></a>]</dt> - <dd>An attempt is made to open a directory with write mode specified.</dd> - <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt> - <dd>The last component of the pathname specified for a - <code class="Dv">DELETE</code> or <code class="Dv">RENAME</code> operation - is ‘<code class="Li">.</code>’.</dd> - <dt id="EROFS">[<a class="permalink" href="#EROFS"><code class="Er">EROFS</code></a>]</dt> - <dd>An attempt is made to modify a file or directory on a read-only file - system.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">uio(9)</a>, <a class="Xr">uma(9)</a>, - <a class="Xr">VFS(9)</a>, <a class="Xr">vnode(9)</a>, - <a class="Xr">vput(9)</a>, <a class="Xr">vref(9)</a>, - <a class="Xr">vrele(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Eivind - Eklund</span> - <<a class="Mt" href="mailto:eivind@FreeBSD.org">eivind@FreeBSD.org</a>> - and later significantly revised by <span class="An">Hiten M. Pandya</span> - <<a class="Mt" href="mailto:hmp@FreeBSD.org">hmp@FreeBSD.org</a>>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">The <code class="Dv">LOCKPARENT</code> flag does not always result - in the parent vnode being locked. This results in complications when the - <code class="Dv">LOCKPARENT</code> is used. In order to solve this for the - cases where both <code class="Dv">LOCKPARENT</code> and - <code class="Dv">LOCKLEAF</code> are used, it is necessary to resort to - recursive locking.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 30, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/netisr.9 4.html b/static/freebsd/man9/netisr.9 4.html deleted file mode 100644 index 0c91038b..00000000 --- a/static/freebsd/man9/netisr.9 4.html +++ /dev/null @@ -1,235 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">NETISR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">NETISR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">netisr</code> — <span class="Nd">Kernel - network dispatch service</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">net/netisr.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">netisr_register</code>(<var class="Fa" style="white-space: nowrap;">const - struct netisr_handler *nhp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">netisr_unregister</code>(<var class="Fa" style="white-space: nowrap;">const - struct netisr_handler *nhp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">netisr_dispatch</code>(<var class="Fa" style="white-space: nowrap;">u_int - proto</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">netisr_dispatch_src</code>(<var class="Fa" style="white-space: nowrap;">u_int - proto</var>, <var class="Fa" style="white-space: nowrap;">uintptr_t - source</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">netisr_queue</code>(<var class="Fa" style="white-space: nowrap;">u_int - proto</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">netisr_queue_src</code>(<var class="Fa" style="white-space: nowrap;">u_int - proto</var>, <var class="Fa" style="white-space: nowrap;">uintptr_t - source</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">netisr_clearqdrops</code>(<var class="Fa" style="white-space: nowrap;">const - struct netisr_handler *nhp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">netisr_getqdrops</code>(<var class="Fa" style="white-space: nowrap;">const - struct netisr_handler *nhp</var>, - <var class="Fa" style="white-space: nowrap;">uint64_t *qdropsp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">netisr_getqlimit</code>(<var class="Fa" style="white-space: nowrap;">const - struct netisr_handler *nhp</var>, - <var class="Fa" style="white-space: nowrap;">u_int *qlimitp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">netisr_setqlimit</code>(<var class="Fa" style="white-space: nowrap;">const - struct netisr_handler *nhp</var>, - <var class="Fa" style="white-space: nowrap;">u_int qlimit</var>);</p> -<p class="Pp"><var class="Ft">u_int</var> - <br/> - <code class="Fn">netisr_default_flow2cpu</code>(<var class="Fa" style="white-space: nowrap;">u_int - flowid</var>);</p> -<p class="Pp"><var class="Ft">u_int</var> - <br/> - <code class="Fn">netisr_get_cpucount</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft">u_int</var> - <br/> - <code class="Fn">netisr_get_cpuid</code>(<var class="Fa" style="white-space: nowrap;">u_int - cpunumber</var>);</p> -<p class="Pp">With optional virtual network stack support enabled via the - following kernel compile option:</p> -<div class="Bd Pp Bd-indent"><code class="Cd">options VIMAGE</code></div> -<br/> -<var class="Ft">void</var> -<br/> -<code class="Fn">netisr_register_vnet</code>(<var class="Fa" style="white-space: nowrap;">const - struct netisr_handler *nhp</var>); -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">netisr_unregister_vnet</code>(<var class="Fa" style="white-space: nowrap;">const - struct netisr_handler *nhp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">netisr</code> kernel interface suite allows - device drivers (and other packet sources) to direct packets to protocols for - directly dispatched or deferred processing. Protocol registration and work - stream statistics may be monitored using <a class="Xr">netstat(1)</a>.</p> -<section class="Ss"> -<h2 class="Ss" id="Protocol_registration"><a class="permalink" href="#Protocol_registration">Protocol - registration</a></h2> -<p class="Pp">Protocols register and unregister handlers using - <a class="permalink" href="#netisr_register"><code class="Fn" id="netisr_register">netisr_register</code></a>() - and - <a class="permalink" href="#netisr_unregister"><code class="Fn" id="netisr_unregister">netisr_unregister</code></a>(), - and may also manage queue limits and statistics using the - <a class="permalink" href="#netisr_clearqdrops"><code class="Fn" id="netisr_clearqdrops">netisr_clearqdrops</code></a>(), - <a class="permalink" href="#netisr_getqdrops"><code class="Fn" id="netisr_getqdrops">netisr_getqdrops</code></a>(), - <a class="permalink" href="#netisr_getqlimit"><code class="Fn" id="netisr_getqlimit">netisr_getqlimit</code></a>(), - and - <a class="permalink" href="#netisr_setqlimit"><code class="Fn" id="netisr_setqlimit">netisr_setqlimit</code></a>().</p> -<p class="Pp" id="netisr_register_vnet">In case of VIMAGE kernels each virtual - network stack (vnet), that is not the default base system network stack, - calls - <a class="permalink" href="#netisr_register_vnet"><code class="Fn">netisr_register_vnet</code></a>() - and - <a class="permalink" href="#netisr_unregister_vnet"><code class="Fn" id="netisr_unregister_vnet">netisr_unregister_vnet</code></a>() - to enable or disable packet processing by the <code class="Nm">netisr</code> - for each protocol. Disabling will also purge any outstanding packet from the - protocol queue.</p> -<p class="Pp"><code class="Nm">netisr</code> supports multi-processor execution - of handlers, and relies on a combination of source ordering and - protocol-specific ordering and work-placement policies to decide how to - distribute work across one or more worker threads. Registering protocols - will declare one of three policies:</p> -<dl class="Bl-tag"> - <dt id="NETISR_POLICY_SOURCE"><a class="permalink" href="#NETISR_POLICY_SOURCE"><code class="Dv">NETISR_POLICY_SOURCE</code></a></dt> - <dd><code class="Nm">netisr</code> should maintain source ordering without - advice from the protocol. <code class="Nm">netisr</code> will ignore any - flow IDs present on <var class="Vt">mbuf</var> headers for the purposes of - work placement.</dd> - <dt id="NETISR_POLICY_FLOW"><a class="permalink" href="#NETISR_POLICY_FLOW"><code class="Dv">NETISR_POLICY_FLOW</code></a></dt> - <dd><code class="Nm">netisr</code> should maintain flow ordering as defined by - the <var class="Vt">mbuf</var> header flow ID field. If the protocol - implements <var class="Va">nh_m2flow</var>, then - <code class="Nm">netisr</code> will query the protocol in the event that - the <var class="Vt">mbuf</var> doesn't have a flow ID, falling back on - source ordering.</dd> - <dt>NETISR_POLICY_CPU</dt> - <dd><code class="Nm">netisr</code> will entirely delegate all work placement - decisions to the protocol, querying <var class="Va">nh_m2cpuid</var> for - each packet.</dd> -</dl> -<p class="Pp">Registration is declared using <var class="Vt">struct - netisr_handler</var>, whose fields are defined as follows:</p> -<dl class="Bl-tag"> - <dt><var class="Vt">const char *</var> <var class="Va">nh_name</var></dt> - <dd>Unique character string name of the protocol, which may be included in - <a class="Xr">sysctl(3)</a> MIB names, so should not contain - whitespace.</dd> - <dt><var class="Vt">netisr_handler_t</var> - <var class="Va">nh_handler</var></dt> - <dd>Protocol handler function that will be invoked on each packet received for - the protocol.</dd> - <dt><var class="Vt">netisr_m2flow_t</var> <var class="Va">nh_m2flow</var></dt> - <dd>Optional protocol function to generate a flow ID and set a valid hashtype - for packets that enter the <code class="Nm">netisr</code> with - <code class="Dv">M_HASHTYPE_GET(m)</code> equal to - <code class="Dv">M_HASHTYPE_NONE</code>. Will be used only with - <code class="Dv">NETISR_POLICY_FLOW</code>.</dd> - <dt><var class="Vt">netisr_m2cpuid_t</var> - <var class="Va">nh_m2cpuid</var></dt> - <dd>Protocol function to determine what CPU a packet should be processed on. - Will be used only with <code class="Dv">NETISR_POLICY_CPU</code>.</dd> - <dt><var class="Vt">netisr_drainedcpu_t</var> - <var class="Va">nh_drainedcpu</var></dt> - <dd>Optional callback function that will be invoked when a per-CPU queue was - drained. It will never fire for directly dispatched packets. Unless fully - understood, this special-purpose function should not be used.</dd> - <dt><var class="Vt">u_int</var> <var class="Va">nh_proto</var></dt> - <dd>Protocol number used by both protocols to identify themselves to - <code class="Nm">netisr</code>, and by packet sources to select what - handler will be used to process packets. A table of supported protocol - numbers appears below. For implementation reasons, protocol numbers great - than 15 are currently unsupported.</dd> - <dt><var class="Vt">u_int</var> <var class="Va">nh_qlimit</var></dt> - <dd>The maximum per-CPU queue depth for the protocol; due to internal - implementation details, the effective queue depth may be as much as twice - this number.</dd> - <dt><var class="Vt">u_int</var> <var class="Va">nh_policy</var></dt> - <dd>The ordering and work placement policy for the protocol, as described - earlier.</dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss" id="Packet_source_interface"><a class="permalink" href="#Packet_source_interface">Packet - source interface</a></h2> -<p class="Pp">Packet sources, such as network interfaces, may request protocol - processing using the - <a class="permalink" href="#netisr_dispatch"><code class="Fn" id="netisr_dispatch">netisr_dispatch</code></a>() - and - <a class="permalink" href="#netisr_queue"><code class="Fn" id="netisr_queue">netisr_queue</code></a>() - interfaces. Both accept a protocol number and <var class="Vt">mbuf</var> - argument, but while <code class="Fn">netisr_queue</code>() will always - execute the protocol handler asynchronously in a deferred context, - <code class="Fn">netisr_dispatch</code>() will optionally direct dispatch if - permitted by global and per-protocol policy.</p> -<p class="Pp" id="netisr_dispatch_src">In order to provide additional load - balancing and flow information, packet sources may also specify an opaque - source identifier, which in practice might be a network interface number or - socket pointer, using the - <a class="permalink" href="#netisr_dispatch_src"><code class="Fn">netisr_dispatch_src</code></a>() - and - <a class="permalink" href="#netisr_queue_src"><code class="Fn" id="netisr_queue_src">netisr_queue_src</code></a>() - variants.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Protocol_number_constants"><a class="permalink" href="#Protocol_number_constants">Protocol - number constants</a></h2> -<p class="Pp">The follow protocol numbers are currently defined:</p> -<dl class="Bl-tag"> - <dt id="NETISR_IP"><a class="permalink" href="#NETISR_IP"><code class="Dv">NETISR_IP</code></a></dt> - <dd>IPv4</dd> - <dt id="NETISR_IGMP"><a class="permalink" href="#NETISR_IGMP"><code class="Dv">NETISR_IGMP</code></a></dt> - <dd>IGMPv3 loopback</dd> - <dt id="NETISR_ROUTE"><a class="permalink" href="#NETISR_ROUTE"><code class="Dv">NETISR_ROUTE</code></a></dt> - <dd>Routing socket loopback</dd> - <dt id="NETISR_ARP"><a class="permalink" href="#NETISR_ARP"><code class="Dv">NETISR_ARP</code></a></dt> - <dd>ARP</dd> - <dt id="NETISR_IPV6"><a class="permalink" href="#NETISR_IPV6"><code class="Dv">NETISR_IPV6</code></a></dt> - <dd>IPv6</dd> -</dl> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page and the <code class="Nm">netisr</code> - implementation were written by <span class="An">Robert N. M. - Watson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 12, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/nv.9 4.html b/static/freebsd/man9/nv.9 4.html deleted file mode 100644 index 0dc22c75..00000000 --- a/static/freebsd/man9/nv.9 4.html +++ /dev/null @@ -1,1177 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">NV(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">NV(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">nvlist_create</code>, - <code class="Nm">nvlist_destroy</code>, - <code class="Nm">nvlist_error</code>, - <code class="Nm">nvlist_set_error</code>, - <code class="Nm">nvlist_empty</code>, <code class="Nm">nvlist_flags</code>, - <code class="Nm">nvlist_exists</code>, <code class="Nm">nvlist_free</code>, - <code class="Nm">nvlist_clone</code>, <code class="Nm">nvlist_dump</code>, - <code class="Nm">nvlist_fdump</code>, <code class="Nm">nvlist_size</code>, - <code class="Nm">nvlist_pack</code>, <code class="Nm">nvlist_unpack</code>, - <code class="Nm">nvlist_send</code>, <code class="Nm">nvlist_recv</code>, - <code class="Nm">nvlist_xfer</code>, - <code class="Nm">nvlist_in_array</code>, - <code class="Nm">nvlist_next</code>, <code class="Nm">nvlist_add</code>, - <code class="Nm">nvlist_move</code>, <code class="Nm">nvlist_get</code>, - <code class="Nm">nvlist_take</code>, <code class="Nm">nvlist_append</code> - — <span class="Nd">library for name/value pairs</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LIBRARY"><a class="permalink" href="#LIBRARY">LIBRARY</a></h1> -<p class="Pp"><span class="Lb">Name/value pairs library (libnv, -lnv)</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/nv.h</a>></code></p> -<p class="Pp"><var class="Ft">nvlist_t *</var> - <br/> - <code class="Fn">nvlist_create</code>(<var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_destroy</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">nvlist_error</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_set_error</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">int - error</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">nvlist_empty</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">nvlist_flags</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">nvlist_in_array</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>);</p> -<p class="Pp"><var class="Ft">nvlist_t *</var> - <br/> - <code class="Fn">nvlist_clone</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_dump</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">int - fd</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_fdump</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">FILE - *fp</var>);</p> -<p class="Pp"><var class="Ft">size_t</var> - <br/> - <code class="Fn">nvlist_size</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">nvlist_pack</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">size_t - *sizep</var>);</p> -<p class="Pp"><var class="Ft">nvlist_t *</var> - <br/> - <code class="Fn">nvlist_unpack</code>(<var class="Fa" style="white-space: nowrap;">const - void *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t - size</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">nvlist_send</code>(<var class="Fa" style="white-space: nowrap;">int - sock</var>, <var class="Fa" style="white-space: nowrap;">const nvlist_t - *nvl</var>);</p> -<p class="Pp"><var class="Ft">nvlist_t *</var> - <br/> - <code class="Fn">nvlist_recv</code>(<var class="Fa" style="white-space: nowrap;">int - sock</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">nvlist_t *</var> - <br/> - <code class="Fn">nvlist_xfer</code>(<var class="Fa" style="white-space: nowrap;">int - sock</var>, <var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">const char *</var> - <br/> - <code class="Fn">nvlist_next</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">int - *typep</var>, <var class="Fa" style="white-space: nowrap;">void - **cookiep</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">nvlist_exists</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">nvlist_exists_type</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">int - type</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">nvlist_exists_null</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">nvlist_exists_bool</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">nvlist_exists_number</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">nvlist_exists_string</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">nvlist_exists_nvlist</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">nvlist_exists_descriptor</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">nvlist_exists_binary</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">nvlist_exists_bool_array</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">nvlist_exists_number_array</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">nvlist_exists_string_array</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">nvlist_exists_nvlist_array</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">nvlist_exists_descriptor_array</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_add_null</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_add_bool</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">bool - value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_add_number</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">uint64_t - value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_add_string</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">const char - *value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_add_stringf</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">const char - *valuefmt</var>, - <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_add_stringv</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">const char - *valuefmt</var>, <var class="Fa" style="white-space: nowrap;">va_list - valueap</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_add_nvlist</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">const nvlist_t - *value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_add_descriptor</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">int - value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_add_binary</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">const void - *value</var>, <var class="Fa" style="white-space: nowrap;">size_t - size</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_add_bool_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">const bool - *value</var>, <var class="Fa" style="white-space: nowrap;">size_t - nitems</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_add_number_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">const uint64_t - *value</var>, <var class="Fa" style="white-space: nowrap;">size_t - nitems</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_add_string_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">const char * const - * value</var>, <var class="Fa" style="white-space: nowrap;">size_t - nitems</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_add_nvlist_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">const nvlist_t * - const * value</var>, <var class="Fa" style="white-space: nowrap;">size_t - nitems</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_add_descriptor_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">const int - *value</var>, <var class="Fa" style="white-space: nowrap;">size_t - nitems</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_move_string</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">char - *value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_move_nvlist</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">nvlist_t - *value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_move_descriptor</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">int - value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_move_binary</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">void *value</var>, - <var class="Fa" style="white-space: nowrap;">size_t size</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_move_bool_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">bool *value</var>, - <var class="Fa" style="white-space: nowrap;">size_t nitems</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_move_number_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">uint64_t - *value</var>, <var class="Fa" style="white-space: nowrap;">size_t - nitems</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_move_string_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">char - **value</var>, <var class="Fa" style="white-space: nowrap;">size_t - nitems</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_move_nvlist_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">nvlist_t - **value</var>, <var class="Fa" style="white-space: nowrap;">size_t - nitems</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_move_descriptor_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">int *value</var>, - <var class="Fa" style="white-space: nowrap;">size_t nitems</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">nvlist_get_bool</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">nvlist_get_number</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">const char *</var> - <br/> - <code class="Fn">nvlist_get_string</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">const nvlist_t *</var> - <br/> - <code class="Fn">nvlist_get_nvlist</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">nvlist_get_descriptor</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">const void *</var> - <br/> - <code class="Fn">nvlist_get_binary</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">size_t - *sizep</var>);</p> -<p class="Pp"><var class="Ft">const bool *</var> - <br/> - <code class="Fn">nvlist_get_bool_array</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">size_t - *nitems</var>);</p> -<p class="Pp"><var class="Ft">const uint64_t *</var> - <br/> - <code class="Fn">nvlist_get_number_array</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">size_t - *nitems</var>);</p> -<p class="Pp"><var class="Ft">const char * const *</var> - <br/> - <code class="Fn">nvlist_get_string_array</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">size_t - *nitems</var>);</p> -<p class="Pp"><var class="Ft">const nvlist_t * const *</var> - <br/> - <code class="Fn">nvlist_get_nvlist_array</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">size_t - *nitems</var>);</p> -<p class="Pp"><var class="Ft">const int *</var> - <br/> - <code class="Fn">nvlist_get_descriptor_array</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">size_t - *nitems</var>);</p> -<p class="Pp"><var class="Ft">const nvlist_t *</var> - <br/> - <code class="Fn">nvlist_get_parent</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">void - **cookiep</var>);</p> -<p class="Pp"><var class="Ft">const nvlist_t *</var> - <br/> - <code class="Fn">nvlist_get_array_next</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>);</p> -<p class="Pp"><var class="Ft">const nvlist_t *</var> - <br/> - <code class="Fn">nvlist_get_pararr</code>(<var class="Fa" style="white-space: nowrap;">const - nvlist_t *nvl</var>, <var class="Fa" style="white-space: nowrap;">void - **cookiep</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">nvlist_take_bool</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">nvlist_take_number</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">char *</var> - <br/> - <code class="Fn">nvlist_take_string</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">nvlist_t *</var> - <br/> - <code class="Fn">nvlist_take_nvlist</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">nvlist_take_descriptor</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">nvlist_take_binary</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">size_t - *sizep</var>);</p> -<p class="Pp"><var class="Ft">bool *</var> - <br/> - <code class="Fn">nvlist_take_bool_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">size_t - *nitems</var>);</p> -<p class="Pp"><var class="Ft">uint64_t **</var> - <br/> - <code class="Fn">nvlist_take_number_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">size_t - *nitems</var>);</p> -<p class="Pp"><var class="Ft">char **</var> - <br/> - <code class="Fn">nvlist_take_string_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">size_t - *nitems</var>);</p> -<p class="Pp"><var class="Ft">nvlist_t **</var> - <br/> - <code class="Fn">nvlist_take_nvlist_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">size_t - *nitems</var>);</p> -<p class="Pp"><var class="Ft">int *</var> - <br/> - <code class="Fn">nvlist_take_descriptor_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">size_t - *nitems</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_append_bool_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">const bool - value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_append_number_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">const uint64_t - value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_append_string_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">const char * const - value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_append_nvlist_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">const nvlist_t * - const value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_append_descriptor_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">int - value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_free</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_free_type</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">int - type</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_free_null</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_free_bool</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_free_number</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_free_string</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_free_nvlist</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_free_descriptor</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_free_binary</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_free_bool_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_free_number_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_free_string_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_free_nvlist_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">nvlist_free_descriptor_array</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *nvl</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">libnv</code> library permits creating and - managing name value pairs as well as sending and receiving them over - sockets. A group (list) of name value pairs is called an - <code class="Nm">nvlist</code>. The API supports the following data types - for values:</p> -<dl class="Bl-ohang Bd-indent"> - <dt id="null"><a class="permalink" href="#null"><b class="Sy">null</b></a> - (<a class="permalink" href="#NV_TYPE_NULL"><b class="Sy" id="NV_TYPE_NULL">NV_TYPE_NULL</b></a>)</dt> - <dd>There is no data associated with the name.</dd> - <dt id="bool"><a class="permalink" href="#bool"><b class="Sy">bool</b></a> - (<a class="permalink" href="#NV_TYPE_BOOL"><b class="Sy" id="NV_TYPE_BOOL">NV_TYPE_BOOL</b></a>)</dt> - <dd>The value can be either <code class="Dv">true</code> or - <code class="Dv">false</code>.</dd> - <dt id="number"><a class="permalink" href="#number"><b class="Sy">number</b></a> - (<a class="permalink" href="#NV_TYPE_NUMBER"><b class="Sy" id="NV_TYPE_NUMBER">NV_TYPE_NUMBER</b></a>)</dt> - <dd>The value is a number stored as <var class="Vt">uint64_t</var>.</dd> - <dt id="string"><a class="permalink" href="#string"><b class="Sy">string</b></a> - (<a class="permalink" href="#NV_TYPE_STRING"><b class="Sy" id="NV_TYPE_STRING">NV_TYPE_STRING</b></a>)</dt> - <dd>The value is a C string.</dd> - <dt id="nvlist"><a class="permalink" href="#nvlist"><b class="Sy">nvlist</b></a> - (<a class="permalink" href="#NV_TYPE_NVLIST"><b class="Sy" id="NV_TYPE_NVLIST">NV_TYPE_NVLIST</b></a>)</dt> - <dd>The value is a nested nvlist.</dd> - <dt id="descriptor"><a class="permalink" href="#descriptor"><b class="Sy">descriptor</b></a> - (<a class="permalink" href="#NV_TYPE_DESCRIPTOR"><b class="Sy" id="NV_TYPE_DESCRIPTOR">NV_TYPE_DESCRIPTOR</b></a>)</dt> - <dd>The value is a file descriptor. Note that file descriptors can be sent - only over <a class="Xr">unix(4)</a> domain sockets.</dd> - <dt id="binary"><a class="permalink" href="#binary"><b class="Sy">binary</b></a> - (<a class="permalink" href="#NV_TYPE_BINARY"><b class="Sy" id="NV_TYPE_BINARY">NV_TYPE_BINARY</b></a>)</dt> - <dd>The value is a binary buffer.</dd> - <dt id="NV_TYPE_BOOL_ARRAY"><b class="Sy">bool array</b> - (<a class="permalink" href="#NV_TYPE_BOOL_ARRAY"><b class="Sy">NV_TYPE_BOOL_ARRAY</b></a>)</dt> - <dd>The value is an array of boolean values.</dd> - <dt id="NV_TYPE_NUMBER_ARRAY"><b class="Sy">number array</b> - (<a class="permalink" href="#NV_TYPE_NUMBER_ARRAY"><b class="Sy">NV_TYPE_NUMBER_ARRAY</b></a>)</dt> - <dd>The value is an array of numbers, each stored as - <var class="Vt">uint64_t</var>.</dd> - <dt id="NV_TYPE_STRING_ARRAY"><b class="Sy">string array</b> - (<a class="permalink" href="#NV_TYPE_STRING_ARRAY"><b class="Sy">NV_TYPE_STRING_ARRAY</b></a>)</dt> - <dd>The value is an array of C strings.</dd> - <dt id="NV_TYPE_NVLIST_ARRAY"><b class="Sy">nvlist array</b> - (<a class="permalink" href="#NV_TYPE_NVLIST_ARRAY"><b class="Sy">NV_TYPE_NVLIST_ARRAY</b></a>)</dt> - <dd>The value is an array of nvlists. When an nvlist is added to an array, it - becomes part of the primary nvlist. Traversing these arrays can be done - using the - <a class="permalink" href="#nvlist_get_array_next"><code class="Fn" id="nvlist_get_array_next">nvlist_get_array_next</code></a>() - and <code class="Fn">nvlist_get_pararr</code>() functions.</dd> - <dt id="NV_TYPE_DESCRIPTOR_ARRAY"><b class="Sy">descriptor array</b> - (<a class="permalink" href="#NV_TYPE_DESCRIPTOR_ARRAY"><b class="Sy">NV_TYPE_DESCRIPTOR_ARRAY</b></a>)</dt> - <dd>The value is an array of files descriptors.</dd> -</dl> -<p class="Pp" id="nvlist_create">The - <a class="permalink" href="#nvlist_create"><code class="Fn">nvlist_create</code></a>() - function allocates memory and initializes an nvlist.</p> -<p class="Pp">The following flags can be provided:</p> -<p class="Pp"></p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt id="NV_FLAG_IGNORE_CASE"><a class="permalink" href="#NV_FLAG_IGNORE_CASE"><code class="Dv">NV_FLAG_IGNORE_CASE</code></a></dt> - <dd>Perform case-insensitive lookups of provided names.</dd> - <dt id="NV_FLAG_NO_UNIQUE"><a class="permalink" href="#NV_FLAG_NO_UNIQUE"><code class="Dv">NV_FLAG_NO_UNIQUE</code></a></dt> - <dd>Names in the nvlist do not have to be unique.</dd> -</dl> -</div> -<p class="Pp" id="nvlist_destroy">The - <a class="permalink" href="#nvlist_destroy"><code class="Fn">nvlist_destroy</code></a>() - function destroys the given nvlist. This function does nothing if - <var class="Fa">nvl</var> is <code class="Dv">NULL</code>. This function - never modifies <var class="Va">errno</var>.</p> -<p class="Pp" id="nvlist_error">The - <a class="permalink" href="#nvlist_error"><code class="Fn">nvlist_error</code></a>() - function returns the first error set on <var class="Fa">nvl</var>. If - <var class="Fa">nvl</var> is not in the error state, this function returns - zero. If <var class="Fa">nvl</var> is <code class="Dv">NULL</code>, - <code class="Er">ENOMEM</code> is returned.</p> -<p class="Pp" id="nvlist_set_error">The - <a class="permalink" href="#nvlist_set_error"><code class="Fn">nvlist_set_error</code></a>() - function sets an the error value for <var class="Fa">nvl</var>. Subsequent - calls to <code class="Fn">nvlist_error</code>() will return - <var class="Fa">error</var>. This function cannot be used to clear the error - state from an nvlist. This function does nothing if the nvlist is already in - the error state.</p> -<p class="Pp" id="nvlist_empty">The - <a class="permalink" href="#nvlist_empty"><code class="Fn">nvlist_empty</code></a>() - function returns <code class="Dv">true</code> if <var class="Fa">nvl</var> - is empty and <code class="Dv">false</code> otherwise. The nvlist must not be - in the error state.</p> -<p class="Pp" id="nvlist_flags">The - <a class="permalink" href="#nvlist_flags"><code class="Fn">nvlist_flags</code></a>() - function returns the flags used to create <var class="Fa">nvl</var> with the - <code class="Fn">nvlist_create</code>(), - <code class="Fn">nvlist_recv</code>(), - <code class="Fn">nvlist_unpack</code>(), or - <code class="Fn">nvlist_xfer</code>() functions.</p> -<p class="Pp" id="nvlist_in_array">The - <a class="permalink" href="#nvlist_in_array"><code class="Fn">nvlist_in_array</code></a>() - function returns <code class="Dv">true</code> if <var class="Fa">nvl</var> - is part of an array that is a member of another nvlist.</p> -<p class="Pp" id="nvlist_clone">The - <a class="permalink" href="#nvlist_clone"><code class="Fn">nvlist_clone</code></a>() - function clones <var class="Fa">nvl</var>. The clone shares no resources - with its origin. This also means that all file descriptors that are part of - the nvlist will be duplicated with the <a class="Xr">dup(2)</a> system call - before placing them in the clone.</p> -<p class="Pp" id="nvlist_dump">The - <a class="permalink" href="#nvlist_dump"><code class="Fn">nvlist_dump</code></a>() - function dumps nvlist content for debugging purposes to the file descriptor - <var class="Fa">fd</var>.</p> -<p class="Pp" id="nvlist_fdump">The - <a class="permalink" href="#nvlist_fdump"><code class="Fn">nvlist_fdump</code></a>() - dumps nvlist content for debugging purposes to the file stream - <var class="Fa">fp</var>.</p> -<p class="Pp" id="nvlist_size">The - <a class="permalink" href="#nvlist_size"><code class="Fn">nvlist_size</code></a>() - function returns the size of the binary buffer that would be generated by - the <code class="Fn">nvlist_pack</code>() function.</p> -<p class="Pp" id="nvlist_pack">The - <a class="permalink" href="#nvlist_pack"><code class="Fn">nvlist_pack</code></a>() - function converts the given nvlist to a binary buffer. The function - allocates memory for the buffer which should be freed with the - <a class="Xr">free(3)</a> function. If the <var class="Fa">sizep</var> - argument is not <code class="Dv">NULL</code>, the size of the buffer is - stored there. This function returns <code class="Dv">NULL</code> in case of - an error (allocation failure). If the nvlist contains any file descriptors - <code class="Dv">NULL</code> will be returned. The nvlist must not be in the - error state.</p> -<p class="Pp" id="nvlist_unpack">The - <a class="permalink" href="#nvlist_unpack"><code class="Fn">nvlist_unpack</code></a>() - function converts a binary buffer to a new nvlist. The - <var class="Fa">flags</var> argument has the same meaning as the - <var class="Fa">flags</var> argument passed to - <code class="Fn">nvlist_create</code>(). If <var class="Fa">flags</var> do - not match the flags used to create the initial nvlist before it was packed, - this function will fail. The flags of nested nvlists are not validated by - this function. The caller is responsible for validating the flags on any - nested nvlists using <code class="Fn">nvlist_flags</code>(). This function - returns the new nvlist on success or <code class="Dv">NULL</code> in case of - an error.</p> -<p class="Pp" id="nvlist_send">The - <a class="permalink" href="#nvlist_send"><code class="Fn">nvlist_send</code></a>() - function sends <var class="Fa">nvl</var> over the socket - <var class="Fa">sock</var>. Note that nvlists that contain file descriptors - can only be sent over <a class="Xr">unix(4)</a> domain sockets.</p> -<p class="Pp" id="nvlist_recv">The - <a class="permalink" href="#nvlist_recv"><code class="Fn">nvlist_recv</code></a>() - function receives an nvlist over the socket <var class="Fa">sock</var>. As - with <code class="Fn">nvlist_unpack</code>(), the - <var class="Fa">flags</var> argument is used to construct the new nvlist and - must match the flags used to construct the original nvlist written to - <var class="Fa">sock</var> by the peer. The flags of nested nvlists are not - validated by this function. The caller is responsible for validating the - flags on any nested nvlists using <code class="Fn">nvlist_flags</code>(). - This function returns the new nvlist on success or - <code class="Dv">NULL</code> in case of an error.</p> -<p class="Pp" id="nvlist_xfer">The - <a class="permalink" href="#nvlist_xfer"><code class="Fn">nvlist_xfer</code></a>() - function sends <var class="Fa">nvl</var> over the socket - <var class="Fa">sock</var> argument and then receives a new nvlist over the - same socket. The <var class="Fa">flags</var> argument applies to the new - nvlist similar to <code class="Fn">nvlist_recv</code>(). The nvlist - <var class="Fa">nvl</var> is always destroyed. This function returns the new - nvlist on success or <code class="Dv">NULL</code> in case of an error.</p> -<p class="Pp" id="nvlist_next">The - <a class="permalink" href="#nvlist_next"><code class="Fn">nvlist_next</code></a>() - function iterates over <var class="Fa">nvl</var> returning the names and - types of subsequent elements. The <var class="Fa">cookiep</var> argument - determines which element is returned. If <var class="Va">*cookiep</var> is - <code class="Dv">NULL</code>, the values for the first element in the list - are returned. Otherwise, <var class="Va">*cookiep</var> should contain the - result of a prior call to <code class="Fn">nvlist_next</code>() in which - case values for the next element from <var class="Fa">nvl</var> are - returned. This function returns <code class="Dv">NULL</code> when there are - no more elements on <var class="Fa">nvl</var>. The - <var class="Fa">typep</var> argument can be <code class="Dv">NULL</code>. - Elements may not be removed from <var class="Fa">nvl</var> the nvlist while - traversing it. <var class="Fa">nvl</var> must not be in the error state. - Additional actions can be performed on an element identified by a cookie via - the <a class="Xr">cnv(9)</a> API .</p> -<p class="Pp" id="nvlist_exists">The - <a class="permalink" href="#nvlist_exists"><code class="Fn">nvlist_exists</code></a>() - function returns <code class="Dv">true</code> if an element named - <var class="Fa">name</var> exists in <var class="Fa">nvl</var> (regardless - of type) or <code class="Dv">false</code> otherwise. The nvlist must not be - in the error state.</p> -<p class="Pp" id="nvlist_exists_type">The - <a class="permalink" href="#nvlist_exists_type"><code class="Fn">nvlist_exists_type</code></a>() - function returns <code class="Dv">true</code> if an element named - <var class="Fa">name</var> of type <var class="Fa">type</var> exists or - <code class="Dv">false</code> otherwise. The nvlist must not be in the error - state.</p> -<p class="Pp" id="nvlist_exists_null">The - <a class="permalink" href="#nvlist_exists_null"><code class="Fn">nvlist_exists_null</code></a>(), - <a class="permalink" href="#nvlist_exists_bool"><code class="Fn" id="nvlist_exists_bool">nvlist_exists_bool</code></a>(), - <a class="permalink" href="#nvlist_exists_number"><code class="Fn" id="nvlist_exists_number">nvlist_exists_number</code></a>(), - <a class="permalink" href="#nvlist_exists_string"><code class="Fn" id="nvlist_exists_string">nvlist_exists_string</code></a>(), - <a class="permalink" href="#nvlist_exists_nvlist"><code class="Fn" id="nvlist_exists_nvlist">nvlist_exists_nvlist</code></a>(), - <a class="permalink" href="#nvlist_exists_descriptor"><code class="Fn" id="nvlist_exists_descriptor">nvlist_exists_descriptor</code></a>(), - <a class="permalink" href="#nvlist_exists_binary"><code class="Fn" id="nvlist_exists_binary">nvlist_exists_binary</code></a>(), - <a class="permalink" href="#nvlist_exists_bool_array"><code class="Fn" id="nvlist_exists_bool_array">nvlist_exists_bool_array</code></a>(), - <a class="permalink" href="#nvlist_exists_number_array"><code class="Fn" id="nvlist_exists_number_array">nvlist_exists_number_array</code></a>(), - <a class="permalink" href="#nvlist_exists_string_array"><code class="Fn" id="nvlist_exists_string_array">nvlist_exists_string_array</code></a>(), - <a class="permalink" href="#nvlist_exists_nvlist_array"><code class="Fn" id="nvlist_exists_nvlist_array">nvlist_exists_nvlist_array</code></a>(), - <a class="permalink" href="#nvlist_exists_descriptor_array"><code class="Fn" id="nvlist_exists_descriptor_array">nvlist_exists_descriptor_array</code></a>() - functions return <code class="Dv">true</code> if element named - <var class="Fa">name</var> with the type determined by the function name - exists or <code class="Dv">false</code> otherwise. The nvlist must not be in - the error state.</p> -<p class="Pp" id="nvlist_add_null">The - <a class="permalink" href="#nvlist_add_null"><code class="Fn">nvlist_add_null</code></a>(), - <a class="permalink" href="#nvlist_add_bool"><code class="Fn" id="nvlist_add_bool">nvlist_add_bool</code></a>(), - <a class="permalink" href="#nvlist_add_number"><code class="Fn" id="nvlist_add_number">nvlist_add_number</code></a>(), - <a class="permalink" href="#nvlist_add_string"><code class="Fn" id="nvlist_add_string">nvlist_add_string</code></a>(), - <a class="permalink" href="#nvlist_add_stringf"><code class="Fn" id="nvlist_add_stringf">nvlist_add_stringf</code></a>(), - <a class="permalink" href="#nvlist_add_stringv"><code class="Fn" id="nvlist_add_stringv">nvlist_add_stringv</code></a>(), - <a class="permalink" href="#nvlist_add_nvlist"><code class="Fn" id="nvlist_add_nvlist">nvlist_add_nvlist</code></a>(), - <a class="permalink" href="#nvlist_add_descriptor"><code class="Fn" id="nvlist_add_descriptor">nvlist_add_descriptor</code></a>(), - <a class="permalink" href="#nvlist_add_binary"><code class="Fn" id="nvlist_add_binary">nvlist_add_binary</code></a>(), - <a class="permalink" href="#nvlist_add_bool_array"><code class="Fn" id="nvlist_add_bool_array">nvlist_add_bool_array</code></a>(), - <a class="permalink" href="#nvlist_add_number_array"><code class="Fn" id="nvlist_add_number_array">nvlist_add_number_array</code></a>(), - <a class="permalink" href="#nvlist_add_string_array"><code class="Fn" id="nvlist_add_string_array">nvlist_add_string_array</code></a>(), - <code class="Fn">nvlist_add_nvlist_array</code>(), - <a class="permalink" href="#nvlist_add_descriptor_array"><code class="Fn" id="nvlist_add_descriptor_array">nvlist_add_descriptor_array</code></a>() - functions add an element to <var class="Fa">nvl</var>. When adding a string - or binary buffer, these functions allocate memory and copy the data. When - adding an nvlist, the <var class="Fa">value</var> nvlist is cloned and the - clone is added to <var class="Fa">nvl</var>. When adding a file descriptor, - the descriptor is duplicated via the <a class="Xr">dup(2)</a> system call - and the new file descriptor is added. The array functions fail if there are - any <code class="Dv">NULL</code> elements in the array, or if the array - pointer is <code class="Dv">NULL</code>. If an error occurs while adding a - new element, an internal error is set which can be examined using the - <code class="Fn">nvlist_error</code>() function.</p> -<p class="Pp" id="nvlist_move_string">The - <a class="permalink" href="#nvlist_move_string"><code class="Fn">nvlist_move_string</code></a>(), - <a class="permalink" href="#nvlist_move_nvlist"><code class="Fn" id="nvlist_move_nvlist">nvlist_move_nvlist</code></a>(), - <a class="permalink" href="#nvlist_move_descriptor"><code class="Fn" id="nvlist_move_descriptor">nvlist_move_descriptor</code></a>(), - <a class="permalink" href="#nvlist_move_binary"><code class="Fn" id="nvlist_move_binary">nvlist_move_binary</code></a>(), - <a class="permalink" href="#nvlist_move_bool_array"><code class="Fn" id="nvlist_move_bool_array">nvlist_move_bool_array</code></a>(), - <a class="permalink" href="#nvlist_move_number_array"><code class="Fn" id="nvlist_move_number_array">nvlist_move_number_array</code></a>(), - <a class="permalink" href="#nvlist_move_string_array"><code class="Fn" id="nvlist_move_string_array">nvlist_move_string_array</code></a>(), - <code class="Fn">nvlist_move_nvlist_array</code>(), - <a class="permalink" href="#nvlist_move_descriptor_array"><code class="Fn" id="nvlist_move_descriptor_array">nvlist_move_descriptor_array</code></a>() - functions add an element to <var class="Fa">nvl</var>, but unlike the - <a class="permalink" href="#nvlist_add__type_"><code class="Fn" id="nvlist_add__type_">nvlist_add_<type></code></a>() - functions they consume the given resource. For string, file descriptor, - binary buffer, or nvlist values, no value should be moved into an nvlist - multiple times; doing so will cause that value to be freed multiple times. - Note that strings or binary buffers must be allocated with - <a class="Xr">malloc(3)</a>, and the pointers will be released via - <a class="Xr">free(3)</a> when <var class="Fa">nvl</var> is destroyed. The - array functions fail if there are any <code class="Dv">NULL</code> elements, - or if the array pointer is <code class="Dv">NULL</code>. If an error occurs - while adding new element, the resource is destroyed and an internal error is - set which can be examined using the <code class="Fn">nvlist_error</code>() - function.</p> -<p class="Pp" id="nvlist_get_bool">The - <a class="permalink" href="#nvlist_get_bool"><code class="Fn">nvlist_get_bool</code></a>(), - <a class="permalink" href="#nvlist_get_number"><code class="Fn" id="nvlist_get_number">nvlist_get_number</code></a>(), - <a class="permalink" href="#nvlist_get_string"><code class="Fn" id="nvlist_get_string">nvlist_get_string</code></a>(), - <a class="permalink" href="#nvlist_get_nvlist"><code class="Fn" id="nvlist_get_nvlist">nvlist_get_nvlist</code></a>(), - <a class="permalink" href="#nvlist_get_descriptor"><code class="Fn" id="nvlist_get_descriptor">nvlist_get_descriptor</code></a>(), - <a class="permalink" href="#nvlist_get_binary"><code class="Fn" id="nvlist_get_binary">nvlist_get_binary</code></a>(), - <a class="permalink" href="#nvlist_get_bool_array"><code class="Fn" id="nvlist_get_bool_array">nvlist_get_bool_array</code></a>(), - <a class="permalink" href="#nvlist_get_number_array"><code class="Fn" id="nvlist_get_number_array">nvlist_get_number_array</code></a>(), - <a class="permalink" href="#nvlist_get_string_array"><code class="Fn" id="nvlist_get_string_array">nvlist_get_string_array</code></a>(), - <a class="permalink" href="#nvlist_get_nvlist_array"><code class="Fn" id="nvlist_get_nvlist_array">nvlist_get_nvlist_array</code></a>(), - <a class="permalink" href="#nvlist_get_descriptor_array"><code class="Fn" id="nvlist_get_descriptor_array">nvlist_get_descriptor_array</code></a>() - functions return the value of the first element in <var class="Fa">nvl</var> - named <var class="Fa">name</var>. For string, nvlist, file descriptor, - binary buffer, or array values, the returned resource must not be modified - - it still belongs to <var class="Fa">nvl</var>.</p> -<p class="Pp">If an element named <var class="Fa">name</var> does not exist, the - program aborts. To avoid this, the caller should check for the existence of - the element before trying to obtain the value or use the - <a class="Xr">dnv(9)</a> extension which provides a default value in the - case of a missing element.</p> -<p class="Pp">The nvlist must not be in the error state.</p> -<p class="Pp" id="nvlist_get_parent">The - <a class="permalink" href="#nvlist_get_parent"><code class="Fn">nvlist_get_parent</code></a>() - function returns the parent nvlist of <var class="Fa">nvl</var>.</p> -<p class="Pp" id="nvlist_get_array_next~2">The - <a class="permalink" href="#nvlist_get_array_next~2"><code class="Fn">nvlist_get_array_next</code></a>() - function returns the next element after <var class="Fa">nvl</var> from an - array of nvlists. If <var class="Fa">nvl</var> is not in an array of nvlists - or it is the last element, this function returns - <code class="Dv">NULL</code>. An nvlist is only in an nvlist array if it was - added to an nvlist array using - <a class="permalink" href="#nvlist_add_nvlist_array"><code class="Fn" id="nvlist_add_nvlist_array">nvlist_add_nvlist_array</code></a>(), - <a class="permalink" href="#nvlist_append_nvlist_array"><code class="Fn" id="nvlist_append_nvlist_array">nvlist_append_nvlist_array</code></a>(), - or - <a class="permalink" href="#nvlist_move_nvlist_array"><code class="Fn" id="nvlist_move_nvlist_array">nvlist_move_nvlist_array</code></a>().</p> -<p class="Pp" id="nvlist_get_pararr">The - <a class="permalink" href="#nvlist_get_pararr"><code class="Fn">nvlist_get_pararr</code></a>() - function returns the next element after - <a class="permalink" href="#nvl"><code class="Fn" id="nvl">nvl</code></a>() - from an array of nvlists. If <code class="Fn">nvl</code>() is the last - element in an array of nvlists, the parent nvlist of <var class="Fa">nvl - is</var> returned. If <code class="Fn">nvl</code>() is not in an array of - nvlists, <code class="Dv">NULL</code> is returned.</p> -<p class="Pp" id="nvlist_take_bool">The - <a class="permalink" href="#nvlist_take_bool"><code class="Fn">nvlist_take_bool</code></a>(), - <a class="permalink" href="#nvlist_take_number"><code class="Fn" id="nvlist_take_number">nvlist_take_number</code></a>(), - <a class="permalink" href="#nvlist_take_string"><code class="Fn" id="nvlist_take_string">nvlist_take_string</code></a>(), - <a class="permalink" href="#nvlist_take_nvlist"><code class="Fn" id="nvlist_take_nvlist">nvlist_take_nvlist</code></a>(), - <a class="permalink" href="#nvlist_take_descriptor"><code class="Fn" id="nvlist_take_descriptor">nvlist_take_descriptor</code></a>(), - <a class="permalink" href="#nvlist_take_binary"><code class="Fn" id="nvlist_take_binary">nvlist_take_binary</code></a>(), - <a class="permalink" href="#nvlist_take_bool_array"><code class="Fn" id="nvlist_take_bool_array">nvlist_take_bool_array</code></a>(), - <a class="permalink" href="#nvlist_take_number_array"><code class="Fn" id="nvlist_take_number_array">nvlist_take_number_array</code></a>(), - <a class="permalink" href="#nvlist_take_string_array"><code class="Fn" id="nvlist_take_string_array">nvlist_take_string_array</code></a>(), - <a class="permalink" href="#nvlist_take_nvlist_array"><code class="Fn" id="nvlist_take_nvlist_array">nvlist_take_nvlist_array</code></a>(), - <a class="permalink" href="#nvlist_take_descriptor_array"><code class="Fn" id="nvlist_take_descriptor_array">nvlist_take_descriptor_array</code></a>() - functions return the value of the element named <var class="Fa">name</var> - and remove the element from <var class="Fa">nvl</var>. For string and binary - buffer values, the caller is responsible for freeing the returned value - using the <a class="Xr">free(3)</a> function. For nvlist values, the caller - is responsible for destroying the returned nvlist using the - <code class="Fn">nvlist_destroy</code>() function. For file descriptor - values, the caller is responsible for closing the returned descriptor using - the - <a class="permalink" href="#close"><code class="Fn" id="close">close</code></a>(<var class="Fa">2</var>) - system call. For array values, the caller is responsible for destroying - every element of the array based on the element type. In addition, the - caller must also free the pointer to the array using the - <a class="Xr">free(3)</a> function.</p> -<p class="Pp">If an element named <var class="Fa">name</var> does not exist, the - program aborts. To avoid this, the caller should check for the existence of - the element before trying to obtain the value or use the - <a class="Xr">dnv(9)</a> extension which provides a default value in the - case of a missing element.</p> -<p class="Pp">The nvlist must not be in the error state.</p> -<p class="Pp" id="nvlist_append_bool_array">The - <a class="permalink" href="#nvlist_append_bool_array"><code class="Fn">nvlist_append_bool_array</code></a>(), - <a class="permalink" href="#nvlist_append_number_array"><code class="Fn" id="nvlist_append_number_array">nvlist_append_number_array</code></a>(), - <a class="permalink" href="#nvlist_append_string_array"><code class="Fn" id="nvlist_append_string_array">nvlist_append_string_array</code></a>(), - <code class="Fn">nvlist_append_nvlist_array</code>(), - <a class="permalink" href="#nvlist_append_descriptor_array"><code class="Fn" id="nvlist_append_descriptor_array">nvlist_append_descriptor_array</code></a>() - functions append an element to an existing array using the same semantics as - the add functions (that is, the element will be copied when applicable). If - the array named <var class="Fa">name</var> does not exist, then it will be - created as if using the - <a class="permalink" href="#nvlist_add__type__array"><code class="Fn" id="nvlist_add__type__array">nvlist_add_<type>_array</code></a>() - function. If an error occurs while appending a new element, an internal - error is set on <var class="Fa">nvl</var>.</p> -<p class="Pp" id="nvlist_free">The - <a class="permalink" href="#nvlist_free"><code class="Fn">nvlist_free</code></a>() - function removes the first element named <var class="Fa">name</var> from - <var class="Fa">nvl</var> (regardless of type) and frees all resources - associated with it. If no element named <var class="Fa">name</var> exists, - the program aborts. The nvlist must not be in the error state.</p> -<p class="Pp" id="nvlist_free_type">The - <a class="permalink" href="#nvlist_free_type"><code class="Fn">nvlist_free_type</code></a>() - function removes the first element named <var class="Fa">name</var> of type - <var class="Fa">type</var> from <var class="Fa">nvl</var> and frees all - resources associated with it. If no element named <var class="Fa">name</var> - of type <var class="Fa">type</var> exists, the program aborts. The nvlist - must not be in the error state.</p> -<p class="Pp" id="nvlist_free_null">The - <a class="permalink" href="#nvlist_free_null"><code class="Fn">nvlist_free_null</code></a>(), - <a class="permalink" href="#nvlist_free_bool"><code class="Fn" id="nvlist_free_bool">nvlist_free_bool</code></a>(), - <a class="permalink" href="#nvlist_free_number"><code class="Fn" id="nvlist_free_number">nvlist_free_number</code></a>(), - <a class="permalink" href="#nvlist_free_string"><code class="Fn" id="nvlist_free_string">nvlist_free_string</code></a>(), - <a class="permalink" href="#nvlist_free_nvlist"><code class="Fn" id="nvlist_free_nvlist">nvlist_free_nvlist</code></a>(), - <a class="permalink" href="#nvlist_free_descriptor"><code class="Fn" id="nvlist_free_descriptor">nvlist_free_descriptor</code></a>(), - <a class="permalink" href="#nvlist_free_binary"><code class="Fn" id="nvlist_free_binary">nvlist_free_binary</code></a>(), - <a class="permalink" href="#nvlist_free_bool_array"><code class="Fn" id="nvlist_free_bool_array">nvlist_free_bool_array</code></a>(), - <a class="permalink" href="#nvlist_free_number_array"><code class="Fn" id="nvlist_free_number_array">nvlist_free_number_array</code></a>(), - <a class="permalink" href="#nvlist_free_string_array"><code class="Fn" id="nvlist_free_string_array">nvlist_free_string_array</code></a>(), - <a class="permalink" href="#nvlist_free_nvlist_array"><code class="Fn" id="nvlist_free_nvlist_array">nvlist_free_nvlist_array</code></a>(), - <a class="permalink" href="#nvlist_free_descriptor_array"><code class="Fn" id="nvlist_free_descriptor_array">nvlist_free_descriptor_array</code></a>() - functions remove the first element named <var class="Fa">name</var> with the - type determined by the function name from <var class="Fa">nvl</var> free all - resources associated with it. If no element named <var class="Fa">name</var> - with the appropriate type exists, the program aborts. The nvlist must not be - in the error state.</p> -<section class="Ss"> -<h2 class="Ss" id="Notes"><a class="permalink" href="#Notes">Notes</a></h2> -<p class="Pp">The <code class="Fn">nvlist_pack</code>() and - <code class="Fn">nvlist_unpack</code>() functions handle byte-order - conversions, so binary buffers can be packed and unpacked on hosts with - different endianness.</p> -<p class="Pp" id="nvlist_recv~2">The - <a class="permalink" href="#nvlist_recv~2"><code class="Fn">nvlist_recv</code></a>(), - <code class="Fn">nvlist_send</code>(), and - <code class="Fn">nvlist_xfer</code>() functions can transfer nvlists between - hosts with different endianness.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Kernel_Considerations"><a class="permalink" href="#Kernel_Considerations">Kernel - Considerations</a></h2> -<p class="Pp">The <code class="Nm">nv</code>, <code class="Nm">cnv</code>, and - <code class="Nm">dnv</code> APIs can be used in the kernel with the - following differences:</p> -<ul class="Bl-bullet"> - <li>File descriptor and file descriptor array value types are not - supported.</li> - <li><code class="Fn">nvlist_recv</code>(), - <code class="Fn">nvlist_send</code>(), and - <code class="Fn">nvlist_xfer</code>() are not supported.</li> - <li>All memory allocations use the <code class="Dv">M_NVLIST</code> memory - type with <a class="Xr">malloc(9)</a> and <a class="Xr">free(9)</a>. As a - result, any allocated buffers moved into an nvlist must be allocated with - <code class="Dv">M_NVLIST</code>, and buffers returned by functions such - as <code class="Fn">nvlist_pack</code>() must be freed with - <code class="Dv">M_NVLIST</code>.</li> -</ul> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">The following example demonstrates how to prepare an nvlist and - send it over a <a class="Xr">unix(4)</a> domain socket.</p> -<div class="Bd Pp Li"> -<pre>nvlist_t *nvl; -int fd; - -fd = open("/tmp/foo", O_RDONLY); -if (fd < 0) - err(1, "open(\"/tmp/foo\") failed"); - -nvl = nvlist_create(0); - -/* - * There is no need to check if nvlist_create() succeeded - * as the nvlist_add_<type>() functions can cope. - * If it failed, nvlist_send() will fail. - */ -nvlist_add_string(nvl, "filename", "/tmp/foo"); -nvlist_add_number(nvl, "flags", O_RDONLY); - -/* - * We just want to send the descriptor, so we can give it - * for the nvlist to consume (that is why we use nvlist_move - * not nvlist_add). - */ -nvlist_move_descriptor(nvl, "fd", fd); -if (nvlist_send(sock, nvl) < 0) { - nvlist_destroy(nvl); - err(1, "nvlist_send() failed"); -} -nvlist_destroy(nvl);</pre> -</div> -<p class="Pp">Receiving an nvlist and retrieving element values:</p> -<div class="Bd Pp Li"> -<pre>nvlist_t *nvl; -const char *command; -char *filename; -int fd; - -nvl = nvlist_recv(sock, 0); -if (nvl == NULL) - err(1, "nvlist_recv() failed"); - -/* For command we accept a pointer to the nvlist's internal buffer. */ -command = nvlist_get_string(nvl, "command"); - -/* - * For filename we remove it from the nvlist and take - * ownership of the buffer. - */ -filename = nvlist_take_string(nvl, "filename"); - -/* The same for the file descriptor. */ -fd = nvlist_take_descriptor(nvl, "fd"); - -printf("command=%s filename=%s fd=%d0, command, filename, fd); - -/* command is freed by nvlist_destroy() */ -nvlist_destroy(nvl); -free(filename); -close(fd);</pre> -</div> -<p class="Pp">Iterating over an nvlist:</p> -<div class="Bd Pp Li"> -<pre>nvlist_t *nvl; -const char *name; -void *cookie; -int type; - -nvl = nvlist_recv(sock, 0); -if (nvl == NULL) - err(1, "nvlist_recv() failed"); - -cookie = NULL; -while ((name = nvlist_next(nvl, &type, &cookie)) != NULL) { - printf("%s=", name); - switch (type) { - case NV_TYPE_NUMBER: - printf("%ju", (uintmax_t)nvlist_get_number(nvl, name)); - break; - case NV_TYPE_STRING: - printf("%s", nvlist_get_string(nvl, name)); - break; - default: - printf("N/A"); - break; - } - printf("\n"); -}</pre> -</div> -<p class="Pp">Iterating over every nested nvlist:</p> -<div class="Bd Pp Li"> -<pre>nvlist_t *nvl; -const char *name; -void *cookie; -int type; - -nvl = nvlist_recv(sock, 0); -if (nvl == NULL) - err(1, "nvlist_recv() failed"); - -cookie = NULL; -do { - while ((name = nvlist_next(nvl, &type, &cookie)) != NULL) { - if (type == NV_TYPE_NVLIST) { - nvl = nvlist_get_nvlist(nvl, name); - cookie = NULL; - } - } -} while ((nvl = nvlist_get_parent(nvl, &cookie)) != NULL);</pre> -</div> -<p class="Pp">Iterating over every nested nvlist and every nvlist element:</p> -<div class="Bd Pp Li"> -<pre>nvlist_t *nvl; -const nvlist_t * const *array; -const char *name; -void *cookie; -int type; - -nvl = nvlist_recv(sock, 0); -if (nvl == null) - err(1, "nvlist_recv() failed"); - -cookie = NULL; -do { - while ((name = nvlist_next(nvl, &type, &cookie)) != NULL) { - if (type == NV_TYPE_NVLIST) { - nvl = nvlist_get_nvlist(nvl, name); - cookie = NULL; - } else if (type == NV_TYPE_NVLIST_ARRAY) { - nvl = nvlist_get_nvlist_array(nvl, name, NULL)[0]; - cookie = NULL; - } - } -} while ((nvl = nvlist_get_pararr(nvl, &cookie)) != NULL);</pre> -</div> -<p class="Pp">Or alternatively:</p> -<div class="Bd Pp Li"> -<pre>nvlist_t *nvl, *tmp; -const nvlist_t * const *array; -const char *name; -void *cookie; -int type; - -nvl = nvlist_recv(sock, 0); -if (nvl == null) - err(1, "nvlist_recv() failed"); - -cooke = NULL; -tmp = nvl; -do { - do { - nvl = tmp; - while ((name = nvlist_next(nvl, &type, &cookie)) != NULL) { - if (type == NV_TYPE_NVLIST) { - nvl = nvlist_get_nvlist(nvl, name); - cookie = NULL; - } else if (type == NV_TYPE_NVLIST_ARRAY) { - nvl = nvlist_get_nvlist_array(nvl, name, - NULL)[0]; - cookie = NULL; - } - } - cookie = NULL; - } while ((tmp = nvlist_get_array_next(nvl)) != NULL); -} while ((tmp = nvlist_get_parent(nvl, &cookie)) != NULL);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">close(2)</a>, <a class="Xr">dup(2)</a>, - <a class="Xr">open(2)</a>, <a class="Xr">err(3)</a>, - <a class="Xr">free(3)</a>, <a class="Xr">printf(3)</a>, - <a class="Xr">unix(4)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">libnv</code> library appeared in - <span class="Ux">FreeBSD 11.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">libnv</code> library was implemented by - <span class="An">Pawel Jakub Dawidek</span> - <<a class="Mt" href="mailto:pawel@dawidek.net">pawel@dawidek.net</a>> - under sponsorship from the FreeBSD Foundation.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 3, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/nvmem.9 3.html b/static/freebsd/man9/nvmem.9 3.html deleted file mode 100644 index 291f9867..00000000 --- a/static/freebsd/man9/nvmem.9 3.html +++ /dev/null @@ -1,192 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">nvmem(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">nvmem(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">nvmem</code>, - <code class="Nm">nvmem_get_cell_len</code>, - <code class="Nm">nvmem_read_cell_by_name</code>, - <code class="Nm">nvmem_read_cell_by_idx</code>, - <code class="Nm">nvmem_write_cell_by_name</code>, - <code class="Nm">nvmem_write_cell_by_idx</code></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="Cd">options FDT</code> - <br/> - <code class="Cd">device nvmem</code> - <br/> - <code class="In">#include - <<a class="In">sys/extres/nvmem/nvmem.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">nvmem_get_cell_len</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">nvmem_read_cell_by_name</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">void *cell</var>, - <var class="Fa" style="white-space: nowrap;">size_t buflen</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">nvmem_read_cell_by_idx</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>, <var class="Fa" style="white-space: nowrap;">int idx</var>, - <var class="Fa" style="white-space: nowrap;">void *cell</var>, - <var class="Fa" style="white-space: nowrap;">size_t buflen</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">nvmem_write_cell_by_name</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">void *cell</var>, - <var class="Fa" style="white-space: nowrap;">size_t buflen</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">nvmem_write_cell_by_idx</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>, <var class="Fa" style="white-space: nowrap;">int idx</var>, - <var class="Fa" style="white-space: nowrap;">void *cell</var>, - <var class="Fa" style="white-space: nowrap;">size_t buflen</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">On some embedded boards, the manufacturer stored some data on a - NVMEM (Non-Volatile Memory), this is generally stored in some eeprom or - fuses.</p> -<p class="Pp">The <code class="Nm">nvmem</code> API consist of helpers functions - for consumer and device methods for providers.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="FUNCTIONS"><a class="permalink" href="#FUNCTIONS">FUNCTIONS</a></h1> -<dl class="Bl-tag"> - <dt id="nvmem_get_cell_len"><a class="permalink" href="#nvmem_get_cell_len"><code class="Fn">nvmem_get_cell_len</code></a>(<var class="Fa">phandle_t - node</var>, <var class="Fa">const char *name</var>)</dt> - <dd>Get the size of the cell base on the reg property on the node. Return the - size or ENOENT if the cell name wasn't found</dd> - <dt id="nvmem_read_cell_by_name"><a class="permalink" href="#nvmem_read_cell_by_name"><code class="Fn">nvmem_read_cell_by_name</code></a>(<var class="Fa">phandle_t - node</var>, <var class="Fa">const char *name</var>, <var class="Fa">void - *cell</var>, <var class="Fa">size_t buflen</var>)</dt> - <dd>Get the cell content based on the name. Return 0 on success or ENOENT if - the cell doesn't exists, ENXIO if no provider device was found, EINVAL if - the size isn't correct.</dd> - <dt id="nvmem_read_cell_by_idx"><a class="permalink" href="#nvmem_read_cell_by_idx"><code class="Fn">nvmem_read_cell_by_idx</code></a>(<var class="Fa">phandle_t - node</var>, <var class="Fa">int idx</var>, <var class="Fa">void *cell</var>, - <var class="Fa">size_t buflen</var>)</dt> - <dd>Get the cell content based on the id. Return 0 on success or ENOENT if the - cell doesn't exists, ENXIO if no provider device was found, EINVAL if the - size isn't correct.</dd> - <dt id="nvmem_write_cell_by_name"><a class="permalink" href="#nvmem_write_cell_by_name"><code class="Fn">nvmem_write_cell_by_name</code></a>(<var class="Fa">phandle_t - node</var>, <var class="Fa">const char *name</var>, <var class="Fa">void - *cell</var>, <var class="Fa">size_t buflen</var>)</dt> - <dd>Write the cell content based on the name. Return 0 on success or ENOENT if - the cell doesn't exists, ENXIO if no provider device was found, EINVAL if - the size isn't correct.</dd> - <dt id="nvmem_write_cell_by_idx"><a class="permalink" href="#nvmem_write_cell_by_idx"><code class="Fn">nvmem_write_cell_by_idx</code></a>(<var class="Fa">phandle_t - node</var>, <var class="Fa">int idx</var>, <var class="Fa">void *cell</var>, - <var class="Fa">size_t buflen</var>)</dt> - <dd>Write the cell content based on the id. Return 0 on success or ENOENT if - the cell doesn't exists, ENXIO if no provider device was found, EINVAL if - the size isn't correct.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="DEVICE_METHODS"><a class="permalink" href="#DEVICE_METHODS">DEVICE - METHODS</a></h1> -<dl class="Bl-tag"> - <dt id="nvmem_read"><a class="permalink" href="#nvmem_read"><code class="Fn">nvmem_read</code></a>(<var class="Fa">device_t - dev</var>, <var class="Fa">uint32_t offset</var>, <var class="Fa">uint32_t - size</var>, <var class="Fa">uint8_t *buffer</var>)</dt> - <dd>Provider device method to read a cell content.</dd> - <dt id="nvmem_write"><a class="permalink" href="#nvmem_write"><code class="Fn">nvmem_write</code></a>(<var class="Fa">device_t - dev</var>, <var class="Fa">uint32_t offset</var>, <var class="Fa">uint32_t - size</var>, <var class="Fa">uint8_t *buffer</var>)</dt> - <dd>Provider device method to write a cell content.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">Consider this DTS</p> -<div class="Bd Pp Li"> -<pre>/* Provider */ -eeprom: eeprom@20000 { - board_id: id@0 { - reg = <0x0 0x4>; - }; -}; -/* Consumer */ -device@30000 { - ... - - nvmem-cells = <&board_id> - nvmem-cell-names = "boardid"; -};</pre> -</div> -<p class="Pp">The device driver for eeprom@20000 needs to expose itself as a - provider</p> -<div class="Bd Pp Li"> -<pre>#include "nvmem_if.h" - -int -foo_nvmem_read(device_t dev, uint32_t offset, uint32_t size, uint8_t *buffer) -{ - /* Read the data */ -} - -int -foo_attach(device_t dev) -{ - phandle_t node; - - node = ofw_bus_get_node(dev); - ... - /* Registering the device so the consumers can find us */ - OF_device_register_xref(OF_xref_from_node(node), dev); - - ... -} - -static device_method_t foo_methods[] = { - ... - - /* nvmem interface */ - DEVMETHOD(nvmem_read, foo_nvmem_read), - - /* Terminate method list */ - DEVMETHOD_END -};</pre> -</div> -<p class="Pp">The consumer device driver for device@30000 can now read the nvmem - data</p> -<div class="Bd Pp Li"> -<pre>int -bar_attach(device_t dev) -{ - phandle_t node; - uint32_t boardid; - - ... - node = ofw_bus_get_node(dev); - nvmem_read_cell_by_name(node, "boardid", (void *)&boardid, sizeof(boardid)); - ... -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The nvmem related function first appear in - <span class="Ux">FreeBSD 12.0</span>. The nvmem interface and manual page - was written by <span class="An">Emmanuel Vadot</span> - <<a class="Mt" href="mailto:manu@FreeBSD.org">manu@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 24, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ofw_bus_is_compatible.9 3.html b/static/freebsd/man9/ofw_bus_is_compatible.9 3.html deleted file mode 100644 index 55f3b28c..00000000 --- a/static/freebsd/man9/ofw_bus_is_compatible.9 3.html +++ /dev/null @@ -1,138 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">ofw_bus_is_compatible(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">ofw_bus_is_compatible(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">ofw_bus_is_compatible</code>, - <code class="Nm">ofw_bus_is_compatible_strict</code>, - <code class="Nm">ofw_bus_node_is_compatible</code>, - <code class="Nm">ofw_bus_search_compatible</code> — - <span class="Nd">check device tree nodes for compatibility with - drivers</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">dev/ofw/openfirm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">dev/ofw/ofw_bus.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">dev/ofw/ofw_bus_subr.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ofw_bus_is_compatible</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">const char - *compatstr</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ofw_bus_is_compatible_strict</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">const char - *compatstr</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ofw_bus_node_is_compatible</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>, <var class="Fa" style="white-space: nowrap;">const char - *compatstr</var>);</p> -<p class="Pp"><var class="Ft">const struct ofw_compat_data *</var> - <br/> - <code class="Fn">ofw_bus_search_compatible</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">const struct - ofw_compat_data *compat</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The "compatible" property of the device tree node is - used to identify the type of the device the node represents. The property is - a list of one or more strings that represent hardware types the device is - compatible with. The common format for such strings is - "vendor,hardware" where "vendor" is an abbreviated name - of the manufacturer and "hardware" is a device identifier, for - instance, "fsl" for "Freescale" and - "imx6ul-i2c" for the I2C controller. More than one string is - required for compatibility with older revisions of the driver. If hardware - revision B is backward compatible with revision A device tree node can - signal this compatibility by providing both "vndr,hrdwrA" and - "vndr,hrdwrB" strings in the "compatible" property - value. This way older driver can use features available only in revision A, - and the new version of the driver can take advantage of revision B feature - set.</p> -<p class="Pp" id="ofw_bus_is_compatible"><a class="permalink" href="#ofw_bus_is_compatible"><code class="Fn">ofw_bus_is_compatible</code></a>() - returns 1 if the <var class="Fa">compatstr</var> value occurs in the - "compatible" property list of the device tree node associated with - the device <var class="Fa">dev</var>, and 0 otherwise.</p> -<p class="Pp" id="ofw_bus_is_compatible_strict"><a class="permalink" href="#ofw_bus_is_compatible_strict"><code class="Fn">ofw_bus_is_compatible_strict</code></a>() - return 1 if the "compatible" property of the device tree node - associated with the device <var class="Fa">dev</var> consists of only one - string and this string is equal to <var class="Fa">compatstr</var>, and 0 - otherwise.</p> -<p class="Pp" id="ofw_bus_node_is_compatible"><a class="permalink" href="#ofw_bus_node_is_compatible"><code class="Fn">ofw_bus_node_is_compatible</code></a>() - returns 1 if the <var class="Fa">compatstr</var> value occurs in the - "compatible" property list of the device tree node - <var class="Fa">node</var>, and 0 otherwise.</p> -<p class="Pp" id="ofw_bus_search_compatible"><a class="permalink" href="#ofw_bus_search_compatible"><code class="Fn">ofw_bus_search_compatible</code></a>() - returns pointer to the first entry of the <var class="Fa">compat</var> table - whose ocd_str field occurs in "compatible" property of the device - tree node associated with the device <var class="Fa">dev</var>. The - <var class="Fa">compat</var> table is an array of struct ofw_compat_data - elements defined as follows:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct ofw_compat_data { - const char *ocd_str; - uintptr_t ocd_data; -};</pre> -</div> -The <var class="Fa">compat</var> table must be terminated by the entry with - ocd_str set to NULL. If the device tree node is not compatible with any of the - entries, the function returns the pointer to the terminating entry. -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<div class="Bd Bd-indent Li"> -<pre>static struct ofw_compat_data compat_data[] = { - {"arm,hrdwrA", FEATURE_A}, - {"arm,hrdwrB", FEATURE_A | FEATURE_B}, - {NULL, 0} -}; - -static int -hrdwr_probe(device_t dev) -{ - ... - if (!ofw_bus_search_compatible(dev, compat_data)->ocd_data) - return (ENXIO); - ... -} - -static int -hrdwr_attach(device_t dev) -{ - ... - sc = device_get_softc(dev); - sc->sc_features = ofw_bus_search_compatible(dev, compat_data)->ocd_data; - ... -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ofw_bus_find_compatible(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Oleksandr - Tymoshenko</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 8, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ofw_bus_status_okay.9 4.html b/static/freebsd/man9/ofw_bus_status_okay.9 4.html deleted file mode 100644 index 4134ab44..00000000 --- a/static/freebsd/man9/ofw_bus_status_okay.9 4.html +++ /dev/null @@ -1,72 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">ofw_bus_status_okay(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">ofw_bus_status_okay(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">ofw_bus_get_status</code>, - <code class="Nm">ofw_bus_status_okay</code>, - <code class="Nm">ofw_bus_node_status_okay</code> — - <span class="Nd">check status of the device tree node</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">dev/ofw/openfirm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">dev/ofw/ofw_bus.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">dev/ofw/ofw_bus_subr.h</a>></code></p> -<p class="Pp"><var class="Ft">const char *</var> - <br/> - <code class="Fn">ofw_bus_get_status</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ofw_bus_status_okay</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ofw_bus_node_status_okay</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The "status" property of the device tree node indicates - whether the device is enabled or not. Multiple hardware versions might be - built using the same base System-on-Chip but with a different set of blocks - enabled. It is common to use SoC device tree and only enable/disable device - nodes for the derivative boards. The device tree node is considered enabled - only if it has "status" property with the value set to either - "ok" or "okay".</p> -<p class="Pp" id="ofw_bus_get_status"><a class="permalink" href="#ofw_bus_get_status"><code class="Fn">ofw_bus_get_status</code></a>() - returns the value of the "status" property of the device tree node - associated with the device <var class="Fa">dev</var>. If the node does not - have "status" property or there is no node associated with the - device the function returns NULL.</p> -<p class="Pp" id="ofw_bus_status_okay"><a class="permalink" href="#ofw_bus_status_okay"><code class="Fn">ofw_bus_status_okay</code></a>() - returns 1 if the device tree node associated with the device - <var class="Fa">dev</var> has "status" property and its value is - either "ok" or "okay".</p> -<p class="Pp" id="ofw_bus_node_status_okay"><a class="permalink" href="#ofw_bus_node_status_okay"><code class="Fn">ofw_bus_node_status_okay</code></a>() - returns 1 if the device tree node <var class="Fa">node</var> has - "status" property and its value is either "ok" or - "okay".</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Oleksandr - Tymoshenko</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 8, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ofw_graph.9 4.html b/static/freebsd/man9/ofw_graph.9 4.html deleted file mode 100644 index 3f04803c..00000000 --- a/static/freebsd/man9/ofw_graph.9 4.html +++ /dev/null @@ -1,99 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">ofw_graph(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">ofw_graph(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">ofw_graph</code>, - <code class="Nm">ofw_graph_get_port_by_idx</code>, - <code class="Nm">ofw_graph_port_get_num_endpoints</code>, - <code class="Nm">ofw_graph_get_endpoint_by_idx</code>, - <code class="Nm">ofw_graph_get_remote_endpoint</code>, - <code class="Nm">ofw_graph_get_remote_parent</code>, - <code class="Nm">ofw_graph_get_device_by_port_ep</code> — - <span class="Nd">Helpers for the graph bindings</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">dev/ofw/openfirm.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">dev/ofw/ofw_graph.h</a>></code></p> -<p class="Pp"><var class="Ft">phandle_t</var> - <br/> - <code class="Fn">ofw_graph_get_port_by_idx</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - idx</var>);</p> -<p class="Pp"><var class="Ft">size_t</var> - <br/> - <code class="Fn">ofw_graph_port_get_num_endpoints</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - port</var>);</p> -<p class="Pp"><var class="Ft">phandle_t</var> - <br/> - <code class="Fn">ofw_graph_get_endpoint_by_idx</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - port</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - idx</var>);</p> -<p class="Pp"><var class="Ft">phandle_t</var> - <br/> - <code class="Fn">ofw_graph_get_remote_endpoint</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - endpoint</var>);</p> -<p class="Pp"><var class="Ft">phandle_t</var> - <br/> - <code class="Fn">ofw_graph_get_remote_parent</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - remote</var>);</p> -<p class="Pp"><var class="Ft">device_t</var> - <br/> - <code class="Fn">ofw_graph_get_device_by_port_ep</code>(<var class="Fa" style="white-space: nowrap;">phandle_t - node</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - port_id</var>, <var class="Fa" style="white-space: nowrap;">uin32_t - ep_id</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The ofw_graph functions are helpers to parse the DTS graph - bindings</p> -<p class="Pp" id="ofw_graph_get_port_by_idx"><a class="permalink" href="#ofw_graph_get_port_by_idx"><code class="Fn">ofw_graph_get_port_by_idx</code></a>() - return the port with id <var class="Fa">idx</var>. It will first check node - named <var class="Fa">port@idx</var> and then fallback on checking the - <var class="Fa">ports</var> child for a child node matching the id. If no - ports matching <var class="Fa">idx</var> is found the function return 0.</p> -<p class="Pp" id="ofw_graph_port_get_num_endpoints"><a class="permalink" href="#ofw_graph_port_get_num_endpoints"><code class="Fn">ofw_graph_port_get_num_endpoints</code></a>() - returns the number of endpoints a port node have.</p> -<p class="Pp" id="ofw_graph_get_endpoint_by_idx"><a class="permalink" href="#ofw_graph_get_endpoint_by_idx"><code class="Fn">ofw_graph_get_endpoint_by_idx</code></a>() - return the endpoint with id <var class="Fa">idx</var>. It will first check - if there is a single child named <var class="Fa">endpoint</var> and returns - it if there is. If there is multiple endpoints it will check the - <var class="Fa">reg</var> property and returns the correct - <var class="Fa">phandle_t</var> or 0 if none match.</p> -<p class="Pp" id="ofw_graph_get_remote_endpoint"><a class="permalink" href="#ofw_graph_get_remote_endpoint"><code class="Fn">ofw_graph_get_remote_endpoint</code></a>() - returns the <var class="Fa">remote-endpoint</var> property if it exists or - 0.</p> -<p class="Pp" id="ofw_graph_get_remote_parent"><a class="permalink" href="#ofw_graph_get_remote_parent"><code class="Fn">ofw_graph_get_remote_parent</code></a>() - returns the device node corresponding to the - <var class="Fa">remote-endpoint</var> phandle or 0 if none. - <a class="permalink" href="#ofw_graph_get_device_by_port_ep"><code class="Fn" id="ofw_graph_get_device_by_port_ep">ofw_graph_get_device_by_port_ep</code></a>() - returns the device associated with the port and endpoint or - <var class="Fa">NULL</var> if none. The device driver should have called - <a class="permalink" href="#OF_device_register_xref"><code class="Fn" id="OF_device_register_xref">OF_device_register_xref</code></a>() - before.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">ofw_graph</code> functions first appeared in - <span class="Ux">FreeBSD 13.0</span>. The <code class="Nm">ofw_graph</code> - functions and manual page were written by <span class="An">Emmanuel - Vadot</span> - <<a class="Mt" href="mailto:manu@FreeBSD.org">manu@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 10, 2019</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/osd.9 4.html b/static/freebsd/man9/osd.9 4.html deleted file mode 100644 index 622db548..00000000 --- a/static/freebsd/man9/osd.9 4.html +++ /dev/null @@ -1,307 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">OSD(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">OSD(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">osd</code>, <code class="Nm">osd_register</code>, - <code class="Nm">osd_deregister</code>, <code class="Nm">osd_set</code>, - <code class="Nm">osd_reserve</code>, - <code class="Nm">osd_set_reserved</code>, - <code class="Nm">osd_free_reserved</code>, <code class="Nm">osd_get</code>, - <code class="Nm">osd_del</code>, <code class="Nm">osd_call</code>, - <code class="Nm">osd_exit</code> — <span class="Nd">Object Specific - Data</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/osd.h</a>></code></p> -<p class="Pp"><var class="Ft">typedef void</var> - <br/> - <code class="Fn">(*osd_destructor_t)</code>(<var class="Fa" style="white-space: nowrap;">void - *value</var>);</p> -<p class="Pp"><var class="Ft">typedef int</var> - <br/> - <code class="Fn">(*osd_method_t)</code>(<var class="Fa" style="white-space: nowrap;">void - *obj</var>, <var class="Fa" style="white-space: nowrap;">void - *data</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">osd_register</code>(<var class="Fa">u_int type</var>, - <var class="Fa">osd_destructor_t destructor</var>, <var class="Fa">const - osd_method_t *methods</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">osd_deregister</code>(<var class="Fa">u_int type</var>, - <var class="Fa">u_int slot</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">osd_set</code>(<var class="Fa">u_int type</var>, - <var class="Fa">struct osd *osd</var>, <var class="Fa">u_int slot</var>, - <var class="Fa">void *value</var>);</p> -<p class="Pp"><var class="Ft">void **</var> - <br/> - <code class="Fn">osd_reserve</code>(<var class="Fa">u_int slot</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">osd_set_reserved</code>(<var class="Fa">u_int type</var>, - <var class="Fa">struct osd *osd</var>, <var class="Fa">u_int slot</var>, - <var class="Fa">void **rsv</var>, <var class="Fa">void *value</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">osd_free_reserved</code>(<var class="Fa">void - **rsv</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">osd_get</code>(<var class="Fa">u_int type</var>, - <var class="Fa">struct osd *osd</var>, <var class="Fa">u_int - slot</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">osd_del</code>(<var class="Fa">u_int type</var>, - <var class="Fa">struct osd *osd</var>, <var class="Fa">u_int - slot</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">osd_call</code>(<var class="Fa">u_int type</var>, - <var class="Fa">u_int method</var>, <var class="Fa">void *obj</var>, - <var class="Fa">void *data</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">osd_exit</code>(<var class="Fa">u_int type</var>, - <var class="Fa">struct osd *osd</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">osd</code> framework provides a mechanism to - dynamically associate arbitrary data at run-time with any kernel data - structure which has been suitably modified for use with - <code class="Nm">osd</code>. The one-off modification required involves - embedding a <var class="Vt">struct osd</var> inside the kernel data - structure.</p> -<p class="Pp">An additional benefit is that after the initial change to a - structure is made, all subsequent use of <code class="Nm">osd</code> with - the structure involves no changes to the structure's layout. By extension, - if the data structure is part of the ABI, <code class="Nm">osd</code> - provides a way of extending the structure in an ABI preserving manner.</p> -<p class="Pp">The details of the embedded <var class="Vt">struct osd</var> are - not relevant to consumers of the <code class="Nm">osd</code> framework and - should not be manipulated directly.</p> -<p class="Pp" id="osd_register">Data associated with a structure is referenced - by the <code class="Nm">osd</code> framework using a type/slot identifier - pair. Types are statically defined in - <code class="In"><<a class="In">sys/osd.h</a>></code> and provide a - high-level grouping for slots to be registered under. Slot identifiers are - dynamically assigned by the framework when a data type is registered using - <a class="permalink" href="#osd_register"><code class="Fn">osd_register</code></a>() - and remains valid until a corresponding call to - <code class="Fn">osd_deregister</code>().</p> -<section class="Ss"> -<h2 class="Ss" id="Functions"><a class="permalink" href="#Functions">Functions</a></h2> -<p class="Pp">The <code class="Fn">osd_register</code>() function registers a - type/slot identifier pair with the <code class="Nm">osd</code> framework for - use with a new data type. The function may sleep and therefore cannot be - called from a non-sleepable context. The <var class="Fa">type</var> argument - specifies which high-level type grouping from - <code class="In"><<a class="In">sys/osd.h</a>></code> the slot - identifier should be allocated under. The <var class="Fa">destructor</var> - argument specifies an optional osd_destructor_t function pointer that will - be called for objects of the type being registered which are later destroyed - by the <code class="Fn">osd_del</code>() function. NULL may be passed if no - destructor is required. The <var class="Fa">methods</var> argument specifies - an optional array of osd_method_t function pointers which can be later - invoked by the <code class="Fn">osd_call</code>() function. NULL may be - passed if no methods are required. The <var class="Fa">methods</var> - argument is currently only useful with the OSD_JAIL type identifier.</p> -<p class="Pp" id="osd_deregister">The - <a class="permalink" href="#osd_deregister"><code class="Fn">osd_deregister</code></a>() - function deregisters a previously registered type/slot identifier pair. The - function may sleep and therefore cannot be called from a non-sleepable - context. The <var class="Fa">type</var> argument specifies which high-level - type grouping from - <code class="In"><<a class="In">sys/osd.h</a>></code> the slot - identifier is allocated under. The <var class="Fa">slot</var> argument - specifies the slot identifier which is being deregistered and should be the - value that was returned by <code class="Fn">osd_register</code>() when the - data type was registered.</p> -<p class="Pp" id="osd_set">The - <a class="permalink" href="#osd_set"><code class="Fn">osd_set</code></a>() - function associates a data object pointer with a kernel data structure's - <var class="Vt">struct osd</var> member. The <var class="Fa">type</var> - argument specifies which high-level type grouping from - <code class="In"><<a class="In">sys/osd.h</a>></code> the slot - identifier is allocated under. The <var class="Fa">osd</var> argument is a - pointer to the kernel data structure's <var class="Vt">struct osd</var> - which will have the <var class="Fa">value</var> pointer associated with it. - The <var class="Fa">slot</var> argument specifies the slot identifier to - assign the <var class="Fa">value</var> pointer to. The - <var class="Fa">value</var> argument points to a data object to associate - with <var class="Fa">osd</var>.</p> -<p class="Pp" id="osd_set_reserved">The - <a class="permalink" href="#osd_set_reserved"><code class="Fn">osd_set_reserved</code></a>() - function does the same as <code class="Fn">osd_set</code>(), but with an - extra argument <var class="Fa">rsv</var> that is internal-use memory - previously allocated via - <a class="permalink" href="#osd_reserve"><code class="Fn" id="osd_reserve">osd_reserve</code></a>().</p> -<p class="Pp" id="osd_get">The - <a class="permalink" href="#osd_get"><code class="Fn">osd_get</code></a>() - function returns the data pointer associated with a kernel data structure's - <var class="Vt">struct osd</var> member from the specified type/slot - identifier pair. The <var class="Fa">type</var> argument specifies which - high-level type grouping from - <code class="In"><<a class="In">sys/osd.h</a>></code> the slot - identifier is allocated under. The <var class="Fa">osd</var> argument is a - pointer to the kernel data structure's <var class="Vt">struct osd</var> to - retrieve the data pointer from. The <var class="Fa">slot</var> argument - specifies the slot identifier to retrieve the data pointer from.</p> -<p class="Pp" id="osd_del">The - <a class="permalink" href="#osd_del"><code class="Fn">osd_del</code></a>() - function removes the data pointer associated with a kernel data structure's - <var class="Vt">struct osd</var> member from the specified type/slot - identifier pair. The <var class="Fa">type</var> argument specifies which - high-level type grouping from - <code class="In"><<a class="In">sys/osd.h</a>></code> the slot - identifier is allocated under. The <var class="Fa">osd</var> argument is a - pointer to the kernel data structure's <var class="Vt">struct osd</var> to - remove the data pointer from. The <var class="Fa">slot</var> argument - specifies the slot identifier to remove the data pointer from. If an - osd_destructor_t function pointer was specified at registration time, the - destructor function will be called and passed the data pointer for the - type/slot identifier pair which is being deleted.</p> -<p class="Pp" id="osd_call">The - <a class="permalink" href="#osd_call"><code class="Fn">osd_call</code></a>() - function calls the specified osd_method_t function pointer for all currently - registered slots of a given type on the specified <var class="Fa">obj</var> - and <var class="Fa">data</var> pointers. The function may sleep and - therefore cannot be called from a non-sleepable context. The - <var class="Fa">type</var> argument specifies which high-level type grouping - from <code class="In"><<a class="In">sys/osd.h</a>></code> to call the - method for. The <var class="Fa">method</var> argument specifies the index - into the osd_method_t array that was passed to - <code class="Fn">osd_register</code>(). The <var class="Fa">obj</var> and - <var class="Fa">data</var> arguments are passed to the method function - pointer of each slot.</p> -<p class="Pp" id="osd_exit">The - <a class="permalink" href="#osd_exit"><code class="Fn">osd_exit</code></a>() - function removes all data object pointers from all currently registered - slots for a given type for the specified kernel data structure's - <var class="Vt">struct osd</var> member. The <var class="Fa">type</var> - argument specifies which high-level type grouping from - <code class="In"><<a class="In">sys/osd.h</a>></code> to remove data - pointers from. The <var class="Fa">osd</var> argument is a pointer to the - kernel data structure's <var class="Vt">struct osd</var> to remove all data - object pointers for all currently registered slots from.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp"><code class="Nm">osd</code> uses a two dimensional matrix (array - of arrays) as the data structure to manage the external data associated with - a kernel data structure's <var class="Vt">struct osd</var> member. The type - identifier is used as the index into the outer array, and the slot - identifier is used as the index into the inner array. To set or retrieve a - data pointer for a given type/slot identifier pair, - <code class="Fn">osd_set</code>() and <code class="Fn">osd_get</code>() - perform the equivalent of array[type][slot], which is both constant time and - fast.</p> -<p class="Pp">If <code class="Fn">osd_set</code>() is called on a - <var class="Vt">struct osd</var> for the first time, the array for storing - data pointers is dynamically allocated using <a class="Xr">malloc(9)</a> - with M_NOWAIT to a size appropriate for the slot identifier being set. If a - subsequent call to <code class="Fn">osd_set</code>() attempts to set a slot - identifier which is numerically larger than the slot used in the previous - <code class="Fn">osd_set</code>() call, <a class="Xr">realloc(9)</a> is used - to grow the array to the appropriate size such that the slot identifier can - be used. To maximise the efficiency of any code which calls - <code class="Fn">osd_set</code>() sequentially on a number of different slot - identifiers (e.g., during an initialisation phase) one should loop through - the slot identifiers in descending order from highest to lowest. This will - result in only a single <a class="Xr">malloc(9)</a> call to create an array - of the largest slot size and all subsequent calls to - <code class="Fn">osd_set</code>() will proceed without any - <a class="Xr">realloc(9)</a> calls.</p> -<p class="Pp">It is possible for <code class="Fn">osd_set</code>() to fail to - allocate this array. To ensure that such allocation succeeds, - <code class="Fn">osd_reserve</code>() may be called (in a non-blocking - context), and it will pre-allocate the memory via - <a class="Xr">malloc(9)</a> with M_WAITOK. Then this pre-allocated memory is - passed to <code class="Fn">osd_set_reserved</code>(), which will use it if - necessary or otherwise discard it. The memory may also be explicitly - discarded by calling <code class="Fn">osd_free_reserved</code>(). As this - method always allocates memory whether or not it is ultimately needed, it - should be used only rarely, such as in the unlikely event that - <code class="Fn">osd_set</code>() fails.</p> -<p class="Pp">The <code class="Nm">osd</code> API is geared towards slot - identifiers storing pointers to the same underlying data structure type for - a given <code class="Nm">osd</code> type identifier. This is not a - requirement, and <a class="Xr">khelp(9)</a> for example stores completely - different data types in slots under the OSD_KHELP type identifier.</p> -<section class="Ss"> -<h2 class="Ss" id="Locking"><a class="permalink" href="#Locking">Locking</a></h2> -<p class="Pp"><code class="Nm">osd</code> internally uses a mix of - <a class="Xr">mutex(9)</a>, <a class="Xr">rmlock(9)</a> and - <a class="Xr">sx(9)</a> locks to protect its internal data structures and - state.</p> -<p class="Pp">Responsibility for synchronising access to a kernel data - structure's <var class="Vt">struct osd</var> member is left to the subsystem - that uses the data structure and calls the <code class="Nm">osd</code> - API.</p> -<p class="Pp"><code class="Fn">osd_get</code>() only acquires an - <a class="Xr">rmlock(9)</a> in read mode, therefore making it safe to use in - the majority of contexts within the kernel including most fast paths.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp"><code class="Fn">osd_register</code>() returns the slot identifier - for the newly registered data type.</p> -<p class="Pp"><code class="Fn">osd_set</code>() and - <code class="Fn">osd_set_reserved</code>() return zero on success or ENOMEM - if the specified type/slot identifier pair triggered an internal - <a class="Xr">realloc(9)</a> which failed - (<code class="Fn">osd_set_reserved</code>() will always succeed when - <var class="Fa">rsv</var> is non-NULL).</p> -<p class="Pp"><code class="Fn">osd_get</code>() returns the data pointer for the - specified type/slot identifier pair, or NULL if the slot has not been - initialised yet.</p> -<p class="Pp"><code class="Fn">osd_reserve</code>() returns a pointer suitable - for passing to <code class="Fn">osd_set_reserved</code>() or - <code class="Fn">osd_free_reserved</code>().</p> -<p class="Pp"><code class="Fn">osd_call</code>() returns zero if no method is - run or the method for each slot runs successfully. If a method for a slot - returns non-zero, <code class="Fn">osd_call</code>() terminates prematurely - and returns the method's error to the caller.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">khelp(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The Object Specific Data (OSD) facility first appeared in - <span class="Ux">FreeBSD 8.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">osd</code> facility was written by - <span class="An">Pawel Jakub Dawidek</span> - <<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>>.</p> -<p class="Pp">This manual page was written by <span class="An">Lawrence - Stewart</span> - <<a class="Mt" href="mailto:lstewart@FreeBSD.org">lstewart@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 7, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/owll.9 4.html b/static/freebsd/man9/owll.9 4.html deleted file mode 100644 index 4c2a7efb..00000000 --- a/static/freebsd/man9/owll.9 4.html +++ /dev/null @@ -1,95 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">OWLL(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">OWLL(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">owll</code>, - <code class="Nm">OWLL_WRITE_ONE</code>, - <code class="Nm">OWLL_WRITE_ZERO</code>, - <code class="Nm">OWLL_READ_DATA</code>, - <code class="Nm">OWLL_REASET_AND_PRESENCE</code> — - <span class="Nd">Dallas Semiconductor 1-Wire Link Layer Interface</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">OWLL_WRITE_ONE</code>(<var class="Fa" style="white-space: nowrap;">device_t - lldev</var>, <var class="Fa" style="white-space: nowrap;">struct ow_timing - *timing</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">OWLL_WRITE_ZERO</code>(<var class="Fa" style="white-space: nowrap;">device_t - lldev</var>, <var class="Fa" style="white-space: nowrap;">struct ow_timing - *timing</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">OWLL_READ_DATA</code>(<var class="Fa" style="white-space: nowrap;">device_t - lldev</var>, <var class="Fa" style="white-space: nowrap;">struct ow_timing - *timing</var>, <var class="Fa" style="white-space: nowrap;">int - *bit</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">OWLL_RESET_AND_PRESENCE</code>(<var class="Fa" style="white-space: nowrap;">device_t - lldev</var>, <var class="Fa" style="white-space: nowrap;">struct ow_timing - *timing</var>, <var class="Fa" style="white-space: nowrap;">int - *bit</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">owll</code> interface provides access to the - link layer of the Dallas Semiconductor 1-Wire from upper layers of the - protocol.</p> -<p class="Pp" id="OWLL_WRITE_ONE"><a class="permalink" href="#OWLL_WRITE_ONE"><code class="Fn">OWLL_WRITE_ONE</code></a>() - and - <a class="permalink" href="#OWLL_WRITE_ZERO"><code class="Fn" id="OWLL_WRITE_ZERO">OWLL_WRITE_ZERO</code></a>() - writes a one bit or a zero bit respectively on the 1-Wire bus.</p> -<p class="Pp" id="OWLL_READ_DATA"><a class="permalink" href="#OWLL_READ_DATA"><code class="Fn">OWLL_READ_DATA</code></a>() - reads one bit from the 1-Wire bus. This is often referred to as a - “Read Time Slot” in the 1-Wire device data sheets.</p> -<p class="Pp" id="OWLL_RESET_AND_PRESENCE">The - <a class="permalink" href="#OWLL_RESET_AND_PRESENCE"><code class="Fn">OWLL_RESET_AND_PRESENCE</code></a>() - function starts a reset sequence and detects if any device(s) are present on - the bus. This is the beginning of all 1-Wire transactions.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1> -<p class="Pp">This interface is intended to be used only by the - <a class="Xr">ow(4)</a> device to talk to the low-level bus. By convention, - the device that implements this interface is called - <a class="Xr">owc(4)</a>. Only devices that implement - <a class="Xr">own(9)</a> should call these interfaces.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ow(4)</a>, <a class="Xr">owc(4)</a>, - <a class="Xr">own(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LEGAL"><a class="permalink" href="#LEGAL">LEGAL</a></h1> -<p class="Pp">1-Wire is a registered trademark of Maxim Integrated Products, - Inc.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">owll</code> driver first appeared in - <span class="Ux">FreeBSD 11.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">owll</code> device driver and this manual - page were written by <span class="An">Warner Losh</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 22, 2016</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/own.9 4.html b/static/freebsd/man9/own.9 4.html deleted file mode 100644 index 2d3f0288..00000000 --- a/static/freebsd/man9/own.9 4.html +++ /dev/null @@ -1,216 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">OWN(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">OWN(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">own</code>, - <code class="Nm">own_send_command</code>, - <code class="Nm">own_command_wait</code>, - <code class="Nm">own_self_command</code>, - <code class="Nm">own_acquire_bus</code>, <code class="Nm">own crc</code>, - <code class="Nm">own_release_bus</code>, - <code class="Nm">OWN_ACQUIRE_BUS</code>, <code class="Nm">OWN_CRC</code>, - <code class="Nm">OWN_RELEASE_BUS</code>, - <code class="Nm">OWN_SEND_COMMAND</code> — <span class="Nd">Dallas - Semiconductor 1-Wire Network and Transport Interface</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/bus.h</a>></code> - <br/> - <code class="In">#include <<a class="In">dev/ow/own.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">own_send_command</code>(<var class="Fa" style="white-space: nowrap;">device_t - pdev</var>, <var class="Fa" style="white-space: nowrap;">struct ow_cmd - *cmd</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">own_command_wait</code>(<var class="Fa" style="white-space: nowrap;">device_t - pdev</var>, <var class="Fa" style="white-space: nowrap;">struct ow_cmd - *cmd</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">own_self_command</code>(<var class="Fa" style="white-space: nowrap;">device_t - pdev</var>, <var class="Fa" style="white-space: nowrap;">struct ow_cmd - *cmd</var>, <var class="Fa" style="white-space: nowrap;">uint8_t - xpt_cmd</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">own_acquire_bus</code>(<var class="Fa" style="white-space: nowrap;">device_t - pdev</var>, <var class="Fa" style="white-space: nowrap;">int how</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">own_release_bus</code>(<var class="Fa" style="white-space: nowrap;">device_t - pdev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">own_crc</code>(<var class="Fa" style="white-space: nowrap;">device_t - pdev</var>, <var class="Fa" style="white-space: nowrap;">uint8_t - *buffer</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">OWN_SEND_COMMAND</code>(<var class="Fa" style="white-space: nowrap;">device_t - ndev</var>, <var class="Fa" style="white-space: nowrap;">device_t - pdev</var>, <var class="Fa" style="white-space: nowrap;">struct ow_cmd - *cmd</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">OWN_ACQUIRE_BUS</code>(<var class="Fa" style="white-space: nowrap;">device_t - ndev</var>, <var class="Fa" style="white-space: nowrap;">device_t - pdev</var>, <var class="Fa" style="white-space: nowrap;">int how</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">OWN_RELEASE_BUS</code>(<var class="Fa" style="white-space: nowrap;">device_t - ndev</var>, <var class="Fa" style="white-space: nowrap;">device_t - pdev</var>);</p> -<p class="Pp"><var class="Ft">uint8_t</var> - <br/> - <code class="Fn">OWN_CRC</code>(<var class="Fa" style="white-space: nowrap;">device_t - ndev</var>, <var class="Fa" style="white-space: nowrap;">device_t - pdev</var>, <var class="Fa" style="white-space: nowrap;">uint8_t - *buffer</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">own</code> interface defines three sets of - functions for interacting with 1-Wire devices: sending commands, reserving - the bus, and ensuring data integrity. Wrappers are provided for the raw - <code class="Nm">OWN</code> <a class="Xr">kobj(9)</a> interfaces and should - be used for improved safety over the <a class="Xr">kobj(9)</a> ones.</p> -<section class="Ss"> -<h2 class="Ss" id="Bus_Commands"><a class="permalink" href="#Bus_Commands">Bus - Commands</a></h2> -<p class="Pp">The 1-Wire bus defines different layers of access to the devices - on the bus. The <code class="Nm">own</code> functions provide access to the - network and transport layers. The network layer designates the next command - as being either for all devices on the bus, or for a specific device. The - network layer also specifies the speed used by the link layer.</p> -<p class="Pp"><var class="Vt">struct ow_cmd</var> encapsulates network access, - speed, and timing information. It specifies the commands to send and whether - or not to read data. Its members are:</p> -<dl class="Bl-tag"> - <dt id="flags"><var class="Va">flags</var></dt> - <dd>Flags controlling the interpretation of the structure. These flags are - defined in <code class="In"><<a class="In">dev/ow/ow.h</a>></code>: - <dl class="Bl-tag"> - <dt>OW_FLAG_OVERDRIVE</dt> - <dd>Send <var class="Va">xpt_cmd</var> bytes and read - <var class="Va">xpt_read</var> bytes at overdrive speed.</dd> - <dt>OW_FLAG_READ_BIT</dt> - <dd>Interpret <var class="Va">xpt_read_len</var> to be in bits to be read - after <var class="Va">xpt_cmd</var> rather than bytes.</dd> - </dl> - </dd> - <dt id="rom_cmd"><var class="Va">rom_cmd</var></dt> - <dd>ROM command bytes to send.</dd> - <dt id="rom_len"><var class="Va">rom_len</var></dt> - <dd>Number of ROM command bytes to send.</dd> - <dt id="rom_read_len"><var class="Va">rom_read_len</var></dt> - <dd>Number of bytes to read after sending the ROM command.</dd> - <dt id="rom_read"><var class="Va">rom_read</var></dt> - <dd>Buffer for bytes read after the ROM command.</dd> - <dt id="xpt_cmd"><var class="Va">xpt_cmd</var></dt> - <dd>Transport command to send.</dd> - <dt id="xpt_len"><var class="Va">xpt_len</var></dt> - <dd>Length of the transport command bytes to send. Specify 0 for no transport - command.</dd> - <dt id="xpt_read_len"><var class="Va">xpt_read_len</var></dt> - <dd>Number of bytes to read after <var class="Va">xpt_cmd</var> bytes are - sent. If the <code class="Dv">OW_FLAG_READ_BIT</code> bit is set in - <var class="Va">flags</var>, then it is the number of bits to read. Bits - read are packed into bytes.</dd> - <dt id="xpt_read"><var class="Va">xpt_read</var></dt> - <dd>Buffer for data read.</dd> -</dl> -<p class="Pp" id="own_command_wait"><a class="permalink" href="#own_command_wait"><code class="Fn">own_command_wait</code></a>() - acquires the 1-Wire bus, waiting if necessary, sends the command, and then - releases the bus. - <a class="permalink" href="#own_send_command"><code class="Fn" id="own_send_command">own_send_command</code></a>() - sends the command without bus reservation. <var class="Fa">pdev</var> is the - client device (the presentation layer device) sending the command. The - <var class="Fa">cmd</var> argument describes the transaction to send to the - 1-Wire bus.</p> -<p class="Pp" id="own_self_command"><a class="permalink" href="#own_self_command"><code class="Fn">own_self_command</code></a>() - fills in <var class="Fa">cmd</var> with a MATCH_ROM ROM command, the ROM - address of <var class="Fa">pdev</var> and the <var class="Fa">xpt_cmd</var> - as a convenient way to create directed commands.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Bus_Reservation"><a class="permalink" href="#Bus_Reservation">Bus - Reservation</a></h2> -<p class="Pp">The 1-Wire system includes an advisory lock for the bus that - presentation layer devices can use to coordinate access. Locking is purely - advisory at this time.</p> -<p class="Pp" id="own_acquire_bus"><a class="permalink" href="#own_acquire_bus"><code class="Fn">own_acquire_bus</code></a>() - reserves the bus. It waits indefinitely if the <var class="Fa">how</var> - argument is <code class="Dv">OWN_WAIT</code> and returns the error - <code class="Dv">EWOULDBLOCK</code> if passed - <code class="Dv">OWN_DONTWAIT</code> when the bus is owned by another - client.</p> -<p class="Pp" id="own_release_bus"><a class="permalink" href="#own_release_bus"><code class="Fn">own_release_bus</code></a>() - releases the bus.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Data_Integrity"><a class="permalink" href="#Data_Integrity">Data - Integrity</a></h2> -<p class="Pp"><a class="permalink" href="#own_crc"><code class="Fn" id="own_crc">own_crc</code></a>() - computes the 1-Wire standard CRC function over the data passed in - <var class="Fa">buffer</var> and <var class="Fa">len</var> and returns the - result.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Notes"><a class="permalink" href="#Notes">Notes</a></h2> -<p class="Pp">The 1-Wire standard (Maxim AN937) defines layers that are akin to - ISO networking layers. The lowest relevant layer, the link layer, defines - the polling windows and the timing of the signaling of different modes. The - network layer is built on top of the link layer and is used to address - devices in a unicast or multicast manner. The transport layer defines - commands and responses from the devices. The presentation layer is composed - of the device specific commands and actions used to control the specific - 1-Wire devices on bus.</p> -<p class="Pp">These interfaces are implemented by the <a class="Xr">ow(4)</a> - device. Presentation layer devices (children of the newbus - <a class="Xr">ow(4)</a> device) should only call the functions described - here. The functionality provided by the <a class="Xr">owc(4)</a> device - (specifically the <a class="Xr">owll(9)</a> interface) should only be called - by the <a class="Xr">ow(4)</a> driver.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ow(4)</a>, <a class="Xr">owc(4)</a>, - <a class="Xr">owll(9)</a> - <span class="Pa">https://pdfserv.maximintegrated.com/en/an/AN937.pdf</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LEGAL"><a class="permalink" href="#LEGAL">LEGAL</a></h1> -<p class="Pp">1-Wire is a registered trademark of Maxim Integrated Products, - Inc.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">own</code> driver first appeared in - <span class="Ux">FreeBSD 11.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">own</code> device driver and this manual page - were written by <span class="An">Warner Losh</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 20, 2015</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/p_candebug.9 4.html b/static/freebsd/man9/p_candebug.9 4.html deleted file mode 100644 index bea842ab..00000000 --- a/static/freebsd/man9/p_candebug.9 4.html +++ /dev/null @@ -1,106 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">P_CANDEBUG(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">P_CANDEBUG(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">p_candebug</code> — - <span class="Nd">determine debuggability of a process</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/proc.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">p_candebug</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>, <var class="Fa" style="white-space: nowrap;">struct proc - *p</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This function determines if a given process - <var class="Fa">p</var> is debuggable by some thread - <var class="Fa">td</var>.</p> -<p class="Pp" id="p_candebug">The following <a class="Xr">sysctl(8)</a> - variables directly influence the behaviour of - <a class="permalink" href="#p_candebug"><code class="Fn">p_candebug</code></a>():</p> -<dl class="Bl-tag"> - <dt id="security.bsd.unprivileged_proc_debug"><var class="Va">security.bsd.unprivileged_proc_debug</var></dt> - <dd>Must be set to a non-zero value to allow unprivileged processes access to - the kernel's debug facilities.</dd> - <dt id="kern.securelevel"><var class="Va">kern.securelevel</var></dt> - <dd>Debugging of the init process is not allowed if this variable is - <code class="Li">1</code> or greater.</dd> -</dl> -<p class="Pp">Other such variables indirectly influence it; see - <a class="Xr">cr_bsd_visible(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">p_candebug</code>() function returns - <code class="Li">0</code> if the process denoted by <var class="Fa">p</var> - is debuggable by thread <var class="Fa">td</var>, or a non-zero error return - value otherwise.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt> - <dd>An unprivileged process attempted to debug another process but the system - is configured to deny it (see <a class="Xr">sysctl(8)</a> variable - <var class="Va">security.bsd.unprivileged_proc_debug</var> above).</dd> - <dt id="ESRCH">[<a class="permalink" href="#ESRCH"><code class="Er">ESRCH</code></a>]</dt> - <dd>Thread <var class="Fa">td</var> has been jailed and the process to debug - does not belong to the same jail or one of its sub-jails, as determined by - <a class="Xr">prison_check(9)</a>.</dd> - <dt id="ESRCH~2">[<a class="permalink" href="#ESRCH~2"><code class="Er">ESRCH</code></a>]</dt> - <dd><a class="Xr">cr_bsd_visible(9)</a> denied visibility according to the BSD - security policies in force.</dd> - <dt id="EPERM~2">[<a class="permalink" href="#EPERM~2"><code class="Er">EPERM</code></a>]</dt> - <dd>Thread <var class="Fa">td</var> lacks superuser credentials and its - (effective) group set is not a superset of process - <var class="Fa">p</var>'s whole group set (including real, effective and - saved group IDs).</dd> - <dt id="EPERM~3">[<a class="permalink" href="#EPERM~3"><code class="Er">EPERM</code></a>]</dt> - <dd>Thread <var class="Fa">td</var> lacks superuser credentials and its - (effective) user ID does not match all user IDs of process - <var class="Fa">p</var>.</dd> - <dt id="EPERM~4">[<a class="permalink" href="#EPERM~4"><code class="Er">EPERM</code></a>]</dt> - <dd>Thread <var class="Fa">td</var> lacks superuser credentials and process - <var class="Fa">p</var> is executing a set-user-ID or set-group-ID - executable.</dd> - <dt id="EPERM~5">[<a class="permalink" href="#EPERM~5"><code class="Er">EPERM</code></a>]</dt> - <dd>Process <var class="Fa">p</var> denotes the initial process - <code class="Fn">initproc</code>() and the <a class="Xr">sysctl(8)</a> - variable <var class="Va">kern.securelevel</var> is greater than zero.</dd> - <dt id="EBUSY">[<a class="permalink" href="#EBUSY"><code class="Er">EBUSY</code></a>]</dt> - <dd>Process <var class="Fa">p</var> is in the process of being - <code class="Fn">exec</code>()'ed.</dd> - <dt id="EPERM~6">[<a class="permalink" href="#EPERM~6"><code class="Er">EPERM</code></a>]</dt> - <dd>Process <var class="Fa">p</var> denied debuggability (see - <a class="Xr">procctl(2)</a>, command - <code class="Dv">PROC_TRACE_CTL</code>).</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">procctl(2)</a>, <a class="Xr">cr_bsd_visible(9)</a>, - <a class="Xr">mac(9)</a>, <a class="Xr">p_cansee(9)</a>, - <a class="Xr">prison_check(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 18, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/p_cansee.9 4.html b/static/freebsd/man9/p_cansee.9 4.html deleted file mode 100644 index 42823bc6..00000000 --- a/static/freebsd/man9/p_cansee.9 4.html +++ /dev/null @@ -1,63 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">P_CANSEE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">P_CANSEE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">p_cansee</code> — - <span class="Nd">determine visibility of a process</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/proc.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">p_cansee</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>, <var class="Fa" style="white-space: nowrap;">struct proc - *p</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This function determines if a given process - <var class="Fa">p</var> is visible to the thread <var class="Fa">td</var>, - where the notion of “visibility” may be read as - “awareness of existence”.</p> -<p class="Pp">This function explicitly allows a thread to always see its own - process, even with pending credentials changes (see - <a class="Xr">ucred(9)</a>). Otherwise, it simply defers to - <a class="Xr">cr_cansee(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">p_cansee</code>() function returns - <code class="Li">0</code> if the process denoted by <var class="Fa">p</var> - is visible by thread <var class="Fa">td</var>, or ESRCH otherwise.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="ESRCH">[<a class="permalink" href="#ESRCH"><code class="Er">ESRCH</code></a>]</dt> - <dd>Thread <var class="Fa">td</var> is not part of process - <var class="Fa">p</var> and cannot see it as determined by - <a class="Xr">cr_cansee(9)</a>.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">cr_cansee(9)</a>, <a class="Xr">p_candebug(9)</a>, - <a class="Xr">ucred(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 18, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/panic.9 3.html b/static/freebsd/man9/panic.9 3.html deleted file mode 100644 index afde7a46..00000000 --- a/static/freebsd/man9/panic.9 3.html +++ /dev/null @@ -1,114 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PANIC(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PANIC(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">panic</code> — <span class="Nd">bring down - system on fatal error</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code></p> -<p class="Pp"><var class="Vt">extern char *panicstr;</var></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">panic</code>(<var class="Fa" style="white-space: nowrap;">const - char *fmt</var>, - <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vpanic</code>(<var class="Fa" style="white-space: nowrap;">const - char *fmt</var>, <var class="Fa" style="white-space: nowrap;">va_list - ap</var>);</p> -<p class="Pp"><code class="Fn">KERNEL_PANICKED</code>();</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#panic"><code class="Fn" id="panic">panic</code></a>() - and <code class="Fn">vpanic</code>() functions terminate the running system. - The message <var class="Fa">fmt</var> is a <a class="Xr">printf(3)</a> style - format string. The message is printed to the console and - <var class="Va">panicstr</var> is set pointing to the address of the message - text. This can be retrieved from a core dump at a later time.</p> -<p class="Pp" id="panic~2">Upon entering the - <a class="permalink" href="#panic~2"><code class="Fn">panic</code></a>() - function the panicking thread disables interrupts and calls - <a class="Xr">critical_enter(9)</a>. This prevents the thread from being - preempted or interrupted while the system is still in a running state. Next, - it will instruct the other CPUs in the system to stop. This synchronizes - with other threads to prevent concurrent panic conditions from interfering - with one another. In the unlikely event of concurrent panics, only one - panicking thread will proceed.</p> -<p class="Pp" id="kdb_enter">Control will be passed to the kernel debugger via - <a class="permalink" href="#kdb_enter"><code class="Fn">kdb_enter</code></a>(). - This is conditional on a debugger being installed and enabled by the - <var class="Va">debugger_on_panic</var> variable; see - <a class="Xr">ddb(4)</a> and <a class="Xr">gdb(4)</a>. The debugger may - initiate a system reset, or it may eventually return.</p> -<p class="Pp" id="panic~3">Finally, <a class="Xr">kern_reboot(9)</a> is called - to restart the system, and a kernel dump will be requested. If - <a class="permalink" href="#panic~3"><code class="Fn">panic</code></a>() is - called recursively (from the disk sync routines, for example), - <a class="permalink" href="#kern_reboot"><code class="Fn" id="kern_reboot">kern_reboot</code></a>() - will be instructed not to sync the disks.</p> -<p class="Pp" id="vpanic">The - <a class="permalink" href="#vpanic"><code class="Fn">vpanic</code></a>() - function implements the main body of <code class="Fn">panic</code>(). It is - suitable to be called by functions which perform their own variable-length - argument processing. In all other cases, <code class="Fn">panic</code>() is - preferred.</p> -<p class="Pp" id="KERNEL_PANICKED">The - <a class="permalink" href="#KERNEL_PANICKED"><code class="Fn">KERNEL_PANICKED</code></a>() - macro is the preferred way to determine if the system has panicked. It - returns a boolean value. Most often this is used to avoid taking an action - that cannot possibly succeed in a panic context.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXECUTION_CONTEXT"><a class="permalink" href="#EXECUTION_CONTEXT">EXECUTION - CONTEXT</a></h1> -<p class="Pp">Once the panic has been initiated, code executing in a panic - context is subject to the following restrictions:</p> -<ul class="Bl-bullet"> - <li>Single-threaded execution. The scheduler is disabled, and other CPUs are - stopped/forced idle. Functions that manipulate the scheduler state must be - avoided. This includes, but is not limited to, <a class="Xr">wakeup(9)</a> - and <a class="Xr">sleepqueue(9)</a> functions.</li> - <li>Interrupts are disabled. Device I/O (e.g. to the console) must be achieved - with polling.</li> - <li>Dynamic memory allocation cannot be relied on, and must be avoided.</li> - <li>Lock acquisition/release will be ignored, meaning these operations will - appear to succeed.</li> - <li>Sleeping on a resource is not strictly prohibited, but will result in an - immediate return from the sleep function. Time-based sleeps such as - <a class="Xr">pause(9)</a> may be performed as a busy-wait.</li> -</ul> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">panic</code>() and - <code class="Fn">vpanic</code>() functions do not return.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">printf(3)</a>, <a class="Xr">ddb(4)</a>, - <a class="Xr">gdb(4)</a>, <a class="Xr">KASSERT(9)</a>, - <a class="Xr">kern_reboot(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 17, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pci.9 4.html b/static/freebsd/man9/pci.9 4.html deleted file mode 100644 index 553c5a43..00000000 --- a/static/freebsd/man9/pci.9 4.html +++ /dev/null @@ -1,897 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PCI(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PCI(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pci</code>, - <code class="Nm">pci_alloc_msi</code>, - <code class="Nm">pci_alloc_msix</code>, - <code class="Nm">pci_clear_pme</code>, - <code class="Nm">pci_disable_busmaster</code>, - <code class="Nm">pci_disable_io</code>, - <code class="Nm">pci_enable_busmaster</code>, - <code class="Nm">pci_enable_io</code>, - <code class="Nm">pci_enable_pme</code>, - <code class="Nm">pci_find_bsf</code>, <code class="Nm">pci_find_cap</code>, - <code class="Nm">pci_find_dbsf</code>, - <code class="Nm">pci_find_device</code>, - <code class="Nm">pci_find_extcap</code>, - <code class="Nm">pci_find_htcap</code>, - <code class="Nm">pci_find_next_cap</code>, - <code class="Nm">pci_find_next_extcap</code>, - <code class="Nm">pci_find_next_htcap</code>, - <code class="Nm">pci_find_pcie_root_port</code>, - <code class="Nm">pci_get_id</code>, - <code class="Nm">pci_get_max_payload</code>, - <code class="Nm">pci_get_max_read_req</code>, - <code class="Nm">pci_get_powerstate</code>, - <code class="Nm">pci_get_vpd_ident</code>, - <code class="Nm">pci_get_vpd_readonly</code>, - <code class="Nm">pci_has_pm</code>, <code class="Nm">pci_iov_attach</code>, - <code class="Nm">pci_iov_attach_name</code>, - <code class="Nm">pci_iov_detach</code>, - <code class="Nm">pci_msi_count</code>, - <code class="Nm">pci_msix_count</code>, - <code class="Nm">pci_msix_pba_bar</code>, - <code class="Nm">pci_msix_table_bar</code>, - <code class="Nm">pci_pending_msix</code>, - <code class="Nm">pci_read_config</code>, - <code class="Nm">pci_release_msi</code>, - <code class="Nm">pci_remap_msix</code>, - <code class="Nm">pci_restore_state</code>, - <code class="Nm">pci_save_state</code>, - <code class="Nm">pci_set_max_read_req</code>, - <code class="Nm">pci_set_powerstate</code>, - <code class="Nm">pci_write_config</code>, - <code class="Nm">pcie_adjust_config</code>, - <code class="Nm">pcie_flr</code>, - <code class="Nm">pcie_get_max_completion_timeout</code>, - <code class="Nm">pcie_read_config</code>, - <code class="Nm">pcie_wait_for_pending_transactions</code>, - <code class="Nm">pcie_write_config</code> — <span class="Nd">PCI bus - interface</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/bus.h</a>></code> - <br/> - <code class="In">#include <<a class="In">dev/pci/pcireg.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">dev/pci/pcivar.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_alloc_msi</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">int - *count</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_alloc_msix</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">int - *count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pci_clear_pme</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_disable_busmaster</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_disable_io</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">int - space</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_enable_busmaster</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_enable_io</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">int - space</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pci_enable_pme</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">device_t</var> - <br/> - <code class="Fn">pci_find_bsf</code>(<var class="Fa" style="white-space: nowrap;">uint8_t - bus</var>, <var class="Fa" style="white-space: nowrap;">uint8_t slot</var>, - <var class="Fa" style="white-space: nowrap;">uint8_t func</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_find_cap</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">int - capability</var>, <var class="Fa" style="white-space: nowrap;">int - *capreg</var>);</p> -<p class="Pp"><var class="Ft">device_t</var> - <br/> - <code class="Fn">pci_find_dbsf</code>(<var class="Fa" style="white-space: nowrap;">uint32_t - domain</var>, <var class="Fa" style="white-space: nowrap;">uint8_t - bus</var>, <var class="Fa" style="white-space: nowrap;">uint8_t slot</var>, - <var class="Fa" style="white-space: nowrap;">uint8_t func</var>);</p> -<p class="Pp"><var class="Ft">device_t</var> - <br/> - <code class="Fn">pci_find_device</code>(<var class="Fa" style="white-space: nowrap;">uint16_t - vendor</var>, <var class="Fa" style="white-space: nowrap;">uint16_t - device</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_find_extcap</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">int - capability</var>, <var class="Fa" style="white-space: nowrap;">int - *capreg</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_find_htcap</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">int - capability</var>, <var class="Fa" style="white-space: nowrap;">int - *capreg</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_find_next_cap</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">int - capability</var>, <var class="Fa" style="white-space: nowrap;">int - start</var>, <var class="Fa" style="white-space: nowrap;">int - *capreg</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_find_next_extcap</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">int - capability</var>, <var class="Fa" style="white-space: nowrap;">int - start</var>, <var class="Fa" style="white-space: nowrap;">int - *capreg</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_find_next_htcap</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">int - capability</var>, <var class="Fa" style="white-space: nowrap;">int - start</var>, <var class="Fa" style="white-space: nowrap;">int - *capreg</var>);</p> -<p class="Pp"><var class="Ft">device_t</var> - <br/> - <code class="Fn">pci_find_pcie_root_port</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_get_id</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">enum pci_id_type - type</var>, <var class="Fa" style="white-space: nowrap;">uintptr_t - *id</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_get_max_payload</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_get_max_read_req</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_get_powerstate</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_get_vpd_ident</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">const char - **identptr</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_get_vpd_readonly</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">const char - *kw</var>, <var class="Fa" style="white-space: nowrap;">const char - **vptr</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">pci_has_pm</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_msi_count</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_msix_count</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_msix_pba_bar</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_msix_table_bar</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_pending_msix</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">u_int - index</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">pci_read_config</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">int reg</var>, - <var class="Fa" style="white-space: nowrap;">int width</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_release_msi</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_remap_msix</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">int count</var>, - <var class="Fa" style="white-space: nowrap;">const u_int - *vectors</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pci_restore_state</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pci_save_state</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_set_max_read_req</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">int size</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_set_powerstate</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">int - state</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pci_write_config</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">int reg</var>, - <var class="Fa" style="white-space: nowrap;">uint32_t val</var>, - <var class="Fa" style="white-space: nowrap;">int width</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">pcie_adjust_config</code>(<var class="Fa">device_t dev</var>, - <var class="Fa">int reg</var>, <var class="Fa">uint32_t mask</var>, - <var class="Fa">uint32_t val</var>, <var class="Fa">int width</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">pcie_flr</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">u_int - max_delay</var>, <var class="Fa" style="white-space: nowrap;">bool - force</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pcie_get_max_completion_timeout</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">pcie_read_config</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">int reg</var>, - <var class="Fa" style="white-space: nowrap;">int width</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">pcie_wait_for_pending_transactions</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">u_int - max_delay</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pcie_write_config</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">int reg</var>, - <var class="Fa" style="white-space: nowrap;">uint32_t val</var>, - <var class="Fa" style="white-space: nowrap;">int width</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pci_event_fn</code>(<var class="Fa" style="white-space: nowrap;">void - *arg</var>, <var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><code class="Fn">EVENTHANDLER_REGISTER</code>(<var class="Fa" style="white-space: nowrap;">pci_add_device</var>, - <var class="Fa" style="white-space: nowrap;">pci_event_fn</var>);</p> -<p class="Pp"><code class="Fn">EVENTHANDLER_DEREGISTER</code>(<var class="Fa" style="white-space: nowrap;">pci_delete_resource</var>, - <var class="Fa" style="white-space: nowrap;">pci_event_fn</var>);</p> -<p class="Pp"><code class="In">#include - <<a class="In">dev/pci/pci_iov.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_iov_attach</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">nvlist_t - *pf_schema</var>, <var class="Fa" style="white-space: nowrap;">nvlist_t - *vf_schema</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_iov_attach_name</code>(<var class="Fa">device_t - dev</var>, <var class="Fa">nvlist_t *pf_schema</var>, - <var class="Fa">nvlist_t *vf_schema</var>, <var class="Fa">const char - *fmt</var>, <var class="Fa">...</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pci_iov_detach</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">pci</code> set of functions are used for - managing PCI devices. The functions are split into several groups: raw - configuration access, locating devices, device information, device - configuration, and message signaled interrupts.</p> -<section class="Ss"> -<h2 class="Ss" id="Raw_Configuration_Access"><a class="permalink" href="#Raw_Configuration_Access">Raw - Configuration Access</a></h2> -<p class="Pp">The - <a class="permalink" href="#pci_read_config"><code class="Fn" id="pci_read_config">pci_read_config</code></a>() - function is used to read data from the PCI configuration space of the device - <var class="Fa">dev</var>, at offset <var class="Fa">reg</var>, with - <var class="Fa">width</var> specifying the size of the access.</p> -<p class="Pp" id="pci_write_config">The - <a class="permalink" href="#pci_write_config"><code class="Fn">pci_write_config</code></a>() - function is used to write the value <var class="Fa">val</var> to the PCI - configuration space of the device <var class="Fa">dev</var>, at offset - <var class="Fa">reg</var>, with <var class="Fa">width</var> specifying the - size of the access.</p> -<p class="Pp" id="pcie_adjust_config">The - <a class="permalink" href="#pcie_adjust_config"><code class="Fn">pcie_adjust_config</code></a>() - function is used to modify the value of a register in the PCI-express - capability register set of device <var class="Fa">dev</var>. The offset - <var class="Fa">reg</var> specifies a relative offset in the register set - with <var class="Fa">width</var> specifying the size of the access. The new - value of the register is computed by modifying bits set in - <var class="Fa">mask</var> to the value in <var class="Fa">val</var>. Any - bits not specified in <var class="Fa">mask</var> are preserved. The previous - value of the register is returned.</p> -<p class="Pp" id="pcie_read_config">The - <a class="permalink" href="#pcie_read_config"><code class="Fn">pcie_read_config</code></a>() - function is used to read the value of a register in the PCI-express - capability register set of device <var class="Fa">dev</var>. The offset - <var class="Fa">reg</var> specifies a relative offset in the register set - with <var class="Fa">width</var> specifying the size of the access.</p> -<p class="Pp" id="pcie_write_config">The - <a class="permalink" href="#pcie_write_config"><code class="Fn">pcie_write_config</code></a>() - function is used to write the value <var class="Fa">val</var> to a register - in the PCI-express capability register set of device - <var class="Fa">dev</var>. The offset <var class="Fa">reg</var> specifies a - relative offset in the register set with <var class="Fa">width</var> - specifying the size of the access.</p> -<p class="Pp" id="NOTE"><a class="permalink" href="#NOTE"><i class="Em">NOTE</i></a>: - Device drivers should only use these functions for functionality that is not - available via another - <a class="permalink" href="#pci"><code class="Fn" id="pci">pci</code></a>() - function.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Locating_Devices"><a class="permalink" href="#Locating_Devices">Locating - Devices</a></h2> -<p class="Pp">The - <a class="permalink" href="#pci_find_bsf"><code class="Fn" id="pci_find_bsf">pci_find_bsf</code></a>() - function looks up the <var class="Vt">device_t</var> of a PCI device, given - its <var class="Fa">bus</var>, <var class="Fa">slot</var>, and - <var class="Fa">func</var>. The <var class="Fa">slot</var> number actually - refers to the number of the device on the bus, which does not necessarily - indicate its geographic location in terms of a physical slot. Note that in - case the system has multiple PCI domains, the - <code class="Fn">pci_find_bsf</code>() function only searches the first one. - Actually, it is equivalent to:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>pci_find_dbsf(0, bus, slot, func);</pre> -</div> -<p class="Pp" id="pci_find_dbsf">The - <a class="permalink" href="#pci_find_dbsf"><code class="Fn">pci_find_dbsf</code></a>() - function looks up the <var class="Vt">device_t</var> of a PCI device, given - its <var class="Fa">domain</var>, <var class="Fa">bus</var>, - <var class="Fa">slot</var>, and <var class="Fa">func</var>. The - <var class="Fa">slot</var> number actually refers to the number of the - device on the bus, which does not necessarily indicate its geographic - location in terms of a physical slot.</p> -<p class="Pp" id="pci_find_device">The - <a class="permalink" href="#pci_find_device"><code class="Fn">pci_find_device</code></a>() - function looks up the <var class="Vt">device_t</var> of a PCI device, given - its <var class="Fa">vendor</var> and <var class="Fa">device</var> IDs. Note - that there can be multiple matches for this search; this function only - returns the first matching device.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Device_Information"><a class="permalink" href="#Device_Information">Device - Information</a></h2> -<p class="Pp">The - <a class="permalink" href="#pci_find_cap"><code class="Fn" id="pci_find_cap">pci_find_cap</code></a>() - function is used to locate the first instance of a PCI capability register - set for the device <var class="Fa">dev</var>. The capability to locate is - specified by ID via <var class="Fa">capability</var>. Constant macros of the - form <code class="Dv">PCIY_xxx</code> for standard capability IDs are - defined in - <code class="In"><<a class="In">dev/pci/pcireg.h</a>></code>. If the - capability is found, then <var class="Fa">*capreg</var> is set to the offset - in configuration space of the capability register set, and - <code class="Fn">pci_find_cap</code>() returns zero. If the capability is - not found or the device does not support capabilities, - <code class="Fn">pci_find_cap</code>() returns an error. The - <a class="permalink" href="#pci_find_next_cap"><code class="Fn" id="pci_find_next_cap">pci_find_next_cap</code></a>() - function is used to locate the next instance of a PCI capability register - set for the device <var class="Fa">dev</var>. The - <var class="Fa">start</var> should be the <var class="Fa">*capreg</var> - returned by a prior <code class="Fn">pci_find_cap</code>() or - <code class="Fn">pci_find_next_cap</code>(). When no more instances are - located <code class="Fn">pci_find_next_cap</code>() returns an error.</p> -<p class="Pp" id="pci_has_pm">The - <a class="permalink" href="#pci_has_pm"><code class="Fn">pci_has_pm</code></a>() - function returns true if <var class="Fa">dev</var> supports power - management.</p> -<p class="Pp" id="pci_find_extcap">The - <a class="permalink" href="#pci_find_extcap"><code class="Fn">pci_find_extcap</code></a>() - function is used to locate the first instance of a PCI-express extended - capability register set for the device <var class="Fa">dev</var>. The - extended capability to locate is specified by ID via - <var class="Fa">capability</var>. Constant macros of the form - <code class="Dv">PCIZ_xxx</code> for standard extended capability IDs are - defined in - <code class="In"><<a class="In">dev/pci/pcireg.h</a>></code>. If the - extended capability is found, then <var class="Fa">*capreg</var> is set to - the offset in configuration space of the extended capability register set, - and <code class="Fn">pci_find_extcap</code>() returns zero. If the extended - capability is not found or the device is not a PCI-express device, - <code class="Fn">pci_find_extcap</code>() returns an error. The - <a class="permalink" href="#pci_find_next_extcap"><code class="Fn" id="pci_find_next_extcap">pci_find_next_extcap</code></a>() - function is used to locate the next instance of a PCI-express extended - capability register set for the device <var class="Fa">dev</var>. The - <var class="Fa">start</var> should be the <var class="Fa">*capreg</var> - returned by a prior <code class="Fn">pci_find_extcap</code>() or - <code class="Fn">pci_find_next_extcap</code>(). When no more instances are - located <code class="Fn">pci_find_next_extcap</code>() returns an error.</p> -<p class="Pp" id="pci_find_htcap">The - <a class="permalink" href="#pci_find_htcap"><code class="Fn">pci_find_htcap</code></a>() - function is used to locate the first instance of a HyperTransport capability - register set for the device <var class="Fa">dev</var>. The capability to - locate is specified by type via <var class="Fa">capability</var>. Constant - macros of the form <code class="Dv">PCIM_HTCAP_xxx</code> for standard - HyperTransport capability types are defined in - <code class="In"><<a class="In">dev/pci/pcireg.h</a>></code>. If the - capability is found, then <var class="Fa">*capreg</var> is set to the offset - in configuration space of the capability register set, and - <code class="Fn">pci_find_htcap</code>() returns zero. If the capability is - not found or the device is not a HyperTransport device, - <code class="Fn">pci_find_htcap</code>() returns an error. The - <a class="permalink" href="#pci_find_next_htcap"><code class="Fn" id="pci_find_next_htcap">pci_find_next_htcap</code></a>() - function is used to locate the next instance of a HyperTransport capability - register set for the device <var class="Fa">dev</var>. The - <var class="Fa">start</var> should be the <var class="Fa">*capreg</var> - returned by a prior <code class="Fn">pci_find_htcap</code>() or - <code class="Fn">pci_find_next_htcap</code>(). When no more instances are - located <code class="Fn">pci_find_next_htcap</code>() returns an error.</p> -<p class="Pp" id="pci_find_pcie_root_port">The - <a class="permalink" href="#pci_find_pcie_root_port"><code class="Fn">pci_find_pcie_root_port</code></a>() - function walks up the PCI device hierarchy to locate the PCI-express root - port upstream of <var class="Fa">dev</var>. If a root port is not found, - <code class="Fn">pci_find_pcie_root_port</code>() returns - <code class="Dv">NULL</code>.</p> -<p class="Pp" id="pci_get_id">The - <a class="permalink" href="#pci_get_id"><code class="Fn">pci_get_id</code></a>() - function is used to read an identifier from a device. The - <var class="Fa">type</var> flag is used to specify which identifier to read. - The following flags are supported:</p> -<dl class="Bl-hang"> - <dt id="PCI_ID_RID"><a class="permalink" href="#PCI_ID_RID"><code class="Dv">PCI_ID_RID</code></a></dt> - <dd>Read the routing identifier for the device.</dd> - <dt id="PCI_ID_MSI"><a class="permalink" href="#PCI_ID_MSI"><code class="Dv">PCI_ID_MSI</code></a></dt> - <dd>Read the MSI routing ID. This is needed by some interrupt controllers to - route MSI and MSI-X interrupts.</dd> -</dl> -<p class="Pp" id="pci_get_vpd_ident">The - <a class="permalink" href="#pci_get_vpd_ident"><code class="Fn">pci_get_vpd_ident</code></a>() - function is used to fetch a device's Vital Product Data (VPD) identifier - string. If the device <var class="Fa">dev</var> supports VPD and provides an - identifier string, then <var class="Fa">*identptr</var> is set to point at a - read-only, null-terminated copy of the identifier string, and - <code class="Fn">pci_get_vpd_ident</code>() returns zero. If the device does - not support VPD or does not provide an identifier string, then - <code class="Fn">pci_get_vpd_ident</code>() returns an error.</p> -<p class="Pp" id="pci_get_vpd_readonly">The - <a class="permalink" href="#pci_get_vpd_readonly"><code class="Fn">pci_get_vpd_readonly</code></a>() - function is used to fetch the value of a single VPD read-only keyword for - the device <var class="Fa">dev</var>. The keyword to fetch is identified by - the two character string <var class="Fa">kw</var>. If the device supports - VPD and provides a read-only value for the requested keyword, then - <var class="Fa">*vptr</var> is set to point at a read-only, null-terminated - copy of the value, and <code class="Fn">pci_get_vpd_readonly</code>() - returns zero. If the device does not support VPD or does not provide the - requested keyword, then <code class="Fn">pci_get_vpd_readonly</code>() - returns an error.</p> -<p class="Pp" id="pcie_get_max_completion_timeout">The - <a class="permalink" href="#pcie_get_max_completion_timeout"><code class="Fn">pcie_get_max_completion_timeout</code></a>() - function returns the maximum completion timeout configured for the device - <var class="Fa">dev</var> in microseconds. If the <var class="Fa">dev</var> - device is not a PCI-express device, - <code class="Fn">pcie_get_max_completion_timeout</code>() returns zero. When - completion timeouts are disabled for <var class="Fa">dev</var>, this - function returns the maximum timeout that would be used if timeouts were - enabled.</p> -<p class="Pp" id="pcie_wait_for_pending_transactions">The - <a class="permalink" href="#pcie_wait_for_pending_transactions"><code class="Fn">pcie_wait_for_pending_transactions</code></a>() - function waits for any pending transactions initiated by the - <var class="Fa">dev</var> device to complete. The function checks for - pending transactions by polling the transactions pending flag in the - PCI-express device status register. It returns <code class="Dv">true</code> - once the transaction pending flag is clear. If transactions are still - pending after <var class="Fa">max_delay</var> milliseconds, - <code class="Fn">pcie_wait_for_pending_transactions</code>() returns - <code class="Dv">false</code>. If <var class="Fa">max_delay</var> is set to - zero, <code class="Fn">pcie_wait_for_pending_transactions</code>() performs - a single check; otherwise, this function may sleep while polling the - transactions pending flag. - <code class="Nm">pcie_wait_for_pending_transactions</code> returns - <code class="Dv">true</code> if <var class="Fa">dev</var> is not a - PCI-express device.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Device_Configuration"><a class="permalink" href="#Device_Configuration">Device - Configuration</a></h2> -<p class="Pp">The - <a class="permalink" href="#pci_enable_busmaster"><code class="Fn" id="pci_enable_busmaster">pci_enable_busmaster</code></a>() - function enables PCI bus mastering for the device <var class="Fa">dev</var>, - by setting the <code class="Dv">PCIM_CMD_BUSMASTEREN</code> bit in the - <code class="Dv">PCIR_COMMAND</code> register. The - <a class="permalink" href="#pci_disable_busmaster"><code class="Fn" id="pci_disable_busmaster">pci_disable_busmaster</code></a>() - function clears this bit.</p> -<p class="Pp" id="pci_enable_io">The - <a class="permalink" href="#pci_enable_io"><code class="Fn">pci_enable_io</code></a>() - function enables memory or I/O port address decoding for the device - <var class="Fa">dev</var>, by setting the - <code class="Dv">PCIM_CMD_MEMEN</code> or - <code class="Dv">PCIM_CMD_PORTEN</code> bit in the - <code class="Dv">PCIR_COMMAND</code> register appropriately. The - <a class="permalink" href="#pci_disable_io"><code class="Fn" id="pci_disable_io">pci_disable_io</code></a>() - function clears the appropriate bit. The <var class="Fa">space</var> - argument specifies which resource is affected; this can be either - <code class="Dv">SYS_RES_MEMORY</code> or - <code class="Dv">SYS_RES_IOPORT</code> as appropriate. Device drivers should - generally not use these routines directly. The PCI bus will enable decoding - automatically when a <code class="Dv">SYS_RES_MEMORY</code> or - <code class="Dv">SYS_RES_IOPORT</code> resource is activated via - <a class="Xr">bus_alloc_resource(9)</a> or - <a class="Xr">bus_activate_resource(9)</a>.</p> -<p class="Pp" id="pci_get_max_payload">The - <a class="permalink" href="#pci_get_max_payload"><code class="Fn">pci_get_max_payload</code></a>() - function returns the current maximum TLP payload size in bytes for a - PCI-express device. If the <var class="Fa">dev</var> device is not a - PCI-express device, <code class="Fn">pci_get_max_payload</code>() returns - zero.</p> -<p class="Pp" id="pci_get_max_read_req">The - <a class="permalink" href="#pci_get_max_read_req"><code class="Fn">pci_get_max_read_req</code></a>() - function returns the current maximum read request size in bytes for a - PCI-express device. If the <var class="Fa">dev</var> device is not a - PCI-express device, <code class="Fn">pci_get_max_read_req</code>() returns - zero.</p> -<p class="Pp" id="pci_set_max_read_req">The - <a class="permalink" href="#pci_set_max_read_req"><code class="Fn">pci_set_max_read_req</code></a>() - sets the PCI-express maximum read request size for - <var class="Fa">dev</var>. The requested <var class="Fa">size</var> may be - adjusted, and <code class="Fn">pci_set_max_read_req</code>() returns the - actual size set in bytes. If the <var class="Fa">dev</var> device is not a - PCI-express device, <code class="Fn">pci_set_max_read_req</code>() returns - zero.</p> -<p class="Pp" id="pci_get_powerstate">The - <a class="permalink" href="#pci_get_powerstate"><code class="Fn">pci_get_powerstate</code></a>() - function returns the current power state of the device - <var class="Fa">dev</var>. If the device does not support power management - capabilities, then the default state of - <code class="Dv">PCI_POWERSTATE_D0</code> is returned. The following power - states are defined by PCI:</p> -<dl class="Bl-hang"> - <dt id="PCI_POWERSTATE_D0"><a class="permalink" href="#PCI_POWERSTATE_D0"><code class="Dv">PCI_POWERSTATE_D0</code></a></dt> - <dd>State in which device is on and running. It is receiving full power from - the system and delivering full functionality to the user.</dd> - <dt id="PCI_POWERSTATE_D1"><a class="permalink" href="#PCI_POWERSTATE_D1"><code class="Dv">PCI_POWERSTATE_D1</code></a></dt> - <dd>Class-specific low-power state in which device context may or may not be - lost. Buses in this state cannot do anything to the bus, to force devices - to lose context.</dd> - <dt id="PCI_POWERSTATE_D2"><a class="permalink" href="#PCI_POWERSTATE_D2"><code class="Dv">PCI_POWERSTATE_D2</code></a></dt> - <dd>Class-specific low-power state in which device context may or may not be - lost. Attains greater power savings than - <code class="Dv">PCI_POWERSTATE_D1</code>. Buses in this state can cause - devices to lose some context. Devices - <a class="permalink" href="#must"><i class="Em" id="must">must</i></a> be - prepared for the bus to be in this state or higher.</dd> - <dt id="PCI_POWERSTATE_D3_HOT"><a class="permalink" href="#PCI_POWERSTATE_D3_HOT"><code class="Dv">PCI_POWERSTATE_D3_HOT</code></a></dt> - <dd>State in which the device is off and not running. Device context is lost, - and power from the device can be (but is not necessarily) removed.</dd> - <dt id="PCI_POWERSTATE_D3_COLD"><a class="permalink" href="#PCI_POWERSTATE_D3_COLD"><code class="Dv">PCI_POWERSTATE_D3_COLD</code></a></dt> - <dd>Same as <code class="Dv">PCI_POWERSTATE_D3_HOT</code>, except power has - been removed from the device.</dd> - <dt id="PCI_POWERSTATE_UNKNOWN"><a class="permalink" href="#PCI_POWERSTATE_UNKNOWN"><code class="Dv">PCI_POWERSTATE_UNKNOWN</code></a></dt> - <dd>State of the device is unknown.</dd> -</dl> -<p class="Pp" id="pci_set_powerstate">The - <a class="permalink" href="#pci_set_powerstate"><code class="Fn">pci_set_powerstate</code></a>() - function is used to transition the device <var class="Fa">dev</var> to the - PCI power state <var class="Fa">state</var>. If the device does not support - power management capabilities or it does not support the specific power - state <var class="Fa">state</var>, then the function will fail with - <code class="Er">EOPNOTSUPP</code>.</p> -<p class="Pp" id="pci_clear_pme">The - <a class="permalink" href="#pci_clear_pme"><code class="Fn">pci_clear_pme</code></a>() - function is used to clear any pending PME# signal and disable generation of - power management events.</p> -<p class="Pp" id="pci_enable_pme">The - <a class="permalink" href="#pci_enable_pme"><code class="Fn">pci_enable_pme</code></a>() - function is used to enable generation of power management events before - suspending a device.</p> -<p class="Pp" id="pci_iov_attach">The - <a class="permalink" href="#pci_iov_attach"><code class="Fn">pci_iov_attach</code></a>() - function is used to advertise that the given device (and associated device - driver) supports PCI Single-Root I/O Virtualization (SR-IOV). A driver that - supports SR-IOV must implement the <a class="Xr">PCI_IOV_INIT(9)</a>, - <a class="Xr">PCI_IOV_ADD_VF(9)</a> and <a class="Xr">PCI_IOV_UNINIT(9)</a> - methods. This function should be called during the - <a class="Xr">DEVICE_ATTACH(9)</a> method. If this function returns an - error, it is recommended that the device driver still successfully attaches, - but runs with SR-IOV disabled. The <var class="Fa">pf_schema</var> and - <var class="Fa">vf_schema</var> parameters are used to define what - device-specific configuration parameters the device driver accepts when - SR-IOV is enabled for the Physical Function (PF) and for individual Virtual - Functions (VFs) respectively. See <a class="Xr">pci_iov_schema(9)</a> for - details on how to construct the schema. If either the - <span class="Pa">pf_schema</span> or <span class="Pa">vf_schema</span> is - invalid or specifies parameter names that conflict with parameter names that - are already in use, <code class="Fn">pci_iov_attach</code>() will return an - error and SR-IOV will not be available on the PF device. If a driver does - not accept configuration parameters for either the PF device or the VF - devices, the driver must pass an empty schema for that device. The SR-IOV - infrastructure takes ownership of the <var class="Fa">pf_schema</var> and - <var class="Fa">vf_schema</var> and is responsible for freeing them. The - driver must never free the schemas itself.</p> -<p class="Pp" id="pci_iov_attach_name">The - <a class="permalink" href="#pci_iov_attach_name"><code class="Fn">pci_iov_attach_name</code></a>() - function is a variant of <code class="Fn">pci_iov_attach</code>() that - allows the name of the associated character device in - <span class="Pa">/dev/iov</span> to be specified by - <var class="Fa">fmt</var>. The <code class="Fn">pci_iov_attach</code>() - function uses the name of <var class="Fa">dev</var> as the device name.</p> -<p class="Pp" id="pci_iov_detach">The - <a class="permalink" href="#pci_iov_detach"><code class="Fn">pci_iov_detach</code></a>() - function is used to advise the SR-IOV infrastructure that the driver for the - given device is attempting to detach and that all SR-IOV resources for the - device must be released. This function must be called during the - <a class="Xr">DEVICE_DETACH(9)</a> method if - <code class="Fn">pci_iov_attach</code>() was successfully called on the - device and <code class="Fn">pci_iov_detach</code>() has not subsequently - been called on the device and returned no error. If this function returns an - error, the <a class="Xr">DEVICE_DETACH(9)</a> method must fail and return an - error, as detaching the PF driver while VF devices are active would cause - system instability. This function is safe to call and will always succeed if - <code class="Fn">pci_iov_attach</code>() previously failed with an error on - the given device, or if <code class="Fn">pci_iov_attach</code>() was never - called on the device.</p> -<p class="Pp" id="pci_save_state">The - <a class="permalink" href="#pci_save_state"><code class="Fn">pci_save_state</code></a>() - and - <a class="permalink" href="#pci_restore_state"><code class="Fn" id="pci_restore_state">pci_restore_state</code></a>() - functions can be used by a device driver to save and restore standard PCI - config registers. The <code class="Fn">pci_save_state</code>() function must - be invoked while the device has valid state before - <code class="Fn">pci_restore_state</code>() can be used. If the device is - not in the fully-powered state (<code class="Dv">PCI_POWERSTATE_D0</code>) - when <code class="Fn">pci_restore_state</code>() is invoked, then the device - will be transitioned to <code class="Dv">PCI_POWERSTATE_D0</code> before any - config registers are restored.</p> -<p class="Pp" id="pcie_flr">The - <a class="permalink" href="#pcie_flr"><code class="Fn">pcie_flr</code></a>() - function requests a Function Level Reset (FLR) of <var class="Fa">dev</var>. - If <var class="Fa">dev</var> is not a PCI-express device or does not support - Function Level Resets via the PCI-express device control register, - <code class="Dv">false</code> is returned. Pending transactions are drained - by disabling busmastering and calling - <code class="Fn">pcie_wait_for_pending_transactions</code>() before - resetting the device. The <var class="Fa">max_delay</var> argument specifies - the maximum timeout to wait for pending transactions as described for - <code class="Fn">pcie_wait_for_pending_transactions</code>(). If - <code class="Fn">pcie_wait_for_pending_transactions</code>() fails with a - timeout and <var class="Fa">force</var> is <code class="Dv">false</code>, - busmastering is re-enabled and <code class="Dv">false</code> is returned. If - <code class="Fn">pcie_wait_for_pending_transactions</code>() fails with a - timeout and <var class="Fa">force</var> is <code class="Dv">true</code>, the - device is reset despite the timeout. After the reset has been requested, - <code class="Nm">pcie_flr</code> sleeps for at least 100 milliseconds before - returning <code class="Dv">true</code>. Note that - <code class="Nm">pcie_flr</code> does not save and restore any state around - the reset. The caller should save and restore state as needed.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Message_Signaled_Interrupts"><a class="permalink" href="#Message_Signaled_Interrupts">Message - Signaled Interrupts</a></h2> -<p class="Pp">Message Signaled Interrupts (MSI) and Enhanced Message Signaled - Interrupts (MSI-X) are PCI capabilities that provide an alternate method for - PCI devices to signal interrupts. The legacy INTx interrupt is available to - PCI devices as a <code class="Dv">SYS_RES_IRQ</code> resource with a - resource ID of zero. MSI and MSI-X interrupts are available to PCI devices - as one or more <code class="Dv">SYS_RES_IRQ</code> resources with resource - IDs greater than zero. A driver must ask the PCI bus to allocate MSI or - MSI-X interrupts using <code class="Fn">pci_alloc_msi</code>() or - <code class="Fn">pci_alloc_msix</code>() before it can use MSI or MSI-X - <code class="Dv">SYS_RES_IRQ</code> resources. A driver is not allowed to - use the legacy INTx <code class="Dv">SYS_RES_IRQ</code> resource if MSI or - MSI-X interrupts have been allocated, and attempts to allocate MSI or MSI-X - interrupts will fail if the driver is currently using the legacy INTx - <code class="Dv">SYS_RES_IRQ</code> resource. A driver is only allowed to - use either MSI or MSI-X, but not both.</p> -<p class="Pp" id="pci_msi_count">The - <a class="permalink" href="#pci_msi_count"><code class="Fn">pci_msi_count</code></a>() - function returns the maximum number of MSI messages supported by the device - <var class="Fa">dev</var>. If the device does not support MSI, then - <code class="Fn">pci_msi_count</code>() returns zero.</p> -<p class="Pp" id="pci_alloc_msi">The - <a class="permalink" href="#pci_alloc_msi"><code class="Fn">pci_alloc_msi</code></a>() - function attempts to allocate <var class="Fa">*count</var> MSI messages for - the device <var class="Fa">dev</var>. The - <code class="Fn">pci_alloc_msi</code>() function may allocate fewer messages - than requested for various reasons including requests for more messages than - the device <var class="Fa">dev</var> supports, or if the system has a - shortage of available MSI messages. On success, <var class="Fa">*count</var> - is set to the number of messages allocated and - <code class="Fn">pci_alloc_msi</code>() returns zero. The - <code class="Dv">SYS_RES_IRQ</code> resources for the allocated messages - will be available at consecutive resource IDs beginning with one. If - <code class="Fn">pci_alloc_msi</code>() is not able to allocate any - messages, it returns an error. Note that MSI only supports message counts - that are powers of two; requests to allocate a non-power of two count of - messages will fail.</p> -<p class="Pp" id="pci_release_msi">The - <a class="permalink" href="#pci_release_msi"><code class="Fn">pci_release_msi</code></a>() - function is used to release any allocated MSI or MSI-X messages back to the - system. If any MSI or MSI-X <code class="Dv">SYS_RES_IRQ</code> resources - are allocated by the driver or have a configured interrupt handler, this - function will fail with <code class="Er">EBUSY</code>. The - <code class="Fn">pci_release_msi</code>() function returns zero on success - and an error on failure.</p> -<p class="Pp" id="pci_msix_count">The - <a class="permalink" href="#pci_msix_count"><code class="Fn">pci_msix_count</code></a>() - function returns the maximum number of MSI-X messages supported by the - device <var class="Fa">dev</var>. If the device does not support MSI-X, then - <code class="Fn">pci_msix_count</code>() returns zero.</p> -<p class="Pp" id="pci_msix_pba_bar">The - <a class="permalink" href="#pci_msix_pba_bar"><code class="Fn">pci_msix_pba_bar</code></a>() - function returns the offset in configuration space of the Base Address - Register (BAR) containing the MSI-X Pending Bit Array (PBA) for device - <var class="Fa">dev</var>. The returned value can be used as the resource ID - with <a class="Xr">bus_alloc_resource(9)</a> and - <a class="Xr">bus_release_resource(9)</a> to allocate the BAR. If the device - does not support MSI-X, then <code class="Fn">pci_msix_pba_bar</code>() - returns -1.</p> -<p class="Pp" id="pci_msix_table_bar">The - <a class="permalink" href="#pci_msix_table_bar"><code class="Fn">pci_msix_table_bar</code></a>() - function returns the offset in configuration space of the BAR containing the - MSI-X vector table for device <var class="Fa">dev</var>. The returned value - can be used as the resource ID with <a class="Xr">bus_alloc_resource(9)</a> - and <a class="Xr">bus_release_resource(9)</a> to allocate the BAR. If the - device does not support MSI-X, then - <code class="Fn">pci_msix_table_bar</code>() returns -1.</p> -<p class="Pp" id="pci_alloc_msix">The - <a class="permalink" href="#pci_alloc_msix"><code class="Fn">pci_alloc_msix</code></a>() - function attempts to allocate <var class="Fa">*count</var> MSI-X messages - for the device <var class="Fa">dev</var>. The - <code class="Fn">pci_alloc_msix</code>() function may allocate fewer - messages than requested for various reasons including requests for more - messages than the device <var class="Fa">dev</var> supports, or if the - system has a shortage of available MSI-X messages. On success, - <var class="Fa">*count</var> is set to the number of messages allocated and - <code class="Fn">pci_alloc_msix</code>() returns zero. For MSI-X messages, - the resource ID for each <code class="Dv">SYS_RES_IRQ</code> resource - identifies the index in the MSI-X table of the corresponding message. A - resource ID of one maps to the first index of the MSI-X table; a resource ID - two identifies the second index in the table, etc. The - <code class="Fn">pci_alloc_msix</code>() function assigns the - <var class="Fa">*count</var> messages allocated to the first - <var class="Fa">*count</var> table indices. If - <code class="Fn">pci_alloc_msix</code>() is not able to allocate any - messages, it returns an error. Unlike MSI, MSI-X does not require message - counts that are powers of two.</p> -<p class="Pp" id="pci_alloc_msix~2">The BARs containing the MSI-X vector table - and PBA must be allocated via <a class="Xr">bus_alloc_resource(9)</a> before - calling - <a class="permalink" href="#pci_alloc_msix~2"><code class="Fn">pci_alloc_msix</code></a>() - and must not be released until after calling - <code class="Fn">pci_release_msi</code>(). Note that the vector table and - PBA may be stored in the same BAR or in different BARs.</p> -<p class="Pp" id="pci_pending_msix">The - <a class="permalink" href="#pci_pending_msix"><code class="Fn">pci_pending_msix</code></a>() - function examines the <var class="Fa">dev</var> device's PBA to determine - the pending status of the MSI-X message at table index - <var class="Fa">index</var>. If the indicated message is pending, this - function returns a non-zero value; otherwise, it returns zero. Passing an - invalid <var class="Fa">index</var> to this function will result in - undefined behavior.</p> -<p class="Pp" id="pci_alloc_msix~3">As mentioned in the description of - <a class="permalink" href="#pci_alloc_msix~3"><code class="Fn">pci_alloc_msix</code></a>(), - MSI-X messages are initially assigned to the first N table entries. A driver - may use a different distribution of available messages to table entries via - the <code class="Fn">pci_remap_msix</code>() function. Note that this - function must be called after a successful call to - <code class="Fn">pci_alloc_msix</code>() but before any of the - <code class="Dv">SYS_RES_IRQ</code> resources are allocated. The - <code class="Fn">pci_remap_msix</code>() function returns zero on success, - or an error on failure.</p> -<p class="Pp" id="pci_alloc_msix~4">The <var class="Fa">vectors</var> array - should contain <var class="Fa">count</var> message vectors. The array maps - directly to the MSI-X table in that the first entry in the array specifies - the message used for the first entry in the MSI-X table, the second entry in - the array corresponds to the second entry in the MSI-X table, etc. The - vector value in each array index can either be zero to indicate that no - message should be assigned to the corresponding MSI-X table entry, or it can - be a number from one to N (where N is the count returned from the previous - call to - <a class="permalink" href="#pci_alloc_msix~4"><code class="Fn">pci_alloc_msix</code></a>()) - to indicate which of the allocated messages should be assigned to the - corresponding MSI-X table entry.</p> -<p class="Pp" id="pci_remap_msix">If - <a class="permalink" href="#pci_remap_msix"><code class="Fn">pci_remap_msix</code></a>() - succeeds, each MSI-X table entry with a non-zero vector will have an - associated <code class="Dv">SYS_RES_IRQ</code> resource whose resource ID - corresponds to the table index as described above for - <code class="Fn">pci_alloc_msix</code>(). MSI-X table entries that with a - vector of zero will not have an associated - <code class="Dv">SYS_RES_IRQ</code> resource. Additionally, if any of the - original messages allocated by <code class="Fn">pci_alloc_msix</code>() are - not used in the new distribution of messages in the MSI-X table, they will - be released automatically. Note that if a driver wishes to use fewer - messages than were allocated by <code class="Fn">pci_alloc_msix</code>(), - the driver must use a single, contiguous range of messages beginning with - one in the new distribution. The <code class="Fn">pci_remap_msix</code>() - function will fail if this condition is not met.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Device_Events"><a class="permalink" href="#Device_Events">Device - Events</a></h2> -<p class="Pp">The <var class="Va">pci_add_device</var> event handler is invoked - every time a new PCI device is added to the system. This includes the - creation of Virtual Functions via SR-IOV.</p> -<p class="Pp">The <var class="Va">pci_delete_device</var> event handler is - invoked every time a PCI device is removed from the system.</p> -<p class="Pp">Both event handlers pass the <var class="Vt">device_t</var> object - of the relevant PCI device as <var class="Fa">dev</var> to each callback - function. Both event handlers are invoked while <var class="Fa">dev</var> is - unattached but with valid instance variables.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pci(4)</a>, <a class="Xr">pciconf(8)</a>, - <a class="Xr">bus_alloc_resource(9)</a>, <a class="Xr">bus_dma(9)</a>, - <a class="Xr">bus_release_resource(9)</a>, - <a class="Xr">bus_setup_intr(9)</a>, <a class="Xr">bus_teardown_intr(9)</a>, - <a class="Xr">devclass(9)</a>, <a class="Xr">device(9)</a>, - <a class="Xr">driver(9)</a>, <a class="Xr">eventhandler(9)</a>, - <a class="Xr">rman(9)</a></p> -<p class="Pp"><cite class="Rs"><span class="RsT">NewBus</span>, - <i class="RsB">FreeBSD Developers' Handbook</i>, - <a class="RsU" href="https://docs.freebsd.org/en/books/developers-handbook/">https://docs.freebsd.org/en/books/developers-handbook/</a>.</cite></p> -<p class="Pp"><cite class="Rs"><span class="RsA">Shanley</span> and - <span class="RsA">Anderson</span>, <i class="RsB">PCI System - Architecture</i>, <i class="RsI">Addison-Wesley</i>, <span class="RsN">2nd - Edition</span>, <span class="RsO">ISBN 0-201-30974-2</span>.</cite></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@FreeBSD.org">bms@FreeBSD.org</a>> and - <span class="An">John Baldwin</span> - <<a class="Mt" href="mailto:jhb@FreeBSD.org">jhb@FreeBSD.org</a>>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">The kernel PCI code has a number of references to “slot - numbers”. These do not refer to the geographic location of PCI - devices, but to the device number assigned by the combination of the PCI - IDSEL mechanism and the platform firmware. This should be taken note of when - working with the kernel PCI code.</p> -<p class="Pp">The PCI bus driver should allocate the MSI-X vector table and PBA - internally as necessary rather than requiring the caller to do so.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 27, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pci_iov_schema.9 3.html b/static/freebsd/man9/pci_iov_schema.9 3.html deleted file mode 100644 index ae4d9e47..00000000 --- a/static/freebsd/man9/pci_iov_schema.9 3.html +++ /dev/null @@ -1,233 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PCI_IOV_SCHEMA(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PCI_IOV_SCHEMA(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pci_iov_schema</code>, - <code class="Nm">pci_iov_schema_alloc_node</code>, - <code class="Nm">pci_iov_schema_add_bool</code>, - <code class="Nm">pci_iov_schema_add_string</code>, - <code class="Nm">pci_iov_schema_add_uint8</code>, - <code class="Nm">pci_iov_schema_add_uint16</code>, - <code class="Nm">pci_iov_schema_add_uint32</code>, - <code class="Nm">pci_iov_schema_add_uint64</code>, - <code class="Nm">pci_iov_schema_add_unicast_mac</code> — - <span class="Nd">PCI SR-IOV config schema interface</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/stdarg.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/nv.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">sys/iov_schema.h</a>></code></p> -<p class="Pp"><var class="Ft">nvlist_t *</var> - <br/> - <code class="Fn">pci_iov_schema_alloc_node</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pci_iov_schema_add_bool</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *schema</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - flags</var>, <var class="Fa" style="white-space: nowrap;">int - defaultVal</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pci_iov_schema_add_string</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *schema</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - flags</var>, <var class="Fa" style="white-space: nowrap;">const char - *defaultVal</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pci_iov_schema_add_uint8</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *schema</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - flags</var>, <var class="Fa" style="white-space: nowrap;">uint8_t - defaultVal</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pci_iov_schema_add_uint16</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *schema</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - flags</var>, <var class="Fa" style="white-space: nowrap;">uint16_t - defaultVal</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pci_iov_schema_add_uint32</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *schema</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - flags</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - defaultVal</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pci_iov_schema_add_uint64</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *schema</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - flags</var>, <var class="Fa" style="white-space: nowrap;">uint64_t - defaultVal</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pci_iov_schema_add_unicast_mac</code>(<var class="Fa" style="white-space: nowrap;">nvlist_t - *schema</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">uint32_t - flags</var>, <var class="Fa" style="white-space: nowrap;">const uint8_t - *defaultVal</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The PCI Single-Root I/O Virtualization (SR-IOV) configuration - schema is a data structure that describes the device-specific configuration - parameters that a PF driver will accept when SR-IOV is enabled on the PF - device. Each PF driver defines two schema instances: the PF schema and the - VF schema. The PF schema describes configuration that applies to the PF - device as a whole. The VF schema describes configuration that applies to an - individual VF device. Different VF devices may have different configuration - applied to them, as long as the configuration for each VF conforms to the VF - schema.</p> -<p class="Pp">A PF driver builds a configuration schema by first allocating a - schema node and then adding configuration parameter specifications to the - schema. The configuration parameter specification consists of a name and a - value type.</p> -<p class="Pp">Configuration parameter names are case-insensitive. It is an error - to specify two or more configuration parameters with the same name. It is - also an error to specific a configuration parameter that uses the same name - as a configuration parameter used by the SR-IOV infrastructure. See - <a class="Xr">iovctl.conf(5)</a> for documentation of all configuration - parameters used by the SR-IOV infrastructure.</p> -<p class="Pp">The parameter type constrains the possible values that the - configuration parameter may take.</p> -<p class="Pp">A configuration parameter may be specified as a required parameter - by setting the <code class="Dv">IOV_SCHEMA_REQUIRED</code> flag in the - <span class="Pa">flags</span> argument. Required parameters must be - specified by the user when SR-IOV is enabled. If the user does not specify a - required parameter, the SR-IOV infrastructure will abort the request to - enable SR-IOV and return an error to the user.</p> -<p class="Pp">Alternatively, a configuration parameter may be given a default - value by setting the <code class="Dv">IOV_SCHEMA_HASDEFAULT</code> flag in - the <span class="Pa">flags</span> argument. If a configuration parameter has - a default value but the user has not specified a value for that parameter, - then the SR-IOV infrastructure will apply <span class="Pa">defaultVal</span> - for that parameter in the configuration before passing it to the PF driver. - It is an error for the value of the <span class="Pa">defaultVal</span> - parameter to not conform to the restrictions of the specified type. If this - flag is not specified then the <span class="Pa">defaultVal</span> argument - is ignored. This flag is not compatible with the - <code class="Dv">IOV_SCHEMA_REQUIRED</code> flag; it is an error to specify - both on the same parameter.</p> -<p class="Pp">The SR-IOV infrastructure guarantees that all configuration - parameters that are either specified as required or given a default value - will be present in the configuration passed to the PF driver. Configuration - parameters that are neither specified as required nor given a default value - are optional and may or may not be present in the configuration passed to - the PF driver.</p> -<p class="Pp">It is highly recommended that a PF driver reserve the use of - optional parameters for configuration that is truly optional. For example, a - Network Interface PF device might have the option to encapsulate all traffic - to and from a VF device in a vlan tag. The PF driver could expose that - option as a "vlan" parameter accepting an integer argument - specifying the vlan tag. In this case, it would be appropriate to set the - "vlan" parameter as an optional parameter as it would be - legitimate for a VF to be configured to have no vlan tagging enabled at - all.</p> -<p class="Pp">Alternatively, if the PF device had an boolean option that - controlled whether the VF was allowed to change its MAC address, it would - not be appropriate to set this parameter as optional. The PF driver must - either allow the MAC to change or not, so it would be more appropriate for - the PF driver to document the default behaviour by specifying a default - value in the schema (or potentially force the user to make the choice by - setting the parameter to be required).</p> -<p class="Pp">Configuration parameters that have security implications must - default to the most secure configuration possible.</p> -<p class="Pp">All device-specific configuration parameters must be documented in - the manual page for the PF driver, or in a separate manual page that is - cross-referenced from the main driver manual page.</p> -<p class="Pp">It is not necessary for a PF driver to check for failure from any - of these functions. If an error occurs, it is flagged in the schema. The - <a class="Xr">pci_iov_attach(9)</a> function checks for this error and will - fail to initialize SR-IOV on the PF device if an error is set in the schema. - If this occurs, it is recommended that the PF driver still succeed in - attaching and run with SR-IOV disabled on the device.</p> -<p class="Pp" id="pci_iov_schema_alloc_node">The - <a class="permalink" href="#pci_iov_schema_alloc_node"><code class="Fn">pci_iov_schema_alloc_node</code></a>() - function is used to allocate an empty configuration schema. It is not - necessary to check for failure from this function. The SR-IOV infrastructure - will gracefully handle failure to allocate a schema and will simply not - enable SR-IOV on the PF device.</p> -<p class="Pp" id="pci_iov_schema_add_bool">The - <a class="permalink" href="#pci_iov_schema_add_bool"><code class="Fn">pci_iov_schema_add_bool</code></a>() - function is used to specify a configuration parameter in the given schema - with the name <span class="Pa">name</span> and having a boolean type. - Boolean values can only take the value true or false (1 or 0, - respectively).</p> -<p class="Pp" id="pci_iov_schema_add_string">The - <a class="permalink" href="#pci_iov_schema_add_string"><code class="Fn">pci_iov_schema_add_string</code></a>() - function is used to specify a configuration parameter in the given schema - with the name <span class="Pa">name</span> and having a string type. String - values are standard C strings.</p> -<p class="Pp" id="pci_iov_schema_add_uint8">The - <a class="permalink" href="#pci_iov_schema_add_uint8"><code class="Fn">pci_iov_schema_add_uint8</code></a>() - function is used to specify a configuration parameter in the given schema - with the name <span class="Pa">name</span> and having a - <var class="Vt">uint8_t</var> type. Values of type - <var class="Vt">uint8_t</var> are unsigned integers in the range 0 to 255, - inclusive.</p> -<p class="Pp" id="pci_iov_schema_add_uint16">The - <a class="permalink" href="#pci_iov_schema_add_uint16"><code class="Fn">pci_iov_schema_add_uint16</code></a>() - function is used to specify a configuration parameter in the given schema - with the name <span class="Pa">name</span> and having a - <var class="Vt">uint16_t</var> type. Values of type - <var class="Vt">uint16_t</var> are unsigned integers in the range 0 to - 65535, inclusive.</p> -<p class="Pp" id="pci_iov_schema_add_uint32">The - <a class="permalink" href="#pci_iov_schema_add_uint32"><code class="Fn">pci_iov_schema_add_uint32</code></a>() - function is used to specify a configuration parameter in the given schema - with the name <span class="Pa">name</span> and having a - <var class="Vt">uint32_t</var> type. Values of type - <var class="Vt">uint32_t</var> are unsigned integers in the range 0 to - (2**32 - 1), inclusive.</p> -<p class="Pp" id="pci_iov_schema_add_uint64">The - <a class="permalink" href="#pci_iov_schema_add_uint64"><code class="Fn">pci_iov_schema_add_uint64</code></a>() - function is used to specify a configuration parameter in the given schema - with the name <span class="Pa">name</span> and having a - <var class="Vt">uint64_t</var> type. Values of type - <var class="Vt">uint64_t</var> are unsigned integers in the range 0 to - (2**64 - 1), inclusive.</p> -<p class="Pp" id="pci_iov_schema_add_unicast_mac">The - <a class="permalink" href="#pci_iov_schema_add_unicast_mac"><code class="Fn">pci_iov_schema_add_unicast_mac</code></a>() - function is used to specify a configuration parameter in the given schema - with the name <span class="Pa">name</span> and having a unicast-mac type. - Values of type unicast-mac are binary values exactly 6 bytes long. The MAC - address is guaranteed to not be a multicast or broadcast address.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">pci_iov_schema_alloc_node</code>() function - returns a pointer to the allocated schema, or NULL if a failure occurs.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pci(9)</a>, <a class="Xr">PCI_IOV_ADD_VF(9)</a>, - <a class="Xr">PCI_IOV_INIT(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Ryan Stone</span> - ⟨rstone@FreeBSD.org⟩.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 8, 2015</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pfil.9 3.html b/static/freebsd/man9/pfil.9 3.html deleted file mode 100644 index 1a7b42e2..00000000 --- a/static/freebsd/man9/pfil.9 3.html +++ /dev/null @@ -1,135 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PFIL(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PFIL(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pfil</code>, - <code class="Nm">pfil_head_register</code>, - <code class="Nm">pfil_head_unregister</code>, - <code class="Nm">pfil_link</code>, <code class="Nm">pfil_run_hooks</code> - — <span class="Nd">packet filter interface</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mbuf.h</a>></code> - <br/> - <code class="In">#include <<a class="In">net/pfil.h</a>></code></p> -<p class="Pp"><var class="Ft">pfil_head_t</var> - <br/> - <code class="Fn">pfil_head_register</code>(<var class="Fa" style="white-space: nowrap;">struct - pfil_head_args *args</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pfil_head_unregister</code>(<var class="Fa" style="white-space: nowrap;">struct - pfil_head_t *head</var>);</p> -<p class="Pp"><var class="Ft">pfil_hook_t</var> - <br/> - <code class="Fn">pfil_add_hook</code>(<var class="Fa" style="white-space: nowrap;">struct - pfil_hook_args *</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pfil_remove_hook</code>(<var class="Fa" style="white-space: nowrap;">pfil_hook_t</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pfil_link</code>(<var class="Fa" style="white-space: nowrap;">struct - pfil_link_args *args</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pfil_run_hooks</code>(<var class="Fa" style="white-space: nowrap;">phil_head_t - *</var>, <var class="Fa" style="white-space: nowrap;">pfil_packet_t</var>, - <var class="Fa" style="white-space: nowrap;">struct ifnet *</var>, - <var class="Fa" style="white-space: nowrap;">int</var>, - <var class="Fa" style="white-space: nowrap;">struct inpcb *</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">pfil</code> framework allows for a specified - function or a list of functions to be invoked for every incoming or outgoing - packet for a particular network I/O stream. These hooks may be used to - implement a firewall or perform packet transformations.</p> -<p class="Pp" id="heads">Packet filtering points, for historical reasons named - <a class="permalink" href="#heads"><i class="Em">heads</i></a>, are - registered with - <a class="permalink" href="#pfil_head_register"><code class="Fn" id="pfil_head_register">pfil_head_register</code></a>(). - The function is supplied with special versioned <var class="Vt">struct - pfil_head_args</var> structure that specifies type and features of the head - as well as human readable name. If the filtering point to be ever destroyed, - the subsystem that created it must unregister it with call to - <a class="permalink" href="#pfil_head_unregister"><code class="Fn" id="pfil_head_unregister">pfil_head_unregister</code></a>().</p> -<p class="Pp" id="hooks">Packet filtering systems may register arbitrary number - of filters, for historical reasons named - <a class="permalink" href="#hooks"><i class="Em">hooks</i></a>. To register - a new hook - <a class="permalink" href="#pfil_add_hook"><code class="Fn" id="pfil_add_hook">pfil_add_hook</code></a>() - with special versioned <var class="Vt">struct pfil_hook_args</var> structure - is called. The structure specifies type and features of the hook, pointer to - the actual filtering function and user readable name of the filtering module - and ruleset name. Later hooks can be removed with - <a class="permalink" href="#pfil_remove_hook"><code class="Fn" id="pfil_remove_hook">pfil_remove_hook</code></a>() - functions.</p> -<p class="Pp" id="hook">To connect existing - <a class="permalink" href="#hook"><i class="Em">hook</i></a> to an existing - <i class="Em">head</i> function - <a class="permalink" href="#pfil_link"><code class="Fn" id="pfil_link">pfil_link</code></a>() - shall be used. The function is supplied with versioned - <var class="Vt">struct pfil_link_args</var> structure that specifies either - literal names of hook and head or pointers to them. Typically - <code class="Fn">pfil_link</code>() is called by filtering modules to - autoregister their default ruleset and default filtering points. It also - serves on the kernel side of <a class="Xr">ioctl(2)</a> when user changes - <code class="Nm">pfil</code> configuration with help of - <a class="Xr">pfilctl(8)</a> utility.</p> -<p class="Pp" id="pfil_run_hooks">For every packet traveling through a - <i class="Em">head</i> the latter shall invoke - <a class="permalink" href="#pfil_run_hooks"><code class="Fn">pfil_run_hooks</code></a>(). - The function can accept either <var class="Vt">struct mbuf *</var> pointer - or a <var class="Vt">void *</var> pointer and length. In case if a hooked - filtering module cannot understand <var class="Vt">void *</var> pointer - <code class="Nm">pfil</code> will provide it with a fake one. All calls to - <code class="Fn">pfil_run_hooks</code>() are performed in network - <a class="Xr">epoch(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HEADS_(filtering_points)"><a class="permalink" href="#HEADS_(filtering_points)">HEADS - (filtering points)</a></h1> -<p class="Pp">By default kernel creates the following heads:</p> -<dl class="Bl-tag"> - <dt>inet</dt> - <dd>IPv4 packets.</dd> - <dt>inet6</dt> - <dd>IPv6 packets.</dd> - <dt>ethernet</dt> - <dd>Link-layer packets.</dd> -</dl> -<p class="Pp">Default rulesets are automatically linked to these heads to - preserve historical behaviour.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ipfilter(4)</a>, <a class="Xr">ipfw(4)</a>, - <a class="Xr">pf(4)</a>, <a class="Xr">pfilctl(8)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">pfil</code> interface first appeared in - <span class="Ux">NetBSD 1.3</span>. The <code class="Nm">pfil</code> - interface was imported into <span class="Ux">FreeBSD 5.2</span>. In - <span class="Ux">FreeBSD 13.0</span> the interface was significantly - rewritten.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 28, 2019</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pfind.9 4.html b/static/freebsd/man9/pfind.9 4.html deleted file mode 100644 index 9ec43a3f..00000000 --- a/static/freebsd/man9/pfind.9 4.html +++ /dev/null @@ -1,83 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PFIND(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PFIND(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pfind</code>, <code class="Nm">pfind_any</code>, - <code class="Nm">pfind_any_locked</code> — <span class="Nd">locate a - process by number</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/proc.h</a>></code></p> -<p class="Pp"><var class="Ft">struct proc *</var> - <br/> - <code class="Fn">pfind</code>(<var class="Fa" style="white-space: nowrap;">pid_t - pid</var>);</p> -<p class="Pp"><var class="Ft">struct proc *</var> - <br/> - <code class="Fn">pfind_any</code>(<var class="Fa" style="white-space: nowrap;">pid_t - pid</var>);</p> -<p class="Pp"><var class="Ft">struct proc *</var> - <br/> - <code class="Fn">pfind_any_locked</code>(<var class="Fa" style="white-space: nowrap;">pid_t - pid</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pfind"><code class="Fn" id="pfind">pfind</code></a>() - function walks the list of processes in the system, looking for the one with - a process ID of <var class="Fa">pid</var>. If the process exists, and is not - in the zombie state, a pointer to the process structure will be - returned.</p> -<p class="Pp" id="pfind_any"><a class="permalink" href="#pfind_any"><code class="Fn">pfind_any</code></a>() - takes a <var class="Fa">pid</var> as its argument. - <code class="Fn">pfind_any</code>() searches the - <var class="Va">allproc</var> list and returns the first process with a - matching PID, whose state may be <code class="Dv">PRS_ZOMBIE</code>.</p> -<p class="Pp" id="pfind_any_locked"><a class="permalink" href="#pfind_any_locked"><code class="Fn">pfind_any_locked</code></a>() - is similar to <code class="Fn">pfind_any</code>(), but it does not lock the - process hash bucket for the given <var class="Vt">pid</var>. Instead, it - asserts the corresponding process hash bucket is already locked.</p> -<p class="Pp" id="pfind~2">All three functions - <a class="permalink" href="#pfind~2"><code class="Fn">pfind</code></a>(), - <code class="Fn">pfind_any</code>(), and - <code class="Fn">pfind_any_locked</code>() lock the - <var class="Vt">proc</var> structure before returning.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp"><code class="Fn">pfind</code>(), - <code class="Fn">pfind_any</code>(), and - <code class="Fn">pfind_any_locked</code>() return pointer to a - <var class="Vt">proc</var> structure on success or - <code class="Dv">NULL</code> on failure.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pget(9)</a>, <a class="Xr">pgfind(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Evan - Sarmiento</span> - <<a class="Mt" href="mailto:kaworu@sektor7.ath.cx">kaworu@sektor7.ath.cx</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 3, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pget.9 4.html b/static/freebsd/man9/pget.9 4.html deleted file mode 100644 index 5f143c73..00000000 --- a/static/freebsd/man9/pget.9 4.html +++ /dev/null @@ -1,87 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PGET(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PGET(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pget</code> — <span class="Nd">locate a - process by number</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/proc.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pget</code>(<var class="Fa" style="white-space: nowrap;">pid_t - pid</var>, <var class="Fa" style="white-space: nowrap;">int flags</var>, - <var class="Fa" style="white-space: nowrap;">struct proc **pp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This function takes a <var class="Fa">pid</var> as its argument, - which can be either a process or thread id, and fills a pointer to the - <var class="Vt">proc</var> structure in <var class="Fa">*pp</var>. In the - latter case, a process owning the specified thread is looked for. The - operation is performed by invoking the <a class="Xr">pfind(9)</a> function. - The found process is returned locked. For the - <code class="Dv">PGET_HOLD</code> case, it is returned unlocked (but held). - The - <a class="permalink" href="#pget"><code class="Fn" id="pget">pget</code></a>() - function can perform additional manipulations, depending on a - <var class="Fa">flags</var> argument.</p> -<p class="Pp">The <var class="Fa">flags</var> argument is the logical OR of some - subset of:</p> -<dl class="Bl-tag"> - <dt id="PGET_HOLD"><a class="permalink" href="#PGET_HOLD"><code class="Dv">PGET_HOLD</code></a></dt> - <dd>If set, the found process will be held and unlocked.</dd> - <dt id="PGET_CANSEE"><a class="permalink" href="#PGET_CANSEE"><code class="Dv">PGET_CANSEE</code></a></dt> - <dd>If set, the found process will be checked for its visibility. See - <a class="Xr">p_cansee(9)</a>.</dd> - <dt id="PGET_CANDEBUG"><a class="permalink" href="#PGET_CANDEBUG"><code class="Dv">PGET_CANDEBUG</code></a></dt> - <dd>If set, the found process will be checked for its debuggability. See - <a class="Xr">p_candebug(9)</a>.</dd> - <dt id="PGET_ISCURRENT"><a class="permalink" href="#PGET_ISCURRENT"><code class="Dv">PGET_ISCURRENT</code></a></dt> - <dd>If set, the found process will be checked that it matches the current - process context.</dd> - <dt id="PGET_NOTWEXIT"><a class="permalink" href="#PGET_NOTWEXIT"><code class="Dv">PGET_NOTWEXIT</code></a></dt> - <dd>If set, the found process will be checked that it does not have the - process flag <code class="Dv">P_WEXIT</code> set.</dd> - <dt id="PGET_NOTINEXEC"><a class="permalink" href="#PGET_NOTINEXEC"><code class="Dv">PGET_NOTINEXEC</code></a></dt> - <dd>If set, the found process will be checked that it does not have the - process flag <code class="Dv">P_INEXEC</code> set.</dd> - <dt id="PGET_NOTID"><a class="permalink" href="#PGET_NOTID"><code class="Dv">PGET_NOTID</code></a></dt> - <dd>If set, <var class="Fa">pid</var> is not assumed as a thread id for values - larger than <code class="Dv">PID_MAX</code>.</dd> - <dt id="PGET_WANTREAD"><a class="permalink" href="#PGET_WANTREAD"><code class="Dv">PGET_WANTREAD</code></a></dt> - <dd>If set, the found process will be checked that the caller may get a read - access to its structure. A shorthand for - (<code class="Dv">PGET_HOLD</code> | <code class="Dv">PGET_CANDEBUG</code> - | <code class="Dv">PGET_NOTWEXIT</code>).</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If the process is found in the specified way, then zero is - returned, otherwise an appropriate error code is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">p_candebug(9)</a>, <a class="Xr">p_cansee(9)</a>, - <a class="Xr">pfind(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 3, 2014</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pgfind.9 4.html b/static/freebsd/man9/pgfind.9 4.html deleted file mode 100644 index e9830402..00000000 --- a/static/freebsd/man9/pgfind.9 4.html +++ /dev/null @@ -1,59 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PGFIND(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PGFIND(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pgfind</code> — <span class="Nd">locate a - process group by number</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/proc.h</a>></code></p> -<p class="Pp"><var class="Ft">struct pgrp *</var> - <br/> - <code class="Fn">pgfind</code>(<var class="Fa" style="white-space: nowrap;">pid_t - pgid</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pgfind"><code class="Fn" id="pgfind">pgfind</code></a>() - function takes a <var class="Fa">pgid</var> as its argument and returns a - pointer to the <var class="Vt">pgrp</var> structure whose - <var class="Va">pg_id</var> is specified in the argument.</p> -<p class="Pp" id="pgfind~2"><a class="permalink" href="#pgfind~2"><code class="Fn">pgfind</code></a>() - locks the <var class="Vt">pgrp</var> structure that is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">pgfind</code>() function returns - <code class="Dv">NULL</code> on failure or a pointer to a - <var class="Vt">pgrp</var> structure on successful completion.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pfind(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Evan - Sarmiento</span> - <<a class="Mt" href="mailto:kaworu@sektor7.ath.cx">kaworu@sektor7.ath.cx</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 8, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/physio.9 4.html b/static/freebsd/man9/physio.9 4.html deleted file mode 100644 index 2992988d..00000000 --- a/static/freebsd/man9/physio.9 4.html +++ /dev/null @@ -1,100 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PHYSIO(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PHYSIO(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">physio</code> — <span class="Nd">initiate - I/O on raw devices</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bio.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/buf.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">physio</code>(<var class="Fa" style="white-space: nowrap;">struct - cdev *dev</var>, <var class="Fa" style="white-space: nowrap;">struct uio - *uio</var>, <var class="Fa" style="white-space: nowrap;">int - ioflag</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#physio"><code class="Fn" id="physio">physio</code></a>() - is a helper function typically called from character device - <code class="Fn">read</code>() and <code class="Fn">write</code>() routines - to start I/O on a user process buffer. The maximum amount of data to - transfer with each call is determined by - <var class="Fa">dev->si_iosize_max</var>. The - <code class="Fn">physio</code>() call converts the I/O request into a - <a class="permalink" href="#strategy"><code class="Fn" id="strategy">strategy</code></a>() - request and passes the new request to the driver's - <code class="Fn">strategy</code>() routine for processing.</p> -<p class="Pp" id="physio~2">Since <var class="Fa">uio</var> normally describes - user space addresses, - <a class="permalink" href="#physio~2"><code class="Fn">physio</code></a>() - needs to lock those pages into memory. This is done by calling - <a class="permalink" href="#vmapbuf"><code class="Fn" id="vmapbuf">vmapbuf</code></a>() - for the appropriate pages. <code class="Fn">physio</code>() always awaits - the completion of the entire requested transfer before returning, unless an - error condition is detected earlier.</p> -<p class="Pp">A break-down of the arguments follows:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">dev</var></dt> - <dd>The device number identifying the device to interact with.</dd> - <dt><var class="Fa">uio</var></dt> - <dd>The description of the entire transfer as requested by the user process. - Currently, the results of passing a <var class="Fa">uio</var> structure - with the <var class="Va">uio_segflg</var> set to anything other than - <code class="Dv">UIO_USERSPACE</code> are undefined.</dd> - <dt id="read"><var class="Fa">ioflag</var></dt> - <dd>The ioflag argument from the - <a class="permalink" href="#read"><code class="Fn">read</code></a>() or - <a class="permalink" href="#write"><code class="Fn" id="write">write</code></a>() - function calling <code class="Fn">physio</code>().</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If successful <code class="Fn">physio</code>() returns 0. - <code class="Er">EFAULT</code> is returned if the address range described by - <var class="Fa">uio</var> is not accessible by the requesting process. - <code class="Fn">physio</code>() will return any error resulting from calls - to the device strategy routine, by examining the - <code class="Dv">B_ERROR</code> buffer flag and the - <var class="Va">b_error</var> field. Note that the actual transfer size may - be less than requested by <var class="Fa">uio</var> if the device signals an - “end of file” condition.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">read(2)</a>, <a class="Xr">write(2)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">physio</code> manual page is originally from - <span class="Ux">NetBSD</span> with minor changes for applicability with - <span class="Ux">FreeBSD</span>.</p> -<p class="Pp">The <code class="Nm">physio</code> call has been completely - re-written for providing higher I/O and paging performance.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 19, 2012</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap.9 4.html b/static/freebsd/man9/pmap.9 4.html deleted file mode 100644 index 7f71ac8d..00000000 --- a/static/freebsd/man9/pmap.9 4.html +++ /dev/null @@ -1,98 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap</code> — - <span class="Nd">machine-dependent portion of virtual memory - subsystem</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">pmap</code> module is the machine-dependent - portion of the <span class="Ux">FreeBSD</span> VM (Virtual Memory) - sub-system. Each function documented herein must have its own - architecture-dependent implementation.</p> -<p class="Pp">The <code class="Nm">pmap</code> module is responsible for - managing hardware-dependent objects such as page tables, address maps, TLBs, - etc.</p> -<p class="Pp">Machine-dependent code must provide the header file - <code class="In"><<a class="In">machine/pmap.h</a>></code>. This file - contains the definition of the <var class="Vt">pmap</var> structure:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct pmap { - /* Contents defined by pmap implementation. */ -}; -typedef struct pmap *pmap_t;</pre> -</div> -<p class="Pp">This header file may also define other data structures used by the - <code class="Nm">pmap</code> implementation.</p> -<p class="Pp">The header file - <code class="In"><<a class="In">vm/pmap.h</a>></code> defines a - structure for tracking <code class="Nm">pmap</code> statistics (see below). - This structure is defined as:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct pmap_statistics { - long resident_count; /* number of mapped pages */ - long wired_count; /* number of wired pages */ -};</pre> -</div> -<p class="Pp">The implementation's <var class="Vt">struct pmap</var> must - contain an instance of this structure having the name - <var class="Va">pm_stats</var>, and it must be updated by the implementation - after each relevant <code class="Nm">pmap</code> operation.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap_activate(9)</a>, - <a class="Xr">pmap_clear_modify(9)</a>, <a class="Xr">pmap_copy(9)</a>, - <a class="Xr">pmap_copy_page(9)</a>, <a class="Xr">pmap_enter(9)</a>, - <a class="Xr">pmap_extract(9)</a>, - <a class="Xr">pmap_extract_and_hold(9)</a>, - <a class="Xr">pmap_growkernel(9)</a>, <a class="Xr">pmap_init(9)</a>, - <a class="Xr">pmap_is_modified(9)</a>, - <a class="Xr">pmap_is_prefaultable(9)</a>, - <a class="Xr">pmap_kextract(9)</a>, <a class="Xr">pmap_map(9)</a>, - <a class="Xr">pmap_mincore(9)</a>, <a class="Xr">pmap_object_init_pt(9)</a>, - <a class="Xr">pmap_page_exists_quick(9)</a>, - <a class="Xr">pmap_page_init(9)</a>, <a class="Xr">pmap_pinit(9)</a>, - <a class="Xr">pmap_pinit0(9)</a>, <a class="Xr">pmap_protect(9)</a>, - <a class="Xr">pmap_qenter(9)</a>, <a class="Xr">pmap_qremove(9)</a>, - <a class="Xr">pmap_quick_enter_page(9)</a>, - <a class="Xr">pmap_quick_remove_page(9)</a>, - <a class="Xr">pmap_release(9)</a>, <a class="Xr">pmap_remove(9)</a>, - <a class="Xr">pmap_remove_all(9)</a>, - <a class="Xr">pmap_remove_pages(9)</a>, - <a class="Xr">pmap_resident_count(9)</a>, - <a class="Xr">pmap_ts_referenced(9)</a>, <a class="Xr">pmap_unwire(9)</a>, - <a class="Xr">pmap_wired_count(9)</a>, <a class="Xr">pmap_zero_area(9)</a>, - <a class="Xr">pmap_zero_page(9)</a>, <a class="Xr">vm_map(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 12, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_activate.9 4.html b/static/freebsd/man9/pmap_activate.9 4.html deleted file mode 100644 index de2fd7da..00000000 --- a/static/freebsd/man9/pmap_activate.9 4.html +++ /dev/null @@ -1,52 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_ACTIVATE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_ACTIVATE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_activate</code> — - <span class="Nd">activate a physical map</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pmap_activate</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_activate"><code class="Fn" id="pmap_activate">pmap_activate</code></a>() - function activates the physical map for a user thread - <var class="Fa">td</var>. This function must be called before the thread's - address space may be accessed.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 21, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_clear_modify.9 4.html b/static/freebsd/man9/pmap_clear_modify.9 4.html deleted file mode 100644 index 1debe353..00000000 --- a/static/freebsd/man9/pmap_clear_modify.9 4.html +++ /dev/null @@ -1,52 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_CLEAR_MODIFY(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_CLEAR_MODIFY(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_clear_modify</code> — - <span class="Nd">set information about physical pages</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pmap_clear_modify</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_clear_modify"><code class="Fn" id="pmap_clear_modify">pmap_clear_modify</code></a>() - function clears the “modified” bit on the physical page - <var class="Fa">m</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap(9)</a>, - <a class="Xr">pmap_is_modified(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 17, 2014</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_copy.9 4.html b/static/freebsd/man9/pmap_copy.9 4.html deleted file mode 100644 index 0126b737..00000000 --- a/static/freebsd/man9/pmap_copy.9 4.html +++ /dev/null @@ -1,78 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_COPY(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_COPY(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_copy</code>, - <code class="Nm">pmap_copy_page</code> — <span class="Nd">copy - physical memory pages</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pmap_copy</code>(<var class="Fa">pmap_t dst_pmap</var>, - <var class="Fa">pmap_t src_pmap</var>, <var class="Fa">vm_offset_t - dst_addr</var>, <var class="Fa">vm_size_t len</var>, - <var class="Fa">vm_offset_t src_addr</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pmap_copy_page</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - src</var>, <var class="Fa" style="white-space: nowrap;">vm_page_t - dst</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_copy"><code class="Fn" id="pmap_copy">pmap_copy</code></a>() - function copies the range specified by <var class="Fa">src_addr</var> and - <var class="Fa">len</var> from the source physical map - <var class="Fa">src_pmap</var> to the destination physical map - <var class="Fa">dst_pmap</var> at the address - <var class="Fa">dst_addr</var>.</p> -<p class="Pp" id="pmap_copy_page">The - <a class="permalink" href="#pmap_copy_page"><code class="Fn">pmap_copy_page</code></a>() - function copies the physical page <var class="Fa">src</var> to the physical - page <var class="Fa">dst</var>, by mapping the page into kernel virtual - address space (KVA), and using - <a class="permalink" href="#bcopy"><code class="Fn" id="bcopy">bcopy</code></a>() - to copy the page.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">The <code class="Fn">pmap_copy</code>() routine is only advisory - and need not do anything. Actually implementing it may seriously reduce - system performance.</p> -<p class="Pp">The <code class="Fn">pmap_copy_page</code>() routine only operates - upon a single page.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">bcopy(3)</a>, <a class="Xr">pmap(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 21, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_enter.9 3.html b/static/freebsd/man9/pmap_enter.9 3.html deleted file mode 100644 index 2070b99f..00000000 --- a/static/freebsd/man9/pmap_enter.9 3.html +++ /dev/null @@ -1,134 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_ENTER(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_ENTER(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_enter</code> — - <span class="Nd">insert a virtual page into a physical map</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pmap_enter</code>(<var class="Fa">pmap_t pmap</var>, - <var class="Fa">vm_offset_t va</var>, <var class="Fa">vm_page_t m</var>, - <var class="Fa">vm_prot_t prot</var>, <var class="Fa">u_int flags</var>, - <var class="Fa">int8_t psind</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_enter"><code class="Fn" id="pmap_enter">pmap_enter</code></a>() - function creates a mapping in the physical map <var class="Fa">pmap</var> - from the virtual address <var class="Fa">va</var> to the physical page - <var class="Fa">m</var> with the protection <var class="Fa">prot</var>. Any - previous mapping at the virtual address <var class="Fa">va</var> is - destroyed.</p> -<p class="Pp">The <var class="Fa">flags</var> argument may have the following - values:</p> -<dl class="Bl-tag"> - <dt id="VM_PROT_READ"><a class="permalink" href="#VM_PROT_READ"><code class="Dv">VM_PROT_READ</code></a></dt> - <dd>A read access to the given virtual address triggered the call.</dd> - <dt id="VM_PROT_WRITE"><a class="permalink" href="#VM_PROT_WRITE"><code class="Dv">VM_PROT_WRITE</code></a></dt> - <dd>A write access to the given virtual address triggered the call.</dd> - <dt id="VM_PROT_EXECUTE"><a class="permalink" href="#VM_PROT_EXECUTE"><code class="Dv">VM_PROT_EXECUTE</code></a></dt> - <dd>An execute access to the given virtual address triggered the call.</dd> - <dt id="PMAP_ENTER_WIRED"><a class="permalink" href="#PMAP_ENTER_WIRED"><code class="Dv">PMAP_ENTER_WIRED</code></a></dt> - <dd>The mapping should be marked as wired.</dd> - <dt id="PMAP_ENTER_NOSLEEP"><a class="permalink" href="#PMAP_ENTER_NOSLEEP"><code class="Dv">PMAP_ENTER_NOSLEEP</code></a></dt> - <dd>This function may not sleep during creation of the mapping. If the mapping - cannot be created without sleeping, an appropriate Mach VM error is - returned.</dd> -</dl> -If the <code class="Dv">PMAP_ENTER_NOSLEEP</code> flag is not specified, this - function must create the requested mapping before returning. It may not fail. - In order to create the requested mapping, this function may destroy any - non-wired mapping in any pmap. -<p class="Pp">The <var class="Fa">psind</var> parameter specifies the page size - that should be used by the mapping. The supported page sizes are described - by the global array <code class="Dv">pagesizes[]</code>. The desired page - size is specified by passing the index of the array element that equals the - desired page size.</p> -<p class="Pp" id="pmap_enter~2">When the - <a class="permalink" href="#pmap_enter~2"><code class="Fn">pmap_enter</code></a>() - function destroys or updates a managed mapping, including an existing - mapping at virtual address <var class="Fa">va</var>, it updates the - <var class="Ft">vm_page</var> structure corresponding to the previously - mapped physical page. If the physical page was accessed through the managed - mapping, then the <var class="Ft">vm_page</var> structure's - <code class="Dv">PGA_REFERENCED</code> aflag is set. If the physical page - was modified through the managed mapping, then the - <a class="permalink" href="#vm_page_dirty"><code class="Fn" id="vm_page_dirty">vm_page_dirty</code></a>() - function is called on the <var class="Ft">vm_page</var> structure.</p> -<p class="Pp">The <code class="Dv">PGA_WRITEABLE</code> aflag must be set for - the page <var class="Fa">m</var> if the new mapping is managed and - writeable. It is advised to clear <code class="Dv">PGA_WRITEABLE</code> for - destroyed mappings if the implementation can ensure that no other writeable - managed mappings for the previously mapped pages exist.</p> -<p class="Pp">If the request modifies an existing mapping to use a different - physical page, an implementation of <code class="Nm">pmap_enter</code> must - invalidate the previous mapping before installing the new one. This ensures - that all threads sharing the pmap keep a consistent view of the mapping, - which is necessary for the correct handling of CoW (copy on write) - faults.</p> -<p class="Pp">If the page <var class="Fa">m</var> is managed, the page must be - busied by the caller or the owning object must be locked. In the later case, - the <code class="Dv">PMAP_ENTER_NOSLEEP</code> must be specified by the - caller.</p> -<p class="Pp" id="pmap_enter~3">The - <a class="permalink" href="#pmap_enter~3"><code class="Fn">pmap_enter</code></a>() - function must handle the multiprocessor TLB consistency for the given - address.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1> -<p class="Pp">On arm and i386 architectures the existing implementation of the - <code class="Nm">pmap_enter</code> function is incomplete, only value 0 for - <var class="Fa">psind</var> is supported. Other supported architectures, - except amd64, have <code class="Dv">pagesizes[]</code> array of size 1.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If successful, the <code class="Fn">pmap_enter</code>() function - returns <code class="Er">KERN_SUCCESS</code>. If the - <code class="Dv">PMAP_ENTER_NOSLEEP</code> flag was specified and the - resources required for the mapping cannot be acquired without sleeping, - <code class="Dv">KERN_RESOURCE_SHORTAGE</code> is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was first written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>> and then - rewritten by - <br/> - <span class="An">Alan Cox</span> - <<a class="Mt" href="mailto:alc@FreeBSD.org">alc@FreeBSD.org</a>> and - <br/> - <span class="An">Konstantin Belousov</span> - <<a class="Mt" href="mailto:kib@FreeBSD.org">kib@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 16, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_extract.9 4.html b/static/freebsd/man9/pmap_extract.9 4.html deleted file mode 100644 index b78eb29a..00000000 --- a/static/freebsd/man9/pmap_extract.9 4.html +++ /dev/null @@ -1,88 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_EXTRACT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_EXTRACT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_extract</code>, - <code class="Nm">pmap_extract_and_hold</code> — <span class="Nd">map - a virtual address to a physical page</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">vm_paddr_t</var> - <br/> - <code class="Fn">pmap_extract</code>(<var class="Fa" style="white-space: nowrap;">pmap_t - pmap</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t - va</var>);</p> -<p class="Pp"><var class="Ft">vm_page_t</var> - <br/> - <code class="Fn">pmap_extract_and_hold</code>(<var class="Fa" style="white-space: nowrap;">pmap_t - pmap</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t - va</var>, <var class="Fa" style="white-space: nowrap;">vm_prot_t - prot</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_extract"><code class="Fn" id="pmap_extract">pmap_extract</code></a>() - function maps a virtual address to a physical page. In certain situations, - callers may use <code class="Fn">pmap_extract_and_hold</code>() instead, to - ensure that the returned page is held.</p> -<p class="Pp" id="pmap_extract_and_hold">The - <a class="permalink" href="#pmap_extract_and_hold"><code class="Fn">pmap_extract_and_hold</code></a>() - function maps a virtual address to a physical page, and atomically holds the - returned page for use by the caller, only if the mapping permits the given - page protection.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">Currently, the page protection requested by the caller is not - verified.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">pmap_extract</code>() function will return - the physical page address associated with the virtual address - <var class="Fa">va</var> inside the physical map <var class="Fa">pmap</var>. - If the mapping does not exist, or if the <var class="Fa">pmap</var> - parameter is <code class="Dv">NULL</code>, then <code class="Dv">NULL</code> - will be returned.</p> -<p class="Pp">The <code class="Fn">pmap_extract_and_hold</code>() function will - return the <var class="Ft">vm_page_t</var> associated with the virtual - address <var class="Fa">va</var> inside the physical map - <var class="Fa">pmap</var>. If the mapping does not exist, the result is a - no-op, and <code class="Dv">NULL</code> will be returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">mutex(9)</a>, <a class="Xr">pmap(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Fn">pmap_extract_and_hold</code>() function was - implemented by <span class="An">Alan L. Cox</span> - <<a class="Mt" href="mailto:alc@imimic.com">alc@imimic.com</a>>. This - manual page was written by <span class="An">Bruce M Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 21, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_growkernel.9 4.html b/static/freebsd/man9/pmap_growkernel.9 4.html deleted file mode 100644 index 54b08971..00000000 --- a/static/freebsd/man9/pmap_growkernel.9 4.html +++ /dev/null @@ -1,52 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_GROWKERNEL(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_GROWKERNEL(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_growkernel</code> — - <span class="Nd">grow the kernel virtual address (KVA) space</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pmap_growkernel</code>(<var class="Fa" style="white-space: nowrap;">vm_offset_t - addr</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_growkernel"><code class="Fn" id="pmap_growkernel">pmap_growkernel</code></a>() - function grows the kernel virtual address space to the virtual address - <var class="Fa">addr</var>.</p> -<p class="Pp">It will allocate more page entries if required.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 21, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_init.9 4.html b/static/freebsd/man9/pmap_init.9 4.html deleted file mode 100644 index 6c49b889..00000000 --- a/static/freebsd/man9/pmap_init.9 4.html +++ /dev/null @@ -1,53 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_INIT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_INIT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_init</code> — - <span class="Nd">initialize the pmap subsystem</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pmap_init</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_init"><code class="Fn" id="pmap_init">pmap_init</code></a>() - function initializes the <a class="Xr">pmap(9)</a> sub-system. It is called - during system initialization by - <a class="permalink" href="#vm_mem_init"><code class="Fn" id="vm_mem_init">vm_mem_init</code></a>(), - to initialize any structures that the <code class="Nm">pmap_init</code> - system needs in order to map between physical and virtual memory.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 12, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_is_modified.9 4.html b/static/freebsd/man9/pmap_is_modified.9 4.html deleted file mode 100644 index 66598ad0..00000000 --- a/static/freebsd/man9/pmap_is_modified.9 4.html +++ /dev/null @@ -1,70 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_IS_MODIFIED(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_IS_MODIFIED(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_is_modified</code>, - <code class="Nm">pmap_ts_modified</code> — <span class="Nd">return - information about physical pages</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">pmap_is_modified</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pmap_ts_referenced</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_is_modified"><code class="Fn" id="pmap_is_modified">pmap_is_modified</code></a>() - and - <a class="permalink" href="#pmap_ts_referenced"><code class="Fn" id="pmap_ts_referenced">pmap_ts_referenced</code></a>() - functions return information about physical pages.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">pmap_is_modified</code>() function returns - the status of the “page modified” bit for the physical page - <var class="Fa">m</var>.</p> -<p class="Pp">The <code class="Fn">pmap_ts_referenced</code>() function returns - a count of reference bits for a page <var class="Fa">m</var>, clearing those - bits. It is not necessary for every reference bit to be cleared, but it is - necessary that 0 only be returned when there are no remaining reference bits - set on the page.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap(9)</a>, - <a class="Xr">pmap_clear_modify(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 17, 2014</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_is_prefaultable.9 4.html b/static/freebsd/man9/pmap_is_prefaultable.9 4.html deleted file mode 100644 index 5ff4daae..00000000 --- a/static/freebsd/man9/pmap_is_prefaultable.9 4.html +++ /dev/null @@ -1,56 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_IS_PREFAULTABLE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_IS_PREFAULTABLE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_is_prefaultable</code> — - <span class="Nd">determine if a page may be prefaulted</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">pmap_is_prefaultable</code>(<var class="Fa" style="white-space: nowrap;">pmap_t - pmap</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t - va</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_is_prefaultable"><code class="Fn" id="pmap_is_prefaultable">pmap_is_prefaultable</code></a>() - function provides a means of determining if the page residing at virtual - address <var class="Fa">va</var> in the physical map - <var class="Fa">pmap</var> may be pre-faulted into main memory.</p> -<p class="Pp">This is a helper function which is called by - <a class="Xr">vm_fault_prefault(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap(9)</a>, - <a class="Xr">vm_fault_prefault(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 21, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_kextract.9 4.html b/static/freebsd/man9/pmap_kextract.9 4.html deleted file mode 100644 index 7a829224..00000000 --- a/static/freebsd/man9/pmap_kextract.9 4.html +++ /dev/null @@ -1,83 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_KEXTRACT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_KEXTRACT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_kextract</code>, - <code class="Nm">vtophys</code> — <span class="Nd">extract a physical - address from the kernel page table</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">vm_paddr_t</var> - <br/> - <code class="Fn">pmap_kextract</code>(<var class="Fa">vm_offset_t - va</var>);</p> -<p class="Pp"><var class="Ft">vm_paddr_t</var> - <br/> - <code class="Fn">vtophys</code>(<var class="Fa">vm_offset_t va</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_kextract"><code class="Fn" id="pmap_kextract">pmap_kextract</code></a>() - function retrieves the underlying physical memory address corresponding to - the given kernel virtual address <var class="Fa">va</var>. The caller is - responsible for ensuring that <var class="Fa">va</var> belongs to a valid - mapping in the kernel address space. The returned physical address is only - meaningful as long as the mapping remains stable, so the caller must also - have some knowledge or guarantee of the mapping's lifetime. For example, it - is invalid to call <code class="Fn">pmap_kextract</code>() with the address - of a malloc'd object while there is a possibility for that object to be - freed concurrently.</p> -<p class="Pp" id="pmap_kextract~2">Unlike <a class="Xr">pmap_extract(9)</a>, - <a class="permalink" href="#pmap_kextract~2"><code class="Fn">pmap_kextract</code></a>() - is safe to be called from any context; it has no internal locking or - sleep.</p> -<p class="Pp" id="vtophys"><a class="permalink" href="#vtophys"><code class="Fn">vtophys</code></a>() - is an alias for <code class="Fn">pmap_kextract</code>() and behaves - identically.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">pmap_kextract</code>() function returns the - physical address of memory mapped at the kernel virtual address - <var class="Fa">va</var>.</p> -<p class="Pp"><code class="Fn">pmap_kextract</code>() generally does not fail. - However, if supplied with an illegitimate value for - <var class="Fa">va</var>, the function may return zero, an invalid non-zero - value, or call <a class="Xr">panic(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap(9)</a>, <a class="Xr">pmap_extract(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Mina - Galić</span> - <<a class="Mt" href="mailto:FreeBSD@igalic.co">FreeBSD@igalic.co</a>>, - based on the <a class="Xr">pmap_extract(9)</a> page written by - <span class="An">Bruce M Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 16, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_map.9 4.html b/static/freebsd/man9/pmap_map.9 4.html deleted file mode 100644 index ea955ec5..00000000 --- a/static/freebsd/man9/pmap_map.9 4.html +++ /dev/null @@ -1,74 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_MAP(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_MAP(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_map</code> — <span class="Nd">map a - physical memory range into kernel virtual address (KVA) space</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">vm_offset_t</var> - <br/> - <code class="Fn">pmap_map</code>(<var class="Fa">vm_offset_t *virt</var>, - <var class="Fa">vm_paddr_t start</var>, <var class="Fa">vm_paddr_t - end</var>, <var class="Fa">int prot</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_map"><code class="Fn" id="pmap_map">pmap_map</code></a>() - function maps a range of physical addresses into kernel virtual address - (KVA) space, from <var class="Fa">start</var> to <var class="Fa">end</var>, - with protection bits <var class="Fa">prot</var>.</p> -<p class="Pp">The value passed in <var class="Fa">*virt</var> is treated as a - hint for the virtual address of the beginning of the mapping.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">The <var class="Fa">prot</var> argument is currently ignored by - machine-dependent implementations.</p> -<p class="Pp">Architectures which can support a direct mapped physical to - virtual region can return the appropriate address within that region, - leaving <var class="Fa">*virt</var> unchanged.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">pmap_map</code>() function returns the - virtual address of the beginning of the mapping, if the mapping was - successfully made; <var class="Fa">*virt</var> will also be updated with the - first usable address after the mapped region.</p> -<p class="Pp">If the function is unsuccessful, <code class="Dv">NULL</code> is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 21, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_mincore.9 4.html b/static/freebsd/man9/pmap_mincore.9 4.html deleted file mode 100644 index 837ec067..00000000 --- a/static/freebsd/man9/pmap_mincore.9 4.html +++ /dev/null @@ -1,66 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_MINCORE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_MINCORE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_mincore</code> — - <span class="Nd">determine if a virtual address is resident in physical - memory</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pmap_mincore</code>(<var class="Fa" style="white-space: nowrap;">pmap_t - pmap</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t - addr</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_mincore"><code class="Fn" id="pmap_mincore">pmap_mincore</code></a>() - function determines if the page at the virtual address - <var class="Fa">addr</var> in the physical map <var class="Fa">pmap</var> is - resident in physical memory. It is the machine-dependent interface used by - the <a class="Xr">mincore(2)</a> system call.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If the page is resident in physical memory, a mask of flags is - returned, whose meaning is documented in <a class="Xr">mincore(2)</a>; - otherwise, 0 is returned.</p> -<p class="Pp">The <var class="Fa">pmap</var> must exist and - <var class="Fa">addr</var> must be mapped into the - <var class="Fa">pmap</var>. If any error occurs, the machine-dependent - implementation should return 0.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">mincore(2)</a>, <a class="Xr">pmap(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 21, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_object_init_pt.9 4.html b/static/freebsd/man9/pmap_object_init_pt.9 4.html deleted file mode 100644 index 012081b1..00000000 --- a/static/freebsd/man9/pmap_object_init_pt.9 4.html +++ /dev/null @@ -1,66 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_OBJECT_INIT_PT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_OBJECT_INIT_PT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_object_init_pt</code> — - <span class="Nd">initialize page tables for a VM object</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pmap_object_init_pt</code>(<var class="Fa">pmap_t pmap</var>, - <var class="Fa">vm_offset_t addr</var>, <var class="Fa">vm_object_t - object</var>, <var class="Fa">vm_pindex_t pindex</var>, - <var class="Fa">vm_size_t size</var>, <var class="Fa">int limit</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_object_init_pt"><code class="Fn" id="pmap_object_init_pt">pmap_object_init_pt</code></a>() - function preloads the page table entries into the specified physical map - <var class="Fa">pmap</var>, for the given <var class="Fa">object</var> at - the virtual address <var class="Fa">addr</var>, for - <var class="Fa">size</var> bytes, beginning at the page index - <var class="Fa">pindex</var> within the object. The map bits - <var class="Fa">limit</var> are heeded when creating the mapping.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">This function is not strictly required by an architecture's - <a class="Xr">pmap(9)</a> implementation, but it does provide performance - benefits if implemented.</p> -<p class="Pp">It is intended to eliminate the blast of soft faults on process - startup, and immediately following a call to <a class="Xr">mmap(2)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap(9)</a>, <a class="Xr">vm_map(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 21, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_page_exists_quick.9 4.html b/static/freebsd/man9/pmap_page_exists_quick.9 4.html deleted file mode 100644 index 310bc4b8..00000000 --- a/static/freebsd/man9/pmap_page_exists_quick.9 4.html +++ /dev/null @@ -1,68 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_PAGE_EXISTS_QUICK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_PAGE_EXISTS_QUICK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_page_exists_quick</code> — - <span class="Nd">determine if a page exists in a physical map</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">pmap_page_exists_quick</code>(<var class="Fa" style="white-space: nowrap;">pmap_t - pmap</var>, <var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_page_exists_quick"><code class="Fn" id="pmap_page_exists_quick">pmap_page_exists_quick</code></a>() - function is used to quickly determine if the page <var class="Fa">m</var> - exists in the physical map <var class="Fa">pmap</var>. It is typically - called from the VM paging code.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">The PV count used above may be changed upwards or downwards in - future; it is only necessary that <code class="Dv">true</code> be returned - for a small subset of pmaps for proper page aging.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">pmap_page_exists_quick</code>() returns - <code class="Dv">true</code> only if the PV entry for the physical map - <var class="Fa">pmap</var> is one of the first 16 PVs linked from the page - <var class="Fa">m</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 21, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_page_init.9 4.html b/static/freebsd/man9/pmap_page_init.9 4.html deleted file mode 100644 index 8a3c7789..00000000 --- a/static/freebsd/man9/pmap_page_init.9 4.html +++ /dev/null @@ -1,52 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_PAGE_INIT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_PAGE_INIT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_page_init</code> — - <span class="Nd">initialize machine-dependent fields of a VM page</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pmap_page_init</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_page_init"><code class="Fn" id="pmap_page_init">pmap_page_init</code></a>() - function initializes the machine-dependent fields of a VM page structure. - This procedure is normally used when adding new pages to the VM page queue - management lists.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap(9)</a>, <a class="Xr">pmap_pinit(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Hiten - Pandya</span> - <<a class="Mt" href="mailto:hmp@FreeBSD.org">hmp@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 10, 2005</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_pinit.9 4.html b/static/freebsd/man9/pmap_pinit.9 4.html deleted file mode 100644 index 174f0b8f..00000000 --- a/static/freebsd/man9/pmap_pinit.9 4.html +++ /dev/null @@ -1,62 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_PINIT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_PINIT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_pinit</code>, - <code class="Nm">pmap_pinit0</code> — <span class="Nd">initialize - pmap structures</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pmap_pinit</code>(<var class="Fa" style="white-space: nowrap;">pmap_t - pmap</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pmap_pinit0</code>(<var class="Fa" style="white-space: nowrap;">pmap_t - pm</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_pinit"><code class="Fn" id="pmap_pinit">pmap_pinit</code></a>() - function initializes the preallocated and zeroed structure - <var class="Fa">pmap</var>, such as one in a <var class="Vt">vmspace</var> - structure.</p> -<p class="Pp" id="pmap_pinit0">The - <a class="permalink" href="#pmap_pinit0"><code class="Fn">pmap_pinit0</code></a>() - function initializes the physical map <var class="Fa">pm</var>, associated - with process 0, the first process created in the system.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap(9)</a>, - <a class="Xr">pmap_growkernel(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 12, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_protect.9 4.html b/static/freebsd/man9/pmap_protect.9 4.html deleted file mode 100644 index 7aeee7d9..00000000 --- a/static/freebsd/man9/pmap_protect.9 4.html +++ /dev/null @@ -1,54 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_PROTECT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_PROTECT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_protect</code> — <span class="Nd">set - physical page protection</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pmap_protect</code>(<var class="Fa">pmap_t pmap</var>, - <var class="Fa">vm_offset_t sva</var>, <var class="Fa">vm_offset_t - eva</var>, <var class="Fa">vm_prot_t prot</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_protect"><code class="Fn" id="pmap_protect">pmap_protect</code></a>() - function sets the physical page permissions to <var class="Fa">prot</var> - for all physical pages in the physical map <var class="Fa">pmap</var> in the - virtual address range between <var class="Fa">sva</var> and - <var class="Fa">eva</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 18, 2014</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_qenter.9 4.html b/static/freebsd/man9/pmap_qenter.9 4.html deleted file mode 100644 index d104731a..00000000 --- a/static/freebsd/man9/pmap_qenter.9 4.html +++ /dev/null @@ -1,78 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_QENTER(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_QENTER(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_qenter</code>, - <code class="Nm">pmap_qremove</code> — <span class="Nd">manage - temporary kernel space mappings</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pmap_qenter</code>(<var class="Fa" style="white-space: nowrap;">vm_offset_t - sva</var>, <var class="Fa" style="white-space: nowrap;">vm_page_t *m</var>, - <var class="Fa" style="white-space: nowrap;">int count</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pmap_qremove</code>(<var class="Fa" style="white-space: nowrap;">vm_offset_t - sva</var>, <var class="Fa" style="white-space: nowrap;">int - count</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_qenter"><code class="Fn" id="pmap_qenter">pmap_qenter</code></a>() - function accepts a linear array of <var class="Fa">count</var> pointers to - wired pages <var class="Fa">*m</var>, and enters each of these pages into - the kernel virtual address (KVA) space, beginning at the address - <var class="Fa">sva</var>. The pages are mapped non-executable, if possible. - (For example, non-PAE i386 has no capability to map pages - non-executable.)</p> -<p class="Pp" id="pmap_qremove">The - <a class="permalink" href="#pmap_qremove"><code class="Fn">pmap_qremove</code></a>() - function tears out a mapping from the kernel virtual address space, - beginning at <var class="Fa">sva</var> and for <var class="Fa">count</var> - pages.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">The <code class="Fn">pmap_qenter</code>() function is intended for - temporary mappings that do not require page modification or reference - counting. Old mappings are simply overwritten. The pages - <a class="permalink" href="#must"><i class="Em" id="must">must</i></a> be - wired into physical memory.</p> -<p class="Pp">The corresponding <code class="Fn">pmap_qremove</code>() function - is intended to remove such temporary mappings.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 15, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_quick_enter_page.9 4.html b/static/freebsd/man9/pmap_quick_enter_page.9 4.html deleted file mode 100644 index 0f1b7876..00000000 --- a/static/freebsd/man9/pmap_quick_enter_page.9 4.html +++ /dev/null @@ -1,93 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_QUICK_ENTER_PAGE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_QUICK_ENTER_PAGE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_quick_enter_page</code>, - <code class="Nm">pmap_quick_remove_page</code> — - <span class="Nd">manage fast, single-page kernel address space - mappings</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">vm_offset_t</var> - <br/> - <code class="Fn">pmap_quick_enter_page</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pmap_quick_remove_page</code>(<var class="Fa" style="white-space: nowrap;">vm_offset_t - kva</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_quick_enter_page"><code class="Fn" id="pmap_quick_enter_page">pmap_quick_enter_page</code></a>() - function accepts a single page <var class="Fa">m</var>, and enters this page - into a preallocated address in kernel virtual address (KVA) space. This - function is intended for temporary mappings that will only be used for a - very short period, for example a copy operation on the page contents.</p> -<p class="Pp" id="pmap_quick_remove_page">The - <a class="permalink" href="#pmap_quick_remove_page"><code class="Fn">pmap_quick_remove_page</code></a>() - function removes a mapping previously created by - <code class="Fn">pmap_quick_enter_page</code>() at - <var class="Fa">kva</var>, making the KVA frame used by - <code class="Fn">pmap_quick_enter_page</code>() available for reuse.</p> -<p class="Pp" id="pmap_quick_enter_page~2">On many architectures, - <a class="permalink" href="#pmap_quick_enter_page~2"><code class="Fn">pmap_quick_enter_page</code></a>() - uses a per-CPU pageframe. In those cases, it must disable preemption on the - local CPU. The corresponding call to - <code class="Fn">pmap_quick_remove_page</code>() then re-enables preemption. - It is therefore not safe for machine-independent code to sleep or perform - locking operations while holding these mappings. Current implementations - only guarantee the availability of a single page for the calling thread, so - calls to <code class="Fn">pmap_quick_enter_page</code>() must not be - nested.</p> -<p class="Pp" id="pmap_quick_enter_page~3"><a class="permalink" href="#pmap_quick_enter_page~3"><code class="Fn">pmap_quick_enter_page</code></a>() - and <code class="Fn">pmap_quick_remove_page</code>() do not sleep, and - <code class="Fn">pmap_quick_enter_page</code>() always returns a valid - address. It is safe to use these functions under all types of locks except - spin mutexes. It is also safe to use them in all thread contexts except - primary interrupt context.</p> -<p class="Pp" id="must">The page - <a class="permalink" href="#must"><i class="Em">must</i></a> not be swapped - or otherwise reused while the mapping is active. It must be either wired or - held, or it must belong to an unmanaged region such as I/O device - memory.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">pmap_quick_enter_page</code>() function - returns the kernel virtual address that is mapped to the page - <var class="Fa">m</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Jason A - Harmening</span> - <<a class="Mt" href="mailto:jah@FreeBSD.org">jah@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 6, 2015</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_release.9 4.html b/static/freebsd/man9/pmap_release.9 4.html deleted file mode 100644 index 7f4d72b3..00000000 --- a/static/freebsd/man9/pmap_release.9 4.html +++ /dev/null @@ -1,60 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_RELEASE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_RELEASE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_release</code> — - <span class="Nd">release resources held by a physical map</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pmap_release</code>(<var class="Fa" style="white-space: nowrap;">pmap_t - pmap</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_release"><code class="Fn" id="pmap_release">pmap_release</code></a>() - function releases any resources held by the physical map - <var class="Fa">pmap</var>. This function is called when a pmap initialized - by the corresponding function, - <a class="permalink" href="#pmap_pinit"><code class="Fn" id="pmap_pinit">pmap_pinit</code></a>() - is being released.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">This function should only be called if <var class="Fa">pmap</var> - no longer contains any valid mappings.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap(9)</a>, <a class="Xr">pmap_pinit(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 21, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_remove.9 4.html b/static/freebsd/man9/pmap_remove.9 4.html deleted file mode 100644 index be66a28e..00000000 --- a/static/freebsd/man9/pmap_remove.9 4.html +++ /dev/null @@ -1,78 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_REMOVE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_REMOVE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_remove</code>, - <code class="Nm">pmap_remove_all</code>, - <code class="Nm">pmap_remove_pages</code> — <span class="Nd">remove - pages from a physical map</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pmap_remove</code>(<var class="Fa" style="white-space: nowrap;">pmap_t - pmap</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t - sva</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t - eva</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pmap_remove_all</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pmap_remove_pages</code>(<var class="Fa" style="white-space: nowrap;">pmap_t - pmap</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_remove"><code class="Fn" id="pmap_remove">pmap_remove</code></a>() - function removes the range of addresses between <var class="Fa">sva</var> - and <var class="Fa">eva</var> from the physical map - <var class="Fa">pmap</var>. If <var class="Fa">eva</var> is less than - <var class="Fa">sva</var>, then the result is undefined. It is assumed that - both <var class="Fa">sva</var> and <var class="Fa">eva</var> are - page-aligned addresses.</p> -<p class="Pp" id="pmap_remove_all">The - <a class="permalink" href="#pmap_remove_all"><code class="Fn">pmap_remove_all</code></a>() - removes the physical page <var class="Fa">m</var> from all physical maps in - which it resides, and reflects back the modify bits to the appropriate - pager.</p> -<p class="Pp" id="pmap_remove_pages">The - <a class="permalink" href="#pmap_remove_pages"><code class="Fn">pmap_remove_pages</code></a>() - function removes all user pages from the physical map - <var class="Fa">pmap</var>. This function is called when a process exits to - run down its address space more quickly than would be the case for calling - <code class="Fn">pmap_remove</code>().</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><code class="Fn">pmap</code>(<var class="Fa">9</var>)</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 21, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_resident_count.9 4.html b/static/freebsd/man9/pmap_resident_count.9 4.html deleted file mode 100644 index bab357ac..00000000 --- a/static/freebsd/man9/pmap_resident_count.9 4.html +++ /dev/null @@ -1,75 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_RESIDENT_COUNT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_RESIDENT_COUNT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_resident_count</code>, - <code class="Nm">pmap_wired_count</code> — <span class="Nd">return - page resident and wiring statistics</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">long</var> - <br/> - <code class="Fn">pmap_resident_count</code>(<var class="Fa" style="white-space: nowrap;">pmap_t - pmap</var>);</p> -<p class="Pp"><var class="Ft">long</var> - <br/> - <code class="Fn">pmap_wired_count</code>(<var class="Fa" style="white-space: nowrap;">pmap_t - pmap</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_resident_count"><code class="Fn" id="pmap_resident_count">pmap_resident_count</code></a>() - and - <a class="permalink" href="#pmap_wired_count"><code class="Fn" id="pmap_wired_count">pmap_wired_count</code></a>() - macros allow <code class="Nm">pmap</code> consumers to retrieve statistics - from the <var class="Va">pm_stats</var> member of the machine-dependent - structure <var class="Vt">struct pmap</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">Both functions are defined as in-line macros. The members which - they access have type <var class="Vt">long</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">pmap_resident_count</code>() returns the - number of pages in the physical map <var class="Va">pmap</var> which are - currently resident in main memory.</p> -<p class="Pp">The <code class="Fn">pmap_wired_count</code>() returns the number - of pages in the physical map <var class="Va">pmap</var> which are currently - wired into in main memory.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 21, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_unwire.9 4.html b/static/freebsd/man9/pmap_unwire.9 4.html deleted file mode 100644 index 30b1fa11..00000000 --- a/static/freebsd/man9/pmap_unwire.9 4.html +++ /dev/null @@ -1,61 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_UNWIRE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_UNWIRE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_unwire</code> — - <span class="Nd">unwire a range of virtual pages</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pmap_unwire</code>(<var class="Fa">pmap_t pmap</var>, - <var class="Fa">vm_offset_t start</var>, <var class="Fa">vm_offset_t - end</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The function - <a class="permalink" href="#pmap_unwire"><code class="Fn" id="pmap_unwire">pmap_unwire</code></a>() - removes the wired attribute from each of the virtual-to-physical page - mappings within the virtual address range from <var class="Fa">start</var> - to <var class="Fa">end</var> of the physical map <var class="Fa">pmap</var>. - Every valid mapping within that range is required to have the wired - attribute set. Invalid mappings are ignored, since they cannot have the - wired attribute set.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1> -<p class="Pp">Only the function <a class="Xr">pmap_enter(9)</a> can be used to - set the wired attribute of a virtual-to-physical page mapping.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap(9)</a>, <a class="Xr">pmap_enter(9)</a>, - <a class="Xr">pmap_wired_count(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Alan L. - Cox</span> ⟨alc@rice.edu⟩.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 17, 2014</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pmap_zero_page.9 4.html b/static/freebsd/man9/pmap_zero_page.9 4.html deleted file mode 100644 index 139cc54e..00000000 --- a/static/freebsd/man9/pmap_zero_page.9 4.html +++ /dev/null @@ -1,67 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PMAP_ZERO(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PMAP_ZERO(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pmap_zero_page</code>, - <code class="Nm">pmap_zero_area</code> — <span class="Nd">zero-fill a - page using machine-dependent optimizations</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pmap_zero_page</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pmap_zero_page_area</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>, <var class="Fa" style="white-space: nowrap;">int off</var>, - <var class="Fa" style="white-space: nowrap;">int size</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#pmap_zero_page"><code class="Fn" id="pmap_zero_page">pmap_zero_page</code></a>() - function zero-fills an entire page using machine-dependent optimizations. - The - <a class="permalink" href="#pmap_zero_page_area"><code class="Fn" id="pmap_zero_page_area">pmap_zero_page_area</code></a>() - function is used to zero-fill an area of a page. The range specified must - not cross a page boundary; it must be contained entirely within a single - page.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">This function is required to be implemented for each architecture - supported by <span class="Ux">FreeBSD</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">bzero(3)</a>, <a class="Xr">pmap(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 30, 2016</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/printf.9 3.html b/static/freebsd/man9/printf.9 3.html deleted file mode 100644 index 174c8ca8..00000000 --- a/static/freebsd/man9/printf.9 3.html +++ /dev/null @@ -1,162 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PRINTF(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PRINTF(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">printf</code>, <code class="Nm">uprintf</code>, - <code class="Nm">tprintf</code>, <code class="Nm">log</code> — - <span class="Nd">formatted output conversion</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">printf</code>(<var class="Fa" style="white-space: nowrap;">const - char *fmt</var>, - <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">tprintf</code>(<var class="Fa" style="white-space: nowrap;">struct - proc *p</var>, <var class="Fa" style="white-space: nowrap;">int pri</var>, - <var class="Fa" style="white-space: nowrap;">const char *fmt</var>, - <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">uprintf</code>(<var class="Fa" style="white-space: nowrap;">const - char *fmt</var>, - <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vprintf</code>(<var class="Fa" style="white-space: nowrap;">const - char *fmt</var>, <var class="Fa" style="white-space: nowrap;">va_list - ap</var>);</p> -<p class="Pp"><code class="In">#include - <<a class="In">sys/syslog.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">log</code>(<var class="Fa" style="white-space: nowrap;">int - pri</var>, <var class="Fa" style="white-space: nowrap;">const char - *fmt</var>, <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vlog</code>(<var class="Fa" style="white-space: nowrap;">int - pri</var>, <var class="Fa" style="white-space: nowrap;">const char - *fmt</var>, <var class="Fa" style="white-space: nowrap;">va_list - ap</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">printf</code> family of functions are similar - to the <a class="Xr">printf(3)</a> family of functions. The different - functions each use a different output stream. The - <a class="permalink" href="#uprintf"><code class="Fn" id="uprintf">uprintf</code></a>() - function outputs to the current process' controlling tty, while - <a class="permalink" href="#printf"><code class="Fn" id="printf">printf</code></a>() - writes to the console as well as to the logging facility. The - <a class="permalink" href="#tprintf"><code class="Fn" id="tprintf">tprintf</code></a>() - function outputs to the tty associated with the process - <var class="Fa">p</var> and the logging facility if - <var class="Fa">pri</var> is not -1. The <code class="Fn">log</code>() - function sends the message to the kernel logging facility, using the log - level as indicated by <var class="Fa">pri</var>, and to the console if no - process is yet reading the log.</p> -<p class="Pp">Each of these related functions use the <var class="Fa">fmt</var> - parameter in the same manner as <a class="Xr">printf(3)</a>. However, - <code class="Nm">printf</code> adds two other conversion specifiers and - omits one.</p> -<p class="Pp">The <code class="Cm">%b</code> identifier expects two arguments: - an <var class="Vt">int</var> and a <var class="Vt">char *</var>. These are - used as a register value and a print mask for decoding bitmasks. The print - mask is made up of two parts: the base and the arguments. The base value is - the output base (radix) expressed as an octal value; for example, \10 gives - octal and \20 gives hexadecimal. The arguments are made up of a sequence of - bit identifiers. Each bit identifier begins with a character specifying the - number of the bit (starting from 1) this identifier describes. The - characters from \01 to \40 can be used to specify bit numbers in the range - from 1 to 32 and characters from \200 to \377 to specify bit numbers in the - range from 1 to 128. The rest of the identifier is a string of characters - containing the name of the bit. The identifier is terminated by either the - bit number at the start of the next bit identifier or by - <code class="Dv">NUL</code> for the last bit identifier.</p> -<p class="Pp">The <code class="Cm">%D</code> identifier is meant to assist in - hexdumps. It requires two arguments: a <var class="Vt">u_char *</var> - pointer and a <var class="Vt">char *</var> string. The memory pointed to by - the pointer is output in hexadecimal one byte at a time. The string is used - as a delimiter between individual bytes. If present, a width directive will - specify the number of bytes to display. By default, 16 bytes of data are - output.</p> -<p class="Pp">The <code class="Cm">%n</code> conversion specifier is not - supported.</p> -<p class="Pp" id="log">The - <a class="permalink" href="#log"><code class="Fn">log</code></a>() function - uses <a class="Xr">syslog(3)</a> level values - <code class="Dv">LOG_DEBUG</code> through <code class="Dv">LOG_EMERG</code> - for its <var class="Fa">pri</var> parameter (mistakenly called - ‘priority’ here). Alternatively, if a - <var class="Fa">pri</var> of -1 is given, the message will be appended to - the last log message started by a previous call to - <code class="Fn">log</code>(). As these messages are generated by the kernel - itself, the facility will always be <code class="Dv">LOG_KERN</code>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">printf</code>() and the - <code class="Fn">uprintf</code>() functions return the number of characters - displayed.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">This example demonstrates the use of the - <code class="Cm">%b</code> and <code class="Cm">%D</code> conversion - specifiers. The function</p> -<div class="Bd Pp Bd-indent Li"> -<pre>void -printf_test(void) -{ - printf("reg=%b\n", 3, "\10\2BITTWO\1BITONE"); - printf("out: %4D\n", "AAZZ", ":"); -}</pre> -</div> -<p class="Pp">will produce the following output:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>reg=3<BITTWO,BITONE> -out: 41:41:5a:5a</pre> -</div> -<p class="Pp">The same output will be generated by the following function:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>void -printf_test(void) -{ - printf("reg=%b\n", 3, "\10\201BITTWO\200BITONE"); - printf("out: %4D\n", "AAZZ", ":"); -}</pre> -</div> -<p class="Pp">The call</p> -<div class="Bd Pp Bd-indent Li"> -<pre>log(LOG_DEBUG, "%s%d: been there.\n", sc->sc_name, sc->sc_unit);</pre> -</div> -<p class="Pp">will add the appropriate debug message at priority - “<code class="Li">kern.debug</code>” to the system log.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">printf(3)</a>, <a class="Xr">syslog(3)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 19, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/prison_check.9 4.html b/static/freebsd/man9/prison_check.9 4.html deleted file mode 100644 index cefd7eac..00000000 --- a/static/freebsd/man9/prison_check.9 4.html +++ /dev/null @@ -1,52 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PRISON_CHECK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PRISON_CHECK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">prison_check</code> — - <span class="Nd">determine if subjects may see entities according to jail - restrictions</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/jail.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">prison_check</code>(<var class="Fa" style="white-space: nowrap;">struct - ucred *cred1</var>, <var class="Fa" style="white-space: nowrap;">struct - ucred *cred2</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This function determines if a subject with credentials - <var class="Fa">cred1</var> is denied access to subjects or objects with - credentials <var class="Fa">cred2</var> according to the policy that a - subject can see subjects or objects in its own jail or any sub-jail of - it.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">prison_check</code>() function returns - <code class="Er">ESRCH</code> if <var class="Fa">cred2</var> is not in the - same jail or a sub-jail of that of <var class="Fa">cred1</var>. In all other - cases, <code class="Fn">prison_check</code>() returns zero.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">jail(2)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 18, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/priv.9 3.html b/static/freebsd/man9/priv.9 3.html deleted file mode 100644 index 175e0eb9..00000000 --- a/static/freebsd/man9/priv.9 3.html +++ /dev/null @@ -1,102 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PRIV(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PRIV(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">priv</code> — <span class="Nd">kernel - privilege checking API</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/priv.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">priv_check</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>, <var class="Fa" style="white-space: nowrap;">int - priv</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">priv_check_cred</code>(<var class="Fa" style="white-space: nowrap;">struct - ucred *cred</var>, <var class="Fa" style="white-space: nowrap;">int - priv</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">priv</code> interfaces check to see if - specific system privileges are granted to the passed thread, - <var class="Fa">td</var>, or credential, <var class="Fa">cred</var>. This - interface replaces the now removed <a class="Xr">suser(9)</a> privilege - checking interface. Privileges typically represent rights in one of two - categories: the right to manage a particular component of the system, or an - exemption to a specific policy or access control list. The caller identifies - the desired privilege via the <var class="Fa">priv</var> argument.</p> -<section class="Ss"> -<h2 class="Ss" id="Privilege_Policies"><a class="permalink" href="#Privilege_Policies">Privilege - Policies</a></h2> -<p class="Pp">Privileges are typically granted based on one of two base system - policies: the superuser policy, which grants privilege based on the - effective (or sometimes real) UID having a value of 0, and the - <a class="Xr">jail(2)</a> policy, which permits only certain privileges to - be granted to processes in a jail. The set of available privileges may also - be influenced by the TrustedBSD MAC Framework, described in - <a class="Xr">mac(9)</a>.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">When adding a new privilege check to a code path, first check the - complete list of current privileges in <span class="Pa">sys/priv.h</span> to - see if one already exists for the class of privilege required. Only if there - is not an exact match should a new privilege be added to the privilege list. - As privilege numbers becomes encoded in the kernel module ABI, privilege - constants must not be changed as any kernel modules depending on privileges - will then need to be recompiled. When adding a new privilege, be certain to - also determine whether it should be listed in - <code class="Fn">prison_priv_check</code>(), which includes a complete list - of privileges granted to the root user in <a class="Xr">jail(2)</a>.</p> -<p class="Pp">Certain catch-all privileges exist, such as - <code class="Dv">PRIV_DRIVER</code>, intended to be used by device drivers, - rather than adding a new driver-specific privilege.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Typically, 0 will be returned for success, and - <code class="Er">EPERM</code> will be returned on failure. Most consumers of - <code class="Nm">priv</code> will wish to directly return the error code - from a failed privilege check to user space; a small number will wish to - translate it to another error code appropriate to a specific context.</p> -<p class="Pp">When designing new APIs, it is preferable to return explicit - errors from a call if privilege is not granted rather than changing the - semantics of the call but returning success. For example, the behavior - exhibited by <a class="Xr">stat(2)</a>, in which the generation field is - optionally zero'd out when there is insufficient privilege is highly - undesirable, as it results in frequent privilege checks, and the caller is - unable to tell if an access control failure occurred.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">jail(2)</a>, <a class="Xr">dtrace_priv(4)</a>, - <a class="Xr">mac(9)</a>, <a class="Xr">ucred(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">priv</code> API and implementation were - created by <span class="An">Robert Watson</span> under contract to nCircle - Network Security, Inc.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 12, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/prng.9 4.html b/static/freebsd/man9/prng.9 4.html deleted file mode 100644 index 5665dccc..00000000 --- a/static/freebsd/man9/prng.9 4.html +++ /dev/null @@ -1,93 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PRNG(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PRNG(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">prng</code> — <span class="Nd">Kernel - pseudo-random number generators</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/prng.h</a>></code></p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">prng32</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">prng32_bounded</code>(<var class="Fa" style="white-space: nowrap;">uint32_t - bound</var>);</p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">prng64</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft">uint64_t</var> - <br/> - <code class="Fn">prng64_bounded</code>(<var class="Fa" style="white-space: nowrap;">uint64_t - bound</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<section class="Ss"> -<h2 class="Ss" id="GENERIC_PRNG_ROUTINES"><a class="permalink" href="#GENERIC_PRNG_ROUTINES">GENERIC - PRNG ROUTINES</a></h2> -<p class="Pp"><code class="Nm">prng</code> is a family of fast, - <a class="permalink" href="#non-cryptographic"><i class="Em" id="non-cryptographic">non-cryptographic</i></a> - pseudo-random number generators. Unlike <a class="Xr">random(9)</a>, - <a class="permalink" href="#prng32"><code class="Fn" id="prng32">prng32</code></a>(), - <a class="permalink" href="#prng32_bounded"><code class="Fn" id="prng32_bounded">prng32_bounded</code></a>(), - <a class="permalink" href="#prng64"><code class="Fn" id="prng64">prng64</code></a>(), - and - <a class="permalink" href="#prng64_bounded"><code class="Fn" id="prng64_bounded">prng64_bounded</code></a>() - avoid shared global state, removing unnecessary contention on SMP systems. - The routines are not explicitly tied to any specific implementation, and may - produce different specific sequences on different hosts, reboots, or - versions of <span class="Ux">FreeBSD</span>. Different CPUs in SMP systems - are guaranteed to produce different sequences of integers.</p> -<p class="Pp" id="cryptographically">For - <a class="permalink" href="#cryptographically"><i class="Em">cryptographically - secure</i></a> random numbers generated by the <a class="Xr">random(4)</a> - kernel cryptographically secure random number generator subsystem, see - <a class="Xr">arc4random(9)</a>.</p> -<dl class="Bl-tag"> - <dt id="prng32~2"><a class="permalink" href="#prng32~2"><code class="Fn">prng32</code></a>()</dt> - <dd>Generate a 32-bit integer uniformly distributed in [0, 2^32-1].</dd> - <dt id="prng32_bounded~2"><a class="permalink" href="#prng32_bounded~2"><code class="Fn">prng32_bounded</code></a>(<var class="Fa">bound</var>)</dt> - <dd>Generate an integer uniformly in the range [0, bound-1].</dd> - <dt id="prng64~2"><a class="permalink" href="#prng64~2"><code class="Fn">prng64</code></a>()</dt> - <dd>Generate a 64-bit integer uniformly distributed in [0, 2^64-1].</dd> - <dt id="prng64_bounded~2"><a class="permalink" href="#prng64_bounded~2"><code class="Fn">prng64_bounded</code></a>(<var class="Fa">bound</var>)</dt> - <dd>Generate an integer uniformly in the range [0, bound-1].</dd> -</dl> -<p class="Pp">These routines are not reentrant; they are not safe to use in - interrupt handlers ("interrupt filters" in - <a class="Xr">bus_setup_intr(9)</a> terminology). They are safe to use in - all other kernel contexts, including interrupt threads - ("ithreads").</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="REPRODUCIBLE_PRNG_APIS"><a class="permalink" href="#REPRODUCIBLE_PRNG_APIS">REPRODUCIBLE - PRNG APIS</a></h2> -<p class="Pp">In addition to these per-CPU helpers, the - <code class="In"><<a class="In">sys/prng.h</a>></code> header also - exposes the entire API of the PCG family of PRNGs as inline functions. The - PCG-C API is described in full at - <a class="Lk" href="https://www.pcg-random.org/using-pcg-c.html">https://www.pcg-random.org/using-pcg-c.html</a>.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp"><code class="Nm">prng</code> was introduced in - <span class="Ux">FreeBSD 13</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 5, 2020</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/proc_rwmem.9 4.html b/static/freebsd/man9/proc_rwmem.9 4.html deleted file mode 100644 index 0d391845..00000000 --- a/static/freebsd/man9/proc_rwmem.9 4.html +++ /dev/null @@ -1,95 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PROC_RWMEM(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PROC_RWMEM(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">proc_rwmem</code>, - <code class="Nm">proc_readmem</code>, <code class="Nm">proc_writemem</code> - — <span class="Nd">read from or write to a process address - space</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/ptrace.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">proc_rwmem</code>(<var class="Fa" style="white-space: nowrap;">struct - proc *p</var>, <var class="Fa" style="white-space: nowrap;">struct uio - *uio</var>);</p> -<p class="Pp"><var class="Ft">ssize_t</var> - <br/> - <code class="Fn">proc_readmem</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>, <var class="Fa" style="white-space: nowrap;">struct proc - *p</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t va</var>, - <var class="Fa" style="white-space: nowrap;">void *buf</var>, - <var class="Fa" style="white-space: nowrap;">size_t len</var>);</p> -<p class="Pp"><var class="Ft">ssize_t</var> - <br/> - <code class="Fn">proc_writemem</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>, <var class="Fa" style="white-space: nowrap;">struct proc - *p</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t va</var>, - <var class="Fa" style="white-space: nowrap;">void *buf</var>, - <var class="Fa" style="white-space: nowrap;">size_t len</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These functions are used to read to or write from the address - space of the process <var class="Fa">p</var>. The - <a class="permalink" href="#proc_rwmem"><code class="Fn" id="proc_rwmem">proc_rwmem</code></a>() - function requires the caller to specify the I/O parameters using a - <var class="Vt">struct uio</var>, described in <a class="Xr">uio(9)</a>. The - <a class="permalink" href="#proc_readmem"><code class="Fn" id="proc_readmem">proc_readmem</code></a>() - and - <a class="permalink" href="#proc_writemem"><code class="Fn" id="proc_writemem">proc_writemem</code></a>() - functions provide a simpler, less general interface which allows the caller - to read into or write the kernel buffer <var class="Fa">buf</var> of size - <var class="Fa">len</var> from or to the memory at offset - <var class="Fa">va</var> in the address space of <var class="Fa">p</var>. - The operation is performed on behalf of thread <var class="Fa">td</var>, - which will most often be the current thread.</p> -<p class="Pp">These functions may sleep and thus may not be called with any - non-sleepable locks held. The process <var class="Fa">p</var> must be held - by the caller using <a class="Xr">PHOLD(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">proc_rwmem</code>() function returns - <code class="Dv">0</code> on success. <code class="Dv">EFAULT</code> is - returned if the specified user address is invalid, and - <code class="Dv">ENOMEM</code> is returned if the target pages could not be - faulted in due to a resource shortage.</p> -<p class="Pp">The <code class="Fn">proc_readmem</code>() and - <code class="Fn">proc_writemem</code>() functions return the number of bytes - read or written, respectively. This may be smaller than the number of bytes - requested, for example if the request spans multiple pages in the process - address space and one of them after the first is not mapped. Otherwise, -1 - is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">copyin(9)</a>, <a class="Xr">locking(9)</a>, - <a class="Xr">PHOLD(9)</a>, <a class="Xr">uio(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Mark - Johnston</span> - <<a class="Mt" href="mailto:markj@FreeBSD.org">markj@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 7, 2015</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pseudofs.9 4.html b/static/freebsd/man9/pseudofs.9 4.html deleted file mode 100644 index 23c58be2..00000000 --- a/static/freebsd/man9/pseudofs.9 4.html +++ /dev/null @@ -1,56 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PSEUDOFS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PSEUDOFS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pseudofs</code> — <span class="Nd">pseudo - file system construction kit</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">fs/pseudofs/pseudofs.h</a>></code></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">pseudofs</code> module offers an abstract API - for pseudo-file systems such as <a class="Xr">procfs(4)</a> and - <a class="Xr">linprocfs(4)</a>. It takes care of all the hairy bits like - interfacing with the VFS system, enforcing access control, keeping track of - file numbers, and cloning files and directories that are process-specific. - The consumer module, i.e., the module that implements the actual guts of the - file system, needs only provide the directory structure (represented by a - collection of structures declared and initialized by macros provided by - <code class="Nm">pseudofs</code>) and callbacks that report file attributes - or write the actual file contents into sbufs.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">linprocfs(4)</a>, <a class="Xr">linsysfs(4)</a>, - <a class="Xr">procfs(4)</a>, <a class="Xr">sbuf(9)</a>, - <a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">pseudofs</code> module appeared in - <span class="Ux">FreeBSD 5.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">pseudofs</code> module and this manual page - were written by <span class="An">Dag-Erling Smørgrav</span> - <<a class="Mt" href="mailto:des@FreeBSD.org">des@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 20, 2007</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/psignal.9 3.html b/static/freebsd/man9/psignal.9 3.html deleted file mode 100644 index 7f9f81ab..00000000 --- a/static/freebsd/man9/psignal.9 3.html +++ /dev/null @@ -1,110 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PSIGNAL(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PSIGNAL(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">psignal</code>, - <code class="Nm">kern_psignal</code>, <code class="Nm">pgsignal</code>, - <code class="Nm">tdsignal</code> — <span class="Nd">post signal to a - thread, process, or process group</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/signalvar.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">kern_psignal</code>(<var class="Fa" style="white-space: nowrap;">struct - proc *p</var>, <var class="Fa" style="white-space: nowrap;">int - signum</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pgsignal</code>(<var class="Fa" style="white-space: nowrap;">struct - pgrp *pgrp</var>, <var class="Fa" style="white-space: nowrap;">int - signum</var>, <var class="Fa" style="white-space: nowrap;">int - checkctty</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">tdsignal</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>, <var class="Fa" style="white-space: nowrap;">int - signum</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These functions post a signal to a thread or one or more - processes. The argument <var class="Fa">signum</var> common to all three - functions should be in the range [1-<code class="Dv">NSIG</code>].</p> -<p class="Pp" id="kern_psignal">The - <a class="permalink" href="#kern_psignal"><code class="Fn">kern_psignal</code></a>() - function posts signal number <var class="Fa">signum</var> to the process - represented by the process structure <var class="Fa">p</var>. The - <code class="Fn">kern_psignal</code>() function used to be called - <a class="permalink" href="#psignal"><code class="Fn" id="psignal">psignal</code></a>() - but was renamed in order to eliminate a name collision with the libc - function of that name and facilitate code reuse. With a few exceptions noted - below, the target process signal disposition is updated and is marked as - runnable, so further handling of the signal is done in the context of the - target process after a context switch. Note that - <code class="Fn">kern_psignal</code>() does not by itself cause a context - switch to happen.</p> -<p class="Pp">The target process is not marked as runnable in the following - cases:</p> -<ul class="Bl-bullet Bd-indent"> - <li>The target process is sleeping uninterruptibly. The signal will be noticed - when the process returns from the system call or trap.</li> - <li>The target process is currently ignoring the signal.</li> - <li>If a stop signal is sent to a sleeping process that takes the default - action (see <a class="Xr">sigaction(2)</a>), the process is stopped - without awakening it.</li> - <li id="SIGCONT"><a class="permalink" href="#SIGCONT"><code class="Dv">SIGCONT</code></a> - restarts a stopped process (or puts them back to sleep) regardless of the - signal action (e.g., blocked or ignored).</li> -</ul> -<p class="Pp" id="kern_psignal~2">If the target process is being traced - <a class="permalink" href="#kern_psignal~2"><code class="Fn">kern_psignal</code></a>() - behaves as if the target process were taking the default action for - <var class="Fa">signum</var>. This allows the tracing process to be notified - of the signal.</p> -<p class="Pp" id="pgsignal">The - <a class="permalink" href="#pgsignal"><code class="Fn">pgsignal</code></a>() - function posts signal number <var class="Fa">signum</var> to each member of - the process group described by <var class="Fa">pgrp</var>. If - <var class="Fa">checkctty</var> is non-zero, the signal will be posted only - to processes that have a controlling terminal. - <code class="Fn">pgsignal</code>() is implemented by walking along the - process list headed by the field <code class="Li">pg_members</code> of the - process group structure pointed at by <var class="Fa">pgrp</var> and calling - <code class="Fn">kern_psignal</code>() as appropriate. If - <var class="Fa">pgrp</var> is <code class="Dv">NULL</code> no action is - taken.</p> -<p class="Pp" id="tdsignal">The - <a class="permalink" href="#tdsignal"><code class="Fn">tdsignal</code></a>() - function posts signal number <var class="Fa">signum</var> to the thread - represented by the thread structure <var class="Fa">td</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">sigaction(2)</a>, <a class="Xr">signal(9)</a>, - <a class="Xr">tsleep(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Fn">psignal</code>() function was renamed to - <code class="Fn">kern_psignal</code>() in <span class="Ux">FreeBSD - 9.0</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 14, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/pwmbus.9 3.html b/static/freebsd/man9/pwmbus.9 3.html deleted file mode 100644 index d9fcebd1..00000000 --- a/static/freebsd/man9/pwmbus.9 3.html +++ /dev/null @@ -1,135 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">PWMBUS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">PWMBUS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">pwmbus</code>, - <code class="Nm">PWMBUS_CHANNEL_CONFIG</code>, - <code class="Nm">PWMBUS_CHANNEL_COUNT</code>, - <code class="Nm">PWMBUS_CHANNEL_ENABLE</code>, - <code class="Nm">PWMBUS_CHANNEL_GET_CONFIG</code>, - <code class="Nm">PWMBUS_CHANNEL_GET_FLAGS</code>, - <code class="Nm">PWMBUS_CHANNEL_IS_ENABLED</code>, - <code class="Nm">PWMBUS_CHANNEL_SET_FLAGS</code>, - <code class="Nm">PWMBUS_GET_BUS</code> — <span class="Nd">PWMBUS - methods</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="Cd">device pwm</code> - <br/> - <code class="In">#include <<a class="In">pwmbus_if.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">PWMBUS_CHANNEL_CONFIG</code>(<var class="Fa" style="white-space: nowrap;">device_t - bus</var>, <var class="Fa" style="white-space: nowrap;">u_int channel</var>, - <var class="Fa" style="white-space: nowrap;">u_int period</var>, - <var class="Fa" style="white-space: nowrap;">u_int duty</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">PWMBUS_CHANNEL_COUNT</code>(<var class="Fa" style="white-space: nowrap;">device_t - bus</var>, <var class="Fa" style="white-space: nowrap;">u_int - *nchannel</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">PWMBUS_CHANNEL_ENABLE</code>(<var class="Fa" style="white-space: nowrap;">device_t - bus</var>, <var class="Fa" style="white-space: nowrap;">u_int channel</var>, - <var class="Fa" style="white-space: nowrap;">bool enable</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">PWMBUS_CHANNEL_GET_CONFIG</code>(<var class="Fa" style="white-space: nowrap;">device_t - bus</var>, <var class="Fa" style="white-space: nowrap;">u_int channel</var>, - <var class="Fa" style="white-space: nowrap;">u_int *period</var>, - <var class="Fa" style="white-space: nowrap;">u_int *duty</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">PWMBUS_CHANNEL_GET_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">device_t - bus</var>, <var class="Fa" style="white-space: nowrap;">u_int channel</var>, - <var class="Fa" style="white-space: nowrap;">uint32_t *flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">PWMBUS_CHANNEL_IS_ENABLED</code>(<var class="Fa" style="white-space: nowrap;">device_t - bus</var>, <var class="Fa" style="white-space: nowrap;">u_int channel</var>, - <var class="Fa" style="white-space: nowrap;">bool *enabled</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">PWMBUS_CHANNEL_SET_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">device_t - bus</var>, <var class="Fa" style="white-space: nowrap;">u_int channel</var>, - <var class="Fa" style="white-space: nowrap;">uint32_t flags</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The PWMBUS (Pulse-Width Modulation) interface allows a device - driver to register to a global bus so other devices in the kernel can use - them in a generic way.</p> -<p class="Pp">For all <code class="Nm">pwmbus</code> methods, the - <var class="Va">period</var> argument is the duration in nanoseconds of one - complete on-off cycle, and the <var class="Va">duty</var> argument is the - duration in nanoseconds of the on portion of that cycle.</p> -<p class="Pp">Some PWM hardware is organized as a single controller with - multiple channels. Channel numbers count up from zero. When multiple - channels are present, they sometimes share a common clock or other - resources. In such cases, changing the period or duty cycle of any one - channel may affect other channels within the hardware which share the same - resources. Consult the documentation for the underlying PWM hardware device - driver for details on channels that share resources.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="INTERFACE"><a class="permalink" href="#INTERFACE">INTERFACE</a></h1> -<dl class="Bl-tag"> - <dt id="PWMBUS_CHANNEL_CONFIG"><a class="permalink" href="#PWMBUS_CHANNEL_CONFIG"><code class="Fn">PWMBUS_CHANNEL_CONFIG</code></a>(<var class="Fa">device_t - bus</var>, <var class="Fa">u_int channel</var>, <var class="Fa">u_int - period</var>, <var class="Fa">u_int duty</var>)</dt> - <dd>Configure the period and duty (in nanoseconds) in the PWM controller on - the bus for the specified channel. Returns 0 on success or - <code class="Er">EINVAL</code> if the values are not supported by the - controller or <code class="Er">EBUSY</code> if the PWMBUS controller is in - use and does not support changing the value on the fly.</dd> - <dt id="PWMBUS_CHANNEL_COUNT"><a class="permalink" href="#PWMBUS_CHANNEL_COUNT"><code class="Fn">PWMBUS_CHANNEL_COUNT</code></a>(<var class="Fa">device_t - bus</var>, <var class="Fa">u_int *nchannel</var>)</dt> - <dd>Get the number of channels supported by the controller.</dd> - <dt id="PWMBUS_CHANNEL_ENABLE"><a class="permalink" href="#PWMBUS_CHANNEL_ENABLE"><code class="Fn">PWMBUS_CHANNEL_ENABLE</code></a>(<var class="Fa">device_t - bus</var>, <var class="Fa">u_int channel</var>, <var class="Fa">bool - enable</var>)</dt> - <dd>Enable the PWM channel.</dd> - <dt id="PWMBUS_CHANNEL_GET_CONFIG"><a class="permalink" href="#PWMBUS_CHANNEL_GET_CONFIG"><code class="Fn">PWMBUS_CHANNEL_GET_CONFIG</code></a>(<var class="Fa">device_t - bus</var>, <var class="Fa">u_int channel</var>, <var class="Fa">u_int - *period</var>, <var class="Fa">u_int *duty</var>)</dt> - <dd>Get the current configuration of the period and duty for the specified - channel.</dd> - <dt id="PWMBUS_CHANNEL_GET_FLAGS"><a class="permalink" href="#PWMBUS_CHANNEL_GET_FLAGS"><code class="Fn">PWMBUS_CHANNEL_GET_FLAGS</code></a>(<var class="Fa">device_t - bus</var>, <var class="Fa">u_int channel</var>, <var class="Fa">uint32_t - *flags</var>)</dt> - <dd>Get the current flags for the channel. If the driver or controller does - not support this, a default method returns a flags value of zero.</dd> - <dt id="PWMBUS_CHANNEL_IS_ENABLED"><a class="permalink" href="#PWMBUS_CHANNEL_IS_ENABLED"><code class="Fn">PWMBUS_CHANNEL_IS_ENABLED</code></a>(<var class="Fa">device_t - bus</var>, <var class="Fa">u_int channel</var>, <var class="Fa">bool - *enable</var>)</dt> - <dd>Test whether the PWM channel is enabled.</dd> - <dt id="PWMBUS_CHANNEL_SET_FLAGS"><a class="permalink" href="#PWMBUS_CHANNEL_SET_FLAGS"><code class="Fn">PWMBUS_CHANNEL_SET_FLAGS</code></a>(<var class="Fa">device_t - bus</var>, <var class="Fa">u_int channel</var>, <var class="Fa">uint32_t - flags</var>)</dt> - <dd>Set the flags of the channel (such as inverted polarity). If the driver or - controller does not support this a do-nothing default method is used.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">pwmbus</code> interface first appear in - <span class="Ux">FreeBSD 13.0</span>. The <code class="Nm">pwmbus</code> - interface and manual page was written by <span class="An">Emmanuel - Vadot</span> - <<a class="Mt" href="mailto:manu@FreeBSD.org">manu@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 9, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/random.9 4.html b/static/freebsd/man9/random.9 4.html deleted file mode 100644 index dea2d113..00000000 --- a/static/freebsd/man9/random.9 4.html +++ /dev/null @@ -1,160 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">RANDOM(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">RANDOM(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">arc4rand</code>, - <code class="Nm">arc4random</code>, <code class="Nm">arc4random_buf</code>, - <code class="Nm">is_random_seeded</code>, <code class="Nm">random</code>, - <code class="Nm">read_random</code>, <code class="Nm">read_random_uio</code> - — <span class="Nd">supply pseudo-random numbers</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/libkern.h</a>></code></p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">arc4random</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">arc4random_buf</code>(<var class="Fa" style="white-space: nowrap;">void - *ptr</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">arc4rand</code>(<var class="Fa" style="white-space: nowrap;">void - *ptr</var>, <var class="Fa" style="white-space: nowrap;">u_int length</var>, - <var class="Fa" style="white-space: nowrap;">int reseed</var>);</p> -<p class="Pp"> - <br/> - <code class="In">#include <<a class="In">sys/random.h</a>></code></p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">is_random_seeded</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">read_random</code>(<var class="Fa" style="white-space: nowrap;">void - *buffer</var>, <var class="Fa" style="white-space: nowrap;">int - count</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">read_random_uio</code>(<var class="Fa" style="white-space: nowrap;">struct - uio *uio</var>, <var class="Fa" style="white-space: nowrap;">bool - nonblock</var>);</p> -<section class="Ss"> -<h2 class="Ss" id="LEGACY_ROUTINES"><a class="permalink" href="#LEGACY_ROUTINES">LEGACY - ROUTINES</a></h2> -<p class="Pp"><code class="In">#include - <<a class="In">sys/libkern.h</a>></code></p> -<p class="Pp"><var class="Ft">u_long</var> - <br/> - <code class="Fn">random</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#arc4random"><code class="Fn" id="arc4random">arc4random</code></a>() - and - <a class="permalink" href="#arc4random_buf"><code class="Fn" id="arc4random_buf">arc4random_buf</code></a>() - functions will return very good quality random numbers, suited for - security-related purposes. Both are wrappers around the underlying - <code class="Fn">arc4rand</code>() interface. - <code class="Fn">arc4random</code>() returns a 32-bit random value, while - <code class="Fn">arc4random_buf</code>() fills <var class="Fa">ptr</var> - with <var class="Fa">len</var> bytes of random data.</p> -<p class="Pp" id="arc4rand">The - <a class="permalink" href="#arc4rand"><code class="Fn">arc4rand</code></a>() - CSPRNG is seeded from the <a class="Xr">random(4)</a> kernel abstract - entropy device. Automatic reseeding happens at unspecified time and bytes - (of output) intervals. A reseed can be forced by passing a non-zero - <var class="Fa">reseed</var> value.</p> -<p class="Pp" id="read_random">The - <a class="permalink" href="#read_random"><code class="Fn">read_random</code></a>() - function is used to read entropy directly from the kernel abstract entropy - device. <code class="Fn">read_random</code>() blocks if and until the - entropy device is seeded. The provided <var class="Fa">buffer</var> is - filled with no more than <var class="Fa">count</var> bytes. It is strongly - advised that <code class="Fn">read_random</code>() is not used directly; - instead, use the <code class="Fn">arc4rand</code>() family of functions.</p> -<p class="Pp" id="is_random_seeded">The - <a class="permalink" href="#is_random_seeded"><code class="Fn">is_random_seeded</code></a>() - function can be used to check in advance if - <code class="Fn">read_random</code>() will block. (If random is seeded, it - will not block.)</p> -<p class="Pp" id="read_random_uio">The - <a class="permalink" href="#read_random_uio"><code class="Fn">read_random_uio</code></a>() - function behaves identically to <a class="Xr">read(2)</a> on - <span class="Pa">/dev/random</span>. The <var class="Fa">uio</var> argument - points to a buffer where random data should be stored. If - <var class="Fa">nonblock</var> is true and the random device is not seeded, - this function does not return any data. Otherwise, this function may block - interruptibly until the random device is seeded. If the function is - interrupted before the random device is seeded, no data is returned.</p> -<p class="Pp" id="random">The deprecated - <a class="permalink" href="#random"><code class="Fn">random</code></a>() - function will return a 31-bit value. It is obsolete and scheduled to be - removed in <span class="Ux">FreeBSD 16.0</span>. Consider - <a class="Xr">prng(9)</a> instead and see - <a class="Sx" href="#SECURITY_CONSIDERATIONS">SECURITY - CONSIDERATIONS</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">arc4rand</code>() function uses the Chacha20 - algorithm to generate a pseudo-random sequence of bytes. The - <code class="Fn">arc4random</code>() function uses - <code class="Fn">arc4rand</code>() to generate pseudo-random numbers in the - range from 0 to (2**32)−1.</p> -<p class="Pp">The <code class="Fn">read_random</code>() function returns the - number of bytes placed in <var class="Fa">buffer</var>.</p> -<p class="Pp"><code class="Fn">read_random_uio</code>() returns zero when - successful, otherwise an error code is returned.</p> -<p class="Pp"><code class="Fn">random</code>() returns numbers in the range from - 0 to (2**31)−1.</p> -<p class="Pp"></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp"><code class="Fn">read_random_uio</code>() may fail if:</p> -<dl class="Bl-tag"> - <dt id="EFAULT">[<a class="permalink" href="#EFAULT"><code class="Er">EFAULT</code></a>]</dt> - <dd><var class="Fa">uio</var> points to an invalid memory region.</dd> - <dt id="EWOULDBLOCK">[<a class="permalink" href="#EWOULDBLOCK"><code class="Er">EWOULDBLOCK</code></a>]</dt> - <dd>The random device is unseeded and <var class="Fa">nonblock</var> is - true.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp"><span class="An">Dan Moschuk</span> wrote - <code class="Fn">arc4random</code>(). - <br/> - <span class="An">Mark R V Murray</span> wrote - <code class="Fn">read_random</code>().</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SECURITY_CONSIDERATIONS"><a class="permalink" href="#SECURITY_CONSIDERATIONS">SECURITY - CONSIDERATIONS</a></h1> -<p class="Pp">Do not use <code class="Fn">random</code>() in new code.</p> -<p class="Pp">It is important to remember that the - <code class="Fn">random</code>() function is entirely predictable. It is - easy for attackers to predict future output of - <code class="Fn">random</code>() by recording some generated values. We - cannot emphasize strongly enough that <code class="Fn">random</code>() must - not be used to generate values that are intended to be unpredictable.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 11, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/random_harvest.9 4.html b/static/freebsd/man9/random_harvest.9 4.html deleted file mode 100644 index 973e5ff1..00000000 --- a/static/freebsd/man9/random_harvest.9 4.html +++ /dev/null @@ -1,88 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">RANDOM_HARVEST(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">RANDOM_HARVEST(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">random_harvest</code> — - <span class="Nd">gather entropy from the kernel for the entropy - device</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/random.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">random_harvest_direct</code>(<var class="Fa">void - *entropy</var>, <var class="Fa">u_int size</var>, <var class="Fa">enum - esource source</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">random_harvest_fast</code>(<var class="Fa">void - *entropy</var>, <var class="Fa">u_int size</var>, <var class="Fa">enum - esource source</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">random_harvest_queue</code>(<var class="Fa">void - *entropy</var>, <var class="Fa">u_int size</var>, <var class="Fa">enum - esource source</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#random_harvest_*"><code class="Fn" id="random_harvest_*">random_harvest_*</code></a>() - functions are used by device drivers and other kernel processes to pass data - that is considered (at least partially) stochastic to the entropy - device.</p> -<p class="Pp">The caller should pass a pointer pointing to the - “random” data in <var class="Fa">entropy</var>. The argument - <var class="Fa">size</var> contains the number of bytes pointed to. The - <var class="Fa">source</var> is chosen from one of the values enumerated in - <span class="Pa">sys/dev/random.h</span>. and is used to indicate the source - of the entropy.</p> -<p class="Pp" id="random_harvest_direct">The - <a class="permalink" href="#random_harvest_direct"><code class="Fn">random_harvest_direct</code></a>(); - variant is used for early harvesting before any multitasking is enabled.</p> -<p class="Pp" id="random_harvest_fast">The - <a class="permalink" href="#random_harvest_fast"><code class="Fn">random_harvest_fast</code></a>() - variant is used by sources that should not take a performance hit from - harvesting, as they are high-rate sources. Some entropy is sacrificed, but - the high rate of supply will compensate for this.</p> -<p class="Pp" id="random_harvest_queue">The - <a class="permalink" href="#random_harvest_queue"><code class="Fn">random_harvest_queue</code></a>() - variant is used for general harvesting and is the default choice for most - entropy sources such as interrupts or console events.</p> -<p class="Pp">Interrupt harvesting has been in part simplified for the kernel - programmer. If a device driver registers an interrupt handler with - <a class="Xr">BUS_SETUP_INTR(9)</a> or <a class="Xr">bus_setup_intr(9)</a>, - then it is only necessary to include the - <code class="Dv">INTR_ENTROPY</code> bit in the <var class="Fa">flags</var> - argument to have that interrupt source be used for entropy harvesting. This - should be done wherever practicable.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">random(4)</a>, - <a class="Xr">BUS_SETUP_INTR(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <span class="Ux">FreeBSD</span> <a class="Xr">random(4)</a> - entropy device and supporting documentation was written by - <span class="An">Mark R V Murray</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 26, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ratecheck.9 4.html b/static/freebsd/man9/ratecheck.9 4.html deleted file mode 100644 index 49d3b4e9..00000000 --- a/static/freebsd/man9/ratecheck.9 4.html +++ /dev/null @@ -1,71 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">RATECHECK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">RATECHECK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">ratecheck</code>, - <code class="Nm">ppsratecheck</code> — <span class="Nd">event rate - limiting</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/time.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ratecheck</code>(<var class="Fa" style="white-space: nowrap;">struct - timeval *lasttime</var>, <var class="Fa" style="white-space: nowrap;">const - struct timeval *mininterval</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">ppsratecheck</code>(<var class="Fa" style="white-space: nowrap;">struct - timeval *lasttime</var>, <var class="Fa" style="white-space: nowrap;">int - *curpps</var>, <var class="Fa" style="white-space: nowrap;">int - maxpps</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">ratecheck</code> and - <code class="Nm">ppsratecheck</code> functions facilitate rate-limiting of - arbitrary events. The former enforces a minimum interval between events - while the latter enforces a maximum number of events per second.</p> -<p class="Pp">The <code class="Nm">ratecheck</code> function compares the - current time to the value pointed to by <var class="Fa">lasttime</var>. If - the difference is equal to or greater than - <var class="Fa">mininterval</var>, it returns a non-zero value and updates - <var class="Fa">lasttime</var> to the current time. Otherwise, it returns - zero.</p> -<p class="Pp">The <code class="Nm">ppsratecheck</code> function first compares - the current time to <var class="Fa">lasttime</var>. If at least a full - second has passed, the value pointed to by the <var class="Fa">curpps</var> - argument is reset to 1 and <var class="Fa">lasttime</var> is updated to the - current time. Otherwise, <var class="Fa">curpps</var> is incremented and - <var class="Fa">lasttime</var> is left untouched. In either case, - <code class="Nm">ppsratecheck</code> returns a non-zero value if and only if - the updated <var class="Fa">curpps</var> is less than or equal to - <var class="Fa">maxpps</var> or <var class="Fa">maxpps</var> is - negative.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">counter(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">ratecheck</code> and - <code class="Nm">ppsratecheck</code> functions first appeared in - <span class="Ux">FreeBSD 5.1</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 11, 2022</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/redzone.9 4.html b/static/freebsd/man9/redzone.9 4.html deleted file mode 100644 index d44b494c..00000000 --- a/static/freebsd/man9/redzone.9 4.html +++ /dev/null @@ -1,118 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">REDZONE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">REDZONE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">RedZone</code> — <span class="Nd">buffer - corruptions detector</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="Cd">options KDB</code> - <br/> - <code class="Cd">options DDB</code> - <br/> - <code class="Cd">options DEBUG_REDZONE</code></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><code class="Nm">RedZone</code> detects buffer underflow and - buffer overflow bugs at runtime. Currently <code class="Nm">RedZone</code> - only detects buffer corruptions for memory allocated with - <a class="Xr">malloc(9)</a>. When such corruption is detected two backtraces - are printed on the console. The first one shows from where memory was - allocated, the second one shows from where memory was freed. By default the - system will not panic when buffer corruption is detected. This can be - changed by setting the <var class="Va">vm.redzone.panic</var> - <a class="Xr">sysctl(8)</a> variable to 1. The amount of extra memory - allocated for <code class="Nm">RedZone</code>'s needs is stored in the - <var class="Va">vm.redzone.extra_mem</var> <a class="Xr">sysctl(8)</a> - variable.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLE"><a class="permalink" href="#EXAMPLE">EXAMPLE</a></h1> -<p class="Pp">The example below shows the logs from the detection of a buffer - underflow and a buffer overflow.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>REDZONE: Buffer underflow detected. 2 bytes corrupted before 0xc8688580 (16 bytes allocated). -Allocation backtrace: -#0 0xc0583e4e at redzone_setup+0x3c -#1 0xc04a23fa at malloc+0x19e -#2 0xcdeb69ca at redzone_modevent+0x60 -#3 0xc04a3f3c at module_register_init+0x82 -#4 0xc049d96a at linker_file_sysinit+0x8e -#5 0xc049dc7c at linker_load_file+0xed -#6 0xc04a041f at linker_load_module+0xc4 -#7 0xc049e883 at kldload+0x116 -#8 0xc05d9b3d at syscall+0x325 -#9 0xc05c944f at Xint0x80_syscall+0x1f -Free backtrace: -#0 0xc0583f92 at redzone_check+0xd4 -#1 0xc04a2422 at free+0x1c -#2 0xcdeb69a6 at redzone_modevent+0x3c -#3 0xc04a438d at module_unload+0x61 -#4 0xc049e0b3 at linker_file_unload+0x89 -#5 0xc049e979 at kern_kldunload+0x96 -#6 0xc049ea00 at kldunloadf+0x2c -#7 0xc05d9b3d at syscall+0x325 -#8 0xc05c944f at Xint0x80_syscall+0x1f - -REDZONE: Buffer overflow detected. 4 bytes corrupted after 0xc8688590 (16 bytes allocated). -Allocation backtrace: -#0 0xc0583e4e at redzone_setup+0x3c -#1 0xc04a23fa at malloc+0x19e -#2 0xcdeb69ca at redzone_modevent+0x60 -#3 0xc04a3f3c at module_register_init+0x82 -#4 0xc049d96a at linker_file_sysinit+0x8e -#5 0xc049dc7c at linker_load_file+0xed -#6 0xc04a041f at linker_load_module+0xc4 -#7 0xc049e883 at kldload+0x116 -#8 0xc05d9b3d at syscall+0x325 -#9 0xc05c944f at Xint0x80_syscall+0x1f -Free backtrace: -#0 0xc0584020 at redzone_check+0x162 -#1 0xc04a2422 at free+0x1c -#2 0xcdeb69a6 at redzone_modevent+0x3c -#3 0xc04a438d at module_unload+0x61 -#4 0xc049e0b3 at linker_file_unload+0x89 -#5 0xc049e979 at kern_kldunload+0x96 -#6 0xc049ea00 at kldunloadf+0x2c -#7 0xc05d9b3d at syscall+0x325 -#8 0xc05c944f at Xint0x80_syscall+0x1f</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">sysctl(8)</a>, <a class="Xr">malloc(9)</a>, - <a class="Xr">memguard(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp"><code class="Nm">RedZone</code> first appeared in - <span class="Ux">FreeBSD 7.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp"><span class="An">Pawel Jakub Dawidek</span> - <<a class="Mt" href="mailto:pjd@FreeBSD.org">pjd@FreeBSD.org</a>></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">Currently, <code class="Nm">RedZone</code> does not cooperate with - <a class="Xr">memguard(9)</a>. Allocations from a memory type controlled by - <a class="Xr">memguard(9)</a> are simply skipped, so buffer corruptions will - not be detected there.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 9, 2009</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/refcount.9 3.html b/static/freebsd/man9/refcount.9 3.html deleted file mode 100644 index b0622f5f..00000000 --- a/static/freebsd/man9/refcount.9 3.html +++ /dev/null @@ -1,156 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">REFCOUNT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">REFCOUNT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">refcount</code>, - <code class="Nm">refcount_init</code>, - <code class="Nm">refcount_acquire</code>, - <code class="Nm">refcount_release</code> — <span class="Nd">manage a - simple reference counter</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/refcount.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">refcount_init</code>(<var class="Fa" style="white-space: nowrap;">volatile - u_int *count</var>, <var class="Fa" style="white-space: nowrap;">u_int - value</var>);</p> -<p class="Pp"><var class="Ft">u_int</var> - <br/> - <code class="Fn">refcount_load</code>(<var class="Fa" style="white-space: nowrap;">volatile - u_int *count</var>);</p> -<p class="Pp"><var class="Ft">u_int</var> - <br/> - <code class="Fn">refcount_acquire</code>(<var class="Fa" style="white-space: nowrap;">volatile - u_int *count</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">refcount_acquire_checked</code>(<var class="Fa" style="white-space: nowrap;">volatile - u_int *count</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">refcount_acquire_if_not_zero</code>(<var class="Fa" style="white-space: nowrap;">volatile - u_int *count</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">refcount_release</code>(<var class="Fa" style="white-space: nowrap;">volatile - u_int *count</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">refcount_release_if_last</code>(<var class="Fa" style="white-space: nowrap;">volatile - u_int *count</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">refcount_release_if_not_last</code>(<var class="Fa" style="white-space: nowrap;">volatile - u_int *count</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">refcount</code> functions provide an API to - manage a simple reference counter. The caller provides the storage for the - counter in an unsigned integer. A pointer to this integer is passed via - <var class="Fa">count</var>. Usually the counter is used to manage the - lifetime of an object and is stored as a member of the object.</p> -<p class="Pp">Currently all functions are implemented as static inline.</p> -<p class="Pp" id="refcount_init">The - <a class="permalink" href="#refcount_init"><code class="Fn">refcount_init</code></a>() - function is used to set the initial value of the counter to - <var class="Fa">value</var>. It is normally used when creating a - reference-counted object.</p> -<p class="Pp" id="refcount_load">The - <a class="permalink" href="#refcount_load"><code class="Fn">refcount_load</code></a>() - function returns a snapshot of the counter value. This value may immediately - become out-of-date in the absence of external synchronization. - <code class="Fn">refcount_load</code>() should be used instead of relying on - the properties of the <var class="Vt">volatile</var> qualifier.</p> -<p class="Pp" id="refcount_acquire">The - <a class="permalink" href="#refcount_acquire"><code class="Fn">refcount_acquire</code></a>() - function is used to acquire a new reference. It returns the counter value - before the new reference was acquired. The caller is responsible for - ensuring that it holds a valid reference while obtaining a new reference. - For example, if an object is stored on a list and the list holds a reference - on the object, then holding a lock that protects the list provides - sufficient protection for acquiring a new reference.</p> -<p class="Pp" id="refcount_acquire_checked">The - <a class="permalink" href="#refcount_acquire_checked"><code class="Fn">refcount_acquire_checked</code></a>() - variant performs the same operation as - <code class="Fn">refcount_acquire</code>(), but additionally checks that the - <var class="Fa">count</var> value does not overflow as result of the - operation. It returns <code class="Dv">true</code> if the reference was - successfully obtained, and <code class="Dv">false</code> if it was not, due - to the overflow.</p> -<p class="Pp" id="refcount_acquire_if_not_zero">The - <a class="permalink" href="#refcount_acquire_if_not_zero"><code class="Fn">refcount_acquire_if_not_zero</code></a>() - function is yet another variant of - <code class="Fn">refcount_acquire</code>(), which only obtains the reference - when some reference already exists. In other words, - <var class="Fa">*count</var> must be already greater than zero for the - function to succeed, in which case the return value is - <code class="Dv">true</code>, otherwise <code class="Dv">false</code> is - returned.</p> -<p class="Pp" id="refcount_release">The - <a class="permalink" href="#refcount_release"><code class="Fn">refcount_release</code></a>() - function is used to release an existing reference. The function returns true - if the reference being released was the last reference; otherwise, it - returns false.</p> -<p class="Pp" id="refcount_release_if_last">The - <a class="permalink" href="#refcount_release_if_last"><code class="Fn">refcount_release_if_last</code></a>() - and - <a class="permalink" href="#refcount_release_if_not_last"><code class="Fn" id="refcount_release_if_not_last">refcount_release_if_not_last</code></a>() - functions are variants of <code class="Fn">refcount_release</code>() which - only drop the reference when it is or is not the last reference, - respectively. In other words, - <code class="Fn">refcount_release_if_last</code>() returns - <code class="Dv">true</code> when <var class="Fa">*count</var> is equal to - one, in which case it is decremented to zero. Otherwise, - <var class="Fa">*count</var> is not modified and the function returns - <code class="Dv">false</code>. Similarly, - <code class="Fn">refcount_release_if_not_last</code>() returns - <code class="Dv">true</code> when <var class="Fa">*count</var> is greater - than one, in which case <var class="Fa">*count</var> is decremented. - Otherwise, if <var class="Fa">*count</var> is equal to one, the reference is - not released and the function returns <code class="Dv">false</code>.</p> -<p class="Pp">Note that these routines do not provide any inter-CPU - synchronization or data protection for managing the counter. The caller is - responsible for any additional synchronization needed by consumers of any - containing objects. In addition, the caller is also responsible for managing - the life cycle of any containing objects including explicitly releasing any - resources when the last reference is released.</p> -<p class="Pp" id="refcount_release~2">The - <a class="permalink" href="#refcount_release~2"><code class="Fn">refcount_release</code></a>() - unconditionally executes a release fence (see <a class="Xr">atomic(9)</a>) - before releasing the reference, which synchronizes with an acquire fence - executed right before returning the <code class="Dv">true</code> value. This - ensures that the destructor, supposedly executed by the caller after the - last reference was dropped, sees all updates done during the lifetime of the - object.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Nm">refcount_release</code> function returns true - when releasing the last reference and false when releasing any other - reference.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">These functions were introduced in <span class="Ux">FreeBSD - 6.0</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 12, 2022</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/regulator.9 4.html b/static/freebsd/man9/regulator.9 4.html deleted file mode 100644 index 7c9a410b..00000000 --- a/static/freebsd/man9/regulator.9 4.html +++ /dev/null @@ -1,193 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">REGULATOR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">REGULATOR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">regulator</code>, - <code class="Nm">regulator_get_by_name</code>, - <code class="Nm">regulator_get_by_id</code>, - <code class="Nm">regulator_release</code>, - <code class="Nm">regulator_get_name</code>, - <code class="Nm">regulator_enable</code>, - <code class="Nm">regulator_disable</code>, - <code class="Nm">regulator_stop</code>, - <code class="Nm">regulator_status</code>, - <code class="Nm">regulator_get_voltage</code>, - <code class="Nm">regulator_set_voltage</code>, - <code class="Nm">regulator_check_voltage</code>, - <code class="Nm">regulator_get_by_ofw_property</code> — - <span class="Nd">regulator methods</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="Cd">device regulator</code> - <br/> - <code class="In">#include - <<a class="In">dev/extres/regulator/regulator.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">regulator_get_by_name</code>(<var class="Fa" style="white-space: nowrap;">device_t - cdev</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">regulator_t - *regulator</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">regulator_get_by_id</code>(<var class="Fa" style="white-space: nowrap;">device_t - cdev</var>, <var class="Fa" style="white-space: nowrap;">device_t - pdev</var>, <var class="Fa" style="white-space: nowrap;">intptr_t id</var>, - <var class="Fa" style="white-space: nowrap;">regulator_t - *regulator</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">regulator_release</code>(<var class="Fa" style="white-space: nowrap;">regulator_t - regulator</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">regulator_get_name</code>(<var class="Fa" style="white-space: nowrap;">regulator_t - regulator</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">regulator_enable</code>(<var class="Fa" style="white-space: nowrap;">regulator_t - reg</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">regulator_disable</code>(<var class="Fa" style="white-space: nowrap;">regulator_t - reg</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">regulator_stop</code>(<var class="Fa" style="white-space: nowrap;">regulator_t - reg</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">regulator_status</code>(<var class="Fa" style="white-space: nowrap;">regulator_t - reg</var>, <var class="Fa" style="white-space: nowrap;">int - *status</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">regulator_get_voltage</code>(<var class="Fa" style="white-space: nowrap;">regulator_t - reg</var>, <var class="Fa" style="white-space: nowrap;">int - *uvolt</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">regulator_set_voltage</code>(<var class="Fa" style="white-space: nowrap;">regulator_t - reg</var>, <var class="Fa" style="white-space: nowrap;">int min_uvolt</var>, - <var class="Fa" style="white-space: nowrap;">int max_uvolt</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">regulator_check_voltage</code>(<var class="Fa" style="white-space: nowrap;">regulator_t - reg</var>, <var class="Fa" style="white-space: nowrap;">int - uvolt</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">regulator_get_by_ofw_property</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">phandle_t - node</var>, <var class="Fa" style="white-space: nowrap;">char *name</var>, - <var class="Fa" style="white-space: nowrap;">regulator_t *reg</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The regulator framework allow drivers to enable, disable and - change regulator voltage.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">All functions returns 0 on success or - <code class="Er">ENODEV</code> if the regulator or one of its parent was not - found.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="INTERFACE"><a class="permalink" href="#INTERFACE">INTERFACE</a></h1> -<dl class="Bl-tag"> - <dt id="regulator_get_by_name"><a class="permalink" href="#regulator_get_by_name"><code class="Fn">regulator_get_by_name</code></a>(<var class="Fa">device_t - cdev</var>, <var class="Fa">const char *name</var>, - <var class="Fa">regulator_t *regulator</var>)</dt> - <dd>Resolve a regulator based on its name. All regulators names are unique. - This will also increment the refcount on the regulator.</dd> - <dt id="regulator_get_by_id"><a class="permalink" href="#regulator_get_by_id"><code class="Fn">regulator_get_by_id</code></a>(<var class="Fa">device_t - cdev</var>, <var class="Fa">device_t pdev</var>, <var class="Fa">intptr_t - id</var>, <var class="Fa">regulator_t *regulator</var>)</dt> - <dd>Resolve a regulator based on its id. All regulators ids are unique. This - will also increment the refcount on the regulator.</dd> - <dt id="regulator_get_by_ofw_property"><a class="permalink" href="#regulator_get_by_ofw_property"><code class="Fn">regulator_get_by_ofw_property</code></a>(<var class="Fa">device_t - dev</var>, <var class="Fa">phandle_t node</var>, <var class="Fa">char - *name</var>, <var class="Fa">regulator_t *reg</var>)</dt> - <dd>Resolve a regulator based on the fdt property named name. If node is 0 - then the function will get the ofw node itself. This will also increment - the refcount on the regulator. Returns 0 on success or - <code class="Er">ENOENT</code> if the ofw property does not exists.</dd> - <dt id="regulator_release"><a class="permalink" href="#regulator_release"><code class="Fn">regulator_release</code></a>(<var class="Fa">regulator_t - regulator</var>)</dt> - <dd>This disables the regulator, decrements the refcount on it and frees the - regulator variable passed.</dd> - <dt id="regulator_get_name"><a class="permalink" href="#regulator_get_name"><code class="Fn">regulator_get_name</code></a>(<var class="Fa">regulator_t - regulator</var>)</dt> - <dd>Returns the name of the regulator. All regulator names are unique.</dd> - <dt id="regulator_enable"><a class="permalink" href="#regulator_enable"><code class="Fn">regulator_enable</code></a>(<var class="Fa">regulator_t - reg</var>)</dt> - <dd>Enable the regulator. If the regulator supports a voltage range, the one - configured in the hardware will be the output voltage. If the regulator - was already enabled by another driver this simply increments the enable - counter.</dd> - <dt id="regulator_disable"><a class="permalink" href="#regulator_disable"><code class="Fn">regulator_disable</code></a>(<var class="Fa">regulator_t - reg</var>)</dt> - <dd>Disable the regulator. If the regulator was also enabled by another driver - this simply decrements the enable counter. If the regulator was not - previously enabled we will kassert.</dd> - <dt id="regulator_stop"><a class="permalink" href="#regulator_stop"><code class="Fn">regulator_stop</code></a>(<var class="Fa">regulator_t - reg</var>)</dt> - <dd>Disable the regulator in hardware. This ensures the regulator is disabled - even if it was enabled by bootloader. This should not be called on - regulator that has previously been enabled by a driver. Returns 0 on - success or <code class="Er">EBUSY</code> if another consumer enabled - it.</dd> - <dt id="regulator_status"><a class="permalink" href="#regulator_status"><code class="Fn">regulator_status</code></a>(<var class="Fa">regulator_t - reg</var>, <var class="Fa">int *status</var>)</dt> - <dd>Get the hardware status of the regulator. status will contain a bit mask - with thoses possible value : - <dl class="Bl-tag"> - <dt>REGULATOR_STATUS_ENABLED</dt> - <dd>The regulator is enabled.</dd> - <dt>REGULATOR_STATUS_OVERCURRENT</dt> - <dd>The hardware reports that too much current is being drawn.</dd> - </dl> - </dd> - <dt id="regulator_get_voltage"><a class="permalink" href="#regulator_get_voltage"><code class="Fn">regulator_get_voltage</code></a>(<var class="Fa">regulator_t - reg</var>, <var class="Fa">int *uvolt</var>)</dt> - <dd>Get the current voltage set for the regulator in microvolts.</dd> - <dt id="regulator_set_voltage"><a class="permalink" href="#regulator_set_voltage"><code class="Fn">regulator_set_voltage</code></a>(<var class="Fa">regulator_t - reg</var>, <var class="Fa">int min_uvolt</var>, <var class="Fa">int - max_uvolt</var>)</dt> - <dd>Change the voltage for the regulator. If a range is acceptable by the - hardware or driver different values can be provided as min and max. - Returns 0 on success or <code class="Er">ERANGE</code> if the regulator - doesn't support this voltage range.</dd> - <dt id="regulator_check_voltage"><a class="permalink" href="#regulator_check_voltage"><code class="Fn">regulator_check_voltage</code></a>(<var class="Fa">regulator_t - reg</var>, <var class="Fa">int uvolt</var>)</dt> - <dd>Checks if the regulator support the given voltage. Returns 0 on success or - <code class="Er">ERANGE</code> if the regulator doesn't support this - voltage range.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">regulator</code> framework first appear in - <span class="Ux">FreeBSD 12.0</span>. The <code class="Nm">regulator</code> - framework was written by <span class="An">Michal Meloun</span> - <<a class="Mt" href="mailto:mmel@FreeBSD.org">mmel@FreeBSD.org</a>>. - The <code class="Nm">regulator</code> manual page was written by - <span class="An">Emmanuel Vadot</span> - <<a class="Mt" href="mailto:manu@FreeBSD.org">manu@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 14, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/resettodr.9 4.html b/static/freebsd/man9/resettodr.9 4.html deleted file mode 100644 index 9b499684..00000000 --- a/static/freebsd/man9/resettodr.9 4.html +++ /dev/null @@ -1,49 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">RESETTODR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">RESETTODR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">resettodr</code> — <span class="Nd">set - battery-backed clock from system time</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">resettodr</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#resettodr"><code class="Fn" id="resettodr">resettodr</code></a>() - function sets the system's battery-backed clock based on the contents of the - system <var class="Va">time</var> variable.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">inittodr(9)</a>, <a class="Xr">time(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">On many systems, <code class="Fn">resettodr</code>() has to - convert from <var class="Va">time</var> to a time expressed in terms of - year, month, day, hours, minutes, and seconds. Many of the implementations - could share code, but do not.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 13, 1995</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/resource_int_value.9 4.html b/static/freebsd/man9/resource_int_value.9 4.html deleted file mode 100644 index ec56381f..00000000 --- a/static/freebsd/man9/resource_int_value.9 4.html +++ /dev/null @@ -1,94 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">RESOURCE_INT_VALUE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">RESOURCE_INT_VALUE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">resource_int_value</code>, - <code class="Nm">resource_long_value</code>, - <code class="Nm">resource_string_value</code> — <span class="Nd">get - a value from the hints mechanism</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">resource_int_value</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>, <var class="Fa" style="white-space: nowrap;">int - unit</var>, <var class="Fa" style="white-space: nowrap;">const char - *resname</var>, <var class="Fa" style="white-space: nowrap;">int - *result</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">resource_long_value</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>, <var class="Fa" style="white-space: nowrap;">int - unit</var>, <var class="Fa" style="white-space: nowrap;">const char - *resname</var>, <var class="Fa" style="white-space: nowrap;">long - *result</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">resource_string_value</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>, <var class="Fa" style="white-space: nowrap;">int - unit</var>, <var class="Fa" style="white-space: nowrap;">const char - *resname</var>, <var class="Fa" style="white-space: nowrap;">const char - **result</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These functions fetch a value from the “hints” - mechanism.</p> -<p class="Pp">The functions take the following arguments:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">name</var></dt> - <dd>The name of the device to get the resource value from.</dd> - <dt><var class="Fa">unit</var></dt> - <dd>The unit number of the device. -1 is special and is used for wildcard - entries.</dd> - <dt><var class="Fa">resname</var></dt> - <dd>The resource name.</dd> - <dt><var class="Fa">result</var></dt> - <dd>A pointer to memory in which to store the resource value.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If successful, the functions return 0. Otherwise, a non-zero error - code is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp">The functions will fail if:</p> -<dl class="Bl-tag"> - <dt id="ENOENT">[<a class="permalink" href="#ENOENT"><code class="Er">ENOENT</code></a>]</dt> - <dd>The resource could not be found.</dd> - <dt id="EFTYPE">[<a class="permalink" href="#EFTYPE"><code class="Er">EFTYPE</code></a>]</dt> - <dd>Inappropriate resource type.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">device(9)</a>, <a class="Xr">driver(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Warner - Losh</span> - <<a class="Mt" href="mailto:imp@FreeBSD.org">imp@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 1, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/rijndael.9 3.html b/static/freebsd/man9/rijndael.9 3.html deleted file mode 100644 index bb3a114a..00000000 --- a/static/freebsd/man9/rijndael.9 3.html +++ /dev/null @@ -1,99 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">RIJNDAEL(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">RIJNDAEL(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">rijndael_makeKey</code>, - <code class="Nm">rijndael_cipherInit</code>, - <code class="Nm">rijndael_blockEncrypt</code>, - <code class="Nm">rijndael_padEncrypt</code>, - <code class="Nm">rijndael_blockDecrypt</code>, - <code class="Nm">rijndael_padDecrypt</code> — <span class="Nd">AES - encryption</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">crypto/rijndael.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rijndael_makeKey</code>(<var class="Fa">keyInstance - *key</var>, <var class="Fa">uint8_t direction</var>, <var class="Fa">int - keyLen</var>, <var class="Fa">char *keyMaterial</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rijndael_cipherInit</code>(<var class="Fa">cipherInstance - *cipher</var>, <var class="Fa">uint8_t mode</var>, <var class="Fa">char - *IV</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rijndael_blockEncrypt</code>(<var class="Fa">cipherInstance - *cipher</var>, <var class="Fa">keyInstance *key</var>, - <var class="Fa">uint8_t *input</var>, <var class="Fa">int inputLen</var>, - <var class="Fa">uint8_t *outBuffer</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rijndael_padEncrypt</code>(<var class="Fa">cipherInstance - *cipher</var>, <var class="Fa">keyInstance *key</var>, - <var class="Fa">uint8_t *input</var>, <var class="Fa">int inputOctets</var>, - <var class="Fa">uint8_t *outBuffer</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rijndael_blockDecrypt</code>(<var class="Fa">cipherInstance - *cipher</var>, <var class="Fa">keyInstance *key</var>, - <var class="Fa">uint8_t *input</var>, <var class="Fa">int inputLen</var>, - <var class="Fa">uint8_t *outBuffer</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rijndael_padDecrypt</code>(<var class="Fa">cipherInstance - *cipher</var>, <var class="Fa">keyInstance *key</var>, - <var class="Fa">uint8_t *input</var>, <var class="Fa">int inputOctets</var>, - <var class="Fa">uint8_t *outBuffer</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#rijndael_makeKey"><code class="Fn" id="rijndael_makeKey">rijndael_makeKey</code></a>() - function is used to set up the key schedule in <var class="Fa">key</var>. - The <var class="Fa">direction</var> (which may be - <code class="Dv">DIR_ENCRYPT</code> or <code class="Dv">DIR_DECRYPT</code>) - specifies the intended use of the key. The length of the key (in bits) is - given in <var class="Fa">keyLen</var>, and must be 128, 192 or 256. The - actual key is supplied in the buffer pointed to by - <var class="Fa">keyMaterial</var>. This material may be raw binary data, or - an ASCII string containing a hexadecimal rendition of the raw binary data, - dependent on a compile-time option in the - <code class="Nm">rijndael_makeKey</code> sources, - <code class="Dv">BINARY_KEY_MATERIAL</code>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">rijndael_makeKey</code>() function will - return <code class="Dv">BAD_KEY_INSTANCE</code> if a - <code class="Dv">NULL</code> <var class="Fa">key</var> is passed, - <code class="Dv">BAD_KEY_DIR</code> if <var class="Fa">direction</var> is - not <code class="Dv">DIR_ENCRYPT</code> or - <code class="Dv">DIR_DECRYPT</code>, <code class="Dv">BAD_KEY_MAT</code> if - the key materials are not a hexadecimal string (and binary keys are not - set), and <code class="Dv">TRUE</code> otherwise.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp"><span class="An">Mark R V Murray</span></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 6, 2002</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/rman.9 4.html b/static/freebsd/man9/rman.9 4.html deleted file mode 100644 index 12719e79..00000000 --- a/static/freebsd/man9/rman.9 4.html +++ /dev/null @@ -1,411 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">RMAN(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">RMAN(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">rman</code>, - <code class="Nm">rman_activate_resource</code>, - <code class="Nm">rman_adjust_resource</code>, - <code class="Nm">rman_deactivate_resource</code>, - <code class="Nm">rman_fini</code>, <code class="Nm">rman_init</code>, - <code class="Nm">rman_init_from_resource</code>, - <code class="Nm">rman_is_region_manager</code>, - <code class="Nm">rman_manage_region</code>, - <code class="Nm">rman_first_free_region</code>, - <code class="Nm">rman_last_free_region</code>, - <code class="Nm">rman_release_resource</code>, - <code class="Nm">rman_reserve_resource</code>, - <code class="Nm">rman_make_alignment_flags</code>, - <code class="Nm">rman_get_start</code>, - <code class="Nm">rman_get_end</code>, - <code class="Nm">rman_get_device</code>, - <code class="Nm">rman_get_size</code>, - <code class="Nm">rman_get_flags</code>, - <code class="Nm">rman_set_mapping</code>, - <code class="Nm">rman_get_mapping</code>, - <code class="Nm">rman_set_virtual</code>, - <code class="Nm">rman_get_virtual</code>, - <code class="Nm">rman_set_bustag</code>, - <code class="Nm">rman_get_bustag</code>, - <code class="Nm">rman_set_bushandle</code>, - <code class="Nm">rman_get_bushandle</code>, - <code class="Nm">rman_set_rid</code>, <code class="Nm">rman_get_rid</code>, - <code class="Nm">rman_set_type</code>, <code class="Nm">rman_get_type</code> - — <span class="Nd">resource management functions</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/rman.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rman_activate_resource</code>(<var class="Fa" style="white-space: nowrap;">struct - resource *r</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rman_adjust_resource</code>(<var class="Fa" style="white-space: nowrap;">struct - resource *r</var>, <var class="Fa" style="white-space: nowrap;">rman_res_t - start</var>, <var class="Fa" style="white-space: nowrap;">rman_res_t - end</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rman_deactivate_resource</code>(<var class="Fa" style="white-space: nowrap;">struct - resource *r</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rman_fini</code>(<var class="Fa" style="white-space: nowrap;">struct - rman *rm</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rman_init</code>(<var class="Fa" style="white-space: nowrap;">struct - rman *rm</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rman_init_from_resource</code>(<var class="Fa" style="white-space: nowrap;">struct - rman *rm</var>, <var class="Fa" style="white-space: nowrap;">struct resource - *r</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rman_is_region_manager</code>(<var class="Fa" style="white-space: nowrap;">struct - resource *r</var>, <var class="Fa" style="white-space: nowrap;">struct rman - *rm</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rman_manage_region</code>(<var class="Fa" style="white-space: nowrap;">struct - rman *rm</var>, <var class="Fa" style="white-space: nowrap;">rman_res_t - start</var>, <var class="Fa" style="white-space: nowrap;">rman_res_t - end</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rman_first_free_region</code>(<var class="Fa" style="white-space: nowrap;">struct - rman *rm</var>, <var class="Fa" style="white-space: nowrap;">rman_res_t - *start</var>, <var class="Fa" style="white-space: nowrap;">rman_res_t - *end</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rman_last_free_region</code>(<var class="Fa" style="white-space: nowrap;">struct - rman *rm</var>, <var class="Fa" style="white-space: nowrap;">rman_res_t - *start</var>, <var class="Fa" style="white-space: nowrap;">rman_res_t - *end</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rman_release_resource</code>(<var class="Fa" style="white-space: nowrap;">struct - resource *r</var>);</p> -<p class="Pp"><var class="Ft">struct resource *</var> - <br/> - <code class="Fn">rman_reserve_resource</code>(<var class="Fa">struct rman - *rm</var>, <var class="Fa">rman_res_t start</var>, - <var class="Fa">rman_res_t end</var>, <var class="Fa">rman_res_t - count</var>, <var class="Fa">u_int flags</var>, <var class="Fa">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">uint32_t</var> - <br/> - <code class="Fn">rman_make_alignment_flags</code>(<var class="Fa" style="white-space: nowrap;">uint32_t - size</var>);</p> -<p class="Pp"><var class="Ft">rman_res_t</var> - <br/> - <code class="Fn">rman_get_start</code>(<var class="Fa" style="white-space: nowrap;">struct - resource *r</var>);</p> -<p class="Pp"><var class="Ft">rman_res_t</var> - <br/> - <code class="Fn">rman_get_end</code>(<var class="Fa" style="white-space: nowrap;">struct - resource *r</var>);</p> -<p class="Pp"><var class="Ft">device_t</var> - <br/> - <code class="Fn">rman_get_device</code>(<var class="Fa" style="white-space: nowrap;">struct - resource *r</var>);</p> -<p class="Pp"><var class="Ft">rman_res_t</var> - <br/> - <code class="Fn">rman_get_size</code>(<var class="Fa" style="white-space: nowrap;">struct - resource *r</var>);</p> -<p class="Pp"><var class="Ft">u_int</var> - <br/> - <code class="Fn">rman_get_flags</code>(<var class="Fa" style="white-space: nowrap;">struct - resource *r</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rman_set_mapping</code>(<var class="Fa" style="white-space: nowrap;">struct - resource *r</var>, <var class="Fa" style="white-space: nowrap;">struct - resource_map *map</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rman_get_mapping</code>(<var class="Fa" style="white-space: nowrap;">struct - resource *r</var>, <var class="Fa" style="white-space: nowrap;">struct - resource_map *map</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rman_set_virtual</code>(<var class="Fa" style="white-space: nowrap;">struct - resource *r</var>, <var class="Fa" style="white-space: nowrap;">void - *v</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">rman_get_virtual</code>(<var class="Fa" style="white-space: nowrap;">struct - resource *r</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rman_set_bustag</code>(<var class="Fa" style="white-space: nowrap;">struct - resource *r</var>, - <var class="Fa" style="white-space: nowrap;">bus_space_tag_t t</var>);</p> -<p class="Pp"><var class="Ft">bus_space_tag_t</var> - <br/> - <code class="Fn">rman_get_bustag</code>(<var class="Fa" style="white-space: nowrap;">struct - resource *r</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rman_set_bushandle</code>(<var class="Fa" style="white-space: nowrap;">struct - resource *r</var>, - <var class="Fa" style="white-space: nowrap;">bus_space_handle_t - h</var>);</p> -<p class="Pp"><var class="Ft">bus_space_handle_t</var> - <br/> - <code class="Fn">rman_get_bushandle</code>(<var class="Fa" style="white-space: nowrap;">struct - resource *r</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rman_set_rid</code>(<var class="Fa" style="white-space: nowrap;">struct - resource *r</var>, <var class="Fa" style="white-space: nowrap;">int - rid</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rman_get_rid</code>(<var class="Fa" style="white-space: nowrap;">struct - resource *r</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rman_set_type</code>(<var class="Fa" style="white-space: nowrap;">struct - resource *r</var>, <var class="Fa" style="white-space: nowrap;">int - type</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rman_get_type</code>(<var class="Fa" style="white-space: nowrap;">struct - resource *r</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">rman</code> set of functions provides a - flexible resource management abstraction. It is used extensively by the bus - management code. It implements the abstractions of region and resource. A - region descriptor is used to manage a region; this could be memory or some - other form of bus space.</p> -<p class="Pp">Each region has a set of bounds. Within these bounds, allocated - segments may reside. Each segment, termed a resource, has several properties - which are represented by a 16-bit flag register, as follows.</p> -<div class="Bd Pp Li"> -<pre>#define RF_ALLOCATED 0x0001 /* resource has been reserved */ -#define RF_ACTIVE 0x0002 /* resource allocation has been activated */ -#define RF_SHAREABLE 0x0004 /* resource permits contemporaneous sharing */ -#define RF_FIRSTSHARE 0x0020 /* first in sharing list */ -#define RF_PREFETCHABLE 0x0040 /* resource is prefetchable */ -#define RF_UNMAPPED 0x0100 /* don't map resource when activating */</pre> -</div> -<p class="Pp">Bits 15:10 of the flag register are used to represent the desired - alignment of the resource within the region.</p> -<p class="Pp" id="rman_init">The - <a class="permalink" href="#rman_init"><code class="Fn">rman_init</code></a>() - function initializes the region descriptor, pointed to by the - <var class="Fa">rm</var> argument, for use with the resource management - functions. It is required that the fields <var class="Va">rm_type</var> and - <var class="Va">rm_descr</var> of <var class="Vt">struct rman</var> be set - before calling <code class="Fn">rman_init</code>(). The field - <var class="Va">rm_type</var> shall be set to - <code class="Dv">RMAN_ARRAY</code>. The field <var class="Va">rm_descr</var> - shall be set to a string that describes the resource to be managed. The - <var class="Va">rm_start</var> and <var class="Va">rm_end</var> fields may - be set to limit the range of acceptable resource addresses. If these fields - are not set, <code class="Fn">rman_init</code>() will initialize them to - allow the entire range of resource addresses. It also initializes any - mutexes associated with the structure. If - <code class="Fn">rman_init</code>() fails to initialize the mutex, it will - return <code class="Er">ENOMEM</code>; <code class="Er">otherwise it will - return 0 and</code> <var class="Fa">rm</var> will be initialized.</p> -<p class="Pp" id="rman_fini">The - <a class="permalink" href="#rman_fini"><code class="Fn">rman_fini</code></a>() - function frees any structures associated with the structure pointed to by - the <var class="Fa">rm</var> argument. If any of the resources within the - managed region have the <code class="Dv">RF_ALLOCATED</code> flag set, it - will return <code class="Er">EBUSY</code>; otherwise, any mutexes associated - with the structure will be released and destroyed, and the function will - return 0.</p> -<p class="Pp" id="rman_manage_region">The - <a class="permalink" href="#rman_manage_region"><code class="Fn">rman_manage_region</code></a>() - function establishes the concept of a region which is under - <code class="Nm">rman</code> control. The <var class="Fa">rman</var> - argument points to the region descriptor. The <var class="Fa">start</var> - and <var class="Fa">end</var> arguments specify the bounds of the region. If - successful, <code class="Fn">rman_manage_region</code>() will return 0. If - the region overlaps with an existing region, it will return - <code class="Er">EBUSY</code>. If any part of the region falls outside of - the valid address range for <var class="Fa">rm</var>, it will return - <code class="Er">EINVAL</code>. <code class="Er">ENOMEM</code> will be - returned when <code class="Fn">rman_manage_region</code>() failed to - allocate memory for the region.</p> -<p class="Pp" id="rman_init_from_resource">The - <a class="permalink" href="#rman_init_from_resource"><code class="Fn">rman_init_from_resource</code></a>() - function is a wrapper routine to create a resource manager backed by an - existing resource. It initializes <var class="Fa">rm</var> using - <code class="Fn">rman_init</code>() and then adds a region to - <var class="Fa">rm</var> corresponding to the address range allocated to - <var class="Fa">r</var> via - <code class="Fn">rman_manage_region</code>().</p> -<p class="Pp" id="rman_first_free_region">The - <a class="permalink" href="#rman_first_free_region"><code class="Fn">rman_first_free_region</code></a>() - and - <a class="permalink" href="#rman_last_free_region"><code class="Fn" id="rman_last_free_region">rman_last_free_region</code></a>() - functions can be used to query a resource manager for its first (or last) - unallocated region. If <var class="Fa">rm</var> contains no free region, - these functions will return <code class="Er">ENOENT</code>. Otherwise, - <var class="Fa">*start</var> and <var class="Fa">*end</var> are set to the - bounds of the free region and zero is returned.</p> -<p class="Pp" id="rman_reserve_resource">The - <a class="permalink" href="#rman_reserve_resource"><code class="Fn">rman_reserve_resource</code></a>() - function is where the bulk of the <code class="Nm">rman</code> logic is - located. It attempts to reserve a contiguous range in the specified region - <var class="Fa">rm</var> for the use of the device - <var class="Fa">dev</var>. The caller can specify the - <var class="Fa">start</var> and <var class="Fa">end</var> of an acceptable - range, required alignment, and the code will attempt to find a free segment - which fits. The <var class="Fa">start</var> argument is the lowest - acceptable starting value of the resource. The <var class="Fa">end</var> - argument is the highest acceptable ending value of the resource. Therefore, - <var class="Fa">start</var> <span class="No">+</span> - <var class="Fa">count</var> <span class="No">- 1</span> must be ≤ - <var class="Fa">end</var> for any allocation to happen. The alignment - requirement (if any) is specified in <var class="Fa">flags</var>. Often the - <code class="Dv">RF_ALIGNMENT_LOG2</code> macro is used to specify alignment - to a power-of-2 size, or <code class="Fn">rman_make_alignment_flags</code>() - can be used to compute the <var class="Fa">flags</var> value at runtime. A - shared segment will be allocated if the <code class="Dv">RF_SHAREABLE</code> - flag is set, otherwise an exclusive segment will be allocated. If this - shared segment already exists, the caller has its device added to the list - of consumers.</p> -<p class="Pp" id="rman_make_alignment_flags">The - <a class="permalink" href="#rman_make_alignment_flags"><code class="Fn">rman_make_alignment_flags</code></a>() - function returns the flag mask corresponding to the desired alignment - <var class="Fa">size</var>. This should be used when calling - <a class="permalink" href="#rman_reserve_resource_bound"><code class="Fn" id="rman_reserve_resource_bound">rman_reserve_resource_bound</code></a>().</p> -<p class="Pp" id="rman_is_region_manager">The - <a class="permalink" href="#rman_is_region_manager"><code class="Fn">rman_is_region_manager</code></a>() - function returns true if the allocated resource <var class="Fa">r</var> was - allocated from <var class="Fa">rm</var>. Otherwise, it returns false.</p> -<p class="Pp" id="rman_adjust_resource">The - <a class="permalink" href="#rman_adjust_resource"><code class="Fn">rman_adjust_resource</code></a>() - function is used to adjust the reserved address range of an allocated - resource to reserve <var class="Fa">start</var> through - <var class="Fa">end</var>. It can be used to grow or shrink one or both ends - of the resource range. The current implementation does not support entirely - relocating the resource and will fail with <code class="Er">EINVAL</code> if - the new resource range does not overlap the old resource range. If either - end of the resource range grows and the new resource range would conflict - with another allocated resource, the function will fail with - <code class="Er">EBUSY</code>. The - <code class="Fn">rman_adjust_resource</code>() function does not support - adjusting the resource range for shared resources and will fail such - attempts with <code class="Er">EINVAL</code>. Upon success, the resource - <var class="Fa">r</var> will have a start address of - <var class="Fa">start</var> and an end address of <var class="Fa">end</var> - and the function will return zero. Note that none of the constraints of the - original allocation request such as alignment or boundary restrictions are - checked by <code class="Fn">rman_adjust_resource</code>(). It is the - caller's responsibility to enforce any such requirements.</p> -<p class="Pp" id="rman_release_resource">The - <a class="permalink" href="#rman_release_resource"><code class="Fn">rman_release_resource</code></a>() - function releases the reserved resource <var class="Fa">r</var>. It may - attempt to merge adjacent free resources.</p> -<p class="Pp" id="rman_activate_resource">The - <a class="permalink" href="#rman_activate_resource"><code class="Fn">rman_activate_resource</code></a>() - function marks a resource as active, by setting the - <code class="Dv">RF_ACTIVE</code> flag. If this is a time shared resource, - and the caller has not yet acquired the resource, the function returns - <code class="Er">EBUSY</code>.</p> -<p class="Pp" id="rman_deactivate_resource">The - <a class="permalink" href="#rman_deactivate_resource"><code class="Fn">rman_deactivate_resource</code></a>() - function marks a resource <var class="Fa">r</var> as inactive, by clearing - the <code class="Dv">RF_ACTIVE</code> flag. If other consumers are waiting - for this range, it will wakeup their threads.</p> -<p class="Pp" id="rman_get_start">The - <a class="permalink" href="#rman_get_start"><code class="Fn">rman_get_start</code></a>(), - <a class="permalink" href="#rman_get_end"><code class="Fn" id="rman_get_end">rman_get_end</code></a>(), - <a class="permalink" href="#rman_get_size"><code class="Fn" id="rman_get_size">rman_get_size</code></a>(), - and - <a class="permalink" href="#rman_get_flags"><code class="Fn" id="rman_get_flags">rman_get_flags</code></a>() - functions return the bounds, size and flags of the previously reserved - resource <var class="Fa">r</var>.</p> -<p class="Pp" id="rman_set_bustag">The - <a class="permalink" href="#rman_set_bustag"><code class="Fn">rman_set_bustag</code></a>() - function associates a <var class="Vt">bus_space_tag_t</var> - <var class="Fa">t</var> with the resource <var class="Fa">r</var>. The - <a class="permalink" href="#rman_get_bustag"><code class="Fn" id="rman_get_bustag">rman_get_bustag</code></a>() - function is used to retrieve this tag once set.</p> -<p class="Pp" id="rman_set_bushandle">The - <a class="permalink" href="#rman_set_bushandle"><code class="Fn">rman_set_bushandle</code></a>() - function associates a <var class="Vt">bus_space_handle_t</var> - <var class="Fa">h</var> with the resource <var class="Fa">r</var>. The - <a class="permalink" href="#rman_get_bushandle"><code class="Fn" id="rman_get_bushandle">rman_get_bushandle</code></a>() - function is used to retrieve this handle once set.</p> -<p class="Pp" id="rman_set_virtual">The - <a class="permalink" href="#rman_set_virtual"><code class="Fn">rman_set_virtual</code></a>() - function is used to associate a kernel virtual address with a resource - <var class="Fa">r</var>. The - <a class="permalink" href="#rman_get_virtual"><code class="Fn" id="rman_get_virtual">rman_get_virtual</code></a>() - function can be used to retrieve the KVA once set.</p> -<p class="Pp" id="rman_set_mapping">The - <a class="permalink" href="#rman_set_mapping"><code class="Fn">rman_set_mapping</code></a>() - function is used to associate a resource mapping with a resource - <var class="Fa">r</var>. The mapping must cover the entire resource. Setting - a mapping sets the associated <a class="Xr">bus_space(9)</a> handle and tag - for <var class="Fa">r</var> as well as the kernel virtual address if the - mapping contains one. These individual values can be retrieved via - <a class="permalink" href="#rman_get_bushandle~2"><code class="Fn" id="rman_get_bushandle~2">rman_get_bushandle</code></a>(), - <code class="Fn">rman_get_bustag</code>(), and - <code class="Fn">rman_get_virtual</code>().</p> -<p class="Pp" id="rman_get_mapping">The - <a class="permalink" href="#rman_get_mapping"><code class="Fn">rman_get_mapping</code></a>() - function can be used to retrieve the associated resource mapping once - set.</p> -<p class="Pp" id="rman_set_rid">The - <a class="permalink" href="#rman_set_rid"><code class="Fn">rman_set_rid</code></a>() - function associates a resource identifier with a resource - <var class="Fa">r</var>. The - <a class="permalink" href="#rman_get_rid"><code class="Fn" id="rman_get_rid">rman_get_rid</code></a>() - function retrieves this RID.</p> -<p class="Pp" id="rman_set_type">The - <a class="permalink" href="#rman_set_type"><code class="Fn">rman_set_type</code></a>() - function associates a resource type with a resource <var class="Fa">r</var>. - The - <a class="permalink" href="#rman_get_type"><code class="Fn" id="rman_get_type">rman_get_type</code></a>() - function retrieves this type.</p> -<p class="Pp" id="rman_get_device">The - <a class="permalink" href="#rman_get_device"><code class="Fn">rman_get_device</code></a>() - function returns a pointer to the device which reserved the resource - <var class="Fa">r</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">bus_activate_resource(9)</a>, - <a class="Xr">bus_adjust_resource(9)</a>, - <a class="Xr">bus_alloc_resource(9)</a>, - <a class="Xr">bus_map_resource(9)</a>, - <a class="Xr">bus_release_resource(9)</a>, - <a class="Xr">bus_set_resource(9)</a>, <a class="Xr">bus_space(9)</a>, - <a class="Xr">mutex(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 13, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/rmlock.9 4.html b/static/freebsd/man9/rmlock.9 4.html deleted file mode 100644 index 7120bb56..00000000 --- a/static/freebsd/man9/rmlock.9 4.html +++ /dev/null @@ -1,366 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">RMLOCK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">RMLOCK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">rmlock</code>, <code class="Nm">rm_init</code>, - <code class="Nm">rm_init_flags</code>, <code class="Nm">rm_destroy</code>, - <code class="Nm">rm_rlock</code>, <code class="Nm">rm_try_rlock</code>, - <code class="Nm">rm_wlock</code>, <code class="Nm">rm_runlock</code>, - <code class="Nm">rm_wunlock</code>, <code class="Nm">rm_wowned</code>, - <code class="Nm">rm_sleep</code>, <code class="Nm">rm_assert</code>, - <code class="Nm">RM_SYSINIT</code>, - <code class="Nm">RM_SYSINIT_FLAGS</code>, <code class="Nm">rms_init</code>, - <code class="Nm">rms_destroy</code>, <code class="Nm">rms_rlock</code>, - <code class="Nm">rms_wlock</code>, <code class="Nm">rms_runlock</code>, - <code class="Nm">rms_wunlock</code> — <span class="Nd">kernel - reader/writer lock optimized for read-mostly access patterns</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/lock.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/rmlock.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rm_init</code>(<var class="Fa" style="white-space: nowrap;">struct - rmlock *rm</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rm_init_flags</code>(<var class="Fa" style="white-space: nowrap;">struct - rmlock *rm</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">int - opts</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rm_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct - rmlock *rm</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rm_rlock</code>(<var class="Fa" style="white-space: nowrap;">struct - rmlock *rm</var>, <var class="Fa" style="white-space: nowrap;">struct - rm_priotracker* tracker</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rm_try_rlock</code>(<var class="Fa" style="white-space: nowrap;">struct - rmlock *rm</var>, <var class="Fa" style="white-space: nowrap;">struct - rm_priotracker* tracker</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rm_wlock</code>(<var class="Fa" style="white-space: nowrap;">struct - rmlock *rm</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rm_runlock</code>(<var class="Fa" style="white-space: nowrap;">struct - rmlock *rm</var>, <var class="Fa" style="white-space: nowrap;">struct - rm_priotracker* tracker</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rm_wunlock</code>(<var class="Fa" style="white-space: nowrap;">struct - rmlock *rm</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rm_wowned</code>(<var class="Fa" style="white-space: nowrap;">const - struct rmlock *rm</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rm_sleep</code>(<var class="Fa" style="white-space: nowrap;">void - *wchan</var>, <var class="Fa" style="white-space: nowrap;">struct rmlock - *rm</var>, <var class="Fa" style="white-space: nowrap;">int priority</var>, - <var class="Fa" style="white-space: nowrap;">const char *wmesg</var>, - <var class="Fa" style="white-space: nowrap;">int timo</var>);</p> -<p class="Pp"> - <br/> - <code class="Cd">options INVARIANTS</code> - <br/> - <code class="Cd">options INVARIANT_SUPPORT</code> - <br/> - <var class="Ft">void</var> - <br/> - <code class="Fn">rm_assert</code>(<var class="Fa" style="white-space: nowrap;">struct - rmlock *rm</var>, <var class="Fa" style="white-space: nowrap;">int - what</var>);</p> -<p class="Pp"><code class="In">#include - <<a class="In">sys/kernel.h</a>></code></p> -<p class="Pp"><code class="Fn">RM_SYSINIT</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">struct rmlock *rm</var>, - <var class="Fa" style="white-space: nowrap;">const char *desc</var>);</p> -<p class="Pp"><code class="Fn">RM_SYSINIT_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">struct rmlock *rm</var>, - <var class="Fa" style="white-space: nowrap;">const char *desc</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rms_init</code>(<var class="Fa" style="white-space: nowrap;">struct - rmslock *rms</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rms_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct - rmslock *rms</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rms_rlock</code>(<var class="Fa" style="white-space: nowrap;">struct - rmslock *rms</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rms_wlock</code>(<var class="Fa" style="white-space: nowrap;">struct - rmslock *rms</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rms_runlock</code>(<var class="Fa" style="white-space: nowrap;">struct - rmslock *rms</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rms_wunlock</code>(<var class="Fa" style="white-space: nowrap;">struct - rmslock *rms</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Read-mostly locks allow shared access to protected data by - multiple threads, or exclusive access by a single thread. The threads with - shared access are known as - <a class="permalink" href="#readers"><i class="Em" id="readers">readers</i></a> - since they only read the protected data. A thread with exclusive access is - known as a - <a class="permalink" href="#writer"><i class="Em" id="writer">writer</i></a> - since it can modify protected data.</p> -<p class="Pp">Read-mostly locks are designed to be efficient for locks almost - exclusively used as reader locks and as such should be used for protecting - data that rarely changes. Acquiring an exclusive lock after the lock has - been locked for shared access is an expensive operation.</p> -<p class="Pp" id="rm_rlock">Normal read-mostly locks are similar to - <a class="Xr">rwlock(9)</a> locks and follow the same lock ordering rules as - <a class="Xr">rwlock(9)</a> locks. Read-mostly locks have full priority - propagation like mutexes. Unlike <a class="Xr">rwlock(9)</a>, read-mostly - locks propagate priority to both readers and writers. This is implemented - via the <var class="Va">rm_priotracker</var> structure argument supplied to - <a class="permalink" href="#rm_rlock"><code class="Fn">rm_rlock</code></a>() - and - <a class="permalink" href="#rm_runlock"><code class="Fn" id="rm_runlock">rm_runlock</code></a>(). - Readers can recurse if the lock is initialized with the - <code class="Dv">RM_RECURSE</code> option; however, writers are never - allowed to recurse.</p> -<p class="Pp" id="rm_init_flags">Sleeping for writers can be allowed by passing - <code class="Dv">RM_SLEEPABLE</code> to - <a class="permalink" href="#rm_init_flags"><code class="Fn">rm_init_flags</code></a>(). - It changes lock ordering rules to the same as for <a class="Xr">sx(9)</a> - locks. They do not propagate priority to writers, but they do propagate - priority to readers. Note that readers are not permitted to sleep regardless - of the flag.</p> -<p class="Pp" id="rms_init">Sleepable read-mostly locks (created with - <a class="permalink" href="#rms_init"><code class="Fn">rms_init</code></a>()) - allow sleeping for both readers and writers, but don't do priority - propagation for either. They follow <a class="Xr">sx(9)</a> lock - ordering.</p> -<section class="Ss"> -<h2 class="Ss" id="Macros_and_Functions"><a class="permalink" href="#Macros_and_Functions">Macros - and Functions</a></h2> -<dl class="Bl-tag"> - <dt id="rm_init"><a class="permalink" href="#rm_init"><code class="Fn">rm_init</code></a>(<var class="Fa">struct - rmlock *rm</var>, <var class="Fa">const char *name</var>)</dt> - <dd>Initialize the read-mostly lock <var class="Fa">rm</var>. The - <var class="Fa">name</var> description is used solely for debugging - purposes. This function must be called before any other operations on the - lock.</dd> - <dt><code class="Fn">rm_init_flags</code>(<var class="Fa">struct rmlock - *rm</var>, <var class="Fa">const char *name</var>, <var class="Fa">int - opts</var>)</dt> - <dd>Similar to <code class="Fn">rm_init</code>(), initialize the read-mostly - lock <var class="Fa">rm</var> with a set of optional flags. The - <var class="Fa">opts</var> arguments contains one or more of the following - flags: - <dl class="Bl-tag"> - <dt id="RM_NOWITNESS"><a class="permalink" href="#RM_NOWITNESS"><code class="Dv">RM_NOWITNESS</code></a></dt> - <dd>Instruct <a class="Xr">witness(4)</a> to ignore this lock.</dd> - <dt id="RM_RECURSE"><a class="permalink" href="#RM_RECURSE"><code class="Dv">RM_RECURSE</code></a></dt> - <dd>Allow threads to recursively acquire shared locks for - <var class="Fa">rm</var>.</dd> - <dt id="RM_SLEEPABLE"><a class="permalink" href="#RM_SLEEPABLE"><code class="Dv">RM_SLEEPABLE</code></a></dt> - <dd>Create a sleepable read-mostly lock.</dd> - <dt id="RM_NEW"><a class="permalink" href="#RM_NEW"><code class="Dv">RM_NEW</code></a></dt> - <dd>If the kernel has been compiled with <code class="Cd">option - INVARIANTS</code>, <code class="Fn">rm_init_flags</code>() will assert - that the <var class="Fa">rm</var> has not been initialized multiple - times without intervening calls to - <a class="permalink" href="#rm_destroy"><code class="Fn" id="rm_destroy">rm_destroy</code></a>() - unless this option is specified.</dd> - <dt id="RM_DUPOK"><a class="permalink" href="#RM_DUPOK"><code class="Dv">RM_DUPOK</code></a></dt> - <dd><a class="Xr">witness(4)</a> should not log messages about duplicate - locks being acquired.</dd> - </dl> - </dd> - <dt><code class="Fn">rm_rlock</code>(<var class="Fa">struct rmlock *rm</var>, - <var class="Fa">struct rm_priotracker* tracker</var>)</dt> - <dd>Lock <var class="Fa">rm</var> as a reader using - <var class="Fa">tracker</var> to track read owners of a lock for priority - propagation. This data structure is only used internally by - <code class="Nm">rmlock</code> and must persist until - <code class="Fn">rm_runlock</code>() has been called. This data structure - can be allocated on the stack since readers cannot sleep. If any thread - holds this lock exclusively, the current thread blocks, and its priority - is propagated to the exclusive holder. If the lock was initialized with - the <code class="Dv">RM_RECURSE</code> option the - <code class="Fn">rm_rlock</code>() function can be called when the current - thread has already acquired reader access on - <var class="Fa">rm</var>.</dd> - <dt id="rm_try_rlock"><a class="permalink" href="#rm_try_rlock"><code class="Fn">rm_try_rlock</code></a>(<var class="Fa">struct - rmlock *rm</var>, <var class="Fa">struct rm_priotracker* tracker</var>)</dt> - <dd>Try to lock <var class="Fa">rm</var> as a reader. - <code class="Fn">rm_try_rlock</code>() will return 0 if the lock cannot be - acquired immediately; otherwise, the lock will be acquired and a non-zero - value will be returned. Note that <code class="Fn">rm_try_rlock</code>() - may fail even while the lock is not currently held by a writer. If the - lock was initialized with the <code class="Dv">RM_RECURSE</code> option, - <code class="Fn">rm_try_rlock</code>() will succeed if the current thread - has already acquired reader access.</dd> - <dt id="rm_wlock"><a class="permalink" href="#rm_wlock"><code class="Fn">rm_wlock</code></a>(<var class="Fa">struct - rmlock *rm</var>)</dt> - <dd>Lock <var class="Fa">rm</var> as a writer. If there are any shared owners - of the lock, the current thread blocks. The - <code class="Fn">rm_wlock</code>() function cannot be called - recursively.</dd> - <dt><code class="Fn">rm_runlock</code>(<var class="Fa">struct rmlock - *rm</var>, <var class="Fa">struct rm_priotracker* tracker</var>)</dt> - <dd>This function releases a shared lock previously acquired by - <code class="Fn">rm_rlock</code>(). The <var class="Fa">tracker</var> - argument must match the <var class="Fa">tracker</var> argument used for - acquiring the shared lock</dd> - <dt id="rm_wunlock"><a class="permalink" href="#rm_wunlock"><code class="Fn">rm_wunlock</code></a>(<var class="Fa">struct - rmlock *rm</var>)</dt> - <dd>This function releases an exclusive lock previously acquired by - <code class="Fn">rm_wlock</code>().</dd> - <dt><code class="Fn">rm_destroy</code>(<var class="Fa">struct rmlock - *rm</var>)</dt> - <dd>This functions destroys a lock previously initialized with - <code class="Fn">rm_init</code>(). The <var class="Fa">rm</var> lock must - be unlocked.</dd> - <dt id="rm_wowned"><a class="permalink" href="#rm_wowned"><code class="Fn">rm_wowned</code></a>(<var class="Fa">const - struct rmlock *rm</var>)</dt> - <dd>This function returns a non-zero value if the current thread owns an - exclusive lock on <var class="Fa">rm</var>.</dd> - <dt id="rm_sleep"><a class="permalink" href="#rm_sleep"><code class="Fn">rm_sleep</code></a>(<var class="Fa">void - *wchan</var>, <var class="Fa">struct rmlock *rm</var>, <var class="Fa">int - priority</var>, <var class="Fa">const char *wmesg</var>, <var class="Fa">int - timo</var>)</dt> - <dd>This function atomically releases <var class="Fa">rm</var> while waiting - for an event. The <var class="Fa">rm</var> lock must be exclusively - locked. For more details on the parameters to this function, see - <a class="Xr">sleep(9)</a>.</dd> - <dt id="rm_assert"><a class="permalink" href="#rm_assert"><code class="Fn">rm_assert</code></a>(<var class="Fa">struct - rmlock *rm</var>, <var class="Fa">int what</var>)</dt> - <dd>This function asserts that the <var class="Fa">rm</var> lock is in the - state specified by <var class="Fa">what</var>. If the assertions are not - true and the kernel is compiled with <code class="Cd">options - INVARIANTS</code> and <code class="Cd">options INVARIANT_SUPPORT</code>, - the kernel will panic. Currently the following base assertions are - supported: - <dl class="Bl-tag"> - <dt id="RA_LOCKED"><a class="permalink" href="#RA_LOCKED"><code class="Dv">RA_LOCKED</code></a></dt> - <dd>Assert that current thread holds either a shared or exclusive lock of - <var class="Fa">rm</var>.</dd> - <dt id="RA_RLOCKED"><a class="permalink" href="#RA_RLOCKED"><code class="Dv">RA_RLOCKED</code></a></dt> - <dd>Assert that current thread holds a shared lock of - <var class="Fa">rm</var>.</dd> - <dt id="RA_WLOCKED"><a class="permalink" href="#RA_WLOCKED"><code class="Dv">RA_WLOCKED</code></a></dt> - <dd>Assert that current thread holds an exclusive lock of - <var class="Fa">rm</var>.</dd> - <dt id="RA_UNLOCKED"><a class="permalink" href="#RA_UNLOCKED"><code class="Dv">RA_UNLOCKED</code></a></dt> - <dd>Assert that current thread holds neither a shared nor exclusive lock - of <var class="Fa">rm</var>.</dd> - </dl> - <p class="Pp">In addition, one of the following optional flags may be - specified with <code class="Dv">RA_LOCKED</code>, - <code class="Dv">RA_RLOCKED</code>, or - <code class="Dv">RA_WLOCKED</code>:</p> - <dl class="Bl-tag"> - <dt id="RA_RECURSED"><a class="permalink" href="#RA_RECURSED"><code class="Dv">RA_RECURSED</code></a></dt> - <dd>Assert that the current thread holds a recursive lock of - <var class="Fa">rm</var>.</dd> - <dt id="RA_NOTRECURSED"><a class="permalink" href="#RA_NOTRECURSED"><code class="Dv">RA_NOTRECURSED</code></a></dt> - <dd>Assert that the current thread does not hold a recursive lock of - <var class="Fa">rm</var>.</dd> - </dl> - </dd> -</dl> -<dl class="Bl-tag"> - <dt id="rms_init~2"><a class="permalink" href="#rms_init~2"><code class="Fn">rms_init</code></a>(<var class="Fa">struct - rmslock *rms</var>, <var class="Fa">const char *name</var>)</dt> - <dd>Initialize the sleepable read-mostly lock <var class="Fa">rms</var>. The - <var class="Fa">name</var> description is used as - <var class="Fa">wmesg</var> parameter to the <a class="Xr">msleep(9)</a> - routine. This function must be called before any other operations on the - lock.</dd> - <dt id="rms_rlock"><a class="permalink" href="#rms_rlock"><code class="Fn">rms_rlock</code></a>(<var class="Fa">struct - rmlock *rm</var>)</dt> - <dd>Lock <var class="Fa">rms</var> as a reader. If any thread holds this lock - exclusively, the current thread blocks.</dd> - <dt id="rms_wlock"><a class="permalink" href="#rms_wlock"><code class="Fn">rms_wlock</code></a>(<var class="Fa">struct - rmslock *rms</var>)</dt> - <dd>Lock <var class="Fa">rms</var> as a writer. If the lock is already taken, - the current thread blocks. The <code class="Fn">rms_wlock</code>() - function cannot be called recursively.</dd> - <dt id="rms_runlock"><a class="permalink" href="#rms_runlock"><code class="Fn">rms_runlock</code></a>(<var class="Fa">struct - rmslock *rms</var>)</dt> - <dd>This function releases a shared lock previously acquired by - <code class="Fn">rms_rlock</code>().</dd> - <dt id="rms_wunlock"><a class="permalink" href="#rms_wunlock"><code class="Fn">rms_wunlock</code></a>(<var class="Fa">struct - rmslock *rms</var>)</dt> - <dd>This function releases an exclusive lock previously acquired by - <code class="Fn">rms_wlock</code>().</dd> - <dt id="rms_destroy"><a class="permalink" href="#rms_destroy"><code class="Fn">rms_destroy</code></a>(<var class="Fa">struct - rmslock *rms</var>)</dt> - <dd>This functions destroys a lock previously initialized with - <code class="Fn">rms_init</code>(). The <var class="Fa">rms</var> lock - must be unlocked.</dd> -</dl> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">locking(9)</a>, <a class="Xr">mutex(9)</a>, - <a class="Xr">panic(9)</a>, <a class="Xr">rwlock(9)</a>, - <a class="Xr">sema(9)</a>, <a class="Xr">sleep(9)</a>, - <a class="Xr">sx(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">These functions appeared in <span class="Ux">FreeBSD - 7.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">rmlock</code> facility was written by - <span class="An">Stephan Uphoff</span>. This manual page was written by - <span class="An">Gleb Smirnoff</span> for rwlock and modified to reflect - rmlock by <span class="An">Stephan Uphoff</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">The <code class="Nm">rmlock</code> implementation is currently not - optimized for single processor systems.</p> -<p class="Pp"><code class="Fn">rm_try_rlock</code>() can fail transiently even - when there is no writer, while another reader updates the state on the local - CPU.</p> -<p class="Pp">The <code class="Nm">rmlock</code> implementation uses a single - per CPU list shared by all rmlocks in the system. If rmlocks become popular, - hashing to multiple per CPU queues may be needed to speed up the writer lock - process.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 12, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/rtentry.9 3.html b/static/freebsd/man9/rtentry.9 3.html deleted file mode 100644 index 587f2f69..00000000 --- a/static/freebsd/man9/rtentry.9 3.html +++ /dev/null @@ -1,206 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">RTENTRY(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">RTENTRY(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">rtentry</code> — - <span class="Nd">structure of an entry in the kernel routing - table</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/socket.h</a>></code> - <br/> - <code class="In">#include <<a class="In">net/route.h</a>></code></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The kernel provides a common mechanism by which all protocols can - store and retrieve entries from a central table of routes. Parts of this - mechanism are also used to interact with user-level processes by means of a - socket in the <a class="Xr">route(4)</a> pseudo-protocol family. The - <code class="In"><<a class="In">net/route.h</a>></code> header file - defines the structures and manifest constants used in this facility.</p> -<p class="Pp">The basic structure of a route is defined by - <var class="Vt">struct rtentry</var>, which includes the following - fields:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt id="rt_key"><var class="Vt">struct radix_node rt_nodes[2]</var>;</dt> - <dd>Glue used by the radix-tree routines. These members also include in their - substructure the key (i.e., destination address) and mask used when the - route was created. The - <a class="permalink" href="#rt_key"><code class="Fn">rt_key</code></a>(<var class="Fa">rt</var>) - and - <a class="permalink" href="#rt_mask"><code class="Fn" id="rt_mask">rt_mask</code></a>(<var class="Fa">rt</var>) - macros can be used to extract this information (in the form of a - <var class="Vt">struct sockaddr *</var>) given a <var class="Vt">struct - rtentry *</var>.</dd> - <dt><var class="Vt">struct sockaddr *rt_gateway</var>;</dt> - <dd>The “target” of the route, which can either represent a - destination in its own right (some protocols will put a link-layer address - here), or some intermediate stop on the way to that destination (if the - <code class="Dv">RTF_GATEWAY</code> flag is set).</dd> - <dt id="rtfree"><var class="Vt">int rt_flags</var>;</dt> - <dd>See below. If the <code class="Dv">RTF_UP</code> flag is not present, the - <a class="permalink" href="#rtfree"><code class="Fn">rtfree</code></a>() - function will delete the route from the radix tree when the last reference - drops.</dd> - <dt><var class="Vt">int rt_refcnt</var>;</dt> - <dd>Route entries are reference-counted; this field indicates the number of - external (to the radix tree) references.</dd> - <dt><var class="Vt">struct ifnet *rt_ifp</var>;</dt> - <dd style="width: auto;"> </dd> - <dt><var class="Vt">struct ifaddr *rt_ifa</var>;</dt> - <dd>These two fields represent the “answer”, as it were, to the - question posed by a route lookup; that is, they name the interface and - interface address to be used in sending a packet to the destination or set - of destinations which this route represents.</dd> - <dt><var class="Vt">u_long rt_mtu</var>;</dt> - <dd>See description of rmx_mtu below.</dd> - <dt><var class="Vt">u_long rt_weight</var>;</dt> - <dd>See description of rmx_weight below.</dd> - <dt><var class="Vt">u_long rt_expire</var>;</dt> - <dd>See description of rmx_expire below.</dd> - <dt><var class="Vt">counter64_t rt_pksent</var>;</dt> - <dd>See description of rmx_pksent below.</dd> - <dt><var class="Vt">struct rtentry *rt_gwroute</var>;</dt> - <dd>This member is a reference to a route whose destination is - <var class="Va">rt_gateway</var>. It is only used for - <code class="Dv">RTF_GATEWAY</code> routes.</dd> - <dt><var class="Vt">struct mtx rt_mtx</var>;</dt> - <dd>Mutex to lock this routing entry.</dd> -</dl> -</div> -<p class="Pp">The following flag bits are defined:</p> -<div class="Bd-indent"> -<dl class="Bl-tag Bl-compact"> - <dt id="RTF_UP"><a class="permalink" href="#RTF_UP"><code class="Dv">RTF_UP</code></a></dt> - <dd>The route is not deleted.</dd> - <dt id="RTF_GATEWAY"><a class="permalink" href="#RTF_GATEWAY"><code class="Dv">RTF_GATEWAY</code></a></dt> - <dd>The route points to an intermediate destination and not the ultimate - recipient; the <var class="Va">rt_gateway</var> and - <var class="Va">rt_gwroute</var> fields name that destination.</dd> - <dt id="RTF_HOST"><a class="permalink" href="#RTF_HOST"><code class="Dv">RTF_HOST</code></a></dt> - <dd>This is a host route.</dd> - <dt id="RTF_REJECT"><a class="permalink" href="#RTF_REJECT"><code class="Dv">RTF_REJECT</code></a></dt> - <dd>The destination is presently unreachable. This should result in an - <code class="Er">EHOSTUNREACH</code> error from output routines.</dd> - <dt id="RTF_DYNAMIC"><a class="permalink" href="#RTF_DYNAMIC"><code class="Dv">RTF_DYNAMIC</code></a></dt> - <dd>This route was created dynamically by - <a class="permalink" href="#rtredirect"><code class="Fn" id="rtredirect">rtredirect</code></a>().</dd> - <dt id="RTF_MODIFIED"><a class="permalink" href="#RTF_MODIFIED"><code class="Dv">RTF_MODIFIED</code></a></dt> - <dd>This route was modified by <code class="Fn">rtredirect</code>().</dd> - <dt id="RTF_DONE"><a class="permalink" href="#RTF_DONE"><code class="Dv">RTF_DONE</code></a></dt> - <dd>Used only in the <a class="Xr">route(4)</a> protocol, indicating that the - request was executed.</dd> - <dt id="RTF_XRESOLVE"><a class="permalink" href="#RTF_XRESOLVE"><code class="Dv">RTF_XRESOLVE</code></a></dt> - <dd>When this route is returned as a result of a lookup, send a report on the - <a class="Xr">route(4)</a> interface requesting that an external process - perform resolution for this route.</dd> - <dt id="RTF_STATIC"><a class="permalink" href="#RTF_STATIC"><code class="Dv">RTF_STATIC</code></a></dt> - <dd>Indicates that this route was manually added by means of the - <a class="Xr">route(8)</a> command.</dd> - <dt id="RTF_BLACKHOLE"><a class="permalink" href="#RTF_BLACKHOLE"><code class="Dv">RTF_BLACKHOLE</code></a></dt> - <dd>Requests that output sent via this route be discarded.</dd> - <dt id="RTF_PROTO1"><a class="permalink" href="#RTF_PROTO1"><code class="Dv">RTF_PROTO1</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="RTF_PROTO2"><a class="permalink" href="#RTF_PROTO2"><code class="Dv">RTF_PROTO2</code></a></dt> - <dd style="width: auto;"> </dd> - <dt id="RTF_PROTO3"><a class="permalink" href="#RTF_PROTO3"><code class="Dv">RTF_PROTO3</code></a></dt> - <dd>Protocol-specific.</dd> - <dt id="RTF_PINNED"><a class="permalink" href="#RTF_PINNED"><code class="Dv">RTF_PINNED</code></a></dt> - <dd>Indicates that this route is immutable to a routing protocol.</dd> - <dt id="RTF_LOCAL"><a class="permalink" href="#RTF_LOCAL"><code class="Dv">RTF_LOCAL</code></a></dt> - <dd>Indicates that the destination of this route is an address configured as - belonging to this system.</dd> - <dt id="RTF_BROADCAST"><a class="permalink" href="#RTF_BROADCAST"><code class="Dv">RTF_BROADCAST</code></a></dt> - <dd>Indicates that the destination is a broadcast address.</dd> - <dt id="RTF_MULTICAST"><a class="permalink" href="#RTF_MULTICAST"><code class="Dv">RTF_MULTICAST</code></a></dt> - <dd>Indicates that the destination is a multicast address.</dd> -</dl> -</div> -<p class="Pp">Several metrics are supplied in <var class="Vt">struct - rt_metrics</var> passed with routing control messages via - <a class="Xr">route(4)</a> API. Currently only - <var class="Vt">rmx_mtu</var>, <var class="Vt">rmx_expire</var>, and - <var class="Vt">rmx_pksent</var> metrics are supplied. All others are - ignored.</p> -<p class="Pp">The following metrics are defined by <var class="Vt">struct - rt_metrics</var>:</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt><var class="Vt">u_long rmx_locks</var>;</dt> - <dd>Flag bits indicating which metrics the kernel is not permitted to - dynamically modify.</dd> - <dt><var class="Vt">u_long rmx_mtu</var>;</dt> - <dd>MTU for this path.</dd> - <dt><var class="Vt">u_long rmx_hopcount</var>;</dt> - <dd>Number of intermediate systems on the path to this destination.</dd> - <dt><var class="Vt">u_long rmx_expire</var>;</dt> - <dd>The time (a la <a class="Xr">time(3)</a>) at which this route should - expire, or zero if it should never expire. It is the responsibility of - individual protocol suites to ensure that routes are actually deleted once - they expire.</dd> - <dt id="from"><var class="Vt">u_long rmx_recvpipe</var>;</dt> - <dd>Nominally, the bandwidth-delay product for the path - <a class="permalink" href="#from"><i class="Em">from</i></a> the - destination - <a class="permalink" href="#to"><i class="Em" id="to">to</i></a> this - system. In practice, this value is used to set the size of the receive - buffer (and thus the window in sliding-window protocols like TCP).</dd> - <dt><var class="Vt">u_long rmx_sendpipe</var>;</dt> - <dd>As before, but in the opposite direction.</dd> - <dt><var class="Vt">u_long rmx_ssthresh</var>;</dt> - <dd>The slow-start threshold used in TCP congestion-avoidance.</dd> - <dt><var class="Vt">u_long rmx_rtt</var>;</dt> - <dd>The round-trip time to this destination, in units of - <code class="Dv">RMX_RTTUNIT</code> per second.</dd> - <dt><var class="Vt">u_long rmx_rttvar</var>;</dt> - <dd>The average deviation of the round-trip time to this destination, in units - of <code class="Dv">RMX_RTTUNIT</code> per second.</dd> - <dt><var class="Vt">u_long rmx_pksent</var>;</dt> - <dd>A count of packets successfully sent via this route.</dd> - <dt><var class="Vt">u_long rmx_filler[4]</var>;</dt> - <dd>Empty space available for protocol-specific information.</dd> -</dl> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">route(4)</a>, <a class="Xr">route(8)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <var class="Vt">rtentry</var> structure first appeared in - <span class="Ux">4.2BSD</span>. The radix-tree representation of the routing - table and the <var class="Vt">rt_metrics</var> structure first appeared in - <span class="Ux">4.3BSD-Reno</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Garrett - Wollman</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">There are a number of historical relics remaining in this - interface. The <var class="Va">rt_gateway</var> and - <var class="Va">rmx_filler</var> fields could be named better.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 5, 2014</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/runqueue.9 3.html b/static/freebsd/man9/runqueue.9 3.html deleted file mode 100644 index 0807f214..00000000 --- a/static/freebsd/man9/runqueue.9 3.html +++ /dev/null @@ -1,107 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">RUNQUEUE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">RUNQUEUE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">choosethread</code>, - <code class="Nm">procrunnable</code>, <code class="Nm">remrunqueue</code>, - <code class="Nm">setrunqueue</code> — <span class="Nd">manage the - queue of runnable processes</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/proc.h</a>></code></p> -<p class="Pp"><var class="Vt">extern struct rq itqueues[]</var>; - <br/> - <var class="Vt">extern struct rq rtqueues[]</var>; - <br/> - <var class="Vt">extern struct rq queues[]</var>; - <br/> - <var class="Vt">extern struct rq idqueues[]</var>;</p> -<p class="Pp"><var class="Ft">struct thread *</var> - <br/> - <code class="Fn">choosethread</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">procrunnable</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">remrunqueue</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">setrunqueue</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The run queue consists of four priority queues: - <var class="Va">itqueues</var> for interrupt threads, - <var class="Va">rtqueues</var> for realtime priority processes, - <var class="Va">queues</var> for time sharing processes, and - <var class="Va">idqueues</var> for idle priority processes. Each priority - queue consists of an array of <code class="Dv">NQS</code> queue header - structures. Each queue header identifies a list of runnable processes of - equal priority. Each queue also has a single word that contains a bit mask - identifying non-empty queues to assist in selecting a process quickly. These - are named <var class="Va">itqueuebits</var>, - <var class="Va">rtqueuebits</var>, <var class="Va">queuebits</var>, and - <var class="Va">idqueuebits</var>. The run queues are protected by the - <var class="Va">sched_lock</var> mutex.</p> -<p class="Pp" id="procrunnable"><a class="permalink" href="#procrunnable"><code class="Fn">procrunnable</code></a>() - returns zero if there are no runnable processes other than the idle process. - If there is at least one runnable process other than the idle process, it - will return a non-zero value. Note that the <var class="Va">sched_lock</var> - mutex does - <a class="permalink" href="#not"><i class="Em" id="not">not</i></a> need to - be held when this function is called. There is a small race window where one - CPU may place a process on the run queue when there are currently no other - runnable processes while another CPU is calling this function. In that case - the second CPU will simply travel through the idle loop one additional time - before noticing that there is a runnable process. This works because idle - CPUs are not halted in SMP systems. If idle CPUs are halted in SMP systems, - then this race condition might have more serious repercussions in the losing - case, and <code class="Fn">procrunnable</code>() may have to require that - the <var class="Va">sched_lock</var> mutex be acquired.</p> -<p class="Pp" id="choosethread"><a class="permalink" href="#choosethread"><code class="Fn">choosethread</code></a>() - returns the highest priority runnable thread. If there are no runnable - threads, then the idle thread is returned. This function is called by - <a class="permalink" href="#cpu_switch"><code class="Fn" id="cpu_switch">cpu_switch</code></a>() - and - <a class="permalink" href="#cpu_throw"><code class="Fn" id="cpu_throw">cpu_throw</code></a>() - to determine which thread to switch to. - <code class="Fn">choosethread</code>() must be called with the - <var class="Va">sched_lock</var> mutex held.</p> -<p class="Pp" id="setrunqueue"><a class="permalink" href="#setrunqueue"><code class="Fn">setrunqueue</code></a>() - adds the thread <var class="Fa">td</var> to the tail of the appropriate - queue in the proper priority queue. The thread must be runnable, i.e. - <var class="Va">p_stat</var> must be set to <code class="Dv">SRUN</code>. - This function must be called with the <var class="Va">sched_lock</var> mutex - held.</p> -<p class="Pp" id="remrunqueue"><a class="permalink" href="#remrunqueue"><code class="Fn">remrunqueue</code></a>() - removes thread <var class="Fa">td</var> from its run queue. If - <var class="Fa">td</var> is not on a run queue, then the kernel will - <a class="Xr">panic(9)</a>. This function must be called with the - <var class="Va">sched_lock</var> mutex held.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">cpu_switch(9)</a>, <a class="Xr">scheduler(9)</a>, - <a class="Xr">sleepqueue(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 15, 2010</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/rwlock.9 4.html b/static/freebsd/man9/rwlock.9 4.html deleted file mode 100644 index 15ec3908..00000000 --- a/static/freebsd/man9/rwlock.9 4.html +++ /dev/null @@ -1,324 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">RWLOCK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">RWLOCK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">rwlock</code>, <code class="Nm">rw_init</code>, - <code class="Nm">rw_init_flags</code>, <code class="Nm">rw_destroy</code>, - <code class="Nm">rw_rlock</code>, <code class="Nm">rw_wlock</code>, - <code class="Nm">rw_runlock</code>, <code class="Nm">rw_wunlock</code>, - <code class="Nm">rw_unlock</code>, <code class="Nm">rw_try_rlock</code>, - <code class="Nm">rw_try_upgrade</code>, - <code class="Nm">rw_try_wlock</code>, <code class="Nm">rw_downgrade</code>, - <code class="Nm">rw_sleep</code>, <code class="Nm">rw_initialized</code>, - <code class="Nm">rw_wowned</code>, <code class="Nm">rw_assert</code>, - <code class="Nm">RW_SYSINIT</code>, <code class="Nm">RW_SYSINIT_FLAGS</code> - — <span class="Nd">kernel reader/writer lock</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/lock.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/rwlock.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rw_init</code>(<var class="Fa" style="white-space: nowrap;">struct - rwlock *rw</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rw_init_flags</code>(<var class="Fa" style="white-space: nowrap;">struct - rwlock *rw</var>, <var class="Fa" style="white-space: nowrap;">const char - *name</var>, <var class="Fa" style="white-space: nowrap;">int - opts</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rw_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct - rwlock *rw</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rw_rlock</code>(<var class="Fa" style="white-space: nowrap;">struct - rwlock *rw</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rw_wlock</code>(<var class="Fa" style="white-space: nowrap;">struct - rwlock *rw</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rw_try_rlock</code>(<var class="Fa" style="white-space: nowrap;">struct - rwlock *rw</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rw_try_wlock</code>(<var class="Fa" style="white-space: nowrap;">struct - rwlock *rw</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rw_runlock</code>(<var class="Fa" style="white-space: nowrap;">struct - rwlock *rw</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rw_wunlock</code>(<var class="Fa" style="white-space: nowrap;">struct - rwlock *rw</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rw_unlock</code>(<var class="Fa" style="white-space: nowrap;">struct - rwlock *rw</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rw_try_upgrade</code>(<var class="Fa" style="white-space: nowrap;">struct - rwlock *rw</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">rw_downgrade</code>(<var class="Fa" style="white-space: nowrap;">struct - rwlock *rw</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rw_sleep</code>(<var class="Fa" style="white-space: nowrap;">void - *chan</var>, <var class="Fa" style="white-space: nowrap;">struct rwlock - *rw</var>, <var class="Fa" style="white-space: nowrap;">int priority</var>, - <var class="Fa" style="white-space: nowrap;">const char *wmesg</var>, - <var class="Fa" style="white-space: nowrap;">int timo</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rw_initialized</code>(<var class="Fa" style="white-space: nowrap;">const - struct rwlock *rw</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">rw_wowned</code>(<var class="Fa" style="white-space: nowrap;">const - struct rwlock *rw</var>);</p> -<p class="Pp"> - <br/> - <code class="Cd">options INVARIANTS</code> - <br/> - <code class="Cd">options INVARIANT_SUPPORT</code> - <br/> - <var class="Ft">void</var> - <br/> - <code class="Fn">rw_assert</code>(<var class="Fa" style="white-space: nowrap;">const - struct rwlock *rw</var>, <var class="Fa" style="white-space: nowrap;">int - what</var>);</p> -<p class="Pp"><code class="In">#include - <<a class="In">sys/kernel.h</a>></code></p> -<p class="Pp"><code class="Fn">RW_SYSINIT</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">struct rwlock *rw</var>, - <var class="Fa" style="white-space: nowrap;">const char *desc</var>);</p> -<p class="Pp"><code class="Fn">RW_SYSINIT_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">struct rwlock *rw</var>, - <var class="Fa" style="white-space: nowrap;">const char *desc</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Reader/writer locks allow shared access to protected data by - multiple threads, or exclusive access by a single thread. The threads with - shared access are known as - <a class="permalink" href="#readers"><i class="Em" id="readers">readers</i></a> - since they only read the protected data. A thread with exclusive access is - known as a - <a class="permalink" href="#writer"><i class="Em" id="writer">writer</i></a> - since it can modify protected data.</p> -<p class="Pp">Although reader/writer locks look very similar to - <a class="Xr">sx(9)</a> locks, their usage pattern is different. - Reader/writer locks can be treated as mutexes (see - <a class="Xr">mutex(9)</a>) with shared/exclusive semantics. Unlike - <a class="Xr">sx(9)</a>, an <code class="Nm">rwlock</code> can be locked - while holding a non-spin mutex, and an <code class="Nm">rwlock</code> cannot - be held while sleeping. The <code class="Nm">rwlock</code> locks have - priority propagation like mutexes, but priority can be propagated only to - writers. This limitation comes from the fact that readers are anonymous. - Another important property is that readers can always recurse, and exclusive - locks can be made recursive selectively.</p> -<section class="Ss"> -<h2 class="Ss" id="Macros_and_Functions"><a class="permalink" href="#Macros_and_Functions">Macros - and Functions</a></h2> -<dl class="Bl-tag"> - <dt id="rw_init"><a class="permalink" href="#rw_init"><code class="Fn">rw_init</code></a>(<var class="Fa">struct - rwlock *rw</var>, <var class="Fa">const char *name</var>)</dt> - <dd>Initialize structure located at <var class="Fa">rw</var> as reader/writer - lock, described by name <var class="Fa">name</var>. The description is - used solely for debugging purposes. This function must be called before - any other operations on the lock.</dd> - <dt id="rw_init_flags"><a class="permalink" href="#rw_init_flags"><code class="Fn">rw_init_flags</code></a>(<var class="Fa">struct - rwlock *rw</var>, <var class="Fa">const char *name</var>, - <var class="Fa">int opts</var>)</dt> - <dd>Initialize the rw lock just like the <code class="Fn">rw_init</code>() - function, but specifying a set of optional flags to alter the behaviour of - <var class="Fa">rw</var>, through the <var class="Fa">opts</var> argument. - It contains one or more of the following flags: - <dl class="Bl-tag"> - <dt id="RW_DUPOK"><a class="permalink" href="#RW_DUPOK"><code class="Dv">RW_DUPOK</code></a></dt> - <dd>Witness should not log messages about duplicate locks being - acquired.</dd> - <dt id="RW_NOPROFILE"><a class="permalink" href="#RW_NOPROFILE"><code class="Dv">RW_NOPROFILE</code></a></dt> - <dd>Do not profile this lock.</dd> - <dt id="RW_NOWITNESS"><a class="permalink" href="#RW_NOWITNESS"><code class="Dv">RW_NOWITNESS</code></a></dt> - <dd>Instruct <a class="Xr">witness(4)</a> to ignore this lock.</dd> - <dt id="RW_QUIET"><a class="permalink" href="#RW_QUIET"><code class="Dv">RW_QUIET</code></a></dt> - <dd>Do not log any operations for this lock via - <a class="Xr">ktr(4)</a>.</dd> - <dt id="RW_RECURSE"><a class="permalink" href="#RW_RECURSE"><code class="Dv">RW_RECURSE</code></a></dt> - <dd>Allow threads to recursively acquire exclusive locks for - <var class="Fa">rw</var>.</dd> - <dt id="RW_NEW"><a class="permalink" href="#RW_NEW"><code class="Dv">RW_NEW</code></a></dt> - <dd>If the kernel has been compiled with <code class="Cd">option - INVARIANTS</code>, <code class="Fn">rw_init_flags</code>() will assert - that the <var class="Fa">rw</var> has not been initialized multiple - times without intervening calls to - <a class="permalink" href="#rw_destroy"><code class="Fn" id="rw_destroy">rw_destroy</code></a>() - unless this option is specified.</dd> - </dl> - </dd> - <dt id="rw_rlock"><a class="permalink" href="#rw_rlock"><code class="Fn">rw_rlock</code></a>(<var class="Fa">struct - rwlock *rw</var>)</dt> - <dd>Lock <var class="Fa">rw</var> as a reader. If any thread holds this lock - exclusively, the current thread blocks, and its priority is propagated to - the exclusive holder. The <code class="Fn">rw_rlock</code>() function can - be called when the thread has already acquired reader access on - <var class="Fa">rw</var>. This is called “recursing on a - lock”.</dd> - <dt id="rw_wlock"><a class="permalink" href="#rw_wlock"><code class="Fn">rw_wlock</code></a>(<var class="Fa">struct - rwlock *rw</var>)</dt> - <dd>Lock <var class="Fa">rw</var> as a writer. If there are any shared owners - of the lock, the current thread blocks. The - <code class="Fn">rw_wlock</code>() function can be called recursively only - if <var class="Fa">rw</var> has been initialized with the - <code class="Dv">RW_RECURSE</code> option enabled.</dd> - <dt id="rw_try_rlock"><a class="permalink" href="#rw_try_rlock"><code class="Fn">rw_try_rlock</code></a>(<var class="Fa">struct - rwlock *rw</var>)</dt> - <dd>Try to lock <var class="Fa">rw</var> as a reader. This function will - return true if the operation succeeds, otherwise 0 will be returned.</dd> - <dt id="rw_try_wlock"><a class="permalink" href="#rw_try_wlock"><code class="Fn">rw_try_wlock</code></a>(<var class="Fa">struct - rwlock *rw</var>)</dt> - <dd>Try to lock <var class="Fa">rw</var> as a writer. This function will - return true if the operation succeeds, otherwise 0 will be returned.</dd> - <dt id="rw_runlock"><a class="permalink" href="#rw_runlock"><code class="Fn">rw_runlock</code></a>(<var class="Fa">struct - rwlock *rw</var>)</dt> - <dd>This function releases a shared lock previously acquired by - <code class="Fn">rw_rlock</code>().</dd> - <dt id="rw_wunlock"><a class="permalink" href="#rw_wunlock"><code class="Fn">rw_wunlock</code></a>(<var class="Fa">struct - rwlock *rw</var>)</dt> - <dd>This function releases an exclusive lock previously acquired by - <code class="Fn">rw_wlock</code>().</dd> - <dt id="rw_unlock"><a class="permalink" href="#rw_unlock"><code class="Fn">rw_unlock</code></a>(<var class="Fa">struct - rwlock *rw</var>)</dt> - <dd>This function releases a shared lock previously acquired by - <code class="Fn">rw_rlock</code>() or an exclusive lock previously - acquired by <code class="Fn">rw_wlock</code>().</dd> - <dt id="rw_try_upgrade"><a class="permalink" href="#rw_try_upgrade"><code class="Fn">rw_try_upgrade</code></a>(<var class="Fa">struct - rwlock *rw</var>)</dt> - <dd>Attempt to upgrade a single shared lock to an exclusive lock. The current - thread must hold a shared lock of <var class="Fa">rw</var>. This will only - succeed if the current thread holds the only shared lock on - <var class="Fa">rw</var>, and it only holds a single shared lock. If the - attempt succeeds <code class="Fn">rw_try_upgrade</code>() will return a - non-zero value, and the current thread will hold an exclusive lock. If the - attempt fails <code class="Fn">rw_try_upgrade</code>() will return zero, - and the current thread will still hold a shared lock.</dd> - <dt id="rw_downgrade"><a class="permalink" href="#rw_downgrade"><code class="Fn">rw_downgrade</code></a>(<var class="Fa">struct - rwlock *rw</var>)</dt> - <dd>Convert an exclusive lock into a single shared lock. The current thread - must hold an exclusive lock of <var class="Fa">rw</var>.</dd> - <dt id="rw_sleep"><a class="permalink" href="#rw_sleep"><code class="Fn">rw_sleep</code></a>(<var class="Fa">void - *chan</var>, <var class="Fa">struct rwlock *rw</var>, <var class="Fa">int - priority</var>, <var class="Fa">const char *wmesg</var>, <var class="Fa">int - timo</var>)</dt> - <dd>Atomically release <var class="Fa">rw</var> while waiting for an event. - For more details on the parameters to this function, see - <a class="Xr">sleep(9)</a>.</dd> - <dt id="rw_initialized"><a class="permalink" href="#rw_initialized"><code class="Fn">rw_initialized</code></a>(<var class="Fa">const - struct rwlock *rw</var>)</dt> - <dd>This function returns non-zero if <var class="Fa">rw</var> has been - initialized, and zero otherwise.</dd> - <dt><code class="Fn">rw_destroy</code>(<var class="Fa">struct rwlock - *rw</var>)</dt> - <dd>This functions destroys a lock previously initialized with - <code class="Fn">rw_init</code>(). The <var class="Fa">rw</var> lock must - be unlocked.</dd> - <dt id="rw_wowned"><a class="permalink" href="#rw_wowned"><code class="Fn">rw_wowned</code></a>(<var class="Fa">const - struct rwlock *rw</var>)</dt> - <dd>This function returns a non-zero value if the current thread owns an - exclusive lock on <var class="Fa">rw</var>.</dd> - <dt id="rw_assert"><a class="permalink" href="#rw_assert"><code class="Fn">rw_assert</code></a>(<var class="Fa">const - struct rwlock *rw</var>, <var class="Fa">int what</var>)</dt> - <dd>This function allows assertions specified in <var class="Fa">what</var> to - be made about <var class="Fa">rw</var>. If the assertions are not true and - the kernel is compiled with <code class="Cd">options INVARIANTS</code> and - <code class="Cd">options INVARIANT_SUPPORT</code>, the kernel will panic. - Currently the following base assertions are supported: - <dl class="Bl-tag"> - <dt id="RA_LOCKED"><a class="permalink" href="#RA_LOCKED"><code class="Dv">RA_LOCKED</code></a></dt> - <dd>Assert that current thread holds either a shared or exclusive lock of - <var class="Fa">rw</var>.</dd> - <dt id="RA_RLOCKED"><a class="permalink" href="#RA_RLOCKED"><code class="Dv">RA_RLOCKED</code></a></dt> - <dd>Assert that current thread holds a shared lock of - <var class="Fa">rw</var>.</dd> - <dt id="RA_WLOCKED"><a class="permalink" href="#RA_WLOCKED"><code class="Dv">RA_WLOCKED</code></a></dt> - <dd>Assert that current thread holds an exclusive lock of - <var class="Fa">rw</var>.</dd> - <dt id="RA_UNLOCKED"><a class="permalink" href="#RA_UNLOCKED"><code class="Dv">RA_UNLOCKED</code></a></dt> - <dd>Assert that current thread holds neither a shared nor exclusive lock - of <var class="Fa">rw</var>.</dd> - </dl> - <p class="Pp">In addition, one of the following optional flags may be - specified with <code class="Dv">RA_LOCKED</code>, - <code class="Dv">RA_RLOCKED</code>, or - <code class="Dv">RA_WLOCKED</code>:</p> - <dl class="Bl-tag"> - <dt id="RA_RECURSED"><a class="permalink" href="#RA_RECURSED"><code class="Dv">RA_RECURSED</code></a></dt> - <dd>Assert that the current thread holds a recursive lock of - <var class="Fa">rw</var>.</dd> - <dt id="RA_NOTRECURSED"><a class="permalink" href="#RA_NOTRECURSED"><code class="Dv">RA_NOTRECURSED</code></a></dt> - <dd>Assert that the current thread does not hold a recursive lock of - <var class="Fa">rw</var>.</dd> - </dl> - </dd> -</dl> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">locking(9)</a>, <a class="Xr">mutex(9)</a>, - <a class="Xr">panic(9)</a>, <a class="Xr">sema(9)</a>, - <a class="Xr">sx(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">These functions appeared in <span class="Ux">FreeBSD - 7.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">rwlock</code> facility was written by - <span class="An">John Baldwin</span>. This manual page was written by - <span class="An">Gleb Smirnoff</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">A kernel without <code class="Dv">WITNESS</code> cannot assert - whether the current thread does or does not hold a read lock. - <code class="Dv">RA_LOCKED</code> and <code class="Dv">RA_RLOCKED</code> can - only assert that - <a class="permalink" href="#any"><i class="Em" id="any">any</i></a> thread - holds a read lock. They cannot ensure that the current thread holds a read - lock. Further, <code class="Dv">RA_UNLOCKED</code> can only assert that the - current thread does not hold a write lock.</p> -<p class="Pp">Reader/writer is a bit of an awkward name. An - <code class="Nm">rwlock</code> can also be called a “Robert - Watson” lock if desired.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 11, 2017</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/sbuf.9 4.html b/static/freebsd/man9/sbuf.9 4.html deleted file mode 100644 index 320c464f..00000000 --- a/static/freebsd/man9/sbuf.9 4.html +++ /dev/null @@ -1,525 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SBUF(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SBUF(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">sbuf</code>, <code class="Nm">sbuf_new</code>, - <code class="Nm">sbuf_new_auto</code>, - <code class="Nm">sbuf_new_for_sysctl</code>, - <code class="Nm">sbuf_clear</code>, <code class="Nm">sbuf_get_flags</code>, - <code class="Nm">sbuf_set_flags</code>, - <code class="Nm">sbuf_clear_flags</code>, - <code class="Nm">sbuf_setpos</code>, <code class="Nm">sbuf_bcat</code>, - <code class="Nm">sbuf_bcopyin</code>, <code class="Nm">sbuf_bcpy</code>, - <code class="Nm">sbuf_cat</code>, <code class="Nm">sbuf_copyin</code>, - <code class="Nm">sbuf_cpy</code>, <code class="Nm">sbuf_nl_terminate</code>, - <code class="Nm">sbuf_printf</code>, <code class="Nm">sbuf_vprintf</code>, - <code class="Nm">sbuf_putc</code>, <code class="Nm">sbuf_set_drain</code>, - <code class="Nm">sbuf_trim</code>, <code class="Nm">sbuf_error</code>, - <code class="Nm">sbuf_finish</code>, <code class="Nm">sbuf_data</code>, - <code class="Nm">sbuf_len</code>, <code class="Nm">sbuf_done</code>, - <code class="Nm">sbuf_delete</code>, - <code class="Nm">sbuf_start_section</code>, - <code class="Nm">sbuf_end_section</code>, - <code class="Nm">sbuf_hexdump</code>, - <code class="Nm">sbuf_printf_drain</code>, - <code class="Nm">sbuf_putbuf</code> — <span class="Nd">safe string - composition</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LIBRARY"><a class="permalink" href="#LIBRARY">LIBRARY</a></h1> -<p class="Pp"><span class="Lb">Safe String Composition Library (libsbuf, - -lsbuf)</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/sbuf.h</a>></code></p> -<p class="Pp"><var class="Ft">typedef int</var> - <br/> - <code class="Fn">(sbuf_drain_func)</code>(<var class="Fa">void *arg</var>, - <var class="Fa">const char *data</var>, <var class="Fa">int len</var>);</p> -<p class="Pp"> - <br/> - <var class="Ft">struct sbuf *</var> - <br/> - <code class="Fn">sbuf_new</code>(<var class="Fa">struct sbuf *s</var>, - <var class="Fa">char *buf</var>, <var class="Fa">int length</var>, - <var class="Fa">int flags</var>);</p> -<p class="Pp"><var class="Ft">struct sbuf *</var> - <br/> - <code class="Fn">sbuf_new_auto</code>(<var class="Fa">void</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sbuf_clear</code>(<var class="Fa">struct sbuf *s</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sbuf_get_flags</code>(<var class="Fa">struct sbuf - *s</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sbuf_set_flags</code>(<var class="Fa">struct sbuf *s</var>, - <var class="Fa">int flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sbuf_clear_flags</code>(<var class="Fa">struct sbuf *s</var>, - <var class="Fa">int flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sbuf_setpos</code>(<var class="Fa">struct sbuf *s</var>, - <var class="Fa">int pos</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sbuf_bcat</code>(<var class="Fa">struct sbuf *s</var>, - <var class="Fa">const void *buf</var>, <var class="Fa">size_t - len</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sbuf_bcpy</code>(<var class="Fa">struct sbuf *s</var>, - <var class="Fa">const void *buf</var>, <var class="Fa">size_t - len</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sbuf_cat</code>(<var class="Fa">struct sbuf *s</var>, - <var class="Fa">const char *str</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sbuf_cpy</code>(<var class="Fa">struct sbuf *s</var>, - <var class="Fa">const char *str</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sbuf_nl_terminate</code>(<var class="Fa" style="white-space: nowrap;">struct - sbuf *</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sbuf_printf</code>(<var class="Fa">struct sbuf *s</var>, - <var class="Fa">const char *fmt</var>, <var class="Fa">...</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sbuf_vprintf</code>(<var class="Fa">struct sbuf *s</var>, - <var class="Fa">const char *fmt</var>, <var class="Fa">va_list - ap</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sbuf_putc</code>(<var class="Fa">struct sbuf *s</var>, - <var class="Fa">int c</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sbuf_set_drain</code>(<var class="Fa">struct sbuf *s</var>, - <var class="Fa">sbuf_drain_func *func</var>, <var class="Fa">void - *arg</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sbuf_trim</code>(<var class="Fa">struct sbuf *s</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sbuf_error</code>(<var class="Fa">struct sbuf *s</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sbuf_finish</code>(<var class="Fa">struct sbuf *s</var>);</p> -<p class="Pp"><var class="Ft">char *</var> - <br/> - <code class="Fn">sbuf_data</code>(<var class="Fa">struct sbuf *s</var>);</p> -<p class="Pp"><var class="Ft">ssize_t</var> - <br/> - <code class="Fn">sbuf_len</code>(<var class="Fa">struct sbuf *s</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sbuf_done</code>(<var class="Fa">struct sbuf *s</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sbuf_delete</code>(<var class="Fa">struct sbuf *s</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sbuf_start_section</code>(<var class="Fa">struct sbuf - *s</var>, <var class="Fa">ssize_t *old_lenp</var>);</p> -<p class="Pp"><var class="Ft">ssize_t</var> - <br/> - <code class="Fn">sbuf_end_section</code>(<var class="Fa">struct sbuf *s</var>, - <var class="Fa">ssize_t old_len</var>, <var class="Fa">size_t pad</var>, - <var class="Fa">int c</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sbuf_hexdump</code>(<var class="Fa">struct sbuf *sb</var>, - <var class="Fa">void *ptr</var>, <var class="Fa">int length</var>, - <var class="Fa">const char *hdr</var>, <var class="Fa">int flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sbuf_printf_drain</code>(<var class="Fa">void *arg</var>, - <var class="Fa">const char *data</var>, <var class="Fa">int len</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sbuf_putbuf</code>(<var class="Fa">struct sbuf *s</var>);</p> -<p class="Pp"><code class="Fd">#ifdef _KERNEL</code></p> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/sbuf.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sbuf_bcopyin</code>(<var class="Fa">struct sbuf *s</var>, - <var class="Fa">const void *uaddr</var>, <var class="Fa">size_t - len</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sbuf_copyin</code>(<var class="Fa">struct sbuf *s</var>, - <var class="Fa">const void *uaddr</var>, <var class="Fa">size_t - len</var>);</p> -<p class="Pp"><code class="In">#include - <<a class="In">sys/sysctl.h</a>></code></p> -<p class="Pp"><var class="Ft">struct sbuf *</var> - <br/> - <code class="Fn">sbuf_new_for_sysctl</code>(<var class="Fa">struct sbuf - *s</var>, <var class="Fa">char *buf</var>, <var class="Fa">int length</var>, - <var class="Fa">struct sysctl_req *req</var>);</p> -<p class="Pp"><code class="Fd">#endif /* _KERNEL */</code></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">sbuf</code> family of functions allows one to - safely allocate, compose and release strings in kernel or user space.</p> -<p class="Pp">Instead of arrays of characters, these functions operate on - structures called <var class="Fa">sbufs</var>, defined in - <code class="In"><<a class="In">sys/sbuf.h</a>></code>.</p> -<p class="Pp">Any errors encountered during the allocation or composition of the - string will be latched in the data structure, making a single error test at - the end of the composition sufficient to determine success or failure of the - entire process.</p> -<p class="Pp" id="sbuf_new">The - <a class="permalink" href="#sbuf_new"><code class="Fn">sbuf_new</code></a>() - function initializes the <var class="Fa">sbuf</var> pointed to by its first - argument. If that pointer is <code class="Dv">NULL</code>, - <code class="Fn">sbuf_new</code>() allocates a <var class="Vt">struct - sbuf</var> using <a class="Xr">malloc(9)</a>. The <var class="Fa">buf</var> - argument is a pointer to a buffer in which to store the actual string; if it - is <code class="Dv">NULL</code>, <code class="Fn">sbuf_new</code>() will - allocate one using <a class="Xr">malloc(9)</a>. The - <var class="Fa">length</var> is the initial size of the storage buffer. The - fourth argument, <var class="Fa">flags</var>, may be comprised of the - following flags:</p> -<dl class="Bl-tag"> - <dt id="SBUF_FIXEDLEN"><a class="permalink" href="#SBUF_FIXEDLEN"><code class="Dv">SBUF_FIXEDLEN</code></a></dt> - <dd>The storage buffer is fixed at its initial size. Attempting to extend the - sbuf beyond this size results in an overflow condition.</dd> - <dt id="SBUF_AUTOEXTEND"><a class="permalink" href="#SBUF_AUTOEXTEND"><code class="Dv">SBUF_AUTOEXTEND</code></a></dt> - <dd>This indicates that the storage buffer may be extended as necessary, so - long as resources allow, to hold additional data.</dd> - <dt id="SBUF_INCLUDENUL"><a class="permalink" href="#SBUF_INCLUDENUL"><code class="Dv">SBUF_INCLUDENUL</code></a></dt> - <dd>This causes the final nulterm byte to be counted in the length of the - data.</dd> - <dt id="SBUF_DRAINTOEOR"><a class="permalink" href="#SBUF_DRAINTOEOR"><code class="Dv">SBUF_DRAINTOEOR</code></a></dt> - <dd>Treat top-level sections started with - <code class="Fn">sbuf_start_section</code>() as a record boundary marker - that will be used during drain operations to avoid records being split. If - a record grows sufficiently large such that it fills the - <var class="Fa">sbuf</var> and therefore cannot be drained without being - split, an error of <code class="Er">EDEADLK</code> is set.</dd> - <dt id="SBUF_NOWAIT"><a class="permalink" href="#SBUF_NOWAIT"><code class="Dv">SBUF_NOWAIT</code></a></dt> - <dd>Indicates that attempts to extend the storage buffer should fail in low - memory conditions, like <a class="Xr">malloc(9)</a> - <code class="Dv">M_NOWAIT</code>.</dd> -</dl> -<p class="Pp">Note that if <var class="Fa">buf</var> is not - <code class="Dv">NULL</code>, it must point to an array of at least - <var class="Fa">length</var> characters. The result of accessing that array - directly while it is in use by the sbuf is undefined.</p> -<p class="Pp" id="sbuf_new_auto">The - <a class="permalink" href="#sbuf_new_auto"><code class="Fn">sbuf_new_auto</code></a>() - function is a shortcut for creating a completely dynamic - <code class="Nm">sbuf</code>. It is the equivalent of calling - <code class="Fn">sbuf_new</code>() with values <code class="Dv">NULL</code>, - <code class="Dv">NULL</code>, <code class="Dv">0</code>, and - <code class="Dv">SBUF_AUTOEXTEND</code>.</p> -<p class="Pp" id="sbuf_new_for_sysctl">The - <a class="permalink" href="#sbuf_new_for_sysctl"><code class="Fn">sbuf_new_for_sysctl</code></a>() - function will set up an sbuf with a drain function to use - <a class="permalink" href="#SYSCTL_OUT"><code class="Fn" id="SYSCTL_OUT">SYSCTL_OUT</code></a>() - when the internal buffer fills. Note that if the various functions which - append to an sbuf are used while a non-sleepable lock is held, the user - buffer should be wired using - <a class="permalink" href="#sysctl_wire_old_buffer"><code class="Fn" id="sysctl_wire_old_buffer">sysctl_wire_old_buffer</code></a>().</p> -<p class="Pp" id="sbuf_delete">The - <a class="permalink" href="#sbuf_delete"><code class="Fn">sbuf_delete</code></a>() - function clears the <var class="Fa">sbuf</var> and frees any memory - allocated for it. There must be a call to - <code class="Fn">sbuf_delete</code>() for every call to - <code class="Fn">sbuf_new</code>(). Any attempt to access the sbuf after it - has been deleted will fail.</p> -<p class="Pp" id="sbuf_clear">The - <a class="permalink" href="#sbuf_clear"><code class="Fn">sbuf_clear</code></a>() - function invalidates the contents of the <var class="Fa">sbuf</var> and - resets its position to zero.</p> -<p class="Pp" id="sbuf_get_flags">The - <a class="permalink" href="#sbuf_get_flags"><code class="Fn">sbuf_get_flags</code></a>() - function returns the current user flags. The - <a class="permalink" href="#sbuf_set_flags"><code class="Fn" id="sbuf_set_flags">sbuf_set_flags</code></a>() - and - <a class="permalink" href="#sbuf_clear_flags"><code class="Fn" id="sbuf_clear_flags">sbuf_clear_flags</code></a>() - functions set or clear one or more user flags, respectively. The user flags - are described under the <code class="Fn">sbuf_new</code>() function.</p> -<p class="Pp" id="sbuf_setpos">The - <a class="permalink" href="#sbuf_setpos"><code class="Fn">sbuf_setpos</code></a>() - function sets the <var class="Fa">sbuf</var>'s end position to - <var class="Fa">pos</var>, which is a value between zero and the current - position in the buffer. It can only truncate the sbuf to the new - position.</p> -<p class="Pp" id="sbuf_bcat">The - <a class="permalink" href="#sbuf_bcat"><code class="Fn">sbuf_bcat</code></a>() - function appends the first <var class="Fa">len</var> bytes from the buffer - <var class="Fa">buf</var> to the <var class="Fa">sbuf</var>.</p> -<p class="Pp" id="sbuf_bcopyin">The - <a class="permalink" href="#sbuf_bcopyin"><code class="Fn">sbuf_bcopyin</code></a>() - function copies <var class="Fa">len</var> bytes from the specified userland - address into the <var class="Fa">sbuf</var>.</p> -<p class="Pp" id="sbuf_bcpy">The - <a class="permalink" href="#sbuf_bcpy"><code class="Fn">sbuf_bcpy</code></a>() - function replaces the contents of the <var class="Fa">sbuf</var> with the - first <var class="Fa">len</var> bytes from the buffer - <var class="Fa">buf</var>.</p> -<p class="Pp" id="sbuf_cat">The - <a class="permalink" href="#sbuf_cat"><code class="Fn">sbuf_cat</code></a>() - function appends the NUL-terminated string <var class="Fa">str</var> to the - <var class="Fa">sbuf</var> at the current position.</p> -<p class="Pp" id="sbuf_set_drain">The - <a class="permalink" href="#sbuf_set_drain"><code class="Fn">sbuf_set_drain</code></a>() - function sets a drain function <var class="Fa">func</var> for the - <var class="Fa">sbuf</var>, and records a pointer <var class="Fa">arg</var> - to be passed to the drain on callback. The drain function cannot be changed - while <var class="Fa">sbuf_len</var> is non-zero.</p> -<p class="Pp" id="sbuf_set_drain~2">The registered drain function - <var class="Vt">sbuf_drain_func</var> will be called with the argument - <var class="Fa">arg</var> provided to - <a class="permalink" href="#sbuf_set_drain~2"><code class="Fn">sbuf_set_drain</code></a>(), - a pointer <var class="Fa">data</var> to a byte string that is the contents - of the sbuf, and the length <var class="Fa">len</var> of the data. If the - drain function exists, it will be called when the sbuf internal buffer is - full, or on behalf of <code class="Fn">sbuf_finish</code>(). The drain - function may drain some or all of the data, but must drain at least 1 byte. - The return value from the drain function, if positive, indicates how many - bytes were drained. If negative, the return value indicates the negative - error code which will be returned from this or a later call to - <code class="Fn">sbuf_finish</code>(). If the returned drained length is 0, - an error of <code class="Er">EDEADLK</code> is set. To do unbuffered - draining, initialize the sbuf with a two-byte buffer. The drain will be - called for every byte added to the sbuf. The - <code class="Fn">sbuf_bcopyin</code>(), <code class="Fn">sbuf_bcpy</code>(), - <code class="Fn">sbuf_clear</code>(), <code class="Fn">sbuf_copyin</code>(), - <code class="Fn">sbuf_cpy</code>(), <code class="Fn">sbuf_trim</code>(), - <code class="Fn">sbuf_data</code>(), and <code class="Fn">sbuf_len</code>() - functions cannot be used on an sbuf with a drain.</p> -<p class="Pp" id="sbuf_copyin">The - <a class="permalink" href="#sbuf_copyin"><code class="Fn">sbuf_copyin</code></a>() - function copies a NUL-terminated string from the specified userland address - into the <var class="Fa">sbuf</var>. If the <var class="Fa">len</var> - argument is non-zero, no more than <var class="Fa">len</var> characters (not - counting the terminating NUL) are copied; otherwise the entire string, or as - much of it as can fit in the <var class="Fa">sbuf</var>, is copied.</p> -<p class="Pp" id="sbuf_cpy">The - <a class="permalink" href="#sbuf_cpy"><code class="Fn">sbuf_cpy</code></a>() - function replaces the contents of the <var class="Fa">sbuf</var> with those - of the NUL-terminated string <var class="Fa">str</var>. This is equivalent - to calling <code class="Fn">sbuf_cat</code>() with a fresh - <var class="Fa">sbuf</var> or one which position has been reset to zero with - <code class="Fn">sbuf_clear</code>() or - <code class="Fn">sbuf_setpos</code>().</p> -<p class="Pp" id="sbuf_nl_terminate">The - <a class="permalink" href="#sbuf_nl_terminate"><code class="Fn">sbuf_nl_terminate</code></a>() - function appends a trailing newline character, if the current line is - non-empty and not already terminated by a newline character.</p> -<p class="Pp" id="sbuf_printf">The - <a class="permalink" href="#sbuf_printf"><code class="Fn">sbuf_printf</code></a>() - function formats its arguments according to the format string pointed to by - <var class="Fa">fmt</var> and appends the resulting string to the - <var class="Fa">sbuf</var> at the current position.</p> -<p class="Pp" id="sbuf_vprintf">The - <a class="permalink" href="#sbuf_vprintf"><code class="Fn">sbuf_vprintf</code></a>() - function behaves the same as <code class="Fn">sbuf_printf</code>() except - that the arguments are obtained from the variable-length argument list - <var class="Fa">ap</var>.</p> -<p class="Pp" id="sbuf_putc">The - <a class="permalink" href="#sbuf_putc"><code class="Fn">sbuf_putc</code></a>() - function appends the character <var class="Fa">c</var> to the - <var class="Fa">sbuf</var> at the current position.</p> -<p class="Pp" id="sbuf_trim">The - <a class="permalink" href="#sbuf_trim"><code class="Fn">sbuf_trim</code></a>() - function removes trailing whitespace from the - <var class="Fa">sbuf</var>.</p> -<p class="Pp" id="sbuf_error">The - <a class="permalink" href="#sbuf_error"><code class="Fn">sbuf_error</code></a>() - function returns any error value that the <var class="Fa">sbuf</var> may - have accumulated, either from the drain function, or - <code class="Er">ENOMEM</code> if the <var class="Fa">sbuf</var> overflowed. - This function is generally not needed and instead the error code from - <code class="Fn">sbuf_finish</code>() is the preferred way to discover - whether an sbuf had an error.</p> -<p class="Pp" id="sbuf_finish">The - <a class="permalink" href="#sbuf_finish"><code class="Fn">sbuf_finish</code></a>() - function will call the attached drain function if one exists until all the - data in the <var class="Fa">sbuf</var> is flushed. If there is no attached - drain, <code class="Fn">sbuf_finish</code>() NUL-terminates the - <var class="Fa">sbuf</var>. In either case it marks the - <var class="Fa">sbuf</var> as finished, which means that it may no longer be - modified using <code class="Fn">sbuf_setpos</code>(), - <code class="Fn">sbuf_cat</code>(), <code class="Fn">sbuf_cpy</code>(), - <code class="Fn">sbuf_printf</code>() or - <code class="Fn">sbuf_putc</code>(), until - <code class="Fn">sbuf_clear</code>() is used to reset the sbuf.</p> -<p class="Pp" id="sbuf_data">The - <a class="permalink" href="#sbuf_data"><code class="Fn">sbuf_data</code></a>() - function returns the actual string; <code class="Fn">sbuf_data</code>() only - works on a finished <var class="Fa">sbuf</var>. The - <a class="permalink" href="#sbuf_len"><code class="Fn" id="sbuf_len">sbuf_len</code></a>() - function returns the length of the string. For an <var class="Fa">sbuf</var> - with an attached drain, <code class="Fn">sbuf_len</code>() returns the - length of the un-drained data. - <a class="permalink" href="#sbuf_done"><code class="Fn" id="sbuf_done">sbuf_done</code></a>() - returns non-zero if the <var class="Fa">sbuf</var> is finished.</p> -<p class="Pp" id="sbuf_start_section">The - <a class="permalink" href="#sbuf_start_section"><code class="Fn">sbuf_start_section</code></a>() - and - <a class="permalink" href="#sbuf_end_section"><code class="Fn" id="sbuf_end_section">sbuf_end_section</code></a>() - functions may be used for automatic section alignment. The arguments - <var class="Fa">pad</var> and <var class="Fa">c</var> specify the padding - size and a character used for padding. The arguments - <var class="Fa">old_lenp</var> and <var class="Fa">old_len</var> are to save - and restore the current section length when nested sections are used. For - the top level section <code class="Dv">NULL</code> and -1 can be specified - for <var class="Fa">old_lenp</var> and <var class="Fa">old_len</var> - respectively.</p> -<p class="Pp" id="sbuf_hexdump">The - <a class="permalink" href="#sbuf_hexdump"><code class="Fn">sbuf_hexdump</code></a>() - function prints an array of bytes to the supplied sbuf, along with an ASCII - representation of the bytes if possible. See the - <a class="Xr">hexdump(3)</a> man page for more details on the interface.</p> -<p class="Pp" id="sbuf_printf_drain">The - <a class="permalink" href="#sbuf_printf_drain"><code class="Fn">sbuf_printf_drain</code></a>() - function is a drain function that will call printf, or log to the console. - The argument <var class="Fa">arg</var> must be either - <code class="Dv">NULL</code>, or a valid pointer to a - <var class="Vt">size_t</var>. If <var class="Fa">arg</var> is not - <code class="Dv">NULL</code>, the total bytes drained will be added to the - value pointed to by <var class="Fa">arg</var>.</p> -<p class="Pp" id="sbuf_putbuf">The - <a class="permalink" href="#sbuf_putbuf"><code class="Fn">sbuf_putbuf</code></a>() - function printfs the sbuf to stdout if in userland, and to the console and - log if in the kernel. The <var class="Fa">sbuf</var> must be finished before - calling <code class="Fn">sbuf_putbuf</code>(). It does not drain the buffer - or update any pointers.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1> -<p class="Pp">If an operation caused an <var class="Fa">sbuf</var> to overflow, - most subsequent operations on it will fail until the - <var class="Fa">sbuf</var> is finished using - <code class="Fn">sbuf_finish</code>() or reset using - <code class="Fn">sbuf_clear</code>(), or its position is reset to a value - between 0 and one less than the size of its storage buffer using - <code class="Fn">sbuf_setpos</code>(), or it is reinitialized to a - sufficiently short string using <code class="Fn">sbuf_cpy</code>().</p> -<p class="Pp">Drains in user-space will not always function as indicated. While - the drain function will be called immediately on overflow from the - <var class="Fa">sbuf_putc</var>, <var class="Fa">sbuf_bcat</var>, - <var class="Fa">sbuf_cat</var> functions, <var class="Fa">sbuf_printf</var> - and <var class="Fa">sbuf_vprintf</var> currently have no way to determine - whether there will be an overflow until after it occurs, and cannot do a - partial expansion of the format string. Thus when using libsbuf the buffer - may be extended to allow completion of a single printf call, even though a - drain is attached.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">sbuf_new</code>() function returns - <code class="Dv">NULL</code> if it failed to allocate a storage buffer, and - a pointer to the new <var class="Fa">sbuf</var> otherwise.</p> -<p class="Pp">The <code class="Fn">sbuf_setpos</code>() function returns -1 if - <var class="Fa">pos</var> was invalid, and zero otherwise.</p> -<p class="Pp">The <code class="Fn">sbuf_bcat</code>(), - <code class="Fn">sbuf_cat</code>(), <code class="Fn">sbuf_cpy</code>(), - <code class="Fn">sbuf_printf</code>(), <code class="Fn">sbuf_putc</code>(), - and <code class="Fn">sbuf_trim</code>() functions all return -1 if the - buffer overflowed, and zero otherwise.</p> -<p class="Pp">The <code class="Fn">sbuf_error</code>() function returns a - non-zero value if the buffer has an overflow or drain error, and zero - otherwise.</p> -<p class="Pp">The <code class="Fn">sbuf_len</code>() function returns -1 if the - buffer overflowed.</p> -<p class="Pp">The <code class="Fn">sbuf_copyin</code>() function returns -1 if - copying string from userland failed, and number of bytes copied - otherwise.</p> -<p class="Pp">The <code class="Fn">sbuf_end_section</code>() function returns - the section length or -1 if the buffer has an error.</p> -<p class="Pp">The <code class="Fn">sbuf_finish</code>(<var class="Fa">9</var>) - function (the kernel version) returns <code class="Er">ENOMEM</code> if the - sbuf overflowed before being finished, or returns the error code from the - drain if one is attached.</p> -<p class="Pp">The <code class="Fn">sbuf_finish</code>(<var class="Fa">3</var>) - function (the userland version) will return zero for success and -1 and set - errno on error.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<div class="Bd Li"> -<pre>#include <sys/types.h> -#include <sys/sbuf.h> - -struct sbuf *sb; - -sb = sbuf_new_auto(); -sbuf_cat(sb, "Customers found:\n"); -TAILQ_FOREACH(foo, &foolist, list) { - sbuf_printf(sb, " %4d %s\n", foo->index, foo->name); - sbuf_printf(sb, " Address: %s\n", foo->address); - sbuf_printf(sb, " Zip: %s\n", foo->zipcode); -} -if (sbuf_finish(sb) != 0) /* Check for any and all errors */ - err(1, "Could not generate message"); -transmit_msg(sbuf_data(sb), sbuf_len(sb)); -sbuf_delete(sb);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">hexdump(3)</a>, <a class="Xr">printf(3)</a>, - <a class="Xr">strcat(3)</a>, <a class="Xr">strcpy(3)</a>, - <a class="Xr">copyin(9)</a>, <a class="Xr">copyinstr(9)</a>, - <a class="Xr">printf(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">sbuf</code> family of functions first - appeared in <span class="Ux">FreeBSD 4.4</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">sbuf</code> family of functions was designed - by <span class="An">Poul-Henning Kamp</span> - <<a class="Mt" href="mailto:phk@FreeBSD.org">phk@FreeBSD.org</a>> and - implemented by <span class="An">Dag-Erling Smørgrav</span> - <<a class="Mt" href="mailto:des@FreeBSD.org">des@FreeBSD.org</a>>. - Additional improvements were suggested by <span class="An">Justin T. - Gibbs</span> - <<a class="Mt" href="mailto:gibbs@FreeBSD.org">gibbs@FreeBSD.org</a>>. - Auto-extend support added by <span class="An">Kelly Yancey</span> - <<a class="Mt" href="mailto:kbyanc@FreeBSD.org">kbyanc@FreeBSD.org</a>>. - Drain functionality added by <span class="An">Matthew Fleming</span> - <<a class="Mt" href="mailto:mdf@FreeBSD.org">mdf@FreeBSD.org</a>>.</p> -<p class="Pp">This manual page was written by <span class="An">Dag-Erling - Smørgrav</span> - <<a class="Mt" href="mailto:des@FreeBSD.org">des@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 3, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/scheduler.9 4.html b/static/freebsd/man9/scheduler.9 4.html deleted file mode 100644 index 0e31a487..00000000 --- a/static/freebsd/man9/scheduler.9 4.html +++ /dev/null @@ -1,208 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SCHEDULER(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SCHEDULER(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">curpriority_cmp</code>, - <code class="Nm">maybe_resched</code>, - <code class="Nm">resetpriority</code>, <code class="Nm">roundrobin</code>, - <code class="Nm">roundrobin_interval</code>, - <code class="Nm">sched_setup</code>, <code class="Nm">schedclock</code>, - <code class="Nm">schedcpu</code>, <code class="Nm">setrunnable</code>, - <code class="Nm">updatepri</code> — <span class="Nd">perform - round-robin scheduling of runnable processes</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/proc.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">curpriority_cmp</code>(<var class="Fa" style="white-space: nowrap;">struct - proc *p</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">maybe_resched</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">propagate_priority</code>(<var class="Fa" style="white-space: nowrap;">struct - proc *p</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">resetpriority</code>(<var class="Fa" style="white-space: nowrap;">struct - ksegrp *kg</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">roundrobin</code>(<var class="Fa" style="white-space: nowrap;">void - *arg</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">roundrobin_interval</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sched_setup</code>(<var class="Fa" style="white-space: nowrap;">void - *dummy</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">schedclock</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">schedcpu</code>(<var class="Fa" style="white-space: nowrap;">void - *arg</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">setrunnable</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">updatepri</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Each process has three different priorities stored in - <var class="Vt">struct proc</var>: <var class="Va">p_usrpri</var>, - <var class="Va">p_nativepri</var>, and <var class="Va">p_priority</var>.</p> -<p class="Pp">The <var class="Va">p_usrpri</var> member is the user priority of - the process calculated from a process' estimated CPU time and nice - level.</p> -<p class="Pp" id="propagate_priority">The <var class="Va">p_nativepri</var> - member is the saved priority used by - <a class="permalink" href="#propagate_priority"><code class="Fn">propagate_priority</code></a>(). - When a process obtains a mutex, its priority is saved in - <var class="Va">p_nativepri</var>. While it holds the mutex, the process's - priority may be bumped by another process that blocks on the mutex. When the - process releases the mutex, then its priority is restored to the priority - saved in <var class="Va">p_nativepri</var>.</p> -<p class="Pp">The <var class="Va">p_priority</var> member is the actual priority - of the process and is used to determine what <a class="Xr">runqueue(9)</a> - it runs on, for example.</p> -<p class="Pp" id="curpriority_cmp">The - <a class="permalink" href="#curpriority_cmp"><code class="Fn">curpriority_cmp</code></a>() - function compares the cached priority of the currently running process with - process <var class="Fa">p</var>. If the currently running process has a - higher priority, then it will return a value less than zero. If the current - process has a lower priority, then it will return a value greater than zero. - If the current process has the same priority as <var class="Fa">p</var>, - then <code class="Fn">curpriority_cmp</code>() will return zero. The cached - priority of the currently running process is updated when a process resumes - from <a class="Xr">tsleep(9)</a> or returns to userland in - <a class="permalink" href="#userret"><code class="Fn" id="userret">userret</code></a>() - and is stored in the private variable <var class="Va">curpriority</var>.</p> -<p class="Pp" id="maybe_resched">The - <a class="permalink" href="#maybe_resched"><code class="Fn">maybe_resched</code></a>() - function compares the priorities of the current thread and - <var class="Fa">td</var>. If <var class="Fa">td</var> has a higher priority - than the current thread, then a context switch is needed, and - <code class="Dv">KEF_NEEDRESCHED</code> is set.</p> -<p class="Pp" id="propagate_priority~2">The - <a class="permalink" href="#propagate_priority~2"><code class="Fn">propagate_priority</code></a>() - looks at the process that owns the mutex <var class="Fa">p</var> is blocked - on. That process's priority is bumped to the priority of - <var class="Fa">p</var> if needed. If the process is currently running, then - the function returns. If the process is on a <a class="Xr">runqueue(9)</a>, - then the process is moved to the appropriate <a class="Xr">runqueue(9)</a> - for its new priority. If the process is blocked on a mutex, its position in - the list of processes blocked on the mutex in question is updated to reflect - its new priority. Then, the function repeats the procedure using the process - that owns the mutex just encountered. Note that a process's priorities are - only bumped to the priority of the original process <var class="Fa">p</var>, - not to the priority of the previously encountered process.</p> -<p class="Pp" id="resetpriority">The - <a class="permalink" href="#resetpriority"><code class="Fn">resetpriority</code></a>() - function recomputes the user priority of the ksegrp <var class="Fa">kg</var> - (stored in <var class="Va">kg_user_pri</var>) and calls - <code class="Fn">maybe_resched</code>() to force a reschedule of each thread - in the group if needed.</p> -<p class="Pp" id="roundrobin">The - <a class="permalink" href="#roundrobin"><code class="Fn">roundrobin</code></a>() - function is used as a <a class="Xr">timeout(9)</a> function to force a - reschedule every <var class="Va">sched_quantum</var> ticks.</p> -<p class="Pp" id="roundrobin_interval">The - <a class="permalink" href="#roundrobin_interval"><code class="Fn">roundrobin_interval</code></a>() - function simply returns the number of clock ticks in between reschedules - triggered by <code class="Fn">roundrobin</code>(). Thus, all it does is - return the current value of <var class="Va">sched_quantum</var>.</p> -<p class="Pp" id="sched_setup">The - <a class="permalink" href="#sched_setup"><code class="Fn">sched_setup</code></a>() - function is a <a class="Xr">SYSINIT(9)</a> that is called to start the - callout driven scheduler functions. It just calls the - <code class="Fn">roundrobin</code>() and <code class="Fn">schedcpu</code>() - functions for the first time. After the initial call, the two functions will - propagate themselves by registering their callout event again at the - completion of the respective function.</p> -<p class="Pp" id="schedclock">The - <a class="permalink" href="#schedclock"><code class="Fn">schedclock</code></a>() - function is called by - <a class="permalink" href="#statclock"><code class="Fn" id="statclock">statclock</code></a>() - to adjust the priority of the currently running thread's ksegrp. It updates - the group's estimated CPU time and then adjusts the priority via - <code class="Fn">resetpriority</code>().</p> -<p class="Pp" id="schedcpu">The - <a class="permalink" href="#schedcpu"><code class="Fn">schedcpu</code></a>() - function updates all process priorities. First, it updates statistics that - track how long processes have been in various process states. Secondly, it - updates the estimated CPU time for the current process such that about 90% - of the CPU usage is forgotten in 5 * load average seconds. For example, if - the load average is 2.00, then at least 90% of the estimated CPU time for - the process should be based on the amount of CPU time the process has had in - the last 10 seconds. It then recomputes the priority of the process and - moves it to the appropriate <a class="Xr">runqueue(9)</a> if necessary. - Thirdly, it updates the %CPU estimate used by utilities such as - <a class="Xr">ps(1)</a> and <a class="Xr">top(1)</a> so that 95% of the CPU - usage is forgotten in 60 seconds. Once all process priorities have been - updated, <code class="Fn">schedcpu</code>() calls - <a class="permalink" href="#vmmeter"><code class="Fn" id="vmmeter">vmmeter</code></a>() - to update various other statistics including the load average. Finally, it - schedules itself to run again in <var class="Va">hz</var> clock ticks.</p> -<p class="Pp" id="setrunnable">The - <a class="permalink" href="#setrunnable"><code class="Fn">setrunnable</code></a>() - function is used to change a process's state to be runnable. The process is - placed on a <a class="Xr">runqueue(9)</a> if needed, and the swapper process - is woken up and told to swap the process in if the process is swapped out. - If the process has been asleep for at least one run of - <code class="Fn">schedcpu</code>(), then <code class="Fn">updatepri</code>() - is used to adjust the priority of the process.</p> -<p class="Pp" id="updatepri">The - <a class="permalink" href="#updatepri"><code class="Fn">updatepri</code></a>() - function is used to adjust the priority of a process that has been asleep. - It retroactively decays the estimated CPU time of the process for each - <code class="Fn">schedcpu</code>() event that the process was asleep. - Finally, it calls <code class="Fn">resetpriority</code>() to adjust the - priority of the process.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">mi_switch(9)</a>, <a class="Xr">runqueue(9)</a>, - <a class="Xr">sleepqueue(9)</a>, <a class="Xr">tsleep(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">The <var class="Va">curpriority</var> variable really should be - per-CPU. In addition, <code class="Fn">maybe_resched</code>() should compare - the priority of <var class="Fa">chk</var> with that of each CPU, and then - send an IPI to the processor with the lowest priority to trigger a - reschedule if needed.</p> -<p class="Pp">Priority propagation is broken and is thus disabled by default. - The <var class="Va">p_nativepri</var> variable is only updated if a process - does not obtain a sleep mutex on the first try. Also, if a process obtains - more than one sleep mutex in this manner, and had its priority bumped in - between, then <var class="Va">p_nativepri</var> will be clobbered.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 3, 2000</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/securelevel_gt.9 4.html b/static/freebsd/man9/securelevel_gt.9 4.html deleted file mode 100644 index f71286f0..00000000 --- a/static/freebsd/man9/securelevel_gt.9 4.html +++ /dev/null @@ -1,65 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SECURELEVEL_GT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SECURELEVEL_GT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">securelevel_gt</code>, - <code class="Nm">securelevel_ge</code> — <span class="Nd">test active - securelevel</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/proc.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">securelevel_gt</code>(<var class="Fa" style="white-space: nowrap;">struct - ucred *cr</var>, <var class="Fa" style="white-space: nowrap;">int - level</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">securelevel_ge</code>(<var class="Fa" style="white-space: nowrap;">struct - ucred *cr</var>, <var class="Fa" style="white-space: nowrap;">int - level</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These functions test the active security level against the given - <var class="Fa">level</var>. If the calling credential - <var class="Fa">cr</var> was imprisoned by the <a class="Xr">jail(2)</a> - system call, and has a different security level set than the host - environment, the security level with the highest value is used.</p> -<p class="Pp" id="securelevel_gt">The - <a class="permalink" href="#securelevel_gt"><code class="Fn">securelevel_gt</code></a>() - function will evaluate whether or not the active security level is greater - than the supplied <var class="Fa">level</var>.</p> -<p class="Pp" id="securelevel_ge">The - <a class="permalink" href="#securelevel_ge"><code class="Fn">securelevel_ge</code></a>() - function will evaluate whether or not the active security level is greater - than or equal to the supplied <var class="Fa">level</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">These functions return <code class="Er">EPERM</code> if condition - evaluated to true, and 0 otherwise.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">securelevel(7)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 2, 2007</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/selrecord.9 4.html b/static/freebsd/man9/selrecord.9 4.html deleted file mode 100644 index 9a70d9b4..00000000 --- a/static/freebsd/man9/selrecord.9 4.html +++ /dev/null @@ -1,94 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SELRECORD(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SELRECORD(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">seldrain</code>, - <code class="Nm">selrecord</code>, <code class="Nm">selwakeup</code> - — <span class="Nd">record and wakeup select requests</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/selinfo.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">seldrain</code>(<var class="Fa" style="white-space: nowrap;">struct - selinfo *sip</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">selrecord</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>, <var class="Fa" style="white-space: nowrap;">struct - selinfo *sip</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">selwakeup</code>(<var class="Fa" style="white-space: nowrap;">struct - selinfo *sip</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><a class="permalink" href="#seldrain"><code class="Fn" id="seldrain">seldrain</code></a>(), - <code class="Fn">selrecord</code>() and <code class="Fn">selwakeup</code>() - are the three central functions used by <a class="Xr">select(2)</a>, - <a class="Xr">poll(2)</a> and the objects that are being selected on. They - handle the task of recording which threads are waiting on which objects and - the waking of the proper threads when an event of interest occurs on an - object.</p> -<p class="Pp" id="selrecord"><a class="permalink" href="#selrecord"><code class="Fn">selrecord</code></a>() - records that the calling thread is interested in events related to a given - object. If another thread is already waiting on the object a collision will - be flagged in <var class="Fa">sip</var> which will be later dealt with by - <code class="Fn">selwakeup</code>().</p> -<p class="Pp" id="selrecord~2"><a class="permalink" href="#selrecord~2"><code class="Fn">selrecord</code></a>() - acquires and releases <var class="Va">sellock</var>.</p> -<p class="Pp" id="selwakeup"><a class="permalink" href="#selwakeup"><code class="Fn">selwakeup</code></a>() - is called by the underlying object handling code in order to notify any - waiting threads that an event of interest has occurred. If a collision has - occurred, <code class="Fn">selwakeup</code>() will increment - <var class="Va">nselcoll</var>, and broadcast on the global cv in order to - wake all waiting threads so that they can handle it. If the thread waiting - on the object is not currently sleeping or the wait channel is not - <var class="Va">selwait</var>, <code class="Fn">selwakeup</code>() will - clear the <code class="Dv">TDF_SELECT</code> flag which should be noted by - <a class="Xr">select(2)</a> and <a class="Xr">poll(2)</a> when they wake - up.</p> -<p class="Pp" id="seldrain~2"><a class="permalink" href="#seldrain~2"><code class="Fn">seldrain</code></a>() - will flush the waiters queue on a specified object before its destruction. - The object handling code must ensure that <var class="Fa">*sip</var> cannot - be used once <code class="Fn">seldrain</code>() has been called.</p> -<p class="Pp" id="selrecord~3">The contents of <var class="Fa">*sip</var> must - be zeroed, such as by softc initialization, before any call to - <a class="permalink" href="#selrecord~3"><code class="Fn">selrecord</code></a>() - or <code class="Fn">selwakeup</code>(), otherwise a panic may occur. - <code class="Fn">selwakeup</code>() acquires and releases - <var class="Va">sellock</var> and may acquire and release - <var class="Va">sched_lock</var>. <code class="Fn">seldrain</code>() could - usually be just a wrapper for <code class="Fn">selwakeup</code>(), but - consumers should not generally rely on this feature.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">poll(2)</a>, <a class="Xr">select(2)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@FreeBSD.org">davidc@FreeBSD.org</a>> - and <span class="An">Alfred Perlstein</span> - <<a class="Mt" href="mailto:alfred@FreeBSD.org">alfred@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 25, 2011</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/sema.9 4.html b/static/freebsd/man9/sema.9 4.html deleted file mode 100644 index ca4f197b..00000000 --- a/static/freebsd/man9/sema.9 4.html +++ /dev/null @@ -1,126 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SEMA(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SEMA(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">sema</code>, <code class="Nm">sema_init</code>, - <code class="Nm">sema_destroy</code>, <code class="Nm">sema_post</code>, - <code class="Nm">sema_wait</code>, <code class="Nm">sema_timedwait</code>, - <code class="Nm">sema_trywait</code>, <code class="Nm">sema_value</code> - — <span class="Nd">kernel counting semaphore</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/lock.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/sema.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sema_init</code>(<var class="Fa" style="white-space: nowrap;">struct - sema *sema</var>, <var class="Fa" style="white-space: nowrap;">int - value</var>, <var class="Fa" style="white-space: nowrap;">const char - *description</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sema_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct - sema *sema</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sema_post</code>(<var class="Fa" style="white-space: nowrap;">struct - sema *sema</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sema_wait</code>(<var class="Fa" style="white-space: nowrap;">struct - sema *sema</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sema_timedwait</code>(<var class="Fa" style="white-space: nowrap;">struct - sema *sema</var>, <var class="Fa" style="white-space: nowrap;">int - timo</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sema_trywait</code>(<var class="Fa" style="white-space: nowrap;">struct - sema *sema</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sema_value</code>(<var class="Fa" style="white-space: nowrap;">struct - sema *sema</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Counting semaphores provide a mechanism for synchronizing access - to a pool of resources. Unlike mutexes, semaphores do not have the concept - of an owner, so they can also be useful in situations where one thread needs - to acquire a resource, and another thread needs to release it. Each - semaphore has an integer value associated with it. Posting (incrementing) - always succeeds, but waiting (decrementing) can only successfully complete - if the resulting value of the semaphore is greater than or equal to - zero.</p> -<p class="Pp">Semaphores should not be used where mutexes and condition - variables will suffice. Semaphores are a more complex synchronization - mechanism than mutexes and condition variables, and are not as - efficient.</p> -<p class="Pp" id="sema_init">Semaphores are created with - <a class="permalink" href="#sema_init"><code class="Fn">sema_init</code></a>(), - where <var class="Fa">sema</var> is a pointer to space for a - <var class="Vt">struct sema</var>, <var class="Fa">value</var> is the - initial value of the semaphore, and <var class="Fa">description</var> is a - pointer to a null-terminated character string that describes the semaphore. - Semaphores are destroyed with - <a class="permalink" href="#sema_destroy"><code class="Fn" id="sema_destroy">sema_destroy</code></a>(). - A semaphore is posted (incremented) with - <a class="permalink" href="#sema_post"><code class="Fn" id="sema_post">sema_post</code></a>(). - A semaphore is waited on (decremented) with - <a class="permalink" href="#sema_wait"><code class="Fn" id="sema_wait">sema_wait</code></a>(), - <a class="permalink" href="#sema_timedwait"><code class="Fn" id="sema_timedwait">sema_timedwait</code></a>(), - or - <a class="permalink" href="#sema_trywait"><code class="Fn" id="sema_trywait">sema_trywait</code></a>(). - The <var class="Fa">timo</var> argument to - <code class="Fn">sema_timedwait</code>() specifies the minimum time in ticks - to wait before returning with failure. - <a class="permalink" href="#sema_value"><code class="Fn" id="sema_value">sema_value</code></a>() - is used to read the current value of the semaphore.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">sema_value</code>() function returns the - current value of the semaphore.</p> -<p class="Pp">If decrementing the semaphore would result in its value being - negative, <code class="Fn">sema_trywait</code>() returns 0 to indicate - failure. Otherwise, a non-zero value is returned to indicate success.</p> -<p class="Pp">The <code class="Fn">sema_timedwait</code>() function returns 0 if - waiting on the semaphore succeeded; otherwise a non-zero error code is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp">The <code class="Fn">sema_timedwait</code>() function will fail - if:</p> -<dl class="Bl-tag"> - <dt id="EWOULDBLOCK">[<a class="permalink" href="#EWOULDBLOCK"><code class="Er">EWOULDBLOCK</code></a>]</dt> - <dd>Timeout expired.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">condvar(9)</a>, <a class="Xr">locking(9)</a>, - <a class="Xr">mtx_pool(9)</a>, <a class="Xr">mutex(9)</a>, - <a class="Xr">rwlock(9)</a>, <a class="Xr">sx(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 1, 2006</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/seqc.9 4.html b/static/freebsd/man9/seqc.9 4.html deleted file mode 100644 index 29e244d3..00000000 --- a/static/freebsd/man9/seqc.9 4.html +++ /dev/null @@ -1,124 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SEQC(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SEQC(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">seqc_consistent</code>, - <code class="Nm">seqc_read</code>, <code class="Nm">seqc_write_begin</code>, - <code class="Nm">seqc_write_end</code> — <span class="Nd">lockless - read algorithm</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/seqc.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">seqc_write_begin</code>(<var class="Fa" style="white-space: nowrap;">seqc_t - *seqcp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">seqc_write_end</code>(<var class="Fa" style="white-space: nowrap;">seqc_t - *seqcp</var>);</p> -<p class="Pp"><var class="Ft">seqc_t</var> - <br/> - <code class="Fn">seqc_read</code>(<var class="Fa" style="white-space: nowrap;">seqc_t - *seqcp</var>);</p> -<p class="Pp"><var class="Ft">seqc_t</var> - <br/> - <code class="Fn">seqc_consistent</code>(<var class="Fa" style="white-space: nowrap;">const - seqc_t *seqcp</var>, <var class="Fa" style="white-space: nowrap;">seqc_t - oldseqc</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">seqc</code> allows zero or more readers and - zero or one writer to concurrently access an object, providing a consistent - snapshot of the object for readers. No mutual exclusion between readers and - writers is required, but readers may be starved indefinitely by writers.</p> -<p class="Pp" id="seqc_write_begin">The functions - <a class="permalink" href="#seqc_write_begin"><code class="Fn">seqc_write_begin</code></a>() - and - <a class="permalink" href="#seqc_write_end"><code class="Fn" id="seqc_write_end">seqc_write_end</code></a>() - are used to create a transaction for writer, and notify the readers that the - object will be modified.</p> -<p class="Pp" id="seqc_read">The - <a class="permalink" href="#seqc_read"><code class="Fn">seqc_read</code></a>() - function returns the current sequence number. If a writer has started a - transaction, this function will spin until the transaction has ended.</p> -<p class="Pp" id="seqc_consistent">The - <a class="permalink" href="#seqc_consistent"><code class="Fn">seqc_consistent</code></a>() - function compares the sequence number with a previously fetched value. The - <var class="Fa">oldseqc</var> variable should contain a sequence number from - the beginning of read transaction.</p> -<p class="Pp">The reader at the end of a transaction checks if the sequence - number has changed. If the sequence number didn't change the object wasn't - modified, and fetched variables are valid. If the sequence number changed - the object was modified and the fetch should be repeated. In case when - sequence number is odd the object change is in progress and the reader will - wait until the write will the sequence number will become even.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">The following example for a writer changes the - <var class="Va">var1</var> and <var class="Va">var2</var> variables in the - <var class="Va">obj</var> structure:</p> -<div class="Bd Pp Li"> -<pre>lock_exclusive(&obj->lock); -seqc_write_begin(&obj->seqc); -obj->var1 = 1; -obj->var2 = 2; -seqc_write_end(&obj->seqc); -unlock_exclusive(&obj->lock);</pre> -</div> -<p class="Pp">The following example for a reader reads the - <var class="Va">var1</var> and <var class="Va">var2</var> variables from the - <var class="Va">obj</var> structure. In the case where the sequence number - was changed it restarts the whole process.</p> -<div class="Bd Pp Li"> -<pre>int var1, var2; -seqc_t seqc; - -for (;;) { - seqc = seqc_read(&obj->seqc); - var1 = obj->var1; - var2 = obj->var2; - if (seqc_consistent(&obj->seqc, seqc)) - break; -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">seqc</code> functions was implemented by - <span class="An">Mateusz Guzik</span> - <<a class="Mt" href="mailto:mjg@FreeBSD.org">mjg@FreeBSD.org</a>>. - This manual page was written by - <br/> - <span class="An">Mariusz Zaborski</span> - <<a class="Mt" href="mailto:oshogbo@FreeBSD.org">oshogbo@FreeBSD.org</a>>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CAVEATS"><a class="permalink" href="#CAVEATS">CAVEATS</a></h1> -<p class="Pp">There is no guarantee of progress for readers. In case when there - are a lot of writers the reader can be starved. This concern may be solved - by returning error after a few attempts.</p> -<p class="Pp">Theoretically if reading takes a very long time, and when there - are many writers the counter may overflow and wrap around to the same value. - In that case the reader will not notice that the object was changed. Given - that this needs 4 billion transactional writes across a single contended - reader, it is unlikely to ever happen. This could be avoided by extending - the interface to allow 64-bit counters.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 29, 2019</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/sf_buf.9 3.html b/static/freebsd/man9/sf_buf.9 3.html deleted file mode 100644 index c151edb6..00000000 --- a/static/freebsd/man9/sf_buf.9 3.html +++ /dev/null @@ -1,110 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SF_BUF(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SF_BUF(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">sf_buf</code> — <span class="Nd">manage - temporary kernel address space mapping for memory pages</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/sf_buf.h</a>></code></p> -<p class="Pp"><var class="Ft">struct sf_buf *</var> - <br/> - <code class="Fn">sf_buf_alloc</code>(<var class="Fa" style="white-space: nowrap;">struct - vm_page *m</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sf_buf_free</code>(<var class="Fa" style="white-space: nowrap;">struct - sf_buf *sf</var>);</p> -<p class="Pp"><var class="Ft">vm_offset_t</var> - <br/> - <code class="Fn">sf_buf_kva</code>(<var class="Fa" style="white-space: nowrap;">struct - sf_buf *sf</var>);</p> -<p class="Pp"><var class="Ft">struct vm_page *</var> - <br/> - <code class="Fn">sf_buf_page</code>(<var class="Fa" style="white-space: nowrap;">struct - sf_buf *sf</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">sf_buf</code> interface, historically the - <a class="Xr">sendfile(2)</a> buffer interface, allows kernel subsystems to - manage temporary kernel address space mappings for physical memory pages. On - systems with a direct memory map region (allowing all physical pages to be - visible in the kernel address space at all times), the - <var class="Vt">struct sf_buf</var> will point to an address in the direct - map region; on systems without a direct memory map region, the - <var class="Vt">struct sf_buf</var> will manage a temporary kernel address - space mapping valid for the lifetime of the <var class="Vt">struct - sf_buf</var>.</p> -<p class="Pp" id="sf_buf_alloc">Call - <a class="permalink" href="#sf_buf_alloc"><code class="Fn">sf_buf_alloc</code></a>() - to allocate a <var class="Vt">struct sf_buf</var> for a physical memory - page. <code class="Fn">sf_buf_alloc</code>() is not responsible for - arranging for the page to be present in physical memory; the caller should - already have arranged for the page to be wired, i.e., by calling - <a class="Xr">vm_page_wire(9)</a>. Several flags may be passed to - <code class="Fn">sf_buf_alloc</code>():</p> -<dl class="Bl-tag"> - <dt id="SFB_CATCH"><a class="permalink" href="#SFB_CATCH"><code class="Dv">SFB_CATCH</code></a></dt> - <dd>Cause <code class="Fn">sf_buf_alloc</code>() to abort and return - <code class="Dv">NULL</code> if a signal is received waiting for a - <var class="Vt">struct sf_buf</var> to become available.</dd> - <dt id="SFB_NOWAIT"><a class="permalink" href="#SFB_NOWAIT"><code class="Dv">SFB_NOWAIT</code></a></dt> - <dd>Cause <code class="Fn">sf_buf_alloc</code>() to return - <code class="Dv">NULL</code> rather than sleeping if a - <var class="Vt">struct sf_buf</var> is not immediately available.</dd> - <dt id="SFB_CPUPRIVATE"><a class="permalink" href="#SFB_CPUPRIVATE"><code class="Dv">SFB_CPUPRIVATE</code></a></dt> - <dd>Cause <code class="Fn">sf_buf_alloc</code>() to only arrange that the - temporary mapping be valid on the current CPU, avoiding unnecessary TLB - shootdowns for mappings that will only be accessed on a single CPU at a - time. The caller must ensure that accesses to the virtual address occur - only on the CPU from which <code class="Fn">sf_buf_alloc</code>() was - invoked, perhaps by using - <a class="permalink" href="#sched_pin"><code class="Fn" id="sched_pin">sched_pin</code></a>().</dd> -</dl> -<p class="Pp" id="sf_buf_kva">Call - <a class="permalink" href="#sf_buf_kva"><code class="Fn">sf_buf_kva</code></a>() - to return a kernel mapped address for the page.</p> -<p class="Pp" id="sf_buf_page">Call - <a class="permalink" href="#sf_buf_page"><code class="Fn">sf_buf_page</code></a>() - to return a pointer to the page originally passed into - <code class="Fn">sf_buf_alloc</code>().</p> -<p class="Pp" id="sf_buf_free">Call - <a class="permalink" href="#sf_buf_free"><code class="Fn">sf_buf_free</code></a>() - to release the <var class="Vt">struct sf_buf</var> reference. The caller is - responsible for releasing any wiring they have previously acquired on the - physical page; <code class="Fn">sf_buf_free</code>() releases only the - temporary kernel address space mapping, not the page itself.</p> -<p class="Pp">Uses of this interface include managing mappings of borrowed pages - from user memory, such as in zero-copy socket I/O, or pages of memory from - the buffer cache referenced by mbuf external storage for - <a class="Xr">sendfile(2)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">sendfile(2)</a>, - <a class="Xr">vm_page_wire(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <var class="Vt">struct sf_buf</var> API was designed and - implemented by <span class="An">Alan L. Cox</span>. This manual page was - written by <span class="An">Robert N. M. Watson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 28, 2007</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/sglist.9 4.html b/static/freebsd/man9/sglist.9 4.html deleted file mode 100644 index 237d7500..00000000 --- a/static/freebsd/man9/sglist.9 4.html +++ /dev/null @@ -1,471 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SGLIST(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SGLIST(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">sglist</code>, - <code class="Nm">sglist_alloc</code>, <code class="Nm">sglist_append</code>, - <code class="Nm">sglist_append_bio</code>, - <code class="Nm">sglist_append_mbuf</code>, - <code class="Nm">sglist_append_mbuf_epg</code>, - <code class="Nm">sglist_append_phys</code>, - <code class="Nm">sglist_append_sglist</code>, - <code class="Nm">sglist_append_single_mbuf</code>, - <code class="Nm">sglist_append_uio</code>, - <code class="Nm">sglist_append_user</code>, - <code class="Nm">sglist_append_vmpages</code>, - <code class="Nm">sglist_build</code>, <code class="Nm">sglist_clone</code>, - <code class="Nm">sglist_consume_uio</code>, - <code class="Nm">sglist_count</code>, - <code class="Nm">sglist_count_mbuf_epg</code>, - <code class="Nm">sglist_count_vmpages</code>, - <code class="Nm">sglist_free</code>, <code class="Nm">sglist_hold</code>, - <code class="Nm">sglist_init</code>, <code class="Nm">sglist_join</code>, - <code class="Nm">sglist_length</code>, <code class="Nm">sglist_reset</code>, - <code class="Nm">sglist_slice</code>, <code class="Nm">sglist_split</code> - — <span class="Nd">manage a scatter/gather list of physical memory - addresses</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/sglist.h</a>></code></p> -<p class="Pp"><var class="Ft">struct sglist *</var> - <br/> - <code class="Fn">sglist_alloc</code>(<var class="Fa" style="white-space: nowrap;">int - nsegs</var>, <var class="Fa" style="white-space: nowrap;">int - mflags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sglist_append</code>(<var class="Fa" style="white-space: nowrap;">struct - sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">void - *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sglist_append_bio</code>(<var class="Fa" style="white-space: nowrap;">struct - sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">struct bio - *bp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sglist_append_mbuf_epg</code>(<var class="Fa" style="white-space: nowrap;">struct - sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>, <var class="Fa" style="white-space: nowrap;">size_t offset</var>, - <var class="Fa" style="white-space: nowrap;">size_t len</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sglist_append_mbuf</code>(<var class="Fa" style="white-space: nowrap;">struct - sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sglist_append_phys</code>(<var class="Fa" style="white-space: nowrap;">struct - sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">vm_paddr_t - paddr</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sglist_append_sglist</code>(<var class="Fa" style="white-space: nowrap;">struct - sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">struct sglist - *source</var>, <var class="Fa" style="white-space: nowrap;">size_t - offset</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sglist_append_single_mbuf</code>(<var class="Fa" style="white-space: nowrap;">struct - sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">struct mbuf - *m</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sglist_append_uio</code>(<var class="Fa" style="white-space: nowrap;">struct - sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">struct uio - *uio</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sglist_append_user</code>(<var class="Fa" style="white-space: nowrap;">struct - sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">void - *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t len</var>, - <var class="Fa" style="white-space: nowrap;">struct thread *td</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sglist_append_vmpages</code>(<var class="Fa" style="white-space: nowrap;">struct - sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">vm_page_t - *m</var>, <var class="Fa" style="white-space: nowrap;">size_t pgoff</var>, - <var class="Fa" style="white-space: nowrap;">size_t len</var>);</p> -<p class="Pp"><var class="Ft">struct sglist *</var> - <br/> - <code class="Fn">sglist_build</code>(<var class="Fa" style="white-space: nowrap;">void - *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t len</var>, - <var class="Fa" style="white-space: nowrap;">int mflags</var>);</p> -<p class="Pp"><var class="Ft">struct sglist *</var> - <br/> - <code class="Fn">sglist_clone</code>(<var class="Fa" style="white-space: nowrap;">struct - sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">int - mflags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sglist_consume_uio</code>(<var class="Fa" style="white-space: nowrap;">struct - sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">struct uio - *uio</var>, <var class="Fa" style="white-space: nowrap;">size_t - resid</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sglist_count</code>(<var class="Fa" style="white-space: nowrap;">void - *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sglist_count_mbuf_epg</code>(<var class="Fa" style="white-space: nowrap;">struct - mbuf *m</var>, <var class="Fa" style="white-space: nowrap;">size_t - offset</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sglist_count_vmpages</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - *m</var>, <var class="Fa" style="white-space: nowrap;">size_t pgoff</var>, - <var class="Fa" style="white-space: nowrap;">size_t len</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sglist_free</code>(<var class="Fa" style="white-space: nowrap;">struct - sglist *sg</var>);</p> -<p class="Pp"><var class="Ft">struct sglist *</var> - <br/> - <code class="Fn">sglist_hold</code>(<var class="Fa" style="white-space: nowrap;">struct - sglist *sg</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sglist_init</code>(<var class="Fa" style="white-space: nowrap;">struct - sglist *sg</var>, <var class="Fa" style="white-space: nowrap;">int - maxsegs</var>, <var class="Fa" style="white-space: nowrap;">struct - sglist_seg *segs</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sglist_join</code>(<var class="Fa" style="white-space: nowrap;">struct - sglist *first</var>, <var class="Fa" style="white-space: nowrap;">struct - sglist *second</var>);</p> -<p class="Pp"><var class="Ft">size_t</var> - <br/> - <code class="Fn">sglist_length</code>(<var class="Fa" style="white-space: nowrap;">struct - sglist *sg</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sglist_reset</code>(<var class="Fa" style="white-space: nowrap;">struct - sglist *sg</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sglist_slice</code>(<var class="Fa" style="white-space: nowrap;">struct - sglist *original</var>, <var class="Fa" style="white-space: nowrap;">struct - sglist **slice</var>, <var class="Fa" style="white-space: nowrap;">size_t - offset</var>, <var class="Fa" style="white-space: nowrap;">size_t - length</var>, <var class="Fa" style="white-space: nowrap;">int - mflags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sglist_split</code>(<var class="Fa" style="white-space: nowrap;">struct - sglist *original</var>, <var class="Fa" style="white-space: nowrap;">struct - sglist **head</var>, <var class="Fa" style="white-space: nowrap;">size_t - length</var>, <var class="Fa" style="white-space: nowrap;">int - mflags</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">sglist</code> API manages physical address - ranges. Each list contains one or more elements. Each element contains a - starting physical address and a length. Scatter/gather lists are read-only - while they are shared. If one wishes to alter an existing scatter/gather - list and does not hold the sole reference to the list, then one should - create a new list instead of modifying the existing list.</p> -<p class="Pp">Each scatter/gather list object contains a reference count. New - lists are created with a single reference. New references are obtained by - calling <code class="Nm">sglist_hold</code> and are released by calling - <code class="Nm">sglist_free</code>.</p> -<section class="Ss"> -<h2 class="Ss" id="Allocating_and_Initializing_Lists"><a class="permalink" href="#Allocating_and_Initializing_Lists">Allocating - and Initializing Lists</a></h2> -<p class="Pp">Each <code class="Nm">sglist</code> object consists of a header - structure and a variable-length array of scatter/gather list elements. The - <code class="Nm">sglist_alloc</code> function allocates a new list that - contains a header and <var class="Fa">nsegs</var> scatter/gather list - elements. The <var class="Fa">mflags</var> argument can be set to either - <code class="Dv">M_NOWAIT</code> or <code class="Dv">M_WAITOK</code>.</p> -<p class="Pp">The <code class="Nm">sglist_count</code> function returns the - number of scatter/gather list elements needed to describe the physical - address ranges mapped by a single kernel virtual address range. The kernel - virtual address range starts at <var class="Fa">buf</var> and is - <var class="Fa">len</var> bytes long.</p> -<p class="Pp">The <code class="Nm">sglist_count_mbuf_epg</code> function returns - the number of scatter/gather list elements needed to describe the external - multipage mbuf buffer <var class="Fa">m</var>. The ranges start at an offset - of <var class="Fa">offset</var> relative to the start of the buffer and is - <var class="Fa">len</var> bytes long.</p> -<p class="Pp">The <code class="Nm">sglist_count_vmpages</code> function returns - the number of scatter/gather list elements needed to describe the physical - address ranges of a buffer backed by an array of virtual memory pages - <var class="Fa">m</var>. The buffer starts at an offset of - <var class="Fa">pgoff</var> bytes relative to the first page and is - <var class="Fa">len</var> bytes long.</p> -<p class="Pp">The <code class="Nm">sglist_build</code> function allocates a new - scatter/gather list object that describes the physical address ranges mapped - by a single kernel virtual address range. The kernel virtual address range - starts at <var class="Fa">buf</var> and is <var class="Fa">len</var> bytes - long. The <var class="Fa">mflags</var> argument can be set to either - <code class="Dv">M_NOWAIT</code> or <code class="Dv">M_WAITOK</code>.</p> -<p class="Pp">The <code class="Nm">sglist_clone</code> function returns a copy - of an existing scatter/gather list object <var class="Fa">sg</var>. The - <var class="Fa">mflags</var> argument can be set to either - <code class="Dv">M_NOWAIT</code> or <code class="Dv">M_WAITOK</code>. This - can be used to obtain a private copy of a scatter/gather list before - modifying it.</p> -<p class="Pp">The <code class="Nm">sglist_init</code> function initializes a - scatter/gather list header. The header is pointed to by - <var class="Fa">sg</var> and is initialized to manage an array of - <var class="Fa">maxsegs</var> scatter/gather list elements pointed to by - <var class="Fa">segs</var>. This can be used to initialize a scatter/gather - list header whose storage is not provided by - <code class="Nm">sglist_alloc</code>. In that case, the caller should not - call <code class="Nm">sglist_free</code> to release its own reference and is - responsible for ensuring all other references to the list are dropped before - it releases the storage for <var class="Fa">sg</var> and - <var class="Fa">segs</var>.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Constructing_Scatter/Gather_Lists"><a class="permalink" href="#Constructing_Scatter/Gather_Lists">Constructing - Scatter/Gather Lists</a></h2> -<p class="Pp">The <code class="Nm">sglist</code> API provides several routines - for building a scatter/gather list to describe one or more objects. - Specifically, the <code class="Nm">sglist_append</code> family of routines - can be used to append the physical address ranges described by an object to - the end of a scatter/gather list. All of these routines return 0 on success - or an error on failure. If a request to append an address range to a - scatter/gather list fails, the scatter/gather list will remain - unchanged.</p> -<p class="Pp">The <code class="Nm">sglist_append</code> function appends the - physical address ranges described by a single kernel virtual address range - to the scatter/gather list <var class="Fa">sg</var>. The kernel virtual - address range starts at <var class="Fa">buf</var> and is - <var class="Fa">len</var> bytes long.</p> -<p class="Pp">The <code class="Nm">sglist_append_bio</code> function appends the - physical address ranges described by a single bio <var class="Fa">bp</var> - to the scatter/gather list <var class="Fa">sg</var>.</p> -<p class="Pp">The <code class="Nm">sglist_append_mbuf_epg</code> function - appends the physical address ranges described by the external multipage - <a class="Xr">mbuf(9)</a> buffer <var class="Fa">ext_pgs</var> to the - scatter/gather list <var class="Fa">sg</var>. The physical address ranges - start at offset <var class="Fa">offset</var> within - <var class="Fa">ext_pgs</var> and continue for <var class="Fa">len</var> - bytes. Note that unlike <code class="Nm">sglist_append_mbuf</code>, - <code class="Nm">sglist_append_mbuf_epg</code> only adds ranges for a single - mbuf, not an entire mbuf chain.</p> -<p class="Pp">The <code class="Nm">sglist_append_mbuf</code> function appends - the physical address ranges described by an entire mbuf chain - <var class="Fa">m</var> to the scatter/gather list - <var class="Fa">sg</var>.</p> -<p class="Pp">The <code class="Nm">sglist_append_single_mbuf</code> function - appends the physical address ranges described by a single mbuf - <var class="Fa">m</var> to the scatter/gather list - <var class="Fa">sg</var>.</p> -<p class="Pp">The <code class="Nm">sglist_append_phys</code> function appends a - single physical address range to the scatter/gather list - <var class="Fa">sg</var>. The physical address range starts at - <var class="Fa">paddr</var> and is <var class="Fa">len</var> bytes long.</p> -<p class="Pp">The <code class="Nm">sglist_append_sglist</code> function appends - physical address ranges described by the scatter/gather list - <var class="Fa">source</var> to the scatter/gather list - <var class="Fa">sg</var>. The physical address ranges start at offset - <var class="Fa">offset</var> within <var class="Fa">source</var> and - continue for <var class="Fa">len</var> bytes.</p> -<p class="Pp">The <code class="Nm">sglist_append_uio</code> function appends the - physical address ranges described by a <a class="Xr">uio(9)</a> object to - the scatter/gather list <var class="Fa">sg</var>. Note that it is the - caller's responsibility to ensure that the pages backing the I/O request are - wired for the lifetime of <var class="Fa">sg</var>. Note also that this - routine does not modify <var class="Fa">uio</var>.</p> -<p class="Pp">The <code class="Nm">sglist_append_user</code> function appends - the physical address ranges described by a single user virtual address range - to the scatter/gather list <var class="Fa">sg</var>. The user virtual - address range is relative to the address space of the thread - <var class="Fa">td</var>. It starts at <var class="Fa">buf</var> and is - <var class="Fa">len</var> bytes long. Note that it is the caller's - responsibility to ensure that the pages backing the user buffer are wired - for the lifetime of <var class="Fa">sg</var>.</p> -<p class="Pp">The <code class="Nm">sglist_append_vmpages</code> function appends - the physical address ranges of a buffer backed by an array of virtual memory - pages <var class="Fa">m</var>. The buffer starts at an offset of - <var class="Fa">pgoff</var> bytes relative to the first page and is - <var class="Fa">len</var> bytes long.</p> -<p class="Pp">The <code class="Nm">sglist_consume_uio</code> function is a - variation of <code class="Nm">sglist_append_uio</code>. As with - <code class="Nm">sglist_append_uio</code>, it appends the physical address - ranges described by <var class="Fa">uio</var> to the scatter/gather list - <var class="Fa">sg</var>. Unlike <code class="Nm">sglist_append_uio</code>, - however, <code class="Nm">sglist_consume_uio</code> modifies the I/O request - to indicate that the appended address ranges have been processed similar to - calling <a class="Xr">uiomove(9)</a>. This routine will only append ranges - that describe up to <var class="Fa">resid</var> total bytes in length. If - the available segments in the scatter/gather list are exhausted before - <var class="Fa">resid</var> bytes are processed, then the - <var class="Fa">uio</var> structure will be updated to reflect the actual - number of bytes processed, and <code class="Nm">sglist_consume_io</code> - will return zero to indicate success. In effect, this function will perform - partial reads or writes. The caller can compare the - <var class="Fa">uio_resid</var> member of <var class="Fa">uio</var> before - and after calling <code class="Nm">sglist_consume_uio</code> to determine - the actual number of bytes processed.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Manipulating_Scatter/Gather_Lists"><a class="permalink" href="#Manipulating_Scatter/Gather_Lists">Manipulating - Scatter/Gather Lists</a></h2> -<p class="Pp">The <code class="Nm">sglist_join</code> function appends physical - address ranges from the scatter/gather list <var class="Fa">second</var> - onto <var class="Fa">first</var> and then resets - <var class="Fa">second</var> to an empty list. It returns zero on success or - an error on failure.</p> -<p class="Pp">The <code class="Nm">sglist_split</code> function splits an - existing scatter/gather list into two lists. The first - <var class="Fa">length</var> bytes described by the list - <var class="Fa">original</var> are moved to a new list - <var class="Fa">*head</var>. If <var class="Fa">original</var> describes a - total address range that is smaller than <var class="Fa">length</var> bytes, - then all of the address ranges will be moved to the new list at - <var class="Fa">*head</var> and <var class="Fa">original</var> will be an - empty list. The caller may supply an existing scatter/gather list in - <var class="Fa">*head</var>. If so, the list must be empty. Otherwise, the - caller may set <var class="Fa">*head</var> to <code class="Dv">NULL</code> - in which case a new scatter/gather list will be allocated. In that case, - <var class="Fa">mflags</var> may be set to either - <code class="Dv">M_NOWAIT</code> or <code class="Dv">M_WAITOK</code>. Note - that since the <var class="Fa">original</var> list is modified by this call, - it must be a private list with no other references. The - <code class="Nm">sglist_split</code> function returns zero on success or an - error on failure.</p> -<p class="Pp">The <code class="Nm">sglist_slice</code> function generates a new - scatter/gather list from a sub-range of an existing scatter/gather list - <var class="Fa">original</var>. The sub-range to extract is specified by the - <var class="Fa">offset</var> and <var class="Fa">length</var> parameters. - The new scatter/gather list is stored in <var class="Fa">*slice</var>. As - with <var class="Fa">head</var> for <code class="Nm">sglist_join</code>, the - caller may either provide an empty scatter/gather list, or it may set - <var class="Fa">*slice</var> to <code class="Dv">NULL</code> in which case - <code class="Nm">sglist_slice</code> will allocate a new list subject to - <var class="Fa">mflags</var>. Unlike <code class="Nm">sglist_split</code>, - <code class="Nm">sglist_slice</code> does not modify - <var class="Fa">original</var> and does not require it to be a private list. - The <code class="Nm">sglist_split</code> function returns zero on success or - an error on failure.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Miscellaneous_Routines"><a class="permalink" href="#Miscellaneous_Routines">Miscellaneous - Routines</a></h2> -<p class="Pp">The <code class="Nm">sglist_reset</code> function clears the - scatter/gather list <var class="Fa">sg</var> so that it no longer maps any - address ranges. This can allow reuse of a single scatter/gather list object - for multiple requests.</p> -<p class="Pp">The <code class="Nm">sglist_length</code> function returns the - total length of the physical address ranges described by the scatter/gather - list <var class="Fa">sg</var>.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Nm">sglist_alloc</code>, - <code class="Nm">sglist_build</code>, and - <code class="Nm">sglist_clone</code> functions return a new scatter/gather - list on success or <code class="Dv">NULL</code> on failure.</p> -<p class="Pp">The <code class="Nm">sglist_append</code> family of functions and - the <code class="Nm">sglist_consume_uio</code>, - <code class="Nm">sglist_join</code>, <code class="Nm">sglist_slice</code>, - and <code class="Nm">sglist_split</code> functions return zero on success or - an error on failure.</p> -<p class="Pp">The <code class="Nm">sglist_count</code> family of functions - return a count of scatter/gather list elements.</p> -<p class="Pp">The <code class="Nm">sglist_length</code> function returns a count - of address space described by a scatter/gather list in bytes.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp">The <code class="Nm">sglist_append</code> functions return the - following errors on failure:</p> -<dl class="Bl-tag"> - <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt> - <dd>The scatter/gather list has zero segments.</dd> - <dt id="EFBIG">[<a class="permalink" href="#EFBIG"><code class="Er">EFBIG</code></a>]</dt> - <dd>There are not enough available segments in the scatter/gather list to - append the specified physical address ranges.</dd> -</dl> -<p class="Pp">The <code class="Nm">sglist_consume_uio</code> function returns - the following error on failure:</p> -<dl class="Bl-tag"> - <dt id="EINVAL~2">[<a class="permalink" href="#EINVAL~2"><code class="Er">EINVAL</code></a>]</dt> - <dd>The scatter/gather list has zero segments.</dd> -</dl> -<p class="Pp">The <code class="Nm">sglist_join</code> function returns the - following error on failure:</p> -<dl class="Bl-tag"> - <dt id="EFBIG~2">[<a class="permalink" href="#EFBIG~2"><code class="Er">EFBIG</code></a>]</dt> - <dd>There are not enough available segments in the scatter/gather list - <var class="Fa">first</var> to append the physical address ranges from - <var class="Fa">second</var>.</dd> -</dl> -<p class="Pp">The <code class="Nm">sglist_slice</code> function returns the - following errors on failure:</p> -<dl class="Bl-tag"> - <dt id="EINVAL~3">[<a class="permalink" href="#EINVAL~3"><code class="Er">EINVAL</code></a>]</dt> - <dd>The <var class="Fa">original</var> scatter/gather list does not describe - enough address space to cover the requested sub-range.</dd> - <dt id="EINVAL~4">[<a class="permalink" href="#EINVAL~4"><code class="Er">EINVAL</code></a>]</dt> - <dd>The caller-supplied scatter/gather list in <var class="Fa">*slice</var> is - not empty.</dd> - <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt> - <dd>An attempt to allocate a new scatter/gather list with - <code class="Dv">M_NOWAIT</code> set in <var class="Fa">mflags</var> - failed.</dd> - <dt id="EFBIG~3">[<a class="permalink" href="#EFBIG~3"><code class="Er">EFBIG</code></a>]</dt> - <dd>There are not enough available segments in the caller-supplied - scatter/gather list in <var class="Fa">*slice</var> to describe the - requested physical address ranges.</dd> -</dl> -<p class="Pp">The <code class="Nm">sglist_split</code> function returns the - following errors on failure:</p> -<dl class="Bl-tag"> - <dt id="EDOOFUS">[<a class="permalink" href="#EDOOFUS"><code class="Er">EDOOFUS</code></a>]</dt> - <dd>The <var class="Fa">original</var> scatter/gather list has more than one - reference.</dd> - <dt id="EINVAL~5">[<a class="permalink" href="#EINVAL~5"><code class="Er">EINVAL</code></a>]</dt> - <dd>The caller-supplied scatter/gather list in <var class="Fa">*head</var> is - not empty.</dd> - <dt id="ENOMEM~2">[<a class="permalink" href="#ENOMEM~2"><code class="Er">ENOMEM</code></a>]</dt> - <dd>An attempt to allocate a new scatter/gather list with - <code class="Dv">M_NOWAIT</code> set in <var class="Fa">mflags</var> - failed.</dd> - <dt id="EFBIG~4">[<a class="permalink" href="#EFBIG~4"><code class="Er">EFBIG</code></a>]</dt> - <dd>There are not enough available segments in the caller-supplied - scatter/gather list in <var class="Fa">*head</var> to describe the - requested physical address ranges.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">g_bio(9)</a>, <a class="Xr">malloc(9)</a>, - <a class="Xr">mbuf(9)</a>, <a class="Xr">uio(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">This API was first introduced in <span class="Ux">FreeBSD - 8.0</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 25, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/shm_map.9 4.html b/static/freebsd/man9/shm_map.9 4.html deleted file mode 100644 index 0fd117c8..00000000 --- a/static/freebsd/man9/shm_map.9 4.html +++ /dev/null @@ -1,163 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SHM_MAP(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SHM_MAP(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">shm_map</code>, <code class="Nm">shm_unmap</code> - — <span class="Nd">map shared memory objects into the kernel's - address space</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mman.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">shm_map</code>(<var class="Fa" style="white-space: nowrap;">struct - file *fp</var>, <var class="Fa" style="white-space: nowrap;">size_t - size</var>, <var class="Fa" style="white-space: nowrap;">off_t offset</var>, - <var class="Fa" style="white-space: nowrap;">void **memp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">shm_unmap</code>(<var class="Fa" style="white-space: nowrap;">struct - file *fp</var>, <var class="Fa" style="white-space: nowrap;">void - *mem</var>, <var class="Fa" style="white-space: nowrap;">size_t - size</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#shm_map"><code class="Fn" id="shm_map">shm_map</code></a>() - and <code class="Fn">shm_unmap</code>() functions provide an API for mapping - shared memory objects into the kernel. Shared memory objects are created by - <a class="Xr">shm_open(2)</a>. These objects can then be passed into the - kernel via file descriptors.</p> -<p class="Pp">A shared memory object cannot be shrunk while it is mapped into - the kernel. This is to avoid invalidating any pages that may be wired into - the kernel's address space. Shared memory objects can still be grown while - mapped into the kernel.</p> -<p class="Pp" id="shm_map~2">To simplify the accounting needed to enforce the - above requirement, callers of this API are required to unmap the entire - region mapped by - <a class="permalink" href="#shm_map~2"><code class="Fn">shm_map</code></a>() - when calling <code class="Fn">shm_unmap</code>(). Unmapping only a portion - of the region is not permitted.</p> -<p class="Pp" id="shm_map~3">The - <a class="permalink" href="#shm_map~3"><code class="Fn">shm_map</code></a>() - function locates the shared memory object associated with the open file - <var class="Fa">fp</var>. It maps the region of that object described by - <var class="Fa">offset</var> and <var class="Fa">size</var> into the - kernel's address space. If it succeeds, <var class="Fa">*memp</var> will be - set to the start of the mapping. All pages for the range will be wired into - memory upon successful return.</p> -<p class="Pp" id="shm_unmap">The - <a class="permalink" href="#shm_unmap"><code class="Fn">shm_unmap</code></a>() - function unmaps a region previously mapped by - <code class="Fn">shm_map</code>(). The <var class="Fa">mem</var> argument - should match the value previously returned in <var class="Fa">*memp</var>, - and the <var class="Fa">size</var> argument should match the value passed to - <code class="Fn">shm_map</code>().</p> -<p class="Pp" id="shm_map~4">Note that - <a class="permalink" href="#shm_map~4"><code class="Fn">shm_map</code></a>() - will not hold an extra reference on the open file <var class="Fa">fp</var> - for the lifetime of the mapping. Instead, the calling code is required to do - this if it wishes to use <code class="Fn">shm_unmap</code>() on the region - in the future.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">shm_map</code>() and - <code class="Fn">shm_unmap</code>() functions return zero on success or an - error on failure.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">The following function accepts a file descriptor for a shared - memory object. It maps the first sixteen kilobytes of the object into the - kernel, performs some work on that address, and then unmaps the address - before returning.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>int -shm_example(int fd) -{ - struct file *fp; - void *mem; - int error; - - error = fget(curthread, fd, CAP_MMAP, &fp); - if (error) - return (error); - error = shm_map(fp, 16384, 0, &mem); - if (error) { - fdrop(fp, curthread); - return (error); - } - - /* Do something with 'mem'. */ - - error = shm_unmap(fp, mem, 16384); - fdrop(fp, curthread); - return (error); -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp">The <code class="Fn">shm_map</code>() function returns the - following errors on failure:</p> -<dl class="Bl-tag"> - <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt> - <dd>The open file <var class="Fa">fp</var> is not a shared memory object.</dd> - <dt id="EINVAL~2">[<a class="permalink" href="#EINVAL~2"><code class="Er">EINVAL</code></a>]</dt> - <dd>The requested region described by <var class="Fa">offset</var> and - <var class="Fa">size</var> extends beyond the end of the shared memory - object.</dd> - <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt> - <dd>Insufficient address space was available.</dd> - <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt> - <dd>The shared memory object could not be mapped due to a protection - error.</dd> - <dt id="EINVAL~3">[<a class="permalink" href="#EINVAL~3"><code class="Er">EINVAL</code></a>]</dt> - <dd>The shared memory object could not be mapped due to some other VM - error.</dd> -</dl> -<p class="Pp">The <code class="Fn">shm_unmap</code>() function returns the - following errors on failure:</p> -<dl class="Bl-tag"> - <dt id="EINVAL~4">[<a class="permalink" href="#EINVAL~4"><code class="Er">EINVAL</code></a>]</dt> - <dd>The open file <var class="Fa">fp</var> is not a shared memory object.</dd> - <dt id="EINVAL~5">[<a class="permalink" href="#EINVAL~5"><code class="Er">EINVAL</code></a>]</dt> - <dd>The address range described by <var class="Fa">mem</var> and - <var class="Fa">size</var> is not a valid address range.</dd> - <dt id="EINVAL~6">[<a class="permalink" href="#EINVAL~6"><code class="Er">EINVAL</code></a>]</dt> - <dd>The address range described by <var class="Fa">mem</var> and - <var class="Fa">size</var> is not backed by the shared memory object - associated with the open file <var class="Fa">fp</var>, or the address - range does not cover the entire mapping of the object.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">shm_open(2)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">This API was first introduced in <span class="Ux">FreeBSD - 10.0</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 14, 2011</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/signal.9 4.html b/static/freebsd/man9/signal.9 4.html deleted file mode 100644 index 5e0e079d..00000000 --- a/static/freebsd/man9/signal.9 4.html +++ /dev/null @@ -1,356 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SIGNAL(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SIGNAL(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">signal</code>, <code class="Nm">SIGADDSET</code>, - <code class="Nm">SIGDELSET</code>, <code class="Nm">SETEMPTYSET</code>, - <code class="Nm">SIGFILLSET</code>, <code class="Nm">SIGISMEMBER</code>, - <code class="Nm">SIGISEMPTY</code>, <code class="Nm">SIGNOTEMPTY</code>, - <code class="Nm">SIGSETEQ</code>, <code class="Nm">SIGSETNEQ</code>, - <code class="Nm">SIGSETOR</code>, <code class="Nm">SIGSETAND</code>, - <code class="Nm">SIGSETNAND</code>, <code class="Nm">SIGSETCANTMASK</code>, - <code class="Nm">SIG_STOPSIGMASK</code>, - <code class="Nm">SIG_CONTSIGMASK</code>, <code class="Nm">SIGPENDING</code>, - <code class="Nm">cursig</code>, <code class="Nm">execsigs</code>, - <code class="Nm">issignal</code>, <code class="Nm">killproc</code>, - <code class="Nm">pgsigio</code>, <code class="Nm">postsig</code>, - <code class="Nm">sigexit</code>, <code class="Nm">siginit</code>, - <code class="Nm">signotify</code>, <code class="Nm">trapsignal</code> - — <span class="Nd">kernel signal functions</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/proc.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/signalvar.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">SIGADDSET</code>(<var class="Fa" style="white-space: nowrap;">sigset_t - set</var>, <var class="Fa" style="white-space: nowrap;">int - signo</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">SIGDELSET</code>(<var class="Fa" style="white-space: nowrap;">sigset_t - set</var>, <var class="Fa" style="white-space: nowrap;">int - signo</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">SIGEMPTYSET</code>(<var class="Fa" style="white-space: nowrap;">sigset_t - set</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">SIGFILLSET</code>(<var class="Fa" style="white-space: nowrap;">sigset_t - set</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">SIGISMEMBER</code>(<var class="Fa" style="white-space: nowrap;">sigset_t - set</var>, <var class="Fa" style="white-space: nowrap;">int - signo</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">SIGISEMPTY</code>(<var class="Fa" style="white-space: nowrap;">sigset_t - set</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">SIGNOTEMPTY</code>(<var class="Fa" style="white-space: nowrap;">sigset_t - set</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">SIGSETEQ</code>(<var class="Fa" style="white-space: nowrap;">sigset_t - set1</var>, <var class="Fa" style="white-space: nowrap;">sigset_t - set2</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">SIGSETNEQ</code>(<var class="Fa" style="white-space: nowrap;">sigset_t - set1</var>, <var class="Fa" style="white-space: nowrap;">sigset_t - set2</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">SIGSETOR</code>(<var class="Fa" style="white-space: nowrap;">sigset_t - set1</var>, <var class="Fa" style="white-space: nowrap;">sigset_t - set2</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">SIGSETAND</code>(<var class="Fa" style="white-space: nowrap;">sigset_t - set1</var>, <var class="Fa" style="white-space: nowrap;">sigset_t - set2</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">SIGSETNAND</code>(<var class="Fa" style="white-space: nowrap;">sigset_t - set1</var>, <var class="Fa" style="white-space: nowrap;">sigset_t - set2</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">SIG_CANTMASK</code>(<var class="Fa" style="white-space: nowrap;">sigset_t - set</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">SIG_STOPSIGMASK</code>(<var class="Fa" style="white-space: nowrap;">sigset_t - set</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">SIG_CONTSIGMASK</code>(<var class="Fa" style="white-space: nowrap;">sigset_t - set</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">SIGPENDING</code>(<var class="Fa" style="white-space: nowrap;">struct - proc *p</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">cursig</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">execsigs</code>(<var class="Fa" style="white-space: nowrap;">struct - proc *p</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">issignal</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">killproc</code>(<var class="Fa" style="white-space: nowrap;">struct - proc *p</var>, <var class="Fa" style="white-space: nowrap;">char - *why</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">pgsigio</code>(<var class="Fa" style="white-space: nowrap;">struct - sigio **sigiop</var>, <var class="Fa" style="white-space: nowrap;">int - sig</var>, <var class="Fa" style="white-space: nowrap;">int - checkctty</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">postsig</code>(<var class="Fa" style="white-space: nowrap;">int - sig</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sigexit</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>, <var class="Fa" style="white-space: nowrap;">int - signum</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">siginit</code>(<var class="Fa" style="white-space: nowrap;">struct - proc *p</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">signotify</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">trapsignal</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>, <var class="Fa" style="white-space: nowrap;">int - sig</var>, <var class="Fa" style="white-space: nowrap;">u_long - code</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#SIGADDSET"><code class="Fn" id="SIGADDSET">SIGADDSET</code></a>() - macro adds <var class="Fa">signo</var> to <var class="Fa">set</var>. No - effort is made to ensure that <var class="Fa">signo</var> is a valid signal - number.</p> -<p class="Pp" id="SIGDELSET">The - <a class="permalink" href="#SIGDELSET"><code class="Fn">SIGDELSET</code></a>() - macro removes <var class="Fa">signo</var> from <var class="Fa">set</var>. No - effort is made to ensure that <var class="Fa">signo</var> is a valid signal - number.</p> -<p class="Pp" id="SIGEMPTYSET">The - <a class="permalink" href="#SIGEMPTYSET"><code class="Fn">SIGEMPTYSET</code></a>() - macro clears all signals in <var class="Fa">set</var>.</p> -<p class="Pp" id="SIGFILLSET">The - <a class="permalink" href="#SIGFILLSET"><code class="Fn">SIGFILLSET</code></a>() - macro sets all signals in <var class="Fa">set</var>.</p> -<p class="Pp" id="SIGISMEMBER">The - <a class="permalink" href="#SIGISMEMBER"><code class="Fn">SIGISMEMBER</code></a>() - macro determines if <var class="Fa">signo</var> is set in - <var class="Fa">set</var>.</p> -<p class="Pp" id="SIGISEMPTY">The - <a class="permalink" href="#SIGISEMPTY"><code class="Fn">SIGISEMPTY</code></a>() - macro determines if <var class="Fa">set</var> does not have any signals - set.</p> -<p class="Pp" id="SIGNOTEMPTY">The - <a class="permalink" href="#SIGNOTEMPTY"><code class="Fn">SIGNOTEMPTY</code></a>() - macro determines if <var class="Fa">set</var> has any signals set.</p> -<p class="Pp" id="SIGSETEQ">The - <a class="permalink" href="#SIGSETEQ"><code class="Fn">SIGSETEQ</code></a>() - macro determines if two signal sets are equal; that is, the same signals are - set in both.</p> -<p class="Pp" id="SIGSETNEQ">The - <a class="permalink" href="#SIGSETNEQ"><code class="Fn">SIGSETNEQ</code></a>() - macro determines if two signal sets differ; that is, if any signal set in - one is not set in the other.</p> -<p class="Pp" id="SIGSETOR">The - <a class="permalink" href="#SIGSETOR"><code class="Fn">SIGSETOR</code></a>() - macro ORs the signals set in <var class="Fa">set2</var> into - <var class="Fa">set1</var>.</p> -<p class="Pp" id="SIGSETAND">The - <a class="permalink" href="#SIGSETAND"><code class="Fn">SIGSETAND</code></a>() - macro ANDs the signals set in <var class="Fa">set2</var> into - <var class="Fa">set1</var>.</p> -<p class="Pp" id="SIGSETNAND">The - <a class="permalink" href="#SIGSETNAND"><code class="Fn">SIGSETNAND</code></a>() - macro NANDs the signals set in <var class="Fa">set2</var> into - <var class="Fa">set1</var>.</p> -<p class="Pp" id="SIG_CANTMASK">The - <a class="permalink" href="#SIG_CANTMASK"><code class="Fn">SIG_CANTMASK</code></a>() - macro clears the <code class="Dv">SIGKILL</code> and - <code class="Dv">SIGSTOP</code> signals from <var class="Fa">set</var>. - These two signals cannot be blocked or caught and - <code class="Fn">SIG_CANTMASK</code>() is used in code where signals are - manipulated to ensure this policy is enforced.</p> -<p class="Pp" id="SIG_STOPSIGMASK">The - <a class="permalink" href="#SIG_STOPSIGMASK"><code class="Fn">SIG_STOPSIGMASK</code></a>() - macro clears the <code class="Dv">SIGSTOP</code>, - <code class="Dv">SIGTSTP</code>, <code class="Dv">SIGTTIN</code>, and - <code class="Dv">SIGTTOU</code> signals from <var class="Fa">set</var>. - <code class="Fn">SIG_STOPSIGMASK</code>() is used to clear stop signals when - a process is waiting for a child to exit or exec, and when a process is - continuing after having been suspended.</p> -<p class="Pp" id="SIG_CONTSIGMASK">The - <a class="permalink" href="#SIG_CONTSIGMASK"><code class="Fn">SIG_CONTSIGMASK</code></a>() - macro clears the <code class="Dv">SIGCONT</code> signal from - <var class="Fa">set</var>. <code class="Fn">SIG_CONTSIGMASK</code>() is - called when a process is stopped.</p> -<p class="Pp" id="SIGPENDING">The - <a class="permalink" href="#SIGPENDING"><code class="Fn">SIGPENDING</code></a>() - macro determines if the given process has any pending signals that are not - masked. If the process has a pending signal and the process is currently - being traced, <code class="Fn">SIGPENDING</code>() will return true even if - the signal is masked.</p> -<p class="Pp" id="cursig">The - <a class="permalink" href="#cursig"><code class="Fn">cursig</code></a>() - function returns the signal number that should be delivered to process - <var class="Fa">td->td_proc</var>. If there are no signals pending, zero - is returned.</p> -<p class="Pp" id="execsigs">The - <a class="permalink" href="#execsigs"><code class="Fn">execsigs</code></a>() - function resets the signal set and signal stack of a process in preparation - for an <a class="Xr">execve(2)</a>. The process lock for - <var class="Fa">p</var> must be held before - <code class="Fn">execsigs</code>() is called.</p> -<p class="Pp" id="issignal">The - <a class="permalink" href="#issignal"><code class="Fn">issignal</code></a>() - function determines if there are any pending signals for process - <var class="Fa">td->td_proc</var> that should be caught, or cause this - process to terminate or interrupt its current system call. If process - <var class="Fa">td->td_proc</var> is currently being traced, ignored - signals will be handled and the process is always stopped. Stop signals are - handled and cleared right away by <code class="Fn">issignal</code>() unless - the process is a member of an orphaned process group and the stop signal - originated from a TTY. The process spin lock for - <var class="Fa">td->td_proc</var> may be acquired and released. The - <var class="Vt">sigacts</var> structure - <var class="Fa">td->td_proc->p_sigacts</var> must be locked before - calling <code class="Fn">issignal</code>() and may be released and - reacquired during the call. The process lock for - <var class="Fa">td->td_proc</var> must be acquired before calling - <code class="Fn">issignal</code>() and may be released and reacquired during - the call. Default signal actions are not taken for system processes and - init.</p> -<p class="Pp" id="killproc">The - <a class="permalink" href="#killproc"><code class="Fn">killproc</code></a>() - function delivers <code class="Dv">SIGKILL</code> to - <var class="Fa">p</var>. <var class="Fa">why</var> is logged as the reason - <a class="permalink" href="#why"><i class="Em" id="why">why</i></a> the - process was killed.</p> -<p class="Pp" id="pgsigio">The - <a class="permalink" href="#pgsigio"><code class="Fn">pgsigio</code></a>() - function sends the signal <var class="Fa">sig</var> to the process or - process group <var class="Fa">sigiop->sio_pgid</var>. If - <var class="Fa">checkctty</var> is non-zero, the signal is only delivered to - processes in the process group that have a controlling terminal. If - <var class="Fa">sigiop->sio_pgid</var> is for a process (> 0), the - lock for <var class="Fa">sigiop->sio_proc</var> is acquired and released. - If <var class="Fa">sigiop->sio_pgid</var> is for a process group (< - 0), the process group lock for <var class="Fa">sigiop->sio_pgrp</var> is - acquired and released. The lock <var class="Va">sigio_lock</var> is acquired - and released.</p> -<p class="Pp" id="postsig">The - <a class="permalink" href="#postsig"><code class="Fn">postsig</code></a>() - function handles the actual delivery of the signal - <var class="Fa">sig</var>. <code class="Fn">postsig</code>() is called from - <code class="Fn">ast</code>() after the kernel has been notified that a - signal should be delivered (via a call to - <code class="Fn">signotify</code>(), which causes the flag - <code class="Dv">PS_NEEDSIGCHK</code> to be set). The process lock for - process that owns <var class="Va">curthread</var> must be held before - <code class="Fn">postsig</code>() is called, and the current process cannot - be 0. The lock for the <var class="Va">p_sigacts</var> field of the current - process must be held before <code class="Fn">postsig</code>() is called, and - may be released and reacquired.</p> -<p class="Pp" id="sigexit">The - <a class="permalink" href="#sigexit"><code class="Fn">sigexit</code></a>() - function causes the process that owns <var class="Fa">td</var> to exit with - a return value of signal number <var class="Fa">sig</var>. If required, the - process will dump core. The process lock for the process that owns - <var class="Fa">td</var> must be held before - <code class="Fn">sigexit</code>() is called.</p> -<p class="Pp" id="siginit">The - <a class="permalink" href="#siginit"><code class="Fn">siginit</code></a>() - function is called during system initialization to cause every signal with a - default property of <code class="Dv">SA_IGNORE</code> (except - <code class="Dv">SIGCONT</code>) to be ignored by <var class="Fa">p</var>. - The process lock for <var class="Fa">p</var> is acquired and released, as is - the lock for sigacts structure <var class="Fa">p->p_sigacts</var>. The - only process that <code class="Fn">siginit</code>() is ever called for is - <var class="Va">proc0</var>.</p> -<p class="Pp" id="signotify">The - <a class="permalink" href="#signotify"><code class="Fn">signotify</code></a>() - function flags that there are unmasked signals pending that - <a class="permalink" href="#ast"><code class="Fn" id="ast">ast</code></a>() - should handle. The process lock for process - <var class="Fa">td->td_proc</var> must be held before - <code class="Fn">signotify</code>() is called, and the thread lock is - acquired and released.</p> -<p class="Pp" id="trapsignal">The - <a class="permalink" href="#trapsignal"><code class="Fn">trapsignal</code></a>() - function sends a signal that is the result of a trap to process - <var class="Fa">td->td_proc</var>. If the process is not being traced and - the signal can be delivered immediately, - <code class="Fn">trapsignal</code>() will deliver it directly; otherwise, - <code class="Fn">trapsignal</code>() will call <a class="Xr">psignal(9)</a> - to cause the signal to be delivered. The process lock for - <var class="Fa">td->td_proc</var> is acquired and released. The lock for - the <var class="Va">p_sigacts</var> field of - <var class="Fa">td->td_proc</var> is acquired and released.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">SIGISMEMBER</code>(), - <code class="Fn">SIGISEMPTY</code>(), <code class="Fn">SIGNOTEMPTY</code>(), - <code class="Fn">SIGSETEQ</code>(), <code class="Fn">SIGSETNEQ</code>(), and - <code class="Fn">SIGPENDING</code>() macros all return non-zero (true) if - the condition they are checking is found to be true; otherwise, zero (false) - is returned.</p> -<p class="Pp">The <code class="Fn">cursig</code>() function returns either a - valid signal number or zero.</p> -<p class="Pp"><code class="Fn">issignal</code>() returns either a valid signal - number or zero.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pgsignal(9)</a>, <a class="Xr">psignal(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@FreeBSD.org">davidc@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 14, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/sleep.9 4.html b/static/freebsd/man9/sleep.9 4.html deleted file mode 100644 index e56521f9..00000000 --- a/static/freebsd/man9/sleep.9 4.html +++ /dev/null @@ -1,307 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SLEEP(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SLEEP(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">msleep</code>, - <code class="Nm">msleep_sbt</code>, <code class="Nm">msleep_spin</code>, - <code class="Nm">msleep_spin_sbt</code>, <code class="Nm">pause</code>, - <code class="Nm">pause_sig</code>, <code class="Nm">pause_sbt</code>, - <code class="Nm">tsleep</code>, <code class="Nm">tsleep_sbt</code>, - <code class="Nm">wakeup</code>, <code class="Nm">wakeup_one</code>, - <code class="Nm">wakeup_any</code> — <span class="Nd">wait for - events</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/proc.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">msleep</code>(<var class="Fa" style="white-space: nowrap;">const - void *chan</var>, <var class="Fa" style="white-space: nowrap;">struct mtx - *mtx</var>, <var class="Fa" style="white-space: nowrap;">int priority</var>, - <var class="Fa" style="white-space: nowrap;">const char *wmesg</var>, - <var class="Fa" style="white-space: nowrap;">int timo</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">msleep_sbt</code>(<var class="Fa" style="white-space: nowrap;">const - void *chan</var>, <var class="Fa" style="white-space: nowrap;">struct mtx - *mtx</var>, <var class="Fa" style="white-space: nowrap;">int priority</var>, - <var class="Fa" style="white-space: nowrap;">const char *wmesg</var>, - <var class="Fa" style="white-space: nowrap;">sbintime_t sbt</var>, - <var class="Fa" style="white-space: nowrap;">sbintime_t pr</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">msleep_spin</code>(<var class="Fa" style="white-space: nowrap;">const - void *chan</var>, <var class="Fa" style="white-space: nowrap;">struct mtx - *mtx</var>, <var class="Fa" style="white-space: nowrap;">const char - *wmesg</var>, <var class="Fa" style="white-space: nowrap;">int - timo</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">msleep_spin_sbt</code>(<var class="Fa" style="white-space: nowrap;">const - void *chan</var>, <var class="Fa" style="white-space: nowrap;">struct mtx - *mtx</var>, <var class="Fa" style="white-space: nowrap;">const char - *wmesg</var>, <var class="Fa" style="white-space: nowrap;">sbintime_t - sbt</var>, <var class="Fa" style="white-space: nowrap;">sbintime_t pr</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pause</code>(<var class="Fa" style="white-space: nowrap;">const - char *wmesg</var>, <var class="Fa" style="white-space: nowrap;">int - timo</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pause_sig</code>(<var class="Fa" style="white-space: nowrap;">const - char *wmesg</var>, <var class="Fa" style="white-space: nowrap;">int - timo</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">pause_sbt</code>(<var class="Fa" style="white-space: nowrap;">const - char *wmesg</var>, <var class="Fa" style="white-space: nowrap;">sbintime_t - sbt</var>, <var class="Fa" style="white-space: nowrap;">sbintime_t pr</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">tsleep</code>(<var class="Fa" style="white-space: nowrap;">const - void *chan</var>, <var class="Fa" style="white-space: nowrap;">int - priority</var>, <var class="Fa" style="white-space: nowrap;">const char - *wmesg</var>, <var class="Fa" style="white-space: nowrap;">int - timo</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">tsleep_sbt</code>(<var class="Fa" style="white-space: nowrap;">const - void *chan</var>, <var class="Fa" style="white-space: nowrap;">int - priority</var>, <var class="Fa" style="white-space: nowrap;">const char - *wmesg</var>, <var class="Fa" style="white-space: nowrap;">sbintime_t - sbt</var>, <var class="Fa" style="white-space: nowrap;">sbintime_t pr</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">wakeup</code>(<var class="Fa" style="white-space: nowrap;">const - void *chan</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">wakeup_one</code>(<var class="Fa" style="white-space: nowrap;">const - void *chan</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">wakeup_any</code>(<var class="Fa" style="white-space: nowrap;">const - void *chan</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The functions - <a class="permalink" href="#tsleep"><code class="Fn" id="tsleep">tsleep</code></a>(), - <code class="Fn">msleep</code>(), <code class="Fn">msleep_spin</code>(), - <code class="Fn">pause</code>(), - <a class="permalink" href="#pause_sig"><code class="Fn" id="pause_sig">pause_sig</code></a>(), - <code class="Fn">pause_sbt</code>(), <code class="Fn">wakeup</code>(), - <code class="Fn">wakeup_one</code>(), and - <code class="Fn">wakeup_any</code>() handle event-based thread blocking. If - a thread must wait for an external event, it is put to sleep by - <code class="Fn">tsleep</code>(), <code class="Fn">msleep</code>(), - <code class="Fn">msleep_spin</code>(), <code class="Fn">pause</code>(), - <code class="Fn">pause_sig</code>(), or <code class="Fn">pause_sbt</code>(). - Threads may also wait using one of the locking primitive sleep routines - <a class="Xr">mtx_sleep(9)</a>, <a class="Xr">rw_sleep(9)</a>, or - <a class="Xr">sx_sleep(9)</a>.</p> -<p class="Pp" id="wakeup">The parameter <var class="Fa">chan</var> is an - arbitrary address that uniquely identifies the event on which the thread is - being put to sleep. All threads sleeping on a single - <var class="Fa">chan</var> are woken up later by - <a class="permalink" href="#wakeup"><code class="Fn">wakeup</code></a>(), - often called from inside an interrupt routine, to indicate that the resource - the thread was blocking on is available now.</p> -<p class="Pp">The parameter <var class="Fa">priority</var> specifies a new - priority for the thread as well as some optional flags. If the new priority - is not 0, then the thread will be made runnable with the specified - <var class="Fa">priority</var> when it resumes. - <code class="Dv">PZERO</code> should never be used, as it is for - compatibility only. A new priority of 0 means to use the thread's current - priority when it is made runnable again.</p> -<p class="Pp">If <var class="Fa">priority</var> includes the - <code class="Dv">PCATCH</code> flag, pending signals are allowed to - interrupt the sleep, otherwise pending signals are ignored during the sleep. - If <code class="Dv">PCATCH</code> is set and a signal becomes pending, - <code class="Er">ERESTART</code> is returned if the current system call - should be restarted if possible, and <code class="Er">EINTR</code> is - returned if the system call should be interrupted by the signal (return - <code class="Er">EINTR</code>).</p> -<p class="Pp">The parameter <var class="Fa">wmesg</var> is a string describing - the sleep condition for tools like <a class="Xr">ps(1)</a>. Due to the - limited space of those programs to display arbitrary strings, this message - should not be longer than 6 characters.</p> -<p class="Pp">The parameter <var class="Fa">timo</var> specifies a timeout for - the sleep. If <var class="Fa">timo</var> is not 0, then the thread will - sleep for at most <var class="Fa">timo</var> <span class="No">/</span> - <var class="Va">hz</var> seconds. If the timeout expires, then the sleep - function will return <code class="Er">EWOULDBLOCK</code>.</p> -<p class="Pp" id="msleep_sbt"><a class="permalink" href="#msleep_sbt"><code class="Fn">msleep_sbt</code></a>(), - <a class="permalink" href="#msleep_spin_sbt"><code class="Fn" id="msleep_spin_sbt">msleep_spin_sbt</code></a>(), - <a class="permalink" href="#pause_sbt"><code class="Fn" id="pause_sbt">pause_sbt</code></a>() - and - <a class="permalink" href="#tsleep_sbt"><code class="Fn" id="tsleep_sbt">tsleep_sbt</code></a>() - functions take <var class="Fa">sbt</var> parameter instead of - <var class="Fa">timo</var>. It allows the caller to specify relative or - absolute wakeup time with higher resolution in form of - <var class="Vt">sbintime_t</var>. The parameter <var class="Fa">pr</var> - allows the caller to specify wanted absolute event precision. The parameter - <var class="Fa">flags</var> allows the caller to pass additional - <a class="permalink" href="#callout_reset_sbt"><code class="Fn" id="callout_reset_sbt">callout_reset_sbt</code></a>() - flags.</p> -<p class="Pp" id="msleep">Several of the sleep functions including - <a class="permalink" href="#msleep"><code class="Fn">msleep</code></a>(), - <code class="Fn">msleep_spin</code>(), and the locking primitive sleep - routines specify an additional lock parameter. The lock will be released - before sleeping and reacquired before the sleep routine returns. If - <var class="Fa">priority</var> includes the <code class="Dv">PDROP</code> - flag, then the lock will not be reacquired before returning. The lock is - used to ensure that a condition can be checked atomically, and that the - current thread can be suspended without missing a change to the condition, - or an associated wakeup. In addition, all of the sleep routines will fully - drop the <var class="Va">Giant</var> mutex (even if recursed) while the - thread is suspended and will reacquire the <var class="Va">Giant</var> mutex - before the function returns. Note that the <var class="Va">Giant</var> mutex - may be specified as the lock to drop. In that case, however, the - <code class="Dv">PDROP</code> flag is not allowed.</p> -<p class="Pp" id="tsleep~2">To avoid lost wakeups, either a lock should be used - to protect against races, or a timeout should be specified to place an upper - bound on the delay due to a lost wakeup. As a result, the - <a class="permalink" href="#tsleep~2"><code class="Fn">tsleep</code></a>() - function should only be invoked with a timeout of 0 when the - <var class="Va">Giant</var> mutex is held.</p> -<p class="Pp" id="msleep~2">The - <a class="permalink" href="#msleep~2"><code class="Fn">msleep</code></a>() - function requires that <var class="Fa">mtx</var> reference a default, i.e. - non-spin, mutex. Its use is deprecated in favor of - <a class="Xr">mtx_sleep(9)</a> which provides identical behavior.</p> -<p class="Pp" id="msleep_spin">The - <a class="permalink" href="#msleep_spin"><code class="Fn">msleep_spin</code></a>() - function requires that <var class="Fa">mtx</var> reference a spin mutex. The - <code class="Fn">msleep_spin</code>() function does not accept a - <var class="Fa">priority</var> parameter and thus does not support changing - the current thread's priority, the <code class="Dv">PDROP</code> flag, or - catching signals via the <code class="Dv">PCATCH</code> flag.</p> -<p class="Pp" id="pause">The - <a class="permalink" href="#pause"><code class="Fn">pause</code></a>() - function is a wrapper around <code class="Fn">tsleep</code>() that suspends - execution of the current thread for the indicated timeout. The thread can - not be awakened early by signals or calls to - <code class="Fn">wakeup</code>(), <code class="Fn">wakeup_one</code>() or - <code class="Fn">wakeup_any</code>(). The - <code class="Fn">pause_sig</code>() function is a variant of - <code class="Fn">pause</code>() which can be awakened early by signals.</p> -<p class="Pp" id="wakeup_one">The - <a class="permalink" href="#wakeup_one"><code class="Fn">wakeup_one</code></a>() - function makes the first highest priority thread in the queue that is - sleeping on the parameter <var class="Fa">chan</var> runnable. This reduces - the load when a large number of threads are sleeping on the same address, - but only one of them can actually do any useful work when made runnable.</p> -<p class="Pp" id="wakeup_one~2">Due to the way it works, the - <a class="permalink" href="#wakeup_one~2"><code class="Fn">wakeup_one</code></a>() - function requires that only related threads sleep on a specific - <var class="Fa">chan</var> address. It is the programmer's responsibility to - choose a unique <var class="Fa">chan</var> value. The older - <code class="Fn">wakeup</code>() function did not require this, though it - was never good practice for threads to share a <var class="Fa">chan</var> - value. When converting from <code class="Fn">wakeup</code>() to - <code class="Fn">wakeup_one</code>(), pay particular attention to ensure - that no other threads wait on the same <var class="Fa">chan</var>.</p> -<p class="Pp" id="wakeup_any">The - <a class="permalink" href="#wakeup_any"><code class="Fn">wakeup_any</code></a>() - function is similar to <code class="Fn">wakeup_one</code>(), except that it - makes runnable last thread on the queue (sleeping less), ignoring fairness. - It can be used when threads sleeping on the <var class="Fa">chan</var> are - known to be identical and there is no reason to be fair.</p> -<p class="Pp">If the timeout given by <var class="Fa">timo</var> or - <var class="Fa">sbt</var> is based on an absolute real-time clock value, - then the thread should copy the global <var class="Va">rtc_generation</var> - into its <var class="Va">td_rtcgen</var> member before reading the RTC. If - the real-time clock is adjusted, these functions will set - <var class="Va">td_rtcgen</var> to zero and return zero. The caller should - reconsider its orientation with the new RTC value.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">When awakened by a call to <code class="Fn">wakeup</code>() or - <code class="Fn">wakeup_one</code>(), if a signal is pending and - <code class="Dv">PCATCH</code> is specified, a non-zero error code is - returned. If the thread is awakened by a call to - <code class="Fn">wakeup</code>() or <code class="Fn">wakeup_one</code>(), - the <code class="Fn">msleep</code>(), <code class="Fn">msleep_spin</code>(), - <code class="Fn">tsleep</code>(), and locking primitive sleep functions - return 0. Zero can also be returned when the real-time clock is adjusted; - see above regarding <var class="Va">td_rtcgen</var>. Otherwise, a non-zero - error code is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp"><code class="Fn">msleep</code>(), - <code class="Fn">msleep_spin</code>(), <code class="Fn">tsleep</code>(), and - the locking primitive sleep functions will fail if:</p> -<dl class="Bl-tag"> - <dt id="EINTR">[<a class="permalink" href="#EINTR"><code class="Er">EINTR</code></a>]</dt> - <dd>The <code class="Dv">PCATCH</code> flag was specified, a signal was - caught, and the system call should be interrupted.</dd> - <dt id="ERESTART">[<a class="permalink" href="#ERESTART"><code class="Er">ERESTART</code></a>]</dt> - <dd>The <code class="Dv">PCATCH</code> flag was specified, a signal was - caught, and the system call should be restarted.</dd> - <dt id="EWOULDBLOCK">[<a class="permalink" href="#EWOULDBLOCK"><code class="Er">EWOULDBLOCK</code></a>]</dt> - <dd>A non-zero timeout was specified and the timeout expired.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ps(1)</a>, <a class="Xr">callout(9)</a>, - <a class="Xr">locking(9)</a>, <a class="Xr">malloc(9)</a>, - <a class="Xr">mi_switch(9)</a>, <a class="Xr">mtx_sleep(9)</a>, - <a class="Xr">rw_sleep(9)</a>, <a class="Xr">sx_sleep(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The functions <code class="Fn">sleep</code>() and - <code class="Fn">wakeup</code>() were present in - <span class="Ux">Version 1 AT&T UNIX</span>. They were probably - also present in the preceding PDP-7 version of <span class="Ux">UNIX</span>. - They were the basic process synchronization model.</p> -<p class="Pp">The <code class="Fn">tsleep</code>() function appeared in - <span class="Ux">4.4BSD</span> and added the parameters - <var class="Fa">wmesg</var> and <var class="Fa">timo</var>. The - <code class="Fn">sleep</code>() function was removed in - <span class="Ux">FreeBSD 2.2</span>. The - <code class="Fn">wakeup_one</code>() function appeared in - <span class="Ux">FreeBSD 2.2</span>. The <code class="Fn">msleep</code>() - function appeared in <span class="Ux">FreeBSD 5.0</span>, and the - <code class="Fn">msleep_spin</code>() function appeared in - <span class="Ux">FreeBSD 6.2</span>. The <code class="Fn">pause</code>() - function appeared in <span class="Ux">FreeBSD 7.0</span>. The - <code class="Fn">pause_sig</code>() function appeared in - <span class="Ux">FreeBSD 12.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Jörg - Wunsch</span> - <<a class="Mt" href="mailto:joerg@FreeBSD.org">joerg@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 19, 2019</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/sleepqueue.9 4.html b/static/freebsd/man9/sleepqueue.9 4.html deleted file mode 100644 index bb93c74b..00000000 --- a/static/freebsd/man9/sleepqueue.9 4.html +++ /dev/null @@ -1,326 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SLEEPQUEUE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SLEEPQUEUE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">init_sleepqueues</code>, - <code class="Nm">sleepq_abort</code>, <code class="Nm">sleepq_add</code>, - <code class="Nm">sleepq_alloc</code>, - <code class="Nm">sleepq_broadcast</code>, - <code class="Nm">sleepq_free</code>, <code class="Nm">sleepq_lock</code>, - <code class="Nm">sleepq_lookup</code>, - <code class="Nm">sleepq_release</code>, - <code class="Nm">sleepq_remove</code>, - <code class="Nm">sleepq_signal</code>, - <code class="Nm">sleepq_set_timeout</code>, - <code class="Nm">sleepq_set_timeout_sbt</code>, - <code class="Nm">sleepq_sleepcnt</code>, - <code class="Nm">sleepq_timedwait</code>, - <code class="Nm">sleepq_timedwait_sig</code>, - <code class="Nm">sleepq_type</code>, <code class="Nm">sleepq_wait</code>, - <code class="Nm">sleepq_wait_sig</code> — <span class="Nd">manage the - queues of sleeping threads</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">sys/sleepqueue.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">init_sleepqueues</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sleepq_abort</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sleepq_add</code>(<var class="Fa" style="white-space: nowrap;">const - void *wchan</var>, <var class="Fa" style="white-space: nowrap;">struct - lock_object *lock</var>, <var class="Fa" style="white-space: nowrap;">const - char *wmesg</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>, <var class="Fa" style="white-space: nowrap;">int - queue</var>);</p> -<p class="Pp"><var class="Ft">struct sleepqueue *</var> - <br/> - <code class="Fn">sleepq_alloc</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sleepq_broadcast</code>(<var class="Fa" style="white-space: nowrap;">const - void *wchan</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>, <var class="Fa" style="white-space: nowrap;">int pri</var>, - <var class="Fa" style="white-space: nowrap;">int queue</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sleepq_free</code>(<var class="Fa" style="white-space: nowrap;">struct - sleepqueue *sq</var>);</p> -<p class="Pp"><var class="Ft">struct sleepqueue *</var> - <br/> - <code class="Fn">sleepq_lookup</code>(<var class="Fa" style="white-space: nowrap;">const - void *wchan</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sleepq_lock</code>(<var class="Fa" style="white-space: nowrap;">const - void *wchan</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sleepq_release</code>(<var class="Fa" style="white-space: nowrap;">const - void *wchan</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sleepq_remove</code>(<var class="Fa" style="white-space: nowrap;">struct - thread *td</var>, <var class="Fa" style="white-space: nowrap;">const void - *wchan</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sleepq_signal</code>(<var class="Fa" style="white-space: nowrap;">const - void *wchan</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>, <var class="Fa" style="white-space: nowrap;">int pri</var>, - <var class="Fa" style="white-space: nowrap;">int queue</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sleepq_set_timeout</code>(<var class="Fa" style="white-space: nowrap;">const - void *wchan</var>, <var class="Fa" style="white-space: nowrap;">int - timo</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sleepq_set_timeout_sbt</code>(<var class="Fa" style="white-space: nowrap;">const - void *wchan</var>, <var class="Fa" style="white-space: nowrap;">sbintime_t - sbt</var>, <var class="Fa" style="white-space: nowrap;">sbintime_t pr</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">u_int</var> - <br/> - <code class="Fn">sleepq_sleepcnt</code>(<var class="Fa" style="white-space: nowrap;">const - void *wchan</var>, <var class="Fa" style="white-space: nowrap;">int - queue</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sleepq_timedwait</code>(<var class="Fa" style="white-space: nowrap;">const - void *wchan</var>, <var class="Fa" style="white-space: nowrap;">int - pri</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sleepq_timedwait_sig</code>(<var class="Fa" style="white-space: nowrap;">const - void *wchan</var>, <var class="Fa" style="white-space: nowrap;">int - pri</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sleepq_type</code>(<var class="Fa" style="white-space: nowrap;">const - void *wchan</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sleepq_wait</code>(<var class="Fa" style="white-space: nowrap;">const - void *wchan</var>, <var class="Fa" style="white-space: nowrap;">int - pri</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sleepq_wait_sig</code>(<var class="Fa" style="white-space: nowrap;">const - void *wchan</var>, <var class="Fa" style="white-space: nowrap;">int - pri</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Sleep queues provide a mechanism for suspending execution of a - thread until some condition is met. Each queue is associated with a specific - wait channel when it is active, and only one queue may be associated with a - wait channel at any given point in time. The implementation of each wait - channel splits its sleepqueue into 2 sub-queues in order to enable some - optimizations on threads' wakeups. An active queue holds a list of threads - that are blocked on the associated wait channel. Threads that are not - blocked on a wait channel have an associated inactive sleep queue. When a - thread blocks on a wait channel it donates its inactive sleep queue to the - wait channel. When a thread is resumed, the wait channel that it was blocked - on gives it an inactive sleep queue for later use.</p> -<p class="Pp" id="sleepq_alloc">The - <a class="permalink" href="#sleepq_alloc"><code class="Fn">sleepq_alloc</code></a>() - function allocates an inactive sleep queue and is used to assign a sleep - queue to a thread during thread creation. The - <a class="permalink" href="#sleepq_free"><code class="Fn" id="sleepq_free">sleepq_free</code></a>() - function frees the resources associated with an inactive sleep queue and is - used to free a queue during thread destruction.</p> -<p class="Pp" id="init_sleepqueues">Active sleep queues are stored in a hash - table hashed on the addresses pointed to by wait channels. Each bucket in - the hash table contains a sleep queue chain. A sleep queue chain contains a - spin mutex and a list of sleep queues that hash to that specific chain. - Active sleep queues are protected by their chain's spin mutex. The - <a class="permalink" href="#init_sleepqueues"><code class="Fn">init_sleepqueues</code></a>() - function initializes the hash table of sleep queue chains.</p> -<p class="Pp" id="sleepq_lock">The - <a class="permalink" href="#sleepq_lock"><code class="Fn">sleepq_lock</code></a>() - function locks the sleep queue chain associated with wait channel - <var class="Fa">wchan</var>.</p> -<p class="Pp" id="sleepq_lookup">The - <a class="permalink" href="#sleepq_lookup"><code class="Fn">sleepq_lookup</code></a>() - returns a pointer to the currently active sleep queue for that wait channel - associated with <var class="Fa">wchan</var> or <code class="Dv">NULL</code> - if there is no active sleep queue associated with argument - <var class="Fa">wchan</var>. It requires the sleep queue chain associated - with <var class="Fa">wchan</var> to have been locked by a prior call to - <code class="Fn">sleepq_lock</code>().</p> -<p class="Pp" id="sleepq_release">The - <a class="permalink" href="#sleepq_release"><code class="Fn">sleepq_release</code></a>() - function unlocks the sleep queue chain associated with - <a class="permalink" href="#wchan"><code class="Fn" id="wchan">wchan</code></a>() - and is primarily useful when aborting a pending sleep request before one of - the wait functions is called.</p> -<p class="Pp" id="sleepq_add">The - <a class="permalink" href="#sleepq_add"><code class="Fn">sleepq_add</code></a>() - function places the current thread on the sleep queue associated with the - wait channel <var class="Fa">wchan</var>. The sleep queue chain associated - with argument <var class="Fa">wchan</var> must be locked by a prior call to - <code class="Fn">sleepq_lock</code>() when this function is called. If a - lock is specified via the <var class="Fa">lock</var> argument, and if the - kernel was compiled with <code class="Cd">options INVARIANTS</code>, then - the sleep queue code will perform extra checks to ensure that the lock is - used by all threads sleeping on <var class="Fa">wchan</var>. The - <var class="Fa">wmesg</var> parameter should be a short description of - <var class="Fa">wchan</var>. The <var class="Fa">flags</var> parameter is a - bitmask consisting of the type of sleep queue being slept on and zero or - more optional flags. The <var class="Fa">queue</var> parameter specifies the - sub-queue, in which the contending thread will be inserted.</p> -<p class="Pp">There are currently three types of sleep queues:</p> -<p class="Pp"></p> -<dl class="Bl-tag Bl-compact"> - <dt id="SLEEPQ_CONDVAR"><a class="permalink" href="#SLEEPQ_CONDVAR"><code class="Dv">SLEEPQ_CONDVAR</code></a></dt> - <dd>A sleep queue used to implement condition variables.</dd> - <dt id="SLEEPQ_SLEEP"><a class="permalink" href="#SLEEPQ_SLEEP"><code class="Dv">SLEEPQ_SLEEP</code></a></dt> - <dd>A sleep queue used to implement <a class="Xr">sleep(9)</a>, - <a class="Xr">wakeup(9)</a> and <a class="Xr">wakeup_one(9)</a>.</dd> - <dt id="SLEEPQ_PAUSE"><a class="permalink" href="#SLEEPQ_PAUSE"><code class="Dv">SLEEPQ_PAUSE</code></a></dt> - <dd>A sleep queue used to implement <a class="Xr">pause(9)</a>.</dd> -</dl> -<p class="Pp">There are currently two optional flag:</p> -<p class="Pp"></p> -<dl class="Bl-tag Bl-compact"> - <dt id="SLEEPQ_INTERRUPTIBLE"><a class="permalink" href="#SLEEPQ_INTERRUPTIBLE"><code class="Dv">SLEEPQ_INTERRUPTIBLE</code></a></dt> - <dd>The current thread is entering an interruptible sleep.</dd> -</dl> -<dl class="Bl-tag Bl-compact"> - <dt id="SLEEPQ_STOP_ON_BDRY"><a class="permalink" href="#SLEEPQ_STOP_ON_BDRY"><code class="Dv">SLEEPQ_STOP_ON_BDRY</code></a></dt> - <dd>When thread is entering an interruptible sleep, do not stop it upon - arrival of stop action, like <code class="Dv">SIGSTOP</code>. Wake it up - instead.</dd> -</dl> -<p class="Pp" id="sleepq_set_timeout">A timeout on the sleep may be specified by - calling - <a class="permalink" href="#sleepq_set_timeout"><code class="Fn">sleepq_set_timeout</code></a>() - after <code class="Fn">sleepq_add</code>(). The <var class="Fa">wchan</var> - parameter should be the same value from the preceding call to - <code class="Fn">sleepq_add</code>(), and the sleep queue chain associated - with <var class="Fa">wchan</var> must have been locked by a prior call to - <code class="Fn">sleepq_lock</code>(). The <var class="Fa">timo</var> - parameter should specify the timeout value in ticks.</p> -<p class="Pp" id="sleepq_set_timeout_sbt"><a class="permalink" href="#sleepq_set_timeout_sbt"><code class="Fn">sleepq_set_timeout_sbt</code></a>() - function takes <var class="Fa">sbt</var> argument instead of - <var class="Fa">timo</var>. It allows to specify relative or absolute wakeup - time with higher resolution in form of <var class="Vt">sbintime_t</var>. The - parameter <var class="Fa">pr</var> allows to specify wanted absolute event - precision. The parameter <var class="Fa">flags</var> allows to pass - additional - <a class="permalink" href="#callout_reset_sbt"><code class="Fn" id="callout_reset_sbt">callout_reset_sbt</code></a>() - flags.</p> -<p class="Pp" id="sleepq_wait">Once the thread is ready to suspend, one of the - wait functions is called to put the current thread to sleep until it is - awakened and to context switch to another thread. The - <a class="permalink" href="#sleepq_wait"><code class="Fn">sleepq_wait</code></a>() - function is used for non-interruptible sleeps that do not have a timeout. - The - <a class="permalink" href="#sleepq_timedwait"><code class="Fn" id="sleepq_timedwait">sleepq_timedwait</code></a>() - function is used for non-interruptible sleeps that have had a timeout set - via <code class="Fn">sleepq_set_timeout</code>(). The - <a class="permalink" href="#sleepq_wait_sig"><code class="Fn" id="sleepq_wait_sig">sleepq_wait_sig</code></a>() - function is used for interruptible sleeps that do not have a timeout. The - <a class="permalink" href="#sleepq_timedwait_sig"><code class="Fn" id="sleepq_timedwait_sig">sleepq_timedwait_sig</code></a>() - function is used for interruptible sleeps that do have a timeout set. The - <var class="Fa">wchan</var> argument to all of the wait functions is the - wait channel being slept on. The sleep queue chain associated with argument - <var class="Fa">wchan</var> needs to have been locked with a prior call to - <code class="Fn">sleepq_lock</code>(). The <var class="Fa">pri</var> - argument is used to set the priority of the thread when it is awakened. If - it is set to zero, the thread's priority is left alone.</p> -<p class="Pp">When the thread is resumed, the wait functions return a non-zero - value if the thread was awakened due to an interrupt other than a signal or - a timeout. If the sleep timed out, then <code class="Er">EWOULDBLOCK</code> - is returned. If the sleep was interrupted by something other than a signal, - then some other return value will be returned.</p> -<p class="Pp" id="sleepq_broadcast">A sleeping thread is normally resumed by the - <a class="permalink" href="#sleepq_broadcast"><code class="Fn">sleepq_broadcast</code></a>() - and - <a class="permalink" href="#sleepq_signal"><code class="Fn" id="sleepq_signal">sleepq_signal</code></a>() - functions. The <code class="Fn">sleepq_signal</code>() function awakens the - highest priority thread sleeping on a wait channel (if SLEEPQ_UNFAIR flag is - set, thread that went to sleep recently) while - <code class="Fn">sleepq_broadcast</code>() awakens all of the threads - sleeping on a wait channel. The <var class="Fa">wchan</var> argument - specifics which wait channel to awaken. The <var class="Fa">flags</var> - argument must match the sleep queue type contained in the - <var class="Fa">flags</var> argument passed to - <code class="Fn">sleepq_add</code>() by the threads sleeping on the wait - channel. If the <var class="Fa">pri</var> argument does not equal -1, then - each thread that is awakened will have its priority raised to - <var class="Fa">pri</var> if it has a lower priority. The sleep queue chain - associated with argument <var class="Fa">wchan</var> must be locked by a - prior call to <code class="Fn">sleepq_lock</code>() before calling any of - these functions. The <var class="Fa">queue</var> argument specifies the - sub-queue, from which threads need to be woken up.</p> -<p class="Pp" id="sleepq_abort">A thread in an interruptible sleep can be - interrupted by another thread via the - <a class="permalink" href="#sleepq_abort"><code class="Fn">sleepq_abort</code></a>() - function. The <var class="Fa">td</var> argument specifies the thread to - interrupt. An individual thread can also be awakened from sleeping on a - specific wait channel via the - <a class="permalink" href="#sleepq_remove"><code class="Fn" id="sleepq_remove">sleepq_remove</code></a>() - function. The <var class="Fa">td</var> argument specifies the thread to - awaken and the <var class="Fa">wchan</var> argument specifies the wait - channel to awaken it from. If the thread <var class="Fa">td</var> is not - blocked on the wait channel <var class="Fa">wchan</var> then this function - will not do anything, even if the thread is asleep on a different wait - channel. This function should only be used if one of the other functions - above is not sufficient. One possible use is waking up a specific thread - from a widely shared sleep channel.</p> -<p class="Pp" id="sleepq_sleepcnt">The - <a class="permalink" href="#sleepq_sleepcnt"><code class="Fn">sleepq_sleepcnt</code></a>() - function offer a simple way to retrieve the number of threads sleeping for - the specified <var class="Fa">queue</var>, given a - <var class="Fa">wchan</var>.</p> -<p class="Pp" id="sleepq_type">The - <a class="permalink" href="#sleepq_type"><code class="Fn">sleepq_type</code></a>() - function returns the type of <var class="Fa">wchan</var> associated to a - sleepqueue.</p> -<p class="Pp" id="sleepq_abort~2">The - <a class="permalink" href="#sleepq_abort~2"><code class="Fn">sleepq_abort</code></a>(), - <code class="Fn">sleepq_broadcast</code>(), and - <code class="Fn">sleepq_signal</code>() functions all return a boolean - value. If the return value is true, then at least one thread was resumed - that is currently swapped out. The caller is responsible for awakening the - scheduler process so that the resumed thread will be swapped back in. This - is done by calling the - <a class="permalink" href="#kick_proc0"><code class="Fn" id="kick_proc0">kick_proc0</code></a>() - function after releasing the sleep queue chain lock via a call to - <code class="Fn">sleepq_release</code>().</p> -<p class="Pp">The sleep queue interface is currently used to implement the - <a class="Xr">sleep(9)</a> and <a class="Xr">condvar(9)</a> interfaces. - Almost all other code in the kernel should use one of those interfaces - rather than manipulating sleep queues directly.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">callout(9)</a>, <a class="Xr">condvar(9)</a>, - <a class="Xr">runqueue(9)</a>, <a class="Xr">scheduler(9)</a>, - <a class="Xr">sleep(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 19, 2019</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/smr.9 3.html b/static/freebsd/man9/smr.9 3.html deleted file mode 100644 index 662b447e..00000000 --- a/static/freebsd/man9/smr.9 3.html +++ /dev/null @@ -1,234 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SMR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SMR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">smr</code> — <span class="Nd">safe memory - reclamation for lock-free data structures</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/smr.h</a>></code></p> -<p class="Pp"><var class="Ft">smr_seq_t</var> - <br/> - <code class="Fn">smr_advance</code>(<var class="Fa">smr_t smr</var>);</p> -<p class="Pp"><var class="Ft">smr_t</var> - <br/> - <code class="Fn">smr_create</code>(<var class="Fa">const char - *name</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">smr_destroy</code>(<var class="Fa">smr_t smr</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">smr_enter</code>(<var class="Fa">smr_t smr</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">smr_exit</code>(<var class="Fa">smr_t smr</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">smr_poll</code>(<var class="Fa">smr_t smr</var>, - <var class="Fa">smr_seq_t goal</var>, <var class="Fa">bool wait</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">smr_synchronize</code>(<var class="Fa">smr_t smr</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">smr_wait</code>(<var class="Fa">smr_t smr</var>, - <var class="Fa">smr_seq_t goal</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Safe Memory Reclamation (SMR) is a facility which enables the - implementation of memory-safe lock-free data structures. In typical usage, - read accesses to an SMR-protected data structure, such as a hash table or - tree, are performed in a “read section” consisting of code - bracketed by - <a class="permalink" href="#smr_enter"><code class="Fn" id="smr_enter">smr_enter</code></a>() - and - <a class="permalink" href="#smr_exit"><code class="Fn" id="smr_exit">smr_exit</code></a>() - calls, while mutations of the data structure are serialized by a traditional - mutex such as <a class="Xr">mutex(9)</a>. In contrast with reader-writer - locks such as <a class="Xr">rwlock(9)</a>, <a class="Xr">rmlock(9)</a>, and - <a class="Xr">sx(9)</a>, SMR allows readers and writers to access the data - structure concurrently. Readers can always enter a read section immediately - (<code class="Fn">smr_enter</code>() never blocks), so mutations do not - introduce read latency. Furthermore, <code class="Fn">smr_enter</code>() and - <code class="Fn">smr_exit</code>() operate only on per-CPU data and thus - avoid some of the performance problems inherent in the implementation of - traditional reader-writer mutexes. SMR can therefore be a useful building - block for data structures which are accessed frequently but are only rarely - modified.</p> -<p class="Pp">Note that any SMR-protected data structure must be implemented - carefully such that operations behave correctly in the absence of mutual - exclusion between readers and writers. The data structure must be designed - to be lock-free; SMR merely facilitates the implementation, for example by - making it safe to follow dangling pointers and by helping avoid the ABA - problem.</p> -<p class="Pp" id="smr_enter~2">When shared accesses to and mutations of a data - structure can proceed concurrently, writers must take care to ensure that - any items removed from the structure are not freed and recycled while - readers are accessing them in parallel. This requirement results in a - two-phase approach to the removal of items: first, the item is unlinked such - that all pointers to the item are removed from the structure, preventing any - new readers from observing the item. Then, the writer waits until some - mechanism guarantees that no existing readers are still accessing the item. - At that point the memory for that item can be freed and reused safely. SMR - provides this mechanism: readers may access a lock-free data structure in - between calls to the - <a class="permalink" href="#smr_enter~2"><code class="Fn">smr_enter</code></a>() - and - <a class="permalink" href="#smr_exit~2"><code class="Fn" id="smr_exit~2">smr_exit</code></a>() - functions, which together create a read section, and the - <code class="Fn">smr_advance</code>(), <code class="Fn">smr_poll</code>(), - <code class="Fn">smr_wait</code>(), and - <code class="Fn">smr_synchronize</code>() functions can be used to wait for - threads in read sections to finish. All of these functions operate on a - <var class="Ft">smr_t</var> state block which holds both per-CPU and global - state. Readers load global state and modify per-CPU state, while writers - must scan all per-CPU states to detect active readers. SMR is designed to - amortize this cost by batching to give acceptable performance in write-heavy - workloads.</p> -<section class="Ss"> -<h2 class="Ss" id="Readers"><a class="permalink" href="#Readers">Readers</a></h2> -<p class="Pp">Threads enter a read section by calling - <code class="Fn">smr_enter</code>(). Read sections should be short, and many - operations are not permitted while in a read section. Specifically, context - switching is disabled, and thus readers may not acquire blocking mutexes - such as <a class="Xr">mutex(9)</a>. Another consequence of this is that the - thread is pinned to the current CPU for the duration of the read section. - Furthermore, read sections may not be nested: it is incorrect to call - <code class="Fn">smr_enter</code>() with a given <var class="Ft">smr_t</var> - state block when already in a read section for that state block.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="UMA_Integration"><a class="permalink" href="#UMA_Integration">UMA - Integration</a></h2> -<p class="Pp">To simplify the integration of SMR into consumers, the - <a class="Xr">uma(9)</a> kernel memory allocator provides some SMR-specified - facilities. This eliminates a good deal of complexity from the - implementation of consumers and automatically batches write operations.</p> -<p class="Pp" id="uma_zone_set_smr">In typical usage, a UMA zone (created with - the <code class="Dv">UMA_ZONE_SMR</code> flag or initialized with the - <a class="permalink" href="#uma_zone_set_smr"><code class="Fn">uma_zone_set_smr</code></a>() - function) is coupled with a <var class="Ft">smr_t</var> state block. To - insert an item into an SMR-protected data structure, memory is allocated - from the zone using the - <a class="permalink" href="#uma_zalloc_smr"><code class="Fn" id="uma_zalloc_smr">uma_zalloc_smr</code></a>() - function. Insertions and removals are serialized using traditional mutual - exclusion and items are freed using the - <a class="permalink" href="#uma_zfree_smr"><code class="Fn" id="uma_zfree_smr">uma_zfree_smr</code></a>() - function. Read-only lookup operations are performed in SMR read sections. - <code class="Fn">uma_zfree_smr</code>() waits for all active readers which - may be accessing the freed item to finish their read sections before - recycling that item's memory.</p> -<p class="Pp">If the zone has an associated per-item destructor, it will be - invoked at some point when no readers can be accessing a given item. The - destructor can be used to release additional resources associated with the - item. Note however that there is no guarantee that the destructor will be - invoked in a bounded time period.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Writers"><a class="permalink" href="#Writers">Writers</a></h2> -<p class="Pp">Consumers are expected to use SMR in conjunction with UMA and thus - need only make use of the - <a class="permalink" href="#smr_enter~3"><code class="Fn" id="smr_enter~3">smr_enter</code></a>() - and - <a class="permalink" href="#smr_exit~3"><code class="Fn" id="smr_exit~3">smr_exit</code></a>() - functions, and the SMR helper macros defined in - <span class="Pa">sys/smr_types.h</span>. However, an introduction to the - write-side interface of SMR can be useful.</p> -<p class="Pp" id="smr_enter~4">Internally, SMR maintains a global - ‘<code class="Li">write sequence</code>’ number. When entering - a read section, - <a class="permalink" href="#smr_enter~4"><code class="Fn">smr_enter</code></a>() - loads a copy of the write sequence and stores it in per-CPU memory, hence - ‘<code class="Li">observing</code>’ that value. To exit a read - section, this per-CPU memory is overwritten with an invalid value, making - the CPU inactive. Writers perform two operations: advancing the write - sequence number, and polling all CPUs to see whether active readers have - observed a given sequence number. These operations are performed by - <code class="Fn">smr_advance</code>() and - <code class="Fn">smr_poll</code>(), respectively, which do not require - serialization between multiple writers.</p> -<p class="Pp" id="smr_advance">After a writer unlinks an item from a data - structure, it increments the write sequence number and tags the item with - the new value returned by - <a class="permalink" href="#smr_advance"><code class="Fn">smr_advance</code></a>(). - Once all CPUs have observed the new value, the writer can use - <code class="Fn">smr_poll</code>() to deduce that no active readers have - access to the unlinked item, and thus the item is safe to recycle. Because - this pair of operations is relatively expensive, it is generally a good idea - to amortize this cost by accumulating a collection of multiple unlinked - items and tagging the entire batch with a target write sequence number.</p> -<p class="Pp" id="smr_poll"><a class="permalink" href="#smr_poll"><code class="Fn">smr_poll</code></a>() - is a non-blocking operation and returns true only if all active readers are - guaranteed to have observed the target sequence number value. - <a class="permalink" href="#smr_wait"><code class="Fn" id="smr_wait">smr_wait</code></a>() - is a variant of <code class="Fn">smr_poll</code>() which waits until all - CPUs have observed the target sequence number value. - <a class="permalink" href="#smr_synchronize"><code class="Fn" id="smr_synchronize">smr_synchronize</code></a>() - combines <code class="Fn">smr_advance</code>() with - <code class="Fn">smr_wait</code>() to wait for all CPUs to observe a new - write sequence number. This is an expensive operation and should only be - used if polling cannot be deferred in some way.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Memory_Ordering"><a class="permalink" href="#Memory_Ordering">Memory - Ordering</a></h2> -<p class="Pp">The <code class="Fn">smr_enter</code>() function has acquire - semantics, and the <code class="Fn">smr_exit</code>() function has release - semantics. The <code class="Fn">smr_advance</code>(), - <code class="Fn">smr_poll</code>(), <code class="Fn">smr_wait</code>(), and - <code class="Fn">smr_synchronize</code>() functions should not be assumed to - have any guarantees with respect to memory ordering. In practice, some of - these functions have stronger ordering semantics than is stated here, but - this is specific to the implementation and should not be relied upon. See - <a class="Xr">atomic(9)</a> for more details.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1> -<p class="Pp">Outside of <span class="Ux">FreeBSD</span> the acronym SMR - typically refers to a family of algorithms which enable memory-safe - read-only access to a data structure concurrent with modifications to that - data structure. Here, SMR refers to a particular algorithm belonging to this - family, as well as its implementation in <span class="Ux">FreeBSD</span>. - See <span class="Pa">sys/sys/smr.h</span> and - <span class="Pa">sys/kern/subr_smr.c</span> in the - <span class="Ux">FreeBSD</span> source tree for further details on the - algorithm and the context.</p> -<p class="Pp">The acronym SMR is also used to mean "shingled magnetic - recording", a technology used to store data on hard disk drives which - requires operating system support. These two uses of the acronym are - unrelated.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">atomic(9)</a>, <a class="Xr">locking(9)</a>, - <a class="Xr">uma(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The SMR algorithm and its implementation were provided by - <span class="An">Jeff Roberson</span> - <<a class="Mt" href="mailto:jeff@FreeBSD.org">jeff@FreeBSD.org</a>>. - This manual page was written by - <br/> - <span class="An">Mark Johnston</span> - <<a class="Mt" href="mailto:markj@FreeBSD.org">markj@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 17, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/socket.9 4.html b/static/freebsd/man9/socket.9 4.html deleted file mode 100644 index 525c16d0..00000000 --- a/static/freebsd/man9/socket.9 4.html +++ /dev/null @@ -1,563 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SOCKET(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SOCKET(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">socket</code> — <span class="Nd">kernel - socket interface</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/socket.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/socketvar.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">soabort</code>(<var class="Fa" style="white-space: nowrap;">struct - socket *so</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">soaccept</code>(<var class="Fa" style="white-space: nowrap;">struct - socket *so</var>, <var class="Fa" style="white-space: nowrap;">struct - sockaddr *nam</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">socheckuid</code>(<var class="Fa" style="white-space: nowrap;">struct - socket *so</var>, <var class="Fa" style="white-space: nowrap;">uid_t - uid</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sobind</code>(<var class="Fa" style="white-space: nowrap;">struct - socket *so</var>, <var class="Fa" style="white-space: nowrap;">struct - sockaddr *nam</var>, <var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">soclose</code>(<var class="Fa" style="white-space: nowrap;">struct - socket *so</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">soconnect</code>(<var class="Fa" style="white-space: nowrap;">struct - socket *so</var>, <var class="Fa" style="white-space: nowrap;">struct - sockaddr *nam</var>, <var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">socreate</code>(<var class="Fa">int dom</var>, - <var class="Fa">struct socket **aso</var>, <var class="Fa">int type</var>, - <var class="Fa">int proto</var>, <var class="Fa">struct ucred *cred</var>, - <var class="Fa">struct thread *td</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sodisconnect</code>(<var class="Fa" style="white-space: nowrap;">struct - socket *so</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sodtor_set</code>(<var class="Fa">struct socket *so</var>, - <var class="Fa">void (*func)(struct socket *)</var>);</p> -<p class="Pp"><var class="Ft">struct sockaddr *</var> - <br/> - <code class="Fn">sodupsockaddr</code>(<var class="Fa" style="white-space: nowrap;">const - struct sockaddr *sa</var>, <var class="Fa" style="white-space: nowrap;">int - mflags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sofree</code>(<var class="Fa" style="white-space: nowrap;">struct - socket *so</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sohasoutofband</code>(<var class="Fa" style="white-space: nowrap;">struct - socket *so</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">solisten</code>(<var class="Fa" style="white-space: nowrap;">struct - socket *so</var>, <var class="Fa" style="white-space: nowrap;">int - backlog</var>, <var class="Fa" style="white-space: nowrap;">struct thread - *td</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">solisten_proto</code>(<var class="Fa" style="white-space: nowrap;">struct - socket *so</var>, <var class="Fa" style="white-space: nowrap;">int - backlog</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">solisten_proto_check</code>(<var class="Fa" style="white-space: nowrap;">struct - socket *so</var>);</p> -<p class="Pp"><var class="Ft">struct socket *</var> - <br/> - <code class="Fn">sonewconn</code>(<var class="Fa" style="white-space: nowrap;">struct - socket *head</var>, <var class="Fa" style="white-space: nowrap;">int - connstatus</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sopoll</code>(<var class="Fa">struct socket *so</var>, - <var class="Fa">int events</var>, <var class="Fa">struct ucred - *active_cred</var>, <var class="Fa">struct thread *td</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sopoll_generic</code>(<var class="Fa">struct socket - *so</var>, <var class="Fa">int events</var>, <var class="Fa">struct ucred - *active_cred</var>, <var class="Fa">struct thread *td</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">soreceive</code>(<var class="Fa">struct socket *so</var>, - <var class="Fa">struct sockaddr **psa</var>, <var class="Fa">struct uio - *uio</var>, <var class="Fa">struct mbuf **mp0</var>, <var class="Fa">struct - mbuf **controlp</var>, <var class="Fa">int *flagsp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">soreceive_stream</code>(<var class="Fa">struct socket - *so</var>, <var class="Fa">struct sockaddr **paddr</var>, - <var class="Fa">struct uio *uio</var>, <var class="Fa">struct mbuf - **mp0</var>, <var class="Fa">struct mbuf **controlp</var>, - <var class="Fa">int *flagsp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">soreceive_dgram</code>(<var class="Fa">struct socket - *so</var>, <var class="Fa">struct sockaddr **paddr</var>, - <var class="Fa">struct uio *uio</var>, <var class="Fa">struct mbuf - **mp0</var>, <var class="Fa">struct mbuf **controlp</var>, - <var class="Fa">int *flagsp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">soreceive_generic</code>(<var class="Fa">struct socket - *so</var>, <var class="Fa">struct sockaddr **paddr</var>, - <var class="Fa">struct uio *uio</var>, <var class="Fa">struct mbuf - **mp0</var>, <var class="Fa">struct mbuf **controlp</var>, - <var class="Fa">int *flagsp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">soreserve</code>(<var class="Fa" style="white-space: nowrap;">struct - socket *so</var>, <var class="Fa" style="white-space: nowrap;">u_long - sndcc</var>, <var class="Fa" style="white-space: nowrap;">u_long - rcvcc</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sorflush</code>(<var class="Fa" style="white-space: nowrap;">struct - socket *so</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sosend</code>(<var class="Fa">struct socket *so</var>, - <var class="Fa">struct sockaddr *addr</var>, <var class="Fa">struct uio - *uio</var>, <var class="Fa">struct mbuf *top</var>, <var class="Fa">struct - mbuf *control</var>, <var class="Fa">int flags</var>, <var class="Fa">struct - thread *td</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sosend_dgram</code>(<var class="Fa">struct socket *so</var>, - <var class="Fa">struct sockaddr *addr</var>, <var class="Fa">struct uio - *uio</var>, <var class="Fa">struct mbuf *top</var>, <var class="Fa">struct - mbuf *control</var>, <var class="Fa">int flags</var>, <var class="Fa">struct - thread *td</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sosend_generic</code>(<var class="Fa">struct socket - *so</var>, <var class="Fa">struct sockaddr *addr</var>, - <var class="Fa">struct uio *uio</var>, <var class="Fa">struct mbuf - *top</var>, <var class="Fa">struct mbuf *control</var>, <var class="Fa">int - flags</var>, <var class="Fa">struct thread *td</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">soshutdown</code>(<var class="Fa" style="white-space: nowrap;">struct - socket *so</var>, <var class="Fa" style="white-space: nowrap;">int - how</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sotoxsocket</code>(<var class="Fa" style="white-space: nowrap;">struct - socket *so</var>, <var class="Fa" style="white-space: nowrap;">struct - xsocket *xso</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">soupcall_clear</code>(<var class="Fa" style="white-space: nowrap;">struct - socket *so</var>, <var class="Fa" style="white-space: nowrap;">int - which</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">soupcall_set</code>(<var class="Fa">struct socket *so</var>, - <var class="Fa">int which</var>, <var class="Fa">int (*func)(struct socket - *, void *, int)</var>, <var class="Fa">void *arg</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sowakeup</code>(<var class="Fa" style="white-space: nowrap;">struct - socket *so</var>, <var class="Fa" style="white-space: nowrap;">struct - sockbuf *sb</var>);</p> -<p class="Pp"><code class="In">#include - <<a class="In">sys/sockopt.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sosetopt</code>(<var class="Fa" style="white-space: nowrap;">struct - socket *so</var>, <var class="Fa" style="white-space: nowrap;">struct - sockopt *sopt</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sogetopt</code>(<var class="Fa" style="white-space: nowrap;">struct - socket *so</var>, <var class="Fa" style="white-space: nowrap;">struct - sockopt *sopt</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sooptcopyin</code>(<var class="Fa" style="white-space: nowrap;">struct - sockopt *sopt</var>, <var class="Fa" style="white-space: nowrap;">void - *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t len</var>, - <var class="Fa" style="white-space: nowrap;">size_t minlen</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sooptcopyout</code>(<var class="Fa" style="white-space: nowrap;">struct - sockopt *sopt</var>, <var class="Fa" style="white-space: nowrap;">const void - *buf</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The kernel <code class="Nm">socket</code> programming interface - permits in-kernel consumers to interact with local and network socket - objects in a manner similar to that permitted using the - <a class="Xr">socket(2)</a> user API. These interfaces are appropriate for - use by distributed file systems and other network-aware kernel services. - While the user API operates on file descriptors, the kernel interfaces - operate directly on <var class="Vt">struct socket</var> pointers. Some - portions of the kernel API exist only to implement the user API, and are not - expected to be used by kernel code. The portions of the socket API used by - socket consumers and implementations of network protocols will differ; some - routines are only useful for protocol implementors.</p> -<p class="Pp">Except where otherwise indicated, <code class="Nm">socket</code> - functions may sleep, and are not appropriate for use in an interrupt thread - context or while holding non-sleepable kernel locks.</p> -<section class="Ss"> -<h2 class="Ss" id="Creating_and_Destroying_Sockets"><a class="permalink" href="#Creating_and_Destroying_Sockets">Creating - and Destroying Sockets</a></h2> -<p class="Pp">A new socket may be created using - <a class="permalink" href="#socreate"><code class="Fn" id="socreate">socreate</code></a>(). - As with <a class="Xr">socket(2)</a>, arguments specify the requested domain, - type, and protocol via <var class="Fa">dom</var>, - <var class="Fa">type</var>, and <var class="Fa">proto</var>. The socket is - returned via <var class="Fa">aso</var> on success. In addition, the - credential used to authorize operations associated with the socket will be - passed via <var class="Fa">cred</var> (and will be cached for the lifetime - of the socket), and the thread performing the operation via - <var class="Fa">td</var>. - <a class="permalink" href="#Warning"><i class="Em" id="Warning">Warning</i></a>: - authorization of the socket creation operation will be performed using the - thread credential for some protocols (such as raw sockets).</p> -<p class="Pp" id="soclose">Sockets may be closed and freed using - <a class="permalink" href="#soclose"><code class="Fn">soclose</code></a>(), - which has similar semantics to <a class="Xr">close(2)</a>.</p> -<p class="Pp" id="soabort">In certain circumstances, it is appropriate to - destroy a socket without waiting for it to disconnect, for which - <a class="permalink" href="#soabort"><code class="Fn">soabort</code></a>() - is used. This is only appropriate for incoming connections which are in a - partially connected state. It must be called on an unreferenced socket, by - the thread which removed the socket from its listen queue, to prevent races. - It will call into protocol code, so no socket locks may be held over the - call. The caller of <code class="Fn">soabort</code>() is responsible for - setting the VNET context. The normal path to freeing a socket is - <a class="permalink" href="#sofree"><code class="Fn" id="sofree">sofree</code></a>(), - which handles reference counting on the socket. It should be called whenever - a reference is released, and also whenever reference flags are cleared in - socket or protocol code. Calls to <code class="Fn">sofree</code>() should - not be made from outside the socket layer; outside callers should use - <code class="Fn">soclose</code>() instead.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Connections_and_Addresses"><a class="permalink" href="#Connections_and_Addresses">Connections - and Addresses</a></h2> -<p class="Pp">The - <a class="permalink" href="#sobind"><code class="Fn" id="sobind">sobind</code></a>() - function is equivalent to the <a class="Xr">bind(2)</a> system call, and - binds the socket <var class="Fa">so</var> to the address - <var class="Fa">nam</var>. The operation would be authorized using the - credential on thread <var class="Fa">td</var>.</p> -<p class="Pp" id="soconnect">The - <a class="permalink" href="#soconnect"><code class="Fn">soconnect</code></a>() - function is equivalent to the <a class="Xr">connect(2)</a> system call, and - initiates a connection on the socket <var class="Fa">so</var> to the address - <var class="Fa">nam</var>. The operation will be authorized using the - credential on thread <var class="Fa">td</var>. Unlike the user system call, - <code class="Fn">soconnect</code>() returns immediately; the caller may - <a class="Xr">msleep(9)</a> on <var class="Fa">so->so_timeo</var> while - holding the socket mutex and waiting for the - <code class="Dv">SS_ISCONNECTING</code> flag to clear or - <var class="Fa">so->so_error</var> to become non-zero. If - <code class="Fn">soconnect</code>() fails, the caller must manually clear - the <code class="Dv">SS_ISCONNECTING</code> flag.</p> -<p class="Pp" id="sodisconnect">A call to - <a class="permalink" href="#sodisconnect"><code class="Fn">sodisconnect</code></a>() - disconnects the socket without closing it.</p> -<p class="Pp" id="soshutdown">The - <a class="permalink" href="#soshutdown"><code class="Fn">soshutdown</code></a>() - function is equivalent to the <a class="Xr">shutdown(2)</a> system call, and - causes part or all of a connection on a socket to be closed down.</p> -<p class="Pp" id="solisten">Sockets are transitioned from non-listening status - to listening with - <a class="permalink" href="#solisten"><code class="Fn">solisten</code></a>().</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Socket_Options"><a class="permalink" href="#Socket_Options">Socket - Options</a></h2> -<p class="Pp">The <code class="Fn">sogetopt</code>() function is equivalent to - the <a class="Xr">getsockopt(2)</a> system call, and retrieves a socket - option on socket <var class="Fa">so</var>. The - <code class="Fn">sosetopt</code>() function is equivalent to the - <a class="Xr">setsockopt(2)</a> system call, and sets a socket option on - socket <var class="Fa">so</var>.</p> -<p class="Pp" id="sogetopt">The second argument in both - <a class="permalink" href="#sogetopt"><code class="Fn">sogetopt</code></a>() - and - <a class="permalink" href="#sosetopt"><code class="Fn" id="sosetopt">sosetopt</code></a>() - is the <var class="Fa">sopt</var> pointer to a <var class="Vt">struct - sopt</var> describing the socket option operation. The caller-allocated - structure must be zeroed, and then have its fields initialized to specify - socket option operation arguments:</p> -<dl class="Bl-tag"> - <dt id="sopt_dir"><var class="Va">sopt_dir</var></dt> - <dd>Set to <code class="Dv">SOPT_SET</code> or - <code class="Dv">SOPT_GET</code> depending on whether this is a get or set - operation.</dd> - <dt id="sopt_level"><var class="Va">sopt_level</var></dt> - <dd>Specify the level in the network stack the operation is targeted at; for - example, <code class="Dv">SOL_SOCKET</code>.</dd> - <dt id="sopt_name"><var class="Va">sopt_name</var></dt> - <dd>Specify the name of the socket option to set.</dd> - <dt id="sopt_val"><var class="Va">sopt_val</var></dt> - <dd>Kernel space pointer to the argument value for the socket option.</dd> - <dt id="sopt_valsize"><var class="Va">sopt_valsize</var></dt> - <dd>Size of the argument value in bytes.</dd> -</dl> -</section> -<section class="Ss"> -<h2 class="Ss" id="Socket_Upcalls"><a class="permalink" href="#Socket_Upcalls">Socket - Upcalls</a></h2> -<p class="Pp">In order for the owner of a socket to be notified when the socket - is ready to send or receive data, an upcall may be registered on the socket. - The upcall is a function that will be called by the socket framework when a - socket buffer associated with the given socket is ready for reading or - writing. - <a class="permalink" href="#soupcall_set"><code class="Fn" id="soupcall_set">soupcall_set</code></a>() - is used to register a socket upcall. The function <var class="Va">func</var> - is registered, and the pointer <var class="Va">arg</var> will be passed as - its second argument when it is called by the framework. The possible values - for <var class="Va">which</var> are <code class="Dv">SO_RCV</code> and - <code class="Dv">SO_SND</code>, which register upcalls for receive and send - events, respectively. The upcall function - <a class="permalink" href="#func"><code class="Fn" id="func">func</code></a>() - must return either <code class="Dv">SU_OK</code> or - <code class="Dv">SU_ISCONNECTED</code>, depending on whether or not a call - to <a class="Xr">soisconnected</a> should be made by the socket framework - after the upcall returns. The upcall <var class="Va">func</var> cannot call - <a class="Xr">soisconnected</a> itself due to lock ordering with the socket - buffer lock. Only <code class="Dv">SO_RCV</code> upcalls should return - <code class="Dv">SU_ISCONNECTED</code>. When a - <code class="Dv">SO_RCV</code> upcall returns - <code class="Dv">SU_ISCONNECTED</code>, the upcall will be removed from the - socket.</p> -<p class="Pp" id="soupcall_clear">Upcalls are removed from their socket by - <a class="permalink" href="#soupcall_clear"><code class="Fn">soupcall_clear</code></a>(). - The <var class="Va">which</var> argument again specifies whether the sending - or receiving upcall is to be cleared, with <code class="Dv">SO_RCV</code> or - <code class="Dv">SO_SND</code>.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Socket_Destructor_Callback"><a class="permalink" href="#Socket_Destructor_Callback">Socket - Destructor Callback</a></h2> -<p class="Pp">A kernel system can use the - <a class="permalink" href="#sodtor_set"><code class="Fn" id="sodtor_set">sodtor_set</code></a>() - function to set a destructor for a socket. The destructor is called when the - socket is about to be freed. The destructor is called before the protocol - detach routine. The destructor can serve as a callback to initiate - additional cleanup actions.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Socket_I/O"><a class="permalink" href="#Socket_I/O">Socket - I/O</a></h2> -<p class="Pp">The - <a class="permalink" href="#soreceive"><code class="Fn" id="soreceive">soreceive</code></a>() - function is equivalent to the <a class="Xr">recvmsg(2)</a> system call, and - attempts to receive bytes of data from the socket <var class="Fa">so</var>, - optionally blocking awaiting for data if none is ready to read. Data may be - retrieved directly to kernel or user memory via the - <var class="Fa">uio</var> argument, or as an mbuf chain returned to the - caller via <var class="Fa">mp0</var>, avoiding a data copy. The - <var class="Fa">uio</var> must always be non-<code class="Dv">NULL</code>. - If <var class="Fa">mp0</var> is non-<code class="Dv">NULL</code>, only the - <var class="Fa">uio_resid</var> of <var class="Fa">uio</var> is used. The - caller may optionally retrieve a socket address on a protocol with the - <code class="Dv">PR_ADDR</code> capability by providing storage via - non-<code class="Dv">NULL</code> <var class="Fa">psa</var> argument. The - caller may optionally retrieve control data mbufs via a - non-<code class="Dv">NULL</code> <var class="Fa">controlp</var> argument. - Optional flags may be passed to <code class="Fn">soreceive</code>() via a - non-<code class="Dv">NULL</code> <var class="Fa">flagsp</var> argument, and - use the same flag name space as the <a class="Xr">recvmsg(2)</a> system - call.</p> -<p class="Pp" id="sosend">The - <a class="permalink" href="#sosend"><code class="Fn">sosend</code></a>() - function is equivalent to the <a class="Xr">sendmsg(2)</a> system call, and - attempts to send bytes of data via the socket <var class="Fa">so</var>, - optionally blocking if data cannot be immediately sent. Data may be sent - directly from kernel or user memory via the <var class="Fa">uio</var> - argument, or as an mbuf chain via <var class="Fa">top</var>, avoiding a data - copy. Only one of the <var class="Fa">uio</var> or <var class="Fa">top</var> - pointers may be non-<code class="Dv">NULL</code>. An optional destination - address may be specified via a non-<code class="Dv">NULL</code> - <var class="Fa">addr</var> argument, which may result in an implicit connect - if supported by the protocol. The caller may optionally send control data - mbufs via a non-<code class="Dv">NULL</code> <var class="Fa">control</var> - argument. Flags may be passed to <code class="Fn">sosend</code>() using the - <var class="Fa">flags</var> argument, and use the same flag name space as - the <a class="Xr">sendmsg(2)</a> system call.</p> -<p class="Pp">Kernel callers running in an interrupt thread context, or with a - mutex held, will wish to use non-blocking sockets and pass the - <code class="Dv">MSG_DONTWAIT</code> flag in order to prevent these - functions from sleeping.</p> -<p class="Pp" id="sopoll">A socket can be queried for readability, writability, - out-of-band data, or end-of-file using - <a class="permalink" href="#sopoll"><code class="Fn">sopoll</code></a>(). - The possible values for <var class="Va">events</var> are as for - <a class="Xr">poll(2)</a>, with symbolic values - <code class="Dv">POLLIN</code>, <code class="Dv">POLLPRI</code>, - <code class="Dv">POLLOUT</code>, <code class="Dv">POLLRDNORM</code>, - <code class="Dv">POLLWRNORM</code>, <code class="Dv">POLLRDBAND</code>, and - <code class="Dv">POLLINGEOF</code> taken from - <code class="In"><<a class="In">sys/poll.h</a>></code>.</p> -<p class="Pp" id="soaccept">Calls to - <a class="permalink" href="#soaccept"><code class="Fn">soaccept</code></a>() - pass through to the protocol's accept routine to accept an incoming - connection.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Socket_Utility_Functions"><a class="permalink" href="#Socket_Utility_Functions">Socket - Utility Functions</a></h2> -<p class="Pp">The uid of a socket's credential may be compared against a - <var class="Va">uid</var> with - <a class="permalink" href="#socheckuid"><code class="Fn" id="socheckuid">socheckuid</code></a>().</p> -<p class="Pp" id="sodupsockaddr">A copy of an existing <var class="Vt">struct - sockaddr</var> may be made using - <a class="permalink" href="#sodupsockaddr"><code class="Fn">sodupsockaddr</code></a>().</p> -<p class="Pp" id="sohasoutofband">Protocol implementations notify the socket - layer of the arrival of out-of-band data using - <a class="permalink" href="#sohasoutofband"><code class="Fn">sohasoutofband</code></a>(), - so that the socket layer can notify socket consumers of the available - data.</p> -<p class="Pp" id="sotoxsocket">An “external-format” version of a - <var class="Vt">struct socket</var> can be created using - <a class="permalink" href="#sotoxsocket"><code class="Fn">sotoxsocket</code></a>(), - suitable for isolating user code from changes in the kernel structure.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Protocol_Implementations"><a class="permalink" href="#Protocol_Implementations">Protocol - Implementations</a></h2> -<p class="Pp">Protocols must supply an implementation for - <code class="Fn">solisten</code>(); such protocol implementations can call - back into the socket layer using - <a class="permalink" href="#solisten_proto_check"><code class="Fn" id="solisten_proto_check">solisten_proto_check</code></a>() - and - <a class="permalink" href="#solisten_proto"><code class="Fn" id="solisten_proto">solisten_proto</code></a>() - to check and set the socket-layer listen state. These callbacks are provided - so that the protocol implementation can order the socket layer and protocol - locks as necessary. Protocols must supply an implementation of - <code class="Fn">soreceive</code>(); the functions - <a class="permalink" href="#soreceive_stream"><code class="Fn" id="soreceive_stream">soreceive_stream</code></a>(), - <a class="permalink" href="#soreceive_dgram"><code class="Fn" id="soreceive_dgram">soreceive_dgram</code></a>(), - and - <a class="permalink" href="#soreceive_generic"><code class="Fn" id="soreceive_generic">soreceive_generic</code></a>() - are supplied for use by such implementations.</p> -<p class="Pp" id="sonewconn">Protocol implementations can use - <a class="permalink" href="#sonewconn"><code class="Fn">sonewconn</code></a>() - to create a socket and attach protocol state to that socket. This can be - used to create new sockets available for <code class="Fn">soaccept</code>() - on a listen socket. The returned socket has a reference count of zero.</p> -<p class="Pp" id="sopoll~2">Protocols must supply an implementation for - <a class="permalink" href="#sopoll~2"><code class="Fn">sopoll</code></a>(); - <a class="permalink" href="#sopoll_generic"><code class="Fn" id="sopoll_generic">sopoll_generic</code></a>() - is provided for the use by protocol implementations.</p> -<p class="Pp" id="sosend_dgram">The functions - <a class="permalink" href="#sosend_dgram"><code class="Fn">sosend_dgram</code></a>() - and - <a class="permalink" href="#sosend_generic"><code class="Fn" id="sosend_generic">sosend_generic</code></a>() - are supplied to assist in protocol implementations of - <code class="Fn">sosend</code>().</p> -<p class="Pp" id="soreserve">When a protocol creates a new socket structure, it - is necessary to reserve socket buffer space for that socket, by calling - <a class="permalink" href="#soreserve"><code class="Fn">soreserve</code></a>(). - The rough inverse of this reservation is performed by - <a class="permalink" href="#sorflush"><code class="Fn" id="sorflush">sorflush</code></a>(), - which is called automatically by the socket framework.</p> -<p class="Pp" id="sowakeup">When a protocol needs to wake up threads waiting for - the socket to become ready to read or write, variants of - <a class="permalink" href="#sowakeup"><code class="Fn">sowakeup</code></a>() - are used. The <code class="Fn">sowakeup</code>() function should not be - called directly by protocol code, instead use the wrappers - <a class="permalink" href="#sorwakeup"><code class="Fn" id="sorwakeup">sorwakeup</code></a>(), - <a class="permalink" href="#sorwakeup_locked"><code class="Fn" id="sorwakeup_locked">sorwakeup_locked</code></a>(), - <a class="permalink" href="#sowwakeup"><code class="Fn" id="sowwakeup">sowwakeup</code></a>(), - and - <a class="permalink" href="#sowwakeup_locked"><code class="Fn" id="sowwakeup_locked">sowwakeup_locked</code></a>() - for readers and writers, with the corresponding socket buffer lock not - already locked, or already held, respectively.</p> -<p class="Pp" id="sooptcopyin">The functions - <a class="permalink" href="#sooptcopyin"><code class="Fn">sooptcopyin</code></a>() - and - <a class="permalink" href="#sooptcopyout"><code class="Fn" id="sooptcopyout">sooptcopyout</code></a>() - are useful for transferring <var class="Vt">struct sockopt</var> data - between user and kernel code.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">bind(2)</a>, <a class="Xr">close(2)</a>, - <a class="Xr">connect(2)</a>, <a class="Xr">getsockopt(2)</a>, - <a class="Xr">recv(2)</a>, <a class="Xr">send(2)</a>, - <a class="Xr">setsockopt(2)</a>, <a class="Xr">shutdown(2)</a>, - <a class="Xr">socket(2)</a>, <a class="Xr">ng_ksocket(4)</a>, - <a class="Xr">intr_event(9)</a>, <a class="Xr">msleep(9)</a>, - <a class="Xr">ucred(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <a class="Xr">socket(2)</a> system call appeared in - <span class="Ux">4.2BSD</span>. This manual page was introduced in - <span class="Ux">FreeBSD 7.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Robert - Watson</span> and - <br/> - <span class="An">Benjamin Kaduk</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">The use of explicitly passed credentials, credentials hung from - explicitly passed threads, the credential on - <code class="Dv">curthread</code>, and the cached credential from socket - creation time is inconsistent, and may lead to unexpected behaviour. It is - possible that several of the <var class="Fa">td</var> arguments should be - <var class="Fa">cred</var> arguments, or simply not be present at all.</p> -<p class="Pp">The caller may need to manually clear - <code class="Dv">SS_ISCONNECTING</code> if - <code class="Fn">soconnect</code>() returns an error.</p> -<p class="Pp">The <code class="Dv">MSG_DONTWAIT</code> flag is not implemented - for <code class="Fn">sosend</code>(), and may not always work with - <code class="Fn">soreceive</code>() when zero copy sockets are enabled.</p> -<p class="Pp">This manual page does not describe how to register socket upcalls - or monitor a socket for readability/writability without using blocking - I/O.</p> -<p class="Pp">The <code class="Fn">soref</code>() and - <code class="Fn">sorele</code>() functions are not described, and in most - cases should not be used, due to confusing and potentially incorrect - interactions when <code class="Fn">sorele</code>() is last called after - <code class="Fn">soclose</code>().</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 6, 2022</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/stack.9 4.html b/static/freebsd/man9/stack.9 4.html deleted file mode 100644 index d54d5f4a..00000000 --- a/static/freebsd/man9/stack.9 4.html +++ /dev/null @@ -1,174 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">STACK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">STACK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">stack</code> — <span class="Nd">kernel - thread stack tracing routines</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/stack.h</a>></code></p> -<p class="Pp">In the kernel configuration file: - <br/> - <code class="Cd">options DDB</code> - <br/> - <code class="Cd">options STACK</code></p> -<p class="Pp"> - <br/> - <var class="Ft">struct stack *</var> - <br/> - <code class="Fn">stack_create</code>(<var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">stack_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct - stack *st</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">stack_put</code>(<var class="Fa" style="white-space: nowrap;">struct - stack *st</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t - pc</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">stack_copy</code>(<var class="Fa" style="white-space: nowrap;">const - struct stack *src</var>, <var class="Fa" style="white-space: nowrap;">struct - stack *dst</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">stack_zero</code>(<var class="Fa" style="white-space: nowrap;">struct - stack *st</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">stack_print</code>(<var class="Fa" style="white-space: nowrap;">const - struct stack *st</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">stack_print_ddb</code>(<var class="Fa" style="white-space: nowrap;">const - struct stack *st</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">stack_print_short</code>(<var class="Fa" style="white-space: nowrap;">const - struct stack *st</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">stack_print_short_ddb</code>(<var class="Fa" style="white-space: nowrap;">const - struct stack *st</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">stack_sbuf_print</code>(<var class="Fa" style="white-space: nowrap;">struct - sbuf *sb</var>, <var class="Fa" style="white-space: nowrap;">const struct - stack *st</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">stack_sbuf_print_ddb</code>(<var class="Fa" style="white-space: nowrap;">struct - sbuf *sb</var>, <var class="Fa" style="white-space: nowrap;">const struct - stack *st</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">stack_save</code>(<var class="Fa" style="white-space: nowrap;">struct - stack *st</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">stack_save_td</code>(<var class="Fa" style="white-space: nowrap;">struct - stack *st</var>, <var class="Fa" style="white-space: nowrap;">struct thread - *td</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">stack</code> KPI allows querying of kernel - stack trace information and the automated generation of kernel stack trace - strings for the purposes of debugging and tracing. To use the KPI, at least - one of <code class="Cd">options DDB</code> and <code class="Cd">options - STACK</code> must be compiled into the kernel.</p> -<p class="Pp" id="stack_zero">Each stack trace is described by a - <var class="Vt">struct stack</var>. It can be declared in the usual ways, - including on the stack, and optionally initialized with - <a class="permalink" href="#stack_zero"><code class="Fn">stack_zero</code></a>(), - though this is not necessary before saving a trace. It can also be - dynamically allocated with - <a class="permalink" href="#stack_create"><code class="Fn" id="stack_create">stack_create</code></a>(). - The <var class="Ar">flags</var> argument is passed to - <a class="Xr">malloc(9)</a>. This dynamic allocation must be freed with - <a class="permalink" href="#stack_destroy"><code class="Fn" id="stack_destroy">stack_destroy</code></a>().</p> -<p class="Pp" id="stack_save">A trace of the current thread's kernel call stack - may be captured using - <a class="permalink" href="#stack_save"><code class="Fn">stack_save</code></a>(). - <a class="permalink" href="#stack_save_td"><code class="Fn" id="stack_save_td">stack_save_td</code></a>() - can be used to capture the kernel stack of a caller-specified thread. - Callers of <code class="Fn">stack_save_td</code>() must own the thread lock - of the specified thread, and the thread's stack must not be swapped out. - <code class="Fn">stack_save_td</code>() can capture the kernel stack of a - running thread, though note that this is not implemented on all platforms. - If the thread is running, the caller must also hold the process lock for the - target thread.</p> -<p class="Pp" id="stack_print"><a class="permalink" href="#stack_print"><code class="Fn">stack_print</code></a>() - and - <a class="permalink" href="#stack_print_short"><code class="Fn" id="stack_print_short">stack_print_short</code></a>() - may be used to print a stack trace using the kernel - <a class="Xr">printf(9)</a>, and may sleep as a result of acquiring - <a class="Xr">sx(9)</a> locks in the kernel linker while looking up symbol - names. In locking-sensitive environments, the unsynchronized - <a class="permalink" href="#stack_print_ddb"><code class="Fn" id="stack_print_ddb">stack_print_ddb</code></a>() - and - <a class="permalink" href="#stack_print_short_ddb"><code class="Fn" id="stack_print_short_ddb">stack_print_short_ddb</code></a>() - variants may be invoked. This function bypasses kernel linker locking, - making it usable in <a class="Xr">ddb(4)</a>, but not in a live system where - linker data structures may change.</p> -<p class="Pp" id="stack_sbuf_print"><a class="permalink" href="#stack_sbuf_print"><code class="Fn">stack_sbuf_print</code></a>() - may be used to construct a human-readable string, including conversion - (where possible) from a simple kernel instruction pointer to a named symbol - and offset. The argument <var class="Ar">sb</var> must be an initialized - <code class="Dv">struct sbuf</code> as described in - <a class="Xr">sbuf(9)</a>. This function may sleep if an auto-extending - <code class="Dv">struct sbuf</code> is used, or due to kernel linker - locking. In locking-sensitive environments, such as - <a class="Xr">ddb(4)</a>, the unsynchronized - <a class="permalink" href="#stack_sbuf_print_ddb"><code class="Fn" id="stack_sbuf_print_ddb">stack_sbuf_print_ddb</code></a>() - variant may be invoked to avoid kernel linker locking; it should be used - with a fixed-length sbuf.</p> -<p class="Pp">The utility functions <code class="Nm">stack_zero</code>, - <code class="Nm">stack_copy</code>, and <code class="Nm">stack_put</code> - may be used to manipulate stack data structures directly.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp"><code class="Fn">stack_put</code>() returns 0 on success. - Otherwise the <code class="Dv">struct stack</code> does not contain space to - record additional frames, and a non-zero value is returned.</p> -<p class="Pp"><code class="Fn">stack_save_td</code>() returns 0 when the stack - capture was successful and a non-zero error number otherwise. In particular, - <code class="Er">EBUSY</code> is returned if the thread was running in user - mode at the time that the capture was attempted, and - <code class="Er">EOPNOTSUPP</code> is returned if the operation is not - implemented.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">ddb(4)</a>, <a class="Xr">printf(9)</a>, - <a class="Xr">sbuf(9)</a>, <a class="Xr">sx(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">stack</code> function suite was created by - <span class="An">Antoine Brodin</span>. <code class="Nm">stack</code> was - extended by <span class="An">Robert Watson</span> for general-purpose use - outside of <a class="Xr">ddb(4)</a>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 6, 2022</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/store.9 4.html b/static/freebsd/man9/store.9 4.html deleted file mode 100644 index aff016d8..00000000 --- a/static/freebsd/man9/store.9 4.html +++ /dev/null @@ -1,92 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">STORE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">STORE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">store</code>, <code class="Nm">subyte</code>, - <code class="Nm">suword</code> — <span class="Nd">store data to - user-space</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/time.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">subyte</code>(<var class="Fa" style="white-space: nowrap;">volatile - void *base</var>, <var class="Fa" style="white-space: nowrap;">int - byte</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">suword</code>(<var class="Fa" style="white-space: nowrap;">volatile - void *base</var>, <var class="Fa" style="white-space: nowrap;">long - word</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">suword16</code>(<var class="Fa" style="white-space: nowrap;">volatile - void *base</var>, <var class="Fa" style="white-space: nowrap;">int - word</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">suword32</code>(<var class="Fa" style="white-space: nowrap;">volatile - void *base</var>, <var class="Fa" style="white-space: nowrap;">int32_t - word</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">suword64</code>(<var class="Fa" style="white-space: nowrap;">volatile - void *base</var>, <var class="Fa" style="white-space: nowrap;">int64_t - word</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">store</code> functions are designed to copy - small amounts of data to user-space. If the user address is naturally - aligned, then the operation will be performed atomically. Otherwise it may - fail or be performed non-atomically, depending on the platform.</p> -<p class="Pp">The <code class="Nm">store</code> routines provide the following - functionality:</p> -<dl class="Bl-tag"> - <dt id="subyte"><a class="permalink" href="#subyte"><code class="Fn">subyte</code></a>()</dt> - <dd>Stores a byte of data to the user-space address - <span class="Pa">base</span>.</dd> - <dt id="suword"><a class="permalink" href="#suword"><code class="Fn">suword</code></a>()</dt> - <dd>Stores a word of data to the user-space address - <span class="Pa">base</span>.</dd> - <dt id="suword16"><a class="permalink" href="#suword16"><code class="Fn">suword16</code></a>()</dt> - <dd>Stores 16 bits of data to the user-space address - <span class="Pa">base</span>.</dd> - <dt id="suword32"><a class="permalink" href="#suword32"><code class="Fn">suword32</code></a>()</dt> - <dd>Stores 32 bits of data to the user-space address - <span class="Pa">base</span>.</dd> - <dt id="suword64"><a class="permalink" href="#suword64"><code class="Fn">suword64</code></a>()</dt> - <dd>Stores 64 bits of data to the user-space address - <span class="Pa">base</span>.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Nm">store</code> functions return 0 on success or - -1 on failure.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">copy(9)</a>, <a class="Xr">fetch(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 22, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/style.9 3.html b/static/freebsd/man9/style.9 3.html deleted file mode 100644 index 4371bdc1..00000000 --- a/static/freebsd/man9/style.9 3.html +++ /dev/null @@ -1,783 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">STYLE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">STYLE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">style</code> — <span class="Nd">kernel - source file style guide</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This file specifies the preferred style for kernel source files in - the <span class="Ux">FreeBSD</span> source tree. It is also a guide for the - preferred userland code style. The preferred line width is 80 characters, - but some exceptions are made when a slightly longer line is clearer or - easier to read. Anything that is frequently grepped for, such as diagnostic, - error, or panic messages, should not be broken up over multiple lines - despite this rule. Many of the style rules are implicit in the examples. Be - careful to check the examples before assuming that - <code class="Nm">style</code> is silent on an issue.</p> -<div class="Bd Pp Li"> -<pre>/* - * Style guide for FreeBSD. Based on the CSRG's KNF (Kernel Normal Form). - */ - -/* - * VERY important single-line comments look like this. - */ - -/* Most single-line comments look like this. */ - -// Although they may look like this. - -/* - * Multi-line comments look like this. Make them real sentences. Fill - * them so they look like real paragraphs. - */</pre> -</div> -<p class="Pp">C++ comments may be used in C and C++ code. Single-line comments - should be consistently either C or C++ within a file. Multi-line comments - should also be consistently either C or C++, but may differ from single-line - comments.</p> -<p class="Pp">The copyright header should be a multi-line comment like so:</p> -<div class="Bd Pp Li"> -<pre>/* - * Copyright (c) 1984-2025 John Q. Public - * - * SPDX-License-Identifier: BSD-2-Clause - */</pre> -</div> -<p class="Pp">Comments starting in columns other than the first are never - considered license statements. Write the copyright lines before the - appropriate SPDX-License-Identifier. If the copyright assertion contains the - phrase “<code class="Li">All Rights Reserved</code>” that - should be on the same line as the word - “<code class="Li">Copyright</code>”. You should not insert a - new copyright line between an old copyright line and this phrase. Instead, - you should insert a new copyright phrase after a pre-existing - “<code class="Li">All Rights Reserved</code>” line. When - making changes, it is acceptable to fold an “<code class="Li">All - Rights Reserved</code>” line with each of the - “<code class="Li">Copyright</code>” lines. For files that have - the “<code class="Li">All Rights Reserved</code>” line on the - same line(s) as the word “<code class="Li">Copyright</code>”, - new copyright assertions should be added last. New - “<code class="Li">Copyright</code>” lines should only be added - when making substantial changes to the file, not for trivial changes.</p> -<p class="Pp">After any copyright and license comment, there is a blank line. - Non-C/C++ source files follow the example above, while C/C++ source files - follow the one below. Version control system ID tags should only exist once - in a file (unlike in this one). All VCS (version control system) revision - identification in files obtained from elsewhere should be maintained, - including, where applicable, multiple IDs showing a file's history. In - general, do not edit foreign IDs or their infrastructure. Unless otherwise - wrapped (such as “<code class="Li">#if - defined(LIBC_SCCS)</code>”), enclose both in - “<code class="Li">#if 0 ... #endif</code>” to hide any - uncompilable bits and to keep the IDs out of object files. Only add - “<code class="Li">From: </code>” in front of foreign VCS IDs - if the file is renamed. Add “<code class="Li">From: </code>” - and the <span class="Ux">FreeBSD</span> git hash with full path name if the - file was derived from another <span class="Ux">FreeBSD</span> file and - include relevant copyright info from the original file.</p> -<p class="Pp">Leave one blank line before the header files.</p> -<p class="Pp">Kernel include files (<span class="Pa">sys/*.h</span>) come first. - If either <code class="In"><<a class="In">sys/types.h</a>></code> or - <code class="In"><<a class="In">sys/param.h</a>></code> is needed, - include it before other include files. - (<code class="In"><<a class="In">sys/param.h</a>></code> includes - <code class="In"><<a class="In">sys/types.h</a>></code>; do not - include both.) Next, include - <code class="In"><<a class="In">sys/systm.h</a>></code>, if needed. - The remaining kernel headers should be sorted alphabetically.</p> -<div class="Bd Pp Li"> -<pre>#include <sys/types.h> /* Non-local includes in angle brackets. */ -#include <sys/systm.h> -#include <sys/endian.h> -#include <sys/lock.h> -#include <sys/queue.h></pre> -</div> -<p class="Pp">For a network program, put the network include files next.</p> -<div class="Bd Pp Li"> -<pre>#include <net/if.h> -#include <net/if_dl.h> -#include <net/route.h> -#include <netinet/in.h> -#include <protocols/rwhod.h></pre> -</div> -<p class="Pp">Do not include files from <span class="Pa">/usr/include</span> in - the kernel.</p> -<p class="Pp">Leave a blank line before the next group, the - <span class="Pa">/usr/include</span> files, which should be sorted - alphabetically by name.</p> -<div class="Bd Pp Li"> -<pre>#include <stdio.h></pre> -</div> -<p class="Pp">Global pathnames are defined in - <code class="In"><<a class="In">paths.h</a>></code>. Pathnames local - to the program go in "<span class="Pa">pathnames.h</span>" in the - local directory.</p> -<div class="Bd Pp Li"> -<pre>#include <paths.h></pre> -</div> -<p class="Pp">Leave another blank line before the local include files.</p> -<div class="Bd Pp Li"> -<pre>#include "pathnames.h" /* Local includes in double quotes. */</pre> -</div> -<p class="Pp">Do not <code class="Ic">#define</code> or declare names in the - implementation namespace except for implementing application interfaces.</p> -<p class="Pp">The names of “unsafe” macros (ones that have side - effects), and the names of macros for manifest constants, are all in - uppercase. The expansions of expression-like macros are either a single - token or have outer parentheses. Put a single space or tab character between - the <code class="Ic">#define</code> and the macro name, but be consistent - within a file. If a macro is an inline expansion of a function, the function - name is all in lowercase and the macro has the same name all in uppercase. - Right-justify the backslashes; it makes it easier to read. If the macro - encapsulates a compound statement, enclose it in a - <code class="Ic">do</code> loop, so that it can safely be used in - <code class="Ic">if</code> statements. Any final statement-terminating - semicolon should be supplied by the macro invocation rather than the macro, - to make parsing easier for pretty-printers and editors.</p> -<div class="Bd Pp Li"> -<pre>#define MACRO(x, y) do { \ - variable = (x) + (y); \ - (y) += 2; \ -} while (0)</pre> -</div> -<p class="Pp">When code is conditionally compiled using - <code class="Ic">#ifdef</code> or <code class="Ic">#if</code>, a comment may - be added following the matching <code class="Ic">#endif</code> or - <code class="Ic">#else</code> to permit the reader to easily discern where - conditionally compiled code regions end. This comment should be used only - for (subjectively) long regions, regions greater than 20 lines, or where a - series of nested <code class="Ic">#ifdef 's</code> may be confusing to the - reader. The comment should be separated from the - <code class="Ic">#endif</code> or <code class="Ic">#else</code> by a single - space. For short conditionally compiled regions, a closing comment should - not be used.</p> -<p class="Pp">The comment for <code class="Ic">#endif</code> should match the - expression used in the corresponding <code class="Ic">#if</code> or - <code class="Ic">#ifdef</code>. The comment for - <code class="Ic">#else</code> and <code class="Ic">#elif</code> should match - the inverse of the expression(s) used in the preceding - <code class="Ic">#if</code> and/or <code class="Ic">#elif</code> statements. - In the comments, the subexpression - “<code class="Li">defined(FOO)</code>” is abbreviated as - “<code class="Li">FOO</code>”. For the purposes of comments, - “<code class="Ic">#ifndef</code> <code class="Li">FOO</code>” - is treated as “<code class="Ic">#if</code> - <code class="Li">!defined(FOO)</code>”.</p> -<div class="Bd Pp Li"> -<pre>#ifdef KTRACE -#include <sys/ktrace.h> -#endif - -#ifdef COMPAT_43 -/* A large region here, or other conditional code. */ -#else /* !COMPAT_43 */ -/* Or here. */ -#endif /* COMPAT_43 */ - -#ifndef COMPAT_43 -/* Yet another large region here, or other conditional code. */ -#else /* COMPAT_43 */ -/* Or here. */ -#endif /* !COMPAT_43 */</pre> -</div> -<p class="Pp">The project prefers the use of <span class="St">ISO/IEC 9899:1999 - (“ISO C99”)</span> unsigned integer identifiers of the - form <var class="Vt">uintXX_t</var> rather than the older - <span class="Ux">BSD</span>-style integer identifiers of the form - <var class="Vt">u_intXX_t</var>. New code should use the former, and old - code should be converted to the new form if other major work is being done - in that area and there is no overriding reason to prefer the older - <span class="Ux">BSD</span>-style. Like white-space commits, care should be - taken in making <var class="Vt">uintXX_t</var> only commits.</p> -<p class="Pp">Similarly, the project prefers the use of ISO C99 - <var class="Vt">bool</var> rather than the older <var class="Vt">int</var> - or <var class="Vt">boolean_t</var>. New code should use - <var class="Vt">bool</var>, and old code may be converted if it is - reasonable to do so. Literal values are named <code class="Dv">true</code> - and <code class="Dv">false</code>. These are preferred to the old spellings - <code class="Dv">TRUE</code> and <code class="Dv">FALSE</code>. Userspace - code should include - <code class="In"><<a class="In">stdbool.h</a>></code>, while kernel - code should include - <code class="In"><<a class="In">sys/types.h</a>></code>.</p> -<p class="Pp">Likewise, the project prefers ISO C99 designated initializers when - it makes sense to do so.</p> -<p class="Pp">Enumeration values are all uppercase.</p> -<div class="Bd Pp Li"> -<pre>enum enumtype { ONE, TWO } et;</pre> -</div> -<p class="Pp">The use of internal_underscores in identifiers is preferred over - camelCase or TitleCase.</p> -<p class="Pp">In declarations, do not put any whitespace between asterisks and - adjacent tokens, except for tokens that are identifiers related to types. - (These identifiers are the names of basic types, type qualifiers, and - <code class="Ic">typedef</code>-names other than the one being declared.) - Separate these identifiers from asterisks using a single space.</p> -<p class="Pp">When declaring variables in structures, declare them sorted by - use, then by size (largest to smallest), and then in alphabetical order. The - first category normally does not apply, but there are exceptions. Each one - gets its own line. Try to make the structure readable by aligning the member - names using either one or two tabs depending upon your judgment. You should - use one tab only if it suffices to align at least 90% of the member names. - Names following extremely long types should be separated by a single - space.</p> -<p class="Pp">Major structures should be declared at the top of the file in - which they are used, or in separate header files if they are used in - multiple source files. Use of the structures should be by separate - declarations and should be <code class="Ic">extern</code> if they are - declared in a header file.</p> -<div class="Bd Pp Li"> -<pre>struct foo { - struct foo *next; /* List of active foo. */ - struct mumble amumble; /* Comment for mumble. */ - int bar; /* Try to align the comments. */ - struct verylongtypename *baz; /* Does not fit in 2 tabs. */ -}; -struct foo *foohead; /* Head of global foo list. */</pre> -</div> -<p class="Pp">Use <a class="Xr">queue(3)</a> macros rather than rolling your own - lists, whenever possible. Thus, the previous example would be better - written:</p> -<div class="Bd Pp Li"> -<pre>#include <sys/queue.h> - -struct foo { - LIST_ENTRY(foo) link; /* Use queue macros for foo lists. */ - struct mumble amumble; /* Comment for mumble. */ - int bar; /* Try to align the comments. */ - struct verylongtypename *baz; /* Does not fit in 2 tabs. */ -}; -LIST_HEAD(, foo) foohead; /* Head of global foo list. */</pre> -</div> -<p class="Pp">Avoid using typedefs for structure types. Typedefs are problematic - because they do not properly hide their underlying type; for example you - need to know if the typedef is the structure itself or a pointer to the - structure. In addition they must be declared exactly once, whereas an - incomplete structure type can be mentioned as many times as necessary. - Typedefs are difficult to use in stand-alone header files: the header that - defines the typedef must be included before the header that uses it, or by - the header that uses it (which causes namespace pollution), or there must be - a back-door mechanism for obtaining the typedef.</p> -<p class="Pp">When convention requires a <code class="Ic">typedef</code>, make - its name match the struct tag. Avoid typedefs ending in - “<code class="Li">_t</code>”, except as specified in Standard - C or by POSIX.</p> -<div class="Bd Pp Li"> -<pre>/* Make the structure name match the typedef. */ -typedef struct bar { - int level; -} BAR; -typedef int foo; /* This is foo. */ -typedef const long baz; /* This is baz. */</pre> -</div> -<p class="Pp">All functions are prototyped somewhere.</p> -<p class="Pp">Function prototypes for private functions (i.e., functions not - used elsewhere) go at the top of the first source module. Functions local to - one source module should be declared <code class="Ic">static</code>.</p> -<p class="Pp">Functions used from other parts of the kernel are prototyped in - the relevant include file. Function prototypes should be listed in a logical - order, preferably alphabetical unless there is a compelling reason to use a - different ordering.</p> -<p class="Pp">Functions that are used locally in more than one module go into a - separate header file, e.g., - "<span class="Pa">extern.h</span>".</p> -<p class="Pp">The kernel has a name associated with parameter types, e.g., in - the kernel use:</p> -<div class="Bd Pp Li"> -<pre>void function(int fd);</pre> -</div> -<p class="Pp">In header files visible to userland applications, prototypes that - are visible must use either “protected” names (ones beginning - with an underscore) or no names with the types. It is preferable to use - protected names. E.g., use:</p> -<div class="Bd Pp Li"> -<pre>void function(int);</pre> -</div> -<p class="Pp">or:</p> -<div class="Bd Pp Li"> -<pre>void function(int _fd);</pre> -</div> -<p class="Pp">Prototypes may have an extra space after a tab to enable function - names to line up:</p> -<div class="Bd Pp Li"> -<pre>static char *function(int _arg, const char *_arg2, struct foo *_arg3, - struct bar *_arg4); -static void usage(void); - -/* - * All major routines should have a comment briefly describing what - * they do. The comment before the "main" routine should describe - * what the program does. - */ -int -main(int argc, char *argv[]) -{ - char *ep; - long num; - int ch;</pre> -</div> -<p class="Pp">For consistency, <a class="Xr">getopt(3)</a> should be used to - parse options. Options should be sorted in the <a class="Xr">getopt(3)</a> - call and the <code class="Ic">switch</code> statement, unless parts of the - <code class="Ic">switch</code> cascade. Elements in a - <code class="Ic">switch</code> statement that execute some code and then - cascade to the next case should have a <code class="Li">FALLTHROUGH</code> - comment. Numerical arguments should be checked for accuracy. Code which is - unreachable for non-obvious reasons may be marked /* - <code class="Li">NOTREACHED</code> */.</p> -<div class="Bd Pp Li"> -<pre> while ((ch = getopt(argc, argv, "abNn:")) != -1) - switch (ch) { /* Indent the switch. */ - case 'a': /* Do not indent the case. */ - aflag = 1; /* Indent case body one tab. */ - /* FALLTHROUGH */ - case 'b': - bflag = 1; - break; - case 'N': - Nflag = 1; - break; - case 'n': - num = strtol(optarg, &ep, 10); - if (num <= 0 || *ep != '\0') { - warnx("illegal number, -n argument -- %s", - optarg); - usage(); - } - break; - case '?': - default: - usage(); - } - argc -= optind; - argv += optind;</pre> -</div> -<p class="Pp">Space after keywords (<code class="Ic">if</code>, - <code class="Ic">while</code>, <code class="Ic">for</code>, - <code class="Ic">return</code>, <code class="Ic">switch</code>). Two styles - of braces (‘<code class="Li">{</code>’ and - ‘<code class="Li">}</code>’) are allowed for single line - statements. Either they are used for all single statements, or they are used - only where needed for clarity. Usage within a function should be consistent. - Forever loops are done with <code class="Ic">for</code>'s, not - <code class="Ic">while</code>'s.</p> -<div class="Bd Pp Li"> -<pre> for (p = buf; *p != '\0'; ++p) - ; /* nothing */ - for (;;) - stmt; - for (;;) { - z = a + really + long + statement + that + needs + - two + lines + gets + indented + four + spaces + - on + the + second + and + subsequent + lines; - } - for (;;) { - if (cond) - stmt; - } - if (val != NULL) - val = realloc(val, newsize);</pre> -</div> -<p class="Pp">Parts of a <code class="Ic">for</code> loop may be left empty.</p> -<div class="Bd Pp Li"> -<pre> for (; cnt < 15; cnt++) { - stmt1; - stmt2; - }</pre> -</div> -<p class="Pp">A <code class="Ic">for</code> loop may declare and initialize its - counting variable.</p> -<div class="Bd Pp Li"> -<pre> for (int i = 0; i < 15; i++) { - stmt1; - }</pre> -</div> -<p class="Pp">Indentation is an 8 character tab. Second level indents are four - spaces. If you have to wrap a long statement, put the operator at the end of - the line.</p> -<div class="Bd Pp Li"> -<pre> while (cnt < 20 && this_variable_name_is_too_long && - ep != NULL) - z = a + really + long + statement + that + needs + - two + lines + gets + indented + four + spaces + - on + the + second + and + subsequent + lines;</pre> -</div> -<p class="Pp">Do not add whitespace at the end of a line, and only use tabs - followed by spaces to form the indentation. Do not use more spaces than a - tab will produce and do not use spaces in front of tabs.</p> -<p class="Pp">Closing and opening braces go on the same line as the - <code class="Ic">else</code>. Braces that are not necessary may be left - out.</p> -<div class="Bd Pp Li"> -<pre> if (test) - stmt; - else if (bar) { - stmt; - stmt; - } else - stmt;</pre> -</div> -<p class="Pp">No spaces after function names. Commas have a space after them. No - spaces after ‘<code class="Li">(</code>’ or - ‘<code class="Li">[</code>’ or preceding - ‘<code class="Li">]</code>’ or - ‘<code class="Li">)</code>’ characters.</p> -<div class="Bd Pp Li"> -<pre> error = function(a1, a2); - if (error != 0) - exit(error);</pre> -</div> -<p class="Pp">Unary operators do not require spaces, binary operators do. Do not - use parentheses unless they are required for precedence or unless the - statement is confusing without them. Remember that other people may confuse - easier than you. Do YOU understand the following?</p> -<div class="Bd Pp Li"> -<pre> a = b->c[0] + ~d == (e || f) || g && h ? i : j >> 1; - k = !(l & FLAGS);</pre> -</div> -<p class="Pp">Exits should be 0 on success, or 1 on failure.</p> -<div class="Bd Pp Li"> -<pre> exit(0); /* - * Avoid obvious comments such as - * "Exit 0 on success." - */ -}</pre> -</div> -<p class="Pp">The function type should be on a line by itself preceding the - function. The opening brace of the function body should be on a line by - itself.</p> -<div class="Bd Pp Li"> -<pre>static char * -function(int a1, int a2, float fl, int a4, struct bar *bar) -{</pre> -</div> -<p class="Pp">When declaring variables in functions declare them sorted by size, - then in alphabetical order; multiple ones per line are okay. If a line - overflows reuse the type keyword. Variables may be initialized where - declared especially when they are constant for the rest of the scope. - Declarations may be in any block, but must be placed before statements. - Calls to complicated functions should be avoided when initializing - variables.</p> -<div class="Bd Pp Li"> -<pre> struct foo one, *two; - struct baz *three = bar_get_baz(bar); - double four; - int *five, six; - char *seven, eight, nine, ten, eleven, twelve; - - four = my_complicated_function(a1, f1, a4);</pre> -</div> -<p class="Pp">Do not declare functions inside other functions; ANSI C says that - such declarations have file scope regardless of the nesting of the - declaration. Hiding file declarations in what appears to be a local scope is - undesirable and will elicit complaints from a good compiler.</p> -<p class="Pp" id="sizeof">Casts and <code class="Ic">sizeof</code>'s are not - followed by a space. <code class="Ic">sizeof</code>'s are written with - parenthesis always. The redundant parenthesis rules do not apply to - <a class="permalink" href="#sizeof"><code class="Fn">sizeof</code></a>(<var class="Fa">var</var>) - instances.</p> -<p class="Pp"><code class="Dv">NULL</code> is the preferred null pointer - constant. Use <code class="Dv">NULL</code> instead of (<var class="Vt">type - *</var>)0 or (<var class="Vt">type *</var>)<code class="Dv">NULL</code> in - contexts where the compiler knows the type, e.g., in assignments. Use - (<var class="Vt">type *</var>)<code class="Dv">NULL</code> in other - contexts, in particular for all function args. (Casting is essential for - variadic args and is necessary for other args if the function prototype - might not be in scope.) Test pointers against <code class="Dv">NULL</code>, - e.g., use:</p> -<div class="Bd Pp Li"> -<pre>(p = f()) == NULL</pre> -</div> -<p class="Pp">not:</p> -<div class="Bd Pp Li"> -<pre>!(p = f())</pre> -</div> -<p class="Pp">Do not test without a comparison, or with unary - <code class="Ic">!</code> (except for booleans). For example, use:</p> -<div class="Bd Pp Li"> -<pre>if (*p == '\0')</pre> -</div> -<p class="Pp">not:</p> -<div class="Bd Pp Li"> -<pre>if (!*p)</pre> -</div> -<p class="Pp">Prefer:</p> -<div class="Bd Pp Li"> -<pre>if (count != 0)</pre> -</div> -<p class="Pp">over:</p> -<div class="Bd Pp Li"> -<pre>if (count)</pre> -</div> -<p class="Pp">Routines returning <var class="Vt">void *</var> should not have - their return values cast to any pointer type.</p> -<p class="Pp">Values in <code class="Ic">return</code> statements should be - enclosed in parentheses.</p> -<p class="Pp">Use <a class="Xr">err(3)</a> or <a class="Xr">warn(3)</a>, do not - roll your own.</p> -<div class="Bd Pp Li"> -<pre> if ((four = malloc(sizeof(struct foo))) == NULL) - err(1, (char *)NULL); - if ((six = (int *)overflow()) == NULL) - errx(1, "number overflowed"); - return (eight); -}</pre> -</div> -<p class="Pp">Do not use K&R style declarations or definitions, they are - obsolete and are forbidden in C23. Compilers warn of their use and some - treat them as an error by default. When converting K&R style definitions - to ANSI style, preserve any comments about parameters.</p> -<p class="Pp">Long parameter lists are wrapped with a normal four space - indent.</p> -<p class="Pp">Variable numbers of arguments should look like this:</p> -<div class="Bd Pp Li"> -<pre>#include <stdarg.h> - -void -vaf(const char *fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - STUFF; - va_end(ap); - /* No return needed for void functions. */ -} - -static void -usage(void) -{</pre> -</div> -<p class="Pp">Functions should have local variable declarations first, followed - by one blank line, followed by the first statement. If no local variables - are declared, the first line should be a statement. Older versions of this - <code class="Nm">style</code> document required a blank line before code. - Such lines should be removed when significant changes are made to the - code.</p> -<p class="Pp">Use <a class="Xr">printf(3)</a>, not <a class="Xr">fputs(3)</a>, - <a class="Xr">puts(3)</a>, <a class="Xr">putchar(3)</a>, whatever; it is - faster and usually cleaner, not to mention avoiding stupid bugs.</p> -<p class="Pp">Usage statements should look like the manual pages - <a class="Sx" href="#SYNOPSIS">SYNOPSIS</a>. The usage statement should be - structured in the following order:</p> -<ol class="Bl-enum"> - <li>Options without operands come first, in alphabetical order, inside a - single set of brackets (‘<code class="Li">[</code>’ and - ‘<code class="Li">]</code>’).</li> - <li>Options with operands come next, also in alphabetical order, with each - option and its argument inside its own pair of brackets.</li> - <li>Required arguments (if any) are next, listed in the order they should be - specified on the command line.</li> - <li>Finally, any optional arguments should be listed, listed in the order they - should be specified, and all inside brackets.</li> -</ol> -<p class="Pp">A bar (‘<code class="Li">|</code>’) separates - “either-or” options/arguments, and multiple options/arguments - which are specified together are placed in a single set of brackets.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>"usage: f [-aDde] [-b b_arg] [-m m_arg] req1 req2 [opt1 [opt2]]\n" -"usage: f [-a | -b] [-c [-dEe] [-n number]]\n"</pre> -</div> -<div class="Bd Pp Li"> -<pre> (void)fprintf(stderr, "usage: f [-ab]\n"); - exit(1); -}</pre> -</div> -<p class="Pp">Note that the manual page options description should list the - options in pure alphabetical order. That is, without regard to whether an - option takes arguments or not. The alphabetical ordering should take into - account the case ordering shown above.</p> -<p class="Pp">Whenever possible, code should be run through a code checker - (e.g., various static analyzers or <code class="Nm">cc</code> - <code class="Fl">-Wall</code>) and produce minimal warnings.</p> -<p class="Pp" id="_Static_assert">New code should use - <a class="permalink" href="#_Static_assert"><code class="Fn">_Static_assert</code></a>() - instead of the older - <a class="permalink" href="#CTASSERT"><code class="Fn" id="CTASSERT">CTASSERT</code></a>().</p> -<p class="Pp" id="__predict_true"><a class="permalink" href="#__predict_true"><code class="Fn">__predict_true</code></a>() - and - <a class="permalink" href="#__predict_false"><code class="Fn" id="__predict_false">__predict_false</code></a>() - should only be used in frequently executed code when it makes the code - measurably faster. It is wasteful to make predictions for infrequently run - code, like subsystem initialization. When using branch prediction hints, - atypical error conditions should use - <code class="Fn">__predict_false</code>() (document the exceptions). - Operations that almost always succeed use - <code class="Fn">__predict_true</code>(). Only use the annotation for the - entire if statement, rather than individual clauses. Do not add these - annotations without empirical evidence of the likelihood of the branch.</p> -<p class="Pp">New core kernel code should be compliant with the - <code class="Nm">style</code> guides. The guidelines for third-party - maintained modules and device drivers are more relaxed. Their code is - expected to at least be internally consistent with their style.</p> -<p class="Pp">Stylistic changes, including whitespace ones, complicate the work - of downstream consumers and may impair developers' ability to trace the - history of some changes. Such standalone must be avoided, and should not - span unrelated directories as this increases the chances of conflicts when - merging to stable and release branches (MFCs). On the other hand, when a - significant portion, usually about a half, of some logical unit of code, be - it a function, group of functions, file or group of files, is going to be - modified, developers are encouraged to amend the style of the whole unit as - described in this document. In this case, style changes to otherwise - unmodified code should be committed separately. Style-only commits should be - added to the file <span class="Pa">.git-blame-ignore-revs</span> at the top - of the source repository to hide them from ‘<code class="Li">git - blame</code>’. Comments in this file indicate how to use it. Code - that is approximately <span class="Ux">FreeBSD</span> KNF - <code class="Nm">style</code> compliant in the repository must not diverge - from compliance.</p> -<section class="Ss"> -<h2 class="Ss" id="C++"><a class="permalink" href="#C++">C++</a></h2> -<p class="Pp">KNF style was originally defined as a style for C. C++ introduces - several new idioms which do not have an existing corollary in KNF C such as - inline function definitions in classes. C++ is also not always compatible - with some KNF guidelines such as enclosing return values in parentheses. For - C++ code, FreeBSD aims to follow broadly accepted C++ practices while also - following the general shape of KNF. This section enumerates C++ specific - guidelines that differ from KNF C.</p> -<p class="Pp">The preferred suffixes for C++ source files are - “.cc” and “.hh”. Header files should always use - a suffix, unlike headers from the C++ standard library.</p> -<p class="Pp">Return values should not be enclosed in parentheses. When - converting existing C code to C++, existing return values may remain in - parentheses.</p> -<p class="Pp">The opening curly brace for namespace declarations should be on - the first line similar to structure and class definitions. Nested namespaces - should be declared using a single namespace declaration.</p> -<div class="Bd Pp Li"> -<pre>namespace foo::bar { -}</pre> -</div> -<p class="Pp">Member function declarations should follow the same style used for - standalone function prototypes except that a space should be used between a - function's return type and name.</p> -<p class="Pp">Function definitions at the top level should use a newline after - the function type similar to C function definitions.</p> -<p class="Pp">Nested member function definitions inside of a class, structure, - or union should not use a newline after the function type. Instead, these - should follow the style of member function declarations. This is more common - C++ style and is more compact for small methods such as getters and - setters.</p> -<p class="Pp">Inline functions whose body consists of a single statement may use - a single line for the function body. Inline functions with an empty body - should always use a single line.</p> -<div class="Bd Pp Li"> -<pre>struct widget { - int foo() { return 4; } - int bar(); -}; - -int -widget::bar() -{ - return 6; -}</pre> -</div> -<p class="Pp">Default and deleted methods should be declared as a single - line.</p> -<div class="Bd Pp Li"> -<pre>class box { - ~box() = default; -};</pre> -</div> -<p class="Pp">In template declarations, the <code class="Ic">template</code> - keyword and list of template parameters should be followed by a newline - before the templated declaration.</p> -<div class="Bd Pp Li"> -<pre>template <typename T> -class box { - T data; -};</pre> -</div> -<p class="Pp">The <code class="Ic">&</code> for reference variables should - be placed on the variable name rather than the type similar to the style - used with <code class="Ic">*</code> for pointers.</p> -<div class="Bd Pp Li"> -<pre> int x; - int &xp = x;</pre> -</div> -<p class="Pp">Variables may be declared at any point within a function, not just - at the start of blocks.</p> -<p class="Pp">Standard library containers should be used in preference to - <a class="Xr">queue(3)</a> or <a class="Xr">tree(3)</a> macros.</p> -<p class="Pp"><code class="Ic">nullptr</code> should be used instead of - <code class="Dv">NULL</code> or 0.</p> -<p class="Pp">Use standard library types for managing strings such as - <var class="Vt">std::string</var> and <var class="Vt">std::string_view</var> - rather than <var class="Vt">char *</var> and <var class="Vt">const char - *</var>. C types may be used when interfacing with C code.</p> -<p class="Pp" id="std::make_unique">The <code class="Ic">auto</code> keyword can - be used in various contexts which improve readability. Examples include - iterators, non-trivial types of ranged-for values, and return values of - obvious types, such as <code class="Ic">static_cast</code> or - <a class="permalink" href="#std::make_unique"><code class="Fn">std::make_unique</code></a>(). - Place any qualifiers before <code class="Ic">auto</code>, for example: - <code class="Ic">const auto</code>.</p> -<p class="Pp" id="std::make_unique~2">Use the - <var class="Vt">std::unique_ptr</var> and - <var class="Vt">std::shared_ptr</var> smart pointers to manage the lifetime - of dynamically allocated objects instead of <code class="Ic">new</code> and - <code class="Ic">delete</code>. Construct smart pointers with - <a class="permalink" href="#std::make_unique~2"><code class="Fn">std::make_unique</code></a>() - or - <a class="permalink" href="#std::make_shared"><code class="Fn" id="std::make_shared">std::make_shared</code></a>(). - Do not use <a class="Xr">malloc(3)</a> except when necessary to interface - with C code.</p> -<p class="Pp">Do not import any namespaces with <code class="Ic">using</code> at - global scope in header files. Namespaces other than the - <code class="Ic">std</code> namespace (for example, - <code class="Ic">std::literals</code>) may be imported in source files and - in function scope in header files.</p> -<p class="Pp">Define type aliases using <code class="Ic">using</code> instead of - <code class="Ic">typedef</code>.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="FILES"><a class="permalink" href="#FILES">FILES</a></h1> -<dl class="Bl-tag"> - <dt><span class="Pa">/usr/src/tools/build/checkstyle9.pl</span></dt> - <dd>A script to check for violations of <code class="Nm">style</code> in a - source file.</dd> - <dt><span class="Pa">/usr/src/tools/tools/editing/freebsd.el</span></dt> - <dd>An Emacs plugin to follow the <span class="Ux">FreeBSD</span> - <code class="Nm">style</code> indentation rules.</dd> - <dt><span class="Pa">/usr/src/tools/tools/editing/freebsd.vim</span></dt> - <dd>A Vim plugin to follow the <span class="Ux">FreeBSD</span> - <code class="Nm">style</code> indentation rules.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">indent(1)</a>, <a class="Xr">err(3)</a>, - <a class="Xr">warn(3)</a>, <a class="Xr">style.Makefile(5)</a>, - <a class="Xr">style.mdoc(5)</a>, <a class="Xr">style.lua(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">This manual page was originally based on the - <span class="Pa">src/admin/style/style</span> file from the - <span class="Ux">4.4BSD-Lite2</span> release, with frequent updates to - reflect the current practice and desire of the - <span class="Ux">FreeBSD</span> project. - <span class="Pa">src/admin/style/style</span> is a codification by the CSRG - of the programming style of Ken Thompson and Dennis Ritchie in - <span class="Ux">Version 6 AT&T UNIX</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 28, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/style.lua.9 3.html b/static/freebsd/man9/style.lua.9 3.html deleted file mode 100644 index 94053bfd..00000000 --- a/static/freebsd/man9/style.lua.9 3.html +++ /dev/null @@ -1,101 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">STYLE.LUA(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">STYLE.LUA(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">style.lua</code> — - <span class="Nd"><span class="Ux">FreeBSD</span> lua file style - guide</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This file specifies the preferred style for lua source files in - the <span class="Ux">FreeBSD</span> source tree. Many of the style rules are - implicit in the examples. Be careful to check the examples before assuming - that <code class="Nm">style.lua</code> is silent on an issue.</p> -<p class="Pp">The copyright header should be a series of single-line comments. - Use the single-line comment style for every line in a multi-line - comment.</p> -<p class="Pp">After any copyright header there is a blank line.</p> -<p class="Pp" id="require">The preferred method of including other files and - modules is with - <a class="permalink" href="#require"><code class="Fn">require</code></a>(<var class="Fa">name</var>), - such as:</p> -<div class="Bd Pp Li"> -<pre>-- License block - -config = require("config"); -menu = require("menu"); -password = require("password"); --- One blank line following the module require block</pre> -</div> -<p class="Pp" id="include"><a class="permalink" href="#include"><code class="Fn">include</code></a>() - is generally avoided.</p> -<p class="Pp">Indentation and wrapping should match the guidelines provided by - <a class="Xr">style(9)</a>. Do note that it is ok to wrap much earlier than - 80 columns if readability would otherwise suffer.</p> -<p class="Pp" id="s:method">Where possible, - <a class="permalink" href="#s:method"><code class="Fn">s:method</code></a>(<var class="Fa">...</var>) - is preferred to - <a class="permalink" href="#method"><code class="Fn" id="method">method</code></a>(<var class="Fa">s</var>, - <var class="Fa">...</var>). This is applicable to objects with methods. - String are a commonly-used example of objects with methods.</p> -<p class="Pp">Testing for <var class="Va">nil</var> should be done explicitly, - rather than as a boolean expression. Single-line conditional statements and - loops should be avoided.</p> -<p class="Pp"><code class="Ic">local</code> variables should be preferred to - global variables in module scope. internal_underscores tend to be preferred - for variable identifiers, while camelCase tends to be preferred for function - identifiers.</p> -<p class="Pp">If a table definition spans multiple lines, then the final value - in the table should include the optional terminating comma. For example:</p> -<div class="Bd Pp Li"> -<pre>-- No terminating comma needed for trivial table definitions -local trivial_table = {1, 2, 3, 4} - -local complex_table = { - { - id = "foo", - func = foo_function, -- Trailing comma preferred - }, - { - id = "bar", - func = bar_function, - }, -- Trailing comma preferred -}</pre> -</div> -<p class="Pp">This reduces the chance for errors to be introduced when modifying - more complex tables.</p> -<p class="Pp" id="and">Multiple local variables should not be declared - <a class="permalink" href="#and"><b class="Sy">and</b></a> initialized on a - single line. Lines containing multiple variable declarations without - initialization are ok. Lines containing multiple variable declarations - initialized to a single function call returning a tuple with the same number - of values is also ok.</p> -<p class="Pp" id="should">Initialization - <a class="permalink" href="#should"><b class="Sy">should</b></a> be done at - declaration time as appropriate.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">style(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">This manual page is inspired from the same source as - <a class="Xr">style(9)</a> manual page in - <span class="Ux">FreeBSD</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 25, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/superio.9 4.html b/static/freebsd/man9/superio.9 4.html deleted file mode 100644 index c933e7e5..00000000 --- a/static/freebsd/man9/superio.9 4.html +++ /dev/null @@ -1,195 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SUPERIO(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SUPERIO(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">superio</code>, - <code class="Nm">superio_devid</code>, - <code class="Nm">superio_dev_disable</code>, - <code class="Nm">superio_dev_enable</code>, - <code class="Nm">superio_dev_enabled</code>, - <code class="Nm">superio_find_dev</code>, - <code class="Nm">superio_get_dma</code>, - <code class="Nm">superio_get_iobase</code>, - <code class="Nm">superio_get_irq</code>, - <code class="Nm">superio_get_ldn</code>, - <code class="Nm">superio_get_type</code>, - <code class="Nm">superio_read</code>, <code class="Nm">superio_revid</code>, - <code class="Nm">superio_vendor</code>, - <code class="Nm">superio_write</code> — <span class="Nd">Super I/O - bus interface</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/bus.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">dev/superio/superio.h</a>></code></p> -<p class="Pp"><var class="Ft">uint16_t</var> - <br/> - <code class="Fn">superio_devid</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">superio_dev_disable</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">uint8_t - mask</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">superio_dev_enable</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">uint8_t - mask</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">superio_dev_enabled</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">uint8_t - mask</var>);</p> -<p class="Pp"><var class="Ft">device_t</var> - <br/> - <code class="Fn">superio_find_dev</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">superio_dev_type_t - type</var>, <var class="Fa" style="white-space: nowrap;">int ldn</var>);</p> -<p class="Pp"><var class="Ft">uint8_t</var> - <br/> - <code class="Fn">superio_get_dma</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">uint16_t</var> - <br/> - <code class="Fn">superio_get_iobase</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">uint8_t</var> - <br/> - <code class="Fn">superio_get_irq</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">uint8_t</var> - <br/> - <code class="Fn">superio_get_ldn</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">superio_dev_type_t</var> - <br/> - <code class="Fn">superio_get_type</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">uint8_t</var> - <br/> - <code class="Fn">superio_read</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">uint8_t - reg</var>);</p> -<p class="Pp"><var class="Ft">uint8_t</var> - <br/> - <code class="Fn">superio_revid</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">superio_vendor_t</var> - <br/> - <code class="Fn">superio_vendor</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">superio_write</code>(<var class="Fa" style="white-space: nowrap;">device_t - dev</var>, <var class="Fa" style="white-space: nowrap;">uint8_t reg</var>, - <var class="Fa" style="white-space: nowrap;">uint8_t val</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">superio</code> set of functions are used for - managing Super I/O devices. The functions provide support for raw - configuration access, locating devices, device information, and device - configuration.</p> -<section class="Ss"> -<h2 class="Ss" id="The_controller_interface"><a class="permalink" href="#The_controller_interface">The - controller interface</a></h2> -<p class="Pp">The - <a class="permalink" href="#superio_vendor"><code class="Fn" id="superio_vendor">superio_vendor</code></a>() - function is used to get a vendor of the Super I/O controller - <var class="Fa">dev</var>. Possible return values are - <code class="Dv">SUPERIO_VENDOR_ITE</code> and - <code class="Dv">SUPERIO_VENDOR_NUVOTON</code>.</p> -<p class="Pp" id="superio_devid">The - <a class="permalink" href="#superio_devid"><code class="Fn">superio_devid</code></a>() - function is used to get a device ID of the Super I/O controller - <var class="Fa">dev</var>.</p> -<p class="Pp" id="superio_revid">The - <a class="permalink" href="#superio_revid"><code class="Fn">superio_revid</code></a>() - function is used to get a revision ID of the Super I/O controller - <var class="Fa">dev</var>.</p> -<p class="Pp" id="superio_find_dev">The - <a class="permalink" href="#superio_find_dev"><code class="Fn">superio_find_dev</code></a>() - function is used to find a device on the <a class="Xr">superio(4)</a> bus, - specified by <var class="Fa">dev</var>, that has the requested type and - logical device number. Either of those, but not both, can be a wildcard. - Supported types are <code class="Dv">SUPERIO_DEV_GPIO</code>, - <code class="Dv">SUPERIO_DEV_HWM</code>, and - <code class="Dv">SUPERIO_DEV_WDT</code>. The wildcard value for - <var class="Fa">type</var> is <code class="Dv">SUPERIO_DEV_NONE</code>. The - wildcard value for <var class="Fa">ldn</var> is -1.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="The_device_interface"><a class="permalink" href="#The_device_interface">The - device interface</a></h2> -<p class="Pp">The - <a class="permalink" href="#superio_read"><code class="Fn" id="superio_read">superio_read</code></a>() - function is used to read data from the Super I/O configuration register of - the device <var class="Fa">dev</var>.</p> -<p class="Pp" id="superio_write">The - <a class="permalink" href="#superio_write"><code class="Fn">superio_write</code></a>() - function is used to write data to the Super I/O configuration register of - the device <var class="Fa">dev</var>.</p> -<p class="Pp" id="superio_dev_enable">The - <a class="permalink" href="#superio_dev_enable"><code class="Fn">superio_dev_enable</code></a>(), - <a class="permalink" href="#superio_dev_disable"><code class="Fn" id="superio_dev_disable">superio_dev_disable</code></a>(), - and - <a class="permalink" href="#superio_dev_enabled"><code class="Fn" id="superio_dev_enabled">superio_dev_enabled</code></a>() - functions are used to enable, disable, or check status of the device - <var class="Fa">dev</var>. The <var class="Fa">mask</var> parameter selects - sub-functions of a device that supports them. For devices that do not have - sub-functions, <var class="Fa">mask</var> should be set to 1.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="The_accessor_interface"><a class="permalink" href="#The_accessor_interface">The - accessor interface</a></h2> -<p class="Pp">The - <a class="permalink" href="#superio_get_dma"><code class="Fn" id="superio_get_dma">superio_get_dma</code></a>() - is used to get a DMA channel number configured for the device - <var class="Fa">dev</var>.</p> -<p class="Pp" id="superio_get_iobase">The - <a class="permalink" href="#superio_get_iobase"><code class="Fn">superio_get_iobase</code></a>() - is used to get a base I/O port configured for the device - <var class="Fa">dev</var>. The device may expose additional or alternative - configuration access via the I/O ports.</p> -<p class="Pp" id="superio_get_irq">The - <a class="permalink" href="#superio_get_irq"><code class="Fn">superio_get_irq</code></a>() - is used to get an interrupt number configured for the device - <var class="Fa">dev</var>.</p> -<p class="Pp" id="superio_get_ldn">The - <a class="permalink" href="#superio_get_ldn"><code class="Fn">superio_get_ldn</code></a>() - is used to get a Logical Device Number of the device - <var class="Fa">dev</var>.</p> -<p class="Pp" id="superio_get_type">The - <a class="permalink" href="#superio_get_type"><code class="Fn">superio_get_type</code></a>() - is used to get a type of the device <var class="Fa">dev</var>.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">superio(4)</a>, <a class="Xr">device(9)</a>, - <a class="Xr">driver(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Andriy - Gapon</span> - <a class="Mt" href="mailto:avg@FreeBSD.org">avg@FreeBSD.org</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 11, 2019</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/swi.9 3.html b/static/freebsd/man9/swi.9 3.html deleted file mode 100644 index e6f547e6..00000000 --- a/static/freebsd/man9/swi.9 3.html +++ /dev/null @@ -1,172 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SWI(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SWI(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">swi_add</code>, - <code class="Nm">swi_remove</code>, <code class="Nm">swi_sched</code> - — <span class="Nd">register and schedule software interrupt - handlers</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/bus.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/interrupt.h</a>></code></p> -<p class="Pp"><var class="Vt">extern struct intr_event - *clk_intr_event</var>;</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">swi_add</code>(<var class="Fa">struct intr_event - **eventp</var>, <var class="Fa">const char *name</var>, - <var class="Fa">driver_intr_t handler</var>, <var class="Fa">void - *arg</var>, <var class="Fa">int pri</var>, <var class="Fa">enum intr_type - flags</var>, <var class="Fa">void **cookiep</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">swi_remove</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">swi_sched</code>(<var class="Fa" style="white-space: nowrap;">void - *cookie</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These functions are used to register and schedule software - interrupt handlers. Software interrupt handlers are attached to a software - interrupt thread, just as hardware interrupt handlers are attached to a - hardware interrupt thread. Multiple handlers can be attached to the same - thread. Software interrupt handlers can be used to queue up less critical - processing inside of hardware interrupt handlers so that the work can be - done at a later time. Software interrupt threads are different from other - kernel threads in that they are treated as an interrupt thread. This means - that time spent executing these threads is counted as interrupt time, and - that they can be run via a lightweight context switch.</p> -<p class="Pp" id="swi_add">The - <a class="permalink" href="#swi_add"><code class="Fn">swi_add</code></a>() - function is used to add a new software interrupt handler to a specified - interrupt event. The <var class="Fa">eventp</var> argument is an optional - pointer to a <var class="Vt">struct intr_event</var> pointer. If this - argument points to an existing event that holds a list of interrupt - handlers, then this handler will be attached to that event. Otherwise a new - event will be created, and if <var class="Fa">eventp</var> is not - <code class="Dv">NULL</code>, then the pointer at that address to will be - modified to point to the newly created event. The <var class="Fa">name</var> - argument is used to associate a name with a specific handler. This name is - appended to the name of the software interrupt thread that this handler is - attached to. The <var class="Fa">handler</var> argument is the function that - will be executed when the handler is scheduled to run. The - <var class="Fa">arg</var> parameter will be passed in as the only parameter - to <var class="Fa">handler</var> when the function is executed. The - <var class="Fa">pri</var> value specifies the priority of this interrupt - handler relative to other software interrupt handlers. If an interrupt event - is created, then this value is used as the vector, and the - <var class="Fa">flags</var> argument is used to specify the attributes of a - handler such as <code class="Dv">INTR_MPSAFE</code>. The - <var class="Fa">cookiep</var> argument points to a <var class="Vt">void - *</var> cookie. This cookie will be set to a value that uniquely identifies - this handler, and is used to schedule the handler for execution later - on.</p> -<p class="Pp" id="swi_remove">The - <a class="permalink" href="#swi_remove"><code class="Fn">swi_remove</code></a>() - function is used to teardown an interrupt handler pointed to by the - <var class="Fa">cookie</var> argument. It detaches the interrupt handler - from the associated interrupt event and frees its memory.</p> -<p class="Pp" id="swi_sched">The - <a class="permalink" href="#swi_sched"><code class="Fn">swi_sched</code></a>() - function is used to schedule an interrupt handler and its associated thread - to run. The <var class="Fa">cookie</var> argument specifies which software - interrupt handler should be scheduled to run. The - <var class="Fa">flags</var> argument specifies how and when the handler - should be run and is a mask of one or more of the following flags:</p> -<dl class="Bl-tag"> - <dt id="SWI_DELAY"><a class="permalink" href="#SWI_DELAY"><code class="Dv">SWI_DELAY</code></a></dt> - <dd>Specifies that the kernel should mark the specified handler as needing to - run, but the kernel should not schedule the software interrupt thread to - run. Instead, <var class="Fa">handler</var> will be executed the next time - that the software interrupt thread runs after being scheduled by another - event.</dd> - <dt id="SWI_FROMNMI"><a class="permalink" href="#SWI_FROMNMI"><code class="Dv">SWI_FROMNMI</code></a></dt> - <dd>Specifies that <code class="Fn">swi_sched</code>() is called from NMI - context and should be careful about used KPIs. On platforms allowing IPI - sending from NMI context it immediately wakes - <var class="Va">clk_intr_event</var> via the IPI, otherwise it works just - like SWI_DELAY.</dd> -</dl> -<p class="Pp"><var class="Va">clk_intr_event</var> is a pointer to the - <var class="Vt">struct intr_event</var> used to hang delayed handlers off of - the clock interrupt, and is invoked directly by - <a class="Xr">hardclock(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">swi_add</code>() and - <code class="Fn">swi_remove</code>() functions return zero on success and - non-zero on failure.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp">The <code class="Fn">swi_add</code>() function will fail if:</p> -<dl class="Bl-tag"> - <dt id="EAGAIN">[<a class="permalink" href="#EAGAIN"><code class="Er">EAGAIN</code></a>]</dt> - <dd>The system-imposed limit on the total number of processes under execution - would be exceeded. The limit is given by the <a class="Xr">sysctl(3)</a> - MIB variable <code class="Dv">KERN_MAXPROC</code>.</dd> - <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt> - <dd>The <var class="Fa">flags</var> argument specifies - <code class="Dv">INTR_ENTROPY</code>.</dd> - <dt id="EINVAL~2">[<a class="permalink" href="#EINVAL~2"><code class="Er">EINVAL</code></a>]</dt> - <dd>The <var class="Fa">eventp</var> argument points to a hardware interrupt - thread.</dd> - <dt id="EINVAL~3">[<a class="permalink" href="#EINVAL~3"><code class="Er">EINVAL</code></a>]</dt> - <dd>Either of the <var class="Fa">name</var> or <var class="Fa">handler</var> - arguments are <code class="Dv">NULL</code>.</dd> - <dt id="EINVAL~4">[<a class="permalink" href="#EINVAL~4"><code class="Er">EINVAL</code></a>]</dt> - <dd>The <code class="Dv">INTR_EXCL</code> flag is specified and the interrupt - event pointed to by <var class="Fa">eventp</var> already has at least one - handler, or the interrupt event already has an exclusive handler.</dd> -</dl> -<p class="Pp">The <code class="Fn">swi_remove</code>() function will fail - if:</p> -<dl class="Bl-tag"> - <dt id="EINVAL~5">[<a class="permalink" href="#EINVAL~5"><code class="Er">EINVAL</code></a>]</dt> - <dd>A software interrupt handler pointed to by <var class="Fa">cookie</var> is - <code class="Dv">NULL</code>.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">hardclock(9)</a>, <a class="Xr">intr_event(9)</a>, - <a class="Xr">taskqueue(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Fn">swi_add</code>() and - <code class="Fn">swi_sched</code>() functions first appeared in - <span class="Ux">FreeBSD 5.0</span>. They replaced the - <code class="Fn">register_swi</code>() function which appeared in - <span class="Ux">FreeBSD 3.0</span> and the - <code class="Fn">setsoft*</code>(), and <code class="Fn">schedsoft*</code>() - functions which date back to at least <span class="Ux">4.4BSD</span>. The - <code class="Fn">swi_remove</code>() function first appeared in - <span class="Ux">FreeBSD 6.1</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 12, 2022</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/sx.9 4.html b/static/freebsd/man9/sx.9 4.html deleted file mode 100644 index 3e4feed3..00000000 --- a/static/freebsd/man9/sx.9 4.html +++ /dev/null @@ -1,301 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SX(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SX(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">sx</code>, <code class="Nm">sx_init</code>, - <code class="Nm">sx_init_flags</code>, <code class="Nm">sx_destroy</code>, - <code class="Nm">sx_slock</code>, <code class="Nm">sx_xlock</code>, - <code class="Nm">sx_slock_sig</code>, <code class="Nm">sx_xlock_sig</code>, - <code class="Nm">sx_try_slock</code>, <code class="Nm">sx_try_xlock</code>, - <code class="Nm">sx_sunlock</code>, <code class="Nm">sx_xunlock</code>, - <code class="Nm">sx_unlock</code>, <code class="Nm">sx_try_upgrade</code>, - <code class="Nm">sx_downgrade</code>, <code class="Nm">sx_sleep</code>, - <code class="Nm">sx_xholder</code>, <code class="Nm">sx_xlocked</code>, - <code class="Nm">sx_assert</code>, <code class="Nm">SX_SYSINIT</code>, - <code class="Nm">SX_SYSINIT_FLAGS</code> — <span class="Nd">kernel - shared/exclusive lock</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/lock.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/sx.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sx_init</code>(<var class="Fa" style="white-space: nowrap;">struct - sx *sx</var>, <var class="Fa" style="white-space: nowrap;">const char - *description</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sx_init_flags</code>(<var class="Fa" style="white-space: nowrap;">struct - sx *sx</var>, <var class="Fa" style="white-space: nowrap;">const char - *description</var>, <var class="Fa" style="white-space: nowrap;">int - opts</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sx_destroy</code>(<var class="Fa" style="white-space: nowrap;">struct - sx *sx</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sx_slock</code>(<var class="Fa" style="white-space: nowrap;">struct - sx *sx</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sx_xlock</code>(<var class="Fa" style="white-space: nowrap;">struct - sx *sx</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sx_slock_sig</code>(<var class="Fa" style="white-space: nowrap;">struct - sx *sx</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sx_xlock_sig</code>(<var class="Fa" style="white-space: nowrap;">struct - sx *sx</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sx_try_slock</code>(<var class="Fa" style="white-space: nowrap;">struct - sx *sx</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sx_try_xlock</code>(<var class="Fa" style="white-space: nowrap;">struct - sx *sx</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sx_sunlock</code>(<var class="Fa" style="white-space: nowrap;">struct - sx *sx</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sx_xunlock</code>(<var class="Fa" style="white-space: nowrap;">struct - sx *sx</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sx_unlock</code>(<var class="Fa" style="white-space: nowrap;">struct - sx *sx</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sx_try_upgrade</code>(<var class="Fa" style="white-space: nowrap;">struct - sx *sx</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">sx_downgrade</code>(<var class="Fa" style="white-space: nowrap;">struct - sx *sx</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sx_sleep</code>(<var class="Fa" style="white-space: nowrap;">void - *chan</var>, <var class="Fa" style="white-space: nowrap;">struct sx - *sx</var>, <var class="Fa" style="white-space: nowrap;">int priority</var>, - <var class="Fa" style="white-space: nowrap;">const char *wmesg</var>, - <var class="Fa" style="white-space: nowrap;">int timo</var>);</p> -<p class="Pp"><var class="Ft">struct thread *</var> - <br/> - <code class="Fn">sx_xholder</code>(<var class="Fa" style="white-space: nowrap;">struct - sx *sx</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sx_xlocked</code>(<var class="Fa" style="white-space: nowrap;">const - struct sx *sx</var>);</p> -<p class="Pp"> - <br/> - <code class="Cd">options INVARIANTS</code> - <br/> - <code class="Cd">options INVARIANT_SUPPORT</code> - <br/> - <var class="Ft">void</var> - <br/> - <code class="Fn">sx_assert</code>(<var class="Fa" style="white-space: nowrap;">const - struct sx *sx</var>, <var class="Fa" style="white-space: nowrap;">int - what</var>);</p> -<p class="Pp"><code class="In">#include - <<a class="In">sys/kernel.h</a>></code></p> -<p class="Pp"><code class="Fn">SX_SYSINIT</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">struct sx *sx</var>, - <var class="Fa" style="white-space: nowrap;">const char *desc</var>);</p> -<p class="Pp"><code class="Fn">SX_SYSINIT_FLAGS</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">struct sx *sx</var>, - <var class="Fa" style="white-space: nowrap;">const char *desc</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Shared/exclusive locks are used to protect data that are read far - more often than they are written. Shared/exclusive locks do not implement - priority propagation like mutexes and reader/writer locks to prevent - priority inversions, so shared/exclusive locks should be used prudently.</p> -<p class="Pp" id="sx_init">Shared/exclusive locks are created with either - <a class="permalink" href="#sx_init"><code class="Fn">sx_init</code></a>() - or - <a class="permalink" href="#sx_init_flags"><code class="Fn" id="sx_init_flags">sx_init_flags</code></a>() - where <var class="Fa">sx</var> is a pointer to space for a - <var class="Vt">struct sx</var>, and <var class="Fa">description</var> is a - pointer to a null-terminated character string that describes the - shared/exclusive lock. The <var class="Fa">opts</var> argument to - <code class="Fn">sx_init_flags</code>() specifies a set of optional flags to - alter the behavior of <var class="Fa">sx</var>. It contains one or more of - the following flags:</p> -<dl class="Bl-tag"> - <dt id="SX_DUPOK"><a class="permalink" href="#SX_DUPOK"><code class="Dv">SX_DUPOK</code></a></dt> - <dd>Witness should not log messages about duplicate locks being acquired.</dd> - <dt id="SX_NOWITNESS"><a class="permalink" href="#SX_NOWITNESS"><code class="Dv">SX_NOWITNESS</code></a></dt> - <dd>Instruct <a class="Xr">witness(4)</a> to ignore this lock.</dd> - <dt id="SX_NOPROFILE"><a class="permalink" href="#SX_NOPROFILE"><code class="Dv">SX_NOPROFILE</code></a></dt> - <dd>Do not profile this lock.</dd> - <dt id="SX_RECURSE"><a class="permalink" href="#SX_RECURSE"><code class="Dv">SX_RECURSE</code></a></dt> - <dd>Allow threads to recursively acquire exclusive locks for - <var class="Fa">sx</var>.</dd> - <dt id="SX_QUIET"><a class="permalink" href="#SX_QUIET"><code class="Dv">SX_QUIET</code></a></dt> - <dd>Do not log any operations for this lock via <a class="Xr">ktr(4)</a>.</dd> - <dt id="SX_NEW"><a class="permalink" href="#SX_NEW"><code class="Dv">SX_NEW</code></a></dt> - <dd>If the kernel has been compiled with <code class="Cd">options - INVARIANTS</code>, <code class="Fn">sx_init</code>() will assert that the - <var class="Fa">sx</var> has not been initialized multiple times without - intervening calls to <code class="Fn">sx_destroy</code>() unless this - option is specified.</dd> -</dl> -<p class="Pp" id="sx_destroy">Shared/exclusive locks are destroyed with - <a class="permalink" href="#sx_destroy"><code class="Fn">sx_destroy</code></a>(). - The lock <var class="Fa">sx</var> must not be locked by any thread when it - is destroyed.</p> -<p class="Pp" id="sx_slock">Threads acquire and release a shared lock by calling - <a class="permalink" href="#sx_slock"><code class="Fn">sx_slock</code></a>(), - <code class="Fn">sx_slock_sig</code>() or - <code class="Fn">sx_try_slock</code>() and - <code class="Fn">sx_sunlock</code>() or <code class="Fn">sx_unlock</code>(). - Threads acquire and release an exclusive lock by calling - <a class="permalink" href="#sx_xlock"><code class="Fn" id="sx_xlock">sx_xlock</code></a>(), - <code class="Fn">sx_xlock_sig</code>() or - <code class="Fn">sx_try_xlock</code>() and - <code class="Fn">sx_xunlock</code>() or <code class="Fn">sx_unlock</code>(). - A thread can attempt to upgrade a currently held shared lock to an exclusive - lock by calling <code class="Fn">sx_try_upgrade</code>(). A thread that has - an exclusive lock can downgrade it to a shared lock by calling - <a class="permalink" href="#sx_downgrade"><code class="Fn" id="sx_downgrade">sx_downgrade</code></a>().</p> -<p class="Pp" id="sx_try_slock"><a class="permalink" href="#sx_try_slock"><code class="Fn">sx_try_slock</code></a>() - and - <a class="permalink" href="#sx_try_xlock"><code class="Fn" id="sx_try_xlock">sx_try_xlock</code></a>() - will return 0 if the shared/exclusive lock cannot be acquired immediately; - otherwise the shared/exclusive lock will be acquired and a non-zero value - will be returned.</p> -<p class="Pp" id="sx_try_upgrade"><a class="permalink" href="#sx_try_upgrade"><code class="Fn">sx_try_upgrade</code></a>() - will return 0 if the shared lock cannot be upgraded to an exclusive lock - immediately; otherwise the exclusive lock will be acquired and a non-zero - value will be returned.</p> -<p class="Pp" id="sx_slock_sig"><a class="permalink" href="#sx_slock_sig"><code class="Fn">sx_slock_sig</code></a>() - and - <a class="permalink" href="#sx_xlock_sig"><code class="Fn" id="sx_xlock_sig">sx_xlock_sig</code></a>() - do the same as their normal versions but performing an interruptible sleep. - They return a non-zero value if the sleep has been interrupted by a signal - or an interrupt, otherwise 0.</p> -<p class="Pp" id="sx_sleep">A thread can atomically release a shared/exclusive - lock while waiting for an event by calling - <a class="permalink" href="#sx_sleep"><code class="Fn">sx_sleep</code></a>(). - For more details on the parameters to this function, see - <a class="Xr">sleep(9)</a>.</p> -<p class="Pp" id="sx_assert">When compiled with <code class="Cd">options - INVARIANTS</code> and <code class="Cd">options INVARIANT_SUPPORT</code>, the - <a class="permalink" href="#sx_assert"><code class="Fn">sx_assert</code></a>() - function tests <var class="Fa">sx</var> for the assertions specified in - <var class="Fa">what</var>, and panics if they are not met. One of the - following assertions must be specified:</p> -<dl class="Bl-tag"> - <dt id="SA_LOCKED"><a class="permalink" href="#SA_LOCKED"><code class="Dv">SA_LOCKED</code></a></dt> - <dd>Assert that the current thread has either a shared or an exclusive lock on - the <var class="Vt">sx</var> lock pointed to by the first argument.</dd> - <dt id="SA_SLOCKED"><a class="permalink" href="#SA_SLOCKED"><code class="Dv">SA_SLOCKED</code></a></dt> - <dd>Assert that the current thread has a shared lock on the - <var class="Vt">sx</var> lock pointed to by the first argument.</dd> - <dt id="SA_XLOCKED"><a class="permalink" href="#SA_XLOCKED"><code class="Dv">SA_XLOCKED</code></a></dt> - <dd>Assert that the current thread has an exclusive lock on the - <var class="Vt">sx</var> lock pointed to by the first argument.</dd> - <dt id="SA_UNLOCKED"><a class="permalink" href="#SA_UNLOCKED"><code class="Dv">SA_UNLOCKED</code></a></dt> - <dd>Assert that the current thread has no lock on the <var class="Vt">sx</var> - lock pointed to by the first argument.</dd> -</dl> -<p class="Pp">In addition, one of the following optional assertions may be - included with either an <code class="Dv">SA_LOCKED</code>, - <code class="Dv">SA_SLOCKED</code>, or <code class="Dv">SA_XLOCKED</code> - assertion:</p> -<dl class="Bl-tag"> - <dt id="SA_RECURSED"><a class="permalink" href="#SA_RECURSED"><code class="Dv">SA_RECURSED</code></a></dt> - <dd>Assert that the current thread has a recursed lock on - <var class="Fa">sx</var>.</dd> - <dt id="SA_NOTRECURSED"><a class="permalink" href="#SA_NOTRECURSED"><code class="Dv">SA_NOTRECURSED</code></a></dt> - <dd>Assert that the current thread does not have a recursed lock on - <var class="Fa">sx</var>.</dd> -</dl> -<p class="Pp" id="sx_xholder"><a class="permalink" href="#sx_xholder"><code class="Fn">sx_xholder</code></a>() - will return a pointer to the thread which currently holds an exclusive lock - on <var class="Fa">sx</var>. If no thread holds an exclusive lock on - <var class="Fa">sx</var>, then <code class="Dv">NULL</code> is returned - instead.</p> -<p class="Pp" id="sx_xlocked"><a class="permalink" href="#sx_xlocked"><code class="Fn">sx_xlocked</code></a>() - will return non-zero if the current thread holds the exclusive lock; - otherwise, it will return zero.</p> -<p class="Pp" id="sx_unlock">For ease of programming, - <a class="permalink" href="#sx_unlock"><code class="Fn">sx_unlock</code></a>() - is provided as a macro frontend to the respective functions, - <a class="permalink" href="#sx_sunlock"><code class="Fn" id="sx_sunlock">sx_sunlock</code></a>() - and - <a class="permalink" href="#sx_xunlock"><code class="Fn" id="sx_xunlock">sx_xunlock</code></a>(). - Algorithms that are aware of what state the lock is in should use either of - the two specific functions for a minor performance benefit.</p> -<p class="Pp" id="SX_SYSINIT">The - <a class="permalink" href="#SX_SYSINIT"><code class="Fn">SX_SYSINIT</code></a>() - macro is used to generate a call to the - <a class="permalink" href="#sx_sysinit"><code class="Fn" id="sx_sysinit">sx_sysinit</code></a>() - routine at system startup in order to initialize a given - <var class="Fa">sx</var> lock. The parameters are the same as - <code class="Fn">sx_init</code>() but with an additional argument, - <var class="Fa">name</var>, that is used in generating unique variable names - for the related structures associated with the lock and the sysinit routine. - The - <a class="permalink" href="#SX_SYSINIT_FLAGS"><code class="Fn" id="SX_SYSINIT_FLAGS">SX_SYSINIT_FLAGS</code></a>() - macro can similarly be used to initialize a given <var class="Fa">sx</var> - lock using <code class="Fn">sx_init_flags</code>().</p> -<p class="Pp">A thread may not hold both a shared lock and an exclusive lock on - the same lock simultaneously; attempting to do so will result in - deadlock.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CONTEXT"><a class="permalink" href="#CONTEXT">CONTEXT</a></h1> -<p class="Pp">A thread may hold a shared or exclusive lock on an - <code class="Nm">sx</code> lock while sleeping. As a result, an - <code class="Nm">sx</code> lock may not be acquired while holding a mutex. - Otherwise, if one thread slept while holding an <code class="Nm">sx</code> - lock while another thread blocked on the same <code class="Nm">sx</code> - lock after acquiring a mutex, then the second thread would effectively end - up sleeping while holding a mutex, which is not allowed.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">lock(9)</a>, <a class="Xr">locking(9)</a>, - <a class="Xr">mutex(9)</a>, <a class="Xr">panic(9)</a>, - <a class="Xr">rwlock(9)</a>, <a class="Xr">sema(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">A kernel without <code class="Dv">WITNESS</code> cannot assert - whether the current thread does or does not hold a shared lock. - <code class="Dv">SA_LOCKED</code> and <code class="Dv">SA_SLOCKED</code> can - only assert that - <a class="permalink" href="#any"><i class="Em" id="any">any</i></a> thread - holds a shared lock. They cannot ensure that the current thread holds a - shared lock. Further, <code class="Dv">SA_UNLOCKED</code> can only assert - that the current thread does not hold an exclusive lock.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 11, 2017</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/syscall_helper_register.9 4.html b/static/freebsd/man9/syscall_helper_register.9 4.html deleted file mode 100644 index cd3e0983..00000000 --- a/static/freebsd/man9/syscall_helper_register.9 4.html +++ /dev/null @@ -1,129 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SYSCALL_HELPER_REGISTER(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SYSCALL_HELPER_REGISTER(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">syscall_helper_register</code>, - <code class="Nm">syscall_helper_unregister</code> — - <span class="Nd">kernel syscall registration routines</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/sysent.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">syscall_helper_register</code>(<var class="Fa" style="white-space: nowrap;">struct - syscall_helper_data *sd</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">syscall_helper_unregister</code>(<var class="Fa" style="white-space: nowrap;">struct - syscall_helper_data *sd</var>);</p> -<section class="Ss"> -<h2 class="Ss" id="INITIALIZER_MACROS"><a class="permalink" href="#INITIALIZER_MACROS">INITIALIZER - MACROS</a></h2> -<p class="Pp"><var class="Ft">struct syscall_helper_data</var> - <br/> - <code class="Fn">SYSCALL_INIT_HELPER</code>(<var class="Fa" style="white-space: nowrap;">syscallname</var>);</p> -<p class="Pp"><var class="Ft">struct syscall_helper_data</var> - <br/> - <code class="Fn">SYSCALL_INIT_HELPER_F</code>(<var class="Fa" style="white-space: nowrap;">syscallname</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="COMPATIBILITY_INITIALIZER_MACROS"><a class="permalink" href="#COMPATIBILITY_INITIALIZER_MACROS">COMPATIBILITY - INITIALIZER MACROS</a></h2> -<p class="Pp"><var class="Ft">struct syscall_helper_data</var> - <br/> - <code class="Fn">SYSCALL_INIT_HELPER_COMPAT</code>(<var class="Fa" style="white-space: nowrap;">syscallname</var>);</p> -<p class="Pp"><var class="Ft">struct syscall_helper_data</var> - <br/> - <code class="Fn">SYSCALL_INIT_HELPER_COMPAT_F</code>(<var class="Fa" style="white-space: nowrap;">syscallname</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#syscall_helper_register"><code class="Fn" id="syscall_helper_register">syscall_helper_register</code></a>() - registers a system call. This function takes the structure - <var class="Va">struct syscall_helper_data sd</var>, which specifies the - parameters for syscall registration:</p> -<p class="Pp"></p> -<div class="Bd Bd-indent Li"> -<pre>struct syscall_helper_data { - struct sysent new_sysent; - struct sysent old_sysent; - int syscall_no; - int registered; -};</pre> -</div> -<p class="Pp" id="syscall_helper_register~2">The only valid flag for the - <var class="Fa">flags</var> argument to - <a class="permalink" href="#syscall_helper_register~2"><code class="Fn">syscall_helper_register</code></a>() - is <code class="Dv">SY_THR_STATIC</code>. This flag prevents the syscall - from being unregistered.</p> -<p class="Pp" id="SYSCALL_INIT_HELPER*">Before use, the structure must be - initialized with one of the - <a class="permalink" href="#SYSCALL_INIT_HELPER*"><code class="Fn">SYSCALL_INIT_HELPER*</code></a>() - macros. In new code, syscall implementation functions shall be named - <a class="permalink" href="#sys_syscallname"><code class="Fn" id="sys_syscallname">sys_syscallname</code></a>() - and the regular macros shall be used.</p> -<p class="Pp">For legacy syscall functions named without "sys_" - prefixes, the "COMPAT" versions of the macros may be used.</p> -<p class="Pp">The only valid flag for the <var class="Fa">flags</var> argument - to the "F" variants of the initializer macros is - <code class="Dv">SYF_CAPENABLED</code>. This flag indicates that the syscall - is allowed in capability mode.</p> -<p class="Pp" id="syscall_helper_unregister">The - <a class="permalink" href="#syscall_helper_unregister"><code class="Fn">syscall_helper_unregister</code></a>() - unregisters a system call. This function takes the same structure - <var class="Va">struct syscall_helper_data sd</var> that was previously - initialized in the manner described above and used in a successful - invocation of <code class="Fn">syscall_helper_register</code>().</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If successful, <code class="Fn">syscall_helper_register</code>() - and <code class="Fn">syscall_helper_unregister</code>() will return 0. - Otherwise, they will return an error.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp">The <code class="Fn">syscall_helper_register</code>() call will - fail and the syscall will not be registered if:</p> -<dl class="Bl-tag"> - <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt> - <dd>The <var class="Fa">flags</var> argument contained a value other than - <code class="Dv">SY_THR_STATIC</code>.</dd> - <dt id="EINVAL~2">[<a class="permalink" href="#EINVAL~2"><code class="Er">EINVAL</code></a>]</dt> - <dd>The specified syscall number, <code class="Dv">sd.syscall_no</code> - (<code class="Dv">SYS_syscallname</code>), was outside of the valid range - of system call numbers (zero through - <code class="Dv">SYS_MAXSYSCALL</code>).</dd> - <dt id="ENFILE">[<a class="permalink" href="#ENFILE"><code class="Er">ENFILE</code></a>]</dt> - <dd>The system call table does not have any available slots.</dd> - <dt id="EEXIST">[<a class="permalink" href="#EEXIST"><code class="Er">EEXIST</code></a>]</dt> - <dd>The specified syscall number, <code class="Dv">sd.syscall_no</code> - (<code class="Dv">SYS_syscallname</code>), was already in use.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">SYSCALL_MODULE(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 10, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/sysctl.9 3.html b/static/freebsd/man9/sysctl.9 3.html deleted file mode 100644 index 93380af8..00000000 --- a/static/freebsd/man9/sysctl.9 3.html +++ /dev/null @@ -1,1148 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SYSCTL(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SYSCTL(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">SYSCTL_DECL</code>, - <code class="Nm">SYSCTL_ADD_BOOL</code>, - <code class="Nm">SYSCTL_ADD_COUNTER_U64</code>, - <code class="Nm">SYSCTL_ADD_COUNTER_U64_ARRAY</code>, - <code class="Nm">SYSCTL_ADD_INT</code>, - <code class="Nm">SYSCTL_ADD_LONG</code>, - <code class="Nm">SYSCTL_ADD_NODE</code>, - <code class="Nm">SYSCTL_ADD_NODE_WITH_LABEL</code>, - <code class="Nm">SYSCTL_ADD_OPAQUE</code>, - <code class="Nm">SYSCTL_ADD_PROC</code>, - <code class="Nm">SYSCTL_ADD_QUAD</code>, - <code class="Nm">SYSCTL_ADD_ROOT_NODE</code>, - <code class="Nm">SYSCTL_ADD_S8</code>, - <code class="Nm">SYSCTL_ADD_S16</code>, - <code class="Nm">SYSCTL_ADD_S32</code>, - <code class="Nm">SYSCTL_ADD_S64</code>, - <code class="Nm">SYSCTL_ADD_SBINTIME_MSEC</code>, - <code class="Nm">SYSCTL_ADD_SBINTIME_USEC</code>, - <code class="Nm">SYSCTL_ADD_STRING</code>, - <code class="Nm">SYSCTL_ADD_CONST_STRING</code>, - <code class="Nm">SYSCTL_ADD_STRUCT</code>, - <code class="Nm">SYSCTL_ADD_TIMEVAL_SEC</code>, - <code class="Nm">SYSCTL_ADD_U8</code>, - <code class="Nm">SYSCTL_ADD_U16</code>, - <code class="Nm">SYSCTL_ADD_U32</code>, - <code class="Nm">SYSCTL_ADD_U64</code>, - <code class="Nm">SYSCTL_ADD_UAUTO</code>, - <code class="Nm">SYSCTL_ADD_UINT</code>, - <code class="Nm">SYSCTL_ADD_ULONG</code>, - <code class="Nm">SYSCTL_ADD_UMA_CUR</code>, - <code class="Nm">SYSCTL_ADD_UMA_MAX</code>, - <code class="Nm">SYSCTL_ADD_UQUAD</code>, - <code class="Nm">SYSCTL_CHILDREN</code>, - <code class="Nm">SYSCTL_STATIC_CHILDREN</code>, - <code class="Nm">SYSCTL_NODE_CHILDREN</code>, - <code class="Nm">SYSCTL_PARENT</code>, <code class="Nm">SYSCTL_BOOL</code>, - <code class="Nm">SYSCTL_COUNTER_U64</code>, - <code class="Nm">SYSCTL_COUNTER_U64_ARRAY</code>, - <code class="Nm">SYSCTL_INT</code>, - <code class="Nm">SYSCTL_INT_WITH_LABEL</code>, - <code class="Nm">SYSCTL_LONG</code>, - <code class="Nm">sysctl_msec_to_ticks</code>, - <code class="Nm">SYSCTL_NODE</code>, - <code class="Nm">SYSCTL_NODE_WITH_LABEL</code>, - <code class="Nm">SYSCTL_OPAQUE</code>, <code class="Nm">SYSCTL_PROC</code>, - <code class="Nm">SYSCTL_QUAD</code>, - <code class="Nm">SYSCTL_ROOT_NODE</code>, <code class="Nm">SYSCTL_S8</code>, - <code class="Nm">SYSCTL_S16</code>, <code class="Nm">SYSCTL_S32</code>, - <code class="Nm">SYSCTL_S64</code>, - <code class="Nm">SYSCTL_SBINTIME_MSEC</code>, - <code class="Nm">SYSCTL_SBINTIME_USEC</code>, - <code class="Nm">SYSCTL_STRING</code>, - <code class="Nm">SYSCTL_CONST_STRING</code>, - <code class="Nm">SYSCTL_STRUCT</code>, - <code class="Nm">SYSCTL_TIMEVAL_SEC</code>, - <code class="Nm">SYSCTL_U8</code>, <code class="Nm">SYSCTL_U16</code>, - <code class="Nm">SYSCTL_U32</code>, <code class="Nm">SYSCTL_U64</code>, - <code class="Nm">SYSCTL_UINT</code>, <code class="Nm">SYSCTL_ULONG</code>, - <code class="Nm">SYSCTL_UMA_CUR</code>, - <code class="Nm">SYSCTL_UMA_MAX</code>, <code class="Nm">SYSCTL_UQUAD</code> - — <span class="Nd">Dynamic and static sysctl MIB creation - functions</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/sysctl.h</a>></code></p> -<p class="Pp"><code class="Fn">SYSCTL_DECL</code>(<var class="Fa" style="white-space: nowrap;">name</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_BOOL</code>(<var class="Fa">struct sysctl_ctx_list - *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>, - <var class="Fa">int number</var>, <var class="Fa">const char *name</var>, - <var class="Fa">int ctlflags</var>, <var class="Fa">bool *ptr</var>, - <var class="Fa">uint8_t val</var>, <var class="Fa">const char - *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_COUNTER_U64</code>(<var class="Fa">struct - sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list - *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char - *name</var>, <var class="Fa">int ctlflags</var>, - <var class="Fa">counter_u64_t *ptr</var>, <var class="Fa">const char - *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_COUNTER_U64_ARRAY</code>(<var class="Fa">struct - sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list - *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char - *name</var>, <var class="Fa">int ctlflags</var>, - <var class="Fa">counter_u64_t *ptr</var>, <var class="Fa">intmax_t - len</var>, <var class="Fa">const char *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_INT</code>(<var class="Fa">struct sysctl_ctx_list - *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>, - <var class="Fa">int number</var>, <var class="Fa">const char *name</var>, - <var class="Fa">int ctlflags</var>, <var class="Fa">int *ptr</var>, - <var class="Fa">int val</var>, <var class="Fa">const char *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_LONG</code>(<var class="Fa">struct sysctl_ctx_list - *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>, - <var class="Fa">int number</var>, <var class="Fa">const char *name</var>, - <var class="Fa">int ctlflags</var>, <var class="Fa">long *ptr</var>, - <var class="Fa">const char *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_NODE</code>(<var class="Fa">struct sysctl_ctx_list - *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>, - <var class="Fa">int number</var>, <var class="Fa">const char *name</var>, - <var class="Fa">int ctlflags</var>, <var class="Fa">int - (*handler)(SYSCTL_HANDLER_ARGS)</var>, <var class="Fa">const char - *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_NODE_WITH_LABEL</code>(<var class="Fa">struct - sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list - *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char - *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">int - (*handler)(SYSCTL_HANDLER_ARGS)</var>, <var class="Fa">const char - *descr</var>, <var class="Fa">const char *label</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_OPAQUE</code>(<var class="Fa">struct - sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list - *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char - *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">void - *ptr</var>, <var class="Fa">intptr_t len</var>, <var class="Fa">const char - *format</var>, <var class="Fa">const char *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_PROC</code>(<var class="Fa">struct sysctl_ctx_list - *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>, - <var class="Fa">int number</var>, <var class="Fa">const char *name</var>, - <var class="Fa">int ctlflags</var>, <var class="Fa">void *arg1</var>, - <var class="Fa">intptr_t arg2</var>, <var class="Fa">int (*handler) - (SYSCTL_HANDLER_ARGS)</var>, <var class="Fa">const char *format</var>, - <var class="Fa">const char *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_QUAD</code>(<var class="Fa">struct sysctl_ctx_list - *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>, - <var class="Fa">int number</var>, <var class="Fa">const char *name</var>, - <var class="Fa">int ctlflags</var>, <var class="Fa">int64_t *ptr</var>, - <var class="Fa">const char *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_ROOT_NODE</code>(<var class="Fa">struct - sysctl_ctx_list *ctx</var>, <var class="Fa">int number</var>, - <var class="Fa">const char *name</var>, <var class="Fa">int ctlflags</var>, - <var class="Fa">int (*handler)(SYSCTL_HANDLER_ARGS)</var>, - <var class="Fa">const char *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_S8</code>(<var class="Fa">struct sysctl_ctx_list - *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>, - <var class="Fa">int number</var>, <var class="Fa">const char *name</var>, - <var class="Fa">int ctlflags</var>, <var class="Fa">int8_t *ptr</var>, - <var class="Fa">int8_t val</var>, <var class="Fa">const char - *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_S16</code>(<var class="Fa">struct sysctl_ctx_list - *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>, - <var class="Fa">int number</var>, <var class="Fa">const char *name</var>, - <var class="Fa">int ctlflags</var>, <var class="Fa">int16_t *ptr</var>, - <var class="Fa">int16_t val</var>, <var class="Fa">const char - *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_S32</code>(<var class="Fa">struct sysctl_ctx_list - *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>, - <var class="Fa">int number</var>, <var class="Fa">const char *name</var>, - <var class="Fa">int ctlflags</var>, <var class="Fa">int32_t *ptr</var>, - <var class="Fa">int32_t val</var>, <var class="Fa">const char - *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_S64</code>(<var class="Fa">struct sysctl_ctx_list - *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>, - <var class="Fa">int number</var>, <var class="Fa">const char *name</var>, - <var class="Fa">int ctlflags</var>, <var class="Fa">int64_t *ptr</var>, - <var class="Fa">int64_t val</var>, <var class="Fa">const char - *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_SBINTIME_MSEC</code>(<var class="Fa">struct - sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list - *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char - *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">sbintime_t - *ptr</var>, <var class="Fa">const char *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_SBINTIME_USEC</code>(<var class="Fa">struct - sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list - *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char - *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">sbintime_t - *ptr</var>, <var class="Fa">const char *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_STRING</code>(<var class="Fa">struct - sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list - *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char - *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">char - *ptr</var>, <var class="Fa">intptr_t len</var>, <var class="Fa">const char - *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_CONST_STRING</code>(<var class="Fa">struct - sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list - *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char - *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">const char - *ptr</var>, <var class="Fa">const char *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_STRUCT</code>(<var class="Fa">struct - sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list - *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char - *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">void - *ptr</var>, <var class="Fa">struct_type</var>, <var class="Fa">const char - *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_TIMEVAL_SEC</code>(<var class="Fa">struct - sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list - *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char - *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">struct - timeval *ptr</var>, <var class="Fa">const char *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_U8</code>(<var class="Fa">struct sysctl_ctx_list - *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>, - <var class="Fa">int number</var>, <var class="Fa">const char *name</var>, - <var class="Fa">int ctlflags</var>, <var class="Fa">uint8_t *ptr</var>, - <var class="Fa">uint8_t val</var>, <var class="Fa">const char - *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_U16</code>(<var class="Fa">struct sysctl_ctx_list - *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>, - <var class="Fa">int number</var>, <var class="Fa">const char *name</var>, - <var class="Fa">int ctlflags</var>, <var class="Fa">uint16_t *ptr</var>, - <var class="Fa">uint16_t val</var>, <var class="Fa">const char - *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_U32</code>(<var class="Fa">struct sysctl_ctx_list - *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>, - <var class="Fa">int number</var>, <var class="Fa">const char *name</var>, - <var class="Fa">int ctlflags</var>, <var class="Fa">uint32_t *ptr</var>, - <var class="Fa">uint32_t val</var>, <var class="Fa">const char - *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_U64</code>(<var class="Fa">struct sysctl_ctx_list - *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>, - <var class="Fa">int number</var>, <var class="Fa">const char *name</var>, - <var class="Fa">int ctlflags</var>, <var class="Fa">uint64_t *ptr</var>, - <var class="Fa">uint64_t val</var>, <var class="Fa">const char - *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_UINT</code>(<var class="Fa">struct sysctl_ctx_list - *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>, - <var class="Fa">int number</var>, <var class="Fa">const char *name</var>, - <var class="Fa">int ctlflags</var>, <var class="Fa">unsigned int *ptr</var>, - <var class="Fa">unsigned int val</var>, <var class="Fa">const char - *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_ULONG</code>(<var class="Fa">struct - sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list - *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char - *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">unsigned - long *ptr</var>, <var class="Fa">const char *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_UQUAD</code>(<var class="Fa">struct - sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list - *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char - *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">uint64_t - *ptr</var>, <var class="Fa">const char *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_UMA_CUR</code>(<var class="Fa">struct - sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list - *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char - *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">uma_zone_t - ptr</var>, <var class="Fa">const char *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_UMA_MAX</code>(<var class="Fa">struct - sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list - *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char - *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">uma_zone_t - ptr</var>, <var class="Fa">const char *descr</var>); <var class="Fa">const - char *descr</var> - <br/> - <var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_ADD_UAUTO</code>(<var class="Fa">struct - sysctl_ctx_list *ctx</var>, <var class="Fa">struct sysctl_oid_list - *parent</var>, <var class="Fa">int number</var>, <var class="Fa">const char - *name</var>, <var class="Fa">int ctlflags</var>, <var class="Fa">void - *ptr</var>, <var class="Fa">const char *descr</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid_list *</var> - <br/> - <code class="Fn">SYSCTL_CHILDREN</code>(<var class="Fa">struct sysctl_oid - *oidp</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid_list *</var> - <br/> - <code class="Fn">SYSCTL_STATIC_CHILDREN</code>(<var class="Fa">struct - sysctl_oid_list OID_NAME</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid_list *</var> - <br/> - <code class="Fn">SYSCTL_NODE_CHILDREN</code>(<var class="Fa">parent</var>, - <var class="Fa">name</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">SYSCTL_PARENT</code>(<var class="Fa">struct sysctl_oid - *oid</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_BOOL</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">val</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_COUNTER_U64</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_COUNTER_U64_ARRAY</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">len</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_INT</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">val</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_INT_WITH_LABEL</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">val</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>, - <var class="Fa" style="white-space: nowrap;">label</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_LONG</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">val</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sysctl_msec_to_ticks</code>(<var class="Fa" style="white-space: nowrap;">SYSCTL_HANDLER_ARGS</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_NODE</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">handler</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_NODE_WITH_LABEL</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">handler</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>, - <var class="Fa" style="white-space: nowrap;">label</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_OPAQUE</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">len</var>, - <var class="Fa" style="white-space: nowrap;">format</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_PROC</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">arg1</var>, - <var class="Fa" style="white-space: nowrap;">arg2</var>, - <var class="Fa" style="white-space: nowrap;">handler</var>, - <var class="Fa" style="white-space: nowrap;">format</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_QUAD</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">val</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_ROOT_NODE</code>(<var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">handler</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_S8</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">val</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_S16</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">val</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_S32</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">val</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_S64</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">val</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_SBINTIME_MSEC</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_SBINTIME_USEC</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_STRING</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">arg</var>, - <var class="Fa" style="white-space: nowrap;">len</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_CONST_STRING</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">arg</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_STRUCT</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">struct_type</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_TIMEVAL_SEC</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_U8</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">val</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_U16</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">val</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_U32</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">val</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_U64</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">val</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_UINT</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">val</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_ULONG</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">val</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_UQUAD</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">val</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_UMA_MAX</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_UMA_CUR</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">number</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">ctlflags</var>, - <var class="Fa" style="white-space: nowrap;">ptr</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">SYSCTL</code> kernel interface allows dynamic - or static creation of <a class="Xr">sysctl(8)</a> MIB entries. All static - sysctls are automatically destroyed when the module which they are part of - is unloaded. Most top level categories are created statically and are - available to all kernel code and its modules.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION_OF_ARGUMENTS"><a class="permalink" href="#DESCRIPTION_OF_ARGUMENTS">DESCRIPTION - OF ARGUMENTS</a></h1> -<dl class="Bl-tag"> - <dt><var class="Fa">ctx</var></dt> - <dd>Pointer to sysctl context or NULL, if no context. See - <a class="Xr">sysctl_ctx_init(9)</a> for how to create a new sysctl - context. Programmers are strongly advised to use contexts to organize the - dynamic OIDs which they create because when a context is destroyed all - belonging sysctls are destroyed as well. This makes the sysctl cleanup - code much simpler. Else deletion of all created OIDs is required at module - unload.</dd> - <dt id="SYSCTL_STATIC_CHILDREN"><var class="Fa">parent</var></dt> - <dd>A pointer to a <code class="Li">struct sysctl_oid_list</code>, which is - the head of the parent's list of children. This pointer is retrieved using - the - <a class="permalink" href="#SYSCTL_STATIC_CHILDREN"><code class="Fn">SYSCTL_STATIC_CHILDREN</code></a>() - macro for static sysctls and the - <a class="permalink" href="#SYSCTL_CHILDREN"><code class="Fn" id="SYSCTL_CHILDREN">SYSCTL_CHILDREN</code></a>() - macro for dynamic sysctls. The - <a class="permalink" href="#SYSCTL_PARENT"><code class="Fn" id="SYSCTL_PARENT">SYSCTL_PARENT</code></a>() - macro can be used to get the parent of an OID. The macro returns NULL if - there is no parent.</dd> - <dt><var class="Fa">number</var></dt> - <dd>The OID number that will be assigned to this OID. In almost all cases this - should be set to <code class="Dv">OID_AUTO</code>, which will result in - the assignment of the next available OID number.</dd> - <dt><var class="Fa">name</var></dt> - <dd>The name of the OID. The newly created OID will contain a copy of the - name.</dd> - <dt><var class="Fa">ctlflags</var></dt> - <dd>A bit mask of sysctl control flags. See the section below describing all - the control flags.</dd> - <dt><var class="Fa">arg1</var></dt> - <dd>First callback argument for procedure sysctls.</dd> - <dt><var class="Fa">arg2</var></dt> - <dd>Second callback argument for procedure sysctls.</dd> - <dt><var class="Fa">len</var></dt> - <dd>The length of the data pointed to by the <var class="Fa">ptr</var> - argument. For string type OIDs a length of zero means that - <a class="Xr">strlen(3)</a> will be used to get the length of the string - at each access to the OID. For array type OIDs the length must be greater - than zero.</dd> - <dt><var class="Fa">ptr</var></dt> - <dd>Pointer to sysctl variable or string data. For sysctl values the pointer - can be SYSCTL_NULL_XXX_PTR which means the OID is read-only and the - returned value should be taken from the <var class="Fa">val</var> - argument.</dd> - <dt><var class="Fa">val</var></dt> - <dd>If the <var class="Fa">ptr</var> argument is SYSCTL_NULL_XXX_PTR, gives - the constant value returned by this OID. Else this argument is not - used.</dd> - <dt><var class="Fa">struct_type</var></dt> - <dd>Name of structure type.</dd> - <dt><var class="Fa">handler</var></dt> - <dd>A pointer to the function that is responsible for handling read and write - requests to this OID. There are several standard handlers that support - operations on nodes, integers, strings and opaque objects. It is possible - to define custom handlers using the <code class="Fn">SYSCTL_PROC</code>() - macro or the <code class="Fn">SYSCTL_ADD_PROC</code>() function.</dd> - <dt><var class="Fa">format</var></dt> - <dd>A pointer to a string which specifies the format of the OID in a symbolic - way. This format is used as a hint by <a class="Xr">sysctl(8)</a> to apply - proper data formatting for display purposes. - <p class="Pp">Current formats:</p> - <div class="Bd-indent"> - <dl class="Bl-tag Bl-compact"> - <dt id="N"><a class="permalink" href="#N"><code class="Cm">N</code></a></dt> - <dd>node</dd> - <dt id="A"><a class="permalink" href="#A"><code class="Cm">A</code></a></dt> - <dd><a class="permalink" href="#char"><code class="Li" id="char">char - *</code></a></dd> - <dt id="C"><a class="permalink" href="#C"><code class="Cm">C</code></a></dt> - <dd><a class="permalink" href="#int8_t"><code class="Li" id="int8_t">int8_t</code></a></dd> - <dt id="CU"><a class="permalink" href="#CU"><code class="Cm">CU</code></a></dt> - <dd><a class="permalink" href="#uint8_t"><code class="Li" id="uint8_t">uint8_t</code></a></dd> - <dt id="I"><a class="permalink" href="#I"><code class="Cm">I</code></a></dt> - <dd><a class="permalink" href="#int"><code class="Li" id="int">int</code></a></dd> - <dt id="IK"><a class="permalink" href="#IK"><code class="Cm">IK</code></a>[<var class="Ar">n</var>]</dt> - <dd>temperature in Kelvin, multiplied by an optional single digit power of - ten scaling factor: 1 (default) gives deciKelvin, 0 gives Kelvin, 3 - gives milliKelvin</dd> - <dt id="IU"><a class="permalink" href="#IU"><code class="Cm">IU</code></a></dt> - <dd><a class="permalink" href="#unsigned"><code class="Li" id="unsigned">unsigned - int</code></a></dd> - <dt id="L"><a class="permalink" href="#L"><code class="Cm">L</code></a></dt> - <dd><a class="permalink" href="#long"><code class="Li" id="long">long</code></a></dd> - <dt id="LU"><a class="permalink" href="#LU"><code class="Cm">LU</code></a></dt> - <dd><a class="permalink" href="#unsigned~2"><code class="Li" id="unsigned~2">unsigned - long</code></a></dd> - <dt id="Q"><a class="permalink" href="#Q"><code class="Cm">Q</code></a></dt> - <dd><a class="permalink" href="#quad_t"><code class="Li" id="quad_t">quad_t</code></a></dd> - <dt id="QU"><a class="permalink" href="#QU"><code class="Cm">QU</code></a></dt> - <dd><a class="permalink" href="#u_quad_t"><code class="Li" id="u_quad_t">u_quad_t</code></a></dd> - <dt id="S"><a class="permalink" href="#S"><code class="Cm">S</code></a></dt> - <dd><a class="permalink" href="#int16_t"><code class="Li" id="int16_t">int16_t</code></a></dd> - <dt id="SU"><a class="permalink" href="#SU"><code class="Cm">SU</code></a></dt> - <dd><a class="permalink" href="#uint16_t"><code class="Li" id="uint16_t">uint16_t</code></a></dd> - <dt id="S,TYPE"><a class="permalink" href="#S,TYPE"><code class="Cm">S,TYPE</code></a></dt> - <dd><a class="permalink" href="#struct"><code class="Li" id="struct">struct - TYPE</code></a> structures</dd> - </dl> - </div> - </dd> - <dt><var class="Fa">descr</var></dt> - <dd>A pointer to a textual description of the OID.</dd> - <dt><var class="Fa">label</var></dt> - <dd>A pointer to an aggregation label for this component of the OID. To make - it easier to export sysctl data to monitoring systems that support - aggregations through labels (e.g., Prometheus), this argument can be used - to attach a label name to an OID. The label acts as a hint that this - component's name should not be part of the metric's name, but attached to - the metric as a label instead. - <p class="Pp">Labels should only be applied to siblings that are - structurally similar and encode the same type of value, as aggregation - is of no use otherwise.</p> - </dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="NODE_VALUE_TYPES"><a class="permalink" href="#NODE_VALUE_TYPES">NODE - VALUE TYPES</a></h1> -<p class="Pp">Most of the macros and functions used to create sysctl nodes - export a read-only constant or in-kernel variable whose type matches the - type of the node's value. For example, - <a class="permalink" href="#SYSCTL_INT"><code class="Fn" id="SYSCTL_INT">SYSCTL_INT</code></a>() - reports the raw value of an associated variable of type - <var class="Vt">int</var>. However, nodes may also export a value that is a - translation of an internal representation.</p> -<p class="Pp" id="sysctl_msec_to_ticks">The - <a class="permalink" href="#sysctl_msec_to_ticks"><code class="Fn">sysctl_msec_to_ticks</code></a>() - handler can be used with <code class="Fn">SYSCTL_PROC</code>() or - <a class="permalink" href="#SYSCTL_ADD_PROC"><code class="Fn" id="SYSCTL_ADD_PROC">SYSCTL_ADD_PROC</code></a>() - to export a millisecond time interval. When using this handler, the - <var class="Fa">arg2</var> parameter points to an in-kernel variable of type - <var class="Vt">int</var> which stores a tick count suitable for use with - functions like <a class="Xr">tsleep(9)</a>. The - <code class="Fn">sysctl_msec_to_ticks</code>() function converts this value - to milliseconds when reporting the node's value. Similarly, - <code class="Fn">sysctl_msec_to_ticks</code>() accepts new values in - milliseconds and stores an equivalent value in ticks to - <var class="Fa">*arg2</var>. Note that new code should use kernel variables - of type <var class="Vt">sbintime_t</var> instead of tick counts.</p> -<p class="Pp" id="SYSCTL_ADD_SBINTIME_MSEC">The - <a class="permalink" href="#SYSCTL_ADD_SBINTIME_MSEC"><code class="Fn">SYSCTL_ADD_SBINTIME_MSEC</code></a>() - and - <a class="permalink" href="#SYSCTL_ADD_SBINTIME_USEC"><code class="Fn" id="SYSCTL_ADD_SBINTIME_USEC">SYSCTL_ADD_SBINTIME_USEC</code></a>() - functions and - <a class="permalink" href="#SYSCTL_SBINTIME_MSEC"><code class="Fn" id="SYSCTL_SBINTIME_MSEC">SYSCTL_SBINTIME_MSEC</code></a>() - and - <a class="permalink" href="#SYSCTL_SBINTIME_USEC"><code class="Fn" id="SYSCTL_SBINTIME_USEC">SYSCTL_SBINTIME_USEC</code></a>() - macros all create nodes which export an in-kernel variable of type - <var class="Vt">sbintime_t</var>. These nodes do not export the raw value of - the associated variable. Instead, they export a 64-bit integer containing a - count of either milliseconds (the MSEC variants) or microseconds (the USEC - variants).</p> -<p class="Pp" id="SYSCTL_ADD_TIMEVAL_SEC">The - <a class="permalink" href="#SYSCTL_ADD_TIMEVAL_SEC"><code class="Fn">SYSCTL_ADD_TIMEVAL_SEC</code></a>() - function and - <a class="permalink" href="#SYSCTL_TIMEVAL_SEC"><code class="Fn" id="SYSCTL_TIMEVAL_SEC">SYSCTL_TIMEVAL_SEC</code></a>() - macro create nodes which export an in-kernel variable of type - <var class="Vt">struct timeval</var>. These nodes do not export full value - of the associated structure. Instead, they export a count in seconds as a - simple integer which is stored in the <var class="Fa">tv_sec</var> field of - the associated variable. This function and macro are intended to be used - with variables which store a non-negative interval rather than an absolute - time. As a result, they reject attempts to store negative values.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CREATING_ROOT_NODES"><a class="permalink" href="#CREATING_ROOT_NODES">CREATING - ROOT NODES</a></h1> -<p class="Pp">Sysctl MIBs or OIDs are created in a hierarchical tree. The nodes - at the bottom of the tree are called root nodes, and have no parent OID. To - create bottom tree nodes the - <a class="permalink" href="#SYSCTL_ROOT_NODE"><code class="Fn" id="SYSCTL_ROOT_NODE">SYSCTL_ROOT_NODE</code></a>() - macro or the - <a class="permalink" href="#SYSCTL_ADD_ROOT_NODE"><code class="Fn" id="SYSCTL_ADD_ROOT_NODE">SYSCTL_ADD_ROOT_NODE</code></a>() - function needs to be used. By default all static sysctl node OIDs are global - and need a - <a class="permalink" href="#SYSCTL_DECL"><code class="Fn" id="SYSCTL_DECL">SYSCTL_DECL</code></a>() - statement prior to their - <a class="permalink" href="#SYSCTL_NODE"><code class="Fn" id="SYSCTL_NODE">SYSCTL_NODE</code></a>() - definition statement, typically in a so-called header file.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CREATING_SYSCTL_STRINGS"><a class="permalink" href="#CREATING_SYSCTL_STRINGS">CREATING - SYSCTL STRINGS</a></h1> -<p class="Pp">Zero terminated character strings sysctls are created either using - the - <a class="permalink" href="#SYSCTL_STRING"><code class="Fn" id="SYSCTL_STRING">SYSCTL_STRING</code></a>() - macro or the - <a class="permalink" href="#SYSCTL_ADD_STRING"><code class="Fn" id="SYSCTL_ADD_STRING">SYSCTL_ADD_STRING</code></a>() - function. If the <var class="Fa">len</var> argument is zero, the string - length is computed at every access to the OID using - <a class="Xr">strlen(3)</a>. Use the - <a class="permalink" href="#SYSCTL_CONST_STRING"><code class="Fn" id="SYSCTL_CONST_STRING">SYSCTL_CONST_STRING</code></a>() - macro or the - <a class="permalink" href="#SYSCTL_ADD_CONST_STRING"><code class="Fn" id="SYSCTL_ADD_CONST_STRING">SYSCTL_ADD_CONST_STRING</code></a>() - function to add a sysctl for a constant string.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CREATING_OPAQUE_SYSCTLS"><a class="permalink" href="#CREATING_OPAQUE_SYSCTLS">CREATING - OPAQUE SYSCTLS</a></h1> -<p class="Pp">The - <a class="permalink" href="#SYSCTL_OPAQUE"><code class="Fn" id="SYSCTL_OPAQUE">SYSCTL_OPAQUE</code></a>() - or - <a class="permalink" href="#SYSCTL_STRUCT"><code class="Fn" id="SYSCTL_STRUCT">SYSCTL_STRUCT</code></a>() - macros or the - <a class="permalink" href="#SYSCTL_ADD_OPAQUE"><code class="Fn" id="SYSCTL_ADD_OPAQUE">SYSCTL_ADD_OPAQUE</code></a>() - or - <a class="permalink" href="#SYSCTL_ADD_STRUCT"><code class="Fn" id="SYSCTL_ADD_STRUCT">SYSCTL_ADD_STRUCT</code></a>() - functions create an OID that handle any chunk of data of the size specified - by the <var class="Fa">len</var> argument and data pointed to by the - <var class="Fa">ptr</var> argument. When using the structure version the - type is encoded as part of the created sysctl.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CREATING_CUSTOM_SYSCTLS"><a class="permalink" href="#CREATING_CUSTOM_SYSCTLS">CREATING - CUSTOM SYSCTLS</a></h1> -<p class="Pp">The <code class="Fn">SYSCTL_PROC</code>() macro and the - <code class="Fn">SYSCTL_ADD_PROC</code>() function create OIDs with the - specified <span class="Pa">handler</span> function. The handler is - responsible for handling all read and write requests to the OID. This OID - type is especially useful if the kernel data is not easily accessible, or - needs to be processed before exporting.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CREATING_A_STATIC_SYSCTL"><a class="permalink" href="#CREATING_A_STATIC_SYSCTL">CREATING - A STATIC SYSCTL</a></h1> -<p class="Pp">Static sysctls are declared using one of the - <a class="permalink" href="#SYSCTL_BOOL"><code class="Fn" id="SYSCTL_BOOL">SYSCTL_BOOL</code></a>(), - <a class="permalink" href="#SYSCTL_COUNTER_U64"><code class="Fn" id="SYSCTL_COUNTER_U64">SYSCTL_COUNTER_U64</code></a>(), - <a class="permalink" href="#SYSCTL_COUNTER_U64_ARRAY"><code class="Fn" id="SYSCTL_COUNTER_U64_ARRAY">SYSCTL_COUNTER_U64_ARRAY</code></a>(), - <code class="Fn">SYSCTL_INT</code>(), - <a class="permalink" href="#SYSCTL_INT_WITH_LABEL"><code class="Fn" id="SYSCTL_INT_WITH_LABEL">SYSCTL_INT_WITH_LABEL</code></a>(), - <a class="permalink" href="#SYSCTL_LONG"><code class="Fn" id="SYSCTL_LONG">SYSCTL_LONG</code></a>(), - <code class="Fn">SYSCTL_NODE</code>(), - <a class="permalink" href="#SYSCTL_NODE_WITH_LABEL"><code class="Fn" id="SYSCTL_NODE_WITH_LABEL">SYSCTL_NODE_WITH_LABEL</code></a>(), - <code class="Fn">SYSCTL_OPAQUE</code>(), - <code class="Fn">SYSCTL_PROC</code>(), - <a class="permalink" href="#SYSCTL_QUAD"><code class="Fn" id="SYSCTL_QUAD">SYSCTL_QUAD</code></a>(), - <code class="Fn">SYSCTL_ROOT_NODE</code>(), - <a class="permalink" href="#SYSCTL_S8"><code class="Fn" id="SYSCTL_S8">SYSCTL_S8</code></a>(), - <a class="permalink" href="#SYSCTL_S16"><code class="Fn" id="SYSCTL_S16">SYSCTL_S16</code></a>(), - <a class="permalink" href="#SYSCTL_S32"><code class="Fn" id="SYSCTL_S32">SYSCTL_S32</code></a>(), - <a class="permalink" href="#SYSCTL_S64"><code class="Fn" id="SYSCTL_S64">SYSCTL_S64</code></a>(), - <code class="Fn">SYSCTL_SBINTIME_MSEC</code>(), - <code class="Fn">SYSCTL_SBINTIME_USEC</code>(), - <code class="Fn">SYSCTL_STRING</code>(), - <code class="Fn">SYSCTL_CONST_STRING</code>(), - <code class="Fn">SYSCTL_STRUCT</code>(), - <code class="Fn">SYSCTL_TIMEVAL_SEC</code>(), - <a class="permalink" href="#SYSCTL_U8"><code class="Fn" id="SYSCTL_U8">SYSCTL_U8</code></a>(), - <a class="permalink" href="#SYSCTL_U16"><code class="Fn" id="SYSCTL_U16">SYSCTL_U16</code></a>(), - <a class="permalink" href="#SYSCTL_U32"><code class="Fn" id="SYSCTL_U32">SYSCTL_U32</code></a>(), - <a class="permalink" href="#SYSCTL_U64"><code class="Fn" id="SYSCTL_U64">SYSCTL_U64</code></a>(), - <a class="permalink" href="#SYSCTL_UINT"><code class="Fn" id="SYSCTL_UINT">SYSCTL_UINT</code></a>(), - <a class="permalink" href="#SYSCTL_ULONG"><code class="Fn" id="SYSCTL_ULONG">SYSCTL_ULONG</code></a>(), - <a class="permalink" href="#SYSCTL_UQUAD"><code class="Fn" id="SYSCTL_UQUAD">SYSCTL_UQUAD</code></a>(), - <a class="permalink" href="#SYSCTL_UMA_CUR"><code class="Fn" id="SYSCTL_UMA_CUR">SYSCTL_UMA_CUR</code></a>() - or - <a class="permalink" href="#SYSCTL_UMA_MAX"><code class="Fn" id="SYSCTL_UMA_MAX">SYSCTL_UMA_MAX</code></a>() - macros.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CREATING_A_DYNAMIC_SYSCTL"><a class="permalink" href="#CREATING_A_DYNAMIC_SYSCTL">CREATING - A DYNAMIC SYSCTL</a></h1> -<p class="Pp">Dynamic nodes are created using one of the - <a class="permalink" href="#SYSCTL_ADD_BOOL"><code class="Fn" id="SYSCTL_ADD_BOOL">SYSCTL_ADD_BOOL</code></a>(), - <a class="permalink" href="#SYSCTL_ADD_COUNTER_U64"><code class="Fn" id="SYSCTL_ADD_COUNTER_U64">SYSCTL_ADD_COUNTER_U64</code></a>(), - <a class="permalink" href="#SYSCTL_ADD_COUNTER_U64_ARRAY"><code class="Fn" id="SYSCTL_ADD_COUNTER_U64_ARRAY">SYSCTL_ADD_COUNTER_U64_ARRAY</code></a>(), - <a class="permalink" href="#SYSCTL_ADD_INT"><code class="Fn" id="SYSCTL_ADD_INT">SYSCTL_ADD_INT</code></a>(), - <a class="permalink" href="#SYSCTL_ADD_LONG"><code class="Fn" id="SYSCTL_ADD_LONG">SYSCTL_ADD_LONG</code></a>(), - <a class="permalink" href="#SYSCTL_ADD_NODE"><code class="Fn" id="SYSCTL_ADD_NODE">SYSCTL_ADD_NODE</code></a>(), - <a class="permalink" href="#SYSCTL_ADD_NODE_WITH_LABEL"><code class="Fn" id="SYSCTL_ADD_NODE_WITH_LABEL">SYSCTL_ADD_NODE_WITH_LABEL</code></a>(), - <code class="Fn">SYSCTL_ADD_OPAQUE</code>(), - <code class="Fn">SYSCTL_ADD_PROC</code>(), - <a class="permalink" href="#SYSCTL_ADD_QUAD"><code class="Fn" id="SYSCTL_ADD_QUAD">SYSCTL_ADD_QUAD</code></a>(), - <code class="Fn">SYSCTL_ADD_ROOT_NODE</code>(), - <a class="permalink" href="#SYSCTL_ADD_S8"><code class="Fn" id="SYSCTL_ADD_S8">SYSCTL_ADD_S8</code></a>(), - <a class="permalink" href="#SYSCTL_ADD_S16"><code class="Fn" id="SYSCTL_ADD_S16">SYSCTL_ADD_S16</code></a>(), - <a class="permalink" href="#SYSCTL_ADD_S32"><code class="Fn" id="SYSCTL_ADD_S32">SYSCTL_ADD_S32</code></a>(), - <a class="permalink" href="#SYSCTL_ADD_S64"><code class="Fn" id="SYSCTL_ADD_S64">SYSCTL_ADD_S64</code></a>(), - <code class="Fn">SYSCTL_ADD_SBINTIME_MSEC</code>(), - <code class="Fn">SYSCTL_ADD_SBINTIME_USEC</code>(), - <code class="Fn">SYSCTL_ADD_STRING</code>(), - <code class="Fn">SYSCTL_ADD_CONST_STRING</code>(), - <code class="Fn">SYSCTL_ADD_STRUCT</code>(), - <code class="Fn">SYSCTL_ADD_TIMEVAL_SEC</code>(), - <a class="permalink" href="#SYSCTL_ADD_U8"><code class="Fn" id="SYSCTL_ADD_U8">SYSCTL_ADD_U8</code></a>(), - <a class="permalink" href="#SYSCTL_ADD_U16"><code class="Fn" id="SYSCTL_ADD_U16">SYSCTL_ADD_U16</code></a>(), - <a class="permalink" href="#SYSCTL_ADD_U32"><code class="Fn" id="SYSCTL_ADD_U32">SYSCTL_ADD_U32</code></a>(), - <a class="permalink" href="#SYSCTL_ADD_U64"><code class="Fn" id="SYSCTL_ADD_U64">SYSCTL_ADD_U64</code></a>(), - <a class="permalink" href="#SYSCTL_ADD_UAUTO"><code class="Fn" id="SYSCTL_ADD_UAUTO">SYSCTL_ADD_UAUTO</code></a>(), - <a class="permalink" href="#SYSCTL_ADD_UINT"><code class="Fn" id="SYSCTL_ADD_UINT">SYSCTL_ADD_UINT</code></a>(), - <a class="permalink" href="#SYSCTL_ADD_ULONG"><code class="Fn" id="SYSCTL_ADD_ULONG">SYSCTL_ADD_ULONG</code></a>(), - <a class="permalink" href="#SYSCTL_ADD_UQUAD"><code class="Fn" id="SYSCTL_ADD_UQUAD">SYSCTL_ADD_UQUAD</code></a>(), - <a class="permalink" href="#SYSCTL_ADD_UMA_CUR"><code class="Fn" id="SYSCTL_ADD_UMA_CUR">SYSCTL_ADD_UMA_CUR</code></a>() - or - <a class="permalink" href="#SYSCTL_ADD_UMA_MAX"><code class="Fn" id="SYSCTL_ADD_UMA_MAX">SYSCTL_ADD_UMA_MAX</code></a>() - functions. See <a class="Xr">sysctl_remove_oid(9)</a> or - <a class="Xr">sysctl_ctx_free(9)</a> for more information on how to destroy - a dynamically created OID.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CONTROL_FLAGS"><a class="permalink" href="#CONTROL_FLAGS">CONTROL - FLAGS</a></h1> -<p class="Pp">For most of the above functions and macros, declaring a type as - part of the access flags is not necessary — however, when declaring a - sysctl implemented by a function, including a type in the access mask is - required:</p> -<dl class="Bl-tag"> - <dt id="CTLTYPE_NODE"><a class="permalink" href="#CTLTYPE_NODE"><code class="Dv">CTLTYPE_NODE</code></a></dt> - <dd>This is a node intended to be a parent for other nodes.</dd> - <dt id="CTLTYPE_INT"><a class="permalink" href="#CTLTYPE_INT"><code class="Dv">CTLTYPE_INT</code></a></dt> - <dd>This is a signed integer.</dd> - <dt id="CTLTYPE_STRING"><a class="permalink" href="#CTLTYPE_STRING"><code class="Dv">CTLTYPE_STRING</code></a></dt> - <dd>This is a nul-terminated string stored in a character array.</dd> - <dt id="CTLTYPE_S8"><a class="permalink" href="#CTLTYPE_S8"><code class="Dv">CTLTYPE_S8</code></a></dt> - <dd>This is an 8-bit signed integer.</dd> - <dt id="CTLTYPE_S16"><a class="permalink" href="#CTLTYPE_S16"><code class="Dv">CTLTYPE_S16</code></a></dt> - <dd>This is a 16-bit signed integer.</dd> - <dt id="CTLTYPE_S32"><a class="permalink" href="#CTLTYPE_S32"><code class="Dv">CTLTYPE_S32</code></a></dt> - <dd>This is a 32-bit signed integer.</dd> - <dt id="CTLTYPE_S64"><a class="permalink" href="#CTLTYPE_S64"><code class="Dv">CTLTYPE_S64</code></a></dt> - <dd>This is a 64-bit signed integer.</dd> - <dt id="CTLTYPE_OPAQUE"><a class="permalink" href="#CTLTYPE_OPAQUE"><code class="Dv">CTLTYPE_OPAQUE</code></a></dt> - <dd>This is an opaque data structure.</dd> - <dt id="CTLTYPE_STRUCT"><a class="permalink" href="#CTLTYPE_STRUCT"><code class="Dv">CTLTYPE_STRUCT</code></a></dt> - <dd>Alias for <code class="Dv">CTLTYPE_OPAQUE</code>.</dd> - <dt id="CTLTYPE_U8"><a class="permalink" href="#CTLTYPE_U8"><code class="Dv">CTLTYPE_U8</code></a></dt> - <dd>This is an 8-bit unsigned integer.</dd> - <dt id="CTLTYPE_U16"><a class="permalink" href="#CTLTYPE_U16"><code class="Dv">CTLTYPE_U16</code></a></dt> - <dd>This is a 16-bit unsigned integer.</dd> - <dt id="CTLTYPE_U32"><a class="permalink" href="#CTLTYPE_U32"><code class="Dv">CTLTYPE_U32</code></a></dt> - <dd>This is a 32-bit unsigned integer.</dd> - <dt id="CTLTYPE_U64"><a class="permalink" href="#CTLTYPE_U64"><code class="Dv">CTLTYPE_U64</code></a></dt> - <dd>This is a 64-bit unsigned integer.</dd> - <dt id="CTLTYPE_UINT"><a class="permalink" href="#CTLTYPE_UINT"><code class="Dv">CTLTYPE_UINT</code></a></dt> - <dd>This is an unsigned integer.</dd> - <dt id="CTLTYPE_LONG"><a class="permalink" href="#CTLTYPE_LONG"><code class="Dv">CTLTYPE_LONG</code></a></dt> - <dd>This is a signed long.</dd> - <dt id="CTLTYPE_ULONG"><a class="permalink" href="#CTLTYPE_ULONG"><code class="Dv">CTLTYPE_ULONG</code></a></dt> - <dd>This is an unsigned long.</dd> -</dl> -<p class="Pp">All sysctl types except for new node declarations require one of - the following flags to be set indicating the read and write disposition of - the sysctl:</p> -<dl class="Bl-tag"> - <dt id="CTLFLAG_RD"><a class="permalink" href="#CTLFLAG_RD"><code class="Dv">CTLFLAG_RD</code></a></dt> - <dd>This is a read-only sysctl.</dd> - <dt id="CTLFLAG_RDTUN"><a class="permalink" href="#CTLFLAG_RDTUN"><code class="Dv">CTLFLAG_RDTUN</code></a></dt> - <dd>This is a read-only sysctl and tunable which is fetched once from the - system environment early during module load or system boot.</dd> - <dt id="CTLFLAG_WR"><a class="permalink" href="#CTLFLAG_WR"><code class="Dv">CTLFLAG_WR</code></a></dt> - <dd>This is a writable sysctl.</dd> - <dt id="CTLFLAG_RW"><a class="permalink" href="#CTLFLAG_RW"><code class="Dv">CTLFLAG_RW</code></a></dt> - <dd>This sysctl is readable and writable.</dd> - <dt id="CTLFLAG_RWTUN"><a class="permalink" href="#CTLFLAG_RWTUN"><code class="Dv">CTLFLAG_RWTUN</code></a></dt> - <dd>This is a readable and writeable sysctl and tunable which is fetched once - from the system environment early during module load or system boot.</dd> - <dt id="CTLFLAG_NOFETCH"><a class="permalink" href="#CTLFLAG_NOFETCH"><code class="Dv">CTLFLAG_NOFETCH</code></a></dt> - <dd>In case the node is marked as a tunable using the CTLFLAG_[XX]TUN, this - flag will prevent fetching the initial value from the system environment. - Typically this flag should only be used for very early low level system - setup code, and not by common drivers and modules.</dd> - <dt id="CTLFLAG_MPSAFE"><a class="permalink" href="#CTLFLAG_MPSAFE"><code class="Dv">CTLFLAG_MPSAFE</code></a></dt> - <dd>This <a class="Xr">sysctl(9)</a> handler is MP safe. Do not grab Giant - around calls to this handler. This should only be used for - <a class="permalink" href="#SYSCTL_PROC"><code class="Fn" id="SYSCTL_PROC">SYSCTL_PROC</code></a>() - entries.</dd> -</dl> -<p class="Pp">Additionally, any of the following optional flags may also be - specified:</p> -<dl class="Bl-tag"> - <dt id="CTLFLAG_ANYBODY"><a class="permalink" href="#CTLFLAG_ANYBODY"><code class="Dv">CTLFLAG_ANYBODY</code></a></dt> - <dd>Any user or process can write to this sysctl.</dd> - <dt id="CTLFLAG_CAPRD"><a class="permalink" href="#CTLFLAG_CAPRD"><code class="Dv">CTLFLAG_CAPRD</code></a></dt> - <dd>A process in capability mode can read from this sysctl.</dd> - <dt id="CTLFLAG_CAPWR"><a class="permalink" href="#CTLFLAG_CAPWR"><code class="Dv">CTLFLAG_CAPWR</code></a></dt> - <dd>A process in capability mode can write to this sysctl.</dd> - <dt id="CTLFLAG_SECURE"><a class="permalink" href="#CTLFLAG_SECURE"><code class="Dv">CTLFLAG_SECURE</code></a></dt> - <dd>This sysctl can be written to only if the effective securelevel of the - process is ≤ 0.</dd> - <dt id="CTLFLAG_PRISON"><a class="permalink" href="#CTLFLAG_PRISON"><code class="Dv">CTLFLAG_PRISON</code></a></dt> - <dd>This sysctl can be written to by processes in - <a class="Xr">jail(2)</a>.</dd> - <dt id="CTLFLAG_SKIP"><a class="permalink" href="#CTLFLAG_SKIP"><code class="Dv">CTLFLAG_SKIP</code></a></dt> - <dd>When iterating the sysctl name space, do not list this sysctl.</dd> - <dt id="CTLFLAG_TUN"><a class="permalink" href="#CTLFLAG_TUN"><code class="Dv">CTLFLAG_TUN</code></a></dt> - <dd>Advisory flag that a system tunable also exists for this variable. The - initial sysctl value is fetched once from the system environment early - during module load or system boot.</dd> - <dt id="CTLFLAG_DYN"><a class="permalink" href="#CTLFLAG_DYN"><code class="Dv">CTLFLAG_DYN</code></a></dt> - <dd>Dynamically created OIDs automatically get this flag set.</dd> - <dt id="CTLFLAG_VNET"><a class="permalink" href="#CTLFLAG_VNET"><code class="Dv">CTLFLAG_VNET</code></a></dt> - <dd>OID references a VIMAGE-enabled variable.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">Sample use of <code class="Fn">SYSCTL_DECL</code>() to declare the - <var class="Va">security</var> sysctl tree for use by new nodes:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>SYSCTL_DECL(_security);</pre> -</div> -<p class="Pp">Examples of integer, opaque, string, and procedure sysctls - follow:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>/* - * Example of a constant integer value. Notice that the control - * flags are CTLFLAG_RD, the variable pointer is SYSCTL_NULL_INT_PTR, - * and the value is declared. - */ -SYSCTL_INT(_kern, OID_AUTO, hz_max, CTLFLAG_RD, SYSCTL_NULL_INT_PTR, HZ_MAXIMUM, - "Maximum hz value supported"); - -/* - * Example of a variable integer value. Notice that the control - * flags are CTLFLAG_RW, the variable pointer is set, and the - * value is 0. - */ -static int doingcache = 1; /* 1 => enable the cache */ -SYSCTL_INT(_debug, OID_AUTO, vfscache, CTLFLAG_RW, &doingcache, 0, - "Enable name cache"); - -/* - * Example of a variable string value. Notice that the control - * flags are CTLFLAG_RW, that the variable pointer and string - * size are set. Unlike newer sysctls, this older sysctl uses a - * static oid number. - */ -char kernelname[MAXPATHLEN] = "/kernel"; /* XXX bloat */ -SYSCTL_STRING(_kern, KERN_BOOTFILE, bootfile, CTLFLAG_RW, - kernelname, sizeof(kernelname), "Name of kernel file booted"); - -/* - * Example of an opaque data type exported by sysctl. Notice that - * the variable pointer and size are provided, as well as a format - * string for sysctl(8). - */ -static l_fp pps_freq; /* scaled frequency offset (ns/s) */ -SYSCTL_OPAQUE(_kern_ntp_pll, OID_AUTO, pps_freq, CTLFLAG_RD, - &pps_freq, sizeof(pps_freq), "I", ""); - -/* - * Example of a procedure based sysctl exporting string - * information. Notice that the data type is declared, the NULL - * variable pointer and 0 size, the function pointer, and the - * format string for sysctl(8). - */ -SYSCTL_PROC(_kern_timecounter, OID_AUTO, hardware, CTLTYPE_STRING | - CTLFLAG_RW, NULL, 0, sysctl_kern_timecounter_hardware, "A", - "");</pre> -</div> -<p class="Pp">The following is an example of how to create a new top-level - category and how to hook up another subtree to an existing static node. This - example does not use contexts, which results in tedious management of all - intermediate oids, as they need to be freed later on:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>#include <sys/sysctl.h> - ... -/* - * Need to preserve pointers to newly created subtrees, - * to be able to free them later: - */ -static struct sysctl_oid *root1; -static struct sysctl_oid *root2; -static struct sysctl_oid *oidp; -static int a_int; -static char *string = "dynamic sysctl"; - ... - -root1 = SYSCTL_ADD_ROOT_NODE(NULL, - OID_AUTO, "newtree", CTLFLAG_RW, 0, "new top level tree"); -oidp = SYSCTL_ADD_INT(NULL, SYSCTL_CHILDREN(root1), - OID_AUTO, "newint", CTLFLAG_RW, &a_int, 0, "new int leaf"); - ... -root2 = SYSCTL_ADD_NODE(NULL, SYSCTL_STATIC_CHILDREN(_debug), - OID_AUTO, "newtree", CTLFLAG_RW, 0, "new tree under debug"); -oidp = SYSCTL_ADD_STRING(NULL, SYSCTL_CHILDREN(root2), - OID_AUTO, "newstring", CTLFLAG_RD, string, 0, "new string leaf");</pre> -</div> -<p class="Pp">This example creates the following subtrees:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>debug.newtree.newstring -newtree.newint</pre> -</div> -<p class="Pp" id="Care"><a class="permalink" href="#Care"><i class="Em">Care - should be taken to free all OIDs once they are no longer needed!</i></a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYSCTL_NAMING"><a class="permalink" href="#SYSCTL_NAMING">SYSCTL - NAMING</a></h1> -<p class="Pp">When adding, modifying, or removing sysctl names, it is important - to be aware that these interfaces may be used by users, libraries, - applications, or documentation (such as published books), and are implicitly - published application interfaces. As with other application interfaces, - caution must be taken not to break existing applications, and to think about - future use of new name spaces so as to avoid the need to rename or remove - interfaces that might be depended on in the future.</p> -<p class="Pp">The semantics chosen for a new sysctl should be as clear as - possible, and the name of the sysctl must closely reflect its semantics. - Therefore the sysctl name deserves a fair amount of consideration. It should - be short but yet representative of the sysctl meaning. If the name consists - of several words, they should be separated by underscore characters, as in - <var class="Va">compute_summary_at_mount</var>. Underscore characters may be - omitted only if the name consists of not more than two words, each being not - longer than four characters, as in <var class="Va">bootfile</var>.</p> -<p class="Pp">For boolean sysctls, negative logic should be totally avoided. - That is, do not use names like <var class="Va">no_foobar</var> or - <var class="Va">foobar_disable</var>. They are confusing and lead to - configuration errors. Use positive logic instead: - <var class="Va">foobar</var>, <var class="Va">foobar_enable</var>.</p> -<p class="Pp">A temporary sysctl node OID that should not be relied upon must be - designated as such by a leading underscore character in its name. For - example: <var class="Va">_dirty_hack</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">sysctl(3)</a>, <a class="Xr">sysctl(8)</a>, - <a class="Xr">device_get_sysctl(9)</a>, <a class="Xr">sysctl_add_oid(9)</a>, - <a class="Xr">sysctl_ctx_free(9)</a>, <a class="Xr">sysctl_ctx_init(9)</a>, - <a class="Xr">sysctl_remove_oid(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <a class="Xr">sysctl(8)</a> utility first appeared in - <span class="Ux">4.4BSD</span>. - <code class="Nm">SYSCTL_ADD_CONST_STRING</code> first appeared in - <span class="Ux">FreeBSD 12.1</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">sysctl</code> implementation originally found - in <span class="Ux">BSD</span> has been extensively rewritten by - <span class="An">Poul-Henning Kamp</span> in order to add support for name - lookups, name space iteration, and dynamic addition of MIB nodes.</p> -<p class="Pp">This man page was written by <span class="An">Robert N. M. - Watson</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SECURITY_CONSIDERATIONS"><a class="permalink" href="#SECURITY_CONSIDERATIONS">SECURITY - CONSIDERATIONS</a></h1> -<p class="Pp">When creating new sysctls, careful attention should be paid to the - security implications of the monitoring or management interface being - created. Most sysctls present in the kernel are read-only or writable only - by the superuser. Sysctls exporting extensive information on system data - structures and operation, especially those implemented using procedures, - will wish to implement access control to limit the undesired exposure of - information about other processes, network connections, etc.</p> -<p class="Pp">The following top level sysctl name spaces are commonly used:</p> -<dl class="Bl-tag"> - <dt id="compat"><var class="Va">compat</var></dt> - <dd>Compatibility layer information.</dd> - <dt id="debug"><var class="Va">debug</var></dt> - <dd>Debugging information. Various name spaces exist under - <var class="Va">debug</var>.</dd> - <dt id="hw"><var class="Va">hw</var></dt> - <dd>Hardware and device driver information.</dd> - <dt id="kern"><var class="Va">kern</var></dt> - <dd>Kernel behavior tuning; generally deprecated in favor of more specific - name spaces.</dd> - <dt id="machdep"><var class="Va">machdep</var></dt> - <dd>Machine-dependent configuration parameters.</dd> - <dt id="net"><var class="Va">net</var></dt> - <dd>Network subsystem. Various protocols have name spaces under - <var class="Va">net</var>.</dd> - <dt id="regression"><var class="Va">regression</var></dt> - <dd>Regression test configuration and information.</dd> - <dt id="security"><var class="Va">security</var></dt> - <dd>Security and security-policy configuration and information.</dd> - <dt id="sysctl"><var class="Va">sysctl</var></dt> - <dd>Reserved name space for the implementation of sysctl.</dd> - <dt id="user"><var class="Va">user</var></dt> - <dd>Configuration settings relating to user application behavior. Generally, - configuring applications using kernel sysctls is discouraged.</dd> - <dt id="vfs"><var class="Va">vfs</var></dt> - <dd>Virtual file system configuration and information.</dd> - <dt id="vm"><var class="Va">vm</var></dt> - <dd>Virtual memory subsystem configuration and information.</dd> -</dl> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 28, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/sysctl_add_oid.9 3.html b/static/freebsd/man9/sysctl_add_oid.9 3.html deleted file mode 100644 index a47cb3ce..00000000 --- a/static/freebsd/man9/sysctl_add_oid.9 3.html +++ /dev/null @@ -1,151 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SYSCTL_ADD_OID(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SYSCTL_ADD_OID(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">sysctl_add_oid</code>, - <code class="Nm">sysctl_move_oid</code>, - <code class="Nm">sysctl_remove_oid</code>, - <code class="Nm">sysctl_remove_name</code> — <span class="Nd">runtime - sysctl tree manipulation</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/sysctl.h</a>></code></p> -<p class="Pp"><var class="Ft">struct sysctl_oid *</var> - <br/> - <code class="Fn">sysctl_add_oid</code>(<var class="Fa">struct sysctl_ctx_list - *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>, - <var class="Fa">int number</var>, <var class="Fa">const char *name</var>, - <var class="Fa">int kind</var>, <var class="Fa">void *arg1</var>, - <var class="Fa">intmax_t arg2</var>, <var class="Fa">int (*handler) - (SYSCTL_HANDLER_ARGS)</var>, <var class="Fa">const char *format</var>, - <var class="Fa">const char *descr</var>, <var class="Fa">const char - *label</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sysctl_move_oid</code>(<var class="Fa">struct sysctl_oid - *oidp</var>, <var class="Fa">struct sysctl_oid_list *parent</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sysctl_remove_oid</code>(<var class="Fa">struct sysctl_oid - *oidp</var>, <var class="Fa">int del</var>, <var class="Fa">int - recurse</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sysctl_remove_name</code>(<var class="Fa">struct sysctl_oid - *oidp</var>, <var class="Fa">const char *name</var>, <var class="Fa">int - del</var>, <var class="Fa">int recurse</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These functions provide the interface for creating and deleting - sysctl OIDs at runtime for example during the lifetime of a module. The - wrapper macros defined by <a class="Xr">sysctl(9)</a> are recommended when - creating new OIDs. - <a class="permalink" href="#sysctl_add_oid"><code class="Fn" id="sysctl_add_oid">sysctl_add_oid</code></a>() - should not be called directly from the code.</p> -<p class="Pp">Dynamic OIDs of type <code class="Dv">CTLTYPE_NODE</code> are - reusable so that several code sections can create and delete them, but in - reality they are allocated and freed based on their reference count. As a - consequence, it is possible for two or more code sections to create - partially overlapping trees that they both can use. It is not possible to - create overlapping leaves, nor to create different child types with the same - name and parent.</p> -<p class="Pp" id="sysctl_add_oid~2">The - <a class="permalink" href="#sysctl_add_oid~2"><code class="Fn">sysctl_add_oid</code></a>() - function creates a raw OID of any type and connects it to its parent node, - if any. If the OID is successfully created, the function returns a pointer - to it else it returns <code class="Dv">NULL</code>. Many of the arguments - for <code class="Fn">sysctl_add_oid</code>() are common to the wrapper - macros defined by <a class="Xr">sysctl(9)</a>.</p> -<p class="Pp" id="sysctl_move_oid">The - <a class="permalink" href="#sysctl_move_oid"><code class="Fn">sysctl_move_oid</code></a>() - function reparents an existing OID. The OID is assigned a new number as if - it had been created with <var class="Fa">number</var> set to - <code class="Dv">OID_AUTO</code>.</p> -<p class="Pp" id="sysctl_remove_oid">The - <a class="permalink" href="#sysctl_remove_oid"><code class="Fn">sysctl_remove_oid</code></a>() - function removes a dynamically created OID from the tree and optionally - freeing its resources. It takes the following arguments:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">oidp</var></dt> - <dd>A pointer to the dynamic OID to be removed. If the OID is not dynamic, or - the pointer is <code class="Dv">NULL</code>, the function returns - <code class="Er">EINVAL</code>.</dd> - <dt><var class="Fa">del</var></dt> - <dd>If non-zero, <code class="Fn">sysctl_remove_oid</code>() will try to free - the OID's resources when the reference count of the OID becomes zero. - However, if <var class="Fa">del</var> is set to 0, the routine will only - deregister the OID from the tree, without freeing its resources. This - behaviour is useful when the caller expects to rollback (possibly - partially failed) deletion of many OIDs later.</dd> - <dt id="WARNING"><var class="Fa">recurse</var></dt> - <dd>If non-zero, attempt to remove the node and all its children. If - <span class="Pa">recurse</span> is set to 0, any attempt to remove a node - that contains any children will result in a - <code class="Er">ENOTEMPTY</code> error. - <a class="permalink" href="#WARNING"><i class="Em">WARNING</i></a>: - <a class="permalink" href="#use"><i class="Em" id="use">use recursive - deletion with extreme caution</i></a>! Normally it should not be needed if - contexts are used. Contexts take care of tracking inter-dependencies - between users of the tree. However, in some extreme cases it might be - necessary to remove part of the subtree no matter how it was created, in - order to free some other resources. Be aware, though, that this may result - in a system <a class="Xr">panic(9)</a> if other code sections continue to - use removed subtrees.</dd> -</dl> -<p class="Pp" id="sysctl_remove_name">The - <a class="permalink" href="#sysctl_remove_name"><code class="Fn">sysctl_remove_name</code></a>() - function looks up the child node matching the <var class="Fa">name</var> - argument and then invokes the <code class="Fn">sysctl_remove_oid</code>() - function on that node, passing along the <var class="Fa">del</var> and - <var class="Fa">recurse</var> arguments. If a node having the specified name - does not exist an error code of <code class="Er">ENOENT</code> is returned. - Else the error code from <code class="Fn">sysctl_remove_oid</code>() is - returned.</p> -<p class="Pp">In most cases the programmer should use contexts, as described in - <a class="Xr">sysctl_ctx_init(9)</a>, to keep track of created OIDs, and to - delete them later in orderly fashion.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">sysctl(8)</a>, <a class="Xr">sysctl(9)</a>, - <a class="Xr">sysctl_ctx_free(9)</a>, - <a class="Xr">sysctl_ctx_init(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">These functions first appeared in <span class="Ux">FreeBSD - 4.2</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp"><span class="An">Andrzej Bialecki</span> - <<a class="Mt" href="mailto:abial@FreeBSD.org">abial@FreeBSD.org</a>></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">Sharing nodes between many code sections causes interdependencies - that sometimes may lock the resources. For example, if module A hooks up a - subtree to an OID created by module B, module B will be unable to delete - that OID. These issues are handled properly by sysctl contexts.</p> -<p class="Pp">Many operations on the tree involve traversing linked lists. For - this reason, OID creation and removal is relatively costly.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 13, 2016</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/sysctl_ctx_init.9 3.html b/static/freebsd/man9/sysctl_ctx_init.9 3.html deleted file mode 100644 index 6d96ac48..00000000 --- a/static/freebsd/man9/sysctl_ctx_init.9 3.html +++ /dev/null @@ -1,200 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">SYSCTL_CTX_INIT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">SYSCTL_CTX_INIT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">sysctl_ctx_init</code>, - <code class="Nm">sysctl_ctx_free</code>, - <code class="Nm">sysctl_ctx_entry_add</code>, - <code class="Nm">sysctl_ctx_entry_find</code>, - <code class="Nm">sysctl_ctx_entry_del</code> — - <span class="Nd">sysctl context for managing dynamically created sysctl - OIDs</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/sysctl.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sysctl_ctx_init</code>(<var class="Fa">struct sysctl_ctx_list - *clist</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sysctl_ctx_free</code>(<var class="Fa">struct sysctl_ctx_list - *clist</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_ctx_entry *</var> - <br/> - <code class="Fn">sysctl_ctx_entry_add</code>(<var class="Fa">struct - sysctl_ctx_list *clist</var>, <var class="Fa">struct sysctl_oid - *oidp</var>);</p> -<p class="Pp"><var class="Ft">struct sysctl_ctx_entry *</var> - <br/> - <code class="Fn">sysctl_ctx_entry_find</code>(<var class="Fa">struct - sysctl_ctx_list *clist</var>, <var class="Fa">struct sysctl_oid - *oidp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">sysctl_ctx_entry_del</code>(<var class="Fa">struct - sysctl_ctx_list *clist</var>, <var class="Fa">struct sysctl_oid - *oidp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These functions provide an interface for managing dynamically - created OIDs. The sysctl context is responsible for keeping track of created - OIDs, as well as their proper removal when needed. It adds a simple - transactional aspect to OID removal operations; i.e., if a removal operation - fails part way, it is possible to roll back the sysctl tree to its previous - state.</p> -<p class="Pp" id="sysctl_ctx_init">The - <a class="permalink" href="#sysctl_ctx_init"><code class="Fn">sysctl_ctx_init</code></a>() - function initializes a sysctl context. The <var class="Fa">clist</var> - argument must point to an already allocated variable. A context - <a class="permalink" href="#must"><i class="Em" id="must">must</i></a> be - initialized before use. Once it is initialized, a pointer to the context can - be passed as an argument to all the <var class="Fa">SYSCTL_ADD_*</var> - macros (see <a class="Xr">sysctl_add_oid(9)</a>), and it will be updated - with entries pointing to newly created OIDS.</p> -<p class="Pp">Internally, the context is represented as a - <a class="Xr">queue(3)</a> TAILQ linked list. The list consists of - <code class="Li">struct sysctl_ctx_entry</code> entries:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct sysctl_ctx_entry { - struct sysctl_oid *entry; - TAILQ_ENTRY(sysctl_ctx_entry) link; -}; - -TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_entry);</pre> -</div> -<p class="Pp">Each context entry points to one dynamic OID that it manages. - Newly created OIDs are always inserted in the front of the list.</p> -<p class="Pp" id="sysctl_ctx_free">The - <a class="permalink" href="#sysctl_ctx_free"><code class="Fn">sysctl_ctx_free</code></a>() - function removes the context and associated OIDs it manages. If the function - completes successfully, all managed OIDs have been unregistered (removed - from the tree) and freed, together with all their allocated memory, and the - entries of the context have been freed as well.</p> -<p class="Pp" id="sysctl_ctx_free~2">The removal operation is performed in two - steps. First, for each context entry, the function - <a class="Xr">sysctl_remove_oid(9)</a> is executed, with parameter - <var class="Fa">del</var> set to 0, which inhibits the freeing of resources. - If there are no errors during this step, - <a class="permalink" href="#sysctl_ctx_free~2"><code class="Fn">sysctl_ctx_free</code></a>() - proceeds to the next step. If the first step fails, all unregistered OIDs - associated with the context are registered again.</p> -<p class="Pp" id="Note"><a class="permalink" href="#Note"><i class="Em">Note</i></a>: - in most cases, the programmer specifies <code class="Dv">OID_AUTO</code> as - the OID number when creating an OID. However, during registration of the OID - in the tree, this number is changed to the first available number greater - than or equal to <code class="Dv">CTL_AUTO_START</code>. If the first step - of context deletion fails, re-registration of the OID does not change the - already assigned OID number (which is different from OID_AUTO). This ensures - that re-registered entries maintain their original positions in the - tree.</p> -<p class="Pp">The second step actually performs the deletion of the dynamic - OIDs. <a class="Xr">sysctl_remove_oid(9)</a> iterates through the context - list, starting from beginning (i.e., the newest entries). - <i class="Em">Important</i>: this time, the function not only deletes the - OIDs from the tree, but also frees their memory (provided that oid_refcnt == - 0), as well as the memory of all context entries.</p> -<p class="Pp" id="sysctl_ctx_entry_add">The - <a class="permalink" href="#sysctl_ctx_entry_add"><code class="Fn">sysctl_ctx_entry_add</code></a>() - function allows the addition of an existing dynamic OID to a context.</p> -<p class="Pp" id="sysctl_ctx_entry_del">The - <a class="permalink" href="#sysctl_ctx_entry_del"><code class="Fn">sysctl_ctx_entry_del</code></a>() - function removes an entry from the context. <i class="Em">Important</i>: in - this case, only the corresponding <code class="Li">struct - sysctl_ctx_entry</code> is freed, but the <var class="Fa">oidp</var> pointer - remains intact. Thereafter, the programmer is responsible for managing the - resources allocated to this OID.</p> -<p class="Pp" id="sysctl_ctx_entry_find">The - <a class="permalink" href="#sysctl_ctx_entry_find"><code class="Fn">sysctl_ctx_entry_find</code></a>() - function searches for a given <var class="Fa">oidp</var> within a context - list, either returning a pointer to the <var class="Fa">struct - sysctl_ctx_entry</var> found, or <code class="Dv">NULL</code>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">The following is an example of how to create a new top-level - category and how to hook up another subtree to an existing static node. This - example uses contexts to keep track of the OIDs.</p> -<div class="Bd Pp Li"> -<pre>#include <sys/sysctl.h> - ... -static struct sysctl_ctx_list clist; -static struct sysctl_oid *oidp; -static int a_int; -static const char *string = "dynamic sysctl"; - ... - -sysctl_ctx_init(&clist); -oidp = SYSCTL_ADD_ROOT_NODE(&clist, - OID_AUTO, "newtree", CTLFLAG_RW, 0, "new top level tree"); -oidp = SYSCTL_ADD_INT(&clist, SYSCTL_CHILDREN(oidp), - OID_AUTO, "newint", CTLFLAG_RW, &a_int, 0, "new int leaf"); - ... -oidp = SYSCTL_ADD_NODE(&clist, SYSCTL_STATIC_CHILDREN(_debug), - OID_AUTO, "newtree", CTLFLAG_RW, 0, "new tree under debug"); -oidp = SYSCTL_ADD_STRING(&clist, SYSCTL_CHILDREN(oidp), - OID_AUTO, "newstring", CTLFLAG_RD, string, 0, "new string leaf"); - ... -/* Now we can free up the OIDs */ -if (sysctl_ctx_free(&clist)) { - printf("can't free this context - other OIDs depend on it"); - return (ENOTEMPTY); -} else { - printf("Success!\n"); - return (0); -}</pre> -</div> -<p class="Pp">This example creates the following subtrees:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>debug.newtree.newstring -newtree.newint</pre> -</div> -<p class="Pp">Note that both trees are removed, and their resources freed, - through one <code class="Fn">sysctl_ctx_free</code>() call, which starts by - freeing the newest entries (leaves) and then proceeds to free the older - entries (in this case the nodes).</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">queue(3)</a>, <a class="Xr">sysctl(8)</a>, - <a class="Xr">sysctl(9)</a>, <a class="Xr">sysctl_add_oid(9)</a>, - <a class="Xr">sysctl_remove_oid(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">These functions first appeared in <span class="Ux">FreeBSD - 4.2</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp"><span class="An">Andrzej Bialecki</span> - <<a class="Mt" href="mailto:abial@FreeBSD.org">abial@FreeBSD.org</a>></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">The current removal algorithm is somewhat heavy. In the worst - case, all OIDs need to be unregistered, registered again, and then - unregistered and deleted. However, the algorithm does guarantee - transactional properties for removal operations.</p> -<p class="Pp">All operations on contexts involve linked list traversal. For this - reason, creation and removal of entries is relatively costly.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 31, 2014</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/taskqueue.9 4.html b/static/freebsd/man9/taskqueue.9 4.html deleted file mode 100644 index d9c314ee..00000000 --- a/static/freebsd/man9/taskqueue.9 4.html +++ /dev/null @@ -1,494 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">TASKQUEUE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">TASKQUEUE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">taskqueue</code> — - <span class="Nd">asynchronous task execution</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/kernel.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/malloc.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/queue.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/taskqueue.h</a>></code></p> -<div class="Bd Pp Li"> -<pre>typedef void (*task_fn_t)(void *context, int pending); - -typedef void (*taskqueue_enqueue_fn)(void *context); - -struct task { - STAILQ_ENTRY(task) ta_link; /* link for queue */ - u_short ta_pending; /* count times queued */ - u_short ta_priority; /* priority of task in queue */ - task_fn_t ta_func; /* task handler */ - void *ta_context; /* argument for handler */ -}; - -enum taskqueue_callback_type { - TASKQUEUE_CALLBACK_TYPE_INIT, - TASKQUEUE_CALLBACK_TYPE_SHUTDOWN, -}; - -typedef void (*taskqueue_callback_fn)(void *context); - -struct timeout_task;</pre> -</div> -<br/> -<var class="Ft">struct taskqueue *</var> -<br/> -<code class="Fn">taskqueue_create</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>, <var class="Fa" style="white-space: nowrap;">int - mflags</var>, - <var class="Fa" style="white-space: nowrap;">taskqueue_enqueue_fn - enqueue</var>, <var class="Fa" style="white-space: nowrap;">void - *context</var>); -<p class="Pp"><var class="Ft">struct taskqueue *</var> - <br/> - <code class="Fn">taskqueue_create_fast</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>, <var class="Fa" style="white-space: nowrap;">int - mflags</var>, - <var class="Fa" style="white-space: nowrap;">taskqueue_enqueue_fn - enqueue</var>, <var class="Fa" style="white-space: nowrap;">void - *context</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">taskqueue_start_threads</code>(<var class="Fa" style="white-space: nowrap;">struct - taskqueue **tqp</var>, <var class="Fa" style="white-space: nowrap;">int - count</var>, <var class="Fa" style="white-space: nowrap;">int pri</var>, - <var class="Fa" style="white-space: nowrap;">const char *name</var>, - <var class="Fa" style="white-space: nowrap;">...</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">taskqueue_start_threads_cpuset</code>(<var class="Fa">struct - taskqueue **tqp</var>, <var class="Fa">int count</var>, <var class="Fa">int - pri</var>, <var class="Fa">cpuset_t *mask</var>, <var class="Fa">const char - *name</var>, <var class="Fa">...</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">taskqueue_start_threads_in_proc</code>(<var class="Fa">struct - taskqueue **tqp</var>, <var class="Fa">int count</var>, <var class="Fa">int - pri</var>, <var class="Fa">struct proc *proc</var>, <var class="Fa">const - char *name</var>, <var class="Fa">...</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">taskqueue_set_callback</code>(<var class="Fa" style="white-space: nowrap;">struct - taskqueue *queue</var>, <var class="Fa" style="white-space: nowrap;">enum - taskqueue_callback_type cb_type</var>, - <var class="Fa" style="white-space: nowrap;">taskqueue_callback_fn - callback</var>, <var class="Fa" style="white-space: nowrap;">void - *context</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">taskqueue_free</code>(<var class="Fa" style="white-space: nowrap;">struct - taskqueue *queue</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">taskqueue_enqueue</code>(<var class="Fa" style="white-space: nowrap;">struct - taskqueue *queue</var>, <var class="Fa" style="white-space: nowrap;">struct - task *task</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">taskqueue_enqueue_flags</code>(<var class="Fa" style="white-space: nowrap;">struct - taskqueue *queue</var>, <var class="Fa" style="white-space: nowrap;">struct - task *task</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">taskqueue_enqueue_timeout</code>(<var class="Fa" style="white-space: nowrap;">struct - taskqueue *queue</var>, <var class="Fa" style="white-space: nowrap;">struct - timeout_task *timeout_task</var>, - <var class="Fa" style="white-space: nowrap;">int ticks</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">taskqueue_enqueue_timeout_sbt</code>(<var class="Fa" style="white-space: nowrap;">struct - taskqueue *queue</var>, <var class="Fa" style="white-space: nowrap;">struct - timeout_task *timeout_task</var>, - <var class="Fa" style="white-space: nowrap;">sbintime_t sbt</var>, - <var class="Fa" style="white-space: nowrap;">sbintime_t pr</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">taskqueue_cancel</code>(<var class="Fa" style="white-space: nowrap;">struct - taskqueue *queue</var>, <var class="Fa" style="white-space: nowrap;">struct - task *task</var>, <var class="Fa" style="white-space: nowrap;">u_int - *pendp</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">taskqueue_cancel_timeout</code>(<var class="Fa" style="white-space: nowrap;">struct - taskqueue *queue</var>, <var class="Fa" style="white-space: nowrap;">struct - timeout_task *timeout_task</var>, - <var class="Fa" style="white-space: nowrap;">u_int *pendp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">taskqueue_drain</code>(<var class="Fa" style="white-space: nowrap;">struct - taskqueue *queue</var>, <var class="Fa" style="white-space: nowrap;">struct - task *task</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">taskqueue_drain_timeout</code>(<var class="Fa" style="white-space: nowrap;">struct - taskqueue *queue</var>, <var class="Fa" style="white-space: nowrap;">struct - timeout_task *timeout_task</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">taskqueue_drain_all</code>(<var class="Fa" style="white-space: nowrap;">struct - taskqueue *queue</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">taskqueue_quiesce</code>(<var class="Fa" style="white-space: nowrap;">struct - taskqueue *queue</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">taskqueue_block</code>(<var class="Fa" style="white-space: nowrap;">struct - taskqueue *queue</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">taskqueue_unblock</code>(<var class="Fa" style="white-space: nowrap;">struct - taskqueue *queue</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">taskqueue_member</code>(<var class="Fa" style="white-space: nowrap;">struct - taskqueue *queue</var>, <var class="Fa" style="white-space: nowrap;">struct - thread *td</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">taskqueue_run</code>(<var class="Fa" style="white-space: nowrap;">struct - taskqueue *queue</var>);</p> -<p class="Pp"><code class="Fn">TASK_INIT</code>(<var class="Fa" style="white-space: nowrap;">struct - task *task</var>, <var class="Fa" style="white-space: nowrap;">int - priority</var>, <var class="Fa" style="white-space: nowrap;">task_fn_t - func</var>, <var class="Fa" style="white-space: nowrap;">void - *context</var>);</p> -<p class="Pp"><code class="Fn">TASK_INITIALIZER</code>(<var class="Fa" style="white-space: nowrap;">int - priority</var>, <var class="Fa" style="white-space: nowrap;">task_fn_t - func</var>, <var class="Fa" style="white-space: nowrap;">void - *context</var>);</p> -<p class="Pp"><code class="Fn">TASKQUEUE_DECLARE</code>(<var class="Fa" style="white-space: nowrap;">name</var>);</p> -<p class="Pp"><code class="Fn">TASKQUEUE_DEFINE</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">taskqueue_enqueue_fn - enqueue</var>, <var class="Fa" style="white-space: nowrap;">void - *context</var>, - <var class="Fa" style="white-space: nowrap;">init</var>);</p> -<p class="Pp"><code class="Fn">TASKQUEUE_FAST_DEFINE</code>(<var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">taskqueue_enqueue_fn - enqueue</var>, <var class="Fa" style="white-space: nowrap;">void - *context</var>, - <var class="Fa" style="white-space: nowrap;">init</var>);</p> -<p class="Pp"><code class="Fn">TASKQUEUE_DEFINE_THREAD</code>(<var class="Fa" style="white-space: nowrap;">name</var>);</p> -<p class="Pp"><code class="Fn">TASKQUEUE_FAST_DEFINE_THREAD</code>(<var class="Fa" style="white-space: nowrap;">name</var>);</p> -<p class="Pp"><code class="Fn">TIMEOUT_TASK_INIT</code>(<var class="Fa" style="white-space: nowrap;">struct - taskqueue *queue</var>, <var class="Fa" style="white-space: nowrap;">struct - timeout_task *timeout_task</var>, - <var class="Fa" style="white-space: nowrap;">int priority</var>, - <var class="Fa" style="white-space: nowrap;">task_fn_t func</var>, - <var class="Fa" style="white-space: nowrap;">void *context</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">These functions provide a simple interface for asynchronous - execution of code.</p> -<p class="Pp" id="taskqueue_create">The function - <a class="permalink" href="#taskqueue_create"><code class="Fn">taskqueue_create</code></a>() - is used to create new queues. The arguments to - <code class="Fn">taskqueue_create</code>() include a name that should be - unique, a set of <a class="Xr">malloc(9)</a> flags that specify whether the - call to - <a class="permalink" href="#malloc"><code class="Fn" id="malloc">malloc</code></a>() - is allowed to sleep, a function that is called from - <code class="Fn">taskqueue_enqueue</code>() when a task is added to the - queue, and a pointer to the memory location where the identity of the thread - that services the queue is recorded. The function called from - <code class="Fn">taskqueue_enqueue</code>() must arrange for the queue to be - processed (for instance by scheduling a software interrupt or waking a - kernel thread). The memory location where the thread identity is recorded is - used to signal the service thread(s) to terminate--when this value is set to - zero and the thread is signaled it will terminate. If the queue is intended - for use in fast interrupt handlers - <code class="Fn">taskqueue_create_fast</code>() should be used in place of - <code class="Fn">taskqueue_create</code>().</p> -<p class="Pp" id="taskqueue_free">The function - <a class="permalink" href="#taskqueue_free"><code class="Fn">taskqueue_free</code></a>() - should be used to free the memory used by the queue. Any tasks that are on - the queue will be executed at this time after which the thread servicing the - queue will be signaled that it should exit.</p> -<p class="Pp" id="taskqueue_start_threads">Once a taskqueue has been created, - its threads should be started using - <a class="permalink" href="#taskqueue_start_threads"><code class="Fn">taskqueue_start_threads</code></a>(), - <a class="permalink" href="#taskqueue_start_threads_cpuset"><code class="Fn" id="taskqueue_start_threads_cpuset">taskqueue_start_threads_cpuset</code></a>() - or - <a class="permalink" href="#taskqueue_start_threads_in_proc"><code class="Fn" id="taskqueue_start_threads_in_proc">taskqueue_start_threads_in_proc</code></a>(). - <code class="Fn">taskqueue_start_threads_cpuset</code>() takes a - <var class="Va">cpuset</var> argument which will cause the threads which are - started for the taskqueue to be restricted to run on the given CPUs. - <code class="Fn">taskqueue_start_threads_in_proc</code>() takes a - <var class="Va">proc</var> argument which will cause the threads which are - started for the taskqueue to be assigned to the given kernel process. - Callbacks may optionally be registered using - <a class="permalink" href="#taskqueue_set_callback"><code class="Fn" id="taskqueue_set_callback">taskqueue_set_callback</code></a>(). - Currently, callbacks may be registered for the following purposes:</p> -<dl class="Bl-tag"> - <dt id="TASKQUEUE_CALLBACK_TYPE_INIT"><a class="permalink" href="#TASKQUEUE_CALLBACK_TYPE_INIT"><code class="Dv">TASKQUEUE_CALLBACK_TYPE_INIT</code></a></dt> - <dd>This callback is called by every thread in the taskqueue, before it - executes any tasks. This callback must be set before the taskqueue's - threads are started.</dd> - <dt id="TASKQUEUE_CALLBACK_TYPE_SHUTDOWN"><a class="permalink" href="#TASKQUEUE_CALLBACK_TYPE_SHUTDOWN"><code class="Dv">TASKQUEUE_CALLBACK_TYPE_SHUTDOWN</code></a></dt> - <dd>This callback is called by every thread in the taskqueue, after it - executes its last task. This callback will always be called before the - taskqueue structure is reclaimed.</dd> -</dl> -<p class="Pp" id="taskqueue_enqueue">To add a task to the list of tasks queued - on a taskqueue, call - <a class="permalink" href="#taskqueue_enqueue"><code class="Fn">taskqueue_enqueue</code></a>() - with pointers to the queue and task. If the task's - <var class="Va">ta_pending</var> field is non-zero, then it is simply - incremented to reflect the number of times the task was enqueued, up to a - cap of USHRT_MAX. Otherwise, the task is added to the list before the first - task which has a lower <var class="Va">ta_priority</var> value or at the end - of the list if no tasks have a lower priority. Enqueueing a task does not - perform any memory allocation which makes it suitable for calling from an - interrupt handler. This function will return <code class="Er">EPIPE</code> - if the queue is being freed.</p> -<p class="Pp" id="taskqueue_enqueue~2">When a task is executed, first it is - removed from the queue, the value of <var class="Va">ta_pending</var> is - recorded and then the field is zeroed. The function - <var class="Va">ta_func</var> from the task structure is called with the - value of the field <var class="Va">ta_context</var> as its first argument - and the value of <var class="Va">ta_pending</var> as its second argument. - After the function <var class="Va">ta_func</var> returns, - <a class="Xr">wakeup(9)</a> is called on the task pointer passed to - <a class="permalink" href="#taskqueue_enqueue~2"><code class="Fn">taskqueue_enqueue</code></a>().</p> -<p class="Pp" id="taskqueue_enqueue_flags">The - <a class="permalink" href="#taskqueue_enqueue_flags"><code class="Fn">taskqueue_enqueue_flags</code></a>() - accepts an extra <var class="Va">flags</var> parameter which specifies a set - of optional flags to alter the behavior of - <code class="Fn">taskqueue_enqueue</code>(). It contains one or more of the - following flags:</p> -<dl class="Bl-tag"> - <dt id="TASKQUEUE_FAIL_IF_PENDING"><a class="permalink" href="#TASKQUEUE_FAIL_IF_PENDING"><code class="Dv">TASKQUEUE_FAIL_IF_PENDING</code></a></dt> - <dd><code class="Fn">taskqueue_enqueue_flags</code>() fails if the task is - already scheduled for execution. <code class="Er">EEXIST</code> is - returned and the <var class="Va">ta_pending</var> counter value remains - unchanged.</dd> - <dt id="TASKQUEUE_FAIL_IF_CANCELING"><a class="permalink" href="#TASKQUEUE_FAIL_IF_CANCELING"><code class="Dv">TASKQUEUE_FAIL_IF_CANCELING</code></a></dt> - <dd><code class="Fn">taskqueue_enqueue_flags</code>() fails if the task is in - the canceling state and <code class="Er">ECANCELED</code> is - returned.</dd> -</dl> -<p class="Pp" id="taskqueue_enqueue_timeout">The - <a class="permalink" href="#taskqueue_enqueue_timeout"><code class="Fn">taskqueue_enqueue_timeout</code></a>() - function is used to schedule the enqueue after the specified number of - <var class="Va">ticks</var>. The - <a class="permalink" href="#taskqueue_enqueue_timeout_sbt"><code class="Fn" id="taskqueue_enqueue_timeout_sbt">taskqueue_enqueue_timeout_sbt</code></a>() - function provides finer control over the scheduling based on - <var class="Va">sbt</var>, <var class="Va">pr</var>, and - <var class="Va">flags</var>, as detailed in <a class="Xr">callout(9)</a>. If - the <var class="Va">ticks</var> argument is negative, the already scheduled - enqueueing is not re-scheduled. Otherwise, the task is scheduled for - enqueueing in the future, after the absolute value of - <var class="Va">ticks</var> is passed. This function returns -1 if the task - is being drained. Otherwise, the number of pending calls is returned.</p> -<p class="Pp" id="taskqueue_cancel">The - <a class="permalink" href="#taskqueue_cancel"><code class="Fn">taskqueue_cancel</code></a>() - function is used to cancel a task. The <var class="Va">ta_pending</var> - count is cleared, and the old value returned in the reference parameter - <var class="Fa">pendp</var>, if it is non-<code class="Dv">NULL</code>. If - the task is currently running, <code class="Dv">EBUSY</code> is returned, - otherwise 0. To implement a blocking - <code class="Fn">taskqueue_cancel</code>() that waits for a running task to - finish, it could look like:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>while (taskqueue_cancel(tq, task, NULL) != 0) - taskqueue_drain(tq, task);</pre> -</div> -<p class="Pp" id="taskqueue_drain">Note that, as with - <a class="permalink" href="#taskqueue_drain"><code class="Fn">taskqueue_drain</code></a>(), - the caller is responsible for ensuring that the task is not re-enqueued - after being canceled.</p> -<p class="Pp" id="taskqueue_cancel_timeout">Similarly, the - <a class="permalink" href="#taskqueue_cancel_timeout"><code class="Fn">taskqueue_cancel_timeout</code></a>() - function is used to cancel the scheduled task execution.</p> -<p class="Pp" id="taskqueue_drain~2">The - <a class="permalink" href="#taskqueue_drain~2"><code class="Fn">taskqueue_drain</code></a>() - function is used to wait for the task to finish, and the - <a class="permalink" href="#taskqueue_drain_timeout"><code class="Fn" id="taskqueue_drain_timeout">taskqueue_drain_timeout</code></a>() - function is used to wait for the scheduled task to finish. There is no - guarantee that the task will not be enqueued after call to - <code class="Fn">taskqueue_drain</code>(). If the caller wants to put the - task into a known state, then before calling - <code class="Fn">taskqueue_drain</code>() the caller should use out-of-band - means to ensure that the task would not be enqueued. For example, if the - task is enqueued by an interrupt filter, then the interrupt could be - disabled.</p> -<p class="Pp" id="taskqueue_drain_all">The - <a class="permalink" href="#taskqueue_drain_all"><code class="Fn">taskqueue_drain_all</code></a>() - function is used to wait for all pending and running tasks that are enqueued - on the taskqueue to finish. Tasks posted to the taskqueue after - <code class="Fn">taskqueue_drain_all</code>() begins processing, including - pending enqueues scheduled by a previous call to - <code class="Fn">taskqueue_enqueue_timeout</code>(), do not extend the wait - time of <code class="Fn">taskqueue_drain_all</code>() and may complete after - <code class="Fn">taskqueue_drain_all</code>() returns. The - <a class="permalink" href="#taskqueue_quiesce"><code class="Fn" id="taskqueue_quiesce">taskqueue_quiesce</code></a>() - function is used to wait for the queue to become empty and for all running - tasks to finish. To avoid blocking indefinitely, the caller must ensure by - some mechanism that tasks will eventually stop being posted to the - queue.</p> -<p class="Pp" id="taskqueue_block">The - <a class="permalink" href="#taskqueue_block"><code class="Fn">taskqueue_block</code></a>() - function blocks the taskqueue. It prevents any enqueued but not running - tasks from being executed. Future calls to - <code class="Fn">taskqueue_enqueue</code>() will enqueue tasks, but the - tasks will not be run until <code class="Fn">taskqueue_unblock</code>() is - called. Please note that <code class="Fn">taskqueue_block</code>() does not - wait for any currently running tasks to finish. Thus, the - <code class="Fn">taskqueue_block</code>() does not provide a guarantee that - <code class="Fn">taskqueue_run</code>() is not running after - <code class="Fn">taskqueue_block</code>() returns, but it does provide a - guarantee that <code class="Fn">taskqueue_run</code>() will not be called - again until <code class="Fn">taskqueue_unblock</code>() is called. If the - caller requires a guarantee that <code class="Fn">taskqueue_run</code>() is - not running, then this must be arranged by the caller. Note that if - <code class="Fn">taskqueue_drain</code>() is called on a task that is - enqueued on a taskqueue that is blocked by - <code class="Fn">taskqueue_block</code>(), then - <code class="Fn">taskqueue_drain</code>() can not return until the taskqueue - is unblocked. This can result in a deadlock if the thread blocked in - <code class="Fn">taskqueue_drain</code>() is the thread that is supposed to - call <code class="Fn">taskqueue_unblock</code>(). Thus, use of - <code class="Fn">taskqueue_drain</code>() after - <code class="Fn">taskqueue_block</code>() is discouraged, because the state - of the task can not be known in advance. The same caveat applies to - <code class="Fn">taskqueue_drain_all</code>().</p> -<p class="Pp" id="taskqueue_unblock">The - <a class="permalink" href="#taskqueue_unblock"><code class="Fn">taskqueue_unblock</code></a>() - function unblocks the previously blocked taskqueue. All enqueued tasks can - be run after this call.</p> -<p class="Pp" id="taskqueue_member">The - <a class="permalink" href="#taskqueue_member"><code class="Fn">taskqueue_member</code></a>() - function returns <span class="No">1</span> if the given thread - <var class="Fa">td</var> is part of the given taskqueue - <var class="Fa">queue</var> and <span class="No">0</span> otherwise.</p> -<p class="Pp" id="taskqueue_run">The - <a class="permalink" href="#taskqueue_run"><code class="Fn">taskqueue_run</code></a>() - function will run all pending tasks in the specified - <var class="Fa">queue</var>. Normally this function is only used - internally.</p> -<p class="Pp" id="TASK_INIT">A convenience macro, - <a class="permalink" href="#TASK_INIT"><code class="Fn">TASK_INIT</code></a>(<var class="Fa">task</var>, - <var class="Fa">priority</var>, <var class="Fa">func</var>, - <var class="Fa">context</var>) is provided to initialise a - <var class="Va">task</var> structure. The - <a class="permalink" href="#TASK_INITIALIZER"><code class="Fn" id="TASK_INITIALIZER">TASK_INITIALIZER</code></a>() - macro generates an initializer for a task structure. A macro - <a class="permalink" href="#TIMEOUT_TASK_INIT"><code class="Fn" id="TIMEOUT_TASK_INIT">TIMEOUT_TASK_INIT</code></a>(<var class="Fa">queue</var>, - <var class="Fa">timeout_task</var>, <var class="Fa">priority</var>, - <var class="Fa">func</var>, <var class="Fa">context</var>) initializes the - <var class="Va">timeout_task</var> structure. The values of - <var class="Va">priority</var>, <var class="Va">func</var>, and - <var class="Va">context</var> are simply copied into the task structure - fields and the <var class="Va">ta_pending</var> field is cleared.</p> -<p class="Pp" id="TASKQUEUE_DECLARE">Five macros - <a class="permalink" href="#TASKQUEUE_DECLARE"><code class="Fn">TASKQUEUE_DECLARE</code></a>(<var class="Fa">name</var>), - <a class="permalink" href="#TASKQUEUE_DEFINE"><code class="Fn" id="TASKQUEUE_DEFINE">TASKQUEUE_DEFINE</code></a>(<var class="Fa">name</var>, - <var class="Fa">enqueue</var>, <var class="Fa">context</var>, - <var class="Fa">init</var>), - <code class="Fn">TASKQUEUE_FAST_DEFINE</code>(<var class="Fa">name</var>, - <var class="Fa">enqueue</var>, <var class="Fa">context</var>, - <var class="Fa">init</var>), and - <code class="Fn">TASKQUEUE_DEFINE_THREAD</code>(<var class="Fa">name</var>) - <code class="Fn">TASKQUEUE_FAST_DEFINE_THREAD</code>(<var class="Fa">name</var>) - are used to declare a reference to a global queue, to define the - implementation of the queue, and declare a queue that uses its own thread. - The <code class="Fn">TASKQUEUE_DEFINE</code>() macro arranges to call - <code class="Fn">taskqueue_create</code>() with the values of its - <var class="Va">name</var>, <var class="Va">enqueue</var> and - <var class="Va">context</var> arguments during system initialisation. After - calling <code class="Fn">taskqueue_create</code>(), the - <var class="Va">init</var> argument to the macro is executed as a C - statement, allowing any further initialisation to be performed (such as - registering an interrupt handler, etc.).</p> -<p class="Pp" id="TASKQUEUE_DEFINE_THREAD">The - <a class="permalink" href="#TASKQUEUE_DEFINE_THREAD"><code class="Fn">TASKQUEUE_DEFINE_THREAD</code></a>() - macro defines a new taskqueue with its own kernel thread to serve tasks. The - variable <var class="Vt">struct taskqueue *taskqueue_name</var> is used to - enqueue tasks onto the queue.</p> -<p class="Pp" id="TASKQUEUE_FAST_DEFINE"><a class="permalink" href="#TASKQUEUE_FAST_DEFINE"><code class="Fn">TASKQUEUE_FAST_DEFINE</code></a>() - and - <a class="permalink" href="#TASKQUEUE_FAST_DEFINE_THREAD"><code class="Fn" id="TASKQUEUE_FAST_DEFINE_THREAD">TASKQUEUE_FAST_DEFINE_THREAD</code></a>() - act just like <code class="Fn">TASKQUEUE_DEFINE</code>() and - <code class="Fn">TASKQUEUE_DEFINE_THREAD</code>() respectively but taskqueue - is created with - <a class="permalink" href="#taskqueue_create_fast"><code class="Fn" id="taskqueue_create_fast">taskqueue_create_fast</code></a>().</p> -<section class="Ss"> -<h2 class="Ss" id="Predefined_Task_Queues"><a class="permalink" href="#Predefined_Task_Queues">Predefined - Task Queues</a></h2> -<p class="Pp">The system provides four global taskqueues, - <var class="Va">taskqueue_fast</var>, <var class="Va">taskqueue_swi</var>, - <var class="Va">taskqueue_swi_giant</var>, and - <var class="Va">taskqueue_thread</var>. The - <var class="Va">taskqueue_fast</var> queue is for swi handlers dispatched - from fast interrupt handlers, where sleep mutexes cannot be used. The swi - taskqueues are run via a software interrupt mechanism. The - <var class="Va">taskqueue_swi</var> queue runs without the protection of the - <var class="Va">Giant</var> kernel lock, and the - <var class="Va">taskqueue_swi_giant</var> queue runs with the protection of - the <var class="Va">Giant</var> kernel lock. The thread taskqueue - <var class="Va">taskqueue_thread</var> runs in a kernel thread context, and - tasks run from this thread do not run under the <var class="Va">Giant</var> - kernel lock. If the caller wants to run under <var class="Va">Giant</var>, - he should explicitly acquire and release <var class="Va">Giant</var> in his - taskqueue handler routine.</p> -<p class="Pp" id="taskqueue_enqueue~3">To use these queues, call - <a class="permalink" href="#taskqueue_enqueue~3"><code class="Fn">taskqueue_enqueue</code></a>() - with the value of the global taskqueue variable for the queue you wish to - use.</p> -<p class="Pp">The software interrupt queues can be used, for instance, for - implementing interrupt handlers which must perform a significant amount of - processing in the handler. The hardware interrupt handler would perform - minimal processing of the interrupt and then enqueue a task to finish the - work. This reduces to a minimum the amount of time spent with interrupts - disabled.</p> -<p class="Pp">The thread queue can be used, for instance, by interrupt level - routines that need to call kernel functions that do things that can only be - done from a thread context. (e.g., call malloc with the M_WAITOK flag.)</p> -<p class="Pp">Note that tasks queued on shared taskqueues such as - <var class="Va">taskqueue_swi</var> may be delayed an indeterminate amount - of time before execution. If queueing delays cannot be tolerated then a - private taskqueue should be created with a dedicated processing thread.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">callout(9)</a>, <a class="Xr">intr_event(9)</a>, - <a class="Xr">kthread(9)</a>, <a class="Xr">swi(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">This interface first appeared in <span class="Ux">FreeBSD - 5.0</span>. There is a similar facility called work_queue in the Linux - kernel.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 25, 2022</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/tcp_functions.9 3.html b/static/freebsd/man9/tcp_functions.9 3.html deleted file mode 100644 index a75f8a1f..00000000 --- a/static/freebsd/man9/tcp_functions.9 3.html +++ /dev/null @@ -1,316 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">TCP_FUNCTIONS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">TCP_FUNCTIONS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">tcp_functions</code> — - <span class="Nd">Alternate TCP Stack Framework</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">netinet/tcp.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">netinet/tcp_var.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">register_tcp_functions</code>(<var class="Fa" style="white-space: nowrap;">struct - tcp_function_block *blk</var>, - <var class="Fa" style="white-space: nowrap;">int wait</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">register_tcp_functions_as_name</code>(<var class="Fa" style="white-space: nowrap;">struct - tcp_function_block *blk</var>, - <var class="Fa" style="white-space: nowrap;">const char *name</var>, - <var class="Fa" style="white-space: nowrap;">int wait</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">register_tcp_functions_as_names</code>(<var class="Fa" style="white-space: nowrap;">struct - tcp_function_block *blk</var>, - <var class="Fa" style="white-space: nowrap;">int wait</var>, - <var class="Fa" style="white-space: nowrap;">const char *names[]</var>, - <var class="Fa" style="white-space: nowrap;">int *num_names</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">deregister_tcp_functions</code>(<var class="Fa" style="white-space: nowrap;">struct - tcp_function_block *blk</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">tcp_functions</code> framework allows a - kernel developer to implement alternate TCP stacks. The alternate stacks can - be compiled in the kernel or can be implemented in loadable kernel modules. - This functionality is intended to encourage experimentation with the TCP - stack and to allow alternate behaviors to be deployed for different TCP - connections on a single system.</p> -<p class="Pp">A system administrator can set a system default stack. By default, - all TCP connections will use the system default stack. Additionally, users - can specify a particular stack to use on a per-connection basis. (See - <a class="Xr">tcp(4)</a> for details on setting the system default stack, or - selecting a specific stack for a given connection.)</p> -<p class="Pp">This man page treats "TCP stacks" as synonymous with - "function blocks". This is intentional. A "TCP stack" is - a collection of functions that implement a set of behavior. Therefore, an - alternate "function block" defines an alternate "TCP - stack".</p> -<p class="Pp" id="register_tcp_functions">The - <a class="permalink" href="#register_tcp_functions"><code class="Fn">register_tcp_functions</code></a>(), - <code class="Fn">register_tcp_functions_as_name</code>(), and - <code class="Fn">register_tcp_functions_as_names</code>() functions request - that the system add a specified function block and register it for use with - a given name. Modules may register the same function block multiple times - with different names. However, names must be globally unique among all - registered function blocks. Also, modules may not ever modify the contents - of the function block (including the name) after it has been registered, - unless the module first successfully de-registers the function block.</p> -<p class="Pp" id="register_tcp_functions~2">The - <a class="permalink" href="#register_tcp_functions~2"><code class="Fn">register_tcp_functions</code></a>() - function requests that the system register the function block with the name - defined in the function block's <var class="Va">tfb_tcp_block_name</var> - field. Note that this is the only one of the three registration functions - that automatically registers the function block using the name defined in - the function block's <var class="Va">tfb_tcp_block_name</var> field. If a - module uses one of the other registration functions, it may request that the - system register the function block using the name defined in the function - block's <var class="Va">tfb_tcp_block_name</var> field by explicitly - providing that name.</p> -<p class="Pp" id="register_tcp_functions_as_name">The - <a class="permalink" href="#register_tcp_functions_as_name"><code class="Fn">register_tcp_functions_as_name</code></a>() - function requests that the system register the function block with the name - provided in the <var class="Fa">name</var> argument.</p> -<p class="Pp" id="register_tcp_functions_as_names">The - <a class="permalink" href="#register_tcp_functions_as_names"><code class="Fn">register_tcp_functions_as_names</code></a>() - function requests that the system register the function block with all the - names provided in the <var class="Fa">names</var> argument. The - <var class="Fa">num_names</var> argument provides a pointer to the number of - names. This number must not exceed TCP_FUNCTION_NAME_NUM_MAX. This function - will either succeed in registering all of the names in the array, or none of - the names in the array. On failure, the <var class="Fa">num_names</var> - argument is updated with the index number of the entry in the - <var class="Fa">names</var> array which the system was processing when it - encountered the error.</p> -<p class="Pp" id="deregister_tcp_functions">The - <a class="permalink" href="#deregister_tcp_functions"><code class="Fn">deregister_tcp_functions</code></a>() - function requests that the system remove a specified function block from the - system. If this call succeeds, it will completely deregister the function - block, regardless of the number of names used to register the function - block. If the call fails because sockets are still using the specified - function block, the system will mark the function block as being in the - process of being removed. This will prevent additional sockets from using - the specified function block. However, it will not impact sockets that are - already using the function block.</p> -<p class="Pp" id="deregister_tcp_functions~2"><code class="Nm">tcp_functions</code> - modules must call one or more of the registration functions during - initialization and successfully call the - <a class="permalink" href="#deregister_tcp_functions~2"><code class="Fn">deregister_tcp_functions</code></a>() - function prior to allowing the module to be unloaded.</p> -<p class="Pp">The <var class="Fa">blk</var> argument is a pointer to a - <var class="Vt">struct tcp_function_block</var>, which is explained below - (see <a class="Sx" href="#Function_Block_Structure">Function Block - Structure</a>). The <var class="Fa">wait</var> argument is used as the - <var class="Fa">flags</var> argument to <a class="Xr">malloc(9)</a>, and - must be set to one of the valid values defined in that man page.</p> -<section class="Ss"> -<h2 class="Ss" id="Function_Block_Structure"><a class="permalink" href="#Function_Block_Structure">Function - Block Structure</a></h2> -<p class="Pp">The <var class="Fa">blk argument is a pointer to a</var> - <var class="Vt">struct tcp_function_block</var>, which has the following - members:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct tcp_function_block { - char tfb_tcp_block_name[TCP_FUNCTION_NAME_LEN_MAX]; - int (*tfb_tcp_output)(struct tcpcb *); - void (*tfb_tcp_do_segment)(struct mbuf *, struct tcphdr *, - struct socket *, struct tcpcb *, - int, int, uint8_t, - int); - int (*tfb_tcp_ctloutput)(struct socket *so, - struct sockopt *sopt, - struct inpcb *inp, struct tcpcb *tp); - /* Optional memory allocation/free routine */ - void (*tfb_tcp_fb_init)(struct tcpcb *); - void (*tfb_tcp_fb_fini)(struct tcpcb *, int); - /* Optional timers, must define all if you define one */ - int (*tfb_tcp_timer_stop_all)(struct tcpcb *); - void (*tfb_tcp_timer_activate)(struct tcpcb *, - uint32_t, u_int); - int (*tfb_tcp_timer_active)(struct tcpcb *, uint32_t); - void (*tfb_tcp_timer_stop)(struct tcpcb *, uint32_t); - /* Optional function */ - void (*tfb_tcp_rexmit_tmr)(struct tcpcb *); - /* Mandatory function */ - int (*tfb_tcp_handoff_ok)(struct tcpcb *); - /* System use */ - volatile uint32_t tfb_refcnt; - uint32_t tfb_flags; -};</pre> -</div> -<p class="Pp">The <var class="Va">tfb_tcp_block_name</var> field identifies the - unique name of the TCP stack, and should be no longer than - TCP_FUNCTION_NAME_LEN_MAX-1 characters in length.</p> -<p class="Pp" id="tcp_output">The <var class="Va">tfb_tcp_output</var>, - <var class="Va">tfb_tcp_do_segment</var>, and - <var class="Va">tfb_tcp_ctloutput</var> fields are pointers to functions - that perform the equivalent actions as the default - <a class="permalink" href="#tcp_output"><code class="Fn">tcp_output</code></a>(), - <a class="permalink" href="#tcp_do_segment"><code class="Fn" id="tcp_do_segment">tcp_do_segment</code></a>(), - and - <a class="permalink" href="#tcp_default_ctloutput"><code class="Fn" id="tcp_default_ctloutput">tcp_default_ctloutput</code></a>() - functions, respectively. Each of these function pointers must be - non-NULL.</p> -<p class="Pp">If a TCP stack needs to initialize data when a socket first - selects the TCP stack (or, when the socket is first opened), it should set a - non-NULL pointer in the <var class="Va">tfb_tcp_fb_init</var> field. - Likewise, if a TCP stack needs to cleanup data when a socket stops using the - TCP stack (or, when the socket is closed), it should set a non-NULL pointer - in the <var class="Va">tfb_tcp_fb_fini</var> field.</p> -<p class="Pp">If the <var class="Va">tfb_tcp_fb_fini</var> argument is non-NULL, - the function to which it points is called when the kernel is destroying the - TCP control block or when the socket is transitioning to use a different TCP - stack. The function is called with arguments of the TCP control block and an - integer flag. The flag will be zero if the socket is transitioning to use - another TCP stack or one if the TCP control block is being destroyed.</p> -<p class="Pp" id="tcp_timer_activate">If the TCP stack implements additional - timers, the TCP stack should set a non-NULL pointer in the - <var class="Va">tfb_tcp_timer_stop_all</var>, - <var class="Va">tfb_tcp_timer_activate</var>, - <var class="Va">tfb_tcp_timer_active</var>, and - <var class="Va">tfb_tcp_timer_stop</var> fields. These fields should all be - <code class="Dv">NULL</code> or should all contain pointers to functions. - The <var class="Va">tfb_tcp_timer_activate</var>, - <var class="Va">tfb_tcp_timer_active</var>, and - <var class="Va">tfb_tcp_timer_stop</var> functions will be called when the - <a class="permalink" href="#tcp_timer_activate"><code class="Fn">tcp_timer_activate</code></a>(), - <a class="permalink" href="#tcp_timer_active"><code class="Fn" id="tcp_timer_active">tcp_timer_active</code></a>(), - and - <a class="permalink" href="#tcp_timer_stop"><code class="Fn" id="tcp_timer_stop">tcp_timer_stop</code></a>() - functions, respectively, are called with a timer type other than the - standard types. The functions defined by the TCP stack have the same - semantics (both for arguments and return values) as the normal timer - functions they supplement.</p> -<p class="Pp">Additionally, a stack may define its own actions to take when the - retransmit timer fires by setting a non-NULL function pointer in the - <var class="Va">tfb_tcp_rexmit_tmr</var> field. This function is called very - early in the process of handling a retransmit timer. However, care must be - taken to ensure the retransmit timer leaves the TCP control block in a valid - state for the remainder of the retransmit timer logic.</p> -<p class="Pp">A user may select a new TCP stack before calling at any time. - Therefore, the function pointer <var class="Va">tfb_tcp_handoff_ok</var> - field must be non-NULL. If a user attempts to select that TCP stack, the - kernel will call the function pointed to by the - <var class="Va">tfb_tcp_handoff_ok</var> field. The function should return 0 - if the user is allowed to switch the socket to use the TCP stack. In this - case, the kernel will call the function pointed to by - <var class="Va">tfb_tcp_fb_init</var> if this function pointer is non-NULL - and finally perform the stack switch. If the user is not allowed to switch - the socket, the function should undo any changes it made to the connection - state configuration and return an error code, which will be returned to the - user.</p> -<p class="Pp">The <var class="Va">tfb_refcnt</var> and - <var class="Va">tfb_flags</var> fields are used by the kernel's TCP code and - will be initialized when the TCP stack is registered.</p> -</section> -<section class="Ss"> -<h2 class="Ss" id="Requirements_for_Alternate_TCP_Stacks"><a class="permalink" href="#Requirements_for_Alternate_TCP_Stacks">Requirements - for Alternate TCP Stacks</a></h2> -<p class="Pp">If the TCP stack needs to store data beyond what is stored in the - default TCP control block, the TCP stack can initialize its own - per-connection storage. The <var class="Va">t_fb_ptr</var> field in the - <var class="Vt">struct tcpcb</var> control block structure has been reserved - to hold a pointer to this per-connection storage. If the TCP stack uses this - alternate storage, it should understand that the value of the - <var class="Va">t_fb_ptr</var> pointer may not be initialized to - <code class="Dv">NULL</code>. Therefore, it should use a - <var class="Va">tfb_tcp_fb_init</var> function to initialize this field. - Additionally, it should use a <var class="Va">tfb_tcp_fb_fini</var> function - to deallocate storage when the socket is closed.</p> -<p class="Pp">It is understood that alternate TCP stacks may keep different sets - of data. However, in order to ensure that data is available to both the user - and the rest of the system in a standardized format, alternate TCP stacks - must update all fields in the TCP control block to the greatest extent - practical.</p> -</section> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">register_tcp_functions</code>(), - <code class="Fn">register_tcp_functions_as_name</code>(), - <code class="Fn">register_tcp_functions_as_names</code>(), and - <code class="Fn">deregister_tcp_functions</code>() functions return zero on - success and non-zero on failure. In particular, the - <code class="Fn">deregister_tcp_functions</code>() will return - <code class="Er">EBUSY</code> until no more connections are using the - specified TCP stack. A module calling - <code class="Fn">deregister_tcp_functions</code>() must be prepared to wait - until all connections have stopped using the specified TCP stack.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp">The <code class="Fn">register_tcp_functions</code>(), - <code class="Fn">register_tcp_functions_as_name</code>(), and - <code class="Fn">register_tcp_functions_as_names</code>() functions will - fail if:</p> -<dl class="Bl-tag"> - <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt> - <dd>Any of the members of the <var class="Fa">blk</var> argument are set - incorrectly.</dd> - <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt> - <dd>The function could not allocate memory for its internal data.</dd> - <dt id="EALREADY">[<a class="permalink" href="#EALREADY"><code class="Er">EALREADY</code></a>]</dt> - <dd>The <var class="Fa">blk</var> is already registered or a function block is - already registered with the same name.</dd> -</dl> -Additionally, <code class="Fn">register_tcp_functions_as_names</code>() will - fail if: -<dl class="Bl-tag"> - <dt id="E2BIG">[<a class="permalink" href="#E2BIG"><code class="Er">E2BIG</code></a>]</dt> - <dd>The number of names pointed to by the <var class="Fa">num_names</var> - argument is larger than TCP_FUNCTION_NAME_NUM_MAX.</dd> -</dl> -The <code class="Fn">deregister_tcp_functions</code>() function will fail if: -<dl class="Bl-tag"> - <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt> - <dd>The <var class="Fa">blk</var> argument references the kernel's compiled-in - default function block.</dd> - <dt id="EBUSY">[<a class="permalink" href="#EBUSY"><code class="Er">EBUSY</code></a>]</dt> - <dd>The function block is still in use by one or more sockets, or is defined - as the current default function block.</dd> - <dt id="ENOENT">[<a class="permalink" href="#ENOENT"><code class="Er">ENOENT</code></a>]</dt> - <dd>The <var class="Fa">blk</var> argument references a function block that is - not currently registered.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">connect(2)</a>, <a class="Xr">listen(2)</a>, - <a class="Xr">tcp(4)</a>, <a class="Xr">malloc(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">This framework first appeared in <span class="Ux">FreeBSD - 11.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">tcp_functions</code> framework was written by - <span class="An">Randall Stewart</span> - <<a class="Mt" href="mailto:rrs@FreeBSD.org">rrs@FreeBSD.org</a>>.</p> -<p class="Pp">This manual page was written by <span class="An">Jonathan - Looney</span> - <<a class="Mt" href="mailto:jtl@FreeBSD.org">jtl@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 13, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/thread_exit.9 4.html b/static/freebsd/man9/thread_exit.9 4.html deleted file mode 100644 index 399dfae7..00000000 --- a/static/freebsd/man9/thread_exit.9 4.html +++ /dev/null @@ -1,50 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">THREAD_EXIT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">THREAD_EXIT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">thread_exit</code> — - <span class="Nd">abandon current thread context</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/proc.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">thread_exit</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#thread_exit"><code class="Fn" id="thread_exit">thread_exit</code></a>() - function implements the machine independent prelude to a thread shutdown. It - will not return, and will result in a call to <a class="Xr">mi_switch(9)</a> - to schedule some other thread.</p> -<p class="Pp" id="thread_exit~2"><a class="permalink" href="#thread_exit~2"><code class="Fn">thread_exit</code></a>() - arranges to free all the resources of the thread, specifically the kernel - stack.</p> -<p class="Pp" id="thread_exit~3">To protect the <a class="Xr">runqueue(9)</a>, - <a class="permalink" href="#thread_exit~3"><code class="Fn">thread_exit</code></a>() - must be called with the <var class="Va">sched_lock</var> mutex held.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">mi_switch(9)</a>, <a class="Xr">mutex(9)</a>, - <a class="Xr">runqueue(9)</a>, <a class="Xr">sleep(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 5, 2002</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/time.9 4.html b/static/freebsd/man9/time.9 4.html deleted file mode 100644 index 6a526213..00000000 --- a/static/freebsd/man9/time.9 4.html +++ /dev/null @@ -1,82 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">TIME(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">TIME(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">boottime</code>, - <code class="Nm">time_second</code>, <code class="Nm">time_uptime</code> - — <span class="Nd">system time variables</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/time.h</a>></code></p> -<p class="Pp"> - <br/> - <var class="Vt">extern struct timeval boottime</var>; - <br/> - <var class="Vt">extern time_t time_second</var>; - <br/> - <var class="Vt">extern time_t time_uptime</var>;</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <var class="Va">boottime</var> variable holds the estimated - system boot time. This time is initially set when the system boots, either - from the RTC, or from a time estimated from the system's root filesystem. - When the current system time is set, stepped by <a class="Xr">ntpd(8)</a>, - or a new time is read from the RTC as the system resumes, - <var class="Va">boottime</var> is recomputed as new_time - uptime. The - <a class="Xr">sysctl(8)</a> <var class="Va">kern.boottime</var> returns this - value.</p> -<p class="Pp">The <var class="Va">time_second</var> variable is the system's - “wall time” clock to the second.</p> -<p class="Pp">The <var class="Va">time_uptime</var> variable is the number of - seconds since boot.</p> -<p class="Pp">The <a class="Xr">bintime(9)</a>, <a class="Xr">getbintime(9)</a>, - <a class="Xr">microtime(9)</a>, <a class="Xr">getmicrotime(9)</a>, - <a class="Xr">nanotime(9)</a>, and <a class="Xr">getnanotime(9)</a> - functions can be used to get the current time more accurately and in an - atomic manner. Similarly, the <a class="Xr">binuptime(9)</a>, - <a class="Xr">getbinuptime(9)</a>, <a class="Xr">microuptime(9)</a>, - <a class="Xr">getmicrouptime(9)</a>, <a class="Xr">nanouptime(9)</a>, and - <a class="Xr">getnanouptime(9)</a> functions can be used to get the time - elapse since boot more accurately and in an atomic manner. The - <var class="Va">boottime</var> variable may be read and written without - special precautions. It is adjusted when the phase of the system time - changes.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">clock_settime(2)</a>, - <a class="Xr">ntp_adjtime(2)</a>, <a class="Xr">settimeofday(2)</a>, - <a class="Xr">bintime(9)</a>, <a class="Xr">binuptime(9)</a>, - <a class="Xr">getbintime(9)</a>, <a class="Xr">getbinuptime(9)</a>, - <a class="Xr">getmicrotime(9)</a>, <a class="Xr">getmicrouptime(9)</a>, - <a class="Xr">getnanotime(9)</a>, <a class="Xr">getnanouptime(9)</a>, - <a class="Xr">microtime(9)</a>, <a class="Xr">microuptime(9)</a>, - <a class="Xr">nanotime(9)</a>, <a class="Xr">nanouptime(9)</a></p> -<p class="Pp"><cite class="Rs"><span class="RsA">Poul-Henning Kamp</span>, - <span class="RsT">Timecounters: Efficient and precise timekeeping in SMP - kernels</span>, <i class="RsJ">Proceedings of EuroBSDCon 2002, - Amsterdam</i>, - <span class="RsO">/usr/share/doc/papers/timecounter.ascii.gz</span>.</cite></p> -<p class="Pp"><cite class="Rs"><span class="RsA">Marshall Kirk McKusick</span> - and <span class="RsA">George V. Neville-Neil</span>, <i class="RsB">The - Design and Implementation of the FreeBSD Operating System</i>, - <i class="RsI">Addison-Wesley</i>, <span class="RsP">57-61,65-66</span>, - <span class="RsD">July 2004</span>.</cite></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 4, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/tvtohz.9 4.html b/static/freebsd/man9/tvtohz.9 4.html deleted file mode 100644 index 170f67d9..00000000 --- a/static/freebsd/man9/tvtohz.9 4.html +++ /dev/null @@ -1,60 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">TVTOHZ(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">TVTOHZ(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">tvtohz</code> — <span class="Nd">convert - time interval to tick count</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/time.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">tvtohz</code>(<var class="Fa" style="white-space: nowrap;">struct - timeval *tv</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#tvtohz"><code class="Fn" id="tvtohz">tvtohz</code></a>() - function accepts a single argument <var class="Fa">tv</var> which specifies - the time interval over which to calculate the number of system ticks that - would elapse.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Returns the integral number of system ticks expected to elapse in - the given interval, including the current tick.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">callout(9)</a>, <a class="Xr">microtime(9)</a>, - <a class="Xr">microuptime(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">tvtohz</code> function first appeared in - <span class="Ux">FreeBSD 3.0</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Kelly - Yancey</span> - <<a class="Mt" href="mailto:kbyanc@posi.net">kbyanc@posi.net</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 3, 2000</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/ucred.9 4.html b/static/freebsd/man9/ucred.9 4.html deleted file mode 100644 index 81a93db8..00000000 --- a/static/freebsd/man9/ucred.9 4.html +++ /dev/null @@ -1,188 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">UCRED(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">UCRED(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">ucred</code>, <code class="Nm">crget</code>, - <code class="Nm">crhold</code>, <code class="Nm">crfree</code>, - <code class="Nm">crcopy</code>, <code class="Nm">crdup</code>, - <code class="Nm">cru2x</code> — <span class="Nd">functions related to - user credentials</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/ucred.h</a>></code></p> -<p class="Pp"><var class="Ft">struct ucred *</var> - <br/> - <code class="Fn">crget</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft">struct ucred *</var> - <br/> - <code class="Fn">crhold</code>(<var class="Fa" style="white-space: nowrap;">struct - ucred *cr</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crfree</code>(<var class="Fa" style="white-space: nowrap;">struct - ucred *cr</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crcopy</code>(<var class="Fa" style="white-space: nowrap;">struct - ucred *dest</var>, <var class="Fa" style="white-space: nowrap;">struct ucred - *src</var>);</p> -<p class="Pp"><var class="Ft">struct ucred *</var> - <br/> - <code class="Fn">crcopysafe</code>(<var class="Fa" style="white-space: nowrap;">struct - proc *p</var>, <var class="Fa" style="white-space: nowrap;">struct ucred - *cr</var>);</p> -<p class="Pp"><var class="Ft">struct ucred *</var> - <br/> - <code class="Fn">crdup</code>(<var class="Fa" style="white-space: nowrap;">struct - ucred *cr</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crsetgroups</code>(<var class="Fa" style="white-space: nowrap;">struct - ucred *cr</var>, <var class="Fa" style="white-space: nowrap;">int - ngrp</var>, <var class="Fa" style="white-space: nowrap;">gid_t - *groups</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">crsetgroups_and_egid</code>(<var class="Fa" style="white-space: nowrap;">struct - ucred *cr</var>, <var class="Fa" style="white-space: nowrap;">int - ngrp</var>, <var class="Fa" style="white-space: nowrap;">gid_t - *groups</var>, <var class="Fa" style="white-space: nowrap;">gid_t - default_egid</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">cru2x</code>(<var class="Fa" style="white-space: nowrap;">struct - ucred *cr</var>, <var class="Fa" style="white-space: nowrap;">struct xucred - *xcr</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">ucred</code> family of functions is used to - manage user credential structures (<var class="Vt">struct ucred</var>) - within the kernel.</p> -<p class="Pp" id="crget">The - <a class="permalink" href="#crget"><code class="Fn">crget</code></a>() - function allocates memory for a new structure, sets its reference count to - 1, and initializes its lock.</p> -<p class="Pp" id="crhold">The - <a class="permalink" href="#crhold"><code class="Fn">crhold</code></a>() - function increases the reference count on the credential.</p> -<p class="Pp" id="crfree">The - <a class="permalink" href="#crfree"><code class="Fn">crfree</code></a>() - function decreases the reference count on the credential. If the count drops - to 0, the storage for the structure is freed.</p> -<p class="Pp" id="crcopy">The - <a class="permalink" href="#crcopy"><code class="Fn">crcopy</code></a>() - function copies the contents of the source (template) credential into the - destination template. The <var class="Vt">uidinfo</var> structure within the - destination is referenced by calling <a class="Xr">uihold(9)</a>.</p> -<p class="Pp" id="crcopysafe">The - <a class="permalink" href="#crcopysafe"><code class="Fn">crcopysafe</code></a>() - function copies the current credential associated with the process - <var class="Fa">p</var> into the newly allocated credential - <var class="Fa">cr</var>. The process lock on <var class="Fa">p</var> must - be held and will be dropped and reacquired as needed to allocate group - storage space in <var class="Fa">cr</var>.</p> -<p class="Pp" id="crdup">The - <a class="permalink" href="#crdup"><code class="Fn">crdup</code></a>() - function allocates memory for a new structure and copies the contents of - <var class="Fa">cr</var> into it. The actual copying is performed by - <code class="Fn">crcopy</code>().</p> -<p class="Pp" id="crsetgroups">The - <a class="permalink" href="#crsetgroups"><code class="Fn">crsetgroups</code></a>() - function sets the <var class="Va">cr_groups</var> and - <var class="Va">cr_ngroups</var> variables representing the supplementary - groups, allocating space as needed. It also truncates the group list to the - current maximum number of groups. The - <a class="permalink" href="#crsetgroups_and_egid"><code class="Fn" id="crsetgroups_and_egid">crsetgroups_and_egid</code></a>() - function is similar, but interprets separately the first group of - <var class="Va">groups</var> as the effective GID to set, only setting the - subsequent groups as supplementary ones. It will use - <var class="Va">default_egid</var> as the new effective GID if - <var class="Va">groups</var> is empty. No other mechanism should be used to - modify the <var class="Va">cr_groups</var> array.</p> -<p class="Pp" id="cru2x">The - <a class="permalink" href="#cru2x"><code class="Fn">cru2x</code></a>() - function converts a <var class="Vt">ucred</var> structure to an - <var class="Vt">xucred</var> structure. That is, it copies data from - <var class="Fa">cr</var> to <var class="Fa">xcr</var>; it ignores fields in - the former that are not present in the latter (e.g., - <var class="Va">cr_uidinfo</var>), and appropriately sets fields in the - latter that are not present in the former (e.g., - <var class="Va">cr_version</var>).</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp"><code class="Fn">crget</code>(), <code class="Fn">crhold</code>(), - <code class="Fn">crdup</code>(), and <code class="Fn">crcopysafe</code>() - all return a pointer to a <var class="Vt">ucred</var> structure.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="USAGE_NOTES"><a class="permalink" href="#USAGE_NOTES">USAGE - NOTES</a></h1> -<p class="Pp">As of <span class="Ux">FreeBSD 5.0</span>, the - <var class="Vt">ucred</var> structure contains extensible fields. This means - that the correct protocol must always be followed to create a fresh and - writable credential structure: new credentials must always be derived from - existing credentials using <code class="Fn">crget</code>(), - <code class="Fn">crcopy</code>(), and - <code class="Fn">crcopysafe</code>().</p> -<p class="Pp">In the common case, credentials required for access control - decisions are used in a read-only manner. In these circumstances, the thread - credential <var class="Va">td_ucred</var> should be used, as it requires no - locking to access safely, and remains stable for the duration of the call - even in the face of a multi-threaded application changing the process - credentials from another thread.</p> -<p class="Pp">During a process credential update, the process lock must be held - across check and update, to prevent race conditions. The process credential, - <var class="Va">td->td_proc->p_ucred</var>, must be used both for - check and update. If a process credential is updated during a system call - and checks against the thread credential are to be made later during the - same system call, the thread credential must also be refreshed from the - process credential so as to prevent use of a stale value. To avoid this - scenario, it is recommended that system calls updating the process - credential be designed to avoid other authorization functions.</p> -<p class="Pp" id="crget~2">If temporarily elevated privileges are required for a - thread, the thread credential can be replaced for the duration of an - activity, or for the remainder of the system call. However, as a thread - credential is often shared, appropriate care should be taken to make sure - modifications are made to a writable credential through the use of - <a class="permalink" href="#crget~2"><code class="Fn">crget</code></a>() and - <code class="Fn">crcopy</code>().</p> -<p class="Pp" id="never">Caution should be exercised when checking authorization - for a thread or process perform an operation on another thread or process. - As a result of temporary elevation, the target thread credential should - <a class="permalink" href="#never"><i class="Em">never</i></a> be used as - the target credential in an access control decision: the process credential - associated with the thread, - <var class="Va">td->td_proc->p_ucred</var>, should be used instead. - For example, <a class="Xr">p_candebug(9)</a> accepts a target process, not a - target thread, for access control purposes.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">uihold(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 29, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/uidinfo.9 4.html b/static/freebsd/man9/uidinfo.9 4.html deleted file mode 100644 index 42f090f9..00000000 --- a/static/freebsd/man9/uidinfo.9 4.html +++ /dev/null @@ -1,88 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">UIDINFO(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">UIDINFO(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">uidinfo</code>, - <code class="Nm">uihashinit</code>, <code class="Nm">uifind</code>, - <code class="Nm">uihold</code>, <code class="Nm">uifree</code> — - <span class="Nd">functions for managing UID information</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/proc.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">sys/resourcevar.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">uihashinit</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -<p class="Pp"><var class="Ft">struct uidinfo *</var> - <br/> - <code class="Fn">uifind</code>(<var class="Fa" style="white-space: nowrap;">uid_t - uid</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">uihold</code>(<var class="Fa" style="white-space: nowrap;">struct - uidinfo *uip</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">uifree</code>(<var class="Fa" style="white-space: nowrap;">struct - uidinfo *uip</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">uidinfo</code> family of functions is used to - manage <var class="Vt">uidinfo</var> structures. Each - <var class="Vt">uidinfo</var> structure maintains per uid resource - consumption counts, including the process count and socket buffer space - usage.</p> -<p class="Pp" id="uihashinit">The - <a class="permalink" href="#uihashinit"><code class="Fn">uihashinit</code></a>() - function initializes the <var class="Vt">uidinfo</var> hash table and its - mutex. This function should only be called during system initialization.</p> -<p class="Pp" id="uifind">The - <a class="permalink" href="#uifind"><code class="Fn">uifind</code></a>() - function looks up and returns the <var class="Vt">uidinfo</var> structure - for <var class="Fa">uid</var>. If no <var class="Vt">uidinfo</var> structure - exists for <var class="Fa">uid</var>, a new structure will be allocated and - initialized. The <code class="Nm">uidinfo</code> hash mutex is acquired and - released.</p> -<p class="Pp" id="uihold">The - <a class="permalink" href="#uihold"><code class="Fn">uihold</code></a>() - function increases the reference count on <var class="Fa">uip</var>. - <var class="Fa">uip</var>'s lock is acquired and released.</p> -<p class="Pp" id="uifree">The - <a class="permalink" href="#uifree"><code class="Fn">uifree</code></a>() - function decreases the reference count on <var class="Fa">uip</var>, and if - the count reaches 0 <var class="Fa">uip</var> is freed. - <var class="Fa">uip</var>'s lock is acquired and release and the uidinfo - hash mutex may be acquired and released.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp"><code class="Fn">uifind</code>() returns a pointer to an - initialized <var class="Vt">uidinfo</var> structure, and should not - fail.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 10, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/uio.9 3.html b/static/freebsd/man9/uio.9 3.html deleted file mode 100644 index 8baecde9..00000000 --- a/static/freebsd/man9/uio.9 3.html +++ /dev/null @@ -1,212 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">UIO(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">UIO(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">uio</code>, <code class="Nm">uiomove</code>, - <code class="Nm">uiomove_frombuf</code>, - <code class="Nm">uiomove_nofault</code> — <span class="Nd">device - driver I/O routines</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/types.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/uio.h</a>></code></p> -<div class="Bd Pp Li"> -<pre>struct uio { - struct iovec *uio_iov; /* scatter/gather list */ - int uio_iovcnt; /* length of scatter/gather list */ - off_t uio_offset; /* offset in target object */ - ssize_t uio_resid; /* remaining bytes to copy */ - enum uio_seg uio_segflg; /* address space */ - enum uio_rw uio_rw; /* operation */ - struct thread *uio_td; /* owner */ -};</pre> -</div> -<br/> -<var class="Ft">int</var> -<br/> -<code class="Fn">uiomove</code>(<var class="Fa" style="white-space: nowrap;">void - *buf</var>, <var class="Fa" style="white-space: nowrap;">int howmuch</var>, - <var class="Fa" style="white-space: nowrap;">struct uio *uiop</var>); -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">uiomove_frombuf</code>(<var class="Fa" style="white-space: nowrap;">void - *buf</var>, <var class="Fa" style="white-space: nowrap;">int howmuch</var>, - <var class="Fa" style="white-space: nowrap;">struct uio *uiop</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">uiomove_nofault</code>(<var class="Fa" style="white-space: nowrap;">void - *buf</var>, <var class="Fa" style="white-space: nowrap;">int howmuch</var>, - <var class="Fa" style="white-space: nowrap;">struct uio *uiop</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The functions - <a class="permalink" href="#uiomove"><code class="Fn" id="uiomove">uiomove</code></a>(), - <code class="Fn">uiomove_frombuf</code>(), and - <code class="Fn">uiomove_nofault</code>() are used to transfer data between - buffers and I/O vectors that might possibly cross the user/kernel space - boundary.</p> -<p class="Pp" id="uiomove~2">As a result of any <a class="Xr">read(2)</a>, - <a class="Xr">write(2)</a>, <a class="Xr">readv(2)</a>, or - <a class="Xr">writev(2)</a> system call that is being passed to a - character-device driver, the appropriate driver <var class="Va">d_read</var> - or <var class="Va">d_write</var> entry will be called with a pointer to a - <var class="Vt">struct uio</var> being passed. The transfer request is - encoded in this structure. The driver itself should use - <a class="permalink" href="#uiomove~2"><code class="Fn">uiomove</code></a>() - or <code class="Fn">uiomove_nofault</code>() to get at the data in this - structure.</p> -<p class="Pp">The fields in the <var class="Vt">uio</var> structure are:</p> -<dl class="Bl-tag"> - <dt id="uio_iov"><var class="Va">uio_iov</var></dt> - <dd>The array of I/O vectors to be processed. In the case of scatter/gather - I/O, this will be more than one vector.</dd> - <dt id="uio_iovcnt"><var class="Va">uio_iovcnt</var></dt> - <dd>The number of I/O vectors present.</dd> - <dt id="uio_offset"><var class="Va">uio_offset</var></dt> - <dd>The offset into the device.</dd> - <dt id="uio_resid"><var class="Va">uio_resid</var></dt> - <dd>The remaining number of bytes to process, updated after transfer.</dd> - <dt id="uio_segflg"><var class="Va">uio_segflg</var></dt> - <dd>One of the following flags: - <dl class="Bl-tag"> - <dt id="UIO_USERSPACE"><a class="permalink" href="#UIO_USERSPACE"><code class="Dv">UIO_USERSPACE</code></a></dt> - <dd>The I/O vector points into a process's address space.</dd> - <dt id="UIO_SYSSPACE"><a class="permalink" href="#UIO_SYSSPACE"><code class="Dv">UIO_SYSSPACE</code></a></dt> - <dd>The I/O vector points into the kernel address space.</dd> - <dt id="UIO_NOCOPY"><a class="permalink" href="#UIO_NOCOPY"><code class="Dv">UIO_NOCOPY</code></a></dt> - <dd>Do not copy, already in object.</dd> - </dl> - </dd> - <dt id="uio_rw"><var class="Va">uio_rw</var></dt> - <dd>The direction of the desired transfer. The supported flags are: - <dl class="Bl-tag"> - <dt id="UIO_READ"><a class="permalink" href="#UIO_READ"><code class="Dv">UIO_READ</code></a></dt> - <dd>Transfer data from the buffers into the I/O vectors.</dd> - <dt id="UIO_WRITE"><a class="permalink" href="#UIO_WRITE"><code class="Dv">UIO_WRITE</code></a></dt> - <dd>Transfer data from the I/O vectors into the buffers.</dd> - </dl> - </dd> - <dt id="uio_td"><var class="Va">uio_td</var></dt> - <dd>The pointer to a <var class="Vt">struct thread</var> for the associated - thread; used if <var class="Va">uio_segflg</var> indicates that the - transfer is to be made from/to a process's address space.</dd> -</dl> -<p class="Pp" id="uiomove_nofault">The function - <a class="permalink" href="#uiomove_nofault"><code class="Fn">uiomove_nofault</code></a>() - requires that the buffer and I/O vectors be accessible without incurring a - page fault. The source and destination addresses must be physically mapped - for read and write access, respectively, and neither the source nor - destination addresses may be pageable. Thus, the function - <code class="Fn">uiomove_nofault</code>() can be called from contexts where - acquiring virtual memory system locks or sleeping are prohibited.</p> -<p class="Pp" id="uiomove_frombuf">The - <a class="permalink" href="#uiomove_frombuf"><code class="Fn">uiomove_frombuf</code></a>() - function is a convenience wrapper around <code class="Fn">uiomove</code>() - for drivers that serve data which is wholly contained within an existing - buffer in memory. It validates the <var class="Va">uio_offset</var> and - <var class="Va">uio_resid</var> values against the size of the existing - buffer, handling short transfers when the request partially overlaps the - buffer. When <var class="Va">uio_offset</var> is greater than or equal to - the buffer size, the result is success with no bytes transferred, - effectively signaling EOF.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">On success <code class="Fn">uiomove</code>(), - <code class="Fn">uiomove_frombuf</code>(), and - <code class="Fn">uiomove_nofault</code>() will return 0; on error they will - return an appropriate error code.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">The idea is that the driver maintains a private buffer for its - data, and processes the request in chunks of maximal the size of this - buffer. Note that the buffer handling below is very simplified and will not - work (the buffer pointer is not being advanced in case of a partial read), - it is just here to demonstrate the <code class="Nm">uio</code> handling.</p> -<div class="Bd Pp Li"> -<pre>/* MIN() can be found there: */ -#include <sys/param.h> - -#define BUFSIZE 512 -static char buffer[BUFSIZE]; - -static int data_available; /* amount of data that can be read */ - -static int -fooread(struct cdev *dev, struct uio *uio, int flag) -{ - int rv, amnt; - - rv = 0; - while (uio->uio_resid > 0) { - if (data_available > 0) { - amnt = MIN(uio->uio_resid, data_available); - rv = uiomove(buffer, amnt, uio); - if (rv != 0) - break; - data_available -= amnt; - } else - tsleep(...); /* wait for a better time */ - } - if (rv != 0) { - /* do error cleanup here */ - } - return (rv); -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp"><code class="Fn">uiomove</code>() and - <code class="Fn">uiomove_nofault</code>() will fail and return the following - error code if:</p> -<dl class="Bl-tag"> - <dt id="EFAULT">[<a class="permalink" href="#EFAULT"><code class="Er">EFAULT</code></a>]</dt> - <dd>The invoked <a class="Xr">copyin(9)</a> or <a class="Xr">copyout(9)</a> - returned - <a class="permalink" href="#EFAULT~2"><code class="Er" id="EFAULT~2">EFAULT</code></a></dd> -</dl> -<p class="Pp">In addition, <code class="Fn">uiomove_nofault</code>() will fail - and return the following error code if:</p> -<dl class="Bl-tag"> - <dt id="EFAULT~3">[<a class="permalink" href="#EFAULT~3"><code class="Er">EFAULT</code></a>]</dt> - <dd>A page fault occurs.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">read(2)</a>, <a class="Xr">readv(2)</a>, - <a class="Xr">write(2)</a>, <a class="Xr">writev(2)</a>, - <a class="Xr">copyin(9)</a>, <a class="Xr">copyout(9)</a>, - <a class="Xr">sleep(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">uio</code> mechanism appeared in some early - version of <span class="Ux">UNIX</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Jörg - Wunsch</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 22, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/unr.9 4.html b/static/freebsd/man9/unr.9 4.html deleted file mode 100644 index 2bb3bf0c..00000000 --- a/static/freebsd/man9/unr.9 4.html +++ /dev/null @@ -1,186 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">UNR(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">UNR(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">new_unrhdr</code>, - <code class="Nm">clean_unrhdr</code>, <code class="Nm">clear_unrhdr</code>, - <code class="Nm">delete_unrhdr</code>, <code class="Nm">alloc_unr</code>, - <code class="Nm">alloc_unr_specific</code>, - <code class="Nm">free_unr</code>, <code class="Nm">create_iter_unr</code>, - <code class="Nm">next_iter_unr</code>, <code class="Nm">free_iter_unr</code> - — <span class="Nd">kernel unit number allocator</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/systm.h</a>></code></p> -<p class="Pp"><var class="Ft">struct unrhdr *</var> - <br/> - <code class="Fn">new_unrhdr</code>(<var class="Fa" style="white-space: nowrap;">int - low</var>, <var class="Fa" style="white-space: nowrap;">int high</var>, - <var class="Fa" style="white-space: nowrap;">struct mtx *mutex</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">clean_unrhdr</code>(<var class="Fa" style="white-space: nowrap;">struct - unrhdr *uh</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">clean_unrhdrl</code>(<var class="Fa" style="white-space: nowrap;">struct - unrhdr *uh</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">clear_unrhdr</code>(<var class="Fa" style="white-space: nowrap;">struct - unrhdr *uh</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">delete_unrhdr</code>(<var class="Fa" style="white-space: nowrap;">struct - unrhdr *uh</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">alloc_unr</code>(<var class="Fa" style="white-space: nowrap;">struct - unrhdr *uh</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">alloc_unrl</code>(<var class="Fa" style="white-space: nowrap;">struct - unrhdr *uh</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">alloc_unr_specific</code>(<var class="Fa" style="white-space: nowrap;">struct - unrhdr *uh</var>, <var class="Fa" style="white-space: nowrap;">u_int - item</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">free_unr</code>(<var class="Fa" style="white-space: nowrap;">struct - unrhdr *uh</var>, <var class="Fa" style="white-space: nowrap;">u_int - item</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">create_iter_unr</code>(<var class="Fa" style="white-space: nowrap;">struct - unrhdr *uh</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">next_iter_unr</code>(<var class="Fa" style="white-space: nowrap;">void - *handle</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">free_iter_unr</code>(<var class="Fa" style="white-space: nowrap;">void - *handle</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The kernel unit number allocator is a generic facility, which - allows to allocate unit numbers within a specified range.</p> -<dl class="Bl-tag"> - <dt id="new_unrhdr"><a class="permalink" href="#new_unrhdr"><code class="Fn">new_unrhdr</code></a>(<var class="Fa">low</var>, - <var class="Fa">high</var>, <var class="Fa">mutex</var>)</dt> - <dd>Initialize a new unit number allocator entity. The - <var class="Fa">low</var> and <var class="Fa">high</var> arguments specify - minimum and maximum number of unit numbers. There is no cost associated - with the range of unit numbers, so unless the resource really is finite, - <code class="Dv">INT_MAX</code> can be used. If - <var class="Fa">mutex</var> is not <code class="Dv">NULL</code>, it is - used for locking when allocating and freeing units. If the passed value is - the token <var class="Va">UNR_NO_MTX</var>, then no locking is applied - internally. Otherwise, internal mutex is used.</dd> - <dt id="clear_unrhdr"><a class="permalink" href="#clear_unrhdr"><code class="Fn">clear_unrhdr</code></a>(<var class="Fa">uh</var>)</dt> - <dd>Clear all units from the specified unit number allocator entity. This - function resets the entity as if it were just initialized with - <code class="Fn">new_unrhdr</code>().</dd> - <dt id="delete_unrhdr"><a class="permalink" href="#delete_unrhdr"><code class="Fn">delete_unrhdr</code></a>(<var class="Fa">uh</var>)</dt> - <dd>Delete specified unit number allocator entity. This function frees the - memory associated with the entity, it does not free any units. To free all - units use <code class="Fn">clear_unrhdr</code>().</dd> - <dt id="clean_unrhdr"><a class="permalink" href="#clean_unrhdr"><code class="Fn">clean_unrhdr</code></a>(<var class="Fa">uh</var>)</dt> - <dd>Freeing unit numbers might result in some internal memory becoming unused. - There are <code class="Nm">unit</code> allocator consumers that cannot - tolerate taking <a class="Xr">malloc(9)</a> locks to free the memory, - while having their unit mutex locked. For this reason, free of the unused - memory after delete is postponed until the consumer can afford calling - into the <a class="Xr">malloc(9)</a> subsystem. Call - <code class="Fn">clean_unrhdr</code>(<var class="Fa">uh</var>) to do the - cleanup. In particular, this needs to be done before freeing a unr, if a - deletion of units could have been performed.</dd> - <dt id="clean_unrhdrl"><a class="permalink" href="#clean_unrhdrl"><code class="Fn">clean_unrhdrl</code></a>()</dt> - <dd>Same as <code class="Fn">clean_unrhdr</code>(), but assumes that the unr - mutex is already owned, if any.</dd> - <dt id="alloc_unr"><a class="permalink" href="#alloc_unr"><code class="Fn">alloc_unr</code></a>(<var class="Fa">uh</var>)</dt> - <dd>Return a new unit number. The lowest free number is always allocated. This - function does not allocate memory and never sleeps, however it may block - on a mutex. If no free unit numbers are left, <code class="Li">-1</code> - is returned.</dd> - <dt id="alloc_unrl"><a class="permalink" href="#alloc_unrl"><code class="Fn">alloc_unrl</code></a>(<var class="Fa">uh</var>)</dt> - <dd>Same as <code class="Fn">alloc_unr</code>() except that mutex is assumed - to be already locked and thus is not used.</dd> - <dt id="alloc_unr_specific"><a class="permalink" href="#alloc_unr_specific"><code class="Fn">alloc_unr_specific</code></a>(<var class="Fa">uh</var>, - <var class="Fa">item</var>)</dt> - <dd>Allocate a specific unit number. This function allocates memory and thus - may sleep. The allocated unit number is returned on success. If the - specified number is already allocated or out of the range, - <code class="Li">-1</code> is returned.</dd> - <dt id="free_unr"><a class="permalink" href="#free_unr"><code class="Fn">free_unr</code></a>(<var class="Fa">uh</var>, - <var class="Fa">item</var>)</dt> - <dd>Free a previously allocated unit number. This function may require - allocating memory, and thus it can sleep. There is no pre-locked - variant.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="ITERATOR_INTERFACE"><a class="permalink" href="#ITERATOR_INTERFACE">ITERATOR - INTERFACE</a></h1> -<p class="Pp">The <code class="Nm">unr</code> facility provides an interface to - iterate over all allocated units for the given - <code class="Dv">unrhdr</code>. Iterators are identified by an opaque - handle. More than one iterators can operate simultaneously; the iterator - position data is recorded only in the iterator handle.</p> -<p class="Pp" id="next_iter_unr">Consumers must ensure that the unit allocator - is not modified between calls to the iterator functions. In particular, the - internal allocator mutex cannot provide consistency, because it is acquired - and dropped inside the - <a class="permalink" href="#next_iter_unr"><code class="Fn">next_iter_unr</code></a>() - function. If the allocator was modified, it is safe to free the iterator - with - <a class="permalink" href="#free_iter_unr"><code class="Fn" id="free_iter_unr">free_iter_unr</code></a>() - method nevertheless.</p> -<dl class="Bl-tag"> - <dt id="create_iter_unr"><a class="permalink" href="#create_iter_unr"><code class="Fn">create_iter_unr</code></a>(<var class="Fa">uh</var>)</dt> - <dd>Create an iterator. Return the handle that should be passed to other - iterator functions.</dd> - <dt><code class="Fn">next_iter_unr</code>(<var class="Fa">handle</var>)</dt> - <dd>Return the value of the next unit. Units are returned in ascending order. - A return value of <code class="Li">-1</code> indicates the end of - iteration, in which case <code class="Li">-1</code> is returned for all - future calls.</dd> - <dt><code class="Fn">free_iter_unr</code>(<var class="Fa">handle</var>)</dt> - <dd>Free the iterator, handle is no longer valid.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="CODE_REFERENCES"><a class="permalink" href="#CODE_REFERENCES">CODE - REFERENCES</a></h1> -<p class="Pp">The above functions are implemented in - <span class="Pa">sys/kern/subr_unit.c</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">Kernel unit number allocator first appeared in - <span class="Ux">FreeBSD 6.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">Kernel unit number allocator was written by - <span class="An">Poul-Henning Kamp</span>. This manpage was written by - <span class="An">Gleb Smirnoff</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 21, 2022</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/usbdi.9 3.html b/static/freebsd/man9/usbdi.9 3.html deleted file mode 100644 index c173ca47..00000000 --- a/static/freebsd/man9/usbdi.9 3.html +++ /dev/null @@ -1,477 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">USBDI(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">USBDI(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">usb_fifo_alloc_buffer</code>, - <code class="Nm">usb_fifo_attach</code>, - <code class="Nm">usb_fifo_detach</code>, - <code class="Nm">usb_fifo_free_buffer</code>, - <code class="Nm">usb_fifo_get_data</code>, - <code class="Nm">usb_fifo_get_data_buffer</code>, - <code class="Nm">usb_fifo_get_data_error</code>, - <code class="Nm">usb_fifo_get_data_linear</code>, - <code class="Nm">usb_fifo_put_bytes_max</code>, - <code class="Nm">usb_fifo_put_data</code>, - <code class="Nm">usb_fifo_put_data_buffer</code>, - <code class="Nm">usb_fifo_put_data_error</code>, - <code class="Nm">usb_fifo_put_data_linear</code>, - <code class="Nm">usb_fifo_reset</code>, - <code class="Nm">usb_fifo_softc</code>, - <code class="Nm">usb_fifo_wakeup</code>, - <code class="Nm">usbd_do_request</code>, - <code class="Nm">usbd_do_request_flags</code>, - <code class="Nm">usbd_errstr</code>, - <code class="Nm">usbd_lookup_id_by_info</code>, - <code class="Nm">usbd_lookup_id_by_uaa</code>, - <code class="Nm">usbd_transfer_clear_stall</code>, - <code class="Nm">usbd_transfer_drain</code>, - <code class="Nm">usbd_transfer_pending</code>, - <code class="Nm">usbd_transfer_poll</code>, - <code class="Nm">usbd_transfer_setup</code>, - <code class="Nm">usbd_transfer_start</code>, - <code class="Nm">usbd_transfer_stop</code>, - <code class="Nm">usbd_transfer_submit</code>, - <code class="Nm">usbd_transfer_unsetup</code>, - <code class="Nm">usbd_xfer_clr_flag</code>, - <code class="Nm">usbd_xfer_frame_data</code>, - <code class="Nm">usbd_xfer_frame_len</code>, - <code class="Nm">usbd_xfer_get_frame</code>, - <code class="Nm">usbd_xfer_get_priv</code>, - <code class="Nm">usbd_xfer_is_stalled</code>, - <code class="Nm">usbd_xfer_max_framelen</code>, - <code class="Nm">usbd_xfer_max_frames</code>, - <code class="Nm">usbd_xfer_max_len</code>, - <code class="Nm">usbd_xfer_set_flag</code>, - <code class="Nm">usbd_xfer_set_frame_data</code>, - <code class="Nm">usbd_xfer_set_frame_len</code>, - <code class="Nm">usbd_xfer_set_frame_offset</code>, - <code class="Nm">usbd_xfer_set_frames</code>, - <code class="Nm">usbd_xfer_set_interval</code>, - <code class="Nm">usbd_xfer_set_priv</code>, - <code class="Nm">usbd_xfer_set_stall</code>, - <code class="Nm">usbd_xfer_set_timeout</code>, - <code class="Nm">usbd_xfer_softc</code>, - <code class="Nm">usbd_xfer_state</code>, - <code class="Nm">usbd_xfer_status</code> — <span class="Nd">Universal - Serial Bus driver programming interface</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">dev/usb/usb.h</a>></code> - <br/> - <code class="In">#include <<a class="In">dev/usb/usbdi.h</a>></code> - <br/> - <code class="In">#include - <<a class="In">dev/usb/usbdi_util.h</a>></code></p> -<p class="Pp"><var class="Ft">usb_error_t</var> - <br/> - <code class="Fn">usbd_transfer_setup</code>(<var class="Fa">struct usb_device - *udev</var>, <var class="Fa">const uint8_t *ifaces</var>, - <var class="Fa">struct usb_xfer **pxfer</var>, <var class="Fa">const struct - usb_config *setup_start</var>, <var class="Fa">uint16_t n_setup</var>, - <var class="Fa">void *priv_sc</var>, <var class="Fa">struct mtx - *priv_mtx</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">usbd_transfer_unsetup</code>(<var class="Fa">struct usb_xfer - **pxfer</var>, <var class="Fa">uint16_t n_setup</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">usbd_transfer_start</code>(<var class="Fa">struct usb_xfer - *xfer</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">usbd_transfer_stop</code>(<var class="Fa">struct usb_xfer - *xfer</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">usbd_transfer_drain</code>(<var class="Fa">struct usb_xfer - *xfer</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The Universal Serial Bus (USB) driver programming interface - provides USB peripheral drivers with a host controller independent API for - controlling and communicating with USB peripherals. The - <code class="Nm">usb</code> module supports both USB Host and USB Device - side mode.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="USB_TRANSFER_MANAGEMENT_FUNCTIONS"><a class="permalink" href="#USB_TRANSFER_MANAGEMENT_FUNCTIONS">USB - TRANSFER MANAGEMENT FUNCTIONS</a></h1> -<p class="Pp">The USB standard defines four types of USB transfers. Control - transfers, Bulk transfers, Interrupt transfers and Isochronous transfers. - All the transfer types are managed using the following five functions:</p> -<p class="Pp" id="usbd_transfer_setup"><a class="permalink" href="#usbd_transfer_setup"><code class="Fn">usbd_transfer_setup</code></a>() - This function will allocate memory for and initialise an array of USB - transfers and all required DMA memory. This function can sleep or block - waiting for resources to become available. <var class="Fa">udev</var> is a - pointer to "struct usb_device". <var class="Fa">ifaces</var> is an - array of interface index numbers to use. See "if_index". - <var class="Fa">pxfer</var> is a pointer to an array of USB transfer - pointers that are initialized to NULL, and then pointed to allocated USB - transfers. <var class="Fa">setup_start</var> is a pointer to an array of USB - config structures. <var class="Fa">n_setup</var> is a number telling the USB - system how many USB transfers should be setup. <var class="Fa">priv_sc</var> - is the private softc pointer, which will be used to initialize - "xfer->priv_sc". <var class="Fa">priv_mtx</var> is the private - mutex protecting the transfer structure and the softc. This pointer is used - to initialize "xfer->priv_mtx". This function returns zero upon - success. A non-zero return value indicates failure.</p> -<p class="Pp" id="usbd_transfer_unsetup"><a class="permalink" href="#usbd_transfer_unsetup"><code class="Fn">usbd_transfer_unsetup</code></a>() - This function will release the given USB transfers and all allocated - resources associated with these USB transfers. <var class="Fa">pxfer</var> - is a pointer to an array of USB transfer pointers, that may be NULL, that - should be freed by the USB system. <var class="Fa">n_setup</var> is a number - telling the USB system how many USB transfers should be unsetup. This - function can sleep waiting for USB transfers to complete. This function is - NULL safe with regard to the USB transfer structure pointer. It is not - allowed to call this function from the USB transfer callback.</p> -<p class="Pp" id="usbd_transfer_start"><a class="permalink" href="#usbd_transfer_start"><code class="Fn">usbd_transfer_start</code></a>() - This function will start the USB transfer pointed to by - <var class="Fa">xfer</var>, if not already started. This function is always - non-blocking and must be called with the so-called private USB mutex locked. - This function is NULL safe with regard to the USB transfer structure - pointer.</p> -<p class="Pp" id="usbd_transfer_stop"><a class="permalink" href="#usbd_transfer_stop"><code class="Fn">usbd_transfer_stop</code></a>() - This function will stop the USB transfer pointed to by - <var class="Fa">xfer</var>, if not already stopped. This function is always - non-blocking and must be called with the so-called private USB mutex locked. - This function can return before the USB callback has been called. This - function is NULL safe with regard to the USB transfer structure pointer. If - the transfer was in progress, the callback will called with - "USB_ST_ERROR" and "error = USB_ERR_CANCELLED".</p> -<p class="Pp" id="usbd_transfer_drain"><a class="permalink" href="#usbd_transfer_drain"><code class="Fn">usbd_transfer_drain</code></a>() - This function will stop an USB transfer, if not already stopped and wait for - any additional USB hardware operations to complete. Buffers that are loaded - into DMA using "usbd_xfer_set_frame_data()" can safely be freed - after that this function has returned. This function can block the caller - and will not return before the USB callback has been called. This function - is NULL safe with regard to the USB transfer structure pointer.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="USB_TRANSFER_CALLBACK"><a class="permalink" href="#USB_TRANSFER_CALLBACK">USB - TRANSFER CALLBACK</a></h1> -<p class="Pp">The USB callback has three states. USB_ST_SETUP, - USB_ST_TRANSFERRED and USB_ST_ERROR. USB_ST_SETUP is the initial state. - After the callback has been called with this state it will always be called - back at a later stage in one of the other two states. The USB callback - should not restart the USB transfer in case the error cause is - USB_ERR_CANCELLED. The USB callback is protected from recursion. That means - one can start and stop whatever transfer from the callback of another - transfer one desires. Also the transfer that is currently called back. - Recursion is handled like this that when the callback that wants to recurse - returns it is called one more time.</p> -<p class="Pp" id="usbd_transfer_submit"><a class="permalink" href="#usbd_transfer_submit"><code class="Fn">usbd_transfer_submit</code></a>() - This function should only be called from within the USB callback and is used - to start the USB hardware. An USB transfer can have multiple frames - consisting of one or more USB packets making up an I/O vector for all USB - transfer types.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>void -usb_default_callback(struct usb_xfer *xfer, usb_error_t error) -{ - int actlen; - - usbd_xfer_status(xfer, &actlen, NULL, NULL, NULL); - - switch (USB_GET_STATE(xfer)) { - case USB_ST_SETUP: - /* - * Setup xfer frame lengths/count and data - */ - usbd_transfer_submit(xfer); - break; - - case USB_ST_TRANSFERRED: - /* - * Read usb frame data, if any. - * "actlen" has the total length for all frames - * transferred. - */ - break; - - default: /* Error */ - /* - * Print error message and clear stall - * for example. - */ - break; - } - /* - * Here it is safe to do something without the private - * USB mutex locked. - */ - return; -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="USB_CONTROL_TRANSFERS"><a class="permalink" href="#USB_CONTROL_TRANSFERS">USB - CONTROL TRANSFERS</a></h1> -<p class="Pp">An USB control transfer has three parts. First the SETUP packet, - then DATA packet(s) and then a STATUS packet. The SETUP packet is always - pointed to by frame 0 and the length is set by - <a class="permalink" href="#usbd_xfer_frame_len"><code class="Fn" id="usbd_xfer_frame_len">usbd_xfer_frame_len</code></a>() - also if there should not be sent any SETUP packet! If an USB control - transfer has no DATA stage, then the number of frames should be set to 1. - Else the default number of frames is 2.</p> -<div class="Bd Pp Bd-indent Li"> -<pre> -Example1: SETUP + STATUS - usbd_xfer_set_frames(xfer, 1); - usbd_xfer_set_frame_len(xfer, 0, 8); - usbd_transfer_submit(xfer); - -Example2: SETUP + DATA + STATUS - usbd_xfer_set_frames(xfer, 2); - usbd_xfer_set_frame_len(xfer, 0, 8); - usbd_xfer_set_frame_len(xfer, 1, 1); - usbd_transfer_submit(xfer); - -Example3: SETUP + DATA + STATUS - split -1st callback: - usbd_xfer_set_frames(xfer, 1); - usbd_xfer_set_frame_len(xfer, 0, 8); - usbd_transfer_submit(xfer); - -2nd callback: - /* IMPORTANT: frbuffers[0] must still point at the setup packet! */ - usbd_xfer_set_frames(xfer, 2); - usbd_xfer_set_frame_len(xfer, 0, 0); - usbd_xfer_set_frame_len(xfer, 1, 1); - usbd_transfer_submit(xfer); - -Example4: SETUP + STATUS - split -1st callback: - usbd_xfer_set_frames(xfer, 1); - usbd_xfer_set_frame_len(xfer, 0, 8); - usbd_xfer_set_flag(xfer, USB_MANUAL_STATUS); - usbd_transfer_submit(xfer); - -2nd callback: - usbd_xfer_set_frames(xfer, 1); - usbd_xfer_set_frame_len(xfer, 0, 0); - usbd_xfer_clr_flag(xfer, USB_MANUAL_STATUS); - usbd_transfer_submit(xfer); - -</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="USB_TRANSFER_CONFIG"><a class="permalink" href="#USB_TRANSFER_CONFIG">USB - TRANSFER CONFIG</a></h1> -<p class="Pp">To simplify the search for endpoints the - <code class="Nm">usb</code> module defines a USB config structure where it - is possible to specify the characteristics of the wanted endpoint.</p> -<div class="Bd Pp Bd-indent Li"> -<pre> -struct usb_config { - bufsize, - callback - direction, - endpoint, - frames, - index flags, - interval, - timeout, - type, -}; - -</pre> -</div> -<p class="Pp"><var class="Fa">type</var> field selects the USB pipe type. Valid - values are: UE_INTERRUPT, UE_CONTROL, UE_BULK, UE_ISOCHRONOUS. The special - value UE_BULK_INTR will select BULK and INTERRUPT pipes. This field is - mandatory.</p> -<p class="Pp"><var class="Fa">endpoint</var> field selects the USB endpoint - number. A value of 0xFF, "-1" or "UE_ADDR_ANY" will - select the first matching endpoint. This field is mandatory.</p> -<p class="Pp"><var class="Fa">direction</var> field selects the USB endpoint - direction. A value of "UE_DIR_ANY" will select the first matching - endpoint. Else valid values are: "UE_DIR_IN" and - "UE_DIR_OUT". "UE_DIR_IN" and "UE_DIR_OUT" can - be binary OR'ed by "UE_DIR_SID" which means that the direction - will be swapped in case of USB_MODE_DEVICE. Note that "UE_DIR_IN" - refers to the data transfer direction of the "IN" tokens and - "UE_DIR_OUT" refers to the data transfer direction of the - "OUT" tokens. This field is mandatory.</p> -<p class="Pp"><var class="Fa">interval</var> field selects the interrupt - interval. The value of this field is given in milliseconds and is - independent of device speed. Depending on the endpoint type, this field has - different meaning:</p> -<dl class="Bl-tag"> - <dt>UE_INTERRUPT</dt> - <dd>"0" use the default interrupt interval based on endpoint - descriptor. "Else" use the given value for polling rate.</dd> - <dt>UE_ISOCHRONOUS</dt> - <dd>"0" use default. "Else" the value is ignored.</dd> - <dt>UE_BULK</dt> - <dd style="width: auto;"> </dd> - <dt>UE_CONTROL</dt> - <dd>"0" no transfer pre-delay. "Else" a delay as given by - this field in milliseconds is inserted before the hardware is started when - "usbd_transfer_submit()" is called. - <p class="Pp">NOTE: The transfer timeout, if any, is started after that the - pre-delay has elapsed!</p> - </dd> -</dl> -<p class="Pp"><var class="Fa">timeout</var> field, if non-zero, will set the - transfer timeout in milliseconds. If the "timeout" field is zero - and the transfer type is ISOCHRONOUS a timeout of 250ms will be used.</p> -<p class="Pp"><var class="Fa">frames</var> field sets the maximum number of - frames. If zero is specified it will yield the following results:</p> -<dl class="Bl-tag"> - <dt>UE_BULK</dt> - <dd>xfer->nframes = 1;</dd> - <dt>UE_INTERRUPT</dt> - <dd>xfer->nframes = 1;</dd> - <dt>UE_CONTROL</dt> - <dd>xfer->nframes = 2;</dd> - <dt>UE_ISOCHRONOUS</dt> - <dd>Not allowed. Will cause an error.</dd> -</dl> -<p class="Pp"><var class="Fa">ep_index</var> field allows you to give a number, - in case more endpoints match the description, that selects which matching - "ep_index" should be used.</p> -<p class="Pp"><var class="Fa">if_index</var> field allows you to select which of - the interface numbers in the "ifaces" array parameter passed to - "usbd_transfer_setup" that should be used when setting up the - given USB transfer.</p> -<p class="Pp"><var class="Fa">flags</var> field has type "struct - usb_xfer_flags" and allows one to set initial flags an USB transfer. - Valid flags are:</p> -<dl class="Bl-tag"> - <dt>force_short_xfer</dt> - <dd>This flag forces the last transmitted USB packet to be short. A short - packet has a length of less than "xfer->max_packet_size", - which derives from "wMaxPacketSize". This flag can be changed - during operation.</dd> - <dt>short_xfer_ok</dt> - <dd>This flag allows the received transfer length, "xfer->actlen" - to be less than "xfer->sumlen" upon completion of a transfer. - This flag can be changed during operation.</dd> - <dt>short_frames_ok</dt> - <dd>This flag allows the reception of multiple short USB frames. This flag - only has effect for BULK and INTERRUPT endpoints and if the number of - frames received is greater than 1. This flag can be changed during - operation.</dd> - <dt>pipe_bof</dt> - <dd>This flag causes a failing USB transfer to remain first in the PIPE queue - except in the case of "xfer->error" equal to - "USB_ERR_CANCELLED". No other USB transfers in the affected PIPE - queue will be started until either: - <dl class="Bl-tag"> - <dt>1</dt> - <dd>The failing USB transfer is stopped using - "usbd_transfer_stop()".</dd> - <dt>2</dt> - <dd>The failing USB transfer performs a successful transfer.</dd> - </dl> - The purpose of this flag is to avoid races when multiple transfers are - queued for execution on an USB endpoint, and the first executing transfer - fails leading to the need for clearing of stall for example. In this case - this flag is used to prevent the following USB transfers from being - executed at the same time the clear-stall command is executed on the USB - control endpoint. This flag can be changed during operation. - <p class="Pp">"BOF" is short for "Block On Failure".</p> - <p class="Pp">NOTE: This flag should be set on all BULK and INTERRUPT USB - transfers which use an endpoint that can be shared between userland and - kernel.</p> - </dd> - <dt>proxy_buffer</dt> - <dd>Setting this flag will cause that the total buffer size will be rounded up - to the nearest atomic hardware transfer size. The maximum data length of - any USB transfer is always stored in the - "xfer->max_data_length". For control transfers the USB kernel - will allocate additional space for the 8-bytes of SETUP header. These - 8-bytes are not counted by the "xfer->max_data_length" - variable. This flag cannot be changed during operation.</dd> - <dt>ext_buffer</dt> - <dd>Setting this flag will cause that no data buffer will be allocated. - Instead the USB client must supply a data buffer. This flag cannot be - changed during operation.</dd> - <dt>manual_status</dt> - <dd>Setting this flag prevents an USB STATUS stage to be appended to the end - of the USB control transfer. If no control data is transferred this flag - must be cleared. Else an error will be returned to the USB callback. This - flag is mostly useful for the USB device side. This flag can be changed - during operation.</dd> - <dt>no_pipe_ok</dt> - <dd>Setting this flag causes the USB_ERR_NO_PIPE error to be ignored. This - flag cannot be changed during operation.</dd> - <dt>stall_pipe</dt> - <dd> - <dl class="Bl-tag"> - <dt>Device Side Mode</dt> - <dd>Setting this flag will cause STALL pids to be sent to the endpoint - belonging to this transfer before the transfer is started. The - transfer is started at the moment the host issues a clear-stall - command on the STALL'ed endpoint. This flag can be changed during - operation.</dd> - <dt>Host Side Mode</dt> - <dd>Setting this flag will cause a clear-stall control request to be - executed on the endpoint before the USB transfer is started.</dd> - </dl> - <p class="Pp">If this flag is changed outside the USB callback function you - have to use the "usbd_xfer_set_stall()" and - "usbd_transfer_clear_stall()" functions! This flag is - automatically cleared after that the stall or clear stall has been - executed.</p> - </dd> - <dt>pre_scale_frames</dt> - <dd>If this flag is set the number of frames specified is assumed to give the - buffering time in milliseconds instead of frames. During transfer setup - the frames field is pre scaled with the corresponding value for the - endpoint and rounded to the nearest number of frames greater than zero. - This option only has effect for ISOCHRONOUS transfers.</dd> -</dl> -<p class="Pp"><var class="Fa">bufsize</var> field sets the total buffer size in - bytes. If this field is zero, "wMaxPacketSize" will be used, - multiplied by the "frames" field if the transfer type is - ISOCHRONOUS. This is useful for setting up interrupt pipes. This field is - mandatory.</p> -<p class="Pp">NOTE: For control transfers "bufsize" includes the - length of the request structure.</p> -<p class="Pp"><var class="Fa">callback</var> pointer sets the USB callback. This - field is mandatory.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="USB_LINUX_COMPAT_LAYER"><a class="permalink" href="#USB_LINUX_COMPAT_LAYER">USB - LINUX COMPAT LAYER</a></h1> -<p class="Pp">The <code class="Nm">usb</code> module supports the Linux USB - API.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">libusb(3)</a>, <a class="Xr">usb(4)</a>, - <a class="Xr">usbconfig(8)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="STANDARDS"><a class="permalink" href="#STANDARDS">STANDARDS</a></h1> -<p class="Pp">The <code class="Nm">usb</code> module complies with the USB 2.0 - standard.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">usb</code> module has been inspired by the - NetBSD USB stack initially written by Lennart Augustsson. The - <code class="Nm">usb</code> module was written by <span class="An">Hans - Petter Selasky</span> - <<a class="Mt" href="mailto:hselasky@FreeBSD.org">hselasky@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 14, 2016</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vaccess.9 3.html b/static/freebsd/man9/vaccess.9 3.html deleted file mode 100644 index 80cc8b09..00000000 --- a/static/freebsd/man9/vaccess.9 3.html +++ /dev/null @@ -1,99 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VACCESS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VACCESS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vaccess</code> — <span class="Nd">generate - an access control decision using vnode parameters</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vaccess</code>(<var class="Fa">enum vtype type</var>, - <var class="Fa">mode_t file_mode</var>, <var class="Fa">uid_t - file_uid</var>, <var class="Fa">gid_t file_gid</var>, - <var class="Fa">accmode_t accmode</var>, <var class="Fa">struct ucred - *cred</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This call implements the logic for the - <span class="Ux">UNIX</span> discretionary file security model common to - many file systems in <span class="Ux">FreeBSD</span>. It accepts the vnodes - type <var class="Fa">type</var>, permissions via - <var class="Fa">file_mode</var>, owning UID <var class="Fa">file_uid</var>, - owning GID <var class="Fa">file_gid</var>, desired access mode - <var class="Fa">accmode</var> and requesting credential - <var class="Fa">cred</var>.</p> -<p class="Pp" id="vaccess">This call is intended to support implementations of - <a class="Xr">VOP_ACCESS(9)</a>, which will use their own access methods to - retrieve the vnode properties, and then invoke - <a class="permalink" href="#vaccess"><code class="Fn">vaccess</code></a>() - in order to perform the actual check. Implementations of - <a class="Xr">VOP_ACCESS(9)</a> may choose to implement additional security - mechanisms whose results will be composed with the return value.</p> -<p class="Pp" id="vaccess~2">The algorithm used by - <a class="permalink" href="#vaccess~2"><code class="Fn">vaccess</code></a>() - selects a component of the file permission bits based on comparing the - passed credential, file owner, and file group. If the credential's effective - UID matches the file owner, then the owner component of the permission bits - is selected. If the UID does not match, then the credential's effective GID, - followed by additional groups, are compared with the file group—if - there is a match, then the group component of the permission bits is - selected. If neither the credential UID or GIDs match the passed file owner - and group, then the other component of the permission bits is selected.</p> -<p class="Pp">Once appropriate protections are selected for the current - credential, the requested access mode, in combination with the vnode type, - will be compared with the discretionary rights available for the credential. - If the rights granted by discretionary protections are insufficient, then - super-user privilege, if available for the credential, will also be - considered.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp"><code class="Fn">vaccess</code>() will return 0 on success, or a - non-zero error value on failure.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt> - <dd>Permission denied. An attempt was made to access a file in a way forbidden - by its file access permissions.</dd> - <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt> - <dd>Operation not permitted. An attempt was made to perform an operation - limited to processes with appropriate privileges or to the owner of a file - or other resource.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vaccess_acl_nfs4(9)</a>, - <a class="Xr">vaccess_acl_posix1e(9)</a>, <a class="Xr">vnode(9)</a>, - <a class="Xr">VOP_ACCESS(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page and the current implementation of - <code class="Fn">vaccess</code>() were written by <span class="An">Robert - Watson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 23, 2022</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vaccess_acl_nfs4.9 3.html b/static/freebsd/man9/vaccess_acl_nfs4.9 3.html deleted file mode 100644 index 809b8c41..00000000 --- a/static/freebsd/man9/vaccess_acl_nfs4.9 3.html +++ /dev/null @@ -1,111 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VACCESS_ACL_NFS4(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VACCESS_ACL_NFS4(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vaccess_acl_nfs4</code> — - <span class="Nd">generate a NFSv4 ACL access control decision using vnode - parameters</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/acl.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vaccess_acl_nfs4</code>(<var class="Fa">enum vtype - type</var>, <var class="Fa">uid_t file_uid</var>, <var class="Fa">gid_t - file_gid</var>, <var class="Fa">struct acl *acl</var>, - <var class="Fa">accmode_t accmode</var>, <var class="Fa">struct ucred - *cred</var>, <var class="Fa">int *privused</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This call implements the logic for the - <span class="Ux">UNIX</span> discretionary file security model with NFSv4 - ACL extensions. It accepts the vnodes type <var class="Fa">type</var>, - owning UID <var class="Fa">file_uid</var>, owning GID - <var class="Fa">file_gid</var>, access ACL for the file - <var class="Fa">acl</var>, desired access mode - <var class="Fa">accmode</var>, requesting credential - <var class="Fa">cred</var>, and an optional call-by-reference - <var class="Vt">int</var> pointer returning whether or not privilege was - required for successful evaluation of the call; the - <var class="Fa">privused</var> pointer may be set to - <code class="Dv">NULL</code> by the caller in order not to be informed of - privilege information, or it may point to an integer that will be set to 1 - if privilege is used, and 0 otherwise.</p> -<p class="Pp" id="vaccess_acl_nfs4">This call is intended to support - implementations of <a class="Xr">VOP_ACCESS(9)</a>, which will use their own - access methods to retrieve the vnode properties, and then invoke - <a class="permalink" href="#vaccess_acl_nfs4"><code class="Fn">vaccess_acl_nfs4</code></a>() - in order to perform the actual check. Implementations of - <a class="Xr">VOP_ACCESS(9)</a> may choose to implement additional security - mechanisms whose results will be composed with the return value.</p> -<p class="Pp" id="vaccess_acl_nfs4~2">The algorithm used by - <a class="permalink" href="#vaccess_acl_nfs4~2"><code class="Fn">vaccess_acl_nfs4</code></a>() - is based on the NFSv4 ACL evaluation algorithm, as described in NFSv4 Minor - Version 1, draft-ietf-nfsv4-minorversion1-21.txt. The algorithm selects a - <a class="permalink" href="#matching"><i class="Em" id="matching">matching</i></a> - entry from the access ACL, which may then be composed with an available ACL - mask entry, providing <span class="Ux">UNIX</span> security - compatibility.</p> -<p class="Pp">Once appropriate protections are selected for the current - credential, the requested access mode, in combination with the vnode type, - will be compared with the discretionary rights available for the credential. - If the rights granted by discretionary protections are insufficient, then - super-user privilege, if available for the credential, will also be - considered.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp"><code class="Fn">vaccess_acl_nfs4</code>() will return 0 on - success, or a non-zero error value on failure.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt> - <dd>Permission denied. An attempt was made to access a file in a way forbidden - by its file access permissions.</dd> - <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt> - <dd>Operation not permitted. An attempt was made to perform an operation - limited to processes with appropriate privileges or to the owner of a file - or other resource.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vaccess(9)</a>, <a class="Xr">vnode(9)</a>, - <a class="Xr">VOP_ACCESS(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">Current implementation of - <code class="Fn">vaccess_acl_nfs4</code>() was written by - <span class="An">Edward Tomasz Napierala</span> - <<a class="Mt" href="mailto:trasz@FreeBSD.org">trasz@FreeBSD.org</a>>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">This manual page should include a full description of the NFSv4 - ACL evaluation algorithm, or cross reference another page that does.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 18, 2009</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vaccess_acl_posix1e.9 3.html b/static/freebsd/man9/vaccess_acl_posix1e.9 3.html deleted file mode 100644 index d989a75f..00000000 --- a/static/freebsd/man9/vaccess_acl_posix1e.9 3.html +++ /dev/null @@ -1,109 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VACCESS_ACL_POSIX1E(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VACCESS_ACL_POSIX1E(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vaccess_acl_posix1e</code> — - <span class="Nd">generate a POSIX.1e ACL access control decision using vnode - parameters</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/acl.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vaccess_acl_posix1e</code>(<var class="Fa">enum vtype - type</var>, <var class="Fa">uid_t file_uid</var>, <var class="Fa">gid_t - file_gid</var>, <var class="Fa">struct acl *acl</var>, - <var class="Fa">accmode_t accmode</var>, <var class="Fa">struct ucred - *cred</var>, <var class="Fa">int *privused</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This call implements the logic for the - <span class="Ux">UNIX</span> discretionary file security model with POSIX.1e - ACL extensions. It accepts the vnodes type <var class="Fa">type</var>, - owning UID <var class="Fa">file_uid</var>, owning GID - <var class="Fa">file_gid</var>, access ACL for the file - <var class="Fa">acl</var>, desired access mode - <var class="Fa">accmode</var>, requesting credential - <var class="Fa">cred</var>, and an optional call-by-reference - <var class="Vt">int</var> pointer returning whether or not privilege was - required for successful evaluation of the call; the - <var class="Fa">privused</var> pointer may be set to - <code class="Dv">NULL</code> by the caller in order not to be informed of - privilege information, or it may point to an integer that will be set to 1 - if privilege is used, and 0 otherwise.</p> -<p class="Pp" id="vaccess_acl_posix1e">This call is intended to support - implementations of <a class="Xr">VOP_ACCESS(9)</a>, which will use their own - access methods to retrieve the vnode properties, and then invoke - <a class="permalink" href="#vaccess_acl_posix1e"><code class="Fn">vaccess_acl_posix1e</code></a>() - in order to perform the actual check. Implementations of - <a class="Xr">VOP_ACCESS(9)</a> may choose to implement additional security - mechanisms whose results will be composed with the return value.</p> -<p class="Pp" id="vaccess_acl_posix1e~2">The algorithm used by - <a class="permalink" href="#vaccess_acl_posix1e~2"><code class="Fn">vaccess_acl_posix1e</code></a>() - is based on the POSIX.1e ACL evaluation algorithm. The algorithm selects a - <a class="permalink" href="#matching"><i class="Em" id="matching">matching</i></a> - entry from the access ACL, which may then be composed with an available ACL - mask entry, providing <span class="Ux">UNIX</span> security - compatibility.</p> -<p class="Pp">Once appropriate protections are selected for the current - credential, the requested access mode, in combination with the vnode type, - will be compared with the discretionary rights available for the credential. - If the rights granted by discretionary protections are insufficient, then - super-user privilege, if available for the credential, will also be - considered.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp"><code class="Fn">vaccess_acl_posix1e</code>() will return 0 on - success, or a non-zero error value on failure.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="EACCES">[<a class="permalink" href="#EACCES"><code class="Er">EACCES</code></a>]</dt> - <dd>Permission denied. An attempt was made to access a file in a way forbidden - by its file access permissions.</dd> - <dt id="EPERM">[<a class="permalink" href="#EPERM"><code class="Er">EPERM</code></a>]</dt> - <dd>Operation not permitted. An attempt was made to perform an operation - limited to processes with appropriate privileges or to the owner of a file - or other resource.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vaccess(9)</a>, <a class="Xr">vnode(9)</a>, - <a class="Xr">VOP_ACCESS(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page and the current implementation of - <code class="Fn">vaccess_acl_posix1e</code>() were written by - <span class="An">Robert Watson</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp">This manual page should include a full description of the POSIX.1e - ACL evaluation algorithm, or cross reference another page that does.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 22, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vflush.9 4.html b/static/freebsd/man9/vflush.9 4.html deleted file mode 100644 index e8531cea..00000000 --- a/static/freebsd/man9/vflush.9 4.html +++ /dev/null @@ -1,81 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFLUSH(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFLUSH(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vflush</code> — <span class="Nd">flush - vnodes for a mount point</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vflush</code>(<var class="Fa" style="white-space: nowrap;">struct - mount *mp</var>, <var class="Fa" style="white-space: nowrap;">int - rootrefs</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>, <var class="Fa" style="white-space: nowrap;">struct thread - *td</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vflush"><code class="Fn" id="vflush">vflush</code></a>() - function removes any vnodes in the vnode table that belong to the given - <var class="Vt">mount</var> structure.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">mp</var></dt> - <dd>The mount point whose vnodes should be removed.</dd> - <dt><var class="Fa">rootrefs</var></dt> - <dd>The number of references expected on the root vnode. - <a class="Xr">vrele(9)</a> will be invoked on the root vnode - <var class="Fa">rootrefs</var> times.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>The flags indicating how vnodes should be handled. - <dl class="Bl-tag"> - <dt id="FORCECLOSE"><a class="permalink" href="#FORCECLOSE"><code class="Dv">FORCECLOSE</code></a></dt> - <dd>If set, busy vnodes will be forcibly closed.</dd> - <dt id="SKIPSYSTEM"><a class="permalink" href="#SKIPSYSTEM"><code class="Dv">SKIPSYSTEM</code></a></dt> - <dd>If set, vnodes with the <code class="Dv">VV_SYSTEM</code> flag set - will be skipped.</dd> - <dt id="WRITECLOSE"><a class="permalink" href="#WRITECLOSE"><code class="Dv">WRITECLOSE</code></a></dt> - <dd>If set, only regular files currently opened for writing will be - removed.</dd> - </dl> - </dd> - <dt><var class="Fa">td</var></dt> - <dd>The calling thread.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">A value of 0 is returned if the flush is successful; otherwise, - <code class="Er">EBUSY</code> will be returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vgone(9)</a>, <a class="Xr">vrele(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 21, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vfs_busy.9 4.html b/static/freebsd/man9/vfs_busy.9 4.html deleted file mode 100644 index 56c7fa2e..00000000 --- a/static/freebsd/man9/vfs_busy.9 4.html +++ /dev/null @@ -1,84 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFS_BUSY(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFS_BUSY(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vfs_busy</code> — <span class="Nd">marks a - mount point as busy</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mount.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vfs_busy</code>(<var class="Fa" style="white-space: nowrap;">struct - mount *mp</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vfs_busy"><code class="Fn" id="vfs_busy">vfs_busy</code></a>() - function marks a mount point as busy by incrementing the reference count of - a mount point. It also delays unmounting by sleeping on - <var class="Fa">mp</var> if the <code class="Dv">MNTK_UNMOUNT</code> flag is - set in <var class="Fa">mp->mnt_kern_flag</var> and the - <code class="Dv">MBF_NOWAIT</code> flag is - <a class="permalink" href="#not"><i class="Em" id="not">not</i></a> set.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">mp</var></dt> - <dd>The mount point to busy.</dd> - <dt id="vfs_busy~2"><var class="Fa">flags</var></dt> - <dd>Flags controlling how - <a class="permalink" href="#vfs_busy~2"><code class="Fn">vfs_busy</code></a>() - should act. - <dl class="Bl-tag"> - <dt id="MBF_NOWAIT"><a class="permalink" href="#MBF_NOWAIT"><code class="Dv">MBF_NOWAIT</code></a></dt> - <dd>do not sleep if <code class="Dv">MNTK_UNMOUNT</code> is set.</dd> - <dt id="MBF_MNTLSTLOCK"><a class="permalink" href="#MBF_MNTLSTLOCK"><code class="Dv">MBF_MNTLSTLOCK</code></a></dt> - <dd>drop the mountlist_mtx in the critical path.</dd> - </dl> - </dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">A 0 value is returned on success. If the mount point is being - unmounted and MBF_NOWAIT flag is specified <code class="Er">ENOENT</code> - will be returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="ENOENT">[<a class="permalink" href="#ENOENT"><code class="Er">ENOENT</code></a>]</dt> - <dd>The mount point is being unmounted (<code class="Dv">MNTK_UNMOUNT</code> - is set).</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vfs_unbusy(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 11, 2013</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vfs_getnewfsid.9 4.html b/static/freebsd/man9/vfs_getnewfsid.9 4.html deleted file mode 100644 index 62b4b66b..00000000 --- a/static/freebsd/man9/vfs_getnewfsid.9 4.html +++ /dev/null @@ -1,72 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFS_GETNEWFSID(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFS_GETNEWFSID(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vfs_getnewfsid</code> — - <span class="Nd">allocate a new file system identifier</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mount.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vfs_getnewfsid</code>(<var class="Fa" style="white-space: nowrap;">struct - mount *mp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vfs_getnewfsid"><code class="Fn" id="vfs_getnewfsid">vfs_getnewfsid</code></a>() - function allocates a new file system identifier for the mount point given. - File systems typically call <code class="Fn">vfs_getnewfsid</code>() in - their mount routine in order to acquire a unique ID within the system which - can later be used to uniquely identify the file system via calls such as - <a class="Xr">vfs_getvfs(9)</a>.</p> -<p class="Pp">The actual <var class="Vt">fsid</var> is made up of two 32 bit - integers, that are stored in the <var class="Vt">statfs</var> structure of - <var class="Fa">mp</var>. The first integer is unique in the set of mounted - file systems, while the second holds the file system type.</p> -<div class="Bd Pp Li"> -<pre>typedef struct fsid { - int32_t val[2]; -} fsid_t;</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="PSEUDOCODE"><a class="permalink" href="#PSEUDOCODE">PSEUDOCODE</a></h1> -<div class="Bd Li"> -<pre>xxx_mount(struct mount *mp, char *path, caddr_t data, - struct nameidata *ndp, struct thread *td) -{ - ... - vfs_getnewfsid(mp); - ... -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vfs_getvfs(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 21, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vfs_getopt.9 4.html b/static/freebsd/man9/vfs_getopt.9 4.html deleted file mode 100644 index 442b6a2a..00000000 --- a/static/freebsd/man9/vfs_getopt.9 4.html +++ /dev/null @@ -1,176 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFS_GETOPT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFS_GETOPT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vfs_getopt</code>, - <code class="Nm">vfs_getopts</code>, <code class="Nm">vfs_flagopt</code>, - <code class="Nm">vfs_scanopt</code>, <code class="Nm">vfs_copyopt</code>, - <code class="Nm">vfs_filteropt</code>, <code class="Nm">vfs_setopt</code>, - <code class="Nm">vfs_setopt_part</code>, <code class="Nm">vfs_setopts</code> - — <span class="Nd">manipulate mount options and their - values</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mount.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vfs_getopt</code>(<var class="Fa">struct vfsoptlist - *opts</var>, <var class="Fa">const char *name</var>, <var class="Fa">void - **buf</var>, <var class="Fa">int *len</var>);</p> -<p class="Pp"><var class="Ft">char *</var> - <br/> - <code class="Fn">vfs_getopts</code>(<var class="Fa" style="white-space: nowrap;">struct - vfsoptlist *opts</var>, <var class="Fa" style="white-space: nowrap;">const - char *name</var>, <var class="Fa" style="white-space: nowrap;">int - *error</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vfs_flagopt</code>(<var class="Fa">struct vfsoptlist - *opts</var>, <var class="Fa">const char *name</var>, - <var class="Fa">uint64_t *flags</var>, <var class="Fa">uint64_t - flag</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vfs_scanopt</code>(<var class="Fa">struct vfsoptlist - *opts</var>, <var class="Fa">const char *name</var>, <var class="Fa">const - char *fmt</var>, <var class="Fa">...</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vfs_copyopt</code>(<var class="Fa">struct vfsoptlist - *opts</var>, <var class="Fa">const char *name</var>, <var class="Fa">void - *dest</var>, <var class="Fa">int len</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vfs_filteropt</code>(<var class="Fa">struct vfsoptlist - *opts</var>, <var class="Fa">const char **legal</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vfs_setopt</code>(<var class="Fa">struct vfsoptlist - *opts</var>, <var class="Fa">const char *name</var>, <var class="Fa">void - *value</var>, <var class="Fa">int len</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vfs_setopt_part</code>(<var class="Fa">struct vfsoptlist - *opts</var>, <var class="Fa">const char *name</var>, <var class="Fa">void - *value</var>, <var class="Fa">int len</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vfs_setopts</code>(<var class="Fa">struct vfsoptlist - *opts</var>, <var class="Fa">const char *name</var>, <var class="Fa">const - char *value</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vfs_getopt"><code class="Fn" id="vfs_getopt">vfs_getopt</code></a>() - function sets <var class="Fa">buf</var> to point to the value of the named - mount option, and sets <var class="Fa">len</var> to the length of the value - if it is not <code class="Dv">NULL</code>. The <var class="Fa">buf</var> - argument will point to the actual value, and does not need to be freed or - released (and probably should not be modified).</p> -<p class="Pp" id="vfs_getopts">The - <a class="permalink" href="#vfs_getopts"><code class="Fn">vfs_getopts</code></a>() - function returns the value of the specified option if it is a string (i.e., - <code class="Dv">NUL</code> terminated).</p> -<p class="Pp" id="vfs_flagopt">The - <a class="permalink" href="#vfs_flagopt"><code class="Fn">vfs_flagopt</code></a>() - function determines if an option exists. If the option does exist, and - <var class="Fa">flags</var> is not <code class="Dv">NULL</code>, - <var class="Fa">flag</var> is added to those already set in - <var class="Fa">flags</var>. If the option does not exist, and - <var class="Fa">flags</var> is not <code class="Dv">NULL</code>, - <var class="Fa">flag</var> is removed from those already set in - <var class="Fa">flags</var>. An example of typical usage is:</p> -<div class="Bd Pp Li"> -<pre>if (vfs_flagopt(mp->mnt_optnew, "wormlike", NULL, 0)) - vfs_flagopt(mp->mnt_optnew, "appendok", &(mp->flags), F_APPENDOK);</pre> -</div> -<p class="Pp" id="vfs_scanopt">The - <a class="permalink" href="#vfs_scanopt"><code class="Fn">vfs_scanopt</code></a>() - function performs a <a class="Xr">vsscanf(3)</a> with the option's value, - using the given format, into the specified variable arguments. The value - must be a string (i.e., <code class="Dv">NUL</code> terminated).</p> -<p class="Pp" id="vfs_copyopt">The - <a class="permalink" href="#vfs_copyopt"><code class="Fn">vfs_copyopt</code></a>() - function creates a copy of the option's value. The <var class="Fa">len</var> - argument must match the length of the option's value exactly (i.e., a larger - buffer will still cause - <a class="permalink" href="#vfs_copyout"><code class="Fn" id="vfs_copyout">vfs_copyout</code></a>() - to fail with <code class="Er">EINVAL</code>).</p> -<p class="Pp" id="vfs_filteropt">The - <a class="permalink" href="#vfs_filteropt"><code class="Fn">vfs_filteropt</code></a>() - function ensures that no unknown options were specified. A option is valid - if its name matches one of the names in the list of legal names. An option - may be prefixed with 'no', and still be considered valid.</p> -<p class="Pp" id="vfs_setopt">The - <a class="permalink" href="#vfs_setopt"><code class="Fn">vfs_setopt</code></a>() - and - <a class="permalink" href="#vfs_setopt_part"><code class="Fn" id="vfs_setopt_part">vfs_setopt_part</code></a>() - functions copy new data into the option's value. In - <code class="Fn">vfs_setopt</code>(), the <var class="Fa">len</var> argument - must match the length of the option's value exactly (i.e., a larger buffer - will still cause <code class="Fn">vfs_copyout</code>() to fail with - <code class="Er">EINVAL</code>).</p> -<p class="Pp" id="vfs_setopts">The - <a class="permalink" href="#vfs_setopts"><code class="Fn">vfs_setopts</code></a>() - function copies a new string into the option's value. The string, including - <code class="Dv">NUL</code> byte, must be no longer than the option's - length.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">vfs_getopt</code>() function returns 0 if the - option was found; otherwise, <code class="Er">ENOENT</code> is returned.</p> -<p class="Pp">The <code class="Fn">vfs_getopts</code>() function returns the - specified option if it is found, and is <code class="Dv">NUL</code> - terminated. If the option was found, but is not <code class="Dv">NUL</code> - terminated, <var class="Fa">error</var> is set to - <code class="Er">EINVAL</code> and <code class="Dv">NULL</code> is returned. - If the option was not found, <var class="Fa">error</var> is set to 0, and - <code class="Dv">NULL</code> is returned.</p> -<p class="Pp">The <code class="Fn">vfs_flagopt</code>() function returns 1 if - the option was found, and 0 if it was not.</p> -<p class="Pp">The <code class="Fn">vfs_scanopt</code>() function returns 0 if - the option was not found, or was not <code class="Dv">NUL</code> terminated; - otherwise, the return value of <a class="Xr">vsscanf(3)</a> is returned. If - <a class="Xr">vsscanf(3)</a> returns 0, it will be returned unchanged; - therefore, a return value of 0 does not always mean the option does not - exist, or is not a valid string.</p> -<p class="Pp">The <code class="Fn">vfs_copyopt</code>() and - <code class="Fn">vfs_setopt</code>() functions return 0 if the copy was - successful, <code class="Er">EINVAL</code> if the option was found but the - lengths did not match, and <code class="Er">ENOENT</code> if the option was - not found.</p> -<p class="Pp">The <code class="Fn">vfs_filteropt</code>() function returns 0 if - all of the options are legal; otherwise, <code class="Er">EINVAL</code> is - returned.</p> -<p class="Pp">The <code class="Fn">vfs_setopts</code>() function returns 0 if - the copy was successful, <code class="Er">EINVAL</code> if the option was - found but the string was too long, and <code class="Er">ENOENT</code> if the - option was not found.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@FreeBSD.org">davidc@FreeBSD.org</a>> - and <span class="An">Ruslan Ermilov</span> - <<a class="Mt" href="mailto:ru@FreeBSD.org">ru@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 19, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vfs_getvfs.9 4.html b/static/freebsd/man9/vfs_getvfs.9 4.html deleted file mode 100644 index 917d858c..00000000 --- a/static/freebsd/man9/vfs_getvfs.9 4.html +++ /dev/null @@ -1,71 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFS_GETVFS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFS_GETVFS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vfs_getvfs</code> — - <span class="Nd">returns a mount point given its file system - identifier</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mount.h</a>></code></p> -<p class="Pp"><var class="Ft">struct mount *</var> - <br/> - <code class="Fn">vfs_getvfs</code>(<var class="Fa" style="white-space: nowrap;">fsid_t - *fsid</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vfs_getvfs"><code class="Fn" id="vfs_getvfs">vfs_getvfs</code></a>() - function returns the mount point structure for a file system given its file - system identifier. The file system ID should have been allocated by calling - <a class="Xr">vfs_getnewfsid(9)</a>; otherwise, it will not be found.</p> -<p class="Pp" id="vfs_getvfs~2">A major user of - <a class="permalink" href="#vfs_getvfs~2"><code class="Fn">vfs_getvfs</code></a>() - is NFS, which uses the <var class="Vt">fsid</var> as part of file handles in - order to determine the file system a given RPC is for. If - <code class="Fn">vfs_getvfs</code>() fails to find the mount point related - to <var class="Fa">fsid</var>, the file system is considered stale.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If <var class="Fa">fsid</var> is found, the mount point for the ID - is returned; otherwise, <code class="Dv">NULL</code> is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="PSEUDOCODE"><a class="permalink" href="#PSEUDOCODE">PSEUDOCODE</a></h1> -<div class="Bd Li"> -<pre>if ((mp = vfs_getvfs(&fhp->fh_fsid)) == NULL) { - error = ESTALE; - goto out; -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vfs_getnewfsid(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 21, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vfs_mountedfrom.9 4.html b/static/freebsd/man9/vfs_mountedfrom.9 4.html deleted file mode 100644 index a7fefa18..00000000 --- a/static/freebsd/man9/vfs_mountedfrom.9 4.html +++ /dev/null @@ -1,48 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFS_MOUNTEDFROM(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFS_MOUNTEDFROM(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vfs_mountedfrom</code> — - <span class="Nd">sets the mounted from name for a mount</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mount.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vfs_mountedfrom</code>(<var class="Fa" style="white-space: nowrap;">struct - mount *mp</var>, <var class="Fa" style="white-space: nowrap;">const char - *from</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vfs_mountedfrom"><code class="Fn" id="vfs_mountedfrom">vfs_mountedfrom</code></a>() - function sets the mounted from name for a mount. This value is used by - <a class="permalink" href="#statfs"><code class="Fn" id="statfs">statfs</code></a>(<var class="Fa">2</var>) - to fill in <var class="Va">f_mntfromname</var>.</p> -<p class="Pp">In most cases <var class="Va">from</var> is the device that - contains the file system, but in the case of a pseudo file system it could - be a descriptive name like "devfs" or "procfs".</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 25, 2008</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vfs_rootmountalloc.9 4.html b/static/freebsd/man9/vfs_rootmountalloc.9 4.html deleted file mode 100644 index d33a6f01..00000000 --- a/static/freebsd/man9/vfs_rootmountalloc.9 4.html +++ /dev/null @@ -1,60 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFS_ROOTMOUNTALLOC(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFS_ROOTMOUNTALLOC(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vfs_rootmountalloc</code> — - <span class="Nd">allocate a root <var class="Vt">mount</var> - structure</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mount.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vfs_rootmountalloc</code>(<var class="Fa" style="white-space: nowrap;">char - *fstypename</var>, <var class="Fa" style="white-space: nowrap;">char - *devname</var>, <var class="Fa" style="white-space: nowrap;">struct mount - **mpp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><a class="permalink" href="#vfs_rootmountalloc"><code class="Fn" id="vfs_rootmountalloc">vfs_rootmountalloc</code></a>() - allocates a <var class="Vt">mount</var> structure initialized from the - <var class="Vt">vfsconf</var> type that matches - <var class="Fa">fstypename</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If successful, 0 is returned and <var class="Fa">mpp</var> points - to the newly allocated <var class="Vt">mount</var> structure. - <code class="Er">ENODEV</code> is returned if - <var class="Fa">fstypename</var> is <code class="Dv">NULL</code> or - invalid.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vfsconf(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 21, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vfs_suser.9 4.html b/static/freebsd/man9/vfs_suser.9 4.html deleted file mode 100644 index ae8790a7..00000000 --- a/static/freebsd/man9/vfs_suser.9 4.html +++ /dev/null @@ -1,70 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFS_SUSER(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFS_SUSER(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vfs_suser</code> — <span class="Nd">check - if credentials have superuser privileges for a mount point</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mount.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vfs_suser</code>(<var class="Fa" style="white-space: nowrap;">struct - mount *mp</var>, <var class="Fa" style="white-space: nowrap;">struct thread - *td</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vfs_suser"><code class="Fn" id="vfs_suser">vfs_suser</code></a>() - function checks if the credentials given include superuser powers for the - given mount point. It will check to see if the thread passed in has the same - credentials as the user that mounted the file system. If so, it returns 0, - otherwise it returns what <a class="Xr">priv_check(9)</a> would have - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">vfs_suser</code>() function returns 0 if the - user has superuser powers and <code class="Er">EPERM</code> otherwise. This - is the - <a class="permalink" href="#reverse"><i class="Em" id="reverse">reverse - logic</i></a> of some other implementations of - <code class="Fn">suser</code>() in which a TRUE response indicates superuser - powers.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">chroot(2)</a>, <a class="Xr">jail(2)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Fn">vfs_suser</code>() function was introduced in - <span class="Ux">FreeBSD 5.2</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Alfred - Perlstein</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 2, 2004</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vfs_timestamp.9 4.html b/static/freebsd/man9/vfs_timestamp.9 4.html deleted file mode 100644 index a3073888..00000000 --- a/static/freebsd/man9/vfs_timestamp.9 4.html +++ /dev/null @@ -1,55 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFS_TIMESTAMP(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFS_TIMESTAMP(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vfs_timestamp</code> — - <span class="Nd">generate current timestamp</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vfs_timestamp</code>(<var class="Fa" style="white-space: nowrap;">struct - timespec *tsp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vfs_timestamp"><code class="Fn" id="vfs_timestamp">vfs_timestamp</code></a>() - function fills in <var class="Fa">tsp</var> with the current time.</p> -<p class="Pp">The precision is based on the value of the - <var class="Va">vfs.timestamp_precision</var> sysctl variable:</p> -<p class="Pp"></p> -<dl class="Bl-tag Bl-compact"> - <dt>0</dt> - <dd>seconds only; nanoseconds are zeroed.</dd> - <dt>1</dt> - <dd>seconds and nanoseconds, accurate within 1/HZ.</dd> - <dt>2</dt> - <dd>seconds and nanoseconds, truncated to microseconds.</dd> - <dt>≥3</dt> - <dd>seconds and nanoseconds, maximum precision.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 21, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vfs_unbusy.9 4.html b/static/freebsd/man9/vfs_unbusy.9 4.html deleted file mode 100644 index c18fa727..00000000 --- a/static/freebsd/man9/vfs_unbusy.9 4.html +++ /dev/null @@ -1,54 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFS_UNBUSY(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFS_UNBUSY(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vfs_unbusy</code> — - <span class="Nd">unbusy a mount point</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mount.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vfs_unbusy</code>(<var class="Fa" style="white-space: nowrap;">struct - mount *mp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vfs_unbusy"><code class="Fn" id="vfs_unbusy">vfs_unbusy</code></a>() - function un-busies a mount point by decrementing the reference count of a - mount point. The reference count is typically incremented by calling - <a class="Xr">vfs_busy(9)</a> prior to this call.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">mp</var></dt> - <dd>The mount point to unbusy.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vfs_busy(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 14, 2010</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vfs_unmountall.9 4.html b/static/freebsd/man9/vfs_unmountall.9 4.html deleted file mode 100644 index 910d0eb3..00000000 --- a/static/freebsd/man9/vfs_unmountall.9 4.html +++ /dev/null @@ -1,41 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFS_UNMOUNTALL(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFS_UNMOUNTALL(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vfs_unmountall</code> — - <span class="Nd">unmount all file systems</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mount.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vfs_unmountall</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">vfs_unmountall</code> function, run only at - system shutdown, unmounts all mounted file systems from most recent to - oldest in order to avoid handling dependencies.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">boot(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 26, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vfsconf.9 3.html b/static/freebsd/man9/vfsconf.9 3.html deleted file mode 100644 index bac8b42c..00000000 --- a/static/freebsd/man9/vfsconf.9 3.html +++ /dev/null @@ -1,121 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VFSCONF(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VFSCONF(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vfsconf</code> — <span class="Nd">vfs - configuration information</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/mount.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vfs_register</code>(<var class="Fa" style="white-space: nowrap;">struct - vfsconf *vfc</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vfs_unregister</code>(<var class="Fa" style="white-space: nowrap;">struct - vfsconf *vfc</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vfs_modevent</code>(<var class="Fa" style="white-space: nowrap;">module_t - mod</var>, <var class="Fa" style="white-space: nowrap;">int type</var>, - <var class="Fa" style="white-space: nowrap;">void *data</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Each file system type known to the kernel has a - <var class="Vt">vfsconf</var> structure that contains the information - required to create a new mount of that file systems type.</p> -<div class="Bd Pp Li"> -<pre>struct vfsconf { - struct vfsops *vfc_vfsops; /* file system operations vector */ - char vfc_name[MFSNAMELEN]; /* file system type name */ - int vfc_typenum; /* historic file system type number */ - int vfc_refcount; /* number mounted of this type */ - int vfc_flags; /* permanent flags */ - struct vfsconf *vfc_next; /* next in list */ -};</pre> -</div> -<p class="Pp" id="vfs_register">When a new file system is mounted, - <a class="Xr">mount(2)</a> does a lookup of the - <var class="Vt">vfsconf</var> structure by its name, and if it is not - already registered, attempts to load a kernel module for it. The file system - operations for the new mount point are taken from - <var class="Va">vfc_vfsops</var>, and <var class="Va">mnt_vfc</var> in the - <var class="Vt">mount</var> structure is made to point directly at the - <var class="Vt">vfsconf</var> structure for the file system type. The file - system type number is taken from <var class="Va">vfc_typenum</var> which was - assigned in - <a class="permalink" href="#vfs_register"><code class="Fn">vfs_register</code></a>(), - and the mount flags are taken from a mask of - <var class="Va">vfc_flags</var>. Each time a file system of a given type is - mounted, <var class="Va">vfc_refcount</var> is incremented.</p> -<p class="Pp" id="vfs_register~2"><a class="permalink" href="#vfs_register~2"><code class="Fn">vfs_register</code></a>() - takes a new <var class="Vt">vfsconf</var> structure and adds it to the list - of existing file systems. If the type has not already been registered, it is - initialized by calling the - <a class="permalink" href="#vfs_init"><code class="Fn" id="vfs_init">vfs_init</code></a>() - function in the file system operations vector. - <code class="Fn">vfs_register</code>() also updates the oid's of any sysctl - nodes for this file system type to be the same as the newly assigned type - number.</p> -<p class="Pp" id="vfs_unregister"><a class="permalink" href="#vfs_unregister"><code class="Fn">vfs_unregister</code></a>() - unlinks <var class="Fa">vfc</var> from the list of registered file system - types if there are currently no mounted instances. If the - <a class="permalink" href="#vfs_uninit"><code class="Fn" id="vfs_uninit">vfs_uninit</code></a>() - function in the file systems initialization vector is defined, it is - called.</p> -<p class="Pp" id="vfs_modevent"><a class="permalink" href="#vfs_modevent"><code class="Fn">vfs_modevent</code></a>() - is registered by - <a class="permalink" href="#VFS_SET"><code class="Fn" id="VFS_SET">VFS_SET</code></a>() - to handle the loading and unloading of file system kernel modules. In the - case of <code class="Dv">MOD_LOAD</code>, - <code class="Fn">vfs_register</code>() is called. In the case of - <code class="Dv">MOD_UNLOAD</code>, <code class="Fn">vfs_unregister</code>() - is called.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp"><code class="Fn">vfs_register</code>() returns 0 if successful; - otherwise, <code class="Er">EEXIST</code> is returned indicating that the - file system type has already been registered.</p> -<p class="Pp"><code class="Fn">vfs_unregister</code>() returns 0 if successful. - If no <var class="Vt">vfsconf</var> entry can be found matching the name in - <var class="Fa">vfc</var>, <code class="Er">EINVAL</code> is returned. If - the reference count of mounted instances of the file system type is not - zero, <code class="Er">EBUSY</code> is returned. If - <code class="Fn">vfs_uninit</code>() is called, any errors it returns will - be returned by <code class="Fn">vfs_unregister</code>().</p> -<p class="Pp"><code class="Fn">vfs_modevent</code>() returns the result of the - call to <code class="Fn">vfs_register</code>() or - <code class="Fn">vfs_unregister</code>(), whatever the case.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">mount(2)</a>, - <a class="Xr">vfs_rootmountalloc(9)</a>, <a class="Xr">VFS_SET(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 16, 2013</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vget.9 4.html b/static/freebsd/man9/vget.9 4.html deleted file mode 100644 index 5c45def3..00000000 --- a/static/freebsd/man9/vget.9 4.html +++ /dev/null @@ -1,64 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VGET(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VGET(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vget</code> — <span class="Nd">get a vnode - from the free list</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vget</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int - lockflag</var>, <var class="Fa" style="white-space: nowrap;">struct thread - *td</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Get a vnode from the free list and increment its reference - count.</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode to remove from the free list.</dd> - <dt><var class="Fa">lockflag</var></dt> - <dd>If non-zero, the vnode will also be locked.</dd> -</dl> -<p class="Pp">When not in use, vnodes are kept on a free list. The vnodes still - reference valid files but may be reused to refer to a new file at any time. - Often, these vnodes are also held in caches in the system, such as the name - cache.</p> -<p class="Pp" id="vget">When a vnode which is on the free list is used again, - for instance if the vnode was found in the name cache as a result of a call - to <a class="Xr">VOP_LOOKUP(9)</a> then the new user must call - <a class="permalink" href="#vget"><code class="Fn">vget</code></a>() to - increment the reference count and remove it from the free list.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a>, <a class="Xr">vput(9)</a>, - <a class="Xr">vref(9)</a>, <a class="Xr">vrele(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 24, 1996</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vgone.9 4.html b/static/freebsd/man9/vgone.9 4.html deleted file mode 100644 index a79439d5..00000000 --- a/static/freebsd/man9/vgone.9 4.html +++ /dev/null @@ -1,57 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VGONE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VGONE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vgone</code> — <span class="Nd">prepare a - vnode for reuse</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vgone</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vgone"><code class="Fn" id="vgone">vgone</code></a>() - function prepares the vnode to be destroyed. The preparation includes the - cleaning of all file system specific data and the removal from its mount - point vnode list.</p> -<p class="Pp">If the vnode has a <var class="Va">v_usecount</var> of zero, and - its <code class="Dv">VIRF_DOOMED</code> flag is not set, it is moved to the - head of the free list as in most cases the vnode is about to be reused, or - its file system is being unmounted.</p> -<p class="Pp" id="vgone~2">The - <a class="permalink" href="#vgone~2"><code class="Fn">vgone</code></a>() - function takes an exclusively locked vnode, and returns with the vnode - exclusively locked.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 8, 2019</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vhold.9 4.html b/static/freebsd/man9/vhold.9 4.html deleted file mode 100644 index 2cc31278..00000000 --- a/static/freebsd/man9/vhold.9 4.html +++ /dev/null @@ -1,76 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VHOLD(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VHOLD(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vhold</code>, <code class="Nm">vdrop</code>, - <code class="Nm">vdropl</code> — <span class="Nd">acquire/release a - hold on a vnode</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vhold</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vholdl</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vdrop</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vdropl</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vhold"><code class="Fn" id="vhold">vhold</code></a>() - and - <a class="permalink" href="#vholdl"><code class="Fn" id="vholdl">vholdl</code></a>() - functions increment the <var class="Va">v_holdcnt</var> of the given vnode. - If the vnode has already been added to the free list and is still - referenced, it will be removed.</p> -<p class="Pp" id="vdrop">The - <a class="permalink" href="#vdrop"><code class="Fn">vdrop</code></a>() and - <a class="permalink" href="#vdropl"><code class="Fn" id="vdropl">vdropl</code></a>() - functions decrement the <var class="Va">v_holdcnt</var> of the vnode. If the - holdcount is less than or equal to zero prior to calling - <code class="Fn">vdrop</code>() or <code class="Fn">vdropl</code>(), the - system will panic. If the vnode is no longer referenced, it will be - freed.</p> -<p class="Pp" id="vhold~2"><a class="permalink" href="#vhold~2"><code class="Fn">vhold</code></a>() - and <code class="Fn">vdrop</code>() lock the vnode interlock while - <code class="Fn">vholdl</code>() and <code class="Fn">vdropl</code>() expect - the interlock to already be held.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 1, 2007</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vinvalbuf.9 4.html b/static/freebsd/man9/vinvalbuf.9 4.html deleted file mode 100644 index 8e16da5b..00000000 --- a/static/freebsd/man9/vinvalbuf.9 4.html +++ /dev/null @@ -1,111 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VINVALBUF(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VINVALBUF(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vinvalbuf</code> — - <span class="Nd">flushes and invalidates all buffers associated with a - vnode</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vinvalbuf</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>, <var class="Fa" style="white-space: nowrap;">struct ucred - *cred</var>, <var class="Fa" style="white-space: nowrap;">int slpflag</var>, - <var class="Fa" style="white-space: nowrap;">int slptimeo</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vinvalbuf"><code class="Fn" id="vinvalbuf">vinvalbuf</code></a>() - function invalidates all of the buffers associated with the given vnode. - This includes buffers on the clean list and the dirty list. If the - <code class="Dv">V_SAVE</code> flag is specified then the buffers on the - dirty list are synced prior to being released. If there is a VM Object - associated with the vnode, it is removed.</p> -<p class="Pp">Its arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>A pointer to the vnode whose buffers will be invalidated.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>The only supported flag is <code class="Dv">V_SAVE</code> and it indicates - that dirty buffers should be synced with the disk.</dd> - <dt><var class="Fa">cred</var></dt> - <dd>The user credentials that are used to <a class="Xr">VOP_FSYNC(9)</a> - buffers if <code class="Dv">V_SAVE</code> is set.</dd> - <dt><var class="Fa">slpflag</var></dt> - <dd>The slp flag that will be used in the priority of any sleeps in the - function.</dd> - <dt><var class="Fa">slptimeo</var></dt> - <dd>The timeout for any sleeps in the function.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The vnode is assumed to be locked prior to the call and remains - locked upon return.</p> -<p class="Pp"><var class="Va">Giant</var> must be held by prior to the call and - remains locked upon return.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">A 0 value is returned on success.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="PSEUDOCODE"><a class="permalink" href="#PSEUDOCODE">PSEUDOCODE</a></h1> -<div class="Bd Bd-indent Li"> -<pre>vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY); -error = vinvalbuf(devvp, V_SAVE, cred, 0, 0); -VOP_UNLOCK(devvp, 0); -if (error) - return (error);</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<dl class="Bl-tag"> - <dt id="ENOSPC">[<a class="permalink" href="#ENOSPC"><code class="Er">ENOSPC</code></a>]</dt> - <dd>The file system is full. (With <code class="Dv">V_SAVE</code>)</dd> - <dt id="EDQUOT">[<a class="permalink" href="#EDQUOT"><code class="Er">EDQUOT</code></a>]</dt> - <dd>Disc quota exceeded. (With <code class="Dv">V_SAVE</code>)</dd> - <dt id="EWOULDBLOCK">[<a class="permalink" href="#EWOULDBLOCK"><code class="Er">EWOULDBLOCK</code></a>]</dt> - <dd>Sleep operation timed out. (See <var class="Fa">slptimeo</var>)</dd> - <dt id="ERESTART">[<a class="permalink" href="#ERESTART"><code class="Er">ERESTART</code></a>]</dt> - <dd>A signal needs to be delivered and the system call should be restarted. - (With <code class="Dv">PCATCH</code> set in - <var class="Fa">slpflag</var>)</dd> - <dt id="EINTR">[<a class="permalink" href="#EINTR"><code class="Er">EINTR</code></a>]</dt> - <dd>The system has been interrupted by a signal. (With - <code class="Dv">PCATCH</code> set in <var class="Fa">slpflag</var>)</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">tsleep(9)</a>, <a class="Xr">VOP_FSYNC(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">October 20, 2008</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_fault_prefault.9 4.html b/static/freebsd/man9/vm_fault_prefault.9 4.html deleted file mode 100644 index 5f73900c..00000000 --- a/static/freebsd/man9/vm_fault_prefault.9 4.html +++ /dev/null @@ -1,71 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_FAULT_PREFAULT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_FAULT_PREFAULT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_fault_prefault</code> — - <span class="Nd">cluster page faults into a process's address - space</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/pmap.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_fault_prefault</code>(<var class="Fa" style="white-space: nowrap;">pmap_t - pmap</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t - addra</var>, <var class="Fa" style="white-space: nowrap;">vm_map_entry_t - entry</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_fault_prefault"><code class="Fn" id="vm_fault_prefault">vm_fault_prefault</code></a>() - function provides a means of clustering pagefaults into a process's address - space. It operates upon the physical map <var class="Fa">pmap</var>. The - <var class="Fa">entry</var> argument specifies the entry to be prefaulted; - the <var class="Fa">addra</var> argument specifies the beginning of the - mapping in the process's virtual address space.</p> -<p class="Pp" id="vm_fault">It is typically called by - <a class="permalink" href="#vm_fault"><code class="Fn">vm_fault</code></a>() - after the first page fault. It benefits the <a class="Xr">execve(2)</a> - system call by eliminating repetitive calls to - <code class="Fn">vm_fault</code>(), which would otherwise be made to bring - the process's executable pages into physical memory.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">This is a machine-independent function which calls the - machine-dependent <a class="Xr">pmap_is_prefaultable(9)</a> helper function - to determine if a page may be prefaulted into physical memory.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">execve(2)</a>, - <a class="Xr">pmap_is_prefaultable(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 21, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_map.9 4.html b/static/freebsd/man9/vm_map.9 4.html deleted file mode 100644 index c6cb9812..00000000 --- a/static/freebsd/man9/vm_map.9 4.html +++ /dev/null @@ -1,290 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_MAP(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_MAP(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_map</code> — <span class="Nd">virtual - address space portion of virtual memory subsystem</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_map.h</a>></code></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">vm_map</code> subsystem is used to manage - virtual address spaces. This section describes the main data structures used - within the code.</p> -<p class="Pp">The <var class="Vt">struct vm_map</var> is a generic - representation of an address space. This address space may belong to a user - process or the kernel. The kernel actually uses several maps, which are - maintained as subordinate maps, created using the - <a class="Xr">vm_map_submap(9)</a> function.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct vm_map { - struct vm_map_entry header; - union { - struct sx lock; - struct mtx system_mtx; - }; - int nentries; - vm_size_t size; - u_int timestamp; - u_int flags; - vm_map_entry_t root; - pmap_t pmap; - int busy; -};</pre> -</div> -<p class="Pp">The fields of <var class="Vt">struct vm_map</var> are as - follows:</p> -<dl class="Bl-tag"> - <dt id="header"><var class="Va">header</var></dt> - <dd>Head node of a circular, doubly linked list of <var class="Vt">struct - vm_map_entry</var> objects. Each object defines a particular region within - this map's address space.</dd> - <dt id="lock"><var class="Va">lock</var></dt> - <dd>Used to serialize access to the structure.</dd> - <dt id="system_mtx"><var class="Va">system_mtx</var></dt> - <dd>A mutex which is used if the map is a system map.</dd> - <dt id="nentries"><var class="Va">nentries</var></dt> - <dd>A count of the members in use within the circular map entry list.</dd> - <dt id="size"><var class="Va">size</var></dt> - <dd>Specifies the size of the virtual address space.</dd> - <dt id="timestamp"><var class="Va">timestamp</var></dt> - <dd>Used to determine if the map has changed since its last access.</dd> - <dt id="flags"><var class="Va">flags</var></dt> - <dd>Map flags, described below.</dd> - <dt id="root"><var class="Va">root</var></dt> - <dd>Root node of a binary search tree used for fast lookup of map - entries.</dd> - <dt id="pmap"><var class="Va">pmap</var></dt> - <dd>Pointer to the underlying physical map with which this virtual map is - associated.</dd> - <dt id="busy"><var class="Va">busy</var></dt> - <dd>Map busy counter, prevents forks.</dd> -</dl> -<p class="Pp">Possible map flags:</p> -<dl class="Bl-tag"> - <dt id="MAP_WIREFUTURE"><a class="permalink" href="#MAP_WIREFUTURE"><code class="Dv">MAP_WIREFUTURE</code></a></dt> - <dd>Wire all future pages in this map.</dd> - <dt id="MAP_BUSY_WAKEUP"><a class="permalink" href="#MAP_BUSY_WAKEUP"><code class="Dv">MAP_BUSY_WAKEUP</code></a></dt> - <dd>There are waiters for the map busy status.</dd> - <dt id="MAP_NEEDS_WAKEUP"><var class="Va">MAP_NEEDS_WAKEUP</var></dt> - <dd>Indicates if a thread is waiting for an allocation within the map. Used - only by system maps.</dd> - <dt id="MAP_SYSTEM_MAP"><var class="Va">MAP_SYSTEM_MAP</var></dt> - <dd>If set, indicates that the map is the system map; otherwise, it belongs to - a user process.</dd> -</dl> -<p class="Pp">The following flags can be passed to - <a class="Xr">vm_map_find(9)</a> and <a class="Xr">vm_map_insert(9)</a> to - specify the copy-on-write properties of regions within the map:</p> -<dl class="Bl-tag"> - <dt id="MAP_COPY_ON_WRITE"><a class="permalink" href="#MAP_COPY_ON_WRITE"><code class="Dv">MAP_COPY_ON_WRITE</code></a></dt> - <dd>The mapping is copy-on-write.</dd> - <dt id="MAP_NOFAULT"><a class="permalink" href="#MAP_NOFAULT"><code class="Dv">MAP_NOFAULT</code></a></dt> - <dd>The mapping should not generate page faults.</dd> - <dt id="MAP_PREFAULT"><a class="permalink" href="#MAP_PREFAULT"><code class="Dv">MAP_PREFAULT</code></a></dt> - <dd>The mapping should be prefaulted into physical memory.</dd> - <dt id="MAP_PREFAULT_PARTIAL"><a class="permalink" href="#MAP_PREFAULT_PARTIAL"><code class="Dv">MAP_PREFAULT_PARTIAL</code></a></dt> - <dd>The mapping should be partially prefaulted into physical memory.</dd> - <dt id="MAP_DISABLE_SYNCER"><a class="permalink" href="#MAP_DISABLE_SYNCER"><code class="Dv">MAP_DISABLE_SYNCER</code></a></dt> - <dd>Do not periodically flush dirty pages; only flush them when absolutely - necessary.</dd> - <dt id="MAP_DISABLE_COREDUMP"><a class="permalink" href="#MAP_DISABLE_COREDUMP"><code class="Dv">MAP_DISABLE_COREDUMP</code></a></dt> - <dd>Do not include the mapping in a core dump.</dd> - <dt id="MAP_PREFAULT_MADVISE"><a class="permalink" href="#MAP_PREFAULT_MADVISE"><code class="Dv">MAP_PREFAULT_MADVISE</code></a></dt> - <dd>Specify that the request is from a user process calling - <a class="Xr">madvise(2)</a>.</dd> - <dt id="MAP_ACC_CHARGED"><a class="permalink" href="#MAP_ACC_CHARGED"><code class="Dv">MAP_ACC_CHARGED</code></a></dt> - <dd>Region is already charged to the requestor by some means.</dd> - <dt id="MAP_ACC_NO_CHARGE"><a class="permalink" href="#MAP_ACC_NO_CHARGE"><code class="Dv">MAP_ACC_NO_CHARGE</code></a></dt> - <dd>Do not charge for allocated region.</dd> -</dl> -<p class="Pp">The <var class="Vt">struct vm_map_entry</var> is a generic - representation of a region. The region managed by each entry is associated - with a <var class="Vt">union vm_map_object</var>, described below.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct vm_map_entry { - struct vm_map_entry *prev; - struct vm_map_entry *next; - struct vm_map_entry *left; - struct vm_map_entry *right; - vm_offset_t start; - vm_offset_t end; - vm_offset_t avail_ssize; - vm_size_t adj_free; - vm_size_t max_free; - union vm_map_object object; - vm_ooffset_t offset; - vm_eflags_t eflags; - /* Only in task maps: */ - vm_prot_t protection; - vm_prot_t max_protection; - vm_inherit_t inheritance; - int wired_count; - vm_pindex_t lastr; -};</pre> -</div> -<p class="Pp">The fields of <var class="Vt">struct vm_map_entry</var> are as - follows:</p> -<dl class="Bl-tag"> - <dt id="prev"><var class="Va">prev</var></dt> - <dd>Pointer to the previous node in a doubly-linked, circular list.</dd> - <dt id="next"><var class="Va">next</var></dt> - <dd>Pointer to the next node in a doubly-linked, circular list.</dd> - <dt id="left"><var class="Va">left</var></dt> - <dd>Pointer to the left node in a binary search tree.</dd> - <dt id="right"><var class="Va">right</var></dt> - <dd>Pointer to the right node in a binary search tree.</dd> - <dt id="start"><var class="Va">start</var></dt> - <dd>Lower address bound of this entry's region.</dd> - <dt id="end"><var class="Va">end</var></dt> - <dd>Upper address bound of this entry's region.</dd> - <dt id="avail_ssize"><var class="Va">avail_ssize</var></dt> - <dd>If the entry is for a process stack, specifies how much the entry can - grow.</dd> - <dt id="adj_free"><var class="Va">adj_free</var></dt> - <dd>The amount of free, unmapped address space adjacent to and immediately - following this map entry.</dd> - <dt id="max_free"><var class="Va">max_free</var></dt> - <dd>The maximum amount of contiguous free space in this map entry's - subtree.</dd> - <dt id="object"><var class="Va">object</var></dt> - <dd>Pointer to the <var class="Vt">struct vm_map_object</var> with which this - entry is associated.</dd> - <dt id="offset"><var class="Va">offset</var></dt> - <dd>Offset within the <var class="Va">object</var> which is mapped from - <var class="Va">start</var> onwards.</dd> - <dt id="eflags"><var class="Va">eflags</var></dt> - <dd>Flags applied to this entry, described below.</dd> -</dl> -<p class="Pp">The following five members are only valid for entries forming part - of a user process's address space:</p> -<dl class="Bl-tag"> - <dt id="protection"><var class="Va">protection</var></dt> - <dd>Memory protection bits applied to this region.</dd> - <dt id="max_protection"><var class="Va">max_protection</var></dt> - <dd>Mask for the memory protection bits which may be actually be applied to - this region.</dd> - <dt id="inheritance"><var class="Va">inheritance</var></dt> - <dd>Contains flags which specify how this entry should be treated during fork - processing.</dd> - <dt id="wired_count"><var class="Va">wired_count</var></dt> - <dd>Count of how many times this entry has been wired into physical - memory.</dd> - <dt id="lastr"><var class="Va">lastr</var></dt> - <dd>Contains the address of the last read which caused a page fault.</dd> -</dl> -<p class="Pp">The following flags may be applied to each entry, by specifying - them as a mask within the <var class="Va">eflags</var> member:</p> -<dl class="Bl-tag"> - <dt id="MAP_ENTRY_NOSYNC"><a class="permalink" href="#MAP_ENTRY_NOSYNC"><code class="Dv">MAP_ENTRY_NOSYNC</code></a></dt> - <dd>The system should not flush the data associated with this map - periodically, but only when it needs to.</dd> - <dt id="MAP_ENTRY_IS_SUB_MAP"><a class="permalink" href="#MAP_ENTRY_IS_SUB_MAP"><code class="Dv">MAP_ENTRY_IS_SUB_MAP</code></a></dt> - <dd>If set, then the <var class="Va">object</var> member specifies a - subordinate map.</dd> - <dt id="MAP_ENTRY_COW"><a class="permalink" href="#MAP_ENTRY_COW"><code class="Dv">MAP_ENTRY_COW</code></a></dt> - <dd>Indicate that this is a copy-on-write region.</dd> - <dt id="MAP_ENTRY_NEEDS_COPY"><a class="permalink" href="#MAP_ENTRY_NEEDS_COPY"><code class="Dv">MAP_ENTRY_NEEDS_COPY</code></a></dt> - <dd>Indicate that a copy-on-write region needs to be copied.</dd> - <dt id="MAP_ENTRY_NOFAULT"><a class="permalink" href="#MAP_ENTRY_NOFAULT"><code class="Dv">MAP_ENTRY_NOFAULT</code></a></dt> - <dd>Specifies that accesses within this region should never cause a page - fault. If a page fault occurs within this region, the system will - panic.</dd> - <dt id="MAP_ENTRY_USER_WIRED"><a class="permalink" href="#MAP_ENTRY_USER_WIRED"><code class="Dv">MAP_ENTRY_USER_WIRED</code></a></dt> - <dd>Indicate that this region was wired on behalf of a user process.</dd> - <dt id="MAP_ENTRY_BEHAV_NORMAL"><a class="permalink" href="#MAP_ENTRY_BEHAV_NORMAL"><code class="Dv">MAP_ENTRY_BEHAV_NORMAL</code></a></dt> - <dd>The system should use the default paging behaviour for this region.</dd> - <dt id="MAP_ENTRY_BEHAV_SEQUENTIAL"><a class="permalink" href="#MAP_ENTRY_BEHAV_SEQUENTIAL"><code class="Dv">MAP_ENTRY_BEHAV_SEQUENTIAL</code></a></dt> - <dd>The system should depress the priority of pages immediately preceding each - page within this region when faulted in.</dd> - <dt id="MAP_ENTRY_BEHAV_RANDOM"><a class="permalink" href="#MAP_ENTRY_BEHAV_RANDOM"><code class="Dv">MAP_ENTRY_BEHAV_RANDOM</code></a></dt> - <dd>Is a hint that pages within this region will be accessed randomly, and - that prefetching is likely not advantageous.</dd> - <dt id="MAP_ENTRY_IN_TRANSITION"><a class="permalink" href="#MAP_ENTRY_IN_TRANSITION"><code class="Dv">MAP_ENTRY_IN_TRANSITION</code></a></dt> - <dd>Indicate that wiring or unwiring of an entry is in progress, and that - other kernel threads should not attempt to modify fields in the - structure.</dd> - <dt id="MAP_ENTRY_NEEDS_WAKEUP"><a class="permalink" href="#MAP_ENTRY_NEEDS_WAKEUP"><code class="Dv">MAP_ENTRY_NEEDS_WAKEUP</code></a></dt> - <dd>Indicate that there are kernel threads waiting for this region to become - available.</dd> - <dt id="MAP_ENTRY_NOCOREDUMP"><a class="permalink" href="#MAP_ENTRY_NOCOREDUMP"><code class="Dv">MAP_ENTRY_NOCOREDUMP</code></a></dt> - <dd>The region should not be included in a core dump.</dd> -</dl> -<p class="Pp">The <var class="Va">inheritance</var> member has type - <var class="Vt">vm_inherit_t</var>. This governs the inheritance behaviour - for a map entry during fork processing. The following values are defined for - <var class="Vt">vm_inherit_t</var>:</p> -<dl class="Bl-tag"> - <dt id="VM_INHERIT_SHARE"><a class="permalink" href="#VM_INHERIT_SHARE"><code class="Dv">VM_INHERIT_SHARE</code></a></dt> - <dd>The object associated with the entry should be cloned and shared with the - new map. A new <var class="Vt">struct vm_object</var> will be created if - necessary.</dd> - <dt id="VM_INHERIT_COPY"><a class="permalink" href="#VM_INHERIT_COPY"><code class="Dv">VM_INHERIT_COPY</code></a></dt> - <dd>The object associated with the entry should be copied to the new map.</dd> - <dt id="VM_INHERIT_NONE"><a class="permalink" href="#VM_INHERIT_NONE"><code class="Dv">VM_INHERIT_NONE</code></a></dt> - <dd>The entry should not be copied to the new map.</dd> - <dt id="VM_INHERIT_DEFAULT"><a class="permalink" href="#VM_INHERIT_DEFAULT"><code class="Dv">VM_INHERIT_DEFAULT</code></a></dt> - <dd>Specifies the default behaviour, - <code class="Dv">VM_INHERIT_COPY</code>.</dd> -</dl> -<p class="Pp">The <var class="Vt">union vm_map_object</var> is used to specify - the structure which a <var class="Vt">struct vm_map_entry</var> is - associated with.</p> -<p class="Pp">The fields of <var class="Vt">union vm_map_object</var> are as - follows:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>union vm_map_object { - struct vm_object *vm_object; - struct vm_map *sub_map; -};</pre> -</div> -<p class="Pp">Normally, the <var class="Va">sub_map</var> member is only used by - system maps to indicate that a memory range is managed by a subordinate - system map. Within a user process map, each <var class="Vt">struct - vm_map_entry</var> is backed by a <var class="Vt">struct - vm_object</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap(9)</a>, - <a class="Xr">vm_map_check_protection(9)</a>, - <a class="Xr">vm_map_delete(9)</a>, - <a class="Xr">vm_map_entry_resize_free(9)</a>, - <a class="Xr">vm_map_find(9)</a>, <a class="Xr">vm_map_findspace(9)</a>, - <a class="Xr">vm_map_inherit(9)</a>, <a class="Xr">vm_map_init(9)</a>, - <a class="Xr">vm_map_insert(9)</a>, <a class="Xr">vm_map_lock(9)</a>, - <a class="Xr">vm_map_lookup(9)</a>, <a class="Xr">vm_map_madvise(9)</a>, - <a class="Xr">vm_map_max(9)</a>, <a class="Xr">vm_map_min(9)</a>, - <a class="Xr">vm_map_pmap(9)</a>, <a class="Xr">vm_map_protect(9)</a>, - <a class="Xr">vm_map_remove(9)</a>, <a class="Xr">vm_map_stack(9)</a>, - <a class="Xr">vm_map_submap(9)</a>, <a class="Xr">vm_map_sync(9)</a>, - <a class="Xr">vm_map_wire(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 3, 2018</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_map_check_protection.9 4.html b/static/freebsd/man9/vm_map_check_protection.9 4.html deleted file mode 100644 index bce222b6..00000000 --- a/static/freebsd/man9/vm_map_check_protection.9 4.html +++ /dev/null @@ -1,70 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_MAP_CHECK_PROTECTION(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_MAP_CHECK_PROTECTION(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_map_check_protection</code> — - <span class="Nd">check memory protection for a vm_map</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_map.h</a>></code></p> -<p class="Pp"><var class="Ft">boolean_t</var> - <br/> - <code class="Fn">vm_map_check_protection</code>(<var class="Fa">vm_map_t - map</var>, <var class="Fa">vm_offset_t start</var>, - <var class="Fa">vm_offset_t end</var>, <var class="Fa">vm_prot_t - protection</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_map_check_protection"><code class="Fn" id="vm_map_check_protection">vm_map_check_protection</code></a>() - function asserts that the target <var class="Fa">map</var> allows the - specified privilege <var class="Fa">protection</var> over the entire address - range from <var class="Fa">start</var> to <var class="Fa">end</var>. The - region MUST be contiguous; no holes are allowed.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">This code does not and SHOULD not check whether the contents of - the region are accessible. For example, a small file may be mapped into an - address space which is significantly larger in size.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">vm_map_check_protection</code>() function - returns TRUE if the privilege is allowed; if it is not allowed, or if any - other error occurred, the value FALSE is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">munmap(2)</a>, <a class="Xr">vm_map(9)</a>, - <a class="Xr">vm_map_protect(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 19, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_map_delete.9 4.html b/static/freebsd/man9/vm_map_delete.9 4.html deleted file mode 100644 index c3cd8010..00000000 --- a/static/freebsd/man9/vm_map_delete.9 4.html +++ /dev/null @@ -1,68 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_MAP_DELETE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_MAP_DELETE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_map_delete</code> — - <span class="Nd">deallocate an address range from a map</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_map.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_map_delete</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t - map</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t - start</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t - end</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_map_delete"><code class="Fn" id="vm_map_delete">vm_map_delete</code></a>() - function deallocates the address range bounded by - <var class="Fa">start</var> and <var class="Fa">end</var> from the - <var class="Fa">map</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">This function is for <span class="Ux">FreeBSD</span> VM internal - use only. The <a class="Xr">vm_map_remove(9)</a> function should be called - by <span class="Ux">FreeBSD</span> VM consumers instead.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">vm_map_delete</code>() function always - returns <code class="Dv">KERN_SUCCESS</code>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vm_map(9)</a>, - <a class="Xr">vm_map_remove(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 19, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_map_entry_resize_free.9 3.html b/static/freebsd/man9/vm_map_entry_resize_free.9 3.html deleted file mode 100644 index 11a88d84..00000000 --- a/static/freebsd/man9/vm_map_entry_resize_free.9 3.html +++ /dev/null @@ -1,176 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_MAP_ENTRY_RESIZE_FREE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_MAP_ENTRY_RESIZE_FREE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_map_entry_resize_free</code> — - <span class="Nd">vm map free space algorithm</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_map.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_map_entry_resize_free</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t - map</var>, <var class="Fa" style="white-space: nowrap;">vm_map_entry_t - entry</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">This manual page describes the <var class="Vt">vm_map_entry</var> - fields used in the VM map free space algorithm, how to maintain consistency - of these variables, and the - <a class="permalink" href="#vm_map_entry_resize_free"><code class="Fn" id="vm_map_entry_resize_free">vm_map_entry_resize_free</code></a>() - function.</p> -<p class="Pp">VM map entries are organized as both a doubly-linked list - (<var class="Va">prev</var> and <var class="Va">next</var> pointers) and as - a binary search tree (<var class="Va">left</var> and - <var class="Va">right</var> pointers). The search tree is organized as a - Sleator and Tarjan splay tree, also known as a “self-adjusting - tree”.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>struct vm_map_entry { - struct vm_map_entry *prev; - struct vm_map_entry *next; - struct vm_map_entry *left; - struct vm_map_entry *right; - vm_offset_t start; - vm_offset_t end; - vm_offset_t avail_ssize; - vm_size_t adj_free; - vm_size_t max_free; - ... -};</pre> -</div> -<p class="Pp">The free space algorithm adds two fields to <var class="Vt">struct - vm_map_entry</var>: <var class="Va">adj_free</var> and - <var class="Va">max_free</var>. The <var class="Va">adj_free</var> field is - the amount of free address space adjacent to and immediately following - (higher address) the map entry. This field is unused in the map header. Note - that <var class="Va">adj_free</var> depends on the linked list, not the - splay tree and that <var class="Va">adj_free</var> can be computed as:</p> -<div class="Bd Pp Bd-indent Li"> -<pre>entry->adj_free = (entry->next == &map->header ? - map->max_offset : entry->next->start) - entry->end;</pre> -</div> -<p class="Pp">The <var class="Va">max_free</var> field is the maximum amount of - contiguous free space in the entry's subtree. Note that - <var class="Va">max_free</var> depends on the splay tree, not the linked - list and that <var class="Va">max_free</var> is computed by taking the - maximum of its own <var class="Va">adj_free</var> and the - <var class="Va">max_free</var> of its left and right subtrees. Again, - <var class="Va">max_free</var> is unused in the map header.</p> -<p class="Pp" id="O">These fields allow for an - <a class="permalink" href="#O"><code class="Fn">O</code></a>(<var class="Fa">log - n</var>) implementation of - <a class="permalink" href="#vm_map_findspace"><code class="Fn" id="vm_map_findspace">vm_map_findspace</code></a>(). - Using <var class="Va">max_free</var>, we can immediately test for a - sufficiently large free region in an entire subtree. This makes it possible - to find a first-fit free region of a given size in one pass down the tree, - so <code class="Fn">O</code>(<var class="Fa">log n</var>) amortized using - splay trees.</p> -<p class="Pp" id="vm_map_entry_link">When a free region changes size, we must - update <var class="Va">adj_free</var> and <var class="Va">max_free</var> in - the preceding map entry and propagate <var class="Va">max_free</var> up the - tree. This is handled in - <a class="permalink" href="#vm_map_entry_link"><code class="Fn">vm_map_entry_link</code></a>() - and - <a class="permalink" href="#vm_map_entry_unlink"><code class="Fn" id="vm_map_entry_unlink">vm_map_entry_unlink</code></a>() - for the cases of inserting and deleting an entry. Note that - <code class="Fn">vm_map_entry_link</code>() updates both the new entry and - the previous entry, and that <code class="Fn">vm_map_entry_unlink</code>() - updates the previous entry. Also note that <var class="Va">max_free</var> is - not actually propagated up the tree. Instead, that entry is first splayed to - the root and then the change is made there. This is a common technique in - splay trees and is also how map entries are linked and unlinked into the - tree.</p> -<p class="Pp" id="vm_map_entry_resize_free~2">The - <a class="permalink" href="#vm_map_entry_resize_free~2"><code class="Fn">vm_map_entry_resize_free</code></a>() - function updates the free space variables in the given - <var class="Fa">entry</var> and propagates those values up the tree. This - function should be called whenever a map entry is resized in-place, that is, - by modifying its <var class="Va">start</var> or <var class="Va">end</var> - values. Note that if you change <var class="Va">end</var>, then you should - resize that entry, but if you change <var class="Va">start</var>, then you - should resize the previous entry. The map must be locked before calling this - function, and again, propagating <var class="Va">max_free</var> is performed - by splaying that entry to the root.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<p class="Pp">Consider adding a map entry with - <code class="Fn">vm_map_insert</code>().</p> -<div class="Bd Pp Bd-indent Li"> -<pre>ret = vm_map_insert(map, object, offset, start, end, prot, - max_prot, cow);</pre> -</div> -<p class="Pp">In this case, no further action is required to maintain - consistency of the free space variables. The - <code class="Fn">vm_map_insert</code>() function calls - <code class="Fn">vm_map_entry_link</code>() which updates both the new entry - and the previous entry. The same would be true for - <code class="Fn">vm_map_delete</code>() and for calling - <code class="Fn">vm_map_entry_link</code>() or - <code class="Fn">vm_map_entry_unlink</code>() directly.</p> -<p class="Pp">Now consider resizing an entry in-place without a call to - <code class="Fn">vm_map_entry_link</code>() or - <code class="Fn">vm_map_entry_unlink</code>().</p> -<div class="Bd Pp Bd-indent Li"> -<pre>entry->start = new_start; -if (entry->prev != &map->header) - vm_map_entry_resize_free(map, entry->prev);</pre> -</div> -<p class="Pp">In this case, resetting <var class="Va">start</var> changes the - amount of free space following the previous entry, so we use - <code class="Fn">vm_map_entry_resize_free</code>() to update the previous - entry.</p> -<p class="Pp">Finally, suppose we change an entry's <var class="Va">end</var> - address.</p> -<div class="Bd Pp Bd-indent Li"> -<pre>entry->end = new_end; -vm_map_entry_resize_free(map, entry);</pre> -</div> -<p class="Pp">Here, we call <code class="Fn">vm_map_entry_resize_free</code>() - on the entry itself.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vm_map(9)</a>, - <a class="Xr">vm_map_findspace(9)</a></p> -<p class="Pp"><cite class="Rs"><span class="RsA">Daniel D. Sleator</span> and - <span class="RsA">Robert E. Tarjan</span>, <span class="RsT">Self-Adjusting - Binary Search Trees</span>, <i class="RsJ">JACM</i>, <span class="RsV">vol. - 32(3)</span>, <span class="RsP">pp. 652-686</span>, <span class="RsD">July - 1985</span>.</cite></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">Splay trees were added to the VM map in <span class="Ux">FreeBSD - 5.0</span>, and the <code class="Fn">O</code>(<var class="Fa">log n</var>) - tree-based free space algorithm was added in <span class="Ux">FreeBSD - 5.3</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The tree-based free space algorithm and this manual page were - written by <span class="An">Mark W. Krentel</span> - <<a class="Mt" href="mailto:krentel@dreamscape.com">krentel@dreamscape.com</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 17, 2004</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_map_find.9 3.html b/static/freebsd/man9/vm_map_find.9 3.html deleted file mode 100644 index 059a93bd..00000000 --- a/static/freebsd/man9/vm_map_find.9 3.html +++ /dev/null @@ -1,122 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_MAP_FIND(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_MAP_FIND(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_map_find</code> — <span class="Nd">find - a free region within a map, and optionally map a vm_object</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_map.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_map_find</code>(<var class="Fa">vm_map_t map</var>, - <var class="Fa">vm_object_t object</var>, <var class="Fa">vm_ooffset_t - offset</var>, <var class="Fa">vm_offset_t *addr</var>, - <var class="Fa">vm_size_t length</var>, <var class="Fa">vm_offset_t - max_addr</var>, <var class="Fa">int find_space</var>, - <var class="Fa">vm_prot_t prot</var>, <var class="Fa">vm_prot_t max</var>, - <var class="Fa">int cow</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_map_find"><code class="Fn" id="vm_map_find">vm_map_find</code></a>() - function attempts to find a free region in the target - <var class="Fa">map</var>, with the given <var class="Fa">length.</var> If a - free region is found, <code class="Fn">vm_map_find</code>() creates a - mapping of <var class="Fa">object</var> via a call to - <a class="Xr">vm_map_insert(9)</a>.</p> -<p class="Pp">The arguments <var class="Fa">offset</var>, - <var class="Fa">prot</var>, <var class="Fa">max</var>, and - <var class="Fa">cow</var> are passed unchanged to - <a class="Xr">vm_map_insert(9)</a> when creating the mapping, if and only if - a free region is found.</p> -<p class="Pp">If <var class="Fa">object</var> is - non-<code class="Dv">NULL</code>, the reference count on the object must be - incremented by the caller before calling this function to account for the - new entry.</p> -<p class="Pp">If <var class="Fa">max_addr</var> is non-zero, it specifies an - upper bound on the mapping. The mapping will only succeed if a free region - can be found that resides entirely below <var class="Fa">max_addr</var>.</p> -<p class="Pp">The <var class="Fa">find_space</var> argument specifies the - strategy to use when searching for a free region of the requested length. - For all values other than <code class="Dv">VMFS_NO_SPACE</code>, - <a class="Xr">vm_map_findspace(9)</a> is called to locate a free region of - the requested length with a starting address at or above - <var class="Fa">*addr</var>. The following strategies are supported:</p> -<dl class="Bl-tag"> - <dt id="VMFS_NO_SPACE"><a class="permalink" href="#VMFS_NO_SPACE"><code class="Dv">VMFS_NO_SPACE</code></a></dt> - <dd>The mapping will only succeed if there is a free region of the requested - length at the given address <var class="Fa">*addr</var>.</dd> - <dt id="VMFS_ANY_SPACE"><a class="permalink" href="#VMFS_ANY_SPACE"><code class="Dv">VMFS_ANY_SPACE</code></a></dt> - <dd>The mapping will succeed as long as there is a free region.</dd> - <dt id="VMFS_SUPER_SPACE"><a class="permalink" href="#VMFS_SUPER_SPACE"><code class="Dv">VMFS_SUPER_SPACE</code></a></dt> - <dd>The mapping will succeed as long as there is a free region that begins on - a superpage boundary. If <var class="Fa">object</var> is - non-<code class="Dv">NULL</code> and is already backed by superpages, then - the mapping will require a free region that aligns relative to the - existing superpages rather than one beginning on a superpage - boundary.</dd> - <dt id="VMFS_OPTIMAL_SPACE"><a class="permalink" href="#VMFS_OPTIMAL_SPACE"><code class="Dv">VMFS_OPTIMAL_SPACE</code></a></dt> - <dd>The mapping will succeed as long as there is a free region. However, if - <var class="Fa">object</var> is non-<code class="Dv">NULL</code> and is - already backed by superpages, this strategy will attempt to find a free - region aligned relative to the existing superpages.</dd> - <dt id="VMFS_ALIGNED_SPACE"><a class="permalink" href="#VMFS_ALIGNED_SPACE"><code class="Dv">VMFS_ALIGNED_SPACE</code></a>(<var class="Fa">n</var>)</dt> - <dd>The mapping will succeed as long as there is a free region that aligns on - a 2^<var class="Fa">n</var> boundary.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">This function acquires a lock on <var class="Fa">map</var> by - calling <a class="Xr">vm_map_lock(9)</a>, and holds it until the function - returns.</p> -<p class="Pp">The search for a free region is defined to be first-fit, from the - address <var class="Fa">addr</var> onwards.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">vm_map_find</code>() function returns - <code class="Dv">KERN_SUCCESS</code> if the mapping was successfully - created. If space could not be found or <var class="Fa">find_space</var> was - <code class="Dv">VMFS_NO_SPACE</code> and the given address, - <var class="Fa">addr</var>, was already mapped, - <code class="Dv">KERN_NO_SPACE</code> will be returned. If the discovered - range turned out to be bogus, <code class="Dv">KERN_INVALID_ADDRESS</code> - will be returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vm_map(9)</a>, - <a class="Xr">vm_map_findspace(9)</a>, <a class="Xr">vm_map_insert(9)</a>, - <a class="Xr">vm_map_lock(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 12, 2013</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_map_findspace.9 4.html b/static/freebsd/man9/vm_map_findspace.9 4.html deleted file mode 100644 index a9452ff0..00000000 --- a/static/freebsd/man9/vm_map_findspace.9 4.html +++ /dev/null @@ -1,74 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_MAP_FINDSPACE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_MAP_FINDSPACE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_map_findspace</code> — - <span class="Nd">find a free region within a map</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_map.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_map_findspace</code>(<var class="Fa">vm_map_t map</var>, - <var class="Fa">vm_offset_t start</var>, <var class="Fa">vm_size_t - length</var>, <var class="Fa">vm_offset_t *addr</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_map_findspace"><code class="Fn" id="vm_map_findspace">vm_map_findspace</code></a>() - function attempts to find a region with sufficient space in the - <var class="Fa">map</var> for an object of size <var class="Fa">length</var> - at the address <var class="Fa">addr</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">It is the caller's responsibility to obtain a lock on the - <var class="Fa">map</var> using <a class="Xr">vm_map_lock(9)</a> before - calling this function.</p> -<p class="Pp">This routine may call <a class="Xr">pmap_growkernel(9)</a> to grow - the kernel's address space, if and only if the mapping is being made within - the kernel address space, and if insufficient space remains in the - <var class="Va">kernel_map</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">vm_map_findspace</code>() function returns - the value 0 if successful, and <var class="Fa">*addr</var> will contain the - first virtual address in the found region; otherwise, the value 1 is - returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap_growkernel(9)</a>, <a class="Xr">vm_map(9)</a>, - <a class="Xr">vm_map_entry_resize_free(9)</a>, - <a class="Xr">vm_map_lock(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 19, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_map_inherit.9 4.html b/static/freebsd/man9/vm_map_inherit.9 4.html deleted file mode 100644 index c4c9b447..00000000 --- a/static/freebsd/man9/vm_map_inherit.9 4.html +++ /dev/null @@ -1,75 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_MAP_INHERIT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_MAP_INHERIT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_map_inherit</code> — - <span class="Nd">set fork inheritance flags for a range within a - map</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_map.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_map_inherit</code>(<var class="Fa">vm_map_t map</var>, - <var class="Fa">vm_offset_t start</var>, <var class="Fa">vm_offset_t - end</var>, <var class="Fa">vm_inherit_t new_inheritance</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_map_inherit"><code class="Fn" id="vm_map_inherit">vm_map_inherit</code></a>() - function sets the inheritance flags for the range - <var class="Fa">start</var> to <var class="Fa">end</var> within the target - <var class="Fa">map</var> to the value - <var class="Fa">new_inheritance</var>.</p> -<p class="Pp">The <var class="Fa">new_inheritance</var> flag must have one of - the values <code class="Dv">VM_INHERIT_NONE</code>, - <code class="Dv">VM_INHERIT_COPY</code>, or - <code class="Dv">VM_INHERIT_SHARE</code>. This affects how the map will be - shared with child maps when the associated process forks.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">The <code class="Fn">vm_map_inherit</code>() function obtains a - lock on the <var class="Fa">map</var> using <a class="Xr">vm_map_lock(9)</a> - for the duration of the function.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">vm_map_inherit</code>() function returns - <code class="Dv">KERN_SUCCESS</code> if the inheritance flags could be set. - Otherwise, if the provided flags were invalid, - <code class="Dv">KERN_INVALID_ARGUMENT</code> will be returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">fork(2)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 19, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_map_init.9 4.html b/static/freebsd/man9/vm_map_init.9 4.html deleted file mode 100644 index 146ddb0d..00000000 --- a/static/freebsd/man9/vm_map_init.9 4.html +++ /dev/null @@ -1,61 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_MAP_INIT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_MAP_INIT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_map_init</code> — - <span class="Nd">initialize a vm_map structure for process zero</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_map.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_map_init</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t - map</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t - min</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t - max</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_map_init"><code class="Fn" id="vm_map_init">vm_map_init</code></a>() - function initializes the system map <var class="Fa">map</var> by setting its - upper and lower address bounds to <var class="Fa">max</var> and - <var class="Fa">min</var> respectively.</p> -<p class="Pp">It also initializes the system map mutex.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">This routine is for internal use only. It is called during early - system initialization.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vm_map(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 19, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_map_insert.9 4.html b/static/freebsd/man9/vm_map_insert.9 4.html deleted file mode 100644 index b4de9344..00000000 --- a/static/freebsd/man9/vm_map_insert.9 4.html +++ /dev/null @@ -1,82 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_MAP_INSERT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_MAP_INSERT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_map_insert</code> — - <span class="Nd">insert an object into a map</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_map.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_map_insert</code>(<var class="Fa">vm_map_t map</var>, - <var class="Fa">vm_object_t object</var>, <var class="Fa">vm_ooffset_t - offset</var>, <var class="Fa">vm_offset_t start</var>, - <var class="Fa">vm_offset_t end</var>, <var class="Fa">vm_prot_t prot</var>, - <var class="Fa">vm_prot_t max</var>, <var class="Fa">int cow</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_map_insert"><code class="Fn" id="vm_map_insert">vm_map_insert</code></a>() - function inserts a mapping for the entire vm_object - <var class="Fa">object</var> into the target map - <var class="Fa">map</var>.</p> -<p class="Pp">The <var class="Fa">offset</var> argument specifies the offset - into the <var class="Fa">object</var> at which to begin mapping. The - object's size should match that of the specified address range.</p> -<p class="Pp">The <var class="Fa">start</var> and <var class="Fa">end</var> - arguments specify the bounds of the mapped object's window in the address - space of <var class="Fa">map</var>.</p> -<p class="Pp">The <var class="Fa">cow</var> argument specifies the flags which - should be propagated to the new entry, for example, to indicate that this is - a copy-on-write mapping.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">This function implicitly creates a new - <var class="Vt">vm_map_entry</var> by calling the internal function - <code class="Fn">vm_map_entry_create</code>().</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">vm_map_insert</code>() function returns - <code class="Dv">KERN_SUCCESS</code> if the mapping could be made - successfully.</p> -<p class="Pp">Otherwise, <code class="Dv">KERN_INVALID_ADDRESS</code> will be - returned if the start of the range could not be found, or - <code class="Dv">KERN_NO_SPACE</code> if the range was found to be part of - an existing entry or if it overlaps the end of the map.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vm_map(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 11, 2013</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_map_lock.9 4.html b/static/freebsd/man9/vm_map_lock.9 4.html deleted file mode 100644 index b6c4bd95..00000000 --- a/static/freebsd/man9/vm_map_lock.9 4.html +++ /dev/null @@ -1,118 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_MAP_LOCK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_MAP_LOCK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_map_lock</code>, - <code class="Nm">vm_map_unlock</code>, - <code class="Nm">vm_map_lock_read</code>, - <code class="Nm">vm_map_unlock_read</code>, - <code class="Nm">vm_map_trylock</code>, - <code class="Nm">vm_map_trylock_read</code>, - <code class="Nm">vm_map_lock_upgrade</code>, - <code class="Nm">vm_map_lock_downgrade</code> — - <span class="Nd">vm_map locking macros</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_map.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_map_lock</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t - map</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_map_unlock</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t - map</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_map_lock_read</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t - map</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_map_unlock_read</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t - map</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_map_trylock</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t - map</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_map_trylock_read</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t - map</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_map_lock_upgrade</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t - map</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_map_lock_downgrade</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t - map</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_map_lock"><code class="Fn" id="vm_map_lock">vm_map_lock</code></a>() - macro obtains an exclusive lock on <var class="Fa">map</var>.</p> -<p class="Pp" id="vm_map_unlock">The - <a class="permalink" href="#vm_map_unlock"><code class="Fn">vm_map_unlock</code></a>() - macro releases an exclusive lock on <var class="Fa">map</var>.</p> -<p class="Pp" id="vm_map_lock_read">The - <a class="permalink" href="#vm_map_lock_read"><code class="Fn">vm_map_lock_read</code></a>() - macro obtains a read-lock on <var class="Fa">map</var>.</p> -<p class="Pp" id="vm_map_unlock_read">The - <a class="permalink" href="#vm_map_unlock_read"><code class="Fn">vm_map_unlock_read</code></a>() - macro releases a read-lock on <var class="Fa">map</var>.</p> -<p class="Pp" id="vm_map_trylock">The - <a class="permalink" href="#vm_map_trylock"><code class="Fn">vm_map_trylock</code></a>() - macro attempts to obtain an exclusive lock on <var class="Fa">map</var>. It - returns FALSE if the lock cannot be immediately acquired; otherwise return - TRUE with the lock acquired.</p> -<p class="Pp" id="vm_map_trylock_read">The - <a class="permalink" href="#vm_map_trylock_read"><code class="Fn">vm_map_trylock_read</code></a>() - macro attempts to obtain a read-lock on <var class="Fa">map</var>. It - returns FALSE if the lock cannot be immediately acquired; otherwise return - TRUE with the lock acquired.</p> -<p class="Pp" id="vm_map_lock_upgrade">The - <a class="permalink" href="#vm_map_lock_upgrade"><code class="Fn">vm_map_lock_upgrade</code></a>() - macro attempts to atomically upgrade a read-lock on - <var class="Fa">map</var> to an exclusive lock.</p> -<p class="Pp" id="vm_map_lock_downgrade">The - <a class="permalink" href="#vm_map_lock_downgrade"><code class="Fn">vm_map_lock_downgrade</code></a>() - macro attempts to downgrade an exclusive lock on <var class="Fa">map</var> - to a read-lock.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">Currently, all of the locking macros implement their locks as - sleep locks.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vm_map(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 19, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_map_lookup.9 3.html b/static/freebsd/man9/vm_map_lookup.9 3.html deleted file mode 100644 index dcb4ee1e..00000000 --- a/static/freebsd/man9/vm_map_lookup.9 3.html +++ /dev/null @@ -1,83 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_MAP_LOOKUP(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_MAP_LOOKUP(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_map_lookup</code>, - <code class="Nm">vm_map_lookup_done</code> — <span class="Nd">lookup - the vm_object backing a given virtual region</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_map.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_map_lookup</code>(<var class="Fa">vm_map_t *var_map</var>, - <var class="Fa">vm_offset_t vaddr</var>, <var class="Fa">vm_prot_t - fault_type</var>, <var class="Fa">vm_map_entry_t *out_entry</var>, - <var class="Fa">vm_object_t *object</var>, <var class="Fa">vm_pindex_t - *pindex</var>, <var class="Fa">vm_prot_t *out_prot</var>, - <var class="Fa">boolean_t *wired</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_map_lookup_done</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t - map</var>, <var class="Fa" style="white-space: nowrap;">vm_map_entry_t - entry</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_map_lookup"><code class="Fn" id="vm_map_lookup">vm_map_lookup</code></a>() - function attempts to find the <var class="Vt">vm_object</var>, page index - and protection, for the given virtual address <var class="Fa">vaddr</var>, - in the map <var class="Fa">var_map</var>, assuming a page fault of the type - <var class="Fa">fault_type</var> had occurred.</p> -<p class="Pp" id="vm_map_lookup_done">Return values are guaranteed until - <a class="permalink" href="#vm_map_lookup_done"><code class="Fn">vm_map_lookup_done</code></a>() - is called to release the lock.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">The function <code class="Fn">vm_map_lookup</code>() acquires a - read-lock on the map <var class="Fa">*var_map</var>, but does not release - it. The caller should invoke <code class="Fn">vm_map_lookup_done</code>() in - order to release this lock.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">vm_map_lookup</code>() function returns - <code class="Dv">KERN_SUCCESS</code>, and sets the - <var class="Fa">*object</var>, <var class="Fa">*pindex</var>, - <var class="Fa">*out_prot</var>, and <var class="Fa">*out_entry</var> - arguments appropriately for the hypothetical page fault.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vm_map(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 19, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_map_madvise.9 4.html b/static/freebsd/man9/vm_map_madvise.9 4.html deleted file mode 100644 index 5484c761..00000000 --- a/static/freebsd/man9/vm_map_madvise.9 4.html +++ /dev/null @@ -1,66 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_MAP_MADVISE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_MAP_MADVISE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_map_madvise</code> — - <span class="Nd">apply advice about use of memory to map entries</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_map.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_map_madvise</code>(<var class="Fa">vm_map_t map</var>, - <var class="Fa">vm_offset_t start</var>, <var class="Fa">vm_offset_t - end</var>, <var class="Fa">int behav</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_map_madvise"><code class="Fn" id="vm_map_madvise">vm_map_madvise</code></a>() - function applies the flags <var class="Fa">behav</var> to the entries within - <var class="Fa">map</var> between <var class="Fa">start</var> and - <var class="Fa">end</var>.</p> -<p class="Pp">Advisories are classified as either those affecting the - <var class="Vt">vm_map_entry</var> structure, or those affecting the - underlying objects.</p> -<p class="Pp" id="vm_map_madvise~2">The - <a class="permalink" href="#vm_map_madvise~2"><code class="Fn">vm_map_madvise</code></a>() - function is used by the <a class="Xr">madvise(2)</a> system call.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">vm_map_madvise</code>() function returns 0 if - successful. If the <var class="Fa">behav</var> argument was not recognised, - <code class="Dv">KERN_INVALID_ARGUMENT</code> is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">madvise(2)</a>, <a class="Xr">vm_map(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 19, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_map_max.9 4.html b/static/freebsd/man9/vm_map_max.9 4.html deleted file mode 100644 index 62f9bc47..00000000 --- a/static/freebsd/man9/vm_map_max.9 4.html +++ /dev/null @@ -1,66 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_MAP_MAX(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_MAP_MAX(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_map_max</code>, - <code class="Nm">vm_map_min</code>, <code class="Nm">vm_map_pmap</code> - — <span class="Nd">return map properties</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_map.h</a>></code></p> -<p class="Pp"><var class="Ft">vm_offset_t</var> - <br/> - <code class="Fn">vm_map_max</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t - map</var>);</p> -<p class="Pp"><var class="Ft">vm_offset_t</var> - <br/> - <code class="Fn">vm_map_min</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t - map</var>);</p> -<p class="Pp"><var class="Ft">pmap_t</var> - <br/> - <code class="Fn">vm_map_pmap</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t - map</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The function - <a class="permalink" href="#vm_map_max"><code class="Fn" id="vm_map_max">vm_map_max</code></a>() - returns the upper address bound of the map <var class="Fa">map</var>.</p> -<p class="Pp" id="vm_map_min">The function - <a class="permalink" href="#vm_map_min"><code class="Fn">vm_map_min</code></a>() - returns the lower address bound of the map <var class="Fa">map</var>.</p> -<p class="Pp" id="vm_map_pmap">The function - <a class="permalink" href="#vm_map_pmap"><code class="Fn">vm_map_pmap</code></a>() - returns a pointer to the physical map associated with the virtual map - <var class="Fa">map</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap(9)</a>, <a class="Xr">vm_map(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 19, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_map_protect.9 3.html b/static/freebsd/man9/vm_map_protect.9 3.html deleted file mode 100644 index 843a69ed..00000000 --- a/static/freebsd/man9/vm_map_protect.9 3.html +++ /dev/null @@ -1,105 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_MAP_PROTECT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_MAP_PROTECT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_map_protect</code> — - <span class="Nd">apply protection bits to a virtual memory region</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_map.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_map_protect</code>(<var class="Fa">vm_map_t map</var>, - <var class="Fa">vm_offset_t start</var>, <var class="Fa">vm_offset_t - end</var>, <var class="Fa">vm_prot_t new_prot</var>, - <var class="Fa">vm_prot_t new_maxprot</var>, <var class="Fa">int - flags</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_map_protect"><code class="Fn" id="vm_map_protect">vm_map_protect</code></a>() - function sets the protection bits and maximum protection bits of the address - region bounded by <var class="Fa">start</var> and <var class="Fa">end</var> - within the map <var class="Fa">map</var>.</p> -<p class="Pp">If the <var class="Fa">flags</var> argument has the - <code class="Dv">VM_MAP_PROTECT_SET_PROT</code> bit set, then the effective - protection is set to <var class="Fa">new_prot</var>.</p> -<p class="Pp">If the <var class="Fa">flags</var> argument has the - <code class="Dv">VM_MAP_PROTECT_SET_MAXPROT</code> bit set, then the maximum - protection is set to <var class="Fa">new_maxprot</var>. Protection bits not - included into <var class="Fa">new_maxprot</var> will be cleared from - existing entries.</p> -<p class="Pp">The values specified by <var class="Fa">new_prot</var> and - <var class="Fa">new_maxprot</var> are not allowed to include any protection - bits that are not set in existing <var class="Va">max_protection</var> on - every entry within the range. The operation will fail if this condition is - violated. For instance, this prevents upgrading a shared mapping of a - read-only file from read-only to read-write.</p> -<p class="Pp">The specified range must not contain sub-maps.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">The function acquires a lock on the <var class="Fa">map</var> for - the duration, by calling <a class="Xr">vm_map_lock(9)</a>. Also, any - in-progress wiring operation on the map affecting the specified range will - cause <code class="Nm">vm_map_protect</code> to sleep, waiting for - completion.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<dl class="Bl-tag"> - <dt id="KERN_SUCCESS"><a class="permalink" href="#KERN_SUCCESS"><code class="Dv">KERN_SUCCESS</code></a></dt> - <dd>The specified protection bits were set successfully.</dd> - <dt id="KERN_INVALID_ARGUMENT"><a class="permalink" href="#KERN_INVALID_ARGUMENT"><code class="Dv">KERN_INVALID_ARGUMENT</code></a></dt> - <dd>A sub-map entry was encountered in the range,</dd> - <dt id="KERN_PROTECTION_FAILURE"><a class="permalink" href="#KERN_PROTECTION_FAILURE"><code class="Dv">KERN_PROTECTION_FAILURE</code></a></dt> - <dd>The value of <var class="Fa">new_prot</var> or - <var class="Fa">new_maxprot</var> exceed - <var class="Va">max_protection</var> for an entry within the range.</dd> - <dt id="KERN_PROTECTION_FAILURE~2"><a class="permalink" href="#KERN_PROTECTION_FAILURE~2"><code class="Dv">KERN_PROTECTION_FAILURE</code></a></dt> - <dd>The map does not allow simultaneous setting of write and execute - permissions, but <var class="Fa">new_prot</var> has both - <code class="Dv">VM_PROT_WRITE</code> and - <code class="Dv">VM_PROT_EXECUTE</code> set.</dd> - <dt id="KERN_RESOURCE_SHORTAGE"><a class="permalink" href="#KERN_RESOURCE_SHORTAGE"><code class="Dv">KERN_RESOURCE_SHORTAGE</code></a></dt> - <dd>A copy-on-write mapping is transitioned from read-only to read-write, and - not enough swap space is available to back the copied pages.</dd> - <dt id="KERN_OUT_OF_BOUNDS"><a class="permalink" href="#KERN_OUT_OF_BOUNDS"><code class="Dv">KERN_OUT_OF_BOUNDS</code></a></dt> - <dd>Both new protection and new maximum protection updates were requested, but - the specified <var class="Fa">new_prot</var> is not a subset of - <var class="Fa">new_maxprot</var>.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vm_map(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 23, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_map_remove.9 4.html b/static/freebsd/man9/vm_map_remove.9 4.html deleted file mode 100644 index 16adbad1..00000000 --- a/static/freebsd/man9/vm_map_remove.9 4.html +++ /dev/null @@ -1,69 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_MAP_REMOVE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_MAP_REMOVE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_map_remove</code> — - <span class="Nd">remove a virtual address range from a map</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_map.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_map_remove</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t - map</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t - start</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t - end</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_map_remove"><code class="Fn" id="vm_map_remove">vm_map_remove</code></a>() - function removes the given address range bounded by - <var class="Fa">start</var> and <var class="Fa">end</var> from the target - <var class="Fa">map</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">This is the exported form of <a class="Xr">vm_map_delete(9)</a> - which may be called by consumers of the VM subsystem.</p> -<p class="Pp">The function calls <a class="Xr">vm_map_lock(9)</a> to hold a lock - on <var class="Fa">map</var> for the duration of the function call.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">vm_map_remove</code>() always returns - <code class="Dv">KERN_SUCCESS</code>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vm_map(9)</a>, - <a class="Xr">vm_map_delete(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 19, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_map_stack.9 3.html b/static/freebsd/man9/vm_map_stack.9 3.html deleted file mode 100644 index d13eae52..00000000 --- a/static/freebsd/man9/vm_map_stack.9 3.html +++ /dev/null @@ -1,102 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_MAP_STACK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_MAP_STACK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_map_stack</code>, - <code class="Nm">vm_map_growstack</code> — <span class="Nd">manage - process stacks</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_map.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_map_stack</code>(<var class="Fa">vm_map_t map</var>, - <var class="Fa">vm_offset_t addrbos</var>, <var class="Fa">vm_size_t - max_ssize</var>, <var class="Fa">vm_prot_t prot</var>, - <var class="Fa">vm_prot_t max</var>, <var class="Fa">int cow</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_map_growstack</code>(<var class="Fa" style="white-space: nowrap;">struct - proc *p</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t - addr</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_map_stack"><code class="Fn" id="vm_map_stack">vm_map_stack</code></a>() - function maps a process stack for a new process image. The stack is mapped - <var class="Fa">addrbos</var> in <var class="Fa">map</var>, with a maximum - size of <var class="Fa">max_ssize</var>. Copy-on-write flags passed in - <var class="Fa">cow</var> are also applied to the new mapping. Protection - bits are supplied by <var class="Fa">prot</var> and - <var class="Fa">max</var>.</p> -<p class="Pp">It is typically called by <a class="Xr">execve(2)</a>.</p> -<p class="Pp" id="vm_map_growstack">The - <a class="permalink" href="#vm_map_growstack"><code class="Fn">vm_map_growstack</code></a>() - function is responsible for growing a stack for the process - <var class="Fa">p</var> to the desired address <var class="Fa">addr</var>, - similar to the legacy <a class="Xr">sbrk(2)</a> call.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">The <code class="Fn">vm_map_stack</code>() function calls - <a class="Xr">vm_map_insert(9)</a> to create its mappings.</p> -<p class="Pp">The <code class="Fn">vm_map_stack</code>() and - <code class="Fn">vm_map_growstack</code>() functions acquire the process - lock on <var class="Fa">p</var> for the duration of the call.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">vm_map_stack</code>() function returns - <code class="Dv">KERN_SUCCESS</code> if the mapping was allocated - successfully.</p> -<p class="Pp">Otherwise, if mapping the stack would exceed the process's VMEM - resource limit, or if the specified bottom-of-stack address is out of range - for the map, or if there is already a mapping at the address which would - result, or if <var class="Fa">max_ssize</var> could not be accommodated - within the current mapping, <code class="Dv">KERN_NO_SPACE</code> is - returned.</p> -<p class="Pp">Other possible return values for this function are documented in - <a class="Xr">vm_map_insert(9)</a>.</p> -<p class="Pp">The <code class="Fn">vm_map_growstack</code>() function returns - <code class="Dv">KERN_SUCCESS</code> if <var class="Fa">addr</var> is - already mapped, or if the stack was grown successfully.</p> -<p class="Pp">It also returns <code class="Dv">KERN_SUCCESS</code> if - <var class="Fa">addr</var> is outside the stack range; this is done in order - to preserve compatibility with the deprecated <code class="Fn">grow</code>() - function previously located in the file - <span class="Pa">vm_machdep.c</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vm_map(9)</a>, - <a class="Xr">vm_map_insert(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 11, 2013</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_map_submap.9 3.html b/static/freebsd/man9/vm_map_submap.9 3.html deleted file mode 100644 index 96a0aa55..00000000 --- a/static/freebsd/man9/vm_map_submap.9 3.html +++ /dev/null @@ -1,78 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_MAP_SUBMAP(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_MAP_SUBMAP(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_map_submap</code> — - <span class="Nd">create a subordinate map</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_map.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_map_submap</code>(<var class="Fa">vm_map_t map</var>, - <var class="Fa">vm_offset_t start</var>, <var class="Fa">vm_offset_t - end</var>, <var class="Fa">vm_map_t submap</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_map_submap"><code class="Fn" id="vm_map_submap">vm_map_submap</code></a>() - function marks the range bounded by <var class="Fa">start</var> and - <var class="Fa">end</var> within the map <var class="Fa">map</var> as being - handled by a subordinate map <var class="Fa">sub_map</var>.</p> -<p class="Pp">It is generally called by the kernel memory allocator.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">This function is for internal use only.</p> -<p class="Pp">Both maps must exist. The range must have been created with - <a class="Xr">vm_map_find(9)</a> previously.</p> -<p class="Pp">No other operations may have been performed on this range before - calling this function. Only the <code class="Fn">vm_fault</code>() operation - may be performed within this range after calling this function.</p> -<p class="Pp">To remove a submapping, one must first remove the range from the - parent <var class="Fa">map</var>, and then destroy the - <var class="Fa">sub_map</var>. This procedure is not recommended.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">vm_map_submap</code>() function returns - <code class="Dv">KERN_SUCCESS</code> if successful.</p> -<p class="Pp">Otherwise, it returns - <code class="Dv">KERN_INVALID_ARGUMENT</code> if the caller requested - copy-on-write flags, or if the range specified for the sub-map was out of - range for the parent map, or if a <code class="Dv">NULL</code> backing - object was specified.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vm_map(9)</a>, <a class="Xr">vm_map_find(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 19, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_map_sync.9 4.html b/static/freebsd/man9/vm_map_sync.9 4.html deleted file mode 100644 index 626ccf83..00000000 --- a/static/freebsd/man9/vm_map_sync.9 4.html +++ /dev/null @@ -1,71 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_MAP_SYNC(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_MAP_SYNC(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_map_sync</code> — <span class="Nd">push - dirty pages to their pager</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_map.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_map_sync</code>(<var class="Fa">vm_map_t map</var>, - <var class="Fa">vm_offset_t start</var>, <var class="Fa">vm_offset_t - end</var>, <var class="Fa">boolean_t syncio</var>, <var class="Fa">boolean_t - invalidate</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_map_sync"><code class="Fn" id="vm_map_sync">vm_map_sync</code></a>() - function forces any dirty cached pages in the range - <var class="Fa">start</var> to <var class="Fa">end</var> within the - <var class="Fa">map</var> to be pushed to their underlying pager.</p> -<p class="Pp">If <var class="Fa">syncio</var> is TRUE, dirty pages are written - synchronously.</p> -<p class="Pp">If <var class="Fa">invalidate</var> is TRUE, any cached pages are - also freed.</p> -<p class="Pp">The range provided must be contiguous, it MUST NOT contain holes. - The range provided MUST NOT contain any sub-map entries.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">vm_map_sync</code>() function returns - <code class="Dv">KERN_SUCCESS</code> if successful.</p> -<p class="Pp">Otherwise, <code class="Dv">KERN_INVALID_ADDRESS</code> will be - returned if the function encountered a sub-map entry; - <code class="Dv">KERN_INVALID_ARGUMENT</code> will be returned if the - function encountered a hole in the region provided, or if an entry could not - be found for the given start address.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vm_map(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 9, 2011</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_map_wire.9 3.html b/static/freebsd/man9/vm_map_wire.9 3.html deleted file mode 100644 index b98e282f..00000000 --- a/static/freebsd/man9/vm_map_wire.9 3.html +++ /dev/null @@ -1,99 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_MAP_WIRE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_MAP_WIRE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_map_wire</code>, - <code class="Nm">vm_map_unwire</code> — <span class="Nd">manage page - wiring within a virtual memory map</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_map.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_map_wire</code>(<var class="Fa" style="white-space: nowrap;">vm_map_t - map</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t - start</var>, <var class="Fa" style="white-space: nowrap;">vm_offset_t - end</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_map_unwire</code>(<var class="Fa">vm_map_t map</var>, - <var class="Fa">vm_offset_t start</var>, <var class="Fa">vm_offset_t - end</var>, <var class="Fa">int flags</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_map_wire"><code class="Fn" id="vm_map_wire">vm_map_wire</code></a>() - function is responsible for wiring pages in the range between - <var class="Fa">start</var> and <var class="Fa">end</var> within the map - <var class="Fa">map</var>. Wired pages are locked into physical memory, and - may not be paged out as long as their wire count remains above zero.</p> -<p class="Pp" id="vm_map_unwire">The - <a class="permalink" href="#vm_map_unwire"><code class="Fn">vm_map_unwire</code></a>() - function performs the corresponding unwire operation.</p> -<p class="Pp">The <var class="Fa">flags</var> argument is a bit mask, consisting - of the following flags:</p> -<p class="Pp">If the <code class="Dv">VM_MAP_WIRE_USER</code> flag is set, the - function operates within user address space.</p> -<p class="Pp">If the <code class="Dv">VM_MAP_WIRE_HOLESOK</code> flag is set, it - may operate upon an arbitrary range within the address space of - <var class="Fa">map</var>.</p> -<p class="Pp">If a contiguous range is desired, callers should explicitly - express their intent by specifying the - <code class="Dv">VM_MAP_WIRE_NOHOLES</code> flag.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">Both functions will attempt to acquire a lock on the map using - <a class="Xr">vm_map_lock(9)</a> and hold it for the duration of the call. - If they detect <code class="Dv">MAP_ENTRY_IN_TRANSITION</code>, they will - call <a class="Xr">vm_map_unlock_and_wait(9)</a> until the map becomes - available again.</p> -<p class="Pp">The map could have changed during this window as it was held by - another consumer, therefore consumers of this interface should check for - this condition using the return values below.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">vm_map_wire</code>() and - <code class="Fn">vm_map_unwire</code>() functions have identical return - values. The functions return <code class="Dv">KERN_SUCCESS</code> if all - pages within the range were [un]wired successfully.</p> -<p class="Pp">Otherwise, if the specified range was not valid, or if the map - changed while the <code class="Dv">MAP_ENTRY_IN_TRANSITION</code> flag was - set, <code class="Dv">KERN_INVALID_ADDRESS</code> is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">mlockall(2)</a>, <a class="Xr">munlockall(2)</a>, - <a class="Xr">vm_map(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Bruce M - Simpson</span> - <<a class="Mt" href="mailto:bms@spc.org">bms@spc.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 19, 2003</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_page_aflag.9 4.html b/static/freebsd/man9/vm_page_aflag.9 4.html deleted file mode 100644 index 5a1e29a4..00000000 --- a/static/freebsd/man9/vm_page_aflag.9 4.html +++ /dev/null @@ -1,92 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_PAGE_AFLAG(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_PAGE_AFLAG(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_page_aflag_clear</code>, - <code class="Nm">vm_page_aflag_set</code>, - <code class="Nm">vm_page_reference</code> — <span class="Nd">change - page atomic flags</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_page.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_aflag_clear</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>, <var class="Fa" style="white-space: nowrap;">uint8_t - bits</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_aflag_set</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>, <var class="Fa" style="white-space: nowrap;">uint8_t - bits</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_reference</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_page_aflag_clear"><code class="Fn" id="vm_page_aflag_clear">vm_page_aflag_clear</code></a>() - atomically clears the specified bits on the page's - <var class="Va">aflags</var>.</p> -<p class="Pp" id="vm_page_aflag_set">The - <a class="permalink" href="#vm_page_aflag_set"><code class="Fn">vm_page_aflag_set</code></a>() - atomically sets the specified bits on the page's - <var class="Va">aflags</var>.</p> -<p class="Pp" id="vm_page_reference">The - <a class="permalink" href="#vm_page_reference"><code class="Fn">vm_page_reference</code></a>(<var class="Fa">m</var>) - call is the same as</p> -<div class="Bd Pp Bd-indent Li"> -<pre>vm_page_aflag_set(m, PGA_REFERENCED);</pre> -</div> -<p class="Pp">and is the recommended way to mark the page as referenced from - third-party kernel modules.</p> -<p class="Pp">These functions neither block nor require any locks to be held - around the calls for correctness.</p> -<p class="Pp">The functions arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">m</var></dt> - <dd>The page whose <var class="Va">aflags</var> are updated.</dd> - <dt><var class="Fa">bits</var></dt> - <dd>The bits that are set or cleared on the page's flags.</dd> -</dl> -<p class="Pp">The following <var class="Va">aflags</var> can be set or - cleared:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">PGA_REFERENCED</var></dt> - <dd>The bit may be set to indicate that the page has been recently accessed. - For instance, <a class="Xr">pmap(9)</a> sets this bit to reflect the - accessed attribute of the page mapping typically updated by processor's - memory management unit on the page access.</dd> - <dt><var class="Fa">PGA_WRITEABLE</var></dt> - <dd>A writeable mapping for the page may exist.</dd> -</dl> -<p class="Pp">Both <code class="Dv">PGA_REFERENCED</code> and - <code class="Dv">PGA_WRITEABLE</code> bits are only valid for the managed - pages.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 31, 2011</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_page_alloc.9 4.html b/static/freebsd/man9/vm_page_alloc.9 4.html deleted file mode 100644 index b9f43502..00000000 --- a/static/freebsd/man9/vm_page_alloc.9 4.html +++ /dev/null @@ -1,248 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_PAGE_ALLOC(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_PAGE_ALLOC(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_page_alloc</code> — - <span class="Nd">allocate a page of memory</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_page.h</a>></code></p> -<p class="Pp"><var class="Ft">vm_page_t</var> - <br/> - <code class="Fn">vm_page_alloc</code>(<var class="Fa" style="white-space: nowrap;">vm_object_t - object</var>, <var class="Fa" style="white-space: nowrap;">vm_pindex_t - pindex</var>, <var class="Fa" style="white-space: nowrap;">int - req</var>);</p> -<p class="Pp"><var class="Ft">vm_page_t</var> - <br/> - <code class="Fn">vm_page_alloc_after</code>(<var class="Fa">vm_object_t - object</var>, <var class="Fa">vm_pindex_t pindex</var>, <var class="Fa">int - req</var>, <var class="Fa">vm_page_t mpred</var>);</p> -<p class="Pp"><var class="Ft">vm_page_t</var> - <br/> - <code class="Fn">vm_page_alloc_contig</code>(<var class="Fa">vm_object_t - object</var>, <var class="Fa">vm_pindex_t pindex</var>, <var class="Fa">int - req</var>, <var class="Fa">u_long npages</var>, <var class="Fa">vm_paddr_t - low</var>, <var class="Fa">vm_paddr_t high</var>, <var class="Fa">u_long - alignment</var>, <var class="Fa">vm_paddr_t boundary</var>, - <var class="Fa">vm_memattr_t memattr</var>);</p> -<p class="Pp"><var class="Ft">vm_page_t</var> - <br/> - <code class="Fn">vm_page_alloc_contig_domain</code>(<var class="Fa">vm_object_t - object</var>, <var class="Fa">vm_pindex_t pindex</var>, <var class="Fa">int - req</var>, <var class="Fa">u_long npages</var>, <var class="Fa">vm_paddr_t - low</var>, <var class="Fa">vm_paddr_t high</var>, <var class="Fa">u_long - alignment</var>, <var class="Fa">vm_paddr_t boundary</var>, - <var class="Fa">vm_memattr_t memattr</var>);</p> -<p class="Pp"><var class="Ft">vm_page_t</var> - <br/> - <code class="Fn">vm_page_alloc_domain</code>(<var class="Fa">vm_object_t - object</var>, <var class="Fa">vm_pindex_t pindex</var>, <var class="Fa">int - domain</var>, <var class="Fa">int req</var>);</p> -<p class="Pp"><var class="Ft">vm_page_t</var> - <br/> - <code class="Fn">vm_page_alloc_domain_after</code>(<var class="Fa">vm_object_t - object</var>, <var class="Fa">vm_pindex_t pindex</var>, <var class="Fa">int - domain</var>, <var class="Fa">int req</var>, <var class="Fa">vm_page_t - mpred</var>);</p> -<p class="Pp"><var class="Ft">vm_page_t</var> - <br/> - <code class="Fn">vm_page_alloc_noobj</code>(<var class="Fa">int - req</var>);</p> -<p class="Pp"><var class="Ft">vm_page_t</var> - <br/> - <code class="Fn">vm_page_alloc_noobj_contig</code>(<var class="Fa">int - req</var>, <var class="Fa">u_long npages</var>, <var class="Fa">vm_paddr_t - low</var>, <var class="Fa">vm_paddr_t high</var>, <var class="Fa">u_long - alignment</var>, <var class="Fa">vm_paddr_t boundary</var>, - <var class="Fa">vm_memattr_t memattr</var>);</p> -<p class="Pp"><var class="Ft">vm_page_t</var> - <br/> - <code class="Fn">vm_page_alloc_noobj_contig_domain</code>(<var class="Fa">int - domain</var>, <var class="Fa">int req</var>, <var class="Fa">u_long - npages</var>, <var class="Fa">vm_paddr_t low</var>, - <var class="Fa">vm_paddr_t high</var>, <var class="Fa">u_long - alignment</var>, <var class="Fa">vm_paddr_t boundary</var>, - <var class="Fa">vm_memattr_t memattr</var>);</p> -<p class="Pp"><var class="Ft">vm_page_t</var> - <br/> - <code class="Fn">vm_page_alloc_noobj_domain</code>(<var class="Fa">int - domain</var>, <var class="Fa">int req</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_page_alloc"><code class="Fn" id="vm_page_alloc">vm_page_alloc</code></a>() - family of functions allocate one or more pages of physical memory. Most - kernel code should not call these functions directly but should instead use - a kernel memory allocator such as <a class="Xr">malloc(9)</a> or - <a class="Xr">uma(9)</a>, or should use a higher-level interface to the page - cache, such as <a class="Xr">vm_page_grab(9)</a>.</p> -<p class="Pp">All of the functions take a <var class="Fa">req</var> parameter - which encodes the allocation priority and optional modifier flags, described - below. The functions whose names do not include “noobj” - additionally insert the pages starting at index <var class="Fa">pindex</var> - in the VM object <var class="Fa">object</var>. The object must be - write-locked and not have a page already resident at the specified index. - The functions whose names include “domain” support NUMA-aware - allocation by returning pages from the <a class="Xr">numa(4)</a> domain - specified by <var class="Fa">domain</var>.</p> -<p class="Pp" id="vm_page_alloc_after">The - <a class="permalink" href="#vm_page_alloc_after"><code class="Fn">vm_page_alloc_after</code></a>() - and - <a class="permalink" href="#vm_page_alloc_domain_after"><code class="Fn" id="vm_page_alloc_domain_after">vm_page_alloc_domain_after</code></a>() - functions behave identically to <code class="Fn">vm_page_alloc</code>() and - <a class="permalink" href="#vm_page_alloc_domain"><code class="Fn" id="vm_page_alloc_domain">vm_page_alloc_domain</code></a>(), - respectively, except that they take an additional parameter - <var class="Fa">mpred</var> which must be the page resident in - <var class="Fa">object</var> with largest index smaller than - <var class="Fa">pindex</var>, or <code class="Dv">NULL</code> if no such - page exists. These functions exist to optimize the common case of loops that - allocate multiple pages at successive indices within an object.</p> -<p class="Pp" id="vm_page_alloc_contig">The - <a class="permalink" href="#vm_page_alloc_contig"><code class="Fn">vm_page_alloc_contig</code></a>() - and - <a class="permalink" href="#vm_page_alloc_noobj_contig"><code class="Fn" id="vm_page_alloc_noobj_contig">vm_page_alloc_noobj_contig</code></a>() - functions and their NUMA-aware variants allocate a physically contiguous run - of <var class="Fa">npages</var> pages which satisfies the specified - constraints. The <var class="Fa">low</var> and <var class="Fa">high</var> - parameters specify a physical address range from which the run is to be - allocated. The <var class="Fa">alignment</var> parameter specifies the - requested alignment of the first page in the run and must be a power of two. - If the <var class="Fa">boundary</var> parameter is non-zero, the pages - constituting the run will not cross a physical address that is a multiple of - the parameter value, which must be a power of two. If - <var class="Fa">memattr</var> is not equal to - <code class="Dv">VM_MEMATTR_DEFAULT</code>, then mappings of the returned - pages created by, e.g., <a class="Xr">pmap_enter(9)</a> or - <a class="Xr">pmap_qenter(9)</a>, will carry the machine-dependent encoding - of the memory attribute. Additionally, the direct mapping of the page, if - any, will be updated to reflect the requested memory attribute.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="REQUEST_FLAGS"><a class="permalink" href="#REQUEST_FLAGS">REQUEST - FLAGS</a></h1> -<p class="Pp">All page allocator functions accept a <var class="Fa">req</var> - parameter that governs certain aspects of the function's behavior.</p> -<p class="Pp">The <code class="Dv">VM_ALLOC_WAITOK</code>, - <code class="Dv">VM_ALLOC_WAITFAIL</code>, and - <code class="Dv">VM_ALLOC_NOWAIT</code> flags specify the behavior of the - allocator if free pages could not be immediately allocated. The - <code class="Dv">VM_ALLOC_WAITOK</code> flag can only be used with the - “noobj” variants. If <code class="Dv">VM_ALLOC_NOWAIT</code> - is specified, then the allocator gives up and returns - <code class="Dv">NULL</code>. <code class="Dv">VM_ALLOC_NOWAIT</code> is - specified implicitly if none of the flags are present in the request. If - either <code class="Dv">VM_ALLOC_WAITOK</code> or - <code class="Dv">VM_ALLOC_WAITFAIL</code> is specified, the allocator will - put the calling thread to sleep until sufficient free pages become - available. At this point, if <code class="Dv">VM_ALLOC_WAITFAIL</code> is - specified the allocator will return <code class="Dv">NULL</code>, and if - <code class="Dv">VM_ALLOC_WAITOK</code> is specified the allocator will - retry the allocation. After a failed - <code class="Dv">VM_ALLOC_WAITFAIL</code> allocation returns, the VM object, - if any, will have been unlocked while the thread was sleeping. In this case - the VM object write lock will be re-acquired before the function call - returns.</p> -<p class="Pp"><var class="Fa">req</var> also encodes the allocation request - priority. By default the page(s) are allocated with no special treatment. If - the number of available free pages is below a certain watermark, the - allocation will fail or the allocating thread will sleep, depending on the - specified wait flag. The watermark is computed at boot time and corresponds - to a small (less than one percent) fraction of the system's total physical - memory. To allocate memory more aggressively, one of following flags may be - specified.</p> -<dl class="Bl-tag"> - <dt id="VM_ALLOC_SYSTEM"><a class="permalink" href="#VM_ALLOC_SYSTEM"><code class="Dv">VM_ALLOC_SYSTEM</code></a></dt> - <dd>The page can be allocated if the free page count is above the interrupt - reserved water mark. This flag should be used only when the system really - needs the page.</dd> - <dt id="VM_ALLOC_INTERRUPT"><a class="permalink" href="#VM_ALLOC_INTERRUPT"><code class="Dv">VM_ALLOC_INTERRUPT</code></a></dt> - <dd>The allocation will fail only if zero free pages are available. This flag - should be used only if the consequences of an allocation failure are worse - than leaving the system without free memory. For example, this flag is - used when allocating kernel page table pages, where allocation failures - trigger a kernel panic.</dd> -</dl> -<p class="Pp">The following optional flags can further modify allocator - behavior:</p> -<dl class="Bl-tag"> - <dt id="VM_ALLOC_SBUSY"><a class="permalink" href="#VM_ALLOC_SBUSY"><code class="Dv">VM_ALLOC_SBUSY</code></a></dt> - <dd>The returned page will be shared-busy. This flag may only be specified - when allocating pages in a VM object.</dd> - <dt id="VM_ALLOC_NOBUSY"><a class="permalink" href="#VM_ALLOC_NOBUSY"><code class="Dv">VM_ALLOC_NOBUSY</code></a></dt> - <dd>The returned page will not be busy. This flag is implicit when allocating - pages without a VM object. When allocating pages in a VM object, and - neither <code class="Dv">VM_ALLOC_SBUSY</code> nor - <code class="Dv">VM_ALLOC_NOBUSY</code> are specified, the returned pages - will be exclusively busied.</dd> - <dt id="VM_ALLOC_NODUMP"><a class="permalink" href="#VM_ALLOC_NODUMP"><code class="Dv">VM_ALLOC_NODUMP</code></a></dt> - <dd>The returned page will not be included in any kernel core dumps regardless - of whether or not it is mapped in to KVA.</dd> - <dt id="VM_ALLOC_WIRED"><a class="permalink" href="#VM_ALLOC_WIRED"><code class="Dv">VM_ALLOC_WIRED</code></a></dt> - <dd>The returned page will be wired.</dd> - <dt id="VM_ALLOC_ZERO"><a class="permalink" href="#VM_ALLOC_ZERO"><code class="Dv">VM_ALLOC_ZERO</code></a></dt> - <dd>If this flag is specified, the “noobj” variants will return - zeroed pages. The other allocator interfaces ignore this flag.</dd> - <dt id="VM_ALLOC_NORECLAIM"><a class="permalink" href="#VM_ALLOC_NORECLAIM"><code class="Dv">VM_ALLOC_NORECLAIM</code></a></dt> - <dd>If this flag is specified and the request can not be immediately - satisfied, the allocator will not attempt to break superpage reservations - to satisfy the allocation. This may be useful when the overhead of - scanning the reservation queue outweighs the cost of a failed allocation. - This flag may be used only with the “contig” variants, and - must not be specified in combination with - <code class="Dv">VM_ALLOC_WAITOK</code>.</dd> - <dt id="VM_ALLOC_COUNT(n)"><a class="permalink" href="#VM_ALLOC_COUNT(n)"><code class="Dv">VM_ALLOC_COUNT(n)</code></a></dt> - <dd>Hint that at least <var class="Fa">n</var> pages will be allocated by the - caller in the near future. <var class="Fa">n</var> must be no larger than - 65535. If the system is short of free pages, this hint may cause the - kernel to reclaim memory more aggressively than it would otherwise.</dd> - <dt id="VM_ALLOC_NOFREE"><a class="permalink" href="#VM_ALLOC_NOFREE"><code class="Dv">VM_ALLOC_NOFREE</code></a></dt> - <dd>The caller asserts that the returned page will never be released. If this - flag is specified, the allocator will try to fetch a page from a special - per-domain arena in order to curb long-term physical memory - fragmentation.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If the allocation was successful, a pointer to the - <var class="Vt">struct vm_page</var> corresponding to the allocated page is - returned. If the allocation request specified multiple pages, the returned - pointer points to an array of <var class="Vt">struct vm_page</var> - constituting the run. Upon failure, <code class="Dv">NULL</code> is - returned. Regardless of whether the allocation succeeds or fails, the VM - object <var class="Fa">object</var> will be write-locked upon return.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">numa(4)</a>, <a class="Xr">malloc(9)</a>, - <a class="Xr">uma(9)</a>, <a class="Xr">vm_page_grab(9)</a>, - <a class="Xr">vm_page_sbusy(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 4, 2024</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_page_bits.9 4.html b/static/freebsd/man9/vm_page_bits.9 4.html deleted file mode 100644 index 9952bb8c..00000000 --- a/static/freebsd/man9/vm_page_bits.9 4.html +++ /dev/null @@ -1,141 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_PAGE_BITS(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_PAGE_BITS(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_page_bits</code>, - <code class="Nm">vm_page_set_validclean</code>, - <code class="Nm">vm_page_clear_dirty</code>, - <code class="Nm">vm_page_set_invalid</code>, - <code class="Nm">vm_page_zero_invalid</code>, - <code class="Nm">vm_page_is_valid</code>, - <code class="Nm">vm_page_test_dirty</code>, - <code class="Nm">vm_page_dirty</code>, - <code class="Nm">vm_page_undirty</code> — <span class="Nd">manage - page clean and dirty bits</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_page.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_page_bits</code>(<var class="Fa" style="white-space: nowrap;">int - base</var>, <var class="Fa" style="white-space: nowrap;">int - size</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_set_validclean</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>, <var class="Fa" style="white-space: nowrap;">int base</var>, - <var class="Fa" style="white-space: nowrap;">int size</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_clear_dirty</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>, <var class="Fa" style="white-space: nowrap;">int base</var>, - <var class="Fa" style="white-space: nowrap;">int size</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_set_invalid</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>, <var class="Fa" style="white-space: nowrap;">int base</var>, - <var class="Fa" style="white-space: nowrap;">int size</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_zero_invalid</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>, <var class="Fa" style="white-space: nowrap;">boolean_t - setvalid</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_page_is_valid</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>, <var class="Fa" style="white-space: nowrap;">int base</var>, - <var class="Fa" style="white-space: nowrap;">int size</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_test_dirty</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_dirty</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_undirty</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><a class="permalink" href="#vm_page_bits"><code class="Fn" id="vm_page_bits">vm_page_bits</code></a>() - calculates the bits representing the <code class="Dv">DEV_BSIZE</code> range - of bytes between <var class="Fa">base</var> and <var class="Fa">size</var>. - The byte range is expected to be within a single page, and if - <var class="Fa">size</var> is zero, no bits will be set.</p> -<p class="Pp" id="vm_page_set_validclean"><a class="permalink" href="#vm_page_set_validclean"><code class="Fn">vm_page_set_validclean</code></a>() - flags the byte range between <var class="Fa">base</var> and - <var class="Fa">size</var> as valid and clean. The range is expected to be - <code class="Dv">DEV_BSIZE</code> aligned and no larger than - <code class="Dv">PAGE_SIZE</code>. If it is not properly aligned, any - unaligned chunks of the <code class="Dv">DEV_BSIZE</code> blocks at the - beginning and end of the range will be zeroed.</p> -<p class="Pp">If <var class="Fa">base</var> is zero and - <var class="Fa">size</var> is one page, the modified bit in the page map is - cleared; as well, the <code class="Dv">VPO_NOSYNC</code> flag is - cleared.</p> -<p class="Pp" id="vm_page_clear_dirty"><a class="permalink" href="#vm_page_clear_dirty"><code class="Fn">vm_page_clear_dirty</code></a>() - clears the dirty bits within a page in the range between - <var class="Fa">base</var> and <var class="Fa">size</var>. The bits - representing the range are calculated by calling - <code class="Fn">vm_page_bits</code>().</p> -<p class="Pp" id="vm_page_set_invalid"><a class="permalink" href="#vm_page_set_invalid"><code class="Fn">vm_page_set_invalid</code></a>() - clears the bits in both the valid and dirty flags representing the - <code class="Dv">DEV_BSIZE</code> blocks between <var class="Fa">base</var> - and <var class="Fa">size</var> in the page. The bits are calculated by - calling <code class="Fn">vm_page_bits</code>(). As well as clearing the bits - within the page, the generation number within the object holding the page is - incremented.</p> -<p class="Pp" id="vm_page_zero_invalid"><a class="permalink" href="#vm_page_zero_invalid"><code class="Fn">vm_page_zero_invalid</code></a>() - zeroes all of the blocks within the page that are currently flagged as - invalid. If <var class="Fa">setvalid</var> is <code class="Dv">TRUE</code>, - all of the valid bits within the page are set.</p> -<p class="Pp">In some cases, such as NFS, the valid bits cannot be set in order - to maintain cache consistency.</p> -<p class="Pp" id="vm_page_is_valid"><a class="permalink" href="#vm_page_is_valid"><code class="Fn">vm_page_is_valid</code></a>() - checks to determine if the all of the <code class="Dv">DEV_BSIZE</code> - blocks between <var class="Fa">base</var> and <var class="Fa">size</var> of - the page are valid. If <var class="Fa">size</var> is zero and the page is - entirely invalid <code class="Fn">vm_page_is_valid</code>() will return - <code class="Dv">TRUE</code>, in all other cases a size of zero will return - <code class="Dv">FALSE</code>.</p> -<p class="Pp" id="vm_page_test_dirty"><a class="permalink" href="#vm_page_test_dirty"><code class="Fn">vm_page_test_dirty</code></a>() - checks if a page has been modified via any of its physical maps, and if so, - flags the entire page as dirty. <code class="Fn">vm_page_dirty</code>() is - called to modify the dirty bits.</p> -<p class="Pp" id="vm_page_dirty"><a class="permalink" href="#vm_page_dirty"><code class="Fn">vm_page_dirty</code></a>() - flags the entire page as dirty. It is expected that the page is not - currently on the cache queue.</p> -<p class="Pp" id="vm_page_undirty"><a class="permalink" href="#vm_page_undirty"><code class="Fn">vm_page_undirty</code></a>() - clears all of the dirty bits in a page.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="NOTES"><a class="permalink" href="#NOTES">NOTES</a></h1> -<p class="Pp">None of these functions are allowed to block.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">December 1, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_page_busy.9 4.html b/static/freebsd/man9/vm_page_busy.9 4.html deleted file mode 100644 index cd48c618..00000000 --- a/static/freebsd/man9/vm_page_busy.9 4.html +++ /dev/null @@ -1,178 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_PAGE_BUSY(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_PAGE_BUSY(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_page_busied</code>, - <code class="Nm">vm_page_busy_downgrade</code>, - <code class="Nm">vm_page_busy_sleep</code>, - <code class="Nm">vm_page_sbusied</code>, - <code class="Nm">vm_page_sunbusy</code>, - <code class="Nm">vm_page_trysbusy</code>, - <code class="Nm">vm_page_tryxbusy</code>, - <code class="Nm">vm_page_xbusied</code>, - <code class="Nm">vm_page_xunbusy</code>, - <code class="Nm">vm_page_assert_sbusied</code>, - <code class="Nm">vm_page_assert_unbusied</code>, - <code class="Nm">vm_page_assert_xbusied</code> — - <span class="Nd">protect page identity changes and page content - references</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_page.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_page_busied</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_busy_downgrade</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">vm_page_busy_sleep</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>, <var class="Fa" style="white-space: nowrap;">const char *msg</var>, - <var class="Fa" style="white-space: nowrap;">int allocflags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_page_sbusied</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_sunbusy</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_page_trysbusy</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_page_tryxbusy</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_page_xbusied</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_xunbusy</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -<p class="Pp"> - <br/> - <code class="Cd">options INVARIANTS</code> - <br/> - <code class="Cd">options INVARIANT_SUPPORT</code> - <br/> - <var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_assert_sbusied</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_assert_unbusied</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_assert_xbusied</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Page identity is usually protected by higher level locks like - vm_object locks and vm page locks. However, sometimes it is not possible to - hold such locks for the time necessary to complete the identity change. In - such case the page can be exclusively busied by a thread which needs to own - the identity for a certain amount of time.</p> -<p class="Pp">In other situations, threads do not need to change the identity of - the page but they want to prevent other threads from changing the identity - themselves. For example, when a thread wants to access or update page - contents without a lock held the page is shared busied.</p> -<p class="Pp">Before busying a page the vm_object lock must be held. The same - rule applies when a page is unbusied. This makes the vm_object lock a real - busy interlock.</p> -<p class="Pp" id="vm_page_busied">The - <a class="permalink" href="#vm_page_busied"><code class="Fn">vm_page_busied</code></a>() - function returns non-zero if the current thread busied - <var class="Fa">m</var> in either exclusive or shared mode. Returns zero - otherwise.</p> -<p class="Pp" id="vm_page_busy_downgrade">The - <a class="permalink" href="#vm_page_busy_downgrade"><code class="Fn">vm_page_busy_downgrade</code></a>() - function must be used to downgrade <var class="Fa">m</var> from an exclusive - busy state to a shared busy state.</p> -<p class="Pp" id="vm_page_busy_sleep">The - <a class="permalink" href="#vm_page_busy_sleep"><code class="Fn">vm_page_busy_sleep</code></a>() - checks the busy state of the page <var class="Fa">m</var> and puts the - invoking thread to sleep if the page is busy. The VM object for the page - must be locked. The <var class="Fa">allocflags</var> parameter must be - either <code class="Dv">0</code>, in which case the function will sleep if - the page is busied, or <code class="Dv">VM_ALLOC_IGN_SBUSY</code>, in which - case the function will sleep only if the page is exclusively busied. A - return value of true indicates that the invoking thread was put to sleep and - that the object was unlocked. A return value of false indicates that the - invoking thread did not sleep and the object remains locked. The parameter - <var class="Fa">msg</var> is a string describing the sleep condition for - userland tools.</p> -<p class="Pp" id="vm_page_busied~2">The - <a class="permalink" href="#vm_page_busied~2"><code class="Fn">vm_page_busied</code></a>() - function returns non-zero if the current thread busied - <var class="Fa">m</var> in shared mode. Returns zero otherwise.</p> -<p class="Pp" id="vm_page_sunbusy">The - <a class="permalink" href="#vm_page_sunbusy"><code class="Fn">vm_page_sunbusy</code></a>() - function shared unbusies <var class="Fa">m</var>.</p> -<p class="Pp" id="vm_page_trysbusy">The - <a class="permalink" href="#vm_page_trysbusy"><code class="Fn">vm_page_trysbusy</code></a>() - attempts to shared busy <var class="Fa">m</var>. If the operation cannot - immediately succeed <code class="Fn">vm_page_trysbusy</code>() returns 0, - otherwise a non-zero value is returned.</p> -<p class="Pp" id="vm_page_tryxbusy">The - <a class="permalink" href="#vm_page_tryxbusy"><code class="Fn">vm_page_tryxbusy</code></a>() - attempts to exclusive busy <var class="Fa">m</var>. If the operation cannot - immediately succeed <code class="Fn">vm_page_tryxbusy</code>() returns 0, - otherwise a non-zero value is returned.</p> -<p class="Pp" id="vm_page_xbusied">The - <a class="permalink" href="#vm_page_xbusied"><code class="Fn">vm_page_xbusied</code></a>() - function returns non-zero if the current thread busied - <var class="Fa">m</var> in exclusive mode. Returns zero otherwise.</p> -<p class="Pp" id="vm_page_xunbusy">The - <a class="permalink" href="#vm_page_xunbusy"><code class="Fn">vm_page_xunbusy</code></a>() - function exclusive unbusies <var class="Fa">m</var>. Assertions on the busy - state allow kernels compiled with <code class="Cd">options INVARIANTS</code> - and <code class="Cd">options INVARIANT_SUPPORT</code> to panic if they are - not respected.</p> -<p class="Pp" id="vm_page_assert_sbusied">The - <a class="permalink" href="#vm_page_assert_sbusied"><code class="Fn">vm_page_assert_sbusied</code></a>() - function panics if <var class="Fa">m</var> is not shared busied.</p> -<p class="Pp" id="vm_page_assert_unbusied">The - <a class="permalink" href="#vm_page_assert_unbusied"><code class="Fn">vm_page_assert_unbusied</code></a>() - function panics if <var class="Fa">m</var> is not unbusied.</p> -<p class="Pp" id="vm_page_assert_xbusied">The - <a class="permalink" href="#vm_page_assert_xbusied"><code class="Fn">vm_page_assert_xbusied</code></a>() - function panics if <var class="Fa">m</var> is not exclusive busied.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vm_page_aflag(9)</a>, - <a class="Xr">vm_page_alloc(9)</a>, <a class="Xr">vm_page_deactivate(9)</a>, - <a class="Xr">vm_page_free(9)</a>, <a class="Xr">vm_page_grab(9)</a>, - <a class="Xr">vm_page_insert(9)</a>, <a class="Xr">vm_page_lookup(9)</a>, - <a class="Xr">vm_page_rename(9)</a>, <a class="Xr">VOP_GETPAGES(9)</a></p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">November 11, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_page_deactivate.9 4.html b/static/freebsd/man9/vm_page_deactivate.9 4.html deleted file mode 100644 index bc9777b4..00000000 --- a/static/freebsd/man9/vm_page_deactivate.9 4.html +++ /dev/null @@ -1,50 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_PAGE_DEACTIVATE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_PAGE_DEACTIVATE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_page_deactivate</code> — - <span class="Nd">deactivate a page</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_page.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_deactivate</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_page_deactivate"><code class="Fn" id="vm_page_deactivate">vm_page_deactivate</code></a>() - function moves the given page to the inactive queue as long as it is - unmanaged and is not wired.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vm_page_wire(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 24, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_page_dontneed.9 4.html b/static/freebsd/man9/vm_page_dontneed.9 4.html deleted file mode 100644 index 8808a94b..00000000 --- a/static/freebsd/man9/vm_page_dontneed.9 4.html +++ /dev/null @@ -1,57 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_PAGE_DONTNEED(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_PAGE_DONTNEED(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_page_dontneed</code> — - <span class="Nd">indicate that a page is not needed anymore</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_page.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_dontneed</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_page_dontneed"><code class="Fn" id="vm_page_dontneed">vm_page_dontneed</code></a>() - function advises the VM system that the given page is no longer required. If - the page is already in the inactive queue or in the cache queue, this - function does nothing; otherwise the page is deactivated.</p> -<p class="Pp" id="vm_page_dontneed~2">Note that - <a class="permalink" href="#vm_page_dontneed~2"><code class="Fn">vm_page_dontneed</code></a>() - does not necessarily deactivate a page, but instead implements an algorithm - that attempts to prevent small objects from having their pages reused too - quickly, and large objects from flushing smaller ones from the queues as - their pages are released.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vm_page_deactivate(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 30, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_page_free.9 3.html b/static/freebsd/man9/vm_page_free.9 3.html deleted file mode 100644 index 08a8c68d..00000000 --- a/static/freebsd/man9/vm_page_free.9 3.html +++ /dev/null @@ -1,93 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_PAGE_FREE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_PAGE_FREE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_page_free</code>, - <code class="Nm">vm_page_free_toq</code>, - <code class="Nm">vm_page_free_zero</code>, - <code class="Nm">vm_page_try_to_free</code> — <span class="Nd">free a - page</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_page.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_free</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_free_toq</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_free_zero</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vm_page_try_to_free</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_page_free_toq"><code class="Fn" id="vm_page_free_toq">vm_page_free_toq</code></a>() - function moves a page into the free queue, and disassociates it from its - object. If the page is held, wired, already free, or its busy count is not - zero, the system will panic. If the <code class="Dv">PG_ZERO</code> flag is - set on the page, it is placed at the end of the free queue; otherwise, it is - placed at the front.</p> -<p class="Pp">If the page's object is of type <code class="Dv">OBJT_VNODE</code> - and it is the last page associated with the object, the underlying vnode may - be freed.</p> -<p class="Pp" id="vm_page_free">The - <a class="permalink" href="#vm_page_free"><code class="Fn">vm_page_free</code></a>() - and - <a class="permalink" href="#vm_page_free_zero"><code class="Fn" id="vm_page_free_zero">vm_page_free_zero</code></a>() - functions both call <code class="Fn">vm_page_free_toq</code>() to actually - free the page, but <code class="Fn">vm_page_free_zero</code>() sets the - <code class="Dv">PG_ZERO</code> flag and - <code class="Fn">vm_page_free</code>() clears the - <code class="Dv">PG_ZERO</code> flag prior to the call to - <code class="Fn">vm_page_free_toq</code>().</p> -<p class="Pp" id="vm_page_try_to_free">The - <a class="permalink" href="#vm_page_try_to_free"><code class="Fn">vm_page_try_to_free</code></a>() - function verifies that the page is not held, wired, busy or dirty, and if - so, marks the page as busy, drops any protection that may be set on the - page, and frees it.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp"><code class="Fn">vm_page_try_to_free</code>() returns 1 if it is - able to free the page; otherwise, 0 is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vm_page_busy(9)</a>, - <a class="Xr">vm_page_hold(9)</a>, <a class="Xr">vm_page_wire(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 24, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_page_grab.9 4.html b/static/freebsd/man9/vm_page_grab.9 4.html deleted file mode 100644 index 7073418e..00000000 --- a/static/freebsd/man9/vm_page_grab.9 4.html +++ /dev/null @@ -1,76 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_PAGE_GRAB(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_PAGE_GRAB(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_page_grab</code> — - <span class="Nd">returns a page from an object</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_page.h</a>></code></p> -<p class="Pp"><var class="Ft">vm_page_t</var> - <br/> - <code class="Fn">vm_page_grab</code>(<var class="Fa" style="white-space: nowrap;">vm_object_t - object</var>, <var class="Fa" style="white-space: nowrap;">vm_pindex_t - pindex</var>, <var class="Fa" style="white-space: nowrap;">int - allocflags</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_page_grab"><code class="Fn" id="vm_page_grab">vm_page_grab</code></a>() - function returns the page at <var class="Fa">pindex</var> from the given - object. If the page exists and is busy, - <code class="Fn">vm_page_grab</code>() will sleep while waiting for it. If - the page does not exist, it is allocated. The function sleeps until the - allocation request can be satisfied.</p> -<p class="Pp" id="vm_page_grab~2">The function requires the - <var class="Fa">object</var> to be locked on entry, and returns with the - object locked. If the - <a class="permalink" href="#vm_page_grab~2"><code class="Fn">vm_page_grab</code></a>() - function sleeps for any reason, the object lock is temporary dropped.</p> -<p class="Pp" id="vm_page_grab~3">The - <a class="permalink" href="#vm_page_grab~3"><code class="Fn">vm_page_grab</code></a>() - supports all of the flags supported by <a class="Xr">vm_page_alloc(9)</a>. - In addition, <code class="Fn">vm_page_grab</code>() supports the following - flags:</p> -<dl class="Bl-tag"> - <dt id="VM_ALLOC_IGN_SBUSY"><a class="permalink" href="#VM_ALLOC_IGN_SBUSY"><code class="Dv">VM_ALLOC_IGN_SBUSY</code></a></dt> - <dd>When waiting for the busy state of the existing page to drain, only test - for exclusive busy; ignore the shared busy counter.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">vm_page_grab</code>() always returns the - page.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vm_page_alloc(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 23, 2013</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_page_insert.9 4.html b/static/freebsd/man9/vm_page_insert.9 4.html deleted file mode 100644 index e81844d7..00000000 --- a/static/freebsd/man9/vm_page_insert.9 4.html +++ /dev/null @@ -1,88 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_PAGE_INSERT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_PAGE_INSERT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_page_insert</code>, - <code class="Nm">vm_page_remove</code> — <span class="Nd">add/remove - page from an object</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_page.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_insert</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>, <var class="Fa" style="white-space: nowrap;">vm_object_t - object</var>, <var class="Fa" style="white-space: nowrap;">vm_pindex_t - pindex</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_remove</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_page_insert"><code class="Fn" id="vm_page_insert">vm_page_insert</code></a>() - function adds a page to the given object at the given index. The page is - added to both the VM page hash table and to the object's list of pages, but - the hardware page tables are not updated. In the case of a user page, it - will be faulted in when it is accessed. If the page is a kernel page, the - caller is expected to handle adding the page to the kernel's pmap.</p> -<p class="Pp">If <code class="Dv">PG_WRITEABLE</code> is set in the page's - flags, <code class="Dv">OBJ_WRITEABLE</code> and - <code class="Dv">OBJ_MIGHTBEDIRTY</code> are set in the object's flags.</p> -<p class="Pp" id="vm_page_remove">The - <a class="permalink" href="#vm_page_remove"><code class="Fn">vm_page_remove</code></a>() - function removes the given page from its object, and from the VM page hash - table. The page must be busy prior to this call, or the system will panic. - The pmap entry for the page is not removed by this function.</p> -<p class="Pp" id="vm_page_insert~2">The arguments to - <a class="permalink" href="#vm_page_insert~2"><code class="Fn">vm_page_insert</code></a>() - are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">m</var></dt> - <dd>The page to add to the object.</dd> - <dt><var class="Fa">object</var></dt> - <dd>The object the page should be added to.</dd> - <dt><var class="Fa">pindex</var></dt> - <dd>The index into the object the page should be at.</dd> -</dl> -<p class="Pp" id="vm_page_remove~2">The arguments to - <a class="permalink" href="#vm_page_remove~2"><code class="Fn">vm_page_remove</code></a>() - are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">m</var></dt> - <dd>The page to remove.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">The index of a page in a VM object is the byte index into the same - object truncated to a page boundary. For example, if the page size is 4096 - bytes, and the address in the object is 81944, the page index is 20.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 17, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_page_lookup.9 4.html b/static/freebsd/man9/vm_page_lookup.9 4.html deleted file mode 100644 index 2344940e..00000000 --- a/static/freebsd/man9/vm_page_lookup.9 4.html +++ /dev/null @@ -1,59 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_PAGE_LOOKUP(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_PAGE_LOOKUP(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_page_lookup</code> — - <span class="Nd">lookup a vm page</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_page.h</a>></code></p> -<p class="Pp"><var class="Ft">vm_page_t</var> - <br/> - <code class="Fn">vm_page_lookup</code>(<var class="Fa" style="white-space: nowrap;">vm_object_t - object</var>, <var class="Fa" style="white-space: nowrap;">vm_pindex_t - pindex</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_page_lookup"><code class="Fn" id="vm_page_lookup">vm_page_lookup</code></a>() - function searches for a VM page given its VM object and index. If the page - is not found, <code class="Dv">NULL</code> is returned. Its arguments - are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">object</var></dt> - <dd>The VM object to search on.</dd> - <dt><var class="Fa">pindex</var></dt> - <dd>The page index to search on.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">A <var class="Vt">vm_page_t</var> is returned if successful; - otherwise, <code class="Dv">NULL</code> is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 13, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_page_rename.9 4.html b/static/freebsd/man9/vm_page_rename.9 4.html deleted file mode 100644 index 92f57ee4..00000000 --- a/static/freebsd/man9/vm_page_rename.9 4.html +++ /dev/null @@ -1,62 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_PAGE_RENAME(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_PAGE_RENAME(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_page_rename</code> — - <span class="Nd">move a page</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_page.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_rename</code>(<var class="Fa">vm_page_t m</var>, - <var class="Fa">vm_object_t new_object</var>, <var class="Fa">vm_pindex_t - new_pindex</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_page_rename"><code class="Fn" id="vm_page_rename">vm_page_rename</code></a>() - function removes a page from one object, and adds it to another at the given - page index. The page is added to the given object, and is removed from the - object that is currently associated with. If the page is currently on the - cache queue it will be deactivated unless it is wired or unmanaged, in which - case the deactivation will fail. The entire page is marked as dirty after - the move.</p> -<p class="Pp" id="vm_page_rename~2">The arguments to - <a class="permalink" href="#vm_page_rename~2"><code class="Fn">vm_page_rename</code></a>() - are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">m</var></dt> - <dd>The page to move.</dd> - <dt><var class="Fa">new_object</var></dt> - <dd>The object the page should be inserted into.</dd> - <dt><var class="Fa">new_pindex</var></dt> - <dd>The page index into <var class="Fa">new_object</var> at which the new page - should be inserted.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 17, 2001</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_page_wire.9 4.html b/static/freebsd/man9/vm_page_wire.9 4.html deleted file mode 100644 index b3a3c5dc..00000000 --- a/static/freebsd/man9/vm_page_wire.9 4.html +++ /dev/null @@ -1,77 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_PAGE_WIRE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_PAGE_WIRE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_page_wire</code>, - <code class="Nm">vm_page_unwire</code>, - <code class="Nm">vm_page_unwire_noq</code> — <span class="Nd">wire - and unwire pages</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_page.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_wire</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">vm_page_wire_mapped</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_page_unwire</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>, <var class="Fa" style="white-space: nowrap;">int queue</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">vm_page_unwire_noq</code>(<var class="Fa" style="white-space: nowrap;">vm_page_t - m</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_page_wire"><code class="Fn" id="vm_page_wire">vm_page_wire</code></a>() - and - <a class="permalink" href="#vm_page_wire_mapped"><code class="Fn" id="vm_page_wire_mapped">vm_page_wire_mapped</code></a>() - functions wire the page, which prevents it from being reclaimed by the page - daemon or when its containing object is destroyed. Both functions require - that the page belong to an object. The - <code class="Fn">vm_page_wire_mapped</code>() function is for use by the - <a class="Xr">pmap(9)</a> layer following a lookup. This function may fail - if mappings of the page are concurrently being destroyed, in which case it - will return false.</p> -<p class="Pp" id="vm_page_unwire">The - <a class="permalink" href="#vm_page_unwire"><code class="Fn">vm_page_unwire</code></a>() - and - <a class="permalink" href="#vm_page_unwire_noq"><code class="Fn" id="vm_page_unwire_noq">vm_page_unwire_noq</code></a>() - functions release a wiring of a page. The - <code class="Fn">vm_page_unwire</code>() function takes a queue index and - will insert the page into the corresponding page queue upon releasing its - last wiring. If the page does not belong to an object and no other - references to the page exist, <code class="Fn">vm_page_unwire</code>() will - free the page. <code class="Fn">vm_page_unwire_noq</code>() releases the - wiring and returns true if it was the last wiring of the page.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 9, 2019</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vm_set_page_size.9 4.html b/static/freebsd/man9/vm_set_page_size.9 4.html deleted file mode 100644 index 7e69f16b..00000000 --- a/static/freebsd/man9/vm_set_page_size.9 4.html +++ /dev/null @@ -1,51 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VM_SET_PAGE_SIZE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VM_SET_PAGE_SIZE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vm_set_page_size</code> — - <span class="Nd">initialize the system page size</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_page.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vm_set_page_size</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vm_set_page_size"><code class="Fn" id="vm_set_page_size">vm_set_page_size</code></a>() - function initializes the system page size. If - <var class="Va">vm_cnt.v_page_size</var> (see - <code class="In"><<a class="In">sys/vmmeter.h</a>></code>) equals 0, - <code class="Dv">PAGE_SIZE</code> is used; otherwise, the value stored in - <var class="Va">vm_cnt.v_page_size</var> is used. If - <var class="Va">vm_cnt.v_page_size</var> is not a power of two, the system - will panic.</p> -<p class="Pp" id="vm_set_page_size~2"><a class="permalink" href="#vm_set_page_size~2"><code class="Fn">vm_set_page_size</code></a>() - must be called prior to any page size dependent functions.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 21, 2014</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vmem.9 3.html b/static/freebsd/man9/vmem.9 3.html deleted file mode 100644 index 9e7e6121..00000000 --- a/static/freebsd/man9/vmem.9 3.html +++ /dev/null @@ -1,261 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VMEM(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VMEM(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vmem</code> — <span class="Nd">general - purpose resource allocator</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/vmem.h</a>></code></p> -<p class="Pp"><var class="Ft">vmem_t *</var> - <br/> - <code class="Fn">vmem_create</code>(<var class="Fa" style="white-space: nowrap;">const - char *name</var>, <var class="Fa" style="white-space: nowrap;">vmem_addr_t - base</var>, <var class="Fa" style="white-space: nowrap;">vmem_size_t - size</var>, <var class="Fa" style="white-space: nowrap;">vmem_size_t - quantum</var>, <var class="Fa" style="white-space: nowrap;">vmem_size_t - qcache_max</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vmem_add</code>(<var class="Fa" style="white-space: nowrap;">vmem_t - *vm</var>, <var class="Fa" style="white-space: nowrap;">vmem_addr_t - addr</var>, <var class="Fa" style="white-space: nowrap;">vmem_size_t - size</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vmem_xalloc</code>(<var class="Fa" style="white-space: nowrap;">vmem_t - *vm</var>, <var class="Fa" style="white-space: nowrap;">const vmem_size_t - size</var>, <var class="Fa" style="white-space: nowrap;">vmem_size_t - align</var>, <var class="Fa" style="white-space: nowrap;">const vmem_size_t - phase</var>, <var class="Fa" style="white-space: nowrap;">const vmem_size_t - nocross</var>, <var class="Fa" style="white-space: nowrap;">const - vmem_addr_t minaddr</var>, - <var class="Fa" style="white-space: nowrap;">const vmem_addr_t - maxaddr</var>, <var class="Fa" style="white-space: nowrap;">int flags</var>, - <var class="Fa" style="white-space: nowrap;">vmem_addr_t *addrp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vmem_xfree</code>(<var class="Fa" style="white-space: nowrap;">vmem_t - *vm</var>, <var class="Fa" style="white-space: nowrap;">vmem_addr_t - addr</var>, <var class="Fa" style="white-space: nowrap;">vmem_size_t - size</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vmem_alloc</code>(<var class="Fa" style="white-space: nowrap;">vmem_t - *vm</var>, <var class="Fa" style="white-space: nowrap;">vmem_size_t - size</var>, <var class="Fa" style="white-space: nowrap;">int flags</var>, - <var class="Fa" style="white-space: nowrap;">vmem_addr_t *addrp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vmem_free</code>(<var class="Fa" style="white-space: nowrap;">vmem_t - *vm</var>, <var class="Fa" style="white-space: nowrap;">vmem_addr_t - addr</var>, <var class="Fa" style="white-space: nowrap;">vmem_size_t - size</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vmem_destroy</code>(<var class="Fa" style="white-space: nowrap;">vmem_t - *vm</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The <code class="Nm">vmem</code> is a general purpose resource - allocator. Despite its name, it can be used for arbitrary resources other - than virtual memory.</p> -<p class="Pp" id="vmem_create"><a class="permalink" href="#vmem_create"><code class="Fn">vmem_create</code></a>() - creates a new vmem arena.</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt><var class="Fa">name</var></dt> - <dd>The string to describe the vmem.</dd> - <dt><var class="Fa">base</var></dt> - <dd>The start address of the initial span. Pass <code class="Dv">0</code> if - no initial span is required.</dd> - <dt><var class="Fa">size</var></dt> - <dd>The size of the initial span. Pass <code class="Dv">0</code> if no initial - span is required.</dd> - <dt><var class="Fa">quantum</var></dt> - <dd>The smallest unit of allocation.</dd> - <dt><var class="Fa">qcache_max</var></dt> - <dd>The largest size of allocations which can be served by quantum cache. It - is merely a hint and can be ignored.</dd> - <dt><var class="Fa">flags</var></dt> - <dd><a class="Xr">malloc(9)</a> wait flag.</dd> -</dl> -</div> -<p class="Pp" id="vmem_add"><a class="permalink" href="#vmem_add"><code class="Fn">vmem_add</code></a>() - adds a span of size <var class="Fa">size</var> starting at - <var class="Fa">addr</var> to the arena. Returns 0 on success, - <code class="Dv">ENOMEM</code> on failure. <var class="Fa">flags</var> is - <a class="Xr">malloc(9)</a> wait flag.</p> -<p class="Pp" id="vmem_xalloc"><a class="permalink" href="#vmem_xalloc"><code class="Fn">vmem_xalloc</code></a>() - allocates a resource from the arena.</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt><var class="Fa">vm</var></dt> - <dd>The arena which we allocate from.</dd> - <dt><var class="Fa">size</var></dt> - <dd>Specify the size of the allocation.</dd> - <dt><var class="Fa">align</var></dt> - <dd>If zero, don't care about the alignment of the allocation. Otherwise, - request a resource segment starting at offset <var class="Fa">phase</var> - from an <var class="Fa">align</var> aligned boundary.</dd> - <dt><var class="Fa">phase</var></dt> - <dd>See the above description of <var class="Fa">align</var>. If - <var class="Fa">align</var> is zero, <var class="Fa">phase</var> should be - zero. Otherwise, <var class="Fa">phase</var> should be smaller than - <var class="Fa">align</var>.</dd> - <dt><var class="Fa">nocross</var></dt> - <dd>Request a resource which doesn't cross <var class="Fa">nocross</var> - aligned boundary.</dd> - <dt><var class="Fa">minaddr</var></dt> - <dd>Specify the minimum address which can be allocated, or - <code class="Dv">VMEM_ADDR_MIN</code> if the caller does not care.</dd> - <dt><var class="Fa">maxaddr</var></dt> - <dd>Specify the maximum address which can be allocated, or - <code class="Dv">VMEM_ADDR_MAX</code> if the caller does not care.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>A bitwise OR of an allocation strategy and a <a class="Xr">malloc(9)</a> - wait flag. The allocation strategy is one of: - <dl class="Bl-tag"> - <dt id="M_FIRSTFIT"><a class="permalink" href="#M_FIRSTFIT"><code class="Dv">M_FIRSTFIT</code></a></dt> - <dd>Prefer allocation performance.</dd> - <dt id="M_BESTFIT"><a class="permalink" href="#M_BESTFIT"><code class="Dv">M_BESTFIT</code></a></dt> - <dd>Prefer space efficiency.</dd> - <dt id="M_NEXTFIT"><a class="permalink" href="#M_NEXTFIT"><code class="Dv">M_NEXTFIT</code></a></dt> - <dd>Perform an address-ordered search for free addresses, beginning where - the previous search ended.</dd> - </dl> - </dd> - <dt><var class="Fa">addrp</var></dt> - <dd>On success, if <var class="Fa">addrp</var> is not - <code class="Dv">NULL</code>, <code class="Fn">vmem_xalloc</code>() - overwrites it with the start address of the allocated span.</dd> -</dl> -</div> -<p class="Pp" id="vmem_xfree"><a class="permalink" href="#vmem_xfree"><code class="Fn">vmem_xfree</code></a>() - frees resource allocated by <code class="Fn">vmem_xalloc</code>() to the - arena.</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt><var class="Fa">vm</var></dt> - <dd>The arena which we free to.</dd> - <dt><var class="Fa">addr</var></dt> - <dd>The resource being freed. It must be the one returned by - <code class="Fn">vmem_xalloc</code>(). Notably, it must not be the one - from <code class="Fn">vmem_alloc</code>(). Otherwise, the behaviour is - undefined.</dd> - <dt><var class="Fa">size</var></dt> - <dd>The size of the resource being freed. It must be the same as the - <var class="Fa">size</var> argument used for - <code class="Fn">vmem_xalloc</code>().</dd> -</dl> -</div> -<p class="Pp" id="vmem_alloc"><a class="permalink" href="#vmem_alloc"><code class="Fn">vmem_alloc</code></a>() - allocates a resource from the arena.</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt><var class="Fa">vm</var></dt> - <dd>The arena which we allocate from.</dd> - <dt><var class="Fa">size</var></dt> - <dd>Specify the size of the allocation.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>A bitwise OR of an <code class="Nm">vmem</code> allocation strategy flag - (see above) and a <a class="Xr">malloc(9)</a> sleep flag.</dd> - <dt><var class="Fa">addrp</var></dt> - <dd>On success, if <var class="Fa">addrp</var> is not - <code class="Dv">NULL</code>, <code class="Fn">vmem_alloc</code>() - overwrites it with the start address of the allocated span.</dd> -</dl> -</div> -<p class="Pp" id="vmem_free"><a class="permalink" href="#vmem_free"><code class="Fn">vmem_free</code></a>() - frees resource allocated by <code class="Fn">vmem_alloc</code>() to the - arena.</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt><var class="Fa">vm</var></dt> - <dd>The arena which we free to.</dd> - <dt><var class="Fa">addr</var></dt> - <dd>The resource being freed. It must be the one returned by - <code class="Fn">vmem_alloc</code>(). Notably, it must not be the one from - <code class="Fn">vmem_xalloc</code>(). Otherwise, the behaviour is - undefined.</dd> - <dt><var class="Fa">size</var></dt> - <dd>The size of the resource being freed. It must be the same as the - <var class="Fa">size</var> argument used for - <code class="Fn">vmem_alloc</code>().</dd> -</dl> -</div> -<p class="Pp" id="vmem_destroy"><a class="permalink" href="#vmem_destroy"><code class="Fn">vmem_destroy</code></a>() - destroys a vmem arena.</p> -<div class="Bd-indent"> -<dl class="Bl-tag"> - <dt><var class="Fa">vm</var></dt> - <dd>The vmem arena being destroyed. The caller should ensure that no one will - use it anymore.</dd> -</dl> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp"><code class="Fn">vmem_create</code>() returns a pointer to the - newly allocated vmem_t. Otherwise, it returns - <code class="Dv">NULL</code>.</p> -<p class="Pp">On success, <code class="Fn">vmem_xalloc</code>() and - <code class="Fn">vmem_alloc</code>() return 0. Otherwise, - <code class="Dv">ENOMEM</code> is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="CODE_REFERENCES"><a class="permalink" href="#CODE_REFERENCES">CODE - REFERENCES</a></h1> -<p class="Pp">The <code class="Nm">vmem</code> subsystem is implemented within - the file <span class="Pa">sys/kern/subr_vmem.c</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">malloc(9)</a></p> -<p class="Pp"><a class="Xr">libuvmem(3)</a> for the userspace port of the - allocator.</p> -<p class="Pp"><cite class="Rs"><span class="RsA">Jeff Bonwick</span> and - <span class="RsA">Jonathan Adams</span>, <span class="RsT">Magazines and - Vmem: Extending the Slab Allocator to Many CPUs and Arbitrary - Resources</span>, <i class="RsJ">2001 USENIX Annual Technical - Conference</i>, <span class="RsD">2001</span>.</cite></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">vmem</code> allocator was originally - implemented in <span class="Ux">NetBSD</span>. It was introduced in - <span class="Ux">FreeBSD 10.0</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">Original implementation of <code class="Nm">vmem</code> was - written by <span class="An">YAMAMOTO Takashi</span>. The - <span class="Ux">FreeBSD</span> port was made by <span class="An">Jeff - Roberson</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> -<p class="Pp"><code class="Nm">vmem</code> relies on - <a class="Xr">malloc(9)</a>, so it cannot be used as early during system - bootstrap.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">May 17, 2019</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vn_deallocate.9 4.html b/static/freebsd/man9/vn_deallocate.9 4.html deleted file mode 100644 index b2da14ec..00000000 --- a/static/freebsd/man9/vn_deallocate.9 4.html +++ /dev/null @@ -1,99 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VN_DEALLOCATE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VN_DEALLOCATE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vn_deallocate</code> — - <span class="Nd">zero and/or deallocate storage from a file</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vn_deallocate</code>(<var class="Fa">struct vnode *vp</var>, - <var class="Fa">off_t *offset</var>, <var class="Fa">off_t *length</var>, - <var class="Fa">int flags</var>, <var class="Fa">int ioflag</var>, - <var class="Fa">struct ucred *active_cred</var>, <var class="Fa">struct - ucred *file_cred</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vn_deallocate"><code class="Fn" id="vn_deallocate">vn_deallocate</code></a>() - function zeros and/or deallocates backing storage space from a file. This - function only works on vnodes with <code class="Dv">VREG</code> type.</p> -<p class="Pp">The arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode of the file.</dd> - <dt><var class="Fa">offset</var></dt> - <dd>The starting offset of the operation range.</dd> - <dt><var class="Fa">length</var></dt> - <dd>The length of the operation range. This must be greater than 0.</dd> - <dt><var class="Fa">flags</var></dt> - <dd>The control flags of the operation. This should be set to 0 for now.</dd> - <dt><var class="Fa">ioflag</var></dt> - <dd>Directives and hints to be given to the file system.</dd> - <dt><var class="Fa">active_cred</var></dt> - <dd>The user credentials of the calling thread.</dd> - <dt><var class="Fa">file_cred</var></dt> - <dd>The credentials installed on the file description pointing to the vnode or - NOCRED.</dd> -</dl> -<p class="Pp" id="ioflag">The - <a class="permalink" href="#ioflag"><code class="Fn">ioflag</code></a>() - argument gives directives and hints to the file system. It may include one - or more of the following flags:</p> -<dl class="Bl-tag"> - <dt id="IO_NODELOCKED"><a class="permalink" href="#IO_NODELOCKED"><code class="Dv">IO_NODELOCKED</code></a></dt> - <dd>The vnode was locked before the call.</dd> - <dt id="IO_RANGELOCKED"><a class="permalink" href="#IO_RANGELOCKED"><code class="Dv">IO_RANGELOCKED</code></a></dt> - <dd>Rangelock was owned around the call.</dd> - <dt id="IO_NOMACCHECK"><a class="permalink" href="#IO_NOMACCHECK"><code class="Dv">IO_NOMACCHECK</code></a></dt> - <dd>Skip MAC checking in the call.</dd> - <dt id="IO_SYNC"><a class="permalink" href="#IO_SYNC"><code class="Dv">IO_SYNC</code></a></dt> - <dd>Do I/O synchronously.</dd> - <dt id="IO_DIRECT"><a class="permalink" href="#IO_DIRECT"><code class="Dv">IO_DIRECT</code></a></dt> - <dd>Attempt to bypass buffer cache.</dd> -</dl> -<p class="Pp"><var class="Fa">*offset</var> and <var class="Fa">*length</var> - are updated to reflect the unprocessed operation range of the call. For a - successful completion, <var class="Fa">*length</var> is updated to be the - value 0, and <var class="Fa">*offset</var> is incremented by the number of - bytes zeroed before the end-of-file.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">Upon successful completion, the value 0 is returned; otherwise the - appropriate error is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a>, - <a class="Xr">VOP_DEALLOCATE(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp"><code class="Nm">vn_deallocate</code> and this manual page was - written by <span class="An">Ka Ho Ng</span> - <<a class="Mt" href="mailto:khng@FreeBSD.org">khng@FreeBSD.org</a>> - under sponsorship from the FreeBSD Foundation.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 25, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vn_fullpath.9 3.html b/static/freebsd/man9/vn_fullpath.9 3.html deleted file mode 100644 index c97d9065..00000000 --- a/static/freebsd/man9/vn_fullpath.9 3.html +++ /dev/null @@ -1,156 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VN_FULLPATH(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VN_FULLPATH(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vn_fullpath</code> — - <span class="Nd">convert a vnode reference to a full pathname, given a - process context</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vn_fullpath</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">char - **retbuf</var>, <var class="Fa" style="white-space: nowrap;">char - **freebuf</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vn_fullpath_jail</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">char - **retbuf</var>, <var class="Fa" style="white-space: nowrap;">char - **freebuf</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vn_fullpath_global</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">char - **retbuf</var>, <var class="Fa" style="white-space: nowrap;">char - **freebuf</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vn_fullpath_hardlink</code>(<var class="Fa">struct vnode - *vp</var>, <var class="Fa">struct vnode *dvp</var>, <var class="Fa">const - char *hrdl_name</var>, <var class="Fa">size_t hrdl_name_length</var>, - <var class="Fa">char **retbuf</var>, <var class="Fa">char **freebuf</var>, - <var class="Fa">size_t *buflen</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vn_fullpath"><code class="Fn" id="vn_fullpath">vn_fullpath</code></a>(), - <a class="permalink" href="#vn_fullpath_jail"><code class="Fn" id="vn_fullpath_jail">vn_fullpath_jail</code></a>(), - <a class="permalink" href="#vn_fullpath_global"><code class="Fn" id="vn_fullpath_global">vn_fullpath_global</code></a>() - and <code class="Fn">vn_fullpath_hardlink</code>() functions make a - “best effort” attempt at generating a string pathname for the - passed vnode. They differ in which directory the returned path is relative - to, except for <code class="Fn">vn_fullpath_hardlink</code>() which behaves - like <code class="Fn">vn_fullpath</code>() in this respect and is described - at the end.</p> -<p class="Pp" id="vn_fullpath~2">The - <a class="permalink" href="#vn_fullpath~2"><code class="Fn">vn_fullpath</code></a>() - function returns a path relative to the root directory of the process - associated with the passed thread pointer. That root directory is either the - system's or the thread's process' containing jail's root directory, or some - descendant directory of such established by some <a class="Xr">chroot(2)</a> - call. The - <a class="permalink" href="#vn_fullpath_jail~2"><code class="Fn" id="vn_fullpath_jail~2">vn_fullpath_jail</code></a>() - function returns a path relative to the passed thread's process' current - jail's root, ignoring intervening <a class="Xr">chroot(2)</a> calls possibly - made inside that jail. The - <a class="permalink" href="#vn_fullpath_global~2"><code class="Fn" id="vn_fullpath_global~2">vn_fullpath_global</code></a>() - function returns the full path from the system root, ignoring all jail roots - and <a class="Xr">chroot(2)</a> calls.</p> -<p class="Pp" id="vn_fullpath~3">Paths that the kernel intends to communicate to - the passed user thread should exclusively be obtained via - <a class="permalink" href="#vn_fullpath~3"><code class="Fn">vn_fullpath</code></a>(). - Paths obtained via - <a class="permalink" href="#vn_fullpath_jail~3"><code class="Fn" id="vn_fullpath_jail~3">vn_fullpath_jail</code></a>() - or - <a class="permalink" href="#vn_fullpath_global~3"><code class="Fn" id="vn_fullpath_global~3">vn_fullpath_global</code></a>() - are only useful for specific kernel checks or auditing purposes.</p> -<p class="Pp">All these functions are implemented by inspecting the VFS name - cache, and attempting to reconstruct a path from the process root to the - object. This process is necessarily unreliable for several reasons: - intermediate entries in the path may not be found in the cache; files may - have more than one name (hard links), not all file systems use the name - cache (specifically, most synthetic file systems do not); a single name may - be used for more than one file (in the context of file systems covering - other file systems); a file may have no name (if deleted but still open or - referenced). However, the resulting string may still be more usable to a - user than a vnode pointer value, or a device number and inode number. Code - consuming the results of this function should anticipate (and properly - handle) failure.</p> -<p class="Pp">These functions take the following arguments:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode to search for. No need to be locked by the caller.</dd> - <dt><var class="Fa">retbuf</var></dt> - <dd>Pointer to a <var class="Vt">char *</var> that may be set (on success) to - point at a newly allocated buffer containing the resulting pathname.</dd> - <dt><var class="Fa">freebuf</var></dt> - <dd>Pointer to a <var class="Vt">char *</var> that may be set (on success) to - point at a buffer to be freed, when the caller is done with - <var class="Fa">retbuf</var>.</dd> -</dl> -<p class="Pp" id="vn_fullpath~4">Typical consumers will declare two character - pointers: <var class="Va">fullpath</var> and <var class="Va">freepath</var>; - they will set <var class="Va">freepath</var> to - <code class="Dv">NULL</code>, and <var class="Va">fullpath</var> to a name - to use in the event that the call to - <a class="permalink" href="#vn_fullpath~4"><code class="Fn">vn_fullpath</code></a>() - fails. After done with the value of <var class="Va">fullpath</var>, the - caller will check if <var class="Va">freepath</var> is - non-<code class="Dv">NULL</code>, and if so, invoke - <a class="Xr">free(9)</a> with a pool type of - <code class="Dv">M_TEMP</code>.</p> -<p class="Pp" id="vn_fullpath_hardlink">The - <a class="permalink" href="#vn_fullpath_hardlink"><code class="Fn">vn_fullpath_hardlink</code></a>() - function is a convenience wrapper which automatically appends the hardlink - name passed via arguments <var class="Fa">hrdl_name</var> and - <var class="Fa">hrdl_name_length</var> to the result of calling - <code class="Fn">vn_fullpath</code>() on the vnode's parent directory. It - requires the results of a prior call to <a class="Xr">namei(9)</a> with flag - <code class="Dv">WANTPARENT</code> to be passed in the - <var class="Fa">vp</var> and <var class="Fa">dvp</var> arguments. Argument - <var class="Fa">buflen</var> must point to a valid storage containing the - size of the desired buffer, which will be reduced to - <code class="Dv">MAXPATHLEN</code> if in excess of it.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If the vnode is successfully converted to a pathname, 0 is - returned; otherwise, an error number is returned.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">free(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was initially written by <span class="An">Robert - Watson</span> - <<a class="Mt" href="mailto:rwatson@FreeBSD.org">rwatson@FreeBSD.org</a>> - to describe the <code class="Fn">vn_fullpath</code>() function. The - descriptions of the other related functions were added by - <span class="An">Olivier Certner</span> - <<a class="Mt" href="mailto:olce@FreeBSD.org">olce@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">September 29, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vn_isdisk.9 4.html b/static/freebsd/man9/vn_isdisk.9 4.html deleted file mode 100644 index 03b82ee8..00000000 --- a/static/freebsd/man9/vn_isdisk.9 4.html +++ /dev/null @@ -1,67 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VN_ISDISK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VN_ISDISK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vn_isdisk</code> — <span class="Nd">checks - if a vnode represents a disk</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">vn_isdisk</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>);</p> -<p class="Pp"><var class="Ft">bool</var> - <br/> - <code class="Fn">vn_isdisk_error</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">int - *errp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vn_isdisk"><code class="Fn" id="vn_isdisk">vn_isdisk</code></a>() - and - <a class="permalink" href="#vn_isdisk_error"><code class="Fn" id="vn_isdisk_error">vn_isdisk_error</code></a>() - functions check to see if <var class="Fa">vp</var> represents a disk. In - order for <var class="Fa">vp</var> to be a disk, it must be a character - device, <var class="Va">v_rdev</var> must be valid, and the - <var class="Vt">cdevsw</var> entry's <var class="Va">flags</var> must have - <code class="Dv">D_DISK</code> set.</p> -<p class="Pp">The arguments are:</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>The vnode to check.</dd> - <dt><var class="Fa">errp</var></dt> - <dd>An integer pointer to store the error number in if the call fails.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">If the vnode represents a disk, true is returned; otherwise, false - is returned and <var class="Fa">errp</var> will contain the error - number.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad David</span> - <<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">June 28, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vnode.9 3.html b/static/freebsd/man9/vnode.9 3.html deleted file mode 100644 index 27868c6b..00000000 --- a/static/freebsd/man9/vnode.9 3.html +++ /dev/null @@ -1,153 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VNODE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VNODE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vnode</code> — <span class="Nd">internal - representation of a file or directory</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The vnode is the focus of all file activity in - <span class="Ux">UNIX</span>. A vnode is described by <var class="Vt">struct - vnode</var>. There is a unique vnode allocated for each active file, each - current directory, each mounted-on file, text file, and the root.</p> -<p class="Pp">Each vnode has three reference counts, - <var class="Va">v_usecount</var>, <var class="Va">v_holdcnt</var> and - <var class="Va">v_writecount</var>. The first is the number of clients - within the kernel which are using this vnode. This count is maintained by - <a class="Xr">vref(9)</a>, <a class="Xr">vrele(9)</a> and - <a class="Xr">vput(9)</a>. The second is the number of clients within the - kernel who veto the recycling of this vnode. This count is maintained by - <a class="Xr">vhold(9)</a> and <a class="Xr">vdrop(9)</a>. When both the - <var class="Va">v_usecount</var> and the <var class="Va">v_holdcnt</var> of - a vnode reaches zero then the vnode will be put on the freelist and may be - reused for another file, possibly in another file system. The transition - from the freelist is handled by <a class="Xr">getnewvnode(9)</a>. The third - is a count of the number of clients which are writing into the file. It is - maintained by the <a class="Xr">open(2)</a> and <a class="Xr">close(2)</a> - system calls.</p> -<p class="Pp">Any call which returns a vnode (e.g., <a class="Xr">vget(9)</a>, - <a class="Xr">VOP_LOOKUP(9)</a>, etc.) will increase the - <var class="Va">v_usecount</var> of the vnode by one. When the caller is - finished with the vnode, it should release this reference by calling - <a class="Xr">vrele(9)</a> (or <a class="Xr">vput(9)</a> if the vnode is - locked).</p> -<p class="Pp" id="VOP_*">Other commonly used members of the vnode structure are - <var class="Va">v_id</var> which is used to maintain consistency in the name - cache, <var class="Va">v_mount</var> which points at the file system which - owns the vnode, <var class="Va">v_type</var> which contains the type of - object the vnode represents and <var class="Va">v_data</var> which is used - by file systems to store file system specific data with the vnode. The - <var class="Va">v_op</var> field is used by the - <a class="permalink" href="#VOP_*"><code class="Fn">VOP_*</code></a>() - functions to call functions in the file system which implement the vnode's - functionality.</p> -<p class="Pp" id="VOP_*~2">The - <a class="permalink" href="#VOP_*~2"><code class="Fn">VOP_*</code></a>() - function declarations and definitions are generated from - <span class="Pa">sys/kern/vnode_if.src</span> by the - <span class="Pa">sys/tools/vnode_if.awk</span> script. The interfaces are - documented in their respective manual pages like - <a class="Xr">VOP_READ(9)</a> and <a class="Xr">VOP_WRITE(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="VNODE_TYPES"><a class="permalink" href="#VNODE_TYPES">VNODE - TYPES</a></h1> -<dl class="Bl-tag"> - <dt id="VNON"><a class="permalink" href="#VNON"><code class="Dv">VNON</code></a></dt> - <dd>No type.</dd> - <dt id="VREG"><a class="permalink" href="#VREG"><code class="Dv">VREG</code></a></dt> - <dd>A regular file; may be with or without VM object backing. If you want to - make sure this get a backing object, call - <a class="permalink" href="#vnode_create_vobject"><code class="Fn" id="vnode_create_vobject">vnode_create_vobject</code></a>().</dd> - <dt id="VDIR"><a class="permalink" href="#VDIR"><code class="Dv">VDIR</code></a></dt> - <dd>A directory.</dd> - <dt id="VBLK"><a class="permalink" href="#VBLK"><code class="Dv">VBLK</code></a></dt> - <dd>A block device; may be with or without VM object backing. If you want to - make sure this get a backing object, call - <code class="Fn">vnode_create_vobject</code>().</dd> - <dt id="VCHR"><a class="permalink" href="#VCHR"><code class="Dv">VCHR</code></a></dt> - <dd>A character device.</dd> - <dt id="VLNK"><a class="permalink" href="#VLNK"><code class="Dv">VLNK</code></a></dt> - <dd>A symbolic link.</dd> - <dt id="VSOCK"><a class="permalink" href="#VSOCK"><code class="Dv">VSOCK</code></a></dt> - <dd>A socket. Advisory locking will not work on this.</dd> - <dt id="VFIFO"><a class="permalink" href="#VFIFO"><code class="Dv">VFIFO</code></a></dt> - <dd>A FIFO (named pipe). Advisory locking will not work on this.</dd> - <dt id="VBAD"><a class="permalink" href="#VBAD"><code class="Dv">VBAD</code></a></dt> - <dd>Indicates that the vnode has been reclaimed.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">VFIFO uses the "struct fileops" from - <span class="Pa">/sys/kern/sys_pipe.c</span>. VSOCK uses the "struct - fileops" from <span class="Pa">/sys/kern/sys_socket.c</span>. - Everything else uses the one from - <span class="Pa">/sys/kern/vfs_vnops.c</span>.</p> -<p class="Pp">The VFIFO/VSOCK code, which is why "struct fileops" is - used at all, is an artifact of an incomplete integration of the VFS code - into the kernel.</p> -<p class="Pp">Calls to <a class="Xr">malloc(9)</a> or <a class="Xr">free(9)</a> - when holding a <code class="Nm">vnode</code> interlock, will cause a LOR - (Lock Order Reversal) due to the intertwining of VM Objects and Vnodes.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="FILES"><a class="permalink" href="#FILES">FILES</a></h1> -<dl class="Bl-tag Bl-compact"> - <dt><span class="Pa">sys/kern/vnode_if.src</span></dt> - <dd>The input file for <span class="Pa">sys/tools/vnode_if.awk</span>.</dd> - <dt><span class="Pa">sys/tools/vnode_if.awk</span></dt> - <dd>The script generating the source code of the - <code class="Fn">VOP_*</code>() functions.</dd> -</dl> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">malloc(9)</a>, <a class="Xr">VFS(9)</a>, - <a class="Xr">VOP_ACCESS(9)</a>, <a class="Xr">VOP_ACLCHECK(9)</a>, - <a class="Xr">VOP_ADVISE(9)</a>, <a class="Xr">VOP_ADVLOCK(9)</a>, - <a class="Xr">VOP_ALLOCATE(9)</a>, <a class="Xr">VOP_ATTRIB(9)</a>, - <a class="Xr">VOP_BWRITE(9)</a>, <a class="Xr">VOP_CREATE(9)</a>, - <a class="Xr">VOP_FSYNC(9)</a>, <a class="Xr">VOP_GETACL(9)</a>, - <a class="Xr">VOP_GETEXTATTR(9)</a>, <a class="Xr">VOP_GETPAGES(9)</a>, - <a class="Xr">VOP_INACTIVE(9)</a>, <a class="Xr">VOP_IOCTL(9)</a>, - <a class="Xr">VOP_LINK(9)</a>, <a class="Xr">VOP_LISTEXTATTR(9)</a>, - <a class="Xr">VOP_LOCK(9)</a>, <a class="Xr">VOP_LOOKUP(9)</a>, - <a class="Xr">VOP_OPENCLOSE(9)</a>, <a class="Xr">VOP_PATHCONF(9)</a>, - <a class="Xr">VOP_PRINT(9)</a>, <a class="Xr">VOP_RDWR(9)</a>, - <a class="Xr">VOP_READ_PGCACHE(9)</a>, <a class="Xr">VOP_READDIR(9)</a>, - <a class="Xr">VOP_READLINK(9)</a>, <a class="Xr">VOP_REALLOCBLKS(9)</a>, - <a class="Xr">VOP_REMOVE(9)</a>, <a class="Xr">VOP_RENAME(9)</a>, - <a class="Xr">VOP_REVOKE(9)</a>, <a class="Xr">VOP_SETACL(9)</a>, - <a class="Xr">VOP_SETEXTATTR(9)</a>, <a class="Xr">VOP_SETLABEL(9)</a>, - <a class="Xr">VOP_STRATEGY(9)</a>, <a class="Xr">VOP_VPTOCNP(9)</a>, - <a class="Xr">VOP_VPTOFH(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">July 15, 2025</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vnode_pager_purge_range.9 4.html b/static/freebsd/man9/vnode_pager_purge_range.9 4.html deleted file mode 100644 index fe6a0229..00000000 --- a/static/freebsd/man9/vnode_pager_purge_range.9 4.html +++ /dev/null @@ -1,71 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VNODE_PAGER_PURGE_RANGE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VNODE_PAGER_PURGE_RANGE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vnode_pager_purge_range</code> — - <span class="Nd">invalidate the cached content within the given byte - range</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_extern.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vnode_pager_purge_range</code>(<var class="Fa">struct vnode - *vp</var>, <var class="Fa">vm_ooffset_t start</var>, - <var class="Fa">vm_ooffset_t end</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><code class="Nm">vnode_pager_purge_range</code> invalidates the - cached content within the given byte range from the specified vnode - <var class="Fa">vp</var>. The range to be purged is - [<var class="Fa">start</var>, <var class="Fa">end</var>). If the - <var class="Fa">end</var> parameter is the value zero, the affected range - starts from <var class="Fa">start</var> continues to the end of the object. - Pages within the specified range will be removed from the object's queue. If - <var class="Fa">start</var> or <var class="Fa">end</var> is not aligned to a - page boundary, the invalidated part of the page is zeroed. This function - only cleans the resident pages in the affected region, it is up to the - callers to ensure reading the backing store gets back zeroes.</p> -<p class="Pp">In case the vnode <var class="Fa">vp</var> does not have a VM - object allocated, the effect of calling this function is a no-op.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The vnode must be locked on entry and will still be locked on - exit.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">vnode_pager_purge_range</code> manual page - first appeared in <span class="Ux">FreeBSD 14</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Ka Ho Ng</span> - <<a class="Mt" href="mailto:khng@FreeBSD.org">khng@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 24, 2022</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vnode_pager_setsize.9 4.html b/static/freebsd/man9/vnode_pager_setsize.9 4.html deleted file mode 100644 index 03626ef3..00000000 --- a/static/freebsd/man9/vnode_pager_setsize.9 4.html +++ /dev/null @@ -1,72 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VNODE_PAGER_SETSIZE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VNODE_PAGER_SETSIZE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vnode_pager_setsize</code> — - <span class="Nd">notify the VM system about updates in the file - size</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_extern.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vnode_pager_setsize</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>, <var class="Fa" style="white-space: nowrap;">vm_ooffset_t - nsize</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp"><code class="Nm">vnode_pager_setsize</code> lets the VM system - know about a change in size for a file, and updates the object size and - vnode pager size of the vm object in <var class="Fa">vp</var> with - <var class="Fa">nsize</var>. Page faults on the object mapping with offset - beyond the new object size results in <var class="Va">SIGBUS</var>.</p> -<p class="Pp">Pages between the old EOF and the new EOF are removed from the - object queue if the file size shrinks. In case the new EOF specified by the - <var class="Fa">nsize</var> argument is not aligned to page boundary, - partial-page area starting beyond the EOF is zeroed and marked invalid. if - the page exists resident.</p> -<p class="Pp">In case the vnode <var class="Fa">vp</var> does not have a VM - object allocated, the effect of calling this function is no-op.</p> -<p class="Pp">This function must be used within file system code to implement - truncation if the file system allocates vm objects for vnodes.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="LOCKS"><a class="permalink" href="#LOCKS">LOCKS</a></h1> -<p class="Pp">The vnode should be exclusively locked on entry and will still be - locked on exit.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vnode(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The <code class="Nm">vnode_pager_setsize</code> manual page first - appeared in <span class="Ux">FreeBSD 14</span>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Ka Ho Ng</span> - <<a class="Mt" href="mailto:khng@FreeBSD.org">khng@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">April 8, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vref.9 4.html b/static/freebsd/man9/vref.9 4.html deleted file mode 100644 index 56e1adf8..00000000 --- a/static/freebsd/man9/vref.9 4.html +++ /dev/null @@ -1,68 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VREF(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VREF(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vref</code>, <code class="Nm">vrefl</code> - — <span class="Nd">increment the use count for a vnode</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vref</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vrefl</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Increment the <var class="Va">v_usecount</var> field of a - vnode.</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>the vnode to increment</dd> -</dl> -<p class="Pp">Each vnode maintains a reference count of how many parts of the - system are using the vnode. This allows the system to detect when a vnode is - no longer being used and can be safely recycled for a different file.</p> -<p class="Pp" id="vref">Any code in the system which is using a vnode (e.g. - during the operation of some algorithm or to store in a data structure) - should call - <a class="permalink" href="#vref"><code class="Fn">vref</code></a>() or - <a class="permalink" href="#vrefl"><code class="Fn" id="vrefl">vrefl</code></a>().</p> -<p class="Pp" id="vref~2"><a class="permalink" href="#vref~2"><code class="Fn">vref</code></a>() - locks the vnode interlock while - <a class="permalink" href="#vrefl~2"><code class="Fn" id="vrefl~2">vrefl</code></a>() - expects the interlock to already be held.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vget(9)</a>, <a class="Xr">vnode(9)</a>, - <a class="Xr">vput(9)</a>, <a class="Xr">vrefcnt(9)</a>, - <a class="Xr">vrele(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 18, 2016</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vrefcnt.9 4.html b/static/freebsd/man9/vrefcnt.9 4.html deleted file mode 100644 index 855d026e..00000000 --- a/static/freebsd/man9/vrefcnt.9 4.html +++ /dev/null @@ -1,48 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VREFCNT(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VREFCNT(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vrefcnt</code> — <span class="Nd">returns - the use count of a vnode</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vrefcnt</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Returns the use count of a vnode.</p> -<p class="Pp">See <a class="Xr">vnode(9)</a> for a detailed description of the - vnode reference counts.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vget(9)</a>, <a class="Xr">vnode(9)</a>, - <a class="Xr">vput(9)</a>, <a class="Xr">vrele(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Chad - David</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 10, 2008</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vrele.9 4.html b/static/freebsd/man9/vrele.9 4.html deleted file mode 100644 index 09d1a7bd..00000000 --- a/static/freebsd/man9/vrele.9 4.html +++ /dev/null @@ -1,85 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VRELE(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VRELE(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vput</code>, <code class="Nm">vrele</code>, - <code class="Nm">vunref</code> — <span class="Nd">decrement the use - count for a vnode</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/vnode.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vput</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vrele</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vunref</code>(<var class="Fa" style="white-space: nowrap;">struct - vnode *vp</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">Decrement the <var class="Va">v_usecount</var> field of a - vnode.</p> -<dl class="Bl-tag"> - <dt><var class="Fa">vp</var></dt> - <dd>the vnode to decrement</dd> -</dl> -<p class="Pp" id="vrele">The - <a class="permalink" href="#vrele"><code class="Fn">vrele</code></a>() - function takes an unlocked vnode and returns with the vnode unlocked.</p> -<p class="Pp" id="vput">The - <a class="permalink" href="#vput"><code class="Fn">vput</code></a>() - function should be given a locked vnode as argument, the vnode is unlocked - after the function returned. The <code class="Fn">vput</code>() is - operationally equivalent to calling <a class="Xr">VOP_UNLOCK(9)</a> followed - by <code class="Fn">vrele</code>(), with less overhead.</p> -<p class="Pp" id="vunref">The - <a class="permalink" href="#vunref"><code class="Fn">vunref</code></a>() - function takes a locked vnode as argument, and returns with the vnode - locked.</p> -<p class="Pp">Any code in the system which signified its use of a vnode by - usecount should call one of the listed function to decrement use counter. If - the <var class="Va">v_usecount</var> field of the non-doomed vnode reaches - zero, then it will be inactivated and placed on the free list.</p> -<p class="Pp" id="vrele~2">The - <a class="permalink" href="#vrele~2"><code class="Fn">vrele</code></a>() - function may lock the vnode. All three functions may sleep.</p> -<p class="Pp">The hold count for the vnode is always greater or equal to the - usecount. Non-forced unmount fails when mount point owns a vnode that has - non-zero usecount, see <a class="Xr">vflush(9)</a>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">vget(9)</a>, <a class="Xr">vnode(9)</a>, - <a class="Xr">vref(9)</a>, <a class="Xr">vrefcnt(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Doug - Rabson</span> and - <br/> - <span class="An">Konstantin Belousov</span>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 24, 2016</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/vslock.9 4.html b/static/freebsd/man9/vslock.9 4.html deleted file mode 100644 index 348a61d9..00000000 --- a/static/freebsd/man9/vslock.9 4.html +++ /dev/null @@ -1,79 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">VSLOCK(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">VSLOCK(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">vslock</code>, <code class="Nm">vsunlock</code> - — <span class="Nd">lock/unlock user space addresses in - memory</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/proc.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_extern.h</a>></code></p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">vslock</code>(<var class="Fa" style="white-space: nowrap;">void - *addr</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">vsunlock</code>(<var class="Fa" style="white-space: nowrap;">void - *addr</var>, <var class="Fa" style="white-space: nowrap;">size_t - len</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The - <a class="permalink" href="#vslock"><code class="Fn" id="vslock">vslock</code></a>() - and - <a class="permalink" href="#vsunlock"><code class="Fn" id="vsunlock">vsunlock</code></a>() - functions respectively lock and unlock a range of addresses belonging to the - currently running process into memory. The actual amount of memory locked is - a multiple of the machine's page size. The starting page number is computed - by truncating <var class="Fa">addr</var> to the nearest preceding page - boundary, and by rounding up <var class="Fa">addr +</var> - <var class="Fa">len</var> to the next page boundary. The process context to - use for this operation is taken from the global variable - <var class="Va">curproc</var>.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN - VALUES</a></h1> -<p class="Pp">The <code class="Fn">vslock</code>() function will return 0 on - success, otherwise it will return one of the errors listed below.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="ERRORS"><a class="permalink" href="#ERRORS">ERRORS</a></h1> -<p class="Pp">The <code class="Fn">vslock</code>() function will fail if:</p> -<dl class="Bl-tag"> - <dt id="EINVAL">[<a class="permalink" href="#EINVAL"><code class="Er">EINVAL</code></a>]</dt> - <dd>The <var class="Fa">addr</var> and <var class="Fa">len</var> parameters - specify a memory range that wraps around the end of the machine address - space.</dd> - <dt id="ENOMEM">[<a class="permalink" href="#ENOMEM"><code class="Er">ENOMEM</code></a>]</dt> - <dd>The size of the specified address range exceeds the system limit on locked - memory.</dd> - <dt id="EFAULT">[<a class="permalink" href="#EFAULT"><code class="Er">EFAULT</code></a>]</dt> - <dd>Some portion of the indicated address range is not allocated. There was an - error faulting/mapping a page.</dd> -</dl> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">August 29, 2012</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/watchdog.9 4.html b/static/freebsd/man9/watchdog.9 4.html deleted file mode 100644 index 71192669..00000000 --- a/static/freebsd/man9/watchdog.9 4.html +++ /dev/null @@ -1,71 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">WATCHDOG(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">WATCHDOG(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">watchdog</code> — - <span class="Nd">software and hardware watchdog facility</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/watchdog.h</a>></code></p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">watchdog_fn</code>(<var class="Fa" style="white-space: nowrap;">void - *private</var>, <var class="Fa" style="white-space: nowrap;">u_int - cmd</var>, <var class="Fa" style="white-space: nowrap;">int - *error</var>);</p> -<p class="Pp"><code class="Fn">EVENTHANDLER_REGISTER</code>(<var class="Fa" style="white-space: nowrap;">watchdog_list</var>, - <var class="Fa" style="white-space: nowrap;">watchdog_fn</var>, - <var class="Fa" style="white-space: nowrap;">private</var>, - <var class="Fa" style="white-space: nowrap;">0</var>);</p> -<p class="Pp"><code class="Fn">EVENTHANDLER_DEREGISTER</code>(<var class="Fa" style="white-space: nowrap;">watchdog_list</var>, - <var class="Fa" style="white-space: nowrap;">eventhandler_tag</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">To implement a watchdog in software or hardware, only a single - function needs to be written and registered on the global - <var class="Va">watchdog_list</var>.</p> -<p class="Pp">The function must examine the <var class="Fa">cmd</var> argument - and act on it as follows:</p> -<p class="Pp">If <var class="Fa">cmd</var> is zero, the watchdog must be - disabled and the <var class="Fa">error</var> argument left untouched. If the - watchdog cannot be disabled, the <var class="Fa">error</var> argument must - be set to <code class="Dv">EOPNOTSUPP</code>.</p> -<p class="Pp">Else the watchdog should be reset and configured to a timeout of - (1 << (<var class="Fa">cmd</var> <span class="No">&</span> - <code class="Dv">WD_INTERVAL</code>)) nanoseconds or larger and the - <var class="Fa">error</var> argument be set to zero to signal arming of a - watchdog.</p> -<p class="Pp">If the watchdog cannot be configured to the proposed timeout, it - must be disabled and the <var class="Fa">error</var> argument left as is (to - avoid hiding the arming of another watchdog).</p> -<p class="Pp">There is no specification of what the watchdog should do when it - times out, but a hardware reset or similar “drastic but - certain” behaviour is recommended.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">watchdog(4)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The <code class="Nm">watchdog</code> facility and this manual page - was written <span class="An">Poul-Henning Kamp</span> - <<a class="Mt" href="mailto:phk@FreeBSD.org">phk@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">February 28, 2004</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/zero_region.9 4.html b/static/freebsd/man9/zero_region.9 4.html deleted file mode 100644 index cedfbea5..00000000 --- a/static/freebsd/man9/zero_region.9 4.html +++ /dev/null @@ -1,85 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">ZERO_REGION(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">ZERO_REGION(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">zero_region</code> — - <span class="Nd">Read-only region prefilled with zeroes</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/systm.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/vm_param.h</a>></code></p> -<p class="Pp"><var class="Vt">extern const void *zero_region</var>;</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">The global variable <var class="Va">zero_region</var> points to a - read-only region prefilled with zeroes. The size of the region is specified - by the <code class="Dv">ZERO_REGION_SIZE</code> macro.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">The region <var class="Va">zero_region</var> points to is mapped - to the same page multiple times.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> -<div class="Bd Li"> -<pre>/* - * This function writes zeroes to the vnode at offset 0 - * with ZERO_REGION_SIZE length. - */ -static int -write_example(struct vnode *vp) -{ - struct thread *td; - struct iovec aiov; - struct uio auio; - int error; - - td = curthread; - - aiov.iov_base = __DECONST(void *, zero_region); - aiov.iov_len = ZERO_REGION_SIZE; - auio.uio_iov = &aiov; - auio.uio_iovcnt = 1; - auio.uio_offset = 0; - auio.uio_resid = ZERO_REGION_SIZE; - auio.uio_segflg = UIO_SYSSPACE; - auio.uio_rw = UIO_WRITE; - auio.uio_td = td; - - error = VOP_WRITE(vp, &auio, 0, td->td_ucred); - return (error); -}</pre> -</div> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">pmap(9)</a>, <a class="Xr">vm_map(9)</a></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">This manual page was written by <span class="An">Ka Ho Ng</span> - <<a class="Mt" href="mailto:khng@FreeBSDFoundation.org">khng@FreeBSDFoundation.org</a>> - under sponsorship from the FreeBSD Foundation.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">March 2, 2021</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> diff --git a/static/freebsd/man9/zone.9 3.html b/static/freebsd/man9/zone.9 3.html deleted file mode 100644 index e45ef578..00000000 --- a/static/freebsd/man9/zone.9 3.html +++ /dev/null @@ -1,596 +0,0 @@ -<table class="head"> - <tr> - <td class="head-ltitle">UMA(9)</td> - <td class="head-vol">Kernel Developer's Manual</td> - <td class="head-rtitle">UMA(9)</td> - </tr> -</table> -<div class="manual-text"> -<section class="Sh"> -<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> -<p class="Pp"><code class="Nm">UMA</code> — - <span class="Nd">general-purpose kernel object allocator</span></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> -<p class="Pp"><code class="In">#include - <<a class="In">sys/param.h</a>></code> - <br/> - <code class="In">#include <<a class="In">sys/queue.h</a>></code> - <br/> - <code class="In">#include <<a class="In">vm/uma.h</a>></code></p> -<div class="Bd Pp Li"> -<pre>typedef int (*uma_ctor)(void *mem, int size, void *arg, int flags); -typedef void (*uma_dtor)(void *mem, int size, void *arg); -typedef int (*uma_init)(void *mem, int size, int flags); -typedef void (*uma_fini)(void *mem, int size); -typedef int (*uma_import)(void *arg, void **store, int count, int domain, - int flags); -typedef void (*uma_release)(void *arg, void **store, int count); -typedef void *(*uma_alloc)(uma_zone_t zone, vm_size_t size, int domain, - uint8_t *pflag, int wait); -typedef void (*uma_free)(void *item, vm_size_t size, uint8_t pflag); - -</pre> -</div> -<br/> -<var class="Ft">uma_zone_t</var> -<br/> -<code class="Fn">uma_zcreate</code>(<var class="Fa">char *name</var>, - <var class="Fa">size_t size</var>, <var class="Fa">uma_ctor ctor</var>, - <var class="Fa">uma_dtor dtor</var>, <var class="Fa">uma_init zinit</var>, - <var class="Fa">uma_fini zfini</var>, <var class="Fa">int align</var>, - <var class="Fa">uint16_t flags</var>); -<p class="Pp"><var class="Ft">uma_zone_t</var> - <br/> - <code class="Fn">uma_zcache_create</code>(<var class="Fa">char *name</var>, - <var class="Fa">int size</var>, <var class="Fa">uma_ctor ctor</var>, - <var class="Fa">uma_dtor dtor</var>, <var class="Fa">uma_init zinit</var>, - <var class="Fa">uma_fini zfini</var>, <var class="Fa">uma_import - zimport</var>, <var class="Fa">uma_release zrelease</var>, - <var class="Fa">void *arg</var>, <var class="Fa">int flags</var>);</p> -<p class="Pp"><var class="Ft">uma_zone_t</var> - <br/> - <code class="Fn">uma_zsecond_create</code>(<var class="Fa">char *name</var>, - <var class="Fa">uma_ctor ctor</var>, <var class="Fa">uma_dtor dtor</var>, - <var class="Fa">uma_init zinit</var>, <var class="Fa">uma_fini zfini</var>, - <var class="Fa">uma_zone_t master</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">uma_zdestroy</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">uma_zalloc</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">uma_zalloc_arg</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">void *arg</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">uma_zalloc_domain</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">void *arg</var>, - <var class="Fa" style="white-space: nowrap;">int domain</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">uma_zalloc_pcpu</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">uma_zalloc_pcpu_arg</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">void *arg</var>, - <var class="Fa" style="white-space: nowrap;">int flags</var>);</p> -<p class="Pp"><var class="Ft">void *</var> - <br/> - <code class="Fn">uma_zalloc_smr</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">int - flags</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">uma_zfree</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">void - *item</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">uma_zfree_arg</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">void *item</var>, - <var class="Fa" style="white-space: nowrap;">void *arg</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">uma_zfree_pcpu</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">void - *item</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">uma_zfree_pcpu_arg</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">void *item</var>, - <var class="Fa" style="white-space: nowrap;">void *arg</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">uma_zfree_smr</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">void - *item</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">uma_prealloc</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">int - nitems</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">uma_zone_reserve</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">int - nitems</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">uma_zone_reserve_kva</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">int - nitems</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">uma_reclaim</code>(<var class="Fa" style="white-space: nowrap;">int - req</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">uma_reclaim_domain</code>(<var class="Fa" style="white-space: nowrap;">int - req</var>, <var class="Fa" style="white-space: nowrap;">int - domain</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">uma_zone_reclaim</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">int req</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">uma_zone_reclaim_domain</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">int req</var>, - <var class="Fa" style="white-space: nowrap;">int domain</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">uma_zone_set_allocf</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">uma_alloc - allocf</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">uma_zone_set_freef</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">uma_free - freef</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">uma_zone_set_max</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">int - nitems</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">uma_zone_set_maxcache</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">int - nitems</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">uma_zone_get_max</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>);</p> -<p class="Pp"><var class="Ft">int</var> - <br/> - <code class="Fn">uma_zone_get_cur</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">uma_zone_set_warning</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">const char - *warning</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">uma_zone_set_maxaction</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">void - (*maxaction)(uma_zone_t)</var>);</p> -<p class="Pp"><var class="Ft">smr_t</var> - <br/> - <code class="Fn">uma_zone_get_smr</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>);</p> -<p class="Pp"><var class="Ft">void</var> - <br/> - <code class="Fn">uma_zone_set_smr</code>(<var class="Fa" style="white-space: nowrap;">uma_zone_t - zone</var>, <var class="Fa" style="white-space: nowrap;">smr_t - smr</var>);</p> -<p class="Pp"><code class="In">#include - <<a class="In">sys/sysctl.h</a>></code></p> -<p class="Pp"><code class="Fn">SYSCTL_UMA_MAX</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">nbr</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">access</var>, - <var class="Fa" style="white-space: nowrap;">zone</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_ADD_UMA_MAX</code>(<var class="Fa" style="white-space: nowrap;">ctx</var>, - <var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">nbr</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">access</var>, - <var class="Fa" style="white-space: nowrap;">zone</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_UMA_CUR</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">nbr</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">access</var>, - <var class="Fa" style="white-space: nowrap;">zone</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -<p class="Pp"><code class="Fn">SYSCTL_ADD_UMA_CUR</code>(<var class="Fa" style="white-space: nowrap;">ctx</var>, - <var class="Fa" style="white-space: nowrap;">parent</var>, - <var class="Fa" style="white-space: nowrap;">nbr</var>, - <var class="Fa" style="white-space: nowrap;">name</var>, - <var class="Fa" style="white-space: nowrap;">access</var>, - <var class="Fa" style="white-space: nowrap;">zone</var>, - <var class="Fa" style="white-space: nowrap;">descr</var>);</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> -<p class="Pp">UMA (Universal Memory Allocator) provides an efficient interface - for managing dynamically-sized collections of items of identical size, - referred to as zones. Zones keep track of which items are in use and which - are not, and UMA provides functions for allocating items from a zone and for - releasing them back, making them available for subsequent allocation - requests. Zones maintain per-CPU caches with linear scalability on SMP - systems as well as round-robin and first-touch policies for NUMA systems. - The number of items cached per CPU is bounded, and each zone additionally - maintains an unbounded cache of items that is used to quickly satisfy - per-CPU cache allocation misses.</p> -<p class="Pp">Two types of zones exist: regular zones and cache zones. In a - regular zone, items are allocated from a slab, which is one or more - virtually contiguous memory pages that have been allocated from the kernel's - page allocator. Internally, slabs are managed by a UMA keg, which is - responsible for allocating slabs and keeping track of their usage by one or - more zones. In typical usage, there is one keg per zone, so slabs are not - shared among multiple zones.</p> -<p class="Pp">Normal zones import items from a keg, and release items back to - that keg if requested. Cache zones do not have a keg, and instead use custom - import and release methods. For example, some collections of kernel objects - are statically allocated at boot-time, and the size of the collection does - not change. A cache zone can be used to implement an efficient allocator for - the objects in such a collection.</p> -<p class="Pp" id="uma_zcreate">The - <a class="permalink" href="#uma_zcreate"><code class="Fn">uma_zcreate</code></a>() - and <code class="Fn">uma_zcache_create</code>() functions create a new - regular zone and cache zone, respectively. The - <a class="permalink" href="#uma_zsecond_create"><code class="Fn" id="uma_zsecond_create">uma_zsecond_create</code></a>() - function creates a regular zone which shares the keg of the zone specified - by the <var class="Fa">master</var> argument. The <var class="Fa">name</var> - argument is a text name of the zone for debugging and stats; this memory - should not be freed until the zone has been deallocated.</p> -<p class="Pp" id="uma_zalloc">The <var class="Fa">ctor</var> and - <var class="Fa">dtor</var> arguments are callback functions that are called - by the UMA subsystem at the time of the call to - <a class="permalink" href="#uma_zalloc"><code class="Fn">uma_zalloc</code></a>() - and <code class="Fn">uma_zfree</code>() respectively. Their purpose is to - provide hooks for initializing or destroying things that need to be done at - the time of the allocation or release of a resource. A good usage for the - <var class="Fa">ctor</var> and <var class="Fa">dtor</var> callbacks might be - to initialize a data structure embedded in the item, such as a - <a class="Xr">queue(3)</a> head.</p> -<p class="Pp" id="uma_zalloc~2">The <var class="Fa">zinit</var> and - <var class="Fa">zfini</var> arguments are used to optimize the allocation of - items from the zone. They are called by the UMA subsystem whenever it needs - to allocate or free items to satisfy requests or memory pressure. A good use - for the <var class="Fa">zinit</var> and <var class="Fa">zfini</var> - callbacks might be to initialize and destroy a mutex contained within an - item. This would allow one to avoid destroying and re-initializing the mutex - each time the item is freed and re-allocated. They are not called on each - call to - <a class="permalink" href="#uma_zalloc~2"><code class="Fn">uma_zalloc</code></a>() - and <code class="Fn">uma_zfree</code>() but rather when an item is imported - into a zone's cache, and when a zone releases an item to the slab allocator, - typically as a response to memory pressure.</p> -<p class="Pp" id="uma_zcache_create">For - <a class="permalink" href="#uma_zcache_create"><code class="Fn">uma_zcache_create</code></a>(), - the <var class="Fa">zimport</var> and <var class="Fa">zrelease</var> - functions are called to import items into the zone and to release items from - the zone, respectively. The <var class="Fa">zimport</var> function should - store pointers to items in the <var class="Fa">store</var> array, which - contains a maximum of <var class="Fa">count</var> entries. The function must - return the number of imported items, which may be less than the maximum. - Similarly, the <var class="Fa">store</var> parameter to the - <var class="Fa">zrelease</var> function contains an array of - <var class="Fa">count</var> pointers to items. The <var class="Fa">arg</var> - parameter passed to <code class="Fn">uma_zcache_create</code>() is provided - to the import and release functions. The <var class="Fa">domain</var> - parameter to <var class="Fa">zimport</var> specifies the requested - <a class="Xr">numa(4)</a> domain for the allocation. It is either a NUMA - domain number or the special value - <code class="Dv">UMA_ANYDOMAIN</code>.</p> -<p class="Pp" id="uma_zcreate~2">The <var class="Fa">flags</var> argument of - <a class="permalink" href="#uma_zcreate~2"><code class="Fn">uma_zcreate</code></a>() - and <code class="Fn">uma_zcache_create</code>() is a subset of the following - flags:</p> -<dl class="Bl-tag"> - <dt id="UMA_ZONE_NOFREE"><a class="permalink" href="#UMA_ZONE_NOFREE"><code class="Dv">UMA_ZONE_NOFREE</code></a></dt> - <dd>Slabs allocated to the zone's keg are never freed.</dd> - <dt id="UMA_ZONE_NODUMP"><a class="permalink" href="#UMA_ZONE_NODUMP"><code class="Dv">UMA_ZONE_NODUMP</code></a></dt> - <dd>Pages belonging to the zone will not be included in minidumps.</dd> - <dt id="UMA_ZONE_PCPU"><a class="permalink" href="#UMA_ZONE_PCPU"><code class="Dv">UMA_ZONE_PCPU</code></a></dt> - <dd>An allocation from zone would have <var class="Va">mp_ncpu</var> shadow - copies, that are privately assigned to CPUs. A CPU can address its private - copy using base the allocation address plus a multiple of the current CPU - ID and - <a class="permalink" href="#sizeof"><code class="Fn" id="sizeof">sizeof</code></a>(<var class="Fa">struct - pcpu</var>): - <div class="Bd Pp Bd-indent Li"> - <pre>foo_zone = uma_zcreate(..., UMA_ZONE_PCPU); - ... -foo_base = uma_zalloc(foo_zone, ...); - ... -critical_enter(); -foo_pcpu = (foo_t *)zpcpu_get(foo_base); -/* do something with foo_pcpu */ -critical_exit(); - - </pre> - </div> - Note that <code class="Dv">M_ZERO</code> cannot be used when allocating - items from a PCPU zone. To obtain zeroed memory from a PCPU zone, use the - <code class="Fn">uma_zalloc_pcpu</code>() function and its variants - instead, and pass <code class="Dv">M_ZERO</code>.</dd> - <dt id="UMA_ZONE_NOTOUCH"><a class="permalink" href="#UMA_ZONE_NOTOUCH"><code class="Dv">UMA_ZONE_NOTOUCH</code></a></dt> - <dd>The UMA subsystem may not directly touch (i.e. read or write) the slab - memory. Otherwise, by default, book-keeping of items within a slab may be - done in the slab page itself, and <code class="Dv">INVARIANTS</code> - kernels may also do use-after-free checking by accessing the slab - memory.</dd> - <dt id="UMA_ZONE_ZINIT"><a class="permalink" href="#UMA_ZONE_ZINIT"><code class="Dv">UMA_ZONE_ZINIT</code></a></dt> - <dd>The zone will have its <var class="Ft">uma_init</var> method set to - internal method that initializes a new allocated slab to all zeros. Do not - mistake <var class="Ft">uma_init</var> method with - <var class="Ft">uma_ctor</var>. A zone with - <code class="Dv">UMA_ZONE_ZINIT</code> flag would not return zeroed memory - on every <code class="Fn">uma_zalloc</code>().</dd> - <dt id="UMA_ZONE_NOTPAGE"><a class="permalink" href="#UMA_ZONE_NOTPAGE"><code class="Dv">UMA_ZONE_NOTPAGE</code></a></dt> - <dd>An allocator function will be supplied with - <code class="Fn">uma_zone_set_allocf</code>() and the memory that it - returns may not be kernel virtual memory backed by VM pages in the page - array.</dd> - <dt id="UMA_ZONE_MALLOC"><a class="permalink" href="#UMA_ZONE_MALLOC"><code class="Dv">UMA_ZONE_MALLOC</code></a></dt> - <dd>The zone is for the <a class="Xr">malloc(9)</a> subsystem.</dd> - <dt id="UMA_ZONE_VM"><a class="permalink" href="#UMA_ZONE_VM"><code class="Dv">UMA_ZONE_VM</code></a></dt> - <dd>The zone is for the VM subsystem.</dd> - <dt id="UMA_ZONE_CONTIG"><a class="permalink" href="#UMA_ZONE_CONTIG"><code class="Dv">UMA_ZONE_CONTIG</code></a></dt> - <dd>Items in this zone must be contiguous in physical address space. Items - will follow normal alignment constraints and may span page boundaries - between pages with contiguous physical addresses.</dd> - <dt id="UMA_ZONE_UNMANAGED"><a class="permalink" href="#UMA_ZONE_UNMANAGED"><code class="Dv">UMA_ZONE_UNMANAGED</code></a></dt> - <dd>By default, UMA zone caches are shrunk to help resolve free page - shortages. Cached items that have not been used for a long period may also - be freed from zone. When this flag is set, the system will not reclaim - memory from the zone's caches.</dd> - <dt id="UMA_ZONE_SMR"><a class="permalink" href="#UMA_ZONE_SMR"><code class="Dv">UMA_ZONE_SMR</code></a></dt> - <dd>Create a zone whose items will be synchronized using the - <a class="Xr">smr(9)</a> mechanism. Upon creation the zone will have an - associated <var class="Ft">smr_t</var> structure which can be fetched - using - <a class="permalink" href="#uma_zone_get_smr"><code class="Fn" id="uma_zone_get_smr">uma_zone_get_smr</code></a>().</dd> -</dl> -<p class="Pp" id="uma_zdestroy">Zones can be destroyed using - <a class="permalink" href="#uma_zdestroy"><code class="Fn">uma_zdestroy</code></a>(), - freeing all memory that is cached in the zone. All items allocated from the - zone must be freed to the zone before the zone may be safely destroyed.</p> -<p class="Pp" id="uma_zalloc~3">To allocate an item from a zone, simply call - <a class="permalink" href="#uma_zalloc~3"><code class="Fn">uma_zalloc</code></a>() - with a pointer to that zone and set the <var class="Fa">flags</var> argument - to selected flags as documented in <a class="Xr">malloc(9)</a>. It will - return a pointer to an item if successful, or <code class="Dv">NULL</code> - in the rare case where all items in the zone are in use and the allocator is - unable to grow the zone and <code class="Dv">M_NOWAIT</code> is - specified.</p> -<p class="Pp" id="uma_zfree">Items are released back to the zone from which they - were allocated by calling - <a class="permalink" href="#uma_zfree"><code class="Fn">uma_zfree</code></a>() - with a pointer to the zone and a pointer to the item. If - <var class="Fa">item</var> is <code class="Dv">NULL</code>, then - <code class="Fn">uma_zfree</code>() does nothing.</p> -<p class="Pp" id="uma_zalloc_arg">The variants - <a class="permalink" href="#uma_zalloc_arg"><code class="Fn">uma_zalloc_arg</code></a>() - and - <a class="permalink" href="#uma_zfree_arg"><code class="Fn" id="uma_zfree_arg">uma_zfree_arg</code></a>() - allow callers to specify an argument for the <code class="Dv">ctor</code> - and <code class="Dv">dtor</code> functions of the zone, respectively. The - variants - <a class="permalink" href="#uma_zalloc_pcpu"><code class="Fn" id="uma_zalloc_pcpu">uma_zalloc_pcpu</code></a>() - and - <a class="permalink" href="#uma_zfree_pcpu"><code class="Fn" id="uma_zfree_pcpu">uma_zfree_pcpu</code></a>() - allocate and free <var class="Va">mp_ncpu</var> shadow copies as described - for <code class="Dv">UMA_ZONE_PCPU</code>. If <var class="Fa">item</var> is - <code class="Dv">NULL</code>, then <code class="Fn">uma_zfree_pcpu</code>() - does nothing.</p> -<p class="Pp" id="uma_zalloc_smr">The - <a class="permalink" href="#uma_zalloc_smr"><code class="Fn">uma_zalloc_smr</code></a>() - and - <a class="permalink" href="#uma_zfree_smr"><code class="Fn" id="uma_zfree_smr">uma_zfree_smr</code></a>() - functions allocate and free items from an SMR-enabled zone, that is, a zone - created with <code class="Dv">UMA_ZONE_SMR</code> or a zone that has had - <code class="Fn">uma_zone_set_smr</code>() called.</p> -<p class="Pp" id="uma_zalloc_domain">The - <a class="permalink" href="#uma_zalloc_domain"><code class="Fn">uma_zalloc_domain</code></a>() - function allows callers to specify a fixed <a class="Xr">numa(4)</a> domain - to allocate from. This uses a guaranteed but slow path in the allocator - which reduces concurrency.</p> -<p class="Pp" id="uma_prealloc">The - <a class="permalink" href="#uma_prealloc"><code class="Fn">uma_prealloc</code></a>() - function allocates slabs for the requested number of items, typically - following the initial creation of a zone. Subsequent allocations from the - zone will be satisfied using the pre-allocated slabs. Note that slab - allocation is performed with the <code class="Dv">M_WAITOK</code> flag, so - <code class="Fn">uma_prealloc</code>() may sleep.</p> -<p class="Pp" id="uma_zone_reserve">The - <a class="permalink" href="#uma_zone_reserve"><code class="Fn">uma_zone_reserve</code></a>() - function sets the number of reserved items for the zone. - <code class="Fn">uma_zalloc</code>() and variants will ensure that the zone - contains at least the reserved number of free items. Reserved items may be - allocated by specifying <code class="Dv">M_USE_RESERVE</code> in the - allocation request flags. <code class="Fn">uma_zone_reserve</code>() does - not perform any pre-allocation by itself.</p> -<p class="Pp" id="uma_zone_reserve_kva">The - <a class="permalink" href="#uma_zone_reserve_kva"><code class="Fn">uma_zone_reserve_kva</code></a>() - function pre-allocates kernel virtual address space for the requested number - of items. Subsequent allocations from the zone will be satisfied using the - pre-allocated address space. Note that unlike - <code class="Fn">uma_zone_reserve</code>(), - <code class="Fn">uma_zone_reserve_kva</code>() does not restrict the use of - the pre-allocation to <code class="Dv">M_USE_RESERVE</code> requests.</p> -<p class="Pp" id="uma_reclaim">The - <a class="permalink" href="#uma_reclaim"><code class="Fn">uma_reclaim</code></a>() - and - <a class="permalink" href="#uma_zone_reclaim"><code class="Fn" id="uma_zone_reclaim">uma_zone_reclaim</code></a>() - functions reclaim cached items from UMA zones, releasing unused memory. The - <code class="Fn">uma_reclaim</code>() function reclaims items from all - regular zones, while <code class="Fn">uma_zone_reclaim</code>() reclaims - items only from the specified zone. The <var class="Fa">req</var> parameter - must be one of three values which specify how aggressively items are to be - reclaimed:</p> -<dl class="Bl-tag"> - <dt id="UMA_RECLAIM_TRIM"><a class="permalink" href="#UMA_RECLAIM_TRIM"><code class="Dv">UMA_RECLAIM_TRIM</code></a></dt> - <dd>Reclaim items only in excess of the zone's estimated working set size. The - working set size is periodically updated and tracks the recent history of - the zone's usage.</dd> - <dt id="UMA_RECLAIM_DRAIN"><a class="permalink" href="#UMA_RECLAIM_DRAIN"><code class="Dv">UMA_RECLAIM_DRAIN</code></a></dt> - <dd>Reclaim all items from the unbounded cache. Free items in the per-CPU - caches are left alone.</dd> - <dt id="UMA_RECLAIM_DRAIN_CPU"><a class="permalink" href="#UMA_RECLAIM_DRAIN_CPU"><code class="Dv">UMA_RECLAIM_DRAIN_CPU</code></a></dt> - <dd>Reclaim all cached items.</dd> -</dl> -The - <a class="permalink" href="#uma_reclaim_domain"><code class="Fn" id="uma_reclaim_domain">uma_reclaim_domain</code></a>() - and - <a class="permalink" href="#uma_zone_reclaim_domain"><code class="Fn" id="uma_zone_reclaim_domain">uma_zone_reclaim_domain</code></a>() - functions apply only to items allocated from the specified domain. In the case - of domains using a round-robin NUMA policy, cached items from all domains are - freed to the keg, but only slabs from the specific domain will be freed. -<p class="Pp" id="uma_zone_set_allocf">The - <a class="permalink" href="#uma_zone_set_allocf"><code class="Fn">uma_zone_set_allocf</code></a>() - and - <a class="permalink" href="#uma_zone_set_freef"><code class="Fn" id="uma_zone_set_freef">uma_zone_set_freef</code></a>() - functions allow a zone's default slab allocation and free functions to be - overridden. This is useful if memory with special constraints such as - attributes, alignment, or address ranges must be used.</p> -<p class="Pp" id="uma_zone_set_max">The - <a class="permalink" href="#uma_zone_set_max"><code class="Fn">uma_zone_set_max</code></a>() - function limits the number of items (and therefore memory) that can be - allocated to <var class="Fa">zone</var>. The <var class="Fa">nitems</var> - argument specifies the requested upper limit number of items. The effective - limit is returned to the caller, as it may end up being higher than - requested due to the implementation rounding up to ensure all memory pages - allocated to the zone are utilised to capacity. The limit applies to the - total number of items in the zone, which includes allocated items, free - items and free items in the per-cpu caches. On systems with more than one - CPU it may not be possible to allocate the specified number of items even - when there is no shortage of memory, because all of the remaining free items - may be in the caches of the other CPUs when the limit is hit.</p> -<p class="Pp" id="uma_zone_set_maxcache">The - <a class="permalink" href="#uma_zone_set_maxcache"><code class="Fn">uma_zone_set_maxcache</code></a>() - function limits the number of free items which may be cached in the zone. - This limit applies to both the per-CPU caches and the cache of free - buckets.</p> -<p class="Pp" id="uma_zone_get_max">The - <a class="permalink" href="#uma_zone_get_max"><code class="Fn">uma_zone_get_max</code></a>() - function returns the effective upper limit number of items for a zone.</p> -<p class="Pp" id="uma_zone_get_cur">The - <a class="permalink" href="#uma_zone_get_cur"><code class="Fn">uma_zone_get_cur</code></a>() - function returns an approximation of the number of items currently allocated - from the zone. The returned value is approximate because appropriate - synchronisation to determine an exact value is not performed by the - implementation. This ensures low overhead at the expense of potentially - stale data being used in the calculation.</p> -<p class="Pp" id="uma_zone_set_warning">The - <a class="permalink" href="#uma_zone_set_warning"><code class="Fn">uma_zone_set_warning</code></a>() - function sets a warning that will be printed on the system console when the - given zone becomes full and fails to allocate an item. The warning will be - printed no more often than every five minutes. Warnings can be turned off - globally by setting the <var class="Va">vm.zone_warnings</var> sysctl - tunable to <var class="Va">0</var>.</p> -<p class="Pp" id="uma_zone_set_maxaction">The - <a class="permalink" href="#uma_zone_set_maxaction"><code class="Fn">uma_zone_set_maxaction</code></a>() - function sets a function that will be called when the given zone becomes - full and fails to allocate an item. The function will be called with the - zone locked. Also, the function that called the allocation function may have - held additional locks. Therefore, this function should do very little work - (similar to a signal handler).</p> -<p class="Pp" id="uma_zone_set_smr">The - <a class="permalink" href="#uma_zone_set_smr"><code class="Fn">uma_zone_set_smr</code></a>() - function associates an existing <a class="Xr">smr(9)</a> structure with a - UMA zone. The effect is similar to creating a zone with the - <code class="Dv">UMA_ZONE_SMR</code> flag, except that a new SMR structure - is not created. This function must be called before any allocations from the - zone are performed.</p> -<p class="Pp" id="SYSCTL_UMA_MAX">The - <a class="permalink" href="#SYSCTL_UMA_MAX"><code class="Fn">SYSCTL_UMA_MAX</code></a>(<var class="Fa">parent</var>, - <var class="Fa">nbr</var>, <var class="Fa">name</var>, - <var class="Fa">access</var>, <var class="Fa">zone</var>, - <var class="Fa">descr</var>) macro declares a static - <a class="Xr">sysctl(9)</a> oid that exports the effective upper limit - number of items for a zone. The <var class="Fa">zone</var> argument should - be a pointer to <var class="Vt">uma_zone_t</var>. A read of the oid returns - value obtained through <code class="Fn">uma_zone_get_max</code>(). A write - to the oid sets new value via <code class="Fn">uma_zone_set_max</code>(). - The - <a class="permalink" href="#SYSCTL_ADD_UMA_MAX"><code class="Fn" id="SYSCTL_ADD_UMA_MAX">SYSCTL_ADD_UMA_MAX</code></a>(<var class="Fa">ctx</var>, - <var class="Fa">parent</var>, <var class="Fa">nbr</var>, - <var class="Fa">name</var>, <var class="Fa">access</var>, - <var class="Fa">zone</var>, <var class="Fa">descr</var>) macro is provided - to create this type of oid dynamically.</p> -<p class="Pp" id="SYSCTL_UMA_CUR">The - <a class="permalink" href="#SYSCTL_UMA_CUR"><code class="Fn">SYSCTL_UMA_CUR</code></a>(<var class="Fa">parent</var>, - <var class="Fa">nbr</var>, <var class="Fa">name</var>, - <var class="Fa">access</var>, <var class="Fa">zone</var>, - <var class="Fa">descr</var>) macro declares a static read-only - <a class="Xr">sysctl(9)</a> oid that exports the approximate current - occupancy of the zone. The <var class="Fa">zone</var> argument should be a - pointer to <var class="Vt">uma_zone_t</var>. A read of the oid returns value - obtained through <code class="Fn">uma_zone_get_cur</code>(). The - <a class="permalink" href="#SYSCTL_ADD_UMA_CUR"><code class="Fn" id="SYSCTL_ADD_UMA_CUR">SYSCTL_ADD_UMA_CUR</code></a>(<var class="Fa">ctx</var>, - <var class="Fa">parent</var>, <var class="Fa">nbr</var>, - <var class="Fa">name</var>, <var class="Fa">zone</var>, - <var class="Fa">descr</var>) macro is provided to create this type of oid - dynamically.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="IMPLEMENTATION_NOTES"><a class="permalink" href="#IMPLEMENTATION_NOTES">IMPLEMENTATION - NOTES</a></h1> -<p class="Pp">The memory that these allocation calls return is not executable. - The <code class="Fn">uma_zalloc</code>() function does not support the - <code class="Dv">M_EXEC</code> flag to allocate executable memory. Not all - platforms enforce a distinction between executable and non-executable - memory.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE - ALSO</a></h1> -<p class="Pp"><a class="Xr">numa(4)</a>, <a class="Xr">vmstat(8)</a>, - <a class="Xr">malloc(9)</a>, <a class="Xr">smr(9)</a></p> -<p class="Pp"><cite class="Rs"><span class="RsA">Jeff Bonwick</span>, - <span class="RsT">The Slab Allocator: An Object-Caching Kernel Memory - Allocator</span>, <span class="RsD">1994</span>.</cite></p> -</section> -<section class="Sh"> -<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> -<p class="Pp">The zone allocator first appeared in <span class="Ux">FreeBSD - 3.0</span>. It was radically changed in <span class="Ux">FreeBSD 5.0</span> - to function as a slab allocator.</p> -</section> -<section class="Sh"> -<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> -<p class="Pp">The zone allocator was written by <span class="An">John S. - Dyson</span>. The zone allocator was rewritten in large parts by - <span class="An">Jeff Roberson</span> - <<a class="Mt" href="mailto:jeff@FreeBSD.org">jeff@FreeBSD.org</a>> to - function as a slab allocator.</p> -<p class="Pp">This manual page was written by <span class="An">Dag-Erling - Smørgrav</span> - <<a class="Mt" href="mailto:des@FreeBSD.org">des@FreeBSD.org</a>>. - Changes for UMA by <span class="An">Jeroen Ruigrok van der Werven</span> - <<a class="Mt" href="mailto:asmodai@FreeBSD.org">asmodai@FreeBSD.org</a>>.</p> -</section> -</div> -<table class="foot"> - <tr> - <td class="foot-date">January 16, 2023</td> - <td class="foot-os">FreeBSD 15.0</td> - </tr> -</table> |
