This commit is contained in:
LeviYeoReum 2026-08-26 23:20:51 +00:00 committed by GitHub
commit 0b1c7feddc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 3341 additions and 76 deletions

View file

@ -70,6 +70,7 @@
DynamicTablesPkg/Library/Smbios/SmbiosType29Lib/SmbiosType29Lib.inf
DynamicTablesPkg/Library/Smbios/SmbiosType37Lib/SmbiosType37Lib.inf
DynamicTablesPkg/Library/Smbios/SmbiosType40Lib/SmbiosType40Lib.inf
DynamicTablesPkg/Library/Smbios/SmbiosType42Lib/SmbiosType42Lib.inf
DynamicTablesPkg/Library/Smbios/SmbiosType44Lib/SmbiosType44Lib.inf
# AML Fixup (Common)
@ -192,6 +193,7 @@
NULL|DynamicTablesPkg/Library/Smbios/SmbiosType29Lib/SmbiosType29Lib.inf
NULL|DynamicTablesPkg/Library/Smbios/SmbiosType37Lib/SmbiosType37Lib.inf
NULL|DynamicTablesPkg/Library/Smbios/SmbiosType40Lib/SmbiosType40Lib.inf
NULL|DynamicTablesPkg/Library/Smbios/SmbiosType42Lib/SmbiosType42Lib.inf
NULL|DynamicTablesPkg/Library/Smbios/SmbiosType44Lib/SmbiosType44Lib.inf
}

View file

