16#include <Guid/FileInfo.h>
17#include <Protocol/SimpleFileSystem.h>
19#include <Library/BaseLib.h>
20#include <Library/BaseMemoryLib.h>
22#include <Library/MemoryAllocationLib.h>
23#include <Library/DevicePathLib.h>
26#include <Library/UefiBootServicesTableLib.h>
28EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *
30 IN EFI_HANDLE DeviceHandle OPTIONAL,
31 IN EFI_DEVICE_PATH_PROTOCOL *
FilePath OPTIONAL
35 EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *FileSystem;
38 DEBUG ((DEBUG_INFO,
"OCFS: Trying to locate filesystem on %p %p\n", DeviceHandle,
FilePath));
45 if (DeviceHandle == NULL) {
50 DEBUG ((DEBUG_WARN,
"OCFS: No device handle or path to proceed\n"));
54 Status =
gBS->LocateDevicePath (
60 if (EFI_ERROR (Status)) {
61 DEBUG ((DEBUG_WARN,
"OCFS: Failed to locate device handle over path - %r\n", Status));
66 Status =
gBS->HandleProtocol (
72 if (EFI_ERROR (Status)) {
73 DEBUG ((DEBUG_INFO,
"OCFS: No filesystem on device handle %p\n", DeviceHandle));
82 IN EFI_HANDLE DeviceHandle OPTIONAL,
83 IN EFI_DEVICE_PATH_PROTOCOL *
FilePath OPTIONAL
87 EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *FileSystem;
88 EFI_FILE_PROTOCOL *RootVolume;
91 if (FileSystem == NULL) {
95 Status = FileSystem->OpenVolume (FileSystem, &RootVolume);
96 if (EFI_ERROR (Status)) {
103EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *
108 EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *SimpleFs;
113 EFI_HANDLE *HandleBuffer;
116 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
117 CONST HARDDRIVE_DEVICE_PATH *HardDrive;
121 Status =
gBS->LocateHandleBuffer (
128 if (EFI_ERROR (Status)) {
134 for (Index = 0; Index < NumHandles; ++Index) {
135 Status =
gBS->HandleProtocol (
140 if (EFI_ERROR (Status)) {
144 HardDrive = (HARDDRIVE_DEVICE_PATH *)(
151 if ((HardDrive == NULL) || (HardDrive->SignatureType != 0x02)) {
155 if (
CompareGuid (Guid, (GUID *)HardDrive->Signature)) {
156 Status =
gBS->HandleProtocol (
161 if (EFI_ERROR (Status)) {
169 FreePool (HandleBuffer);
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL * OcLocateFileSystemByGuid(IN CONST GUID *Guid)
EFI_FILE_PROTOCOL * OcLocateRootVolume(IN EFI_HANDLE DeviceHandle OPTIONAL, IN EFI_DEVICE_PATH_PROTOCOL *FilePath OPTIONAL)
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL * OcLocateFileSystem(IN EFI_HANDLE DeviceHandle OPTIONAL, IN EFI_DEVICE_PATH_PROTOCOL *FilePath OPTIONAL)
DMG_FILEPATH_DEVICE_PATH FilePath
VOID DebugPrintDevicePath(IN UINTN ErrorLevel, IN CONST CHAR8 *Message, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath OPTIONAL)
EFI_DEVICE_PATH_PROTOCOL * FindDevicePathNodeWithType(IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, IN UINT8 Type, IN UINT8 SubType OPTIONAL)
BOOLEAN EFIAPI CompareGuid(IN CONST GUID *Guid1, IN CONST GUID *Guid2)
EFI_GUID gEfiSimpleFileSystemProtocolGuid
EFI_GUID gEfiDevicePathProtocolGuid