libmetal_struct.svg 43 KB

1
  1. <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="2321px" height="1132px" viewBox="-0.5 -0.5 2321 1132" content="&lt;mxfile&gt;&lt;diagram id=&quot;qepeh9YM478qn1hoiCdz&quot; name=&quot;第 1 页&quot;&gt;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&lt;/diagram&gt;&lt;/mxfile&gt;"><defs/><g><rect x="0" y="60" width="760" height="1060" rx="114" ry="114" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 758px; height: 1px; padding-top: 67px; margin-left: 1px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: normal; overflow-wrap: normal;"><div style="color: rgb(212, 212, 212); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 100%;"><div style="line-height: 100%;"><span style="color: #4ec9b0;"><font style="font-size: 30px;">metal_device</font></span></div></div></div></div></div></foreignObject><text x="380" y="79" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">metal_device</text></switch></g><rect x="40" y="160" width="680" height="70" rx="10.5" ry="10.5" fill="rgb(255, 255, 255)" stroke="#3333ff" transform="rotate(180,380,195)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 678px; height: 1px; padding-top: 195px; margin-left: 41px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: normal; overflow-wrap: normal;"><div style="color: rgb(212, 212, 212); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 16px; font-size: 21px;"><span style="color: #569cd6;">const</span> <span style="color: #569cd6;">char</span>             *<span style="color: #9cdcfe;">name</span>;<span style="color: #6a9955;">       /**&lt; Device name */</span></div></div></div></div></foreignObject><text x="380" y="199" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">const char             *name;       /**&lt; Device name */</text></switch></g><rect x="870" y="0" width="650" height="410" rx="61.5" ry="61.5" fill="rgb(255, 255, 255)" stroke="#3333ff" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 648px; height: 1px; padding-top: 7px; margin-left: 871px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: normal; overflow-wrap: normal;"><div style="color: rgb(212, 212, 212); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 16px; font-size: 21px;"><span style="color: #569cd6;">struct</span> <span style="color: rgb(78, 201, 176); font-size: 21px;">metal_bus</span></div></div></div></div></foreignObject><text x="1195" y="19" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">struct metal_bus</text></switch></g><rect x="920" y="81" width="540" height="50" rx="7.5" ry="7.5" fill="rgb(255, 255, 255)" stroke="#ff3399" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 538px; height: 1px; padding-top: 106px; margin-left: 921px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 21px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: normal; overflow-wrap: normal;"><div style="color: rgb(212, 212, 212); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 16px; font-size: 21px;"><span style="color: rgb(86, 156, 214); font-size: 21px;">const</span> <span style="color: rgb(86, 156, 214); font-size: 21px;">char</span>     *<span style="color: rgb(156, 220, 254); font-size: 21px;">name</span>;</div></div></div></div></foreignObject><text x="1190" y="112" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="21px" text-anchor="middle">const char     *name;</text></switch></g><rect x="1660" y="20" width="660" height="760" rx="99" ry="99" fill="rgb(255, 255, 255)" stroke="#ff3399" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 658px; height: 1px; padding-top: 400px; margin-left: 1661px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 21px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: normal; overflow-wrap: normal;"><div style="color: rgb(212, 212, 212); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 126%; font-size: 21px;"><div style="font-size: 21px; line-height: 126%;"><span style="color: rgb(106, 153, 85); font-size: 21px;">/** Bus operations. */</span></div><div style="font-size: 21px; line-height: 126%;"><span style="color: rgb(106, 153, 85); font-size: 21px;"><br /></span></div><div style="font-size: 21px; line-height: 126%;"><span style="color: rgb(106, 153, 85); font-size: 21px;"><br /></span></div><div style="font-size: 21px; line-height: 126%;"><span style="color: rgb(86, 156, 214); font-size: 21px;">struct</span> <span style="color: rgb(78, 201, 176); font-size: 21px;">metal_bus_ops</span> {</div><div style="font-size: 21px; line-height: 126%;"><span style="color: rgb(86, 156, 214); font-size: 21px;">void</span>        (*<span style="color: rgb(156, 220, 254); font-size: 21px;">bus_close</span>)(<span style="color: rgb(86, 156, 214); font-size: 21px;">struct</span> <span style="color: rgb(78, 201, 176); font-size: 21px;">metal_bus</span> *bus);</div><div style="font-size: 21px; line-height: 126%;"><span style="color: rgb(86, 156, 214); font-size: 21px;">int</span>     (*<span style="color: rgb(156, 220, 254); font-size: 21px;">dev_open</span>)(<span style="color: rgb(86, 156, 214); font-size: 21px;">struct</span> <span style="color: rgb(78, 201, 176); font-size: 21px;">metal_bus</span> *bus,</div><div style="font-size: 21px; line-height: 126%;">                    <span style="color: rgb(86, 156, 214); font-size: 21px;">const</span> <span style="color: rgb(86, 156, 214); font-size: 21px;">char</span> *dev_name,</div><div style="font-size: 21px; line-height: 126%;">                    <span style="color: rgb(86, 156, 214); font-size: 21px;">struct</span> <span style="color: rgb(78, 201, 176); font-size: 21px;">metal_device</span> **device);</div><div style="font-size: 21px; line-height: 126%;"><span style="color: rgb(86, 156, 214); font-size: 21px;">void</span>        (*<span style="color: rgb(156, 220, 254); font-size: 21px;">dev_close</span>)(<span style="color: rgb(86, 156, 214); font-size: 21px;">struct</span> <span style="color: rgb(78, 201, 176); font-size: 21px;">metal_bus</span> *bus,</div><div style="font-size: 21px; line-height: 126%;">                     <span style="color: rgb(86, 156, 214); font-size: 21px;">struct</span> <span style="color: rgb(78, 201, 176); font-size: 21px;">metal_device</span> *device);</div><div style="font-size: 21px; line-height: 126%;"><span style="color: rgb(86, 156, 214); font-size: 21px;">void</span>        (*<span style="color: rgb(156, 220, 254); font-size: 21px;">dev_irq_ack</span>)(<span style="color: rgb(86, 156, 214); font-size: 21px;">struct</span> <span style="color: rgb(78, 201, 176); font-size: 21px;">metal_bus</span> *bus,</div><div style="font-size: 21px; line-height: 126%;">                       <span style="color: rgb(86, 156, 214); font-size: 21px;">struct</span> <span style="color: rgb(78, 201, 176); font-size: 21px;">metal_device</span> *device,</div><div style="font-size: 21px; line-height: 126%;">                       <span style="color: rgb(86, 156, 214); font-size: 21px;">int</span> irq);</div><div style="font-size: 21px; line-height: 126%;"><span style="color: rgb(86, 156, 214); font-size: 21px;">int</span>     (*<span style="color: rgb(156, 220, 254); font-size: 21px;">dev_dma_map</span>)(<span style="color: rgb(86, 156, 214); font-size: 21px;">struct</span> <span style="color: rgb(78, 201, 176); font-size: 21px;">metal_bus</span> *bus,</div><div style="font-size: 21px; line-height: 126%;">                       <span style="color: rgb(86, 156, 214); font-size: 21px;">struct</span> <span style="color: rgb(78, 201, 176); font-size: 21px;">metal_device</span> *device,</div><div style="font-size: 21px; line-height: 126%;">                       <span style="color: rgb(78, 201, 176); font-size: 21px;">uint32_t</span> dir,</div><div style="font-size: 21px; line-height: 126%;">                       <span style="color: rgb(86, 156, 214); font-size: 21px;">struct</span> <span style="color: rgb(78, 201, 176); font-size: 21px;">metal_sg</span> *sg_in,</div><div style="font-size: 21px; line-height: 126%;">                       <span style="color: rgb(86, 156, 214); font-size: 21px;">int</span> nents_in,</div><div style="font-size: 21px; line-height: 126%;">                       <span style="color: rgb(86, 156, 214); font-size: 21px;">struct</span> <span style="color: rgb(78, 201, 176); font-size: 21px;">metal_sg</span> *sg_out);</div><div style="font-size: 21px; line-height: 126%;"> <span style="color: rgb(86, 156, 214); font-size: 21px;">void</span>        (*<span style="color: rgb(156, 220, 254); font-size: 21px;">dev_dma_unmap</span>)(<span style="color: rgb(86, 156, 214); font-size: 21px;">struct</span> <span style="color: rgb(78, 201, 176); font-size: 21px;">metal_bus</span> *bus,</div><div style="font-size: 21px; line-height: 126%;">                     <span style="color: rgb(86, 156, 214); font-size: 21px;">struct</span> <span style="color: rgb(78, 201, 176); font-size: 21px;">metal_device</span> *device,</div><div style="font-size: 21px; line-height: 126%;">                     <span style="color: rgb(78, 201, 176); font-size: 21px;">uint32_t</span> dir,</div><div style="font-size: 21px; line-height: 126%;">                     <span style="color: rgb(86, 156, 214); font-size: 21px;">struct</span> <span style="color: rgb(78, 201, 176); font-size: 21px;">metal_sg</span> *sg,</div><div style="font-size: 21px; line-height: 126%;">                     <span style="color: rgb(86, 156, 214); font-size: 21px;">int</span> nents);</div><div style="font-size: 21px; line-height: 126%;">};</div></div></div></div></div></foreignObject><text x="1990" y="406" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="21px" text-anchor="middle">/** Bus operations. */...</text></switch></g><rect x="920" y="251" width="540" height="50" rx="7.5" ry="7.5" fill="rgb(255, 255, 255)" stroke="#ff3399" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 538px; height: 1px; padding-top: 276px; margin-left: 921px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 21px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><div style="color: rgb(212, 212, 212); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 16px; font-size: 21px;"><span style="color: rgb(86, 156, 214); font-size: 21px;">struct</span> <span style="color: rgb(78, 201, 176); font-size: 21px;">metal_list</span>  <span style="color: rgb(156, 220, 254); font-size: 21px;">devices</span>;</div></div></div></div></foreignObject><text x="1190" y="282" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="21px" text-anchor="middle">struct metal_list  devices;</text></switch></g><rect x="920" y="341" width="540" height="50" rx="7.5" ry="7.5" fill="rgb(255, 255, 255)" stroke="#ff3399" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 538px; height: 1px; padding-top: 366px; margin-left: 921px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 21px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><div style="color: rgb(212, 212, 212); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 16px; font-size: 21px;"><div style="line-height: 16px; font-size: 21px;"><span style="color: rgb(86, 156, 214); font-size: 21px;">struct</span> <span style="color: rgb(78, 201, 176); font-size: 21px;">metal_list</span>  <span style="color: rgb(156, 220, 254); font-size: 21px;">node</span>;</div></div></div></div></div></foreignObject><text x="1190" y="372" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="21px" text-anchor="middle">struct metal_list  node;</text></switch></g><rect x="40" y="429" width="690" height="111" rx="16.65" ry="16.65" fill="rgb(255, 255, 255)" stroke="#3333ff" transform="rotate(180,385,484.5)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 688px; height: 1px; padding-top: 485px; margin-left: 41px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: normal; overflow-wrap: normal;"><div style="color: rgb(212, 212, 212); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 16px; font-size: 21px;"><div style="line-height: 126%;"><span style="color: #569cd6;">unsigned</span> <span style="color: #569cd6;">int</span>           <span style="color: #9cdcfe;">num_regions</span>;<span style="color: #6a9955;"> /**&lt; Number of I/O regions in</span><span style="color: rgb(106, 153, 85);">device */</span></div></div></div></div></div></foreignObject><text x="385" y="488" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">unsigned int           num_regions; /**&lt; Number of I/O regions indevice */</text></switch></g><rect x="40" y="590" width="690" height="110" rx="16.5" ry="16.5" fill="rgb(255, 255, 255)" stroke="#3333ff" transform="rotate(180,385,645)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 688px; height: 1px; padding-top: 645px; margin-left: 41px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><p style="line-height: 146%;"></p><div style="color: rgb(212, 212, 212); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 16px; font-size: 21px;"><div style="line-height: 126%;"><span style="color: #569cd6;">struct</span> <span style="color: #4ec9b0;">metal_io_region</span> <span style="color: #9cdcfe;">regions</span>[<span style="color: #569cd6;">METAL_MAX_DEVICE_REGIONS</span>];<span style="color: #6a9955;"> /**&lt; Array of</span><span style="color: rgb(106, 153, 85); background-color: initial;"> I/O regions in device*/</span></div></div><p></p></div></div></div></foreignObject><text x="385" y="649" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">struct metal_io_region regions[METAL_MAX_DEVICE_REGIONS]; /**&lt; Array of I/O regions in device*/...</text></switch></g><rect x="40" y="950" width="690" height="60" rx="9" ry="9" fill="rgb(255, 255, 255)" stroke="#3333ff" transform="rotate(180,385,980)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 688px; height: 1px; padding-top: 980px; margin-left: 41px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: normal; overflow-wrap: normal;"><div style="color: rgb(212, 212, 212); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 126%; font-size: 21px;"><span style="color: #569cd6;">void</span>                   *<span style="color: #9cdcfe;">irq_info</span>;<span style="color: #6a9955;">  /**&lt; IRQ ID */</span></div></div></div></div></foreignObject><text x="385" y="984" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">void                   *irq_info;  /**&lt; IRQ ID */</text></switch></g><rect x="40" y="830" width="690" height="60" rx="9" ry="9" fill="rgb(255, 255, 255)" stroke="#3333ff" transform="rotate(180,385,860)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 688px; height: 1px; padding-top: 860px; margin-left: 41px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: normal; overflow-wrap: normal;"><div style="color: rgb(212, 212, 212); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 126%; font-size: 21px;"><span style="color: #569cd6;">int</span>                    <span style="color: #9cdcfe;">irq_num</span>;<span style="color: #6a9955;">    /**&lt; Number of IRQs per device */</span></div></div></div></div></foreignObject><text x="385" y="864" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">int                    irq_num;    /**&lt; Number of IRQs per device */</text></switch></g><rect x="40" y="728" width="690" height="60" rx="9" ry="9" fill="rgb(255, 255, 255)" stroke="#3333ff" transform="rotate(180,385,758)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 688px; height: 1px; padding-top: 758px; margin-left: 41px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: normal; overflow-wrap: normal;"><div style="color: rgb(212, 212, 212); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 126%; font-size: 21px;"><span style="color: #569cd6;">struct</span> <span style="color: #4ec9b0;">metal_list</span>      <span style="color: #9cdcfe;">node</span>;<span style="color: #6a9955;">       /**&lt; Node on bus' list of devices */</span></div></div></div></div></foreignObject><text x="385" y="762" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">struct metal_list      node;       /**&lt; Node on bus' list of devices */</text></switch></g><rect x="883" y="441" width="650" height="690" rx="97.5" ry="97.5" fill="rgb(255, 255, 255)" stroke="#3333ff" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 648px; height: 1px; padding-top: 448px; margin-left: 884px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><div style="color: rgb(212, 212, 212); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 16px; font-size: 21px;"><span style="color: #569cd6;">struct</span> <span style="color: rgb(78, 201, 176); font-size: 21px;">metal_io_region</span></div></div></div></div></foreignObject><text x="1208" y="460" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">struct metal_io_region</text></switch></g><path d="M 721.79 338.78 L 719.17 329.13 L 851.7 293.12 L 848.51 281.37 L 869.52 293.46 L 857.52 314.51 L 854.33 302.77 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-linejoin="round" stroke-miterlimit="10" pointer-events="all"/><rect x="40" y="280" width="680" height="110" rx="16.5" ry="16.5" fill="rgb(255, 255, 255)" stroke="#3333ff" transform="rotate(180,380,335)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 678px; height: 1px; padding-top: 335px; margin-left: 41px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><div style="color: rgb(212, 212, 212); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 16px; font-size: 21px;"><div style="line-height: 126%;"><span style="color: #569cd6;">struct</span> <span style="color: #4ec9b0;">metal_bus</span>       *<span style="color: #9cdcfe;">bus</span>;<span style="color: rgb(106, 153, 85);">        /**&lt; Bus that contains device */</span></div></div></div></div></div></foreignObject><text x="380" y="339" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">struct metal_bus       *bus;        /**&lt; Bus that contains device */</text></switch></g><path d="M 731.5 649.8 L 729.48 640 L 864.75 612.15 L 862.3 600.24 L 882.51 613.6 L 869.22 633.86 L 866.77 621.95 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-linejoin="round" stroke-miterlimit="10" pointer-events="all"/><rect x="920" y="170" width="540" height="50" rx="7.5" ry="7.5" fill="rgb(255, 255, 255)" stroke="#ff3399" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 538px; height: 1px; padding-top: 195px; margin-left: 921px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 21px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: normal; overflow-wrap: normal;"><div style="color: rgb(212, 212, 212); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 16px; font-size: 21px;"><div style="line-height: 16px; font-size: 21px;"><span style="color: rgb(86, 156, 214); font-size: 21px;">struct</span> <span style="color: rgb(78, 201, 176); font-size: 21px;">metal_bus_ops</span>   <span style="color: rgb(156, 220, 254); font-size: 21px;">ops</span>;</div></div></div></div></div></foreignObject><text x="1190" y="201" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="21px" text-anchor="middle">struct metal_bus_ops   ops;</text></switch></g><path d="M 1458.12 199.66 L 1462.76 190.8 L 1646.73 287.09 L 1652.37 276.31 L 1659.56 299.45 L 1636.45 306.73 L 1642.09 295.95 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-linejoin="round" stroke-miterlimit="10" pointer-events="all"/><rect x="925" y="481" width="540" height="60" rx="9" ry="9" fill="rgb(255, 255, 255)" stroke="#ff3399" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 538px; height: 1px; padding-top: 511px; margin-left: 926px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 21px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: normal; overflow-wrap: normal;"><div style="color: rgb(212, 212, 212); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 126%; font-size: 21px;"><div style="line-height: 126%; font-size: 21px;"><div style="line-height: 126%;"><div style="line-height: 126%;"><span style="color: #569cd6;">void</span>           *<span style="color: #9cdcfe;">virt</span>;<span style="color: rgb(106, 153, 85); font-size: 21px;">      /**&lt; base virtual address */</span></div></div></div></div></div></div></div></foreignObject><text x="1195" y="517" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="21px" text-anchor="middle">void           *virt;      /**&lt; base virtual address...</text></switch></g><rect x="925" y="557" width="540" height="100" rx="15" ry="15" fill="rgb(255, 255, 255)" stroke="#ff3399" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 538px; height: 1px; padding-top: 607px; margin-left: 926px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 21px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: normal; overflow-wrap: normal;"><div style="color: rgb(212, 212, 212); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 16px; font-size: 21px;"><div style="line-height: 16px; font-size: 21px;"><div style="line-height: 126%;"><div style="line-height: 126%;"><div style="line-height: 126%;"><span style="color: #569cd6;">const</span> <span style="color: #4ec9b0;">metal_phys_addr_t</span>    *<span style="color: #9cdcfe;">physmap</span>;<span style="color: #6a9955;">   /**&lt; table of base physical address</span></div><div style="line-height: 126%;"><span style="color: #6a9955;"> of each of the pages in the I/O </span><span style="color: rgb(106, 153, 85);">region*/</span></div></div></div></div></div></div></div></div></foreignObject><text x="1195" y="613" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="21px" text-anchor="middle">const metal_phys_addr_t    *physmap;   /**&lt; table of...</text></switch></g><rect x="925" y="674" width="540" height="60" rx="9" ry="9" fill="rgb(255, 255, 255)" stroke="#ff3399" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 538px; height: 1px; padding-top: 704px; margin-left: 926px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 21px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: normal; overflow-wrap: normal;"><div style="color: rgb(212, 212, 212); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 16px; font-size: 21px;"><div style="line-height: 16px; font-size: 21px;"><div style="line-height: 126%;"><div style="line-height: 126%;"><div style="line-height: 126%;"><span style="color: #4ec9b0;">size_t</span>         <span style="color: #9cdcfe;">size</span>;<span style="color: #6a9955;">/**&lt; size of the I/O region */</span></div></div></div></div></div></div></div></div></foreignObject><text x="1195" y="710" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="21px" text-anchor="middle">size_t         size;/**&lt; size of the I/O region */</text></switch></g><rect x="931.5" y="761" width="541.5" height="70" rx="10.5" ry="10.5" fill="rgb(255, 255, 255)" stroke="#ff3399" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 540px; height: 1px; padding-top: 796px; margin-left: 933px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 21px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: normal; overflow-wrap: normal;"><div style="color: rgb(212, 212, 212); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 16px; font-size: 21px;"><div style="line-height: 16px; font-size: 21px;"><div style="line-height: 126%;"><div style="line-height: 126%;"><div style="line-height: 126%;"><span style="color: #569cd6;">unsigned</span> <span style="color: #569cd6;">long</span>      <span style="color: #9cdcfe;">page_shift</span>;<span style="color: #6a9955;"> /**&lt; page shift of I/O region */</span></div></div></div></div></div></div></div></div></foreignObject><text x="1202" y="802" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="21px" text-anchor="middle">unsigned long      page_shift; /**&lt; page shift of I/...</text></switch></g><rect x="931.5" y="851" width="540" height="70" rx="10.5" ry="10.5" fill="rgb(255, 255, 255)" stroke="#ff3399" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 538px; height: 1px; padding-top: 886px; margin-left: 933px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 21px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: normal; overflow-wrap: normal;"><div style="color: rgb(212, 212, 212); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 16px; font-size: 21px;"><div style="line-height: 16px; font-size: 21px;"><div style="line-height: 126%;"><div style="line-height: 126%;"><span style="color: #4ec9b0;">metal_phys_addr_t</span>  <span style="color: #9cdcfe;">page_mask</span>;<span style="color: #6a9955;">  /**&lt; page mask of I/O region */</span></div></div></div></div></div></div></div></foreignObject><text x="1202" y="892" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="21px" text-anchor="middle">metal_phys_addr_t  page_mask;  /**&lt; page mask of I/O...</text></switch></g><rect x="931.5" y="936" width="540" height="65" rx="9.75" ry="9.75" fill="rgb(255, 255, 255)" stroke="#ff3399" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 538px; height: 1px; padding-top: 969px; margin-left: 933px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 21px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: normal; overflow-wrap: normal;"><div style="color: rgb(212, 212, 212); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 16px; font-size: 21px;"><div style="line-height: 16px; font-size: 21px;"><div style="line-height: 126%;"><div style="line-height: 126%;"><div style="line-height: 126%;"><span style="color: #569cd6;">unsigned</span> <span style="color: #569cd6;">int</span>       <span style="color: #9cdcfe;">mem_flags</span>;<span style="color: #6a9955;">  /**&lt; memory attribute of the </span><span style="color: rgb(106, 153, 85);">I/O region */</span></div></div></div></div></div></div></div></div></foreignObject><text x="1202" y="975" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="21px" text-anchor="middle">unsigned int       mem_flags;  /**&lt; memory attribute...</text></switch></g><rect x="931.5" y="1021" width="540" height="80" rx="12" ry="12" fill="rgb(255, 255, 255)" stroke="#ff3399" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 538px; height: 1px; padding-top: 1061px; margin-left: 933px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 21px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: normal; overflow-wrap: normal;"><div style="color: rgb(212, 212, 212); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 16px; font-size: 21px;"><div style="line-height: 16px; font-size: 21px;"><div style="line-height: 126%;"><div style="line-height: 126%;"><span style="color: #569cd6;">struct</span> <span style="color: #4ec9b0;">metal_io_ops</span>    <span style="color: #9cdcfe;">ops</span>;<span style="color: #6a9955;">        /**&lt; I/O region operations */</span></div></div></div></div></div></div></div></foreignObject><text x="1202" y="1067" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="21px" text-anchor="middle">struct metal_io_ops    ops;        /**&lt; I/O region o...</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>