# 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.

#
# The syntax of each line is
#     syscall <name> [attributes] ([args])
#         [returns (<type> [attributes] [args])];
#
# with '[]' being optional and '<>' being required input.
#
# <name> is the syscall function name. It must be a valid C identifier.
#
# [attributes] can be empty or is a space separated list of words with
# meaning for a particular generator.
#
# [args] can be empty or is a comma separated list of
# '<aname>: <type> [attributes] [ctr]'
#
# <aname> is the argument name. It must be a valid C indentifier.
#
# <type> is the argument type. It must be a valid C indentifer with an optional
# array-spec which when present it must be "[number]" or "[aname]", with the
# number being an integer and aname the name of the argument that controls the
# array size.
#
# [ctr] can be empty or is an all-caps word to specify a argument constraint
# with valid values being one of: 'IN', 'OUT', 'INOUT'
#
# The 'returns (<type>)' is expected unless one of the attributes is 'noreturn'.
#
# See <https://fuchsia.googlesource.com/docs/+/master/development/api/system.md>
# for readability guidelines.
#
# To help the clang static analyzer identify handle related syscalls, 3
# attributes are available to describe handle behaviors. Which are
# handle_acquire, handle_release and handle_release_always.
#
#  handle_acquire        The handle will be allocated when this call is
#                        successful.
#
#  handle_release        The handle will be released/destroyed when this
#                        call is successful.
#
#  handle_release_always The handle will be released/destroyed; the only failure
#                        possible is for an invalid handle.
#
#

# Time

syscall clock_get
    (clock_id: zx_clock_t)
    returns (zx_time_t);

syscall clock_get_new
    (clock_id: zx_clock_t)
    returns (zx_status_t, out: zx_time_t);

syscall clock_get_monotonic
    ()
    returns (zx_time_t);

syscall nanosleep blocking
    (deadline: zx_time_t)
    returns (zx_status_t);

syscall ticks_get vdsocall
    ()
    returns (uint64_t);

syscall ticks_per_second vdsocall const
    ()
    returns (uint64_t);

syscall deadline_after vdsocall
    (nanoseconds: zx_duration_t)
    returns (zx_time_t);

syscall clock_adjust
    (handle: zx_handle_t, clock_id: zx_clock_t, offset: int64_t)
    returns (zx_status_t);

# System information

syscall system_get_dcache_line_size vdsocall const
    ()
    returns (uint32_t);

syscall system_get_num_cpus vdsocall const
    ()
    returns (uint32_t);

syscall system_get_version vdsocall
    (version: char[version_size] OUT, version_size: size_t)
    returns (zx_status_t);

syscall system_get_physmem vdsocall
    ()
    returns (uint64_t);

syscall system_get_features vdsocall
    (kind: uint32_t)
    returns (zx_status_t, out: uint32_t features);

# Abstraction of machine operations

syscall cache_flush vdsocall
    (addr: any[size] IN, size: size_t, options: uint32_t)
    returns (zx_status_t);

# Generic handle operations

syscall handle_close
    (handle: zx_handle_t handle_release_always)
    returns (zx_status_t);

syscall handle_close_many
    (handles: zx_handle_t[num_handles] IN, num_handles: size_t)
    returns (zx_status_t);

syscall handle_duplicate
    (handle: zx_handle_t, rights: zx_rights_t)
    returns (zx_status_t, out: zx_handle_t handle_acquire);

syscall handle_replace
    (handle: zx_handle_t handle_release_always, rights: zx_rights_t)
    returns (zx_status_t, out: zx_handle_t handle_acquire);

# Generic object operations

syscall object_wait_one blocking
    (handle: zx_handle_t, signals: zx_signals_t, deadline: zx_time_t)
    returns (zx_status_t, observed: zx_signals_t optional);

syscall object_wait_many blocking
    (items: zx_wait_item_t[count] INOUT, count: size_t, deadline: zx_time_t)
    returns (zx_status_t);

syscall object_wait_async
    (handle: zx_handle_t, port: zx_handle_t, key: uint64_t,
        signals: zx_signals_t, options: uint32_t)
    returns (zx_status_t);

