* Re: [PATCH 2/2] LegacyBbs: add boot entries for virtio-blk devices [not found] ` <1359147866-15605-3-git-send-email-lersek@redhat.com> @ 2019-06-18 9:13 ` David Woodhouse 2019-06-19 12:44 ` [PATCH 1/2] LegacyBios: set NumberBbsEntries to the size of BbsTable David Woodhouse 2019-06-19 12:44 ` [PATCH 2/2] LegacyBbs: Add boot entries for VirtIO and NVME devices David Woodhouse 0 siblings, 2 replies; 14+ messages in thread From: David Woodhouse @ 2019-06-18 9:13 UTC (permalink / raw) To: Laszlo Ersek, devel@edk2.groups.io, jljusten, afish, pbonzini [-- Attachment #1: Type: text/plain, Size: 6327 bytes --] On Fri, 2013-01-25 at 22:04 +0100, Laszlo Ersek wrote: > Contributed-under: TianoCore Contribution Agreement 1.0 > > Signed-off-by: Laszlo Ersek <lersek@redhat.com> Hm. This no longer works as-is because... > --- > .../Csm/LegacyBiosDxe/LegacyBbs.c | 134 +++++++++++++++++++- > 1 files changed, 133 insertions(+), 1 deletions(-) > > diff --git a/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyBbs.c b/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyBbs.c > index 6ee43ad..964d7d2 100644 > --- a/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyBbs.c > +++ b/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyBbs.c > @@ -259,8 +259,140 @@ LegacyBiosBuildBbs ( > } > } > > - return EFI_SUCCESS; > + // > + // add virtio-blk devices > + // > + { > + EFI_STATUS Status; > + UINTN NumPciIoHandles; > + EFI_HANDLE *PciIoHandles; > + > + BbsIndex = HddIndex * 2 + 1; > + > + // > + // scan all handles supporting the PCI IO protocol > + // > + Status = gBS->LocateHandleBuffer ( > + ByProtocol, > + &gEfiPciIoProtocolGuid, > + NULL, > + &NumPciIoHandles, > + &PciIoHandles > + ); > + > + if (Status == EFI_SUCCESS) { > + UINTN CurPciIo; > + > + for (CurPciIo = 0; CurPciIo < NumPciIoHandles; ++CurPciIo) { > + EFI_OPEN_PROTOCOL_INFORMATION_ENTRY *References; > + UINTN NumReferences; > + UINTN CurRef; > + > + // > + // on each handle supporting the PCI IO protocol, see which drivers > + // (agents) have a PCI IO protocol interface actually opened > + // > + Status = gBS->OpenProtocolInformation ( > + PciIoHandles[CurPciIo], > + &gEfiPciIoProtocolGuid, > + &References, > + &NumReferences > + ); > + if (EFI_ERROR (Status)) { > + continue; > + } > + > + for (CurRef = 0; CurRef < NumReferences; ++CurRef) { > + if (References[CurRef].Attributes & EFI_OPEN_PROTOCOL_BY_DRIVER) { > + EFI_COMPONENT_NAME2_PROTOCOL *ComponentName; > + CHAR16 *DriverName; > + > + // > + // OpenProtocol() enforced non-NULL AgentHandle for this case > + // > + ASSERT (References[CurRef].AgentHandle != NULL); > + > + // > + // Check if the agent owning the open protocol interface can > + // provide its name, and if so, whether it's VirtioBlkDxe. For this > + // check we don't want a persistent reference to the agent's > + // EFI_COMPONENT_NAME2_PROTOCOL instance, therefore we use > + // HandleProtocol() instead of OpenProtocol(). > + // > + Status = gBS->HandleProtocol ( > + References[CurRef].AgentHandle, > + &gEfiComponentName2ProtocolGuid, > + (VOID **) &ComponentName > + ); > + if (EFI_ERROR (Status)) { > + continue; > + } > + > + Status = ComponentName->GetDriverName ( > + ComponentName, > + "en", > + &DriverName > + ); > > + if (Status == EFI_SUCCESS && > + StrCmp (DriverName, L"Virtio Block Driver") == 0) { > + break; ... this would need to match on 'Virtio PCI Driver' instead. Obviously that's a trivial fix but it raises the question of whether this is the right thing to be matching on at all. It also doesn't catch NVMe drives. Should we just be iterating over all block devices or something like that instead? > + } > + } > + } > + > + if (CurRef < NumReferences) { > + EFI_PCI_IO_PROTOCOL *PciIo; > + UINTN Segment; > + UINTN Bus; > + UINTN Device; > + UINTN Function; > + > + // > + // reference by VirtioBlkDxe found, produce boot entry for device > + // > + Status = gBS->HandleProtocol ( > + PciIoHandles[CurPciIo], > + &gEfiPciIoProtocolGuid, > + (VOID **) &PciIo > + ); > + ASSERT (Status == EFI_SUCCESS); > + > + Status = PciIo->GetLocation ( > + PciIo, > + &Segment, > + &Bus, > + &Device, > + &Function > + ); > + ASSERT (Status == EFI_SUCCESS); > + > + if (Segment == 0) { > + BbsTable[BbsIndex].Bus = (UINT32) Bus; > + BbsTable[BbsIndex].Device = (UINT32) Device; > + BbsTable[BbsIndex].Function = (UINT32) Function; > + BbsTable[BbsIndex].Class = 1; > + BbsTable[BbsIndex].SubClass = 0x80; > + BbsTable[BbsIndex].StatusFlags.OldPosition = 0; > + BbsTable[BbsIndex].StatusFlags.Reserved1 = 0; > + BbsTable[BbsIndex].StatusFlags.Enabled = 0; > + BbsTable[BbsIndex].StatusFlags.Failed = 0; > + BbsTable[BbsIndex].StatusFlags.MediaPresent = 0; > + BbsTable[BbsIndex].StatusFlags.Reserved2 = 0; > + BbsTable[BbsIndex].DeviceType = BBS_HARDDISK; > + BbsTable[BbsIndex].BootPriority = BBS_UNPRIORITIZED_ENTRY; > + ++BbsIndex; > + } > + } > + > + FreePool (References); > + } > + > + FreePool (PciIoHandles); > + } > + } > + > + return EFI_SUCCESS; > } > > [-- Attachment #2: smime.p7s --] [-- Type: application/x-pkcs7-signature, Size: 5174 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 1/2] LegacyBios: set NumberBbsEntries to the size of BbsTable 2019-06-18 9:13 ` [PATCH 2/2] LegacyBbs: add boot entries for virtio-blk devices David Woodhouse @ 2019-06-19 12:44 ` David Woodhouse 2019-06-20 16:12 ` [edk2-devel] " Laszlo Ersek 2019-06-19 12:44 ` [PATCH 2/2] LegacyBbs: Add boot entries for VirtIO and NVME devices David Woodhouse 1 sibling, 1 reply; 14+ messages in thread From: David Woodhouse @ 2019-06-19 12:44 UTC (permalink / raw) To: Laszlo Ersek, devel@edk2.groups.io, jljusten, afish, Paolo Bonzini [-- Attachment #1: Type: text/plain, Size: 830 bytes --] Signed-off-by: David Woodhouse <dwmw2@infradead.org> --- OvmfPkg/Csm/LegacyBiosDxe/LegacyBios.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OvmfPkg/Csm/LegacyBiosDxe/LegacyBios.c b/OvmfPkg/Csm/LegacyBiosDxe/LegacyBios.c index 05e3ffd2bb..69abd06c40 100644 --- a/OvmfPkg/Csm/LegacyBiosDxe/LegacyBios.c +++ b/OvmfPkg/Csm/LegacyBiosDxe/LegacyBios.c @@ -568,7 +568,7 @@ ShadowAndStartLegacy16 ( // // Skip Floppy and possible onboard IDE drives // - EfiToLegacy16BootTable->NumberBbsEntries = 1 + 2 * MAX_IDE_CONTROLLER; + EfiToLegacy16BootTable->NumberBbsEntries = sizeof(Private->IntThunk->BbsTable) / sizeof(BBS_TABLE); for (Index = 0; Index < (sizeof (Private->IntThunk->BbsTable) / sizeof (BBS_TABLE)); Index++) { BbsTable[Index].BootPriority = BBS_IGNORE_ENTRY; [-- Attachment #2: smime.p7s --] [-- Type: application/x-pkcs7-signature, Size: 5174 bytes --] ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [edk2-devel] [PATCH 1/2] LegacyBios: set NumberBbsEntries to the size of BbsTable 2019-06-19 12:44 ` [PATCH 1/2] LegacyBios: set NumberBbsEntries to the size of BbsTable David Woodhouse @ 2019-06-20 16:12 ` Laszlo Ersek 2019-06-20 17:32 ` David Woodhouse 0 siblings, 1 reply; 14+ messages in thread From: Laszlo Ersek @ 2019-06-20 16:12 UTC (permalink / raw) To: devel, dwmw2, jljusten, afish, Paolo Bonzini On 06/19/19 14:44, David Woodhouse wrote: > Signed-off-by: David Woodhouse <dwmw2@infradead.org> > --- > OvmfPkg/Csm/LegacyBiosDxe/LegacyBios.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/OvmfPkg/Csm/LegacyBiosDxe/LegacyBios.c b/OvmfPkg/Csm/LegacyBiosDxe/LegacyBios.c > index 05e3ffd2bb..69abd06c40 100644 > --- a/OvmfPkg/Csm/LegacyBiosDxe/LegacyBios.c > +++ b/OvmfPkg/Csm/LegacyBiosDxe/LegacyBios.c > @@ -568,7 +568,7 @@ ShadowAndStartLegacy16 ( > // > // Skip Floppy and possible onboard IDE drives > // > - EfiToLegacy16BootTable->NumberBbsEntries = 1 + 2 * MAX_IDE_CONTROLLER; > + EfiToLegacy16BootTable->NumberBbsEntries = sizeof(Private->IntThunk->BbsTable) / sizeof(BBS_TABLE); > > for (Index = 0; Index < (sizeof (Private->IntThunk->BbsTable) / sizeof (BBS_TABLE)); Index++) { > BbsTable[Index].BootPriority = BBS_IGNORE_ENTRY; > > > > If it's possible, please write a non-empty commit message body, for each patch in this series. Just one sentence on this patch would be nice. I think your note on patch#2 is valuable too and should be captured in the commit message body. Please consider formulating it with a bit more neutral tone :) With those updates, for these pair of patches: Acked-by: Laszlo Ersek <lersek@redhat.com> If you could submit your "csm" branch as a 3-part series (consisting of these two patches, plus "OvmfPkg: Don't build in QemuVideoDxe when we have CSM"; with my A-b's / R-b added), that would be great, I could apply & push it in one go. If you prefer an actual pullreq (not github pull req), we can "pioneer" that (for edk2 anyway) too. It will still require a posting to the list, and then I'll have to compare the commits in the topic branch (subject to the pull request) against the patches on the list. Thanks! Laszlo ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [edk2-devel] [PATCH 1/2] LegacyBios: set NumberBbsEntries to the size of BbsTable 2019-06-20 16:12 ` [edk2-devel] " Laszlo Ersek @ 2019-06-20 17:32 ` David Woodhouse 2019-06-20 20:35 ` Laszlo Ersek 0 siblings, 1 reply; 14+ messages in thread From: David Woodhouse @ 2019-06-20 17:32 UTC (permalink / raw) To: devel, lersek, jljusten, afish, Paolo Bonzini [-- Attachment #1: Type: text/plain, Size: 950 bytes --] On Thu, 2019-06-20 at 18:12 +0200, Laszlo Ersek wrote: > If it's possible, please write a non-empty commit message body, for each > patch in this series. Just one sentence on this patch would be nice. The comnit comment isn't empty. It has one sentence "LegacyBios: set NumberBbsEntries to the size of BbsTable". A second sentence would be redundant and render the description larger than the patch itself. I can't think of anything useful I'd want to put in it. Apparently neither could you when you posted the same patch in 2013 after splitting it out from a larger patch of mine. :) https://www.mail-archive.com/edk2-devel@lists.sourceforge.net/msg01618.html > I think your note on patch#2 is valuable too and should be captured in > the commit message body. Please consider formulating it with a bit more > neutral tone :) I would prefer to express that particular concern in 'diff -up' form when actually fixing it :) [-- Attachment #2: smime.p7s --] [-- Type: application/x-pkcs7-signature, Size: 5174 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [edk2-devel] [PATCH 1/2] LegacyBios: set NumberBbsEntries to the size of BbsTable 2019-06-20 17:32 ` David Woodhouse @ 2019-06-20 20:35 ` Laszlo Ersek 2019-06-21 10:59 ` David Woodhouse 2019-06-24 11:48 ` David Woodhouse 0 siblings, 2 replies; 14+ messages in thread From: Laszlo Ersek @ 2019-06-20 20:35 UTC (permalink / raw) To: David Woodhouse, devel, jljusten, afish, Paolo Bonzini On 06/20/19 19:32, David Woodhouse wrote: > On Thu, 2019-06-20 at 18:12 +0200, Laszlo Ersek wrote: >> If it's possible, please write a non-empty commit message body, for each >> patch in this series. Just one sentence on this patch would be nice. > > > The comnit comment isn't empty. It has one sentence "LegacyBios: set > NumberBbsEntries to the size of BbsTable". I was careful to write, "non-empty commit message *body*". Yes, you have a subject line, and if you look at the commit with "git show", or another tool that shows the subject (= commit "title") near the body, things look fine. Things read pretty weird in Thunderbird however, for example. > A second sentence would be redundant and render the description larger > than the patch itself. I can't think of anything useful I'd want to put > in it. Apparently neither could you when you posted the same patch in > 2013 after splitting it out from a larger patch of mine. :) > > https://www.mail-archive.com/edk2-devel@lists.sourceforge.net/msg01618.html My past mistake doesn't excuse the current commit message ;) Anyway, I intentionally didn't ask for just repeating the commit msg title in the commit msg body. You could mention why the pre-patch expression (1 + 2 * MAX_IDE_CONTROLLER) is wrong, or wasteful. It's not obvious at all from just the patch itself (without looking at the larger context in the source file). You can save time for reviewers by giving hints in the commit message. And if you *can* save time for reviewers, you should. :) >> I think your note on patch#2 is valuable too and should be captured in >> the commit message body. Please consider formulating it with a bit more >> neutral tone :) > > I would prefer to express that particular concern in 'diff -up' form > when actually fixing it :) > I'm a big fan of detailed commit messages. It's OK (and welcome) to describe current shortcomings even if you intend to fix them later. The commit message could also capture in one or two sentences what the patch does (locate handles with BlockIo instances, filter out some of them based on their DevicePath instances and other criteria, then for each handle, take the PCI B/D/F from the most specific PciIo instance on the device path). Anyway, I wouldn't like to obsess about this. series Acked-by: Laszlo Ersek <lersek@redhat.com> Thanks Laszlo ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [edk2-devel] [PATCH 1/2] LegacyBios: set NumberBbsEntries to the size of BbsTable 2019-06-20 20:35 ` Laszlo Ersek @ 2019-06-21 10:59 ` David Woodhouse 2019-06-24 22:08 ` Laszlo Ersek 2019-06-24 11:48 ` David Woodhouse 1 sibling, 1 reply; 14+ messages in thread From: David Woodhouse @ 2019-06-21 10:59 UTC (permalink / raw) To: devel, lersek, jljusten, afish, Paolo Bonzini [-- Attachment #1: Type: text/plain, Size: 1774 bytes --] On Thu, 2019-06-20 at 22:35 +0200, Laszlo Ersek wrote: > > > I think your note on patch#2 is valuable too and should be captured in > > > the commit message body. Please consider formulating it with a bit more > > > neutral tone :) > > > > I would prefer to express that particular concern in 'diff -up' form > > when actually fixing it :) > > > > I'm a big fan of detailed commit messages. It's OK (and welcome) to > describe current shortcomings even if you intend to fix them later. It isn't strictly a shortcoming of that patch itself, it's more of a pre-existing shortcoming which is next on my list. But keen-eyed reviewers or testers might potentially have said "It's all very well exposing all these new drives but they're all just called Harddisk". Mentioning it in the note was partly an attempt to avoid that, but mostly an attempt to solicit discussion on how to *fix* it. Since it appears to have completely failed to achieve the latter, I'll try again :) As noted, UefiBootManagerLib already has this BmGetBootDescription() function, which is internal. Can I just rename it to EfiBootManagerGetBootDescription() and export it without having to change any specifications first? Adding a generic way for block devices to report a human-readable description in order to kill off all the device-type-specific functions in BmBootDescription.c presumably *would* involve actually coordinating with UEFI Specifications first? But we could consider that a second step. If I make the LegacyBm code just call the existing (but renamed) EfiBootManagerGetBootDescription() then all the horrid special cases and the specification work that's required to fix them are purely an implementation detail in EfiBootManagerLib? [-- Attachment #2: smime.p7s --] [-- Type: application/x-pkcs7-signature, Size: 5174 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [edk2-devel] [PATCH 1/2] LegacyBios: set NumberBbsEntries to the size of BbsTable 2019-06-21 10:59 ` David Woodhouse @ 2019-06-24 22:08 ` Laszlo Ersek 2019-06-24 22:22 ` Laszlo Ersek 2019-06-25 7:29 ` David Woodhouse 0 siblings, 2 replies; 14+ messages in thread From: Laszlo Ersek @ 2019-06-24 22:08 UTC (permalink / raw) To: David Woodhouse, devel, jljusten, afish, Paolo Bonzini; +Cc: Ray Ni On 06/21/19 12:59, David Woodhouse wrote: > On Thu, 2019-06-20 at 22:35 +0200, Laszlo Ersek wrote: >>>> I think your note on patch#2 is valuable too and should be captured in >>>> the commit message body. Please consider formulating it with a bit more >>>> neutral tone :) >>> >>> I would prefer to express that particular concern in 'diff -up' form >>> when actually fixing it :) >>> >> >> I'm a big fan of detailed commit messages. It's OK (and welcome) to >> describe current shortcomings even if you intend to fix them later. > > It isn't strictly a shortcoming of that patch itself, it's more of a > pre-existing shortcoming which is next on my list. > > But keen-eyed reviewers or testers might potentially have said "It's > all very well exposing all these new drives but they're all just called > Harddisk". Mentioning it in the note was partly an attempt to avoid > that, but mostly an attempt to solicit discussion on how to *fix* it. > > Since it appears to have completely failed to achieve the latter, I'll > try again :) > > As noted, UefiBootManagerLib already has this BmGetBootDescription() > function, which is internal. Can I just rename it to > EfiBootManagerGetBootDescription() and export it without having to > change any specifications first? I would say "yes", and we certainly have precedent for that. Please see commit 4ed2440d4415 ("MdeModulePkg/UefiBootManagerLib: Expose *GetLoadOptionBuffer() API", 2016-05-04). > Adding a generic way for block devices to report a human-readable > description in order to kill off all the device-type-specific functions > in BmBootDescription.c presumably *would* involve actually coordinating > with UEFI Specifications first? > > But we could consider that a second step. If I make the LegacyBm code > just call the existing (but renamed) EfiBootManagerGetBootDescription() > then all the horrid special cases and the specification work that's > required to fix them are purely an implementation detail in > EfiBootManagerLib? I think exposing EfiBootManagerGetBootDescription() as a public function, as-is, is a no-brainer, if platforms need it. *Changing* EfiBootManagerGetBootDescription() is hairier. UefiBootManagerLib strives for strict spec compliance (and minimalism), if I remember correctly. However, I'm not a big fan of that approach myself, and recently, "extend first, standardize second" has seemed more accepted/tolerated than before. (I'm an active proponent of this latter approach.) A new hook into PlatformBootManagerLib might help, either way. Please see TianoCore#982, and commit range cef7ecf6cdb4..1010873becc5. So, please ask Ray (CC'd) :) Thanks Laszlo ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [edk2-devel] [PATCH 1/2] LegacyBios: set NumberBbsEntries to the size of BbsTable 2019-06-24 22:08 ` Laszlo Ersek @ 2019-06-24 22:22 ` Laszlo Ersek [not found] ` <F95F0A95-4638-4B08-BDAF-53A797A6B877@infradead.org> 2019-06-25 7:29 ` David Woodhouse 1 sibling, 1 reply; 14+ messages in thread From: Laszlo Ersek @ 2019-06-24 22:22 UTC (permalink / raw) To: David Woodhouse, devel, jljusten, afish, Paolo Bonzini; +Cc: Ray Ni On 06/25/19 00:08, Laszlo Ersek wrote: > On 06/21/19 12:59, David Woodhouse wrote: >> Adding a generic way for block devices to report a human-readable >> description in order to kill off all the device-type-specific functions >> in BmBootDescription.c presumably *would* involve actually coordinating >> with UEFI Specifications first? >> >> But we could consider that a second step. If I make the LegacyBm code >> just call the existing (but renamed) EfiBootManagerGetBootDescription() >> then all the horrid special cases and the specification work that's >> required to fix them are purely an implementation detail in >> EfiBootManagerLib? > > I think exposing EfiBootManagerGetBootDescription() as a public > function, as-is, is a no-brainer, if platforms need it. > > *Changing* EfiBootManagerGetBootDescription() is hairier. > UefiBootManagerLib strives for strict spec compliance (and minimalism), > if I remember correctly. However, I'm not a big fan of that approach > myself, and recently, "extend first, standardize second" has seemed more > accepted/tolerated than before. (I'm an active proponent of this latter > approach.) > > A new hook into PlatformBootManagerLib might help, either way. Please > see TianoCore#982, and commit range cef7ecf6cdb4..1010873becc5. > > So, please ask Ray (CC'd) :) Wait, we already have EfiBootManagerRegisterBootDescriptionHandler(). Could that help? Thanks, Laszlo ^ permalink raw reply [flat|nested] 14+ messages in thread
[parent not found: <F95F0A95-4638-4B08-BDAF-53A797A6B877@infradead.org>]
* Re: [edk2-devel] [PATCH 1/2] LegacyBios: set NumberBbsEntries to the size of BbsTable [not found] ` <F95F0A95-4638-4B08-BDAF-53A797A6B877@infradead.org> @ 2019-06-25 7:06 ` Ni, Ray 2019-06-25 10:34 ` Laszlo Ersek 0 siblings, 1 reply; 14+ messages in thread From: Ni, Ray @ 2019-06-25 7:06 UTC (permalink / raw) To: David Woodhouse, Laszlo Ersek, devel@edk2.groups.io, jljusten@gmail.com, afish@apple.com, Paolo Bonzini Can you obtain the description from the NV storage? > -----Original Message----- > From: David Woodhouse <dwmw2@infradead.org> > Sent: Tuesday, June 25, 2019 2:06 PM > To: Laszlo Ersek <lersek@redhat.com>; devel@edk2.groups.io; > jljusten@gmail.com; afish@apple.com; Paolo Bonzini <pbonzini@redhat.com> > Cc: Ni, Ray <ray.ni@intel.com> > Subject: Re: [edk2-devel] [PATCH 1/2] LegacyBios: set NumberBbsEntries to > the size of BbsTable > > > > On 24 June 2019 23:22:03 BST, Laszlo Ersek <lersek@redhat.com> wrote: > >Wait, we already have EfiBootManagerRegisterBootDescriptionHandler(). > >Could that help? > > No, that allows you to register a function to *provide* a description. We > need to *obtain* a description. > > See the patch series I posted on Friday; I think I have this working sanely now. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [edk2-devel] [PATCH 1/2] LegacyBios: set NumberBbsEntries to the size of BbsTable 2019-06-25 7:06 ` Ni, Ray @ 2019-06-25 10:34 ` Laszlo Ersek 0 siblings, 0 replies; 14+ messages in thread From: Laszlo Ersek @ 2019-06-25 10:34 UTC (permalink / raw) To: Ni, Ray, David Woodhouse, devel@edk2.groups.io, jljusten@gmail.com, afish@apple.com, Paolo Bonzini On 06/25/19 09:06, Ni, Ray wrote: > Can you obtain the description from the NV storage? No, nothing carries persistent (data-like) description for these devices. IIUC we just want to reuse the description generator logic (= code) from UefiBootManagerLib, with some customization. Thanks Laszlo > >> -----Original Message----- >> From: David Woodhouse <dwmw2@infradead.org> >> Sent: Tuesday, June 25, 2019 2:06 PM >> To: Laszlo Ersek <lersek@redhat.com>; devel@edk2.groups.io; >> jljusten@gmail.com; afish@apple.com; Paolo Bonzini <pbonzini@redhat.com> >> Cc: Ni, Ray <ray.ni@intel.com> >> Subject: Re: [edk2-devel] [PATCH 1/2] LegacyBios: set NumberBbsEntries to >> the size of BbsTable >> >> >> >> On 24 June 2019 23:22:03 BST, Laszlo Ersek <lersek@redhat.com> wrote: >>> Wait, we already have EfiBootManagerRegisterBootDescriptionHandler(). >>> Could that help? >> >> No, that allows you to register a function to *provide* a description. We >> need to *obtain* a description. >> >> See the patch series I posted on Friday; I think I have this working sanely now. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [edk2-devel] [PATCH 1/2] LegacyBios: set NumberBbsEntries to the size of BbsTable 2019-06-24 22:08 ` Laszlo Ersek 2019-06-24 22:22 ` Laszlo Ersek @ 2019-06-25 7:29 ` David Woodhouse 1 sibling, 0 replies; 14+ messages in thread From: David Woodhouse @ 2019-06-25 7:29 UTC (permalink / raw) To: devel, lersek, jljusten, afish, Paolo Bonzini; +Cc: Ray Ni [-- Attachment #1: Type: text/plain, Size: 652 bytes --] On Tue, 2019-06-25 at 00:08 +0200, Laszlo Ersek wrote: > > But we could consider that a second step. If I make the LegacyBm code > > just call the existing (but renamed) EfiBootManagerGetBootDescription() > > then all the horrid special cases and the specification work that's > > required to fix them are purely an implementation detail in > > EfiBootManagerLib? > > I think exposing EfiBootManagerGetBootDescription() as a public > function, as-is, is a no-brainer, if platforms need it. > > *Changing* EfiBootManagerGetBootDescription() is hairier. It isn't exported yet, so I wouldn't be changing an existing exported function. [-- Attachment #2: smime.p7s --] [-- Type: application/x-pkcs7-signature, Size: 5174 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [edk2-devel] [PATCH 1/2] LegacyBios: set NumberBbsEntries to the size of BbsTable 2019-06-20 20:35 ` Laszlo Ersek 2019-06-21 10:59 ` David Woodhouse @ 2019-06-24 11:48 ` David Woodhouse 2019-06-24 21:49 ` Laszlo Ersek 1 sibling, 1 reply; 14+ messages in thread From: David Woodhouse @ 2019-06-24 11:48 UTC (permalink / raw) To: devel, lersek, jljusten, afish, Paolo Bonzini [-- Attachment #1: Type: text/plain, Size: 1797 bytes --] On Thu, 2019-06-20 at 22:35 +0200, Laszlo Ersek wrote: > My past mistake doesn't excuse the current commit message ;) > > Anyway, I intentionally didn't ask for just repeating the commit msg > title in the commit msg body. You could mention why the pre-patch > expression (1 + 2 * MAX_IDE_CONTROLLER) is wrong, or wasteful. It's not > obvious at all from just the patch itself (without looking at the larger > context in the source file). You can save time for reviewers by giving > hints in the commit message. And if you *can* save time for reviewers, > you should. :) With specific requests for things that weren't already in the subject line, I'm perfectly happy to add more. Better now? > > > I think your note on patch#2 is valuable too and should be captured in > > > the commit message body. Please consider formulating it with a bit more > > > neutral tone :) > > > > I would prefer to express that particular concern in 'diff -up' form > > when actually fixing it :) > > > > I'm a big fan of detailed commit messages. It's OK (and welcome) to > describe current shortcomings even if you intend to fix them later. > > The commit message could also capture in one or two sentences what the > patch does (locate handles with BlockIo instances, filter out some of > them based on their DevicePath instances and other criteria, then for > each handle, take the PCI B/D/F from the most specific PciIo instance on > the device path). Anyway, I wouldn't like to obsess about this. Done. > series > Acked-by: Laszlo Ersek <lersek@redhat.com> Out of interest, why Acked-by: for these two vs. Reviewed-by: for the first one? It's all under OvmfPkg now (which is made clearer in the series I posted on Friday than it is in the subject line here). [-- Attachment #2: smime.p7s --] [-- Type: application/x-pkcs7-signature, Size: 5174 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [edk2-devel] [PATCH 1/2] LegacyBios: set NumberBbsEntries to the size of BbsTable 2019-06-24 11:48 ` David Woodhouse @ 2019-06-24 21:49 ` Laszlo Ersek 0 siblings, 0 replies; 14+ messages in thread From: Laszlo Ersek @ 2019-06-24 21:49 UTC (permalink / raw) To: David Woodhouse, devel, jljusten, afish, Paolo Bonzini On 06/24/19 13:48, David Woodhouse wrote: > On Thu, 2019-06-20 at 22:35 +0200, Laszlo Ersek wrote: >> My past mistake doesn't excuse the current commit message ;) >> >> Anyway, I intentionally didn't ask for just repeating the commit msg >> title in the commit msg body. You could mention why the pre-patch >> expression (1 + 2 * MAX_IDE_CONTROLLER) is wrong, or wasteful. It's not >> obvious at all from just the patch itself (without looking at the larger >> context in the source file). You can save time for reviewers by giving >> hints in the commit message. And if you *can* save time for reviewers, >> you should. :) > > With specific requests for things that weren't already in the subject > line, I'm perfectly happy to add more. > > Better now? > >>>> I think your note on patch#2 is valuable too and should be captured in >>>> the commit message body. Please consider formulating it with a bit more >>>> neutral tone :) >>> >>> I would prefer to express that particular concern in 'diff -up' form >>> when actually fixing it :) >>> >> >> I'm a big fan of detailed commit messages. It's OK (and welcome) to >> describe current shortcomings even if you intend to fix them later. >> >> The commit message could also capture in one or two sentences what the >> patch does (locate handles with BlockIo instances, filter out some of >> them based on their DevicePath instances and other criteria, then for >> each handle, take the PCI B/D/F from the most specific PciIo instance on >> the device path). Anyway, I wouldn't like to obsess about this. > > Done. Thanks! >> series >> Acked-by: Laszlo Ersek <lersek@redhat.com> > > Out of interest, why Acked-by: for these two vs. Reviewed-by: for the > first one? It's all under OvmfPkg now (which is made clearer in the > series I posted on Friday than it is in the subject line here). > For me anyway, R-b means a (reasonably) deep understanding & agreement. Acked-by means "looks okay, or at least I'm not worried about regressions in this area -- I'll let you do whatever you need to do". :) Thanks Laszlo ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 2/2] LegacyBbs: Add boot entries for VirtIO and NVME devices 2019-06-18 9:13 ` [PATCH 2/2] LegacyBbs: add boot entries for virtio-blk devices David Woodhouse 2019-06-19 12:44 ` [PATCH 1/2] LegacyBios: set NumberBbsEntries to the size of BbsTable David Woodhouse @ 2019-06-19 12:44 ` David Woodhouse 1 sibling, 0 replies; 14+ messages in thread From: David Woodhouse @ 2019-06-19 12:44 UTC (permalink / raw) To: Laszlo Ersek, devel@edk2.groups.io, jljusten, afish, Paolo Bonzini [-- Attachment #1: Type: text/plain, Size: 6511 bytes --] Signed-off-by: David Woodhouse <dwmw2@infradead.org> --- They still end up all just called 'Harddisk', but I absolutely do not want to reproduce all the special cases in BmBootDescription.c. I'm not even sure I want to export that and use it; it's horrid. Why don't the disk objects themselves have a protocol which will generate a user- visible label for them instead of collecting special-cases like that? But that's just cosmetic. I can now do a CSM boot from VirtIO and NVMe drives. At least, I can after https://mail.coreboot.org/hyperkitty/list/seabios@seabios.org/thread/NR6Z4VTZA6VKF46RAFB3Q5TUE6ZLMLXT/ OvmfPkg/Csm/LegacyBiosDxe/LegacyBbs.c | 162 +++++++++++++++++++++++++- 1 file changed, 157 insertions(+), 5 deletions(-) diff --git a/OvmfPkg/Csm/LegacyBiosDxe/LegacyBbs.c b/OvmfPkg/Csm/LegacyBiosDxe/LegacyBbs.c index 6b1dd344f3..cc84712d25 100644 --- a/OvmfPkg/Csm/LegacyBiosDxe/LegacyBbs.c +++ b/OvmfPkg/Csm/LegacyBiosDxe/LegacyBbs.c @@ -140,10 +140,14 @@ LegacyBiosBuildBbs ( IN BBS_TABLE *BbsTable ) { - UINTN BbsIndex; - HDD_INFO *HddInfo; - UINTN HddIndex; - UINTN Index; + UINTN BbsIndex; + HDD_INFO *HddInfo; + UINTN HddIndex; + UINTN Index; + EFI_HANDLE *BlockIoHandles; + UINTN NumberBlockIoHandles; + UINTN BlockIndex; + EFI_STATUS Status; // // First entry is floppy. @@ -252,8 +256,156 @@ LegacyBiosBuildBbs ( } } - return EFI_SUCCESS; + // + // Add non-IDE block devices + // + BbsIndex = HddIndex * 2 + 1; + + Status = gBS->LocateHandleBuffer ( + ByProtocol, + &gEfiBlockIoProtocolGuid, + NULL, + &NumberBlockIoHandles, + &BlockIoHandles + ); + if (!EFI_ERROR(Status)) { + UINTN Removable; + EFI_BLOCK_IO_PROTOCOL *BlkIo; + EFI_PCI_IO_PROTOCOL *PciIo; + EFI_DEVICE_PATH_PROTOCOL *DevicePath; + EFI_DEVICE_PATH_PROTOCOL *DevicePathNode; + EFI_HANDLE PciHandle; + UINTN SegNum; + UINTN BusNum; + UINTN DevNum; + UINTN FuncNum; + + for (Removable = 0; Removable < 2; Removable++) { + for (BlockIndex = 0; BlockIndex < NumberBlockIoHandles; BlockIndex++) { + Status = gBS->HandleProtocol ( + BlockIoHandles[BlockIndex], + &gEfiBlockIoProtocolGuid, + (VOID **) &BlkIo + ); + if (EFI_ERROR (Status)) { + continue; + } + // + // Skip the logical partitions + // + if (BlkIo->Media->LogicalPartition) { + DEBUG((EFI_D_INFO, "Partition\n")); + continue; + } + + // + // Skip the fixed block io then the removable block io + // + if (BlkIo->Media->RemovableMedia == ((Removable == 0) ? FALSE : TRUE)) { + continue; + } + + // + // Get Device Path + // + Status = gBS->HandleProtocol ( + BlockIoHandles[BlockIndex], + &gEfiDevicePathProtocolGuid, + (VOID **) &DevicePath + ); + if (EFI_ERROR (Status)) { + continue; + } + + // + // Skip ATA devices as they have already been handled + // + DevicePathNode = DevicePath; + while (!IsDevicePathEnd (DevicePathNode)) { + if (DevicePathType (DevicePathNode) == MESSAGING_DEVICE_PATH && + DevicePathSubType (DevicePathNode) == MSG_ATAPI_DP) { + break; + } + DevicePathNode = NextDevicePathNode (DevicePathNode); + } + if (!IsDevicePathEnd (DevicePathNode)) { + continue; + } + + // + // Locate which PCI device + // + Status = gBS->LocateDevicePath ( + &gEfiPciIoProtocolGuid, + &DevicePath, + &PciHandle + ); + if (EFI_ERROR (Status)) { + continue; + } + + Status = gBS->HandleProtocol ( + PciHandle, + &gEfiPciIoProtocolGuid, + (VOID **) &PciIo + ); + if (EFI_ERROR (Status)) { + continue; + } + + Status = PciIo->GetLocation ( + PciIo, + &SegNum, + &BusNum, + &DevNum, + &FuncNum + ); + if (EFI_ERROR (Status)) { + continue; + } + + if (SegNum != 0) { + DEBUG((EFI_D_INFO, "CSM cannot use PCI devices in segment %d\n", SegNum)); + continue; + } + + DEBUG_CODE ( + CHAR16 *PathText; + + PathText = ConvertDevicePathToText(DevicePath, FALSE, FALSE); + + DEBUG((EFI_D_INFO, "Add Legacy Bbs entry for PCI %d/%d/%d: %s\n", + BusNum, DevNum, FuncNum, PathText)); + FreePool(PathText); + ); + + BbsTable[BbsIndex].Bus = BusNum; + BbsTable[BbsIndex].Device = DevNum; + BbsTable[BbsIndex].Function = FuncNum; + BbsTable[BbsIndex].Class = 1; + BbsTable[BbsIndex].SubClass = 0x80; + BbsTable[BbsIndex].StatusFlags.OldPosition = 0; + BbsTable[BbsIndex].StatusFlags.Reserved1 = 0; + BbsTable[BbsIndex].StatusFlags.Enabled = 0; + BbsTable[BbsIndex].StatusFlags.Failed = 0; + BbsTable[BbsIndex].StatusFlags.MediaPresent = 0; + BbsTable[BbsIndex].StatusFlags.Reserved2 = 0; + BbsTable[BbsIndex].DeviceType = BBS_HARDDISK; + BbsTable[BbsIndex].BootPriority = BBS_UNPRIORITIZED_ENTRY; + BbsIndex++; + + if (BbsIndex == sizeof(Private->IntThunk->BbsTable) / sizeof(BBS_TABLE)) { + Removable = 2; + break; + } + } + } + + FreePool (BlockIoHandles); + } + + return EFI_SUCCESS; } [-- Attachment #2: smime.p7s --] [-- Type: application/x-pkcs7-signature, Size: 5174 bytes --] ^ permalink raw reply related [flat|nested] 14+ messages in thread
end of thread, other threads:[~2019-06-25 10:34 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <1359122038.24865.19.camel@shinybook.infradead.org> [not found] ` <1359147866-15605-3-git-send-email-lersek@redhat.com> 2019-06-18 9:13 ` [PATCH 2/2] LegacyBbs: add boot entries for virtio-blk devices David Woodhouse 2019-06-19 12:44 ` [PATCH 1/2] LegacyBios: set NumberBbsEntries to the size of BbsTable David Woodhouse 2019-06-20 16:12 ` [edk2-devel] " Laszlo Ersek 2019-06-20 17:32 ` David Woodhouse 2019-06-20 20:35 ` Laszlo Ersek 2019-06-21 10:59 ` David Woodhouse 2019-06-24 22:08 ` Laszlo Ersek 2019-06-24 22:22 ` Laszlo Ersek [not found] ` <F95F0A95-4638-4B08-BDAF-53A797A6B877@infradead.org> 2019-06-25 7:06 ` Ni, Ray 2019-06-25 10:34 ` Laszlo Ersek 2019-06-25 7:29 ` David Woodhouse 2019-06-24 11:48 ` David Woodhouse 2019-06-24 21:49 ` Laszlo Ersek 2019-06-19 12:44 ` [PATCH 2/2] LegacyBbs: Add boot entries for VirtIO and NVME devices David Woodhouse
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox