From nobody Mon Feb 9 16:19:33 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+91790+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+91790+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=hpe.com ARC-Seal: i=1; a=rsa-sha256; t=1658712982; cv=none; d=zohomail.com; s=zohoarc; b=PeBvYFbMObnBzLAleCBnrmFP8/ORLxVJe95B6qSGEYaCuSltdS1bidtLnV1yZBFbuK+I8o8AOTIFRGm866RpAvQrnOrQUnb/15MnSBhRUcgE+rVwv2bfne9B6Ha2MRip61bsFMJljJF9CpLltzZuAhs2b6fwXMUsMnEWyehJbkg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658712982; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=rBteYMBSY6oCMcZqC2kdzbc5sLIrcy058f0RyUdUMsg=; b=RLHNdxHJkNkKFGqIVU6iXHOg+tGumAlPKXwSjxPLDzr6LkLIBUNKpLfcb7tbiKBw0UwWGDU962XDIC11Wa57ivaflWxY0RO7zM7uwNMW8dcvJgylkD062iTtwtipvnnxrplMBDgeY8o1veux6vUqbBHTxj6/Z/Oy6OUqoB825B0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+91790+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1658712982457438.242450075712; Sun, 24 Jul 2022 18:36:22 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id nv3OYY1788612xQ7BhzyoU4E; Sun, 24 Jul 2022 18:36:21 -0700 X-Received: from mx0b-002e3701.pphosted.com (mx0b-002e3701.pphosted.com [148.163.143.35]) by mx.groups.io with SMTP id smtpd.web11.23179.1658712980967614090 for ; Sun, 24 Jul 2022 18:36:21 -0700 X-Received: from pps.filterd (m0150244.ppops.net [127.0.0.1]) by mx0b-002e3701.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26OJephL023865; Mon, 25 Jul 2022 01:36:18 GMT X-Received: from p1lg14880.it.hpe.com (p1lg14880.it.hpe.com [16.230.97.201]) by mx0b-002e3701.pphosted.com (PPS) with ESMTPS id 3hhceqskm5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 25 Jul 2022 01:36:17 +0000 X-Received: from p1lg14886.dc01.its.hpecorp.net (unknown [10.119.18.237]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by p1lg14880.it.hpe.com (Postfix) with ESMTPS id 0833E800E92; Mon, 25 Jul 2022 01:36:17 +0000 (UTC) X-Received: from WAFM3XJD5N.asiapacific.hpqcorp.net (unknown [16.231.227.36]) by p1lg14886.dc01.its.hpecorp.net (Postfix) with ESMTP id A5CA480A0E2; Mon, 25 Jul 2022 01:36:15 +0000 (UTC) From: "Nickle Wang" To: devel@edk2.groups.io Cc: Abner Chang , Yang Atom , Nick Ramirez Subject: [edk2-devel] [edk2-staging][PATCH v2 11/15] edk2-staging/RedfishClientPkg: Rename RedfishMemoryCollection driver Date: Mon, 25 Jul 2022 09:35:51 +0800 Message-Id: <20220725013555.926-12-nickle.wang@hpe.com> In-Reply-To: <20220725013555.926-1-nickle.wang@hpe.com> References: <20220725013555.926-1-nickle.wang@hpe.com> MIME-Version: 1.0 X-Proofpoint-GUID: BH4Zlbtp54z1fGOzztQPPjm4gOA7keIf X-Proofpoint-ORIG-GUID: BH4Zlbtp54z1fGOzztQPPjm4gOA7keIf X-HPE-SCL: -1 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,nickle.wang@hpe.com X-Gm-Message-State: JK4oTnM60kuZEmcNUGpd0e9Sx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1658712981; bh=Es976C8vbJO7fKIqvjP6nOuvqN5Z39gCp78B5tmaT1w=; h=Cc:Date:From:Reply-To:Subject:To; b=jIHGuRm1oCVJhq1mnt6gvdC/5joBUBHKgfPNmMpOXqIpiBur699qRGk58I+c23rF6uh PZTTAooxvsffUBAJLoQ1P6sMLybGP7e+nbmdO4meUCtRIiQRUcZAojM42yyKYuoRGsUAB rpPk0gfbJPhEdNt2L8aoVm2UVcuHekjdJhg= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1658712983996100007 Content-Type: text/plain; charset="utf-8" Rename RedfishMemoryCollectionDxe by removing Redfish prefix. Update memory collection driver to support "Identify" action and also have code refactoring to support Redfish operation. Signed-off-by: Nickle Wang Cc: Abner Chang Cc: Yang Atom Cc: Nick Ramirez --- .../MemoryCollectionDxe.c} | 259 +++++++++--------- .../MemoryCollectionDxe.h} | 7 +- .../MemoryCollectionDxe.inf} | 19 +- .../Include/RedfishCollectionCommon.h | 14 +- RedfishClientPkg/RedfishClient.fdf.inc | 2 +- .../RedfishClientComponents.dsc.inc | 2 +- 6 files changed, 164 insertions(+), 139 deletions(-) rename RedfishClientPkg/Features/{RedfishMemoryCollectionDxe/RedfishMemory= CollectionDxe.c =3D> MemoryCollectionDxe/MemoryCollectionDxe.c} (66%) rename RedfishClientPkg/Features/{RedfishMemoryCollectionDxe/RedfishMemory= CollectionDxe.h =3D> MemoryCollectionDxe/MemoryCollectionDxe.h} (64%) rename RedfishClientPkg/Features/{RedfishMemoryCollectionDxe/RedfishMemory= CollectionDxe.inf =3D> MemoryCollectionDxe/MemoryCollectionDxe.inf} (71%) diff --git a/RedfishClientPkg/Features/RedfishMemoryCollectionDxe/RedfishMe= moryCollectionDxe.c b/RedfishClientPkg/Features/MemoryCollectionDxe/MemoryC= ollectionDxe.c similarity index 66% rename from RedfishClientPkg/Features/RedfishMemoryCollectionDxe/RedfishMem= oryCollectionDxe.c rename to RedfishClientPkg/Features/MemoryCollectionDxe/MemoryCollectionDxe= .c index d97f0f161e..43426a78af 100644 --- a/RedfishClientPkg/Features/RedfishMemoryCollectionDxe/RedfishMemoryCol= lectionDxe.c +++ b/RedfishClientPkg/Features/MemoryCollectionDxe/MemoryCollectionDxe.c @@ -1,67 +1,98 @@ /** @file - Redfish feature driver implementation - memory collection =20 - (C) Copyright 2020-2021 Hewlett Packard Enterprise Development LP
+ Redfish feature driver implementation - MemoryCollection + + (C) Copyright 2020-2022 Hewlett Packard Enterprise Development LP
=20 SPDX-License-Identifier: BSD-2-Clause-Patent =20 **/ =20 -#include "RedfishMemoryCollectionDxe.h" +#include "MemoryCollectionDxe.h" =20 REDFISH_COLLECTION_PRIVATE *mRedfishCollectionPrivate =3D NULL; =20 EFI_STATUS -ProcessResource ( +HandleResource ( IN REDFISH_COLLECTION_PRIVATE *Private, - IN CHAR8 *Uri + IN EFI_STRING Uri ) { - EFI_STATUS Status; - EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL *RedfishResrouceProtocol; - REDFISH_SCHEMA_INFO SchemaInfo; + EFI_STATUS Status; + REDFISH_SCHEMA_INFO SchemaInfo; + EFI_STRING ConfigLang; + EFI_STRING ReturnedConfigLang; + UINTN Index; =20 if (Private =3D=3D NULL || IS_EMPTY_STRING (Uri)) { return EFI_INVALID_PARAMETER; } =20 - DEBUG ((REDFISH_DEBUG_TRACE, "%a, process resource for: %a\n", __FUNCTIO= N__, Uri)); + // + // Resource match + // + + DEBUG ((REDFISH_DEBUG_TRACE, "%a, process resource for: %s\n", __FUNCTIO= N__, Uri)); =20 Status =3D GetRedfishSchemaInfo (Private->RedfishService, Private->JsonS= tructProtocol, Uri, &SchemaInfo); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a, failed to get schema information from: %a %r= \n", __FUNCTION__, Uri, Status)); + DEBUG ((DEBUG_ERROR, "%a, failed to get schema information from: %s %r= \n", __FUNCTION__, Uri, Status)); return Status; } + // + // Check and see if this is target resource that we want to handle. + // Some resource is handled by other provider so we have to make sure th= is first. + // + DEBUG ((REDFISH_DEBUG_TRACE, "%s Identify for %s\n", __FUNCTION__, Uri)); + ConfigLang =3D RedfishGetConfigLanguage (Uri); + if (ConfigLang =3D=3D NULL) { + Status =3D EdkIIRedfishResourceConfigIdentify (&SchemaInfo, Uri, Priva= te->InformationExchange); + if (EFI_ERROR (Status)) { + if (Status =3D=3D EFI_UNSUPPORTED) { + DEBUG ((DEBUG_INFO, "%a, \"%s\" is not handled by us\n", __FUNCTIO= N__, Uri)); + return EFI_SUCCESS; + } =20 - RedfishResrouceProtocol =3D GetRedfishResourceConfigProtocol ( - SchemaInfo.Schema, - SchemaInfo.Major, - SchemaInfo.Minor, - SchemaInfo.Errata - ); - if (RedfishResrouceProtocol =3D=3D NULL) { - return EFI_DEVICE_ERROR; + DEBUG ((DEBUG_ERROR, "%a, fail to identify resource: \"%s\": %r\n", = __FUNCTION__, Uri, Status)); + return Status; + } + } else { + DEBUG ((REDFISH_DEBUG_TRACE, "%a, history record found: %s\n", __FUNCT= ION__, ConfigLang)); + // + // Set exchange information + // + Status =3D GetArrayIndexFromArrayTypeConfigureLang (ConfigLang, &Retur= nedConfigLang, &Index); + if (!EFI_ERROR (Status) || Status =3D=3D EFI_NOT_FOUND) { + Private->InformationExchange->ReturnedInformation.Type =3D Informati= onTypeCollectionMemberConfigLanguage; + Private->InformationExchange->ReturnedInformation.ConfigureLanguageL= ist.Count =3D 1; + Private->InformationExchange->ReturnedInformation.ConfigureLanguageL= ist.List =3D + AllocateZeroPool(sizeof (REDFISH_FEATURE_ARRAY_TYPE_CONFIG_LANG)); + + if (Private->InformationExchange->ReturnedInformation.ConfigureLangu= ageList.List =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a, Fail to allocate memory for REDFISH_FEAT= URE_ARRAY_TYPE_CONFIG_LANG.\n", __FUNCTION__)); + return EFI_OUT_OF_RESOURCES; + } + Private->InformationExchange->ReturnedInformation.ConfigureLanguageL= ist.List [Index].Index =3D Index; + Private->InformationExchange->ReturnedInformation.ConfigureLanguageL= ist.List [Index].ConfigureLang =3D + (EFI_STRING)AllocateCopyPool(StrSize(ReturnedConfigLang), (VOID = *)ReturnedConfigLang); + } else { + DEBUG ((DEBUG_ERROR, "%a, GetArrayIndexFromArrayTypeConfigureLang fa= il: %r\n", __FUNCTION__, Status)); + } + FreePool (ConfigLang); } =20 // // Check and see if target property exist or not even when collection me= meber exists. // If not, we sill do provision. // - DEBUG ((REDFISH_DEBUG_TRACE, "%a Check for %a\n", __FUNCTION__, Uri)); - Status =3D RedfishResrouceProtocol->Check ( - RedfishResrouceProtocol, - Uri - ); + DEBUG ((REDFISH_DEBUG_TRACE, "%a Check for %s\n", __FUNCTION__, Uri)); + Status =3D EdkIIRedfishResourceConfigCheck (&SchemaInfo, Uri); if (EFI_ERROR (Status)) { // // The target property does not exist, do the provision to create prop= erty. // - DEBUG ((REDFISH_DEBUG_TRACE, "%a provision for %a\n", __FUNCTION__, Ur= i)); - Status =3D RedfishResrouceProtocol->Provisioning ( - RedfishResrouceProtocol, - Uri, - FALSE - ); + DEBUG ((REDFISH_DEBUG_TRACE, "%a provision for %s\n", __FUNCTION__, Ur= i)); + Status =3D EdkIIRedfishResourceConfigProvisionging (&SchemaInfo, Uri, = Private->InformationExchange, FALSE); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "%a, failed to provision with GET mode: %r\n", = __FUNCTION__, Status)); } @@ -72,41 +103,36 @@ ProcessResource ( // // Consume first. // - DEBUG ((REDFISH_DEBUG_TRACE, "%a consume for %a\n", __FUNCTION__, Uri)); - Status =3D RedfishResrouceProtocol->Consume ( - RedfishResrouceProtocol, - Uri - ); + DEBUG ((REDFISH_DEBUG_TRACE, "%a consume for %s\n", __FUNCTION__, Uri)); + Status =3D EdkIIRedfishResourceConfigConsume (&SchemaInfo, Uri); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a, failed to consume resoruce for: %a %r\n", __= FUNCTION__, Uri, Status)); + DEBUG ((DEBUG_ERROR, "%a, failed to consume resoruce for: %s: %r\n", _= _FUNCTION__, Uri, Status)); } =20 // // Patch. // - DEBUG ((REDFISH_DEBUG_TRACE, "%a update for %a\n", __FUNCTION__, Uri)); - Status =3D RedfishResrouceProtocol->Update ( - RedfishResrouceProtocol, - Uri - ); + DEBUG ((REDFISH_DEBUG_TRACE, "%a update for %s\n", __FUNCTION__, Uri)); + Status =3D EdkIIRedfishResourceConfigUpdate (&SchemaInfo, Uri); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a, failed to update resoruce for: %s: %r\n", __= FUNCTION__, Uri, Status)); + } =20 return Status; } =20 EFI_STATUS -ProcessCollection ( +HandleCollectionResource ( IN REDFISH_COLLECTION_PRIVATE *Private ) { EFI_STATUS Status; - EFI_REDFISH_MEMORYCOLLECTION *Memory; + EFI_REDFISH_MEMORYCOLLECTION *Collection; EFI_REDFISH_MEMORYCOLLECTION_CS *CollectionCs; RedfishCS_Link *List; RedfishCS_Header *Header; RedfishCS_Type_Uri_Data *UriData; - CHAR8 *ConfigureLang; - UINTN Size; - UINTN Count; + EFI_STRING MemberUri; =20 if (Private =3D=3D NULL) { return EFI_INVALID_PARAMETER; @@ -116,7 +142,7 @@ ProcessCollection ( return EFI_NOT_READY; } =20 - DEBUG ((REDFISH_DEBUG_TRACE, "%a, process collection for: %a\n", __FUNCT= ION__, Private->CollectionPath)); + DEBUG ((REDFISH_DEBUG_TRACE, "%a, process collection for: %s\n", __FUNCT= ION__, Private->CollectionUri)); =20 // // Convert JSON text to C structure. @@ -125,14 +151,14 @@ ProcessCollection ( Private->JsonStructProtocol, NULL, Private->CollectionJson, - (EFI_REST_JSON_STRUCTURE_HEADER = **)&Memory + (EFI_REST_JSON_STRUCTURE_HEADER = **)&Collection ); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "%a, ToStructure() failed: %r\n", __FUNCTION__, S= tatus)); return Status; } =20 - CollectionCs =3D Memory->MemoryCollection; + CollectionCs =3D Collection->MemoryCollection; =20 if (*CollectionCs->Membersodata_count =3D=3D 0) { return EFI_NOT_FOUND; @@ -142,23 +168,22 @@ ProcessCollection ( return EFI_NOT_FOUND; } =20 - Count =3D 0; List =3D GetFirstLink (&CollectionCs->Members); while (TRUE) { =20 Header =3D (RedfishCS_Header *)List; if (Header->ResourceType =3D=3D RedfishCS_Type_Uri) { UriData =3D (RedfishCS_Type_Uri_Data *)Header; - - ++Count; - Size =3D AsciiStrLen (Private->CollectionPath) + 5; - ConfigureLang =3D AllocatePool (Size); - ASSERT (ConfigureLang !=3D NULL); - AsciiSPrint (ConfigureLang, Size, "%a[%d]", Private->CollectionPath,= Count); - - Status =3D ProcessResource (Private, ConfigureLang); - if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a, process memory resource: %a failed: %r\n= ", __FUNCTION__, UriData->Uri, Status)); + MemberUri =3D NULL; + MemberUri =3D StrAsciiToUnicode (UriData->Uri); + ASSERT (MemberUri !=3D NULL); + if (MemberUri !=3D NULL) { + Status =3D HandleResource (Private, MemberUri); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a, process MemoryCollection resource: %a = failed: %r\n", __FUNCTION__, UriData->Uri, Status)); + } + + FreePool (MemberUri); } } =20 @@ -172,25 +197,24 @@ ProcessCollection ( // // Release resource. // - Private->JsonStructProtocol->DestoryStructure (Private->JsonStructProtoc= ol, (EFI_REST_JSON_STRUCTURE_HEADER *)Memory); + Private->JsonStructProtocol->DestoryStructure (Private->JsonStructProtoc= ol, (EFI_REST_JSON_STRUCTURE_HEADER *)Collection); =20 return EFI_SUCCESS; } =20 EFI_STATUS -CreateCollection ( +CreateCollectionResource ( IN REDFISH_COLLECTION_PRIVATE *Private ) { EFI_STATUS Status; - EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL *RedfishResrouceProtocol; REDFISH_SCHEMA_INFO SchemaInfo; =20 if (Private =3D=3D NULL) { return EFI_INVALID_PARAMETER; } =20 - DEBUG ((REDFISH_DEBUG_TRACE, "%a, create resource for collection for: %a= \n", __FUNCTION__, Private->CollectionPath)); + DEBUG ((REDFISH_DEBUG_TRACE, "%a, create resource for collection for: %s= \n", __FUNCTION__, Private->CollectionUri)); =20 Status =3D GetSupportedSchemaVersion (REDFISH_SCHEMA_NAME, &SchemaInfo); if (EFI_ERROR (Status)) { @@ -200,18 +224,9 @@ CreateCollection ( =20 DEBUG ((REDFISH_DEBUG_TRACE, "%a, supported schema: %a %a.%a.%a\n", __FU= NCTION__, SchemaInfo.Schema, SchemaInfo.Major, SchemaInfo.Minor, SchemaInfo= .Errata)); =20 - RedfishResrouceProtocol =3D GetRedfishResourceConfigProtocol (SchemaInfo= .Schema, SchemaInfo.Major, SchemaInfo.Minor, SchemaInfo.Errata); - if (RedfishResrouceProtocol =3D=3D NULL) { - return EFI_DEVICE_ERROR; - } - - Status =3D RedfishResrouceProtocol->Provisioning ( - RedfishResrouceProtocol, - Private->CollectionPath, - TRUE - ); + Status =3D EdkIIRedfishResourceConfigProvisionging (&SchemaInfo, Private= ->CollectionUri, Private->InformationExchange, TRUE); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a, failed to create resoruce for: %a %r\n", __F= UNCTION__, Private->CollectionPath, Status)); + DEBUG ((DEBUG_ERROR, "%a, failed to create resoruce for: %s: %r\n", __= FUNCTION__, Private->CollectionUri, Status)); } =20 return Status; @@ -248,6 +263,11 @@ ReleaseCollectionResource ( Private->CollectionJson =3D NULL; } =20 + if (Private->RedfishVersion !=3D NULL) { + FreePool (Private->RedfishVersion); + Private->RedfishVersion =3D NULL; + } + return EFI_SUCCESS; } =20 @@ -257,49 +277,19 @@ CollectionHandler ( ) { EFI_STATUS Status; - CHAR8 *SystemRootPath; - CHAR8 *PathBuffer; - UINTN BufferSize; =20 if (Private =3D=3D NULL) { return EFI_INVALID_PARAMETER; } =20 - SystemRootPath =3D NULL; - PathBuffer =3D NULL; - - SystemRootPath =3D RedfishGetSystemRootPath (); - if (SystemRootPath =3D=3D NULL) { - DEBUG ((DEBUG_ERROR, "%a, can not find system root path\n", __FUNCTION= __)); - return EFI_DEVICE_ERROR; - } - - BufferSize =3D AsciiStrSize (SystemRootPath) + AsciiStrSize (REDFISH_SCH= EMA_NAME); - PathBuffer =3D AllocatePool (BufferSize); - if (PathBuffer =3D=3D NULL) { - Status =3D EFI_OUT_OF_RESOURCES; - goto ON_RELEASE; - } - - AsciiSPrint (PathBuffer, BufferSize, "%a/%a", SystemRootPath, REDFISH_SC= HEMA_NAME); - - DEBUG ((REDFISH_DEBUG_TRACE, "%a, collection handler for %a\n", __FUNCTI= ON__, PathBuffer)); - - // - // Initialize collection path - // - Private->CollectionPath =3D RedfishBuildPathWithSystemUuid (PathBuffer, = TRUE, NULL); - if (Private->CollectionPath =3D=3D NULL) { - Status =3D EFI_OUT_OF_RESOURCES; - goto ON_RELEASE; - } + DEBUG ((REDFISH_DEBUG_TRACE, "%a, collection handler for %s\n", __FUNCTI= ON__, Private->CollectionUri)); =20 // // Query collection from Redfish service. // - Status =3D GetResourceByPath (Private->RedfishService, Private->Collecti= onPath, &Private->RedResponse); + Status =3D GetResourceByUri (Private->RedfishService, Private->Collectio= nUri, &Private->RedResponse); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a, unable to get resource from: %a :%r\n", __FU= NCTION__, Private->CollectionPath, Status)); + DEBUG ((DEBUG_ERROR, "%a, unable to get resource from: %s :%r\n", __FU= NCTION__, Private->CollectionUri, Status)); goto ON_RELEASE; } =20 @@ -309,21 +299,13 @@ CollectionHandler ( Private->CollectionJson =3D JsonDumpString (RedfishJsonInPayload (Privat= e->CollectionPayload), EDKII_JSON_COMPACT); ASSERT (Private->CollectionJson !=3D NULL); =20 - Status =3D ProcessCollection (Private); + Status =3D HandleCollectionResource (Private); if (EFI_ERROR (Status) && Status =3D=3D EFI_NOT_FOUND) { - Status =3D CreateCollection (Private); + Status =3D CreateCollectionResource (Private); } =20 ON_RELEASE: =20 - if (SystemRootPath !=3D NULL) { - FreePool (SystemRootPath); - } - - if (PathBuffer !=3D NULL) { - FreePool (PathBuffer); - } - ReleaseCollectionResource (Private); =20 return Status; @@ -334,10 +316,12 @@ ON_RELEASE: =20 @param[in] This Pointer to EDKII_REDFISH_FEATURE_PROT= OCOL instance. @param[in] FeatureAction The action Redfish feature driver sho= uld take. + @param[in] Uri The collection URI. @param[in] Context The context of Redfish feature driver. - @param[in,out] InformationReturned The pointer to retrive the pointer to - FEATURE_RETURNED_INFOMATION. The memo= ry block of this - information should be freed by caller. + @param[in,out] InformationExchange The pointer to RESOURCE_INFORMATION_E= XCHANGE + + @retval EFI_SUCCESS Redfish feature driver callback is exec= uted successfully. + @retval Others Some errors happened. =20 @retval EFI_SUCCESS Redfish feature driver callback is exec= uted successfully. @retval Others Some errors happened. @@ -349,12 +333,13 @@ RedfishCollectionFeatureCallback ( IN EDKII_REDFISH_FEATURE_PROTOCOL *This, IN FEATURE_CALLBACK_ACTION FeatureAction, IN VOID *Context, - IN OUT FEATURE_RETURNED_INFORMATION **InformationReturned + IN OUT RESOURCE_INFORMATION_EXCHANGE *InformationExchange ) { EFI_STATUS Status; REDFISH_SERVICE RedfishService; REDFISH_COLLECTION_PRIVATE *Private; + EFI_STRING ResourceUri; =20 if (FeatureAction !=3D CallbackActionStartOperation) { return EFI_UNSUPPORTED; @@ -367,6 +352,36 @@ RedfishCollectionFeatureCallback ( return EFI_NOT_READY; } =20 + // + // Save in private structure. + // + Private->InformationExchange =3D InformationExchange; + + // + // Find Redfish version on BMC + // + Private->RedfishVersion =3D RedfishGetVersion (RedfishService); + + // + // Create the full URI from Redfish service root. + // + ResourceUri =3D (EFI_STRING)AllocateZeroPool (MAX_URI_LENGTH * sizeof(CH= AR16)); + if (ResourceUri =3D=3D NULL) { + DEBUG ((DEBUG_ERROR, "%a, Fail to allocate memory for full URI.\n", __= FUNCTION__)); + return EFI_OUT_OF_RESOURCES; + } + StrCatS (ResourceUri, MAX_URI_LENGTH, Private->RedfishVersion); + StrCatS (ResourceUri, MAX_URI_LENGTH, InformationExchange->SendInformati= on.FullUri); + + // + // Initialize collection path + // + Private->CollectionUri =3D RedfishGetUri (ResourceUri); + if (Private->CollectionUri =3D=3D NULL) { + ASSERT (FALSE); + return EFI_OUT_OF_RESOURCES; + } + Status =3D CollectionHandler (Private); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "%a, CollectionHandler failure: %r\n", __FUNCTION= __, Status)); @@ -549,7 +564,7 @@ RedfishCollectionUnload ( ) { EFI_STATUS Status; - EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL *ConfigHandler; + EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL *ConfigHandler; =20 if (mRedfishCollectionPrivate =3D=3D NULL) { return EFI_NOT_READY; diff --git a/RedfishClientPkg/Features/RedfishMemoryCollectionDxe/RedfishMe= moryCollectionDxe.h b/RedfishClientPkg/Features/MemoryCollectionDxe/MemoryC= ollectionDxe.h similarity index 64% rename from RedfishClientPkg/Features/RedfishMemoryCollectionDxe/RedfishMem= oryCollectionDxe.h rename to RedfishClientPkg/Features/MemoryCollectionDxe/MemoryCollectionDxe= .h index 83ca836941..75b4a123ff 100644 --- a/RedfishClientPkg/Features/RedfishMemoryCollectionDxe/RedfishMemoryCol= lectionDxe.h +++ b/RedfishClientPkg/Features/MemoryCollectionDxe/MemoryCollectionDxe.h @@ -1,7 +1,8 @@ /** @file + Redfish feature driver implementation - internal header file =20 - (C) Copyright 2020-2021 Hewlett Packard Enterprise Development LP
+ (C) Copyright 2020-2022 Hewlett Packard Enterprise Development LP
=20 SPDX-License-Identifier: BSD-2-Clause-Patent =20 @@ -14,5 +15,7 @@ #include =20 #define REDFISH_SCHEMA_NAME "Memory" -#define REDFISH_MANAGED_URI L"/redfish/v1/systems/{1}/memory" +#define REDFISH_MANAGED_URI L"Chassis/{}/Memory/{};Systems/{}/= Memory/{}" +#define MAX_URI_LENGTH 256 + #endif diff --git a/RedfishClientPkg/Features/RedfishMemoryCollectionDxe/RedfishMe= moryCollectionDxe.inf b/RedfishClientPkg/Features/MemoryCollectionDxe/Memor= yCollectionDxe.inf similarity index 71% rename from RedfishClientPkg/Features/RedfishMemoryCollectionDxe/RedfishMem= oryCollectionDxe.inf rename to RedfishClientPkg/Features/MemoryCollectionDxe/MemoryCollectionDxe= .inf index e7bcf49bdb..05e05712e7 100644 --- a/RedfishClientPkg/Features/RedfishMemoryCollectionDxe/RedfishMemoryCol= lectionDxe.inf +++ b/RedfishClientPkg/Features/MemoryCollectionDxe/MemoryCollectionDxe.inf @@ -1,15 +1,18 @@ ## @file # -# (C) Copyright 2020-2021 Hewlett Packard Enterprise Development LP
+# Redfish MemoryCollection collection driver. +# +# (C) Copyright 2020-2022 Hewlett Packard Enterprise Development LP
# # SPDX-License-Identifier: BSD-2-Clause-Patent # ## =20 + [Defines] INF_VERSION =3D 0x00010005 - BASE_NAME =3D RedfishMemoryCollectionDxe - FILE_GUID =3D 9323359C-11E2-49BC-B501-D6280B6DAE1A + BASE_NAME =3D MemoryCollectionDxe + FILE_GUID =3D 22facf8f-a007-462c-9be4-638043a26858 MODULE_TYPE =3D DXE_DRIVER VERSION_STRING =3D 1.0 ENTRY_POINT =3D RedfishCollectionEntryPoint @@ -22,8 +25,8 @@ RedfishClientPkg/RedfishClientPkg.dec =20 [Sources] - RedfishMemoryCollectionDxe.h - RedfishMemoryCollectionDxe.c + MemoryCollectionDxe.h + MemoryCollectionDxe.c =20 [LibraryClasses] DebugLib @@ -35,19 +38,19 @@ UefiLib UefiDriverEntryPoint UefiBootServicesTableLib + EdkIIRedfishResourceConfigLib + RedfishVersionLib =20 [Protocols] gEdkIIRedfishConfigHandlerProtocolGuid ## CONSUMED gEfiRestJsonStructureProtocolGuid ## CONSUMED - gEdkIIRedfishResourceConfigProtocolGuid ## CONSUMED gEdkIIRedfishFeatureProtocolGuid ## CONSUMED =20 [Guids] - gEfiEventReadyToBootGuid =20 [Pcd] gEfiRedfishClientPkgTokenSpaceGuid.PcdMaxRedfishSchemaStringSize gEfiRedfishClientPkgTokenSpaceGuid.PcdMaxRedfishSchemaVersionSize =20 [Depex] - TRUE \ No newline at end of file + TRUE diff --git a/RedfishClientPkg/Include/RedfishCollectionCommon.h b/RedfishCl= ientPkg/Include/RedfishCollectionCommon.h index 05a0f672f3..d4adcedd1f 100644 --- a/RedfishClientPkg/Include/RedfishCollectionCommon.h +++ b/RedfishClientPkg/Include/RedfishCollectionCommon.h @@ -1,7 +1,7 @@ /** @file Redfish feature driver collection common header file. =20 - (C) Copyright 2020-2021 Hewlett Packard Enterprise Development LP
+ (C) Copyright 2020-2022 Hewlett Packard Enterprise Development LP
=20 SPDX-License-Identifier: BSD-2-Clause-Patent =20 @@ -10,6 +10,8 @@ #ifndef EFI_REDFISH_COLLECTION_COMMON_H_ #define EFI_REDFISH_COLLECTION_COMMON_H_ =20 +#include + // // Libraries // @@ -22,28 +24,30 @@ #include #include #include +#include +#include =20 // // Protocols // #include -#include #include #include #include =20 -#define IS_EMPTY_STRING(a) ((a) =3D=3D NULL || (a)[0] =3D=3D = '\0') -#define REDFISH_DEBUG_TRACE DEBUG_INFO +#define REDFISH_MAX_COLLECTION_INDEX_LEN 8 =20 typedef struct _REDFISH_COLLECTION_PRIVATE { EFI_REST_JSON_STRUCTURE_PROTOCOL *JsonStructProtocol; EDKII_REDFISH_FEATURE_PROTOCOL *FeatureProtocol; REDFISH_SERVICE RedfishService; + RESOURCE_INFORMATION_EXCHANGE *InformationExchange; EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL ConfigHandler; - CHAR8 *CollectionPath; + EFI_STRING CollectionUri; CHAR8 *CollectionJson; REDFISH_PAYLOAD CollectionPayload; REDFISH_RESPONSE RedResponse; + EFI_STRING RedfishVersion; } REDFISH_COLLECTION_PRIVATE; =20 #define REDFISH_COLLECTION_PRIVATE_DATA_FROM_PROTOCOL(This) \ diff --git a/RedfishClientPkg/RedfishClient.fdf.inc b/RedfishClientPkg/Redf= ishClient.fdf.inc index 6292de4e81..3619d2a20f 100644 --- a/RedfishClientPkg/RedfishClient.fdf.inc +++ b/RedfishClientPkg/RedfishClient.fdf.inc @@ -15,7 +15,7 @@ INF RedfishClientPkg/RedfishETagDxe/RedfishETagDxe.inf INF RedfishClientPkg/RedfishConfigLangMapDxe/RedfishConfigLangMapDxe.inf INF RedfishClientPkg/Features/Memory/V1_7_1/Dxe/RedfishMemoryDxe.inf - INF RedfishClientPkg/Features/RedfishMemoryCollectionDxe/RedfishMemoryCo= llectionDxe.inf + INF RedfishClientPkg/Features/MemoryCollectionDxe/MemoryCollectionDxe.inf =20 !include RedfishClientPkg/RedfishJsonStructureDxe.fdf.inc # diff --git a/RedfishClientPkg/RedfishClientComponents.dsc.inc b/RedfishClie= ntPkg/RedfishClientComponents.dsc.inc index ee4602fe79..5f1aff3c4b 100644 --- a/RedfishClientPkg/RedfishClientComponents.dsc.inc +++ b/RedfishClientPkg/RedfishClientComponents.dsc.inc @@ -20,7 +20,7 @@ # Below two modules should be pulled in by build tool. # RedfishClientPkg/Features/Memory/V1_7_1/Dxe/RedfishMemoryDxe.inf - RedfishClientPkg/Features/RedfishMemoryCollectionDxe/RedfishMemoryCollec= tionDxe.inf + RedfishClientPkg/Features/MemoryCollectionDxe/MemoryCollectionDxe.inf =20 !include RedfishClientPkg/RedfishJsonStructureDxe.dsc.inc =20 --=20 2.32.0.windows.2 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#91790): https://edk2.groups.io/g/devel/message/91790 Mute This Topic: https://groups.io/mt/92596794/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-