syscall object_signal
    (handle: zx_handle_t, clear_mask: uint32_t, set_mask: uint32_t)
    returns (zx_status_t);

syscall object_signal_peer
    (handle: zx_handle_t, clear_mask: uint32_t, set_mask: uint32_t)
    returns (zx_status_t);

syscall object_get_property
    (handle: zx_handle_t, property: uint32_t, value: any[value_size] OUT, value_size: size_t)
    returns (zx_status_t);

syscall object_set_property
    (handle: zx_handle_t, property: uint32_t, value: any[value_size] IN, value_size: size_t)
    returns (zx_status_t);

syscall object_set_cookie
    (handle: zx_handle_t, scope: zx_handle_t, cookie: uint64_t)
    returns (zx_status_t);

syscall object_get_cookie
    (handle: zx_handle_t, scope: zx_handle_t)
    returns (zx_status_t, cookie: uint64_t);

syscall object_get_info
    (handle: zx_handle_t, topic: uint32_t, buffer: any[buffer_size] OUT, buffer_size: size_t)
    returns (zx_status_t, actual_count: size_t optional, avail_count: size_t optional);

syscall object_get_child
    (handle: zx_handle_t, koid: uint64_t, rights: zx_rights_t)
    returns (zx_status_t, out: zx_handle_t);

syscall object_set_profile
    (handle: zx_handle_t, profile: zx_handle_t, options: uint32_t)
    returns (zx_status_t);

# IPC: Channels

syscall channel_create
    (options: uint32_t)
    returns (zx_status_t, out0: zx_handle_t handle_acquire,
        out1: zx_handle_t handle_acquire);

syscall channel_read
    (handle: zx_handle_t, options: uint32_t,
        bytes: any[num_bytes] OUT,
        handles: zx_handle_t[num_handles] OUT,
        num_bytes: uint32_t,
        num_handles: uint32_t)
    returns (zx_status_t, actual_bytes: uint32_t optional, actual_handles: uint32_t optional);

syscall channel_read_etc
    (handle: zx_handle_t, options: uint32_t,
        bytes: any[num_bytes] OUT,
        handles: zx_handle_info_t[num_handles] OUT,
        num_bytes: uint32_t,
        num_handles: uint32_t)
    returns (zx_status_t, actual_bytes: uint32_t optional, actual_handles: uint32_t optional);

syscall channel_write
    (handle: zx_handle_t, options: uint32_t,
        bytes: any[num_bytes] IN, num_bytes: uint32_t,
        handles: zx_handle_t[num_handles] IN, num_handles: uint32_t)
    returns (zx_status_t);

syscall channel_call_noretry internal
    (handle: zx_handle_t, options: uint32_t, deadline: zx_time_t,
        args: zx_channel_call_args_t[1] IN)
    returns (zx_status_t, actual_bytes: uint32_t, actual_handles: uint32_t);

syscall channel_call_finish internal
    (deadline: zx_time_t, args: zx_channel_call_args_t[1] IN)
    returns (zx_status_t, actual_bytes: uint32_t, actual_handles: uint32_t);

syscall channel_call blocking vdsocall
    (handle: zx_handle_t, options: uint32_t, deadline: zx_time_t,
        args: zx_channel_call_args_t[1] IN)
    returns (zx_status_t, actual_bytes: uint32_t, actual_handles: uint32_t);

# IPC: Sockets

syscall socket_create
    (options: uint32_t)
    returns (zx_status_t, out0: zx_handle_t handle_acquire,
        out1: zx_handle_t handle_acquire);

syscall socket_write
    (handle: zx_handle_t, options: uint32_t, buffer: any[buffer_size] IN, buffer_size: size_t)
    returns (zx_status_t, actual: size_t optional);

syscall socket_read
    (handle: zx_handle_t, options: uint32_t, buffer: any[buffer_size] OUT, buffer_size: size_t)
    returns (zx_status_t, actual: size_t optional);

syscall socket_share
    (handle: zx_handle_t, socket_to_share: zx_handle_t)
    returns (zx_status_t);

