blob: 98d0bc6ec53813a078562f0ab6af86961c4a51b4 [file] [log] [blame]
// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library zx;
// TODO(https://fxbug.dev/42065140): `status` should be defined here and this should all
// be a single enum definition.
/// Indicates an operation was successful.
const OK Status = 0;
// ======= Internal failures =======
/// The system encountered an otherwise unspecified error while performing the
/// operation.
const ERR_INTERNAL Status = -1;
/// The operation is not implemented, supported, or enabled.
const ERR_NOT_SUPPORTED Status = -2;
/// The system was not able to allocate some resource needed for the operation.
const ERR_NO_RESOURCES Status = -3;
/// The system was not able to allocate memory needed for the operation.
const ERR_NO_MEMORY Status = -4;
// -5 used to be ZX_ERR_CALL_FAILED.
/// The system call was interrupted, but should be retried. This should not be
/// seen outside of the VDSO.
const ERR_INTERNAL_INTR_RETRY Status = -6;
// ======= Parameter errors =======
/// An argument is invalid. For example, a null pointer when a null pointer is
/// not permitted.
const ERR_INVALID_ARGS Status = -10;
/// A specified handle value does not refer to a handle.
const ERR_BAD_HANDLE Status = -11;
/// The subject of the operation is the wrong type to perform the operation.
///
/// For example: Attempting a message_read on a thread handle.
const ERR_WRONG_TYPE Status = -12;
/// The specified syscall number is invalid.
const ERR_BAD_SYSCALL Status = -13;
/// An argument is outside the valid range for this operation.
const ERR_OUT_OF_RANGE Status = -14;
/// The caller-provided buffer is too small for this operation.
const ERR_BUFFER_TOO_SMALL Status = -15;
// ======= Precondition or state errors =======
/// The operation failed because the current state of the object does not allow
/// it, or a precondition of the operation is not satisfied.
const ERR_BAD_STATE Status = -20;
/// The time limit for the operation elapsed before the operation completed.
const ERR_TIMED_OUT Status = -21;
/// The operation cannot be performed currently but potentially could succeed if
/// the caller waits for a prerequisite to be satisfied, like waiting for a
/// handle to be readable or writable.
///
/// Example: Attempting to read from a channel that has no messages waiting but
/// has an open remote will return `ZX_ERR_SHOULD_WAIT`. In contrast, attempting
/// to read from a channel that has no messages waiting and has a closed remote
/// end will return `ZX_ERR_PEER_CLOSED`.
const ERR_SHOULD_WAIT Status = -22;
/// The in-progress operation, for example, a wait, has been canceled.
const ERR_CANCELED Status = -23;
/// The operation failed because the remote end of the subject of the operation
/// was closed.
const ERR_PEER_CLOSED Status = -24;
/// The requested entity is not found.
const ERR_NOT_FOUND Status = -25;
/// An object with the specified identifier already exists.
///
/// Example: Attempting to create a file when a file already exists with that
/// name.
const ERR_ALREADY_EXISTS Status = -26;
/// The operation failed because the named entity is already owned or controlled
/// by another entity. The operation could succeed later if the current owner
/// releases the entity.
const ERR_ALREADY_BOUND Status = -27;
/// The subject of the operation is currently unable to perform the operation.
///
/// This is used when there's no direct way for the caller to observe when the
/// subject will be able to perform the operation and should thus retry.
const ERR_UNAVAILABLE Status = -28;
// ======= Permission check errors =======
/// The caller did not have permission to perform the specified operation.
const ERR_ACCESS_DENIED Status = -30;
/// Otherwise-unspecified error occurred during I/O.
const ERR_IO Status = -40;
/// The entity the I/O operation is being performed on rejected the operation.
///
/// Example: an I2C device NAK'ing a transaction or a disk controller rejecting
/// an invalid command, or a stalled USB endpoint.
const ERR_IO_REFUSED Status = -41;
/// The data in the operation failed an integrity check and is possibly
/// corrupted.
///
/// Example: CRC or Parity error.
const ERR_IO_DATA_INTEGRITY Status = -42;
/// The data in the operation is currently unavailable and may be permanently
/// lost.
///
/// Example: A disk block is irrecoverably damaged.
const ERR_IO_DATA_LOSS Status = -43;
/// The device is no longer available (has been unplugged from the system,
/// powered down, or the driver has been unloaded).
const ERR_IO_NOT_PRESENT Status = -44;
/// More data was received from the device than expected.
///
/// Example: a USB "babble" error due to a device sending more data than the
/// host queued to receive.
const ERR_IO_OVERRUN Status = -45;
/// An operation did not complete within the required timeframe.
///
/// Example: A USB isochronous transfer that failed to complete due to an
/// overrun or underrun.
const ERR_IO_MISSED_DEADLINE Status = -46;
/// The data in the operation is invalid parameter or is out of range.
///
/// Example: A USB transfer that failed to complete with TRB Error
const ERR_IO_INVALID Status = -47;
// ======== Filesystem Errors ========
/// Path name is too long.
const ERR_BAD_PATH Status = -50;
/// The object is not a directory or does not support directory operations.
///
/// Example: Attempted to open a file as a directory or attempted to do
/// directory operations on a file.
const ERR_NOT_DIR Status = -51;
/// Object is not a regular file.
const ERR_NOT_FILE Status = -52;
/// This operation would cause a file to exceed a filesystem-specific size
/// limit.
const ERR_FILE_BIG Status = -53;
/// The filesystem or device space is exhausted.
const ERR_NO_SPACE Status = -54;
/// The directory is not empty for an operation that requires it to be empty.
///
/// For example, non-recursively deleting a directory with files still in it.
const ERR_NOT_EMPTY Status = -55;
// ======== Flow Control ========
/// An indicate to not call again.
///
/// The flow control values `ZX_ERR_STOP`, `ZX_ERR_NEXT`, and `ZX_ERR_ASYNC` are
/// not errors and will never be returned by a system call or public API. They
/// allow callbacks to request their caller perform some other operation.
///
/// For example, a callback might be called on every event until it returns
/// something other than `ZX_OK`. This status allows differentiation between
/// "stop due to an error" and "stop because work is done."
const ERR_STOP Status = -60;
/// Advance to the next item.
///
/// The flow control values `ZX_ERR_STOP`, `ZX_ERR_NEXT`, and `ZX_ERR_ASYNC` are
/// not errors and will never be returned by a system call or public API. They
/// allow callbacks to request their caller perform some other operation.
///
/// For example, a callback could use this value to indicate it did not consume
/// an item passed to it, but by choice, not due to an error condition.
const ERR_NEXT Status = -61;
/// Ownership of the item has moved to an asynchronous worker.
///
/// The flow control values `ZX_ERR_STOP`, `ZX_ERR_NEXT`, and `ZX_ERR_ASYNC` are
/// not errors and will never be returned by a system call or public API. They
/// allow callbacks to request their caller perform some other operation.
///
/// Unlike `ZX_ERR_STOP`, which implies that iteration on an object
/// should stop, and `ZX_ERR_NEXT`, which implies that iteration
/// should continue to the next item, `ZX_ERR_ASYNC` implies
/// that an asynchronous worker is responsible for continuing iteration.
///
/// For example, a callback will be called on every event, but one event needs
/// to handle some work asynchronously before it can continue. `ZX_ERR_ASYNC`
/// implies the worker is responsible for resuming iteration once its work has
/// completed.
const ERR_ASYNC Status = -62;
// ======== Network-related errors ========
/// The specified protocol is not supported.
const ERR_PROTOCOL_NOT_SUPPORTED Status = -70;
/// The host is unreachable.
const ERR_ADDRESS_UNREACHABLE Status = -71;
/// Address is being used by someone else.
const ERR_ADDRESS_IN_USE Status = -72;
/// The socket is not connected.
const ERR_NOT_CONNECTED Status = -73;
/// The remote peer rejected the connection.
const ERR_CONNECTION_REFUSED Status = -74;
/// The connection was reset.
const ERR_CONNECTION_RESET Status = -75;
/// The connection was aborted.
const ERR_CONNECTION_ABORTED Status = -76;
// ======= VDSO-private errors =======
/// A task was killed during an operation. This is a private error that should
/// not be seen outside of the VDSO.
const ERR_INTERNAL_INTR_KILLED Status = -502;