// Copyright 2019 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 FILE IS NOT YET USED !!!
// See //zircon/system/public/zircon/syscalls.banjo.
// !!! THIS FILE IS NOT YET USED !!!

// TODO(scottmg): This library is temporarily "zz" instead of "zx" because a
// "zx" is force-injected by fidlc. Eventually, we'd stop that and use this one
// instead as "zx".
library zz;

using status = int32;

using time = int64;
using duration = int64;
using ticks = uint64;

using koid = uint64;

using vaddr = uint64;
using paddr = uint64;
using paddr32 = uint32;
using gpaddr = uint64;
using off = uint64;

// TODO(scottmg): Not sure what this is.
using procarg = uint32;

const uint64 CHANNEL_MAX_MSG_BYTES = 65536;
const uint64 CHANNEL_MAX_MSG_HANDLES = 64;

// TODO(scottmg): == size_t, not sure if this is a good idea.
using usize = uint64;

// TODO(scottmg): == uintptr_t, not sure if this is a good idea.
using uintptr = uint64;

// TODO(scottmg): Maybe a void for vector<void> (or vector<any>?) to distinguish
// polymorphic arguments that are passed as void* from buffers of bytes.

// TODO(scottmg): Instead of handle:acquire on (almost?) all out handles,
// consider no_acquire to indicate ownership not transeferring.

using signals = uint32;
// TODO(scottmg): Lots of aliases/variations required here. Not sure if bits
// make sense.
