[staging/edk2-redfish-client PATCH 1/2] RedfishClientPkg: Initial commit


Abner Chang
 

Initial commit of architecture diagrams and Readme.md

Signed-off-by: Abner Chang <abner.chang@...>
Cc: Nickle Wang <nickle.wang@...>
Cc: Liming Gao <gaoliming@...>
Cc: Andrew Fish <afish@...>
Cc: Leif Lindholm <leif@...>
Cc: Michael D Kinney <michael.d.kinney@...>
---
RedfishClientPkg/Readme.md | 180 +++++
.../Media/RedfishClientDriverStack.svg | 680 ++++++++++++++++++
2 files changed, 860 insertions(+)
create mode 100644 RedfishClientPkg/Readme.md
create mode 100644 RedfishClientPkg/Documents/Media/RedfishClientDriverStack.svg

diff --git a/RedfishClientPkg/Readme.md b/RedfishClientPkg/Readme.md
new file mode 100644
index 0000000000..ce8c2f9409
--- /dev/null
+++ b/RedfishClientPkg/Readme.md
@@ -0,0 +1,180 @@
+# UEFI Redfish Client EDK2 Implementation
+
+## Introduction
+UEFI Redfish Client EDK2 solution is implemented base on
+[*EDK2 Redfish Foundation*](https://github.com/tianocore/edk2/blob/master/RedfishPkg/Readme.md),
+the implementation utilizes the EFI protocols provided by EDK2 Redfish
+Foundation to communicate with the Redfish service for creating, consuming, and
+updating the Redfish properties which are managed by firmware. This solution
+requests the instance of **EFI REST EX Protocol** through EFI Redfish Discover
+Protocol and interacts with Redfish service using **EFI REST EX Protocol** later
+on. The essential part of this implementation is to map the EDK2 HII options to
+the corresponding Redfish properties that are already defined in the standard
+Redfish schemas published by
+[*DMTF Redfish working group*](https://www.dmtf.org/standards/redfish).
+The advantage of this design is to strengthen the interoperability among the
+servers produced by different OEMs when configuring the platform through Redfish
+service. Using the properties defined in Redfish standard schema for configuring
+platform reduces the overhead of Redfish client tools to have different
+implementations in order to compliant with OEM servers. The solution also
+reduces OEM-defined proprietary BIOS Attributes that lead to the divergence of
+platform configuration namings in Redfish BIOS Attribute Registry, however,
+those different namings refer to the same platform functionality.
+
+## The Scope of UEFI Redfish Client EDK2 Implementation
+- Platform Configurable settings
+
+This is the first stage of UEFI Redfish Client EDK2 Implementation. Associate
+Redfish property with HII option.
+
+- Provisioning of Firmware Managed Platform Redfish Resource
+
+The current design of UEFI Redfish Client EDK2 Implementation can already
+support the provisioning of firmware-owned platform Redfish resource, however,
+this requires addtional support on edk2 HII. Therefore, provisioning of
+firmware managed platform Redfish resource would be the second stage.
+
+Below are the block diagrams of UEFI Redfish Client EDK2 Implementation.
+
+## <a name="[0]">EDK2 Redfish Client Implementation Diagrams</a>
+![UEFI Redfish Client Implementation](https://github.com/changab/edk2-staging/blob/edk2-redfish-client/RedfishClientPkg/Documents/Media/RedfishClientDriverStack.svg?raw=true)
+
+## EFI EDK2 Redfish Client Framework
+The functionality of each block in the diagrams are described in belwo sections,
+
+### EDK2 Redfish Foundation ***[[1]](#[0])***
+EDK2 Redfish Redfish Foundation provides the facilities of communicating with
+Redfish service. Such as the discovery of Redfish service, the credential to access
+Redfish service, *EFI REST EX Protocol* instance which is the transport layer to
+Redfish service, and so on. Please refer to
+[*EDK2 Redfish Foundation*](https://github.com/tianocore/edk2/blob/master/RedfishPkg/Readme.md).
+
+### Redfish Profile Simulator ***[[2]](#[0])***
+Redfish Profile Simulator is an
+[*open source project*](https://github.com/DMTF/Redfish-Profile-Simulator) on DMTF
+GitHub, which simulates the HTTP request methods (POST, PATCH, PUT, GET) on Redfish
+resource maintained by Redfish Profile Simulator. EDK2 open source uses this
+simulator for the use case when Redfish service has not been set up on the platform,
+or for the quick Redfish firmware feature development. We clone this project under
+RedfishClientPkg and maintain it by edk2 because this project has currently been
+using and updating rarely. That is easier for edk2 to add features to the simulator
+or modify the simulator to align with edk2 requirement on Redfish service, such as
+ETAG and HTTP POST support. <br>
+Another open source project of Redfish simulator is
+[*Redfish Interface Emulator*](https://github.com/DMTF/Redfish-Interface-Emulator),
+however, we don't pay much attention to this project because we have been dedicating
+to Redfish Profile Simulator since we started the UEFI Redfish EDK2 project.
+
+### EDK2 Redfish JSON Schema to C Structure Convertor ***[[3]](#[0])***
+This is the script auto-generated EDK2 drivers and libraries that provide the Redfish
+schema naming based JSON to C structure and vise versa converters. C structure is
+another representation of Redfish properties other than JSON and CSDL(XML). The higher
+layer Redfish client application can deal with C structure instead of using JSON
+library to manipulate Redfish properties. The script
+[*Redfish Schema C Struct Generator*](https://github.com/DMTF/Redfish-Schema-C-Struct-Generator)
+is still a private project on DMTF GitHub. Below is the reference of script
+auto-generated [*Redfish JSON C Struct Converter Lib*](https://github.com/changab/Redfish-JSON-C-Struct-Converter-Lib)
+libraries. The converters generated by the script are followed
+**EFI REST JSON Structure Protocol** defined in UEFI spec 2.8, section 29.7.3.
+
+### EDK2 Redfish Non-Collection ***[[4]](#[0])*** and Collection ***[[5]](#[0])*** Feature Drivers
+EDK2 Redfish feature driver is an intermediary driver that sits between **JSON Schema
+to C Structure converters** and **EFI Platform Configuration to Redfish Protocol**. The
+Redfish feature driver gets and sets the platform configuration and incorporates it with
+Redfish JSON schema C structure to manipulate Redfish JSON resources. Then applies the
+settings from Redfish service to platform configurations, or vise versa to update platform
+configurations to Redfish service. Both EDK2 Redfish Non-Collection and Collection Feature
+drivers are script auto-generated base on Redfish schema naming. The EDK2 Redfish
+Non-Collection feature driver manages the resource of specific Resdifsh resource type,
+while the EDK2 Redfish Collection feature driver manages the members which have the same
+resource type in collection resource (e.g the ComputerSystem resource and
+ComputerSystemCollection resource).
+
+### EFI Platform Config to Redfish Protocol ***[[6]](#[0])***
+EFI Platform Config to Redfish Protocol is an abstract driver that abstracts the platform
+configuration format and storage from EDK2 Redfish Feature driver. This protocol provides
+the interfaces to get and set platform configuration that format and the storage to store
+configuration are agnostic to the feature driver. The platform can provide its own EFI
+Platform Config to Redfish driver to access platform-specific configuration format and
+storage. On EDK2 open source, EFI Platform Config to Redfish Protocol accesses the
+platform configuration in EDK2 HII defined format.
+
+Below is the prototype of **EFI_PLATFORM_CONFIG_TO_REDFISH_PROTOCOL**,
+
+```C
+struct _EDKII_PLATFORM_CONFIG_TO_REDFISH_PROTOCOL {
+ EDKII_REDFISH_PLATFORM_CONFIG_GET_VALUE GetValue;
+ EDKII_REDFISH_PLATFORM_CONFIG_SET_VALUE SetValue;
+ EDKII_REDFISH_PLATFORM_CONFIG_GET_CONFIG_LANG GetConfigureLang;
+ EDKII_REDFISH_PLATFORM_CONFIG_GET_SUPPORTED_SCHEMA GetSupportedSchema;
+};
+```
+
+### Other instances of EFI Platform Config to Redfish Protocol ***[[7]](#[0])***
+For those Non-EDK2 HII-based platform configuration formats, the driver instance can
+provide its own implementation to get or set the platform configurations.
+
+### EDK2 HII VFR Form ***[[8]](#[0])***
+According to **UEFI spec 2.9 section 35.6 Form Browser Protocol**,
+**EFI_HII_REST_STYLE_FORMSET_GUID** is used on HII form to indicate that HII options
+declared in this form intend to interact with the REST architectural style. On edk2
+open source, the REST architectural style refers to the Redfish service. Besides
+**EFI_HII_REST_STYLE_FORMSET_GUID** is defined in the form scope,
+**EFI_IFR_FLAG_REST_STYLE** can be assigned to the HII options that indicate those
+options intend to interact with the REST service.
+
+### EDK2 HII UNI file ***[[9]](#[0])***
+x-uefi-redfish Configure Language is used in UNI file to associate HII option with
+the particular Redfish property. The Hii options interact with EDK2 Redfish Feature
+driver if the string of HII option is assigned with x-uefi-redfish Language as
+in below,
+
+```C
+x-uefi-redfish-$(NAMESPACE)
+where $(NAMESPACE) is the combination of Redfish ResourceTypeName and schema version.
+```
+For example, if the HII option is mapped to the property in Processor.v1_0_0.
+The x-uefi-redfish configure language is declared as below,
+```C
+x-uefi-redfish-Processor.v1_0_0
+```
+#### x-uefi-redfish Configure Language format:
+- The string declared with x-uefi-redfish configure language is a path to the property
+in Redfish resource
+- The root of path is the Redfish resource type indicated in x-uefi-redfish configure
+language
+- The path is relative to root of Redfish resource type, not related to Redfish service
+- root.
+
+#### Examples,
+```C
+Properties:
+
+#string STR_BOOT_SOURCE_OVERRIDE_ENABLED_PROMPT #language x_uefi_redfish_ComputerSystem.v1_0_0 "/Boot/BootSourceOverrideEnabled"
+#string STR_BOOT_SOURCE_OVERRIDE_MODE_PROMPT #language x_uefi_redfish_ComputerSystem.v1_0_0 "/Boot/BootSourceOverrideMode"
+#string STR_BOOT_SOURCE_OVERRIDE_TARGET_PROMPT #language x_uefi_redfish_ComputerSystem.v1_0_0 "/Boot/BootSourceOverrideTarget"
+```
+```C
+Properties in array object [NUM]:
+
+#string STR_BOOT_ORDER_1_PROMPT #language x_uefi_redfish_ComputerSystem.v1_11_0 "/Boot/BootOrder/[1]/Boot0001"
+#string STR_BOOT_ORDER_2_PROMPT #language x_uefi_redfish_ComputerSystem.v1_11_0 "/Boot/BootOrder/[2]/Boot0002"
+#string STR_BOOT_ORDER_3_PROMPT #language x_uefi_redfish_ComputerSystem.v1_11_0 "/Boot/BootOrder/[3]/Boot0003"
+```
+```C
+Properties in collection object {NUM}:
+
+#string STR_MEMORY_1_BASE_MODULE_TYPE_PROMPT #language x_uefi_redfish_Memory.v1_7_1 "/Memory/{1}/BaseModuleType"
+#string STR_MEMORY_2_BASE_MODULE_TYPE_PROMPT #language x_uefi_redfish_Memory.v1_7_1 "/Memory/{2}/BaseModuleType"
+#string STR_MEMORY_3_BASE_MODULE_TYPE_PROMPT #language x_uefi_redfish_Memory.v1_7_1 "/Memory/{3}/BaseModuleType"
+```
+
+### EDK2 Build Tool ***[[10]](#[0])***
+EDK2 Build is responsible to pull the necessary EDK2 Redfish JSON Schema to C Structure
+Convertors and EDK2 Redfish Feature drivers into edk2 build process according to the
+x-uefi-Redfish config language used in the HII VFR forms.
+
+## The Contributors
+Chang, Abner <abner.chang@...>\
+Wang, Nickle <nickle.wang@...>\
+Chen, Aaron <aaron.chen@...>
diff --git a/RedfishClientPkg/Documents/Media/RedfishClientDriverStack.svg b/RedfishClientPkg/Documents/Media/RedfishClientDriverStack.svg
new file mode 100644
index 0000000000..eb59eb9992
--- /dev/null
+++ b/RedfishClientPkg/Documents/Media/RedfishClientDriverStack.svg
@@ -0,0 +1,680 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by Microsoft Visio, SVG Export RedfishClientDriverStack.svg Page-2 -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
+ width="12.1281in" height="9.93872in" viewBox="0 0 873.222 715.588" xml:space="preserve" color-interpolation-filters="sRGB"
+ class="st68">
+ <style type="text/css">
+ <![CDATA[
+ .st1 {fill:#ffffff;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+ .st2 {fill:#ebf1df;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st3 {fill:#ff1a1a;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st4 {fill:#ffffff;font-family:Calibri;font-size:1.00001em;font-weight:bold}
+ .st5 {font-size:1em}
+ .st6 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+ .st7 {fill:#000000;font-family:Calibri;font-size:1.00001em;font-weight:bold}
+ .st8 {fill:#dbeef3;stroke:#d8d8d8;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st9 {fill:#ffffff;font-family:Calibri;font-size:1.08334em;font-weight:bold}
+ .st10 {visibility:visible}
+ .st11 {fill:none;filter:url(#filter_3.3333334922791);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0.4}
+ .st12 {fill:none;stroke:#bfbfbf;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+ .st13 {fill:#000000;font-family:Arial;font-size:1.99999em;font-style:italic;font-weight:bold}
+ .st14 {marker-end:url(#mrkr2-45);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.9}
+ .st15 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.42986425339367}
+ .st16 {fill:#000000;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+ .st17 {fill:#ffffff;font-family:Arial;font-size:1.33333em;font-weight:bold}
+ .st18 {fill:#ffffff;stroke:#595959;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st19 {fill:#7f7f7f;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st20 {fill:#ffffff;font-family:Calibri;font-size:1.08334em}
+ .st21 {fill:#000000;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+ .st22 {fill:#000000;font-family:Calibri;font-size:0.833336em;font-weight:bold}
+ .st23 {marker-start:url(#mrkr10-112);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.25}
+ .st24 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.40983606557377}
+ .st25 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
+ .st26 {fill:#000000;fill-opacity:0.4;filter:url(#filter_3.3333334922791);stroke:#000000;stroke-dasharray:10.5,7.5;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0.4}
+ .st27 {fill:#0070c0;stroke:#003f6c;stroke-dasharray:10.5,7.5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st28 {fill:#000000;font-family:Calibri;font-size:1.00001em;font-style:italic;font-weight:bold}
+ .st29 {fill:#ffffff;stroke:#000000;stroke-dasharray:1.68,1.2;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+ .st30 {fill:#000000;font-family:Calibri;font-size:0.833336em}
+ .st31 {fill:#ffffff;stroke:#000000;stroke-dasharray:3.5,2.5;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.5}
+ .st32 {stroke:#7f7f7f;stroke-linecap:round;stroke-linejoin:round;stroke-width:4.5}
+ .st33 {fill:#000000;fill-opacity:0.38;filter:url(#filter_3.3333334922791);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0.38}
+ .st34 {fill:#000000;fill-opacity:0.38;stroke:#000000;stroke-opacity:0.38;stroke-width:0.22935779816514}
+ .st35 {fill:#f2f2f2;stroke:#7f7f7f;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+ .st36 {fill:#7f7f7f;fill-opacity:1;stroke:#7f7f7f;stroke-opacity:1;stroke-width:0.22935779816514}
+ .st37 {fill:#d8d8d8;stroke:#7f7f7f;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+ .st38 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+ .st39 {fill:#000000;fill-opacity:0.4;filter:url(#filter_3.3333334922791);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0.4}
+ .st40 {fill:#0070c0;stroke:#003f6c;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st41 {fill:#ffffff;stroke:#000000;stroke-dasharray:9.5,2.5,3.5,2.5;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.5}
+ .st42 {fill:#ffffff;stroke:#000000;stroke-dasharray:3.5,2.5,3.5,2.5,0,2.5;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.5}
+ .st43 {marker-end:url(#mrkr4-212);marker-start:url(#mrkr4-210);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.25}
+ .st44 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.47169811320755}
+ .st45 {fill:#ffffff;stroke:#7f7f7f;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
+ .st46 {fill:#000000;font-family:Calibri;font-size:1.16666em;font-style:italic;font-weight:bold}
+ .st47 {font-family:Arial;font-size:0.571431em;font-style:normal;font-weight:normal}
+ .st48 {font-family:Arial;font-size:0.571431em;font-style:normal}
+ .st49 {fill:#ea700d;font-family:Arial;font-size:0.571431em;font-style:normal}
+ .st50 {fill:#ffffff;stroke:#7f7f7f;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+ .st51 {fill:#d8d8d8;font-family:Calibri;font-size:0.833336em;font-style:italic;font-weight:bold}
+ .st52 {font-size:1.20001em;font-style:normal;font-weight:normal}
+ .st53 {font-size:1em;font-style:normal;font-weight:normal}
+ .st54 {fill:#f59d56;font-size:1em;font-style:normal;font-weight:normal}
+ .st55 {marker-end:url(#mrkr2-350);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2}
+ .st56 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.44247787610619}
+ .st57 {marker-end:url(#mrkr2-383);marker-start:url(#mrkr2-381);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+ .st58 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.22935779816514}
+ .st59 {fill:#000000;font-family:Calibri;font-size:0.75em;font-style:italic;font-weight:bold}
+ .st60 {fill:#000000;font-family:Calibri;font-size:0.75em;font-weight:bold}
+ .st61 {fill:#0070c0;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st62 {fill:#595959;stroke:none;stroke-linecap:butt;stroke-width:0.75}
+ .st63 {marker-start:url(#mrkr4-405);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.25}
+ .st64 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.3315649867374}
+ .st65 {marker-end:url(#mrkr4-411);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.25}
+ .st66 {marker-end:url(#mrkr10-430);marker-start:url(#mrkr10-112);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.25}
+ .st67 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.25}
+ .st68 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+ ]]>
+ </style>
+
+ <defs id="Markers">
+ <g id="lend2">
+ <path d="M 1 1 L 0 0 L 1 -1 L 1 1 " style="stroke:none"/>
+ </g>
+ <marker id="mrkr2-45" class="st15" refX="-2.1368421052632" orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend2" transform="scale(-2.3263157894737,-2.3263157894737) "/>
+ </marker>
+ <g id="lend10">
+ <path
+ d="M 0 0.75 C -0.414214 0.75 -0.75 0.414214 -0.75 0 -0.75 -0.414214 -0.414214 -0.75 0 -0.75 0.414214 -0.75 0.75 -0.414214 0.75 0 0.75 0.414214 0.414214 0.75 0 0.75 Z "
+ style="stroke:none"/>
+ </g>
+ <marker id="mrkr10-112" class="st24" refX="1.542" orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend10" transform="scale(2.44) "/>
+ </marker>
+ <g id="lend42">
+ <path
+ d="M 0 0.75 C -0.414214 0.75 -0.75 0.414214 -0.75 0 -0.75 -0.414214 -0.414214 -0.75 0 -0.75 0.414214 -0.75 0.75 -0.414214 0.75 0 0.75 0.414214 0.414214 0.75 0 0.75 Z "
+ style="stroke:none"/>
+ </g>
+ <marker id="mrkr42-163" class="st34" refX="3.27" orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend42" transform="scale(4.36) "/>
+ </marker>
+ <marker id="mrkr42-167" class="st36" refX="3.27" orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend42" transform="scale(4.36) "/>
+ </marker>
+ <g id="lend4">
+ <path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"/>
+ </g>
+ <marker id="mrkr4-210" class="st44" refX="4.08" orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend4" transform="scale(2.12) "/>
+ </marker>
+ <marker id="mrkr4-212" class="st44" refX="-4.08" orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend4" transform="scale(-2.12,-2.12) "/>
+ </marker>
+ <marker id="mrkr2-350" class="st56" refX="-2.08" orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend2" transform="scale(-2.26,-2.26) "/>
+ </marker>
+ <marker id="mrkr2-381" class="st58" refX="3.88" orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend2" transform="scale(4.36) "/>
+ </marker>
+ <marker id="mrkr2-383" class="st58" refX="-3.88" orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend2" transform="scale(-4.36,-4.36) "/>
+ </marker>
+ <marker id="mrkr4-405" class="st64" refX="5.744" orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend4" transform="scale(3.016) "/>
+ </marker>
+ <marker id="mrkr4-411" class="st64" refX="-6.032" orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend4" transform="scale(-3.016,-3.016) "/>
+ </marker>
+ <marker id="mrkr10-430" class="st24" refX="-1.542" orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend10" transform="scale(-2.44,-2.44) "/>
+ </marker>
+ </defs>
+ <defs id="Filters">
+ <filter id="filter_3.3333334922791">
+ <feGaussianBlur stdDeviation="3.3333334922791"/>
+ </filter>
+ </defs>
+ <g>
+ <title>VBackground-1</title>
+ <g id="shape1-1">
+ <title>Solid</title>
+ <rect x="0" y="0" width="873.222" height="715.588" class="st1"/>
+ </g>
+ </g>
+ <g>
+ <title>Page-2</title>
+ <g id="shape52-3" transform="translate(336.222,-197.713)">
+ <title>Rectangle.52</title>
+ <rect x="0" y="598.588" width="495" height="117" class="st2"/>
+ </g>
+ <g id="group5-5" transform="translate(772.722,-60.4625)">
+ <title>Can</title>
+ <desc>Redfish Service</desc>
+ <g id="shape6-6">
+ <title>Sheet.6</title>
+ <path d="M0 704.34 A26.4375 11.25 -180 1 0 52.88 704.34 L52.88 663.84 L0 663.84 L0 704.34 Z" class="st3"/>
+ </g>
+ <g id="shape5-8">
+ <ellipse cx="26.4375" cy="663.838" rx="26.4375" ry="11.25" class="st3"/>
+ <text x="7.83" y="693.59" class="st4">Redfish <tspan x="8.6" dy="1.2em" class="st5">Service</tspan></text> </g>
+ </g>
+ <g id="shape8-12" transform="translate(746.847,-24.4625)">
+ <title>Sheet.8</title>
+ <desc>Redfish Profile Simulator On Network</desc>
+ <rect x="0" y="688.588" width="108" height="27" class="st6"/>
+ <text x="17.62" y="693.09" class="st7">Redfish Profile <tspan x="21.08" dy="1em" class="st5">Simulator On </tspan><tspan
+ x="32.24" dy="1em" class="st5">Network</tspan></text> </g>
+ <g id="shape10-17" transform="translate(408.222,-82.9625)">
+ <title>Sheet.10</title>
+ <desc>EFI REST EX</desc>
+ <rect x="0" y="679.588" width="261" height="36" class="st8"/>
+ <text x="99.8" y="700.84" class="st9">EFI REST EX </text> </g>
+ <g id="shape12-20" transform="translate(57.2224,-197.713)">
+ <title>Rectangle</title>
+ <rect x="0" y="598.588" width="234" height="117" class="st2"/>
+ </g>
+ <g id="shape13-22" transform="translate(30.2224,-24.4625)">
+ <title>Rounded Rectangle.76</title>
+ <g id="shadow13-23" transform="matrix(1.02,0,0,1.02,-6.84,-13.2318)" class="st10">
+ <path d="M9 715.59 L675 715.59 A8.99985 8.99985 -180 0 0 684 706.59 L684 616.59 A8.99985 8.99985 -180 0 0 675 607.59
+ L9 607.59 A8.99985 8.99985 -180 0 0 0 616.59 L0 706.59 A8.99985 8.99985 -180 0 0 9 715.59 Z"
+ class="st11"/>
+ </g>
+ <path d="M9 715.59 L675 715.59 A8.99985 8.99985 -180 0 0 684 706.59 L684 616.59 A8.99985 8.99985 -180 0 0 675 607.59
+ L9 607.59 A8.99985 8.99985 -180 0 0 0 616.59 L0 706.59 A8.99985 8.99985 -180 0 0 9 715.59 Z" class="st12"/>
+ </g>
+ <g id="shape16-27" transform="translate(75.2224,-82.9625)">
+ <title>Sheet.16</title>
+ <desc>EFI REST JSON to C Structure</desc>
+ <rect x="0" y="679.588" width="261" height="36" class="st8"/>
+ <text x="53.89" y="700.84" class="st9">EFI REST JSON to C Structure</text> </g>
+ <g id="shape17-30" transform="translate(408.222,-37.9625)">
+ <title>Sheet.17</title>
+ <desc>EFI Network Stack</desc>
+ <rect x="0" y="679.588" width="261" height="36" class="st8"/>
+ <text x="81.72" y="700.84" class="st9">EFI Network Stack</text> </g>
+ <g id="shape18-33" transform="translate(75.2224,-37.9625)">
+ <title>Sheet.18</title>
+ <desc>EFI Redfish Discover Protocl</desc>
+ <rect x="0" y="679.588" width="261" height="36" class="st8"/>
+ <text x="55.56" y="700.84" class="st9">EFI Redfish Discover Protocl</text> </g>
+ <g id="shape19-36" transform="translate(291.222,-51.4625)">
+ <title>Sheet.19</title>
+ <desc>EDKII Redfish Foundation</desc>
+ <rect x="0" y="670.588" width="184" height="45" class="st6"/>
+ <text x="12.66" y="685.89" class="st13">EDKII Redfish <tspan x="26.69" dy="1.2em" class="st5">Foundation</tspan></text> </g>
+ <g id="shape20-40" transform="translate(904.308,1335.5) rotate(-19.179) scale(1,-1)">
+ <title>Curve connect 1</title>
+ <path d="M0 715.59 A42.4531 42.4531 0 0 1 54.79 715.59 A42.4531 42.4531 -180 0 0 106.06 718.26 L106.35 718.04"
+ class="st14"/>
+ </g>
+ <g id="shape21-46" transform="translate(18.9724,-139.213)">
+ <title>Sheet.21</title>
+ <desc>EDKII Redfish Client</desc>
+ <rect x="0" y="211.588" width="24.75" height="504" class="st16"/>
+ <text x="-10.85" y="-540.93" writing-mode="tb-rl" transform="rotate(180)" class="st17">EDKII Redfish Client</text> </g>
+ <g id="shape24-49" transform="translate(111.222,-253.963)">
+ <title>Sheet.24</title>
+ <rect x="0" y="670.588" width="153" height="45" class="st18"/>
+ </g>
+ <g id="shape25-51" transform="translate(84.2224,-240.463)">
+ <title>Sheet.25</title>
+ <rect x="0" y="670.588" width="153" height="45" class="st18"/>
+ </g>
+ <g id="shape26-53" transform="translate(75.2224,-226.963)">
+ <title>Sheet.26</title>
+ <desc>Script-generated Redfish JSON schema to C Structure convertor</desc>
+ <rect x="0" y="670.588" width="153" height="45" class="st19"/>
+ <text x="11.2" y="683.34" class="st20">Script-generated Redfish <tspan x="29.22" dy="1em" class="st5">JSON schema to C </tspan><tspan
+ x="24.45" dy="1em" class="st5">Structure convertor</tspan></text> </g>
+ <g id="shape28-58" transform="translate(241.722,-267.463)">
+ <title>Sheet.28</title>
+ <ellipse cx="1.6875" cy="713.9" rx="1.6875" ry="1.6875" class="st21"/>
+ </g>
+ <g id="shape29-60" transform="translate(245.66,-272.525)">
+ <title>Sheet.29</title>
+ <ellipse cx="1.6875" cy="713.9" rx="1.6875" ry="1.6875" class="st21"/>
+ </g>
+ <g id="shape30-62" transform="translate(250.16,-277.588)">
+ <title>Sheet.30</title>
+ <ellipse cx="1.6875" cy="713.9" rx="1.6875" ry="1.6875" class="st21"/>
+ </g>
+ <g id="shape31-64" transform="translate(178.722,-204.463)">
+ <title>Sheet.31</title>
+ <desc>ComputerSystem</desc>
+ <rect x="0" y="688.588" width="108" height="27" class="st6"/>
+ <text x="18.16" y="704.59" class="st22">ComputerSystem</text> </g>
+ <g id="shape32-67" transform="translate(201.222,-220.213)">
+ <title>Sheet.32</title>
+ <desc>BootOption</desc>
+ <rect x="0" y="688.588" width="108" height="27" class="st6"/>
+ <text x="29.69" y="704.59" class="st22">BootOption</text> </g>
+ <g id="shape33-70" transform="translate(210.222,-233.713)">
+ <title>Sheet.33</title>
+ <desc>Memory</desc>
+ <rect x="0" y="688.588" width="108" height="27" class="st6"/>
+ <text x="36.21" y="704.59" class="st22">Memory</text> </g>
+ <g id="shape34-73" transform="translate(385.722,-247.213)">
+ <title>Sheet.34</title>
+ <rect x="0" y="670.588" width="153" height="45" class="st18"/>
+ </g>
+ <g id="shape35-75" transform="translate(358.722,-233.713)">
+ <title>Sheet.35</title>
+ <rect x="0" y="670.588" width="153" height="45" class="st18"/>
+ </g>
+ <g id="shape36-77" transform="translate(349.722,-220.213)">
+ <title>Sheet.36</title>
+ <desc>Script-generated EDK2 Redfish Feature Driver</desc>
+ <rect x="0" y="670.588" width="153" height="45" class="st19"/>
+ <text x="16.96" y="689.84" class="st20">Script-generated EDK2 <tspan x="17.33" dy="1em" class="st5">Redfish Feature Driver</tspan></text> </g>
+ <g id="shape40-81" transform="translate(453.222,-197.713)">
+ <title>Sheet.40</title>
+ <desc>ComputerSystem</desc>
+ <rect x="0" y="688.588" width="108" height="27" class="st6"/>
+ <text x="18.16" y="704.59" class="st22">ComputerSystem</text> </g>
+ <g id="shape41-84" transform="translate(475.722,-213.463)">
+ <title>Sheet.41</title>
+ <desc>BootOption</desc>
+ <rect x="0" y="688.588" width="108" height="27" class="st6"/>
+ <text x="29.69" y="704.59" class="st22">BootOption</text> </g>
+ <g id="shape42-87" transform="translate(493.722,-226.963)">
+ <title>Sheet.42</title>
+ <desc>Memory</desc>
+ <rect x="0" y="688.588" width="108" height="27" class="st6"/>
+ <text x="36.21" y="704.59" class="st22">Memory</text> </g>
+ <g id="shape43-90" transform="translate(608.472,-249.463)">
+ <title>Sheet.43</title>
+ <rect x="0" y="670.588" width="153" height="45" class="st18"/>
+ </g>
+ <g id="shape46-92" transform="translate(738.972,-262.963)">
+ <title>Sheet.46</title>
+ <ellipse cx="1.6875" cy="713.9" rx="1.6875" ry="1.6875" class="st21"/>
+ </g>
+ <g id="shape47-94" transform="translate(742.91,-268.025)">
+ <title>Sheet.47</title>
+ <ellipse cx="1.6875" cy="713.9" rx="1.6875" ry="1.6875" class="st21"/>
+ </g>
+ <g id="shape48-96" transform="translate(747.41,-273.088)">
+ <title>Sheet.48</title>
+ <ellipse cx="1.6875" cy="713.9" rx="1.6875" ry="1.6875" class="st21"/>
+ </g>
+ <g id="shape49-98" transform="translate(660.222,-199.963)">
+ <title>Sheet.49</title>
+ <desc>ComputerSystemCollection</desc>
+ <rect x="0" y="688.588" width="123.75" height="27" class="st6"/>
+ <text x="5.3" y="704.59" class="st22">ComputerSystemCollection</text> </g>
+ <g id="shape50-101" transform="translate(720.972,-215.713)">
+ <title>Sheet.50</title>
+ <desc>BootOptionCollection</desc>
+ <rect x="0" y="688.588" width="108" height="27" class="st6"/>
+ <text x="8.96" y="704.59" class="st22">BootOptionCollection</text> </g>
+ <g id="shape51-104" transform="translate(732.222,-229.213)">
+ <title>Sheet.51</title>
+ <desc>MemoryCollection</desc>
+ <rect x="0" y="688.588" width="108" height="27" class="st6"/>
+ <text x="15.48" y="704.59" class="st22">MemoryCollection</text> </g>
+ <g id="shape56-107" transform="translate(515.651,-269.34) rotate(-1.84761)">
+ <title>Curve connect 2.56</title>
+ <path d="M1.08 713.99 L1.29 713.7 A41.432 41.432 0 0 1 69.79 715.59" class="st23"/>
+ </g>
+ <g id="shape57-113" transform="translate(581.472,-235.963)">
+ <title>Sheet.57</title>
+ <rect x="0" y="670.588" width="153" height="45" class="st18"/>
+ </g>
+ <g id="shape59-115" transform="translate(291.222,-242.713)">
+ <title>1-D double</title>
+ <path d="M13.5 693.99 L13.5 688.59 L0 702.09 L13.5 715.59 L13.5 710.19 L31.5 710.19 L31.5 715.59 L45 702.09 L31.5 688.59
+ L31.5 693.99 L13.5 693.99 Z" class="st25"/>
+ </g>
+ <g id="shape64-117" transform="translate(619.722,-467.713)">
+ <title>Sheet.64</title>
+ <desc>EFI PLATFORM_CONFIG_TO_REDFISH_PROTOCOL</desc>
+ <g id="shadow64-118" transform="matrix(1.02,0,0,1.02,-1.98,-13.8618)" class="st10">
+ <path d="M0 715.59 L198 715.59 L198 670.59 L0 670.59 L0 715.59 Z" class="st26"/>
+ </g>
+ <path d="M0 715.59 L198 715.59 L198 670.59 L0 670.59 L0 715.59 Z" class="st27"/>
+ <text x="91.2" y="683.34" class="st20">EFI <tspan x="6.13" dy="1em" class="st5">PLATFORM</tspan>_CONFIG_TO_REDFISH_<tspan
+ x="69.84" dy="1em" class="st5">PROTOCOL</tspan></text> </g>
+ <g id="shape65-125" transform="translate(511.722,-445.213)">
+ <title>Sheet.65</title>
+ <desc>EFI PLATFORM_CONFIG_TO_REDFISH_PROTOCOL</desc>
+ <g id="shadow65-126" transform="matrix(1.02,0,0,1.02,-1.98,-13.8618)" class="st10">
+ <path d="M0 715.59 L198 715.59 L198 670.59 L0 670.59 L0 715.59 Z" class="st26"/>
+ </g>
+ <path d="M0 715.59 L198 715.59 L198 670.59 L0 670.59 L0 715.59 Z" class="st27"/>
+ <text x="91.2" y="683.34" class="st20">EFI <tspan x="6.13" dy="1em" class="st5">PLATFORM</tspan>_CONFIG_TO_REDFISH_<tspan
+ x="69.84" dy="1em" class="st5">PROTOCOL</tspan></text> </g>
+ <g id="shape67-133" transform="translate(536.472,-593.713)">
+ <title>Sheet.67</title>
+ <desc>Other Platform-specific Implementations</desc>
+ <rect x="0" y="688.588" width="243" height="27" class="st6"/>
+ <text x="20.02" y="705.09" class="st28">Other Platform-specific Implementations</text> </g>
+ <g id="group71-136" transform="translate(567.972,-530.713)">
+ <title>Can.71</title>
+ <desc>EFI Variable/ FW Storage</desc>
+ <g id="shape72-137">
+ <title>Sheet.72</title>
+ <path d="M0 709.29 A29.25 6.3 -180 1 0 58.5 709.29 L58.5 658.89 L0 658.89 L0 709.29 Z" class="st29"/>
+ </g>
+ <g id="shape71-139">
+ <ellipse cx="29.25" cy="658.888" rx="29.25" ry="6.3" class="st29"/>
+ <text x="23.25" y="675.09" class="st30">EFI <tspan x="10.54" dy="1.2em" class="st5">Variable</tspan>/ <tspan
+ x="5.79" dy="1.2em" class="st5">FW Storage</tspan></text> </g>
+ </g>
+ <g id="group73-144" transform="translate(687.222,-530.713)">
+ <title>Can.73</title>
+ <desc>Other Storage</desc>
+ <g id="shape74-145">
+ <title>Sheet.74</title>
+ <path d="M0 709.29 A29.25 6.3 -180 1 0 58.5 709.29 L58.5 658.89 L0 658.89 L0 709.29 Z" class="st29"/>
+ </g>
+ <g id="shape73-147">
+ <ellipse cx="29.25" cy="658.888" rx="29.25" ry="6.3" class="st29"/>
+ <text x="17.41" y="681.09" class="st30">Other <tspan x="13.66" dy="1.2em" class="st5">Storage</tspan></text> </g>
+ </g>
+ <g id="shape76-151" transform="translate(1306.06,184.875) rotate(90)">
+ <title>1-D double.76</title>
+ <path d="M6.75 704.79 L6.75 702.09 L0 708.84 L6.75 715.59 L6.75 712.89 L33.75 712.89 L33.75 715.59 L40.5 708.84 L33.75
+ 702.09 L33.75 704.79 L6.75 704.79 Z" class="st31"/>
+ </g>
+ <g id="shape77-153" transform="translate(1425.31,184.875) rotate(90)">
+ <title>1-D double.77</title>
+ <path d="M6.75 704.79 L6.75 702.09 L0 708.84 L6.75 715.59 L6.75 712.89 L11.25 712.89 L11.25 715.59 L18 708.84 L11.25
+ 702.09 L11.25 704.79 L6.75 704.79 Z" class="st31"/>
+ </g>
+ <g id="shape78-155" transform="translate(21.2224,-139.213)">
+ <title>Sheet.78</title>
+ <path d="M0 715.59 L810 715.59" class="st32"/>
+ </g>
+ <g id="group80-158" transform="translate(-173.49,382.875) rotate(-90)">
+ <title>Folded Corner</title>
+ <g id="shape80-159">
+ <g id="shadow80-160" transform="matrix(1.02,0,0,1.02,-3.105,-9.45175)" class="st10">
+ <path d="M0 715.59 L278.62 715.59 L310.5 688.27 L310.5 229.59 L0 229.59 L0 715.59 Z" class="st33"/>
+ </g>
+ <path d="M0 715.59 L278.62 715.59 L310.5 688.27 L310.5 229.59 L0 229.59 L0 715.59 Z" class="st35"/>
+ </g>
+ <g id="shape81-168" transform="translate(278.625,0)">
+ <title>Sheet.81</title>
+ <g id="shadow81-169" transform="matrix(1.02,0,0,1.02,-0.6375,-14.3117)" class="st10">
+ <path d="M0 715.59 L31.88 688.27 L4.87 684.09 L0 715.59 Z" class="st33"/>
+ </g>
+ <path d="M0 715.59 L31.88 688.27 L4.87 684.09 L0 715.59 Z" class="st37"/>
+ </g>
+ </g>
+ <g id="group82-175" transform="translate(432.972,-530.713)">
+ <title>Can.69</title>
+ <desc>EDK2 HII Database</desc>
+ <g id="shape83-176">
+ <title>Sheet.83</title>
+ <path d="M0 709.29 A29.25 6.3 -180 1 0 58.5 709.29 L58.5 658.89 L0 658.89 L0 709.29 Z" class="st38"/>
+ </g>
+ <g id="shape82-178">
+ <ellipse cx="29.25" cy="658.888" rx="29.25" ry="6.3" class="st38"/>
+ <text x="11.84" y="681.09" class="st30">EDK2 HII <tspan x="10.24" dy="1.2em" class="st5">Database</tspan></text> </g>
+ </g>
+ <g id="shape84-182" transform="translate(390.222,-429.463)">
+ <title>Sheet.84</title>
+ <desc>EFI PLATFORM_CONFIG_TO_REDFISH_PROTOCOL</desc>
+ <g id="shadow84-183" transform="matrix(1.02,0,0,1.02,-1.44,-13.8618)" class="st10">
+ <rect x="0" y="670.588" width="144" height="45" class="st39"/>
+ </g>
+ <rect x="0" y="670.588" width="144" height="45" class="st40"/>
+ <text x="64.2" y="683.34" class="st20">EFI <tspan x="4.73" dy="1em" class="st5">PLATFORM</tspan>_CONFIG_TO_<tspan
+ x="17.24" dy="1em" class="st5">REDFISH</tspan>_PROTOCOL</text> </g>
+ <g id="shape85-190" transform="translate(1171.06,184.875) rotate(90)">
+ <title>1-D double.75</title>
+ <path d="M6.75 704.79 L6.75 702.09 L0 708.84 L6.75 715.59 L6.75 712.89 L49.5 712.89 L49.5 715.59 L56.25 708.84 L49.5
+ 702.09 L49.5 704.79 L6.75 704.79 Z" class="st38"/>
+ </g>
+ <g id="shape86-192" transform="translate(1164.31,286.125) rotate(90)">
+ <title>1-D double.68</title>
+ <g id="shadow86-193" transform="matrix(1.02,0,0,1.02,-1.1475,-14.0418)" class="st10">
+ <path d="M13.5 693.99 L13.5 688.59 L0 702.09 L13.5 715.59 L13.5 710.19 L101.25 710.19 L101.25 715.59 L114.75 702.09
+ L101.25 688.59 L101.25 693.99 L13.5 693.99 Z" class="st39"/>
+ </g>
+ <path d="M13.5 693.99 L13.5 688.59 L0 702.09 L13.5 715.59 L13.5 710.19 L101.25 710.19 L101.25 715.59 L114.75 702.09 L101.25
+ 688.59 L101.25 693.99 L13.5 693.99 Z" class="st38"/>
+ </g>
+ <g id="shape87-197" transform="translate(27.9724,-616.213)">
+ <title>Sheet.87</title>
+ <desc>EDK2 Open Source Implementation</desc>
+ <rect x="0" y="688.588" width="243" height="27" class="st6"/>
+ <text x="34.39" y="705.09" class="st28">EDK2 Open Source Implementation</text> </g>
+ <g id="shape88-200" transform="translate(1312.81,270.375) rotate(90)">
+ <title>1-D double.88</title>
+ <path d="M13.5 693.99 L13.5 688.59 L0 702.09 L13.5 715.59 L13.5 710.19 L117 710.19 L117 715.59 L130.5 702.09 L117 688.59
+ L117 693.99 L13.5 693.99 Z" class="st41"/>
+ </g>
+ <g id="shape89-202" transform="translate(1434.31,247.875) rotate(90)">
+ <title>1-D double.89</title>
+ <path d="M13.5 693.99 L13.5 688.59 L0 702.09 L13.5 715.59 L13.5 710.19 L139.5 710.19 L139.5 715.59 L153 702.09 L139.5
+ 688.59 L139.5 693.99 L13.5 693.99 Z" class="st42"/>
+ </g>
+ <g id="shape90-204" transform="translate(838.629,252.112) rotate(68.1986)">
+ <title>Curve connect 1.61</title>
+ <path d="M7.53 720.84 L7.83 721.04 A30.61 30.61 -180 0 0 42.41 715.59 A30.61 30.61 0 0 1 76.99 710.13 L77.29 710.34"
+ class="st43"/>
+ </g>
+ <g id="shape91-213" transform="translate(-37.5816,162.844) rotate(-60.2551) scale(-1,1)">
+ <title>Curve connect 1.62</title>
+ <path d="M7.67 720.62 L7.98 720.82 A34.3918 34.3918 -180 0 0 45.35 715.59 A34.3918 34.3918 0 0 1 82.72 710.35 L83.03
+ 710.55" class="st43"/>
+ </g>
+ <g id="shape94-220" transform="translate(488.651,-255.84) rotate(-1.84761)">
+ <title>Curve connect 2.54</title>
+ <path d="M1.08 713.99 L1.29 713.7 A41.432 41.432 0 0 1 69.79 715.59" class="st23"/>
+ </g>
+ <g id="shape96-225" transform="translate(572.472,-222.463)">
+ <title>Sheet.96</title>
+ <desc>Script-generated EDK2 Redfish Collection Driver</desc>
+ <rect x="0" y="670.588" width="153" height="45" class="st19"/>
+ <text x="16.96" y="689.84" class="st20">Script-generated EDK2 <tspan x="11.39" dy="1em" class="st5">Redfish Collection Driver</tspan></text> </g>
+ <g id="shape98-229" transform="translate(67.3474,-420.463)">
+ <title>Rounded Rectangle.98</title>
+ <desc>EDK2 HII UNI file #string STR_OPTION_A #language x-uefi-redfi...</desc>
+ <path d="M7.73 715.59 L266.77 715.59 A7.73227 7.73227 -180 0 0 274.5 707.86 L274.5 637.82 A7.73227 7.73227 -180 0 0 266.77
+ 630.09 L7.73 630.09 A7.73227 7.73227 -180 0 0 -0 637.82 L0 707.86 A7.73227 7.73227 -180 0 0 7.73 715.59
+ Z" class="st45"/>
+ <text x="4" y="646.69" class="st46">EDK2 HII UNI file<tspan x="4" dy="1.425em" class="st47">#</tspan><tspan
+ class="st47">string </tspan><tspan class="st48">STR</tspan><tspan class="st48">_</tspan><tspan class="st48">OPTION</tspan><tspan
+ class="st48">_</tspan><tspan class="st48">A</tspan><tspan class="st47"> </tspan><tspan class="st47">#</tspan><tspan
+ class="st47">language </tspan><tspan class="st48">x</tspan><tspan class="st48">-</tspan><tspan class="st48">uefi</tspan><tspan
+ class="st48">-</tspan><tspan class="st48">redfish</tspan><tspan class="st48">-</tspan><tspan class="st48">SCHEMA</tspan><tspan
+ class="st48">.</tspan><tspan class="st48">VERSION</tspan><tspan class="st47"> </tspan><tspan class="st48"> </tspan><tspan
+ x="4" dy="1.2em" class="st49">“</tspan><tspan class="st49">/</tspan><tspan class="st49">SCHEMA</tspan><tspan
+ class="st49">/</tspan><tspan class="st49">PropertyA</tspan><tspan class="st48">” </tspan><tspan
+ class="st47"> </tspan><tspan x="4" dy="1.2em" class="st47">#</tspan><tspan class="st47">string</tspan><tspan
+ class="st48"> </tspan><tspan class="st48">STR</tspan><tspan class="st48">_</tspan><tspan class="st48">OPTION</tspan><tspan
+ class="st48">_</tspan><tspan class="st48">B</tspan><tspan class="st47"> </tspan><tspan class="st47">#</tspan><tspan
+ class="st47">language</tspan><tspan class="st48"> </tspan><tspan class="st48">x</tspan><tspan class="st48">-</tspan><tspan
+ class="st48">uefi</tspan><tspan class="st48">-</tspan><tspan class="st48">redfish</tspan><tspan
+ class="st48">-</tspan><tspan class="st48">SCHEMA</tspan><tspan class="st48">.</tspan><tspan class="st48">VERSION</tspan><tspan
+ class="st47"> </tspan><tspan class="st49"> </tspan><tspan x="4" dy="1.2em" class="st49">“</tspan><tspan
+ class="st49">/</tspan><tspan class="st49">SCHEMA</tspan><tspan class="st49">/</tspan><tspan class="st49">PropertyB</tspan><tspan
+ class="st49">” </tspan><tspan x="4" dy="1.2em" class="st47">#</tspan><tspan class="st47">string </tspan><tspan
+ class="st48">STR</tspan><tspan class="st48">_</tspan><tspan class="st48">OPTION</tspan><tspan class="st48">_</tspan><tspan
+ class="st47">C </tspan><tspan class="st47">#</tspan><tspan class="st47">language</tspan><tspan
+ class="st48"> </tspan><tspan class="st48">x</tspan><tspan class="st48">-</tspan><tspan class="st48">uefi</tspan><tspan
+ class="st48">-</tspan><tspan class="st48">redfish</tspan><tspan class="st48">-</tspan><tspan class="st48">SCHEMA</tspan><tspan
+ class="st48">.</tspan><tspan class="st48">VERSION</tspan><tspan class="st47"> </tspan><tspan class="st49"> </tspan><tspan
+ x="4" dy="1.312em" class="st49">“</tspan><tspan class="st49">/</tspan><tspan class="st49">SCHEMA</tspan><tspan
+ class="st49">/</tspan><tspan class="st49">PropertyC</tspan><tspan class="st49">”</tspan></text> </g>
+ <g id="shape100-316" transform="translate(171.972,-550.963)">
+ <title>Rounded Rectangle.100</title>
+ <desc>EDK2 HII VFR Form Option A Enabled Option B Disabled Option C...</desc>
+ <path d="M4.5 715.59 L148.5 715.59 A4.49993 4.49993 -180 0 0 153 711.09 L153 664.96 A4.49993 4.49993 -180 0 0 148.5 660.46
+ L4.5 660.46 A4.49993 4.49993 -180 0 0 0 664.96 L0 711.09 A4.49993 4.49993 -180 0 0 4.5 715.59 Z"
+ class="st50"/>
+ <text x="37.65" y="671.66" class="st51">EDK2 HII VFR Form<tspan x="24.37" dy="1.6em" class="st52">Option A Enabled </tspan><tspan
+ x="24.6" dy="0.8em" class="st52">Option B Disabled </tspan><tspan x="24.4" dy="0.8em" class="st52">Option C </tspan><tspan
+ class="st52">0</tspan><tspan class="st52">x</tspan><tspan class="st52">16</tspan></text> </g>
+ <g id="shape101-325" transform="translate(147.222,-539.713)">
+ <title>Rounded Rectangle.101</title>
+ <desc>EDK2 HII VFR Form Option A Enabled Option B Disabled Option C...</desc>
+ <path d="M4.5 715.59 L148.5 715.59 A4.49993 4.49993 -180 0 0 153 711.09 L153 664.96 A4.49993 4.49993 -180 0 0 148.5 660.46
+ L4.5 660.46 A4.49993 4.49993 -180 0 0 0 664.96 L0 711.09 A4.49993 4.49993 -180 0 0 4.5 715.59 Z"
+ class="st50"/>
+ <text x="37.65" y="671.66" class="st51">EDK2 HII VFR Form<tspan x="24.37" dy="1.6em" class="st52">Option A Enabled </tspan><tspan
+ x="24.6" dy="0.8em" class="st52">Option B Disabled </tspan><tspan x="24.4" dy="0.8em" class="st52">Option C </tspan><tspan
+ class="st52">0</tspan><tspan class="st52">x</tspan><tspan class="st52">16</tspan></text> </g>
+ <g id="shape102-334" transform="translate(129.222,-526.213)">
+ <title>Rounded Rectangle</title>
+ <desc>EDK2 HII VFR Form Option A Enabled Option B Disabled Option C...</desc>
+ <path d="M4.5 715.59 L148.5 715.59 A4.49993 4.49993 -180 0 0 153 711.09 L153 664.96 A4.49993 4.49993 -180 0 0 148.5 660.46
+ L4.5 660.46 A4.49993 4.49993 -180 0 0 0 664.96 L0 711.09 A4.49993 4.49993 -180 0 0 4.5 715.59 Z"
+ class="st50"/>
+ <text x="29.88" y="671.66" class="st28">EDK2 HII VFR Form<tspan x="24.37" dy="1.6em" class="st53">Option A </tspan><tspan
+ class="st54">Enabled </tspan><tspan x="24.6" dy="0.8em" class="st53">Option B </tspan><tspan
+ class="st54">Disabled </tspan><tspan x="24.4" dy="0.8em" class="st53">Option C </tspan><tspan
+ class="st54">0</tspan><tspan class="st54">x</tspan><tspan class="st54">16</tspan></text> </g>
+ <g id="shape110-345" transform="translate(503.938,-444.613) rotate(13.0919)">
+ <title>Curve connect 1.110</title>
+ <path d="M0 715.59 A11.592 11.592 0 0 1 22.97 715.59 A13.4718 13.4718 -180 0 0 48.31 719.9 L48.42 719.56" class="st55"/>
+ </g>
+ <g id="shape122-351" transform="translate(41.4724,-96.4625)">
+ <title>Sheet.122</title>
+ <desc>[1]</desc>
+ <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>
+ <text x="5.44" y="705.09" class="st7">[1]</text> </g>
+ <g id="shape123-354" transform="translate(746.847,-100.963)">
+ <title>Sheet.123</title>
+ <desc>[2]</desc>
+ <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>
+ <text x="5.44" y="705.09" class="st7">[2]</text> </g>
+ <g id="shape124-357" transform="translate(68.4724,-278.713)">
+ <title>Sheet.124</title>
+ <desc>[3]</desc>
+ <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>
+ <text x="5.44" y="705.09" class="st7">[3]</text> </g>
+ <g id="shape125-360" transform="translate(338.472,-269.713)">
+ <title>Sheet.125</title>
+ <desc>[4]</desc>
+ <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>
+ <text x="5.44" y="705.09" class="st7">[4]</text> </g>
+ <g id="shape126-363" transform="translate(761.472,-269.713)">
+ <title>Sheet.126</title>
+ <desc>[5]</desc>
+ <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>
+ <text x="5.44" y="705.09" class="st7">[5]</text> </g>
+ <g id="shape127-366" transform="translate(390.222,-476.713)">
+ <title>Sheet.127</title>
+ <desc>[6]</desc>
+ <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>
+ <text x="5.44" y="705.09" class="st7">[6]</text> </g>
+ <g id="shape128-369" transform="translate(123.597,-579.088)">
+ <title>Sheet.128</title>
+ <desc>[8]</desc>
+ <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>
+ <text x="5.44" y="705.09" class="st7">[8]</text> </g>
+ <g id="shape129-372" transform="translate(62.8474,-501.463)">
+ <title>Sheet.129</title>
+ <desc>[9]</desc>
+ <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>
+ <text x="5.44" y="705.09" class="st7">[9]</text> </g>
+ <g id="shape132-375" transform="translate(583.722,1233.46) rotate(180)">
+ <title>Curve connect 2.132</title>
+ <path d="M2.78 714.72 L3.12 714.61 A681.188 681.188 0 0 1 406.38 714.61 L406.72 714.72" class="st57"/>
+ </g>
+ <g id="shape133-384" transform="translate(238.347,-157.213)">
+ <title>Sheet.133</title>
+ <desc>Script-generated EDK2 Redfish client driver/library based on ...</desc>
+ <rect x="0" y="688.588" width="261" height="27" class="st1"/>
+ <text x="11.21" y="699.84" class="st59">Script-generated EDK2 Redfish client driver/library based on the <tspan
+ x="45.23" dy="1em" class="st5">standard Redfish schemas </tspan>published by DMTF</text> </g>
+ <g id="shape134-388" transform="translate(21.2224,-679.775)">
+ <title>Rectangle.134</title>
+ <rect x="0" y="703.213" width="24.75" height="12.375" class="st2"/>
+ </g>
+ <g id="shape135-390" transform="translate(41.4724,-670.213)">
+ <title>Sheet.135</title>
+ <desc>Script-generated code</desc>
+ <rect x="0" y="688.588" width="108" height="27" class="st6"/>
+ <text x="12.79" y="704.34" class="st60">Script-generated code</text> </g>
+ <g id="shape137-393" transform="translate(21.2224,-661.213)">
+ <title>Rectangle.137</title>
+ <rect x="0" y="703.213" width="24.75" height="12.375" class="st61"/>
+ </g>
+ <g id="shape138-395" transform="translate(43.7224,-652.213)">
+ <title>Sheet.138</title>
+ <desc>UEFI/EDK2 open source</desc>
+ <rect x="0" y="688.588" width="108" height="27" class="st6"/>
+ <text x="9.97" y="704.34" class="st60">UEFI/EDK2 open source</text> </g>
+ <g id="shape140-398" transform="translate(281.66,-341.784)">
+ <title>Configure</title>
+ <path d="M41.27 698.83 C40.4 698.46 37.61 697.28 37.61 697.28 L37.79 694.96 L37.94 693.01 L37.69 689.29 L39.53 688.23
+ C39.53 688.23 40.46 687.84 41.33 687.49 C40.71 685.96 40.45 685.33 39.82 683.81 C38.94 684.17 36.06 685.35
+ 36.06 685.35 L34.63 683.57 C33.94 682.7 33.09 681.89 32.02 681.06 L30.33 679.75 L31.01 677.68 C31.01 677.68
+ 31.41 676.7 31.79 675.77 C30.27 675.14 29.64 674.88 28.12 674.26 C27.72 675.23 26.52 678.17 26.52 678.17
+ L24.28 677.95 C23.14 677.83 21.96 677.86 20.77 678.02 L18.64 678.3 L17.65 676.35 C17.65 676.35 17.21 675.31
+ 16.78 674.31 C15.27 674.95 14.64 675.21 13.13 675.85 C13.58 676.92 14.85 679.93 14.85 679.93 L13.12 681.37
+ C12.3 682.05 11.54 682.85 10.79 683.83 L9.49 685.52 L7.41 684.86 C7.41 684.86 6.28 684.4 5.17 683.96 C4.56
+ 685.49 4.31 686.12 3.69 687.65 C4.82 688.1 7.84 689.31 7.84 689.31 C7.84 689.31 7.65 692.73 7.63 693 C7.65
+ 693.25 7.7 694.01 7.7 694.03 C7.7 694.03 7.87 695.84 7.87 695.84 L6.79 696.82 C6.46 697.15 6.34 697.24 3.64
+ 698.3 C4.24 699.84 4.49 700.47 5.08 702.01 C6.21 701.57 9.36 700.34 9.36 700.34 L10.99 702.57 C11.49 703.19
+ 12.18 703.89 13.04 704.61 L14.63 705.96 L13.93 707.96 C13.93 707.96 13.45 709.08 12.97 710.2 C14.47 710.85
+ 15.1 711.12 16.61 711.77 C17.05 710.74 18.36 707.71 18.36 707.71 L20.65 708.03 C21.73 708.19 22.89 708.21
+ 24.1 708.1 L26.18 707.92 L27.11 709.84 C27.11 709.84 27.53 710.9 27.94 711.93 C29.47 711.32 30.1 711.07
+ 31.63 710.45 C31.25 709.51 30.04 706.48 30.04 706.48 L32.32 704.83 C32.97 704.31 33.71 703.56 34.48 702.62
+ L35.81 701 L37.85 701.7 C37.85 701.7 38.82 702.1 39.73 702.49 C40.37 700.97 40.64 700.34 41.27 698.83 ZM40.58
+ 695.32 C40.58 695.32 40.57 695.4 40.56 695.47 C40.95 695.64 44.96 697.33 44.96 697.33 L41.23 706.17 C41.23
+ 706.17 37.13 704.45 36.75 704.28 C36.7 704.34 36.65 704.41 36.65 704.41 C35.76 705.49 34.89 706.37 33.97
+ 707.11 C33.97 707.11 33.67 707.33 33.46 707.47 C33.62 707.88 35.28 712.02 35.28 712.02 L26.38 715.59 C26.38
+ 715.59 24.65 711.28 24.5 710.89 C24.42 710.9 24.34 710.9 24.34 710.9 C22.91 711.03 21.54 711 20.25 710.82
+ C20.25 710.82 20.17 710.8 20.09 710.79 C19.93 711.19 18.08 715.47 18.08 715.47 L9.27 711.66 C9.27 711.66
+ 11.18 707.25 11.34 706.86 C11.29 706.81 11.22 706.76 11.22 706.76 C10.23 705.92 9.41 705.09 8.72 704.23
+ C8.72 704.23 8.51 703.94 8.37 703.75 C7.96 703.9 3.49 705.65 3.49 705.65 L0 696.71 C0 696.71 4.8 694.83
+ 4.8 694.83 C4.8 694.83 4.88 694.8 4.95 694.78 C4.92 694.54 4.89 694.21 4.89 694.21 L4.82 693.02 C4.82 693.02
+ 4.9 691.52 4.92 691.17 C4.54 691.02 0.04 689.21 0.04 689.21 L3.6 680.3 C3.6 680.3 8.06 682.09 8.46 682.25
+ C8.51 682.18 8.56 682.12 8.56 682.12 C9.43 680.98 10.34 680.02 11.33 679.2 C11.33 679.2 11.39 679.15 11.45
+ 679.11 C11.29 678.72 9.45 674.35 9.45 674.35 L18.29 670.62 C18.29 670.62 20.07 674.85 20.24 675.25 C20.31
+ 675.24 20.39 675.23 20.39 675.23 C21.8 675.04 23.2 675.01 24.56 675.15 C24.56 675.15 24.63 675.16 24.71
+ 675.16 C24.87 674.78 26.59 670.59 26.59 670.59 L35.46 674.23 C35.46 674.23 33.77 678.34 33.61 678.74 C33.67
+ 678.78 33.74 678.83 33.74 678.83 C34.99 679.8 35.99 680.77 36.82 681.8 C36.82 681.8 36.88 681.88 36.94 681.95
+ C37.33 681.79 41.35 680.14 41.35 680.14 L45 689.02 C45 689.02 40.99 690.67 40.6 690.83 C40.61 690.9 40.62
+ 690.98 40.62 690.98 C40.71 691.76 40.75 692.41 40.75 693.01 C40.75 693.7 40.7 694.43 40.58 695.32 ZM26.56
+ 697.76 C29.16 695.67 29.58 691.87 27.5 689.26 C25.42 686.65 21.62 686.23 19.01 688.31 C16.41 690.4 15.98
+ 694.2 18.07 696.81 C20.15 699.42 23.95 699.84 26.56 697.76 ZM23.76 684.23 C26.11 684.49 28.22 685.65 29.7
+ 687.5 C32.75 691.32 32.12 696.9 28.31 699.95 C26.47 701.43 24.16 702.1 21.8 701.84 C19.45 701.58 17.34 700.41
+ 15.87 698.56 C14.57 696.94 13.93 694.98 13.93 693.04 C13.93 690.44 15.07 687.86 17.25 686.12 C19.1 684.64
+ 21.41 683.97 23.76 684.23 Z" class="st62"/>
+ </g>
+ <g id="shape145-400" transform="translate(323.911,1069.28) scale(1,-1)">
+ <title>Side to top/bottom.145</title>
+ <path d="M7.18 715.59 L7.54 715.59 L96.69 715.59 L96.69 668.4" class="st63"/>
+ </g>
+ <g id="shape146-406" transform="translate(204.597,-382.144)">
+ <title>Bottom to top fixed 2</title>
+ <path d="M0 677.27 L0 697.59 L99.14 697.59 L99.14 708.05" class="st65"/>
+ </g>
+ <g id="shape150-412" transform="translate(281.66,1070.51) rotate(180)">
+ <title>Side to top/bottom</title>
+ <path d="M7.18 715.59 L7.54 715.59 L107.44 715.59 L107.44 669.64" class="st63"/>
+ </g>
+ <g id="shape152-417" transform="translate(173.097,-359.713)">
+ <title>Sheet.152</title>
+ <desc>[10]</desc>
+ <rect x="0" y="688.588" width="45" height="27" class="st6"/>
+ <text x="12.52" y="705.09" class="st7">[10]</text> </g>
+ <g id="shape153-420" transform="translate(186.597,-359.713)">
+ <title>Sheet.153</title>
+ <desc>EDK2 Build Tool</desc>
+ <rect x="0" y="688.588" width="108" height="27" class="st6"/>
+ <text x="21.18" y="704.59" class="st22">EDK2 Build Tool</text> </g>
+ <g id="shape95-423" transform="translate(479.651,-242.34) rotate(-1.84761)">
+ <title>Curve connect 2</title>
+ <path d="M1.08 713.99 L1.29 713.7 A41.432 41.432 0 0 1 68.5 713.7 L68.7 713.99" class="st66"/>
+ </g>
+ <g id="shape154-431" transform="translate(546.597,-607.213)">
+ <title>Sheet.154</title>
+ <desc>[7]</desc>
+ <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>
+ <text x="5.44" y="705.09" class="st7">[7]</text> </g>
+ <g id="shape155-434" transform="translate(919.083,249.319) rotate(-86.8202) scale(1,-1)">
+ <title>Curve connect 1.155</title>
+ <path d="M0 715.59 A6.2366 6.2366 0 0 1 11.73 715.59 A4.54475 4.54475 -180 0 0 20.28 715.59" class="st67"/>
+ </g>
+ </g>
+</svg>
--
2.17.1


Nickle Wang
 

Hi Abner,

 

I see typo here:

 

struct _EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL {

  EDKII_REDFISH_PLATFORM_CONFIG_GET_VALUE             GetValue;

  EDKII_REDFISH_PLATFORM_CONFIG_SET_VALUE             SetValue;

  EDKII_REDFISH_PLATFORM_CONFIG_GET_CONFIG_LANG       GetConfigureLang;

  EDKII_REDFISH_PLATFORM_CONFIG_GET_SUPPORTED_SCHEMA  GetSupportedSchema;

};

 

It is EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL instead of EDKII_PLATFORM_CONFIG_TO_REDFISH_PROTOCOL. I update the description as below:

 

 

+### EDKII Redfish Platform Config Protocol ***[[6]](#[0])***

+EDKII Redfish Platform Config Protocol is an abstract driver that abstracts the platform

+configuration format and storage from EDK2 Redfish Feature driver. This protocol provides

+the interfaces to get and set platform configuration that format and the storage to store

+configuration are agnostic to the feature driver. The platform can provide its own EDKII

+Redfish Platform Config driver to access platform-specific configuration format and

+storage. On EDK2 open source, EDKII Redfish Platform Config Protocol accesses the

+platform configuration in EDK2 HII defined format.

+

+Below is the prototype of **EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL**,

+

+```C

+struct _EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL  {

+  EDKII_REDFISH_PLATFORM_CONFIG_GET_VALUE             GetValue;

+  EDKII_REDFISH_PLATFORM_CONFIG_SET_VALUE             SetValue;

+  EDKII_REDFISH_PLATFORM_CONFIG_GET_CONFIG_LANG       GetConfigureLang;

+  EDKII_REDFISH_PLATFORM_CONFIG_GET_SUPPORTED_SCHEMA  GetSupportedSchema;

+};

+```

+

+### Other instances of EDKII Redfish Platform Config Protocol ***[[7]](#[0])***

+For those Non-EDK2 HII-based platform configuration formats, the driver instance can

+provide its own implementation to get or set the platform configurations.

 

 

 

Thanks,

Nickle

 

-----Original Message-----
From: Chang, Abner (HPS SW/FW Technologist) <abner.chang@...>
Sent: Saturday, July 17, 2021 10:02 PM
To: devel@edk2.groups.io
Cc: Wang, Nickle (HPS SW) <nickle.wang@...>; Liming Gao <gaoliming@...>; Andrew Fish <afish@...>; Leif Lindholm <leif@...>; Michael D Kinney <michael.d.kinney@...>
Subject: [staging/edk2-redfish-client PATCH 1/2] RedfishClientPkg: Initial commit

 

Initial commit of architecture diagrams and Readme.md

 

Signed-off-by: Abner Chang <abner.chang@...>

Cc: Nickle Wang <nickle.wang@...>

Cc: Liming Gao <gaoliming@...>

Cc: Andrew Fish <afish@...>

Cc: Leif Lindholm <leif@...>

Cc: Michael D Kinney <michael.d.kinney@...>

---

RedfishClientPkg/Readme.md                    | 180 +++++

.../Media/RedfishClientDriverStack.svg        | 680 ++++++++++++++++++

2 files changed, 860 insertions(+)

create mode 100644 RedfishClientPkg/Readme.md

create mode 100644 RedfishClientPkg/Documents/Media/RedfishClientDriverStack.svg

 

diff --git a/RedfishClientPkg/Readme.md b/RedfishClientPkg/Readme.md

new file mode 100644

index 0000000000..ce8c2f9409

--- /dev/null

+++ b/RedfishClientPkg/Readme.md

@@ -0,0 +1,180 @@

+# UEFI Redfish Client EDK2 Implementation

+

+## Introduction

+UEFI Redfish Client EDK2 solution is implemented base on

+[*EDK2 Redfish Foundation*](https://github.com/tianocore/edk2/blob/master/RedfishPkg/Readme.md),

+the implementation utilizes the EFI protocols provided by EDK2 Redfish

+Foundation to communicate with the Redfish service for creating, consuming, and

+updating the Redfish properties which are managed by firmware. This solution

+requests the instance of **EFI REST EX Protocol** through EFI Redfish Discover

+Protocol and interacts with Redfish service using **EFI REST EX Protocol** later

+on. The essential part of this implementation is to map the EDK2 HII options to

+the corresponding Redfish properties that are already defined in the standard

+Redfish schemas published by

+[*DMTF Redfish working group*](https://www.dmtf.org/standards/redfish).

+The advantage of this design is to strengthen the interoperability among the

+servers produced by different OEMs when configuring the platform through Redfish

+service. Using the properties defined in Redfish standard schema for configuring

+platform reduces the overhead of Redfish client tools to have different

+implementations in order to compliant with OEM servers. The solution also

+reduces OEM-defined proprietary BIOS Attributes that lead to the divergence of

+platform configuration namings in Redfish BIOS Attribute Registry, however,

+those different namings refer to the same platform functionality.

+

+## The Scope of UEFI Redfish Client EDK2 Implementation

+-  Platform Configurable settings

+

+This is the first stage of UEFI Redfish Client EDK2 Implementation. Associate

+Redfish property with HII option.

+

+- Provisioning of Firmware Managed Platform Redfish Resource

+

+The current design of UEFI Redfish Client EDK2 Implementation can already

+support the provisioning of firmware-owned platform Redfish resource, however,

+this requires addtional support on edk2 HII. Therefore, provisioning of

+firmware managed platform Redfish resource would be the second stage.

+

+Below are the block diagrams of UEFI Redfish Client EDK2 Implementation.

+

+## <a name="[0]">EDK2 Redfish Client Implementation Diagrams</a>

+![UEFI Redfish Client Implementation](https://github.com/changab/edk2-staging/blob/edk2-redfish-client/RedfishClientPkg/Documents/Media/RedfishClientDriverStack.svg?raw=true)

+

+## EFI EDK2 Redfish Client Framework

+The functionality of each block in the diagrams are described in belwo sections,

+

+### EDK2 Redfish Foundation ***[[1]](#[0])***

+EDK2 Redfish Redfish Foundation provides the facilities of communicating with

+Redfish service. Such as the discovery of Redfish service, the credential to access

+Redfish service, *EFI REST EX Protocol* instance which is the transport layer to

+Redfish service, and so on. Please refer to

+[*EDK2 Redfish Foundation*](https://github.com/tianocore/edk2/blob/master/RedfishPkg/Readme.md).

+

+### Redfish Profile Simulator ***[[2]](#[0])***

+Redfish Profile Simulator is an

+[*open source project*](https://github.com/DMTF/Redfish-Profile-Simulator) on DMTF

+GitHub, which simulates the HTTP request methods (POST, PATCH, PUT, GET) on Redfish

+resource maintained by Redfish Profile Simulator. EDK2 open source uses this

+simulator for the use case when Redfish service has not been set up on the platform,

+or for the quick Redfish firmware feature development. We clone this project under

+RedfishClientPkg and maintain it by edk2 because this project has currently been

+using and updating rarely. That is easier for edk2 to add features to the simulator

+or modify the simulator to align with edk2 requirement on Redfish service, such as

+ETAG and HTTP POST support. <br>

+Another open source project of Redfish simulator is

+[*Redfish Interface Emulator*](https://github.com/DMTF/Redfish-Interface-Emulator),

+however, we don't pay much attention to this project because we have been dedicating

+to Redfish Profile Simulator since we started the UEFI Redfish EDK2 project.

+

+### EDK2 Redfish JSON Schema to C Structure Convertor ***[[3]](#[0])***

+This is the script auto-generated EDK2 drivers and libraries that provide the Redfish

+schema naming based JSON to C structure and vise versa converters. C structure is

+another representation of Redfish properties other than JSON and CSDL(XML). The higher

+layer Redfish client application can deal with C structure instead of using JSON

+library to manipulate Redfish properties. The script

+[*Redfish Schema C Struct Generator*](https://github.com/DMTF/Redfish-Schema-C-Struct-Generator)

+is still a private project on DMTF GitHub. Below is the reference of script

+auto-generated [*Redfish JSON C Struct Converter Lib*](https://github.com/changab/Redfish-JSON-C-Struct-Converter-Lib)

+libraries. The converters generated by the script are followed

+**EFI REST JSON Structure Protocol** defined in UEFI spec 2.8, section 29.7.3.

+

+### EDK2 Redfish Non-Collection ***[[4]](#[0])*** and Collection ***[[5]](#[0])*** Feature Drivers

+EDK2 Redfish feature driver is an intermediary driver that sits between **JSON Schema

+to C Structure converters** and **EFI Platform Configuration to Redfish Protocol**. The

+Redfish feature driver gets and sets the platform configuration and incorporates it with

+Redfish JSON schema C structure to manipulate Redfish JSON resources. Then applies the

+settings from Redfish service to platform configurations, or vise versa to update platform

+configurations to Redfish service. Both EDK2 Redfish Non-Collection and Collection Feature

+drivers are script auto-generated base on Redfish schema naming. The EDK2 Redfish

+Non-Collection feature driver manages the resource of specific Resdifsh resource type,

+while the EDK2 Redfish Collection feature driver manages the members which have the same

+resource type in collection resource (e.g the ComputerSystem resource and

+ComputerSystemCollection resource).

+

+### EFI Platform Config to Redfish Protocol ***[[6]](#[0])***

+EFI Platform Config to Redfish Protocol is an abstract driver that abstracts the platform

+configuration format and storage from EDK2 Redfish Feature driver. This protocol provides

+the interfaces to get and set platform configuration that format and the storage to store

+configuration are agnostic to the feature driver. The platform can provide its own EFI

+Platform Config to Redfish driver to access platform-specific configuration format and

+storage. On EDK2 open source, EFI Platform Config to Redfish Protocol accesses the

+platform configuration in EDK2 HII defined format.

+

+Below is the prototype of **EFI_PLATFORM_CONFIG_TO_REDFISH_PROTOCOL**,

+

+```C

+struct _EDKII_PLATFORM_CONFIG_TO_REDFISH_PROTOCOL {

+  EDKII_REDFISH_PLATFORM_CONFIG_GET_VALUE             GetValue;

+  EDKII_REDFISH_PLATFORM_CONFIG_SET_VALUE             SetValue;

+  EDKII_REDFISH_PLATFORM_CONFIG_GET_CONFIG_LANG       GetConfigureLang;

+  EDKII_REDFISH_PLATFORM_CONFIG_GET_SUPPORTED_SCHEMA  GetSupportedSchema;

+};

+```

+

+### Other instances of EFI Platform Config to Redfish Protocol ***[[7]](#[0])***

+For those Non-EDK2 HII-based platform configuration formats, the driver instance can

+provide its own implementation to get or set the platform configurations.

+

+### EDK2 HII VFR Form ***[[8]](#[0])***

+According to **UEFI spec 2.9 section 35.6 Form Browser Protocol**,

+**EFI_HII_REST_STYLE_FORMSET_GUID** is used on HII form to indicate that HII options

+declared in this form intend to interact with the REST architectural style. On edk2

+open source, the REST architectural style refers to the Redfish service. Besides

+**EFI_HII_REST_STYLE_FORMSET_GUID** is defined in the form scope,

+**EFI_IFR_FLAG_REST_STYLE** can be assigned to the HII options that indicate those

+options intend to interact with the REST service.

+

+### EDK2 HII UNI file ***[[9]](#[0])***

+x-uefi-redfish Configure Language is used in UNI file to associate HII option with

+the particular Redfish property. The Hii options interact with EDK2 Redfish Feature

+driver if the string of HII option is assigned with x-uefi-redfish Language as

+in below,

+

+```C

+x-uefi-redfish-$(NAMESPACE)

+where $(NAMESPACE) is the combination of Redfish ResourceTypeName and schema version.

+```

+For example, if the HII option is mapped to the property in Processor.v1_0_0.

+The x-uefi-redfish configure language is declared as below,

+```C

+x-uefi-redfish-Processor.v1_0_0

+```

+#### x-uefi-redfish Configure Language format:

+- The string declared with x-uefi-redfish configure language is a path to the property

+in Redfish resource

+- The root of path is the Redfish resource type indicated in x-uefi-redfish configure

+language

+- The path is relative to root of Redfish resource type, not related to Redfish service

+- root.

+

+#### Examples,

+```C

+Properties:

+

+#string STR_BOOT_SOURCE_OVERRIDE_ENABLED_PROMPT #language x_uefi_redfish_ComputerSystem.v1_0_0  "/Boot/BootSourceOverrideEnabled"

+#string STR_BOOT_SOURCE_OVERRIDE_MODE_PROMPT    #language x_uefi_redfish_ComputerSystem.v1_0_0  "/Boot/BootSourceOverrideMode"

+#string STR_BOOT_SOURCE_OVERRIDE_TARGET_PROMPT  #language x_uefi_redfish_ComputerSystem.v1_0_0  "/Boot/BootSourceOverrideTarget"

+```

+```C

+Properties in array object [NUM]:

+

+#string STR_BOOT_ORDER_1_PROMPT  #language x_uefi_redfish_ComputerSystem.v1_11_0  "/Boot/BootOrder/[1]/Boot0001"

+#string STR_BOOT_ORDER_2_PROMPT  #language x_uefi_redfish_ComputerSystem.v1_11_0  "/Boot/BootOrder/[2]/Boot0002"

+#string STR_BOOT_ORDER_3_PROMPT  #language x_uefi_redfish_ComputerSystem.v1_11_0  "/Boot/BootOrder/[3]/Boot0003"

+```

+```C

+Properties in collection object {NUM}:

+

+#string STR_MEMORY_1_BASE_MODULE_TYPE_PROMPT  #language x_uefi_redfish_Memory.v1_7_1  "/Memory/{1}/BaseModuleType"

+#string STR_MEMORY_2_BASE_MODULE_TYPE_PROMPT  #language x_uefi_redfish_Memory.v1_7_1  "/Memory/{2}/BaseModuleType"

+#string STR_MEMORY_3_BASE_MODULE_TYPE_PROMPT  #language x_uefi_redfish_Memory.v1_7_1  "/Memory/{3}/BaseModuleType"

+```

+

+### EDK2 Build Tool ***[[10]](#[0])***

+EDK2 Build is responsible to pull the necessary EDK2 Redfish JSON Schema to C Structure

+Convertors and EDK2 Redfish Feature drivers into edk2 build process according to the

+x-uefi-Redfish config language used in the HII VFR forms.

+

+## The Contributors

+Chang, Abner <abner.chang@...>\

+Wang, Nickle <nickle.wang@...>\

+Chen, Aaron <aaron.chen@...>

diff --git a/RedfishClientPkg/Documents/Media/RedfishClientDriverStack.svg b/RedfishClientPkg/Documents/Media/RedfishClientDriverStack.svg

new file mode 100644

index 0000000000..eb59eb9992

--- /dev/null

+++ b/RedfishClientPkg/Documents/Media/RedfishClientDriverStack.svg

@@ -0,0 +1,680 @@

+<?xml version="1.0" encoding="UTF-8" standalone="no"?>

+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

+<!-- Generated by Microsoft Visio, SVG Export RedfishClientDriverStack.svg Page-2 -->

+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"

+        width="12.1281in" height="9.93872in" viewBox="0 0 873.222 715.588" xml:space="preserve" color-interpolation-filters="sRGB"

+        class="st68">

+    <style type="text/css">

+    <![CDATA[

+        .st1 {fill:#ffffff;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}

+        .st2 {fill:#ebf1df;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}

+        .st3 {fill:#ff1a1a;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}

+        .st4 {fill:#ffffff;font-family:Calibri;font-size:1.00001em;font-weight:bold}

+        .st5 {font-size:1em}

+        .st6 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}

+        .st7 {fill:#000000;font-family:Calibri;font-size:1.00001em;font-weight:bold}

+        .st8 {fill:#dbeef3;stroke:#d8d8d8;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}

+        .st9 {fill:#ffffff;font-family:Calibri;font-size:1.08334em;font-weight:bold}

+        .st10 {visibility:visible}

+        .st11 {fill:none;filter:url(#filter_3.3333334922791);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0.4}

+        .st12 {fill:none;stroke:#bfbfbf;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}

+        .st13 {fill:#000000;font-family:Arial;font-size:1.99999em;font-style:italic;font-weight:bold}

+        .st14 {marker-end:url(#mrkr2-45);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.9}

+        .st15 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.42986425339367}

+        .st16 {fill:#000000;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}

+        .st17 {fill:#ffffff;font-family:Arial;font-size:1.33333em;font-weight:bold}

+        .st18 {fill:#ffffff;stroke:#595959;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}

+        .st19 {fill:#7f7f7f;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}

+        .st20 {fill:#ffffff;font-family:Calibri;font-size:1.08334em}

+        .st21 {fill:#000000;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}

+        .st22 {fill:#000000;font-family:Calibri;font-size:0.833336em;font-weight:bold}

+        .st23 {marker-start:url(#mrkr10-112);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.25}

+        .st24 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.40983606557377}

+        .st25 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}

+        .st26 {fill:#000000;fill-opacity:0.4;filter:url(#filter_3.3333334922791);stroke:#000000;stroke-dasharray:10.5,7.5;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0.4}

+        .st27 {fill:#0070c0;stroke:#003f6c;stroke-dasharray:10.5,7.5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}

+        .st28 {fill:#000000;font-family:Calibri;font-size:1.00001em;font-style:italic;font-weight:bold}

+        .st29 {fill:#ffffff;stroke:#000000;stroke-dasharray:1.68,1.2;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}

+        .st30 {fill:#000000;font-family:Calibri;font-size:0.833336em}

+        .st31 {fill:#ffffff;stroke:#000000;stroke-dasharray:3.5,2.5;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.5}

+        .st32 {stroke:#7f7f7f;stroke-linecap:round;stroke-linejoin:round;stroke-width:4.5}

+        .st33 {fill:#000000;fill-opacity:0.38;filter:url(#filter_3.3333334922791);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0.38}

+        .st34 {fill:#000000;fill-opacity:0.38;stroke:#000000;stroke-opacity:0.38;stroke-width:0.22935779816514}

+        .st35 {fill:#f2f2f2;stroke:#7f7f7f;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}

+        .st36 {fill:#7f7f7f;fill-opacity:1;stroke:#7f7f7f;stroke-opacity:1;stroke-width:0.22935779816514}

+        .st37 {fill:#d8d8d8;stroke:#7f7f7f;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}

+        .st38 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}

+        .st39 {fill:#000000;fill-opacity:0.4;filter:url(#filter_3.3333334922791);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0.4}

+        .st40 {fill:#0070c0;stroke:#003f6c;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}

+        .st41 {fill:#ffffff;stroke:#000000;stroke-dasharray:9.5,2.5,3.5,2.5;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.5}

+        .st42 {fill:#ffffff;stroke:#000000;stroke-dasharray:3.5,2.5,3.5,2.5,0,2.5;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.5}

+        .st43 {marker-end:url(#mrkr4-212);marker-start:url(#mrkr4-210);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.25}

+        .st44 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.47169811320755}

+        .st45 {fill:#ffffff;stroke:#7f7f7f;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}

+        .st46 {fill:#000000;font-family:Calibri;font-size:1.16666em;font-style:italic;font-weight:bold}

+        .st47 {font-family:Arial;font-size:0.571431em;font-style:normal;font-weight:normal}

+        .st48 {font-family:Arial;font-size:0.571431em;font-style:normal}

+        .st49 {fill:#ea700d;font-family:Arial;font-size:0.571431em;font-style:normal}

+        .st50 {fill:#ffffff;stroke:#7f7f7f;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}

+        .st51 {fill:#d8d8d8;font-family:Calibri;font-size:0.833336em;font-style:italic;font-weight:bold}

+        .st52 {font-size:1.20001em;font-style:normal;font-weight:normal}

+        .st53 {font-size:1em;font-style:normal;font-weight:normal}

+        .st54 {fill:#f59d56;font-size:1em;font-style:normal;font-weight:normal}

+        .st55 {marker-end:url(#mrkr2-350);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2}

+        .st56 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.44247787610619}

+        .st57 {marker-end:url(#mrkr2-383);marker-start:url(#mrkr2-381);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}

+        .st58 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.22935779816514}

+        .st59 {fill:#000000;font-family:Calibri;font-size:0.75em;font-style:italic;font-weight:bold}

+        .st60 {fill:#000000;font-family:Calibri;font-size:0.75em;font-weight:bold}

+        .st61 {fill:#0070c0;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}

+        .st62 {fill:#595959;stroke:none;stroke-linecap:butt;stroke-width:0.75}

+        .st63 {marker-start:url(#mrkr4-405);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.25}

+        .st64 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.3315649867374}

+        .st65 {marker-end:url(#mrkr4-411);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.25}

+        .st66 {marker-end:url(#mrkr10-430);marker-start:url(#mrkr10-112);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.25}

+        .st67 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.25}

+        .st68 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}

+    ]]>

+    </style>

+

+    <defs id="Markers">

+        <g id="lend2">

+            <path d="M 1 1 L 0 0 L 1 -1 L 1 1 " style="stroke:none"/>

+        </g>

+        <marker id="mrkr2-45" class="st15" refX="-2.1368421052632" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend2" transform="scale(-2.3263157894737,-2.3263157894737) "/>

+        </marker>

+        <g id="lend10">

+            <path

+                    d="M 0 0.75 C -0.414214 0.75 -0.75 0.414214 -0.75 0 -0.75 -0.414214 -0.414214 -0.75 0 -0.75 0.414214 -0.75 0.75 -0.414214 0.75 0 0.75 0.414214 0.414214 0.75 0 0.75 Z "

+                    style="stroke:none"/>

+        </g>

+        <marker id="mrkr10-112" class="st24" refX="1.542" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend10" transform="scale(2.44) "/>

+        </marker>

+        <g id="lend42">

+            <path

+                    d="M 0 0.75 C -0.414214 0.75 -0.75 0.414214 -0.75 0 -0.75 -0.414214 -0.414214 -0.75 0 -0.75 0.414214 -0.75 0.75 -0.414214 0.75 0 0.75 0.414214 0.414214 0.75 0 0.75 Z "

+                    style="stroke:none"/>

+        </g>

+        <marker id="mrkr42-163" class="st34" refX="3.27" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend42" transform="scale(4.36) "/>

+        </marker>

+        <marker id="mrkr42-167" class="st36" refX="3.27" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend42" transform="scale(4.36) "/>

+        </marker>

+        <g id="lend4">

+            <path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"/>

+        </g>

+        <marker id="mrkr4-210" class="st44" refX="4.08" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend4" transform="scale(2.12) "/>

+        </marker>

+        <marker id="mrkr4-212" class="st44" refX="-4.08" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend4" transform="scale(-2.12,-2.12) "/>

+        </marker>

+        <marker id="mrkr2-350" class="st56" refX="-2.08" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend2" transform="scale(-2.26,-2.26) "/>

+        </marker>

+        <marker id="mrkr2-381" class="st58" refX="3.88" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend2" transform="scale(4.36) "/>

+        </marker>

+        <marker id="mrkr2-383" class="st58" refX="-3.88" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend2" transform="scale(-4.36,-4.36) "/>

+        </marker>

+        <marker id="mrkr4-405" class="st64" refX="5.744" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend4" transform="scale(3.016) "/>

+        </marker>

+        <marker id="mrkr4-411" class="st64" refX="-6.032" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend4" transform="scale(-3.016,-3.016) "/>

+        </marker>

+        <marker id="mrkr10-430" class="st24" refX="-1.542" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend10" transform="scale(-2.44,-2.44) "/>

+        </marker>

+    </defs>

+    <defs id="Filters">

+        <filter id="filter_3.3333334922791">

+            <feGaussianBlur stdDeviation="3.3333334922791"/>

+        </filter>

+    </defs>

+    <g>

+        <title>VBackground-1</title>

+        <g id="shape1-1">

+            <title>Solid</title>

+            <rect x="0" y="0" width="873.222" height="715.588" class="st1"/>

+        </g>

+    </g>

+    <g>

+        <title>Page-2</title>

+        <g id="shape52-3" transform="translate(336.222,-197.713)">

+            <title>Rectangle.52</title>

+            <rect x="0" y="598.588" width="495" height="117" class="st2"/>

+        </g>

+        <g id="group5-5" transform="translate(772.722,-60.4625)">

+            <title>Can</title>

+            <desc>Redfish Service</desc>

+            <g id="shape6-6">

+                <title>Sheet.6</title>

+                <path d="M0 704.34 A26.4375 11.25 -180 1 0 52.88 704.34 L52.88 663.84 L0 663.84 L0 704.34 Z" class="st3"/>

+            </g>

+            <g id="shape5-8">

+                <ellipse cx="26.4375" cy="663.838" rx="26.4375" ry="11.25" class="st3"/>

+                <text x="7.83" y="693.59" class="st4">Redfish <tspan x="8.6" dy="1.2em" class="st5">Service</tspan></text>          </g>

+        </g>

+        <g id="shape8-12" transform="translate(746.847,-24.4625)">

+            <title>Sheet.8</title>

+            <desc>Redfish Profile Simulator On Network</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="17.62" y="693.09" class="st7">Redfish Profile <tspan x="21.08" dy="1em" class="st5">Simulator On </tspan><tspan

+                        x="32.24" dy="1em" class="st5">Network</tspan></text>       </g>

+        <g id="shape10-17" transform="translate(408.222,-82.9625)">

+            <title>Sheet.10</title>

+            <desc>EFI REST EX</desc>

+            <rect x="0" y="679.588" width="261" height="36" class="st8"/>

+            <text x="99.8" y="700.84" class="st9">EFI REST EX </text>       </g>

+        <g id="shape12-20" transform="translate(57.2224,-197.713)">

+            <title>Rectangle</title>

+            <rect x="0" y="598.588" width="234" height="117" class="st2"/>

+        </g>

+        <g id="shape13-22" transform="translate(30.2224,-24.4625)">

+            <title>Rounded Rectangle.76</title>

+            <g id="shadow13-23" transform="matrix(1.02,0,0,1.02,-6.84,-13.2318)" class="st10">

+                <path d="M9 715.59 L675 715.59 A8.99985 8.99985 -180 0 0 684 706.59 L684 616.59 A8.99985 8.99985 -180 0 0 675 607.59

+                             L9 607.59 A8.99985 8.99985 -180 0 0 0 616.59 L0 706.59 A8.99985 8.99985 -180 0 0 9 715.59 Z"

+                        class="st11"/>

+            </g>

+            <path d="M9 715.59 L675 715.59 A8.99985 8.99985 -180 0 0 684 706.59 L684 616.59 A8.99985 8.99985 -180 0 0 675 607.59

+                         L9 607.59 A8.99985 8.99985 -180 0 0 0 616.59 L0 706.59 A8.99985 8.99985 -180 0 0 9 715.59 Z" class="st12"/>

+        </g>

+        <g id="shape16-27" transform="translate(75.2224,-82.9625)">

+            <title>Sheet.16</title>

+            <desc>EFI REST JSON to C Structure</desc>

+            <rect x="0" y="679.588" width="261" height="36" class="st8"/>

+            <text x="53.89" y="700.84" class="st9">EFI REST JSON to C Structure</text>      </g>

+        <g id="shape17-30" transform="translate(408.222,-37.9625)">

+            <title>Sheet.17</title>

+            <desc>EFI Network Stack</desc>

+            <rect x="0" y="679.588" width="261" height="36" class="st8"/>

+            <text x="81.72" y="700.84" class="st9">EFI Network Stack</text>     </g>

+        <g id="shape18-33" transform="translate(75.2224,-37.9625)">

+            <title>Sheet.18</title>

+            <desc>EFI Redfish Discover Protocl</desc>

+            <rect x="0" y="679.588" width="261" height="36" class="st8"/>

+            <text x="55.56" y="700.84" class="st9">EFI Redfish Discover Protocl</text>      </g>

+        <g id="shape19-36" transform="translate(291.222,-51.4625)">

+            <title>Sheet.19</title>

+            <desc>EDKII Redfish Foundation</desc>

+            <rect x="0" y="670.588" width="184" height="45" class="st6"/>

+            <text x="12.66" y="685.89" class="st13">EDKII Redfish <tspan x="26.69" dy="1.2em" class="st5">Foundation</tspan></text>     </g>

+        <g id="shape20-40" transform="translate(904.308,1335.5) rotate(-19.179) scale(1,-1)">

+            <title>Curve connect 1</title>

+            <path d="M0 715.59 A42.4531 42.4531 0 0 1 54.79 715.59 A42.4531 42.4531 -180 0 0 106.06 718.26 L106.35 718.04"

+                    class="st14"/>

+        </g>

+        <g id="shape21-46" transform="translate(18.9724,-139.213)">

+            <title>Sheet.21</title>

+            <desc>EDKII Redfish Client</desc>

+            <rect x="0" y="211.588" width="24.75" height="504" class="st16"/>

+            <text x="-10.85" y="-540.93" writing-mode="tb-rl" transform="rotate(180)" class="st17">EDKII Redfish Client</text>      </g>

+        <g id="shape24-49" transform="translate(111.222,-253.963)">

+            <title>Sheet.24</title>

+            <rect x="0" y="670.588" width="153" height="45" class="st18"/>

+        </g>

+        <g id="shape25-51" transform="translate(84.2224,-240.463)">

+            <title>Sheet.25</title>

+            <rect x="0" y="670.588" width="153" height="45" class="st18"/>

+        </g>

+        <g id="shape26-53" transform="translate(75.2224,-226.963)">

+            <title>Sheet.26</title>

+            <desc>Script-generated Redfish JSON schema to C Structure convertor</desc>

+            <rect x="0" y="670.588" width="153" height="45" class="st19"/>

+            <text x="11.2" y="683.34" class="st20">Script-generated Redfish <tspan x="29.22" dy="1em" class="st5">JSON schema to C </tspan><tspan

+                        x="24.45" dy="1em" class="st5">Structure convertor</tspan></text>       </g>

+        <g id="shape28-58" transform="translate(241.722,-267.463)">

+            <title>Sheet.28</title>

+            <ellipse cx="1.6875" cy="713.9" rx="1.6875" ry="1.6875" class="st21"/>

+        </g>

+        <g id="shape29-60" transform="translate(245.66,-272.525)">

+            <title>Sheet.29</title>

+            <ellipse cx="1.6875" cy="713.9" rx="1.6875" ry="1.6875" class="st21"/>

+        </g>

+        <g id="shape30-62" transform="translate(250.16,-277.588)">

+            <title>Sheet.30</title>

+            <ellipse cx="1.6875" cy="713.9" rx="1.6875" ry="1.6875" class="st21"/>

+        </g>

+        <g id="shape31-64" transform="translate(178.722,-204.463)">

+            <title>Sheet.31</title>

+            <desc>ComputerSystem</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="18.16" y="704.59" class="st22">ComputerSystem</text>       </g>

+        <g id="shape32-67" transform="translate(201.222,-220.213)">

+            <title>Sheet.32</title>

+            <desc>BootOption</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="29.69" y="704.59" class="st22">BootOption</text>       </g>

+        <g id="shape33-70" transform="translate(210.222,-233.713)">

+            <title>Sheet.33</title>

+            <desc>Memory</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="36.21" y="704.59" class="st22">Memory</text>       </g>

+        <g id="shape34-73" transform="translate(385.722,-247.213)">

+            <title>Sheet.34</title>

+            <rect x="0" y="670.588" width="153" height="45" class="st18"/>

+        </g>

+        <g id="shape35-75" transform="translate(358.722,-233.713)">

+            <title>Sheet.35</title>

+            <rect x="0" y="670.588" width="153" height="45" class="st18"/>

+        </g>

+        <g id="shape36-77" transform="translate(349.722,-220.213)">

+            <title>Sheet.36</title>

+            <desc>Script-generated EDK2 Redfish Feature Driver</desc>

+            <rect x="0" y="670.588" width="153" height="45" class="st19"/>

+            <text x="16.96" y="689.84" class="st20">Script-generated EDK2 <tspan x="17.33" dy="1em" class="st5">Redfish Feature Driver</tspan></text>       </g>

+        <g id="shape40-81" transform="translate(453.222,-197.713)">

+            <title>Sheet.40</title>

+            <desc>ComputerSystem</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="18.16" y="704.59" class="st22">ComputerSystem</text>       </g>

+        <g id="shape41-84" transform="translate(475.722,-213.463)">

+            <title>Sheet.41</title>

+            <desc>BootOption</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="29.69" y="704.59" class="st22">BootOption</text>       </g>

+        <g id="shape42-87" transform="translate(493.722,-226.963)">

+            <title>Sheet.42</title>

+            <desc>Memory</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="36.21" y="704.59" class="st22">Memory</text>       </g>

+        <g id="shape43-90" transform="translate(608.472,-249.463)">

+            <title>Sheet.43</title>

+            <rect x="0" y="670.588" width="153" height="45" class="st18"/>

+        </g>

+        <g id="shape46-92" transform="translate(738.972,-262.963)">

+            <title>Sheet.46</title>

+            <ellipse cx="1.6875" cy="713.9" rx="1.6875" ry="1.6875" class="st21"/>

+        </g>

+        <g id="shape47-94" transform="translate(742.91,-268.025)">

+            <title>Sheet.47</title>

+            <ellipse cx="1.6875" cy="713.9" rx="1.6875" ry="1.6875" class="st21"/>

+        </g>

+        <g id="shape48-96" transform="translate(747.41,-273.088)">

+            <title>Sheet.48</title>

+            <ellipse cx="1.6875" cy="713.9" rx="1.6875" ry="1.6875" class="st21"/>

+        </g>

+        <g id="shape49-98" transform="translate(660.222,-199.963)">

+            <title>Sheet.49</title>

+            <desc>ComputerSystemCollection</desc>

+            <rect x="0" y="688.588" width="123.75" height="27" class="st6"/>

+            <text x="5.3" y="704.59" class="st22">ComputerSystemCollection</text>       </g>

+        <g id="shape50-101" transform="translate(720.972,-215.713)">

+            <title>Sheet.50</title>

+            <desc>BootOptionCollection</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="8.96" y="704.59" class="st22">BootOptionCollection</text>      </g>

+        <g id="shape51-104" transform="translate(732.222,-229.213)">

+            <title>Sheet.51</title>

+            <desc>MemoryCollection</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="15.48" y="704.59" class="st22">MemoryCollection</text>     </g>

+        <g id="shape56-107" transform="translate(515.651,-269.34) rotate(-1.84761)">

+            <title>Curve connect 2.56</title>

+            <path d="M1.08 713.99 L1.29 713.7 A41.432 41.432 0 0 1 69.79 715.59" class="st23"/>

+        </g>

+        <g id="shape57-113" transform="translate(581.472,-235.963)">

+            <title>Sheet.57</title>

+            <rect x="0" y="670.588" width="153" height="45" class="st18"/>

+        </g>

+        <g id="shape59-115" transform="translate(291.222,-242.713)">

+            <title>1-D double</title>

+            <path d="M13.5 693.99 L13.5 688.59 L0 702.09 L13.5 715.59 L13.5 710.19 L31.5 710.19 L31.5 715.59 L45 702.09 L31.5 688.59

+                         L31.5 693.99 L13.5 693.99 Z" class="st25"/>

+        </g>

+        <g id="shape64-117" transform="translate(619.722,-467.713)">

+            <title>Sheet.64</title>

+            <desc>EFI PLATFORM_CONFIG_TO_REDFISH_PROTOCOL</desc>

+            <g id="shadow64-118" transform="matrix(1.02,0,0,1.02,-1.98,-13.8618)" class="st10">

+                <path d="M0 715.59 L198 715.59 L198 670.59 L0 670.59 L0 715.59 Z" class="st26"/>

+            </g>

+            <path d="M0 715.59 L198 715.59 L198 670.59 L0 670.59 L0 715.59 Z" class="st27"/>

+            <text x="91.2" y="683.34" class="st20">EFI <tspan x="6.13" dy="1em" class="st5">PLATFORM</tspan>_CONFIG_TO_REDFISH_<tspan

+                        x="69.84" dy="1em" class="st5">PROTOCOL</tspan></text>      </g>

+        <g id="shape65-125" transform="translate(511.722,-445.213)">

+            <title>Sheet.65</title>

+            <desc>EFI PLATFORM_CONFIG_TO_REDFISH_PROTOCOL</desc>

+            <g id="shadow65-126" transform="matrix(1.02,0,0,1.02,-1.98,-13.8618)" class="st10">

+                <path d="M0 715.59 L198 715.59 L198 670.59 L0 670.59 L0 715.59 Z" class="st26"/>

+            </g>

+            <path d="M0 715.59 L198 715.59 L198 670.59 L0 670.59 L0 715.59 Z" class="st27"/>

+            <text x="91.2" y="683.34" class="st20">EFI <tspan x="6.13" dy="1em" class="st5">PLATFORM</tspan>_CONFIG_TO_REDFISH_<tspan

+                        x="69.84" dy="1em" class="st5">PROTOCOL</tspan></text>      </g>

+        <g id="shape67-133" transform="translate(536.472,-593.713)">

+            <title>Sheet.67</title>

+            <desc>Other Platform-specific Implementations</desc>

+            <rect x="0" y="688.588" width="243" height="27" class="st6"/>

+            <text x="20.02" y="705.09" class="st28">Other Platform-specific Implementations</text>      </g>

+        <g id="group71-136" transform="translate(567.972,-530.713)">

+            <title>Can.71</title>

+            <desc>EFI Variable/ FW Storage</desc>

+            <g id="shape72-137">

+                <title>Sheet.72</title>

+                <path d="M0 709.29 A29.25 6.3 -180 1 0 58.5 709.29 L58.5 658.89 L0 658.89 L0 709.29 Z" class="st29"/>

+            </g>

+            <g id="shape71-139">

+                <ellipse cx="29.25" cy="658.888" rx="29.25" ry="6.3" class="st29"/>

+                <text x="23.25" y="675.09" class="st30">EFI <tspan x="10.54" dy="1.2em" class="st5">Variable</tspan>/ <tspan

+                            x="5.79" dy="1.2em" class="st5">FW Storage</tspan></text>           </g>

+        </g>

+        <g id="group73-144" transform="translate(687.222,-530.713)">

+            <title>Can.73</title>

+            <desc>Other Storage</desc>

+            <g id="shape74-145">

+                <title>Sheet.74</title>

+                <path d="M0 709.29 A29.25 6.3 -180 1 0 58.5 709.29 L58.5 658.89 L0 658.89 L0 709.29 Z" class="st29"/>

+            </g>

+            <g id="shape73-147">

+                <ellipse cx="29.25" cy="658.888" rx="29.25" ry="6.3" class="st29"/>

+                <text x="17.41" y="681.09" class="st30">Other <tspan x="13.66" dy="1.2em" class="st5">Storage</tspan></text>            </g>

+        </g>

+        <g id="shape76-151" transform="translate(1306.06,184.875) rotate(90)">

+            <title>1-D double.76</title>

+            <path d="M6.75 704.79 L6.75 702.09 L0 708.84 L6.75 715.59 L6.75 712.89 L33.75 712.89 L33.75 715.59 L40.5 708.84 L33.75

+                         702.09 L33.75 704.79 L6.75 704.79 Z" class="st31"/>

+        </g>

+        <g id="shape77-153" transform="translate(1425.31,184.875) rotate(90)">

+            <title>1-D double.77</title>

+            <path d="M6.75 704.79 L6.75 702.09 L0 708.84 L6.75 715.59 L6.75 712.89 L11.25 712.89 L11.25 715.59 L18 708.84 L11.25

+                         702.09 L11.25 704.79 L6.75 704.79 Z" class="st31"/>

+        </g>

+        <g id="shape78-155" transform="translate(21.2224,-139.213)">

+            <title>Sheet.78</title>

+            <path d="M0 715.59 L810 715.59" class="st32"/>

+        </g>

+        <g id="group80-158" transform="translate(-173.49,382.875) rotate(-90)">

+            <title>Folded Corner</title>

+            <g id="shape80-159">

+                <g id="shadow80-160" transform="matrix(1.02,0,0,1.02,-3.105,-9.45175)" class="st10">

+                    <path d="M0 715.59 L278.62 715.59 L310.5 688.27 L310.5 229.59 L0 229.59 L0 715.59 Z" class="st33"/>

+                </g>

+                <path d="M0 715.59 L278.62 715.59 L310.5 688.27 L310.5 229.59 L0 229.59 L0 715.59 Z" class="st35"/>

+            </g>

+            <g id="shape81-168" transform="translate(278.625,0)">

+                <title>Sheet.81</title>

+                <g id="shadow81-169" transform="matrix(1.02,0,0,1.02,-0.6375,-14.3117)" class="st10">

+                    <path d="M0 715.59 L31.88 688.27 L4.87 684.09 L0 715.59 Z" class="st33"/>

+                </g>

+                <path d="M0 715.59 L31.88 688.27 L4.87 684.09 L0 715.59 Z" class="st37"/>

+            </g>

+        </g>

+        <g id="group82-175" transform="translate(432.972,-530.713)">

+            <title>Can.69</title>

+            <desc>EDK2 HII Database</desc>

+            <g id="shape83-176">

+                <title>Sheet.83</title>

+                <path d="M0 709.29 A29.25 6.3 -180 1 0 58.5 709.29 L58.5 658.89 L0 658.89 L0 709.29 Z" class="st38"/>

+            </g>

+            <g id="shape82-178">

+                <ellipse cx="29.25" cy="658.888" rx="29.25" ry="6.3" class="st38"/>

+                <text x="11.84" y="681.09" class="st30">EDK2 HII <tspan x="10.24" dy="1.2em" class="st5">Database</tspan></text>            </g>

+        </g>

+        <g id="shape84-182" transform="translate(390.222,-429.463)">

+            <title>Sheet.84</title>

+            <desc>EFI PLATFORM_CONFIG_TO_REDFISH_PROTOCOL</desc>

+            <g id="shadow84-183" transform="matrix(1.02,0,0,1.02,-1.44,-13.8618)" class="st10">

+                <rect x="0" y="670.588" width="144" height="45" class="st39"/>

+            </g>

+            <rect x="0" y="670.588" width="144" height="45" class="st40"/>

+            <text x="64.2" y="683.34" class="st20">EFI <tspan x="4.73" dy="1em" class="st5">PLATFORM</tspan>_CONFIG_TO_<tspan

+                        x="17.24" dy="1em" class="st5">REDFISH</tspan>_PROTOCOL</text>      </g>

+        <g id="shape85-190" transform="translate(1171.06,184.875) rotate(90)">

+            <title>1-D double.75</title>

+            <path d="M6.75 704.79 L6.75 702.09 L0 708.84 L6.75 715.59 L6.75 712.89 L49.5 712.89 L49.5 715.59 L56.25 708.84 L49.5

+                         702.09 L49.5 704.79 L6.75 704.79 Z" class="st38"/>

+        </g>

+        <g id="shape86-192" transform="translate(1164.31,286.125) rotate(90)">

+            <title>1-D double.68</title>

+            <g id="shadow86-193" transform="matrix(1.02,0,0,1.02,-1.1475,-14.0418)" class="st10">

+                <path d="M13.5 693.99 L13.5 688.59 L0 702.09 L13.5 715.59 L13.5 710.19 L101.25 710.19 L101.25 715.59 L114.75 702.09

+                             L101.25 688.59 L101.25 693.99 L13.5 693.99 Z" class="st39"/>

+            </g>

+            <path d="M13.5 693.99 L13.5 688.59 L0 702.09 L13.5 715.59 L13.5 710.19 L101.25 710.19 L101.25 715.59 L114.75 702.09 L101.25

+                         688.59 L101.25 693.99 L13.5 693.99 Z" class="st38"/>

+        </g>

+        <g id="shape87-197" transform="translate(27.9724,-616.213)">

+            <title>Sheet.87</title>

+            <desc>EDK2 Open Source Implementation</desc>

+            <rect x="0" y="688.588" width="243" height="27" class="st6"/>

+            <text x="34.39" y="705.09" class="st28">EDK2 Open Source Implementation</text>      </g>

+        <g id="shape88-200" transform="translate(1312.81,270.375) rotate(90)">

+            <title>1-D double.88</title>

+            <path d="M13.5 693.99 L13.5 688.59 L0 702.09 L13.5 715.59 L13.5 710.19 L117 710.19 L117 715.59 L130.5 702.09 L117 688.59

+                         L117 693.99 L13.5 693.99 Z" class="st41"/>

+        </g>

+        <g id="shape89-202" transform="translate(1434.31,247.875) rotate(90)">

+            <title>1-D double.89</title>

+            <path d="M13.5 693.99 L13.5 688.59 L0 702.09 L13.5 715.59 L13.5 710.19 L139.5 710.19 L139.5 715.59 L153 702.09 L139.5

+                         688.59 L139.5 693.99 L13.5 693.99 Z" class="st42"/>

+        </g>

+        <g id="shape90-204" transform="translate(838.629,252.112) rotate(68.1986)">

+            <title>Curve connect 1.61</title>

+            <path d="M7.53 720.84 L7.83 721.04 A30.61 30.61 -180 0 0 42.41 715.59 A30.61 30.61 0 0 1 76.99 710.13 L77.29 710.34"

+                    class="st43"/>

+        </g>

+        <g id="shape91-213" transform="translate(-37.5816,162.844) rotate(-60.2551) scale(-1,1)">

+            <title>Curve connect 1.62</title>

+            <path d="M7.67 720.62 L7.98 720.82 A34.3918 34.3918 -180 0 0 45.35 715.59 A34.3918 34.3918 0 0 1 82.72 710.35 L83.03

+                         710.55" class="st43"/>

+        </g>

+        <g id="shape94-220" transform="translate(488.651,-255.84) rotate(-1.84761)">

+            <title>Curve connect 2.54</title>

+            <path d="M1.08 713.99 L1.29 713.7 A41.432 41.432 0 0 1 69.79 715.59" class="st23"/>

+        </g>

+        <g id="shape96-225" transform="translate(572.472,-222.463)">

+            <title>Sheet.96</title>

+            <desc>Script-generated EDK2 Redfish Collection Driver</desc>

+            <rect x="0" y="670.588" width="153" height="45" class="st19"/>

+            <text x="16.96" y="689.84" class="st20">Script-generated EDK2 <tspan x="11.39" dy="1em" class="st5">Redfish Collection Driver</tspan></text>        </g>

+        <g id="shape98-229" transform="translate(67.3474,-420.463)">

+            <title>Rounded Rectangle.98</title>

+            <desc>EDK2 HII UNI file #string STR_OPTION_A #language x-uefi-redfi...</desc>

+            <path d="M7.73 715.59 L266.77 715.59 A7.73227 7.73227 -180 0 0 274.5 707.86 L274.5 637.82 A7.73227 7.73227 -180 0 0 266.77

+                         630.09 L7.73 630.09 A7.73227 7.73227 -180 0 0 -0 637.82 L0 707.86 A7.73227 7.73227 -180 0 0 7.73 715.59

+                         Z" class="st45"/>

+            <text x="4" y="646.69" class="st46">EDK2 HII UNI file<tspan x="4" dy="1.425em" class="st47">#</tspan><tspan

+                        class="st47">string </tspan><tspan class="st48">STR</tspan><tspan class="st48">_</tspan><tspan class="st48">OPTION</tspan><tspan

+                        class="st48">_</tspan><tspan class="st48">A</tspan><tspan class="st47">  </tspan><tspan class="st47">#</tspan><tspan

+                        class="st47">language </tspan><tspan class="st48">x</tspan><tspan class="st48">-</tspan><tspan class="st48">uefi</tspan><tspan

+                        class="st48">-</tspan><tspan class="st48">redfish</tspan><tspan class="st48">-</tspan><tspan class="st48">SCHEMA</tspan><tspan

+                        class="st48">.</tspan><tspan class="st48">VERSION</tspan><tspan class="st47">  </tspan><tspan class="st48"> </tspan><tspan

+                        x="4" dy="1.2em" class="st49">“</tspan><tspan class="st49">/</tspan><tspan class="st49">SCHEMA</tspan><tspan

+                        class="st49">/</tspan><tspan class="st49">PropertyA</tspan><tspan class="st48">” </tspan><tspan

+                        class="st47">  </tspan><tspan x="4" dy="1.2em" class="st47">#</tspan><tspan class="st47">string</tspan><tspan

+                        class="st48"> </tspan><tspan class="st48">STR</tspan><tspan class="st48">_</tspan><tspan class="st48">OPTION</tspan><tspan

+                        class="st48">_</tspan><tspan class="st48">B</tspan><tspan class="st47">  </tspan><tspan class="st47">#</tspan><tspan

+                        class="st47">language</tspan><tspan class="st48"> </tspan><tspan class="st48">x</tspan><tspan class="st48">-</tspan><tspan

+                        class="st48">uefi</tspan><tspan class="st48">-</tspan><tspan class="st48">redfish</tspan><tspan

+                        class="st48">-</tspan><tspan class="st48">SCHEMA</tspan><tspan class="st48">.</tspan><tspan class="st48">VERSION</tspan><tspan

+                        class="st47">  </tspan><tspan class="st49"> </tspan><tspan x="4" dy="1.2em" class="st49">“</tspan><tspan

+                        class="st49">/</tspan><tspan class="st49">SCHEMA</tspan><tspan class="st49">/</tspan><tspan class="st49">PropertyB</tspan><tspan

+                        class="st49">” </tspan><tspan x="4" dy="1.2em" class="st47">#</tspan><tspan class="st47">string </tspan><tspan

+                        class="st48">STR</tspan><tspan class="st48">_</tspan><tspan class="st48">OPTION</tspan><tspan class="st48">_</tspan><tspan

+                        class="st47">C  </tspan><tspan class="st47">#</tspan><tspan class="st47">language</tspan><tspan

+                        class="st48"> </tspan><tspan class="st48">x</tspan><tspan class="st48">-</tspan><tspan class="st48">uefi</tspan><tspan

+                        class="st48">-</tspan><tspan class="st48">redfish</tspan><tspan class="st48">-</tspan><tspan class="st48">SCHEMA</tspan><tspan

+                        class="st48">.</tspan><tspan class="st48">VERSION</tspan><tspan class="st47">  </tspan><tspan class="st49"> </tspan><tspan

+                        x="4" dy="1.312em" class="st49">“</tspan><tspan class="st49">/</tspan><tspan class="st49">SCHEMA</tspan><tspan

+                        class="st49">/</tspan><tspan class="st49">PropertyC</tspan><tspan class="st49">”</tspan></text>       </g>

+        <g id="shape100-316" transform="translate(171.972,-550.963)">

+            <title>Rounded Rectangle.100</title>

+            <desc>EDK2 HII VFR Form Option A Enabled Option B Disabled Option C...</desc>

+            <path d="M4.5 715.59 L148.5 715.59 A4.49993 4.49993 -180 0 0 153 711.09 L153 664.96 A4.49993 4.49993 -180 0 0 148.5 660.46

+                         L4.5 660.46 A4.49993 4.49993 -180 0 0 0 664.96 L0 711.09 A4.49993 4.49993 -180 0 0 4.5 715.59 Z"

+                    class="st50"/>

+            <text x="37.65" y="671.66" class="st51">EDK2 HII VFR Form<tspan x="24.37" dy="1.6em" class="st52">Option A        Enabled </tspan><tspan

+                        x="24.6" dy="0.8em" class="st52">Option B       Disabled </tspan><tspan x="24.4" dy="0.8em" class="st52">Option C              </tspan><tspan

+                        class="st52">0</tspan><tspan class="st52">x</tspan><tspan class="st52">16</tspan></text>        </g>

+        <g id="shape101-325" transform="translate(147.222,-539.713)">

+            <title>Rounded Rectangle.101</title>

+            <desc>EDK2 HII VFR Form Option A Enabled Option B Disabled Option C...</desc>

+            <path d="M4.5 715.59 L148.5 715.59 A4.49993 4.49993 -180 0 0 153 711.09 L153 664.96 A4.49993 4.49993 -180 0 0 148.5 660.46

+                         L4.5 660.46 A4.49993 4.49993 -180 0 0 0 664.96 L0 711.09 A4.49993 4.49993 -180 0 0 4.5 715.59 Z"

+                    class="st50"/>

+            <text x="37.65" y="671.66" class="st51">EDK2 HII VFR Form<tspan x="24.37" dy="1.6em" class="st52">Option A        Enabled </tspan><tspan

+                        x="24.6" dy="0.8em" class="st52">Option B       Disabled </tspan><tspan x="24.4" dy="0.8em" class="st52">Option C              </tspan><tspan

+                        class="st52">0</tspan><tspan class="st52">x</tspan><tspan class="st52">16</tspan></text>        </g>

+        <g id="shape102-334" transform="translate(129.222,-526.213)">

+            <title>Rounded Rectangle</title>

+            <desc>EDK2 HII VFR Form Option A Enabled Option B Disabled Option C...</desc>

+            <path d="M4.5 715.59 L148.5 715.59 A4.49993 4.49993 -180 0 0 153 711.09 L153 664.96 A4.49993 4.49993 -180 0 0 148.5 660.46

+                         L4.5 660.46 A4.49993 4.49993 -180 0 0 0 664.96 L0 711.09 A4.49993 4.49993 -180 0 0 4.5 715.59 Z"

+                    class="st50"/>

+            <text x="29.88" y="671.66" class="st28">EDK2 HII VFR Form<tspan x="24.37" dy="1.6em" class="st53">Option A        </tspan><tspan

+                        class="st54">Enabled </tspan><tspan x="24.6" dy="0.8em" class="st53">Option B       </tspan><tspan

+                        class="st54">Disabled </tspan><tspan x="24.4" dy="0.8em" class="st53">Option C              </tspan><tspan

+                        class="st54">0</tspan><tspan class="st54">x</tspan><tspan class="st54">16</tspan></text>        </g>

+        <g id="shape110-345" transform="translate(503.938,-444.613) rotate(13.0919)">

+            <title>Curve connect 1.110</title>

+            <path d="M0 715.59 A11.592 11.592 0 0 1 22.97 715.59 A13.4718 13.4718 -180 0 0 48.31 719.9 L48.42 719.56" class="st55"/>

+        </g>

+        <g id="shape122-351" transform="translate(41.4724,-96.4625)">

+            <title>Sheet.122</title>

+            <desc>[1]</desc>

+            <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>

+            <text x="5.44" y="705.09" class="st7">[1]</text>        </g>

+        <g id="shape123-354" transform="translate(746.847,-100.963)">

+            <title>Sheet.123</title>

+            <desc>[2]</desc>

+            <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>

+            <text x="5.44" y="705.09" class="st7">[2]</text>        </g>

+        <g id="shape124-357" transform="translate(68.4724,-278.713)">

+            <title>Sheet.124</title>

+            <desc>[3]</desc>

+            <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>

+            <text x="5.44" y="705.09" class="st7">[3]</text>        </g>

+        <g id="shape125-360" transform="translate(338.472,-269.713)">

+            <title>Sheet.125</title>

+            <desc>[4]</desc>

+            <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>

+            <text x="5.44" y="705.09" class="st7">[4]</text>        </g>

+        <g id="shape126-363" transform="translate(761.472,-269.713)">

+            <title>Sheet.126</title>

+            <desc>[5]</desc>

+            <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>

+            <text x="5.44" y="705.09" class="st7">[5]</text>        </g>

+        <g id="shape127-366" transform="translate(390.222,-476.713)">

+            <title>Sheet.127</title>

+            <desc>[6]</desc>

+            <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>

+            <text x="5.44" y="705.09" class="st7">[6]</text>        </g>

+        <g id="shape128-369" transform="translate(123.597,-579.088)">

+            <title>Sheet.128</title>

+            <desc>[8]</desc>

+            <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>

+            <text x="5.44" y="705.09" class="st7">[8]</text>        </g>

+        <g id="shape129-372" transform="translate(62.8474,-501.463)">

+            <title>Sheet.129</title>

+            <desc>[9]</desc>

+            <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>

+            <text x="5.44" y="705.09" class="st7">[9]</text>        </g>

+        <g id="shape132-375" transform="translate(583.722,1233.46) rotate(180)">

+            <title>Curve connect 2.132</title>

+            <path d="M2.78 714.72 L3.12 714.61 A681.188 681.188 0 0 1 406.38 714.61 L406.72 714.72" class="st57"/>

+        </g>

+        <g id="shape133-384" transform="translate(238.347,-157.213)">

+            <title>Sheet.133</title>

+            <desc>Script-generated EDK2 Redfish client driver/library based on ...</desc>

+            <rect x="0" y="688.588" width="261" height="27" class="st1"/>

+            <text x="11.21" y="699.84" class="st59">Script-generated EDK2 Redfish client driver/library based on the <tspan

+                        x="45.23" dy="1em" class="st5">standard Redfish schemas </tspan>published by DMTF</text>        </g>

+        <g id="shape134-388" transform="translate(21.2224,-679.775)">

+            <title>Rectangle.134</title>

+            <rect x="0" y="703.213" width="24.75" height="12.375" class="st2"/>

+        </g>

+        <g id="shape135-390" transform="translate(41.4724,-670.213)">

+            <title>Sheet.135</title>

+            <desc>Script-generated code</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="12.79" y="704.34" class="st60">Script-generated code</text>        </g>

+        <g id="shape137-393" transform="translate(21.2224,-661.213)">

+            <title>Rectangle.137</title>

+            <rect x="0" y="703.213" width="24.75" height="12.375" class="st61"/>

+        </g>

+        <g id="shape138-395" transform="translate(43.7224,-652.213)">

+            <title>Sheet.138</title>

+            <desc>UEFI/EDK2 open source</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="9.97" y="704.34" class="st60">UEFI/EDK2 open source</text>     </g>

+        <g id="shape140-398" transform="translate(281.66,-341.784)">

+            <title>Configure</title>

+            <path d="M41.27 698.83 C40.4 698.46 37.61 697.28 37.61 697.28 L37.79 694.96 L37.94 693.01 L37.69 689.29 L39.53 688.23

+                         C39.53 688.23 40.46 687.84 41.33 687.49 C40.71 685.96 40.45 685.33 39.82 683.81 C38.94 684.17 36.06 685.35

+                         36.06 685.35 L34.63 683.57 C33.94 682.7 33.09 681.89 32.02 681.06 L30.33 679.75 L31.01 677.68 C31.01 677.68

+                         31.41 676.7 31.79 675.77 C30.27 675.14 29.64 674.88 28.12 674.26 C27.72 675.23 26.52 678.17 26.52 678.17

+                         L24.28 677.95 C23.14 677.83 21.96 677.86 20.77 678.02 L18.64 678.3 L17.65 676.35 C17.65 676.35 17.21 675.31

+                         16.78 674.31 C15.27 674.95 14.64 675.21 13.13 675.85 C13.58 676.92 14.85 679.93 14.85 679.93 L13.12 681.37

+                         C12.3 682.05 11.54 682.85 10.79 683.83 L9.49 685.52 L7.41 684.86 C7.41 684.86 6.28 684.4 5.17 683.96 C4.56

+                         685.49 4.31 686.12 3.69 687.65 C4.82 688.1 7.84 689.31 7.84 689.31 C7.84 689.31 7.65 692.73 7.63 693 C7.65

+                         693.25 7.7 694.01 7.7 694.03 C7.7 694.03 7.87 695.84 7.87 695.84 L6.79 696.82 C6.46 697.15 6.34 697.24 3.64

+                         698.3 C4.24 699.84 4.49 700.47 5.08 702.01 C6.21 701.57 9.36 700.34 9.36 700.34 L10.99 702.57 C11.49 703.19

+                         12.18 703.89 13.04 704.61 L14.63 705.96 L13.93 707.96 C13.93 707.96 13.45 709.08 12.97 710.2 C14.47 710.85

+                         15.1 711.12 16.61 711.77 C17.05 710.74 18.36 707.71 18.36 707.71 L20.65 708.03 C21.73 708.19 22.89 708.21

+                         24.1 708.1 L26.18 707.92 L27.11 709.84 C27.11 709.84 27.53 710.9 27.94 711.93 C29.47 711.32 30.1 711.07

+                         31.63 710.45 C31.25 709.51 30.04 706.48 30.04 706.48 L32.32 704.83 C32.97 704.31 33.71 703.56 34.48 702.62

+                         L35.81 701 L37.85 701.7 C37.85 701.7 38.82 702.1 39.73 702.49 C40.37 700.97 40.64 700.34 41.27 698.83 ZM40.58

+                         695.32 C40.58 695.32 40.57 695.4 40.56 695.47 C40.95 695.64 44.96 697.33 44.96 697.33 L41.23 706.17 C41.23

+                         706.17 37.13 704.45 36.75 704.28 C36.7 704.34 36.65 704.41 36.65 704.41 C35.76 705.49 34.89 706.37 33.97

+                         707.11 C33.97 707.11 33.67 707.33 33.46 707.47 C33.62 707.88 35.28 712.02 35.28 712.02 L26.38 715.59 C26.38

+                         715.59 24.65 711.28 24.5 710.89 C24.42 710.9 24.34 710.9 24.34 710.9 C22.91 711.03 21.54 711 20.25 710.82

+                         C20.25 710.82 20.17 710.8 20.09 710.79 C19.93 711.19 18.08 715.47 18.08 715.47 L9.27 711.66 C9.27 711.66

+                         11.18 707.25 11.34 706.86 C11.29 706.81 11.22 706.76 11.22 706.76 C10.23 705.92 9.41 705.09 8.72 704.23

+                         C8.72 704.23 8.51 703.94 8.37 703.75 C7.96 703.9 3.49 705.65 3.49 705.65 L0 696.71 C0 696.71 4.8 694.83

+                         4.8 694.83 C4.8 694.83 4.88 694.8 4.95 694.78 C4.92 694.54 4.89 694.21 4.89 694.21 L4.82 693.02 C4.82 693.02

+                         4.9 691.52 4.92 691.17 C4.54 691.02 0.04 689.21 0.04 689.21 L3.6 680.3 C3.6 680.3 8.06 682.09 8.46 682.25

+                         C8.51 682.18 8.56 682.12 8.56 682.12 C9.43 680.98 10.34 680.02 11.33 679.2 C11.33 679.2 11.39 679.15 11.45

+                         679.11 C11.29 678.72 9.45 674.35 9.45 674.35 L18.29 670.62 C18.29 670.62 20.07 674.85 20.24 675.25 C20.31

+                         675.24 20.39 675.23 20.39 675.23 C21.8 675.04 23.2 675.01 24.56 675.15 C24.56 675.15 24.63 675.16 24.71

+                         675.16 C24.87 674.78 26.59 670.59 26.59 670.59 L35.46 674.23 C35.46 674.23 33.77 678.34 33.61 678.74 C33.67

+                         678.78 33.74 678.83 33.74 678.83 C34.99 679.8 35.99 680.77 36.82 681.8 C36.82 681.8 36.88 681.88 36.94 681.95

+                         C37.33 681.79 41.35 680.14 41.35 680.14 L45 689.02 C45 689.02 40.99 690.67 40.6 690.83 C40.61 690.9 40.62

+                         690.98 40.62 690.98 C40.71 691.76 40.75 692.41 40.75 693.01 C40.75 693.7 40.7 694.43 40.58 695.32 ZM26.56

+                         697.76 C29.16 695.67 29.58 691.87 27.5 689.26 C25.42 686.65 21.62 686.23 19.01 688.31 C16.41 690.4 15.98

+                         694.2 18.07 696.81 C20.15 699.42 23.95 699.84 26.56 697.76 ZM23.76 684.23 C26.11 684.49 28.22 685.65 29.7

+                         687.5 C32.75 691.32 32.12 696.9 28.31 699.95 C26.47 701.43 24.16 702.1 21.8 701.84 C19.45 701.58 17.34 700.41

+                         15.87 698.56 C14.57 696.94 13.93 694.98 13.93 693.04 C13.93 690.44 15.07 687.86 17.25 686.12 C19.1 684.64

+                         21.41 683.97 23.76 684.23 Z" class="st62"/>

+        </g>

+        <g id="shape145-400" transform="translate(323.911,1069.28) scale(1,-1)">

+            <title>Side to top/bottom.145</title>

+            <path d="M7.18 715.59 L7.54 715.59 L96.69 715.59 L96.69 668.4" class="st63"/>

+        </g>

+        <g id="shape146-406" transform="translate(204.597,-382.144)">

+            <title>Bottom to top fixed 2</title>

+            <path d="M0 677.27 L0 697.59 L99.14 697.59 L99.14 708.05" class="st65"/>

+        </g>

+        <g id="shape150-412" transform="translate(281.66,1070.51) rotate(180)">

+            <title>Side to top/bottom</title>

+            <path d="M7.18 715.59 L7.54 715.59 L107.44 715.59 L107.44 669.64" class="st63"/>

+        </g>

+        <g id="shape152-417" transform="translate(173.097,-359.713)">

+            <title>Sheet.152</title>

+            <desc>[10]</desc>

+            <rect x="0" y="688.588" width="45" height="27" class="st6"/>

+            <text x="12.52" y="705.09" class="st7">[10]</text>      </g>

+        <g id="shape153-420" transform="translate(186.597,-359.713)">

+            <title>Sheet.153</title>

+            <desc>EDK2 Build Tool</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="21.18" y="704.59" class="st22">EDK2 Build Tool</text>      </g>

+        <g id="shape95-423" transform="translate(479.651,-242.34) rotate(-1.84761)">

+            <title>Curve connect 2</title>

+            <path d="M1.08 713.99 L1.29 713.7 A41.432 41.432 0 0 1 68.5 713.7 L68.7 713.99" class="st66"/>

+        </g>

+        <g id="shape154-431" transform="translate(546.597,-607.213)">

+            <title>Sheet.154</title>

+            <desc>[7]</desc>

+            <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>

+            <text x="5.44" y="705.09" class="st7">[7]</text>        </g>

+        <g id="shape155-434" transform="translate(919.083,249.319) rotate(-86.8202) scale(1,-1)">

+            <title>Curve connect 1.155</title>

+            <path d="M0 715.59 A6.2366 6.2366 0 0 1 11.73 715.59 A4.54475 4.54475 -180 0 0 20.28 715.59" class="st67"/>

+        </g>

+    </g>

+</svg>

--

2.17.1

 


Abner Chang
 

Thanks for catching this.

 

V2 sent.

Abner

 

From: Wang, Nickle (HPS SW)
Sent: Tuesday, July 20, 2021 10:38 AM
To: Chang, Abner (HPS SW/FW Technologist) <abner.chang@...>; devel@edk2.groups.io
Cc: Liming Gao <gaoliming@...>; Andrew Fish <afish@...>; Leif Lindholm <leif@...>; Michael D Kinney <michael.d.kinney@...>; Wang, Nickle (HPS SW) <nickle.wang@...>
Subject: RE: [staging/edk2-redfish-client PATCH 1/2] RedfishClientPkg: Initial commit

 

Hi Abner,

 

I see typo here:

 

struct _EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL {

  EDKII_REDFISH_PLATFORM_CONFIG_GET_VALUE             GetValue;

  EDKII_REDFISH_PLATFORM_CONFIG_SET_VALUE             SetValue;

  EDKII_REDFISH_PLATFORM_CONFIG_GET_CONFIG_LANG       GetConfigureLang;

  EDKII_REDFISH_PLATFORM_CONFIG_GET_SUPPORTED_SCHEMA  GetSupportedSchema;

};

 

It is EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL instead of EDKII_PLATFORM_CONFIG_TO_REDFISH_PROTOCOL. I update the description as below:

 

 

+### EDKII Redfish Platform Config Protocol ***[[6]](#[0])***

+EDKII Redfish Platform Config Protocol is an abstract driver that abstracts the platform

+configuration format and storage from EDK2 Redfish Feature driver. This protocol provides

+the interfaces to get and set platform configuration that format and the storage to store

+configuration are agnostic to the feature driver. The platform can provide its own EDKII

+Redfish Platform Config driver to access platform-specific configuration format and

+storage. On EDK2 open source, EDKII Redfish Platform Config Protocol accesses the

+platform configuration in EDK2 HII defined format.

+

+Below is the prototype of **EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL**,

+

+```C

+struct _EDKII_REDFISH_PLATFORM_CONFIG_PROTOCOL  {

+  EDKII_REDFISH_PLATFORM_CONFIG_GET_VALUE             GetValue;

+  EDKII_REDFISH_PLATFORM_CONFIG_SET_VALUE             SetValue;

+  EDKII_REDFISH_PLATFORM_CONFIG_GET_CONFIG_LANG       GetConfigureLang;

+  EDKII_REDFISH_PLATFORM_CONFIG_GET_SUPPORTED_SCHEMA  GetSupportedSchema;

+};

+```

+

+### Other instances of EDKII Redfish Platform Config Protocol ***[[7]](#[0])***

+For those Non-EDK2 HII-based platform configuration formats, the driver instance can

+provide its own implementation to get or set the platform configurations.

 

 

 

Thanks,

Nickle

 

-----Original Message-----
From: Chang, Abner (HPS SW/FW Technologist) <abner.chang@...>
Sent: Saturday, July 17, 2021 10:02 PM
To: devel@edk2.groups.io
Cc: Wang, Nickle (HPS SW) <nickle.wang@...>; Liming Gao <gaoliming@...>; Andrew Fish <afish@...>; Leif Lindholm <leif@...>; Michael D Kinney <michael.d.kinney@...>
Subject: [staging/edk2-redfish-client PATCH 1/2] RedfishClientPkg: Initial commit

 

Initial commit of architecture diagrams and Readme.md

 

Signed-off-by: Abner Chang <abner.chang@...>

Cc: Nickle Wang <nickle.wang@...>

Cc: Liming Gao <gaoliming@...>

Cc: Andrew Fish <afish@...>

Cc: Leif Lindholm <leif@...>

Cc: Michael D Kinney <michael.d.kinney@...>

---

RedfishClientPkg/Readme.md                    | 180 +++++

.../Media/RedfishClientDriverStack.svg        | 680 ++++++++++++++++++

2 files changed, 860 insertions(+)

create mode 100644 RedfishClientPkg/Readme.md

create mode 100644 RedfishClientPkg/Documents/Media/RedfishClientDriverStack.svg

 

diff --git a/RedfishClientPkg/Readme.md b/RedfishClientPkg/Readme.md

new file mode 100644

index 0000000000..ce8c2f9409

--- /dev/null

+++ b/RedfishClientPkg/Readme.md

@@ -0,0 +1,180 @@

+# UEFI Redfish Client EDK2 Implementation

+

+## Introduction

+UEFI Redfish Client EDK2 solution is implemented base on

+[*EDK2 Redfish Foundation*](https://github.com/tianocore/edk2/blob/master/RedfishPkg/Readme.md),

+the implementation utilizes the EFI protocols provided by EDK2 Redfish

+Foundation to communicate with the Redfish service for creating, consuming, and

+updating the Redfish properties which are managed by firmware. This solution

+requests the instance of **EFI REST EX Protocol** through EFI Redfish Discover

+Protocol and interacts with Redfish service using **EFI REST EX Protocol** later

+on. The essential part of this implementation is to map the EDK2 HII options to

+the corresponding Redfish properties that are already defined in the standard

+Redfish schemas published by

+[*DMTF Redfish working group*](https://www.dmtf.org/standards/redfish).

+The advantage of this design is to strengthen the interoperability among the

+servers produced by different OEMs when configuring the platform through Redfish

+service. Using the properties defined in Redfish standard schema for configuring

+platform reduces the overhead of Redfish client tools to have different

+implementations in order to compliant with OEM servers. The solution also

+reduces OEM-defined proprietary BIOS Attributes that lead to the divergence of

+platform configuration namings in Redfish BIOS Attribute Registry, however,

+those different namings refer to the same platform functionality.

+

+## The Scope of UEFI Redfish Client EDK2 Implementation

+-  Platform Configurable settings

+

+This is the first stage of UEFI Redfish Client EDK2 Implementation. Associate

+Redfish property with HII option.

+

+- Provisioning of Firmware Managed Platform Redfish Resource

+

+The current design of UEFI Redfish Client EDK2 Implementation can already

+support the provisioning of firmware-owned platform Redfish resource, however,

+this requires addtional support on edk2 HII. Therefore, provisioning of

+firmware managed platform Redfish resource would be the second stage.

+

+Below are the block diagrams of UEFI Redfish Client EDK2 Implementation.

+

+## <a name="[0]">EDK2 Redfish Client Implementation Diagrams</a>

+![UEFI Redfish Client Implementation](https://github.com/changab/edk2-staging/blob/edk2-redfish-client/RedfishClientPkg/Documents/Media/RedfishClientDriverStack.svg?raw=true)

+

+## EFI EDK2 Redfish Client Framework

+The functionality of each block in the diagrams are described in belwo sections,

+

+### EDK2 Redfish Foundation ***[[1]](#[0])***

+EDK2 Redfish Redfish Foundation provides the facilities of communicating with

+Redfish service. Such as the discovery of Redfish service, the credential to access

+Redfish service, *EFI REST EX Protocol* instance which is the transport layer to

+Redfish service, and so on. Please refer to

+[*EDK2 Redfish Foundation*](https://github.com/tianocore/edk2/blob/master/RedfishPkg/Readme.md).

+

+### Redfish Profile Simulator ***[[2]](#[0])***

+Redfish Profile Simulator is an

+[*open source project*](https://github.com/DMTF/Redfish-Profile-Simulator) on DMTF

+GitHub, which simulates the HTTP request methods (POST, PATCH, PUT, GET) on Redfish

+resource maintained by Redfish Profile Simulator. EDK2 open source uses this

+simulator for the use case when Redfish service has not been set up on the platform,

+or for the quick Redfish firmware feature development. We clone this project under

+RedfishClientPkg and maintain it by edk2 because this project has currently been

+using and updating rarely. That is easier for edk2 to add features to the simulator

+or modify the simulator to align with edk2 requirement on Redfish service, such as

+ETAG and HTTP POST support. <br>

+Another open source project of Redfish simulator is

+[*Redfish Interface Emulator*](https://github.com/DMTF/Redfish-Interface-Emulator),

+however, we don't pay much attention to this project because we have been dedicating

+to Redfish Profile Simulator since we started the UEFI Redfish EDK2 project.

+

+### EDK2 Redfish JSON Schema to C Structure Convertor ***[[3]](#[0])***

+This is the script auto-generated EDK2 drivers and libraries that provide the Redfish

+schema naming based JSON to C structure and vise versa converters. C structure is

+another representation of Redfish properties other than JSON and CSDL(XML). The higher

+layer Redfish client application can deal with C structure instead of using JSON

+library to manipulate Redfish properties. The script

+[*Redfish Schema C Struct Generator*](https://github.com/DMTF/Redfish-Schema-C-Struct-Generator)

+is still a private project on DMTF GitHub. Below is the reference of script

+auto-generated [*Redfish JSON C Struct Converter Lib*](https://github.com/changab/Redfish-JSON-C-Struct-Converter-Lib)

+libraries. The converters generated by the script are followed

+**EFI REST JSON Structure Protocol** defined in UEFI spec 2.8, section 29.7.3.

+

+### EDK2 Redfish Non-Collection ***[[4]](#[0])*** and Collection ***[[5]](#[0])*** Feature Drivers

+EDK2 Redfish feature driver is an intermediary driver that sits between **JSON Schema

+to C Structure converters** and **EFI Platform Configuration to Redfish Protocol**. The

+Redfish feature driver gets and sets the platform configuration and incorporates it with

+Redfish JSON schema C structure to manipulate Redfish JSON resources. Then applies the

+settings from Redfish service to platform configurations, or vise versa to update platform

+configurations to Redfish service. Both EDK2 Redfish Non-Collection and Collection Feature

+drivers are script auto-generated base on Redfish schema naming. The EDK2 Redfish

+Non-Collection feature driver manages the resource of specific Resdifsh resource type,

+while the EDK2 Redfish Collection feature driver manages the members which have the same

+resource type in collection resource (e.g the ComputerSystem resource and

+ComputerSystemCollection resource).

+

+### EFI Platform Config to Redfish Protocol ***[[6]](#[0])***

+EFI Platform Config to Redfish Protocol is an abstract driver that abstracts the platform

+configuration format and storage from EDK2 Redfish Feature driver. This protocol provides

+the interfaces to get and set platform configuration that format and the storage to store

+configuration are agnostic to the feature driver. The platform can provide its own EFI

+Platform Config to Redfish driver to access platform-specific configuration format and

+storage. On EDK2 open source, EFI Platform Config to Redfish Protocol accesses the

+platform configuration in EDK2 HII defined format.

+

+Below is the prototype of **EFI_PLATFORM_CONFIG_TO_REDFISH_PROTOCOL**,

+

+```C

+struct _EDKII_PLATFORM_CONFIG_TO_REDFISH_PROTOCOL {

+  EDKII_REDFISH_PLATFORM_CONFIG_GET_VALUE             GetValue;

+  EDKII_REDFISH_PLATFORM_CONFIG_SET_VALUE             SetValue;

+  EDKII_REDFISH_PLATFORM_CONFIG_GET_CONFIG_LANG       GetConfigureLang;

+  EDKII_REDFISH_PLATFORM_CONFIG_GET_SUPPORTED_SCHEMA  GetSupportedSchema;

+};

+```

+

+### Other instances of EFI Platform Config to Redfish Protocol ***[[7]](#[0])***

+For those Non-EDK2 HII-based platform configuration formats, the driver instance can

+provide its own implementation to get or set the platform configurations.

+

+### EDK2 HII VFR Form ***[[8]](#[0])***

+According to **UEFI spec 2.9 section 35.6 Form Browser Protocol**,

+**EFI_HII_REST_STYLE_FORMSET_GUID** is used on HII form to indicate that HII options

+declared in this form intend to interact with the REST architectural style. On edk2

+open source, the REST architectural style refers to the Redfish service. Besides

+**EFI_HII_REST_STYLE_FORMSET_GUID** is defined in the form scope,

+**EFI_IFR_FLAG_REST_STYLE** can be assigned to the HII options that indicate those

+options intend to interact with the REST service.

+

+### EDK2 HII UNI file ***[[9]](#[0])***

+x-uefi-redfish Configure Language is used in UNI file to associate HII option with

+the particular Redfish property. The Hii options interact with EDK2 Redfish Feature

+driver if the string of HII option is assigned with x-uefi-redfish Language as

+in below,

+

+```C

+x-uefi-redfish-$(NAMESPACE)

+where $(NAMESPACE) is the combination of Redfish ResourceTypeName and schema version.

+```

+For example, if the HII option is mapped to the property in Processor.v1_0_0.

+The x-uefi-redfish configure language is declared as below,

+```C

+x-uefi-redfish-Processor.v1_0_0

+```

+#### x-uefi-redfish Configure Language format:

+- The string declared with x-uefi-redfish configure language is a path to the property

+in Redfish resource

+- The root of path is the Redfish resource type indicated in x-uefi-redfish configure

+language

+- The path is relative to root of Redfish resource type, not related to Redfish service

+- root.

+

+#### Examples,

+```C

+Properties:

+

+#string STR_BOOT_SOURCE_OVERRIDE_ENABLED_PROMPT #language x_uefi_redfish_ComputerSystem.v1_0_0  "/Boot/BootSourceOverrideEnabled"

+#string STR_BOOT_SOURCE_OVERRIDE_MODE_PROMPT    #language x_uefi_redfish_ComputerSystem.v1_0_0  "/Boot/BootSourceOverrideMode"

+#string STR_BOOT_SOURCE_OVERRIDE_TARGET_PROMPT  #language x_uefi_redfish_ComputerSystem.v1_0_0  "/Boot/BootSourceOverrideTarget"

+```

+```C

+Properties in array object [NUM]:

+

+#string STR_BOOT_ORDER_1_PROMPT  #language x_uefi_redfish_ComputerSystem.v1_11_0  "/Boot/BootOrder/[1]/Boot0001"

+#string STR_BOOT_ORDER_2_PROMPT  #language x_uefi_redfish_ComputerSystem.v1_11_0  "/Boot/BootOrder/[2]/Boot0002"

+#string STR_BOOT_ORDER_3_PROMPT  #language x_uefi_redfish_ComputerSystem.v1_11_0  "/Boot/BootOrder/[3]/Boot0003"

+```

+```C

+Properties in collection object {NUM}:

+

+#string STR_MEMORY_1_BASE_MODULE_TYPE_PROMPT  #language x_uefi_redfish_Memory.v1_7_1  "/Memory/{1}/BaseModuleType"

+#string STR_MEMORY_2_BASE_MODULE_TYPE_PROMPT  #language x_uefi_redfish_Memory.v1_7_1  "/Memory/{2}/BaseModuleType"

+#string STR_MEMORY_3_BASE_MODULE_TYPE_PROMPT  #language x_uefi_redfish_Memory.v1_7_1  "/Memory/{3}/BaseModuleType"

+```

+

+### EDK2 Build Tool ***[[10]](#[0])***

+EDK2 Build is responsible to pull the necessary EDK2 Redfish JSON Schema to C Structure

+Convertors and EDK2 Redfish Feature drivers into edk2 build process according to the

+x-uefi-Redfish config language used in the HII VFR forms.

+

+## The Contributors

+Chang, Abner <abner.chang@...>\

+Wang, Nickle <nickle.wang@...>\

+Chen, Aaron <aaron.chen@...>

diff --git a/RedfishClientPkg/Documents/Media/RedfishClientDriverStack.svg b/RedfishClientPkg/Documents/Media/RedfishClientDriverStack.svg

new file mode 100644

index 0000000000..eb59eb9992

--- /dev/null

+++ b/RedfishClientPkg/Documents/Media/RedfishClientDriverStack.svg

@@ -0,0 +1,680 @@

+<?xml version="1.0" encoding="UTF-8" standalone="no"?>

+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

+<!-- Generated by Microsoft Visio, SVG Export RedfishClientDriverStack.svg Page-2 -->

+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"

+        width="12.1281in" height="9.93872in" viewBox="0 0 873.222 715.588" xml:space="preserve" color-interpolation-filters="sRGB"

+        class="st68">

+    <style type="text/css">

+    <![CDATA[

+        .st1 {fill:#ffffff;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}

+        .st2 {fill:#ebf1df;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}

+        .st3 {fill:#ff1a1a;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}

+        .st4 {fill:#ffffff;font-family:Calibri;font-size:1.00001em;font-weight:bold}

+        .st5 {font-size:1em}

+        .st6 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}

+        .st7 {fill:#000000;font-family:Calibri;font-size:1.00001em;font-weight:bold}

+        .st8 {fill:#dbeef3;stroke:#d8d8d8;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}

+        .st9 {fill:#ffffff;font-family:Calibri;font-size:1.08334em;font-weight:bold}

+        .st10 {visibility:visible}

+        .st11 {fill:none;filter:url(#filter_3.3333334922791);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0.4}

+        .st12 {fill:none;stroke:#bfbfbf;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}

+        .st13 {fill:#000000;font-family:Arial;font-size:1.99999em;font-style:italic;font-weight:bold}

+        .st14 {marker-end:url(#mrkr2-45);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.9}

+        .st15 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.42986425339367}

+        .st16 {fill:#000000;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}

+        .st17 {fill:#ffffff;font-family:Arial;font-size:1.33333em;font-weight:bold}

+        .st18 {fill:#ffffff;stroke:#595959;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}

+        .st19 {fill:#7f7f7f;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}

+        .st20 {fill:#ffffff;font-family:Calibri;font-size:1.08334em}

+        .st21 {fill:#000000;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}

+        .st22 {fill:#000000;font-family:Calibri;font-size:0.833336em;font-weight:bold}

+        .st23 {marker-start:url(#mrkr10-112);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.25}

+        .st24 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.40983606557377}

+        .st25 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}

+        .st26 {fill:#000000;fill-opacity:0.4;filter:url(#filter_3.3333334922791);stroke:#000000;stroke-dasharray:10.5,7.5;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0.4}

+        .st27 {fill:#0070c0;stroke:#003f6c;stroke-dasharray:10.5,7.5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}

+        .st28 {fill:#000000;font-family:Calibri;font-size:1.00001em;font-style:italic;font-weight:bold}

+        .st29 {fill:#ffffff;stroke:#000000;stroke-dasharray:1.68,1.2;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}

+        .st30 {fill:#000000;font-family:Calibri;font-size:0.833336em}

+        .st31 {fill:#ffffff;stroke:#000000;stroke-dasharray:3.5,2.5;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.5}

+        .st32 {stroke:#7f7f7f;stroke-linecap:round;stroke-linejoin:round;stroke-width:4.5}

+        .st33 {fill:#000000;fill-opacity:0.38;filter:url(#filter_3.3333334922791);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0.38}

+        .st34 {fill:#000000;fill-opacity:0.38;stroke:#000000;stroke-opacity:0.38;stroke-width:0.22935779816514}

+        .st35 {fill:#f2f2f2;stroke:#7f7f7f;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}

+        .st36 {fill:#7f7f7f;fill-opacity:1;stroke:#7f7f7f;stroke-opacity:1;stroke-width:0.22935779816514}

+        .st37 {fill:#d8d8d8;stroke:#7f7f7f;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}

+        .st38 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}

+        .st39 {fill:#000000;fill-opacity:0.4;filter:url(#filter_3.3333334922791);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0.4}

+        .st40 {fill:#0070c0;stroke:#003f6c;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}

+        .st41 {fill:#ffffff;stroke:#000000;stroke-dasharray:9.5,2.5,3.5,2.5;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.5}

+        .st42 {fill:#ffffff;stroke:#000000;stroke-dasharray:3.5,2.5,3.5,2.5,0,2.5;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.5}

+        .st43 {marker-end:url(#mrkr4-212);marker-start:url(#mrkr4-210);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.25}

+        .st44 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.47169811320755}

+        .st45 {fill:#ffffff;stroke:#7f7f7f;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}

+        .st46 {fill:#000000;font-family:Calibri;font-size:1.16666em;font-style:italic;font-weight:bold}

+        .st47 {font-family:Arial;font-size:0.571431em;font-style:normal;font-weight:normal}

+        .st48 {font-family:Arial;font-size:0.571431em;font-style:normal}

+        .st49 {fill:#ea700d;font-family:Arial;font-size:0.571431em;font-style:normal}

+        .st50 {fill:#ffffff;stroke:#7f7f7f;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}

+        .st51 {fill:#d8d8d8;font-family:Calibri;font-size:0.833336em;font-style:italic;font-weight:bold}

+        .st52 {font-size:1.20001em;font-style:normal;font-weight:normal}

+        .st53 {font-size:1em;font-style:normal;font-weight:normal}

+        .st54 {fill:#f59d56;font-size:1em;font-style:normal;font-weight:normal}

+        .st55 {marker-end:url(#mrkr2-350);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2}

+        .st56 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.44247787610619}

+        .st57 {marker-end:url(#mrkr2-383);marker-start:url(#mrkr2-381);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}

+        .st58 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.22935779816514}

+        .st59 {fill:#000000;font-family:Calibri;font-size:0.75em;font-style:italic;font-weight:bold}

+        .st60 {fill:#000000;font-family:Calibri;font-size:0.75em;font-weight:bold}

+        .st61 {fill:#0070c0;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}

+        .st62 {fill:#595959;stroke:none;stroke-linecap:butt;stroke-width:0.75}

+        .st63 {marker-start:url(#mrkr4-405);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.25}

+        .st64 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.3315649867374}

+        .st65 {marker-end:url(#mrkr4-411);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.25}

+        .st66 {marker-end:url(#mrkr10-430);marker-start:url(#mrkr10-112);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.25}

+        .st67 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.25}

+        .st68 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}

+    ]]>

+    </style>

+

+    <defs id="Markers">

+        <g id="lend2">

+            <path d="M 1 1 L 0 0 L 1 -1 L 1 1 " style="stroke:none"/>

+        </g>

+        <marker id="mrkr2-45" class="st15" refX="-2.1368421052632" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend2" transform="scale(-2.3263157894737,-2.3263157894737) "/>

+        </marker>

+        <g id="lend10">

+            <path

+                    d="M 0 0.75 C -0.414214 0.75 -0.75 0.414214 -0.75 0 -0.75 -0.414214 -0.414214 -0.75 0 -0.75 0.414214 -0.75 0.75 -0.414214 0.75 0 0.75 0.414214 0.414214 0.75 0 0.75 Z "

+                    style="stroke:none"/>

+        </g>

+        <marker id="mrkr10-112" class="st24" refX="1.542" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend10" transform="scale(2.44) "/>

+        </marker>

+        <g id="lend42">

+            <path

+                    d="M 0 0.75 C -0.414214 0.75 -0.75 0.414214 -0.75 0 -0.75 -0.414214 -0.414214 -0.75 0 -0.75 0.414214 -0.75 0.75 -0.414214 0.75 0 0.75 0.414214 0.414214 0.75 0 0.75 Z "

+                    style="stroke:none"/>

+        </g>

+        <marker id="mrkr42-163" class="st34" refX="3.27" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend42" transform="scale(4.36) "/>

+        </marker>

+        <marker id="mrkr42-167" class="st36" refX="3.27" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend42" transform="scale(4.36) "/>

+        </marker>

+        <g id="lend4">

+            <path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"/>

+        </g>

+        <marker id="mrkr4-210" class="st44" refX="4.08" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend4" transform="scale(2.12) "/>

+        </marker>

+        <marker id="mrkr4-212" class="st44" refX="-4.08" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend4" transform="scale(-2.12,-2.12) "/>

+        </marker>

+        <marker id="mrkr2-350" class="st56" refX="-2.08" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend2" transform="scale(-2.26,-2.26) "/>

+        </marker>

+        <marker id="mrkr2-381" class="st58" refX="3.88" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend2" transform="scale(4.36) "/>

+        </marker>

+        <marker id="mrkr2-383" class="st58" refX="-3.88" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend2" transform="scale(-4.36,-4.36) "/>

+        </marker>

+        <marker id="mrkr4-405" class="st64" refX="5.744" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend4" transform="scale(3.016) "/>

+        </marker>

+        <marker id="mrkr4-411" class="st64" refX="-6.032" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend4" transform="scale(-3.016,-3.016) "/>

+        </marker>

+        <marker id="mrkr10-430" class="st24" refX="-1.542" orient="auto" markerUnits="strokeWidth" overflow="visible">

+            <use xlink:href="#lend10" transform="scale(-2.44,-2.44) "/>

+        </marker>

+    </defs>

+    <defs id="Filters">

+        <filter id="filter_3.3333334922791">

+            <feGaussianBlur stdDeviation="3.3333334922791"/>

+        </filter>

+    </defs>

+    <g>

+        <title>VBackground-1</title>

+        <g id="shape1-1">

+            <title>Solid</title>

+            <rect x="0" y="0" width="873.222" height="715.588" class="st1"/>

+        </g>

+    </g>

+    <g>

+        <title>Page-2</title>

+        <g id="shape52-3" transform="translate(336.222,-197.713)">

+            <title>Rectangle.52</title>

+            <rect x="0" y="598.588" width="495" height="117" class="st2"/>

+        </g>

+        <g id="group5-5" transform="translate(772.722,-60.4625)">

+            <title>Can</title>

+            <desc>Redfish Service</desc>

+            <g id="shape6-6">

+                <title>Sheet.6</title>

+                <path d="M0 704.34 A26.4375 11.25 -180 1 0 52.88 704.34 L52.88 663.84 L0 663.84 L0 704.34 Z" class="st3"/>

+            </g>

+            <g id="shape5-8">

+                <ellipse cx="26.4375" cy="663.838" rx="26.4375" ry="11.25" class="st3"/>

+                <text x="7.83" y="693.59" class="st4">Redfish <tspan x="8.6" dy="1.2em" class="st5">Service</tspan></text>          </g>

+        </g>

+        <g id="shape8-12" transform="translate(746.847,-24.4625)">

+            <title>Sheet.8</title>

+            <desc>Redfish Profile Simulator On Network</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="17.62" y="693.09" class="st7">Redfish Profile <tspan x="21.08" dy="1em" class="st5">Simulator On </tspan><tspan

+                        x="32.24" dy="1em" class="st5">Network</tspan></text>       </g>

+        <g id="shape10-17" transform="translate(408.222,-82.9625)">

+            <title>Sheet.10</title>

+            <desc>EFI REST EX</desc>

+            <rect x="0" y="679.588" width="261" height="36" class="st8"/>

+            <text x="99.8" y="700.84" class="st9">EFI REST EX </text>       </g>

+        <g id="shape12-20" transform="translate(57.2224,-197.713)">

+            <title>Rectangle</title>

+            <rect x="0" y="598.588" width="234" height="117" class="st2"/>

+        </g>

+        <g id="shape13-22" transform="translate(30.2224,-24.4625)">

+            <title>Rounded Rectangle.76</title>

+            <g id="shadow13-23" transform="matrix(1.02,0,0,1.02,-6.84,-13.2318)" class="st10">

+                <path d="M9 715.59 L675 715.59 A8.99985 8.99985 -180 0 0 684 706.59 L684 616.59 A8.99985 8.99985 -180 0 0 675 607.59

+                             L9 607.59 A8.99985 8.99985 -180 0 0 0 616.59 L0 706.59 A8.99985 8.99985 -180 0 0 9 715.59 Z"

+                        class="st11"/>

+            </g>

+            <path d="M9 715.59 L675 715.59 A8.99985 8.99985 -180 0 0 684 706.59 L684 616.59 A8.99985 8.99985 -180 0 0 675 607.59

+                         L9 607.59 A8.99985 8.99985 -180 0 0 0 616.59 L0 706.59 A8.99985 8.99985 -180 0 0 9 715.59 Z" class="st12"/>

+        </g>

+        <g id="shape16-27" transform="translate(75.2224,-82.9625)">

+            <title>Sheet.16</title>

+            <desc>EFI REST JSON to C Structure</desc>

+            <rect x="0" y="679.588" width="261" height="36" class="st8"/>

+            <text x="53.89" y="700.84" class="st9">EFI REST JSON to C Structure</text>      </g>

+        <g id="shape17-30" transform="translate(408.222,-37.9625)">

+            <title>Sheet.17</title>

+            <desc>EFI Network Stack</desc>

+            <rect x="0" y="679.588" width="261" height="36" class="st8"/>

+            <text x="81.72" y="700.84" class="st9">EFI Network Stack</text>     </g>

+        <g id="shape18-33" transform="translate(75.2224,-37.9625)">

+            <title>Sheet.18</title>

+            <desc>EFI Redfish Discover Protocl</desc>

+            <rect x="0" y="679.588" width="261" height="36" class="st8"/>

+            <text x="55.56" y="700.84" class="st9">EFI Redfish Discover Protocl</text>      </g>

+        <g id="shape19-36" transform="translate(291.222,-51.4625)">

+            <title>Sheet.19</title>

+            <desc>EDKII Redfish Foundation</desc>

+            <rect x="0" y="670.588" width="184" height="45" class="st6"/>

+            <text x="12.66" y="685.89" class="st13">EDKII Redfish <tspan x="26.69" dy="1.2em" class="st5">Foundation</tspan></text>     </g>

+        <g id="shape20-40" transform="translate(904.308,1335.5) rotate(-19.179) scale(1,-1)">

+            <title>Curve connect 1</title>

+            <path d="M0 715.59 A42.4531 42.4531 0 0 1 54.79 715.59 A42.4531 42.4531 -180 0 0 106.06 718.26 L106.35 718.04"

+                    class="st14"/>

+        </g>

+        <g id="shape21-46" transform="translate(18.9724,-139.213)">

+            <title>Sheet.21</title>

+            <desc>EDKII Redfish Client</desc>

+            <rect x="0" y="211.588" width="24.75" height="504" class="st16"/>

+            <text x="-10.85" y="-540.93" writing-mode="tb-rl" transform="rotate(180)" class="st17">EDKII Redfish Client</text>      </g>

+        <g id="shape24-49" transform="translate(111.222,-253.963)">

+            <title>Sheet.24</title>

+            <rect x="0" y="670.588" width="153" height="45" class="st18"/>

+        </g>

+        <g id="shape25-51" transform="translate(84.2224,-240.463)">

+            <title>Sheet.25</title>

+            <rect x="0" y="670.588" width="153" height="45" class="st18"/>

+        </g>

+        <g id="shape26-53" transform="translate(75.2224,-226.963)">

+            <title>Sheet.26</title>

+            <desc>Script-generated Redfish JSON schema to C Structure convertor</desc>

+            <rect x="0" y="670.588" width="153" height="45" class="st19"/>

+            <text x="11.2" y="683.34" class="st20">Script-generated Redfish <tspan x="29.22" dy="1em" class="st5">JSON schema to C </tspan><tspan

+                        x="24.45" dy="1em" class="st5">Structure convertor</tspan></text>       </g>

+        <g id="shape28-58" transform="translate(241.722,-267.463)">

+            <title>Sheet.28</title>

+            <ellipse cx="1.6875" cy="713.9" rx="1.6875" ry="1.6875" class="st21"/>

+        </g>

+        <g id="shape29-60" transform="translate(245.66,-272.525)">

+            <title>Sheet.29</title>

+            <ellipse cx="1.6875" cy="713.9" rx="1.6875" ry="1.6875" class="st21"/>

+        </g>

+        <g id="shape30-62" transform="translate(250.16,-277.588)">

+            <title>Sheet.30</title>

+            <ellipse cx="1.6875" cy="713.9" rx="1.6875" ry="1.6875" class="st21"/>

+        </g>

+        <g id="shape31-64" transform="translate(178.722,-204.463)">

+            <title>Sheet.31</title>

+            <desc>ComputerSystem</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="18.16" y="704.59" class="st22">ComputerSystem</text>       </g>

+        <g id="shape32-67" transform="translate(201.222,-220.213)">

+            <title>Sheet.32</title>

+            <desc>BootOption</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="29.69" y="704.59" class="st22">BootOption</text>       </g>

+        <g id="shape33-70" transform="translate(210.222,-233.713)">

+            <title>Sheet.33</title>

+            <desc>Memory</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="36.21" y="704.59" class="st22">Memory</text>       </g>

+        <g id="shape34-73" transform="translate(385.722,-247.213)">

+            <title>Sheet.34</title>

+            <rect x="0" y="670.588" width="153" height="45" class="st18"/>

+        </g>

+        <g id="shape35-75" transform="translate(358.722,-233.713)">

+            <title>Sheet.35</title>

+            <rect x="0" y="670.588" width="153" height="45" class="st18"/>

+        </g>

+        <g id="shape36-77" transform="translate(349.722,-220.213)">

+            <title>Sheet.36</title>

+            <desc>Script-generated EDK2 Redfish Feature Driver</desc>

+            <rect x="0" y="670.588" width="153" height="45" class="st19"/>

+            <text x="16.96" y="689.84" class="st20">Script-generated EDK2 <tspan x="17.33" dy="1em" class="st5">Redfish Feature Driver</tspan></text>       </g>

+        <g id="shape40-81" transform="translate(453.222,-197.713)">

+            <title>Sheet.40</title>

+            <desc>ComputerSystem</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="18.16" y="704.59" class="st22">ComputerSystem</text>       </g>

+        <g id="shape41-84" transform="translate(475.722,-213.463)">

+            <title>Sheet.41</title>

+            <desc>BootOption</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="29.69" y="704.59" class="st22">BootOption</text>       </g>

+        <g id="shape42-87" transform="translate(493.722,-226.963)">

+            <title>Sheet.42</title>

+            <desc>Memory</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="36.21" y="704.59" class="st22">Memory</text>       </g>

+        <g id="shape43-90" transform="translate(608.472,-249.463)">

+            <title>Sheet.43</title>

+            <rect x="0" y="670.588" width="153" height="45" class="st18"/>

+        </g>

+        <g id="shape46-92" transform="translate(738.972,-262.963)">

+            <title>Sheet.46</title>

+            <ellipse cx="1.6875" cy="713.9" rx="1.6875" ry="1.6875" class="st21"/>

+        </g>

+        <g id="shape47-94" transform="translate(742.91,-268.025)">

+            <title>Sheet.47</title>

+            <ellipse cx="1.6875" cy="713.9" rx="1.6875" ry="1.6875" class="st21"/>

+        </g>

+        <g id="shape48-96" transform="translate(747.41,-273.088)">

+            <title>Sheet.48</title>

+            <ellipse cx="1.6875" cy="713.9" rx="1.6875" ry="1.6875" class="st21"/>

+        </g>

+        <g id="shape49-98" transform="translate(660.222,-199.963)">

+            <title>Sheet.49</title>

+            <desc>ComputerSystemCollection</desc>

+            <rect x="0" y="688.588" width="123.75" height="27" class="st6"/>

+            <text x="5.3" y="704.59" class="st22">ComputerSystemCollection</text>       </g>

+        <g id="shape50-101" transform="translate(720.972,-215.713)">

+            <title>Sheet.50</title>

+            <desc>BootOptionCollection</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="8.96" y="704.59" class="st22">BootOptionCollection</text>      </g>

+        <g id="shape51-104" transform="translate(732.222,-229.213)">

+            <title>Sheet.51</title>

+            <desc>MemoryCollection</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="15.48" y="704.59" class="st22">MemoryCollection</text>     </g>

+        <g id="shape56-107" transform="translate(515.651,-269.34) rotate(-1.84761)">

+            <title>Curve connect 2.56</title>

+            <path d="M1.08 713.99 L1.29 713.7 A41.432 41.432 0 0 1 69.79 715.59" class="st23"/>

+        </g>

+        <g id="shape57-113" transform="translate(581.472,-235.963)">

+            <title>Sheet.57</title>

+            <rect x="0" y="670.588" width="153" height="45" class="st18"/>

+        </g>

+        <g id="shape59-115" transform="translate(291.222,-242.713)">

+            <title>1-D double</title>

+            <path d="M13.5 693.99 L13.5 688.59 L0 702.09 L13.5 715.59 L13.5 710.19 L31.5 710.19 L31.5 715.59 L45 702.09 L31.5 688.59

+                         L31.5 693.99 L13.5 693.99 Z" class="st25"/>

+        </g>

+        <g id="shape64-117" transform="translate(619.722,-467.713)">

+            <title>Sheet.64</title>

+            <desc>EFI PLATFORM_CONFIG_TO_REDFISH_PROTOCOL</desc>

+            <g id="shadow64-118" transform="matrix(1.02,0,0,1.02,-1.98,-13.8618)" class="st10">

+                <path d="M0 715.59 L198 715.59 L198 670.59 L0 670.59 L0 715.59 Z" class="st26"/>

+            </g>

+            <path d="M0 715.59 L198 715.59 L198 670.59 L0 670.59 L0 715.59 Z" class="st27"/>

+            <text x="91.2" y="683.34" class="st20">EFI <tspan x="6.13" dy="1em" class="st5">PLATFORM</tspan>_CONFIG_TO_REDFISH_<tspan

+                        x="69.84" dy="1em" class="st5">PROTOCOL</tspan></text>      </g>

+        <g id="shape65-125" transform="translate(511.722,-445.213)">

+            <title>Sheet.65</title>

+            <desc>EFI PLATFORM_CONFIG_TO_REDFISH_PROTOCOL</desc>

+            <g id="shadow65-126" transform="matrix(1.02,0,0,1.02,-1.98,-13.8618)" class="st10">

+                <path d="M0 715.59 L198 715.59 L198 670.59 L0 670.59 L0 715.59 Z" class="st26"/>

+            </g>

+            <path d="M0 715.59 L198 715.59 L198 670.59 L0 670.59 L0 715.59 Z" class="st27"/>

+            <text x="91.2" y="683.34" class="st20">EFI <tspan x="6.13" dy="1em" class="st5">PLATFORM</tspan>_CONFIG_TO_REDFISH_<tspan

+                        x="69.84" dy="1em" class="st5">PROTOCOL</tspan></text>      </g>

+        <g id="shape67-133" transform="translate(536.472,-593.713)">

+            <title>Sheet.67</title>

+            <desc>Other Platform-specific Implementations</desc>

+            <rect x="0" y="688.588" width="243" height="27" class="st6"/>

+            <text x="20.02" y="705.09" class="st28">Other Platform-specific Implementations</text>      </g>

+        <g id="group71-136" transform="translate(567.972,-530.713)">

+            <title>Can.71</title>

+            <desc>EFI Variable/ FW Storage</desc>

+            <g id="shape72-137">

+                <title>Sheet.72</title>

+                <path d="M0 709.29 A29.25 6.3 -180 1 0 58.5 709.29 L58.5 658.89 L0 658.89 L0 709.29 Z" class="st29"/>

+            </g>

+            <g id="shape71-139">

+                <ellipse cx="29.25" cy="658.888" rx="29.25" ry="6.3" class="st29"/>

+                <text x="23.25" y="675.09" class="st30">EFI <tspan x="10.54" dy="1.2em" class="st5">Variable</tspan>/ <tspan

+                            x="5.79" dy="1.2em" class="st5">FW Storage</tspan></text>           </g>

+        </g>

+        <g id="group73-144" transform="translate(687.222,-530.713)">

+            <title>Can.73</title>

+            <desc>Other Storage</desc>

+            <g id="shape74-145">

+                <title>Sheet.74</title>

+                <path d="M0 709.29 A29.25 6.3 -180 1 0 58.5 709.29 L58.5 658.89 L0 658.89 L0 709.29 Z" class="st29"/>

+            </g>

+            <g id="shape73-147">

+                <ellipse cx="29.25" cy="658.888" rx="29.25" ry="6.3" class="st29"/>

+                <text x="17.41" y="681.09" class="st30">Other <tspan x="13.66" dy="1.2em" class="st5">Storage</tspan></text>            </g>

+        </g>

+        <g id="shape76-151" transform="translate(1306.06,184.875) rotate(90)">

+            <title>1-D double.76</title>

+            <path d="M6.75 704.79 L6.75 702.09 L0 708.84 L6.75 715.59 L6.75 712.89 L33.75 712.89 L33.75 715.59 L40.5 708.84 L33.75

+                         702.09 L33.75 704.79 L6.75 704.79 Z" class="st31"/>

+        </g>

+        <g id="shape77-153" transform="translate(1425.31,184.875) rotate(90)">

+            <title>1-D double.77</title>

+            <path d="M6.75 704.79 L6.75 702.09 L0 708.84 L6.75 715.59 L6.75 712.89 L11.25 712.89 L11.25 715.59 L18 708.84 L11.25

+                         702.09 L11.25 704.79 L6.75 704.79 Z" class="st31"/>

+        </g>

+        <g id="shape78-155" transform="translate(21.2224,-139.213)">

+            <title>Sheet.78</title>

+            <path d="M0 715.59 L810 715.59" class="st32"/>

+        </g>

+        <g id="group80-158" transform="translate(-173.49,382.875) rotate(-90)">

+            <title>Folded Corner</title>

+            <g id="shape80-159">

+                <g id="shadow80-160" transform="matrix(1.02,0,0,1.02,-3.105,-9.45175)" class="st10">

+                    <path d="M0 715.59 L278.62 715.59 L310.5 688.27 L310.5 229.59 L0 229.59 L0 715.59 Z" class="st33"/>

+                </g>

+                <path d="M0 715.59 L278.62 715.59 L310.5 688.27 L310.5 229.59 L0 229.59 L0 715.59 Z" class="st35"/>

+            </g>

+            <g id="shape81-168" transform="translate(278.625,0)">

+                <title>Sheet.81</title>

+                <g id="shadow81-169" transform="matrix(1.02,0,0,1.02,-0.6375,-14.3117)" class="st10">

+                    <path d="M0 715.59 L31.88 688.27 L4.87 684.09 L0 715.59 Z" class="st33"/>

+                </g>

+                <path d="M0 715.59 L31.88 688.27 L4.87 684.09 L0 715.59 Z" class="st37"/>

+            </g>

+        </g>

+        <g id="group82-175" transform="translate(432.972,-530.713)">

+            <title>Can.69</title>

+            <desc>EDK2 HII Database</desc>

+            <g id="shape83-176">

+                <title>Sheet.83</title>

+                <path d="M0 709.29 A29.25 6.3 -180 1 0 58.5 709.29 L58.5 658.89 L0 658.89 L0 709.29 Z" class="st38"/>

+            </g>

+            <g id="shape82-178">

+                <ellipse cx="29.25" cy="658.888" rx="29.25" ry="6.3" class="st38"/>

+                <text x="11.84" y="681.09" class="st30">EDK2 HII <tspan x="10.24" dy="1.2em" class="st5">Database</tspan></text>            </g>

+        </g>

+        <g id="shape84-182" transform="translate(390.222,-429.463)">

+            <title>Sheet.84</title>

+            <desc>EFI PLATFORM_CONFIG_TO_REDFISH_PROTOCOL</desc>

+            <g id="shadow84-183" transform="matrix(1.02,0,0,1.02,-1.44,-13.8618)" class="st10">

+                <rect x="0" y="670.588" width="144" height="45" class="st39"/>

+            </g>

+            <rect x="0" y="670.588" width="144" height="45" class="st40"/>

+            <text x="64.2" y="683.34" class="st20">EFI <tspan x="4.73" dy="1em" class="st5">PLATFORM</tspan>_CONFIG_TO_<tspan

+                        x="17.24" dy="1em" class="st5">REDFISH</tspan>_PROTOCOL</text>      </g>

+        <g id="shape85-190" transform="translate(1171.06,184.875) rotate(90)">

+            <title>1-D double.75</title>

+            <path d="M6.75 704.79 L6.75 702.09 L0 708.84 L6.75 715.59 L6.75 712.89 L49.5 712.89 L49.5 715.59 L56.25 708.84 L49.5

+                         702.09 L49.5 704.79 L6.75 704.79 Z" class="st38"/>

+        </g>

+        <g id="shape86-192" transform="translate(1164.31,286.125) rotate(90)">

+            <title>1-D double.68</title>

+            <g id="shadow86-193" transform="matrix(1.02,0,0,1.02,-1.1475,-14.0418)" class="st10">

+                <path d="M13.5 693.99 L13.5 688.59 L0 702.09 L13.5 715.59 L13.5 710.19 L101.25 710.19 L101.25 715.59 L114.75 702.09

+                             L101.25 688.59 L101.25 693.99 L13.5 693.99 Z" class="st39"/>

+            </g>

+            <path d="M13.5 693.99 L13.5 688.59 L0 702.09 L13.5 715.59 L13.5 710.19 L101.25 710.19 L101.25 715.59 L114.75 702.09 L101.25

+                         688.59 L101.25 693.99 L13.5 693.99 Z" class="st38"/>

+        </g>

+        <g id="shape87-197" transform="translate(27.9724,-616.213)">

+            <title>Sheet.87</title>

+            <desc>EDK2 Open Source Implementation</desc>

+            <rect x="0" y="688.588" width="243" height="27" class="st6"/>

+            <text x="34.39" y="705.09" class="st28">EDK2 Open Source Implementation</text>      </g>

+        <g id="shape88-200" transform="translate(1312.81,270.375) rotate(90)">

+            <title>1-D double.88</title>

+            <path d="M13.5 693.99 L13.5 688.59 L0 702.09 L13.5 715.59 L13.5 710.19 L117 710.19 L117 715.59 L130.5 702.09 L117 688.59

+                         L117 693.99 L13.5 693.99 Z" class="st41"/>

+        </g>

+        <g id="shape89-202" transform="translate(1434.31,247.875) rotate(90)">

+            <title>1-D double.89</title>

+            <path d="M13.5 693.99 L13.5 688.59 L0 702.09 L13.5 715.59 L13.5 710.19 L139.5 710.19 L139.5 715.59 L153 702.09 L139.5

+                         688.59 L139.5 693.99 L13.5 693.99 Z" class="st42"/>

+        </g>

+        <g id="shape90-204" transform="translate(838.629,252.112) rotate(68.1986)">

+            <title>Curve connect 1.61</title>

+            <path d="M7.53 720.84 L7.83 721.04 A30.61 30.61 -180 0 0 42.41 715.59 A30.61 30.61 0 0 1 76.99 710.13 L77.29 710.34"

+                    class="st43"/>

+        </g>

+        <g id="shape91-213" transform="translate(-37.5816,162.844) rotate(-60.2551) scale(-1,1)">

+            <title>Curve connect 1.62</title>

+            <path d="M7.67 720.62 L7.98 720.82 A34.3918 34.3918 -180 0 0 45.35 715.59 A34.3918 34.3918 0 0 1 82.72 710.35 L83.03

+                         710.55" class="st43"/>

+        </g>

+        <g id="shape94-220" transform="translate(488.651,-255.84) rotate(-1.84761)">

+            <title>Curve connect 2.54</title>

+            <path d="M1.08 713.99 L1.29 713.7 A41.432 41.432 0 0 1 69.79 715.59" class="st23"/>

+        </g>

+        <g id="shape96-225" transform="translate(572.472,-222.463)">

+            <title>Sheet.96</title>

+            <desc>Script-generated EDK2 Redfish Collection Driver</desc>

+            <rect x="0" y="670.588" width="153" height="45" class="st19"/>

+            <text x="16.96" y="689.84" class="st20">Script-generated EDK2 <tspan x="11.39" dy="1em" class="st5">Redfish Collection Driver</tspan></text>        </g>

+        <g id="shape98-229" transform="translate(67.3474,-420.463)">

+            <title>Rounded Rectangle.98</title>

+            <desc>EDK2 HII UNI file #string STR_OPTION_A #language x-uefi-redfi...</desc>

+            <path d="M7.73 715.59 L266.77 715.59 A7.73227 7.73227 -180 0 0 274.5 707.86 L274.5 637.82 A7.73227 7.73227 -180 0 0 266.77

+                         630.09 L7.73 630.09 A7.73227 7.73227 -180 0 0 -0 637.82 L0 707.86 A7.73227 7.73227 -180 0 0 7.73 715.59

+                         Z" class="st45"/>

+            <text x="4" y="646.69" class="st46">EDK2 HII UNI file<tspan x="4" dy="1.425em" class="st47">#</tspan><tspan

+                        class="st47">string </tspan><tspan class="st48">STR</tspan><tspan class="st48">_</tspan><tspan class="st48">OPTION</tspan><tspan

+                        class="st48">_</tspan><tspan class="st48">A</tspan><tspan class="st47">  </tspan><tspan class="st47">#</tspan><tspan

+                        class="st47">language </tspan><tspan class="st48">x</tspan><tspan class="st48">-</tspan><tspan class="st48">uefi</tspan><tspan

+                        class="st48">-</tspan><tspan class="st48">redfish</tspan><tspan class="st48">-</tspan><tspan class="st48">SCHEMA</tspan><tspan

+                        class="st48">.</tspan><tspan class="st48">VERSION</tspan><tspan class="st47">  </tspan><tspan class="st48"> </tspan><tspan

+                        x="4" dy="1.2em" class="st49">“</tspan><tspan class="st49">/</tspan><tspan class="st49">SCHEMA</tspan><tspan

+                        class="st49">/</tspan><tspan class="st49">PropertyA</tspan><tspan class="st48">” </tspan><tspan

+                        class="st47">  </tspan><tspan x="4" dy="1.2em" class="st47">#</tspan><tspan class="st47">string</tspan><tspan

+                        class="st48"> </tspan><tspan class="st48">STR</tspan><tspan class="st48">_</tspan><tspan class="st48">OPTION</tspan><tspan

+                        class="st48">_</tspan><tspan class="st48">B</tspan><tspan class="st47">  </tspan><tspan class="st47">#</tspan><tspan

+                        class="st47">language</tspan><tspan class="st48"> </tspan><tspan class="st48">x</tspan><tspan class="st48">-</tspan><tspan

+                        class="st48">uefi</tspan><tspan class="st48">-</tspan><tspan class="st48">redfish</tspan><tspan

+                        class="st48">-</tspan><tspan class="st48">SCHEMA</tspan><tspan class="st48">.</tspan><tspan class="st48">VERSION</tspan><tspan

+                        class="st47">  </tspan><tspan class="st49"> </tspan><tspan x="4" dy="1.2em" class="st49">“</tspan><tspan

+                        class="st49">/</tspan><tspan class="st49">SCHEMA</tspan><tspan class="st49">/</tspan><tspan class="st49">PropertyB</tspan><tspan

+                        class="st49">” </tspan><tspan x="4" dy="1.2em" class="st47">#</tspan><tspan class="st47">string </tspan><tspan

+                        class="st48">STR</tspan><tspan class="st48">_</tspan><tspan class="st48">OPTION</tspan><tspan class="st48">_</tspan><tspan

+                        class="st47">C  </tspan><tspan class="st47">#</tspan><tspan class="st47">language</tspan><tspan

+                        class="st48"> </tspan><tspan class="st48">x</tspan><tspan class="st48">-</tspan><tspan class="st48">uefi</tspan><tspan

+                        class="st48">-</tspan><tspan class="st48">redfish</tspan><tspan class="st48">-</tspan><tspan class="st48">SCHEMA</tspan><tspan

+                        class="st48">.</tspan><tspan class="st48">VERSION</tspan><tspan class="st47">  </tspan><tspan class="st49"> </tspan><tspan

+                        x="4" dy="1.312em" class="st49">“</tspan><tspan class="st49">/</tspan><tspan class="st49">SCHEMA</tspan><tspan

+                        class="st49">/</tspan><tspan class="st49">PropertyC</tspan><tspan class="st49">”</tspan></text>       </g>

+        <g id="shape100-316" transform="translate(171.972,-550.963)">

+            <title>Rounded Rectangle.100</title>

+            <desc>EDK2 HII VFR Form Option A Enabled Option B Disabled Option C...</desc>

+            <path d="M4.5 715.59 L148.5 715.59 A4.49993 4.49993 -180 0 0 153 711.09 L153 664.96 A4.49993 4.49993 -180 0 0 148.5 660.46

+                         L4.5 660.46 A4.49993 4.49993 -180 0 0 0 664.96 L0 711.09 A4.49993 4.49993 -180 0 0 4.5 715.59 Z"

+                    class="st50"/>

+            <text x="37.65" y="671.66" class="st51">EDK2 HII VFR Form<tspan x="24.37" dy="1.6em" class="st52">Option A        Enabled </tspan><tspan

+                        x="24.6" dy="0.8em" class="st52">Option B       Disabled </tspan><tspan x="24.4" dy="0.8em" class="st52">Option C              </tspan><tspan

+                        class="st52">0</tspan><tspan class="st52">x</tspan><tspan class="st52">16</tspan></text>        </g>

+        <g id="shape101-325" transform="translate(147.222,-539.713)">

+            <title>Rounded Rectangle.101</title>

+            <desc>EDK2 HII VFR Form Option A Enabled Option B Disabled Option C...</desc>

+            <path d="M4.5 715.59 L148.5 715.59 A4.49993 4.49993 -180 0 0 153 711.09 L153 664.96 A4.49993 4.49993 -180 0 0 148.5 660.46

+                         L4.5 660.46 A4.49993 4.49993 -180 0 0 0 664.96 L0 711.09 A4.49993 4.49993 -180 0 0 4.5 715.59 Z"

+                    class="st50"/>

+            <text x="37.65" y="671.66" class="st51">EDK2 HII VFR Form<tspan x="24.37" dy="1.6em" class="st52">Option A        Enabled </tspan><tspan

+                        x="24.6" dy="0.8em" class="st52">Option B       Disabled </tspan><tspan x="24.4" dy="0.8em" class="st52">Option C              </tspan><tspan

+                        class="st52">0</tspan><tspan class="st52">x</tspan><tspan class="st52">16</tspan></text>        </g>

+        <g id="shape102-334" transform="translate(129.222,-526.213)">

+            <title>Rounded Rectangle</title>

+            <desc>EDK2 HII VFR Form Option A Enabled Option B Disabled Option C...</desc>

+            <path d="M4.5 715.59 L148.5 715.59 A4.49993 4.49993 -180 0 0 153 711.09 L153 664.96 A4.49993 4.49993 -180 0 0 148.5 660.46

+                         L4.5 660.46 A4.49993 4.49993 -180 0 0 0 664.96 L0 711.09 A4.49993 4.49993 -180 0 0 4.5 715.59 Z"

+                    class="st50"/>

+            <text x="29.88" y="671.66" class="st28">EDK2 HII VFR Form<tspan x="24.37" dy="1.6em" class="st53">Option A        </tspan><tspan

+                        class="st54">Enabled </tspan><tspan x="24.6" dy="0.8em" class="st53">Option B       </tspan><tspan

+                        class="st54">Disabled </tspan><tspan x="24.4" dy="0.8em" class="st53">Option C              </tspan><tspan

+                        class="st54">0</tspan><tspan class="st54">x</tspan><tspan class="st54">16</tspan></text>        </g>

+        <g id="shape110-345" transform="translate(503.938,-444.613) rotate(13.0919)">

+            <title>Curve connect 1.110</title>

+            <path d="M0 715.59 A11.592 11.592 0 0 1 22.97 715.59 A13.4718 13.4718 -180 0 0 48.31 719.9 L48.42 719.56" class="st55"/>

+        </g>

+        <g id="shape122-351" transform="translate(41.4724,-96.4625)">

+            <title>Sheet.122</title>

+            <desc>[1]</desc>

+            <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>

+            <text x="5.44" y="705.09" class="st7">[1]</text>        </g>

+        <g id="shape123-354" transform="translate(746.847,-100.963)">

+            <title>Sheet.123</title>

+            <desc>[2]</desc>

+            <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>

+            <text x="5.44" y="705.09" class="st7">[2]</text>        </g>

+        <g id="shape124-357" transform="translate(68.4724,-278.713)">

+            <title>Sheet.124</title>

+            <desc>[3]</desc>

+            <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>

+            <text x="5.44" y="705.09" class="st7">[3]</text>        </g>

+        <g id="shape125-360" transform="translate(338.472,-269.713)">

+            <title>Sheet.125</title>

+            <desc>[4]</desc>

+            <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>

+            <text x="5.44" y="705.09" class="st7">[4]</text>        </g>

+        <g id="shape126-363" transform="translate(761.472,-269.713)">

+            <title>Sheet.126</title>

+            <desc>[5]</desc>

+            <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>

+            <text x="5.44" y="705.09" class="st7">[5]</text>        </g>

+        <g id="shape127-366" transform="translate(390.222,-476.713)">

+            <title>Sheet.127</title>

+            <desc>[6]</desc>

+            <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>

+            <text x="5.44" y="705.09" class="st7">[6]</text>        </g>

+        <g id="shape128-369" transform="translate(123.597,-579.088)">

+            <title>Sheet.128</title>

+            <desc>[8]</desc>

+            <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>

+            <text x="5.44" y="705.09" class="st7">[8]</text>        </g>

+        <g id="shape129-372" transform="translate(62.8474,-501.463)">

+            <title>Sheet.129</title>

+            <desc>[9]</desc>

+            <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>

+            <text x="5.44" y="705.09" class="st7">[9]</text>        </g>

+        <g id="shape132-375" transform="translate(583.722,1233.46) rotate(180)">

+            <title>Curve connect 2.132</title>

+            <path d="M2.78 714.72 L3.12 714.61 A681.188 681.188 0 0 1 406.38 714.61 L406.72 714.72" class="st57"/>

+        </g>

+        <g id="shape133-384" transform="translate(238.347,-157.213)">

+            <title>Sheet.133</title>

+            <desc>Script-generated EDK2 Redfish client driver/library based on ...</desc>

+            <rect x="0" y="688.588" width="261" height="27" class="st1"/>

+            <text x="11.21" y="699.84" class="st59">Script-generated EDK2 Redfish client driver/library based on the <tspan

+                        x="45.23" dy="1em" class="st5">standard Redfish schemas </tspan>published by DMTF</text>        </g>

+        <g id="shape134-388" transform="translate(21.2224,-679.775)">

+            <title>Rectangle.134</title>

+            <rect x="0" y="703.213" width="24.75" height="12.375" class="st2"/>

+        </g>

+        <g id="shape135-390" transform="translate(41.4724,-670.213)">

+            <title>Sheet.135</title>

+            <desc>Script-generated code</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="12.79" y="704.34" class="st60">Script-generated code</text>        </g>

+        <g id="shape137-393" transform="translate(21.2224,-661.213)">

+            <title>Rectangle.137</title>

+            <rect x="0" y="703.213" width="24.75" height="12.375" class="st61"/>

+        </g>

+        <g id="shape138-395" transform="translate(43.7224,-652.213)">

+            <title>Sheet.138</title>

+            <desc>UEFI/EDK2 open source</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="9.97" y="704.34" class="st60">UEFI/EDK2 open source</text>     </g>

+        <g id="shape140-398" transform="translate(281.66,-341.784)">

+            <title>Configure</title>

+            <path d="M41.27 698.83 C40.4 698.46 37.61 697.28 37.61 697.28 L37.79 694.96 L37.94 693.01 L37.69 689.29 L39.53 688.23

+                         C39.53 688.23 40.46 687.84 41.33 687.49 C40.71 685.96 40.45 685.33 39.82 683.81 C38.94 684.17 36.06 685.35

+                         36.06 685.35 L34.63 683.57 C33.94 682.7 33.09 681.89 32.02 681.06 L30.33 679.75 L31.01 677.68 C31.01 677.68

+                         31.41 676.7 31.79 675.77 C30.27 675.14 29.64 674.88 28.12 674.26 C27.72 675.23 26.52 678.17 26.52 678.17

+                         L24.28 677.95 C23.14 677.83 21.96 677.86 20.77 678.02 L18.64 678.3 L17.65 676.35 C17.65 676.35 17.21 675.31

+                         16.78 674.31 C15.27 674.95 14.64 675.21 13.13 675.85 C13.58 676.92 14.85 679.93 14.85 679.93 L13.12 681.37

+                         C12.3 682.05 11.54 682.85 10.79 683.83 L9.49 685.52 L7.41 684.86 C7.41 684.86 6.28 684.4 5.17 683.96 C4.56

+                         685.49 4.31 686.12 3.69 687.65 C4.82 688.1 7.84 689.31 7.84 689.31 C7.84 689.31 7.65 692.73 7.63 693 C7.65

+                         693.25 7.7 694.01 7.7 694.03 C7.7 694.03 7.87 695.84 7.87 695.84 L6.79 696.82 C6.46 697.15 6.34 697.24 3.64

+                         698.3 C4.24 699.84 4.49 700.47 5.08 702.01 C6.21 701.57 9.36 700.34 9.36 700.34 L10.99 702.57 C11.49 703.19

+                         12.18 703.89 13.04 704.61 L14.63 705.96 L13.93 707.96 C13.93 707.96 13.45 709.08 12.97 710.2 C14.47 710.85

+                         15.1 711.12 16.61 711.77 C17.05 710.74 18.36 707.71 18.36 707.71 L20.65 708.03 C21.73 708.19 22.89 708.21

+                         24.1 708.1 L26.18 707.92 L27.11 709.84 C27.11 709.84 27.53 710.9 27.94 711.93 C29.47 711.32 30.1 711.07

+                         31.63 710.45 C31.25 709.51 30.04 706.48 30.04 706.48 L32.32 704.83 C32.97 704.31 33.71 703.56 34.48 702.62

+                         L35.81 701 L37.85 701.7 C37.85 701.7 38.82 702.1 39.73 702.49 C40.37 700.97 40.64 700.34 41.27 698.83 ZM40.58

+                         695.32 C40.58 695.32 40.57 695.4 40.56 695.47 C40.95 695.64 44.96 697.33 44.96 697.33 L41.23 706.17 C41.23

+                         706.17 37.13 704.45 36.75 704.28 C36.7 704.34 36.65 704.41 36.65 704.41 C35.76 705.49 34.89 706.37 33.97

+                         707.11 C33.97 707.11 33.67 707.33 33.46 707.47 C33.62 707.88 35.28 712.02 35.28 712.02 L26.38 715.59 C26.38

+                         715.59 24.65 711.28 24.5 710.89 C24.42 710.9 24.34 710.9 24.34 710.9 C22.91 711.03 21.54 711 20.25 710.82

+                         C20.25 710.82 20.17 710.8 20.09 710.79 C19.93 711.19 18.08 715.47 18.08 715.47 L9.27 711.66 C9.27 711.66

+                         11.18 707.25 11.34 706.86 C11.29 706.81 11.22 706.76 11.22 706.76 C10.23 705.92 9.41 705.09 8.72 704.23

+                         C8.72 704.23 8.51 703.94 8.37 703.75 C7.96 703.9 3.49 705.65 3.49 705.65 L0 696.71 C0 696.71 4.8 694.83

+                         4.8 694.83 C4.8 694.83 4.88 694.8 4.95 694.78 C4.92 694.54 4.89 694.21 4.89 694.21 L4.82 693.02 C4.82 693.02

+                         4.9 691.52 4.92 691.17 C4.54 691.02 0.04 689.21 0.04 689.21 L3.6 680.3 C3.6 680.3 8.06 682.09 8.46 682.25

+                         C8.51 682.18 8.56 682.12 8.56 682.12 C9.43 680.98 10.34 680.02 11.33 679.2 C11.33 679.2 11.39 679.15 11.45

+                         679.11 C11.29 678.72 9.45 674.35 9.45 674.35 L18.29 670.62 C18.29 670.62 20.07 674.85 20.24 675.25 C20.31

+                         675.24 20.39 675.23 20.39 675.23 C21.8 675.04 23.2 675.01 24.56 675.15 C24.56 675.15 24.63 675.16 24.71

+                         675.16 C24.87 674.78 26.59 670.59 26.59 670.59 L35.46 674.23 C35.46 674.23 33.77 678.34 33.61 678.74 C33.67

+                         678.78 33.74 678.83 33.74 678.83 C34.99 679.8 35.99 680.77 36.82 681.8 C36.82 681.8 36.88 681.88 36.94 681.95

+                         C37.33 681.79 41.35 680.14 41.35 680.14 L45 689.02 C45 689.02 40.99 690.67 40.6 690.83 C40.61 690.9 40.62

+                         690.98 40.62 690.98 C40.71 691.76 40.75 692.41 40.75 693.01 C40.75 693.7 40.7 694.43 40.58 695.32 ZM26.56

+                         697.76 C29.16 695.67 29.58 691.87 27.5 689.26 C25.42 686.65 21.62 686.23 19.01 688.31 C16.41 690.4 15.98

+                         694.2 18.07 696.81 C20.15 699.42 23.95 699.84 26.56 697.76 ZM23.76 684.23 C26.11 684.49 28.22 685.65 29.7

+                         687.5 C32.75 691.32 32.12 696.9 28.31 699.95 C26.47 701.43 24.16 702.1 21.8 701.84 C19.45 701.58 17.34 700.41

+                         15.87 698.56 C14.57 696.94 13.93 694.98 13.93 693.04 C13.93 690.44 15.07 687.86 17.25 686.12 C19.1 684.64

+                         21.41 683.97 23.76 684.23 Z" class="st62"/>

+        </g>

+        <g id="shape145-400" transform="translate(323.911,1069.28) scale(1,-1)">

+            <title>Side to top/bottom.145</title>

+            <path d="M7.18 715.59 L7.54 715.59 L96.69 715.59 L96.69 668.4" class="st63"/>

+        </g>

+        <g id="shape146-406" transform="translate(204.597,-382.144)">

+            <title>Bottom to top fixed 2</title>

+            <path d="M0 677.27 L0 697.59 L99.14 697.59 L99.14 708.05" class="st65"/>

+        </g>

+        <g id="shape150-412" transform="translate(281.66,1070.51) rotate(180)">

+            <title>Side to top/bottom</title>

+            <path d="M7.18 715.59 L7.54 715.59 L107.44 715.59 L107.44 669.64" class="st63"/>

+        </g>

+        <g id="shape152-417" transform="translate(173.097,-359.713)">

+            <title>Sheet.152</title>

+            <desc>[10]</desc>

+            <rect x="0" y="688.588" width="45" height="27" class="st6"/>

+            <text x="12.52" y="705.09" class="st7">[10]</text>      </g>

+        <g id="shape153-420" transform="translate(186.597,-359.713)">

+            <title>Sheet.153</title>

+            <desc>EDK2 Build Tool</desc>

+            <rect x="0" y="688.588" width="108" height="27" class="st6"/>

+            <text x="21.18" y="704.59" class="st22">EDK2 Build Tool</text>      </g>

+        <g id="shape95-423" transform="translate(479.651,-242.34) rotate(-1.84761)">

+            <title>Curve connect 2</title>

+            <path d="M1.08 713.99 L1.29 713.7 A41.432 41.432 0 0 1 68.5 713.7 L68.7 713.99" class="st66"/>

+        </g>

+        <g id="shape154-431" transform="translate(546.597,-607.213)">

+            <title>Sheet.154</title>

+            <desc>[7]</desc>

+            <rect x="0" y="688.588" width="24.75" height="27" class="st6"/>

+            <text x="5.44" y="705.09" class="st7">[7]</text>        </g>

+        <g id="shape155-434" transform="translate(919.083,249.319) rotate(-86.8202) scale(1,-1)">

+            <title>Curve connect 1.155</title>

+            <path d="M0 715.59 A6.2366 6.2366 0 0 1 11.73 715.59 A4.54475 4.54475 -180 0 0 20.28 715.59" class="st67"/>

+        </g>

+    </g>

+</svg>

--

2.17.1