From: "Chang, Abner" <abner.chang@amd.com>
To: Igor Kulchytskyy <igork@ami.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: Nickle Wang <nicklew@nvidia.com>
Subject: Re: [PATCH] RedfishPkg: Remove the global variables related to Discover Token functionality
Date: Fri, 21 Apr 2023 00:12:54 +0000 [thread overview]
Message-ID: <MN2PR12MB39660EA4C5FE6E432BAD13D5EA609@MN2PR12MB3966.namprd12.prod.outlook.com> (raw)
In-Reply-To: <BLAPR10MB518552292D11EF068C199392A8639@BLAPR10MB5185.namprd10.prod.outlook.com>
[AMD Official Use Only - General]
Thanks Igor,
You probably can ask community if any one has the similar issue on patch email format.
I already gave R-B to this change, please create a PR against to edk2 and let me know the PR#. I will push it once it passes CI.
Thanks
Abner
> -----Original Message-----
> From: Igor Kulchytskyy <igork@ami.com>
> Sent: Friday, April 21, 2023 2:46 AM
> To: Chang, Abner <Abner.Chang@amd.com>; devel@edk2.groups.io
> Cc: Nickle Wang <nicklew@nvidia.com>
> Subject: RE: [EXTERNAL] RE: [PATCH] RedfishPkg: Remove the global
> variables related to Discover Token functionality
>
> Caution: This message originated from an External Source. Use proper
> caution when opening attachments, clicking links, or responding.
>
>
> Hi Abner,
> I did what you asked to do - Patchcheck.py and UncrustiyCheck (got binary).
> Going to send PATCH V2.
> But I'm not sure what happened with white space. Going to check with MIS.
> Thank you,
> Igor
>
> -----Original Message-----
> From: Chang, Abner <Abner.Chang@amd.com>
> Sent: Wednesday, April 19, 2023 9:00 PM
> To: Igor Kulchytskyy <igork@ami.com>; devel@edk2.groups.io
> Cc: Nickle Wang <nicklew@nvidia.com>
> Subject: [EXTERNAL] RE: [PATCH] RedfishPkg: Remove the global variables
> related to Discover Token functionality
>
>
> **CAUTION: The e-mail below is from an external source. Please exercise
> caution before opening attachments, clicking links, or following guidance.**
>
> [AMD Official Use Only - General]
>
> Hi Igor,
> I have no problem with this change, however some upstream practices here,
>
> - Please shorten the subject to <= 76
> - Each line in the commit message should be <=76 You can run Patchcheck.py
> (here: BaseTools\Scripts) before you sending out the patches.
>
> Please run UncrustiyCheck for each source code you modified, .
> pytool/Plugin/UncrustifyCheck/ and used for beautifying the source code.
> You can get the binary from here:
> https://sourceforge.net/projects/uncrustify/files.
>
> Please resend the patch with above issue fixed.
>
> BTW, the patch you sent to group.io still has a problem. The white space of
> each blank line in the patch file were gone (you can take a look at your
> message sent to group.io). This leads to a failure of patch apply. I recover
> those white space in the blank lines and the patch can be applied. However, I
> can do this just for a short patch. 😊 Please figure it out at your end. That's
> fine if this problem still exist on your resent patch in case you need some
> time to figure out the email problem.
>
> Thanks
> Abner
>
> > -----Original Message-----
> > From: Igor Kulchytskyy <igork@ami.com>
> > Sent: Wednesday, April 19, 2023 11:04 PM
> > To: devel@edk2.groups.io
> > Cc: Chang, Abner <Abner.Chang@amd.com>; Nickle Wang
> > <nicklew@nvidia.com>
> > Subject: [PATCH] RedfishPkg: Remove the global variables related to
> > Discover Token functionality
> >
> > Caution: This message originated from an External Source. Use proper
> > caution when opening attachments, clicking links, or responding.
> >
> >
> > gRedfishDiscoveredToken may be allocated several times, if multiple
> > NIC installed on the system.
> > To avoid this issue Discover Token related global variables replaced
> > with the local variables.
> >
> > Cc: Abner Chang <abner.chang@amd.com>
> > Cc: Nickle Wang <nicklew@nvidia.com>
> > Signed-off-by: Igor Kulchytskyy <igork@ami.com>
> > ---
> > RedfishPkg/RedfishConfigHandler/RedfishConfigHandlerDriver.c | 139
> > ++++++++------------
> > RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c | 87
> ++++++++-
> > ---
> > RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverInternal.h | 28 +++-
> > 3 files changed, 140 insertions(+), 114 deletions(-)
> >
> > diff --git
> > a/RedfishPkg/RedfishConfigHandler/RedfishConfigHandlerDriver.c
> > b/RedfishPkg/RedfishConfigHandler/RedfishConfigHandlerDriver.c
> > index 993ad33..8f85491 100644
> > --- a/RedfishPkg/RedfishConfigHandler/RedfishConfigHandlerDriver.c
> > +++ b/RedfishPkg/RedfishConfigHandler/RedfishConfigHandlerDriver.c
> > @@ -22,12 +22,6 @@ EFI_HANDLE
> > gEfiRedfishDiscoverControllerHandle = NULL;
> > EFI_REDFISH_DISCOVER_PROTOCOL *gEfiRedfishDiscoverProtocol =
> > NULL;
> > BOOLEAN gRedfishDiscoverActivated = FALSE;
> > BOOLEAN gRedfishServiceDiscovered = FALSE;
> > -//
> > -// Network interfaces discovered by EFI Redfish Discover Protocol.
> > -//
> > -UINTN gNumberOfNetworkInterfaces;
> > -EFI_REDFISH_DISCOVER_NETWORK_INTERFACE
> > *gNetworkInterfaceInstances = NULL;
> > -EFI_REDFISH_DISCOVERED_TOKEN *gRedfishDiscoveredToken =
> > NULL;
> >
> > ///
> > /// Driver Binding Protocol instance
> > @@ -58,13 +52,6 @@ RedfishConfigStopRedfishDiscovery (
> > gBS->CloseEvent (gEfiRedfishDiscoverProtocolEvent);
> > }
> >
> > - //
> > - // Stop Redfish service discovery.
> > - //
> > - gEfiRedfishDiscoverProtocol->AbortAcquireRedfishService (
> > - gEfiRedfishDiscoverProtocol,
> > - gNetworkInterfaceInstances
> > - );
> > gEfiRedfishDiscoverControllerHandle = NULL;
> > gEfiRedfishDiscoverProtocol = NULL;
> > gRedfishDiscoverActivated = FALSE;
> > @@ -318,36 +305,39 @@ RedfishServiceDiscoveredCallback (
> > EFI_REDFISH_DISCOVERED_TOKEN *RedfishDiscoveredToken;
> > EFI_REDFISH_DISCOVERED_INSTANCE *RedfishInstance;
> >
> > - if (gRedfishServiceDiscovered) {
> > - //
> > - // Only support one Redfish service on platform.
> > - //
> > - return;
> > - }
> > -
> > RedfishDiscoveredToken = (EFI_REDFISH_DISCOVERED_TOKEN *)Context;
> > - RedfishInstance = RedfishDiscoveredToken-
> > >DiscoverList.RedfishInstances;
> > + gBS->CloseEvent (RedfishDiscoveredToken->Event);
> > +
> > //
> > - // Only pick up the first found Redfish service.
> > + // Only support one Redfish service on platform.
> > //
> > - if (RedfishInstance->Status == EFI_SUCCESS) {
> > - gRedfishConfigData.RedfishServiceInfo.RedfishServiceRestExHandle =
> > RedfishInstance->Information.RedfishRestExHandle;
> > - gRedfishConfigData.RedfishServiceInfo.RedfishServiceVersion =
> > RedfishInstance->Information.RedfishVersion;
> > - gRedfishConfigData.RedfishServiceInfo.RedfishServiceLocation =
> > RedfishInstance->Information.Location;
> > - gRedfishConfigData.RedfishServiceInfo.RedfishServiceUuid =
> > RedfishInstance->Information.Uuid;
> > - gRedfishConfigData.RedfishServiceInfo.RedfishServiceOs =
> > RedfishInstance->Information.Os;
> > - gRedfishConfigData.RedfishServiceInfo.RedfishServiceOsVersion =
> > RedfishInstance->Information.OsVersion;
> > - gRedfishConfigData.RedfishServiceInfo.RedfishServiceProduct =
> > RedfishInstance->Information.Product;
> > - gRedfishConfigData.RedfishServiceInfo.RedfishServiceProductVer =
> > RedfishInstance->Information.ProductVer;
> > - gRedfishConfigData.RedfishServiceInfo.RedfishServiceUseHttps =
> > RedfishInstance->Information.UseHttps;
> > - gRedfishServiceDiscovered = TRUE;
> > + if (!gRedfishServiceDiscovered) {
> > + RedfishInstance = RedfishDiscoveredToken-
> > >DiscoverList.RedfishInstances;
> > + //
> > + // Only pick up the first found Redfish service.
> > + //
> > + if (RedfishInstance->Status == EFI_SUCCESS) {
> > +
> > + gRedfishConfigData.RedfishServiceInfo.RedfishServiceRestExHandle =
> > RedfishInstance->Information.RedfishRestExHandle;
> > + gRedfishConfigData.RedfishServiceInfo.RedfishServiceVersion =
> > RedfishInstance->Information.RedfishVersion;
> > + gRedfishConfigData.RedfishServiceInfo.RedfishServiceLocation =
> > RedfishInstance->Information.Location;
> > + gRedfishConfigData.RedfishServiceInfo.RedfishServiceUuid =
> > RedfishInstance->Information.Uuid;
> > + gRedfishConfigData.RedfishServiceInfo.RedfishServiceOs =
> > RedfishInstance->Information.Os;
> > + gRedfishConfigData.RedfishServiceInfo.RedfishServiceOsVersion =
> > RedfishInstance->Information.OsVersion;
> > + gRedfishConfigData.RedfishServiceInfo.RedfishServiceProduct =
> > RedfishInstance->Information.Product;
> > + gRedfishConfigData.RedfishServiceInfo.RedfishServiceProductVer =
> > RedfishInstance->Information.ProductVer;
> > + gRedfishConfigData.RedfishServiceInfo.RedfishServiceUseHttps =
> > RedfishInstance->Information.UseHttps;
> > + gRedfishServiceDiscovered = TRUE;
> > + }
> > +
> > + //
> > + // Invoke RedfishConfigHandlerInstalledCallback to execute
> > + // the initialization of Redfish Configure Handler instance.
> > + //
> > + RedfishConfigHandlerInstalledCallback (gRedfishConfigData.Event,
> > + &gRedfishConfigData);
> > }
> >
> > - //
> > - // Invoke RedfishConfigHandlerInstalledCallback to execute
> > - // the initialization of Redfish Configure Handler instance.
> > - //
> > - RedfishConfigHandlerInstalledCallback (gRedfishConfigData.Event,
> > &gRedfishConfigData);
> > + FreePool(RedfishDiscoveredToken);
> > +
> > }
> >
> > /**
> > @@ -371,6 +361,7 @@ RedfishDiscoverProtocolInstalled (
> > UINTN NetworkInterfaceIndex;
> > EFI_REDFISH_DISCOVER_NETWORK_INTERFACE *ThisNetworkInterface;
> > EFI_REDFISH_DISCOVERED_TOKEN *ThisRedfishDiscoveredToken;
> > + UINTN NumberOfNetworkInterfaces;
> >
> > DEBUG ((DEBUG_INFO, "%a: New network interface is installed on
> > system by EFI Redfish discover driver.\n", __func__));
> >
> > @@ -408,36 +399,31 @@ RedfishDiscoverProtocolInstalled (
> > }
> > }
> >
> > - //
> > - // Check the new found network interface.
> > - //
> > - if (gNetworkInterfaceInstances != NULL) {
> > - FreePool (gNetworkInterfaceInstances);
> > - }
> >
> > Status = gEfiRedfishDiscoverProtocol->GetNetworkInterfaceList (
> > gEfiRedfishDiscoverProtocol,
> > gRedfishConfigData.Image,
> > - &gNumberOfNetworkInterfaces,
> > - &gNetworkInterfaceInstances
> > + &NumberOfNetworkInterfaces,
> > + &ThisNetworkInterface
> > );
> > - if (EFI_ERROR (Status) || (gNumberOfNetworkInterfaces == 0)) {
> > + if (EFI_ERROR (Status) || (NumberOfNetworkInterfaces == 0)) {
> > DEBUG ((DEBUG_ERROR, "%a: No network interfaces found on the
> > handle.\n", __func__));
> > return;
> > }
> >
> > - gRedfishDiscoveredToken = AllocateZeroPool
> > (gNumberOfNetworkInterfaces * sizeof
> (EFI_REDFISH_DISCOVERED_TOKEN));
> > - if (gRedfishDiscoveredToken == NULL) {
> > + //
> > + // Loop to discover Redfish service on each network interface.
> > + //
> > + for (NetworkInterfaceIndex = 0; NetworkInterfaceIndex <
> > + NumberOfNetworkInterfaces; NetworkInterfaceIndex++) {
> > +
> > + ThisRedfishDiscoveredToken = (EFI_REDFISH_DISCOVERED_TOKEN
> > *)AllocateZeroPool(sizeof (EFI_REDFISH_DISCOVERED_TOKEN));
> > + if (ThisRedfishDiscoveredToken == NULL) {
> > DEBUG ((DEBUG_ERROR, "%a: Not enough memory for
> > EFI_REDFISH_DISCOVERED_TOKEN.\n", __func__));
> > return;
> > }
> >
> > - ThisNetworkInterface = gNetworkInterfaceInstances;
> > - ThisRedfishDiscoveredToken = gRedfishDiscoveredToken;
> > - //
> > - // Loop to discover Redfish service on each network interface.
> > - //
> > - for (NetworkInterfaceIndex = 0; NetworkInterfaceIndex <
> > gNumberOfNetworkInterfaces; NetworkInterfaceIndex++) {
> > + ThisRedfishDiscoveredToken->Signature =
> > + REDFISH_DISCOVER_TOKEN_SIGNATURE;
> > +
> > //
> > // Initial this Redfish Discovered Token
> > //
> > @@ -449,13 +435,11 @@ RedfishDiscoverProtocolInstalled (
> > &ThisRedfishDiscoveredToken->Event
> > );
> > if (EFI_ERROR (Status)) {
> > + FreePool(ThisRedfishDiscoveredToken);
> > DEBUG ((DEBUG_ERROR, "%a: Failed to create event for Redfish
> > discovered token.\n", __func__));
> > - goto ErrorReturn;
> > + return;
> > }
> >
> > - ThisRedfishDiscoveredToken->Signature =
> > REDFISH_DISCOVER_TOKEN_SIGNATURE;
> > - ThisRedfishDiscoveredToken->DiscoverList.NumberOfServiceFound = 0;
> > - ThisRedfishDiscoveredToken->DiscoverList.RedfishInstances = NULL;
> > //
> > // Acquire for Redfish service which is reported by
> > // Redfish Host Interface.
> > @@ -467,21 +451,23 @@ RedfishDiscoverProtocolInstalled (
> > EFI_REDFISH_DISCOVER_HOST_INTERFACE,
> > ThisRedfishDiscoveredToken
> > );
> > - ThisNetworkInterface++;
> > - ThisRedfishDiscoveredToken++;
> > - }
> >
> > - if (EFI_ERROR (Status)) {
> > - DEBUG ((DEBUG_ERROR, "%a: Acquire Redfish service fail.\n",
> __func__));
> > - goto ErrorReturn;
> > + //
> > + // Free Redfish Discovered Token if Discover Instance was not
> > + created
> > and
> > + // Redfish Service Discovered Callback event was not triggered.
> > + //
> > + if(ThisRedfishDiscoveredToken->DiscoverList.NumberOfServiceFound
> > + ==
> > 0 ||
> > + EFI_ERROR(ThisRedfishDiscoveredToken-
> > >DiscoverList.RedfishInstances->Status)){
> > + gBS->CloseEvent (ThisRedfishDiscoveredToken->Event);
> > + DEBUG ((DEBUG_ERROR, "%a: Free Redfish discovered token - %x.\n",
> > + __func__, ThisRedfishDiscoveredToken));
> > + FreePool(ThisRedfishDiscoveredToken);
> > + }
> > + ThisNetworkInterface++;
> > }
> >
> > return;
> >
> > -ErrorReturn:
> > - if (gRedfishDiscoveredToken != NULL) {
> > - FreePool (gRedfishDiscoveredToken);
> > - }
> > }
> >
> > /**
> > @@ -498,25 +484,10 @@ RedfishConfigHandlerDriverUnload (
> > IN EFI_HANDLE ImageHandle
> > )
> > {
> > - EFI_REDFISH_DISCOVERED_TOKEN *ThisRedfishDiscoveredToken;
> > - UINTN NumberOfNetworkInterfacesIndex;
> >
> > RedfishConfigDriverCommonUnload (ImageHandle);
> >
> > RedfishConfigStopRedfishDiscovery ();
> > - if (gRedfishDiscoveredToken != NULL) {
> > - ThisRedfishDiscoveredToken = gRedfishDiscoveredToken;
> > - for (NumberOfNetworkInterfacesIndex = 0;
> > NumberOfNetworkInterfacesIndex < gNumberOfNetworkInterfaces;
> > NumberOfNetworkInterfacesIndex++) {
> > - if (ThisRedfishDiscoveredToken->Event != NULL) {
> > - gBS->CloseEvent (ThisRedfishDiscoveredToken->Event);
> > - }
> > -
> > - FreePool (ThisRedfishDiscoveredToken);
> > - ThisRedfishDiscoveredToken++;
> > - }
> > -
> > - gRedfishDiscoveredToken = NULL;
> > - }
> >
> > return EFI_SUCCESS;
> > }
> > diff --git a/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c
> > b/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c
> > index 583c6f7..a6c8d60 100644
> > --- a/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c
> > +++ b/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c
> > @@ -1095,8 +1095,10 @@ RedfishServiceGetNetworkInterface ( {
> > EFI_REDFISH_DISCOVER_NETWORK_INTERFACE_INTERNAL
> > *ThisNetworkInterfaceIntn;
> > EFI_REDFISH_DISCOVER_NETWORK_INTERFACE
> > *ThisNetworkInterface;
> > + EFI_REDFISH_DISCOVER_REST_EX_INSTANCE_INTERNAL
> *RestExInstance;
> >
> > - if ((NetworkIntfInstances == NULL) || (NumberOfNetworkIntfs ==
> > NULL)
> > || (ImageHandle == NULL)) {
> > + if ((This == NULL) || (NetworkIntfInstances == NULL) ||
> > (NumberOfNetworkIntfs == NULL) ||
> > + (ImageHandle == NULL)) {
> > return EFI_INVALID_PARAMETER;
> > }
> >
> > @@ -1107,14 +1109,30 @@ RedfishServiceGetNetworkInterface (
> > return EFI_NOT_FOUND;
> > }
> >
> > + RestExInstance =
> > + EFI_REDFISH_DISOVER_DATA_FROM_DISCOVER_PROTOCOL(This);
> > +
> > + //
> > + // Check the new found network interface.
> > + //
> > + if (RestExInstance->NetworkInterfaceInstances != NULL) {
> > + FreePool (RestExInstance->NetworkInterfaceInstances);
> > + RestExInstance->NetworkInterfaceInstances = NULL; }
> > +
> > ThisNetworkInterface = (EFI_REDFISH_DISCOVER_NETWORK_INTERFACE
> > *)AllocateZeroPool (sizeof
> (EFI_REDFISH_DISCOVER_NETWORK_INTERFACE)
> > * mNumNetworkInterface);
> > if (ThisNetworkInterface == NULL) {
> > return EFI_OUT_OF_RESOURCES;
> > }
> >
> > *NetworkIntfInstances = ThisNetworkInterface;
> > +
> > +
> > + RestExInstance->NetworkInterfaceInstances = ThisNetworkInterface;
> > + RestExInstance->NumberOfNetworkInterfaces = 0;
> > +
> > ThisNetworkInterfaceIntn =
> > (EFI_REDFISH_DISCOVER_NETWORK_INTERFACE_INTERNAL
> *)GetFirstNode
> > (&mEfiRedfishDiscoverNetworkInterface);
> > while (TRUE) {
> > +
> > ThisNetworkInterface->IsIpv6 = FALSE;
> > if (CheckIsIpVersion6 (ThisNetworkInterfaceIntn)) {
> > ThisNetworkInterface->IsIpv6 = TRUE; @@ -1130,7 +1148,7 @@
> > RedfishServiceGetNetworkInterface (
> >
> > ThisNetworkInterface->SubnetPrefixLength =
> > ThisNetworkInterfaceIntn-
> > >SubnetPrefixLength;
> > ThisNetworkInterface->VlanId = ThisNetworkInterfaceIntn-
> >VlanId;
> > - (*NumberOfNetworkIntfs)++;
> > + RestExInstance->NumberOfNetworkInterfaces++;
> > if (IsNodeAtEnd (&mEfiRedfishDiscoverNetworkInterface,
> > &ThisNetworkInterfaceIntn->Entry)) {
> > break;
> > }
> > @@ -1139,6 +1157,8 @@ RedfishServiceGetNetworkInterface (
> > ThisNetworkInterface++;
> > }
> >
> > + *NumberOfNetworkIntfs = RestExInstance-
> > >NumberOfNetworkInterfaces;
> > +
> > return EFI_SUCCESS;
> > }
> >
> > @@ -1178,7 +1198,6 @@ RedfishServiceAcquireService ( {
> > EFI_REDFISH_DISCOVERED_INTERNAL_INSTANCE *Instance;
> > EFI_STATUS Status1;
> > - EFI_STATUS Status2;
> > BOOLEAN NewInstance;
> > UINTN NumNetworkInterfaces;
> > UINTN NetworkInterfacesIndex;
> > @@ -1215,7 +1234,6 @@ RedfishServiceAcquireService (
> >
> > for (NetworkInterfacesIndex = 0; NetworkInterfacesIndex <
> > NumNetworkInterfaces; NetworkInterfacesIndex++) {
> > Status1 = EFI_SUCCESS;
> > - Status2 = EFI_SUCCESS;
> > NewInstance = FALSE;
> > Instance = GetInstanceByOwner (ImageHandle,
> > TargetNetworkInterfaceInternal, Flags &
> > ~EFI_REDFISH_DISCOVER_VALIDATION); // Check if we can re-use
> previous
> > instance.
> > if (Instance == NULL) {
> > @@ -1223,6 +1241,7 @@ RedfishServiceAcquireService (
> > Instance = (EFI_REDFISH_DISCOVERED_INTERNAL_INSTANCE
> > *)AllocateZeroPool (sizeof
> > (EFI_REDFISH_DISCOVERED_INTERNAL_INSTANCE));
> > if (Instance == NULL) {
> > DEBUG ((DEBUG_ERROR, "%a:Memory allocation fail.\n",
> > __func__));
> > + return EFI_OUT_OF_RESOURCES;
> > }
> >
> > InitializeListHead (&Instance->Entry); @@ -1258,9 +1277,11 @@
> > RedfishServiceAcquireService (
> > DEBUG ((DEBUG_ERROR, "%a:Redfish service discovery through SSDP
> > is not supported\n", __func__));
> > return EFI_UNSUPPORTED;
> > } else {
> > - if (EFI_ERROR (Status1) && EFI_ERROR (Status2)) {
> > - FreePool ((VOID *)Instance);
> > - DEBUG ((DEBUG_ERROR, "%a:Something wrong on Redfish service
> > discovery Status1=%x, Status2=%x.\n", __func__, Status1, Status2));
> > + if (EFI_ERROR (Status1)) {
> > + if (NewInstance) {
> > + FreePool ((VOID *)Instance);
> > + }
> > + DEBUG ((DEBUG_ERROR, "%a:Something wrong on Redfish service
> > + discovery Status1=%r.\n", __func__, Status1));
> > } else {
> > if (NewInstance) {
> > InsertTailList (&mRedfishDiscoverList, &Instance->Entry);
> > @@ -1387,13
> > +1408,6 @@ ReleaseNext:;
> > }
> > }
> >
> > -EFI_REDFISH_DISCOVER_PROTOCOL mRedfishDiscover = {
> > - RedfishServiceGetNetworkInterface,
> > - RedfishServiceAcquireService,
> > - RedfishServiceAbortAcquire,
> > - RedfishServiceReleaseService
> > -};
> > -
> > /**
> > This function create an
> > EFI_REDFISH_DISCOVER_NETWORK_INTERFACE_INTERNAL for the
> > given network interface.
> > @@ -1713,12 +1727,20 @@ BuildupNetworkInterface (
> >
> > NewNetworkInterfaceInstalled = FALSE;
> > NetworkInterface->EfiRedfishDiscoverProtocolHandle = NULL;
> > - Status = gBS->InstallProtocolInterface (
> > - &NetworkInterface-
> > >EfiRedfishDiscoverProtocolHandle,
> > - &gEfiRedfishDiscoverProtocolGuid,
> > - EFI_NATIVE_INTERFACE,
> > - (VOID *)&mRedfishDiscover
> > - );
> > +
> > + RestExInstance->Signature =
> > + EFI_REDFISH_DISCOVER_DATA_SIGNATURE;
> > +
> > +
> > + RestExInstance->RedfishDiscoverProtocol.GetNetworkInterfaceList =
> > RedfishServiceGetNetworkInterface;
> > +
> > + RestExInstance->RedfishDiscoverProtocol.AcquireRedfishService =
> > RedfishServiceAcquireService;
> > +
> > + RestExInstance->RedfishDiscoverProtocol.AbortAcquireRedfishService
> > = RedfishServiceAbortAcquire;
> > +
> > + RestExInstance->RedfishDiscoverProtocol.ReleaseRedfishService
> > + = RedfishServiceReleaseService;
> > +
> > + Status = gBS->InstallProtocolInterface (
> > + &NetworkInterface->EfiRedfishDiscoverProtocolHandle,
> > + &gEfiRedfishDiscoverProtocolGuid,
> > + EFI_NATIVE_INTERFACE,
> > + (VOID *)&RestExInstance->RedfishDiscoverProtocol
> > + );
> > if (EFI_ERROR (Status)) {
> > DEBUG ((DEBUG_ERROR, "%a: Fail to install
> > EFI_REDFISH_DISCOVER_PROTOCOL\n", __func__));
> > }
> > @@ -1815,6 +1837,7 @@ StopServiceOnNetworkInterface (
> > EFI_HANDLE DiscoverProtocolHandle;
> > EFI_REDFISH_DISCOVER_NETWORK_INTERFACE_INTERNAL
> > *ThisNetworkInterface;
> > EFI_REDFISH_DISCOVER_REST_EX_INSTANCE_INTERNAL
> *RestExInstance;
> > + EFI_REDFISH_DISCOVER_PROTOCOL *RedfishDiscoverProtocol;
> >
> > for (Index = 0; Index < (sizeof (gRequiredProtocol) / sizeof
> > (REDFISH_DISCOVER_REQUIRED_PROTOCOL)); Index++) {
> > Status = gBS->HandleProtocol (
> > @@ -1854,12 +1877,30 @@ StopServiceOnNetworkInterface (
> > // client which uses .EFI Redfish discover protocol.
> > //
> > if (DiscoverProtocolHandle != NULL) {
> > - gBS->DisconnectController (DiscoverProtocolHandle, NULL, NULL);
> > - Status = gBS->UninstallProtocolInterface (
> > +
> > + Status = gBS->HandleProtocol (
> > DiscoverProtocolHandle,
> > &gEfiRedfishDiscoverProtocolGuid,
> > - (VOID *)&mRedfishDiscover
> > + (VOID **) &RedfishDiscoverProtocol
> > );
> > + if (!EFI_ERROR (Status)) {
> > + RestExInstance =
> >
> EFI_REDFISH_DISOVER_DATA_FROM_DISCOVER_PROTOCOL(RedfishDiscove
> > rProtocol);
> > + //
> > + // Stop Redfish service discovery.
> > + //
> > + RedfishDiscoverProtocol->AbortAcquireRedfishService (
> > + RedfishDiscoverProtocol,
> > + RestExInstance->NetworkInterfaceInstances
> > + );
> > +
> > +
> > + gBS->DisconnectController (DiscoverProtocolHandle, NULL, NULL);
> > + Status = gBS->UninstallProtocolInterface (
> > + DiscoverProtocolHandle,
> > + &gEfiRedfishDiscoverProtocolGuid,
> > + (VOID *)&RestExInstance->RedfishDiscoverProtocol
> > + );
> > + }
> > }
> >
> > return Status;
> > diff --git a/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverInternal.h
> > b/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverInternal.h
> > index 2704cd9..ddb5f2e 100644
> > --- a/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverInternal.h
> > +++ b/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverInternal.h
> > @@ -118,16 +118,30 @@ typedef struct { }
> > EFI_REDFISH_DISCOVER_NETWORK_INTERFACE_INTERNAL;
> >
> > //
> > +// Redfish Discover Instance signature //
> > +
> > +#define EFI_REDFISH_DISCOVER_DATA_SIGNATURE SIGNATURE_32 ('E',
> > 'R', 'D', 'D')
> > +
> > +#define EFI_REDFISH_DISOVER_DATA_FROM_DISCOVER_PROTOCOL(a) \
> > + CR (a, EFI_REDFISH_DISCOVER_REST_EX_INSTANCE_INTERNAL,
> > +RedfishDiscoverProtocol, EFI_REDFISH_DISCOVER_DATA_SIGNATURE)
> > +
> > +//
> > // Internal structure used to maintain REST EX properties.
> > //
> > typedef struct {
> > - LIST_ENTRY Entry; ///< Link list entry.
> > - EFI_HANDLE OpenDriverAgentHandle; ///< The agent to open
> > network protocol.
> > - EFI_HANDLE OpenDriverControllerHandle; ///< The controller
> handle
> > to open network protocol.
> > - EFI_HANDLE RestExChildHandle; ///< The child handle created
> > through REST EX Service Protocol.
> > - EFI_HANDLE RestExControllerHandle; ///< The controller handle
> > which provide REST EX protocol.
> > - EFI_REST_EX_PROTOCOL *RestExProtocolInterface; ///< Pointer to
> > EFI_REST_EX_PROTOCOL.
> > - UINT32 RestExId; ///< The identifier installed on REST EX
> > controller handle.
> > + LIST_ENTRY Entry; ///< Link list entry.
> > + UINT32 Signature; ///< Instance signature.
> > + EFI_HANDLE OpenDriverAgentHandle; ///< The agent to
> > open network protocol.
> > + EFI_HANDLE OpenDriverControllerHandle; ///< The
> > controller handle to open network protocol.
> > + EFI_HANDLE RestExChildHandle; ///< The child handle
> > created through REST EX Service Protocol.
> > + EFI_HANDLE RestExControllerHandle; ///< The controller
> > handle which provide REST EX protocol.
> > + EFI_REST_EX_PROTOCOL *RestExProtocolInterface; ///<
> Pointer
> > to EFI_REST_EX_PROTOCOL.
> > + UINT32 RestExId; ///< The identifier installed on
> > REST EX controller handle.
> > + UINTN NumberOfNetworkInterfaces; ///< Number of
> > network interfaces can do Redfish service discovery.
> > + EFI_REDFISH_DISCOVER_NETWORK_INTERFACE
> > *NetworkInterfaceInstances; ///< Network interface instances. It's an
> > array of instances. The number of entries
> > +
> > + ///< in array is indicated by
> > NumberOfNetworkInterfaces.
> > + EFI_REDFISH_DISCOVER_PROTOCOL RedfishDiscoverProtocol;
> ///<
> > EFI_REDFISH_DISCOVER_PROTOCOL protocol.
> > } EFI_REDFISH_DISCOVER_REST_EX_INSTANCE_INTERNAL;
> >
> > /**
> > --
> > 2.6.1.windows.1
> > -The information contained in this message may be confidential and
> > proprietary to American Megatrends (AMI). This communication is
> > intended to be read only by the individual or entity to whom it is
> > addressed or by their designee. If the reader of this message is not
> > the intended recipient, you are on notice that any distribution of
> > this message, in any form, is strictly prohibited. Please promptly
> > notify the sender by reply e-mail or by telephone at 770-246-8600, and
> > then delete or destroy all copies of the transmission.
> -The information contained in this message may be confidential and
> proprietary to American Megatrends (AMI). This communication is intended
> to be read only by the individual or entity to whom it is addressed or by their
> designee. If the reader of this message is not the intended recipient, you are
> on notice that any distribution of this message, in any form, is strictly
> prohibited. Please promptly notify the sender by reply e-mail or by
> telephone at 770-246-8600, and then delete or destroy all copies of the
> transmission.
next prev parent reply other threads:[~2023-04-21 0:12 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-19 15:04 [PATCH] RedfishPkg: Remove the global variables related to Discover Token functionality Igor Kulchytskyy
2023-04-20 0:59 ` Chang, Abner
2023-04-20 18:46 ` Igor Kulchytskyy
2023-04-21 0:12 ` Chang, Abner [this message]
2023-04-21 19:31 ` Igor Kulchytskyy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=MN2PR12MB39660EA4C5FE6E432BAD13D5EA609@MN2PR12MB3966.namprd12.prod.outlook.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox