X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdeModulePkg%2FApplication%2FCapsuleApp%2FCapsuleOnDisk.c;fp=MdeModulePkg%2FApplication%2FCapsuleApp%2FCapsuleOnDisk.c;h=df43a436f2c070a62f043426ec703a4719fb45fd;hp=a11683d66c77a878c4b27f5eef24e831881e282e;hb=6470a43160183cd48cad8901c912a48811f18b13;hpb=0d4aa276d1f6e0cb9d71a7fb88b30c416ba6d5a3 diff --git a/MdeModulePkg/Application/CapsuleApp/CapsuleOnDisk.c b/MdeModulePkg/Application/CapsuleApp/CapsuleOnDisk.c index a11683d66c..df43a436f2 100644 --- a/MdeModulePkg/Application/CapsuleApp/CapsuleOnDisk.c +++ b/MdeModulePkg/Application/CapsuleApp/CapsuleOnDisk.c @@ -23,6 +23,8 @@ #include #include +#define MAX_CAPSULE_NUM 10 + EFI_GUID mCapsuleOnDiskBootOptionGuid = { 0x4CC29BB7, 0x2413, 0x40A2, { 0xB0, 0x6D, 0x25, 0x3E, 0x37, 0x10, 0xF5, 0x32 } }; /** @@ -744,6 +746,41 @@ SetCapsuleStatusVariable ( return Status; } +/** + Check if Capsule On Disk is supported. + + @retval TRUE Capsule On Disk is supported. + @retval FALSE Capsule On Disk is not supported. + +**/ +BOOLEAN +IsCapsuleOnDiskSupported ( + VOID + ) +{ + EFI_STATUS Status; + UINT64 OsIndicationsSupported; + UINTN DataSize; + + DataSize = sizeof(UINT64); + Status = gRT->GetVariable ( + L"OsIndicationsSupported", + &gEfiGlobalVariableGuid, + NULL, + &DataSize, + &OsIndicationsSupported + ); + if (EFI_ERROR (Status)) { + return FALSE; + } + + if (OsIndicationsSupported & EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED) { + return TRUE; + } + + return FALSE; +} + /** Process Capsule On Disk. @@ -770,6 +807,16 @@ ProcessCapsuleOnDisk ( UINT16 BootNext; EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *Fs; BOOLEAN UpdateBootNext; + CHAR16 *FileName[MAX_CAPSULE_NUM]; + UINTN Index; + + // + // Check if Capsule On Disk is supported + // + if (!IsCapsuleOnDiskSupported ()) { + Print (L"CapsuleApp: Capsule On Disk is not supported.\n"); + return EFI_UNSUPPORTED; + } // // Get a valid file system from boot path @@ -782,10 +829,17 @@ ProcessCapsuleOnDisk ( return Status; } + // + // Get file name from file path + // + for (Index = 0; Index < CapsuleNum; Index ++) { + FileName[Index] = GetFileNameFromPath (FilePath[Index]); + } + // // Copy capsule image to '\efi\UpdateCapsule\' // - Status = WriteUpdateFile (CapsuleBuffer, CapsuleBufferSize, FilePath, CapsuleNum, Fs); + Status = WriteUpdateFile (CapsuleBuffer, CapsuleBufferSize, FileName, CapsuleNum, Fs); if (EFI_ERROR (Status)) { Print (L"CapsuleApp: capsule image could not be copied for update.\n"); return Status;