> On Jun 1, 2017, at 10:37 AM, Amit kumar <[email protected]> wrote: > > Hello Andrew, > > Thanks for quick reply and acknowledging my query. >
Please file a bugzilla against the code. Thanks, Andrew Fish > Amit > From: [email protected] <mailto:[email protected]> <[email protected] > <mailto:[email protected]>> on behalf of Andrew Fish <[email protected] > <mailto:[email protected]>> > Sent: Thursday, June 1, 2017 10:59:03 PM > To: Amit kumar > Cc: [email protected] <mailto:[email protected]> > Subject: Re: [edk2] Problem in EFI_BOOT_SERVICES.OpenProtocol() > > > > On Jun 1, 2017, at 10:13 AM, Amit kumar <[email protected] > > <mailto:[email protected]>> wrote: > > > > Hello Andrew, > > > > As per UEFI Spec EFI_ALREADY_STARTED is treated as error code, thus PciIo > > (The Interface 3rd parameter ) should remain NULL. > > But after OpenProtocol call even though Status = EFI_ALREADY_STARTED > > PciIo (The Interface 3rd parameter ) is getting modified and it not NULL > > anymore. > > Is this not a problem ? > > > > Amit, > > I agree it looks like the code will fill in the Interface and return > EFI_ALREADY_STARTED. And that does seem to conflict with the section of the > spec you quote. Good catch. > > https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Core/Dxe/Hand/Handle.c#L1097 > > <https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Core/Dxe/Hand/Handle.c#L1097> > // > // This is the protocol interface entry for this protocol > // > if (Attributes != EFI_OPEN_PROTOCOL_TEST_PROTOCOL) { > *Interface = Prot->Interface; > } > Status = EFI_SUCCESS; > > ByDriver = FALSE; > Exclusive = FALSE; > for ( Link = Prot->OpenList.ForwardLink; Link != &Prot->OpenList; Link = > Link->ForwardLink) { > OpenData = CR (Link, OPEN_PROTOCOL_DATA, Link, > OPEN_PROTOCOL_DATA_SIGNATURE); > ExactMatch = (BOOLEAN)((OpenData->AgentHandle == ImageHandle) && > (OpenData->Attributes == Attributes) && > (OpenData->ControllerHandle == ControllerHandle)); > if ((OpenData->Attributes & EFI_OPEN_PROTOCOL_BY_DRIVER) != 0) { > ByDriver = TRUE; > if (ExactMatch) { > Status = EFI_ALREADY_STARTED; > goto Done; > } > } > if ((OpenData->Attributes & EFI_OPEN_PROTOCOL_EXCLUSIVE) != 0) { > Exclusive = TRUE; > } else if (ExactMatch) { > OpenData->OpenCount++; > Status = EFI_SUCCESS; > goto Done; > } > } > > Thanks, > > Andrew Fish > > > Status = gBS->OpenProtocol ( > > Controller, > > &gEfiPciIoProtocolGuid, > > (VOID **) &PciIo, > > This->DriverBindingHandle, > > Controller, > > EFI_OPEN_PROTOCOL_BY_DRIVER > > ); > > > > ________________________________ > > From: [email protected] <mailto:[email protected]> <[email protected] > > <mailto:[email protected]>> on behalf of Andrew Fish <[email protected] > > <mailto:[email protected]>> > > Sent: Thursday, June 1, 2017 10:28:16 PM > > To: Amit kumar > > Cc: [email protected] <mailto:[email protected]> > > Subject: Re: [edk2] Problem in EFI_BOOT_SERVICES.OpenProtocol() > > > > > >> On Jun 1, 2017, at 9:46 AM, Amit kumar <[email protected] > >> <mailto:[email protected]>> wrote: > >> > >> Hi, > >> I am trying to open PciIoProtocol and facing some issue. > >> > >> below is the code > >> > >> EFI_PCI_IO_PROTOCOL *PciIo=NULL; > >> EFI_STATUS Status; > >> > >> Status = gBS->OpenProtocol ( > >> Controller, > >> &gEfiPciIoProtocolGuid, > >> (VOID **) &PciIo, > >> This->DriverBindingHandle, > >> Controller, > >> EFI_OPEN_PROTOCOL_BY_DRIVER > >> ); > >> > >> it returns Status = EFI_ALREADY_STARTED, but PciIo is not NULL. > >> Is it not supposed to return PciIo as NULL ? > >> As per UEFI 2.6 Spec Section 6.3 page 182. > >> > > > > Amit, > > > > Look at the Status Codes Returned section at the end of that section. > > > > Attributes is BY_DRIVER and there is an item on the open list with an > > attribute of BY_DRIVER whose agent handle is the same as AgentHandle. > > > > Attributes is BY_DRIVER|EXCLUSIVE and there is an item on the open list > > with an attribute of BY_DRIVER|EXCLUSIVE whose agent handle is the same as > > AgentHandle. > > > > Thanks, > > > > Andrew Fish > > > >> There are a number of reasons that this function call can return an error. > >> If an error is returned, then > >> AgentHandle, ControllerHandle, and Attributes are not added to the list of > >> agents > >> consuming the protocol interface specified by Handle and Protocol, and > >> Interface is > >> returned unmodified. > >> > >> Thanks And Regards > >> Amit > >> _______________________________________________ > >> edk2-devel mailing list > >> [email protected] <mailto:[email protected]> > >> https://lists.01.org/mailman/listinfo/edk2-devel > >> <https://lists.01.org/mailman/listinfo/edk2-devel> > > > > _______________________________________________ > > edk2-devel mailing list > > [email protected] <mailto:[email protected]> > > https://lists.01.org/mailman/listinfo/edk2-devel > > <https://lists.01.org/mailman/listinfo/edk2-devel> _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

