1 // SPDX-License-Identifier: Apache-2.0 2 // SPDX-FileCopyrightText: Copyright OpenBMC Authors 3 #pragma once 4 #include <nlohmann/json.hpp> 5 6 namespace pcie_device 7 { 8 // clang-format off 9 10 enum class PCIeTypes{ 11 Invalid, 12 Gen1, 13 Gen2, 14 Gen3, 15 Gen4, 16 Gen5, 17 Gen6, 18 }; 19 20 enum class DeviceType{ 21 Invalid, 22 SingleFunction, 23 MultiFunction, 24 Simulated, 25 Retimer, 26 }; 27 28 enum class SlotType{ 29 Invalid, 30 FullLength, 31 HalfLength, 32 LowProfile, 33 Mini, 34 M2, 35 OEM, 36 OCP3Small, 37 OCP3Large, 38 U2, 39 EDSFF, 40 }; 41 42 enum class LaneSplittingType{ 43 Invalid, 44 None, 45 Bridged, 46 Bifurcated, 47 }; 48 49 enum class CXLDeviceType{ 50 Invalid, 51 Type1, 52 Type2, 53 Type3, 54 }; 55 56 enum class CXLDynamicCapacityPolicies{ 57 Invalid, 58 Free, 59 Contiguous, 60 Prescriptive, 61 TagBased, 62 }; 63 64 enum class CXLProtocolVersion{ 65 Invalid, 66 CXL1_1, 67 CXL2_0, 68 CXL3_0, 69 CXL3_1, 70 CXL3_2, 71 }; 72 73 NLOHMANN_JSON_SERIALIZE_ENUM(PCIeTypes, { 74 {PCIeTypes::Invalid, "Invalid"}, 75 {PCIeTypes::Gen1, "Gen1"}, 76 {PCIeTypes::Gen2, "Gen2"}, 77 {PCIeTypes::Gen3, "Gen3"}, 78 {PCIeTypes::Gen4, "Gen4"}, 79 {PCIeTypes::Gen5, "Gen5"}, 80 {PCIeTypes::Gen6, "Gen6"}, 81 }); 82 83 NLOHMANN_JSON_SERIALIZE_ENUM(DeviceType, { 84 {DeviceType::Invalid, "Invalid"}, 85 {DeviceType::SingleFunction, "SingleFunction"}, 86 {DeviceType::MultiFunction, "MultiFunction"}, 87 {DeviceType::Simulated, "Simulated"}, 88 {DeviceType::Retimer, "Retimer"}, 89 }); 90 91 NLOHMANN_JSON_SERIALIZE_ENUM(SlotType, { 92 {SlotType::Invalid, "Invalid"}, 93 {SlotType::FullLength, "FullLength"}, 94 {SlotType::HalfLength, "HalfLength"}, 95 {SlotType::LowProfile, "LowProfile"}, 96 {SlotType::Mini, "Mini"}, 97 {SlotType::M2, "M2"}, 98 {SlotType::OEM, "OEM"}, 99 {SlotType::OCP3Small, "OCP3Small"}, 100 {SlotType::OCP3Large, "OCP3Large"}, 101 {SlotType::U2, "U2"}, 102 {SlotType::EDSFF, "EDSFF"}, 103 }); 104 105 NLOHMANN_JSON_SERIALIZE_ENUM(LaneSplittingType, { 106 {LaneSplittingType::Invalid, "Invalid"}, 107 {LaneSplittingType::None, "None"}, 108 {LaneSplittingType::Bridged, "Bridged"}, 109 {LaneSplittingType::Bifurcated, "Bifurcated"}, 110 }); 111 112 NLOHMANN_JSON_SERIALIZE_ENUM(CXLDeviceType, { 113 {CXLDeviceType::Invalid, "Invalid"}, 114 {CXLDeviceType::Type1, "Type1"}, 115 {CXLDeviceType::Type2, "Type2"}, 116 {CXLDeviceType::Type3, "Type3"}, 117 }); 118 119 NLOHMANN_JSON_SERIALIZE_ENUM(CXLDynamicCapacityPolicies, { 120 {CXLDynamicCapacityPolicies::Invalid, "Invalid"}, 121 {CXLDynamicCapacityPolicies::Free, "Free"}, 122 {CXLDynamicCapacityPolicies::Contiguous, "Contiguous"}, 123 {CXLDynamicCapacityPolicies::Prescriptive, "Prescriptive"}, 124 {CXLDynamicCapacityPolicies::TagBased, "TagBased"}, 125 }); 126 127 NLOHMANN_JSON_SERIALIZE_ENUM(CXLProtocolVersion, { 128 {CXLProtocolVersion::Invalid, "Invalid"}, 129 {CXLProtocolVersion::CXL1_1, "CXL1_1"}, 130 {CXLProtocolVersion::CXL2_0, "CXL2_0"}, 131 {CXLProtocolVersion::CXL3_0, "CXL3_0"}, 132 {CXLProtocolVersion::CXL3_1, "CXL3_1"}, 133 {CXLProtocolVersion::CXL3_2, "CXL3_2"}, 134 }); 135 136 } 137 // clang-format on 138