|  | // 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. | 
|  |  | 
|  | // TODO(fxb/39732): This should be read as "library zx". | 
|  | library zz; | 
|  |  | 
|  | enum Clock : uint32 { | 
|  | MONOTONIC = 0; | 
|  | UTC = 1; | 
|  | THREAD = 2; | 
|  | }; | 
|  |  | 
|  | [Transport = "Syscall"] | 
|  | protocol clock { | 
|  | /// Acquire the current time. | 
|  | clock_get(Clock clock_id) -> (status status, time out); | 
|  |  | 
|  | /// Acquire the current monotonic time. | 
|  | [vdsocall] | 
|  | clock_get_monotonic() -> (time time); | 
|  |  | 
|  | /// Rights: handle must have resource kind ZX_RSRC_KIND_ROOT. | 
|  | clock_adjust(handle<resource> handle, Clock clock_id, int64 offset) -> (status status); | 
|  |  | 
|  | // Read clock monotonic, but demand that the read be performed using a | 
|  | // syscall, instead of a vdso call. | 
|  | // | 
|  | // See the notes for ticks_get_via_kernel; this is not a syscall meant | 
|  | // to be used by application code. | 
|  | [internal] | 
|  | clock_get_monotonic_via_kernel() -> (time time); | 
|  |  | 
|  | // TODO: handle<clock> for all of these. | 
|  |  | 
|  | /// Create a new clock object. | 
|  | /// Rights: None. | 
|  | clock_create(uint64 options, const_voidptr args) -> (status status, handle out); | 
|  |  | 
|  | /// Perform a basic read of the clock. | 
|  | /// Rights: handle must be of type ZX_OBJ_TYPE_CLOCK and have ZX_RIGHT_READ. | 
|  | clock_read(handle handle) -> (status status, time now); | 
|  |  | 
|  | /// Fetch all of the low level details of the clock's current status. | 
|  | /// Rights: handle must be of type ZX_OBJ_TYPE_CLOCK and have ZX_RIGHT_READ. | 
|  | clock_get_details(handle handle, uint64 options) -> (status status, voidptr details); | 
|  |  | 
|  | /// Make adjustments to a clock object. | 
|  | /// Rights: handle must be of type ZX_OBJ_TYPE_CLOCK and have ZX_RIGHT_WRITE. | 
|  | clock_update(handle handle, uint64 options, const_voidptr args) -> (status status); | 
|  | }; |