/* * Copyright (c) 2026, Apollo Telephone Laboratories. * Provided under the BSD-3 clause. */ #include #include EFI_STATUS FileGetVolume(IN EFI_HANDLE ImageHandle, OUT EFI_FILE_HANDLE *Handle) { EFI_LOADED_IMAGE *LoadedImage = NULL; EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *IoVolume; EFI_GUID LipGuid = EFI_LOADED_IMAGE_PROTOCOL_GUID; EFI_GUID FsGuid = EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID; EFI_FILE_HANDLE Volume; EFI_STATUS Status; Status = FwiHandleProtocol( ImageHandle, &LipGuid, (VOID **)&LoadedImage ); if (EFI_ERROR(Status)) { Print(L"fatal: could not get loaded image\n"); return Status; } Status = FwiHandleProtocol( LoadedImage->DeviceHandle, &FsGuid, (VOID *)&IoVolume ); if (EFI_ERROR(Status)) { Print(L"fatal: could not I/O volume\n"); return Status; } Status = uefi_call_wrapper( IoVolume->OpenVolume, 2, IoVolume, &Volume ); if (EFI_ERROR(Status)) { Print(L"fatal: failed to get volume\n"); return Status; } *Handle = Volume; return EFI_SUCCESS; }