syscall socket_accept
    (handle: zx_handle_t)
    returns (zx_status_t, out_socket: zx_handle_t handle_acquire);

syscall socket_shutdown
    (handle: zx_handle_t, options: uint32_t)
    returns (zx_status_t);

# Threads

syscall thread_exit noreturn ();

syscall thread_create
    (process: zx_handle_t, name: char[name_size] IN, name_size: size_t, options: uint32_t)
    returns (zx_status_t, out: zx_handle_t handle_acquire);

syscall thread_start
    (handle: zx_handle_t, thread_entry: zx_vaddr_t,
        stack: zx_vaddr_t, arg1: uintptr_t, arg2: uintptr_t)
    returns (zx_status_t);

syscall thread_read_state
    (handle: zx_handle_t, kind: uint32_t, buffer: any[buffer_size] OUT, buffer_size: size_t)
    returns (zx_status_t);

syscall thread_write_state
    (handle: zx_handle_t, kind: uint32_t, buffer: any[buffer_size] IN, buffer_size: size_t)
    returns (zx_status_t);

# NOTE: thread_set_priority is an experimental syscall.
# Do not use it.  It is going away very soon.  Just don't do it.  This is not
# the syscall you are looking for.  See ZX-940
syscall thread_set_priority
    (prio: int32_t)
    returns (zx_status_t);

# Processes

syscall process_exit noreturn
    (retcode: int64_t);

syscall process_create
    (job: zx_handle_t, name: char[name_size] IN, name_size: size_t, options: uint32_t)
    returns (zx_status_t, proc_handle: zx_handle_t handle_acquire,
        vmar_handle: zx_handle_t handle_acquire);

syscall process_start
    (handle: zx_handle_t, thread: zx_handle_t, entry: zx_vaddr_t,
    stack: zx_vaddr_t, arg1: zx_handle_t handle_release_always, arg2: uintptr_t)
    returns (zx_status_t);

syscall process_read_memory
    (proc: zx_handle_t, vaddr: zx_vaddr_t, buffer: any[buffer_size] OUT, buffer_size: size_t)
    returns (zx_status_t, actual: size_t);

syscall process_write_memory
    (proc: zx_handle_t, vaddr: zx_vaddr_t, buffer: any[buffer_size] IN, buffer_size: size_t)
    returns (zx_status_t, actual: size_t);

# Jobs

syscall job_create
    (parent_job: zx_handle_t, options: uint32_t)
    returns (zx_status_t, out: zx_handle_t handle_acquire);

syscall job_set_policy
    (job: zx_handle_t, options: uint32_t, topic: uint32_t, policy: any[count] IN, count: uint32_t)
    returns (zx_status_t);

# Tasks (shared between threads, processes, and jobs)

syscall task_bind_exception_port
    (handle: zx_handle_t, port: zx_handle_t, key: uint64_t, options: uint32_t)
    returns (zx_status_t);

syscall task_resume
    (handle: zx_handle_t, options: uint32_t)
    returns (zx_status_t);

syscall task_suspend
    (handle: zx_handle_t)
    returns (zx_status_t, token: zx_handle_t handle_acquire);

syscall task_suspend_token
    (handle: zx_handle_t)
    returns (zx_status_t, token: zx_handle_t handle_acquire);

syscall task_resume_from_exception
    (handle: zx_handle_t, port: zx_handle_t, options: uint32_t)
    returns (zx_status_t);

syscall task_kill
    (handle: zx_handle_t)
    returns (zx_status_t);

# Synchronization

syscall event_create
    (options: uint32_t)
    returns (zx_status_t, out: zx_handle_t handle_acquire);

syscall eventpair_create
    (options: uint32_t)
    returns (zx_status_t,
        out0: zx_handle_t handle_acquire, out1: zx_handle_t handle_acquire);

syscall futex_wait blocking
    (value_ptr: zx_futex_t[1] IN, current_value: int32_t, deadline: zx_time_t)
    returns (zx_status_t);

syscall futex_wake
    (value_ptr: zx_futex_t[1] IN, count: uint32_t)
    returns (zx_status_t);

