// Copyright 2016 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.

#ifndef SRC_DEVELOPER_DEBUG_SHARED_ZX_STATUS_DEFINITIONS_H_
#define SRC_DEVELOPER_DEBUG_SHARED_ZX_STATUS_DEFINITIONS_H_

#include <stdint.h>

namespace debug_ipc {

// This file tracks //zircon/system/public/zircon/errors.h
// That file holds the zx_status_t definitions and it's not bound to change much, so copying it
// should not provide much headaches.
//
// The constant naming convention is an exception and is maintained to be consistent with the naming
// used in zircon.

// As defined in zircon/types.h
using zx_status_t = int32_t;

constexpr zx_status_t kZxOk = 0;

// ======= Internal failures =======
// ZX_ERR_INTERNAL: The system encountered an otherwise unspecified error
// while performing the operation.
constexpr zx_status_t kZxErrInternal = -1;

// ZX_ERR_NOT_SUPPORTED: The operation is not implemented, supported,
// or enabled.
constexpr zx_status_t kZxErrNotSupported = -2;

// ZX_ERR_NO_RESOURCES: The system was not able to allocate some resource
// needed for the operation.
constexpr zx_status_t kZxErrNoResources = -3;

// ZX_ERR_NO_MEMORY: The system was not able to allocate memory needed
// for the operation.
constexpr zx_status_t kZxErrNoMemory = -4;

// -5 used to be ZX_ERR_CALL_FAILED.

// ZX_ERR_INTERNAL_INTR_RETRY: The system call was interrupted, but should be
// retried.  This should not be seen outside of the VDSO.
constexpr zx_status_t kZxErrInternalIntrRetry = -6;

// ======= Parameter errors =======
// ZX_ERR_INVALID_ARGS: an argument is invalid, ex. null pointer
constexpr zx_status_t kZxErrInvalidArgs = -10;

// ZX_ERR_BAD_HANDLE: A specified handle value does not refer to a handle.
constexpr zx_status_t kZxErrBadHandle = -11;

// ZX_ERR_WRONG_TYPE: The subject of the operation is the wrong type to
// perform the operation.
// Example: Attempting a message_read on a thread handle.
constexpr zx_status_t kZxErrWrongType = -12;

// ZX_ERR_BAD_SYSCALL: The specified syscall number is invalid.
constexpr zx_status_t kZxErrBadSyscall = -13;

// ZX_ERR_OUT_OF_RANGE: An argument is outside the valid range for this
// operation.
constexpr zx_status_t kZxErrOutOfRange = -14;

// ZX_ERR_BUFFER_TOO_SMALL: A caller provided buffer is too small for
// this operation.
constexpr zx_status_t kZxErrBufferTooSmall = -15;

// ======= Precondition or state errors =======
// ZX_ERR_BAD_STATE: operation failed because the current state of the
// object does not allow it, or a precondition of the operation is
// not satisfied
constexpr zx_status_t kZxErrBadState = -20;

// ZX_ERR_TIMED_OUT: The time limit for the operation elapsed before
// the operation completed.
constexpr zx_status_t kZxErrTimedOut = -21;

// ZX_ERR_SHOULD_WAIT: The operation cannot be performed currently but
// potentially could succeed if the caller waits for a prerequisite
// to be satisfied, for example 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.
// Attempting to read from a channel that has no messages waiting
// and has a closed remote end will return ZX_ERR_PEER_CLOSED.
constexpr zx_status_t kZxErrShouldWait = -22;

// ZX_ERR_CANCELED: The in-progress operation (e.g. a wait) has been
// canceled.
constexpr zx_status_t kZxErrCanceled = -23;

// ZX_ERR_PEER_CLOSED: The operation failed because the remote end of the
// subject of the operation was closed.
constexpr zx_status_t kZxErrPeerClosed = -24;

// ZX_ERR_NOT_FOUND: The requested entity is not found.
constexpr zx_status_t kZxErrNotFound = -25;

// ZX_ERR_ALREADY_EXISTS: An object with the specified identifier
// already exists.
// Example: Attempting to create a file when a file already exists
// with that name.
constexpr zx_status_t kZxErrAlreadyExists = -26;

// ZX_ERR_ALREADY_BOUND: 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.
constexpr zx_status_t kZxErrAlreadyBound = -27;

// ZX_ERR_UNAVAILABLE: The subject of the operation is currently unable
// to perform the operation.
// Note: 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.
constexpr zx_status_t kZxErrUnavailable = -28;

// ======= Permission check errors =======
// ZX_ERR_ACCESS_DENIED: The caller did not have permission to perform
// the specified operation.
constexpr zx_status_t kZxErrAccessDenied = -30;

// ======= Input-output errors =======
// ZX_ERR_IO: Otherwise unspecified error occurred during I/O.
constexpr zx_status_t kZxErrIO = -40;

// ZX_ERR_REFUSED: 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.
constexpr zx_status_t kZxErrIoRefused = -41;

// ZX_ERR_IO_DATA_INTEGRITY: The data in the operation failed an integrity
// check and is possibly corrupted.
// Example: CRC or Parity error.
constexpr zx_status_t kZxErrIoDataIntegrity = -42;

// ZX_ERR_IO_DATA_LOSS: The data in the operation is currently unavailable
// and may be permanently lost.
// Example: A disk block is irrecoverably damaged.
constexpr zx_status_t kZxErrIoDataLoss = -43;

// ZX_ERR_IO_NOT_PRESENT: The device is no longer available (has been
// unplugged from the system, powered down, or the driver has been
// unloaded)
constexpr zx_status_t kZxErrIoNotPresent = -44;

// ZX_ERR_IO_OVERRUN: 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.
constexpr zx_status_t kZxErrIoOverrun = -45;

// ZX_ERR_IO_MISSED_DEADLINE: An operation did not complete within the required
// timeframe. Example: A USB isochronous transfer that failed to complete due to
// an overrun or underrun.
constexpr zx_status_t kZxErrIoMissedDeadline = -46;

// ZX_ERR_IO_INVALID: The data in the operation is invalid parameter or is out
// of range. Example: A USB transfer that failed to complete with TRB Error
constexpr zx_status_t kZxErrIoInvalid = -47;

// ======== Filesystem Errors ========
// ZX_ERR_BAD_PATH: Path name is too long.
constexpr zx_status_t kZxErrBadPath = -50;

// ZX_ERR_NOT_DIR: 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.
constexpr zx_status_t kZxErrNotDir = -51;

// ZX_ERR_NOT_FILE: Object is not a regular file.
constexpr zx_status_t kZxErrNotFile = -52;

// ZX_ERR_FILE_BIG: This operation would cause a file to exceed a
// filesystem-specific size limit
constexpr zx_status_t kZxErrFileBig = -53;

// ZX_ERR_NO_SPACE: Filesystem or device space is exhausted.
constexpr zx_status_t kZxErrNoSpace = -54;

// ZX_ERR_NOT_EMPTY: Directory is not empty.
constexpr zx_status_t kZxErrNotEmpty = -55;

// ======== Flow Control ========
// These are not errors, as such, and will never be returned
// by a syscall or public API.  They exist to allow callbacks
// to request changes in operation.
//
// ZX_ERR_STOP: Do not call again.
// Example: A notification callback will 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 the work is done."
constexpr zx_status_t kZxErrStop = -60;

// ZX_ERR_NEXT: Advance to the next item.
// Example: A notification callback will use this response
// to indicate it did not "consume" an item passed to it,
// but by choice, not due to an error condition.
constexpr zx_status_t kZxErrNext = -61;

// ZX_ERR_ASYNC: Ownership of the item has moved to an asynchronous worker.
//
// 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.
//
// Example: A notification 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.
constexpr zx_status_t kZxErrAsync = -62;

// ======== Network-related errors ========

// ZX_ERR_PROTOCOL_NOT_SUPPORTED: Specified protocol is not
// supported.
constexpr zx_status_t kZxErrProtocolNotSupported = -70;

// ZX_ERR_ADDRESS_UNREACHABLE: Host is unreachable.
constexpr zx_status_t kZxErrAddressUnreachable = -71;

// ZX_ERR_ADDRESS_IN_USE: Address is being used by someone else.
constexpr zx_status_t kZxErrAddressInUse = -72;

// ZX_ERR_NOT_CONNECTED: Socket is not connected.
constexpr zx_status_t kZxErrNotConnected = -73;

// ZX_ERR_CONNECTION_REFUSED: Remote peer rejected the connection.
constexpr zx_status_t kZxErrConnectionRefused = -74;

// ZX_ERR_CONNECTION_RESET: Connection was reset.
constexpr zx_status_t kZxErrConnectionReset = -75;

// ZX_ERR_CONNECTION_ABORTED: Connection was aborted.
constexpr zx_status_t kZxErrConnectionAborted = -76;

}  // namespace debug_ipc

#endif  // SRC_DEVELOPER_DEBUG_SHARED_ZX_STATUS_DEFINITIONS_H_
