1a2461b34SShawn McCarney /** 2a2461b34SShawn McCarney * Copyright © 2019 IBM Corporation 3a2461b34SShawn McCarney * 4a2461b34SShawn McCarney * Licensed under the Apache License, Version 2.0 (the "License"); 5a2461b34SShawn McCarney * you may not use this file except in compliance with the License. 6a2461b34SShawn McCarney * You may obtain a copy of the License at 7a2461b34SShawn McCarney * 8a2461b34SShawn McCarney * http://www.apache.org/licenses/LICENSE-2.0 9a2461b34SShawn McCarney * 10a2461b34SShawn McCarney * Unless required by applicable law or agreed to in writing, software 11a2461b34SShawn McCarney * distributed under the License is distributed on an "AS IS" BASIS, 12a2461b34SShawn McCarney * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a2461b34SShawn McCarney * See the License for the specific language governing permissions and 14a2461b34SShawn McCarney * limitations under the License. 15a2461b34SShawn McCarney */ 16a2461b34SShawn McCarney #pragma once 17a2461b34SShawn McCarney 184bf310e3SShawn McCarney #include "configuration.hpp" 194bf310e3SShawn McCarney #include "sensor_monitoring.hpp" 2023243f84SBob King #include "services.hpp" 214bf310e3SShawn McCarney 224bf310e3SShawn McCarney #include <memory> 23a2461b34SShawn McCarney #include <string> 244bf310e3SShawn McCarney #include <utility> 25a2461b34SShawn McCarney 26ea7385b8SShawn McCarney namespace phosphor::power::regulators 27a2461b34SShawn McCarney { 28a2461b34SShawn McCarney 29779b9565SShawn McCarney // Forward declarations to avoid circular dependencies 30779b9565SShawn McCarney class Chassis; 31779b9565SShawn McCarney class Device; 32779b9565SShawn McCarney class System; 33779b9565SShawn McCarney 34a2461b34SShawn McCarney /** 35a2461b34SShawn McCarney * @class Rail 36a2461b34SShawn McCarney * 37a2461b34SShawn McCarney * A voltage rail produced by a voltage regulator. 38a2461b34SShawn McCarney * 39a2461b34SShawn McCarney * Voltage regulators produce one or more rails. Each rail typically provides a 40a2461b34SShawn McCarney * different output voltage level, such as 1.1V. 41a2461b34SShawn McCarney */ 42a2461b34SShawn McCarney class Rail 43a2461b34SShawn McCarney { 44a2461b34SShawn McCarney public: 45a2461b34SShawn McCarney // Specify which compiler-generated methods we want 46a2461b34SShawn McCarney Rail() = delete; 47a2461b34SShawn McCarney Rail(const Rail&) = delete; 48a2461b34SShawn McCarney Rail(Rail&&) = delete; 49a2461b34SShawn McCarney Rail& operator=(const Rail&) = delete; 50a2461b34SShawn McCarney Rail& operator=(Rail&&) = delete; 51a2461b34SShawn McCarney ~Rail() = default; 52a2461b34SShawn McCarney 53a2461b34SShawn McCarney /** 54a2461b34SShawn McCarney * Constructor. 55a2461b34SShawn McCarney * 56a2461b34SShawn McCarney * @param id unique rail ID 574bf310e3SShawn McCarney * @param configuration configuration changes to apply to this rail, if any 584bf310e3SShawn McCarney * @param sensorMonitoring sensor monitoring for this rail, if any 59a2461b34SShawn McCarney */ Rail(const std::string & id,std::unique_ptr<Configuration> configuration=nullptr,std::unique_ptr<SensorMonitoring> sensorMonitoring=nullptr)604bf310e3SShawn McCarney explicit Rail( 614bf310e3SShawn McCarney const std::string& id, 624bf310e3SShawn McCarney std::unique_ptr<Configuration> configuration = nullptr, 634bf310e3SShawn McCarney std::unique_ptr<SensorMonitoring> sensorMonitoring = nullptr) : 644bf310e3SShawn McCarney id{id}, 65*48781aefSPatrick Williams configuration{std::move(configuration)}, 66*48781aefSPatrick Williams sensorMonitoring{std::move(sensorMonitoring)} 670c9a33d6SAdriana Kobylak {} 68a2461b34SShawn McCarney 69a2461b34SShawn McCarney /** 702ccf9617SShawn McCarney * Clears all error history. 712ccf9617SShawn McCarney * 722ccf9617SShawn McCarney * All data on previously logged errors will be deleted. If errors occur 732ccf9617SShawn McCarney * again in the future they will be logged again. 742ccf9617SShawn McCarney * 752ccf9617SShawn McCarney * This method is normally called when the system is being powered on. 762ccf9617SShawn McCarney */ 772ccf9617SShawn McCarney void clearErrorHistory(); 782ccf9617SShawn McCarney 792ccf9617SShawn McCarney /** 80779b9565SShawn McCarney * Configure this rail. 81779b9565SShawn McCarney * 82779b9565SShawn McCarney * Applies the configuration changes that are defined for this rail, if any. 83779b9565SShawn McCarney * 84779b9565SShawn McCarney * This method should be called during the boot before regulators are 85779b9565SShawn McCarney * enabled. 86779b9565SShawn McCarney * 8723243f84SBob King * @param services system services like error logging and the journal 88779b9565SShawn McCarney * @param system system that contains the chassis 89779b9565SShawn McCarney * @param chassis chassis that contains the device 90779b9565SShawn McCarney * @param device device that contains this rail 91779b9565SShawn McCarney */ 9223243f84SBob King void configure(Services& services, System& system, Chassis& chassis, 9323243f84SBob King Device& device); 94779b9565SShawn McCarney 95779b9565SShawn McCarney /** 964bf310e3SShawn McCarney * Returns the configuration changes to apply to this rail, if any. 974bf310e3SShawn McCarney * 984bf310e3SShawn McCarney * @return Pointer to Configuration object. Will equal nullptr if no 994bf310e3SShawn McCarney * configuration changes are defined for this rail. 1004bf310e3SShawn McCarney */ getConfiguration() const1014bf310e3SShawn McCarney const std::unique_ptr<Configuration>& getConfiguration() const 1024bf310e3SShawn McCarney { 1034bf310e3SShawn McCarney return configuration; 1044bf310e3SShawn McCarney } 1054bf310e3SShawn McCarney 1064bf310e3SShawn McCarney /** 107a2461b34SShawn McCarney * Returns the unique ID of this rail. 108a2461b34SShawn McCarney * 109a2461b34SShawn McCarney * @return rail ID 110a2461b34SShawn McCarney */ getID() const1114afb285eSShawn McCarney const std::string& getID() const 112a2461b34SShawn McCarney { 113a2461b34SShawn McCarney return id; 114a2461b34SShawn McCarney } 115a2461b34SShawn McCarney 1164bf310e3SShawn McCarney /** 1177b743431SBob King * Monitor the sensors for this rail. 1187b743431SBob King * 1197b743431SBob King * Sensor monitoring is optional. If sensor monitoring is defined for this 1207b743431SBob King * rail, the sensor values are read. 1217b743431SBob King * 12254b3ab9bSShawn McCarney * This method should be called repeatedly based on a timer. 1237b743431SBob King * 1248a55292dSBob King * @param services system services like error logging and the journal 1257b743431SBob King * @param system system that contains the chassis 1267b743431SBob King * @param chassis chassis that contains the device 1277b743431SBob King * @param device device that contains this rail 1287b743431SBob King */ 1298a55292dSBob King void monitorSensors(Services& services, System& system, Chassis& chassis, 1308a55292dSBob King Device& device); 1317b743431SBob King 1327b743431SBob King /** 1334bf310e3SShawn McCarney * Returns the sensor monitoring for this rail, if any. 1344bf310e3SShawn McCarney * 1354bf310e3SShawn McCarney * @return Pointer to SensorMonitoring object. Will equal nullptr if no 1364bf310e3SShawn McCarney * sensor monitoring is defined for this rail. 1374bf310e3SShawn McCarney */ getSensorMonitoring() const1384bf310e3SShawn McCarney const std::unique_ptr<SensorMonitoring>& getSensorMonitoring() const 1394bf310e3SShawn McCarney { 1404bf310e3SShawn McCarney return sensorMonitoring; 1414bf310e3SShawn McCarney } 1424bf310e3SShawn McCarney 143a2461b34SShawn McCarney private: 144a2461b34SShawn McCarney /** 145a2461b34SShawn McCarney * Unique ID of this rail. 146a2461b34SShawn McCarney */ 147a2461b34SShawn McCarney const std::string id{}; 1484bf310e3SShawn McCarney 1494bf310e3SShawn McCarney /** 1504bf310e3SShawn McCarney * Configuration changes to apply to this rail, if any. Set to nullptr if 1514bf310e3SShawn McCarney * no configuration changes are defined for this rail. 1524bf310e3SShawn McCarney */ 1534bf310e3SShawn McCarney std::unique_ptr<Configuration> configuration{}; 1544bf310e3SShawn McCarney 1554bf310e3SShawn McCarney /** 1564bf310e3SShawn McCarney * Sensor monitoring for this rail, if any. Set to nullptr if no sensor 1574bf310e3SShawn McCarney * monitoring is defined for this rail. 1584bf310e3SShawn McCarney */ 1594bf310e3SShawn McCarney std::unique_ptr<SensorMonitoring> sensorMonitoring{}; 160a2461b34SShawn McCarney }; 161a2461b34SShawn McCarney 162ea7385b8SShawn McCarney } // namespace phosphor::power::regulators 163