1 /**
2  * Copyright © 2020 IBM Corporation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include "chassis.hpp"
18 
19 #include "system.hpp"
20 
21 namespace phosphor::power::regulators
22 {
23 
24 void Chassis::addToIDMap(IDMap& idMap)
25 {
26     // Add devices and their rails to the map
27     for (std::unique_ptr<Device>& device : devices)
28     {
29         device->addToIDMap(idMap);
30     }
31 }
32 
33 void Chassis::clearCache()
34 {
35     // Clear any cached data in each device
36     for (std::unique_ptr<Device>& device : devices)
37     {
38         device->clearCache();
39     }
40 }
41 
42 void Chassis::clearErrorHistory()
43 {
44     // Clear error history in each device
45     for (std::unique_ptr<Device>& device : devices)
46     {
47         device->clearErrorHistory();
48     }
49 }
50 
51 void Chassis::closeDevices(Services& services)
52 {
53     // Log debug message in journal
54     services.getJournal().logDebug("Closing devices in chassis " +
55                                    std::to_string(number));
56 
57     // Close devices
58     for (std::unique_ptr<Device>& device : devices)
59     {
60         device->close(services);
61     }
62 }
63 
64 void Chassis::configure(Services& services, System& system)
65 {
66     // Log info message in journal; important for verifying success of boot
67     services.getJournal().logInfo("Configuring chassis " +
68                                   std::to_string(number));
69 
70     // Configure devices
71     for (std::unique_ptr<Device>& device : devices)
72     {
73         device->configure(services, system, *this);
74     }
75 }
76 
77 void Chassis::detectPhaseFaults(Services& services, System& system)
78 {
79     // Detect phase faults in each device
80     for (std::unique_ptr<Device>& device : devices)
81     {
82         device->detectPhaseFaults(services, system, *this);
83     }
84 }
85 
86 void Chassis::monitorSensors(Services& services, System& system)
87 {
88     // Monitor sensors in each device
89     for (std::unique_ptr<Device>& device : devices)
90     {
91         device->monitorSensors(services, system, *this);
92     }
93 }
94 
95 } // namespace phosphor::power::regulators
96