14e0402cbSShawn McCarney /** 24e0402cbSShawn McCarney * Copyright © 2021 IBM Corporation 34e0402cbSShawn McCarney * 44e0402cbSShawn McCarney * Licensed under the Apache License, Version 2.0 (the "License"); 54e0402cbSShawn McCarney * you may not use this file except in compliance with the License. 64e0402cbSShawn McCarney * You may obtain a copy of the License at 74e0402cbSShawn McCarney * 84e0402cbSShawn McCarney * http://www.apache.org/licenses/LICENSE-2.0 94e0402cbSShawn McCarney * 104e0402cbSShawn McCarney * Unless required by applicable law or agreed to in writing, software 114e0402cbSShawn McCarney * distributed under the License is distributed on an "AS IS" BASIS, 124e0402cbSShawn McCarney * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134e0402cbSShawn McCarney * See the License for the specific language governing permissions and 144e0402cbSShawn McCarney * limitations under the License. 154e0402cbSShawn McCarney */ 164e0402cbSShawn McCarney 174e0402cbSShawn McCarney #include "vpd.hpp" 184e0402cbSShawn McCarney 194e0402cbSShawn McCarney #include "types.hpp" 204e0402cbSShawn McCarney #include "utility.hpp" 214e0402cbSShawn McCarney 224e0402cbSShawn McCarney namespace phosphor::power::regulators 234e0402cbSShawn McCarney { 244e0402cbSShawn McCarney 25*aacc2aafSMatt Spinler std::vector<uint8_t> DBusVPD::getValue(const std::string& inventoryPath, 264e0402cbSShawn McCarney const std::string& keyword) 274e0402cbSShawn McCarney { 28*aacc2aafSMatt Spinler std::vector<uint8_t> value{}; 294e0402cbSShawn McCarney 304e0402cbSShawn McCarney // Get cached keywords for the inventory path 314e0402cbSShawn McCarney KeywordMap& cachedKeywords = cache[inventoryPath]; 324e0402cbSShawn McCarney 334e0402cbSShawn McCarney // Check if the keyword value is already cached 344e0402cbSShawn McCarney auto it = cachedKeywords.find(keyword); 354e0402cbSShawn McCarney if (it != cachedKeywords.end()) 364e0402cbSShawn McCarney { 374e0402cbSShawn McCarney value = it->second; 384e0402cbSShawn McCarney } 394e0402cbSShawn McCarney else 404e0402cbSShawn McCarney { 41*aacc2aafSMatt Spinler if (keyword == "HW") 42*aacc2aafSMatt Spinler { 43*aacc2aafSMatt Spinler // HW is a vector<uint8_t>, the others are a string. 44*aacc2aafSMatt Spinler util::getProperty("com.ibm.ipzvpd.VINI", "HW", inventoryPath, 454e0402cbSShawn McCarney INVENTORY_MGR_IFACE, bus, value); 46*aacc2aafSMatt Spinler } 47*aacc2aafSMatt Spinler else 48*aacc2aafSMatt Spinler { 49*aacc2aafSMatt Spinler // Get keyword value from D-Bus interface/property. The property 50*aacc2aafSMatt Spinler // name is normally the same as the VPD keyword name. However, the 51*aacc2aafSMatt Spinler // CCIN keyword is stored in the Model property. 52*aacc2aafSMatt Spinler std::string property{(keyword == "CCIN") ? "Model" : keyword}; 53*aacc2aafSMatt Spinler std::string stringValue; 54*aacc2aafSMatt Spinler util::getProperty(ASSET_IFACE, property, inventoryPath, 55*aacc2aafSMatt Spinler INVENTORY_MGR_IFACE, bus, stringValue); 56*aacc2aafSMatt Spinler 57*aacc2aafSMatt Spinler if (!stringValue.empty()) 58*aacc2aafSMatt Spinler { 59*aacc2aafSMatt Spinler value.insert(value.begin(), stringValue.begin(), 60*aacc2aafSMatt Spinler stringValue.end()); 61*aacc2aafSMatt Spinler } 62*aacc2aafSMatt Spinler } 634e0402cbSShawn McCarney 644e0402cbSShawn McCarney // Cache keyword value 654e0402cbSShawn McCarney cachedKeywords[keyword] = value; 664e0402cbSShawn McCarney } 674e0402cbSShawn McCarney 684e0402cbSShawn McCarney return value; 694e0402cbSShawn McCarney } 704e0402cbSShawn McCarney 714e0402cbSShawn McCarney } // namespace phosphor::power::regulators 72