syscall futex_requeue
    (wake_ptr: zx_futex_t[1] IN, wake_count: uint32_t, current_value: int32_t,
        requeue_ptr: zx_futex_t[1] IN, requeue_count: uint32_t)
    returns (zx_status_t);

# Ports

syscall port_create
    (options: uint32_t)
    returns (zx_status_t, out: zx_handle_t handle_acquire);

syscall port_queue
    (handle: zx_handle_t, packet: zx_port_packet_t[1] IN)
    returns (zx_status_t);

syscall port_wait blocking
    (handle: zx_handle_t, deadline: zx_time_t, packet: zx_port_packet_t[1] OUT)
    returns (zx_status_t);

syscall port_cancel
    (handle: zx_handle_t, source: zx_handle_t, key: uint64_t)
    returns (zx_status_t);

# Timers

syscall timer_create
    (options: uint32_t, clock_id: zx_clock_t)
    returns (zx_status_t, out: zx_handle_t handle_acquire);

syscall timer_set
    (handle: zx_handle_t, deadline: zx_time_t, slack: zx_duration_t)
    returns (zx_status_t);

syscall timer_cancel
    (handle: zx_handle_t)
    returns (zx_status_t);

# Memory management

syscall vmo_create
    (size: uint64_t, options: uint32_t)
    returns (zx_status_t, out: zx_handle_t handle_acquire);

syscall vmo_read
    (handle: zx_handle_t, buffer: any[buffer_size] OUT, offset: uint64_t, buffer_size: size_t)
    returns (zx_status_t);

syscall vmo_write
    (handle: zx_handle_t, buffer: any[buffer_size] IN, offset: uint64_t, buffer_size: size_t)
    returns (zx_status_t);

syscall vmo_get_size
    (handle: zx_handle_t)
    returns (zx_status_t, size: uint64_t);

syscall vmo_set_size
    (handle: zx_handle_t, size: uint64_t)
    returns (zx_status_t);

syscall vmo_op_range
    (handle: zx_handle_t, op: uint32_t, offset: uint64_t, size: uint64_t,
        buffer: any[buffer_size] INOUT, buffer_size: size_t)
    returns (zx_status_t);

syscall vmo_clone
    (handle: zx_handle_t, options: uint32_t, offset: uint64_t, size: uint64_t)
    returns (zx_status_t, out: zx_handle_t handle_acquire);

syscall vmo_set_cache_policy
    (handle: zx_handle_t, cache_policy: uint32_t)
    returns (zx_status_t);

syscall vmo_replace_as_executable
    (handle: zx_handle_t handle_release_always, vmex: zx_handle_t)
    returns (zx_status_t, out: zx_handle_t handle_acquire);

# Address space management

# TODO(davemoore): Updating vmar apis: zx-2264. Remove when no calls remain.
syscall vmar_allocate_old
    (parent_vmar: zx_handle_t, offset: uint64_t, size: uint64_t, map_flags: uint32_t)
    returns (zx_status_t,
        child_vmar: zx_handle_t handle_acquire, child_addr: zx_vaddr_t);

syscall vmar_map_old
    (handle: zx_handle_t, vmar_offset: uint64_t,
        vmo: zx_handle_t, vmo_offset: uint64_t,
        len: uint64_t, map_flags: uint32_t)
    returns (zx_status_t, mapped_addr: zx_vaddr_t);

syscall vmar_protect_old
    (handle: zx_handle_t, addr: zx_vaddr_t, len: uint64_t, prot_flags: uint32_t)
    returns (zx_status_t);

syscall vmar_allocate
    (parent_vmar: zx_handle_t, options: zx_vm_option_t, offset: uint64_t, size: uint64_t)
    returns (zx_status_t,
        child_vmar: zx_handle_t handle_acquire, child_addr: zx_vaddr_t);

syscall vmar_destroy
    (handle: zx_handle_t)
    returns (zx_status_t);

syscall vmar_map
    (handle: zx_handle_t, options: zx_vm_option_t, vmar_offset: uint64_t,
        vmo: zx_handle_t, vmo_offset: uint64_t,
        len: uint64_t)
    returns (zx_status_t, mapped_addr: zx_vaddr_t);

