| // 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. |
| library zx; |
| |
| @transport("Syscall") |
| protocol thread { |
| /// Terminate the current running thread. |
| @noreturn |
| thread_exit(); |
| |
| /// Create a thread. |
| /// Rights: process must be of type ZX_OBJ_TYPE_PROCESS and have ZX_RIGHT_MANAGE_THREAD. |
| thread_create(resource struct { |
| process handle:PROCESS; |
| name string; |
| options uint32; |
| }) -> (resource struct { |
| status status; |
| out handle:THREAD; |
| }); |
| |
| /// Start execution on a thread. |
| /// Rights: handle must be of type ZX_OBJ_TYPE_THREAD and have ZX_RIGHT_MANAGE_THREAD. |
| thread_start(resource struct { |
| handle handle:THREAD; |
| thread_entry vaddr; |
| stack vaddr; |
| arg1 uintptr; |
| arg2 uintptr; |
| }) -> (struct { |
| status status; |
| }); |
| |
| /// Read one aspect of thread state. |
| /// Rights: handle must be of type ZX_OBJ_TYPE_THREAD and have ZX_RIGHT_READ. |
| thread_read_state(resource struct { |
| handle handle:THREAD; |
| kind uint32; |
| }) -> (struct { |
| status status; |
| buffer vector_void; |
| }); |
| |
| /// Write one aspect of thread state. |
| /// Rights: handle must be of type ZX_OBJ_TYPE_THREAD and have ZX_RIGHT_WRITE. |
| thread_write_state(resource struct { |
| handle handle:THREAD; |
| kind uint32; |
| buffer vector_void; |
| }) -> (struct { |
| status status; |
| }); |
| |
| /// Yield the CPU of the current thread back to the scheduler. |
| /// Yield may result in other threads with similar importance running ahead of the |
| /// current thread, however, the exact behavior is unspecified. |
| /// |
| /// |options| must be zero. |
| thread_legacy_yield(resource struct { |
| options uint32; |
| }) -> (struct { |
| status status; |
| }); |
| }; |