ZealOS/docs/Home/Net/Protocols/Ethernet.CC.html
TomAwezome 1b75d91002 Fix Mount AHCI Port selection.
Add arg to SATARep to specify drive types to show.
Add checks in AHCIPortInit to verify port signatures, add helper method to get signatures from port.
2021-08-02 16:40:05 -04:00

83 lines
5.4 KiB
HTML
Executable file

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=US-ASCII">
<meta name="generator" content="ZealOS V0.13">
<style type="text/css">
body {background-color:#fef1f0;}
.cF0{color:#000000;background-color:#fef1f0;}
.cF1{color:#0148a4;background-color:#fef1f0;}
.cF2{color:#3b7901;background-color:#fef1f0;}
.cF3{color:#057c7e;background-color:#fef1f0;}
.cF4{color:#bb2020;background-color:#fef1f0;}
.cF5{color:#9e42ae;background-color:#fef1f0;}
.cF6{color:#b57901;background-color:#fef1f0;}
.cF7{color:#b2b6af;background-color:#fef1f0;}
.cF8{color:#555753;background-color:#fef1f0;}
.cF9{color:#678fbb;background-color:#fef1f0;}
.cFA{color:#82bc49;background-color:#fef1f0;}
.cFB{color:#0097a2;background-color:#fef1f0;}
.cFC{color:#e26a6a;background-color:#fef1f0;}
.cFD{color:#c671bc;background-color:#fef1f0;}
.cFE{color:#c7ab00;background-color:#fef1f0;}
.cFF{color:#fef1f0;background-color:#fef1f0;}
</style>
</head>
<body>
<pre style="font-family:monospace;font-size:12pt">
<a name="l1"></a><span class=cF1>class</span><span class=cF0> CEthernetFrame
<a name="l2"></a>{
<a name="l3"></a> </span><span class=cF1>U8</span><span class=cF0> source_address[</span><span class=cFE>6</span><span class=cF0>];
<a name="l4"></a> </span><span class=cF1>U8</span><span class=cF0> padding[</span><span class=cFE>2</span><span class=cF0>];
<a name="l5"></a> </span><span class=cF1>U8</span><span class=cF0> destination_address[</span><span class=cFE>6</span><span class=cF0>];
<a name="l6"></a> </span><span class=cF9>U16</span><span class=cF0> ethertype;
<a name="l7"></a>
<a name="l8"></a> </span><span class=cF1>U8</span><span class=cF0> *data;
<a name="l9"></a>
<a name="l10"></a> </span><span class=cF9>I64</span><span class=cF0> length;
<a name="l11"></a>};
<a name="l12"></a>
<a name="l13"></a></span><span class=cF1>class</span><span class=cF0> CEthernetGlobals
<a name="l14"></a>{
<a name="l15"></a> </span><span class=cF1>U8</span><span class=cF0> ethernet_null[</span><span class=cFE>6</span><span class=cF0>];
<a name="l16"></a> </span><span class=cF1>U8</span><span class=cF0> ethernet_broadcast[</span><span class=cFE>6</span><span class=cF0>];
<a name="l17"></a>
<a name="l18"></a>} ethernet_globals;
<a name="l19"></a>
<a name="l20"></a></span><span class=cF1>U0</span><span class=cF0> EthernetGlobalsInit()
<a name="l21"></a>{
<a name="l22"></a> </span><span class=cF9>I64</span><span class=cF0> i;
<a name="l23"></a> </span><span class=cF1>for</span><span class=cF0> (i = </span><span class=cFE>0</span><span class=cF0>; i &lt; </span><span class=cFE>6</span><span class=cF0>; i++)
<a name="l24"></a> </span><span class=cF7>{</span><span class=cF0>
<a name="l25"></a> ethernet_globals.ethernet_null[i] = </span><span class=cFE>0</span><span class=cF0>;
<a name="l26"></a> ethernet_globals.ethernet_broadcast[i] = </span><span class=cFE>0xFF</span><span class=cF0>;
<a name="l27"></a> </span><span class=cF7>}</span><span class=cF0>
<a name="l28"></a>}
<a name="l29"></a>
<a name="l30"></a></span><span class=cF2>//TODO: check length , figure out the length+4 </span><span class=cF0>
<a name="l31"></a></span><span class=cF1>U0</span><span class=cF0> EthernetFrameParse(CEthernetFrame *frame_out, </span><span class=cF1>U8</span><span class=cF0> *frame, </span><span class=cF9>U16</span><span class=cF0> length)
<a name="l32"></a>{
<a name="l33"></a> </span><span class=cF2>//TODO: Check length ! We need to figure out what</span><span class=cF0>
<a name="l34"></a> </span><span class=cF2>//lengths are appropriate</span><span class=cF0>
<a name="l35"></a>
<a name="l36"></a> </span><span class=cF2>//Shrine also says MemCopy has a</span><span class=cF0>
<a name="l37"></a> </span><span class=cF2>//high overhead. Almost tempted to say that means that a lot</span><span class=cF0>
<a name="l38"></a> </span><span class=cF2>//of the current system should be done with less extra allocation</span><span class=cF0>
<a name="l39"></a> </span><span class=cF2>//altogether, more passing.</span><span class=cF0>
<a name="l40"></a> </span><span class=cF2>//In practice, MemCopy causes the most slowdown on bare-metal.</span><span class=cF0>
<a name="l41"></a>
<a name="l42"></a> NetLog(</span><span class=cF6>&quot;ETHERNET FRAME PARSE: Parsing frame, copying out to frame_out param.&quot;</span><span class=cF0>);
<a name="l43"></a>
<a name="l44"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(frame_out-&gt;destination_address, frame, MAC_ADDRESS_LENGTH);
<a name="l45"></a>
<a name="l46"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(frame_out-&gt;source_address, frame + MAC_ADDRESS_LENGTH, MAC_ADDRESS_LENGTH);
<a name="l47"></a>
<a name="l48"></a> frame_out-&gt;ethertype = frame[ETHERNET_ETHERTYPE_OFFSET + </span><span class=cFE>1</span><span class=cF0>] | frame[ETHERNET_ETHERTYPE_OFFSET] &lt;&lt; </span><span class=cFE>8</span><span class=cF0>;
<a name="l49"></a>
<a name="l50"></a> frame_out-&gt;data = frame + ETHERNET_DATA_OFFSET;
<a name="l51"></a>
<a name="l52"></a> frame_out-&gt;length = length - ETHERNET_MAC_HEADER_LENGTH - </span><span class=cFE>4</span><span class=cF0>; </span><span class=cF2>// He has a comment literally just saying &quot;??&quot;. + or - 4?</span><span class=cF0>
<a name="l53"></a>}
<a name="l54"></a>
<a name="l55"></a>EthernetGlobalsInit;</span></pre></body>
</html>