syscall vmar_unmap
    (handle: zx_handle_t, addr: zx_vaddr_t, len: uint64_t)
    returns (zx_status_t);

syscall vmar_protect
    (handle: zx_handle_t, options: zx_vm_option_t, addr: zx_vaddr_t, len: uint64_t)
    returns (zx_status_t);

# Random Number generator

syscall cprng_draw_once internal
    (buffer: any[buffer_size] OUT, buffer_size: size_t)
    returns (zx_status_t);

syscall cprng_draw vdsocall
    (buffer: any[buffer_size] OUT, buffer_size: size_t)
    returns ();

syscall cprng_add_entropy
    (buffer: any[len] IN, len: size_t)
    returns (zx_status_t);

# IPC: Fifos

syscall fifo_create
    (elem_count: size_t, elem_size: size_t, options: uint32_t)
    returns (zx_status_t,
        out0: zx_handle_t handle_acquire, out1: zx_handle_t handle_acquire);

syscall fifo_read
    (handle: zx_handle_t, elem_size: size_t, data: any[count * elem_size] OUT, count: size_t)
    returns (zx_status_t, actual_count: size_t optional);

syscall fifo_write
    (handle: zx_handle_t, elem_size: size_t, data: any[count * elem_size] IN, count: size_t)
    returns (zx_status_t, actual_count: size_t optional);

# Profiles

syscall profile_create
    (resource: zx_handle_t, profile: zx_profile_info_t[1] IN)
    returns (zx_status_t, out: zx_handle_t handle_acquire);

# Multi-function

syscall vmar_unmap_handle_close_thread_exit vdsocall
    (vmar_handle: zx_handle_t, addr: zx_vaddr_t, size: size_t, handle: zx_handle_t handle_release)
    returns (zx_status_t);

syscall futex_wake_handle_close_thread_exit vdsocall noreturn
    (value_ptr: zx_futex_t[1] IN, count: uint32_t, new_value: int32_t,
        handle: zx_handle_t handle_release);

# Logging

syscall log_write
    (handle: zx_handle_t, len: uint32_t, buffer: any[len] IN, options: uint32_t)
    returns (zx_status_t);

syscall log_read
    (handle: zx_handle_t, len: uint32_t, buffer: any[len] OUT, options: uint32_t)
    returns (zx_status_t);

syscall debuglog_create
    (resource: zx_handle_t, options: uint32_t)
    returns (zx_status_t, out: zx_handle_t handle_acquire);

syscall debuglog_write
    (handle: zx_handle_t, options: uint32_t, buffer: any[buffer_size] IN, buffer_size: size_t)
    returns (zx_status_t);

syscall debuglog_read
    (handle: zx_handle_t, options: uint32_t, buffer: any[buffer_size] OUT, buffer_size: size_t)
    returns (zx_status_t);

# Tracing

syscall ktrace_read
    (handle: zx_handle_t, data: any[data_size] OUT, offset: uint32_t, data_size: size_t)
    returns (zx_status_t, actual: size_t);

syscall ktrace_control
    (handle: zx_handle_t, action: uint32_t, options: uint32_t, ptr: any[action] INOUT)
    returns (zx_status_t);

syscall ktrace_write
    (handle: zx_handle_t, id: uint32_t, arg0: uint32_t, arg1: uint32_t)
    returns (zx_status_t);

syscall mtrace_control
    (handle: zx_handle_t,
        kind: uint32_t, action: uint32_t, options: uint32_t,
        ptr: any[ptr_size] INOUT, ptr_size: size_t)
    returns (zx_status_t);

# Legacy LK debug syscalls

syscall debug_read
    (handle: zx_handle_t, buffer: char[buffer_size] OUT, buffer_size: size_t[1] INOUT)
    returns (zx_status_t);

syscall debug_write
    (buffer: char[buffer_size] IN, buffer_size: size_t)
    returns (zx_status_t);

syscall debug_send_command
    (resource: zx_handle_t, buffer: char[buffer_size] IN, buffer_size: size_t)
    returns (zx_status_t);

# DDK Syscalls: Interrupts

