From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-it0-x232.google.com (mail-it0-x232.google.com [IPv6:2607:f8b0:4001:c0b::232]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 481E31A1E24 for ; Mon, 17 Oct 2016 02:46:31 -0700 (PDT) Received: by mail-it0-x232.google.com with SMTP id m138so44923401itm.0 for ; Mon, 17 Oct 2016 02:46:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=wCodlxyif/k0JeHl8dfjvKmfxUEwRbJHzeEB0C7WTzs=; b=dnIsYRW0bOOwciXjt8dpINrfySU2tUt5KYt4o5jGog3LeYu6n3beWBp49pMfQ5uqP8 ICBvq06KLBbWe7JyjCviKLMcPmXuxAoyL/tZPiJop8mbQUVzYHvv1YB6QWftyR0T46CT s3zGnyPA1ogXq8OtueVn8UlRt0gHedO7KFfJYnhVfD9L43vFJQwl4dVR3U6dlo4Gz4BI e5sErnya5IvtDUdQcOq7HFb8yRB7CaBMf9HFUeSC8dzk7WqO/dClgnTadHoPMNu5NE1X hUwc66659nhOIhmxgOkbNLxx/+solehe2FhMpY9veyQCDeSbZKBrvgheBIfl3K6xdVVI uk0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=wCodlxyif/k0JeHl8dfjvKmfxUEwRbJHzeEB0C7WTzs=; b=lcETc20GnrWOI/5Qi8FTRpOQ4mHk8kXQ9zMo0LDEEeI4NpCBtIFvmw+xvgPG84M/WZ Zzqf4NXz757LWJI/68+KNsbWIaQTUXEyAQHmCMajreXCZYe+yss4Xk7bwTsjg7tYzLZF qaLHGsQqjDdeyDB5o9paEwsRRLUSiSNvESYEnZI5BaFPtixlHa4herLmwVScNiprsnoE FEZsBUo7LcwxTVY4A6TLMh01UsfxAtW+S9j0PXdFLYXUmz+fAzd7V0y7LysaWc6tSBM1 7Tq10rYtrUsxsJUpNUOMjVtac1Zp50z8dXrIvwp2ycD/kb6WAMtGfr+XQ/ia7PVl/0MK P4ug== X-Gm-Message-State: AA6/9RkcXEriNWa4f28Cn3XiRKaW8dsEVJ23j5dz8h4q/Kg9xL5r99s3fIY0kFMSnWX/8RfeqMLc+cAmqUqiig== X-Received: by 10.36.48.74 with SMTP id q71mr7522012itq.116.1476697590559; Mon, 17 Oct 2016 02:46:30 -0700 (PDT) MIME-Version: 1.0 Received: by 10.36.196.214 with HTTP; Mon, 17 Oct 2016 02:46:30 -0700 (PDT) In-Reply-To: References: <02363E95-C78D-4137-93DB-FEB05A221A9B@gmail.com> From: Saqib Khan Date: Mon, 17 Oct 2016 14:46:30 +0500 Message-ID: To: Laszlo Ersek Cc: Andrew Fish , edk2-devel@ml01.01.org X-Content-Filtered-By: Mailman/MimeDel 2.1.21 Subject: Re: Urgent help -UefiBootManagerLib and LegacyBootManagerLib issue X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 17 Oct 2016 09:46:31 -0000 Content-Type: text/plain; charset=UTF-8 hi,Thank Laszlo and Andrew, here are my findings Below loop in LegacyBM.c iterate 16 times out which 2 times it return success and 14 times it return error code 3 *for (Index = 0; Index < HandleCount; Index++) { // // Start the thunk driver so that the legacy option rom gets dispatched. // Note: We don't directly call InstallPciRom because some thunk drivers // (e.g. BlockIo thunk driver) depend on the immediate result after dispatching // // Print(L"LegacyBmRefreshAllBootOption....: %d\n",Index); Status = LegacyBios->CheckPciRom ( LegacyBios, HandleBuffer[Index], NULL, NULL, &Flags ); if (!EFI_ERROR (Status)) { Print(L"PCI Successfull [%X]\n",Status); gBS->ConnectController (HandleBuffer[Index], NULL, NULL, FALSE); } else { Print(L"PCI fail [%X]\n",Status); } }* should *LegacyBios->CheckPciRom *return always Successful in above loop? After this LegacyBmUpdateDevOrder () is called and inside this method system hang in loop below Ptr = DevOrder; NewPtr = NewDevOrder; NewPtr->BbsType = Ptr->BbsType; NewPtr->Length = (UINT16) (sizeof (UINT16) + FDCount * sizeof (UINT16)); for (Index = 0; Index < Ptr->Length / sizeof (UINT16) - 1; Index++) { if (!LegacyBmValidBbsEntry (&LocalBbsTable[Ptr->Data[Index] & 0xFF]) || LocalBbsTable[Ptr->Data[Index] & 0xFF].DeviceType != BBS_FLOPPY ) { // * Print(L"Continure %d\n",Index); it keeps in this loop some time in loop below* continue; } Print(L" \n"); NewPtr->Data[FDIndex] = Ptr->Data[Index]; FDIndex++; } NewFDPtr = NewPtr->Data; On Thu, Oct 6, 2016 at 1:41 PM, Laszlo Ersek wrote: > On 10/06/16 09:28, Saqib Khan wrote: > > Hi Andrew, > > > > I think I did not address my problem well in my previous email.Please > take > > a minute again to understand my problem. > > > > here is my scenario > > > > have following lib added to my *.inf file > > [LibraryClasses] > > HiiLib > > DebugLib > > UefiLib > > MemoryAllocationLib > > UefiBootServicesTableLib > > UefiApplicationEntryPoint > > > > *UefiBootManagerLib LegacyBootManagerLib* > > UefiShellLib > > > > And here is piece of code I am trying to compile > > > > EfiBootManagerConnectAll (); > > EfiBootManagerRefreshAllBootOption (); > > > > BootOption = EfiBootManagerGetLoadOptions (&BootOptionCount, > > LoadOptionTypeBoot); > > > > Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID > **) > > &LegacyBios); > > > > it Compiles successfully but EFI hangs at > > > > *EfiBootManagerRefreshAllBootOption () * > > When I remove * LegacyBootManagerLib* Libraries it does not hang > > > > I think I missing something in it may be i need to add CSM libraries in > my > > EFI? > > > > I also tried NULL library resolution in DuetPkgx64.dsc like this > > > > MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenuApp.inf { > > > > > > NULL|IntelFrameworkModulePkg/Library/LegacyBootManagerLib/ > LegacyBootManagerLib.inf > > > > } > > > > > > If you still think that is a CSM issue then i will be go for another > system > > as i am doing my development on physical system. > > > > > > *Thank you* > > Andrew understood your problem just fine, and gave the correct answer. > > (1) As I explained to you in one of my previous emails (or, well, I at > least alluded to it), namely in > > https://lists.01.org/pipermail/edk2-devel/2016-September/001799.html > > LegacyBootManagerLib is a *plugin* for UefiBootManagerLib. That is, a > library to be used with NULL library class resolution in whatever driver > or application that you already use UefiBootManagerLib in. (If you know > that your module will always need LegacyBootManagerLib, then you can > explicitly specify it in your INF file too.) > > (2) If you do not add LegacyBootManagerLib to your application like > explained above, then the following will happen: > > - UefiBootManagerLib's EfiBootManagerRegisterLegacyBootSupport() > function will never be called, > > - therefore UefiBootManagerLib's mBmRefreshLegacyBootOption global > variable will remain NULL, > > - therefore EfiBootManagerRefreshAllBootOption() will never call > (*mBmRefreshLegacyBootOption)(). > > (3) In comprison, if you *do* add LegacyBootManagerLib to your > application, then the following will happen: > > - LegacyBootManagerLib's constructor function, namely > LegacyBootManagerLibConstructor(), will call > EfiBootManagerRegisterLegacyBootSupport(), with the following two > function pointers: > - LegacyBmRefreshAllBootOption > - LegacyBmBoot > > - In turn, UefiBootManagerLib's mBmRefreshLegacyBootOption will be set > to LegacyBmRefreshAllBootOption > > - In turn, EfiBootManagerRefreshAllBootOption() will call > LegacyBmRefreshAllBootOption(), through the mBmRefreshLegacyBootOption > function pointer. > > This is exactly what's happening in your case; it's just that > LegacyBmRefreshAllBootOption() -- in file > "IntelFrameworkModulePkg/Library/LegacyBootManagerLib/LegacyBm.c" -- > does not return. > > (4) Why not? You can find out simply by adding DEBUG statements to the > function, and see how far it proceeds. But, as Andrew already said, the > only real suspect in that function is > > Status = LegacyBios->CheckPciRom ( > LegacyBios, > HandleBuffer[Index], > NULL, > NULL, > &Flags > ); > > which calls into your CSM. So, if that's the function call that doesn't > return -- and it likely is --, then the CSM you use has the bug. > > (5) For the future: please don't give up tracking down bugs so easily. > This time you stopped as early as > > > mBmRefreshLegacyBootOption (); //this method does not return > > - Well, did you try to see what mBmRefreshLegacyBootOption was? Is there > a function declared with this name, somewhere in the tree? Well, no. > > - Is mBmRefreshLegacyBootOption a function pointer? Yes. > > - Okay, where is the function pointer set then? In > EfiBootManagerRegisterLegacyBootSupport(). > > - So what calls EfiBootManagerRegisterLegacyBootSupport()? The > LegacyBootManagerLibConstructor() function, in file > "IntelFrameworkModulePkg/Library/LegacyBootManagerLib/LegacyBm.c". > > - What arguments does LegacyBootManagerLibConstructor() pass? In > particular, it passes the address of the function > LegacyBmRefreshAllBootOption(). > > - And now you know what the function call > > > mBmRefreshLegacyBootOption (); //this method does not return > > *actually* does, you can add DEBUG statements to it, and track it to the > LegacyBios->CheckPciRom() call that invokes your CSM. > > Laszlo > > > > > > On Thu, Oct 6, 2016 at 2:37 AM, Andrew Fish wrote: > > > >> > >>> On Oct 5, 2016, at 2:23 PM, Saqib Khan > wrote: > >>> > >>> > >>> > >>> Hi all,i need urgent help regarding this issue. > >>> > >> > >> > >> Saqib, > >> > >> You likely have a bug in your CSM. So that is your > >> gEfiLegacyBiosProtocolGuid implementation and all the 16-bit legacy BIOS > >> code. > >> > >> So you should contact the people you got your CSM from. > >> > >> Thanks, > >> > >> Andrew Fish > >> > >>>> On 05-Oct-2016, at 9:05 PM, Saqib Khan > >> wrote: > >>>> > >>>> > >>>> I have found that it just dont return from > mBmRefreshLegacyBootOption > >> (); . > >>>> > >>>> have a look at code. let me know the possible cause of it ... > >>>> I need urgent help > >>>> > >>>> EfiBootManagerRefreshAllBootOption ( > >>>> VOID > >>>> ) > >>>> { > >>>> EFI_STATUS Status; > >>>> EFI_BOOT_MANAGER_LOAD_OPTION *NvBootOptions; > >>>> UINTN NvBootOptionCount; > >>>> EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; > >>>> UINTN BootOptionCount; > >>>> UINTN Index; > >>>> Print(L"indside refresh\n"); > >>>> // > >>>> // Optionally refresh the legacy boot option > >>>> // > >>>> if (mBmRefreshLegacyBootOption != NULL) { > >>>> Print(L"Before legacy refresh \n"); > >>>> mBmRefreshLegacyBootOption (); //this method does not return > >>>> Print(L"legacy refresh complete\n"); > >>>> } > >>>> > >>>>> On Wed, Oct 5, 2016 at 5:51 PM, Saqib Khan > > >> wrote: > >>>>> Hi, > >>>>> > >>>>> when i import both lib in my project my EFI hangs at > >> EfiRefreshAllBootOptions, i removed LegacyBootManager and it worked > fine .i > >> need both lib as i need to boot legacy from EFI, how this issue can be > >> resolved? > >>>>> > >>>>> > >>>>> here is piece of inf file > >>>>> > >>>>> [Packages] > >>>>> MdePkg/MdePkg.dec > >>>>> MdeModulePkg/MdeModulePkg.dec > >>>>> IntelFrameworkPkg/ > >>>>> IntelFrameworkPkg.dec > >>>>> IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec > >>>>> ShellPkg/ShellPkg.dec > >>>>> > >>>>> [LibraryClasses] > >>>>> HiiLib > >>>>> DebugLib > >>>>> UefiLib > >>>>> MemoryAllocationLib > >>>>> UefiBootServicesTableLib > >>>>> UefiApplicationEntryPoint > >>>>> UefiBootManagerLib > >>>>> LegacyBootManagerLib > >>>>> > >>>>> > >>>>> -- > >>>>> Regards > >>>>> Saqib Ahmed Khanzada > >>>> > >>>> > >>>> > >>>> -- > >>>> Regards > >>>> Saqib Ahmed Khanzada > >>> _______________________________________________ > >>> edk2-devel mailing list > >>> edk2-devel@lists.01.org > >>> https://lists.01.org/mailman/listinfo/edk2-devel > >> > >> > > > > > > -- Regards Saqib Ahmed Khanzada