In your code, there are several problems.
1. For your case, you couldn't simply locate all BlockIo instances. It's 
because some of these BlockIo instances may belong to other removable devices, 
some may point to physical partition rather than logical partition.
2. The logic below is incorrect. It means TRUE
        if(!BlkIo->Media->RemovableMedia || BlkIo->Media->RemovableMedia)
3. Why don't you directly locate all SimpleFileSystem protocol instances and 
then find out Hello.efi? It's more simple.
4. The hang you found should be due to a wrong device path pass down to 
LoadImage().

Thanks
Feng

-----Original Message-----
From: edk2-devel [mailto:[email protected]] On Behalf Of Saqib 
Khan
Sent: Thursday, September 29, 2016 7:41 PM
To: [email protected]
Subject: [edk2] stuck on LoadImage while loading image from usb

Hi ,

I am trying to load an EFI from another EFI, it stuck when LoadImage is called 
both EFI are located on USB .

Here is code snippet


"
    UINTN NumberFileSystemHandles;
    EFI_HANDLE *FileSystemHandles;
    UINTN Index;
    EFI_BLOCK_IO* BlkIo;
    EFI_DEVICE_PATH_PROTOCOL *FilePath;
    EFI_HANDLE    NewHandle;

    UINTN         ExitDataSizePtr;

    EFI_BOOT_LOGO_PROTOCOL          *BootLogo;
    EFI_STATUS    Status;




    gBS->LocateHandleBuffer(ByProtocol,
                            &gEfiBlockIoProtocolGuid,
                            NULL,
                            &NumberFileSystemHandles,
                            &FileSystemHandles);

    for(Index = 0; Index<NumberFileSystemHandles; ++Index) {

        Status = gBS -> HandleProtocol(FileSystemHandles[Index],
                                        &gEfiBlockIoProtocolGuid,
                                        (VOID**) &BlkIo);

        Print(L"after HandleProtocol %x - %r\n",FileSystemHandles[Index], 
Status);
        if(!EFI_ERROR(Status)) {


            //check if it is usb
            if(!BlkIo->Media->RemovableMedia ||
BlkIo->Media->RemovableMedia)
            {



                    FilePath = FileDevicePath(FileSystemHandles[Index],
                                            L"Hello.efi");

                    Status = gBS->LoadImage(
                        FALSE,
                        gImageHandle,
                        FilePath,
                        NULL,
                        0,
                        &NewHandle);
                    if (EFI_ERROR(Status)) {
                        if (NewHandle != NULL) {
                            gBS->UnloadImage(NewHandle);
                        }


                        //return (Status);
            }


    }
"

can any one help me what I am doing wrong here?

--
Regards
Saqib
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to