xref: /openbmc/smbios-mdr/include/cpu.hpp (revision b1094b2c8788323c2dd4e1e5a5b4e5a86794b6c8)
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