diff options
-rw-r--r-- | RedfishPkg/Documents/Media/RedfishDriverStack.svg | 965 | ||||
-rw-r--r-- | RedfishPkg/Readme.md | 117 |
2 files changed, 1082 insertions, 0 deletions
diff --git a/RedfishPkg/Documents/Media/RedfishDriverStack.svg b/RedfishPkg/Documents/Media/RedfishDriverStack.svg new file mode 100644 index 0000000000..76269b787b --- /dev/null +++ b/RedfishPkg/Documents/Media/RedfishDriverStack.svg @@ -0,0 +1,965 @@ +<?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 RedfishDriverStack.svg Page-1 -->
+<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"
+ xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="14in" height="8.5in" viewBox="0 0 1008 612"
+ xml:space="preserve" color-interpolation-filters="sRGB" class="st63">
+ <title>EDKII Redfish Driver Stack Diagrams</title>
+ <v:documentProperties v:langID="1033" v:viewMarkup="false">
+ <v:userDefs>
+ <v:ud v:nameU="msvNoAutoConnect" v:val="VT0(1):26"/>
+ </v:userDefs>
+ </v:documentProperties>
+
+ <style type="text/css">
+ <![CDATA[
+ .st1 {fill:#ffffff;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+ .st2 {stroke:#7f7f7f;stroke-linecap:round;stroke-linejoin:round;stroke-width:4.5}
+ .st3 {fill:#a5a5a5;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st4 {fill:#000000;font-family:Calibri;font-size:1.16666em;font-weight:bold}
+ .st5 {font-size:0.714294em}
+ .st6 {fill:#0070c0;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st7 {fill:#ffffff;font-family:Calibri;font-size:1.16666em;font-weight:bold}
+ .st8 {fill:#ffffff;font-family:Calibri;font-size:1.08334em;font-weight:bold}
+ .st9 {font-size:1em}
+ .st10 {font-size:0.769226em}
+ .st11 {fill:#339966;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st12 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st13 {fill:#ffffff;stroke:#0070c0;stroke-linecap:round;stroke-linejoin:round;stroke-width:3}
+ .st14 {fill:#000000;font-family:Calibri;font-size:0.833336em;font-weight:bold}
+ .st15 {marker-end:url(#mrkr4-79);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.9}
+ .st16 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.36964980544747}
+ .st17 {marker-end:url(#mrkr4-79);stroke:#000000;stroke-dasharray:5.7,5.7;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.9}
+ .st18 {marker-end:url(#mrkr2-98);marker-start:url(#mrkr2-96);stroke:#fbd3d0;stroke-linecap:round;stroke-linejoin:round;stroke-width:7.5}
+ .st19 {fill:#fbd3d0;fill-opacity:1;stroke:#fbd3d0;stroke-opacity:1;stroke-width:0.74850299401198}
+ .st20 {marker-end:url(#mrkr2-112);marker-start:url(#mrkr2-110);stroke:#fbd3d0;stroke-linecap:round;stroke-linejoin:round;stroke-width:7.5}
+ .st21 {fill:#fbd3d0;fill-opacity:1;stroke:#fbd3d0;stroke-opacity:1;stroke-width:0.80645161290323}
+ .st22 {marker-end:url(#mrkr4-118);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.9}
+ .st23 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.42986425339367}
+ .st24 {marker-end:url(#mrkr4-124);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.9}
+ .st25 {fill:#ff1a1a;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st26 {fill:#ffffff;font-family:Calibri;font-size:1.00001em;font-weight:bold}
+ .st27 {fill:none;stroke:#000000;stroke-dasharray:4.5,4.5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st28 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+ .st29 {fill:#000000;font-family:Calibri;font-size:1.00001em;font-weight:bold}
+ .st30 {marker-end:url(#mrkr2-151);marker-start:url(#mrkr2-149);stroke:#fbd3d0;stroke-linecap:round;stroke-linejoin:round;stroke-width:8}
+ .st31 {fill:#fbd3d0;fill-opacity:1;stroke:#fbd3d0;stroke-opacity:1;stroke-width:0.76045627376426}
+ .st32 {fill:#000000;font-family:Arial;font-size:1.33333em;font-style:italic;font-weight:bold}
+ .st33 {fill:#ffffff;stroke:#7f7f7f;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+ .st34 {fill:#a5a5a5;font-family:Arial;font-size:0.916672em}
+ .st35 {fill:#f2dcda;stroke:#a5a5a5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st36 {fill:#a5a5a5;font-family:Calibri;font-size:1.00001em;font-weight:bold}
+ .st37 {fill:none;stroke:#a5a5a5;stroke-dasharray:4.5,4.5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st38 {fill:#000000;font-family:Arial;font-size:0.666664em}
+ .st39 {font-family:Microsoft JhengHei;font-size:1em}
+ .st40 {fill:#dbeef3;stroke:#d8d8d8;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st41 {fill:#000000;font-family:Arial;font-size:1.66667em;font-weight:bold}
+ .st42 {fill:none;stroke:#000000;stroke-dasharray:2.25,2.25;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+ .st43 {visibility:visible}
+ .st44 {fill:none;filter:url(#filter_3.3333334922791);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0.4}
+ .st45 {fill:none;stroke:#bfbfbf;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+ .st46 {fill:none;stroke:#a5a5a5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st47 {fill:#ffffff;stroke:#a5a5a5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st48 {marker-end:url(#mrkr4-118);stroke:#000000;stroke-dasharray:5.7,5.7;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.9}
+ .st49 {marker-end:url(#mrkr4-251);stroke:#a5a5a5;stroke-dasharray:5.7,5.7;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.9}
+ .st50 {fill:#a5a5a5;fill-opacity:1;stroke:#a5a5a5;stroke-opacity:1;stroke-width:0.42986425339367}
+ .st51 {marker-end:url(#mrkr4-257);stroke:#bfbfbf;stroke-dasharray:5.7,5.7;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.9}
+ .st52 {fill:#bfbfbf;fill-opacity:1;stroke:#bfbfbf;stroke-opacity:1;stroke-width:0.42986425339367}
+ .st53 {marker-end:url(#mrkr4-265);marker-start:url(#mrkr2-149);stroke:#fbd3d0;stroke-linecap:round;stroke-linejoin:round;stroke-width:8}
+ .st54 {marker-end:url(#mrkr2-295);marker-start:url(#mrkr2-293);stroke:#fbd3d0;stroke-linecap:round;stroke-linejoin:round;stroke-width:4.25}
+ .st55 {fill:#fbd3d0;fill-opacity:1;stroke:#fbd3d0;stroke-opacity:1;stroke-width:0.62776957163959}
+ .st56 {marker-end:url(#mrkr2-313);stroke:#d8d8d8;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.9}
+ .st57 {fill:#d8d8d8;fill-opacity:1;stroke:#d8d8d8;stroke-opacity:1;stroke-width:0.36964980544747}
+ .st58 {marker-end:url(#mrkr4-319);stroke:#d8d8d8;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+ .st59 {fill:#d8d8d8;fill-opacity:1;stroke:#d8d8d8;stroke-opacity:1;stroke-width:0.22935779816514}
+ .st60 {stroke:#000000;stroke-dasharray:0,9;stroke-linecap:round;stroke-linejoin:round;stroke-width:3}
+ .st61 {fill:#000000;font-family:Calibri;font-size:0.833336em}
+ .st62 {fill:#000000;font-family:Arial;font-size:0.916672em;font-weight:bold}
+ .st63 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+ ]]>
+ </style>
+
+ <defs id="Markers">
+ <g id="lend4">
+ <path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"/>
+ </g>
+ <marker id="mrkr4-79" class="st16" v:arrowType="4" v:arrowSize="3" v:setback="5.22105" refX="-5.2210526315789"
+ orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend4" transform="scale(-2.7052631578947,-2.7052631578947) "/>
+ </marker>
+ <g id="lend2">
+ <path d="M 1 1 L 0 0 L 1 -1 L 1 1 " style="stroke:none"/>
+ </g>
+ <marker id="mrkr2-96" class="st19" v:arrowType="2" v:arrowSize="2" v:setback="1.288" refX="1.288" orient="auto"
+ markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend2" transform="scale(1.336) "/>
+ </marker>
+ <marker id="mrkr2-98" class="st19" v:arrowType="2" v:arrowSize="2" v:setback="1.288" refX="-1.288" orient="auto"
+ markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend2" transform="scale(-1.336,-1.336) "/>
+ </marker>
+ <marker id="mrkr2-110" class="st21" v:arrowType="2" v:arrowSize="1" v:setback="1.192" refX="1.192" orient="auto"
+ markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend2" transform="scale(1.24) "/>
+ </marker>
+ <marker id="mrkr2-112" class="st21" v:arrowType="2" v:arrowSize="1" v:setback="1.192" refX="-1.192" orient="auto"
+ markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend2" transform="scale(-1.24,-1.24) "/>
+ </marker>
+ <marker id="mrkr4-118" class="st23" v:arrowType="4" v:arrowSize="2" v:setback="4.46316" refX="-4.4631578947368"
+ orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend4" transform="scale(-2.3263157894737,-2.3263157894737) "/>
+ </marker>
+ <marker id="mrkr4-124" class="st23" v:arrowType="4" v:arrowSize="2" v:setback="4.65263" refX="-4.6526315789474"
+ orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend4" transform="scale(-2.3263157894737,-2.3263157894737) "/>
+ </marker>
+ <marker id="mrkr2-149" class="st31" v:arrowType="2" v:arrowSize="2" v:setback="1.27" refX="1.27" orient="auto"
+ markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend2" transform="scale(1.315) "/>
+ </marker>
+ <marker id="mrkr2-151" class="st31" v:arrowType="2" v:arrowSize="2" v:setback="1.27" refX="-1.27" orient="auto"
+ markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend2" transform="scale(-1.315,-1.315) "/>
+ </marker>
+ <marker id="mrkr4-251" class="st50" v:arrowType="4" v:arrowSize="2" v:setback="4.46316" refX="-4.4631578947368"
+ orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend4" transform="scale(-2.3263157894737,-2.3263157894737) "/>
+ </marker>
+ <marker id="mrkr4-257" class="st52" v:arrowType="4" v:arrowSize="2" v:setback="4.46316" refX="-4.4631578947368"
+ orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend4" transform="scale(-2.3263157894737,-2.3263157894737) "/>
+ </marker>
+ <marker id="mrkr4-265" class="st31" v:arrowType="4" v:arrowSize="2" v:setback="2.585" refX="-2.585" orient="auto"
+ markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend4" transform="scale(-1.315,-1.315) "/>
+ </marker>
+ <marker id="mrkr2-293" class="st55" v:arrowType="2" v:arrowSize="2" v:setback="1.50824" refX="1.5082352941176"
+ orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend2" transform="scale(1.5929411764706) "/>
+ </marker>
+ <marker id="mrkr2-295" class="st55" v:arrowType="2" v:arrowSize="2" v:setback="1.59294" refX="-1.5929411764706"
+ orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend2" transform="scale(-1.5929411764706,-1.5929411764706) "/>
+ </marker>
+ <marker id="mrkr2-313" class="st57" v:arrowType="2" v:arrowSize="3" v:setback="2.51579" refX="-2.5157894736842"
+ orient="auto" markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend2" transform="scale(-2.7052631578947,-2.7052631578947) "/>
+ </marker>
+ <marker id="mrkr4-319" class="st59" v:arrowType="4" v:arrowSize="2" v:setback="8.72" refX="-8.72" orient="auto"
+ markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend4" transform="scale(-4.36,-4.36) "/>
+ </marker>
+ </defs>
+ <defs id="Filters">
+ <filter id="filter_3.3333334922791">
+ <feGaussianBlur stdDeviation="3.3333334922791"/>
+ </filter>
+ </defs>
+ <g v:mID="4" v:index="1" v:groupContext="backgroundPage">
+ <v:userDefs>
+ <v:ud v:nameU="msvVisioCreated" v:prompt="" v:val="VT0(0):26"/>
+ </v:userDefs>
+ <title>VBackground-1</title>
+ <v:pageProperties width="14" height="8.5" v:drawingScale="1" v:pageScale="1" v:drawingUnits="19" v:shadowOffsetX="9"
+ v:shadowOffsetY="-9"/>
+ <g id="shape1-1" v:mID="1" v:groupContext="shape">
+ <title>Solid</title>
+ <v:userDefs>
+ <v:ud v:nameU="Background" v:val="VT0(0):26"/>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ <v:ud v:nameU="msvShapeCategories" v:prompt="" v:val="VT4(DoNotContain)"/>
+ <v:ud v:nameU="msvVisioCreated" v:prompt="" v:val="VT0(0):26"/>
+ </v:userDefs>
+ <rect x="0" y="0" width="1008" height="612" class="st1"/>
+ </g>
+ </g>
+ <g v:mID="0" v:index="2" v:groupContext="foregroundPage">
+ <title>Page-1</title>
+ <v:pageProperties v:drawingScale="1" v:pageScale="1" v:drawingUnits="19" v:shadowOffsetX="9" v:shadowOffsetY="-9"/>
+ <v:layer v:name="Connector" v:index="0"/>
+ <g id="shape1-3" v:mID="1" v:groupContext="shape" transform="translate(45,-342)">
+ <title>Sheet.1</title>
+ <path d="M0 612 L751.5 612" class="st2"/>
+ </g>
+ <g id="shape2-6" v:mID="2" v:groupContext="shape" transform="translate(211.5,-279)">
+ <title>Sheet.2</title>
+ <desc>RedfishLib (libredfish)</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="67.5" cy="594" width="135" height="36"/>
+ <rect x="0" y="576" width="135" height="36" class="st3"/>
+ <text x="37.36" y="591" class="st4" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>RedfishLib<v:lf/><tspan
+ x="44.78" dy="1.5em" class="st5">(</tspan><tspan class="st5">libredfish</tspan><tspan class="st5">)</tspan></text> </g>
+ <g id="shape3-12" v:mID="3" v:groupContext="shape" transform="translate(616.5,-283.5)">
+ <title>Sheet.3</title>
+ <desc>JsonLib (jansson)</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="76.5" cy="594" width="153" height="36"/>
+ <rect x="0" y="576" width="153" height="36" class="st3"/>
+ <text x="55.44" y="591" class="st4" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>JsonLib<v:lf/><tspan
+ x="57.6" dy="1.5em" class="st5">(</tspan><tspan class="st5">jansson</tspan><tspan class="st5">)</tspan></text> </g>
+ <g id="shape4-18" v:mID="4" v:groupContext="shape" transform="translate(211.5,-216)">
+ <title>Sheet.4</title>
+ <desc>EFI Redfish Discover (UEFI Driver Model)</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="67.5" cy="594" width="135" height="36"/>
+ <rect x="0" y="576" width="135" height="36" class="st6"/>
+ <text x="9.2" y="591" class="st7" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>EFI Redfish Discover<v:lf/><tspan
+ x="26.49" dy="1.5em" class="st5">(</tspan><tspan class="st5">UEFI Driver Model</tspan><tspan class="st5">)</tspan></text> </g>
+ <g id="shape5-24" v:mID="5" v:groupContext="shape" transform="translate(211.5,-153)">
+ <title>Sheet.5</title>
+ <desc>EFI REST EX (UEFI Driver Model)</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="67.5" cy="594" width="135" height="36"/>
+ <rect x="0" y="576" width="135" height="36" class="st6"/>
+ <text x="34.44" y="591" class="st7" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>EFI REST EX<v:lf/><tspan
+ x="26.49" dy="1.5em" class="st5">(</tspan><tspan class="st5">UEFI Driver Model</tspan><tspan class="st5">)</tspan></text> </g>
+ <g id="shape6-30" v:mID="6" v:groupContext="shape" transform="translate(409.5,-279)">
+ <title>Sheet.6</title>
+ <desc>EFI REST JSON to C Structure (DXE Driver)</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="76.5" cy="589.5" width="153" height="45"/>
+ <rect x="0" y="567" width="153" height="45" class="st6"/>
+ <text x="26.52" y="579.75" class="st8" v:langID="1033"><v:paragraph v:spLine="-1" v:horizAlign="1"/><v:tabList/>EFI REST JSON to C <v:newlineChar/><tspan
+ x="51.33" dy="1.058em" class="st9">Structure<v:lf/></tspan><tspan x="51.09" dy="1.25em" class="st10">(</tspan><tspan
+ class="st10">DXE Driver</tspan><tspan class="st10">)</tspan></text> </g>
+ <g id="shape7-37" v:mID="7" v:groupContext="shape" transform="translate(409.5,-225)">
+ <title>Sheet.7</title>
+ <desc>EDKII Redfish Credential (DXE Driver)</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="76.5" cy="594" width="153" height="36"/>
+ <rect x="0" y="576" width="153" height="36" class="st6"/>
+ <text x="11.19" y="590.75" class="st8" v:langID="1033"><v:paragraph v:spLine="-1" v:horizAlign="1"/><v:tabList/>EDKII Redfish Credential<v:lf/><tspan
+ x="51.09" dy="1.3em" class="st10">(</tspan><tspan class="st10">DXE Driver</tspan><tspan class="st10">)</tspan></text> </g>
+ <g id="shape8-43" v:mID="8" v:groupContext="shape" transform="translate(409.5,-171)">
+ <title>Sheet.8</title>
+ <desc>EDKII Platform Content Coding Library</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="76.5" cy="594" width="153" height="36"/>
+ <rect x="0" y="576" width="153" height="36" class="st11"/>
+ <text x="13.91" y="590.75" class="st8" v:langID="1033"><v:paragraph v:spLine="-1" v:horizAlign="1"/><v:tabList/>EDKII Platform Content <tspan
+ x="37.7" dy="1em" class="st9">Coding Library</tspan></text> </g>
+ <g id="shape9-47" v:mID="9" v:groupContext="shape" transform="translate(409.5,-117)">
+ <title>Sheet.9</title>
+ <desc>EDKII Network Stacks (UEFI Driver Model)</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="76.5" cy="594" width="153" height="36"/>
+ <rect x="0" y="576" width="153" height="36" class="st6"/>
+ <text x="18.73" y="590.75" class="st8" v:langID="1033"><v:paragraph v:spLine="-1" v:horizAlign="1"/><v:tabList/>EDKII Network Stacks<v:lf/><tspan
+ x="35.49" dy="1.3em" class="st10">(</tspan><tspan class="st10">UEFI Driver Model</tspan><tspan class="st10">)</tspan></text> </g>
+ <g id="shape10-53" v:mID="10" v:groupContext="shape" transform="translate(409.5,-54)">
+ <title>Sheet.10</title>
+ <desc>EDKII Redfish Host Interface (DXE Driver)</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="76.5" cy="589.5" width="153" height="45"/>
+ <rect x="0" y="567" width="153" height="45" class="st6"/>
+ <text x="26.68" y="579.75" class="st8" v:langID="1033"><v:paragraph v:spLine="-1" v:horizAlign="1"/><v:tabList/>EDKII Redfish Host <tspan
+ x="52.19" dy="1em" class="st9">Interface<v:lf/></tspan><tspan x="51.09" dy="1.3em" class="st10">(</tspan><tspan
+ class="st10">DXE Driver</tspan><tspan class="st10">)</tspan></text> </g>
+ <g id="shape11-60" v:mID="11" v:groupContext="shape" transform="translate(211.5,-94.5)">
+ <title>Sheet.11</title>
+ <desc>SMBIOS Type 42</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="67.5" cy="598.5" width="135" height="27"/>
+ <rect x="0" y="585" width="135" height="27" class="st12"/>
+ <text x="19.92" y="602.7" class="st4" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>SMBIOS Type 42</text> </g>
+ <g id="shape12-63" v:mID="12" v:groupContext="shape" transform="translate(616.5,-72)">
+ <title>Sheet.12</title>
+ <desc>RedfishPlatformConfig.efi</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="76.5" cy="598.5" width="153" height="27"/>
+ <rect x="0" y="585" width="153" height="27" class="st13"/>
+ <text x="22.93" y="601.5" class="st14" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>RedfishPlatformConfig.efi</text> </g>
+ <g id="shape13-66" v:mID="13" v:groupContext="shape" transform="translate(616.5,-225)">
+ <title>Sheet.13</title>
+ <desc>Platform Redfish Credential Library</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="76.5" cy="594" width="153" height="36"/>
+ <rect x="0" y="576" width="153" height="36" class="st11"/>
+ <text x="31.21" y="590.75" class="st8" v:langID="1033"><v:paragraph v:spLine="-1" v:horizAlign="1"/><v:tabList/>Platform Redfish <tspan
+ x="28.36" dy="1em" class="st9">Credential Library</tspan></text> </g>
+ <g id="shape14-70" v:mID="14" v:groupContext="shape" transform="translate(618.25,-162)">
+ <title>Sheet.14</title>
+ <desc>Platform Redfish Host Interface Library</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="76.5" cy="594" width="153" height="36"/>
+ <rect x="0" y="576" width="153" height="36" class="st11"/>
+ <text x="17.3" y="590.75" class="st8" v:langID="1033"><v:paragraph v:spLine="-1" v:horizAlign="1"/><v:tabList/>Platform Redfish Host <tspan
+ x="31.97" dy="1em" class="st9">Interface Library</tspan></text> </g>
+ <g id="shape20-74" v:mID="20" v:groupContext="shape" transform="translate(108.912,1066.03) rotate(-150.255)">
+ <title>Sheet.20</title>
+ <path d="M0 605.85 C5.2 601.6 11.37 602.58 17.02 603.9 C34.96 608.09 47.6 615.63 63.3 610.33 L63.63 610.17"
+ class="st15"/>
+ </g>
+ <g id="shape26-80" v:mID="26" v:groupContext="shape" transform="translate(798.806,378) rotate(90)">
+ <title>Sheet.26</title>
+ <path d="M0 587.31 C27.48 618.4 91.67 620.3 119.28 595.08 L119.51 594.81" class="st15"/>
+ </g>
+ <g id="shape27-85" v:mID="27" v:groupContext="shape" transform="translate(616.5,980.172) rotate(180)">
+ <title>Sheet.27</title>
+ <path d="M0 611.17 C8.24 606.04 18.13 605.86 27 607.8 C32.73 609.05 38.03 611.18 43.74 611.86 L44.1 611.83"
+ class="st17"/>
+ </g>
+ <g id="shape34-90" v:mID="34" v:groupContext="shape" transform="translate(958.5,315) rotate(90)">
+ <title>Sheet.34</title>
+ <path d="M4.28 603.34 L4.44 603.02 C6.15 598.55 7.91 593.52 10.26 589.58 C10.52 589.15 10.79 588.72 11.06 588.3 C24.98
+ 566.86 47.13 561.26 67.61 562.5 C93.1 564.05 116.01 576.2 123.87 602.21 L123.94 602.56" class="st18"/>
+ </g>
+ <g id="shape35-99" v:mID="35" v:groupContext="shape" transform="translate(868.595,10.4444) rotate(59.7436)">
+ <title>Sheet.35</title>
+ <path d="M0 604.43 C17.43 596.28 35.82 595.77 52.17 599.33 C75.61 604.44 94.87 617.9 116.02 609.38 L116.34 609.21"
+ class="st15"/>
+ </g>
+ <g id="shape42-104" v:mID="42" v:groupContext="shape" transform="translate(511.956,-120.094) rotate(15.9454)">
+ <title>Sheet.42</title>
+ <path d="M8.92 601.65 L9.28 601.63 C11.78 602.35 14.16 603.61 16.51 604.78 C30.56 611.79 43.18 615.49 57.81 607.46 L58.11
+ 607.26" class="st20"/>
+ </g>
+ <g id="shape43-113" v:mID="43" v:groupContext="shape" transform="translate(662.85,-296.1) rotate(9.46232)">
+ <title>Sheet.43</title>
+ <path d="M0 610.4 C16.69 599.74 30.24 612.49 46.06 612.08 L46.42 612.01" class="st22"/>
+ </g>
+ <g id="shape44-119" v:mID="44" v:groupContext="shape" transform="translate(891,396) rotate(90)">
+ <title>Sheet.44</title>
+ <path d="M0 612 L18.16 612" class="st24"/>
+ </g>
+ <g id="group45-125" transform="translate(846,-319.5)" v:mID="45" v:groupContext="group">
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <title>Can</title>
+ <desc>Redfish Service</desc>
+ <g id="shape46-126" v:mID="46" v:groupContext="shape">
+ <title>Sheet.46</title>
+ <v:userDefs>
+ <v:ud v:nameU="ControlHalfHeight" v:prompt="" v:val="VT0(0.125):1"/>
+ <v:ud v:nameU="FillForegnd" v:prompt="" v:val="VT0(1):26"/>
+ <v:ud v:nameU="ControlHalfHeight" v:prompt="" v:val="VT0(0.15625):1"/>
+ <v:ud v:nameU="FillForegnd" v:prompt="" v:val="VT5(#ff1a1a)"/>
+ </v:userDefs>
+ <path d="M0 600.75 A29.25 11.25 -180 1 0 58.5 600.75 L58.5 560.25 L0 560.25 L0 600.75 Z" class="st25"/>
+ </g>
+ <g id="shape45-128" v:mID="45" v:groupContext="groupContent">
+ <v:textBlock v:margins="rect(4,4,4,4)" v:verticalAlign="2"/>
+ <v:textRect cx="29.25" cy="580.5" width="58.5" height="63"/>
+ <ellipse cx="29.25" cy="560.25" rx="29.25" ry="11.25" class="st25"/>
+ <text x="10.65" y="590" class="st26" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Redfish <tspan
+ x="11.42" dy="1.2em" class="st9">Service</tspan></text> </g>
+ </g>
+ <g id="shape47-132" v:mID="47" v:groupContext="shape" transform="translate(837,-315)">
+ <title>Rounded Rectangle</title>
+ <v:userDefs>
+ <v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/>
+ <v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/>
+ <v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+ <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.10625):1"/>
+ <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.10625):1"/>
+ <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.10625):1"/>
+ <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.10625):1"/>
+ </v:userDefs>
+ <path d="M7.65 612 L68.85 612 A7.64987 7.64987 -180 0 0 76.5 604.35 L76.5 511.65 A7.64987 7.64987 -180 0 0 68.85 504
+ L7.65 504 A7.64987 7.64987 -180 0 0 -0 511.65 L0 604.35 A7.64987 7.64987 -180 0 0 7.65 612 Z" class="st27"/>
+ </g>
+ <g id="shape48-134" v:mID="48" v:groupContext="shape" transform="translate(837,-315)">
+ <title>Rounded Rectangle.48</title>
+ <v:userDefs>
+ <v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/>
+ <v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/>
+ <v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+ <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.175):1"/>
+ <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.175):1"/>
+ <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.175):1"/>
+ <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.175):1"/>
+ </v:userDefs>
+ <path d="M12.6 612 L113.4 612 A12.5998 12.5998 -180 0 0 126 599.4 L126 552.6 A12.5998 12.5998 -180 0 0 113.4 540 L12.6
+ 540 A12.5998 12.5998 -180 0 0 -0 552.6 L0 599.4 A12.5998 12.5998 -180 0 0 12.6 612 Z" class="st27"/>
+ </g>
+ <g id="shape49-136" v:mID="49" v:groupContext="shape" transform="translate(846,-391.5)">
+ <title>Sheet.49</title>
+ <desc>On Network</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="29.25" cy="598.5" width="58.5" height="27"/>
+ <rect x="0" y="585" width="58.5" height="27" class="st28"/>
+ <text x="21.97" y="594.9" class="st29" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>On <tspan x="7.49"
+ dy="1.2em" class="st9">Network</tspan></text> </g>
+ <g id="shape51-140" v:mID="51" v:groupContext="shape" transform="translate(913.5,-333)">
+ <title>Sheet.51</title>
+ <desc>BMC</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="22.5" cy="598.5" width="45" height="27"/>
+ <rect x="0" y="585" width="45" height="27" class="st28"/>
+ <text x="10.72" y="602.1" class="st29" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>BMC</text> </g>
+ <g id="shape53-143" v:mID="53" v:groupContext="shape" transform="translate(300.223,21.2932) rotate(-29.9221)">
+ <title>Sheet.53</title>
+ <path d="M8.6 531.2 L8.91 531.39 C45.12 553.68 83.03 571.57 122.32 588.41 C144.61 597.96 167.35 607.17 190.07 610.52
+ C222.93 615.38 255.74 608 284.87 592.4 C310.1 578.89 332.55 559.23 354.13 533.89 L354.36 533.61"
+ class="st30"/>
+ </g>
+ <g id="shape54-152" v:mID="54" v:groupContext="shape" transform="translate(1142.22,727.062) rotate(119.385)">
+ <title>Sheet.54</title>
+ <path d="M0 601.33 C1.8 603.71 4.18 606.09 6.63 607.87 C38.72 631.29 82.4 552.5 108.8 592.25 L108.97 592.57"
+ class="st17"/>
+ </g>
+ <g id="shape55-157" v:mID="55" v:groupContext="shape" transform="translate(189,531) rotate(-90)">
+ <title>Sheet.55</title>
+ <path d="M0 580.5 C3.72 583.62 7.79 589.31 12.01 593.96 C44.21 629.47 84.97 604.53 101.41 588.39 L101.64 588.12"
+ class="st15"/>
+ </g>
+ <g id="shape56-162" v:mID="56" v:groupContext="shape" transform="translate(45,-305)">
+ <title>Sheet.56</title>
+ <desc>EDKII Redfish Foundation</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="76" cy="602" width="152" height="20"/>
+ <rect x="0" y="592" width="152" height="20" class="st28"/>
+ <text x="4" y="597.2" class="st32" v:langID="1033"><v:paragraph/><v:tabList/>EDKII Redfish <tspan x="4" dy="1.2em"
+ class="st9">Foundation</tspan></text> </g>
+ <g id="shape57-166" v:mID="57" v:groupContext="shape" transform="translate(45,-351)">
+ <title>Sheet.57</title>
+ <desc>EDKII Redfish Client</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="76" cy="602" width="152" height="20"/>
+ <rect x="0" y="592" width="152" height="20" class="st28"/>
+ <text x="4" y="597.2" class="st32" v:langID="1033"><v:paragraph/><v:tabList/>EDKII Redfish <tspan x="4" dy="1.2em"
+ class="st9">Client</tspan></text> </g>
+ <g id="shape58-170" v:mID="58" v:groupContext="shape" transform="translate(54,-198)">
+ <title>Rounded Rectangle.58</title>
+ <desc>SSDP over UDP</desc>
+ <v:userDefs>
+ <v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/>
+ <v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/>
+ <v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+ <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.0625):1"/>
+ <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.0625):1"/>
+ <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.0625):1"/>
+ <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.0625):1"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="54" cy="598.5" width="108" height="27"/>
+ <path d="M4.5 612 L103.5 612 A4.49993 4.49993 -180 0 0 108 607.5 L108 589.5 A4.49993 4.49993 -180 0 0 103.5 585 L4.5
+ 585 A4.49993 4.49993 -180 0 0 0 589.5 L0 607.5 A4.49993 4.49993 -180 0 0 4.5 612 Z" class="st33"/>
+ <text x="13.65" y="601.81" class="st34" v:langID="1033"><v:paragraph v:horizAlign="1" v:bulletSize="0.166667"/><v:tabList/>SSDP over UDP</text> </g>
+ <g id="group60-173" transform="translate(76.5,-117)" v:mID="60" v:groupContext="group">
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <title>Can.60</title>
+ <desc>Redfish Service</desc>
+ <g id="shape61-174" v:mID="61" v:groupContext="shape">
+ <title>Sheet.61</title>
+ <v:userDefs>
+ <v:ud v:nameU="ControlHalfHeight" v:prompt="" v:val="VT0(0.125):1"/>
+ <v:ud v:nameU="FillForegnd" v:prompt="" v:val="VT0(1):26"/>
+ <v:ud v:nameU="ControlHalfHeight" v:prompt="" v:val="VT0(0.15625):1"/>
+ <v:ud v:nameU="FillForegnd" v:prompt="" v:val="VT5(#f2dcda)"/>
+ </v:userDefs>
+ <path d="M0 600.75 A29.25 11.25 -180 1 0 58.5 600.75 L58.5 560.25 L0 560.25 L0 600.75 Z" class="st35"/>
+ </g>
+ <g id="shape60-176" v:mID="60" v:groupContext="groupContent">
+ <v:textBlock v:margins="rect(4,4,4,4)" v:verticalAlign="2"/>
+ <v:textRect cx="29.25" cy="580.5" width="58.5" height="63"/>
+ <ellipse cx="29.25" cy="560.25" rx="29.25" ry="11.25" class="st35"/>
+ <text x="10.65" y="590" class="st36" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Redfish <tspan
+ x="11.42" dy="1.2em" class="st9">Service</tspan></text> </g>
+ </g>
+ <g id="shape62-180" v:mID="62" v:groupContext="shape" transform="translate(67.5,-90)">
+ <title>Rounded Rectangle.62</title>
+ <v:userDefs>
+ <v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/>
+ <v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/>
+ <v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+ <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.10625):1"/>
+ <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.10625):1"/>
+ <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.10625):1"/>
+ <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.10625):1"/>
+ </v:userDefs>
+ <path d="M7.65 612 L68.85 612 A7.64987 7.64987 -180 0 0 76.5 604.35 L76.5 525.15 A7.64987 7.64987 -180 0 0 68.85 517.5
+ L7.65 517.5 A7.64987 7.64987 -180 0 0 -0 525.15 L0 604.35 A7.64987 7.64987 -180 0 0 7.65 612 Z"
+ class="st37"/>
+ </g>
+ <g id="shape63-182" v:mID="63" v:groupContext="shape" transform="translate(81,-90)">
+ <title>Sheet.63</title>
+ <desc>BMC</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="22.5" cy="598.5" width="45" height="27"/>
+ <rect x="0" y="585" width="45" height="27" class="st28"/>
+ <text x="10.72" y="602.1" class="st36" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>BMC</text> </g>
+ <g id="shape64-185" v:mID="64" v:groupContext="shape" transform="translate(614.75,-135)">
+ <title>Sheet.64</title>
+ <desc>Build up Redfish Host Interface</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="76" cy="602" width="152" height="20"/>
+ <rect x="0" y="592" width="152" height="20" class="st28"/>
+ <text x="4" y="597.2" class="st38" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>Build up Redfish Host Interface<v:newlineChar/></text> </g>
+ <g id="shape66-188" v:mID="66" v:groupContext="shape" transform="translate(806,-85.5)">
+ <title>Sheet.66</title>
+ <desc>EFI Shell Application, which builds up Redfish Host interface...</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="76" cy="589.5" width="152" height="45"/>
+ <rect x="0" y="567" width="152" height="45" class="st28"/>
+ <text x="4" y="577.1" class="st38" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>EFI Shell Application, which<v:newlineChar/><tspan
+ x="4" dy="1.2em" class="st9">builds up Redfish Host interface<v:newlineChar/><v:paragraph v:spLine="-1"
+ v:bulletSize="0.166667"/></tspan><tspan x="4" dy="1.05em" class="st9">for EDK</tspan>2 emulator platform<v:newlineChar/><tspan
+ x="4" dy="1.375em" class="st9">(</tspan>EmulatorPkg<tspan class="st39" v:langID="1028">)</tspan></text> </g>
+ <g id="shape69-195" v:mID="69" v:groupContext="shape" transform="translate(612,-202.5)">
+ <title>Sheet.69</title>
+ <desc>Get Authentication</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="76" cy="602" width="152" height="20"/>
+ <rect x="0" y="592" width="152" height="20" class="st28"/>
+ <text x="4" y="597.2" class="st38" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>Get Authentication<v:newlineChar/></text> </g>
+ <g id="shape71-198" v:mID="71" v:groupContext="shape" transform="translate(396,-486)">
+ <title>Sheet.71</title>
+ <desc>RedfishBiosDxe</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="130.5" cy="594" width="261" height="36"/>
+ <rect x="0" y="576" width="261" height="36" class="st40"/>
+ <text x="88.66" y="597.25" class="st8" v:langID="1033"><v:paragraph v:spLine="-1" v:horizAlign="1"/><v:tabList/>RedfishBiosDxe</text> </g>
+ <g id="shape72-201" v:mID="72" v:groupContext="shape" transform="translate(396,-423)">
+ <title>Sheet.72</title>
+ <desc>RedfishBootInfoDxe</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="130.5" cy="594" width="261" height="36"/>
+ <rect x="0" y="576" width="261" height="36" class="st40"/>
+ <text x="76.33" y="597.25" class="st8" v:langID="1033"><v:paragraph v:spLine="-1" v:horizAlign="1"/><v:tabList/>RedfishBootInfoDxe</text> </g>
+ <g id="shape73-204" v:mID="73" v:groupContext="shape" transform="translate(396,-441)">
+ <title>Sheet.73</title>
+ <desc>EDKII Redfish Feature DXE Drivers</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="130.5" cy="580.5" width="261" height="63"/>
+ <rect x="0" y="549" width="261" height="63" class="st28"/>
+ <text x="25.48" y="574.5" class="st41" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>EDKII Redfish Feature <tspan
+ x="72.69" dy="1.2em" class="st9">DXE Drivers</tspan></text> </g>
+ <g id="shape75-208" v:mID="75" v:groupContext="shape" transform="translate(369,-405)">
+ <title>Rectangle</title>
+ <v:userDefs>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <path d="M0 612 L315 612 L315 477 L0 477 L0 612 Z" class="st42"/>
+ </g>
+ <g id="shape76-210" v:mID="76" v:groupContext="shape" transform="translate(324,-387)">
+ <title>Rounded Rectangle.76</title>
+ <v:userDefs>
+ <v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/>
+ <v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/>
+ <v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+ <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.23913043478261):1"/>
+ <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.23913043478261):1"/>
+ <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.23913043478261):1"/>
+ <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.23913043478261):1"/>
+ </v:userDefs>
+ <g id="shadow76-211" v:groupContext="shadow" v:shadowOffsetX="7.2E-008" v:shadowOffsetY="0" v:shadowType="1"
+ v:shadowScale="1.02" transform="matrix(1.02,0,0,1.02,-3.96,-10.53)" class="st43">
+ <path d="M17.22 612 L378.78 612 A17.2171 17.2171 -180 0 0 396 594.78 L396 458.22 A17.2171 17.2171 -180 0 0 378.78
+ 441 L17.22 441 A17.2171 17.2171 -180 0 0 0 458.22 L0 594.78 A17.2171 17.2171 -180 0 0 17.22 612 Z"
+ class="st44"/>
+ </g>
+ <path d="M17.22 612 L378.78 612 A17.2171 17.2171 -180 0 0 396 594.78 L396 458.22 A17.2171 17.2171 -180 0 0 378.78 441
+ L17.22 441 A17.2171 17.2171 -180 0 0 0 458.22 L0 594.78 A17.2171 17.2171 -180 0 0 17.22 612 Z"
+ class="st45"/>
+ </g>
+ <g id="shape77-215" v:mID="77" v:groupContext="shape" transform="translate(166.5,-396)">
+ <title>Sheet.77</title>
+ <desc>EDKII RedfishConfigDriver (UEF Driver Model)</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="67.5" cy="589.5" width="135" height="45"/>
+ <rect x="0" y="567" width="135" height="45" class="st6"/>
+ <text x="52.11" y="580" class="st7" v:langID="1033"><v:paragraph v:spLine="-1" v:horizAlign="1"/><v:tabList/>EDKII <tspan
+ x="9.37" dy="1em" class="st9">RedfishConfigDriver<v:lf/></tspan><tspan x="27.82" dy="1.25em" class="st5">(</tspan><tspan
+ class="st5">UEF Driver Model</tspan><tspan class="st5">)</tspan></text> </g>
+ <g id="shape79-222" v:mID="79" v:groupContext="shape" transform="translate(807.666,295.676) rotate(97.9072)">
+ <title>Sheet.79</title>
+ <path d="M0 579.17 C20.49 576.51 31.18 592.91 46.37 602.26 C77.86 621.65 128.73 610.76 156.32 586.48 L156.58 586.22"
+ class="st15"/>
+ </g>
+ <g id="shape80-227" v:mID="80" v:groupContext="shape" transform="translate(198,-522)">
+ <title>Rounded Rectangle.80</title>
+ <v:userDefs>
+ <v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/>
+ <v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/>
+ <v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+ <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.065217391304348):1"/>
+ <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.065217391304348):1"/>
+ <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.065217391304348):1"/>
+ <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.065217391304348):1"/>
+ </v:userDefs>
+ <path d="M4.7 612 L103.3 612 A4.69558 4.69558 -180 0 0 108 607.3 L108 589.7 A4.69558 4.69558 -180 0 0 103.3 585 L4.7
+ 585 A4.69558 4.69558 -180 0 0 0 589.7 L0 607.3 A4.69558 4.69558 -180 0 0 4.7 612 Z" class="st46"/>
+ </g>
+ <g id="shape81-229" v:mID="81" v:groupContext="shape" transform="translate(189,-513)">
+ <title>Rounded Rectangle.81</title>
+ <v:userDefs>
+ <v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/>
+ <v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/>
+ <v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+ <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.065217391304348):1"/>
+ <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.065217391304348):1"/>
+ <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.065217391304348):1"/>
+ <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.065217391304348):1"/>
+ </v:userDefs>
+ <path d="M4.7 612 L103.3 612 A4.69558 4.69558 -180 0 0 108 607.3 L108 589.7 A4.69558 4.69558 -180 0 0 103.3 585 L4.7
+ 585 A4.69558 4.69558 -180 0 0 0 589.7 L0 607.3 A4.69558 4.69558 -180 0 0 4.7 612 Z" class="st47"/>
+ </g>
+ <g id="shape90-231" v:mID="90" v:groupContext="shape" transform="translate(-119.157,659.986) rotate(-144.162)">
+ <title>Sheet.90</title>
+ <path d="M0 603.18 C4.15 607.13 9.94 610.11 15.61 611.34 C29.37 614.32 42.44 606.94 53.45 596.49 C61.26 589.09 68.03
+ 580.16 77.42 577.8 C88.41 575.03 102.97 581.29 102.88 593.34 L102.78 593.68" class="st15"/>
+ </g>
+ <g id="shape93-236" v:mID="93" v:groupContext="shape" transform="translate(221.899,727.905) rotate(-165.964)">
+ <title>Sheet.93</title>
+ <path d="M0 606.51 C15.17 612.77 29.52 612.61 44.18 611.2 C63.42 609.36 83.21 605.38 102.5 605.92 L102.86 605.95"
+ class="st48"/>
+ </g>
+ <g id="shape99-241" v:mID="99" v:groupContext="shape" transform="translate(139.354,700.857) rotate(-157.751)">
+ <title>Sheet.99</title>
+ <path d="M0 606.51 C14.58 612.77 28.36 612.61 42.45 611.2 C60.82 609.37 79.72 605.43 98.14 605.91 L98.5 605.94"
+ class="st48"/>
+ </g>
+ <g id="shape100-246" v:mID="100" v:groupContext="shape" transform="translate(5.09146,624.711) rotate(-143.13)">
+ <title>Sheet.100</title>
+ <path d="M0 606.51 C12.27 612.77 23.86 612.61 35.72 611.2 C50.71 609.43 66.12 605.66 81.18 605.88 L81.54 605.91"
+ class="st49"/>
+ </g>
+ <g id="shape108-252" v:mID="108" v:groupContext="shape" v:layerMember="0"
+ transform="translate(-63.7494,572.249) rotate(-135)">
+ <title>Wavy connector 2</title>
+ <v:userDefs>
+ <v:ud v:nameU="Scale" v:val="VT0(1):26"/>
+ <v:ud v:nameU="AntiScale" v:val="VT0(1):26"/>
+ <v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+ </v:userDefs>
+ <path d="M0 612 L11.04 616.08 L21.88 618.76 L32.52 620.05 L51.73 619.09 L60.91 617.82 L70.5 616.14 L80.5 614.04 L80.85
+ 613.96" class="st51"/>
+ </g>
+ <g id="shape128-258" v:mID="128" v:groupContext="shape" transform="translate(74.6891,-268.274) rotate(-20.6744)">
+ <title>Sheet.128</title>
+ <path d="M7.05 596.86 L7.3 596.6 C41.41 565.41 84.23 581.81 125.37 593.78 C147.72 600.28 169.57 605.47 191.7 609.19 C205.94
+ 611.58 220.3 613.37 234.93 610.75 L235.27 610.64" class="st53"/>
+ </g>
+ <g id="shape129-266" v:mID="129" v:groupContext="shape" transform="translate(913.572,626.328) rotate(137.291)">
+ <title>Sheet.129</title>
+ <path d="M0 570.67 C12.35 560.49 25.47 555.25 38.41 555.6 C60.3 556.19 81.63 572.81 103.52 591.21 C116.04 601.73 128.75
+ 612.82 140.98 612 C156.61 610.95 171.47 590.42 165.19 577.2 L164.94 576.93" class="st22"/>
+ </g>
+ <g id="shape130-271" v:mID="130" v:groupContext="shape" transform="translate(961.972,521.508) rotate(125.838)">
+ <title>Sheet.130</title>
+ <path d="M0 537.17 C5.61 533.31 11.98 533.39 17.86 534.13 C66.05 540.21 81.59 590.84 108.93 606.62 C129.47 618.49 156.66
+ 610.69 176.83 592.27 C191.47 578.9 202.41 559.94 201.92 545.76 L201.83 545.41" class="st22"/>
+ </g>
+ <g id="shape141-276" v:mID="141" v:groupContext="shape" transform="translate(524.018,816.193) rotate(-153.905)">
+ <title>Sheet.141</title>
+ <path d="M0 558.08 C-1.1 562.68 -4.17 567.34 -5.65 572.12 C-8.55 581.49 -5.37 591.37 -0.33 598.33 C22.05 629.26 81.08
+ 602.84 124.62 577.22 C154.8 559.45 177.54 542.06 207.45 539.15 C220.74 537.86 235.46 539.43 242.28 549.86
+ L242.41 550.2" class="st22"/>
+ </g>
+ <g id="shape142-281" v:mID="142" v:groupContext="shape" transform="translate(24.75,-556.75)">
+ <title>Sheet.142</title>
+ <rect x="0" y="604.5" width="22.5" height="7.5" class="st6"/>
+ </g>
+ <g id="shape143-283" v:mID="143" v:groupContext="shape" transform="translate(24.75,-539.5)">
+ <title>Sheet.143</title>
+ <rect x="0" y="604.5" width="22.5" height="7.5" class="st3"/>
+ </g>
+ <g id="shape144-285" v:mID="144" v:groupContext="shape" transform="translate(24.75,-521.5)">
+ <title>Sheet.144</title>
+ <rect x="0" y="604.5" width="22.5" height="7.5" class="st11"/>
+ </g>
+ <g id="shape145-287" v:mID="145" v:groupContext="shape" transform="translate(22.5,-506.5)">
+ <title>Sheet.145</title>
+ <path d="M6.41 612 L6.77 612 L20.23 612" class="st54"/>
+ </g>
+ <g id="shape147-296" v:mID="147" v:groupContext="shape" transform="translate(52.25,-551.5)">
+ <title>Sheet.147</title>
+ <desc>EDKII Open Source</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="76" cy="602" width="152" height="20"/>
+ <rect x="0" y="592" width="152" height="20" class="st28"/>
+ <text x="4" y="605.6" class="st38" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>EDKII Open Source</text> </g>
+ <g id="shape148-299" v:mID="148" v:groupContext="shape" transform="translate(51.75,-533.5)">
+ <title>Sheet.148</title>
+ <desc>Other Open Source</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="76" cy="602" width="152" height="20"/>
+ <rect x="0" y="592" width="152" height="20" class="st28"/>
+ <text x="4" y="605.6" class="st38" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>Other Open Source</text> </g>
+ <g id="shape149-302" v:mID="149" v:groupContext="shape" transform="translate(51.75,-515.5)">
+ <title>Sheet.149</title>
+ <desc>OEM EDKII Library</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="76" cy="602" width="152" height="20"/>
+ <rect x="0" y="592" width="152" height="20" class="st28"/>
+ <text x="4" y="605.6" class="st38" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>OEM EDKII Library</text> </g>
+ <g id="shape150-305" v:mID="150" v:groupContext="shape" transform="translate(51.75,-496.5)">
+ <title>Sheet.150</title>
+ <desc>Redfish Payload Flow</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="76" cy="602" width="152" height="20"/>
+ <rect x="0" y="592" width="152" height="20" class="st28"/>
+ <text x="4" y="605.6" class="st38" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>Redfish Payload Flow</text> </g>
+ <g id="shape151-308" v:mID="151" v:groupContext="shape" transform="translate(461.424,927.834) rotate(155.556)">
+ <title>Sheet.151</title>
+ <path d="M0 603.97 C7.28 610.16 18.09 613.87 26.44 611.05 C35.57 607.96 41.76 597.08 50.21 600.96 L50.5 601.17"
+ class="st56"/>
+ </g>
+ <g id="shape153-314" v:mID="153" v:groupContext="shape" transform="translate(711.673,514.612) rotate(99.4623)">
+ <title>Sheet.153</title>
+ <path d="M0 612 L7.15 612" class="st58"/>
+ </g>
+ <g id="shape154-320" v:mID="154" v:groupContext="shape" transform="translate(-161.042,-388.162) rotate(-39.2894)">
+ <title>Sheet.154</title>
+ <path d="M0 612 L21.32 612" class="st60"/>
+ </g>
+ <g id="shape155-323" v:mID="155" v:groupContext="shape" transform="translate(162,-499.5)">
+ <title>Rounded Rectangle.82</title>
+ <v:userDefs>
+ <v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/>
+ <v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/>
+ <v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+ <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.065217391304348):1"/>
+ <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.065217391304348):1"/>
+ <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.065217391304348):1"/>
+ <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.065217391304348):1"/>
+ </v:userDefs>
+ <path d="M4.7 612 L103.3 612 A4.69558 4.69558 -180 0 0 108 607.3 L108 589.7 A4.69558 4.69558 -180 0 0 103.3 585 L4.7
+ 585 A4.69558 4.69558 -180 0 0 0 589.7 L0 607.3 A4.69558 4.69558 -180 0 0 4.7 612 Z" class="st12"/>
+ </g>
+ <g id="shape156-325" v:mID="156" v:groupContext="shape" transform="translate(153,-486)">
+ <title>Rounded Rectangle.83</title>
+ <desc>EDKII Redfish Config Handler Protocol</desc>
+ <v:userDefs>
+ <v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/>
+ <v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/>
+ <v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/>
+ <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+ <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+ <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.065217391304348):1"/>
+ <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.065217391304348):1"/>
+ <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.065217391304348):1"/>
+ <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.065217391304348):1"/>
+ </v:userDefs>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="54" cy="598.5" width="108" height="27"/>
+ <path d="M4.7 612 L103.3 612 A4.69558 4.69558 -180 0 0 108 607.3 L108 589.7 A4.69558 4.69558 -180 0 0 103.3 585 L4.7
+ 585 A4.69558 4.69558 -180 0 0 0 589.7 L0 607.3 A4.69558 4.69558 -180 0 0 4.7 612 Z" class="st12"/>
+ <text x="13.06" y="595.5" class="st61" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>EDKII Redfish Config <tspan
+ x="19.55" dy="1.2em" class="st9">Handler Protocol</tspan></text> </g>
+ <g id="shape157-329" v:mID="157" v:groupContext="shape" transform="translate(24.75,-315)">
+ <title>Sheet.157</title>
+ <desc>[1]</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="11.25" cy="602" width="22.5" height="20"/>
+ <rect x="0" y="592" width="22.5" height="20" class="st28"/>
+ <text x="4" y="605.39" class="st62" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>[1]</text> </g>
+ <g id="shape158-332" v:mID="158" v:groupContext="shape" transform="translate(24.75,-360)">
+ <title>Sheet.158</title>
+ <desc>[2]</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="11.25" cy="602" width="22.5" height="20"/>
+ <rect x="0" y="592" width="22.5" height="20" class="st28"/>
+ <text x="4" y="605.39" class="st62" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>[2]</text> </g>
+ <g id="shape159-335" v:mID="159" v:groupContext="shape" transform="translate(207,-250)">
+ <title>Sheet.159</title>
+ <desc>[3]</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="11.25" cy="602" width="22.5" height="20"/>
+ <rect x="0" y="592" width="22.5" height="20" class="st28"/>
+ <text x="4" y="605.39" class="st62" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>[3]</text> </g>
+ <g id="shape160-338" v:mID="160" v:groupContext="shape" transform="translate(207,-188)">
+ <title>Sheet.160</title>
+ <desc>[4]</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="11.25" cy="602" width="22.5" height="20"/>
+ <rect x="0" y="592" width="22.5" height="20" class="st28"/>
+ <text x="4" y="605.39" class="st62" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>[4]</text> </g>
+ <g id="shape161-341" v:mID="161" v:groupContext="shape" transform="translate(562.5,-250)">
+ <title>Sheet.161</title>
+ <desc>[5]</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="11.25" cy="602" width="22.5" height="20"/>
+ <rect x="0" y="592" width="22.5" height="20" class="st28"/>
+ <text x="4" y="605.39" class="st62" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>[5]</text> </g>
+ <g id="shape162-344" v:mID="162" v:groupContext="shape" transform="translate(562.5,-54)">
+ <title>Sheet.162</title>
+ <desc>[6]</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="11.25" cy="602" width="22.5" height="20"/>
+ <rect x="0" y="592" width="22.5" height="20" class="st28"/>
+ <text x="4" y="605.39" class="st62" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>[6]</text> </g>
+ <g id="shape163-347" v:mID="163" v:groupContext="shape" transform="translate(207,-75.5)">
+ <title>Sheet.163</title>
+ <desc>[7]</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="11.25" cy="602" width="22.5" height="20"/>
+ <rect x="0" y="592" width="22.5" height="20" class="st28"/>
+ <text x="4" y="605.39" class="st62" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>[7]</text> </g>
+ <g id="shape164-350" v:mID="164" v:groupContext="shape" transform="translate(562.5,-142)">
+ <title>Sheet.164</title>
+ <desc>[8]</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="11.25" cy="602" width="22.5" height="20"/>
+ <rect x="0" y="592" width="22.5" height="20" class="st28"/>
+ <text x="4" y="605.39" class="st62" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>[8]</text> </g>
+ <g id="shape165-353" v:mID="165" v:groupContext="shape" transform="translate(562.5,-306)">
+ <title>Sheet.165</title>
+ <desc>[9]</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="11.25" cy="602" width="22.5" height="20"/>
+ <rect x="0" y="592" width="22.5" height="20" class="st28"/>
+ <text x="4" y="605.39" class="st62" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>[9]</text> </g>
+ <g id="shape166-356" v:mID="166" v:groupContext="shape" transform="translate(612,-259)">
+ <title>Sheet.166</title>
+ <desc>[10]</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="15.75" cy="602" width="31.5" height="20"/>
+ <rect x="0" y="592" width="31.5" height="20" class="st28"/>
+ <text x="4" y="605.39" class="st62" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>[10]</text> </g>
+ <g id="shape167-359" v:mID="167" v:groupContext="shape" transform="translate(612,-196)">
+ <title>Sheet.167</title>
+ <desc>[11]</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="15.75" cy="602" width="31.5" height="20"/>
+ <rect x="0" y="592" width="31.5" height="20" class="st28"/>
+ <text x="4" y="605.39" class="st62" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>[11]</text> </g>
+ <g id="shape168-362" v:mID="168" v:groupContext="shape" transform="translate(560.25,-189)">
+ <title>Sheet.168</title>
+ <desc>[12]</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="15.75" cy="602" width="31.5" height="20"/>
+ <rect x="0" y="592" width="31.5" height="20" class="st28"/>
+ <text x="4" y="605.39" class="st62" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>[12]</text> </g>
+ <g id="shape169-365" v:mID="169" v:groupContext="shape" transform="translate(207,-313)">
+ <title>Sheet.169</title>
+ <desc>[13]</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="15.75" cy="602" width="31.5" height="20"/>
+ <rect x="0" y="592" width="31.5" height="20" class="st28"/>
+ <text x="4" y="605.39" class="st62" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>[13]</text> </g>
+ <g id="shape170-368" v:mID="170" v:groupContext="shape" transform="translate(612,-318.5)">
+ <title>Sheet.170</title>
+ <desc>[14]</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="15.75" cy="602" width="31.5" height="20"/>
+ <rect x="0" y="592" width="31.5" height="20" class="st28"/>
+ <text x="4" y="605.39" class="st62" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>[14]</text> </g>
+ <g id="shape171-371" v:mID="171" v:groupContext="shape" transform="translate(139.5,-422)">
+ <title>Sheet.171</title>
+ <desc>[15]</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="15.75" cy="602" width="31.5" height="20"/>
+ <rect x="0" y="592" width="31.5" height="20" class="st28"/>
+ <text x="4" y="605.39" class="st62" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>[15]</text> </g>
+ <g id="shape172-374" v:mID="172" v:groupContext="shape" transform="translate(135,-511)">
+ <title>Sheet.172</title>
+ <desc>[16]</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="15.75" cy="602" width="31.5" height="20"/>
+ <rect x="0" y="592" width="31.5" height="20" class="st28"/>
+ <text x="4" y="605.39" class="st62" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>[16]</text> </g>
+ <g id="shape173-377" v:mID="173" v:groupContext="shape" transform="translate(326.25,-557)">
+ <title>Sheet.173</title>
+ <desc>[17]</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="15.75" cy="602" width="31.5" height="20"/>
+ <rect x="0" y="592" width="31.5" height="20" class="st28"/>
+ <text x="4" y="605.39" class="st62" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>[17]</text> </g>
+ <g id="shape174-380" v:mID="174" v:groupContext="shape" transform="translate(54,-225)">
+ <title>Sheet.174</title>
+ <desc>[18]</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="15.75" cy="602" width="31.5" height="20"/>
+ <rect x="0" y="592" width="31.5" height="20" class="st28"/>
+ <text x="4" y="605.39" class="st62" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>[18]</text> </g>
+ <g id="shape175-383" v:mID="175" v:groupContext="shape" transform="translate(895.5,-295)">
+ <title>Sheet.175</title>
+ <desc>[19]</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="15.75" cy="602" width="31.5" height="20"/>
+ <rect x="0" y="592" width="31.5" height="20" class="st28"/>
+ <text x="4" y="605.39" class="st62" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>[19]</text> </g>
+ <g id="shape176-386" v:mID="176" v:groupContext="shape" transform="translate(612,-99)">
+ <title>Sheet.176</title>
+ <desc>[20]</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)"/>
+ <v:textRect cx="15.75" cy="602" width="31.5" height="20"/>
+ <rect x="0" y="592" width="31.5" height="20" class="st28"/>
+ <text x="4" y="605.39" class="st62" v:langID="1033"><v:paragraph v:bulletSize="0.166667"/><v:tabList/>[20]</text> </g>
+ </g>
+</svg>
diff --git a/RedfishPkg/Readme.md b/RedfishPkg/Readme.md new file mode 100644 index 0000000000..af5b3e25d8 --- /dev/null +++ b/RedfishPkg/Readme.md @@ -0,0 +1,117 @@ +# UEFI Redfish EDK2 Implementation
+
+## Introduction
+UEFI Redfish EDK2 solution is an efficient and secure solution for the end-users to remote configure (in Out-of-band) UEFI platform configurations by leveraging the Redfish RESTful API. It's simple for end-users to access the configurations of UEFI firmware which have the equivalent properties defined in Redfish schema.
+
+Below are the block diagrams of UEFI Redfish EDK2 Implementation. ***[EDK2 Redfish Foundation[1]](#[0])*** in the lower part of the figure refers to the EDK2 Redfish Foundation, which provides the fundamental EDK2 drivers to communicate with Redfish service ***([[19]](#[0]) in the above figure)***. The Redfish service could be implemented in BMC to manage the system, or on the network for managing multiple systems.
+
+***[EDK2 Redfish Client[2]](#[0])*** in the upper part of the figure refers to the EDK2 Redfish client, which is the EDK2 Redfish application used to configure platform configurations by consuming the Redfish properties. The EDK2 Redfish client can also provision the UEFI platform-owned Redfish properties, consume and update Redfish properties as well. The ***[EDK2 Redfish Feature DXE Drivers [17]](#[0])*** is the next project after EDK2 Redfish Foundation. Each EDK2 Redfish Feature DXE Driver is designed to communicate with the particular Redfish data model defined in the Redfish schema *(e.g. Edk2RedfishBiosDxe driver manipulates the properties defined in Redfish BIOS data model)*.
+
+## <a name="[0]">EDK2 Redfish Implementation Diagrams</a>
+![UEFI Redfish Implementation](https://github.com/tianocore/edk2/blob/master/RedfishPkg/Documents/Media/RedfishDriverStack.svg?raw=true)
+
+## EFI EDK2 Redfish Driver Stack
+Below are the EDK2 drivers implemented on EDK2,
+
+### EDK2 Redfish Host Interface DXE Driver ***[[6]](#[0])***
+
+The abstract EDK2 DXE driver to create SMBIOS type 42 record through EFI SMBIOS protocol according to the device descriptor and protocol type data (defined in SMBIOS type 42h ***[[7]](#[0])***) provided by platform level Redfish host interface library. On EDK2 open source implementation (**EmulatorPkg**), SMBIOS type 42 data is retrieved from EFI variables created by RedfishPlatformConfig.efi ***[[20]](#[0])*** under EFI shell. OEM may provide its own PlatformHostInterfaceLib ***[[11]](#[0])*** instance for the platform-specific implementation.
+
+### EDK2 Refish Credential DXE Driver ***[[5]](#[0])***
+
+The abstract DXE driver which incorporates with RedfishPlatformCredentialLib ***[[10]](#[0])*** to acquire the credential of Redfish service. On edk2 EmulatorPkg implementation, the credential is hardcoded using the fixed Account/Password in order to connect to Redfish service established by [Redfish Profile Simulator](https://github.com/DMTF/Redfish-Profile-Simulator). OEM may provide its own RedfishPlatformCredentialLib instance for the platform-specific implementation.
+
+### EFI REST EX UEFI Driver for Redfish service ***[[4]](#[0])***
+
+This is the network-based driver instance of EFI_REST_EX protocol [(UEFI spec 2.8, section 29.7.2)](http://uefi.org/specifications) for communicating with Redfish service using the HTTP protocol. OEM may have its own EFI REST EX UEFI Driver instance on which the underlying transport to Redfish service could be proprietary.
+
+### EFI Redfish Discover UEFI Driver ***[[3]](#[0])***
+
+EFI Redfish Discover Protocol implementation (UEFI spec 2.8, section 31.1). Only support Redfish service discovery through Redfish Host Interface. The Redfish service discovery using SSDP over UDP ***[[18]](#[0])*** is not implemented at the moment.
+
+### EFI REST JSON Structure DXE Driver ***[[9]](#[0])***
+
+EFI REST JSON Structure DXE implementation (UEFI spec 2.8, section 29.7.3). This could be used by EDK2 Redfish Feature DXE Drivers ***[[17]](#[0])***. The EDK2 Redfish feature drivers manipulate platform-owned Redfish properties in C structure format and convert them into the payload in JSON format through this protocol. This driver leverages the effort of [Redfish Schema to C Generator](https://github.com/DMTF/Redfish-Schema-C-Struct-Generator) to have the "C Structure" <-> "JSON" conversion.
+
+### EDK2 Redfish Config Handler UEFI Driver ***[[15]](#[0])***
+
+This is the centralized manager of EDK2 Redfish feature drivers, it initiates EDK2 Redfish feature drivers by invoking init() function of EDK2 Redfish Config Handler Protocol ***[[16]](#[0])*** installed by each EDK2 Redfish feature driver. EDK2 Redfish Config Handler driver is an UEFI driver which has the dependency with EFI REST EX protocol and utilizes EFI Redfish Discover protocol to discover Redfish service that manages this system.
+
+### EDK2 Content Coding Library ***[[12]](#[0])***
+The library is incorporated with RedfishLib ***[[13]](#[0])*** to encode and decode Redfish JSON payload. This is the platform library to support HTTP Content-Encoding/Accept-Encoding headers. EumlatorPkg use the NULL instance of this library because [Redfish Profile Simulator](https://github.com/DMTF/Redfish-Profile-Simulator) supports neither HTTP Content-Encoding header on the payload returned to Redfish client nor HTTP Accept-Encoding header.
+
+## Other Open Source Projects
+ The following libraries are the wrappers of other open source projects used in RedfishPkg
+
+ * **RedfishPkg\PrivateLibrary\RedfishLib** ***[[13]](#[0])***
+ This is the wrapper of open source project ***[libredfish](https://github.com/DMTF/libredfish)***,
+ which is the library to initialize the connection to Redfish service with the proper credential and execute Create/Read/Update/Delete (CRUD) HTTP methods on Redfish properties.
+
+ * **RedfishPkg\Library\JsonLib** ***[[14]](#[0])***
+ This is the wrapper of open source project ***[Jansson](https://digip.org/jansson)***, which is the library that provides APIs to manipulate JSON payload.
+
+## Platform Components for EDK2 EmulatorPkg:
+ * **RedfishPlatformCredentialLib**
+ the EDK2 Emulator platform implementation of acquiring credential to build up the communication between UEFI firmware and Redfish service. ***[[10]](#[0])***
+
+ * **RedfishPlatformHostInterfaceLib**
+ EDK2 Emulator platform implementation which provides the information of building up SMBIOS type 42h record. ***[[11]](#[0])***
+
+## Miscellaneous:
+
+ * **EFI Shell Application**
+ RedfishPlatformConfig.exe is an EFI Shell application used to set up the Redfish service information for the EDK2 Emulator platform. The information such as IP address, subnet, and port.
+ ```C
+ For example, run shell command "RedfishPlatformConfig.efi -s 192.168.10.101 255.255.255.0 192.168.10.123 255.255.255.0", which means
+ the source IP address is 192.168.10.101, and the Redfish Server IP address is 192.168.10.123.
+ ```
+
+ * **Redfish Profile Simulator**
+ Refer to [Redfish Profile Simulator](https://github.com/DMTF/Redfish-Profile-Simulator) to set up the Redfish service.
+ We are also in the progress to contribute bug fixes and enhancements to the mainstream Redfish Profile Simulator in order to incorporate with EDK2 Redfish solution.
+
+## Connect to Redfish Service on EDK2 Emulator Platform
+ 1. Install the WinpCap and copy [SnpNt32Io.dll](https://github.com/tianocore/edk2-NetNt32Io) to the building directory of the Emulator platform. This is the emulated network interface for EDK2 Emulator Platform.
+ ```C
+ e.g. %WORKSPACE%/Build/EmulatorX64/DEBUG_VS2015x86/X64
+ ```
+
+ 2. Enable below macros in EmulatorPkg.dsc
+ ```C
+ NETWORK_HTTP_ENABLE = TRUE
+ SECURE_BOOT_ENABLE = TRUE
+ REDFISH_ENABLE = TRUE
+ ```
+
+ 3. Allow HTTP connection
+ Enable below macro to allow HTTP connection on EDK2 network stack for connecting to [Redfish Profile Simulator](https://github.com/DMTF/Redfish-Profile-Simulator) becasue Redfish Profile Simulator doesn't support HTTPS.
+ ```C
+ NETWORK_ALLOW_HTTP_CONNECTIONS = TRUE
+ ```
+
+ 4. Assign the correct MAC Address
+ Assign the correct MAC address of the network interface card emulated by WinpCap.
+ - Rebuild EmulatorPkg and boot to EFI shell once SnpNt32Io.dll is copied to the building directory and the macros mentioned in #2 are all set to TURE.
+ - Execute the EFI shell command "ifconfig -l" under EFI shell and look for MAC address information, then assign the MAC address to below PCD.
+ ```c
+ gEfiRedfishPkgTokenSpaceGuid.PcdRedfishRestExServiceDevicePath.DevicePath|{DEVICE_PATH("MAC(000000000000,0x1)")}
+ ```
+
+ 5. Configure the Redfish service on the EDK2 Emulator platform
+
+ Execute RedfishPlatformConfig.efi under EFI shell to configure the Redfish service information. The EFI variables are created for storing Redfish service information and is consumed by RedfishPlatformHostInterfaceLib under EmulatorPkg.
+
+## Related Materials
+1. [DSP0270](https://www.dmtf.org/sites/default/files/standards/documents/DSP0270_1.3.0.pdf) - Redfish Host Interface Specification, 1.3.0
+2. [DSP0266](https://www.dmtf.org/sites/default/files/standards/documents/DSP0266_1.12.0.pdf) - Redfish Specification, 1.12.0
+3. Redfish Schemas - https://redfish.dmtf.org/schemas/v1/
+4. UEFI Specification - http://uefi.org/specifications
+
+## The Contributors
+Thanks to the below predecessors who contributed to the UEFI EDK2 Redfish Prove of Concept code.\
+Fu, Siyuan <siyuan.fu@intel.com>\
+Ye, Ting <ting.ye@intel.com>\
+Wang, Fan <fan.wang@intel.com>\
+Wu, Jiaxin <jiaxin.wu@intel.com>\
+Yao, Jiewen <jiewen.yao@intel.com>\
+Shia, Cinnamon <cinnamon.shia@hpe.com>
|