Add FMP for System76 EC
Signed-off-by: Tim Crawford <tcrawford@system76.com>
This commit is contained in:
		
							
								
								
									
										21
									
								
								System76Pkg/Ec/Fmp/EcFmp.dsc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								System76Pkg/Ec/Fmp/EcFmp.dsc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
# SPDX-License-Identifier: MPL-2.0
 | 
			
		||||
# SPDX-FileCopyrightText: 2023 System76, Inc.
 | 
			
		||||
 | 
			
		||||
FmpDevicePkg/FmpDxe/FmpDxe.inf {
 | 
			
		||||
  <Defines>
 | 
			
		||||
    FILE_GUID = $(EC_FMP_ESRT_GUID)
 | 
			
		||||
  <PcdsFixedAtBuild>
 | 
			
		||||
    gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageIdName|L"System76 EC"
 | 
			
		||||
    gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceBuildTimeLowestSupportedVersion|0
 | 
			
		||||
    gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceProgressWatchdogTimeInSeconds|0
 | 
			
		||||
    gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceProgressColor|0x00FBB86C
 | 
			
		||||
  <LibraryClasses>
 | 
			
		||||
    FmpPayloadHeaderLib|FmpDevicePkg/Library/FmpPayloadHeaderLibV1/FmpPayloadHeaderLibV1.inf
 | 
			
		||||
    FmpAuthenticationLib|MdeModulePkg/Library/FmpAuthenticationLibNull/FmpAuthenticationLibNull.inf
 | 
			
		||||
    FmpDependencyLib|FmpDevicePkg/Library/FmpDependencyLib/FmpDependencyLib.inf
 | 
			
		||||
    FmpDependencyCheckLib|FmpDevicePkg/Library/FmpDependencyCheckLibNull/FmpDependencyCheckLibNull.inf
 | 
			
		||||
    FmpDependencyDeviceLib|FmpDevicePkg/Library/FmpDependencyDeviceLibNull/FmpDependencyDeviceLibNull.inf
 | 
			
		||||
    CapsuleUpdatePolicyLib|FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleUpdatePolicyLibNull.inf
 | 
			
		||||
 | 
			
		||||
    FmpDeviceLib|System76Pkg/Ec/Fmp/EcFmpLib.inf
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										241
									
								
								System76Pkg/Ec/Fmp/EcFmpLib.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										241
									
								
								System76Pkg/Ec/Fmp/EcFmpLib.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,241 @@
 | 
			
		||||
// SPDX-License-Identifier: MPL-2.0
 | 
			
		||||
// SPDX-FileCopyrightText: 2023 System76, Inc.
 | 
			
		||||
 | 
			
		||||
#include <Guid/SystemResourceTable.h>
 | 
			
		||||
#include <Library/BaseMemoryLib.h>
 | 
			
		||||
#include <Library/FmpDeviceLib.h>
 | 
			
		||||
#include <Library/MemoryAllocationLib.h>
 | 
			
		||||
#include <Library/UefiBootServicesTableLib.h>
 | 
			
		||||
#include <LastAttemptStatus.h>
 | 
			
		||||
 | 
			
		||||
#define US_PER_MS 1000
 | 
			
		||||
 | 
			
		||||
EFI_STATUS
 | 
			
		||||
EFIAPI
 | 
			
		||||
RegisterFmpInstaller(
 | 
			
		||||
    IN FMP_DEVICE_LIB_REGISTER_FMP_INSTALLER FmpInstaller
 | 
			
		||||
) {
 | 
			
		||||
    return EFI_UNSUPPORTED;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EFI_STATUS
 | 
			
		||||
EFIAPI
 | 
			
		||||
RegisterFmpUninstaller(
 | 
			
		||||
    IN FMP_DEVICE_LIB_REGISTER_FMP_UNINSTALLER FmpUninstaller
 | 
			
		||||
) {
 | 
			
		||||
    return EFI_UNSUPPORTED;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EFI_STATUS
 | 
			
		||||
EFIAPI
 | 
			
		||||
FmpDeviceSetContext(
 | 
			
		||||
    IN EFI_HANDLE Handle,
 | 
			
		||||
    IN OUT VOID **Context
 | 
			
		||||
) {
 | 
			
		||||
    return EFI_UNSUPPORTED;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EFI_STATUS
 | 
			
		||||
EFIAPI
 | 
			
		||||
FmpDeviceGetSize(
 | 
			
		||||
    OUT UINTN *Size
 | 
			
		||||
) {
 | 
			
		||||
    if (!Size)
 | 
			
		||||
        return EFI_INVALID_PARAMETER;
 | 
			
		||||
 | 
			
		||||
    // TODO
 | 
			
		||||
    *Size = 128 * 1024;
 | 
			
		||||
    return EFI_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EFI_STATUS
 | 
			
		||||
EFIAPI
 | 
			
		||||
FmpDeviceGetImageTypeIdGuidPtr(
 | 
			
		||||
    OUT EFI_GUID **Guid
 | 
			
		||||
) {
 | 
			
		||||
    if (!Guid)
 | 
			
		||||
        return EFI_INVALID_PARAMETER;
 | 
			
		||||
 | 
			
		||||
    return EFI_UNSUPPORTED;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EFI_STATUS
 | 
			
		||||
EFIAPI
 | 
			
		||||
FmpDeviceGetAttributes(
 | 
			
		||||
    OUT UINT64 *Supported,
 | 
			
		||||
    OUT UINT64 *Setting
 | 
			
		||||
) {
 | 
			
		||||
    if (!Supported || !Setting)
 | 
			
		||||
        return EFI_INVALID_PARAMETER;
 | 
			
		||||
 | 
			
		||||
    *Supported = IMAGE_ATTRIBUTE_IMAGE_UPDATABLE
 | 
			
		||||
        | IMAGE_ATTRIBUTE_RESET_REQUIRED
 | 
			
		||||
        | IMAGE_ATTRIBUTE_IN_USE;
 | 
			
		||||
 | 
			
		||||
    *Setting = IMAGE_ATTRIBUTE_IMAGE_UPDATABLE
 | 
			
		||||
        | IMAGE_ATTRIBUTE_RESET_REQUIRED
 | 
			
		||||
        | IMAGE_ATTRIBUTE_IN_USE;
 | 
			
		||||
 | 
			
		||||
    return EFI_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EFI_STATUS
 | 
			
		||||
EFIAPI
 | 
			
		||||
FmpDeviceGetLowestSupportedVersion(
 | 
			
		||||
    OUT UINT32 *LowestSupportedVersion
 | 
			
		||||
) {
 | 
			
		||||
    return EFI_UNSUPPORTED;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EFI_STATUS
 | 
			
		||||
EFIAPI
 | 
			
		||||
FmpDeviceGetVersionString(
 | 
			
		||||
    OUT CHAR16 **VersionString
 | 
			
		||||
) {
 | 
			
		||||
    if (!VersionString)
 | 
			
		||||
        return EFI_INVALID_PARAMETER;
 | 
			
		||||
 | 
			
		||||
    // TODO
 | 
			
		||||
    *VersionString = AllocatePool(sizeof(L"0.3"));
 | 
			
		||||
    if (!(*VersionString))
 | 
			
		||||
        return EFI_OUT_OF_RESOURCES;
 | 
			
		||||
 | 
			
		||||
    CopyMem(VersionString, L"0.3", sizeof(L"0.3"));
 | 
			
		||||
 | 
			
		||||
    //*VersionString = NULL;
 | 
			
		||||
    return EFI_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EFI_STATUS
 | 
			
		||||
EFIAPI
 | 
			
		||||
FmpDeviceGetVersion(
 | 
			
		||||
    OUT UINT32 *Version
 | 
			
		||||
) {
 | 
			
		||||
    if (!Version)
 | 
			
		||||
        return EFI_INVALID_PARAMETER;
 | 
			
		||||
 | 
			
		||||
    // TODO
 | 
			
		||||
    *Version = 3;
 | 
			
		||||
    return EFI_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EFI_STATUS
 | 
			
		||||
EFIAPI
 | 
			
		||||
FmpDeviceGetHardwareInstance(
 | 
			
		||||
    OUT UINT64 *HardwareInstance
 | 
			
		||||
) {
 | 
			
		||||
    return EFI_UNSUPPORTED;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EFI_STATUS
 | 
			
		||||
EFIAPI
 | 
			
		||||
FmpDeviceGetImage(
 | 
			
		||||
    OUT VOID *Image,
 | 
			
		||||
    IN OUT UINTN *ImageSize
 | 
			
		||||
) {
 | 
			
		||||
    // TODO
 | 
			
		||||
    return EFI_UNSUPPORTED;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EFI_STATUS
 | 
			
		||||
EFIAPI
 | 
			
		||||
FmpDeviceCheckImageWithStatus(
 | 
			
		||||
    IN CONST VOID *Image,
 | 
			
		||||
    IN UINTN ImageSize,
 | 
			
		||||
    OUT UINT32 *ImageUpdatable,
 | 
			
		||||
    OUT UINT32 *LastAttemptStatus
 | 
			
		||||
) {
 | 
			
		||||
    if (!LastAttemptStatus)
 | 
			
		||||
        return EFI_INVALID_PARAMETER;
 | 
			
		||||
 | 
			
		||||
    *LastAttemptStatus = LAST_ATTEMPT_STATUS_DEVICE_LIBRARY_MIN_ERROR_CODE_VALUE;
 | 
			
		||||
 | 
			
		||||
    if (!ImageUpdatable  || !Image)
 | 
			
		||||
        return EFI_INVALID_PARAMETER;
 | 
			
		||||
 | 
			
		||||
    // TODO:
 | 
			
		||||
    *LastAttemptStatus = LAST_ATTEMPT_STATUS_SUCCESS;
 | 
			
		||||
    return EFI_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EFI_STATUS
 | 
			
		||||
EFIAPI
 | 
			
		||||
FmpDeviceCheckImage(
 | 
			
		||||
    IN CONST VOID *Image,
 | 
			
		||||
    IN UINTN ImageSize,
 | 
			
		||||
    OUT UINT32 *ImageUpdatable
 | 
			
		||||
) {
 | 
			
		||||
    UINT32 LastAttemptStatus;
 | 
			
		||||
 | 
			
		||||
    return FmpDeviceCheckImageWithStatus(Image, ImageSize, ImageUpdatable, &LastAttemptStatus);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EFI_STATUS
 | 
			
		||||
EFIAPI
 | 
			
		||||
FmpDeviceSetImageWithStatus (
 | 
			
		||||
    IN CONST VOID *Image,
 | 
			
		||||
    IN UINTN ImageSize,
 | 
			
		||||
    IN CONST VOID *VendorCode, OPTIONAL
 | 
			
		||||
    IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress, OPTIONAL
 | 
			
		||||
    IN UINT32 CapsuleFwVersion,
 | 
			
		||||
    OUT CHAR16 **AbortReason,
 | 
			
		||||
    OUT UINT32 *LastAttemptStatus
 | 
			
		||||
) {
 | 
			
		||||
    // TODO
 | 
			
		||||
    EFI_STATUS Status = EFI_SUCCESS;
 | 
			
		||||
    UINT32 Updateable = 0;
 | 
			
		||||
 | 
			
		||||
    Status = FmpDeviceCheckImageWithStatus(Image, ImageSize, &Updateable, LastAttemptStatus);
 | 
			
		||||
    if (EFI_ERROR(Status)) {
 | 
			
		||||
        goto cleanup;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (Updateable != IMAGE_UPDATABLE_VALID) {
 | 
			
		||||
        Status = EFI_ABORTED;
 | 
			
		||||
        goto cleanup;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (Progress == NULL) {
 | 
			
		||||
        Status = EFI_INVALID_PARAMETER;
 | 
			
		||||
        goto cleanup;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    gBS->Stall (3000 * US_PER_MS);
 | 
			
		||||
    Progress(15);
 | 
			
		||||
    gBS->Stall (2000 * US_PER_MS);
 | 
			
		||||
 | 
			
		||||
    for (int p = 20; p < 100; p++) {
 | 
			
		||||
        gBS->Stall (100 * US_PER_MS);
 | 
			
		||||
        Progress (p);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
cleanup:
 | 
			
		||||
    if (EFI_ERROR (Status)) {
 | 
			
		||||
      *LastAttemptStatus = LAST_ATTEMPT_STATUS_DEVICE_LIBRARY_MIN_ERROR_CODE_VALUE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return Status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EFI_STATUS
 | 
			
		||||
EFIAPI
 | 
			
		||||
FmpDeviceSetImage(
 | 
			
		||||
    IN CONST VOID *Image,
 | 
			
		||||
    IN UINTN ImageSize,
 | 
			
		||||
    IN CONST VOID *VendorCode, OPTIONAL
 | 
			
		||||
    IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress, OPTIONAL
 | 
			
		||||
    IN UINT32 CapsuleFwVersion,
 | 
			
		||||
    OUT CHAR16 **AbortReason
 | 
			
		||||
) {
 | 
			
		||||
    UINT32 LastAttemptStatus;
 | 
			
		||||
 | 
			
		||||
    return FmpDeviceSetImageWithStatus(Image, ImageSize, VendorCode, Progress, CapsuleFwVersion, AbortReason, &LastAttemptStatus);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EFI_STATUS
 | 
			
		||||
EFIAPI
 | 
			
		||||
FmpDeviceLock(
 | 
			
		||||
    VOID
 | 
			
		||||
) {
 | 
			
		||||
    return EFI_UNSUPPORTED;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										20
									
								
								System76Pkg/Ec/Fmp/EcFmpLib.inf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								System76Pkg/Ec/Fmp/EcFmpLib.inf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
# SPDX-License-Identifier: MPL-2.0
 | 
			
		||||
# SPDX-FileCopyrightText: 2023 System76, Inc.
 | 
			
		||||
 | 
			
		||||
[Defines]
 | 
			
		||||
  INF_VERSION = 1.27
 | 
			
		||||
  BASE_NAME = EcFmpLib
 | 
			
		||||
  FILE_GUID = 760B7155-99F7-4E8E-8C07-D38A75F54C54
 | 
			
		||||
  MODULE_TYPE = DXE_DRIVER
 | 
			
		||||
  VERSION_STRING = 0.1
 | 
			
		||||
  LIBRARY_CLASS = FmpDeviceLib|DXE_DRIVER
 | 
			
		||||
 | 
			
		||||
[Sources]
 | 
			
		||||
  EcFmpLib.c
 | 
			
		||||
 | 
			
		||||
[Packages]
 | 
			
		||||
  MdePkg/MdePkg.dec
 | 
			
		||||
  FmpDevicePkg/FmpDevicePkg.dec
 | 
			
		||||
 | 
			
		||||
[LibraryClasses]
 | 
			
		||||
  UefiBootServicesTableLib
 | 
			
		||||
@@ -112,6 +112,9 @@
 | 
			
		||||
  DEFINE SECURE_BOOT_ENABLE           = FALSE
 | 
			
		||||
  DEFINE TPM_ENABLE                   = FALSE
 | 
			
		||||
 | 
			
		||||
  # FMP
 | 
			
		||||
  DEFINE EC_FMP_ESRT_GUID = 76FFAC81-FDE6-464D-A6D9-84BDD9EE522D
 | 
			
		||||
 | 
			
		||||
[BuildOptions]
 | 
			
		||||
  *_*_*_CC_FLAGS                 = -D DISABLE_NEW_DEPRECATED_INTERFACES
 | 
			
		||||
  GCC:*_UNIXGCC_*_CC_FLAGS       = -DMDEPKG_NDEBUG
 | 
			
		||||
@@ -206,13 +209,16 @@
 | 
			
		||||
  UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
 | 
			
		||||
  UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf
 | 
			
		||||
  OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
 | 
			
		||||
  CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
 | 
			
		||||
  SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf
 | 
			
		||||
  UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
 | 
			
		||||
  BootLogoLib|MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf
 | 
			
		||||
  CustomizedDisplayLib|MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf
 | 
			
		||||
  FrameBufferBltLib|MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.inf
 | 
			
		||||
 | 
			
		||||
  # FMP Capsule
 | 
			
		||||
  BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib.inf
 | 
			
		||||
  CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
 | 
			
		||||
 | 
			
		||||
  #
 | 
			
		||||
  # CPU
 | 
			
		||||
  #
 | 
			
		||||
@@ -346,6 +352,9 @@
 | 
			
		||||
  Tpm2DeviceLib|SecurityPkg/Library/Tpm2DeviceLibTcg2/Tpm2DeviceLibTcg2.inf
 | 
			
		||||
!endif
 | 
			
		||||
 | 
			
		||||
  # FMP Capsule
 | 
			
		||||
  CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf
 | 
			
		||||
 | 
			
		||||
[LibraryClasses.common.DXE_RUNTIME_DRIVER]
 | 
			
		||||
  PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
 | 
			
		||||
  MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
 | 
			
		||||
@@ -364,6 +373,9 @@
 | 
			
		||||
  AuthVariableLib|MdeModulePkg/Library/AuthVariableLibNull/AuthVariableLibNull.inf
 | 
			
		||||
!endif
 | 
			
		||||
 | 
			
		||||
  # FMP Capsule
 | 
			
		||||
  CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibFmp/DxeRuntimeCapsuleLib.inf
 | 
			
		||||
 | 
			
		||||
[LibraryClasses.common.UEFI_DRIVER,LibraryClasses.common.UEFI_APPLICATION]
 | 
			
		||||
  PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
 | 
			
		||||
  MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
 | 
			
		||||
@@ -563,7 +575,6 @@
 | 
			
		||||
  MdeModulePkg/Universal/Metronome/Metronome.inf
 | 
			
		||||
  MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
 | 
			
		||||
  MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
 | 
			
		||||
  MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
 | 
			
		||||
  MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf
 | 
			
		||||
!if $(DISABLE_RESET_SYSTEM) == FALSE
 | 
			
		||||
  MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf
 | 
			
		||||
@@ -710,6 +721,9 @@
 | 
			
		||||
  # Firmware update
 | 
			
		||||
  #
 | 
			
		||||
  MdeModulePkg/Universal/EsrtFmpDxe/EsrtFmpDxe.inf
 | 
			
		||||
  MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
 | 
			
		||||
 | 
			
		||||
  !include System76Pkg/Ec/Fmp/EcFmp.dsc
 | 
			
		||||
 | 
			
		||||
  #------------------------------
 | 
			
		||||
  #  Build the shell
 | 
			
		||||
 
 | 
			
		||||
@@ -113,7 +113,6 @@ INF PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
 | 
			
		||||
INF MdeModulePkg/Universal/Metronome/Metronome.inf
 | 
			
		||||
INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
 | 
			
		||||
INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
 | 
			
		||||
INF MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
 | 
			
		||||
INF MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf
 | 
			
		||||
 | 
			
		||||
!if $(DISABLE_RESET_SYSTEM) == FALSE
 | 
			
		||||
@@ -282,6 +281,8 @@ INF SecurityPkg/RandomNumberGenerator/RngDxe/RngDxe.inf
 | 
			
		||||
# Firmware update
 | 
			
		||||
#
 | 
			
		||||
INF MdeModulePkg/Universal/EsrtFmpDxe/EsrtFmpDxe.inf
 | 
			
		||||
INF MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
 | 
			
		||||
INF FILE_GUID = $(EC_FMP_ESRT_GUID) FmpDevicePkg/FmpDxe/FmpDxe.inf
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Shell
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user