blob: 2187e101442200cea68979ec799393ffeabc8f86 [file] [log] [blame]
// 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;
enum clock : uint32 {
MONOTONIC = 0;
UTC = 1;
THREAD = 2;
};
[Transport = "Syscall", NoProtocolPrefix]
protocol clockfuncs {
/// 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);
};