// Copyright 2020 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.
// This specific FIDL file is used in two contexts:
//
// 1. Define the `zx` library for plain-vanilla FIDL files, i.e. channel
//    transport
// 2. Part of the overall definition of the Kernel ABI, i.e. Syscall transport
//
// Since the FIDL compiler does not support splitting definitions per-transport
// yet, we split definitions by file.

library zx;

// zx_status_t and errors.h.
using status = int32;

// zx_time_t: absolute time in nanoseconds (generally with respect to the
// monotonic clock).
using time = int64;

// zx_duration_t: a duration in nanoseconds.
using duration = int64;

// zx_ticks_t: a duration in hardware ticks.
using ticks = uint64;

// zx_koid_t: global kernel object id.
using koid = uint64;

// zx_vaddr_t: virtual address.
using vaddr = uint64;

// zx_paddr_t: physical address.
using paddr = uint64;

// zx_paddr32_t: low mem physical address.
using paddr32 = uint32;

// zx_gpaddr_t: hypervisor guest physical addresses.
using gpaddr = uint64;

// zx_off_t: offset.
using off = uint64;

// See zircon/processargs.h.
using procarg = uint32;

// zx_signals_t.
using signals = uint32;

// TODO(fxbug.dev/7802): These are currently duplicated with zircon/types.h.
// Eventually the definitions in zircon/types.h will be generated from this
// source.
const uint64 CHANNEL_MAX_MSG_BYTES = 65536;
const uint64 CHANNEL_MAX_MSG_HANDLES = 64;
const uint64 MAX_NAME_LEN = 32;
const uint64 MAX_CPUS = 512;
