From 498f8edf897dc1b168eb0d498bcc3a6d63ebc6fd Mon Sep 17 00:00:00 2001 From: vit9696 Date: Sun, 21 Apr 2019 17:14:45 +0300 Subject: [PATCH] OpenCorePlatform: Support using MacInfoPkg --- Docs/Configuration.pdf | Bin 261210 -> 261243 bytes Docs/Configuration.tex | 13 +- OpenCorePkg.dsc | 5 +- Platform/OpenCore/OpenCore.inf | 2 + Platform/OpenCore/OpenCorePlatform.c | 397 ++++++++++++++++----------- macbuild.tool | 1 + 6 files changed, 258 insertions(+), 160 deletions(-) diff --git a/Docs/Configuration.pdf b/Docs/Configuration.pdf index c05fd9790a4c3e8769d42436bf2743f23ad97148..aa1a2dba94bf62347f22a23195d7e014dea97b84 100644 GIT binary patch delta 26117 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̺X*)eDpI_5A;b3^XW`1N2w+uJ?=nBnaz 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 CbHVrk diff --git a/Docs/Configuration.tex b/Docs/Configuration.tex index af2c0149..417cc746 100644 --- a/Docs/Configuration.tex +++ b/Docs/Configuration.tex @@ -476,6 +476,7 @@ Add \texttt{.clang\_complete} file with similar content to your UDK root: -I/UefiPackages/OpenCorePkg/Include -I/UefiPackages/OcSupportPkg/Include -I/UefiPackages/IntelFrameworkPkg/Include +-I/UefiPackages/MacInfoPkg/Include -IInclude -include /UefiPackages/MdePkg/Include/Uefi.h @@ -1701,7 +1702,8 @@ troubleshooting: Platform information is comprised of several identification fields generated or filled manually to be compatible with macOS services. The -base part of the configuration may be obtained from \texttt{MacInfoPkg} +base part of the configuration may be obtained from +\href{https://github.com/acidanthera/MacInfoPkg}{\texttt{MacInfoPkg}} package, which itself generates a set of interfaces based on a database in \href{https://yaml.org/spec/1.2/spec.html}{YAML} format. These fields are written to three select destinations: @@ -1739,9 +1741,8 @@ for system configuration. and \texttt{SMBIOS} sections. Enabling this option is useful when \texttt{Generic} section is flexible - enough. When enabled \texttt{SMBIOS} and \texttt{DataHub} data is unused. - - FIXME: Currently unsupported. + enough. When enabled \texttt{SMBIOS}, \texttt{DataHub}, and + \texttt{PlatformNVRAM} data is unused. \item \texttt{UpdateDataHub}\\ \textbf{Type}: \texttt{plist\ boolean}\\ @@ -1801,21 +1802,25 @@ for system configuration. \item \texttt{Generic}\\ \textbf{Type}: \texttt{plist\ dictonary}\\ + \textbf{Optional}: When \texttt{Automatic} is \texttt{false}\\ \textbf{Description}: Update all fields. This section is read only when \texttt{Automatic} is active. \item \texttt{DataHub}\\ \textbf{Type}: \texttt{plist\ dictonary}\\ + \textbf{Optional}: When \texttt{Automatic} is \texttt{true}\\ \textbf{Description}: Update Data Hub fields. This section is read only when \texttt{Automatic} is not active. \item \texttt{PlatformNVRAM}\\ \textbf{Type}: \texttt{plist\ dictonary}\\ + \textbf{Optional}: When \texttt{Automatic} is \texttt{true}\\ \textbf{Description}: Update platform NVRAM fields. This section is read only when \texttt{Automatic} is not active. \item \texttt{SMBIOS}\\ \textbf{Type}: \texttt{plist\ dictonary}\\ + \textbf{Optional}: When \texttt{Automatic} is \texttt{true}\\ \textbf{Description}: Update SMBIOS fields. This section is read only when \texttt{Automatic} is not active. \end{enumerate} diff --git a/OpenCorePkg.dsc b/OpenCorePkg.dsc index 77336993..703ce7e8 100755 --- a/OpenCorePkg.dsc +++ b/OpenCorePkg.dsc @@ -16,7 +16,7 @@ [Defines] PLATFORM_NAME = OpenCorePkg - PLATFORM_GUID = 6B1D3AB4-5C85-462D-9DC5-480F8B17D5CB + PLATFORM_GUID = C46F121D-ABC6-42A3-A241-91B09224C357 PLATFORM_VERSION = 1.0 SUPPORTED_ARCHITECTURES = X64 BUILD_TARGETS = RELEASE|DEBUG|NOOPT @@ -50,6 +50,7 @@ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf PlatformHookLib|MdeModulePkg/Library/BasePlatformHookLibNull/BasePlatformHookLibNull.inf HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf + MacInfoLib|MacInfoPkg/Library/MacInfoLib/MacInfoLib.inf OcAcpiLib|OcSupportPkg/Library/OcAcpiLib/OcAcpiLib.inf OcAppleBootPolicyLib|OcSupportPkg/Library/OcAppleBootPolicyLib/OcAppleBootPolicyLib.inf OcAppleChunklistLib|OcSupportPkg/Library/OcAppleChunklistLib/OcAppleChunklistLib.inf @@ -115,4 +116,4 @@ MSFT:RELEASE_*_*_CC_FLAGS = $(OCPKG_BUILD_OPTIONS_GEN) XCODE:DEBUG_*_*_CC_FLAGS = $(OCPKG_BUILD_OPTIONS_GEN) XCODE:NOOPT_*_*_CC_FLAGS = $(OCPKG_BUILD_OPTIONS_GEN) - XCODE:RELEASE_*_*_CC_FLAGS = -Wno-error -flto $(OCPKG_BUILD_OPTIONS_GEN) + XCODE:RELEASE_*_*_CC_FLAGS = -flto $(OCPKG_BUILD_OPTIONS_GEN) diff --git a/Platform/OpenCore/OpenCore.inf b/Platform/OpenCore/OpenCore.inf index 26ac110b..e5dba44e 100644 --- a/Platform/OpenCore/OpenCore.inf +++ b/Platform/OpenCore/OpenCore.inf @@ -50,6 +50,7 @@ IntelFrameworkPkg/IntelFrameworkPkg.dec OpenCorePkg/OpenCorePkg.dec OcSupportPkg/OcSupportPkg.dec + MacInfoPkg/MacInfoPkg.dec MdePkg/MdePkg.dec MdeModulePkg/MdeModulePkg.dec @@ -81,6 +82,7 @@ OcSmbiosLib OcStorageLib OcVirtualFsLib + MacInfoLib PcdLib PrintLib UefiBootServicesTableLib diff --git a/Platform/OpenCore/OpenCorePlatform.c b/Platform/OpenCore/OpenCorePlatform.c index cc2c79e8..3042557f 100644 --- a/Platform/OpenCore/OpenCorePlatform.c +++ b/Platform/OpenCore/OpenCorePlatform.c @@ -16,6 +16,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include +#include #include #include #include @@ -31,81 +32,113 @@ STATIC VOID OcPlatformUpdateDataHub ( IN OC_GLOBAL_CONFIG *Config, - IN OC_CPU_INFO *CpuInfo + IN OC_CPU_INFO *CpuInfo, + IN MAC_INFO_DATA *MacInfo ) { EFI_STATUS Status; OC_DATA_HUB_DATA Data; EFI_GUID Uuid; + UINT64 StartupPowerEvents; ZeroMem (&Data, sizeof (Data)); - if (OC_BLOB_GET (&Config->PlatformInfo.DataHub.PlatformName)[0] != '\0') { - Data.PlatformName = OC_BLOB_GET (&Config->PlatformInfo.DataHub.PlatformName); - } + if (MacInfo == NULL) { + // + // Manual mode, read data from DataHub. + // + if (OC_BLOB_GET (&Config->PlatformInfo.DataHub.PlatformName)[0] != '\0') { + Data.PlatformName = OC_BLOB_GET (&Config->PlatformInfo.DataHub.PlatformName); + } - if (OC_BLOB_GET (&Config->PlatformInfo.DataHub.SystemProductName)[0] != '\0') { - Data.SystemProductName = OC_BLOB_GET (&Config->PlatformInfo.DataHub.SystemProductName); - } + if (OC_BLOB_GET (&Config->PlatformInfo.DataHub.SystemProductName)[0] != '\0') { + Data.SystemProductName = OC_BLOB_GET (&Config->PlatformInfo.DataHub.SystemProductName); + } - if (OC_BLOB_GET (&Config->PlatformInfo.DataHub.SystemSerialNumber)[0] != '\0') { - Data.SystemSerialNumber = OC_BLOB_GET (&Config->PlatformInfo.DataHub.SystemSerialNumber); - } + if (OC_BLOB_GET (&Config->PlatformInfo.DataHub.SystemSerialNumber)[0] != '\0') { + Data.SystemSerialNumber = OC_BLOB_GET (&Config->PlatformInfo.DataHub.SystemSerialNumber); + } - if (Config->PlatformInfo.DataHub.SystemUuid.Size == GUID_STRING_LENGTH + 1 - && !EFI_ERROR (AsciiStrToGuid (OC_BLOB_GET (&Config->PlatformInfo.DataHub.SystemUuid), &Uuid))) { - Data.SystemUUID = &Uuid; - } + if (Config->PlatformInfo.DataHub.SystemUuid.Size == GUID_STRING_LENGTH + 1 + && !EFI_ERROR (AsciiStrToGuid (OC_BLOB_GET (&Config->PlatformInfo.DataHub.SystemUuid), &Uuid))) { + Data.SystemUUID = &Uuid; + } - if (OC_BLOB_GET (&Config->PlatformInfo.DataHub.BoardProduct)[0] != '\0') { - Data.BoardProduct = OC_BLOB_GET (&Config->PlatformInfo.DataHub.BoardProduct); - } + if (OC_BLOB_GET (&Config->PlatformInfo.DataHub.BoardProduct)[0] != '\0') { + Data.BoardProduct = OC_BLOB_GET (&Config->PlatformInfo.DataHub.BoardProduct); + } - Data.BoardRevision = &Config->PlatformInfo.DataHub.BoardRevision[0]; - Data.StartupPowerEvents = &Config->PlatformInfo.DataHub.StartupPowerEvents; - Data.InitialTSC = &Config->PlatformInfo.DataHub.InitialTSC; + Data.BoardRevision = &Config->PlatformInfo.DataHub.BoardRevision[0]; + Data.StartupPowerEvents = &Config->PlatformInfo.DataHub.StartupPowerEvents; + Data.InitialTSC = &Config->PlatformInfo.DataHub.InitialTSC; - if (Config->PlatformInfo.DataHub.FSBFrequency != 0) { - Data.FSBFrequency = &Config->PlatformInfo.DataHub.FSBFrequency; - } + if (Config->PlatformInfo.DataHub.FSBFrequency != 0) { + Data.FSBFrequency = &Config->PlatformInfo.DataHub.FSBFrequency; + } - if (Config->PlatformInfo.DataHub.ARTFrequency != 0) { - Data.ARTFrequency = &Config->PlatformInfo.DataHub.ARTFrequency; - } + if (Config->PlatformInfo.DataHub.ARTFrequency != 0) { + Data.ARTFrequency = &Config->PlatformInfo.DataHub.ARTFrequency; + } - if (Config->PlatformInfo.DataHub.DevicePathsSupported[0] != 0) { - Data.DevicePathsSupported = &Config->PlatformInfo.DataHub.DevicePathsSupported[0]; - } + if (Config->PlatformInfo.DataHub.DevicePathsSupported[0] != 0) { + Data.DevicePathsSupported = &Config->PlatformInfo.DataHub.DevicePathsSupported[0]; + } - if (Config->PlatformInfo.DataHub.SmcRevision[0] != 0 - || Config->PlatformInfo.DataHub.SmcRevision[1] != 0 - || Config->PlatformInfo.DataHub.SmcRevision[2] != 0 - || Config->PlatformInfo.DataHub.SmcRevision[3] != 0 - || Config->PlatformInfo.DataHub.SmcRevision[4] != 0 - || Config->PlatformInfo.DataHub.SmcRevision[5] != 0) { - Data.SmcRevision = &Config->PlatformInfo.DataHub.SmcRevision[0]; - } + if (Config->PlatformInfo.DataHub.SmcRevision[0] != 0 + || Config->PlatformInfo.DataHub.SmcRevision[1] != 0 + || Config->PlatformInfo.DataHub.SmcRevision[2] != 0 + || Config->PlatformInfo.DataHub.SmcRevision[3] != 0 + || Config->PlatformInfo.DataHub.SmcRevision[4] != 0 + || Config->PlatformInfo.DataHub.SmcRevision[5] != 0) { + Data.SmcRevision = &Config->PlatformInfo.DataHub.SmcRevision[0]; + } - if (Config->PlatformInfo.DataHub.SmcBranch[0] != 0 - || Config->PlatformInfo.DataHub.SmcBranch[1] != 0 - || Config->PlatformInfo.DataHub.SmcBranch[2] != 0 - || Config->PlatformInfo.DataHub.SmcBranch[3] != 0 - || Config->PlatformInfo.DataHub.SmcBranch[4] != 0 - || Config->PlatformInfo.DataHub.SmcBranch[5] != 0 - || Config->PlatformInfo.DataHub.SmcBranch[6] != 0 - || Config->PlatformInfo.DataHub.SmcBranch[7] != 0) { - Data.SmcBranch = &Config->PlatformInfo.DataHub.SmcBranch[0]; - } + if (Config->PlatformInfo.DataHub.SmcBranch[0] != 0 + || Config->PlatformInfo.DataHub.SmcBranch[1] != 0 + || Config->PlatformInfo.DataHub.SmcBranch[2] != 0 + || Config->PlatformInfo.DataHub.SmcBranch[3] != 0 + || Config->PlatformInfo.DataHub.SmcBranch[4] != 0 + || Config->PlatformInfo.DataHub.SmcBranch[5] != 0 + || Config->PlatformInfo.DataHub.SmcBranch[6] != 0 + || Config->PlatformInfo.DataHub.SmcBranch[7] != 0) { + Data.SmcBranch = &Config->PlatformInfo.DataHub.SmcBranch[0]; + } - if (Config->PlatformInfo.DataHub.SmcPlatform[0] != 0 - || Config->PlatformInfo.DataHub.SmcPlatform[1] != 0 - || Config->PlatformInfo.DataHub.SmcPlatform[2] != 0 - || Config->PlatformInfo.DataHub.SmcPlatform[3] != 0 - || Config->PlatformInfo.DataHub.SmcPlatform[4] != 0 - || Config->PlatformInfo.DataHub.SmcPlatform[5] != 0 - || Config->PlatformInfo.DataHub.SmcPlatform[6] != 0 - || Config->PlatformInfo.DataHub.SmcPlatform[7] != 0) { - Data.SmcPlatform = &Config->PlatformInfo.DataHub.SmcPlatform[0]; + if (Config->PlatformInfo.DataHub.SmcPlatform[0] != 0 + || Config->PlatformInfo.DataHub.SmcPlatform[1] != 0 + || Config->PlatformInfo.DataHub.SmcPlatform[2] != 0 + || Config->PlatformInfo.DataHub.SmcPlatform[3] != 0 + || Config->PlatformInfo.DataHub.SmcPlatform[4] != 0 + || Config->PlatformInfo.DataHub.SmcPlatform[5] != 0 + || Config->PlatformInfo.DataHub.SmcPlatform[6] != 0 + || Config->PlatformInfo.DataHub.SmcPlatform[7] != 0) { + Data.SmcPlatform = &Config->PlatformInfo.DataHub.SmcPlatform[0]; + } + } else { + // + // Automatic mode read data from Generic & MacInfo. + // + Data.PlatformName = MacInfo->DataHub.PlatformName; + Data.SystemProductName = MacInfo->DataHub.SystemProductName; + + if (OC_BLOB_GET (&Config->PlatformInfo.Generic.SystemSerialNumber)[0] != '\0') { + Data.SystemSerialNumber = OC_BLOB_GET (&Config->PlatformInfo.Generic.SystemSerialNumber); + } + + if (Config->PlatformInfo.Generic.SystemUuid.Size == GUID_STRING_LENGTH + 1 + && !EFI_ERROR (AsciiStrToGuid (OC_BLOB_GET (&Config->PlatformInfo.Generic.SystemUuid), &Uuid))) { + Data.SystemUUID = &Uuid; + } + + Data.BoardProduct = MacInfo->DataHub.BoardProduct; + Data.BoardRevision = &Config->PlatformInfo.DataHub.BoardRevision[0]; + StartupPowerEvents = 0; + Data.StartupPowerEvents = &StartupPowerEvents; + Data.DevicePathsSupported = &MacInfo->DataHub.DevicePathsSupported[0]; + + Data.SmcRevision = &MacInfo->DataHub.SmcRevision[0]; + Data.SmcBranch = &MacInfo->DataHub.SmcBranch[0]; + Data.SmcPlatform = &MacInfo->DataHub.SmcPlatform[0]; } Status = UpdateDataHub (&Data, CpuInfo); @@ -119,6 +152,7 @@ VOID OcPlatformUpdateSmbios ( IN OC_GLOBAL_CONFIG *Config, IN OC_CPU_INFO *CpuInfo, + IN MAC_INFO_DATA *MacInfo, IN OC_SMBIOS_UPDATE_MODE UpdateMode ) { @@ -128,107 +162,151 @@ OcPlatformUpdateSmbios ( ZeroMem (&Data, sizeof (Data)); - if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.BIOSVendor)[0] != '\0') { - Data.BIOSVendor = OC_BLOB_GET (&Config->PlatformInfo.Smbios.BIOSVendor); - } + if (MacInfo == NULL) { + // + // Manual mode, read data from SMBIOS. + // + if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.BIOSVendor)[0] != '\0') { + Data.BIOSVendor = OC_BLOB_GET (&Config->PlatformInfo.Smbios.BIOSVendor); + } - if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.BIOSVersion)[0] != '\0') { - Data.BIOSVersion = OC_BLOB_GET (&Config->PlatformInfo.Smbios.BIOSVersion); - } + if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.BIOSVersion)[0] != '\0') { + Data.BIOSVersion = OC_BLOB_GET (&Config->PlatformInfo.Smbios.BIOSVersion); + } - if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.BIOSReleaseDate)[0] != '\0') { - Data.BIOSReleaseDate = OC_BLOB_GET (&Config->PlatformInfo.Smbios.BIOSReleaseDate); - } + if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.BIOSReleaseDate)[0] != '\0') { + Data.BIOSReleaseDate = OC_BLOB_GET (&Config->PlatformInfo.Smbios.BIOSReleaseDate); + } - if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemManufacturer)[0] != '\0') { - Data.SystemManufacturer = OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemManufacturer); - } + if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemManufacturer)[0] != '\0') { + Data.SystemManufacturer = OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemManufacturer); + } - if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemProductName)[0] != '\0') { - Data.SystemProductName = OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemProductName); - } + if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemProductName)[0] != '\0') { + Data.SystemProductName = OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemProductName); + } - if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemVersion)[0] != '\0') { - Data.SystemVersion = OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemVersion); - } + if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemVersion)[0] != '\0') { + Data.SystemVersion = OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemVersion); + } - if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemSerialNumber)[0] != '\0') { - Data.SystemSerialNumber = OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemSerialNumber); - } + if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemSerialNumber)[0] != '\0') { + Data.SystemSerialNumber = OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemSerialNumber); + } - if (Config->PlatformInfo.DataHub.SystemUuid.Size == GUID_STRING_LENGTH + 1 - && !EFI_ERROR (AsciiStrToGuid (OC_BLOB_GET (&Config->PlatformInfo.DataHub.SystemUuid), &Uuid))) { - Data.SystemUUID = &Uuid; - } + if (Config->PlatformInfo.DataHub.SystemUuid.Size == GUID_STRING_LENGTH + 1 + && !EFI_ERROR (AsciiStrToGuid (OC_BLOB_GET (&Config->PlatformInfo.DataHub.SystemUuid), &Uuid))) { + Data.SystemUUID = &Uuid; + } - if (Config->PlatformInfo.Smbios.BoardType != 0) { - Data.BoardType = &Config->PlatformInfo.Smbios.BoardType; - } + if (Config->PlatformInfo.Smbios.BoardType != 0) { + Data.BoardType = &Config->PlatformInfo.Smbios.BoardType; + } - if (Config->PlatformInfo.Smbios.ChassisType != 0) { - Data.ChassisType = &Config->PlatformInfo.Smbios.ChassisType; - } + if (Config->PlatformInfo.Smbios.ChassisType != 0) { + Data.ChassisType = &Config->PlatformInfo.Smbios.ChassisType; + } - if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemSKUNumber)[0] != '\0') { - Data.SystemSKUNumber = OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemSKUNumber); - } + if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemSKUNumber)[0] != '\0') { + Data.SystemSKUNumber = OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemSKUNumber); + } - if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemFamily)[0] != '\0') { - Data.SystemFamily = OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemFamily); - } + if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemFamily)[0] != '\0') { + Data.SystemFamily = OC_BLOB_GET (&Config->PlatformInfo.Smbios.SystemFamily); + } - if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardManufacturer)[0] != '\0') { - Data.BoardManufacturer = OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardManufacturer); - } + if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardManufacturer)[0] != '\0') { + Data.BoardManufacturer = OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardManufacturer); + } - if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardProduct)[0] != '\0') { - Data.BoardProduct = OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardProduct); - } + if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardProduct)[0] != '\0') { + Data.BoardProduct = OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardProduct); + } - if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardVersion)[0] != '\0') { - Data.BoardVersion = OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardVersion); - } + if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardVersion)[0] != '\0') { + Data.BoardVersion = OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardVersion); + } - if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardSerialNumber)[0] != '\0') { - Data.BoardSerialNumber = OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardSerialNumber); - } + if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardSerialNumber)[0] != '\0') { + Data.BoardSerialNumber = OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardSerialNumber); + } - if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardAssetTag)[0] != '\0') { - Data.BoardAssetTag = OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardAssetTag); - } + if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardAssetTag)[0] != '\0') { + Data.BoardAssetTag = OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardAssetTag); + } - if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardLocationInChassis)[0] != '\0') { - Data.BoardLocationInChassis = OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardLocationInChassis); - } + if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardLocationInChassis)[0] != '\0') { + Data.BoardLocationInChassis = OC_BLOB_GET (&Config->PlatformInfo.Smbios.BoardLocationInChassis); + } - if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.ChassisManufacturer)[0] != '\0') { - Data.ChassisManufacturer = OC_BLOB_GET (&Config->PlatformInfo.Smbios.ChassisManufacturer); - } + if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.ChassisManufacturer)[0] != '\0') { + Data.ChassisManufacturer = OC_BLOB_GET (&Config->PlatformInfo.Smbios.ChassisManufacturer); + } - if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.ChassisVersion)[0] != '\0') { - Data.ChassisVersion = OC_BLOB_GET (&Config->PlatformInfo.Smbios.ChassisVersion); - } + if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.ChassisVersion)[0] != '\0') { + Data.ChassisVersion = OC_BLOB_GET (&Config->PlatformInfo.Smbios.ChassisVersion); + } - if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.ChassisSerialNumber)[0] != '\0') { - Data.ChassisSerialNumber = OC_BLOB_GET (&Config->PlatformInfo.Smbios.ChassisSerialNumber); - } + if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.ChassisSerialNumber)[0] != '\0') { + Data.ChassisSerialNumber = OC_BLOB_GET (&Config->PlatformInfo.Smbios.ChassisSerialNumber); + } - if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.ChassisAssetTag)[0] != '\0') { - Data.ChassisAssetTag = OC_BLOB_GET (&Config->PlatformInfo.Smbios.ChassisAssetTag); - } + if (OC_BLOB_GET (&Config->PlatformInfo.Smbios.ChassisAssetTag)[0] != '\0') { + Data.ChassisAssetTag = OC_BLOB_GET (&Config->PlatformInfo.Smbios.ChassisAssetTag); + } - if (Config->PlatformInfo.Smbios.MemoryFormFactor != 0) { - Data.MemoryFormFactor = &Config->PlatformInfo.Smbios.MemoryFormFactor; - } + if (Config->PlatformInfo.Smbios.MemoryFormFactor != 0) { + Data.MemoryFormFactor = &Config->PlatformInfo.Smbios.MemoryFormFactor; + } - Data.FirmwareFeatures = Config->PlatformInfo.Smbios.FirmwareFeatures; - Data.FirmwareFeaturesMask = Config->PlatformInfo.Smbios.FirmwareFeaturesMask; + Data.FirmwareFeatures = Config->PlatformInfo.Smbios.FirmwareFeatures; + Data.FirmwareFeaturesMask = Config->PlatformInfo.Smbios.FirmwareFeaturesMask; - if (Config->PlatformInfo.Smbios.ProcessorType != 0) { - Data.ProcessorType = &Config->PlatformInfo.Smbios.ProcessorType; - } + if (Config->PlatformInfo.Smbios.ProcessorType != 0) { + Data.ProcessorType = &Config->PlatformInfo.Smbios.ProcessorType; + } - Data.PlatformFeature = Config->PlatformInfo.Smbios.PlatformFeature; + Data.PlatformFeature = Config->PlatformInfo.Smbios.PlatformFeature; + } else { + // + // Automatic mode read data from Generic & MacInfo. + // + Data.BIOSVersion = MacInfo->Smbios.BIOSVersion; + Data.BIOSReleaseDate = MacInfo->Smbios.BIOSReleaseDate; + Data.SystemProductName = MacInfo->Smbios.SystemProductName; + Data.SystemVersion = MacInfo->Smbios.SystemVersion; + + if (OC_BLOB_GET (&Config->PlatformInfo.Generic.SystemSerialNumber)[0] != '\0') { + Data.SystemSerialNumber = OC_BLOB_GET (&Config->PlatformInfo.Generic.SystemSerialNumber); + } + + if (Config->PlatformInfo.Generic.SystemUuid.Size == GUID_STRING_LENGTH + 1 + && !EFI_ERROR (AsciiStrToGuid (OC_BLOB_GET (&Config->PlatformInfo.Generic.SystemUuid), &Uuid))) { + Data.SystemUUID = &Uuid; + } + + Data.BoardType = MacInfo->Smbios.BoardType; + Data.ChassisType = MacInfo->Smbios.ChassisType; + Data.SystemSKUNumber = MacInfo->Smbios.SystemSKUNumber; + Data.SystemFamily = MacInfo->Smbios.SystemFamily; + Data.BoardProduct = MacInfo->Smbios.BoardProduct; + Data.BoardVersion = MacInfo->Smbios.BoardVersion; + Data.BoardSerialNumber = MacInfo->Smbios.BoardSerialNumber; + Data.BoardAssetTag = MacInfo->Smbios.BoardAssetTag; + Data.BoardLocationInChassis = MacInfo->Smbios.BoardLocationInChassis; + Data.ChassisVersion = MacInfo->Smbios.ChassisVersion; + + if (OC_BLOB_GET (&Config->PlatformInfo.Generic.SystemSerialNumber)[0] != '\0') { + Data.ChassisSerialNumber = OC_BLOB_GET (&Config->PlatformInfo.Generic.SystemSerialNumber); + } + + Data.ChassisAssetTag = MacInfo->Smbios.ChassisAssetTag; + Data.MemoryFormFactor = MacInfo->Smbios.MemoryFormFactor; + Data.FirmwareFeatures = MacInfo->Smbios.FirmwareFeatures; + Data.FirmwareFeaturesMask = MacInfo->Smbios.FirmwareFeaturesMask; + Data.ProcessorType = NULL; + Data.PlatformFeature = MacInfo->Smbios.PlatformFeature; + } Status = CreateSmbios (&Data, UpdateMode, CpuInfo); if (EFI_ERROR (Status)) { @@ -239,23 +317,33 @@ OcPlatformUpdateSmbios ( STATIC VOID OcPlatformUpdateNvram ( - IN OC_GLOBAL_CONFIG *Config + IN OC_GLOBAL_CONFIG *Config, + IN MAC_INFO_DATA *MacInfo ) { EFI_STATUS Status; - CHAR8 *Bid; - CHAR8 *Mlb; - UINT8 *Rom; + CONST CHAR8 *Bid; + CONST CHAR8 *Mlb; + CONST UINT8 *Rom; UINT64 ExFeatures; UINT64 ExFeaturesMask; UINT32 Features; UINT32 FeaturesMask; - Bid = OC_BLOB_GET (&Config->PlatformInfo.Nvram.Bid); - Mlb = OC_BLOB_GET (&Config->PlatformInfo.Nvram.Mlb); - Rom = &Config->PlatformInfo.Nvram.Rom[0]; - ExFeatures = Config->PlatformInfo.Nvram.FirmwareFeatures; - ExFeaturesMask = Config->PlatformInfo.Nvram.FirmwareFeaturesMask; + if (MacInfo == NULL) { + Bid = OC_BLOB_GET (&Config->PlatformInfo.Nvram.Bid); + Mlb = OC_BLOB_GET (&Config->PlatformInfo.Nvram.Mlb); + Rom = &Config->PlatformInfo.Nvram.Rom[0]; + ExFeatures = Config->PlatformInfo.Nvram.FirmwareFeatures; + ExFeaturesMask = Config->PlatformInfo.Nvram.FirmwareFeaturesMask; + } else { + Bid = MacInfo->Smbios.BoardProduct; + Mlb = OC_BLOB_GET (&Config->PlatformInfo.Generic.Mlb); + Rom = &Config->PlatformInfo.Generic.Rom[0]; + ExFeatures = MacInfo->Smbios.FirmwareFeatures; + ExFeaturesMask = MacInfo->Smbios.FirmwareFeaturesMask; + } + Features = (UINT32) ExFeatures; FeaturesMask = (UINT32) ExFeaturesMask; @@ -265,7 +353,7 @@ OcPlatformUpdateNvram ( &gAppleVendorVariableGuid, EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS, Config->PlatformInfo.Nvram.Bid.Size - 1, - Bid + (CHAR8 *) Bid ); DEBUG (( EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_INFO, @@ -281,7 +369,7 @@ OcPlatformUpdateNvram ( &gAppleVendorVariableGuid, EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS, sizeof (Config->PlatformInfo.Nvram.Rom), - Rom + (UINT8 *) Rom ); DEBUG (( EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_INFO, @@ -295,7 +383,7 @@ OcPlatformUpdateNvram ( &gAppleVendorVariableGuid, EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS, sizeof (Config->PlatformInfo.Nvram.Rom), - Rom + (UINT8 *) Rom ); DEBUG (( EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_INFO, @@ -311,7 +399,7 @@ OcPlatformUpdateNvram ( &gAppleVendorVariableGuid, EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS, Config->PlatformInfo.Nvram.Mlb.Size - 1, - Mlb + (CHAR8 *) Mlb ); DEBUG (( EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_INFO, @@ -325,7 +413,7 @@ OcPlatformUpdateNvram ( &gAppleVendorVariableGuid, EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS, Config->PlatformInfo.Nvram.Mlb.Size - 1, - Mlb + (CHAR8 *) Mlb ); DEBUG (( EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_INFO, @@ -402,17 +490,18 @@ OcLoadPlatformSupport ( { CONST CHAR8 *SmbiosUpdateStr; OC_SMBIOS_UPDATE_MODE SmbiosUpdateMode; + MAC_INFO_DATA InfoData; + MAC_INFO_DATA *UsedMacInfo; - // - // TODO: implement - // if (Config->PlatformInfo.Automatic) { - DEBUG ((DEBUG_ERROR, "OC: Automatic platform information is unsupported\n")); - return; + GetMacInfo (OC_BLOB_GET (&Config->PlatformInfo.Generic.SystemProductName), &InfoData); + UsedMacInfo = &InfoData; + } else { + UsedMacInfo = NULL; } if (Config->PlatformInfo.UpdateDataHub) { - OcPlatformUpdateDataHub (Config, CpuInfo); + OcPlatformUpdateDataHub (Config, CpuInfo, UsedMacInfo); } if (Config->PlatformInfo.UpdateSmbios) { @@ -431,10 +520,10 @@ OcLoadPlatformSupport ( SmbiosUpdateMode = OcSmbiosUpdateAuto; } - OcPlatformUpdateSmbios (Config, CpuInfo, SmbiosUpdateMode); + OcPlatformUpdateSmbios (Config, CpuInfo, UsedMacInfo, SmbiosUpdateMode); } if (Config->PlatformInfo.UpdateNvram) { - OcPlatformUpdateNvram (Config); + OcPlatformUpdateNvram (Config, UsedMacInfo); } } diff --git a/macbuild.tool b/macbuild.tool index cbd6a036..84759048 100755 --- a/macbuild.tool +++ b/macbuild.tool @@ -135,6 +135,7 @@ updaterepo "https://github.com/tianocore/edk2" UDK UDK2018 || exit 1 cd UDK updaterepo "https://github.com/acidanthera/EfiPkg" EfiPkg master || exit 1 updaterepo "https://github.com/acidanthera/OcSupportPkg" OcSupportPkg master || exit 1 +updaterepo "https://github.com/acidanthera/MacInfoPkg" MacInfoPkg master || exit 1 if [ ! -d OpenCorePkg ]; then ln -s .. OpenCorePkg || exit 1 -- GitLab