<title>Generic Error Codes</title>

<table frame="none" pgwide="1" id="gen-errors">
  <title>Generic error codes</title>
  <tgroup cols="2">
    &cs-str;
    <tbody valign="top">
	<!-- Keep it ordered alphabetically -->
      <row>
	<entry>EAGAIN (aka EWOULDBLOCK)</entry>
	<entry>The ioctl can't be handled because the device is in state where
	       it can't perform it. This could happen for example in case where
	       device is sleeping and ioctl is performed to query statistics.
	       It is also returned when the ioctl would need to wait
	       for an event, but the device was opened in non-blocking mode.
	</entry>
      </row>
      <row>
	<entry>EBADF</entry>
	<entry>The file descriptor is not a valid.</entry>
      </row>
      <row>
	<entry>EBUSY</entry>
	<entry>The ioctl can't be handled because the device is busy. This is
	       typically return while device is streaming, and an ioctl tried to
	       change something that would affect the stream, or would require the
	       usage of a hardware resource that was already allocated. The ioctl
	       must not be retried without performing another action to fix the
	       problem first (typically: stop the stream before retrying).</entry>
      </row>
      <row>
	<entry>EFAULT</entry>
	<entry>There was a failure while copying data from/to userspace,
	       probably caused by an invalid pointer reference.</entry>
      </row>
      <row>
	<entry>EINVAL</entry>
	<entry>One or more of the ioctl parameters are invalid or out of the
	       allowed range. This is a widely used error code. See the individual
	       ioctl requests for specific causes.</entry>
      </row>
      <row>
        <entry>ENODEV</entry>
	<entry>Device not found or was removed.</entry>
      </row>
      <row>
	<entry>ENOMEM</entry>
	<entry>There's not enough memory to handle the desired operation.</entry>
      </row>
      <row>
	<entry>ENOTTY</entry>
	<entry>The ioctl is not supported by the driver, actually meaning that
	       the required functionality is not available, or the file
	       descriptor is not for a media device.</entry>
      </row>
      <row>
	<entry>ENOSPC</entry>
	<entry>On USB devices, the stream ioctl's can return this error, meaning
	       that this request would overcommit the usb bandwidth reserved
	       for periodic transfers (up to 80% of the USB bandwidth).</entry>
      </row>
      <row>
	<entry>EPERM</entry>
	<entry>Permission denied. Can be returned if the device needs write
		permission, or some special capabilities is needed
		(e. g. root)</entry>
      </row>
    </tbody>
  </tgroup>
</table>

<para>Note 1: ioctls may return other error codes. Since errors may have side
effects such as a driver reset, applications should abort on unexpected errors.
</para>

<para>Note 2: Request-specific error codes are listed in the individual
requests descriptions.</para>
