544 lines
30 KiB
HTML
544 lines
30 KiB
HTML
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||
xmlns:w="urn:schemas-microsoft-com:office:word"
|
||
xmlns:st1="urn:schemas-microsoft-com:office:smarttags"
|
||
xmlns="http://www.w3.org/TR/REC-html40">
|
||
|
||
<head>
|
||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||
<meta name=ProgId content=Word.Document>
|
||
<meta name=Generator content="Microsoft Word 10">
|
||
<meta name=Originator content="Microsoft Word 10">
|
||
<link rel=File-List href="e100bex_files/filelist.xml">
|
||
<title>E100BEX</title>
|
||
<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
|
||
name="PersonName"/>
|
||
<!--[if gte mso 9]><xml>
|
||
<w:WordDocument>
|
||
<w:SpellingState>Clean</w:SpellingState>
|
||
<w:GrammarState>Clean</w:GrammarState>
|
||
<w:Compatibility>
|
||
<w:UseFELayout/>
|
||
</w:Compatibility>
|
||
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
|
||
</w:WordDocument>
|
||
</xml><![endif]--><!--[if !mso]><object
|
||
classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui></object>
|
||
<style>
|
||
st1\:*{behavior:url(#ieooui) }
|
||
</style>
|
||
<![endif]-->
|
||
<style>
|
||
<!--
|
||
/* Font Definitions */
|
||
@font-face
|
||
{font-family:SimSun;
|
||
panose-1:2 1 6 0 3 1 1 1 1 1;
|
||
mso-font-alt:\5B8B\4F53;
|
||
mso-font-charset:134;
|
||
mso-generic-font-family:auto;
|
||
mso-font-pitch:variable;
|
||
mso-font-signature:3 135135232 16 0 262145 0;}
|
||
@font-face
|
||
{font-family:"\@SimSun";
|
||
panose-1:2 1 6 0 3 1 1 1 1 1;
|
||
mso-font-charset:134;
|
||
mso-generic-font-family:auto;
|
||
mso-font-pitch:variable;
|
||
mso-font-signature:3 135135232 16 0 262145 0;}
|
||
@font-face
|
||
{font-family:Verdana;
|
||
panose-1:2 11 6 4 3 5 4 4 2 4;
|
||
mso-font-charset:0;
|
||
mso-generic-font-family:swiss;
|
||
mso-font-pitch:variable;
|
||
mso-font-signature:536871559 0 0 0 415 0;}
|
||
@font-face
|
||
{font-family:"MS Sans Serif";
|
||
panose-1:0 0 0 0 0 0 0 0 0 0;
|
||
mso-font-charset:0;
|
||
mso-generic-font-family:swiss;
|
||
mso-font-format:other;
|
||
mso-font-pitch:variable;
|
||
mso-font-signature:3 0 0 0 1 0;}
|
||
/* Style Definitions */
|
||
p.MsoNormal, li.MsoNormal, div.MsoNormal
|
||
{mso-style-parent:"";
|
||
margin:0in;
|
||
margin-bottom:.0001pt;
|
||
mso-pagination:widow-orphan;
|
||
font-size:12.0pt;
|
||
font-family:"Times New Roman";
|
||
mso-fareast-font-family:"Times New Roman";
|
||
color:black;}
|
||
h2
|
||
{mso-margin-top-alt:auto;
|
||
margin-right:0in;
|
||
mso-margin-bottom-alt:auto;
|
||
margin-left:0in;
|
||
mso-pagination:widow-orphan;
|
||
mso-outline-level:2;
|
||
font-size:18.0pt;
|
||
font-family:"Times New Roman";
|
||
mso-fareast-font-family:SimSun;
|
||
color:black;
|
||
font-weight:bold;}
|
||
h3
|
||
{mso-margin-top-alt:auto;
|
||
margin-right:0in;
|
||
mso-margin-bottom-alt:auto;
|
||
margin-left:0in;
|
||
mso-pagination:widow-orphan;
|
||
mso-outline-level:3;
|
||
font-size:13.5pt;
|
||
font-family:"Times New Roman";
|
||
mso-fareast-font-family:SimSun;
|
||
color:black;
|
||
font-weight:bold;}
|
||
h4
|
||
{mso-margin-top-alt:auto;
|
||
margin-right:0in;
|
||
mso-margin-bottom-alt:auto;
|
||
margin-left:0in;
|
||
mso-pagination:widow-orphan;
|
||
mso-outline-level:4;
|
||
font-size:12.0pt;
|
||
font-family:"Times New Roman";
|
||
mso-fareast-font-family:SimSun;
|
||
color:black;
|
||
font-weight:bold;}
|
||
a:link, span.MsoHyperlink
|
||
{color:blue;
|
||
text-decoration:underline;
|
||
text-underline:single;}
|
||
a:visited, span.MsoHyperlinkFollowed
|
||
{color:purple;
|
||
text-decoration:underline;
|
||
text-underline:single;}
|
||
p
|
||
{mso-margin-top-alt:auto;
|
||
margin-right:0in;
|
||
mso-margin-bottom-alt:auto;
|
||
margin-left:0in;
|
||
mso-pagination:widow-orphan;
|
||
font-size:12.0pt;
|
||
font-family:"Times New Roman";
|
||
mso-fareast-font-family:"Times New Roman";
|
||
color:black;}
|
||
pre
|
||
{margin:0in;
|
||
margin-bottom:.0001pt;
|
||
mso-pagination:widow-orphan;
|
||
tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
|
||
font-size:10.0pt;
|
||
font-family:"Courier New";
|
||
mso-fareast-font-family:"Courier New";
|
||
color:black;}
|
||
span.SpellE
|
||
{mso-style-name:"";
|
||
mso-spl-e:yes;}
|
||
span.GramE
|
||
{mso-style-name:"";
|
||
mso-gram-e:yes;}
|
||
@page Section1
|
||
{size:8.5in 11.0in;
|
||
margin:1.0in 1.25in 1.0in 1.25in;
|
||
mso-header-margin:.5in;
|
||
mso-footer-margin:.5in;
|
||
mso-paper-source:0;}
|
||
div.Section1
|
||
{page:Section1;}
|
||
/* List Definitions */
|
||
@list l0
|
||
{mso-list-id:381560120;
|
||
mso-list-type:hybrid;
|
||
mso-list-template-ids:-351239334 -695840708 -1982296020 1854160056 -372070536 1348993084 1615251444 1623514094 -1314389320 -1345299260;}
|
||
@list l0:level1
|
||
{mso-level-tab-stop:.5in;
|
||
mso-level-number-position:left;
|
||
text-indent:-.25in;}
|
||
@list l0:level2
|
||
{mso-level-tab-stop:1.0in;
|
||
mso-level-number-position:left;
|
||
text-indent:-.25in;}
|
||
@list l0:level3
|
||
{mso-level-tab-stop:1.5in;
|
||
mso-level-number-position:left;
|
||
text-indent:-.25in;}
|
||
@list l0:level4
|
||
{mso-level-tab-stop:2.0in;
|
||
mso-level-number-position:left;
|
||
text-indent:-.25in;}
|
||
@list l0:level5
|
||
{mso-level-tab-stop:2.5in;
|
||
mso-level-number-position:left;
|
||
text-indent:-.25in;}
|
||
@list l0:level6
|
||
{mso-level-tab-stop:3.0in;
|
||
mso-level-number-position:left;
|
||
text-indent:-.25in;}
|
||
@list l0:level7
|
||
{mso-level-tab-stop:3.5in;
|
||
mso-level-number-position:left;
|
||
text-indent:-.25in;}
|
||
@list l0:level8
|
||
{mso-level-tab-stop:4.0in;
|
||
mso-level-number-position:left;
|
||
text-indent:-.25in;}
|
||
@list l0:level9
|
||
{mso-level-tab-stop:4.5in;
|
||
mso-level-number-position:left;
|
||
text-indent:-.25in;}
|
||
@list l1
|
||
{mso-list-id:493496583;
|
||
mso-list-template-ids:866036378;}
|
||
ol
|
||
{margin-bottom:0in;}
|
||
ul
|
||
{margin-bottom:0in;}
|
||
-->
|
||
</style>
|
||
<!--[if gte mso 10]>
|
||
<style>
|
||
/* Style Definitions */
|
||
table.MsoNormalTable
|
||
{mso-style-name:"Table Normal";
|
||
mso-tstyle-rowband-size:0;
|
||
mso-tstyle-colband-size:0;
|
||
mso-style-noshow:yes;
|
||
mso-style-parent:"";
|
||
mso-padding-alt:0in 5.4pt 0in 5.4pt;
|
||
mso-para-margin:0in;
|
||
mso-para-margin-bottom:.0001pt;
|
||
mso-pagination:widow-orphan;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman";}
|
||
</style>
|
||
<![endif]-->
|
||
<meta name=Template content="C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\html.dot">
|
||
<!--[if gte mso 9]><xml>
|
||
<o:shapedefaults v:ext="edit" spidmax="15362"/>
|
||
</xml><![endif]--><!--[if gte mso 9]><xml>
|
||
<o:shapelayout v:ext="edit">
|
||
<o:idmap v:ext="edit" data="1"/>
|
||
</o:shapelayout></xml><![endif]-->
|
||
</head>
|
||
|
||
<body bgcolor=white lang=EN-US link=blue vlink=purple style='tab-interval:.5in'
|
||
leftmargin=8>
|
||
|
||
<div class=Section1>
|
||
|
||
<h2><a name=MYSAMPLE><span style='font-family:Verdana'>E100BEX</span></a><span
|
||
style='font-family:Verdana'> <o:p></o:p></span></h2>
|
||
|
||
<p class=MsoNormal><span style='font-family:Verdana;color:red'>[This is
|
||
preliminary documentation and subject to change.]</span><span style='font-family:
|
||
Verdana'> <o:p></o:p></span></p>
|
||
|
||
<h3><span style='font-family:Verdana'>SUMMARY<o:p></o:p></span></h3>
|
||
|
||
<p><span style='font-size:10.0pt;font-family:Verdana'>This sample is an NDIS 5
|
||
deserialized miniport driver for the Intel EtherExpress<sup>TM</sup> PRO/100+
|
||
Ethernet PCI adapter and the Intel EtherExpress<sup>TM</sup> PRO/100B PCI
|
||
adapter. It illustrates NDIS 4 and NDIS 5 features such as multiple packet
|
||
sends/receives, scatter gather DMA, LBFO, media sense, WMI, and Po</span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>er Management. It also has NDIS
|
||
5.1 miniport features such as cancellation of send packets and PNP event
|
||
handler. This driver comes </span><st1:PersonName><span style='font-size:10.0pt;
|
||
font-family:Verdana'>w</span></st1:PersonName><span style='font-size:10.0pt;
|
||
font-family:Verdana'>ith a KD extension DLL.<o:p></o:p></span></p>
|
||
|
||
<p class=MsoNormal><span style='font-size:10.0pt;font-family:Verdana'>This
|
||
driver supports Plug and Play. The code is 64-bit compliant, and builds
|
||
properly </span><st1:PersonName><span style='font-size:10.0pt;font-family:Verdana'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>ith Microsoft<66> Visual C<> 6.0. <o:p></o:p></span></p>
|
||
|
||
<h3><span style='font-family:Verdana'>BUILDING THE SAMPLE<o:p></o:p></span></h3>
|
||
|
||
<p><span style='font-size:10.0pt;font-family:Verdana'>Run the <b>build</b>
|
||
command from this directory to build the sample. That creates the binary
|
||
E100bex.sys. <o:p></o:p></span></p>
|
||
|
||
<h3><span style='font-family:Verdana'>TOOLS<o:p></o:p></span></h3>
|
||
|
||
<p><span style='font-size:10.0pt;font-family:Verdana'>The NDISTEST tool can be
|
||
used to test some of the features of this driver. Note that this is not a
|
||
production driver, and is not intended to replace the driver in the Windo</span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>s<EFBFBD> 2000 build. <o:p></o:p></span></p>
|
||
|
||
<h3><span style='font-family:Verdana'>CODE TOUR<o:p></o:p></span></h3>
|
||
|
||
<h4><span style='font-family:Verdana'>File Manifest<o:p></o:p></span></h4>
|
||
|
||
<pre><u>Files<span style='mso-spacerun:yes'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span><span
|
||
style='mso-tab-count:1'> </span>Description<o:p></o:p></u></pre><pre>E100BEX.htm<span style='mso-spacerun:yes'><EFBFBD><EFBFBD> </span><span
|
||
style='mso-tab-count:1'> </span>The documentation for this sample (this file)</pre><pre>Net557ex.inf<span style='mso-spacerun:yes'><EFBFBD> </span><span
|
||
style='mso-tab-count:1'> </span>The .inf file for installing the code sample</pre><pre>e100.rc<span style='mso-spacerun:yes'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span><span
|
||
style='mso-tab-count:1'> </span>The resource file for the code sample</pre><pre>e100.mof<span
|
||
style='mso-tab-count:1'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>The WMI mof file for the code sample</pre><pre>precomp.h<span style='mso-spacerun:yes'><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span><span
|
||
style='mso-tab-count:1'> </span>Precompile header</pre><pre><o:p> </o:p></pre><pre>mp.h<span
|
||
style='mso-tab-count:2'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>Miniport generic portion header file</pre><pre>mp_cmn.h<span
|
||
style='mso-tab-count:1'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>Common definitions for the miniport and kd extension dll</pre><pre>mp_dbg.h<span
|
||
style='mso-tab-count:1'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>Debug code definitions and structures</pre><pre>mp_def.h<span
|
||
style='mso-tab-count:1'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>NIC specific definitions<span
|
||
style='mso-tab-count:1'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span></pre><pre>mp_nic.h<span
|
||
style='mso-tab-count:1'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>Function prototypes for mp_nic.c, mp_init.c and mp_req.c</pre><pre>mp_dbg.c<span
|
||
style='mso-tab-count:1'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>Debug-related code</pre><pre>mp_init.c<span
|
||
style='mso-tab-count:1'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>Miniport initialization related routines</pre><pre>mp_main.c<span
|
||
style='mso-tab-count:1'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>DriverEntry and NDIS miniport handlers</pre><pre>mp_nic.c<span
|
||
style='mso-tab-count:1'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>Miniport send/receive routines</pre><pre>mp_req.c<span
|
||
style='mso-tab-count:1'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>Miniport OID related handlers</pre><pre>offload.h<span style='mso-spacerun:yes'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>Task offloading related data structures and function prototypes</pre><pre>offload.c<span style='mso-spacerun:yes'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>Task offloading related functions</pre><pre><o:p> </o:p></pre><pre>e100_557.h<span
|
||
style='mso-tab-count:1'><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>Hard<st1:PersonName>w</st1:PersonName>are definitions and structures for Intel 82557 controllers</pre><pre>e100_def.h<span
|
||
style='mso-tab-count:1'><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>Other hard<st1:PersonName>w</st1:PersonName>are specific definitions, e100_<st1:PersonName>w</st1:PersonName>mi.h included in this file</pre><pre>e100_equ.h<span
|
||
style='mso-tab-count:1'><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>Hard<st1:PersonName>w</st1:PersonName>are specific constant definitions</pre><pre>e100_sup.h<span
|
||
style='mso-tab-count:1'><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>Hard<st1:PersonName>w</st1:PersonName>are specific function prototypes and inline functions</pre><pre>eeprom.c<span style='mso-spacerun:yes'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span><span
|
||
style='mso-tab-count:1'> </span>Routines to access EEPROM information</pre><pre>physet.c<span style='mso-spacerun:yes'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span><span
|
||
style='mso-tab-count:1'> </span>Routines to detect and set up the physical layer</pre><pre>routines.c<span style='mso-spacerun:yes'><EFBFBD><EFBFBD><EFBFBD> </span><span
|
||
style='mso-tab-count:1'> </span>Miscellaneous utility functions</pre><pre><o:p> </o:p></pre><pre>sources.inc<span style='mso-spacerun:yes'><EFBFBD><EFBFBD> </span><span
|
||
style='mso-tab-count:1'> </span>The sources include file</pre><pre>makefile.inc<span
|
||
style='mso-tab-count:1'><EFBFBD><EFBFBD> </span>Used to generate e100_<st1:PersonName>w</st1:PersonName>mi.h from e100.bmf <st1:PersonName>w</st1:PersonName>hich is compiled from e100.mof</pre><pre>50\sources<span
|
||
style='mso-tab-count:1'><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>Sources file to build NDIS 5.0 compliant driver</pre><pre>51\sources<span
|
||
style='mso-tab-count:1'><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>Sources file to build NDIS 5.1 compliant driver</pre><pre><o:p> </o:p></pre><pre>kd\e100kd.c<span
|
||
style='mso-tab-count:1'><EFBFBD><EFBFBD><EFBFBD> </span>The C file for the KD extension DLL (e100kd.dll)</pre><pre>kd\e100kd.def<span
|
||
style='mso-tab-count:1'><EFBFBD> </span>The definition file for the KD extension DLL</pre><pre>kd\e100kd.h<span
|
||
style='mso-tab-count:1'><EFBFBD><EFBFBD><EFBFBD> </span><span class=GramE>The</span> header file for the KD extension DLL</pre><pre>kd\e100kd.rc<span
|
||
style='mso-tab-count:1'><EFBFBD><EFBFBD> </span>The resource file for the KD extension DLL</pre><pre><o:p> </o:p></pre>
|
||
|
||
<h4 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
|
||
style='font-family:Verdana'>Programming Tour<o:p></o:p></span></h4>
|
||
|
||
<p style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
|
||
style='font-size:10.0pt;font-family:Verdana'>Some of the features illustrated
|
||
in this driver are listed belo</span><st1:PersonName><span style='font-size:
|
||
10.0pt;font-family:Verdana'>w</span></st1:PersonName><span style='font-size:
|
||
10.0pt;font-family:Verdana'>, along </span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>ith the files that contain the
|
||
feature.<o:p></o:p></span></p>
|
||
|
||
<ol start=1 type=1>
|
||
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
|
||
mso-list:l0 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
|
||
font-family:Verdana'>NDIS 4: <b>SendPacketsHandler</b><span
|
||
style='mso-bidi-font-weight:bold'>;</span> multiple packets per send
|
||
request are handled (<span class=GramE>MpSendPackets(</span>) in mp_main.c).<o:p></o:p></span></li>
|
||
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
|
||
mso-list:l0 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
|
||
font-family:Verdana'>NDIS 4: <b>NdisMIndicateReceivePacket()</b><span
|
||
style='mso-bidi-font-weight:bold'>;</span> multiple packets per receive
|
||
indication (MpHandleRecvInterrupt() in mp_nic.c).<o:p></o:p></span></li>
|
||
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
|
||
mso-list:l0 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
|
||
font-family:Verdana'>NDIS 4: Receive buffer gro</span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'> and shrink; When the adapter
|
||
driver begins to run out of receive memory, <b>NdisMAllocateSharedMemoryAsyn()</b>
|
||
is called to allocate more shared memory for receive buffers
|
||
(MpHandleRecvInterrupt() in mp_nic.c). When the traffic slo</span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>s do</span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>n, the driver frees the
|
||
memory (MPReturnPacket() in mp_main.c)<o:p></o:p></span></li>
|
||
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
|
||
mso-list:l0 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
|
||
font-family:Verdana'>NDIS 4: NdisMRegisterAdapterShutdo</span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>nHandler() is called at initialization
|
||
time to make sure the adapter has a function that stops generating
|
||
interrupts and receiving packets into main memory (MpInitiliaze() and
|
||
MpShutdo</span><st1:PersonName><span style='font-size:10.0pt;font-family:
|
||
Verdana'>w</span></st1:PersonName><span style='font-size:10.0pt;
|
||
font-family:Verdana'>n() in mp_main.c).<o:p></o:p></span></li>
|
||
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
|
||
mso-list:l0 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
|
||
font-family:Verdana'>NDIS 4: Media disconnect/connect indications are
|
||
supported. This allo</span><st1:PersonName><span style='font-size:10.0pt;
|
||
font-family:Verdana'>w</span></st1:PersonName><span style='font-size:
|
||
10.0pt;font-family:Verdana'>s the driver to tell NDIS </span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>hen the adapter has lost or
|
||
regained link (MpCheckForHang() in mp_main.c).<o:p></o:p></span></li>
|
||
<li class=MsoNormal style='mso-list:l0 level1 lfo3;tab-stops:list .5in;
|
||
mso-layout-grid-align:none;text-autospace:none'><span style='font-size:
|
||
10.0pt;font-family:Verdana'>NDIS 5: </span><span style='font-size:10.0pt;
|
||
font-family:Verdana;mso-fareast-font-family:SimSun;mso-bidi-font-family:
|
||
Verdana;color:windowtext'>This driver is a de-serialized miniport,
|
||
therefore it protects its resources using its o</span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana;mso-fareast-font-family:SimSun;
|
||
mso-bidi-font-family:Verdana;color:windowtext'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana;mso-fareast-font-family:SimSun;
|
||
mso-bidi-font-family:Verdana;color:windowtext'>n spin lock</span><span
|
||
style='font-size:10.0pt;font-family:Verdana;mso-fareast-font-family:SimSun;
|
||
mso-bidi-font-family:Verdana'>s</span><span style='font-size:10.0pt;
|
||
font-family:Verdana;mso-fareast-font-family:SimSun;mso-bidi-font-family:
|
||
Verdana;color:red'> </span><span style='font-size:10.0pt;font-family:Verdana;
|
||
mso-fareast-font-family:SimSun;mso-bidi-font-family:Verdana'>rather than
|
||
relying on <span class=SpellE>Ndis</span> to serialize the calls to the
|
||
driver.</span><span style='font-size:10.0pt;font-family:Verdana'> This
|
||
driver only implements a simple method of using spin lock: it has a <span
|
||
class=GramE><b>NdisAcquireSpinlock(</b></span><b>)</b> at every entry
|
||
point and a <b>NdisReleaseSpinlock()</b> at the return from those entry
|
||
points. The locks could be done more efficiently in a production driver by
|
||
moving the locking closer to the resources in the driver that need to be
|
||
accessed </span><st1:PersonName><span style='font-size:10.0pt;font-family:
|
||
Verdana'>w</span></st1:PersonName><span style='font-size:10.0pt;
|
||
font-family:Verdana'>ith atomic operations.<o:p></o:p></span></li>
|
||
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
|
||
mso-list:l0 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
|
||
font-family:Verdana'>NDIS 5: WMI: There are several examples of using
|
||
GUIDs to advertise custom driver SETs and QUERIES. The E100.mof and
|
||
mp_req.c files implement the functionality, the Makefile.inc is used to
|
||
generate e100_wmi.h file and the e100.rc file includes the .bmf data into
|
||
the driver resource area. By default the private WMI GUIDs provided by the
|
||
driver are only accessible to users with administrator privilege. If the
|
||
driver wants to give SETs(WRITE) or QUERIES(READ) access to users without
|
||
administrator privilege, it must set the corresponding flags to the GUIDs
|
||
which it wants to give access to. <o:p></o:p></span></li>
|
||
<li class=MsoNormal style='color:windowtext;mso-list:l0 level1 lfo3;
|
||
tab-stops:list .5in;mso-layout-grid-align:none;text-autospace:none'><span
|
||
style='font-size:10.0pt;font-family:Verdana;color:black'>NDIS 5: </span><span
|
||
style='font-size:10.0pt;font-family:Verdana;mso-fareast-font-family:SimSun;
|
||
mso-bidi-font-family:Verdana'>Power Management:<span style='color:navy'> </span>This
|
||
<span style='color:navy'>driver</span> demonstrates how to respond to
|
||
Power Management OIDs. It sho</span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana;mso-fareast-font-family:SimSun;
|
||
mso-bidi-font-family:Verdana'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana;mso-fareast-font-family:SimSun;
|
||
mso-bidi-font-family:Verdana'>s ho</span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana;mso-fareast-font-family:SimSun;
|
||
mso-bidi-font-family:Verdana'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana;mso-fareast-font-family:SimSun;
|
||
mso-bidi-font-family:Verdana'> the miniport driver should suspend and
|
||
resume the netcard. The <span style='color:navy'>driver</span> also sets
|
||
WakeUp Patterns on the netcard and enables the <span class=SpellE>netcard</span>
|
||
to </span><st1:PersonName><span style='font-size:10.0pt;font-family:Verdana;
|
||
mso-fareast-font-family:SimSun;mso-bidi-font-family:Verdana'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana;mso-fareast-font-family:SimSun;
|
||
mso-bidi-font-family:Verdana'>ake up the machine on <span class=SpellE>PatternMatch</span>
|
||
(this is only implemented on the 82559 version of the Intel <span
|
||
class=SpellE>NetCard</span>).<o:p></o:p></span></li>
|
||
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
|
||
mso-list:l0 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
|
||
font-family:Verdana'>NDIS 5: <b>LBFO</b>: This driver sho</span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>s ho</span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'> to use LBFO APIs to
|
||
implement LBFO functionality. This driver implements a simple LBFO
|
||
scenario. This driver uses the primary adapter to receive packets. On the
|
||
send side, the driver sends packets on the first available secondary
|
||
adapter. If no secondary adapter is available, the driver sends packets on
|
||
the primary adapter (see mp_main.c).<o:p></o:p></span></li>
|
||
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
|
||
mso-list:l0 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
|
||
font-family:Verdana'>NDIS 5: <b>NdisMInitializeScatterGatherDma</b><span
|
||
style='mso-bidi-font-weight:bold'>;<b> </b></span>this driver al</span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>ays attempts to use scatter
|
||
gather </span><st1:PersonName><span style='font-size:10.0pt;font-family:
|
||
Verdana'>w</span></st1:PersonName><span style='font-size:10.0pt;
|
||
font-family:Verdana'>hich is available in NDIS 5 and later. If this call
|
||
fails (on Win98 and later), it falls back to use map registers.<o:p></o:p></span></li>
|
||
<li class=MsoNormal style='color:navy;mso-list:l0 level1 lfo3;tab-stops:list .5in;
|
||
mso-layout-grid-align:none;text-autospace:none'><b style='mso-bidi-font-weight:
|
||
normal'><span style='font-size:10.0pt;font-family:Verdana;color:black'>OFFLOAD</span></b><span
|
||
style='font-size:10.0pt;font-family:Verdana;color:black'>:<b
|
||
style='mso-bidi-font-weight:normal'> </b></span><span style='font-size:
|
||
10.0pt;font-family:Verdana;mso-fareast-font-family:SimSun;mso-bidi-font-family:
|
||
Verdana;color:windowtext'>This driver sho</span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana;mso-fareast-font-family:SimSun;
|
||
mso-bidi-font-family:Verdana;color:windowtext'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana;mso-fareast-font-family:SimSun;
|
||
mso-bidi-font-family:Verdana;color:windowtext'>s ho</span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana;mso-fareast-font-family:SimSun;
|
||
mso-bidi-font-family:Verdana;color:windowtext'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana;mso-fareast-font-family:SimSun;
|
||
mso-bidi-font-family:Verdana;color:windowtext'> to handle
|
||
OID_TCP_TASK_OFFLOAD to enable/disable task offload capabilities of a NIC,
|
||
and ho</span><st1:PersonName><span style='font-size:10.0pt;font-family:
|
||
Verdana;mso-fareast-font-family:SimSun;mso-bidi-font-family:Verdana;
|
||
color:windowtext'>w</span></st1:PersonName><span style='font-size:10.0pt;
|
||
font-family:Verdana;mso-fareast-font-family:SimSun;mso-bidi-font-family:
|
||
Verdana;color:windowtext'> to handle per-packet information related to
|
||
these capabilities. In particular, the driver implements algorithms for
|
||
TCP/IP checksum offloading and segmentation of large TCP packets on the
|
||
send side. Note that these algorithms are implemented in soft</span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana;mso-fareast-font-family:SimSun;
|
||
mso-bidi-font-family:Verdana;color:windowtext'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana;mso-fareast-font-family:SimSun;
|
||
mso-bidi-font-family:Verdana;color:windowtext'>are purely for illustrative
|
||
purposes. It is expected that these algorithms </span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana;mso-fareast-font-family:SimSun;
|
||
mso-bidi-font-family:Verdana;color:windowtext'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana;mso-fareast-font-family:SimSun;
|
||
mso-bidi-font-family:Verdana;color:windowtext'>ould be implemented in hard</span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana;mso-fareast-font-family:SimSun;
|
||
mso-bidi-font-family:Verdana;color:windowtext'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana;mso-fareast-font-family:SimSun;
|
||
mso-bidi-font-family:Verdana;color:windowtext'>are. Shipping drivers
|
||
should not perform task offload in soft</span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana;mso-fareast-font-family:SimSun;
|
||
mso-bidi-font-family:Verdana;color:windowtext'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana;mso-fareast-font-family:SimSun;
|
||
mso-bidi-font-family:Verdana;color:windowtext'>are.</span><span
|
||
style='font-size:10.0pt;font-family:Arial;mso-fareast-font-family:SimSun'><o:p></o:p></span></li>
|
||
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
|
||
mso-list:l0 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
|
||
font-family:Verdana'>NDIS 5.1: Send packet cancellation. The <b>CancelSendPacketsHandler
|
||
</b>allo</span><st1:PersonName><span style='font-size:10.0pt;font-family:
|
||
Verdana'>w</span></st1:PersonName><span style='font-size:10.0pt;
|
||
font-family:Verdana'>s protocols to cancel pending send packets </span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>hich are queued in the
|
||
miniport send queue (MPCancelSendPackets() in mp_main.c).<o:p></o:p></span></li>
|
||
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
|
||
mso-list:l0 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
|
||
font-family:Verdana'>NDIS 5.1: PNP event notification handler. The
|
||
miniport drivers can have a <b>PnPEventNotifyHandler </b>to process
|
||
anything necessary </span><st1:PersonName><span style='font-size:10.0pt;
|
||
font-family:Verdana'>w</span></st1:PersonName><span style='font-size:
|
||
10.0pt;font-family:Verdana'>hen a PNP event happens (MPPnPEventNotify() in
|
||
mp_main.c). <o:p></o:p></span></li>
|
||
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
|
||
mso-list:l0 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
|
||
font-family:Verdana'>NDIS 5.1: AdapterShutdo</span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>nHandler is no</span><st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'>w</span></st1:PersonName><span
|
||
style='font-size:10.0pt;font-family:Verdana'> a standard miniport handler
|
||
starting NDIS 5.1. It eliminates the need to call <span class=SpellE>NdisMRegisterAdapterShutdo</span></span><st1:PersonName><span
|
||
class=SpellE><span style='font-size:10.0pt;font-family:Verdana'>w</span></span></st1:PersonName><span
|
||
class=SpellE><span style='font-size:10.0pt;font-family:Verdana'>nhandler</span></span><span
|
||
style='font-size:10.0pt;font-family:Verdana'>.<o:p></o:p></span></li>
|
||
</ol>
|
||
|
||
<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
|
||
margin-left:.25in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
|
||
style='font-size:10.0pt;font-family:Verdana'><o:p> </o:p></span></p>
|
||
|
||
<p align=center style='text-align:center;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
|
||
style='font-size:10.0pt;font-family:Verdana'><a href="#top">Top of page</a> <o:p></o:p></span></p>
|
||
|
||
<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0 width=624
|
||
style='width:6.5in;mso-cellspacing:0in;mso-padding-alt:0in 0in 0in 0in'>
|
||
<tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:1.5pt'>
|
||
<td style='background:aqua;padding:.75pt .75pt .75pt .75pt;height:1.5pt'>
|
||
<p class=MsoNormal><o:p> </o:p></p>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
|
||
<p style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
|
||
style='font-size:7.5pt;font-family:"MS Sans Serif"'><EFBFBD> 1999 Microsoft
|
||
Corporation</span><span style='font-size:10.0pt;font-family:Verdana'> <o:p></o:p></span></p>
|
||
|
||
</div>
|
||
|
||
</body>
|
||
|
||
</html>
|