143c6a1daSCheng C Yang /* 243c6a1daSCheng C Yang // Copyright (c) 2018 Intel Corporation 343c6a1daSCheng C Yang // 443c6a1daSCheng C Yang // Licensed under the Apache License, Version 2.0 (the "License"); 543c6a1daSCheng C Yang // you may not use this file except in compliance with the License. 643c6a1daSCheng C Yang // You may obtain a copy of the License at 743c6a1daSCheng C Yang // 843c6a1daSCheng C Yang // http://www.apache.org/licenses/LICENSE-2.0 943c6a1daSCheng C Yang // 1043c6a1daSCheng C Yang // Unless required by applicable law or agreed to in writing, software 1143c6a1daSCheng C Yang // distributed under the License is distributed on an "AS IS" BASIS, 1243c6a1daSCheng C Yang // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1343c6a1daSCheng C Yang // See the License for the specific language governing permissions and 1443c6a1daSCheng C Yang // limitations under the License. 1543c6a1daSCheng C Yang */ 1643c6a1daSCheng C Yang 1743c6a1daSCheng C Yang #pragma once 1818a5ab91SZhikui Ren #include "smbios_mdrv2.hpp" 1943c6a1daSCheng C Yang 20e7cf3195SJie Yang #include <xyz/openbmc_project/Association/Definitions/server.hpp> 2141654fc9SJie Yang #include <xyz/openbmc_project/Inventory/Connector/Slot/server.hpp> 2243c6a1daSCheng C Yang #include <xyz/openbmc_project/Inventory/Decorator/Asset/server.hpp> 23*b1094b2cSManojkiran Eda #include <xyz/openbmc_project/Inventory/Decorator/AssetTag/server.hpp> 2431720397SJie Yang #include <xyz/openbmc_project/Inventory/Decorator/LocationCode/server.hpp> 2518a5ab91SZhikui Ren #include <xyz/openbmc_project/Inventory/Decorator/Revision/server.hpp> 2643c6a1daSCheng C Yang #include <xyz/openbmc_project/Inventory/Item/Cpu/server.hpp> 27563570dfSJonathan Doman #include <xyz/openbmc_project/Inventory/Item/server.hpp> 28e05a5423SDavid Wang #include <xyz/openbmc_project/State/Decorator/OperationalStatus/server.hpp> 2943c6a1daSCheng C Yang 3043c6a1daSCheng C Yang namespace phosphor 3143c6a1daSCheng C Yang { 3243c6a1daSCheng C Yang 3343c6a1daSCheng C Yang namespace smbios 3443c6a1daSCheng C Yang { 3543c6a1daSCheng C Yang 3618a5ab91SZhikui Ren using rev = 3733ae81feSJason M. Bills sdbusplus::server::xyz::openbmc_project::inventory::decorator::Revision; 3818a5ab91SZhikui Ren using asset = 3933ae81feSJason M. Bills sdbusplus::server::xyz::openbmc_project::inventory::decorator::Asset; 4031720397SJie Yang using location = 4133ae81feSJason M. Bills sdbusplus::server::xyz::openbmc_project::inventory::decorator::LocationCode; 4241654fc9SJie Yang using connector = 4333ae81feSJason M. Bills sdbusplus::server::xyz::openbmc_project::inventory::connector::Slot; 4433ae81feSJason M. Bills using processor = sdbusplus::server::xyz::openbmc_project::inventory::item::Cpu; 4533ae81feSJason M. Bills using Item = sdbusplus::server::xyz::openbmc_project::inventory::Item; 46e7cf3195SJie Yang using association = 4733ae81feSJason M. Bills sdbusplus::server::xyz::openbmc_project::association::Definitions; 48e05a5423SDavid Wang using operationalStatus = sdbusplus::xyz::openbmc_project::State::Decorator:: 49e05a5423SDavid Wang server::OperationalStatus; 50*b1094b2cSManojkiran Eda using assetTagType = 51*b1094b2cSManojkiran Eda sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::AssetTag; 5243c6a1daSCheng C Yang 536076d2c3SJosh Lehan // This table is up to date as of SMBIOS spec DSP0134 3.7.0 5443c6a1daSCheng C Yang static const std::map<uint8_t, const char*> familyTable = { 556076d2c3SJosh Lehan {0x01, "Other"}, 566076d2c3SJosh Lehan {0x02, "Unknown"}, 576076d2c3SJosh Lehan {0x03, "8086"}, 586076d2c3SJosh Lehan {0x04, "80286"}, 596076d2c3SJosh Lehan {0x05, "Intel 386 processor"}, 606076d2c3SJosh Lehan {0x06, "Intel 486 processor"}, 616076d2c3SJosh Lehan {0x07, "8087"}, 626076d2c3SJosh Lehan {0x08, "80287"}, 636076d2c3SJosh Lehan {0x09, "80387"}, 646076d2c3SJosh Lehan {0x0a, "80487"}, 656076d2c3SJosh Lehan {0x0b, "Intel Pentium processor"}, 666076d2c3SJosh Lehan {0x0c, "Pentium Pro processor"}, 676076d2c3SJosh Lehan {0x0d, "Pentium II processor"}, 686076d2c3SJosh Lehan {0x0e, "Pentium processor with MMX technology"}, 696076d2c3SJosh Lehan {0x0f, "Intel Celeron processor"}, 7043c6a1daSCheng C Yang {0x10, "Pentium II Xeon processor"}, 716076d2c3SJosh Lehan {0x11, "Pentium III processor"}, 726076d2c3SJosh Lehan {0x12, "M1 Family"}, 736076d2c3SJosh Lehan {0x13, "M2 Family"}, 746076d2c3SJosh Lehan {0x14, "Intel Celeron M processor"}, 756076d2c3SJosh Lehan {0x15, "Intel Pentium 4 HT processor"}, 766076d2c3SJosh Lehan {0x16, "Intel Processor"}, 776076d2c3SJosh Lehan {0x18, "AMD Duron Processor Family"}, 786076d2c3SJosh Lehan {0x19, "K5 Family"}, 796076d2c3SJosh Lehan {0x1a, "K6 Family"}, 806076d2c3SJosh Lehan {0x1b, "K6-2"}, 816076d2c3SJosh Lehan {0x1c, "K6-3"}, 826076d2c3SJosh Lehan {0x1d, "AMD Athlon Processor Family"}, 836076d2c3SJosh Lehan {0x1e, "AMD29000 Family"}, 846076d2c3SJosh Lehan {0x1f, "K6-2+"}, 856076d2c3SJosh Lehan {0x20, "Power PC Family"}, 866076d2c3SJosh Lehan {0x21, "Power PC 601"}, 876076d2c3SJosh Lehan {0x22, "Power PC 603"}, 886076d2c3SJosh Lehan {0x23, "Power PC 603+"}, 896076d2c3SJosh Lehan {0x24, "Power PC 604"}, 906076d2c3SJosh Lehan {0x25, "Power PC 620"}, 916076d2c3SJosh Lehan {0x26, "Power PC x704"}, 926076d2c3SJosh Lehan {0x27, "Power PC 750"}, 936076d2c3SJosh Lehan {0x28, "Intel Core Duo processor"}, 946076d2c3SJosh Lehan {0x29, "Intel Core Duo mobile processor"}, 956076d2c3SJosh Lehan {0x2a, "Intel Core Solo mobile processor"}, 9679a7f6c2SJayaprakash Mutyala {0x2b, "Intel Atom processor"}, 9779a7f6c2SJayaprakash Mutyala {0x2c, "Intel Core M processor"}, 9879a7f6c2SJayaprakash Mutyala {0x2d, "Intel Core m3 processor"}, 9979a7f6c2SJayaprakash Mutyala {0x2e, "Intel Core m5 processor"}, 10079a7f6c2SJayaprakash Mutyala {0x2f, "Intel Core m7 processor"}, 1016076d2c3SJosh Lehan {0x30, "Alpha Family"}, 1026076d2c3SJosh Lehan {0x31, "Alpha 21064"}, 1036076d2c3SJosh Lehan {0x32, "Alpha 21066"}, 1046076d2c3SJosh Lehan {0x33, "Alpha 21164"}, 1056076d2c3SJosh Lehan {0x34, "Alpha 21164PC"}, 1066076d2c3SJosh Lehan {0x35, "Alpha 21164a"}, 1076076d2c3SJosh Lehan {0x36, "Alpha 21264"}, 1086076d2c3SJosh Lehan {0x37, "Alpha 21364"}, 1096076d2c3SJosh Lehan {0x38, "AMD Turion II Ultra Dual-Core Mobile M Processor Family"}, 1106076d2c3SJosh Lehan {0x39, "AMD Turion II Dual-Core Mobile M Processor Family"}, 1116076d2c3SJosh Lehan {0x3a, "AMD Athlon II Dual-Core M Processor Family"}, 1126076d2c3SJosh Lehan {0x3b, "AMD Opteron 6100 Series Processor"}, 1136076d2c3SJosh Lehan {0x3c, "AMD Opteron 4100 Series Processor"}, 1146076d2c3SJosh Lehan {0x3d, "AMD Opteron 6200 Series Processor"}, 1156076d2c3SJosh Lehan {0x3e, "AMD Opteron 4200 Series Processor"}, 1166076d2c3SJosh Lehan {0x3f, "AMD FX Series Processor"}, 1176076d2c3SJosh Lehan {0x40, "MIPS Family"}, 1186076d2c3SJosh Lehan {0x41, "MIPS R4000"}, 1196076d2c3SJosh Lehan {0x42, "MIPS R4200"}, 1206076d2c3SJosh Lehan {0x43, "MIPS R4400"}, 1216076d2c3SJosh Lehan {0x44, "MIPS R4600"}, 1226076d2c3SJosh Lehan {0x45, "MIPS R10000"}, 1236076d2c3SJosh Lehan {0x46, "AMD C-Series Processor"}, 1246076d2c3SJosh Lehan {0x47, "AMD E-Series Processor"}, 1256076d2c3SJosh Lehan {0x48, "AMD A-Series Processor"}, 1266076d2c3SJosh Lehan {0x49, "AMD G-Series Processor"}, 1276076d2c3SJosh Lehan {0x4a, "AMD Z-Series Processor"}, 1286076d2c3SJosh Lehan {0x4b, "AMD R-Series Processor"}, 1296076d2c3SJosh Lehan {0x4c, "AMD Opteron 4300 Series Processor"}, 1306076d2c3SJosh Lehan {0x4d, "AMD Opteron 6300 Series Processor"}, 1316076d2c3SJosh Lehan {0x4e, "AMD Opteron 3300 Series Processor"}, 1326076d2c3SJosh Lehan {0x4f, "AMD FirePro Series Processor"}, 1336076d2c3SJosh Lehan {0x50, "SPARC Family"}, 1346076d2c3SJosh Lehan {0x51, "SuperSPARC"}, 1356076d2c3SJosh Lehan {0x52, "microSPARC II"}, 1366076d2c3SJosh Lehan {0x53, "microSPARC IIep"}, 1376076d2c3SJosh Lehan {0x54, "UltraSPARC"}, 1386076d2c3SJosh Lehan {0x55, "UltraSPARC II"}, 1396076d2c3SJosh Lehan {0x56, "UltraSPARC Iii"}, 1406076d2c3SJosh Lehan {0x57, "UltraSPARC III"}, 1416076d2c3SJosh Lehan {0x58, "UltraSPARC IIIi"}, 1426076d2c3SJosh Lehan {0x60, "68040 Family"}, 1436076d2c3SJosh Lehan {0x61, "68xxx"}, 1446076d2c3SJosh Lehan {0x62, "68000"}, 1456076d2c3SJosh Lehan {0x63, "68010"}, 1466076d2c3SJosh Lehan {0x64, "68020"}, 1476076d2c3SJosh Lehan {0x65, "68030"}, 1486076d2c3SJosh Lehan {0x66, "AMD Athlon X4 Quad-Core Processor Family"}, 1496076d2c3SJosh Lehan {0x67, "AMD Opteron X1000 Series Processor"}, 1506076d2c3SJosh Lehan {0x68, "AMD Opteron X2000 Series APU"}, 1516076d2c3SJosh Lehan {0x69, "AMD Opteron A-Series Processor"}, 1526076d2c3SJosh Lehan {0x6a, "AMD Opteron X3000 Series APU"}, 1536076d2c3SJosh Lehan {0x6b, "AMD Zen Processor Family"}, 1546076d2c3SJosh Lehan {0x70, "Hobbit Family"}, 1556076d2c3SJosh Lehan {0x78, "Crusoe TM5000 Family"}, 1566076d2c3SJosh Lehan {0x79, "Crusoe TM3000 Family"}, 1576076d2c3SJosh Lehan {0x7a, "Efficeon TM8000 Family"}, 1586076d2c3SJosh Lehan {0x80, "Weitek"}, 1596076d2c3SJosh Lehan {0x82, "Itanium processor"}, 1606076d2c3SJosh Lehan {0x83, "AMD Athlon 64 Processor Family"}, 1616076d2c3SJosh Lehan {0x84, "AMD Opteron Processor Family"}, 1626076d2c3SJosh Lehan {0x85, "AMD Sempron Processor Family"}, 1636076d2c3SJosh Lehan {0x86, "AMD Turion 64 Mobile Technology"}, 1646076d2c3SJosh Lehan {0x87, "Dual-Core AMD Opteron Processor Family"}, 1656076d2c3SJosh Lehan {0x88, "AMD Athlon 64 X2 Dual-Core Processor Family"}, 1666076d2c3SJosh Lehan {0x89, "AMD Turion 64 X2 Mobile Technology"}, 1676076d2c3SJosh Lehan {0x8a, "Quad-Core AMD Opteron Processor Family"}, 1686076d2c3SJosh Lehan {0x8b, "Third-Generation AMD Opteron Processor Family"}, 1696076d2c3SJosh Lehan {0x8c, "AMD Phenom FX Quad-Core Processor Family"}, 1706076d2c3SJosh Lehan {0x8d, "AMD Phenom X4 Quad-Core Processor Family"}, 1716076d2c3SJosh Lehan {0x8e, "AMD Phenom X2 Dual-Core Processor Family"}, 1726076d2c3SJosh Lehan {0x8f, "AMD Athlon X2 Dual-Core Processor Family"}, 1736076d2c3SJosh Lehan {0x90, "PA-RISC Family"}, 1746076d2c3SJosh Lehan {0x91, "PA-RISC 8500"}, 1756076d2c3SJosh Lehan {0x92, "PA-RISC 8000"}, 1766076d2c3SJosh Lehan {0x93, "PA-RISC 7300LC"}, 1776076d2c3SJosh Lehan {0x94, "PA-RISC 7200"}, 1786076d2c3SJosh Lehan {0x95, "PA-RISC 7100LC"}, 1796076d2c3SJosh Lehan {0x96, "PA-RISC 7100"}, 1806076d2c3SJosh Lehan {0xa0, "V30 Family"}, 18143c6a1daSCheng C Yang {0xa1, "Quad-Core Intel Xeon processor 3200 Series"}, 18243c6a1daSCheng C Yang {0xa2, "Dual-Core Intel Xeon processor 3000 Series"}, 18343c6a1daSCheng C Yang {0xa3, "Quad-Core Intel Xeon processor 5300 Series"}, 18443c6a1daSCheng C Yang {0xa4, "Dual-Core Intel Xeon processor 5100 Series"}, 18543c6a1daSCheng C Yang {0xa5, "Dual-Core Intel Xeon processor 5000 Series"}, 18643c6a1daSCheng C Yang {0xa6, "Dual-Core Intel Xeon processor LV"}, 18743c6a1daSCheng C Yang {0xa7, "Dual-Core Intel Xeon processor ULV"}, 18843c6a1daSCheng C Yang {0xa8, "Dual-Core Intel Xeon processor 7100 Series"}, 18943c6a1daSCheng C Yang {0xa9, "Quad-Core Intel Xeon processor 5400 Series"}, 19043c6a1daSCheng C Yang {0xaa, "Quad-Core Intel Xeon processor"}, 19143c6a1daSCheng C Yang {0xab, "Dual-Core Intel Xeon processor 5200 Series"}, 19243c6a1daSCheng C Yang {0xac, "Dual-Core Intel Xeon processor 7200 Series"}, 19343c6a1daSCheng C Yang {0xad, "Quad-Core Intel Xeon processor 7300 Series"}, 19443c6a1daSCheng C Yang {0xae, "Quad-Core Intel Xeon processor 7400 Series"}, 19543c6a1daSCheng C Yang {0xaf, "Multi-Core Intel Xeon processor 7400 Series"}, 19643c6a1daSCheng C Yang {0xb0, "Pentium III Xeon processor"}, 1976076d2c3SJosh Lehan {0xb1, "Pentium III Processor with Intel SpeedStep Technology"}, 1986076d2c3SJosh Lehan {0xb2, "Pentium 4 Processor"}, 19943c6a1daSCheng C Yang {0xb3, "Intel Xeon processor"}, 2006076d2c3SJosh Lehan {0xb4, "AS400 Family"}, 20143c6a1daSCheng C Yang {0xb5, "Intel Xeon processor MP"}, 2026076d2c3SJosh Lehan {0xb6, "AMD Athlon XP Processor Family"}, 2036076d2c3SJosh Lehan {0xb7, "AMD Athlon MP Processor Family"}, 2046076d2c3SJosh Lehan {0xb8, "Intel Itanium 2 processor"}, 2056076d2c3SJosh Lehan {0xb9, "Intel Pentium M processor"}, 2066076d2c3SJosh Lehan {0xba, "Intel Celeron D processor"}, 2076076d2c3SJosh Lehan {0xbb, "Intel Pentium D processor"}, 2086076d2c3SJosh Lehan {0xbc, "Intel Pentium Processor Extreme Edition"}, 2096076d2c3SJosh Lehan {0xbd, "Intel Core Solo Processor"}, 2106076d2c3SJosh Lehan {0xbf, "Intel Core 2 Duo Processor"}, 2116076d2c3SJosh Lehan {0xc0, "Intel Core 2 Solo processor"}, 2126076d2c3SJosh Lehan {0xc1, "Intel Core 2 Extreme processor"}, 2136076d2c3SJosh Lehan {0xc2, "Intel Core 2 Quad processor"}, 2146076d2c3SJosh Lehan {0xc3, "Intel Core 2 Extreme mobile processor"}, 2156076d2c3SJosh Lehan {0xc4, "Intel Core 2 Duo mobile processor"}, 2166076d2c3SJosh Lehan {0xc5, "Intel Core 2 Solo mobile processor"}, 2176076d2c3SJosh Lehan {0xc6, "Intel Core i7 processor"}, 2186076d2c3SJosh Lehan {0xc7, "Dual-Core Intel Celeron processor"}, 2196076d2c3SJosh Lehan {0xc8, "IBM390 Family"}, 2206076d2c3SJosh Lehan {0xc9, "G4"}, 2216076d2c3SJosh Lehan {0xca, "G5"}, 2226076d2c3SJosh Lehan {0xcb, "ESA/390 G6"}, 2236076d2c3SJosh Lehan {0xcc, "z/Architecture base"}, 2246076d2c3SJosh Lehan {0xcd, "Intel Core i5 processor"}, 2256076d2c3SJosh Lehan {0xce, "Intel Core i3 processor"}, 2266076d2c3SJosh Lehan {0xcf, "Intel Core i9 processor"}, 2276076d2c3SJosh Lehan {0xd2, "VIA C7-M Processor Family"}, 2286076d2c3SJosh Lehan {0xd3, "VIA C7-D Processor Family"}, 2296076d2c3SJosh Lehan {0xd4, "VIA C7 Processor Family"}, 2306076d2c3SJosh Lehan {0xd5, "VIA Eden Processor Family"}, 23143c6a1daSCheng C Yang {0xd6, "Multi-Core Intel Xeon processor"}, 23243c6a1daSCheng C Yang {0xd7, "Dual-Core Intel Xeon processor 3xxx Series"}, 23343c6a1daSCheng C Yang {0xd8, "Quad-Core Intel Xeon processor 3xxx Series"}, 23443c6a1daSCheng C Yang {0xd9, "VIA Nano Processor Family"}, 23543c6a1daSCheng C Yang {0xda, "Dual-Core Intel Xeon processor 5xxx Series"}, 23643c6a1daSCheng C Yang {0xdb, "Quad-Core Intel Xeon processor 5xxx Series"}, 23743c6a1daSCheng C Yang {0xdd, "Dual-Core Intel Xeon processor 7xxx Series"}, 23843c6a1daSCheng C Yang {0xde, "Quad-Core Intel Xeon processor 7xxx Series"}, 23943c6a1daSCheng C Yang {0xdf, "Multi-Core Intel Xeon processor 7xxx Series"}, 240800bb700SCharles Boyer {0xe0, "Multi-Core Intel Xeon processor 3400 Series"}, 2416076d2c3SJosh Lehan {0xe4, "AMD Opteron 3000 Series Processor"}, 2426076d2c3SJosh Lehan {0xe5, "AMD Sempron II Processor"}, 2436076d2c3SJosh Lehan {0xe6, "Embedded AMD Opteron Quad-Core Processor Family"}, 2446076d2c3SJosh Lehan {0xe7, "AMD Phenom Triple-Core Processor Family"}, 2456076d2c3SJosh Lehan {0xe8, "AMD Turion Ultra Dual-Core Mobile Processor Family"}, 2466076d2c3SJosh Lehan {0xe9, "AMD Turion Dual-Core Mobile Processor Family"}, 2476076d2c3SJosh Lehan {0xea, "AMD Athlon Dual-Core Processor Family"}, 2486076d2c3SJosh Lehan {0xeb, "AMD Sempron SI Processor Family"}, 2496076d2c3SJosh Lehan {0xec, "AMD Phenom II Processor Family"}, 2506076d2c3SJosh Lehan {0xed, "AMD Athlon II Processor Family"}, 2516076d2c3SJosh Lehan {0xee, "Six-core AMD Opteron Processor Family"}, 2526076d2c3SJosh Lehan {0xef, "AMD Sempron M Processor Family"}, 2536076d2c3SJosh Lehan {0xfa, "i860"}, 2546076d2c3SJosh Lehan {0xfb, "i960"}, 2556076d2c3SJosh Lehan {0xfe, "Processor Family 2 Indicator"}}; 256800bb700SCharles Boyer 2576076d2c3SJosh Lehan // This table is up to date as of SMBIOS spec DSP0134 3.7.0 258800bb700SCharles Boyer static const std::map<uint16_t, const char*> family2Table = { 2596076d2c3SJosh Lehan {0x100, "ARMv7"}, 2606076d2c3SJosh Lehan {0x101, "ARMv8"}, 2616076d2c3SJosh Lehan {0x102, "ARMv9"}, 2626076d2c3SJosh Lehan {0x104, "SH-3"}, 2636076d2c3SJosh Lehan {0x105, "SH-4"}, 2646076d2c3SJosh Lehan {0x118, "ARM"}, 2656076d2c3SJosh Lehan {0x119, "StrongARM"}, 2666076d2c3SJosh Lehan {0x12c, "6x86"}, 2676076d2c3SJosh Lehan {0x12d, "MediaGX"}, 2686076d2c3SJosh Lehan {0x12e, "MII"}, 2696076d2c3SJosh Lehan {0x140, "WinChip"}, 2706076d2c3SJosh Lehan {0x15e, "DSP"}, 2716076d2c3SJosh Lehan {0x1f4, "Video Processor"}, 2726076d2c3SJosh Lehan {0x200, "RISC-V RV32"}, 2736076d2c3SJosh Lehan {0x201, "RISC-V RV64"}, 2746076d2c3SJosh Lehan {0x202, "RISC-V RV128"}, 2756076d2c3SJosh Lehan {0x258, "LoongArch"}, 2766076d2c3SJosh Lehan {0x259, "Loongson 1 Processor Family"}, 2776076d2c3SJosh Lehan {0x25a, "Loongson 2 Processor Family"}, 2786076d2c3SJosh Lehan {0x25b, "Loongson 3 Processor Family"}, 2796076d2c3SJosh Lehan {0x25c, "Loongson 2K Processor Family"}, 2806076d2c3SJosh Lehan {0x25d, "Loongson 3A Processor Family"}, 2816076d2c3SJosh Lehan {0x25e, "Loongson 3B Processor Family"}, 2826076d2c3SJosh Lehan {0x25f, "Loongson 3C Processor Family"}, 2836076d2c3SJosh Lehan {0x260, "Loongson 3D Processor Family"}, 2846076d2c3SJosh Lehan {0x261, "Loongson 3E Processor Family"}, 2856076d2c3SJosh Lehan {0x262, "Dual-Core Loongson 2K Processor 2xxx Series"}, 2866076d2c3SJosh Lehan {0x26c, "Quad-Core Loongson 3A Processor 5xxx Series"}, 2876076d2c3SJosh Lehan {0x26d, "Multi-Core Loongson 3A Processor 5xxx Series"}, 2886076d2c3SJosh Lehan {0x26e, "Quad-Core Loongson 3B Processor 5xxx Series"}, 2896076d2c3SJosh Lehan {0x26f, "Multi-Core Loongson 3B Processor 5xxx Series"}, 2906076d2c3SJosh Lehan {0x270, "Multi-Core Loongson 3C Processor 5xxx Series"}, 2916076d2c3SJosh Lehan {0x271, "Multi-Core Loongson 3D Processor 5xxx Series"}}; 29243c6a1daSCheng C Yang 29343c6a1daSCheng C Yang // Definition follow smbios spec DSP0134 3.0.0 29418a5ab91SZhikui Ren static const std::array<std::optional<processor::Capability>, 16> 2951d73dcccSPatrick Williams characteristicsTable{ 2961d73dcccSPatrick Williams std::nullopt, 29718a5ab91SZhikui Ren std::nullopt, 29818a5ab91SZhikui Ren processor::Capability::Capable64bit, 29918a5ab91SZhikui Ren processor::Capability::MultiCore, 30018a5ab91SZhikui Ren processor::Capability::HardwareThread, 30118a5ab91SZhikui Ren processor::Capability::ExecuteProtection, 30218a5ab91SZhikui Ren processor::Capability::EnhancedVirtualization, 30318a5ab91SZhikui Ren processor::Capability::PowerPerformanceControl, 30418a5ab91SZhikui Ren std::nullopt, 30518a5ab91SZhikui Ren std::nullopt, 30618a5ab91SZhikui Ren std::nullopt, 30718a5ab91SZhikui Ren std::nullopt, 30818a5ab91SZhikui Ren std::nullopt, 30918a5ab91SZhikui Ren std::nullopt, 31018a5ab91SZhikui Ren std::nullopt, 31118a5ab91SZhikui Ren std::nullopt}; 31243c6a1daSCheng C Yang 31341654fc9SJie Yang class Cpu : 31441654fc9SJie Yang sdbusplus::server::object_t<processor, asset, location, connector, rev, 315*b1094b2cSManojkiran Eda Item, association, operationalStatus, 316*b1094b2cSManojkiran Eda assetTagType> 31743c6a1daSCheng C Yang { 31843c6a1daSCheng C Yang public: 31943c6a1daSCheng C Yang Cpu() = delete; 32043c6a1daSCheng C Yang Cpu(const Cpu&) = delete; 32143c6a1daSCheng C Yang Cpu& operator=(const Cpu&) = delete; 32243c6a1daSCheng C Yang Cpu(Cpu&&) = delete; 32343c6a1daSCheng C Yang Cpu& operator=(Cpu&&) = delete; 32443c6a1daSCheng C Yang ~Cpu() = default; 32543c6a1daSCheng C Yang Cpu(sdbusplus::bus_t & bus,const std::string & objPath,const uint8_t & cpuId,uint8_t * smbiosTableStorage,const std::string & motherboard)32677b9c478SPatrick Williams Cpu(sdbusplus::bus_t& bus, const std::string& objPath, const uint8_t& cpuId, 32777b9c478SPatrick Williams uint8_t* smbiosTableStorage, const std::string& motherboard) : 32841654fc9SJie Yang sdbusplus::server::object_t<processor, asset, location, connector, rev, 329*b1094b2cSManojkiran Eda Item, association, operationalStatus, 330*b1094b2cSManojkiran Eda assetTagType>(bus, objPath.c_str()), 331e7cf3195SJie Yang cpuNum(cpuId), storage(smbiosTableStorage), motherboardPath(motherboard) 33243c6a1daSCheng C Yang { 3335a122a6eSBrandon Kim infoUpdate(smbiosTableStorage, motherboard); 33443c6a1daSCheng C Yang } 33543c6a1daSCheng C Yang 3365a122a6eSBrandon Kim void infoUpdate(uint8_t* smbiosTableStorage, 3375a122a6eSBrandon Kim const std::string& motherboard); 33843c6a1daSCheng C Yang 33943c6a1daSCheng C Yang private: 34043c6a1daSCheng C Yang uint8_t cpuNum; 34143c6a1daSCheng C Yang 34243c6a1daSCheng C Yang uint8_t* storage; 34343c6a1daSCheng C Yang 344e7cf3195SJie Yang std::string motherboardPath; 345e7cf3195SJie Yang 34643c6a1daSCheng C Yang struct ProcessorInfo 34743c6a1daSCheng C Yang { 34843c6a1daSCheng C Yang uint8_t type; 34943c6a1daSCheng C Yang uint8_t length; 35043c6a1daSCheng C Yang uint16_t handle; 35143c6a1daSCheng C Yang uint8_t socketDesignation; 35243c6a1daSCheng C Yang uint8_t processorType; 35343c6a1daSCheng C Yang uint8_t family; 35443c6a1daSCheng C Yang uint8_t manufacturer; 35543c6a1daSCheng C Yang uint64_t id; 35643c6a1daSCheng C Yang uint8_t version; 35743c6a1daSCheng C Yang uint8_t voltage; 35843c6a1daSCheng C Yang uint16_t exClock; 35943c6a1daSCheng C Yang uint16_t maxSpeed; 36043c6a1daSCheng C Yang uint16_t currSpeed; 36143c6a1daSCheng C Yang uint8_t status; 36243c6a1daSCheng C Yang uint8_t upgrade; 36343c6a1daSCheng C Yang uint16_t l1Handle; 36443c6a1daSCheng C Yang uint16_t l2Handle; 36543c6a1daSCheng C Yang uint16_t l3Handle; 36643c6a1daSCheng C Yang uint8_t serialNum; 36743c6a1daSCheng C Yang uint8_t assetTag; 36843c6a1daSCheng C Yang uint8_t partNum; 36943c6a1daSCheng C Yang uint8_t coreCount; 37043c6a1daSCheng C Yang uint8_t coreEnable; 37143c6a1daSCheng C Yang uint8_t threadCount; 37243c6a1daSCheng C Yang uint16_t characteristics; 37343c6a1daSCheng C Yang uint16_t family2; 37443c6a1daSCheng C Yang uint16_t coreCount2; 37543c6a1daSCheng C Yang uint16_t coreEnable2; 37643c6a1daSCheng C Yang uint16_t threadCount2; 37743c6a1daSCheng C Yang } __attribute__((packed)); 37843c6a1daSCheng C Yang 37918a5ab91SZhikui Ren void socket(const uint8_t positionNum, const uint8_t structLen, 38043c6a1daSCheng C Yang uint8_t* dataIn); 381800bb700SCharles Boyer void family(const uint8_t family, const uint16_t family2); 38218a5ab91SZhikui Ren void manufacturer(const uint8_t positionNum, const uint8_t structLen, 38343c6a1daSCheng C Yang uint8_t* dataIn); 384e643169dSCharles Boyer void serialNumber(const uint8_t positionNum, const uint8_t structLen, 385e643169dSCharles Boyer uint8_t* dataIn); 386e643169dSCharles Boyer void partNumber(const uint8_t positionNum, const uint8_t structLen, 387e643169dSCharles Boyer uint8_t* dataIn); 38818a5ab91SZhikui Ren void version(const uint8_t positionNum, const uint8_t structLen, 38943c6a1daSCheng C Yang uint8_t* dataIn); 39018a5ab91SZhikui Ren void characteristics(const uint16_t value); 391*b1094b2cSManojkiran Eda void assetTagString(const uint8_t positionNum, const uint8_t structLen, 392*b1094b2cSManojkiran Eda uint8_t* dataIn); 39343c6a1daSCheng C Yang }; 39443c6a1daSCheng C Yang 39543c6a1daSCheng C Yang } // namespace smbios 39643c6a1daSCheng C Yang 39743c6a1daSCheng C Yang } // namespace phosphor 398