blob: 40b722fd313235a7a80d0b6290d475b397ab512e [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 fuchsia.hardware.clock;
using zx;
const NAME_LEN uint32 = 30;
type FrequencyInfo = struct {
name array<uint8, NAME_LEN>;
frequency uint64;
};
/// Used for driver-to-non-driver communication.
closed protocol Device {
strict Measure(struct {
clock uint32;
}) -> (struct {
info FrequencyInfo;
});
strict GetCount() -> (struct {
count uint32;
});
// For debugging
strict Enable(struct {
clock uint32;
}) -> () error zx.Status;
strict Disable(struct {
clock uint32;
}) -> () error zx.Status;
};
/// Used for driver-to-driver communication.
@discoverable
closed protocol Clock {
/// Enables (ungates) this clock.
/// Drivers *must* call enable on all clocks they depend upon.
strict Enable() -> () error zx.Status;
/// Disables (gates) this clock.
/// Drivers should call this method to indicate to the clock subsystem that
/// a particular clock signal is no longer necessary.
strict Disable() -> () error zx.Status;
/// Returns `true` if a given clock is running.
/// May query the hardware or return a cached value.
strict IsEnabled() -> (struct {
enabled bool;
}) error zx.Status;
/// Attempt to set the rate of the clock provider.
strict SetRate(struct {
hz uint64;
}) -> () error zx.Status;
/// Query the hardware for the highest supported rate that does not
/// exceed hz_in.
strict QuerySupportedRate(struct {
hz_in uint64;
}) -> (struct {
hz_out uint64;
}) error zx.Status;
/// Returns the current rate that a given clock is running at.
strict GetRate() -> (struct {
hz uint64;
}) error zx.Status;
/// Sets the input of this clock by index. I.e. by selecting a mux.
/// This clock has N inputs defined 0 through N-1, which are valid arguemts
/// as the index to SetInput.
strict SetInput(struct {
idx uint32;
}) -> () error zx.Status;
/// Returns the number of inputs this clock has.
/// Any value between 0 and UINT32_MAX is a valid return for this method.
/// A Root Oscillator may return 0 for instance, if it has no inputs.
strict GetNumInputs() -> (struct {
n uint32;
}) error zx.Status;
/// Returns the index of the current input of this clock.
strict GetInput() -> (struct {
index uint32;
}) error zx.Status;
};
service Service {
clock client_end:Clock;
};