#include <Library/SortLib.h>\r
#include <Library/UefiLib.h>\r
#include <Protocol/UsbIo.h>\r
+#include <Protocol/BlockIo.h>\r
+#include <Protocol/SimpleFileSystem.h>\r
+\r
+\r
\r
typedef enum {\r
MTDTypeUnknown,\r
OUT EFI_DEVICE_PATH_PROTOCOL ***Table\r
)\r
{\r
- EFI_HANDLE *HandleBuffer;\r
- UINTN HandleNum;\r
- UINTN HandleLoop;\r
- EFI_DEVICE_PATH_PROTOCOL **TempTable;\r
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
- EFI_DEVICE_PATH_PROTOCOL *HIDevicePath;\r
- UINTN Index;\r
- EFI_STATUS Status;\r
+ EFI_HANDLE *HandleBuffer;\r
+ UINTN HandleNum;\r
+ UINTN HandleLoop;\r
+ EFI_DEVICE_PATH_PROTOCOL **TempTable;\r
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
+ EFI_DEVICE_PATH_PROTOCOL *HIDevicePath;\r
+ EFI_BLOCK_IO_PROTOCOL *BlockIo;\r
+ EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *SimpleFileSystem;\r
+ UINTN Index;\r
+ EFI_STATUS Status;\r
\r
HandleBuffer = NULL;\r
\r
Status = gBS->LocateHandleBuffer (\r
- AllHandles,\r
- NULL,\r
+ ByProtocol,\r
+ &gEfiDevicePathProtocolGuid,\r
NULL,\r
&HandleNum,\r
&HandleBuffer\r
continue;\r
}\r
\r
+ Status = gBS->HandleProtocol( HandleBuffer[HandleLoop], \r
+ &gEfiBlockIoProtocolGuid, \r
+ (VOID **)&BlockIo\r
+ );\r
+ if (EFI_ERROR(Status)) {\r
+ Status = gBS->HandleProtocol( HandleBuffer[HandleLoop], \r
+ &gEfiSimpleFileSystemProtocolGuid, \r
+ (VOID **)&SimpleFileSystem\r
+ );\r
+ if (EFI_ERROR(Status)) {\r
+ continue;\r
+ }\r
+ }\r
+\r
for (Index = 0; TempTable[Index] != NULL; Index++) {\r
if (DevicePathCompare (&TempTable[Index], &HIDevicePath) == 0) {\r
FreePool (HIDevicePath);\r