Hi @Abner Chang, @Igor Kulchytskyy, I opened a pull request here for the ease of review: https://github.com/tianocore/edk2-redfish-client/pull/50 Thanks, Nickle > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Nickle Wang > via groups.io > Sent: Tuesday, September 12, 2023 11:10 PM > To: devel@edk2.groups.io > Cc: Abner Chang ; Igor Kulchytskyy > Subject: [edk2-devel] [edk2-redfish-client][PATCH] RedfishClientPkg: update > Readme.md > > External email: Use caution opening links or attachments > > > Update readme for below topics: > - The call flow of BIOS Redfish provisioning scenario. > - The call flow of BIOS Redfish pending settings scenario. > - The call flow of Redfish feature driver dispatch. > - Redfish foundation driver stack design. > - The design of Redfish Platform Config Protocol. > - The design of synchronization between BIOS and Redfish service. > > Signed-off-by: Nickle Wang > > Cc: Abner Chang > > Cc: Igor Kulchytskyy > > --- > .../redfish-call-flow-pending-settings.svg | 58 ++++++ > .../Media/redfish-call-flow-provisioning.svg | 46 +++++ > .../redfish-feature-driver-call-flow.svg | 133 ++++++++++++++ > .../Media/redfish-foundation-driver-stack.svg | 75 ++++++++ > ...redfish-platform-config-protocol-stack.svg | 99 ++++++++++ > .../Media/redfish-synchronization-design.svg | 75 ++++++++ > RedfishClientPkg/Readme.md | 169 ++++++++++++++++-- > 7 files changed, 640 insertions(+), 15 deletions(-) > create mode 100755 RedfishClientPkg/Documents/Media/redfish-call-flow- > pending-settings.svg > create mode 100755 RedfishClientPkg/Documents/Media/redfish-call-flow- > provisioning.svg > create mode 100755 RedfishClientPkg/Documents/Media/redfish-feature- > driver-call-flow.svg > create mode 100755 RedfishClientPkg/Documents/Media/redfish-foundation- > driver-stack.svg > create mode 100755 RedfishClientPkg/Documents/Media/redfish-platform- > config-protocol-stack.svg > create mode 100755 RedfishClientPkg/Documents/Media/redfish- > synchronization-design.svg > > diff --git a/RedfishClientPkg/Documents/Media/redfish-call-flow-pending- > settings.svg b/RedfishClientPkg/Documents/Media/redfish-call-flow-pending- > settings.svg > new file mode 100755 > index 00000000..155a5ab3 > --- /dev/null > +++ b/RedfishClientPkg/Documents/Media/redfish-call-flow-pending-settings.svg > @@ -0,0 +1,58 @@ > + xmlns="http://www.w3.org/2000/svg" > xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" > overflow="hidden"> > + > + > + > + > + > + > + stroke-width="4.58333" stroke-linejoin="round" stroke-miterlimit="10" > fill="#FFFFFF"/> > + weight="700" font-size="64" transform="matrix(1 0 0 1 2143.23 758)">Feature > Driver > + stroke-width="4.58333" stroke-linejoin="round" stroke-miterlimit="10" > fill="#FFFFFF"/> > + weight="700" font-size="64" transform="matrix(1 0 0 1 763.66 758)">EDK2 > HII > + stroke-width="4.58333" stroke-linejoin="round" stroke-miterlimit="10" > fill="#FFFFFF"/> > + weight="700" font-size="64" transform="matrix(1 0 0 1 3499.14 758)">Redfish > Service > + > + > + > + > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 990.014 > 1568)">3 > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 1016.37 1568)">. If > > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 1098.29 1568)">HII > question exists and pending value is changed > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 1051.89 1628)">Use > HII protocol/library to submit new value > + fill="#FFFF00" fill-rule="evenodd"/> > + fill="#FFFF00" fill-rule="evenodd"/> > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 990.014 1239)">2. > Check and see if there is HII question with lang: > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 1051.89 > 1299)">/ > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 1078.24 > 1299)">bios/attributes/ > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 1444.91 > 1299)">ATTRIBUTE_ > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 1719.91 > 1299)">NAME > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 2378.69 1805)">4. > Update current settings to > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 2440.56 > 1865)">/redfish/v1/systems/SYS/Bios > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 3138.38 > 1865)">(provisioning) > + > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 2393.47 968)">1. > Use > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 2549.88 968)">HTTP > âEURoeGUTâEUR� to download pending settings from > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 2455.35 > 1028)">/redfish > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 2638.11 > 1028)">/v1/systems/SYS/Bios/Settings > + > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 2151.86 2175)">6. > > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 2212.01 > 2175)">System reboot > + stroke-width="4.58333" stroke-linejoin="round" stroke-miterlimit="10" > fill="#404040"/> > + transform="matrix(1 0 0 1 347.29 1046)">Chipset/HII > + transform="matrix(1 0 0 1 413.749 1105)">driver > + stroke-width="4.58333" stroke-linejoin="round" stroke-miterlimit="10" > fill="#404040"/> > + transform="matrix(1 0 0 1 402.29 1101)">Chipset/HII > + transform="matrix(1 0 0 1 468.749 1160)">driver > + stroke-width="4.58333" stroke-linejoin="round" stroke-miterlimit="10" > fill="#404040"/> > + transform="matrix(1 0 0 1 457.29 1156)">Chipset/HII > + transform="matrix(1 0 0 1 523.749 1215)">driver > + stroke-width="4.58333" stroke-linejoin="round" stroke-miterlimit="10" > fill="#404040"/> > + transform="matrix(1 0 0 1 512.29 1211)">Chipset/HII > + transform="matrix(1 0 0 1 578.749 1270)">driver > + > + weight="400" font-size="83" transform="matrix(1 0 0 1 62.1854 611)">Consume > pending > + weight="400" font-size="83" transform="matrix(1 0 0 1 687.237 > 611)">settings: > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 62.1854 680)">BMC > to BIOS > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 3715.21 1979)">5. > BMC reset pending settings > + > + > diff --git a/RedfishClientPkg/Documents/Media/redfish-call-flow-provisioning.svg > b/RedfishClientPkg/Documents/Media/redfish-call-flow-provisioning.svg > new file mode 100755 > index 00000000..70556152 > --- /dev/null > +++ b/RedfishClientPkg/Documents/Media/redfish-call-flow-provisioning.svg > @@ -0,0 +1,46 @@ > + xmlns="http://www.w3.org/2000/svg" > xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" > overflow="hidden"> > + > + > + > + > + > + > + stroke-width="4.58333" stroke-linejoin="round" stroke-miterlimit="10" > fill="#FFFFFF"/> > + weight="700" font-size="64" transform="matrix(1 0 0 1 2187.7 807)">Feature > Driver > + stroke-width="4.58333" stroke-linejoin="round" stroke-miterlimit="10" > fill="#FFFFFF"/> > + weight="700" font-size="64" transform="matrix(1 0 0 1 808.129 807)">EDK2 > HII > + stroke-width="4.58333" stroke-linejoin="round" stroke-miterlimit="10" > fill="#FFFFFF"/> > + weight="700" font-size="64" transform="matrix(1 0 0 1 3543.6 807)">Redfish > Service > + > + > + > + > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 957.259 969)">1. > Find all HII questions with > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 1620.12 > 969)">language: > + font-weight="700" font-size="50" transform="matrix(1 0 0 1 1854.45 > 969)">âEURoe/bios/attributes/* > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 2292.73 > 969)">âEUR� > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 985.955 1526)">3. > Get current value of each HII question and > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 1047.83 > 1586)">append value to attribute list > + > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 2417.95 1202)">2. > Follow Bios schema and > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 2479.82 > 1262)">create attribute list > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 2412.63 1795)">4. > BIOS current settings is ready > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 2474.5 1855)">Issue > HTTP âEURoePUTâEUR� to /redfish/v1/systems/SYS/Bios > + > + stroke-width="4.58333" stroke-linejoin="round" stroke-miterlimit="10" > fill="#404040"/> > + transform="matrix(1 0 0 1 391.759 1095)">Chipset/HII > + transform="matrix(1 0 0 1 458.217 1154)">driver > + stroke-width="4.58333" stroke-linejoin="round" stroke-miterlimit="10" > fill="#404040"/> > + transform="matrix(1 0 0 1 446.759 1150)">Chipset/HII > + transform="matrix(1 0 0 1 513.217 1209)">driver > + stroke-width="4.58333" stroke-linejoin="round" stroke-miterlimit="10" > fill="#404040"/> > + transform="matrix(1 0 0 1 501.759 1205)">Chipset/HII > + transform="matrix(1 0 0 1 568.217 1264)">driver > + stroke-width="4.58333" stroke-linejoin="round" stroke-miterlimit="10" > fill="#404040"/> > + transform="matrix(1 0 0 1 556.759 1260)">Chipset/HII > + transform="matrix(1 0 0 1 623.217 1319)">driver > + > + weight="400" font-size="83" transform="matrix(1 0 0 1 289.433 > 610)">Provisioning: > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 289.433 679)">BIOS > to BMC > + > + > diff --git a/RedfishClientPkg/Documents/Media/redfish-feature-driver-call- > flow.svg b/RedfishClientPkg/Documents/Media/redfish-feature-driver-call- > flow.svg > new file mode 100755 > index 00000000..acea6b44 > --- /dev/null > +++ b/RedfishClientPkg/Documents/Media/redfish-feature-driver-call-flow.svg > @@ -0,0 +1,133 @@ > + xmlns="http://www.w3.org/2000/svg" > xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" > overflow="hidden"> > + > + > + > + > + > + > + > + > + fill-rule="evenodd"/> > + transform="matrix(1 0 0 1 703.081 901)">Redfish Feature > + transform="matrix(1 0 0 1 756.935 960)">Core Driver > + stroke-width="3.4375" stroke-linejoin="round" stroke-miterlimit="10" > fill="none"/> > + weight="700" font-size="55" transform="matrix(1 0 0 1 63.3886 702)">Event > driven > + font-weight="400" font-size="37" transform="matrix(1 0 0 1 63.3886 > 751)">PcdEdkIIRedfishFeatureDriverStartupEventGuid > + transform="matrix(1.83697e-16 1 1 -1.83697e-16 429 779)"/> > + stroke-width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" > fill="#FFFFFF"/> > + weight="700" font-size="55" transform="matrix(1 0 0 1 65.7033 > 1129)">Ready > + weight="700" font-size="55" transform="matrix(1 0 0 1 206.641 1129)">- > + weight="700" font-size="55" transform="matrix(1 0 0 1 223.255 > 1129)">to > + weight="700" font-size="55" transform="matrix(1 0 0 1 271.953 1129)">- > + weight="700" font-size="55" transform="matrix(1 0 0 1 288.568 1129)">Provision > Signal > + font-weight="400" font-size="37" transform="matrix(1 0 0 1 65.7033 > 1173)">gEfiRedfishClientFeatureReadyToProvisionin > + font-weight="400" font-size="37" transform="matrix(1 0 0 1 65.7033 > 1213)">gGuid > + stroke-width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" > fill="#FFFFFF"/> > + weight="700" font-size="55" transform="matrix(1 0 0 1 65.7037 > 2358)">After > + weight="700" font-size="55" transform="matrix(1 0 0 1 182.006 2358)">- > + weight="700" font-size="55" transform="matrix(1 0 0 1 198.62 2358)">Provision > Signal > + font-weight="400" font-size="37" transform="matrix(1 0 0 1 65.7037 > 2402)">gEfiRedfishClientFeatureAfterProvisioningG > + font-weight="400" font-size="37" transform="matrix(1 0 0 1 65.7037 > 2442)">uid > + fill="#8C8C8C"/> > + fill="#8C8C8C"/> > + stroke-width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" fill- > rule="evenodd"/> > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 1313.38 > 1258)">Service Root > + weight="700" font-size="48" transform="matrix(1 0 0 1 1192.27 > 1131)">/redfish/v1 > + transform="matrix(1.83697e-16 1 1 -1.83697e-16 896 1016)"/> > + stroke-width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" fill- > rule="evenodd"/> > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 1681.69 > 1462)">ComputerSystemC > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 1792.26 > 1521)">ollection > + weight="700" font-size="48" transform="matrix(1 0 0 1 1626.06 > 1376)">/redfish/v1/Systems > + transform="matrix(1.83697e-16 1 1 -1.83697e-16 896 1016)"/> > + width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" fill- > rule="evenodd"/> > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 2579.22 > 1490)">ComputerSystem > + weight="700" font-size="48" transform="matrix(1 0 0 1 2510.53 > 1371)">/redfish/v1/Systems/SYS > + transform="matrix(1 0 0 -1 2150 1476.36)"/> > + stroke-width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" fill- > rule="evenodd"/> > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 2103.34 > 1812)">Bios > + transform="matrix(1.83697e-16 1 1 -1.83697e-16 896 1016)"/> > + weight="700" font-size="48" transform="matrix(1 0 0 1 1894.92 > 1693)">/redfish/v1/Systems/SYS/Bios > + width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" fill- > rule="evenodd"/> > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 2106.47 > 2103)">MemoryCollection > + transform="matrix(1.83697e-16 1 1 -1.83697e-16 896 1016)"/> > + weight="700" font-size="48" transform="matrix(1 0 0 1 2062.37 > 1981)">/redfish/v1/Systems/SYS/Memory > + width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" fill- > rule="evenodd"/> > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 3085.32 > 2103)">Memory > + > + font-weight="400" font-size="183" transform="matrix(1 0 0 1 2263.52 > 2245)">âEUR¦ > + stroke-linejoin="round" stroke-miterlimit="10" fill-rule="evenodd"/> > + font-weight="700" font-size="55" transform="matrix(1 0 0 1 3657.66 > 885)">Bios > + > + font-weight="700" font-size="55" transform="matrix(1 0 0 1 3486.36 > 688)">Redfish foundation > + > + font-weight="700" font-size="55" transform="matrix(1 0 0 1 3474.33 306)">BMC > Redfish service > + fill="#8C8C8C" transform="matrix(1 0 0 -1 3706 797.872)"/> > + fill="#8C8C8C" transform="matrix(1 0 0 -1 3706 600.517)"/> > + > + font-weight="700" font-size="55" transform="matrix(1 0 0 1 3434.8 > 1069)">Redfish Platform Config > + > + font-weight="700" font-size="55" transform="matrix(1 0 0 1 3610.58 > 1391)">EDK2 HII > + > + font-weight="700" font-size="55" transform="matrix(1 0 0 1 3552.42 > 1571)">Chipset driver > + > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 3670.44 > 1753)">HW > + > + fill="#8C8C8C"/> > + > + > + opacity="0.501961"/> > + font-weight="700" font-size="55" transform="matrix(1 0 0 1 3606.27 > 498)">Network > + > + transform="matrix(1 0 0 -1 2411 1796.31)"/> > + weight="400" font-size="50" transform="matrix(1 0 0 1 3733.97 1194)">x > + weight="400" font-size="50" transform="matrix(1 0 0 1 3755.74 1194)">- > + weight="400" font-size="50" transform="matrix(1 0 0 1 3771.21 > 1194)">uefi > + weight="400" font-size="50" transform="matrix(1 0 0 1 3849.7 1194)">- > + weight="400" font-size="50" transform="matrix(1 0 0 1 3865.17 > 1194)">redfish > + weight="400" font-size="50" transform="matrix(1 0 0 1 4007.25 1194)">- > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 4022.72 > 1194)">Bios.vA_B_C > + font-weight="400" font-size="50" transform="matrix(1 0 0 1 3733.97 > 1255)">/Bios/Attributes/XXX > + font-weight="700" font-size="41" transform="matrix(1 0 0 1 380.14 > 1659)">Redfish Feature Protocol > + font-weight="700" font-size="41" transform="matrix(1 0 0 1 2829.58 > 2249)">Redfish Resource Config Protocol > + font-weight="700" font-size="41" transform="matrix(1 0 0 1 2426.51 > 1602)">Redfish Resource Config Protocol > + stroke-width="3.4375" stroke-linejoin="round" stroke-miterlimit="10" > fill="none"/> > + > + > + > + > + weight="700" font-size="64" transform="matrix(1 0 0 1 165.4 > 423)">/redfish/ > + weight="700" font-size="64" transform="matrix(1 0 0 1 406.025 423)">v1 > + weight="700" font-size="64" transform="matrix(1 0 0 1 469.046 423)">/ > + weight="700" font-size="64" transform="matrix(1 0 0 1 496.546 > 423)">Systems > + weight="700" font-size="64" transform="matrix(1 0 0 1 715.4 423)">/ > + weight="700" font-size="64" transform="matrix(1 0 0 1 742.9 423)">SYS > + weight="700" font-size="64" transform="matrix(1 0 0 1 836.858 423)">/ > + weight="700" font-size="64" transform="matrix(1 0 0 1 864.358 > 423)">Bios > + weight="700" font-size="64" transform="matrix(1 0 0 1 976.65 > 423)">/âEUR¦ > + > + > + width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" fill="none" fill- > rule="evenodd"/> > + stroke="#000000" stroke-width="9.16667" stroke-linejoin="round" stroke- > miterlimit="10" fill="none" fill-rule="evenodd"/> > + weight="700" font-size="41" transform="matrix(1 0 0 1 497.682 539)">Service > Root > + > + width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" fill="none" fill- > rule="evenodd"/> > + stroke="#000000" stroke-width="9.16667" stroke-linejoin="round" stroke- > miterlimit="10" fill="none" fill-rule="evenodd"/> > + weight="700" font-size="41" transform="matrix(1 0 0 1 682.83 228)">Computer > System > + weight="700" font-size="41" transform="matrix(1 0 0 1 749.861 > 272)">Collection > + > + width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" fill="none" fill- > rule="evenodd"/> > + stroke="#000000" stroke-width="9.16667" stroke-linejoin="round" stroke- > miterlimit="10" fill="none" fill-rule="evenodd"/> > + weight="700" font-size="41" transform="matrix(1 0 0 1 956.072 510)">Computer > > + weight="700" font-size="41" transform="matrix(1 0 0 1 980.134 > 554)">System > + > + width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" fill="none" fill- > rule="evenodd"/> > + stroke="#000000" stroke-width="9.16667" stroke-linejoin="round" stroke- > miterlimit="10" fill="none" fill-rule="evenodd"/> > + weight="700" font-size="41" transform="matrix(1 0 0 1 1324.41 > 254)">Bios > + weight="400" font-size="55" transform="matrix(1 0 0 1 65.5579 > 241)">Register > + weight="700" font-size="48" transform="matrix(1 0 0 1 2943.32 > 1981)">/redfish/v1/Systems/SYS/ > + weight="700" font-size="48" transform="matrix(1 0 0 1 3469.25 > 1981)">Memory/Dimm1 > + > + fill="#8C8C8C"/> > + > + > + > diff --git a/RedfishClientPkg/Documents/Media/redfish-foundation-driver- > stack.svg b/RedfishClientPkg/Documents/Media/redfish-foundation-driver- > stack.svg > new file mode 100755 > index 00000000..79694335 > --- /dev/null > +++ b/RedfishClientPkg/Documents/Media/redfish-foundation-driver-stack.svg > @@ -0,0 +1,75 @@ > + xmlns="http://www.w3.org/2000/svg" > xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" > overflow="hidden"> > + > + > + > + > + gradientUnits="userSpaceOnUse" spreadMethod="reflect" id="fill1"> > + > + > + > + > + > + > + opacity="0.501961"/> > + > + stroke-width="4.58333" stroke-miterlimit="8" fill="#5B9BD5"/> > + font-weight="700" font-size="64" transform="matrix(1 0 0 1 652.979 > 1972)">NIC > + stroke-width="4.58333" stroke-miterlimit="8" fill="#FBE5D6"/> > + font-weight="700" font-size="55" transform="matrix(1 0 0 1 450.739 > 1657)">UEFI Network Stack > + stroke-width="4.58333" stroke-miterlimit="8" fill="#FFC000"/> > + font-weight="700" font-size="64" transform="matrix(1 0 0 1 1773.26 > 1660)">In > + font-weight="700" font-size="64" transform="matrix(1 0 0 1 1828.84 1660)">- > > + font-weight="700" font-size="64" transform="matrix(1 0 0 1 1852.33 > 1660)">band channel > + stroke-width="4.58333" stroke-miterlimit="8" fill="#ADB9CA"/> > + font-style="italic" font-weight="700" font-size="46" transform="matrix(1 0 0 1 > 855.72 1182)">REST > + font-style="italic" font-weight="700" font-size="46" transform="matrix(1 0 0 1 > 882.074 1231)">EX > + stroke-width="4.58333" stroke-miterlimit="8" fill="#A5A5A5"/> > + font-weight="700" font-size="41" transform="matrix(1 0 0 1 433.577 > 1254)">Redfish Discover > + font-weight="700" font-size="41" transform="matrix(1 0 0 1 512.067 > 1299)">Protocol > + fill="#FFFFFF" fill-rule="evenodd"/> > + weight="700" font-size="64" transform="matrix(1 0 0 1 1158.18 2313)">Redfish > Service > + stroke-width="4.58333" stroke-miterlimit="8" fill="#767171"/> > + font-weight="700" font-size="64" transform="matrix(1 0 0 1 1100.89 > 596)">Redfish Application > + stroke-width="4.58333" stroke-miterlimit="8" fill="#70AD47"/> > + weight="700" font-size="46" transform="matrix(1 0 0 1 457.66 1105)">Redfish > Config > + weight="700" font-size="46" transform="matrix(1 0 0 1 535.851 > 1155)">Driver > + stroke="#A5A5A5" stroke-width="2.29167" stroke-miterlimit="8" fill="url(#fill1)" > fill-rule="evenodd"/> > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 2474.57 > 1172)">SMBIOS > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 2465.7 1231)">Type > 42 > + opacity="0.501961"/> > + font-weight="700" font-size="73" transform="matrix(1 0 0 1 1959.59 > 1972)">HW > + stroke-width="3.4375" stroke-linejoin="round" stroke-miterlimit="10" > fill="#70AD47"/> > + font-weight="700" font-size="55" transform="matrix(1 0 0 1 994.903 > 720)">Redfish Config Handler Protocol > + transform="matrix(1 0 0 -1 1240.5 1052.27)"/> > + fill="#70AD47"/> > + transform="matrix(1.83697e-16 1 1 -1.83697e-16 1360.5 765.5)"/> > + fill="#FF0000"/> > + > + fill="#A5A5A5"/> > + fill="#A5A5A5"/> > + fill="#A5A5A5"/> > + stroke-width="4.58333" stroke-miterlimit="8" fill="#ADB9CA"/> > + font-style="italic" font-weight="700" font-size="46" transform="matrix(1 0 0 1 > 1513.76 1186)">REST > + font-style="italic" font-weight="700" font-size="46" transform="matrix(1 0 0 1 > 1540.11 1235)">EX > + stroke-width="4.58333" stroke-miterlimit="8" fill="#A5A5A5"/> > + font-weight="700" font-size="41" transform="matrix(1 0 0 1 1091.62 > 1258)">Redfish Discover > + font-weight="700" font-size="41" transform="matrix(1 0 0 1 1170.11 > 1303)">Protocol > + stroke-width="4.58333" stroke-miterlimit="8" fill="#70AD47"/> > + font-weight="700" font-size="46" transform="matrix(1 0 0 1 1099.08 > 1111)">Redfish Config > + font-weight="700" font-size="46" transform="matrix(1 0 0 1 1186.17 > 1160)">Driver > + stroke-width="4.58333" stroke-miterlimit="8" fill="#ADB9CA"/> > + font-style="italic" font-weight="700" font-size="46" transform="matrix(1 0 0 1 > 2165.89 1188)">REST > + font-style="italic" font-weight="700" font-size="46" transform="matrix(1 0 0 1 > 2192.24 1237)">EX > + stroke-width="4.58333" stroke-miterlimit="8" fill="#A5A5A5"/> > + font-weight="700" font-size="41" transform="matrix(1 0 0 1 1743.75 > 1260)">Redfish Discover > + font-weight="700" font-size="41" transform="matrix(1 0 0 1 1822.23 > 1305)">Protocol > + stroke-width="4.58333" stroke-miterlimit="8" fill="#70AD47"/> > + font-weight="700" font-size="46" transform="matrix(1 0 0 1 1751.21 > 1113)">Redfish Config > + font-weight="700" font-size="46" transform="matrix(1 0 0 1 1838.3 > 1162)">Driver > + stroke-width="4.58333" stroke-miterlimit="8" fill="#FBE5D6"/> > + font-weight="700" font-size="55" transform="matrix(1 0 0 1 1109.41 > 1657)">UEFI Network Stack > + stroke-width="4.58333" stroke-miterlimit="8" fill="#5B9BD5"/> > + font-weight="700" font-size="64" transform="matrix(1 0 0 1 1311.65 > 1972)">NIC > + transform="matrix(-1 0 0 1 1362.14 2023.5)"/> > + > + > diff --git a/RedfishClientPkg/Documents/Media/redfish-platform-config-protocol- > stack.svg b/RedfishClientPkg/Documents/Media/redfish-platform-config- > protocol-stack.svg > new file mode 100755 > index 00000000..670c29bf > --- /dev/null > +++ b/RedfishClientPkg/Documents/Media/redfish-platform-config-protocol- > stack.svg > @@ -0,0 +1,99 @@ > + xmlns="http://www.w3.org/2000/svg" > xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" > overflow="hidden"> > + > + filterUnits="userSpaceOnUse" primitiveUnits="userSpaceOnUse"> > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + opacity="0.4"/> > + stroke-width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" stroke- > dasharray="36.6667 27.5" fill="none" fill-rule="evenodd"/> > + > + > + font-weight="700" font-size="64" transform="matrix(1 0 0 1 1026.14 683)">Setup > Menu > + stroke-width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" > fill="#9E9E9E"/> > + font-weight="700" font-size="64" transform="matrix(1 0 0 1 916.711 > 1199)">EDK2 Setup Browser > + > + font-weight="700" font-size="64" transform="matrix(1 0 0 1 917.571 > 1038)">EDK2 Display Engine > + weight="700" font-size="64" transform="matrix(1 0 0 1 1122.4 > 545)">User > + > + font-weight="700" font-size="64" transform="matrix(1 0 0 1 941.92 1374)">EDK2 > HII Database > + stroke-width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" > fill="#8C8C8C"/> > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 779.595 > 1842)">Chipset/HII > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 838.88 > 1901)">driver > + stroke-width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" > fill="#8C8C8C"/> > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 1188 > 1842)">Chipset/HII > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 1247.28 > 1901)">driver > + stroke-width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" > fill="#8C8C8C"/> > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 945.765 > 1941)">Chipset/HII > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 1005.05 > 2000)">driver > + stroke-width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" > fill="#8C8C8C"/> > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 1376.4 > 1941)">Chipset/HII > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 1435.69 > 2000)">driver > + > + > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 1247.51 > 801)">Graphic protocols > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 1247.51 > 867)">Console input protocols > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 1232.43 1574)">EFI > Config Access Protocol > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 1232.43 1640)">HII > Database Protocol > + stroke-width="9.16667" stroke-linejoin="round" stroke-miterlimit="10"/> > + font-weight="400" font-size="73" transform="matrix(1 0 0 1 1203.49 > 2245)">HW > + linejoin="round" stroke-miterlimit="10" stroke-dasharray="36.6667 27.5" > fill="none" fill-rule="evenodd"/> > + > + > + font-weight="700" font-size="64" transform="matrix(1 0 0 1 2754.31 > 687)">Feature drivers > + > + font-weight="700" font-size="64" transform="matrix(1 0 0 1 2652.04 > 1124)">EDK2 HII Utility Library > + weight="700" font-size="64" transform="matrix(1 0 0 1 2724.81 549)">Redfish > Interface > + > + font-weight="700" font-size="64" transform="matrix(1 0 0 1 2709.33 > 1376)">EDK2 HII Database > + stroke-width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" > fill="#8C8C8C"/> > + transform="matrix(1 0 0 1 2532.97 1847)">Chipset/HII > + transform="matrix(1 0 0 1 2599.43 1906)">driver > + stroke-width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" > fill="#8C8C8C"/> > + transform="matrix(1 0 0 1 2941.37 1847)">Chipset/HII > + transform="matrix(1 0 0 1 3007.83 1906)">driver > + stroke-width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" > fill="#8C8C8C"/> > + transform="matrix(1 0 0 1 2699.14 1947)">Chipset/HII > + transform="matrix(1 0 0 1 2765.6 2006)">driver > + stroke-width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" > fill="#8C8C8C"/> > + transform="matrix(1 0 0 1 3129.78 1947)">Chipset/HII > + transform="matrix(1 0 0 1 3196.24 2006)">driver > + > + > + font-style="italic" font-weight="700" font-size="55" transform="matrix(1 0 0 1 > 3007.22 833)">EDKII Redfish Platform Configure Protocol > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 3007.22 1592)">EFI > Config Access Protocol > + font-weight="400" font-size="55" transform="matrix(1 0 0 1 3007.22 1658)">HII > Database Protocol > + stroke-width="9.16667" stroke-linejoin="round" stroke-miterlimit="10"/> > + font-weight="400" font-size="73" transform="matrix(1 0 0 1 2970.9 > 2248)">HW > + > + > + transform="matrix(1 0 0 -1 16.4999 118.354)"/> > + > + > + transform="matrix(1 0 0 -1 1661.5 1182.14)"/> > + weight="400" font-size="55" transform="matrix(1 0 0 1 1783.55 1054)">Move > necessary functions > + weight="400" font-size="55" transform="matrix(1 0 0 1 1783.55 1120)">to library > > + stroke-width="9.16667" stroke-linejoin="round" stroke-miterlimit="10"/> > + font-weight="700" font-size="55" transform="matrix(1 0 0 1 1821 1874)">UEFI > > + font-weight="700" font-size="55" transform="matrix(1 0 0 1 1780.6 > 1933)">variable > + stroke-width="9.16667" stroke-linejoin="round" stroke-miterlimit="10"/> > + font-weight="700" font-size="55" transform="matrix(1 0 0 1 3589.11 > 1851)">UEFI > + font-weight="700" font-size="55" transform="matrix(1 0 0 1 3548.71 > 1910)">variable > + > + > + > diff --git a/RedfishClientPkg/Documents/Media/redfish-synchronization- > design.svg b/RedfishClientPkg/Documents/Media/redfish-synchronization- > design.svg > new file mode 100755 > index 00000000..2dd1fb61 > --- /dev/null > +++ b/RedfishClientPkg/Documents/Media/redfish-synchronization-design.svg > @@ -0,0 +1,75 @@ > + xmlns="http://www.w3.org/2000/svg" > xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" > overflow="hidden"> > + > + > + > + > + > + > + width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" fill="#008564" > fill-rule="evenodd"/> > + weight="700" font-size="64" transform="matrix(1 0 0 1 104.76 > 290)">REDFISH_FEATURE_CALLBACK() > + stroke-width="4.58333" stroke-linejoin="round" stroke-miterlimit="10" > fill="none"/> > + weight="700" font-size="64" transform="matrix(1 0 0 1 839.622 > 610)">Identify() > + stroke-width="4.58333" stroke-linejoin="round" stroke-miterlimit="10" > fill="none"/> > + weight="700" font-size="64" transform="matrix(1 0 0 1 1433.4 > 855)">Check() > + stroke-width="4.58333" stroke-linejoin="round" stroke-miterlimit="10" > fill="none"/> > + weight="700" font-size="64" transform="matrix(1 0 0 1 1928.64 > 1134)">Provisioning() > + stroke-width="4.58333" stroke-linejoin="round" stroke-miterlimit="10" > fill="none"/> > + weight="700" font-size="64" transform="matrix(1 0 0 1 1808.4 > 1510)">Consume() > + stroke-width="4.58333" stroke-linejoin="round" stroke-miterlimit="10" > fill="none"/> > + weight="700" font-size="64" transform="matrix(1 0 0 1 2376.59 > 1818)">Update() > + transform="matrix(1.83697e-16 1 1 -1.83697e-16 511.5 406.5)"/> > + > + > + transform="matrix(1.83697e-16 1 1 -1.83697e-16 1532.5 1141.5)"/> > + transform="matrix(1.83697e-16 1 1 -1.83697e-16 1952.5 1555.5)"/> > + width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" fill="#008564" > fill-rule="evenodd"/> > + weight="400" font-size="64" transform="matrix(1 0 0 1 316.965 2332)">Done > > + > + fill="#008563"/> > + opacity="0.501961"/> > + weight="700" font-size="64" transform="matrix(1 0 0 1 2869.23 1148)">HTTP > > + weight="700" font-size="64" transform="matrix(1 0 0 1 3021.62 > 1148)">POST/PUT > + opacity="0.501961"/> > + font-size="64" transform="matrix(1 0 0 1 3191.74 2127)">HTTP > + weight="400" font-size="64" transform="matrix(1 0 0 1 3376.79 > 2127)">PATCH/PUT > + > + weight="700" font-size="64" transform="matrix(1 0 0 1 1655.98 > 505)">RedfishResourceIdentifyLib > + > + opacity="0.501961"/> > + weight="700" font-size="50" transform="matrix(1 0 0 1 2797.23 > 806)">GetData > + weight="700" font-size="50" transform="matrix(1 0 0 1 2970.82 806)">() > + font-style="italic" font-weight="700" font-size="46" transform="matrix(1 0 0 1 > 2696.04 693)">EDKII_REDFISH_RESOURCE_ADDENDUM_PROTOCOL > + transform="matrix(1 0 0 -1 2468.5 1113.06)"/> > + opacity="0.501961"/> > + weight="700" font-size="50" transform="matrix(1 0 0 1 2757.16 > 931)">GeOemData > + weight="700" font-size="50" transform="matrix(1 0 0 1 3013.82 931)">() > + > + > + > + opacity="0.501961"/> > + fill-rule="evenodd" fill-opacity="0.501961"/> > + width="9.16667" stroke-linejoin="round" stroke-miterlimit="10" fill="#008564" > fill-rule="evenodd"/> > + > + font-size="55" transform="matrix(1 0 0 1 815.508 946)">false > + font-size="55" transform="matrix(1 0 0 1 1029.08 808)">true > + stroke="#006047" stroke-width="9.16667" stroke-linejoin="round" stroke- > miterlimit="10" fill="#008564" fill-rule="evenodd"/> > + > + font-size="55" transform="matrix(1 0 0 1 1405.87 1282)">true > + font-size="55" transform="matrix(1 0 0 1 1590.37 1071)">false > + weight="400" font-size="64" transform="matrix(1 0 0 1 328.764 > 396)">Start > + stroke-width="4.58333" stroke-linejoin="round" stroke-miterlimit="10" > fill="none" fill-rule="evenodd" transform="matrix(1.83697e-16 1 1 -1.83697e-16 > 2113.5 1180.5)"/> > + fill="#008563"/> > + width="4.58333" stroke-linejoin="round" stroke-miterlimit="10" fill="none" fill- > rule="evenodd"/> > + opacity="0.501961"/> > + weight="700" font-size="64" transform="matrix(1 0 0 1 2601 1512)">HTTP > > + weight="700" font-size="64" transform="matrix(1 0 0 1 2753.4 > 1512)">HEAD/GET > + opacity="0.501961"/> > + opacity="0.501961"/> > + weight="700" font-size="50" transform="matrix(1 0 0 1 3362.57 > 1783)">GetData > + weight="700" font-size="50" transform="matrix(1 0 0 1 3536.17 1783)">() > + font-style="italic" font-weight="700" font-size="46" transform="matrix(1 0 0 1 > 3195.85 1686)">EDKII_REDFISH_RESOURCE_ADDENDUM_PROTOCOL > + opacity="0.501961"/> > + weight="700" font-size="50" transform="matrix(1 0 0 1 3322.5 > 1908)">GeOemData > + weight="700" font-size="50" transform="matrix(1 0 0 1 3579.17 1908)">() > + > + > diff --git a/RedfishClientPkg/Readme.md b/RedfishClientPkg/Readme.md > index 0aec0580..69dc33d3 100644 > --- a/RedfishClientPkg/Readme.md > +++ b/RedfishClientPkg/Readme.md > @@ -31,13 +31,13 @@ Redfish property with HII option. > > 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 > +this requires additional 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. > > ## EDK2 Redfish Client Implementation Diagrams > -![UEFI Redfish Client Implementation](https://github.com/changab/edk2- > staging/blob/edk2-redfish- > client/RedfishClientPkg/Documents/Media/RedfishClientDriverStack.svg?raw=tru > e) > +![UEFI Redfish Client Implementation](https://github.com/tianocore/edk2- > redfish- > client/blob/main/RedfishClientPkg/Documents/Media/RedfishClientDriverStack.s > vg?raw=true) > > ## EFI EDK2 Redfish Client Framework > The functionality of each block in the diagrams are described in below sections, > @@ -89,7 +89,7 @@ Redfish service to platform configurations, or vice 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 > +specific Redfish 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) > . > @@ -100,18 +100,30 @@ platform configuration format and storage from EDK2 > Redfish Feature driver. > This protocol provides the interfaces to get and set platform configuration with > the format and configuration storage agnostic to the Redfish feature driver. > The platform can provide its own EDKII Redfish Platform Config driver instance > -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. > +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 driver stack diagram > +which implements EDKII Redfish Platform Config Protocol. The protocol driver > +leverages the HII interface to get or set the HII configuration on platform. By > +following the x-uefi-redfish Configure Language defined in UNI file, protocol > +driver can find corresponding HII question for given Redfish attribute. In this > +way, protocol driver creates the mapping between HII questions and Redfish > +attributes. > + > +![platform config](https://github.com/nicklela/edk2-redfish-client/blob/update- > readme/RedfishClientPkg/Documents/Media/redfish-platform-config-protocol- > stack.svg?raw=true) > > 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; > + UINT64 Revision; > + EDKII_REDFISH_PLATFORM_CONFIG_GET_VALUE GetValue; > + EDKII_REDFISH_PLATFORM_CONFIG_SET_VALUE SetValue; > + EDKII_REDFISH_PLATFORM_CONFIG_GET_DEFAULT_VALUE > GetDefaultValue; > + EDKII_REDFISH_PLATFORM_CONFIG_GET_ATTRIBUTE GetAttribute; > + EDKII_REDFISH_PLATFORM_CONFIG_GET_CONFIG_LANG > GetConfigureLang; > + EDKII_REDFISH_PLATFORM_CONFIG_GET_SUPPORTED_SCHEMA > GetSupportedSchema; > }; > ``` > > @@ -181,11 +193,10 @@ 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 > +in Redfish schema. > - 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. > +- The path is relative to root of [Redfish > schema](https://redfish.dmtf.org/redfish/schema_index) defined by DMTF, not > related to Redfish service root. > > #### Examples, > ```C > @@ -215,7 +226,135 @@ 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. > > +## EDK2 Redfish client feature driver > +![foundation driver stack](https://github.com/nicklela/edk2-redfish- > client/blob/update-readme/RedfishClientPkg/Documents/Media/redfish- > foundation-driver-stack.svg?raw=true) > + > +Above diagram shows the way how Redfish application (Redfish feature driver) > works with Redfish foundation > +drivers and communicate with Redfish service. Redfish feature driver relies on > Redfish Config driver to > +provide the information of desired Rest Ex instance. To achieve this, Redfish > feature driver has to provide > +EDKII Redfish Config Handler Protocol and Redfish Config driver will use this > protocol to deliver Redfish > +service information. > + > +```C > +struct _EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL { > + EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL_INIT Init; > + EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL_STOP Stop; > +}; > +``` > + > +![feature driver call flow](https://github.com/nicklela/edk2-redfish- > client/blob/update-readme/RedfishClientPkg/Documents/Media/redfish-feature- > driver-call-flow.svg?raw=true) > + > +Above diagram shows the details of how Redfish feature core driver invokes > Redfish feature drivers. To be called > +by Redfish feature core driver, Redfish feature driver has to register the managed > URI to Redfish feature core > +driver. Then Redfish feature core driver learns the dependency of each different > feature drivers. > + > +#### Dispatch Redfish feature drivers > +When given event is signaled, Redfish feature core driver starts the operation of > invoking Redfish feature drivers > +by following the order from left to right in Redfish URI list. In the diagram, the > feature driver which manages > +service root will be invoked first. And feature driver which manages computer > system collection will be invoked > +at second position. Once Redfish feature core driver walks through entire Redfish > URI, the operation is stopped. > + > +### Interface between collection feature driver and non-collection feature driver > +Redfish collection resource is a set of Redfish non-collection resource. Redfish > collection feature driver works > +with non-collection feature driver to manage them. For example, boot option > collection feature driver work with > +boot option feature driver to manage boot options in Redfish service. Computer > system collection feature driver > +work with computer system feature driver to manage computer system > resource. > + > +The interface between collection feature driver and non-collection feature driver > is EDKII Redfish resource config > +protocol. > + > +```C > +struct _EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL { > + EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL_PROVISIONING > Provisioning; > + EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL_CONSUME Consume; > + EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL_UPDATE Update; > + EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL_CHECK Check; > + EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL_IDENTIFY Identify; > + EDKII_REDFISH_RESOURCE_CONFIG_PROTOCOL_GET_INFO GetInfo; > +}; > +``` > + > +### Feature driver event > +Two events are defined for feature driver to perform necessary operation at > given time. > +- Ready-to-Provisioning event > + - Feature driver which requires to do operation before Redfish feature driver > starts the synchronization can listen to > + this event. For example, boot option feature driver may want to refresh boot > order variable and get latest boot order > + information before provisioning the boot options to boot options resource. > +- After-Provisioning event > + - Feature driver which wants to do operation after Redfish feature driver finish > the synchronization job can listen to > + this event. > + > +### Reboot required > +When Redfish feature drivers apply user request to platform, a system reboot is > usually required. PCD > `gEfiRedfishClientPkgTokenSpaceGuid.PcdRedfishSystemRebootRequired` is > introduced for this purpose. After Redfish feature > +core driver is done with synchronization job, Redfish feature core driver checks > this PCD and perform system reboot when > +PCD is set to `TRUE`. > + > +### Synchronization design between Redfish service and BIOS > +The purpose of Redfish feature driver is to do the synchronization job between > Redfish service and BIOS. The operation of synchronization can be simply divided > into two types: > + > +#### Provisioning resource > +Below is the flow diagram of provisioning platform configuration to Redfish > service at Bios resource. With the x-uefi-redfish > +configure language described in above section, Redfish feature driver collect all > BIOS attributes from HII database and populated > +them to Redfish service. > +![provisioning](https://github.com/nicklela/edk2-redfish-client/blob/update- > readme/RedfishClientPkg/Documents/Media/redfish-call-flow- > provisioning.svg?raw=true) > + > +#### Consume resource > +Below is the flow diagram of consuming user request from Redfish service to > platform configuration. Redfish feature driver finds > +corresponding HII question and apply user desired value to platform. > +![pending settings](https://github.com/nicklela/edk2-redfish- > client/blob/update-readme/RedfishClientPkg/Documents/Media/redfish-call- > flow-pending-settings.svg?raw=true) > + > +Below diagram shows the call flow of EDKII Resource Config Protocol and how to > use this protocol to handle synchronization > +job. > +![synchronization](https://github.com/nicklela/edk2-redfish-client/blob/update- > readme/RedfishClientPkg/Documents/Media/redfish-synchronization- > design.svg?raw=true) > + > +Several interfaces defined in EDKII Redfish Resource Config Protocol work > together to support Redfish synchronization: > +- Identify() > + - This function is used to check and see if given Redfish resource is the one > feature driver wants to manage. A platform > + library `RedfishReesourceIdentifyLib` is introduced for platform to implement > its own policy to identify Redfish resource. > +- Check() > + - This function is used to check the attribute status on Redfish service. If all > attributes that feature driver managed > + are presented in Redfish service, feature driver must provision them already. > Otherwise, Provisioning() will be called > + to perform resource provisioning job. > +- Provisioning() > + - When this function is called, feature driver will provision all attributes that it > managed to Redfish service. This > + operation usually create new resource at Redfish service and require different > operation that Redfish service specified. > +- Consume() > + - When there is pending settings in Redfish service, this function is called for > feature driver to consume pending settings > + requested by user. > +- Update() > + - When platform configuration is updated, this function is called to update > configuration changes to Redfish service and > + Redfish service can show the latest settings on platform. > + > +The EDKII Redfish Resource Addendum Protocol is introduced to provide > platform addendum data that Redfish service requires. > +This protocol will be called at Provisioning() and Update() functions so platform > can add OEM attribute or any other attribute > +that Redfish service specified. > + > +```C > +struct _EDKII_REDFISH_RESOURCE_ADDENDUM_PROTOCOL { > + UINT64 Revision; ///< Protocol revision > + EDKII_REDFISH_RESOURCE_ADDENDUM_OEM GetOemData; ///< Get > OEM data > + EDKII_REDFISH_RESOURCE_ADDENDUM_DATA GetData; ///< Get > addendum data > +}; > +``` > + > +#### Redfish service implementation > +The idea of Redfish synchronization design is to manage Redfish resource > directly by platform firmware. To do this, Redfish > +synchronization functions have to work with Redfish service implementation in > BMC firmware. This is because the interface > +between platform firmware and BMC firmware is not defined in any > specification. > +Several prerequisites must be satisfied: > +- Platform firmware has permission to manage Redfish resource. BMC has ability > to tell the difference between platform request > + and out-of-band user. This can normally be done by identifying the bootstrap > account in HTTP request. The bootstrap account is > + described in Host Interface specification 1.3.0 section 9. > +- The ability to tell if there is user changes to Redfish resource or not. Redfish > feature drivers can only be executed at POST > + time. So the modification to BIOS managed resource is asynchronous > operation. Thus, we need below supports in Redfish service: > + - ETAG support in HTTP header. > + - Setting resource support (defined in Redfish specification 1.18 section 9.10). > + - Redfish Task support to POST and DELETE operation made by user in Redfish > collection resource and Redfish actions. > + > +### Redfish Task design > +TBD. > + > ## The Contributors > -Chang, Abner \ > -Wang, Nickle \ > +Chang, Abner \ > +Wang, Nickle \ > Chen, Aaron > -- > 2.17.1 > > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#108543): https://edk2.groups.io/g/devel/message/108543 Mute This Topic: https://groups.io/mt/101316997/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-