@ -31,6 +31,16 @@
///
#define SMBIOS_MAX_STRING_SIZE (1024)
///
/// Reduced Maximum storage size, including the terminating NULL, for SMBIOS strings
/// represented inline in Configuration Manager objects. This is a
/// DynamicTablesPkg implementation limit.
///
/// The legacy 64-character constraint from SMBIOS 2.6 was required for MIF
/// compatibility and does not apply to SMBIOS 2.7 or later tables.
///
#define SMBIOS_MAX_STRING_SIZE_REDUCED (128)
// Maximum interleave ways is defined in the CXL spec section 8.2.4.19.7.
#define CFMWS_MAX_INTERLEAVE_WAYS (16)
@ -55,82 +65,90 @@
in the Arch Common Namespace
*/
typedef enum ArchCommonObjectID {
EArchCommonObjReserved, ///< 0 - Reserved
EArchCommonObjPowerManagementProfileInfo, ///< 1 - Power Management Profile Info
EArchCommonObjSerialPortInfo, ///< 2 - Generic Serial Port Info
EArchCommonObjConsolePortInfo, ///< 3 - Serial Console Port Info
EArchCommonObjSerialDebugPortInfo, ///< 4 - Serial Debug Port Info
EArchCommonObjHypervisorVendorIdentity, ///< 5 - Hypervisor Vendor Id
EArchCommonObjFixedFeatureFlags, ///< 6 - Fixed feature flags for FADT
EArchCommonObjCmRef, ///< 7 - CM Object Reference
EArchCommonObjPciConfigSpaceInfo, ///< 8 - PCI Configuration Space Info
EArchCommonObjPciAddressMapInfo, ///< 9 - Pci Address Map Info
EArchCommonObjPciInterruptMapInfo, ///< 10 - Pci Interrupt Map Info
EArchCommonObjMemoryAffinityInfo, ///< 11 - Memory Affinity Info
EArchCommonObjDeviceHandleAcpi, ///< 12 - Device Handle Acpi
EArchCommonObjDeviceHandlePci, ///< 13 - Device Handle Pci
EArchCommonObjGenericInitiatorAffinityInfo, ///< 14 - Generic Initiator Affinity
EArchCommonObjLpiInfo, ///< 15 - Lpi Info
EArchCommonObjProcHierarchyInfo, ///< 16 - Processor Hierarchy Info
EArchCommonObjCacheInfo, ///< 17 - Cache Info
EArchCommonObjCpcInfo, ///< 18 - Continuous Performance Control Info
EArchCommonObjPccSubspaceType0Info, ///< 19 - Pcc Subspace Type 0 Info
EArchCommonObjPccSubspaceType1Info, ///< 20 - Pcc Subspace Type 1 Info
EArchCommonObjPccSubspaceType2Info, ///< 21 - Pcc Subspace Type 2 Info
EArchCommonObjPccSubspaceType3Info, ///< 22 - Pcc Subspace Type 3 Info
EArchCommonObjPccSubspaceType4Info, ///< 23 - Pcc Subspace Type 4 Info
EArchCommonObjPccSubspaceType5Info, ///< 24 - Pcc Subspace Type 5 Info
EArchCommonObjPsdInfo, ///< 25 - P-State Dependency (PSD) Info
EArchCommonObjTpm2InterfaceInfo, ///< 26 - TPM Interface Info
EArchCommonObjSpmiInterfaceInfo, ///< 27 - SPMI Interface Info
EArchCommonObjSpmiInterruptDeviceInfo, ///< 28 - SPMI Interrupt and Device Info
EArchCommonObjCstInfo, ///< 29 - C-State Info
EArchCommonObjCsdInfo, ///< 30 - C-State Dependency (CSD) Info
EArchCommonObjPctInfo, ///< 31 - P-State control (PCT) Info
EArchCommonObjPssInfo, ///< 32 - P-State status (PSS) Info
EArchCommonObjPpcInfo, ///< 33 - P-State control (PPC) Info
EArchCommonObjStaInfo, ///< 34 - _STA (Device Status) Info
EArchCommonObjMemoryRangeDescriptor, ///< 35 - Memory Range Descriptor
EArchCommonObjGenericDbg2DeviceInfo, ///< 36 - Generic DBG2 Device Info
EArchCommonObjCxlHostBridgeInfo, ///< 37 - CXL Host Bridge Info
EArchCommonObjCxlFixedMemoryWindowInfo, ///< 38 - CXL Fixed Memory Window Info
EArchCommonObjProximityDomainInfo, ///< 39 - Proximity Domain Info
EArchCommonObjProximityDomainRelationInfo, ///< 40 - Proximity Domain Relation Info
EArchCommonObjSystemLocalityInfo, ///< 41 - System Locality Info
EArchCommonObjMemoryProximityDomainAttrInfo, ///< 42 - Memory Proximity Domain Attribute
EArchCommonObjMemoryLatBwInfo, ///< 43 - Memory Latency Bandwidth Info
EArchCommonObjMemoryCacheInfo, ///< 44 - Memory Cache Info
EArchCommonObjSpcrInfo, ///< 45 - Serial Terminal and Interrupt Info
EArchCommonObjTpm2DeviceInfo, ///< 46 - TPM2 Device Info
EArchCommonObjMcfgPciConfigSpaceInfo, ///< 47 - MCFG PCI Configuration Space Info
EArchCommonObjPciRootPortInfo, ///< 48 - PCI root port configuration Info
EArchCommonObjErrSourcePciRootPortInfo, ///< 49 - PCI Express AER Info for RootPort
EArchCommonObjErrSourcePciDeviceInfo, ///< 50 - PCI Express AER Info for Device (Endpoint)
EArchCommonObjErrSourcePciBridgeInfo, ///< 51 - PCI Express AER Info for Bridge
EArchCommonObjErrSourceGenericHwInfo, ///< 52 - Generic Hardware Error Source Info
EArchCommonObjErrSourceGenericHwVer2Info, ///< 53 - Generic Hardware Error Source Info version 2
EArchCommonObjEinjInstructionsInfo, ///< 54 - Einj Instruction Info
EArchCommonObjPlatformFwInfo, ///< 54 - Platform Firmware Info
EArchCommonObjPhysicalMemoryArray, ///< 55 - Physical Memory Array Info
EArchCommonObjMemoryDeviceInfo, ///< 56 - Memory Device Info
EArchCommonObjMemoryArrayMappedAddress, ///< 57 - Memory Array Mapped Address Info
EArchCommonObjCoolingDeviceInfo, ///< 58 - Cooling Device Info
EArchCommonObjTemperatureProbeInfo, ///< 59 - Temperature Probe Info
EArchCommonObjVoltageProbeInfo, ///< 60 - Voltage Probe Info
EArchCommonObjElectricalCurrentProbeInfo, ///< 61 - Electrical Current Probe Info
EArchCommonObjSystemResetInfo, ///< 62 - System Reset Info
EArchCommonObjMemoryDeviceMappedAddress, ///< 63 - Memory Device Mapped Address Info
EArchCommonObjMemoryChannelInfo, ///< 64 - Memory Channel Info
EArchCommonObjMemoryChannelDevice, ///< 65 - Memory Channel Device Info
EArchCommonObjProcessorSpecificBlockInfo, ///< 66 - Processor specific data Info
EArchCommonObjSystemInfo, ///< 67 - System Info
EArchCommonObjAdditionalInformation, ///< 68 - Additional Information
EArchCommonObjAdditionalInformationEntry, ///< 69 - Additional Information Entry
EArchCommonObjAdditionalInformationValue, ///< 70 - Additional Information Value
EArchCommonObjSystemEnclosureInfo, ///< 71 - System Enclosure Info
EArchCommonObjEnclosureElement, ///< 72 - System Enclosure Contained Element
EArchCommonObjBaseboardInfo, ///< 73 - Baseboard Info
EArchCommonObjBaseboardContainedObject, ///< 74 - Baseboard Contained Object
EArchCommonObjReserved, ///< 0 - Reserved
EArchCommonObjPowerManagementProfileInfo, ///< 1 - Power Management Profile Info
EArchCommonObjSerialPortInfo, ///< 2 - Generic Serial Port Info
EArchCommonObjConsolePortInfo, ///< 3 - Serial Console Port Info
EArchCommonObjSerialDebugPortInfo, ///< 4 - Serial Debug Port Info
EArchCommonObjHypervisorVendorIdentity, ///< 5 - Hypervisor Vendor Id
EArchCommonObjFixedFeatureFlags, ///< 6 - Fixed feature flags for FADT
EArchCommonObjCmRef, ///< 7 - CM Object Reference
EArchCommonObjPciConfigSpaceInfo, ///< 8 - PCI Configuration Space Info
EArchCommonObjPciAddressMapInfo, ///< 9 - Pci Address Map Info
EArchCommonObjPciInterruptMapInfo, ///< 10 - Pci Interrupt Map Info
EArchCommonObjMemoryAffinityInfo, ///< 11 - Memory Affinity Info
EArchCommonObjDeviceHandleAcpi, ///< 12 - Device Handle Acpi
EArchCommonObjDeviceHandlePci, ///< 13 - Device Handle Pci
EArchCommonObjGenericInitiatorAffinityInfo, ///< 14 - Generic Initiator Affinity
EArchCommonObjLpiInfo, ///< 15 - Lpi Info
EArchCommonObjProcHierarchyInfo, ///< 16 - Processor Hierarchy Info
EArchCommonObjCacheInfo, ///< 17 - Cache Info
EArchCommonObjCpcInfo, ///< 18 - Continuous Performance Control Info
EArchCommonObjPccSubspaceType0Info, ///< 19 - Pcc Subspace Type 0 Info
EArchCommonObjPccSubspaceType1Info, ///< 20 - Pcc Subspace Type 1 Info
EArchCommonObjPccSubspaceType2Info, ///< 21 - Pcc Subspace Type 2 Info
EArchCommonObjPccSubspaceType3Info, ///< 22 - Pcc Subspace Type 3 Info
EArchCommonObjPccSubspaceType4Info, ///< 23 - Pcc Subspace Type 4 Info
EArchCommonObjPccSubspaceType5Info, ///< 24 - Pcc Subspace Type 5 Info
EArchCommonObjPsdInfo, ///< 25 - P-State Dependency (PSD) Info
EArchCommonObjTpm2InterfaceInfo, ///< 26 - TPM Interface Info
EArchCommonObjSpmiInterfaceInfo, ///< 27 - SPMI Interface Info
EArchCommonObjSpmiInterruptDeviceInfo, ///< 28 - SPMI Interrupt and Device Info
EArchCommonObjCstInfo, ///< 29 - C-State Info
EArchCommonObjCsdInfo, ///< 30 - C-State Dependency (CSD) Info
EArchCommonObjPctInfo, ///< 31 - P-State control (PCT) Info
EArchCommonObjPssInfo, ///< 32 - P-State status (PSS) Info
EArchCommonObjPpcInfo, ///< 33 - P-State control (PPC) Info
EArchCommonObjStaInfo, ///< 34 - _STA (Device Status) Info
EArchCommonObjMemoryRangeDescriptor, ///< 35 - Memory Range Descriptor
EArchCommonObjGenericDbg2DeviceInfo, ///< 36 - Generic DBG2 Device Info
EArchCommonObjCxlHostBridgeInfo, ///< 37 - CXL Host Bridge Info
EArchCommonObjCxlFixedMemoryWindowInfo, ///< 38 - CXL Fixed Memory Window Info
EArchCommonObjProximityDomainInfo, ///< 39 - Proximity Domain Info
EArchCommonObjProximityDomainRelationInfo, ///< 40 - Proximity Domain Relation Info
EArchCommonObjSystemLocalityInfo, ///< 41 - System Locality Info
EArchCommonObjMemoryProximityDomainAttrInfo, ///< 42 - Memory Proximity Domain Attribute
EArchCommonObjMemoryLatBwInfo, ///< 43 - Memory Latency Bandwidth Info
EArchCommonObjMemoryCacheInfo, ///< 44 - Memory Cache Info
EArchCommonObjSpcrInfo, ///< 45 - Serial Terminal and Interrupt Info
EArchCommonObjTpm2DeviceInfo, ///< 46 - TPM2 Device Info
EArchCommonObjMcfgPciConfigSpaceInfo, ///< 47 - MCFG PCI Configuration Space Info
EArchCommonObjPciRootPortInfo, ///< 48 - PCI root port configuration Info
EArchCommonObjErrSourcePciRootPortInfo, ///< 49 - PCI Express AER Info for RootPort
EArchCommonObjErrSourcePciDeviceInfo, ///< 50 - PCI Express AER Info for Device (Endpoint)
EArchCommonObjErrSourcePciBridgeInfo, ///< 51 - PCI Express AER Info for Bridge
EArchCommonObjErrSourceGenericHwInfo, ///< 52 - Generic Hardware Error Source Info
EArchCommonObjErrSourceGenericHwVer2Info, ///< 53 - Generic Hardware Error Source Info version 2
EArchCommonObjEinjInstructionsInfo, ///< 54 - Einj Instruction Info
EArchCommonObjPlatformFwInfo, ///< 54 - Platform Firmware Info
EArchCommonObjPhysicalMemoryArray, ///< 55 - Physical Memory Array Info
EArchCommonObjMemoryDeviceInfo, ///< 56 - Memory Device Info
EArchCommonObjMemoryArrayMappedAddress, ///< 57 - Memory Array Mapped Address Info
EArchCommonObjCoolingDeviceInfo, ///< 58 - Cooling Device Info
EArchCommonObjTemperatureProbeInfo, ///< 59 - Temperature Probe Info
EArchCommonObjVoltageProbeInfo, ///< 60 - Voltage Probe Info
EArchCommonObjElectricalCurrentProbeInfo, ///< 61 - Electrical Current Probe Info
EArchCommonObjSystemResetInfo, ///< 62 - System Reset Info
EArchCommonObjMemoryDeviceMappedAddress, ///< 63 - Memory Device Mapped Address Info
EArchCommonObjMemoryChannelInfo, ///< 64 - Memory Channel Info
EArchCommonObjMemoryChannelDevice, ///< 65 - Memory Channel Device Info
EArchCommonObjProcessorSpecificBlockInfo, ///< 66 - Processor specific data Info
EArchCommonObjSystemInfo, ///< 67 - System Info
EArchCommonObjAdditionalInformation, ///< 68 - Additional Information
EArchCommonObjAdditionalInformationEntry, ///< 69 - Additional Information Entry
EArchCommonObjAdditionalInformationValue, ///< 70 - Additional Information Value
EArchCommonObjSystemEnclosureInfo, ///< 71 - System Enclosure Info
EArchCommonObjEnclosureElement, ///< 72 - System Enclosure Contained Element
EArchCommonObjBaseboardInfo, ///< 73 - Baseboard Info
EArchCommonObjBaseboardContainedObject, ///< 74 - Baseboard Contained Object
EArchCommonObjMchiInfo, ///< 75 - Management Controller Host Interface Info.
EArchCommonObjMchiMctpDataInfo, ///< 76 - MCHI MCTP specific data Info.
EArchCommonObjMchiNetworkDataInfo, ///< 77 - MCHI Network specific data Info.
EArchCommonObjMchiProtocolInfo, ///< 78 - Management Controller Host Interface Protocol Info.
EArchCommonObjMchiProtocolMctpDataInfo, ///< 79 - MCHI MCTP Protocol Info.
EArchCommonObjMchiProtocolRedfishOverIpDataInfo, ///< 80 - Redfish Over Ip Protocol Info.
EArchCommonObjMchiNetworkDeviceDescUsbInfo, ///< 81 - MCHI USB Network Device descriptor info
EArchCommonObjMchiNetworkDeviceDescPciInfo, ///< 82 - MCHI PCI/PCIe Network Device descriptor info
EArchCommonObjMax
} EARCH_COMMON_OBJECT_ID;
@ -1952,4 +1970,192 @@ typedef struct CmArchCommonBaseboardInfo {
UINT8 BoardType;
} CM_ARCH_COMMON_BASEBOARD_INFO;
/** A structure that describes Management Controller Host Interface Info.
ID: EArchCommonObjMchiInfo
**/
typedef struct CmArchCommonMchiInfo {
/// A unique token used to identify this object.
CM_OBJECT_TOKEN Token;
/// Interface Type.
MC_HOST_INTERFACE_TYPE InterfaceType;
/// Interface Specific Data Token.
CM_OBJECT_TOKEN InterfaceDataToken;
/// Protocol Token Array for CM_ARCH_COMMON_MCHI_PROTOCOL_INFO
CM_ARCH_COMMON_OBJ_REF ProtocolTokenArray;
} CM_ARCH_COMMON_MCHI_INFO;
/** A structure that describes MCHI MCTP specific data.
ID: EArchCommonObjMchiMctpDataInfo
**/
typedef struct CmArchCommonMchiMctpDataInfo {
/// A pointer to the MMBI capability pointer. (only for MCTP-MMBI).
UINT64 MmbiCapDesPointer;
} CM_ARCH_COMMON_MCHI_MCTP_DATA_INFO;
/** A structure that describes MCHI Network specific data.
ID: EArchCommonObjMchiNetworkDataInfo
**/
typedef struct CmArchCommonMchiNetworkDataInfo {
/// Device Type.
UINT8 DeviceType;
/// Device data descriptor Data Token.
CM_OBJECT_TOKEN DeviceDataToken;
} CM_ARCH_COMMON_MCHI_NETWORK_DATA_INFO;
/** A structure that describes Management Controller Host Interface
Protocol Info.
ID: EArchCommonObjMchiProtocolInfo
**/
typedef struct CmArchCommonMchiProtocolInfo {
/// Protocol Type.
MC_HOST_INTERFACE_PROTOCOL_TYPE ProtocolType;
/// Interface Specific Data Token.
CM_OBJECT_TOKEN ProtocolDataToken;
} CM_ARCH_COMMON_MCHI_PROTOCOL_INFO;
/** A structure that describes MCTP Ip protocol info.
ID: EArchCommonObjMchiProtocolMctpDataInfo
**/
typedef struct CmArchCommonMchiProtocolMctpDataInfo {
/// Version (Major[15:8], Minor[7:0]).
UINT16 Version;
/// Link-layer type.
MC_HOST_INTERFACE_TYPE LinkLayerType;
/// Instance Number.
UINT32 Instance;
/// Characteristics
UINT32 Characteristics;
} CM_ARCH_COMMON_MCHI_PROTOCOL_MCTP_DATA_INFO;
/** A structure that describes Redfish Over Ip protocol info.
ID: EArchCommonObjMchiProtocolRedfishOverIpDataInfo
**/
typedef struct CmArchCommonMchiProtocolRedfishOverIpDataInfo {
/// Service UUID.
EFI_GUID ServiceUuid;
/// Host Ip assignment type.
UINT8 HostIpAssignType;
/// Host Ip address format.
UINT8 HostIpAddressFormat;
/// Host Ip address.
UINT8 HostIpAddress[16];
/// Host Ip mask.
UINT8 HostIpMask[16];
/// Service Ip discovery type.
UINT8 ServiceIpDiscoveryType;
/// Service Ip address format.
UINT8 ServiceIpAddressFormat;
/// Service Ip address.
UINT8 ServiceIpAddress[16];
/// Service Ip Mask.
UINT8 ServiceIpMask[16];
/// Service Ip Port.
UINT16 ServiceIpPort;
/// Service Vlan Id.
UINT32 ServiceVlanId;
/// Hostname
CHAR8 Hostname[MAX_UINT8 - 0x5B];
} CM_ARCH_COMMON_MCHI_PROTOCOL_REDFISH_OVER_IP_DATA_INFO;
/** A structure that describes Redfish USB Device descriptor Data.
ID: EArchCommonObjMchiNetworkDeviceDescUsbInfo
**/
typedef struct CmArchCommonMchiNetworkDeviceDescUsbInfo {
/// Version (1 or 2).
UINT16 Version;
/// Vendor Id.
UINT16 VendorId;
/// Product Id.
UINT16 ProductId;
/// Serial Number String.
CHAR8 SerialNumberStr[SMBIOS_MAX_STRING_SIZE_REDUCED];
/// MAC address (v2 only).
UINT8 MacAddress[6];
/// Device Characteristics (v2 only).
UINT16 Characteristic;
///
/// IPMI token associated with Type 38 record (v2 only).
/// Set to CM_NULL_TOKEN if unused.
///
CM_OBJECT_TOKEN IpmiToken;
} CM_ARCH_COMMON_MCHI_NETWORK_DEVICE_DESC_USB_INFO;
/** A structure that describes Redfish PCI/PCIe Device descriptor Data.
ID: EArchCommonObjMchiNetworkDeviceDescPciInfo
**/
typedef struct CmArchCommonMchiNetworkDeviceDescPciInfo {
/// Version (1 or 2).
UINT16 Version;
/// Vendor Id.
UINT16 VendorId;
/// Device Id.
UINT16 DeviceId;
/// Subsystem Vendor Id.
UINT16 SubSystemVendorId;
/// Subsystem Id.
UINT16 SubSystemId;
/// MAC address (v2 only).
UINT8 MacAddress[6];
/// Segment group number (v2 only).
UINT16 Segment;
/// Bus (v2 only)
UINT8 Bus;
///
/// Function (device) number (v2 only):
/// Bits 7:3 - Device Number
/// Bits 2:0 - Function Number
///
UINT8 Function;
/// Device Characteristics (v2 only).
UINT16 Characteristic;
///
/// IPMI token associated with Type 38 record (v2 only).
/// Set to CM_NULL_TOKEN if unused.
///
CM_OBJECT_TOKEN IpmiToken;
} CM_ARCH_COMMON_MCHI_NETWORK_DEVICE_DESC_PCI_INFO;
#pragma pack()

