summaryrefslogtreecommitdiff
path: root/static/netbsd/man9/cnmagic.9
diff options
context:
space:
mode:
Diffstat (limited to 'static/netbsd/man9/cnmagic.9')
-rw-r--r--static/netbsd/man9/cnmagic.9198
1 files changed, 198 insertions, 0 deletions
diff --git a/static/netbsd/man9/cnmagic.9 b/static/netbsd/man9/cnmagic.9
new file mode 100644
index 00000000..2ab75c28
--- /dev/null
+++ b/static/netbsd/man9/cnmagic.9
@@ -0,0 +1,198 @@
+.\" $NetBSD: cnmagic.9,v 1.17 2024/09/07 19:13:29 rillig Exp $
+.\"
+.\" Copyright (c) 2000 Eduardo Horvath
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\" must display the following acknowledgement:
+.\" This product includes software developed for the
+.\" NetBSD Project. See https://www.NetBSD.org/ for
+.\" information about NetBSD.
+.\" 4. The name of the author may not be used to endorse or promote products
+.\" derived from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+.\"
+.\" --(license Id: LICENSE.proto,v 1.1 2000/06/13 21:40:26 cgd Exp )--
+.\"
+.Dd July 7, 2019
+.Dt CNMAGIC 9
+.Os
+.Sh NAME
+.Nm cn_init_magic ,
+.Nm cn_trap ,
+.Nm cn_isconsole ,
+.Nm cn_check_magic ,
+.Nm cn_destroy_magic ,
+.Nm cn_set_magic ,
+.Nm cn_get_magic
+.Nd console magic key sequence management
+.Sh SYNOPSIS
+.In sys/systm.h
+.Ft void
+.Fn cn_init_magic "cnm_state_t *cnms"
+.Ft void
+.Fn cn_trap
+.Ft int
+.Fn cn_isconsole "dev_t dev"
+.Ft void
+.Fn cn_check_magic "dev_t dev" "int k" "cnm_state_t *cnms"
+.Ft void
+.Fn cn_destroy_magic "cnm_state_t *cnms"
+.Ft int
+.Fn cn_set_magic "char *magic"
+.Ft int
+.Fn cn_get_magic "char *magic" "int len"
+.Sh DESCRIPTION
+The
+.Nx
+console magic key sequence management framework is designed to provide
+flexible methods to set, change, and detect magic key sequences on console
+devices and break into the debugger or ROM monitor with a minimum of interrupt
+latency.
+.Pp
+Drivers that generate console input should make use of these routines.
+A different
+.Va cnm_state_t
+should be used for each separate input stream.
+Multiple devices that share the same input stream, such as USB
+keyboards, can share the same
+.Va cnm_state_t .
+Once a
+.Va cnm_state_t
+is allocated, it should be initialized with
+.Fn cn_init_magic
+so it can be used by
+.Fn cn_check_magic .
+If a driver thinks it might be the console input device it can set the
+magic sequence with
+.Fn cn_set_magic
+to any arbitrary string.
+Whenever the driver receives input, it should call
+.Fn cn_check_magic
+to process the data and determine whether the magic sequence has
+been hit.
+.Pp
+The magic key sequence can be accessed through the
+.Va hw.cnmagic
+.Ic sysctl
+variable.
+This is the raw data and may be keycodes rather than
+processed characters, depending on the console device.
+.Sh FUNCTIONS
+The following functions describe the console magic interface.
+.Bl -tag -width indent
+.It Fn cn_init_magic "cnm"
+Initialize the console magic state pointed to by
+.Fa cnm
+to a usable state.
+.It Fn cn_trap
+Trap into the kernel debugger or ROM monitor.
+By default this routine is defined to be
+.Fn console_debugger
+but can be overridden in MI header files.
+.It Fn cn_isconsole "dev"
+Determine whether a given
+.Fa dev
+is the system console.
+This macro tests to see if
+.Fa dev
+is the same as
+.Va cn_tab->cn_dev
+but can be overridden in MI header files.
+.It Fn cn_check_magic "dev" "k" "cnms"
+All input should be passed through
+.Fn cn_check_magic
+so the state machine remains in a consistent state.
+.Fn cn_check_magic
+calls
+.Fn cn_isconsole
+with
+.Fa dev
+to determine if this is the console.
+If that returns true then it runs the input value
+.Fa k
+through the state machine.
+If the state machine completes a match of the current console magic sequence
+.Fn cn_trap
+is called.
+Some input may need to be translated to state machine
+values such as the serial line
+.Li BREAK
+sequence.
+.It Fn cn_destroy_magic "cnms"
+This should be called once what
+.Fa cnms
+points to is no longer needed.
+.It Fn cn_set_magic "magic"
+.Fn cn_set_magic
+encodes a
+.Li nul
+terminated arbitrary string into values that can be used by
+the state machine and installs it as the global magic sequence.
+The escape sequence is character value
+.Li 0x27
+and can be used to encode special values:
+.Pp
+.Bl -tag -width "0x001" -compact -offset indent
+.It 0x27
+The literal value
+.Li 0x27 .
+.It 0x01
+Serial
+.Li BREAK
+sequence.
+.It 0x02
+.Li Nul
+character.
+.El
+.Pp
+Returns
+.Li 0
+on success or a non-zero error value.
+.It Fn cn_get_magic "magic" "len"
+Extract the current magic sequence from the state machine and return
+up to
+.Fa len
+bytes of it in the buffer pointed to by
+.Fa magic .
+It uses the same encoding accepted by
+.Fn cn_set_magic .
+Returns
+.Li 0
+on success or a non-zero error value.
+.El
+.Sh SEE ALSO
+.Xr ddb 4 ,
+.Xr sysctl 8 ,
+.Xr cons 9
+.Sh HISTORY
+The
+.Nx
+console magic key sequence management framework
+first appeared in
+.Nx 1.6 .
+.Sh AUTHORS
+The
+.Nx
+console magic key sequence management framework was designed and
+implemented by
+.An Eduardo Horvath
+.Aq eeh@NetBSD.org .