/** * Copyright © 2019 IBM Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "data_interface.hpp" #include "elog_entry.hpp" #include "event_logger.hpp" #include "extensions.hpp" #include "journal.hpp" #include "manager.hpp" #include "pldm_interface.hpp" #include #include namespace openpower { namespace pels { using namespace phosphor::logging; std::unique_ptr manager; DISABLE_LOG_ENTRY_CAPS() void pelStartup(internal::Manager& logManager) { EventLogger::LogFunction logger = std::bind( std::mem_fn(&internal::Manager::create), &logManager, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); std::unique_ptr dataIface = std::make_unique(logManager.getBus()); std::unique_ptr journal = std::make_unique(); #ifndef DONT_SEND_PELS_TO_HOST std::unique_ptr hostIface = std::make_unique( logManager.getBus().get_event(), *(dataIface.get())); manager = std::make_unique(logManager, std::move(dataIface), std::move(logger), std::move(journal), std::move(hostIface)); #else manager = std::make_unique(logManager, std::move(dataIface), std::move(logger), std::move(journal)); #endif #ifdef PEL_ENABLE_PHAL // PDBG_DTB environment variable set to CEC device tree path static constexpr auto PDBG_DTB_PATH = "/var/lib/phosphor-software-manager/pnor/rw/DEVTREE"; if (setenv("PDBG_DTB", PDBG_DTB_PATH, 1)) { // Log message and continue, // This is to help continue creating PEL in raw format. log( fmt::format("Failed to set PDBG_DTB: ({})", strerror(errno)) .c_str()); } #endif } REGISTER_EXTENSION_FUNCTION(pelStartup) void pelCreate(const std::string& message, uint32_t id, uint64_t timestamp, Entry::Level severity, const AdditionalDataArg& additionalData, const AssociationEndpointsArg& assocs, const FFDCArg& ffdc) { manager->create(message, id, timestamp, severity, additionalData, assocs, ffdc); } REGISTER_EXTENSION_FUNCTION(pelCreate) void pelDelete(uint32_t id) { return manager->erase(id); } REGISTER_EXTENSION_FUNCTION(pelDelete) void pelDeleteProhibited(uint32_t id, bool& prohibited) { prohibited = manager->isDeleteProhibited(id); } REGISTER_EXTENSION_FUNCTION(pelDeleteProhibited) } // namespace pels } // namespace openpower