]> glassweightruler.freedombox.rocks Git - Ventoy.git/blobdiff - EDK2/edk2_mod/edk2-edk2-stable201911/MdeModulePkg/Application/Ventoy/VentoyDebug.c
update
[Ventoy.git] / EDK2 / edk2_mod / edk2-edk2-stable201911 / MdeModulePkg / Application / Ventoy / VentoyDebug.c
index d96c6b2e1694928c3b73ba09274ff30f8fbbd50d..7af3349bc862742e67b387f0fbaabd81399ae570 100644 (file)
@@ -36,9 +36,9 @@
 #include <Protocol/SimpleFileSystem.h>
 #include <Ventoy.h>
 
-#define PROCOTOL_SLEEP_SECONDS  0
+#define PROCOTOL_SLEEP_MSECONDS  0
 
-#define debug_sleep() if (PROCOTOL_SLEEP_SECONDS) sleep(PROCOTOL_SLEEP_SECONDS)
+#define debug_sleep() if (PROCOTOL_SLEEP_MSECONDS) gBS->Stall(1000 * PROCOTOL_SLEEP_MSECONDS)
 
 STATIC ventoy_system_wrapper g_system_wrapper;
 
@@ -126,7 +126,7 @@ STATIC EFI_STATUS EFIAPI ventoy_open_protocol
     IN  UINT32                     Attributes
 )
 {
-    debug("ventoy_open_protocol:%a", ventoy_get_guid_name(Protocol));  debug_sleep();
+    debug("ventoy_open_protocol:<%p> %a", Handle, ventoy_get_guid_name(Protocol));  debug_sleep();
     return g_system_wrapper.OriOpenProtocol(Handle, Protocol, Interface, AgentHandle, ControllerHandle, Attributes);
 }
 
@@ -141,11 +141,87 @@ STATIC EFI_STATUS EFIAPI ventoy_locate_protocol
     return g_system_wrapper.OriLocateProtocol(Protocol, Registration, Interface);
 }
 
+STATIC EFI_STATUS EFIAPI ventoy_locate_handle_buffer
+(
+    IN     EFI_LOCATE_SEARCH_TYPE        SearchType,
+    IN     EFI_GUID                     *Protocol,      OPTIONAL
+    IN     VOID                         *SearchKey,     OPTIONAL
+    IN OUT UINTN                        *NoHandles,
+    OUT    EFI_HANDLE                  **Buffer
+)
+{
+    debug("ventoy_locate_handle_buffer:%a", ventoy_get_guid_name(Protocol));  debug_sleep();
+    return g_system_wrapper.OriLocateHandleBuffer(SearchType, Protocol, SearchKey, NoHandles, Buffer);
+}
+
+STATIC EFI_STATUS EFIAPI ventoy_protocol_per_handle
+(
+    IN  EFI_HANDLE      Handle,
+    OUT EFI_GUID        ***ProtocolBuffer,
+    OUT UINTN           *ProtocolBufferCount
+)
+{
+    debug("ventoy_protocol_per_handle:%p", Handle);  debug_sleep();
+    return g_system_wrapper.OriProtocolsPerHandle(Handle, ProtocolBuffer, ProtocolBufferCount);
+}
+
+EFI_STATUS EFIAPI ventoy_locate_handle
+(
+    IN     EFI_LOCATE_SEARCH_TYPE    SearchType,
+    IN     EFI_GUID                 *Protocol,    OPTIONAL
+    IN     VOID                     *SearchKey,   OPTIONAL
+    IN OUT UINTN                    *BufferSize,
+    OUT    EFI_HANDLE               *Buffer
+)
+{
+    UINTN i;
+    EFI_HANDLE Handle;
+    EFI_STATUS Status = EFI_SUCCESS;
+    
+    debug("ventoy_locate_handle: %d %a %p", SearchType, ventoy_get_guid_name(Protocol), SearchKey); 
+    Status = g_system_wrapper.OriLocateHandle(SearchType, Protocol, SearchKey, BufferSize, Buffer);
+    debug("ventoy_locate_handle: %r Handle Count:%u", Status, *BufferSize/sizeof(EFI_HANDLE));
+
+    if (EFI_SUCCESS == Status)
+    {
+        for (i = 0; i < *BufferSize / sizeof(EFI_HANDLE); i++)
+        {
+            if (Buffer[i] == gBlockData.Handle)
+            {
+                Handle = Buffer[0];
+                Buffer[0] = Buffer[i];
+                Buffer[i] = Handle;
+                debug("####### Handle at %u", i);
+                break;
+            }
+        }
+    }
+
+    debug_sleep();
+
+    return Status;
+}
+
+STATIC EFI_STATUS EFIAPI ventoy_locate_device_path
+(
+    IN     EFI_GUID                          *Protocol,
+    IN OUT EFI_DEVICE_PATH_PROTOCOL         **DevicePath,
+    OUT    EFI_HANDLE                        *Device
+)
+{
+    debug("ventoy_locate_device_path:%a", ventoy_get_guid_name(Protocol));  debug_sleep();
+    return g_system_wrapper.OriLocateDevicePath(Protocol, DevicePath, Device);
+}
+
 EFI_STATUS EFIAPI ventoy_wrapper_system(VOID)
 {
-    ventoy_wrapper(gBS, g_system_wrapper, LocateProtocol, ventoy_locate_protocol);
-    ventoy_wrapper(gBS, g_system_wrapper, HandleProtocol, ventoy_handle_protocol);
-    ventoy_wrapper(gBS, g_system_wrapper, OpenProtocol,   ventoy_open_protocol);
+    ventoy_wrapper(gBS, g_system_wrapper, LocateProtocol,       ventoy_locate_protocol);
+    ventoy_wrapper(gBS, g_system_wrapper, HandleProtocol,       ventoy_handle_protocol);
+    ventoy_wrapper(gBS, g_system_wrapper, OpenProtocol,         ventoy_open_protocol);
+    ventoy_wrapper(gBS, g_system_wrapper, LocateHandleBuffer,   ventoy_locate_handle_buffer);
+    ventoy_wrapper(gBS, g_system_wrapper, ProtocolsPerHandle,   ventoy_protocol_per_handle);
+    ventoy_wrapper(gBS, g_system_wrapper, LocateHandle,         ventoy_locate_handle);
+    ventoy_wrapper(gBS, g_system_wrapper, LocateDevicePath,     ventoy_locate_device_path);
 
     return EFI_SUCCESS;
 }