syscall interrupt_create
    (src_obj: zx_handle_t, src_num: uint32_t, options: uint32_t)
    returns (zx_status_t, out: zx_handle_t);

syscall interrupt_bind
    (handle: zx_handle_t, port: zx_handle_t, key: uint64_t, options: uint32_t)
    returns (zx_status_t);

syscall interrupt_wait blocking
    (handle: zx_handle_t)
    returns (zx_status_t, out_timestamp: zx_time_t optional);

syscall interrupt_destroy
    (handle: zx_handle_t)
    returns (zx_status_t);

syscall interrupt_ack
    (handle: zx_handle_t)
    returns (zx_status_t);

syscall interrupt_trigger
    (handle: zx_handle_t, options: uint32_t, timestamp: zx_time_t)
    returns (zx_status_t);

# DDK Syscalls: MMIO and IoPorts

syscall ioports_request
    (resource: zx_handle_t, io_addr: uint16_t, len: uint32_t)
    returns (zx_status_t);

syscall vmo_create_contiguous
    (bti: zx_handle_t, size: size_t, alignment_log2: uint32_t)
    returns (zx_status_t, out: zx_handle_t handle_acquire);

syscall vmo_create_physical
    (resource: zx_handle_t, paddr: zx_paddr_t, size: size_t)
    returns (zx_status_t, out: zx_handle_t handle_acquire);

# DDK Syscalls: Device Memory Access

syscall iommu_create
    (resource: zx_handle_t, type: uint32_t, desc: any[desc_size] IN, desc_size: size_t)
    returns (zx_status_t, out: zx_handle_t handle_acquire);

syscall bti_create
    (iommu: zx_handle_t, options: uint32_t, bti_id: uint64_t)
    returns (zx_status_t, out: zx_handle_t handle_acquire);

syscall bti_pin
    (handle: zx_handle_t, options: uint32_t, vmo: zx_handle_t, offset: uint64_t, size: uint64_t,
        addrs: zx_paddr_t[addrs_count] OUT, addrs_count: size_t)
    returns (zx_status_t, out: zx_handle_t handle_acquire);

syscall bti_release_quarantine
    (handle: zx_handle_t)
    returns (zx_status_t);

syscall pmt_unpin
    (handle: zx_handle_t handle_release_always)
    returns (zx_status_t);

# DDK Syscalls: Misc Info

syscall framebuffer_get_info
    (resource: zx_handle_t)
    returns (zx_status_t, format: uint32_t, width: uint32_t, height: uint32_t, stride: uint32_t);

syscall framebuffer_set_range
    (resource: zx_handle_t, vmo: zx_handle_t, len: uint32_t, format: uint32_t,
        width: uint32_t, height: uint32_t, stride: uint32_t)
    returns (zx_status_t);

# DDK Syscalls: PCI

syscall pci_get_nth_device
    (handle: zx_handle_t, index: uint32_t)
    returns (zx_status_t, out_info: zx_pcie_device_info_t, out_handle: zx_handle_t handle_acquire);

syscall pci_enable_bus_master
    (handle: zx_handle_t, enable: bool)
    returns (zx_status_t);

syscall pci_reset_device
    (handle: zx_handle_t)
    returns (zx_status_t);

syscall pci_config_read
    (handle: zx_handle_t, offset: uint16_t, width: size_t, out_val: uint32_t[1] OUT)
    returns (zx_status_t);

syscall pci_config_write
    (handle: zx_handle_t, offset: uint16_t, width: size_t, val: uint32_t)
    returns (zx_status_t);

syscall pci_cfg_pio_rw
    (handle: zx_handle_t, bus: uint8_t, dev: uint8_t, func: uint8_t, offset: uint8_t,
        val: uint32_t[1] INOUT, width: size_t, write: bool)
    returns (zx_status_t);

syscall pci_get_bar
    (handle: zx_handle_t, bar_num: uint32_t, out_bar: zx_pci_bar_t[1] OUT)
    returns (zx_status_t, out_handle: zx_handle_t handle_acquire);

