From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0b-002e3701.pphosted.com (mx0b-002e3701.pphosted.com [148.163.143.35]) by mx.groups.io with SMTP id smtpd.web12.842.1602172532970678439 for ; Thu, 08 Oct 2020 08:55:33 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@hpe.com header.s=pps0720 header.b=cRKSC23R; spf=pass (domain: hpe.com, ip: 148.163.143.35, mailfrom: prvs=0550b2dc7a=abner.chang@hpe.com) Received: from pps.filterd (m0148664.ppops.net [127.0.0.1]) by mx0b-002e3701.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 098FaMwY022606; Thu, 8 Oct 2020 15:55:17 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hpe.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=pps0720; bh=sawL4WI5NgnHtCBXV6g9Q6tc1U6MeXKcAMhPHDjyJMk=; b=cRKSC23RrWW6NjnQKnSDoRx7h65hb6+Pyb8jUvMOPDPsyUYceiXOlasF0ZHUiI9Upxsi mvcoK289bPLIN7QBfT91BaKDwUPesxrS2W12Ugi/MkfPIGiZvzgDqEhZFLy8D2nfMWRb /3M4sOMY9K0tpPsVpjnLm91vllsuSBED2R8ml3aAyADBkWgBuuMAMVxdn661WRUb/puY aW42a+6ZycJyKV+iDT7Ble+CzFABjW9WRMjlPav1K69/E/dxmU8U4PNOFo7XCDahcVu7 L83ZJM+3s9o+lktWoWmX/Toghp1//ecYym6xD1U/znk0g6VC9DCMIlD2SgsoH+GgLQlV xg== Received: from g2t2352.austin.hpe.com (g2t2352.austin.hpe.com [15.233.44.25]) by mx0b-002e3701.pphosted.com with ESMTP id 341x4gv5ya-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 08 Oct 2020 15:55:16 +0000 Received: from g2t2360.austin.hpecorp.net (g2t2360.austin.hpecorp.net [16.196.225.135]) by g2t2352.austin.hpe.com (Postfix) with ESMTP id 498E5A1; Thu, 8 Oct 2020 15:55:16 +0000 (UTC) Received: from abner-virtual-machine.asiapacific.hpqcorp.net (abner-virtual-machine.asiapacific.hpqcorp.net [15.119.210.153]) by g2t2360.austin.hpecorp.net (Postfix) with ESMTP id 6A74F39; Thu, 8 Oct 2020 15:55:14 +0000 (UTC) From: "Abner Chang" To: devel@edk2.groups.io Cc: Michael D Kinney , Liming Gao , Zhiguang Liu , Jiaxin Wu , Siyuan Fu , Fan Wang , Jiewen Yao , Nickle Wang Subject: [RestJsonStructureDxe PATCH 1/2] MdePkg/Include: Definitions of EFI REST JSON Structure Protocol Date: Thu, 8 Oct 2020 23:10:44 +0800 Message-Id: <20201008151045.16476-2-abner.chang@hpe.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201008151045.16476-1-abner.chang@hpe.com> References: <20201008151045.16476-1-abner.chang@hpe.com> X-HPE-SCL: -1 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.235,18.0.687 definitions=2020-10-08_11:2020-10-08,2020-10-08 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 bulkscore=0 adultscore=0 clxscore=1015 spamscore=0 phishscore=0 priorityscore=1501 malwarescore=0 suspectscore=2 mlxlogscore=999 mlxscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2006250000 definitions=main-2010080118 Add definitions of EFI REST JSON Structure according to UEFI spec 2.8 Section 29.7.3 EFI REST JSON Resource to C Structure Converter. Signed-off-by: Abner Chang Cc: Michael D Kinney Cc: Liming Gao Cc: Zhiguang Liu Cc: Jiaxin Wu Cc: Siyuan Fu Cc: Fan Wang Cc: Jiewen Yao Cc: Nickle Wang --- MdePkg/Include/Protocol/RestJsonStructure.h | 160 ++++++++++++++++++++ MdePkg/MdePkg.dec | 6 + 2 files changed, 166 insertions(+) create mode 100644 MdePkg/Include/Protocol/RestJsonStructure.h diff --git a/MdePkg/Include/Protocol/RestJsonStructure.h b/MdePkg/Include/Protocol/RestJsonStructure.h new file mode 100644 index 0000000000..5e4fef8cff --- /dev/null +++ b/MdePkg/Include/Protocol/RestJsonStructure.h @@ -0,0 +1,160 @@ +/** @file + This file defines the EFI REST JSON Structure Protocol interface. + + (C) Copyright 2020 Hewlett Packard Enterprise Development LP
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef EFI_REST_JSON_STRUCTURE_PROTOCOL_H_ +#define EFI_REST_JSON_STRUCTURE_PROTOCOL_H_ + +#include + +// +// GUID definitions +// +#define EFI_REST_JSON_STRUCTURE_PROTOCOL_GUID \ + { \ + 0xa9a048f6, 0x48a0, 0x4714, {0xb7, 0xda, 0xa9, 0xad,0x87, 0xd4, 0xda, 0xc9 } \ + } + +typedef struct _EFI_REST_JSON_STRUCTURE_PROTOCOL EFI_REST_JSON_STRUCTURE_PROTOCOL; +typedef CHAR8 * EFI_REST_JSON_RESOURCE_TYPE_DATATYPE; +typedef CHAR8 * EFI_REST_RESOURCE_RELATIVE_PATH; + +/** Structure defintions of resource name space. + * + * The fields declared in this structure define the + * name and revision of payload delievered throught + * REST API. +**/ +typedef struct _EFI_REST_JSON_RESOURCE_TYPE_NAMESPACE { + CHAR8 *ResourceTypeName; ///< Resource type name + CHAR8 *MajorVersion; ///< Resource major version + CHAR8 *MinorVersion; ///< Resource minor version + CHAR8 *ErrataVersion; ///< Resource errata version +} EFI_REST_JSON_RESOURCE_TYPE_NAMESPACE; + +/** REST resource type identifier + * + * REST resource type consists of name space and data type. +**/ +typedef struct _EFI_REST_JSON_RESOURCE_TYPE_IDENTIFIER { + EFI_REST_JSON_RESOURCE_TYPE_NAMESPACE NameSpace; ///< Namespace of this resource type. + EFI_REST_JSON_RESOURCE_TYPE_DATATYPE DataType; ///< Name of data type declared in this + ///< resource type. +} EFI_REST_JSON_RESOURCE_TYPE_IDENTIFIER; + +/** List of JSON to C structure conversions which this convertor supports. + * +**/ +typedef struct _EFI_REST_JSON_STRUCTURE_SUPPORTED { + LIST_ENTRY NextSupportedRsrcInterp; ///< Linklist to next supported conversion. + EFI_REST_JSON_RESOURCE_TYPE_IDENTIFIER RestResourceInterp; ///< JSON resource type this convertor supports. +} EFI_REST_JSON_STRUCTURE_SUPPORTED; + +/** The header file of JSON C structure + * +**/ +typedef struct _EFI_REST_JSON_STRUCTURE_HEADER { + EFI_REST_JSON_RESOURCE_TYPE_IDENTIFIER JsonRsrcIdentifier; ///< Resource identifier which use to + ///< choice the proper interpreter. + ///< Follow by a pointer points to JSON structure, the content in the + ///< JSON structure is implementation-specific according to converter producer. + /// + VOID *JsonStructurePointer; +} EFI_REST_JSON_STRUCTURE_HEADER; + +/** + JSON-IN C Structure-OUT function. Convert the given REST JSON resource into structure. + + @param[in] This This is the EFI_REST_JSON_STRUCTURE_PROTOCOL instance. + @param[in] JsonRsrcIdentifier This indicates the resource type and version is given in + ResourceJsonText. + @param[in] ResourceJsonText REST JSON resource in text format. + @param[out] JsonStructure Pointer to receive the pointer to EFI_REST_JSON_STRUCTURE_HEADER + + @retval EFI_SUCCESS + @retval Others +--*/ +typedef +EFI_STATUS +(EFIAPI *EFI_REST_JSON_STRUCTURE_TO_STRUCTURE)( + IN EFI_REST_JSON_STRUCTURE_PROTOCOL *This, + IN EFI_REST_JSON_RESOURCE_TYPE_IDENTIFIER *JsonRsrcIdentifier OPTIONAL, + IN CHAR8 *ResourceJsonText, + OUT EFI_REST_JSON_STRUCTURE_HEADER **JsonStructure +); + +/** + Convert the given REST JSON structure into JSON text. + + @param[in] This This is the EFI_REST_JSON_STRUCTURE_PROTOCOL instance. + @param[in] JsonStructureHeader The point to EFI_REST_JSON_STRUCTURE_HEADER structure. + @param[out] ResourceJsonText Pointer to receive REST JSON resource in text format. + + @retval EFI_SUCCESS + @retval Others + +--*/ +typedef +EFI_STATUS +(EFIAPI *EFI_REST_JSON_STRUCTURE_TO_JSON)( + IN EFI_REST_JSON_STRUCTURE_PROTOCOL *This, + IN EFI_REST_JSON_STRUCTURE_HEADER *JsonStructureHeader, + OUT CHAR8 **ResourceJsonText +); + +/** + This function destroys the REST JSON structure. + + @param[in] This This is the EFI_REST_JSON_STRUCTURE_PROTOCOL instance. + @param[in] JsonStructureHeader JSON structure to destroy. + + @retval EFI_SUCCESS + @retval Others + +--*/ +typedef +EFI_STATUS +(EFIAPI *EFI_REST_JSON_STRUCTURE_DESTORY_STRUCTURE)( + IN EFI_REST_JSON_STRUCTURE_PROTOCOL *This, + IN EFI_REST_JSON_STRUCTURE_HEADER *JsonStructureHeader +); +/** + This function provides REST JSON resource to structure converter registration. + + @param[in] This This is the EFI_REST_JSON_STRUCTURE_PROTOCOL instance. + @param[in] JsonStructureSupported The type and version of REST JSON resource which this converter + supports. + @param[in] ToStructure The function to convert REST JSON resource to structure. + @param[in] ToJson The function to convert REST JSON structure to JSON in text format. + @param[out] DestroyStructure Destroy REST JSON structure returned in ToStructure() function. + + @retval EFI_SUCCESS Register successfully. + @retval Others Fail to register. + +--*/ +typedef +EFI_STATUS +(EFIAPI *EFI_REST_JSON_STRUCTURE_REGISTER)( + IN EFI_REST_JSON_STRUCTURE_PROTOCOL *This, + IN EFI_REST_JSON_STRUCTURE_SUPPORTED *JsonStructureSupported, + IN EFI_REST_JSON_STRUCTURE_TO_STRUCTURE ToStructure, + IN EFI_REST_JSON_STRUCTURE_TO_JSON ToJson, + IN EFI_REST_JSON_STRUCTURE_DESTORY_STRUCTURE DestroyStructure +); + +/** EFI REST JSON to C structure protocol definition. + * +**/ +typedef struct _EFI_REST_JSON_STRUCTURE_PROTOCOL { + EFI_REST_JSON_STRUCTURE_REGISTER Register; ///< Register JSON to C structure convertor + EFI_REST_JSON_STRUCTURE_TO_STRUCTURE ToStructure; ///< The function to convert JSON to C structure + EFI_REST_JSON_STRUCTURE_TO_JSON ToJson; ///< The function to convert C structure to JSON + EFI_REST_JSON_STRUCTURE_DESTORY_STRUCTURE DestoryStructure; ///< Destory C structure. +} EFI_REST_JSON_STRUCTURE_PROTOCOL; + +#endif diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec index 812be75fb3..0943816825 100644 --- a/MdePkg/MdePkg.dec +++ b/MdePkg/MdePkg.dec @@ -1848,6 +1848,12 @@ ## Include/Protocol/NvdimmLabel.h gEfiNvdimmLabelProtocolGuid = { 0xd40b6b80, 0x97d5, 0x4282, { 0xbb, 0x1d, 0x22, 0x3a, 0x16, 0x91, 0x80, 0x58 }} + # + # Protocols defined in UEFI2.8 + # + ## Include/Protocol/RestJsonStructure.h + gEfiRestJsonStructureProtocolGuid = { 0xa9a048f6, 0x48a0, 0x4714, {0xb7, 0xda, 0xa9, 0xad,0x87, 0xd4, 0xda, 0xc9 }} + # # Protocols defined in Shell2.0 # -- 2.17.1