/* // Copyright (c) 2018 Intel 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. */ #pragma once #include "smbios_mdrv2.hpp" #include #include namespace phosphor { namespace smbios { class System : sdbusplus::server::object_t< sdbusplus::server::xyz::openbmc_project::common::UUID>, sdbusplus::server::object_t< sdbusplus::server::xyz::openbmc_project::inventory::decorator::Revision> { public: System() = delete; ~System() = default; System(const System&) = delete; System& operator=(const System&) = delete; System(System&&) = default; System& operator=(System&&) = default; System(sdbusplus::bus_t& bus, const std::string& objPath, uint8_t* smbiosTableStorage) : sdbusplus::server::object_t< sdbusplus::server::xyz::openbmc_project::common::UUID>( bus, objPath.c_str()), bus(bus), sdbusplus::server::object_t( bus, objPath.c_str()), path(objPath), storage(smbiosTableStorage) { std::string input = "0"; uuid(input); version("0.00"); } std::string uuid(std::string value) override; std::string version(std::string value) override; sdbusplus::bus_t& bus; private: /** @brief Path of the group instance */ std::string path; uint8_t* storage; struct BIOSInfo { uint8_t type; uint8_t length; uint16_t handle; uint8_t vendor; uint8_t biosVersion; uint16_t startAddrSegment; uint8_t releaseData; uint8_t romSize; uint64_t characteristics; uint16_t externCharacteristics; uint8_t systemBIOSMajor; uint8_t systemBIOSMinor; uint8_t embeddedFirmwareMajor; uint8_t embeddedFirmwareMinor; } __attribute__((packed)); struct UUID { uint32_t timeLow; uint16_t timeMid; uint16_t timeHiAndVer; uint8_t clockSeqHi; uint8_t clockSeqLow; uint8_t node[6]; } __attribute__((packed)); struct SystemInfo { uint8_t type; uint8_t length; uint16_t handle; uint8_t manufacturer; uint8_t productName; uint8_t version; uint8_t serialNum; struct UUID uuid; uint8_t wakeupType; uint8_t skuNum; uint8_t family; } __attribute__((packed)); }; } // namespace smbios } // namespace phosphor