// 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.
deprecated_syntax;

library fuchsia.hardware.cpu.ctrl;

using zx;

/// CpuPerformanceStateInfo::frequency_hz and CpuPerformanceStateInfo::voltage_uv
/// are set to this if the frequency and voltage for the given performance state
/// are unknown respectively.
const int64 FREQUENCY_UNKNOWN = -1;
const int64 VOLTAGE_UNKNOWN = -1;

/// A collection of some basic information for a given performance state.
struct CpuPerformanceStateInfo {
    /// Frequency the core is operating at in hertz.
    int64 frequency_hz;

    // Voltage the core is operating at in microvolts.
    int64 voltage_uv;
};

protocol Device {
    /// Returns information about a given performance state for this performance
    /// domain.
    GetPerformanceStateInfo(uint32 state) -> (CpuPerformanceStateInfo info) error zx.status;

    /// Returns the number of logical cores contained within this performance
    /// domain.
    GetNumLogicalCores() -> (uint64 count);

    /// Returns a global system-wide core ID for the nth core in this
    /// performance domain. `index` must be a value in the range [0, n) where
    /// n is the value returned by GetNumLogicalCores().
    GetLogicalCoreId(uint64 index) -> (uint64 id);
};