syscall pci_map_interrupt
    (handle: zx_handle_t, which_irq: int32_t)
    returns (zx_status_t, out_handle: zx_handle_t handle_acquire);

syscall pci_query_irq_mode
    (handle: zx_handle_t, mode: uint32_t)
    returns (zx_status_t, out_max_irqs: uint32_t);

syscall pci_set_irq_mode
    (handle: zx_handle_t, mode: uint32_t, requested_irq_count: uint32_t)
    returns (zx_status_t);

syscall pci_init
    (handle: zx_handle_t, init_buf: zx_pci_init_arg_t[len] IN, len: uint32_t)
    returns (zx_status_t);

syscall pci_add_subtract_io_range
    (handle: zx_handle_t, mmio: bool, base: uint64_t, len: uint64_t, add: bool)
    returns (zx_status_t);

# DDK Syscalls: ACPI Glue

syscall pc_firmware_tables
    (handle: zx_handle_t)
    returns (zx_status_t, acpi_rsdp: zx_paddr_t, smbios: zx_paddr_t);

# DDK Syscalls: SMC Calls

syscall smc_call
    (handle: zx_handle_t, parameters: zx_smc_parameters_t[1] IN)
    returns (zx_status_t, out_smc_result: zx_smc_result_t OUT);

# Resources

syscall resource_create
    (parent_rsrc: zx_handle_t, options: uint32_t, base: uint64_t, size: size_t,
        name: char[name_size] IN, name_size: size_t)
    returns (zx_status_t, resource_out: zx_handle_t handle_acquire);

# Hypervisor

syscall guest_create
    (resource: zx_handle_t, options: uint32_t)
    returns (zx_status_t, guest_handle: zx_handle_t handle_acquire,
        vmar_handle: zx_handle_t handle_acquire);

syscall guest_set_trap
    (handle: zx_handle_t, kind: uint32_t, addr: zx_vaddr_t, size: size_t, port: zx_handle_t,
        key: uint64_t)
    returns (zx_status_t);

syscall vcpu_create
    (guest: zx_handle_t, options: uint32_t, entry: zx_vaddr_t)
    returns (zx_status_t, out: zx_handle_t handle_acquire);

syscall vcpu_resume blocking
    (handle: zx_handle_t)
    returns (zx_status_t, packet: zx_port_packet_t OUT);

syscall vcpu_interrupt
    (handle: zx_handle_t, vector: uint32_t)
    returns (zx_status_t);

syscall vcpu_read_state
    (handle: zx_handle_t, kind: uint32_t, buffer: any[buffer_size] OUT, buffer_size: size_t)
    returns (zx_status_t);

syscall vcpu_write_state
    (handle: zx_handle_t, kind: uint32_t, buffer: any[buffer_size] IN, buffer_size: size_t)
    returns (zx_status_t);

# System Control

syscall system_mexec
    (resource: zx_handle_t, kernel: zx_handle_t, bootimage: zx_handle_t)
    returns (zx_status_t);

syscall system_powerctl
    (resource: zx_handle_t, cmd: uint32_t, arg: zx_system_powerctl_arg_t[1] IN)
    returns (zx_status_t);

# Test syscalls (keep at the end)

syscall syscall_test_0() returns (zx_status_t);
syscall syscall_test_1 test_category1 (a:int) returns (zx_status_t);
syscall syscall_test_2 test_category1 (a:int, b:int) returns (zx_status_t);
syscall syscall_test_3 test_category2 (a:int, b:int, c:int) returns (zx_status_t);
syscall syscall_test_4(a:int, b:int, c:int, d:int) returns (zx_status_t);
syscall syscall_test_5(a:int, b:int, c:int, d:int, e:int) returns (zx_status_t);
syscall syscall_test_6(a:int, b:int, c:int, d:int, e:int, f:int) returns (zx_status_t);
syscall syscall_test_7(a:int, b:int, c:int, d:int, e:int, f:int, g:int) returns (zx_status_t);
syscall syscall_test_8(a:int, b:int, c:int, d:int, e:int, f:int, g:int, h:int) returns (zx_status_t);
syscall syscall_test_wrapper(a:int, b:int, c:int) returns (zx_status_t);
