summaryrefslogtreecommitdiff
path: root/static/netbsd/man4/drvctl.4
diff options
context:
space:
mode:
Diffstat (limited to 'static/netbsd/man4/drvctl.4')
-rw-r--r--static/netbsd/man4/drvctl.4205
1 files changed, 205 insertions, 0 deletions
diff --git a/static/netbsd/man4/drvctl.4 b/static/netbsd/man4/drvctl.4
new file mode 100644
index 00000000..f761e05f
--- /dev/null
+++ b/static/netbsd/man4/drvctl.4
@@ -0,0 +1,205 @@
+.\" $NetBSD: drvctl.4,v 1.2 2015/05/13 09:15:21 wiz Exp $
+.\"
+.\" Copyright (c) 2015 Michael van Elst
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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.
+.\"
+.Dd May 13, 2015
+.Dt DRVCTL 4
+.Os
+.Sh NAME
+.Nm drvctl
+.Nd driver control device
+.Sh SYNOPSIS
+.Cd pseudo-device drvctl
+.Sh DESCRIPTION
+The
+.Nm
+driver allows to control some
+.Xr autoconf 9
+operations from userland through the
+.Pa /dev/drvctl
+device and the
+.Xr drvctl 8
+command.
+.Pp
+The driver supports the following
+.Xr ioctl 2
+operations.
+.Pp
+.Bl -tag -width Ds -offset indent -compact
+.It DRVSUSPENDDEV
+.It DRVRESUMEDEV
+Invoke power management functions for a named driver
+that has registered itself with the
+.Xr pmf 9
+framework.
+The ioctl argument specifies the driver name as:
+.Bd -literal -offset indent
+struct devpmargs {
+ char devname[16];
+ uint32_t flags;
+};
+.Ed
+.Pp
+The flag
+.Dv DEVPM_F_SUBTREE
+lets the function recurse over all children of that driver.
+.Pp
+.It DRVLISTDEV
+Return a list of child devices attached to the named
+driver.
+The ioctl argument specifies the driver name as:
+.Bd -literal -offset indent
+struct devlistargs {
+ char l_devname[16];
+ char (*l_childname)[16];
+ size_t l_children;
+};
+.Ed
+The names for up to
+.Dv l_children
+child devices are copied to the
+.Dv l_childname
+array.
+If there is no error, the ioctl returns the total number of children.
+Normally you would call
+.Dv DRVLISTDEV
+once with
+.Dv l_children
+set to zero, allocate a buffer for enough 16-character strings
+and call
+.Dv DRVLISTDEV
+again to fill the buffer.
+.Pp
+.It DRVDETACHDEV
+Detach the named driver and all its autoconfigured children.
+The ioctl argument specifies the driver name as:
+.Bd -literal -offset indent
+struct devdetachargs {
+ char devname[16];
+};
+.Ed
+.Pp
+.It DRVSCANBUS
+Invoke the rescan method of the named driver to locate child
+devices.
+The ioctl argument specifies the driver name as:
+.Bd -literal -offset indent
+struct devrescanargs {
+ char busname[16];
+ char ifattr[16];
+ unsigned int numlocators;
+ int *locators;
+};
+.Ed
+.Pp
+Some device drivers attach children to specific interface
+attributes, a zero length
+.Dv ifattr
+represents that no interface attribute should be used.
+The rescan can also be limited to driver-specific locators.
+.Pp
+.It DRVCTLCOMMAND
+Send a command formatted as a property list.
+The property list includes all arguments like the driver name,
+the result is again a property list.
+Currently the only supported command is "get-properties",
+the property list is constructed like:
+.Bd -literal -offset indent
+const char *device = "sd0";
+const char *command = "get-properties";
+
+prop_string_t s;
+prop_dictionary_t c, a;
+
+c = prop_dictionary_create();
+a = prop_dictionary_create();
+
+s = prop_string_create_cstring_nocopy(command);
+prop_dictionary_set(c, "drvctl-command", s);
+prop_object_release(s);
+
+s = prop_string_create_cstring(device);
+prop_dictionary_set(a, "device-name", s);
+prop_object_release(s);
+
+prop_dictionary_set(c, "drvctl-arguments", a);
+prop_object_release(a);
+.Ed
+.Pp
+The command must be sent with
+.Xr prop_dictionary_sendrecv_ioctl 3 .
+The resulting property list contains the numeric attribute
+.Dv drvctl-error ,
+which corresponds to an
+.Dv errno
+value, and the dictionary
+.Dv drvctl-result-data .
+The contents of the dictionary depends on the queried driver.
+.Pp
+.It DRVGETEVENT
+Return the next queued autoconfig event formatted as a property list.
+The request needs to be sent with
+.Xr prop_dictionary_recv_ioctl 3 .
+The resulting property list contains the string attributes
+.Dv event, device
+and
+.Dv parent .
+Currently the events "device-attach" and "device-detach"
+are generated by the
+.Xr autoconf 9
+framework.
+.Pp
+If
+.Pa /dev/drvctl
+was opened with
+.Dv O_NONBLOCK
+and there is no event queued, the call returns immediately with
+.Dv EWOULDBLOCK ,
+otherwise it waits for the next event.
+.El
+.Pp
+All names used in the ioctl arguments are zero-terminated strings.
+A driver name is the name of a driver instance with the appended
+unit number like
+.Dv sd0 , atabus3 , ...
+.Sh FILES
+.Bl -tag
+.It Pa /dev/drvctl
+.Nm
+access device
+.El
+.Sh SEE ALSO
+.Xr ioctl 2 ,
+.Xr prop_send_ioctl 3 ,
+.Xr proplib 3 ,
+.Xr devpubd 8 ,
+.Xr drvctl 8 ,
+.Xr autoconf 9
+.Sh HISTORY
+The
+.Pa /dev/drvctl
+device appeared in
+.Nx 3.0
+but was only added to the GENERIC configuration in
+.Nx 5.0 .