1*70a7ec85SAndroid Build Coastguard Worker /* 2*70a7ec85SAndroid Build Coastguard Worker * Copyright (C) 2019 The Android Open Source Project 3*70a7ec85SAndroid Build Coastguard Worker * 4*70a7ec85SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*70a7ec85SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*70a7ec85SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*70a7ec85SAndroid Build Coastguard Worker * 8*70a7ec85SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*70a7ec85SAndroid Build Coastguard Worker * 10*70a7ec85SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*70a7ec85SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*70a7ec85SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*70a7ec85SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*70a7ec85SAndroid Build Coastguard Worker * limitations under the License. 15*70a7ec85SAndroid Build Coastguard Worker */ 16*70a7ec85SAndroid Build Coastguard Worker 17*70a7ec85SAndroid Build Coastguard Worker #pragma once 18*70a7ec85SAndroid Build Coastguard Worker 19*70a7ec85SAndroid Build Coastguard Worker #include <map> 20*70a7ec85SAndroid Build Coastguard Worker #include <string> 21*70a7ec85SAndroid Build Coastguard Worker #include <vector> 22*70a7ec85SAndroid Build Coastguard Worker 23*70a7ec85SAndroid Build Coastguard Worker #include "MatrixKernel.h" 24*70a7ec85SAndroid Build Coastguard Worker #include "Version.h" 25*70a7ec85SAndroid Build Coastguard Worker 26*70a7ec85SAndroid Build Coastguard Worker namespace android { 27*70a7ec85SAndroid Build Coastguard Worker namespace vintf { 28*70a7ec85SAndroid Build Coastguard Worker 29*70a7ec85SAndroid Build Coastguard Worker namespace details { 30*70a7ec85SAndroid Build Coastguard Worker class MockRuntimeInfo; 31*70a7ec85SAndroid Build Coastguard Worker struct StaticRuntimeInfo; 32*70a7ec85SAndroid Build Coastguard Worker } // namespace details 33*70a7ec85SAndroid Build Coastguard Worker 34*70a7ec85SAndroid Build Coastguard Worker // KernelInfo includes kernel-specific information on a device. 35*70a7ec85SAndroid Build Coastguard Worker class KernelInfo { 36*70a7ec85SAndroid Build Coastguard Worker public: 37*70a7ec85SAndroid Build Coastguard Worker KernelInfo() = default; 38*70a7ec85SAndroid Build Coastguard Worker 39*70a7ec85SAndroid Build Coastguard Worker const KernelVersion& version() const; 40*70a7ec85SAndroid Build Coastguard Worker const std::map<std::string, std::string>& configs() const; 41*70a7ec85SAndroid Build Coastguard Worker 42*70a7ec85SAndroid Build Coastguard Worker // mVersion = x'.y'.z', minLts = x.y.z, 43*70a7ec85SAndroid Build Coastguard Worker // match if x == x' , y == y' , and z <= z'. 44*70a7ec85SAndroid Build Coastguard Worker bool matchKernelVersion(const KernelVersion& minLts) const; 45*70a7ec85SAndroid Build Coastguard Worker // return true if all kernel configs in matrixConfigs matches. 46*70a7ec85SAndroid Build Coastguard Worker bool matchKernelConfigs(const std::vector<KernelConfig>& matrixConfigs, 47*70a7ec85SAndroid Build Coastguard Worker std::string* error = nullptr) const; 48*70a7ec85SAndroid Build Coastguard Worker // return vector of pointers to elements in "kernels" that this matches 49*70a7ec85SAndroid Build Coastguard Worker // kernel requirement specified. 50*70a7ec85SAndroid Build Coastguard Worker std::vector<const MatrixKernel*> getMatchedKernelRequirements( 51*70a7ec85SAndroid Build Coastguard Worker const std::vector<MatrixKernel>& kernels, Level kernelLevel, 52*70a7ec85SAndroid Build Coastguard Worker std::string* error = nullptr) const; 53*70a7ec85SAndroid Build Coastguard Worker bool operator==(const KernelInfo& other) const; 54*70a7ec85SAndroid Build Coastguard Worker 55*70a7ec85SAndroid Build Coastguard Worker // Merge information from "other". 56*70a7ec85SAndroid Build Coastguard Worker bool merge(KernelInfo* other, std::string* error = nullptr); 57*70a7ec85SAndroid Build Coastguard Worker 58*70a7ec85SAndroid Build Coastguard Worker private: 59*70a7ec85SAndroid Build Coastguard Worker friend class AssembleVintfImpl; 60*70a7ec85SAndroid Build Coastguard Worker friend class details::MockRuntimeInfo; 61*70a7ec85SAndroid Build Coastguard Worker friend struct details::StaticRuntimeInfo; 62*70a7ec85SAndroid Build Coastguard Worker friend struct HalManifest; 63*70a7ec85SAndroid Build Coastguard Worker friend struct KernelInfoConverter; 64*70a7ec85SAndroid Build Coastguard Worker friend struct LibVintfTest; 65*70a7ec85SAndroid Build Coastguard Worker friend struct RuntimeInfoFetcher; 66*70a7ec85SAndroid Build Coastguard Worker friend struct RuntimeInfo; 67*70a7ec85SAndroid Build Coastguard Worker 68*70a7ec85SAndroid Build Coastguard Worker std::vector<const MatrixKernel*> getMatchedKernelVersionAndConfigs( 69*70a7ec85SAndroid Build Coastguard Worker const std::vector<const MatrixKernel*>& kernels, std::string* error) const; 70*70a7ec85SAndroid Build Coastguard Worker 71*70a7ec85SAndroid Build Coastguard Worker // The kernel FCM version. 72*70a7ec85SAndroid Build Coastguard Worker // This API is for internal use only, depending on the parent object that contains this 73*70a7ec85SAndroid Build Coastguard Worker // KernelInfo. For public clients of libvintf, use VintfObject::getKernelLevel(). 74*70a7ec85SAndroid Build Coastguard Worker Level level() const; 75*70a7ec85SAndroid Build Coastguard Worker 76*70a7ec85SAndroid Build Coastguard Worker // x.y.z 77*70a7ec85SAndroid Build Coastguard Worker KernelVersion mVersion; 78*70a7ec85SAndroid Build Coastguard Worker // /proc/config.gz 79*70a7ec85SAndroid Build Coastguard Worker // Key: CONFIG_xxx; Value: the value after = sign. 80*70a7ec85SAndroid Build Coastguard Worker std::map<std::string, std::string> mConfigs; 81*70a7ec85SAndroid Build Coastguard Worker // Kernel FCM version 82*70a7ec85SAndroid Build Coastguard Worker Level mLevel = Level::UNSPECIFIED; 83*70a7ec85SAndroid Build Coastguard Worker }; 84*70a7ec85SAndroid Build Coastguard Worker 85*70a7ec85SAndroid Build Coastguard Worker } // namespace vintf 86*70a7ec85SAndroid Build Coastguard Worker } // namespace android 87