John Baldwin 64de80195b Add a new device control utility for new-bus devices called devctl. This
allows the user to request administrative changes to individual devices
such as attach or detaching drivers or disabling and re-enabling devices.
- Add a new /dev/devctl2 character device which uses ioctls for device
  requests.  The ioctls use a common 'struct devreq' which is somewhat
  similar to 'struct ifreq'.
- The ioctls identify the device to operate on via a string.  This
  string can either by the device's name, or it can be a bus-specific
  address.  (For unattached devices, a bus address is the only way to
  locate a device.)  Bus drivers register an eventhandler to claim
  unrecognized device names that the driver recognizes as a valid address.
  Two buses currently support addresses: ACPI recognizes any device
  in the ACPI namespace via its full path starting with "\" and
  the PCI bus driver recognizes an address specification of
  'pci[<domain>:]<bus>:<slot>:<func>' (identical to the PCI selector
  strings supported by pciconf).
- To make it easier to cut and paste, change the PnP location string
  in the PCI bus driver to output a full PCI selector string rather
  than 'slot=<slot> function=<func>'.
- Add a devctl(3) interface in libdevctl which provides a wrapper around
  the ioctls and is the preferred interface for other userland code.
- Add a devctl(8) program which is a simple wrapper around the requests
  supported by devctl(3).
- Add a device_is_suspended() function to check DF_SUSPENDED.
- Add a resource_unset_value() function that can be used to remove a
  hint from the kernel environment.  This is used to clear a
  hint.<driver>.<unit>.disabled hint when re-enabling a boot-time
  disabled device.

Reviewed by:	imp (parts)
Requested by:	imp (changing PCI location string)
Relnotes:	yes
2015-02-06 16:09:01 +00:00
..
2015-01-22 11:12:42 +00:00
2012-11-11 23:25:47 +00:00
2013-10-18 11:25:08 +00:00
2014-03-11 10:13:06 +00:00
2014-11-23 12:01:52 +00:00
2015-01-22 11:12:42 +00:00
2012-01-15 13:23:18 +00:00
2013-03-04 12:20:48 +00:00
2014-07-02 13:24:21 +00:00
2014-12-31 10:00:43 +00:00
2013-10-16 09:12:40 +00:00
2012-01-15 13:23:18 +00:00
2014-07-07 00:27:09 +00:00
2014-09-28 11:32:46 +00:00
2014-07-07 00:27:09 +00:00
2015-01-28 21:08:09 +00:00
2012-12-10 23:12:51 +00:00
2012-03-28 20:58:30 +00:00
2014-11-13 05:26:14 +00:00
2014-07-30 00:28:29 +00:00
2015-01-23 21:08:24 +00:00
2015-01-23 21:08:24 +00:00
2014-11-06 08:12:34 +00:00
2015-01-23 21:08:24 +00:00
2014-11-05 02:08:37 +00:00
2014-11-06 08:12:34 +00:00