| # Zircon System Calls |
| |
| [Life of a Fuchsia syscall](/docs/concepts/kernel/life_of_a_syscall.md) |
| |
| ## Handles |
| + [handle_close](handle_close.md) - close a handle |
| + [handle_close_many](handle_close_many.md) - close several handles |
| + [handle_duplicate](handle_duplicate.md) - create a duplicate handle (optionally with reduced rights) |
| + [handle_replace](handle_replace.md) - create a new handle (optionally with reduced rights) and destroy the old one |
| |
| ## Objects |
| + [object_get_child](object_get_child.md) - find the child of an object by its koid |
| + [object_get_info](object_get_info.md) - obtain information about an object |
| + [object_get_property](object_get_property.md) - read an object property |
| + [object_set_profile](object_set_profile.md) - apply a profile to a thread |
| + [object_set_property](object_set_property.md) - modify an object property |
| + [object_signal](object_signal.md) - set or clear the user signals on an object |
| + [object_signal_peer](object_signal_peer.md) - set or clear the user signals in the opposite end |
| + [object_wait_many](object_wait_many.md) - wait for signals on multiple objects |
| + [object_wait_one](object_wait_one.md) - wait for signals on one object |
| + [object_wait_async](object_wait_async.md) - asynchronous notifications on signal change |
| |
| ## Threads |
| + [thread_create](thread_create.md) - create a new thread within a process |
| + [thread_exit](thread_exit.md) - exit the current thread |
| + [thread_read_state](thread_read_state.md) - read register state from a thread |
| + [thread_start](thread_start.md) - cause a new thread to start executing |
| + [thread_write_state](thread_write_state.md) - modify register state of a thread |
| |
| ## Processes |
| + [process_create](process_create.md) - create a new process within a job |
| + [process_read_memory](process_read_memory.md) - read from a process's address space |
| + [process_start](process_start.md) - cause a new process to start executing |
| + [process_write_memory](process_write_memory.md) - write to a process's address space |
| + [process_exit](process_exit.md) - exit the current process |
| |
| ## Jobs |
| + [job_create](job_create.md) - create a new job within a job |
| + [job_set_critical](job_set_critical.md) - set a process as critical to a job |
| + [job_set_policy](job_set_policy.md) - modify policies for a job and its descendants |
| |
| ## Tasks (Thread, Process, or Job) |
| + [task_create_exception_channel](task_create_exception_channel.md) - create an exception channel on a task |
| + [task_kill](task_kill.md) - cause a task to stop running |
| + [task_suspend](task_suspend.md) - cause a task to be suspended |
| |
| ## Profiles |
| + [profile_create](profile_create.md) - create a new profile object |
| |
| ## Exceptions |
| + [exception_get_thread](exception_get_thread.md) - create a handle for the exception thread |
| + [exception_get_process](exception_get_process.md) - create a handle for the exception process |
| |
| ## Channels |
| + [channel_call](channel_call.md) - synchronously send a message and receive a reply |
| + [channel_call_etc](channel_call_etc.md) - synchronously send a message and receive a reply with handle information |
| + [channel_create](channel_create.md) - create a new channel |
| + [channel_read](channel_read.md) - receive a message from a channel |
| + [channel_read_etc](channel_read_etc.md) - receive a message from a channel with handle information |
| + [channel_write](channel_write.md) - write a message to a channel |
| + [channel_write_etc](channel_write_etc.md) - write a message to the channel and modify the handles |
| |
| ## Sockets |
| + [socket_create](socket_create.md) - create a new socket |
| + [socket_read](socket_read.md) - read data from a socket |
| + [socket_set_disposition](socket_set_disposition.md) - set write disposition of a socket |
| + [socket_write](socket_write.md) - write data to a socket |
| |
| ## Stream |
| + [stream_create](stream_create.md) - create a stream from a VMO |
| + [stream_readv](stream_readv.md) - read data from the stream at the current seek offset |
| + [stream_readv_at](stream_readv_at.md) - read data from the stream at a given offset |
| + [stream_writev](stream_writev.md) - write data to the stream at the current seek offset |
| + [stream_writev_at](stream_writev_at.md) - write data to the stream at a given offset |
| + [stream_seek](stream_seek.md) - modify the current seek offset of the stream |
| |
| ## Fifos |
| + [fifo_create](fifo_create.md) - create a new fifo |
| + [fifo_read](fifo_read.md) - read data from a fifo |
| + [fifo_write](fifo_write.md) - write data to a fifo |
| |
| ## Events and Event Pairs |
| + [event_create](event_create.md) - create an event |
| + [eventpair_create](eventpair_create.md) - create a connected pair of events |
| + [system_get_event](system_get_event.md) - retrieve a handle to a system event |
| |
| ## Ports |
| + [port_create](port_create.md) - create a port |
| + [port_queue](port_queue.md) - send a packet to a port |
| + [port_wait](port_wait.md) - wait for packets to arrive on a port |
| + [port_cancel](port_cancel.md) - cancel notifications from async_wait |
| |
| ## Futexes |
| + [futex_wait](futex_wait.md) - wait on a futex |
| + [futex_wake](futex_wake.md) - wake waiters on a futex |
| + [futex_requeue](futex_requeue.md) - wake some waiters and requeue other waiters |
| |
| ## Virtual Memory Objects (VMOs) |
| + [vmo_create](vmo_create.md) - create a new vmo |
| + [vmo_read](vmo_read.md) - read from a vmo |
| + [vmo_write](vmo_write.md) - write to a vmo |
| + [vmo_create_child](vmo_create_child.md) - creates a child of a vmo |
| + [vmo_get_size](vmo_get_size.md) - obtain the size of a vmo |
| + [vmo_set_size](vmo_set_size.md) - adjust the size of a vmo |
| + [vmo_op_range](vmo_op_range.md) - perform an operation on a range of a vmo |
| + [vmo_replace_as_executable](vmo_replace_as_executable.md) - add execute rights to a vmo |
| + [vmo_create_physical](vmo_create_physical.md) - create a VM object referring to a specific contiguous range of physical memory |
| + [vmo_set_cache_policy](vmo_set_cache_policy.md) - set the caching policy for pages held by a VMO |
| |
| ## Virtual Memory Address Regions (VMARs) |
| + [vmar_allocate](vmar_allocate.md) - create a new child VMAR |
| + [vmar_map](vmar_map.md) - map a VMO into a process |
| + [vmar_unmap](vmar_unmap.md) - unmap a memory region from a process |
| + [vmar_protect](vmar_protect.md) - adjust memory access permissions |
| + [vmar_op_range](vmar_op_range.md) - perform an operation on VMOs mapped into a range of a VMAR |
| + [vmar_destroy](vmar_destroy.md) - destroy a VMAR and all of its children |
| |
| ## Userspace Pagers |
| + [pager_create](pager_create.md) - create a new pager object |
| + [pager_create_vmo](pager_create_vmo.md) - create a pager owned vmo |
| + [pager_detach_vmo](pager_detach_vmo.md) - detaches a pager from a vmo |
| + [pager_supply_pages](pager_supply_pages.md) - supply pages into a pager owned vmo |
| + [pager_op_range](pager_op_range.md) - perform an operation on a range of a pager owned vmo |
| |
| ## Cryptographically Secure RNG |
| + [cprng_add_entropy](cprng_add_entropy.md) |
| + [cprng_draw](cprng_draw.md) |
| |
| ## Time |
| + [nanosleep](nanosleep.md) - sleep for some number of nanoseconds |
| + [clock_get_monotonic](clock_get_monotonic.md) - read the monotonic system clock |
| + [clock_create](clock_create.md) - Create a new clock object |
| + [clock_get_details](clock_get_details.md) - Fetch all of the low level details of the clock's current status |
| + [clock_update](clock_update.md) - Make adjustments to a clock object |
| + [ticks_get](ticks_get.md) - read high-precision timer ticks |
| + [ticks_per_second](ticks_per_second.md) - read the number of high-precision timer ticks in a second |
| + [deadline_after](deadline_after.md) - Convert a time relative to now to an absolute deadline |
| |
| ## Timers |
| + [timer_create](timer_create.md) - create a timer object |
| + [timer_set](timer_set.md) - start a timer |
| + [timer_cancel](timer_cancel.md) - cancel a timer |
| |
| ## Hypervisor guests |
| + [guest_create](guest_create.md) - create a hypervisor guest |
| + [guest_set_trap](guest_set_trap.md) - set a trap in a hypervisor guest |
| |
| ## Virtual CPUs |
| + [vcpu_create](vcpu_create.md) - create a VCPU |
| + [vcpu_enter](vcpu_enter.md) - enter a VCPU, and start or continue execution |
| + [vcpu_kick](vcpu_kick.md) - kick a VCPU, and stop execution |
| + [vcpu_interrupt](vcpu_interrupt.md) - raise an interrupt on a VCPU |
| + [vcpu_read_state](vcpu_read_state.md) - read state from a VCPU |
| + [vcpu_write_state](vcpu_write_state.md) - write state to a VCPU |
| + [interrupt_bind_vcpu](interrupt_bind_vcpu.md) - bind an interrupt object to a VCPU |
| |
| ## Global system information |
| + [system_get_dcache_line_size](system_get_dcache_line_size.md) |
| + [system_get_features](system_get_features.md) - get hardware-specific features |
| + [system_get_num_cpus](system_get_num_cpus.md) - get number of CPUs |
| + [system_get_page_size](system_get_page_size.md) - get memory page size |
| + [system_get_physmem](system_get_physmem.md) - get physical memory size |
| + [system_get_version_string](system_get_version_string.md) - get version string |
| |
| ## Debug Logging |
| + [debuglog_create](debuglog_create.md) - create a kernel managed debuglog reader or writer |
| + [debuglog_write](debuglog_write.md) - write log entry to debuglog |
| + [debuglog_read](debuglog_read.md) - read log entries from debuglog |
| + [debug_read](debug_read.md) - TODO(fxbug.dev/32938) |
| + [debug_write](debug_write.md) - TODO(fxbug.dev/32938) |
| + [debug_send_command](debug_send_command.md) - TODO(fxbug.dev/32938) |
| |
| ## Multi-function |
| + [vmar_unmap_handle_close_thread_exit](vmar_unmap_handle_close_thread_exit.md) - three-in-one |
| + [futex_wake_handle_close_thread_exit](futex_wake_handle_close_thread_exit.md) - three-in-one |
| |
| ## System |
| + [system_mexec](system_mexec.md) - Soft reboot the system with a new kernel and bootimage |
| + [system_mexec_payload_get](system_mexec_payload_get.md) - Return a ZBI containing ZBI entries necessary to boot this system |
| + [system_powerctl](system_powerctl.md) |
| + [system_get_performance_info](system_get_performance_info.md) - Get CPU performance info |
| + [system_set_performance_info](system_set_performance_info.md) - Set CPU performance info |
| |
| ## DDK |
| + [bti_create](bti_create.md) - create a new bus transaction initiator |
| + [bti_pin](bti_pin.md) - pin pages and grant devices access to them |
| + [bti_release_quarantine](bti_release_quarantine.md) - releases all quarantined PMTs |
| + [cache_flush](cache_flush.md) - Flush CPU data and/or instruction caches |
| + [interrupt_ack](interrupt_ack.md) - Acknowledge an interrupt object |
| + [interrupt_bind](interrupt_bind.md) - Bind an interrupt object to a port |
| + [interrupt_create](interrupt_create.md) - Create a physical or virtual interrupt object |
| + [interrupt_destroy](interrupt_destroy.md) - Destroy an interrupt object |
| + [interrupt_trigger](interrupt_trigger.md) - Trigger a virtual interrupt object |
| + [interrupt_wait](interrupt_wait.md) - Wait on an interrupt object |
| + [iommu_create](iommu_create.md) - create a new IOMMU object in the kernel |
| + [pmt_unpin](pmt_unpin.md) - unpin pages and revoke device access to them |
| + [resource_create](resource_create.md) - create a resource object |
| + [smc_call](smc_call.md) - Make an SMC call from user space |
| |
| ## Display drivers |
| + [framebuffer_get_info](framebuffer_get_info.md) |
| + [framebuffer_set_range](framebuffer_set_range.md) |
| |
| ## Tracing |
| + [ktrace_control](ktrace_control.md) |
| + [ktrace_read](ktrace_read.md) |
| + [ktrace_write](ktrace_write.md) |
| + [mtrace_control](mtrace_control.md) |
| |
| ## Others/Work in progress |
| + [ioports_release](ioports_release.md) |
| + [pc_firmware_tables](pc_firmware_tables.md) |
| + [pci_add_subtract_io_range](pci_add_subtract_io_range.md) |
| + [pci_cfg_pio_rw](pci_cfg_pio_rw.md) |
| + [pci_config_read](pci_config_read.md) |
| + [pci_config_write](pci_config_write.md) |
| + [pci_enable_bus_master](pci_enable_bus_master.md) |
| + [pci_get_bar](pci_get_bar.md) |
| + [pci_get_nth_device](pci_get_nth_device.md) |
| + [pci_init](pci_init.md) |
| + [pci_map_interrupt](pci_map_interrupt.md) |
| + [pci_query_irq_mode](pci_query_irq_mode.md) |
| + [pci_reset_device](pci_reset_device.md) |
| + [pci_set_irq_mode](pci_set_irq_mode.md) |
| |
| |
| + [syscall_test_0](syscall_test_0.md) |
| + [syscall_test_1](syscall_test_1.md) |
| + [syscall_test_2](syscall_test_2.md) |
| + [syscall_test_3](syscall_test_3.md) |
| + [syscall_test_4](syscall_test_4.md) |
| + [syscall_test_5](syscall_test_5.md) |
| + [syscall_test_6](syscall_test_6.md) |
| + [syscall_test_7](syscall_test_7.md) |
| + [syscall_test_8](syscall_test_8.md) |
| + [syscall_test_wrapper](syscall_test_wrapper.md) |
| + [syscall_test_handle_create](syscall_test_handle_create.md) |
| |
| ## Syscall generation |
| |
| Syscall support is generated from `//zircon/vdso`. The FIDL files in that |
| directory are first run through `fidlc`, which produces an intermediate format. |
| That intermediate format is consumed by [kazoo](/zircon/tools/kazoo), which |
| produces output for both the kernel and userspace in a variety of languages. |
| This output includes C or C++ headers for both the kernel and userspace, syscall |
| entry points, other language bindings, and so on. |
| |
| This tool is invoked as a part of the build, rather than checking in its output. |
| |