admin
base
com
developer
drivers
apm
ddk
dot4
drivers
filters
ftapi
inc
input
kmpi
ksfilter
net
irda
ms
e100bex
50
51
kd
lib
private
testwmi
dirs
e100.mof
e100.rc
e100_557.h
e100_def.h
e100_equ.h
e100_sup.h
e100bex.htm
eeprom.c
mp.h
mp_cmn.h
mp_dbg.c
mp_dbg.h
mp_def.h
mp_init.c
mp_main.c
mp_nic.c
mp_nic.h
mp_req.c
net557ex.inf
offload.c
offload.h
physet.c
precomp.h
routines.c
ne2000
dirs
project.mk
nec
sna
dirs
nlsmsg
parallel
published
sac
serial
smartcrd
sound
storage
tpg
video
watchdog
wdm
wmilib
dirs
project.mk
ds
enduser
inetcore
inetsrv
loc
mergedcomponents
multimedia
net
printscan
public
published
sdktools
shell
termsrv
tools
windows
dirs
makefil0
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>
|