// Copyright 2015 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef THERMALD_CPUFREQ_DEVICE_H_
#define THERMALD_CPUFREQ_DEVICE_H_

#include <memory>
#include <string>
#include <vector>

#include "base/files/file_path.h"
#include "base/macros.h"

namespace thermald {

// Class to interface with the Linux kernel cpufreq driver.
//
// A CpufreqDevice object represents the cpufreq interface of one
// core of the system.
class CpufreqDevice {
 public:
  // Constructs an object corresponding to the cpufreq interface of the given
  // CPU id.
  explicit CpufreqDevice(int cpu_id);

  // Set the maximum frequency of the CPU.
  bool SetMaximumFrequency(int max_frequency);

  // Get the list of the frequencies at which the CPU can operate.
  // If a failure occurs, GetAvailableFrequencies returns false and does not
  // modify available_frequencies.
  bool GetAvailableFrequencies(std::vector<int> *available_frequencies);

  int cpu_id() const { return cpu_id_; }

  // Get CpufreqDevice objects for all cores of the system with cpufreq support.
  // Returns true on success, otherwise false.
  static bool
  GetDevices(std::vector<std::unique_ptr<CpufreqDevice>> *cpufreq_devices);

private:
  const int cpu_id_;
  const base::FilePath sysfs_base_path_;

  DISALLOW_COPY_AND_ASSIGN(CpufreqDevice);
};

}  // namespace thermald

#endif  // THERMALD_CPUFREQ_DEVICE_H_