View file

@ -10,6 +10,7 @@
#include <Library/BaseLib.h>
#include <Library/DebugLib.h>
#include <IndustryStandard/SmBios.h>
#include <ConfigurationManagerObject.h>
#include "ArchCommonNameSpaceObjects.h"
#include "ConfigurationManagerObjectParser.h"
@ -1421,6 +1422,89 @@ STATIC CONST CM_OBJ_PARSER CmArchCommonBaseboardInfoParser[] = {
{ "BoardType", sizeof (UINT8), "0x%x", NULL },
};
/** A parser for EArchCommonObjMchiInfo.
*/
STATIC CONST CM_OBJ_PARSER CmArchCommonMchiInfoParser[] = {
{ "Token", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
{ "InterfaceType", sizeof (MC_HOST_INTERFACE_TYPE), "0x%x", NULL },
{ "InterfaceDataToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
{ "ProtocolTokenArray", sizeof (CM_ARCH_COMMON_OBJ_REF), "0x%p", NULL },
};
/** A parser for EArchCommonObjMchiMctpDataInfo.
*/
STATIC CONST CM_OBJ_PARSER CmArchCommonMchiMctpDataInfoParser[] = {
{ "MmbiCapDesPointer", sizeof (UINT64), "0x%lx", NULL },
};
/** A parser for EArchCommonObjMchiNetworkDataInfo.
*/
STATIC CONST CM_OBJ_PARSER CmArchCommonMchiNetworkDataInfoParser[] = {
{ "DeviceType", sizeof (UINT8), "0x%x", NULL },
{ "DeviceDataToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
};
/** A parser for EArchCommonObjMchiProtocolInfo.
*/
STATIC CONST CM_OBJ_PARSER CmArchCommonMchiProtocolInfoParser[] = {
{ "ProtocolType", sizeof (MC_HOST_INTERFACE_TYPE), "0x%x", NULL },
{ "ProtocolDataToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
};
/** A parser for EArchCommonObjMchiProtocolMctpDataInfo.
*/
STATIC CONST CM_OBJ_PARSER CmArchCommonMchiProtocolMctpDataInfoParser[] = {
{ "Version", sizeof (UINT16), "0x%x", NULL },
{ "LinkLayerType", sizeof (MC_HOST_INTERFACE_TYPE), "0x%x", NULL },
{ "Instance", sizeof (UINT32), "0x%x", NULL },
{ "Characteristics", sizeof (UINT32), "0x%x", NULL },
};
/** A parser for EArchCommonObjMchiProtocolRedfishOverIpDataInfo
*/
STATIC CONST CM_OBJ_PARSER CmArchCommonMchiProtocolRedfishOverIpDataInfoParser[] = {
{ "ServiceUuid", sizeof (EFI_GUID), "0x%g", NULL },
{ "HostIpAssignType", sizeof (UINT8), "0x%x", NULL },
{ "HostIpAddressFormat", sizeof (UINT8), "0x%x", NULL },
{ "HostIpAddress", sizeof (UINT8) * 16, NULL, HexDump },
{ "HostIpMask", sizeof (UINT8) * 16, NULL, HexDump },
{ "ServiceIpDiscoveryType", sizeof (UINT8), "0x%x", NULL },
{ "ServiceIpAddressFormat", sizeof (UINT8), "0x%x", NULL },
{ "ServiceIpAddress", sizeof (UINT8) * 16, NULL, HexDump },
{ "ServiceIpMask", sizeof (UINT8) * 16, NULL, HexDump },
{ "ServiceIpPort", sizeof (UINT16), "0x%x", NULL },
{ "ServiceVlanId", sizeof (UINT32), "0x%x", NULL },
{ "Hostname", MAX_UINT8 - 0x5B, NULL, PrintString },
};
/** A parser for EArchCommonObjMchiNetworkDeviceDescUsbInfo.
*/
STATIC CONST CM_OBJ_PARSER CmArchCommonMchiNetworkDeviceDescUsbInfoParser[] = {
{ "Version", sizeof (UINT16), "0x%x", NULL },
{ "VendorId", sizeof (UINT16), "0x%x", NULL },
{ "ProductId", sizeof (UINT16), "0x%x", NULL },
{ "SerialNumberStr", SMBIOS_MAX_STRING_SIZE_REDUCED, NULL, PrintString },
{ "MacAddress", sizeof (UINT8) * 6, NULL, HexDump },
{ "Characteristic", sizeof (UINT16), "0x%x", NULL },
{ "IpmiToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
};
/** A parser for EArchCommonObjMchiNetworkDeviceDescPciInfo.
*/
STATIC CONST CM_OBJ_PARSER CmArchCommonMchiNetworkDeviceDescPciInfoParser[] = {
{ "Version", sizeof (UINT16), "0x%x", NULL },
{ "VendorId", sizeof (UINT16), "0x%x", NULL },
{ "DeviceId", sizeof (UINT16), "0x%x", NULL },
{ "SubSystemVendorId", sizeof (UINT16), "0x%x", NULL },
{ "SubSystemId", sizeof (UINT16), "0x%x", NULL },
{ "MacAddress", sizeof (UINT8) * 6, NULL, HexDump },
{ "Segment", sizeof (UINT16), "0x%x", NULL },
{ "Bus", sizeof (UINT8), "0x%x", NULL },
{ "Function", sizeof (UINT8), "0x%x", NULL },
{ "Characteristic", sizeof (UINT16), "0x%x", NULL },
{ "IpmiToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
};
/** A parser for Arch Common namespace objects.
*/
STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = {
@ -1500,6 +1584,14 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = {
CM_PARSER_ADD_OBJECT (EArchCommonObjEnclosureElement, CmArchCommonEnclosureElementParser),
CM_PARSER_ADD_OBJECT (EArchCommonObjBaseboardInfo, CmArchCommonBaseboardInfoParser),
CM_PARSER_ADD_OBJECT (EArchCommonObjBaseboardContainedObject, CmArchCommonBaseboardContainedObjectParser),
CM_PARSER_ADD_OBJECT (EArchCommonObjMchiInfo, CmArchCommonMchiInfoParser),
CM_PARSER_ADD_OBJECT (EArchCommonObjMchiMctpDataInfo, CmArchCommonMchiMctpDataInfoParser),
CM_PARSER_ADD_OBJECT (EArchCommonObjMchiNetworkDataInfo, CmArchCommonMchiNetworkDataInfoParser),
CM_PARSER_ADD_OBJECT (EArchCommonObjMchiProtocolInfo, CmArchCommonMchiProtocolInfoParser),
CM_PARSER_ADD_OBJECT (EArchCommonObjMchiProtocolMctpDataInfo, CmArchCommonMchiProtocolMctpDataInfoParser),
CM_PARSER_ADD_OBJECT (EArchCommonObjMchiProtocolRedfishOverIpDataInfo, CmArchCommonMchiProtocolRedfishOverIpDataInfoParser),
CM_PARSER_ADD_OBJECT (EArchCommonObjMchiNetworkDeviceDescUsbInfo, CmArchCommonMchiNetworkDeviceDescUsbInfoParser),
CM_PARSER_ADD_OBJECT (EArchCommonObjMchiNetworkDeviceDescPciInfo, CmArchCommonMchiNetworkDeviceDescPciInfoParser),
CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax)
};

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,285 @@
/** @file
Copyright (c) 2026, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Glossary:
- Cm or CM - Configuration Manager
- Obj or OBJ - Object
- Std or STD - Standard
**/
#pragma once
#include <IndustryStandard/McNetworkHostInterface.h>
#include <IndustryStandard/MctpHostInterface.h>
typedef struct MchiProtocolSpecificDataOps MCHI_PROTOCOL_SPECIFIC_DATA_OPS;
typedef struct MchiNetworkDeviceDescOps MCHI_NETWORK_DEVICE_DESC_OPS;
typedef struct MchiDataOps MCHI_DATA_OPS;
typedef enum MchiDataOpsIdx {
/// MCHI data operation for MCTP (0x00-0x3F)
MchiMctpDataOpsIdx,
/// MCHI data operation for Newtwork (0x40)
MchiNetworkDataOpsIdx,
/// MCHI data operation for OEM (0xF0)
MchiOemDataOpsIdx,
} MCHI_DATA_OPS_IDX;
typedef struct MchiProtocolDataInfo {
/// List Entry.
LIST_ENTRY Entry;
/// Unique Token for Protocol information.
CM_OBJECT_TOKEN Token;
/// Relevant CM object.
VOID *CmObject;
/// Protocol Type.
MC_HOST_INTERFACE_PROTOCOL_TYPE ProtocolType;
/// Protocol Data Size.
UINTN DataSize;
} MCHI_PROTOCOL_DATA_INFO;
/** Get MCHI_PROTOCOL_DATA_INFO associated with Token.
@param [in] CfgMgrProtocol Pointer to the Configuration Manager
Protocol Interface.
@param [in] Token Protocol DataToken.
@param [in] ProtocolType Protocol Type.
@param [out] ProtocolInfo Protocol Info.
@retval EFI_SUCCESS
@retval Others Failed to get MCHI_PROTOCOL_DATA_INFO
**/
typedef
EFI_STATUS
(EFIAPI *GET_MCHI_PROTOCOL_DATA_INFO)(
IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol,
IN CM_OBJECT_TOKEN Token,
IN MC_HOST_INTERFACE_PROTOCOL_TYPE ProtocolType,
OUT MCHI_PROTOCOL_DATA_INFO **ProtocolInfo
);
/** Get size of MCHI protocol specific data.
@param [in] CfgMgrProtocol Pointer to the Configuration Manager
Protocol Interface.
@param [in] ProtocolInfo ProtocolInfo.
@retval EFI_SUCCESS
@retval EFI_INVALID_PARAMETER A parameter is invalid.
**/
typedef
EFI_STATUS
(EFIAPI *GET_SIZE_OF_MCHI_PROTOCOL_SPECIFIC_DATA)(
IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol,
IN MCHI_PROTOCOL_DATA_INFO *ProtocolInfo
);
/** Add MCHI protocol specific data into buffer.
@param [in] CfgMgrProtocol Pointer to the Configuration Manager
Protocol Interface.
@param [in] ProtocolInfo ProtocolInfo.
@param [in] StrTable String Table.
@param [out] Buffer Buffer.
@retval EFI_SUCCESS
@retval EFI_INVALID_PARAMETER A parameter is invalid.
**/
typedef
EFI_STATUS
(EFIAPI *ADD_MCHI_PROTOCOL_SPECIFIC_DATA)(
IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol,
IN CONST MCHI_PROTOCOL_DATA_INFO *ProtocolInfo,
IN STRING_TABLE *CONST StrTable,
OUT VOID *Buffer
);
/** Get MCHI Network Device descriptor CmObject associated with Token.
@param [in] CfgMgrProtocol Pointer to the Configuration Manager
Protocol Interface.
@param [in] Token Device Descriptor Token.
@param [in] DeviceType Device Type.
@param [out] CmObject CM object associated device descriptor.
@param [out] Count Number of CM object.
@retval EFI_SUCCESS
@retval Others Failed to get CM object
**/
typedef
EFI_STATUS
(EFIAPI *GET_MCHI_NETWORK_DEVICE_DESC_CM_OBJ)(
IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol,
IN CM_OBJECT_TOKEN Token,
IN MCHI_NETWORK_DEVICE_TYPE DeviceType,
OUT VOID **CmObject,
OUT UINT32 *Count
);
/** Get size of Device descriptor data.
@param [in] CfgMgrProtocol Pointer to the Configuration Manager
Protocol Interface.
@param [in] CmObject CM object.
@param [out] Size Size of Device descriptor data.
@retval EFI_SUCCESS
@retval EFI_INVALID_PARAMETER A parameter is invalid.
**/
typedef
EFI_STATUS
(EFIAPI *GET_SIZE_OF_MCHI_NETWORK_DEVICE_DESC_DATA)(
IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol,
IN CONST VOID *CmObject,
OUT UINTN *Size
);
/** Add MCHI Network Device specific data into buffer.
@param [in] CfgMgrProtocol Pointer to the Configuration Manager
Protocol Interface.
@param [in] CmObject CM object.
@param [in] StrTable String Table.
@param [out] Buffer Buffer.
@retval EFI_SUCCESS
@retval EFI_INVALID_PARAMETER A parameter is invalid.
**/
typedef
EFI_STATUS
(EFIAPI *ADD_MCHI_NETWORK_DEVICE_DESC_DATA)(
IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol,
IN CONST VOID *CmObject,
IN STRING_TABLE *CONST StrTable,
OUT VOID *Buffer
);
/** Get MCHI Data CM objects.
@param [in] CfgMgrProtocol Pointer to the Configuration Manager.
Protocol Interface.
@param [in] Token MCHI Data Token.
@param [in] InterfaceType Interface Type.
@param [out] CmObject MCHI Data CM object.
@param [out] Count Number of MCHI Data CM object.
@retval EFI_SUCCESS
@retval Others Failed to initialise
**/
typedef
EFI_STATUS
(EFIAPI *GET_MCHI_DATA_CM_OBJ)(
IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol,
IN CM_OBJECT_TOKEN Token,
IN MC_HOST_INTERFACE_TYPE InterfaceType,
OUT VOID **CmObject,
OUT UINT32 *Count
);
/** Get size of MCHI Data.
@param [in] CfgMgrProtocol Pointer to the Configuration Manager.
Protocol Interface.
@param [in] InterfaceType Interface Type.
@param [in] CmObject MCHI Data CM object.
@param [out] Size Size of MCHI Data.
@retval EFI_SUCCESS
@retval EFI_INVALID_PARAMETER A parameter is invalid.
**/
typedef
EFI_STATUS
(EFIAPI *GET_SIZE_OF_MCHI_DATA)(
IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol,
IN MC_HOST_INTERFACE_TYPE InterfaceType,
IN CONST VOID *CmObject,
OUT UINTN *Size
);
/** Add MCHI Data.
@param [in] CfgMgrProtocol Pointer to the Configuration Manager
Protocol Interface.
@param [in] InterfaceType Interface Type.
@param [in] CmObject CM object of Processor Specific Data.
@param [in] StrTable String Table.
@param [out] Buffer Buffer.
@retval EFI_SUCCESS
@retval EFI_INVALID_PARAMETER A parameter is invalid.
**/
typedef
EFI_STATUS
(EFIAPI *ADD_MCHI_DATA)(
IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol,
IN MC_HOST_INTERFACE_TYPE InterfaceType,
IN CONST VOID *CmObject,
IN STRING_TABLE *CONST StrTable,
OUT VOID *Buffer
);
/** A structure that describes operation for MCHI protocol specific
data operation.
**/
typedef struct MchiProtocolSpecificDataOps {
/// MCHI protocol Type.
MC_HOST_INTERFACE_PROTOCOL_TYPE ProtocolType;
/// Get MCHI Protocol info.
GET_MCHI_PROTOCOL_DATA_INFO GetMchiProtocolDataInfo;
/// Get size of MCHI Protocol specific data
GET_SIZE_OF_MCHI_PROTOCOL_SPECIFIC_DATA GetSizeofMchiProtocolSpecificData;
/// Add Error source to HEST
ADD_MCHI_PROTOCOL_SPECIFIC_DATA AddMchiProtocolSpecificData;
} MCHI_PROTOCOL_SPECIFIC_DATA_OPS;
/** A structure that describes operation for MCHI Network device descriptor
operation.
**/
typedef struct MchiNetworkDeviceDescOps {
/// MCHI Network Device Type.
MCHI_NETWORK_DEVICE_TYPE DeviceType;
/// Get MCHI Network
GET_MCHI_NETWORK_DEVICE_DESC_CM_OBJ GetMchiNetworkDeviceDescCmObj;
/// Get size of MCHI Network device descriptor data
GET_SIZE_OF_MCHI_NETWORK_DEVICE_DESC_DATA GetSizeofMchiNetworkDeviceDescData;
/// Add Error source to HEST
ADD_MCHI_NETWORK_DEVICE_DESC_DATA AddMchiNetworkDeviceDescData;
/// Device Descriptor CmObject
VOID *CmObject;
/// Size of MCHI Network device descriptor.
UINTN DataSize;
} MCHI_NETWORK_DEVICE_DESC_OPS;
/** A structure that describes MCHI data operation..
*/
typedef struct MchiDataOps {
/// MCHI data ops index.
MCHI_DATA_OPS_IDX MchiDataOpsIdx;
/// Get CM objects for MCHI Data.
GET_MCHI_DATA_CM_OBJ GetMchiDataCmObj;
/// Get size of MCHI Data.
GET_SIZE_OF_MCHI_DATA GetSizeofMchiData;
/// Add Error source to HEST
ADD_MCHI_DATA AddMchiData;
/// MCHI Data CM object.
VOID *CmObject;
} MCHI_DATA_OPS;

View file

@ -0,0 +1,33 @@
## @file
# SMBIOS Type44 Table Generator
#
# Copyright (c) 2026, Arm Limited. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
##
[Defines]
INF_VERSION = 0x0001001B
BASE_NAME = SmbiosType42Lib
FILE_GUID = 579b59b0-7be4-11f1-b32c-238ebfd9c619
VERSION_STRING = 1.0
MODULE_TYPE = DXE_DRIVER
LIBRARY_CLASS = NULL|DXE_DRIVER
CONSTRUCTOR = SmbiosType42LibConstructor
DESTRUCTOR = SmbiosType42LibDestructor
[Sources]
SmbiosType42Generator.c
SmbiosType42Generator.h
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
EmbeddedPkg/EmbeddedPkg.dec
ArmPlatformPkg/ArmPlatformPkg.dec
DynamicTablesPkg/DynamicTablesPkg.dec
[LibraryClasses]
BaseLib
DebugLib
SmbiosStringTableLib

View file

@ -0,0 +1,242 @@
/** @file
Copyright (c) 2026, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Reference:
- DSP0270 version 1.3.1 (https://www.dmtf.org/dsp/DSP0270)
**/
#pragma once
#define MCHI_NETWORK_DEVICE_CHARACTERISTIC_CREDENTIAL_VIA_IPMI_SUPPORT (BIT0)
#define MCHI_NETWORK_DEVICE_CHARACTERISTIC_RESERVED_BITS (~(BIT0))
/** Network Device type value.
See DSP0270 7.3.1 Table 3: Device type values.
*/
typedef enum MchiNetworkDeviceType {
MchiNetworkDeviceTypeReserved00 = 0x00,
MchiNetworkDeviceTypeReserved01 = 0x01,
MchiNetworkDeviceTypeUsb = 0x02,
MchiNetworkDeviceTypePci = 0x03,
MchiNetworkDeviceTypeUsbv2 = 0x04,
MchiNetworkDeviceTypePciv2 = 0x05,
MchiNetworkDeviceTypeOemStart = 0x80,
MchiNetworkDeviceTypeOemEnd = 0xff,
MchiNetworkDeviceTypeMax,
} MCHI_NETWORK_DEVICE_TYPE;
#pragma pack(1)
/** Interface-specific data for interface type 40h (Network)
See DSP0270 7.3 Table 2: Interface-specific data for interface type 40h.
*/
typedef struct MchiNetworkSpecificData {
/// Device Type (REDFISH_INTERFACE_DEVICE_TYPE)
UINT8 DeviceType;
/// Followed by Device Data. See the REDFISH_HOST_INTERFACE_*_DATA.
} MCHI_NETWORK_SPECIFIC_DATA;
/** Interface-specific USB data for interface type 40h (Network)
See DSP0270 7.3.2 Table 4: Device descriptor data for device type 02h,
USB network interface.
*/
typedef struct MchiNetworkDeviceDescUsbData {
/// Vendor Id.
UINT16 VendorId;
/// Product Id.
UINT16 ProductId;
/// Serial number descriptor Length. minimum is 0x02.
UINT8 SerialNumberDescLength;
/// Serial number descriptor Type. always 0x03 (unicode)
UINT8 SerialNumberDescType;
/// followed by SerialNumber Unicode string without NULL terminator.
/// UINT16 SerialNumber[]
} MCHI_NETWORK_DEVICE_DESC_USB_DATA;
/** Interface-specific PCI data for interface type 40h (Network)
See DSP0270 7.3.3 Table 5: Device descriptor data for device type 03h,
PCI/PCIe network interface.
*/
typedef struct MchiNetworkDeviceDescPciData {
/// Vendor Id.
UINT16 VendorId;
/// Device Id.
UINT16 DeviceId;
/// Subsystem Vendor Id.
UINT16 SubSystemVendorId;
/// Subsystem Id.
UINT16 SubSystemId;
} MCHI_NETWORK_DEVICE_DESC_PCI_DATA;
/** Interface-specific USB v2 data for interface type 40h (Network)
See DSP0270 7.3.4 Table 6: Device descriptor data for device type 04h,
USB network interface v2.
*/
typedef struct MchiNetworkDeviceDescUsbv2Data {
/// Length of this structure.
UINT8 Length;
/// Vendor Id.
UINT16 VendorId;
/// Product Id.
UINT16 ProductId;
/// Serial number reference in string table.
UINT8 SerialNumberRef;
/// Mac address of the USB.
UINT8 MacAddress[6];
/// Device Characteristics (version 2 only).
UINT16 Characteristic;
/// Credential bootstrapping with IPMI interface (Type 38) otherwise 0xFFFF.
UINT16 CredentialBootStrappingHandle;
} MCHI_NETWORK_DEVICE_DESC_USB_V2_DATA;
/** Interface-specific PCI/PCIe v2 data for interface type 40h (Network)
See DSP0270 7.3.5 Table 7: Device descriptor data for device type 04h,
PCI/PCIe network interface v2.
*/
typedef struct MchiNetworkDeviceDescPciv2Data {
/// Length of this structure.
UINT8 Length;
/// Vendor Id.
UINT16 VendorId;
/// Device Id.
UINT16 DeviceId;
/// Subsystem Vendor Id.
UINT16 SubSystemVendorId;
/// Subsystem Id.
UINT16 SubSystemId;
/// MAC address (v2 only).
UINT8 MacAddress[6];
/// Segment group number
UINT16 Segment;
/// Bus
UINT8 Bus;
/*
* Function (device) number (v2 only):
* Bits 7:3 - Device Number
* Bits 2:0 - Function Number
*/
UINT8 Function;
/// Device Characteristics (version 2 only).
UINT16 Characteristic;
/// Credential bootstrapping with IPMI interface (Type 38) otherwise 0xFFFF.
UINT16 CredentialBootStrappingHandle;
} MCHI_NETWORK_DEVICE_DESC_PCI_V2_DATA;
/** Interface-specific OEM data for interface type 40h (Network)
See DSP0270 7.3.6 Table 8: Device descriptor data for device type 80h-FFh,
OEM device.
*/
typedef struct MchiNetworkDeviceDescOemData {
/// Vendor IANA
UINT32 Iana;
/// Followed by OEM defined data.
} MCHI_NETWORK_DEVICE_DESC_OEM_DATA;
/** Assignment and discovery type values
See DSP0270 7.4.2 Table 12
*/
typedef enum RedfishIpType {
RedfishIpTypeUnknown = 0x00,
RedfishIpTypeStatic = 0x01,
RedfishIpTypeDhcp = 0x02,
RedfishIpTypeAutoConfigure = 0x03,
RedfishIpTypeHostSelected = 0x04,
RedfishIpTypeMax,
} REDFISH_IP_TYPE;
/** IP address format values
See DSP0270 7.4.3 Table 13
*/
typedef enum RedfishIpAddressFormat {
RedfishIpFormatUnknown = 0x00,
RedfishIpFormatIpv4 = 0x01,
RedfishIpFormatIpv6 = 0x02,
RedfishIpFormatMax,
} REDFISH_IP_ADDRESS_FORMAT;
/** Redfish over IP protocol-specific record data
See DSP0270 7.4.1 Table 11
*/
typedef struct RedfishProtocolOverIpData {
/// Service UUID.
EFI_GUID ServiceUuid;
/// Host Ip assignment type.
UINT8 HostIpAssignType;
/// Host Ip address format.
UINT8 HostIpAddressFormat;
/// Host Ip address.
UINT8 HostIpAddress[16];
/// Host Ip mask.
UINT8 HostIpMask[16];
/// Service Ip discovery type.
UINT8 ServiceIpDiscoveryType;
/// Service Ip address format.
UINT8 ServiceIpAddressFormat;
/// Service Ip address.
UINT8 ServiceIpAddress[16];
/// Service Ip Mask.
UINT8 ServiceIpMask[16];
/// Service Ip Port.
UINT16 ServiceIpPort;
/// Service Vlan Id.
UINT32 ServiceVlanId;
/// Length of Hostname
UINT8 HostnameLength;
/// followed by Hostname
} REDFISH_PROTOCOL_OVER_IP_DATA;
#pragma pack()
/* Note. GetSizeof should get the number of string in the string table. */

View file

@ -0,0 +1,60 @@
/** @file
Copyright (c) 2026, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Reference:
- DSP0256 version 2.0.0. (https://www.dmtf.org/dsp/DSP0256)
**/
#pragma once
#define MCTP_PROTOCOL_MAJOR_VERSION_SHIFT (8)
#define MCTP_PROTOCOL_MAJOR_VERSION_MASK (0xff00)
#define MCTP_PROTOCOL_MINOR_VERSION_SHIFT (0)
#define MCTP_PROTOCOL_MINOR_VERSION_MASK (0x00ff)
#define MCTP_PROTOCOL_VERSION_INFO(major, minor) \
((UINT16)((((major) & ((MCTP_PROTOCOL_MAJOR_VERSION_MASK >> \
MCTP_PROTOCOL_MAJOR_VERSION_SHIFT))) << \
MCTP_PROTOCOL_MAJOR_VERSION_SHIFT) | \
(((minor) & MCTP_PROTOCOL_MINOR_VERSION_MASK) << \
MCTP_PROTOCOL_MINOR_VERSION_SHIFT)))
#define MCTP_CHARACTERISTIC_HAS_ACPI_DSDT_DEVICE (BIT0)
#define MCTP_CHARACTERISTIC_RESERVED_BITS (~(BIT0))
#pragma pack(1)
/** A structure that describes MCHI MCTP MMBI specific data.
See DSP0256 9.2 Table 3: Interface Type Specific Data.
**/
typedef struct MchiMctpMmbiSpecificData {
/// A pointer to the MMBI capability pointer.
UINT64 MmbiCapDesPointer;
} MCHI_MCTP_MMBI_SPECIFIC_DATA;
/** A structure that describes MCTP protocol specific data.
See DSP0256 9.1 Table 2: Protocol Type Specific Data.
**/
typedef struct MctpProtocolData {
/// Version (Major[15:8], Minor[7:0]).
UINT16 Version;
/// Link-layer type.
UINT8 LinkLayerType;
/// Reserved.
UINT8 Reserved0;
/// Instance Number.
UINT32 Instance;
/// Characteristics
UINT32 Characteristics;
} MCTP_PROTOCOL_DATA;
#pragma pack()