Updated: 2022/Sep/29

Please read Privacy Policy. It's for your privacy.


DRVCTL(4)                    Device Drivers Manual                   DRVCTL(4)

NAME
     drvctl - driver control device

SYNOPSIS
     pseudo-device drvctl

DESCRIPTION
     The drvctl driver allows to control some autoconf(9) operations from
     userland through the /dev/drvctl device and the drvctl(8) command.

     The driver supports the following ioctl(2) operations.

           DRVSUSPENDDEV
           DRVRESUMEDEV
                   Invoke power management functions for a named driver that
                   has registered itself with the pmf(9) framework.  The ioctl
                   argument specifies the driver name as:

                         struct devpmargs {
                                 char devname[16];
                                 uint32_t flags;
                         };

                   The flag DEVPM_F_SUBTREE lets the function recurse over all
                   children of that driver.

           DRVLISTDEV
                   Return a list of child devices attached to the named
                   driver.  The ioctl argument specifies the driver name as:

                         struct devlistargs {
                                 char l_devname[16];
                                 char (*l_childname)[16];
                                 size_t l_children;
                         };
                   The names for up to l_children child devices are copied to
                   the l_childname array.  If there is no error, the ioctl
                   returns the total number of children.  Normally you would
                   call DRVLISTDEV once with l_children set to zero, allocate
                   a buffer for enough 16-character strings and call
                   DRVLISTDEV again to fill the buffer.

           DRVDETACHDEV
                   Detach the named driver and all its autoconfigured
                   children.  The ioctl argument specifies the driver name as:

                         struct devdetachargs {
                                 char devname[16];
                         };

           DRVSCANBUS
                   Invoke the rescan method of the named driver to locate
                   child devices.  The ioctl argument specifies the driver
                   name as:

                         struct devrescanargs {
                                 char busname[16];
                                 char ifattr[16];
                                 unsigned int numlocators;
                                 int *locators;
                         };

                   Some device drivers attach children to specific interface
                   attributes, a zero length ifattr represents that no
                   interface attribute should be used.  The rescan can also be
                   limited to driver-specific locators.

           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:

                         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);

                   The command must be sent with
                   prop_dictionary_sendrecv_ioctl(3).  The resulting property
                   list contains the numeric attribute drvctl-error, which
                   corresponds to an errno value, and the dictionary
                   drvctl-result-data.  The contents of the dictionary depends
                   on the queried driver.

           DRVGETEVENT
                   Return the next queued autoconfig event formatted as a
                   property list.  The request needs to be sent with
                   prop_dictionary_recv_ioctl(3).  The resulting property list
                   contains the string attributes event, device and parent.
                   Currently the events "device-attach" and "device-detach"
                   are generated by the autoconf(9) framework.

                   If /dev/drvctl was opened with O_NONBLOCK and there is no
                   event queued, the call returns immediately with
                   EWOULDBLOCK, otherwise it waits for the next event.

     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 sd0, atabus3, ...

FILES
     /dev/drvctl
             drvctl access device

SEE ALSO
     ioctl(2), prop_send_ioctl(3), proplib(3), devpubd(8), drvctl(8),
     autoconf(9)

HISTORY
     The /dev/drvctl device appeared in NetBSD 3.0 but was only added to the
     GENERIC configuration in NetBSD 5.0.

NetBSD 10.99                     May 13, 2015                     NetBSD 10.99